diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/loanschedule/domain/AbstractLoanScheduleGenerator.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/loanschedule/domain/AbstractLoanScheduleGenerator.java index af149f741..82ba4fbac 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/loanschedule/domain/AbstractLoanScheduleGenerator.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/loanschedule/domain/AbstractLoanScheduleGenerator.java @@ -132,9 +132,7 @@ public abstract class AbstractLoanScheduleGenerator implements LoanScheduleGener updateAmortization(mc, loanApplicationTerms, scheduleParams.getPeriodNumber(), scheduleParams.getOutstandingBalance()); if (loanApplicationTerms.isMultiDisburseLoan()) { - // fetches the first tranche amount and also updates other - // tranche - // details to map + /* fetches the first tranche amount and also updates other tranche details to map */ BigDecimal disburseAmt = getDisbursementAmount(loanApplicationTerms, scheduleParams.getPeriodStartDate(), periods, chargesDueAtTimeOfDisbursement, scheduleParams.getDisburseDetailMap(), scheduleParams.applyInterestRecalculation()); scheduleParams.setPrincipalToBeScheduled(Money.of(currency, disburseAmt)); @@ -1918,7 +1916,17 @@ public abstract class AbstractLoanScheduleGenerator implements LoanScheduleGener principal = principal.add(disbursementData.amount()); } else if (!excludePastUndisbursed || disbursementData.isDisbursed() || !disbursementData.disbursementDate().isBefore(DateUtils.getLocalDateOfTenant())) { - disurseDetail.put(disbursementData.disbursementDate(), Money.of(currency, disbursementData.amount())); + /* + * JW: sums up amounts by disbursal date in case of side-effect issues. Original assumed that there were + * no duplicate disbursal dates and 'put' each amount into the map keyed by date + */ + Money prevsum = disurseDetail.get(disbursementData.disbursementDate()); + BigDecimal sumToNow = BigDecimal.ZERO; + if (prevsum != null) { + sumToNow = prevsum.getAmount(); + } + sumToNow = sumToNow.add(disbursementData.amount()); + disurseDetail.put(disbursementData.disbursementDate(), Money.of(currency, sumToNow)); } } return principal; diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanReadPlatformServiceImpl.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanReadPlatformServiceImpl.java index 029effa8a..3fc27eec7 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanReadPlatformServiceImpl.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanReadPlatformServiceImpl.java @@ -1162,22 +1162,20 @@ public class LoanReadPlatformServiceImpl implements LoanReadPlatformService { BigDecimal principal = BigDecimal.ZERO; for (final DisbursementData data : disbursementData) { if (fromDate.equals(this.disbursement.disbursementDate()) && data.disbursementDate().equals(fromDate)) { - if (periods.size() == 0) { - principal = principal.add(data.amount()); - LoanSchedulePeriodData periodData = null; - if (data.getChargeAmount() == null) { - periodData = LoanSchedulePeriodData.disbursementOnlyPeriod(data.disbursementDate(), data.amount(), - disbursementChargeAmount, data.isDisbursed()); - } else { - periodData = LoanSchedulePeriodData.disbursementOnlyPeriod(data.disbursementDate(), data.amount(), - disbursementChargeAmount.add(data.getChargeAmount()).subtract(waivedChargeAmount), - data.isDisbursed()); - } - if (periodData != null) { - periods.add(periodData); - } - this.outstandingLoanPrincipalBalance = this.outstandingLoanPrincipalBalance.add(data.amount()); + principal = principal.add(data.amount()); + LoanSchedulePeriodData periodData = null; + if (data.getChargeAmount() == null) { + periodData = LoanSchedulePeriodData.disbursementOnlyPeriod(data.disbursementDate(), data.amount(), + disbursementChargeAmount, data.isDisbursed()); + } else { + periodData = LoanSchedulePeriodData.disbursementOnlyPeriod(data.disbursementDate(), data.amount(), + disbursementChargeAmount.add(data.getChargeAmount()).subtract(waivedChargeAmount), + data.isDisbursed()); } + if (periodData != null) { + periods.add(periodData); + } + this.outstandingLoanPrincipalBalance = this.outstandingLoanPrincipalBalance.add(data.amount()); } else if (data.isDueForDisbursement(fromDate, dueDate)) { if (!excludePastUndisbursed || (excludePastUndisbursed && (data.isDisbursed() || !data.disbursementDate().isBefore(LocalDate.now(DateUtils.getDateTimeZoneOfTenant()))))) { diff --git a/integration-tests/.temp-ClientLoanIntegrationMultipleDisbursementsTest-classpath-arg-1646923073969.txt b/integration-tests/.temp-ClientLoanIntegrationMultipleDisbursementsTest-classpath-arg-1646923073969.txt new file mode 100644 index 000000000..baf29bf0c --- /dev/null +++ b/integration-tests/.temp-ClientLoanIntegrationMultipleDisbursementsTest-classpath-arg-1646923073969.txt @@ -0,0 +1 @@ +-classpath C:\dev\johnwfineract\fineract\integration-tests\bin\test;\integration-tests\bin\default;C:\dev\johnwfineract\fineract\fineract-provider\bin\main;C:\dev\johnwfineract\fineract\fineract-provider\bin\test;\fineract-provider\bin\default;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\org.springframework.boot\spring-boot-starter-web\2.6.4\4aa74a41a8ff99e256433805b0ee63a6053d6b6c\spring-boot-starter-web-2.6.4.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\org.springframework.boot\spring-boot-starter-security\2.6.4\9a7e50fe19729fc0d951b2fb1d3f6033f0a44db5\spring-boot-starter-security-2.6.4.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\org.springframework.boot\spring-boot-starter-cache\2.6.4\e39512b50c4a39b01358ea7a54ec7b58f97bf103\spring-boot-starter-cache-2.6.4.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\org.springframework.boot\spring-boot-starter-oauth2-resource-server\2.6.4\883dadc8c80c78af22bc974a03ffe7fa0bcf7155\spring-boot-starter-oauth2-resource-server-2.6.4.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\org.glassfish.jersey.media\jersey-media-multipart\2.35\5181de4ae2c81147cb788e946e96c06a9765e84f\jersey-media-multipart-2.35.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\org.springframework\spring-jms\5.3.16\bfe939f13692ddc12f437db1435466ed7f2e488\spring-jms-5.3.16.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\org.springframework\spring-context-support\5.3.16\6318a08feb8d4980bcd5af4efe537834a4b8dd43\spring-context-support-5.3.16.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\com.google.cloud.sql\mysql-socket-factory-connector-j-8\1.4.4\bbe7121e64b9a38eedb0a1f929b95979144c890c\mysql-socket-factory-connector-j-8-1.4.4.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\com.google.cloud.sql\jdbc-socket-factory-core\1.4.4\e5a3ad309e46ad04b789045d6864d00f0b1ba8b1\jdbc-socket-factory-core-1.4.4.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\com.google.apis\google-api-services-sqladmin\v1beta4-rev20220215-1.32.1\bc1c245ed7b3237f0dbe87a97ba7ef9d4e99744a\google-api-services-sqladmin-v1beta4-rev20220215-1.32.1.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\com.google.api-client\google-api-client\1.33.2\2c7918d74e3cd530bb3ea76b2de100e1734949c2\google-api-client-1.33.2.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\com.google.auth\google-auth-library-oauth2-http\1.5.3\7cec7073dfdcce538bc8f6664d7f95427e6d06dc\google-auth-library-oauth2-http-1.5.3.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\com.google.http-client\google-http-client-gson\1.41.4\fa665c1c573765dd858bc34931ad747e4ed11efe\google-http-client-gson-1.41.4.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\com.google.oauth-client\google-oauth-client\1.33.0\de6ab408602db40d7fe6af474fd42e466e0f1fef\google-oauth-client-1.33.0.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\com.google.http-client\google-http-client-apache-v2\1.41.2\1d2c0a2d5a48a1597ede7208871f445d3791a5f3\google-http-client-apache-v2-1.41.2.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\com.google.http-client\google-http-client\1.41.4\f62e822a285a85322e976ca5840c0ce514c95e51\google-http-client-1.41.4.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\io.opencensus\opencensus-contrib-http-util\0.31.0\3c8c3ead38d762d7f50c5571b05baf724474c5a5\opencensus-contrib-http-util-0.31.0.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\com.google.guava\guava\31.1-jre\60458f877d055d0c9114d9e1a2efb737b4bc282c\guava-31.1-jre.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\com.squareup.retrofit2\converter-gson\2.9.0\fc93484fc67ab52b1e0ccbdaa3922d8a6678e097\converter-gson-2.9.0.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\com.google.code.gson\gson\2.9.0\8a1167e089096758b49f9b34066ef98b2f4b37aa\gson-2.9.0.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\jakarta.jms\jakarta.jms-api\2.0.3\c3267a1a8129ba26e1093e7b51ae296891c5fa17\jakarta.jms-api-2.0.3.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\jakarta.management.j2ee\jakarta.management.j2ee-api\1.1.4\dbbe7575f97efd0b04f3a8455cf82c256c853055\jakarta.management.j2ee-api-1.1.4.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\com.squareup.retrofit2\retrofit\2.9.0\d8fdfbd5da952141a665a403348b74538efc05ff\retrofit-2.9.0.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\com.squareup.okhttp3\okhttp-urlconnection\4.9.3\aab03372051ecd07ee6159ce000edff046d2a1f8\okhttp-urlconnection-4.9.3.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\com.squareup.okhttp3\okhttp\4.9.3\b0b14b3d12980912723fb8b66afb48dcda742fcb\okhttp-4.9.3.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\org.mnode.ical4j\ical4j\3.1.3\503b9c94c849c7a8ca65ae8d9915e3197f19930d\ical4j-3.1.3.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\org.apache.commons\commons-lang3\3.12.0\c6842c86792ff03b9f1d1fe2aab8dc23aa6c6f0e\commons-lang3-3.12.0.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\org.apache.tika\tika-core\2.3.0\aaed656e1acf142da412d468405038104c0cf38b\tika-core-2.3.0.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\commons-io\commons-io\2.11.0\a2503f302b11ebde7ebc3df41daebe0e4eea3689\commons-io-2.11.0.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\org.apache.poi\poi-ooxml\4.1.2\87d9a22aa9a7dd26e80c360e709f7ee02e32ab3b\poi-ooxml-4.1.2.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\org.apache.poi\poi\4.1.2\964bf41cf68bce08e4ef6b2279b559fdf8d454f4\poi-4.1.2.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\org.apache.poi\poi-ooxml-schemas\4.1.2\550cc22a598c0b0a51d1f55f8371e83c1229802d\poi-ooxml-schemas-4.1.2.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\org.liquibase\liquibase-core\4.8.0\73ca7ad6eb99db6d3ec2ac738d2e27f425498178\liquibase-core-4.8.0.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\com.github.librepdf\openpdf\1.3.27\3f547019741139484111f441655eaced9642fc5f\openpdf-1.3.27.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\com.github.spullara.mustache.java\compiler\0.9.10\6111ae24e3be9ecbd75f5fe908583fc14b4f0174\compiler-0.9.10.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\com.jayway.jsonpath\json-path\2.7.0\f9d7d9659f2694e61142046ff8a216c047f263e8\json-path-2.7.0.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\javax.cache\cache-api\1.1.1\c56fb980eb5208bfee29a9a5b9d951aba076bd91\cache-api-1.1.1.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\com.github.spotbugs\spotbugs-annotations\4.6.0\e5adc84bbe474f094d36b11ba8c2f049fc186632\spotbugs-annotations-4.6.0.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\io.swagger.core.v3\swagger-annotations\2.1.13\3ad230ab86d22b3d8e219d528a91c0cda02aaaa7\swagger-annotations-2.1.13.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\org.webjars\webjars-locator-core\0.50\d1ae68f5fea4f8e36e1d9adfd1ac02463c43894a\webjars-locator-core-0.50.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\org.apache.commons\commons-email\1.5\e8e677c6362eba14ff3c476ba63ccb83132dbd52\commons-email-1.5.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\org.springframework.boot\spring-boot-starter-jersey\2.6.4\f97ac707f58ee791ace8ee34a84d3b6f273e73f0\spring-boot-starter-jersey-2.6.4.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\org.dom4j\dom4j\2.1.3\a75914155a9f5808963170ec20653668a2ffd2fd\dom4j-2.1.3.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\org.glassfish.jersey.media\jersey-media-json-jackson\2.35\6383927e15ecb4baeef2cf0d3373b1ff1795c062\jersey-media-json-jackson-2.35.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\org.apache.activemq\activemq-broker\5.16.4\512a87591a270fd118fff668f86daafb8fcab393\activemq-broker-5.16.4.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\org.springframework.boot\spring-boot-starter-json\2.6.4\9aa13f5bd6e09510d89ec3874118f027613a9565\spring-boot-starter-json-2.6.4.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\com.amazonaws\aws-java-sdk-s3\1.12.175\249b8c4edb0aad09276343fef6e8754cd5a8cb73\aws-java-sdk-s3-1.12.175.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\com.amazonaws\aws-java-sdk-kms\1.12.175\62e9363a3d4674011ac148d77d394ee288352391\aws-java-sdk-kms-1.12.175.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\com.amazonaws\aws-java-sdk-core\1.12.175\d3b5ee028a214e8dacc9a3b45e5e0d63efbe6bf6\aws-java-sdk-core-1.12.175.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\com.amazonaws\jmespath-java\1.12.175\3b4a55d8a093ac26a0fd08606ec3ba5b4f32a43c\jmespath-java-1.12.175.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\com.fasterxml.jackson.datatype\jackson-datatype-jdk8\2.13.1\8ecfa9bcd714269fdf22c33f9fd00d0643bd0e21\jackson-datatype-jdk8-2.13.1.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\com.fasterxml.jackson.datatype\jackson-datatype-jsr310\2.13.1\1ece5a87b59701328215e0083448b4d451857cbd\jackson-datatype-jsr310-2.13.1.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\com.fasterxml.jackson.module\jackson-module-parameter-names\2.13.1\cbeec2259213c555ef451a2e05f35ed1dbfbf799\jackson-module-parameter-names-2.13.1.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\com.fasterxml.jackson.dataformat\jackson-dataformat-cbor\2.13.1\35cc80045c638fe6a383d64c87f2d513502abffa\jackson-dataformat-cbor-2.13.1.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\com.fasterxml.jackson.core\jackson-databind\2.13.1\698b2d2b15d9a1b7aae025f1d9f576842285e7f6\jackson-databind-2.13.1.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\com.fasterxml.jackson.core\jackson-core\2.13.1\51ae921a2ed1e06ca8876f12f32f265e83c0b2b8\jackson-core-2.13.1.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\com.fasterxml.jackson.core\jackson-annotations\2.13.1\1cbcbe4623113e6af92ccaa89884a345270f1a87\jackson-annotations-2.13.1.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\com.fasterxml.jackson.module\jackson-module-jaxb-annotations\2.13.1\63de86abf14db6ef940b21a50eaf5cadce0a6627\jackson-module-jaxb-annotations-2.13.1.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\jakarta.xml.bind\jakarta.xml.bind-api\2.3.3\48e3b9cfc10752fba3521d6511f4165bea951801\jakarta.xml.bind-api-2.3.3.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\org.springframework.boot\spring-boot-starter-data-jpa\2.6.4\f12f4ceb6765c1ab892a6bc72dad5aaad670a87f\spring-boot-starter-data-jpa-2.6.4.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\org.eclipse.persistence\org.eclipse.persistence.jpa\2.7.10\4e903136ab19889208e23c3c87b77dbbfd986de5\org.eclipse.persistence.jpa-2.7.10.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\org.quartz-scheduler\quartz\2.3.2\18a6d6b5a40b77bd060b34cb9f2acadc4bae7c8a\quartz-2.3.2.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\org.ehcache\ehcache\3.9.9\6378b7f9b20d8e2608045e89a0e1970452eb9e65\ehcache-3.9.9.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\org.mariadb.jdbc\mariadb-java-client\2.7.5\9dd29797ecabe7d2e7fa892ec6713a5552cfcc59\mariadb-java-client-2.7.5.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\org.postgresql\postgresql\42.3.3\6f639af368afda4c5a3e77a6299262c501e67076\postgresql-42.3.3.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\org.springframework.boot\spring-boot-starter-validation\2.6.4\6fb780b99d1b895918918f30979d61f9212f424b\spring-boot-starter-validation-2.6.4.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\org.springframework.boot\spring-boot-starter-aop\2.6.4\13e3695074a176ca4e22543b084943e5932b3b5f\spring-boot-starter-aop-2.6.4.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\org.springframework.boot\spring-boot-starter-jdbc\2.6.4\19047bf41d1f01a3b5e82f90ac77dceefadda943\spring-boot-starter-jdbc-2.6.4.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\org.springframework.boot\spring-boot-starter\2.6.4\31adf5f726b6a5703815b99056110b96db7eff58\spring-boot-starter-2.6.4.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\org.springframework.boot\spring-boot-starter-tomcat\2.6.4\7f5937c60c8f556402e4970c4bb657f92b653f2b\spring-boot-starter-tomcat-2.6.4.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\org.springframework\spring-webmvc\5.3.16\18e0d7a9cf1c43b100296f86f61b58821dd1e6b9\spring-webmvc-5.3.16.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\org.springframework.security\spring-security-oauth2-resource-server\5.6.2\4c784c23212b2457faebd5293b25f61af6461488\spring-security-oauth2-resource-server-5.6.2.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\org.springframework.security\spring-security-web\5.6.2\96e43e64813c7f6360a2730fb3d65c1571081fb6\spring-security-web-5.6.2.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\org.glassfish.jersey.ext\jersey-spring5\2.35\78bf4a8bc981e09a9a97c6dfbe8e97a2850fc6f2\jersey-spring5-2.35.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\org.springframework.security\spring-security-oauth2-jose\5.6.2\47b1ae7834fe1fb246613cce67129d9a1e754901\spring-security-oauth2-jose-5.6.2.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\org.springframework.security\spring-security-oauth2-core\5.6.2\4f7ad39802bab0c628767303af7562d8d5d8bc31\spring-security-oauth2-core-5.6.2.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\org.springframework\spring-web\5.3.16\224ae9b45e138034980a423e2f85d7bd63539a49\spring-web-5.3.16.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\org.springframework.security\spring-security-config\5.6.2\7f2a684be033018f97ff6c0aaf0ff51a77e7c394\spring-security-config-5.6.2.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\org.springframework.security\spring-security-core\5.6.2\8977671e16f50dc43b29802fc21e676bef579ba4\spring-security-core-5.6.2.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\org.springframework.data\spring-data-jpa\2.6.2\aa7da518dee4b20433c7e055ef5f2cda584f412f\spring-data-jpa-2.6.2.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\org.springframework.boot\spring-boot-autoconfigure\2.6.4\36e75a2781fc604ac042945eed8be2fe049731df\spring-boot-autoconfigure-2.6.4.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\org.springframework.boot\spring-boot\2.6.4\356c0ee25794ca46d8344d13cffbc30bfae1dc0e\spring-boot-2.6.4.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\org.springframework\spring-context\5.3.16\efb9c749b335bf62dc07c1674e9d76d382a027e5\spring-context-5.3.16.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\org.springframework\spring-aop\5.3.16\d61c0545e0395de608be52db1cccb60ba841a26b\spring-aop-5.3.16.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\org.glassfish.jersey.containers\jersey-container-servlet\2.35\898ef84b72e75788811dd709fe7c7051f61a943e\jersey-container-servlet-2.35.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\org.glassfish.jersey.containers\jersey-container-servlet-core\2.35\7cc48f2529b921f25a020c821dde23753f6e60bb\jersey-container-servlet-core-2.35.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\org.glassfish.jersey.ext\jersey-bean-validation\2.35\25db0a3afa88b8e9f2995ca21f7dff7abc70c4b0\jersey-bean-validation-2.35.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\org.glassfish.jersey.core\jersey-server\2.35\c6efc2ee82d2550e6385a7f7b1c08651f71afb7a\jersey-server-2.35.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\org.glassfish.jersey.core\jersey-client\2.35\ea92be0dd34d0b298930a7514e715783f4eaba97\jersey-client-2.35.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\org.glassfish.jersey.inject\jersey-hk2\2.35\2be6d2227081028566e8e2b0fc6a1abbaecf56f7\jersey-hk2-2.35.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\org.glassfish.jersey.core\jersey-common\2.35\2f15ec1b3a3598d6b12d4b0c6ff6f0905f5e5b4c\jersey-common-2.35.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\org.jvnet.mimepull\mimepull\1.9.15\60f9a7991ad9ec1a280db8deea216a91c10aae74\mimepull-1.9.15.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\org.springframework\spring-messaging\5.3.16\6d4e53dee488a4ccaafd612133b11d2316872c28\spring-messaging-5.3.16.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\org.springframework\spring-orm\5.3.16\74e2e8227522a9f369b266b66fd71bf416d04a2f\spring-orm-5.3.16.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\org.springframework\spring-jdbc\5.3.16\456645153d6a5ed62b3d27750ee1b3c34b460b71\spring-jdbc-5.3.16.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\org.springframework\spring-tx\5.3.16\ae9be43379f2967e015ace189d47728a99f18220\spring-tx-5.3.16.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\org.springframework.data\spring-data-commons\2.6.2\b86982771adfa51fdffbad50bed8ade75ac0710e\spring-data-commons-2.6.2.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\org.springframework\spring-beans\5.3.16\15decec5cea7a91423272daaae6f5d050c23cf3b\spring-beans-5.3.16.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\org.springframework\spring-expression\5.3.16\831a17ce70686c571f3c05c4bcfb81012c5814df\spring-expression-5.3.16.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\org.springframework\spring-core\5.3.16\db1b277cd548c725144580dda8703ce179fb3769\spring-core-5.3.16.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\com.google.guava\failureaccess\1.0.1\1dcf1de382a0bf95a3d8b0849546c88bac1292c9\failureaccess-1.0.1.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\com.google.guava\listenablefuture\9999.0-empty-to-avoid-conflict-with-guava\b421526c5f297295adef1c886e5246c39d4ac629\listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\com.google.code.findbugs\jsr305\3.0.2\25ea2e8b0c338a877313bd4672d3fe056ea78f0d\jsr305-3.0.2.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\org.checkerframework\checker-qual\3.12.0\d5692f0526415fcc6de94bb5bfbd3afd9dd3b3e5\checker-qual-3.12.0.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\com.google.errorprone\error_prone_annotations\2.11.0\c5a0ace696d3f8b1c1d8cc036d8c03cc0cbe6b69\error_prone_annotations-2.11.0.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\com.google.j2objc\j2objc-annotations\1.3\ba035118bc8bac37d7eff77700720999acd9986d\j2objc-annotations-1.3.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\com.squareup.okio\okio\2.8.0\49b64e09d81c0cc84b267edd0c2fd7df5a64c78c\okio-jvm-2.8.0.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\org.jetbrains.kotlin\kotlin-stdlib-jdk8\1.6.10\e80fe6ac3c3573a80305f5ec43f86b829e8ab53d\kotlin-stdlib-jdk8-1.6.10.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\org.jetbrains.kotlin\kotlin-stdlib-jdk7\1.6.10\e1c380673654a089c4f0c9f83d0ddfdc1efdb498\kotlin-stdlib-jdk7-1.6.10.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\org.jetbrains.kotlin\kotlin-stdlib\1.6.10\b8af3fe6f1ca88526914929add63cf5e7c5049af\kotlin-stdlib-1.6.10.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\org.apache.httpcomponents\httpclient\4.5.13\e5f6cae5ca7ecaac1ec2827a9e2d65ae2869cada\httpclient-4.5.13.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\commons-codec\commons-codec\1.15\49d94806b6e3dc933dacbd8acb0fdbab8ebd1e5d\commons-codec-1.15.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\org.apache.commons\commons-collections4\4.4\62ebe7544cb7164d87e0637a2a6a2bdc981395e8\commons-collections4-4.4.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\org.apache.commons\commons-math3\3.6.1\e4ba98f1d4b3c80ec46392f25e094a6a2e58fcbf\commons-math3-3.6.1.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\com.zaxxer\SparseBitSet\1.2\8467c813d442837fcaeddbc42cf5c5359fab4933\SparseBitSet-1.2.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\org.apache.commons\commons-compress\1.19\7e65777fb451ddab6a9c054beb879e521b7eab78\commons-compress-1.19.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\com.github.virtuald\curvesapi\1.06\159dd2e8956459a4eb0a9a6ecda9004d8d289708\curvesapi-1.06.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\org.apache.xmlbeans\xmlbeans\3.1.0\6dac1f897dfb3e3f17fc79b18a3353b2e51c464e\xmlbeans-3.1.0.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\org.apache.activemq\activemq-openwire-legacy\5.16.4\c7f4f027f165ae62162263e3f2cf21d1efa87ccb\activemq-openwire-legacy-5.16.4.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\org.apache.activemq\activemq-client\5.16.4\eae07f68f5a666a9ebbbfd94104b786b632a5ff5\activemq-client-5.16.4.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\com.zaxxer\HikariCP\4.0.3\107cbdf0db6780a065f895ae9d8fbf3bb0e1c21f\HikariCP-4.0.3.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\org.springframework.boot\spring-boot-starter-logging\2.6.4\e8bab752fd29797df304ef2ad8575e5392d96c4c\spring-boot-starter-logging-2.6.4.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\ch.qos.logback\logback-classic\1.2.10\f69d97ef3335c6ab82fc21dfb77ac613f90c1221\logback-classic-1.2.10.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\org.apache.logging.log4j\log4j-to-slf4j\2.17.1\3619fd18278a1a895c1dca8c5be002768071a20e\log4j-to-slf4j-2.17.1.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\org.slf4j\jul-to-slf4j\1.7.36\ed46d81cef9c412a88caef405b58f93a678ff2ca\jul-to-slf4j-1.7.36.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\org.slf4j\slf4j-api\1.7.36\6c62681a2f655b49963a5983b8b0950a6120ae14\slf4j-api-1.7.36.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\net.minidev\json-smart\2.4.8\7c62f5f72ab05eb54d40e2abf0360a2fe9ea477f\json-smart-2.4.8.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\io.github.classgraph\classgraph\4.8.141\7bcc26e4132060c16b8fbb04f2153bfc455e8b7b\classgraph-4.8.141.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\com.sun.mail\javax.mail\1.6.2\935151eb71beff17a2ffac15dd80184a99a0514f\javax.mail-1.6.2.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\jakarta.transaction\jakarta.transaction-api\1.3.3\c4179d48720a1e87202115fbed6089bdc4195405\jakarta.transaction-api-1.3.3.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\jakarta.persistence\jakarta.persistence-api\2.2.3\8f6ea5daedc614f07a3654a455660145286f024e\jakarta.persistence-api-2.2.3.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\org.springframework\spring-aspects\5.3.16\499f2cd13d26fc0d6eb3312f0251c4f380300001\spring-aspects-5.3.16.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\org.eclipse.persistence\org.eclipse.persistence.core\2.7.10\4fcf93a34baa5176e968498fafb8b4e2c11d93f1\org.eclipse.persistence.core-2.7.10.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\org.eclipse.persistence\org.eclipse.persistence.asm\9.2.0\40807fc4d91a3f827fb038369bd2c83009bea3b8\org.eclipse.persistence.asm-9.2.0.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\org.eclipse.persistence\org.eclipse.persistence.antlr\2.7.10\78712ed5187194106a5563f3de0539bed69ed8e5\org.eclipse.persistence.antlr-2.7.10.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\org.eclipse.persistence\org.eclipse.persistence.jpa.jpql\2.7.10\ec685587096e9649af3544010313992f188e3602\org.eclipse.persistence.jpa.jpql-2.7.10.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\com.mchange\mchange-commons-java\0.2.15\6ef5abe5f1b94ac45b7b5bad42d871da4fda6bbc\mchange-commons-java-0.2.15.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\org.glassfish.hk2\hk2\2.6.1\3b971d09e8b3d0a34c7b96cddb920164f99430d4\hk2-2.6.1.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\org.glassfish.hk2\hk2-core\2.6.1\473f28e1c24c099fb5f8e5c1fed5a2648bd4f125\hk2-core-2.6.1.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\org.glassfish.hk2\hk2-locator\2.6.1\9dedf9d2022e38ec0743ed44c1ac94ad6149acdd\hk2-locator-2.6.1.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\org.glassfish.hk2\hk2-api\2.6.1\114bd7afb4a1bd9993527f52a08a252b5d2acac5\hk2-api-2.6.1.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\org.glassfish.hk2\hk2-utils\2.6.1\396513aa96c1d5a10aa4f75c4dcbf259a698d62d\hk2-utils-2.6.1.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\jakarta.annotation\jakarta.annotation-api\1.3.5\59eb84ee0d616332ff44aba065f3888cf002cd2d\jakarta.annotation-api-1.3.5.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\org.yaml\snakeyaml\1.29\6d0cdafb2010f1297e574656551d7145240f6e25\snakeyaml-1.29.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\org.apache.tomcat.embed\tomcat-embed-websocket\9.0.58\be15775c1abc7fd9b8fda38a8991463e04de656f\tomcat-embed-websocket-9.0.58.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\org.apache.tomcat.embed\tomcat-embed-core\9.0.58\5166fd9f6ffef571c22265c84a0b4354a835d4d2\tomcat-embed-core-9.0.58.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\org.apache.tomcat.embed\tomcat-embed-el\9.0.58\a82095439a98c29b3d7eb136e76e0283bf3f005f\tomcat-embed-el-9.0.58.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\org.springframework.security\spring-security-crypto\5.6.2\5269573116427e6a580f7c3eac8e6b687baff85f\spring-security-crypto-5.6.2.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\com.nimbusds\nimbus-jose-jwt\9.14\3a5278fa1fef97c50f47f05e1fd84385d32aa3dc\nimbus-jose-jwt-9.14.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\org.glassfish.jersey.ext\jersey-entity-filtering\2.35\2fbe9e89f6597e10976d1431dde64b282a761aeb\jersey-entity-filtering-2.35.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\jakarta.ws.rs\jakarta.ws.rs-api\2.1.6\1dcb770bce80a490dff49729b99c7a60e9ecb122\jakarta.ws.rs-api-2.1.6.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\org.glassfish.hk2\spring-bridge\2.6.1\5b8e5e55b655885728229f23088b7c5063d46ad3\spring-bridge-2.6.1.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\org.glassfish.hk2.external\jakarta.inject\2.6.1\8096ebf722902e75fbd4f532a751e514f02e1eb7\jakarta.inject-2.6.1.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\org.glassfish.hk2\osgi-resource-locator\1.0.3\de3b21279df7e755e38275137539be5e2c80dd58\osgi-resource-locator-1.0.3.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\org.springframework\spring-jcl\5.3.16\18d422952e0ce534c2b0ac8b47176c2432fb7e78\spring-jcl-5.3.16.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\org.jetbrains.kotlin\kotlin-stdlib-common\1.6.10\c118700e3a33c8a0d9adc920e9dec0831171925\kotlin-stdlib-common-1.6.10.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\org.jetbrains\annotations\13.0\919f0dfe192fb4e063e7dacadee7f8bb9a2672a9\annotations-13.0.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\net.minidev\accessors-smart\2.4.8\6e1bee5a530caba91893604d6ab41d0edcecca9a\accessors-smart-2.4.8.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\com.github.jnr\jnr-unixsocket\0.38.17\5412abed09c78ca3d298d34a67c9b61ab8456afb\jnr-unixsocket-0.38.17.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\org.glassfish.hk2\class-model\2.6.1\444b935ddfddeb6c13c22d9a873e22db20a851e9\class-model-2.6.1.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\org.ow2.asm\asm-util\9.2\fbc178fc5ba3dab50fd7e8a5317b8b647c8e8946\asm-util-9.2.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\org.checkerframework\checker-compat-qual\2.5.5\435dc33e3019c9f019e15f01aa111de9d6b2b79c\checker-compat-qual-2.5.5.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\jakarta.validation\jakarta.validation-api\2.0.2\5eacc6522521f7eacb081f95cee1e231648461e7\jakarta.validation-api-2.0.2.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\org.fusesource.hawtbuf\hawtbuf\1.11\8f0e50ad8bea37b84b698ec40cce09e47714a63e\hawtbuf-1.11.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\org.aspectj\aspectjweaver\1.9.7\158f5c255cd3e4408e795b79f7c3fbae9b53b7ca\aspectjweaver-1.9.7.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\software.amazon.ion\ion-java\1.0.2\ee9dacea7726e495f8352b81c12c23834ffbc564\ion-java-1.0.2.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\joda-time\joda-time\2.8.1\f5bfc718c95a7b1d3c371bb02a188a4df18361a9\joda-time-2.8.1.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\javax.activation\activation\1.1\e6cb541461c2834bdea3eb920f1884d1eb508b50\activation-1.1.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\com.github.stephenc.jcip\jcip-annotations\1.0-1\ef31541dd28ae2cefdd17c7ebf352d93e9058c63\jcip-annotations-1.0-1.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\com.github.jnr\jnr-enxio\0.32.13\977716da761c3a935efca0b3b090cd987a5c1aeb\jnr-enxio-0.32.13.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\com.github.jnr\jnr-posix\3.1.15\f7d6737adcbd5925d625b8f99166de2cbf13caac\jnr-posix-3.1.15.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\com.github.jnr\jnr-ffi\2.2.11\bcf004ce358c87fc4cd2853b658d336348d0370f\jnr-ffi-2.2.11.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\org.ow2.asm\asm-commons\9.2\f4d7f0fc9054386f2893b602454d48e07d4fbead\asm-commons-9.2.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\org.ow2.asm\asm-analysis\9.2\7487dd756daf96cab9986e44b9d7bcb796a61c10\asm-analysis-9.2.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\org.ow2.asm\asm-tree\9.2\d96c99a30f5e1a19b0e609dbb19a44d8518ac01e\asm-tree-9.2.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\org.ow2.asm\asm\9.2\81a03f76019c67362299c40e0ba13405f5467bff\asm-9.2.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\com.github.jnr\jnr-constants\0.10.3\af19ec7359dd72cbc7869c00bf7cdfa4c308e985\jnr-constants-0.10.3.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\org.apache.httpcomponents\httpcore\4.4.15\7f2e0c573eaa7a74bac2e89b359e1f73d92a0a1d\httpcore-4.4.15.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\io.opencensus\opencensus-api\0.31.0\6634f10ecd5eb3ac248f3ed5ee727c9a28c841bd\opencensus-api-0.31.0.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\com.google.auto.value\auto-value-annotations\1.9\25a0fcef915f663679fcdb447541c5d86a9be4ba\auto-value-annotations-1.9.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\com.google.auth\google-auth-library-credentials\1.5.3\7de8fd6df77f5046db708a39b6f2226ada0e6619\google-auth-library-credentials-1.5.3.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\org.javassist\javassist\3.25.0-GA\442dc1f9fd520130bd18da938622f4f9b2e5fba3\javassist-3.25.0-GA.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\ch.qos.logback\logback-core\1.2.10\5328406bfcae7bcdcc86810fcb2920d2c297170d\logback-core-1.2.10.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\org.apache.logging.log4j\log4j-api\2.17.1\d771af8e336e372fb5399c99edabe0919aeaf5b2\log4j-api-2.17.1.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\com.github.jnr\jffi\1.3.9\b776ea131fa693af2c943368b52acf94131cbd7\jffi-1.3.9.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\com.github.jnr\jnr-a64asm\1.0.0\a1cb8dbe71b5a6a0288043c3ba3ca64545be165\jnr-a64asm-1.0.0.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\com.github.jnr\jnr-x86asm\1.0.2\6936bbd6c5b235665d87bd450f5e13b52d4b48\jnr-x86asm-1.0.2.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\io.grpc\grpc-context\1.27.2\1789190601b7a5361e4fa52b6bc95ec2cd71e854\grpc-context-1.27.2.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\org.glassfish.jaxb\jaxb-runtime\2.3.6\1e6cd0e5d9f9919c8c8824fb4d310b09a978a60e\jaxb-runtime-2.3.6.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\org.springframework.boot\spring-boot-starter-actuator\2.6.4\c3962eaf56d6a4bf84cb1b232f70224b53dc5455\spring-boot-starter-actuator-2.6.4.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\org.springframework.boot\spring-boot-actuator-autoconfigure\2.6.4\9e29af9e11f5f7fbdab2f3a21b7b104d63e3098e\spring-boot-actuator-autoconfigure-2.6.4.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\org.apache.bval\org.apache.bval.bundle\2.0.5\a1ad0e912a4f7c32ce5dee995941b8e0b71c36f1\org.apache.bval.bundle-2.0.5.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\org.webjars.npm\swagger-ui-dist\4.6.1\4a1f44669eb405c773cc1caade570da0578fe751\swagger-ui-dist-4.6.1.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\org.springframework.boot\spring-boot-actuator\2.6.4\944f659a209043efb9979f1a19163ba5c343e4ea\spring-boot-actuator-2.6.4.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\jaxen\jaxen\1.2.0\c10535a925bd35129a4329bc75065cc6b5293f2c\jaxen-1.2.0.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\javax.xml.stream\stax-api\1.0-2\d6337b0de8b25e53e81b922352fbea9f9f57ba0b\stax-api-1.0-2.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\net.java.dev.msv\xsdlib\2013.6.1\280f7c45aaec5102cc756d1afdb416b7775f2ef4\xsdlib-2013.6.1.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\org.threeten\threeten-extra\1.5.0\d6adb54fefe72482ed049f07af31ddf2c287345f\threeten-extra-1.5.0.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\org.jparsec\jparsec\3.1\1a0a4e75a35718cf5abef759159177546f0555c2\jparsec-3.1.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\org.codehaus.groovy\groovy-dateutil\3.0.6\3452c3d7b949088e4994c7b078ddc1e602829508\groovy-dateutil-3.0.6.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\org.codehaus.groovy\groovy\3.0.6\bcd7a821c6a3effef69ae38ecd97439cf136d5e9\groovy-3.0.6.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\org.glassfish.jaxb\txw2\2.3.6\45db7b69a8f1ec2c21eb7d4fc0ee729f53c1addc\txw2-2.3.6.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\com.sun.istack\istack-commons-runtime\3.0.12\cbbe1a62b0cc6c85972e99d52aaee350153dc530\istack-commons-runtime-3.0.12.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\io.micrometer\micrometer-core\1.8.3\d5f34a39442fb77773d0e4d814d1f6b1b8737b49\micrometer-core-1.8.3.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\org.hdrhistogram\HdrHistogram\2.1.12\6eb7552156e0d517ae80cc2247be1427c8d90452\HdrHistogram-2.1.12.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\org.latencyutils\LatencyUtils\2.0.3\769c0b82cb2421c8256300e907298a9410a2a3d3\LatencyUtils-2.0.3.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\com.github.jnr\jffi\1.3.9\163d683f80c06911f3e770c723d6e399e4c59448\jffi-1.3.9-native.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\org.springframework.boot\spring-boot-starter-test\2.6.4\4befb5f23c4bac74125d1c9e4f3721586b315d3a\spring-boot-starter-test-2.6.4.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\org.mockito\mockito-junit-jupiter\4.0.0\b76de25bd6e5d8f7924d0536729c0076e37e9396\mockito-junit-jupiter-4.0.0.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\org.mockito\mockito-core\4.0.0\f5195e0c4a45716bbd2d1d29173adbd148acce3a\mockito-core-4.0.0.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\org.junit.platform\junit-platform-launcher\1.8.2\c334fcee82b81311ab5c426ec2d52d467c8d0b28\junit-platform-launcher-1.8.2.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\org.junit.platform\junit-platform-suite-api\1.8.2\a148ffd359cac121fcba000ad7f5a75b5e2ac2b4\junit-platform-suite-api-1.8.2.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\org.junit.jupiter\junit-jupiter\5.8.2\5a817b1e63f1217e5c586090c45e681281f097ad\junit-jupiter-5.8.2.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\org.junit.platform\junit-platform-engine\1.8.2\b737de09f19864bd136805c84df7999a142fec29\junit-platform-engine-1.8.2.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\org.junit.jupiter\junit-jupiter-params\5.8.2\ddeafe92fc263f895bfb73ffeca7fd56e23c2cce\junit-jupiter-params-5.8.2.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\org.junit.jupiter\junit-jupiter-api\5.8.2\4c21029217adf07e4c0d0c5e192b6bf610c94bdc\junit-jupiter-api-5.8.2.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\org.junit.platform\junit-platform-commons\1.8.2\32c8b8617c1342376fd5af2053da6410d8866861\junit-platform-commons-1.8.2.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\org.junit.platform\junit-platform-runner\1.8.2\a6ef781b9eca491286d63ca7376fb51ee5bf2886\junit-platform-runner-1.8.2.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\org.springframework.boot\spring-boot-test-autoconfigure\2.6.4\fe1ab93aa3ca84e50d0f470a17468a8e7e2770e3\spring-boot-test-autoconfigure-2.6.4.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\org.springframework.boot\spring-boot-test\2.6.4\f7669dafbe66e2805349049c090d9cbca974fbd5\spring-boot-test-2.6.4.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\org.springframework\spring-test\5.3.16\eba2a6612c3bb86cc71b31c731cb46164309f796\spring-test-5.3.16.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\net.bytebuddy\byte-buddy\1.11.22\8b4c7fa5562a09da1c2a9ab0873cb51f5034d83f\byte-buddy-1.11.22.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\net.bytebuddy\byte-buddy-agent\1.11.22\2fbcf3210dfc09b42242e3b66a5281cc5b9adb80\byte-buddy-agent-1.11.22.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\junit\junit\4.13.2\8ac9e16d933b6fb43bc7f576336b8f4d7eb5ba12\junit-4.13.2.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\org.apiguardian\apiguardian-api\1.1.2\a231e0d844d2721b0fa1b238006d15c6ded6842a\apiguardian-api-1.1.2.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\org.assertj\assertj-core\3.21.0\27a14d6d22c4e3d58f799fb2a5ca8eaf53e6942a\assertj-core-3.21.0.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\org.hamcrest\hamcrest-core\2.2\3f2bd07716a31c395e2837254f37f21f0f0ab24b\hamcrest-core-2.2.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\org.hamcrest\hamcrest\2.2\1820c0968dba3a11a1b30669bb1f01978a91dedc\hamcrest-2.2.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\org.skyscreamer\jsonassert\1.5.0\6c9d5fe2f59da598d9aefc1cfc6528ff3cf32df3\jsonassert-1.5.0.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\org.xmlunit\xmlunit-core\2.8.4\35be57989ca80eefa03161b211630e319a8f36c6\xmlunit-core-2.8.4.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\com.vaadin.external.google\android-json\0.0.20131108.vaadin1\fa26d351fe62a6a17f5cda1287c1c6110dec413f\android-json-0.0.20131108.vaadin1.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\org.opentest4j\opentest4j\1.2.0\28c11eb91f9b6d8e200631d46e20a7f407f2a046\opentest4j-1.2.0.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\org.junit.jupiter\junit-jupiter-engine\5.8.2\c598b4328d2f397194d11df3b1648d68d7d990e3\junit-jupiter-engine-5.8.2.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\org.junit.platform\junit-platform-suite-commons\1.8.2\90e757a09aabb1dd0e1c243046bc762cc14faa77\junit-platform-suite-commons-1.8.2.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\org.objenesis\objenesis\3.2\7fadf57620c8b8abdf7519533e5527367cb51f09\objenesis-3.2.jar;C:\dev\johnwfineract\fineract\fineract-client\bin\main;C:\dev\johnwfineract\fineract\fineract-client\bin\test;\fineract-client\bin\default;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\io.swagger\swagger-annotations\1.6.5\61cb59e697ba7d38373063afde95507ab55de72\swagger-annotations-1.6.5.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\com.squareup.retrofit2\adapter-java8\2.9.0\87d8214ce4ce892e8c073faac8f70e8d28463955\adapter-java8-2.9.0.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\com.squareup.retrofit2\adapter-rxjava2\2.9.0\180ad7353dbf0480cabc215948b5a234e3692f0a\adapter-rxjava2-2.9.0.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\com.squareup.retrofit2\converter-scalars\2.9.0\e9ee6f35fb7ba877a35519f9a8f55c648df820d4\converter-scalars-2.9.0.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\io.gsonfire\gson-fire\1.8.5\907df2bf39d70510951b7bafbf661f286eed90a5\gson-fire-1.8.5.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\com.squareup.okhttp3\logging-interceptor\4.9.3\d7786efea637a62603352985d9a229c206003268\logging-interceptor-4.9.3.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\org.apache.oltu.oauth2\org.apache.oltu.oauth2.client\1.0.1\c85c8bcb696482c6d5afccce6fdc14a6744f736d\org.apache.oltu.oauth2.client-1.0.1.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\io.reactivex.rxjava2\rxjava\2.2.21\6f13f24c44567fc660aab94d639cda9f0fe95628\rxjava-2.2.21.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\org.reactivestreams\reactive-streams\1.0.3\d9fb7a7926ffa635b3dcaa5049fb2bfa25b3e7d0\reactive-streams-1.0.3.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\com.google.truth.extensions\truth-java8-extension\1.1.3\43a52e96c9b99fee197d51fa95033b2327684778\truth-java8-extension-1.1.3.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\com.google.truth\truth\1.1.3\5e2491cc44dce7380165963a24e91a0af4556a17\truth-1.1.3.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\org.checkerframework\checker-qual\3.13.0\e29afc6adb63a39286d38dc0e00d164117c02f0d\checker-qual-3.13.0.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\com.google.auto.value\auto-value-annotations\1.8.1\174878f9cc9cbacb8b464d774afb2ccf938f257b\auto-value-annotations-1.8.1.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\org.ow2.asm\asm\9.1\a99500cf6eea30535eeac6be73899d048f8d12a8\asm-9.1.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\org.mock-server\mockserver-junit-jupiter\5.11.2\7be41cdbcf83ff7795bab891c872985920ef064\mockserver-junit-jupiter-5.11.2.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\org.awaitility\awaitility\4.2.0\2c39784846001a9cffd6c6b89c78de62c0d80fb8\awaitility-4.2.0.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\io.rest-assured\rest-assured\4.5.1\3446a6defef9a9db0b16997d289e7bc9808018d8\rest-assured-4.5.1.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\org.mock-server\mockserver-netty\5.11.2\1316f416b6ba8bdcdd20e49f1a0085246e80ecc0\mockserver-netty-5.11.2.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\org.mock-server\mockserver-client-java\5.11.2\ea427995e4d5f8d27f4a97e15b39e8d805ea52d4\mockserver-client-java-5.11.2.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\org.mock-server\mockserver-core\5.11.2\81cc37c20e14bfd041bad8abec2cba1288716255\mockserver-core-5.11.2.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\io.swagger.parser.v3\swagger-parser\2.0.23\42d1ecee11666c12c9875cade299d0e619d6a839\swagger-parser-2.0.23.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\io.swagger.parser.v3\swagger-parser-v2-converter\2.0.23\5930871d90280ffe605e88a337ef4f13173b5e7e\swagger-parser-v2-converter-2.0.23.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\io.swagger\swagger-compat-spec-parser\1.0.52\95defea2532800f0dc26a9601b09f63801e81d5f\swagger-compat-spec-parser-1.0.52.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\io.swagger\swagger-parser\1.0.52\ffeb2fa74d2a39cb68d59193195d902b3ddd177b\swagger-parser-1.0.52.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\io.swagger\swagger-core\1.6.5\4c4a56fa8285530a04959e56681dc76e8d538be1\swagger-core-1.6.5.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\com.github.java-json-tools\json-schema-validator\2.2.14\10c42918adc1fd4454e83bb21365f30df497a076\json-schema-validator-2.2.14.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\io.rest-assured\xml-path\4.5.1\c7f99b699db901fa9dfe3a4189d54de2c3f621ec\xml-path-4.5.1.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\io.rest-assured\json-path\4.5.1\f8cf82b787714241e3def193cd2d46d747549871\json-path-4.5.1.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\io.rest-assured\rest-assured-common\4.5.1\3d60339639685c35c1b9d79c0e3da6aeaf205a52\rest-assured-common-4.5.1.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\org.apache.velocity\velocity-engine-scripting\2.2\ea57fd0213cfda71f52cf62f4d6f7ac7dd448e72\velocity-engine-scripting-2.2.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\org.apache.velocity\velocity-engine-core\2.2\68d899cb70cd27d495562fa808feb2da4926d38f\velocity-engine-core-2.2.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\io.swagger.parser.v3\swagger-parser-v3\2.0.23\f3eac9f86c14505105868df7971dd1b9d1707ff3\swagger-parser-v3-2.0.23.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\io.swagger.core.v3\swagger-core\2.1.5\388b90341a1cdcbd1f2bf36136777d90cfb74e43\swagger-core-2.1.5.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\com.fasterxml.jackson.dataformat\jackson-dataformat-yaml\2.13.1\fa89741b057f4f2094e2f115e6cf898626989fe2\jackson-dataformat-yaml-2.13.1.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\io.swagger.parser.v3\swagger-parser-core\2.0.23\b97e5c9ddb5551e211193ee93a022ed6638cba6a\swagger-parser-core-2.0.23.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\io.swagger.core.v3\swagger-models\2.1.5\ebd8684bddeda635a4b0520a7fb91174138ea6ed\swagger-models-2.1.5.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\io.swagger\swagger-models\1.6.5\b33e2e903f97964cf0afe9f60dcf455a8cbe7d17\swagger-models-1.6.5.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\org.apache.httpcomponents\httpmime\4.5.13\efc110bad4a0d45cda7858e6beee1d8a8313da5a\httpmime-4.5.13.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\com.github.java-json-tools\json-schema-core\1.2.14\39d4efcf7e538684200fea15e08d47d0198c19fb\json-schema-core-1.2.14.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\com.github.java-json-tools\uri-template\0.10\6e8cf7b04f5ed679c76f15e0b19918906d84dbc4\uri-template-0.10.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\com.github.java-json-tools\msg-simple\1.2\a06afa2d5d75c98e54ab370107930978fc3f9937\msg-simple-1.2.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\com.github.java-json-tools\btf\1.3\6cf5405e214cbc83337a107cdef8401fb6aa6383\btf-1.3.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\net.javacrumbs.json-unit\json-unit-core\2.19.0\5812f50e4e5084fafa75c233f3a26988077d1f9f\json-unit-core-2.19.0.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\com.fasterxml.uuid\java-uuid-generator\4.0.1\6939ab08929b899fcbdf67429901d499b290e14b\java-uuid-generator-4.0.1.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\org.slf4j\slf4j-ext\1.7.36\99f282aea4b6dbca04d00f0ade6e5ed61ee7091a\slf4j-ext-1.7.36.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\org.codehaus.groovy\groovy-xml\3.0.6\c1cd0217c753539dceb1709510945859d4f9f4da\groovy-xml-3.0.6.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\org.codehaus.groovy\groovy-json\3.0.6\809c823c751b1d65e5411cf40a82978c691d464d\groovy-json-3.0.6.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\org.ccil.cowan.tagsoup\tagsoup\1.2.1\5584627487e984c03456266d3f8802eb85a9ce97\tagsoup-1.2.1.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\io.netty\netty-handler-proxy\4.1.74.Final\4f13672d0adb4424bef7b122a6bed86062b4b4d4\netty-handler-proxy-4.1.74.Final.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\io.netty\netty-codec-http\4.1.74.Final\73c7bd6341cb59feab6f56200b1e2d908b054fd4\netty-codec-http-4.1.74.Final.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\io.netty\netty-handler\4.1.74.Final\fc9d000dfaea5719192929f943357a89f1cbf81c\netty-handler-4.1.74.Final.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\io.netty\netty-codec-socks\4.1.74.Final\89c370ca2c608a355cf3b5f69d72473a2e4e4ed8\netty-codec-socks-4.1.74.Final.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\io.netty\netty-codec\4.1.74.Final\cbc1d14c827a27cef5d6583f8978445c8b4445d2\netty-codec-4.1.74.Final.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\io.netty\netty-transport\4.1.74.Final\d760fb9f5d12c93887e171c442e30862a9898d59\netty-transport-4.1.74.Final.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\io.netty\netty-buffer\4.1.74.Final\fd49b6a3a7aa2e5d4922cf125b52d880c1a8b7bd\netty-buffer-4.1.74.Final.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\io.netty\netty-resolver\4.1.74.Final\9209265687a125259fe0396b57d8ccc79697d40e\netty-resolver-4.1.74.Final.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\io.netty\netty-common\4.1.74.Final\891b8ad3206469762b20c73f45d0d2e24cff3dd2\netty-common-4.1.74.Final.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\joda-time\joda-time\2.10.5\7f1d89817cd20a32444d5ab4160f035ab9b864e7\joda-time-2.10.5.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\com.lmax\disruptor\3.4.2\e2543a63086b4189fbe418d05d56633bc1a815f7\disruptor-3.4.2.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\com.jcraft\jzlib\1.1.3\c01428efa717624f7aabf4df319939dda9646b2d\jzlib-1.1.3.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\javax.xml.bind\jaxb-api\2.3.1\8531ad5ac454cc2deb9d4d32c40c4d7451939b5d\jaxb-api-2.3.1.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\org.xmlunit\xmlunit-placeholders\2.8.4\5885e1d9656998e408bb656d5380f83b2c30f22\xmlunit-placeholders-2.8.4.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\org.apache.commons\commons-text\1.9\ba6ac8c2807490944a0a27f6f8e68fb5ed2e80e2\commons-text-1.9.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\io.netty\netty-tcnative-classes\2.0.48.Final\9f62346df2f103045cad6f9416e2925a32ee8709\netty-tcnative-classes-2.0.48.Final.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\com.github.java-json-tools\jackson-coreutils-equivalence\1.0\8b928cf1f95dc5fe6b1648f5da93befab031da19\jackson-coreutils-equivalence-1.0.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\com.googlecode.libphonenumber\libphonenumber\8.11.1\6bb6115fd5a0bf00964afec358496faea66b7db5\libphonenumber-8.11.1.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\net.sf.jopt-simple\jopt-simple\5.0.4\4fdac2fbe92dfad86aa6e9301736f6b4342a3f5c\jopt-simple-5.0.4.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\javax.activation\javax.activation-api\1.2.0\85262acf3ca9816f9537ca47d5adeabaead7cb16\javax.activation-api-1.2.0.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\com.github.java-json-tools\jackson-coreutils\2.0\6374371261b91b829d10f21256b2feefdf8f0a78\jackson-coreutils-2.0.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\org.mozilla\rhino\1.7.7.2\a7c4a9ba8b6922374580d71060ef71eafa994256\rhino-1.7.7.2.jar;C:\Users\dovanda\.gradle\caches\modules-2\files-2.1\jakarta.activation\jakarta.activation-api\1.2.2\99f53adba383cb1bf7c3862844488574b559621f\jakarta.activation-api-1.2.2.jar;C:\dev\johnwfineract\fineract\fineract-provider\build\classes\java\main;C:\Users\dovanda\eclipse\java-2021-12\eclipse\configuration\org.eclipse.osgi\223\0\.cp;C:\Users\dovanda\eclipse\java-2021-12\eclipse\configuration\org.eclipse.osgi\221\0\.cp \ No newline at end of file diff --git a/integration-tests/src/test/java/org/apache/fineract/integrationtests/ClientLoanIntegrationMultipleDisbursementsTest.java b/integration-tests/src/test/java/org/apache/fineract/integrationtests/ClientLoanIntegrationMultipleDisbursementsTest.java new file mode 100644 index 000000000..90283f695 --- /dev/null +++ b/integration-tests/src/test/java/org/apache/fineract/integrationtests/ClientLoanIntegrationMultipleDisbursementsTest.java @@ -0,0 +1,222 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.fineract.integrationtests; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +import io.restassured.builder.RequestSpecBuilder; +import io.restassured.builder.ResponseSpecBuilder; +import io.restassured.http.ContentType; +import io.restassured.specification.RequestSpecification; +import io.restassured.specification.ResponseSpecification; +import java.math.BigDecimal; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import org.apache.fineract.integrationtests.common.ClientHelper; +import org.apache.fineract.integrationtests.common.Utils; +import org.apache.fineract.integrationtests.common.loans.LoanApplicationTestBuilder; +import org.apache.fineract.integrationtests.common.loans.LoanProductTestBuilder; +import org.apache.fineract.integrationtests.common.loans.LoanStatusChecker; +import org.apache.fineract.integrationtests.common.loans.LoanTransactionHelper; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** + * Client Loan Integration Test for checking Loan Application Repayments Schedule, loan charges, penalties, loan + * repayments and verifying accounting transactions + */ +@SuppressWarnings({ "rawtypes", "unchecked" }) +public class ClientLoanIntegrationMultipleDisbursementsTest { + + private static final Logger LOG = LoggerFactory.getLogger(ClientLoanIntegrationMultipleDisbursementsTest.class); + + public static final String MINIMUM_OPENING_BALANCE = "1000.0"; + public static final String ACCOUNT_TYPE_INDIVIDUAL = "INDIVIDUAL"; + + private ResponseSpecification responseSpec; + private RequestSpecification requestSpec; + private LoanTransactionHelper loanTransactionHelper; + + @BeforeEach + public void setup() { + Utils.initializeRESTAssured(); + this.requestSpec = new RequestSpecBuilder().setContentType(ContentType.JSON).build(); + this.requestSpec.header("Authorization", "Basic " + Utils.loginIntoServerAndGetBase64EncodedAuthenticationKey()); + this.responseSpec = new ResponseSpecBuilder().expectStatusCode(200).build(); + this.loanTransactionHelper = new LoanTransactionHelper(this.requestSpec, this.responseSpec); + } + + private Integer createLoanProduct(final boolean multiDisburseLoan) { + LOG.info("------------------------------CREATING NEW LOAN PRODUCT ---------------------------------------"); + LoanProductTestBuilder builder = new LoanProductTestBuilder() // + .withPrincipal("12,000.00") // + .withNumberOfRepayments("4") // + .withRepaymentAfterEvery("1") // + .withRepaymentTypeAsMonth() // + .withinterestRatePerPeriod("1") // + .withInterestRateFrequencyTypeAsMonths() // + .withAmortizationTypeAsEqualInstallments() // + .withInterestTypeAsDecliningBalance() // + .withTranches(multiDisburseLoan); + if (multiDisburseLoan) { + builder = builder.withInterestCalculationPeriodTypeAsRepaymentPeriod(true); + builder = builder.withMaxTrancheCount("30"); + } + final String loanProductJSON = builder.build(null); + return this.loanTransactionHelper.getLoanProductId(loanProductJSON); + } + + private Integer applyForLoanApplicationWithTranches(final Integer clientID, final Integer loanProductID, final String savingsId, + String principal, List tranches, String submitDate) { + LOG.info("--------------------------------APPLYING FOR LOAN APPLICATION--------------------------------"); + final String loanApplicationJSON = new LoanApplicationTestBuilder() // + .withPrincipal(principal) // + .withLoanTermFrequency("4") // + .withLoanTermFrequencyAsMonths() // + .withNumberOfRepayments("4") // + .withRepaymentEveryAfter("1") // + .withRepaymentFrequencyTypeAsMonths() // + .withInterestRatePerPeriod("2") // + .withAmortizationTypeAsEqualInstallments() // + .withInterestTypeAsDecliningBalance() // + .withInterestCalculationPeriodTypeSameAsRepaymentPeriod() // + .withExpectedDisbursementDate(submitDate) // + .withTranches(tranches) // + .withSubmittedOnDate(submitDate) // + .build(clientID.toString(), loanProductID.toString(), savingsId); + return this.loanTransactionHelper.getLoanId(loanApplicationJSON); + } + + private HashMap createTrancheDetail(final String date, final String amount) { + HashMap detail = new HashMap(); + detail.put("expectedDisbursementDate", date); + detail.put("principal", amount); + + return detail; + } + + /*** + * Test case to verify repayment schedule shows all disbursals for tranche loans + */ + @Test + public void checkThatAllMultiDisbursalsAppearOnLoanScheduleAndOutStandingBalanceIsZeroTest() { + this.loanTransactionHelper = new LoanTransactionHelper(this.requestSpec, this.responseSpec); + + final Integer clientID = ClientHelper.createClient(this.requestSpec, this.responseSpec); + ClientHelper.verifyClientCreatedOnServer(this.requestSpec, this.responseSpec, clientID); + + /*** + * Create loan product with allowing multiple disbursals + */ + boolean allowMultipleDisbursals = true; + final Integer loanProductID = createLoanProduct(allowMultipleDisbursals); + Assertions.assertNotNull(loanProductID); + + /*** + * Apply for loan application and verify loan status + */ + final String savingsId = null; + final String principal = "12,000.00"; + + LOG.info("-----------------------------------10 Tranches--------------------------------------"); + List tranches = new ArrayList<>(); + tranches.add(createTrancheDetail("01 January 2021", "1")); + tranches.add(createTrancheDetail("02 January 2021", "2")); + tranches.add(createTrancheDetail("03 January 2021", "4")); + tranches.add(createTrancheDetail("04 January 2021", "8")); + tranches.add(createTrancheDetail("05 January 2021", "16")); + tranches.add(createTrancheDetail("06 January 2021", "32")); + tranches.add(createTrancheDetail("07 January 2021", "64")); + tranches.add(createTrancheDetail("08 January 2021", "128")); + tranches.add(createTrancheDetail("09 January 2021", "256")); + tranches.add(createTrancheDetail("10 January 2021", "512")); + String submitDate = "01 January 2021"; + + final Integer loanID = applyForLoanApplicationWithTranches(clientID, loanProductID, savingsId, principal, tranches, submitDate); + Assertions.assertNotNull(loanID); + HashMap loanStatusHashMap = LoanStatusChecker.getStatusOfLoan(this.requestSpec, this.responseSpec, loanID); + LoanStatusChecker.verifyLoanIsPending(loanStatusHashMap); + + LOG.info("-----------------------------------APPROVE LOAN-----------------------------------------"); + loanStatusHashMap = this.loanTransactionHelper.approveLoan("01 January 2021", loanID); + LoanStatusChecker.verifyLoanIsApproved(loanStatusHashMap); + LoanStatusChecker.verifyLoanIsWaitingForDisbursal(loanStatusHashMap); + + LOG.info("-------------------------------DISBURSE 8 LOANS -------------------------------------------"); + // String loanDetails = this.loanTransactionHelper.getLoanDetails(this.requestSpec, this.responseSpec, loanID); + loanStatusHashMap = this.loanTransactionHelper.disburseLoan("12 January 2021", loanID, "1"); + LoanStatusChecker.verifyLoanIsActive(loanStatusHashMap); + loanStatusHashMap = this.loanTransactionHelper.disburseLoan("12 January 2021", loanID, "2"); + LoanStatusChecker.verifyLoanIsActive(loanStatusHashMap); + loanStatusHashMap = this.loanTransactionHelper.disburseLoan("12 January 2021", loanID, "4"); + LoanStatusChecker.verifyLoanIsActive(loanStatusHashMap); + loanStatusHashMap = this.loanTransactionHelper.disburseLoan("13 January 2021", loanID, "8"); + LoanStatusChecker.verifyLoanIsActive(loanStatusHashMap); + loanStatusHashMap = this.loanTransactionHelper.disburseLoan("14 January 2021", loanID, "16"); + LoanStatusChecker.verifyLoanIsActive(loanStatusHashMap); + loanStatusHashMap = this.loanTransactionHelper.disburseLoan("14 January 2021", loanID, "32"); + LoanStatusChecker.verifyLoanIsActive(loanStatusHashMap); + loanStatusHashMap = this.loanTransactionHelper.disburseLoan("15 January 2021", loanID, "64"); + LoanStatusChecker.verifyLoanIsActive(loanStatusHashMap); + loanStatusHashMap = this.loanTransactionHelper.disburseLoan("15 January 2021", loanID, "128"); + LoanStatusChecker.verifyLoanIsActive(loanStatusHashMap); + + ArrayList loanSchedule = this.loanTransactionHelper.getLoanRepaymentSchedule(this.requestSpec, this.responseSpec, loanID); + final int loanScheduleLineCount = loanSchedule.size(); + final int expectedLoanScheduleLineCount = 9; + final int expectedDisbursals = 8; + final BigDecimal val255 = BigDecimal.valueOf(255.0); + final BigDecimal expectedTotalPrincipalDisbursed = val255; + final BigDecimal expectedPrincipalDue = val255; + final BigDecimal expectedPrincipalLoanBalanceOutstanding = BigDecimal.valueOf(0.0); + + assertEquals(expectedLoanScheduleLineCount, loanScheduleLineCount, "Checking nine lines in schedule"); + + int disbursalCount = 0; + BigDecimal totalPrincipalDisbursed = BigDecimal.ZERO; + // First 8 lines should be disbursals + for (int i = 0; i < loanScheduleLineCount - 1; i++) { + final Integer period = (Integer) loanSchedule.get(i).get("period"); + final BigDecimal principalDisbursed = BigDecimal + .valueOf(Double.parseDouble(loanSchedule.get(i).get("principalDisbursed").toString())); + + if (period == null) { + disbursalCount += 1; + totalPrincipalDisbursed = totalPrincipalDisbursed.add(principalDisbursed); + } + // LOG.info(loanSchedule.get(i).toString()); + } + assertEquals(expectedDisbursals, disbursalCount, "Checking for eight disbursals"); + assertEquals(expectedTotalPrincipalDisbursed, totalPrincipalDisbursed, "Checking Principal Disburse is 255"); + + final BigDecimal principalDue = BigDecimal.valueOf(Double.parseDouble(loanSchedule.get(8).get("principalDue").toString())); + assertEquals(expectedPrincipalDue, principalDue, "Checking Principal Due is 255"); + + final BigDecimal principalLoanBalanceOutstanding = BigDecimal + .valueOf(Double.parseDouble(loanSchedule.get(8).get("principalLoanBalanceOutstanding").toString())); + assertEquals(expectedPrincipalLoanBalanceOutstanding, principalLoanBalanceOutstanding, + "Checking Principal Loan Balance Outstanding is zero"); + + } + +} diff --git a/integration-tests/src/test/java/org/apache/fineract/integrationtests/common/loans/LoanProductTestBuilder.java b/integration-tests/src/test/java/org/apache/fineract/integrationtests/common/loans/LoanProductTestBuilder.java index ea99fc4f8..64339cb69 100644 --- a/integration-tests/src/test/java/org/apache/fineract/integrationtests/common/loans/LoanProductTestBuilder.java +++ b/integration-tests/src/test/java/org/apache/fineract/integrationtests/common/loans/LoanProductTestBuilder.java @@ -93,7 +93,7 @@ public class LoanProductTestBuilder { private Boolean multiDisburseLoan = false; private final String outstandingLoanBalance = "35000"; - private final String maxTrancheCount = "3"; + private String maxTrancheCount = "3"; private Boolean isInterestRecalculationEnabled = false; private String daysInYearType = "1"; @@ -513,4 +513,10 @@ public class LoanProductTestBuilder { this.fixedPrincipalPercentagePerInstallment = fixedPrincipalPercentagePerInstallment; return this; } + + public LoanProductTestBuilder withMaxTrancheCount(String maxTrancheCount) { + this.maxTrancheCount = maxTrancheCount; + return this; + } + }