diff --git a/build.gradle b/build.gradle index b0b164612..a8a58ad68 100644 --- a/build.gradle +++ b/build.gradle @@ -28,6 +28,7 @@ buildscript { [ 'fineract-api', 'fineract-core', + 'fineract-cob', 'fineract-validation', 'fineract-command', 'fineract-accounting', @@ -58,6 +59,7 @@ buildscript { 'fineract-api', 'fineract-client', 'fineract-core', + 'fineract-cob', 'fineract-validation', 'fineract-command', 'fineract-accounting', diff --git a/custom/acme/loan/cob/dependencies.gradle b/custom/acme/loan/cob/dependencies.gradle index 8ca9727e6..ae2a5f48a 100644 --- a/custom/acme/loan/cob/dependencies.gradle +++ b/custom/acme/loan/cob/dependencies.gradle @@ -19,6 +19,7 @@ dependencies { implementation(project(':fineract-core')) + implementation(project(':fineract-cob')) implementation(project(':fineract-loan')) implementation(project(':fineract-provider')) implementation('org.springframework.boot:spring-boot-starter-data-jpa') diff --git a/custom/acme/loan/starter/dependencies.gradle b/custom/acme/loan/starter/dependencies.gradle index 9832dd16f..9b87d70a3 100644 --- a/custom/acme/loan/starter/dependencies.gradle +++ b/custom/acme/loan/starter/dependencies.gradle @@ -19,6 +19,7 @@ dependencies { implementation(project(':fineract-core')) + implementation(project(':fineract-cob')) implementation(project(':fineract-loan')) implementation(project(':fineract-provider')) implementation(project(':custom:acme:loan:cob')) diff --git a/fineract-cob/build.gradle b/fineract-cob/build.gradle new file mode 100644 index 000000000..35b92ce02 --- /dev/null +++ b/fineract-cob/build.gradle @@ -0,0 +1,76 @@ +/** + * 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. + */ +description = 'Fineract COB' + +apply plugin: 'java' +apply plugin: 'eclipse' + +configurations { + providedRuntime // needed for Spring Boot executable WAR + providedCompile + compile() { + exclude module: 'hibernate-entitymanager' + exclude module: 'hibernate-validator' + exclude module: 'activation' + exclude module: 'bcmail-jdk14' + exclude module: 'bcprov-jdk14' + exclude module: 'bctsp-jdk14' + exclude module: 'c3p0' + exclude module: 'stax-api' + exclude module: 'jaxb-api' + exclude module: 'jaxb-impl' + exclude module: 'jboss-logging' + exclude module: 'itext-rtf' + exclude module: 'classworlds' + } + runtime +} + +apply from: 'dependencies.gradle' + +compileJava { + dependsOn ':fineract-avro-schemas:buildJavaSdk' + options.compilerArgs += ['-parameters'] +} + +// Configuration for the modernizer plugin +// https://github.com/andygoossens/gradle-modernizer-plugin +modernizer { + ignoreClassNamePatterns = [ + '.*AbstractPersistableCustom', + '.*EntityTables', + '.*domain.*' + ] +} + +// If we are running Gradle within Eclipse to enhance classes with OpenJPA, +// set the classes directory to point to Eclipse's default build directory +if (project.hasProperty('env') && project.getProperty('env') == 'eclipse') { + sourceSets.main.java.outputDir = new File(rootProject.projectDir, "fineract-cob/bin/main") +} + +if (!(project.hasProperty('env') && project.getProperty('env') == 'dev')) { + sourceSets { + test { + java { + exclude '**/core/boot/tests/**' + } + } + } +} diff --git a/fineract-cob/dependencies.gradle b/fineract-cob/dependencies.gradle new file mode 100644 index 000000000..08d98b14c --- /dev/null +++ b/fineract-cob/dependencies.gradle @@ -0,0 +1,133 @@ +/** + * 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. + */ + +dependencies { + + // Never use "compile" scope, but make all dependencies either 'implementation', 'runtimeOnly' or 'testCompile'. + // Note that we never use 'api', because Fineract at least currently is a simple monolithic application ("WAR"), not a library. + // We also (normally should have) no need to ever use 'compileOnly'. + + implementation(project(path: ':fineract-avro-schemas')) + implementation(project(path: ':fineract-command')) + implementation(project(path: ':fineract-validation')) + implementation(project(path: ':fineract-core')) + + + // implementation dependencies are directly used (compiled against) in src/main (and src/test) + implementation( + 'org.springframework.boot:spring-boot-starter-web', + 'org.springframework.boot:spring-boot-starter-security', + 'org.springframework.boot:spring-boot-starter-validation', + 'org.springframework.boot:spring-boot-starter-batch', + 'org.springframework.batch:spring-batch-integration', + 'jakarta.ws.rs:jakarta.ws.rs-api', + 'org.glassfish.jersey.media:jersey-media-multipart', + 'org.apache.avro:avro', + + 'com.google.guava:guava', + 'com.google.code.gson:gson', + + 'org.apache.commons:commons-lang3', + + 'com.jayway.jsonpath:json-path', + + 'com.github.spotbugs:spotbugs-annotations', + 'io.swagger.core.v3:swagger-annotations-jakarta', + + 'com.squareup.retrofit2:converter-gson', + + 'org.springdoc:springdoc-openapi-starter-webmvc-ui', + 'org.mapstruct:mapstruct', + + 'io.github.resilience4j:resilience4j-spring-boot3', + 'org.apache.httpcomponents:httpcore', + ) + implementation ('org.springframework.boot:spring-boot-starter-data-jpa') { + exclude group: 'org.hibernate' + } + implementation('org.eclipse.persistence:org.eclipse.persistence.jpa') { + exclude group: 'org.eclipse.persistence', module: 'jakarta.persistence' + } + implementation('org.springframework.boot:spring-boot-starter-jersey') { + exclude group: 'org.glassfish.hk2.external', module: 'aopalliance-repackaged' + exclude group: 'org.glassfish.hk2', module: 'hk2-runlevel' + exclude group: 'org.hibernate.validator', module: 'hibernate-validator' + exclude group: 'jakarta.activation', module: 'jakarta.activation-api' + } + implementation('org.dom4j:dom4j') { + exclude group: 'javax.xml.bind' + } + implementation ('jakarta.xml.bind:jakarta.xml.bind-api') { + exclude group: 'jakarta.activation' + } + implementation ('org.springframework.boot:spring-boot-starter-data-jpa') { + exclude group: 'org.hibernate' + } + implementation('org.eclipse.persistence:org.eclipse.persistence.jpa') { + exclude group: 'org.eclipse.persistence', module: 'jakarta.persistence' + } + runtimeOnly('org.glassfish.jaxb:jaxb-runtime') { + exclude group: 'com.sun.activation' + } + + // runtimeOnly dependencies are things that Fineract code has no direct compile time dependency on, but which must be present at run-time + runtimeOnly( + 'org.apache.bval:org.apache.bval.bundle', + + // Although fineract (at the time of writing) doesn't have any compile time dep. on httpclient, + // it's useful to have this for the Spring Boot TestRestTemplate http://docs.spring.io/spring-boot/docs/current-SNAPSHOT/reference/htmlsingle/#boot-features-rest-templates-test-utility + 'org.apache.httpcomponents:httpclient' + ) + + compileOnly 'org.projectlombok:lombok' + annotationProcessor 'org.projectlombok:lombok' + annotationProcessor 'org.mapstruct:mapstruct-processor' + + implementation 'ch.qos.logback.contrib:logback-json-classic' + implementation 'ch.qos.logback.contrib:logback-jackson' + implementation 'org.codehaus.janino:janino' + + implementation 'org.apache.commons:commons-math3' + + implementation 'io.github.classgraph:classgraph' + // testCompile dependencies are ONLY used in src/test, not src/main. + // Do NOT repeat dependencies which are ALREADY in implementation or runtimeOnly! + // + testImplementation( 'io.github.classgraph:classgraph') + testImplementation ('org.springframework.boot:spring-boot-starter-test') { + exclude group: 'com.jayway.jsonpath', module: 'json-path' + exclude group: 'org.junit.vintage', module: 'junit-vintage-engine' + exclude group: 'jakarta.activation' + exclude group: 'javax.activation' + exclude group: 'org.skyscreamer' + } + implementation ('org.mnode.ical4j:ical4j') { + exclude group: 'commons-logging' + exclude group: 'javax.activation' + exclude group: 'com.sun.mail', module: 'javax.mail' + } + implementation ('org.quartz-scheduler:quartz') { + exclude group: 'com.zaxxer', module: 'HikariCP-java7' + } + testImplementation ('org.mockito:mockito-inline') + implementation('org.apache.avro:avro') + implementation( + project(path: ':fineract-avro-schemas') + ) +} diff --git a/fineract-core/src/main/java/org/apache/fineract/cob/COBBusinessStep.java b/fineract-cob/src/main/java/org/apache/fineract/cob/COBBusinessStep.java similarity index 100% rename from fineract-core/src/main/java/org/apache/fineract/cob/COBBusinessStep.java rename to fineract-cob/src/main/java/org/apache/fineract/cob/COBBusinessStep.java diff --git a/fineract-provider/src/main/java/org/apache/fineract/cob/COBBusinessStepService.java b/fineract-cob/src/main/java/org/apache/fineract/cob/COBBusinessStepService.java similarity index 100% rename from fineract-provider/src/main/java/org/apache/fineract/cob/COBBusinessStepService.java rename to fineract-cob/src/main/java/org/apache/fineract/cob/COBBusinessStepService.java diff --git a/fineract-provider/src/main/java/org/apache/fineract/cob/COBBusinessStepServiceImpl.java b/fineract-cob/src/main/java/org/apache/fineract/cob/COBBusinessStepServiceImpl.java similarity index 100% rename from fineract-provider/src/main/java/org/apache/fineract/cob/COBBusinessStepServiceImpl.java rename to fineract-cob/src/main/java/org/apache/fineract/cob/COBBusinessStepServiceImpl.java diff --git a/fineract-cob/src/main/java/org/apache/fineract/cob/COBConstant.java b/fineract-cob/src/main/java/org/apache/fineract/cob/COBConstant.java new file mode 100644 index 000000000..0e874850a --- /dev/null +++ b/fineract-cob/src/main/java/org/apache/fineract/cob/COBConstant.java @@ -0,0 +1,35 @@ +/** + * 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.cob; + +public class COBConstant { + + public static final String BUSINESS_STEPS = "businessSteps"; + + public static final String BUSINESS_DATE_PARAMETER_NAME = "BusinessDate"; + public static final String IS_CATCH_UP_PARAMETER_NAME = "IS_CATCH_UP"; + + public static final String COB_CUSTOM_JOB_PARAMETER_KEY = "CUSTOM_JOB_PARAMETER_ID"; + + public static final Long NUMBER_OF_DAYS_BEHIND = 1L; + + protected COBConstant() { + + } +} diff --git a/fineract-provider/src/main/java/org/apache/fineract/cob/common/CustomJobParameterResolver.java b/fineract-cob/src/main/java/org/apache/fineract/cob/common/CustomJobParameterResolver.java similarity index 100% rename from fineract-provider/src/main/java/org/apache/fineract/cob/common/CustomJobParameterResolver.java rename to fineract-cob/src/main/java/org/apache/fineract/cob/common/CustomJobParameterResolver.java diff --git a/fineract-provider/src/main/java/org/apache/fineract/cob/common/ResetContextTasklet.java b/fineract-cob/src/main/java/org/apache/fineract/cob/common/ResetContextTasklet.java similarity index 100% rename from fineract-provider/src/main/java/org/apache/fineract/cob/common/ResetContextTasklet.java rename to fineract-cob/src/main/java/org/apache/fineract/cob/common/ResetContextTasklet.java diff --git a/fineract-provider/src/main/java/org/apache/fineract/cob/conditions/BatchManagerCondition.java b/fineract-cob/src/main/java/org/apache/fineract/cob/conditions/BatchManagerCondition.java similarity index 100% rename from fineract-provider/src/main/java/org/apache/fineract/cob/conditions/BatchManagerCondition.java rename to fineract-cob/src/main/java/org/apache/fineract/cob/conditions/BatchManagerCondition.java diff --git a/fineract-provider/src/main/java/org/apache/fineract/cob/conditions/BatchWorkerCondition.java b/fineract-cob/src/main/java/org/apache/fineract/cob/conditions/BatchWorkerCondition.java similarity index 100% rename from fineract-provider/src/main/java/org/apache/fineract/cob/conditions/BatchWorkerCondition.java rename to fineract-cob/src/main/java/org/apache/fineract/cob/conditions/BatchWorkerCondition.java diff --git a/fineract-provider/src/main/java/org/apache/fineract/cob/data/BusinessStep.java b/fineract-cob/src/main/java/org/apache/fineract/cob/data/BusinessStep.java similarity index 100% rename from fineract-provider/src/main/java/org/apache/fineract/cob/data/BusinessStep.java rename to fineract-cob/src/main/java/org/apache/fineract/cob/data/BusinessStep.java diff --git a/fineract-provider/src/main/java/org/apache/fineract/cob/data/BusinessStepDetail.java b/fineract-cob/src/main/java/org/apache/fineract/cob/data/BusinessStepDetail.java similarity index 100% rename from fineract-provider/src/main/java/org/apache/fineract/cob/data/BusinessStepDetail.java rename to fineract-cob/src/main/java/org/apache/fineract/cob/data/BusinessStepDetail.java diff --git a/fineract-provider/src/main/java/org/apache/fineract/cob/data/BusinessStepNameAndOrder.java b/fineract-cob/src/main/java/org/apache/fineract/cob/data/BusinessStepNameAndOrder.java similarity index 100% rename from fineract-provider/src/main/java/org/apache/fineract/cob/data/BusinessStepNameAndOrder.java rename to fineract-cob/src/main/java/org/apache/fineract/cob/data/BusinessStepNameAndOrder.java diff --git a/fineract-loan/src/main/java/org/apache/fineract/cob/data/LoanIdAndExternalIdAndAccountNo.java b/fineract-cob/src/main/java/org/apache/fineract/cob/data/COBIdAndExternalIdAndAccountNo.java similarity index 95% rename from fineract-loan/src/main/java/org/apache/fineract/cob/data/LoanIdAndExternalIdAndAccountNo.java rename to fineract-cob/src/main/java/org/apache/fineract/cob/data/COBIdAndExternalIdAndAccountNo.java index b7a94b13f..dc1cd1bb8 100644 --- a/fineract-loan/src/main/java/org/apache/fineract/cob/data/LoanIdAndExternalIdAndAccountNo.java +++ b/fineract-cob/src/main/java/org/apache/fineract/cob/data/COBIdAndExternalIdAndAccountNo.java @@ -20,7 +20,7 @@ package org.apache.fineract.cob.data; import org.apache.fineract.infrastructure.core.domain.ExternalId; -public interface LoanIdAndExternalIdAndAccountNo { +public interface COBIdAndExternalIdAndAccountNo { Long getId(); diff --git a/fineract-loan/src/main/java/org/apache/fineract/cob/data/LoanIdAndLastClosedBusinessDate.java b/fineract-cob/src/main/java/org/apache/fineract/cob/data/COBIdAndLastClosedBusinessDate.java similarity index 94% rename from fineract-loan/src/main/java/org/apache/fineract/cob/data/LoanIdAndLastClosedBusinessDate.java rename to fineract-cob/src/main/java/org/apache/fineract/cob/data/COBIdAndLastClosedBusinessDate.java index cdebe1185..534902a0e 100644 --- a/fineract-loan/src/main/java/org/apache/fineract/cob/data/LoanIdAndLastClosedBusinessDate.java +++ b/fineract-cob/src/main/java/org/apache/fineract/cob/data/COBIdAndLastClosedBusinessDate.java @@ -20,7 +20,7 @@ package org.apache.fineract.cob.data; import java.time.LocalDate; -public interface LoanIdAndLastClosedBusinessDate { +public interface COBIdAndLastClosedBusinessDate { Long getId(); diff --git a/fineract-loan/src/main/java/org/apache/fineract/cob/data/LoanCOBParameter.java b/fineract-cob/src/main/java/org/apache/fineract/cob/data/COBParameter.java similarity index 92% rename from fineract-loan/src/main/java/org/apache/fineract/cob/data/LoanCOBParameter.java rename to fineract-cob/src/main/java/org/apache/fineract/cob/data/COBParameter.java index 36f5d22a0..2d44f55b1 100644 --- a/fineract-loan/src/main/java/org/apache/fineract/cob/data/LoanCOBParameter.java +++ b/fineract-cob/src/main/java/org/apache/fineract/cob/data/COBParameter.java @@ -29,8 +29,8 @@ import lombok.NoArgsConstructor; @NoArgsConstructor @JsonTypeInfo(use = JsonTypeInfo.Id.CLASS) @EqualsAndHashCode -public class LoanCOBParameter { +public class COBParameter { - private Long minLoanId; - private Long maxLoanId; + private Long minAccountId; + private Long maxAccountId; } diff --git a/fineract-loan/src/main/java/org/apache/fineract/cob/data/LoanCOBPartition.java b/fineract-cob/src/main/java/org/apache/fineract/cob/data/COBPartition.java similarity index 96% rename from fineract-loan/src/main/java/org/apache/fineract/cob/data/LoanCOBPartition.java rename to fineract-cob/src/main/java/org/apache/fineract/cob/data/COBPartition.java index 9039c1ab6..863d2b1d7 100644 --- a/fineract-loan/src/main/java/org/apache/fineract/cob/data/LoanCOBPartition.java +++ b/fineract-cob/src/main/java/org/apache/fineract/cob/data/COBPartition.java @@ -23,7 +23,7 @@ import lombok.Data; @Data @AllArgsConstructor -public class LoanCOBPartition { +public class COBPartition { private Long minId; private Long maxId; diff --git a/fineract-provider/src/main/java/org/apache/fineract/cob/data/ConfiguredJobNamesDTO.java b/fineract-cob/src/main/java/org/apache/fineract/cob/data/ConfiguredJobNamesDTO.java similarity index 100% rename from fineract-provider/src/main/java/org/apache/fineract/cob/data/ConfiguredJobNamesDTO.java rename to fineract-cob/src/main/java/org/apache/fineract/cob/data/ConfiguredJobNamesDTO.java diff --git a/fineract-provider/src/main/java/org/apache/fineract/cob/data/IsCatchUpRunningDTO.java b/fineract-cob/src/main/java/org/apache/fineract/cob/data/IsCatchUpRunningDTO.java similarity index 100% rename from fineract-provider/src/main/java/org/apache/fineract/cob/data/IsCatchUpRunningDTO.java rename to fineract-cob/src/main/java/org/apache/fineract/cob/data/IsCatchUpRunningDTO.java diff --git a/fineract-provider/src/main/java/org/apache/fineract/cob/data/JobBusinessStepConfigData.java b/fineract-cob/src/main/java/org/apache/fineract/cob/data/JobBusinessStepConfigData.java similarity index 100% rename from fineract-provider/src/main/java/org/apache/fineract/cob/data/JobBusinessStepConfigData.java rename to fineract-cob/src/main/java/org/apache/fineract/cob/data/JobBusinessStepConfigData.java diff --git a/fineract-provider/src/main/java/org/apache/fineract/cob/data/JobBusinessStepDetail.java b/fineract-cob/src/main/java/org/apache/fineract/cob/data/JobBusinessStepDetail.java similarity index 100% rename from fineract-provider/src/main/java/org/apache/fineract/cob/data/JobBusinessStepDetail.java rename to fineract-cob/src/main/java/org/apache/fineract/cob/data/JobBusinessStepDetail.java diff --git a/fineract-loan/src/main/java/org/apache/fineract/cob/data/LoanDataForExternalTransfer.java b/fineract-cob/src/main/java/org/apache/fineract/cob/data/LoanDataForExternalTransfer.java similarity index 100% rename from fineract-loan/src/main/java/org/apache/fineract/cob/data/LoanDataForExternalTransfer.java rename to fineract-cob/src/main/java/org/apache/fineract/cob/data/LoanDataForExternalTransfer.java diff --git a/fineract-provider/src/main/java/org/apache/fineract/cob/data/OldestCOBProcessedLoanDTO.java b/fineract-cob/src/main/java/org/apache/fineract/cob/data/OldestCOBProcessedLoanDTO.java similarity index 100% rename from fineract-provider/src/main/java/org/apache/fineract/cob/data/OldestCOBProcessedLoanDTO.java rename to fineract-cob/src/main/java/org/apache/fineract/cob/data/OldestCOBProcessedLoanDTO.java diff --git a/fineract-provider/src/main/java/org/apache/fineract/cob/domain/BatchBusinessStep.java b/fineract-cob/src/main/java/org/apache/fineract/cob/domain/BatchBusinessStep.java similarity index 100% rename from fineract-provider/src/main/java/org/apache/fineract/cob/domain/BatchBusinessStep.java rename to fineract-cob/src/main/java/org/apache/fineract/cob/domain/BatchBusinessStep.java diff --git a/fineract-provider/src/main/java/org/apache/fineract/cob/domain/BatchBusinessStepRepository.java b/fineract-cob/src/main/java/org/apache/fineract/cob/domain/BatchBusinessStepRepository.java similarity index 100% rename from fineract-provider/src/main/java/org/apache/fineract/cob/domain/BatchBusinessStepRepository.java rename to fineract-cob/src/main/java/org/apache/fineract/cob/domain/BatchBusinessStepRepository.java diff --git a/fineract-provider/src/main/java/org/apache/fineract/cob/domain/CustomLoanAccountLockRepository.java b/fineract-cob/src/main/java/org/apache/fineract/cob/domain/CustomLoanAccountLockRepository.java similarity index 100% rename from fineract-provider/src/main/java/org/apache/fineract/cob/domain/CustomLoanAccountLockRepository.java rename to fineract-cob/src/main/java/org/apache/fineract/cob/domain/CustomLoanAccountLockRepository.java diff --git a/fineract-provider/src/main/java/org/apache/fineract/cob/domain/CustomLoanAccountLockRepositoryImpl.java b/fineract-cob/src/main/java/org/apache/fineract/cob/domain/CustomLoanAccountLockRepositoryImpl.java similarity index 100% rename from fineract-provider/src/main/java/org/apache/fineract/cob/domain/CustomLoanAccountLockRepositoryImpl.java rename to fineract-cob/src/main/java/org/apache/fineract/cob/domain/CustomLoanAccountLockRepositoryImpl.java diff --git a/fineract-loan/src/main/java/org/apache/fineract/cob/exceptions/LoanAccountLockCannotBeOverruledException.java b/fineract-cob/src/main/java/org/apache/fineract/cob/exceptions/AccountLockCannotBeOverruledException.java similarity index 79% rename from fineract-loan/src/main/java/org/apache/fineract/cob/exceptions/LoanAccountLockCannotBeOverruledException.java rename to fineract-cob/src/main/java/org/apache/fineract/cob/exceptions/AccountLockCannotBeOverruledException.java index 9a10fc49a..16ab50e68 100644 --- a/fineract-loan/src/main/java/org/apache/fineract/cob/exceptions/LoanAccountLockCannotBeOverruledException.java +++ b/fineract-cob/src/main/java/org/apache/fineract/cob/exceptions/AccountLockCannotBeOverruledException.java @@ -18,13 +18,13 @@ */ package org.apache.fineract.cob.exceptions; -public class LoanAccountLockCannotBeOverruledException extends RuntimeException { +public class AccountLockCannotBeOverruledException extends RuntimeException { - public LoanAccountLockCannotBeOverruledException(String message) { + public AccountLockCannotBeOverruledException(String message) { super(message); } - public LoanAccountLockCannotBeOverruledException(String message, Exception e) { + public AccountLockCannotBeOverruledException(String message, Exception e) { super(message, e); } diff --git a/fineract-core/src/main/java/org/apache/fineract/cob/exceptions/BusinessStepException.java b/fineract-cob/src/main/java/org/apache/fineract/cob/exceptions/BusinessStepException.java similarity index 100% rename from fineract-core/src/main/java/org/apache/fineract/cob/exceptions/BusinessStepException.java rename to fineract-cob/src/main/java/org/apache/fineract/cob/exceptions/BusinessStepException.java diff --git a/fineract-core/src/main/java/org/apache/fineract/cob/exceptions/BusinessStepNotBelongsToJobException.java b/fineract-cob/src/main/java/org/apache/fineract/cob/exceptions/BusinessStepNotBelongsToJobException.java similarity index 100% rename from fineract-core/src/main/java/org/apache/fineract/cob/exceptions/BusinessStepNotBelongsToJobException.java rename to fineract-cob/src/main/java/org/apache/fineract/cob/exceptions/BusinessStepNotBelongsToJobException.java diff --git a/fineract-provider/src/main/java/org/apache/fineract/cob/exceptions/CustomJobParameterNotFoundException.java b/fineract-cob/src/main/java/org/apache/fineract/cob/exceptions/CustomJobParameterNotFoundException.java similarity index 100% rename from fineract-provider/src/main/java/org/apache/fineract/cob/exceptions/CustomJobParameterNotFoundException.java rename to fineract-cob/src/main/java/org/apache/fineract/cob/exceptions/CustomJobParameterNotFoundException.java diff --git a/fineract-provider/src/main/java/org/apache/fineract/cob/listener/COBExecutionListenerRunner.java b/fineract-cob/src/main/java/org/apache/fineract/cob/listener/COBExecutionListenerRunner.java similarity index 100% rename from fineract-provider/src/main/java/org/apache/fineract/cob/listener/COBExecutionListenerRunner.java rename to fineract-cob/src/main/java/org/apache/fineract/cob/listener/COBExecutionListenerRunner.java diff --git a/fineract-provider/src/main/java/org/apache/fineract/cob/listener/FineractCOBAfterJobListener.java b/fineract-cob/src/main/java/org/apache/fineract/cob/listener/FineractCOBAfterJobListener.java similarity index 100% rename from fineract-provider/src/main/java/org/apache/fineract/cob/listener/FineractCOBAfterJobListener.java rename to fineract-cob/src/main/java/org/apache/fineract/cob/listener/FineractCOBAfterJobListener.java diff --git a/fineract-provider/src/main/java/org/apache/fineract/cob/listener/FineractCOBBeforeJobListener.java b/fineract-cob/src/main/java/org/apache/fineract/cob/listener/FineractCOBBeforeJobListener.java similarity index 100% rename from fineract-provider/src/main/java/org/apache/fineract/cob/listener/FineractCOBBeforeJobListener.java rename to fineract-cob/src/main/java/org/apache/fineract/cob/listener/FineractCOBBeforeJobListener.java diff --git a/fineract-provider/src/main/java/org/apache/fineract/cob/listener/JobExecutionContextCopyListener.java b/fineract-cob/src/main/java/org/apache/fineract/cob/listener/JobExecutionContextCopyListener.java similarity index 100% rename from fineract-provider/src/main/java/org/apache/fineract/cob/listener/JobExecutionContextCopyListener.java rename to fineract-cob/src/main/java/org/apache/fineract/cob/listener/JobExecutionContextCopyListener.java diff --git a/fineract-provider/src/main/java/org/apache/fineract/cob/service/BusinessStepCategory.java b/fineract-cob/src/main/java/org/apache/fineract/cob/service/BusinessStepCategory.java similarity index 100% rename from fineract-provider/src/main/java/org/apache/fineract/cob/service/BusinessStepCategory.java rename to fineract-cob/src/main/java/org/apache/fineract/cob/service/BusinessStepCategory.java diff --git a/fineract-provider/src/main/java/org/apache/fineract/cob/service/BusinessStepCategoryService.java b/fineract-cob/src/main/java/org/apache/fineract/cob/service/BusinessStepCategoryService.java similarity index 100% rename from fineract-provider/src/main/java/org/apache/fineract/cob/service/BusinessStepCategoryService.java rename to fineract-cob/src/main/java/org/apache/fineract/cob/service/BusinessStepCategoryService.java diff --git a/fineract-provider/src/main/java/org/apache/fineract/cob/service/BusinessStepConfigDataParser.java b/fineract-cob/src/main/java/org/apache/fineract/cob/service/BusinessStepConfigDataParser.java similarity index 100% rename from fineract-provider/src/main/java/org/apache/fineract/cob/service/BusinessStepConfigDataParser.java rename to fineract-cob/src/main/java/org/apache/fineract/cob/service/BusinessStepConfigDataParser.java diff --git a/fineract-provider/src/main/java/org/apache/fineract/cob/service/BusinessStepConfigUpdateHandler.java b/fineract-cob/src/main/java/org/apache/fineract/cob/service/BusinessStepConfigUpdateHandler.java similarity index 100% rename from fineract-provider/src/main/java/org/apache/fineract/cob/service/BusinessStepConfigUpdateHandler.java rename to fineract-cob/src/main/java/org/apache/fineract/cob/service/BusinessStepConfigUpdateHandler.java diff --git a/fineract-provider/src/main/java/org/apache/fineract/cob/service/BusinessStepMapper.java b/fineract-cob/src/main/java/org/apache/fineract/cob/service/BusinessStepMapper.java similarity index 100% rename from fineract-provider/src/main/java/org/apache/fineract/cob/service/BusinessStepMapper.java rename to fineract-cob/src/main/java/org/apache/fineract/cob/service/BusinessStepMapper.java diff --git a/fineract-provider/src/main/java/org/apache/fineract/cob/service/ConfigJobParameterService.java b/fineract-cob/src/main/java/org/apache/fineract/cob/service/ConfigJobParameterService.java similarity index 100% rename from fineract-provider/src/main/java/org/apache/fineract/cob/service/ConfigJobParameterService.java rename to fineract-cob/src/main/java/org/apache/fineract/cob/service/ConfigJobParameterService.java diff --git a/fineract-provider/src/main/java/org/apache/fineract/cob/service/ConfigJobParameterServiceImpl.java b/fineract-cob/src/main/java/org/apache/fineract/cob/service/ConfigJobParameterServiceImpl.java similarity index 100% rename from fineract-provider/src/main/java/org/apache/fineract/cob/service/ConfigJobParameterServiceImpl.java rename to fineract-cob/src/main/java/org/apache/fineract/cob/service/ConfigJobParameterServiceImpl.java diff --git a/fineract-provider/src/main/java/org/apache/fineract/cob/service/ReloadService.java b/fineract-cob/src/main/java/org/apache/fineract/cob/service/ReloadService.java similarity index 100% rename from fineract-provider/src/main/java/org/apache/fineract/cob/service/ReloadService.java rename to fineract-cob/src/main/java/org/apache/fineract/cob/service/ReloadService.java diff --git a/fineract-provider/src/main/java/org/apache/fineract/cob/service/ReloaderService.java b/fineract-cob/src/main/java/org/apache/fineract/cob/service/ReloaderService.java similarity index 100% rename from fineract-provider/src/main/java/org/apache/fineract/cob/service/ReloaderService.java rename to fineract-cob/src/main/java/org/apache/fineract/cob/service/ReloaderService.java diff --git a/fineract-core/src/main/java/org/apache/fineract/infrastructure/core/exceptionmapper/BusinessStepExceptionMapper.java b/fineract-cob/src/main/java/org/apache/fineract/core/exceptionmapper/BusinessStepExceptionMapper.java similarity index 96% rename from fineract-core/src/main/java/org/apache/fineract/infrastructure/core/exceptionmapper/BusinessStepExceptionMapper.java rename to fineract-cob/src/main/java/org/apache/fineract/core/exceptionmapper/BusinessStepExceptionMapper.java index 64111e91b..c31df0ff6 100644 --- a/fineract-core/src/main/java/org/apache/fineract/infrastructure/core/exceptionmapper/BusinessStepExceptionMapper.java +++ b/fineract-cob/src/main/java/org/apache/fineract/core/exceptionmapper/BusinessStepExceptionMapper.java @@ -16,7 +16,7 @@ * specific language governing permissions and limitations * under the License. */ -package org.apache.fineract.infrastructure.core.exceptionmapper; +package org.apache.fineract.core.exceptionmapper; import jakarta.ws.rs.core.MediaType; import jakarta.ws.rs.core.Response; diff --git a/fineract-core/src/main/java/org/apache/fineract/infrastructure/core/exceptionmapper/BusinessStepNotBelongsToJobExceptionMapper.java b/fineract-cob/src/main/java/org/apache/fineract/core/exceptionmapper/BusinessStepNotBelongsToJobExceptionMapper.java similarity index 96% rename from fineract-core/src/main/java/org/apache/fineract/infrastructure/core/exceptionmapper/BusinessStepNotBelongsToJobExceptionMapper.java rename to fineract-cob/src/main/java/org/apache/fineract/core/exceptionmapper/BusinessStepNotBelongsToJobExceptionMapper.java index 618b78e3f..b2173399d 100644 --- a/fineract-core/src/main/java/org/apache/fineract/infrastructure/core/exceptionmapper/BusinessStepNotBelongsToJobExceptionMapper.java +++ b/fineract-cob/src/main/java/org/apache/fineract/core/exceptionmapper/BusinessStepNotBelongsToJobExceptionMapper.java @@ -16,7 +16,7 @@ * specific language governing permissions and limitations * under the License. */ -package org.apache.fineract.infrastructure.core.exceptionmapper; +package org.apache.fineract.core.exceptionmapper; import jakarta.ws.rs.core.MediaType; import jakarta.ws.rs.core.Response; diff --git a/fineract-cob/src/main/resources/jpa/static-weaving/module/fineract-cob/persistence.xml b/fineract-cob/src/main/resources/jpa/static-weaving/module/fineract-cob/persistence.xml new file mode 100644 index 000000000..279880000 --- /dev/null +++ b/fineract-cob/src/main/resources/jpa/static-weaving/module/fineract-cob/persistence.xml @@ -0,0 +1,80 @@ + + + + + + + + + + org.eclipse.persistence.jpa.PersistenceProvider + + org.apache.fineract.useradministration.domain.Role + org.apache.fineract.portfolio.fund.domain.Fund + org.apache.fineract.infrastructure.documentmanagement.domain.Image + org.apache.fineract.organisation.workingdays.domain.WorkingDays + org.apache.fineract.useradministration.domain.Permission + org.apache.fineract.useradministration.domain.AppUserClientMapping + org.apache.fineract.commands.domain.CommandSource + org.apache.fineract.useradministration.domain.AppUser + org.apache.fineract.accounting.glaccount.domain.GLAccount + org.apache.fineract.organisation.monetary.domain.OrganisationCurrency + org.apache.fineract.organisation.staff.domain.Staff + org.apache.fineract.portfolio.rate.domain.Rate + org.apache.fineract.organisation.monetary.domain.ApplicationCurrency + org.apache.fineract.portfolio.calendar.domain.CalendarInstance + org.apache.fineract.portfolio.paymentdetail.domain.PaymentDetail + org.apache.fineract.portfolio.calendar.domain.Calendar + org.apache.fineract.portfolio.calendar.domain.CalendarHistory + org.apache.fineract.portfolio.client.domain.ClientIdentifier + org.apache.fineract.portfolio.delinquency.domain.DelinquencyBucket + org.apache.fineract.portfolio.delinquency.domain.DelinquencyRange + org.apache.fineract.portfolio.group.domain.StaffAssignmentHistory + org.apache.fineract.portfolio.group.domain.Group + org.apache.fineract.portfolio.client.domain.Client + org.apache.fineract.infrastructure.event.external.repository.domain.ExternalEventConfiguration + org.apache.fineract.portfolio.group.domain.GroupRole + org.apache.fineract.portfolio.paymenttype.domain.PaymentType + org.apache.fineract.portfolio.group.domain.GroupLevel + org.apache.fineract.infrastructure.event.external.repository.domain.ExternalEvent + org.apache.fineract.organisation.office.domain.Office + org.apache.fineract.organisation.holiday.domain.Holiday + org.apache.fineract.infrastructure.cache.domain.PlatformCache + org.apache.fineract.infrastructure.codes.domain.Code + org.apache.fineract.infrastructure.businessdate.domain.BusinessDate + org.apache.fineract.infrastructure.codes.domain.CodeValue + + + org.apache.fineract.command.persistence.domain.CommandEntity + org.apache.fineract.command.persistence.converter.JsonAttributeConverter + + + + false + + + + + diff --git a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/jobs/data/JobParameterDTO.java b/fineract-core/src/main/java/org/apache/fineract/infrastructure/jobs/data/JobParameterDTO.java similarity index 100% rename from fineract-provider/src/main/java/org/apache/fineract/infrastructure/jobs/data/JobParameterDTO.java rename to fineract-core/src/main/java/org/apache/fineract/infrastructure/jobs/data/JobParameterDTO.java diff --git a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/jobs/data/JobParametersDTO.java b/fineract-core/src/main/java/org/apache/fineract/infrastructure/jobs/data/JobParametersDTO.java similarity index 100% rename from fineract-provider/src/main/java/org/apache/fineract/infrastructure/jobs/data/JobParametersDTO.java rename to fineract-core/src/main/java/org/apache/fineract/infrastructure/jobs/data/JobParametersDTO.java diff --git a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/jobs/domain/CustomJobParameter.java b/fineract-core/src/main/java/org/apache/fineract/infrastructure/jobs/domain/CustomJobParameter.java similarity index 100% rename from fineract-provider/src/main/java/org/apache/fineract/infrastructure/jobs/domain/CustomJobParameter.java rename to fineract-core/src/main/java/org/apache/fineract/infrastructure/jobs/domain/CustomJobParameter.java diff --git a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/jobs/domain/CustomJobParameterRepository.java b/fineract-core/src/main/java/org/apache/fineract/infrastructure/jobs/domain/CustomJobParameterRepository.java similarity index 100% rename from fineract-provider/src/main/java/org/apache/fineract/infrastructure/jobs/domain/CustomJobParameterRepository.java rename to fineract-core/src/main/java/org/apache/fineract/infrastructure/jobs/domain/CustomJobParameterRepository.java diff --git a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/jobs/domain/CustomJobParameterRepositoryImpl.java b/fineract-core/src/main/java/org/apache/fineract/infrastructure/jobs/domain/CustomJobParameterRepositoryImpl.java similarity index 100% rename from fineract-provider/src/main/java/org/apache/fineract/infrastructure/jobs/domain/CustomJobParameterRepositoryImpl.java rename to fineract-core/src/main/java/org/apache/fineract/infrastructure/jobs/domain/CustomJobParameterRepositoryImpl.java diff --git a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/springbatch/SpringBatchJobConstants.java b/fineract-core/src/main/java/org/apache/fineract/infrastructure/springbatch/SpringBatchJobConstants.java similarity index 100% rename from fineract-provider/src/main/java/org/apache/fineract/infrastructure/springbatch/SpringBatchJobConstants.java rename to fineract-core/src/main/java/org/apache/fineract/infrastructure/springbatch/SpringBatchJobConstants.java diff --git a/fineract-doc/src/docs/en/chapters/custom/business-step.adoc b/fineract-doc/src/docs/en/chapters/custom/business-step.adoc index 398c5e720..d6496ef00 100644 --- a/fineract-doc/src/docs/en/chapters/custom/business-step.adoc +++ b/fineract-doc/src/docs/en/chapters/custom/business-step.adoc @@ -9,7 +9,7 @@ It is very easy to add your own business steps to Fineract's default steps: .Business Step Interface [source,java] ---- -include::{rootdir}/fineract-core/src/main/java/org/apache/fineract/cob/COBBusinessStep.java[lines=19..] +include::{rootdir}/fineract-cob/src/main/java/org/apache/fineract/cob/COBBusinessStep.java[lines=19..] ---- == Business Step Implementation diff --git a/fineract-investor/dependencies.gradle b/fineract-investor/dependencies.gradle index 02c593164..e590c341c 100644 --- a/fineract-investor/dependencies.gradle +++ b/fineract-investor/dependencies.gradle @@ -25,6 +25,7 @@ dependencies { // implementation dependencies are directly used (compiled against) in src/main (and src/test) // implementation(project(path: ':fineract-core')) + implementation(project(path: ':fineract-cob')) implementation(project(path: ':fineract-accounting')) implementation(project(path: ':fineract-charge')) implementation(project(path: ':fineract-loan')) diff --git a/fineract-loan/dependencies.gradle b/fineract-loan/dependencies.gradle index 5d439e708..6f364634a 100644 --- a/fineract-loan/dependencies.gradle +++ b/fineract-loan/dependencies.gradle @@ -25,6 +25,7 @@ dependencies { // implementation dependencies are directly used (compiled against) in src/main (and src/test) // implementation(project(path: ':fineract-core')) + implementation(project(path: ':fineract-cob')) implementation(project(path: ':fineract-accounting')) implementation(project(path: ':fineract-charge')) implementation(project(path: ':fineract-rates')) diff --git a/fineract-loan/src/main/java/org/apache/fineract/infrastructure/core/exceptionmapper/LoanAccountLockCannotBeOverruledExceptionMapper.java b/fineract-loan/src/main/java/org/apache/fineract/infrastructure/core/exceptionmapper/LoanAccountLockCannotBeOverruledExceptionMapper.java index 9990f6f43..fa95f05a9 100644 --- a/fineract-loan/src/main/java/org/apache/fineract/infrastructure/core/exceptionmapper/LoanAccountLockCannotBeOverruledExceptionMapper.java +++ b/fineract-loan/src/main/java/org/apache/fineract/infrastructure/core/exceptionmapper/LoanAccountLockCannotBeOverruledExceptionMapper.java @@ -23,7 +23,7 @@ import jakarta.ws.rs.core.Response; import jakarta.ws.rs.ext.ExceptionMapper; import jakarta.ws.rs.ext.Provider; import lombok.extern.slf4j.Slf4j; -import org.apache.fineract.cob.exceptions.LoanAccountLockCannotBeOverruledException; +import org.apache.fineract.cob.exceptions.AccountLockCannotBeOverruledException; import org.apache.fineract.infrastructure.core.data.ApiParameterError; import org.apache.fineract.infrastructure.core.exception.ErrorHandler; import org.springframework.stereotype.Component; @@ -31,10 +31,10 @@ import org.springframework.stereotype.Component; @Provider @Component @Slf4j -public class LoanAccountLockCannotBeOverruledExceptionMapper implements ExceptionMapper { +public class LoanAccountLockCannotBeOverruledExceptionMapper implements ExceptionMapper { @Override - public Response toResponse(LoanAccountLockCannotBeOverruledException exception) { + public Response toResponse(AccountLockCannotBeOverruledException exception) { final String globalisationMessageCode = "error.msg.invalid.request.body"; final String defaultUserMessage = exception.getMessage(); log.warn("Exception occurred", ErrorHandler.findMostSpecificException(exception)); diff --git a/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/LoanRepository.java b/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/LoanRepository.java index a4bfa9ed4..05f3314d4 100644 --- a/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/LoanRepository.java +++ b/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/LoanRepository.java @@ -23,9 +23,9 @@ import java.util.Collection; import java.util.List; import java.util.Optional; import org.apache.fineract.accounting.common.AccountingRuleType; +import org.apache.fineract.cob.data.COBIdAndExternalIdAndAccountNo; +import org.apache.fineract.cob.data.COBIdAndLastClosedBusinessDate; import org.apache.fineract.cob.data.LoanDataForExternalTransfer; -import org.apache.fineract.cob.data.LoanIdAndExternalIdAndAccountNo; -import org.apache.fineract.cob.data.LoanIdAndLastClosedBusinessDate; import org.apache.fineract.infrastructure.core.domain.ExternalId; import org.apache.fineract.portfolio.accountdetails.domain.AccountType; import org.springframework.data.jpa.repository.JpaRepository; @@ -230,11 +230,11 @@ public interface LoanRepository extends JpaRepository, JpaSpecificat List findIdsByExternalIds(@Param("externalIds") List externalIds); @Query(FIND_ALL_LOANS_BEHIND_BY_LOAN_IDS_AND_STATUSES) - List findAllLoansBehindByLoanIdsAndStatuses(@Param("cobBusinessDate") LocalDate cobBusinessDate, + List findAllLoansBehindByLoanIdsAndStatuses(@Param("cobBusinessDate") LocalDate cobBusinessDate, @Param("loanIds") List loanIds, @Param("loanStatuses") Collection loanStatuses); @Query(FIND_ALL_LOANS_BEHIND_OR_NULL_BY_LOAN_IDS_AND_STATUSES) - List findAllLoansBehindOrNullByLoanIdsAndStatuses(@Param("cobBusinessDate") LocalDate cobBusinessDate, + List findAllLoansBehindOrNullByLoanIdsAndStatuses(@Param("cobBusinessDate") LocalDate cobBusinessDate, @Param("loanIds") List loanIds, @Param("loanStatuses") Collection loanStatuses); @Query(FIND_ALL_LOANS_BY_LAST_CLOSED_BUSINESS_DATE_AND_MIN_AND_MAX_LOAN_ID_AND_STATUSES) @@ -248,11 +248,11 @@ public interface LoanRepository extends JpaRepository, JpaSpecificat @Param("loanStatuses") Collection loanStatuses); @Query(FIND_OLDEST_COB_PROCESSED_LOAN) - List findOldestCOBProcessedLoan(@Param("cobBusinessDate") LocalDate cobBusinessDate, + List findOldestCOBProcessedLoan(@Param("cobBusinessDate") LocalDate cobBusinessDate, @Param("loanStatuses") Collection loanStatuses); @Query(FIND_ALL_STAYED_LOCKED_BY_COB_BUSINESS_DATE) - List findAllStayedLockedByCobBusinessDate(@Param("cobBusinessDate") LocalDate cobBusinessDate); + List findAllStayedLockedByCobBusinessDate(@Param("cobBusinessDate") LocalDate cobBusinessDate); @Query(FIND_ALL_LOAN_IDS_BY_STATUS) List findLoanIdByStatus(@Param("loanStatus") LoanStatus loanStatus); diff --git a/fineract-provider/dependencies.gradle b/fineract-provider/dependencies.gradle index bfbc20da4..462689794 100644 --- a/fineract-provider/dependencies.gradle +++ b/fineract-provider/dependencies.gradle @@ -25,6 +25,7 @@ dependencies { } implementation(project(path: ':fineract-core')) + implementation(project(path: ':fineract-cob')) implementation(project(path: ':fineract-command')) implementation(project(path: ':fineract-validation')) implementation(project(path: ':fineract-accounting')) diff --git a/fineract-provider/src/main/java/org/apache/fineract/cob/api/InternalCOBApiResource.java b/fineract-provider/src/main/java/org/apache/fineract/cob/api/InternalCOBApiResource.java index 3f911919b..09284b2b9 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/cob/api/InternalCOBApiResource.java +++ b/fineract-provider/src/main/java/org/apache/fineract/cob/api/InternalCOBApiResource.java @@ -35,7 +35,7 @@ import java.time.format.DateTimeFormatter; import java.util.List; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; -import org.apache.fineract.cob.data.LoanCOBPartition; +import org.apache.fineract.cob.data.COBPartition; import org.apache.fineract.cob.loan.LoanCOBConstant; import org.apache.fineract.cob.loan.RetrieveLoanIdService; import org.apache.fineract.infrastructure.businessdate.domain.BusinessDateType; @@ -85,7 +85,7 @@ public class InternalCOBApiResource implements InitializingBean { public String getCobPartitions(@Context final UriInfo uriInfo, @PathParam("partitionSize") int partitionSize) { LocalDate businessDate = ThreadLocalContextUtil.getBusinessDateByType(BusinessDateType.BUSINESS_DATE); log.info("RetrieveLoanCOBPartitions is called with partitionSize {} for {}", partitionSize, businessDate); - List loanCOBPartitions = retrieveLoanIdService.retrieveLoanCOBPartitions(LoanCOBConstant.NUMBER_OF_DAYS_BEHIND, + List loanCOBPartitions = retrieveLoanIdService.retrieveLoanCOBPartitions(LoanCOBConstant.NUMBER_OF_DAYS_BEHIND, businessDate, false, partitionSize); final ApiRequestJsonSerializationSettings settings = this.apiRequestParameterHelper.process(uriInfo.getQueryParameters()); return toApiJsonSerializerForList.serialize(settings, loanCOBPartitions); diff --git a/fineract-provider/src/main/java/org/apache/fineract/cob/loan/ApplyLoanLockTasklet.java b/fineract-provider/src/main/java/org/apache/fineract/cob/loan/ApplyLoanLockTasklet.java index d25f74b68..dab46770d 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/cob/loan/ApplyLoanLockTasklet.java +++ b/fineract-provider/src/main/java/org/apache/fineract/cob/loan/ApplyLoanLockTasklet.java @@ -29,7 +29,7 @@ import java.util.Objects; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.apache.fineract.cob.common.CustomJobParameterResolver; -import org.apache.fineract.cob.data.LoanCOBParameter; +import org.apache.fineract.cob.data.COBParameter; import org.apache.fineract.cob.domain.LoanAccountLock; import org.apache.fineract.cob.domain.LockOwner; import org.apache.fineract.cob.exceptions.LoanLockCannotBeAppliedException; @@ -61,11 +61,11 @@ public class ApplyLoanLockTasklet implements Tasklet { throws LoanLockCannotBeAppliedException { ExecutionContext executionContext = contribution.getStepExecution().getExecutionContext(); long numberOfExecutions = contribution.getStepExecution().getCommitCount(); - LoanCOBParameter loanCOBParameter = (LoanCOBParameter) executionContext.get(LoanCOBConstant.LOAN_COB_PARAMETER); + COBParameter loanCOBParameter = (COBParameter) executionContext.get(LoanCOBConstant.LOAN_COB_PARAMETER); List loanIds; if (Objects.isNull(loanCOBParameter) - || (Objects.isNull(loanCOBParameter.getMinLoanId()) && Objects.isNull(loanCOBParameter.getMaxLoanId())) - || (loanCOBParameter.getMinLoanId().equals(0L) && loanCOBParameter.getMaxLoanId().equals(0L))) { + || (Objects.isNull(loanCOBParameter.getMinAccountId()) && Objects.isNull(loanCOBParameter.getMaxAccountId())) + || (loanCOBParameter.getMinAccountId().equals(0L) && loanCOBParameter.getMaxAccountId().equals(0L))) { loanIds = Collections.emptyList(); } else { loanIds = new ArrayList<>( diff --git a/fineract-provider/src/main/java/org/apache/fineract/cob/loan/LoanCOBConstant.java b/fineract-provider/src/main/java/org/apache/fineract/cob/loan/LoanCOBConstant.java index 97f09d7bb..9916ffea7 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/cob/loan/LoanCOBConstant.java +++ b/fineract-provider/src/main/java/org/apache/fineract/cob/loan/LoanCOBConstant.java @@ -18,24 +18,20 @@ */ package org.apache.fineract.cob.loan; -public final class LoanCOBConstant { +import org.apache.fineract.cob.COBConstant; + +public final class LoanCOBConstant extends COBConstant { public static final String JOB_NAME = "LOAN_COB"; public static final String JOB_HUMAN_READABLE_NAME = "Loan COB"; public static final String LOAN_COB_JOB_NAME = "LOAN_CLOSE_OF_BUSINESS"; public static final String LOAN_COB_PARAMETER = "loanCobParameter"; - public static final String BUSINESS_STEPS = "businessSteps"; public static final String LOAN_COB_WORKER_STEP = "loanCOBWorkerStep"; public static final String INLINE_LOAN_COB_JOB_NAME = "INLINE_LOAN_COB"; - public static final String BUSINESS_DATE_PARAMETER_NAME = "BusinessDate"; - public static final String IS_CATCH_UP_PARAMETER_NAME = "IS_CATCH_UP"; public static final String LOAN_IDS_PARAMETER_NAME = "LoanIds"; public static final String LOAN_COB_PARTITIONER_STEP = "Loan COB partition - Step"; - public static final String LOAN_COB_CUSTOM_JOB_PARAMETER_KEY = "CUSTOM_JOB_PARAMETER_ID"; - - public static final Long NUMBER_OF_DAYS_BEHIND = 1L; private LoanCOBConstant() { diff --git a/fineract-provider/src/main/java/org/apache/fineract/cob/loan/LoanCOBPartitioner.java b/fineract-provider/src/main/java/org/apache/fineract/cob/loan/LoanCOBPartitioner.java index 0d27e8bcb..69bb2c8be 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/cob/loan/LoanCOBPartitioner.java +++ b/fineract-provider/src/main/java/org/apache/fineract/cob/loan/LoanCOBPartitioner.java @@ -29,8 +29,8 @@ import lombok.Setter; import lombok.extern.slf4j.Slf4j; import org.apache.fineract.cob.COBBusinessStepService; import org.apache.fineract.cob.data.BusinessStepNameAndOrder; -import org.apache.fineract.cob.data.LoanCOBParameter; -import org.apache.fineract.cob.data.LoanCOBPartition; +import org.apache.fineract.cob.data.COBParameter; +import org.apache.fineract.cob.data.COBPartition; import org.apache.fineract.infrastructure.jobs.service.JobName; import org.apache.fineract.infrastructure.springbatch.PropertyService; import org.springframework.batch.core.JobExecution; @@ -81,13 +81,13 @@ public class LoanCOBPartitioner implements Partitioner { } StopWatch sw = new StopWatch(); sw.start(); - List loanCOBPartitions = new ArrayList<>( + List loanCOBPartitions = new ArrayList<>( retrieveLoanIdService.retrieveLoanCOBPartitions(numberOfDays, businessDate, isCatchUp != null && isCatchUp, partitionSize)); sw.stop(); // if there is no loan to be closed, we still would like to create at least one partition if (loanCOBPartitions.size() == 0) { - loanCOBPartitions.add(new LoanCOBPartition(0L, 0L, 1L, 0L)); + loanCOBPartitions.add(new COBPartition(0L, 0L, 1L, 0L)); } log.info( "LoanCOBPartitioner found {} loans to be processed as part of COB. {} partitions were created using partition size {}. RetrieveLoanCOBPartitions was executed in {} ms.", @@ -96,15 +96,15 @@ public class LoanCOBPartitioner implements Partitioner { .collect(Collectors.toMap(l -> PARTITION_PREFIX + l.getPageNo(), l -> createNewPartition(cobBusinessSteps, l))); } - private long getLoanCount(List loanCOBPartitions) { - return loanCOBPartitions.stream().map(LoanCOBPartition::getCount).reduce(0L, Long::sum); + private long getLoanCount(List loanCOBPartitions) { + return loanCOBPartitions.stream().map(COBPartition::getCount).reduce(0L, Long::sum); } - private ExecutionContext createNewPartition(Set cobBusinessSteps, LoanCOBPartition loanCOBPartition) { + private ExecutionContext createNewPartition(Set cobBusinessSteps, COBPartition loanCOBPartition) { ExecutionContext executionContext = new ExecutionContext(); executionContext.put(LoanCOBConstant.BUSINESS_STEPS, cobBusinessSteps); executionContext.put(LoanCOBConstant.LOAN_COB_PARAMETER, - new LoanCOBParameter(loanCOBPartition.getMinId(), loanCOBPartition.getMaxId())); + new COBParameter(loanCOBPartition.getMinId(), loanCOBPartition.getMaxId())); executionContext.put("partition", PARTITION_PREFIX + loanCOBPartition.getPageNo()); return executionContext; } diff --git a/fineract-provider/src/main/java/org/apache/fineract/cob/loan/LoanItemReader.java b/fineract-provider/src/main/java/org/apache/fineract/cob/loan/LoanItemReader.java index 19f886024..933c65667 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/cob/loan/LoanItemReader.java +++ b/fineract-provider/src/main/java/org/apache/fineract/cob/loan/LoanItemReader.java @@ -25,7 +25,7 @@ import java.util.Objects; import java.util.concurrent.LinkedBlockingQueue; import lombok.extern.slf4j.Slf4j; import org.apache.fineract.cob.common.CustomJobParameterResolver; -import org.apache.fineract.cob.data.LoanCOBParameter; +import org.apache.fineract.cob.data.COBParameter; import org.apache.fineract.cob.domain.LoanAccountLock; import org.apache.fineract.cob.domain.LockOwner; import org.apache.fineract.portfolio.loanaccount.domain.LoanRepository; @@ -53,11 +53,11 @@ public class LoanItemReader extends AbstractLoanItemReader { @SuppressWarnings({ "unchecked" }) public void beforeStep(@NonNull StepExecution stepExecution) { ExecutionContext executionContext = stepExecution.getExecutionContext(); - LoanCOBParameter loanCOBParameter = (LoanCOBParameter) executionContext.get(LoanCOBConstant.LOAN_COB_PARAMETER); + COBParameter loanCOBParameter = (COBParameter) executionContext.get(LoanCOBConstant.LOAN_COB_PARAMETER); List loanIds; if (Objects.isNull(loanCOBParameter) - || (Objects.isNull(loanCOBParameter.getMinLoanId()) && Objects.isNull(loanCOBParameter.getMaxLoanId())) - || (loanCOBParameter.getMinLoanId().equals(0L) && loanCOBParameter.getMaxLoanId().equals(0L))) { + || (Objects.isNull(loanCOBParameter.getMinAccountId()) && Objects.isNull(loanCOBParameter.getMaxAccountId())) + || (loanCOBParameter.getMinAccountId().equals(0L) && loanCOBParameter.getMaxAccountId().equals(0L))) { loanIds = Collections.emptyList(); } else { loanIds = retrieveLoanIdService.retrieveAllNonClosedLoansByLastClosedBusinessDateAndMinAndMaxLoanId(loanCOBParameter, diff --git a/fineract-provider/src/main/java/org/apache/fineract/cob/loan/RetrieveAllNonClosedLoanIdServiceImpl.java b/fineract-provider/src/main/java/org/apache/fineract/cob/loan/RetrieveAllNonClosedLoanIdServiceImpl.java index b5c757ee3..7c81cc43d 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/cob/loan/RetrieveAllNonClosedLoanIdServiceImpl.java +++ b/fineract-provider/src/main/java/org/apache/fineract/cob/loan/RetrieveAllNonClosedLoanIdServiceImpl.java @@ -26,10 +26,10 @@ import java.util.Arrays; import java.util.Collection; import java.util.List; import lombok.RequiredArgsConstructor; -import org.apache.fineract.cob.data.LoanCOBParameter; -import org.apache.fineract.cob.data.LoanCOBPartition; -import org.apache.fineract.cob.data.LoanIdAndExternalIdAndAccountNo; -import org.apache.fineract.cob.data.LoanIdAndLastClosedBusinessDate; +import org.apache.fineract.cob.data.COBIdAndExternalIdAndAccountNo; +import org.apache.fineract.cob.data.COBIdAndLastClosedBusinessDate; +import org.apache.fineract.cob.data.COBParameter; +import org.apache.fineract.cob.data.COBPartition; import org.apache.fineract.infrastructure.businessdate.domain.BusinessDateType; import org.apache.fineract.infrastructure.core.service.ThreadLocalContextUtil; import org.apache.fineract.portfolio.loanaccount.domain.LoanRepository; @@ -49,8 +49,7 @@ public class RetrieveAllNonClosedLoanIdServiceImpl implements RetrieveLoanIdServ private final NamedParameterJdbcTemplate namedParameterJdbcTemplate; @Override - public List retrieveLoanCOBPartitions(Long numberOfDays, LocalDate businessDate, boolean isCatchUp, - int partitionSize) { + public List retrieveLoanCOBPartitions(Long numberOfDays, LocalDate businessDate, boolean isCatchUp, int partitionSize) { StringBuilder sql = new StringBuilder(); sql.append("select min(id) as min, max(id) as max, page, count(id) as count from "); sql.append(" (select floor(((row_number() over(order by id))-1) / :pageSize) as page, t.* from "); @@ -71,43 +70,43 @@ public class RetrieveAllNonClosedLoanIdServiceImpl implements RetrieveLoanIdServ return namedParameterJdbcTemplate.query(sql.toString(), parameters, RetrieveAllNonClosedLoanIdServiceImpl::mapRow); } - private static LoanCOBPartition mapRow(ResultSet rs, int rowNum) throws SQLException { - return new LoanCOBPartition(rs.getLong("min"), rs.getLong("max"), rs.getLong("page"), rs.getLong("count")); + private static COBPartition mapRow(ResultSet rs, int rowNum) throws SQLException { + return new COBPartition(rs.getLong("min"), rs.getLong("max"), rs.getLong("page"), rs.getLong("count")); } @Override - public List retrieveLoanIdsBehindDate(LocalDate businessDate, List loanIds) { + public List retrieveLoanIdsBehindDate(LocalDate businessDate, List loanIds) { return loanRepository.findAllLoansBehindByLoanIdsAndStatuses(businessDate, loanIds, NON_CLOSED_LOAN_STATUSES); } @Override - public List retrieveLoanIdsBehindDateOrNull(LocalDate businessDate, List loanIds) { + public List retrieveLoanIdsBehindDateOrNull(LocalDate businessDate, List loanIds) { return loanRepository.findAllLoansBehindOrNullByLoanIdsAndStatuses(businessDate, loanIds, NON_CLOSED_LOAN_STATUSES); } @Override - public List retrieveLoanIdsOldestCobProcessed(LocalDate businessDate) { + public List retrieveLoanIdsOldestCobProcessed(LocalDate businessDate) { return loanRepository.findOldestCOBProcessedLoan(businessDate, NON_CLOSED_LOAN_STATUSES); } @Override - public List retrieveAllNonClosedLoansByLastClosedBusinessDateAndMinAndMaxLoanId(LoanCOBParameter loanCOBParameter, + public List retrieveAllNonClosedLoansByLastClosedBusinessDateAndMinAndMaxLoanId(COBParameter loanCOBParameter, boolean isCatchUp) { if (isCatchUp) { return loanRepository.findAllLoansByLastClosedBusinessDateNotNullAndMinAndMaxLoanIdAndStatuses( - loanCOBParameter.getMinLoanId(), loanCOBParameter.getMaxLoanId(), ThreadLocalContextUtil + loanCOBParameter.getMinAccountId(), loanCOBParameter.getMaxAccountId(), ThreadLocalContextUtil .getBusinessDateByType(BusinessDateType.COB_DATE).minusDays(LoanCOBConstant.NUMBER_OF_DAYS_BEHIND), NON_CLOSED_LOAN_STATUSES); } else { return loanRepository.findAllLoansByLastClosedBusinessDateAndMinAndMaxLoanIdAndStatuses( - loanCOBParameter.getMinLoanId(), loanCOBParameter.getMaxLoanId(), ThreadLocalContextUtil + loanCOBParameter.getMinAccountId(), loanCOBParameter.getMaxAccountId(), ThreadLocalContextUtil .getBusinessDateByType(BusinessDateType.COB_DATE).minusDays(LoanCOBConstant.NUMBER_OF_DAYS_BEHIND), NON_CLOSED_LOAN_STATUSES); } } @Override - public List findAllStayedLockedByCobBusinessDate(LocalDate cobBusinessDate) { + public List findAllStayedLockedByCobBusinessDate(LocalDate cobBusinessDate) { return loanRepository.findAllStayedLockedByCobBusinessDate(cobBusinessDate); } diff --git a/fineract-provider/src/main/java/org/apache/fineract/cob/loan/RetrieveLoanIdService.java b/fineract-provider/src/main/java/org/apache/fineract/cob/loan/RetrieveLoanIdService.java index 82df2c73c..8604b01ba 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/cob/loan/RetrieveLoanIdService.java +++ b/fineract-provider/src/main/java/org/apache/fineract/cob/loan/RetrieveLoanIdService.java @@ -20,24 +20,24 @@ package org.apache.fineract.cob.loan; import java.time.LocalDate; import java.util.List; -import org.apache.fineract.cob.data.LoanCOBParameter; -import org.apache.fineract.cob.data.LoanCOBPartition; -import org.apache.fineract.cob.data.LoanIdAndExternalIdAndAccountNo; -import org.apache.fineract.cob.data.LoanIdAndLastClosedBusinessDate; +import org.apache.fineract.cob.data.COBIdAndExternalIdAndAccountNo; +import org.apache.fineract.cob.data.COBIdAndLastClosedBusinessDate; +import org.apache.fineract.cob.data.COBParameter; +import org.apache.fineract.cob.data.COBPartition; import org.springframework.data.repository.query.Param; public interface RetrieveLoanIdService { - List retrieveLoanCOBPartitions(Long numberOfDays, LocalDate businessDate, boolean isCatchUp, int partitionSize); + List retrieveLoanCOBPartitions(Long numberOfDays, LocalDate businessDate, boolean isCatchUp, int partitionSize); - List retrieveLoanIdsBehindDate(LocalDate businessDate, List loanIds); + List retrieveLoanIdsBehindDate(LocalDate businessDate, List loanIds); - List retrieveLoanIdsBehindDateOrNull(LocalDate businessDate, List loanIds); + List retrieveLoanIdsBehindDateOrNull(LocalDate businessDate, List loanIds); - List retrieveLoanIdsOldestCobProcessed(LocalDate businessDate); + List retrieveLoanIdsOldestCobProcessed(LocalDate businessDate); - List retrieveAllNonClosedLoansByLastClosedBusinessDateAndMinAndMaxLoanId(LoanCOBParameter loanCOBParameter, boolean isCatchUp); + List retrieveAllNonClosedLoansByLastClosedBusinessDateAndMinAndMaxLoanId(COBParameter loanCOBParameter, boolean isCatchUp); - List findAllStayedLockedByCobBusinessDate(@Param("cobBusinessDate") LocalDate cobBusinessDate); + List findAllStayedLockedByCobBusinessDate(@Param("cobBusinessDate") LocalDate cobBusinessDate); } diff --git a/fineract-provider/src/main/java/org/apache/fineract/cob/loan/StayedLockedLoansTasklet.java b/fineract-provider/src/main/java/org/apache/fineract/cob/loan/StayedLockedLoansTasklet.java index 0b99ac397..2bc4f773b 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/cob/loan/StayedLockedLoansTasklet.java +++ b/fineract-provider/src/main/java/org/apache/fineract/cob/loan/StayedLockedLoansTasklet.java @@ -23,9 +23,9 @@ import java.util.ArrayList; import java.util.List; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.apache.fineract.cob.data.COBIdAndExternalIdAndAccountNo; import org.apache.fineract.cob.data.LoanAccountStayedLockedData; import org.apache.fineract.cob.data.LoanAccountsStayedLockedData; -import org.apache.fineract.cob.data.LoanIdAndExternalIdAndAccountNo; import org.apache.fineract.infrastructure.businessdate.domain.BusinessDateType; import org.apache.fineract.infrastructure.core.service.ThreadLocalContextUtil; import org.apache.fineract.infrastructure.event.business.service.BusinessEventNotifierService; @@ -52,7 +52,7 @@ public class StayedLockedLoansTasklet implements Tasklet { private LoanAccountsStayedLockedData buildLoanAccountData() { LocalDate cobBusinessDate = ThreadLocalContextUtil.getBusinessDateByType(BusinessDateType.COB_DATE); - List stayedLockedLoanAccounts = retrieveLoanIdService + List stayedLockedLoanAccounts = retrieveLoanIdService .findAllStayedLockedByCobBusinessDate(cobBusinessDate); List loanAccounts = new ArrayList<>(); stayedLockedLoanAccounts.forEach(loanAccount -> { diff --git a/fineract-provider/src/main/java/org/apache/fineract/cob/service/AsyncLoanCOBExecutorServiceImpl.java b/fineract-provider/src/main/java/org/apache/fineract/cob/service/AsyncLoanCOBExecutorServiceImpl.java index 92d9c4924..8de658367 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/cob/service/AsyncLoanCOBExecutorServiceImpl.java +++ b/fineract-provider/src/main/java/org/apache/fineract/cob/service/AsyncLoanCOBExecutorServiceImpl.java @@ -27,7 +27,7 @@ import java.util.Set; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.apache.fineract.cob.conditions.LoanCOBEnabledCondition; -import org.apache.fineract.cob.data.LoanIdAndLastClosedBusinessDate; +import org.apache.fineract.cob.data.COBIdAndLastClosedBusinessDate; import org.apache.fineract.cob.loan.LoanCOBConstant; import org.apache.fineract.cob.loan.RetrieveLoanIdService; import org.apache.fineract.infrastructure.businessdate.domain.BusinessDateType; @@ -70,7 +70,7 @@ public class AsyncLoanCOBExecutorServiceImpl implements AsyncLoanCOBExecutorServ try { ThreadLocalContextUtil.init(context); LocalDate cobBusinessDate = ThreadLocalContextUtil.getBusinessDateByType(BusinessDateType.COB_DATE); - List loanIdAndLastClosedBusinessDate = retrieveLoanIdService + List loanIdAndLastClosedBusinessDate = retrieveLoanIdService .retrieveLoanIdsOldestCobProcessed(cobBusinessDate); LocalDate oldestCOBProcessedDate = !loanIdAndLastClosedBusinessDate.isEmpty() diff --git a/fineract-provider/src/main/java/org/apache/fineract/cob/service/InlineLoanCOBExecutorServiceImpl.java b/fineract-provider/src/main/java/org/apache/fineract/cob/service/InlineLoanCOBExecutorServiceImpl.java index 4e106d3b2..ec8fb7ba0 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/cob/service/InlineLoanCOBExecutorServiceImpl.java +++ b/fineract-provider/src/main/java/org/apache/fineract/cob/service/InlineLoanCOBExecutorServiceImpl.java @@ -37,11 +37,11 @@ import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.apache.fineract.cob.conditions.LoanCOBEnabledCondition; -import org.apache.fineract.cob.data.LoanIdAndLastClosedBusinessDate; +import org.apache.fineract.cob.data.COBIdAndLastClosedBusinessDate; import org.apache.fineract.cob.domain.LoanAccountLock; import org.apache.fineract.cob.domain.LoanAccountLockRepository; import org.apache.fineract.cob.domain.LockOwner; -import org.apache.fineract.cob.exceptions.LoanAccountLockCannotBeOverruledException; +import org.apache.fineract.cob.exceptions.AccountLockCannotBeOverruledException; import org.apache.fineract.cob.loan.LoanCOBConstant; import org.apache.fineract.cob.loan.RetrieveLoanIdService; import org.apache.fineract.infrastructure.businessdate.domain.BusinessDateType; @@ -101,7 +101,7 @@ public class InlineLoanCOBExecutorServiceImpl implements InlineExecutorService loanIds = dataParser.parseExecution(command); validateLoanIdsListSize(loanIds); execute(loanIds, jobName); @@ -111,7 +111,7 @@ public class InlineLoanCOBExecutorServiceImpl implements InlineExecutorService loanIds, String jobName) { LocalDate cobBusinessDate = ThreadLocalContextUtil.getBusinessDateByType(BusinessDateType.COB_DATE); - List loansToBeProcessed = getLoansToBeProcessed(loanIds, cobBusinessDate); + List loansToBeProcessed = getLoansToBeProcessed(loanIds, cobBusinessDate); LocalDate executingBusinessDate = getOldestCOBBusinessDate(loansToBeProcessed).plusDays(1); if (!loansToBeProcessed.isEmpty()) { while (!DateUtils.isAfter(executingBusinessDate, cobBusinessDate)) { @@ -121,7 +121,7 @@ public class InlineLoanCOBExecutorServiceImpl implements InlineExecutorService getLoanIdsToBeProcessed(List loansToBeProcessed, LocalDate executingBusinessDate) { + private List getLoanIdsToBeProcessed(List loansToBeProcessed, LocalDate executingBusinessDate) { List loanIdsToBeProcessed = new ArrayList<>(); loansToBeProcessed.forEach(loan -> { if (loan.getLastClosedBusinessDate() != null) { @@ -159,16 +159,16 @@ public class InlineLoanCOBExecutorServiceImpl implements InlineExecutorService loans) { - LoanIdAndLastClosedBusinessDate oldestLoan = loans.stream().min(Comparator - .comparing(LoanIdAndLastClosedBusinessDate::getLastClosedBusinessDate, Comparator.nullsLast(Comparator.naturalOrder()))) + private LocalDate getOldestCOBBusinessDate(List loans) { + COBIdAndLastClosedBusinessDate oldestLoan = loans.stream().min(Comparator + .comparing(COBIdAndLastClosedBusinessDate::getLastClosedBusinessDate, Comparator.nullsLast(Comparator.naturalOrder()))) .orElse(null); return oldestLoan != null && oldestLoan.getLastClosedBusinessDate() != null ? oldestLoan.getLastClosedBusinessDate() : ThreadLocalContextUtil.getBusinessDateByType(BusinessDateType.COB_DATE).minusDays(1); } - private List getLoansToBeProcessed(List loanIds, LocalDate cobBusinessDate) { - List loanIdAndLastClosedBusinessDates = new ArrayList<>(); + private List getLoansToBeProcessed(List loanIds, LocalDate cobBusinessDate) { + List loanIdAndLastClosedBusinessDates = new ArrayList<>(); List> partitions = Lists.partition(loanIds, fineractProperties.getQuery().getInClauseParameterSizeLimit()); partitions.forEach(partition -> loanIdAndLastClosedBusinessDates .addAll(retrieveLoanIdService.retrieveLoanIdsBehindDateOrNull(cobBusinessDate, partition))); @@ -194,7 +194,7 @@ public class InlineLoanCOBExecutorServiceImpl implements InlineExecutorService> businessSteps = Map.of(BusinessStepCategory.LOAN, LoanCOBBusinessStep.class); diff --git a/fineract-provider/src/main/java/org/apache/fineract/cob/service/LoanCOBCatchUpServiceImpl.java b/fineract-provider/src/main/java/org/apache/fineract/cob/service/LoanCOBCatchUpServiceImpl.java index 8643df3b6..39b346b4a 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/cob/service/LoanCOBCatchUpServiceImpl.java +++ b/fineract-provider/src/main/java/org/apache/fineract/cob/service/LoanCOBCatchUpServiceImpl.java @@ -22,8 +22,8 @@ import java.time.LocalDate; import java.util.List; import lombok.RequiredArgsConstructor; import org.apache.fineract.cob.conditions.LoanCOBEnabledCondition; +import org.apache.fineract.cob.data.COBIdAndLastClosedBusinessDate; import org.apache.fineract.cob.data.IsCatchUpRunningDTO; -import org.apache.fineract.cob.data.LoanIdAndLastClosedBusinessDate; import org.apache.fineract.cob.data.OldestCOBProcessedLoanDTO; import org.apache.fineract.cob.loan.LoanCOBConstant; import org.apache.fineract.cob.loan.RetrieveLoanIdService; @@ -51,13 +51,13 @@ public class LoanCOBCatchUpServiceImpl implements LoanCOBCatchUpService { @Override public OldestCOBProcessedLoanDTO getOldestCOBProcessedLoan() { - List loanIdAndLastClosedBusinessDate = retrieveLoanIdService + List loanIdAndLastClosedBusinessDate = retrieveLoanIdService .retrieveLoanIdsOldestCobProcessed(ThreadLocalContextUtil.getBusinessDateByType(BusinessDateType.COB_DATE)); OldestCOBProcessedLoanDTO oldestCOBProcessedLoanDTO = new OldestCOBProcessedLoanDTO(); - oldestCOBProcessedLoanDTO.setLoanIds(loanIdAndLastClosedBusinessDate.stream().map(LoanIdAndLastClosedBusinessDate::getId).toList()); - oldestCOBProcessedLoanDTO.setCobProcessedDate( - loanIdAndLastClosedBusinessDate.stream().map(LoanIdAndLastClosedBusinessDate::getLastClosedBusinessDate).findFirst() - .orElse(ThreadLocalContextUtil.getBusinessDateByType(BusinessDateType.COB_DATE))); + oldestCOBProcessedLoanDTO.setLoanIds(loanIdAndLastClosedBusinessDate.stream().map(COBIdAndLastClosedBusinessDate::getId).toList()); + oldestCOBProcessedLoanDTO + .setCobProcessedDate(loanIdAndLastClosedBusinessDate.stream().map(COBIdAndLastClosedBusinessDate::getLastClosedBusinessDate) + .findFirst().orElse(ThreadLocalContextUtil.getBusinessDateByType(BusinessDateType.COB_DATE))); oldestCOBProcessedLoanDTO.setCobBusinessDate(ThreadLocalContextUtil.getBusinessDateByType(BusinessDateType.COB_DATE)); return oldestCOBProcessedLoanDTO; } @@ -71,8 +71,8 @@ public class LoanCOBCatchUpServiceImpl implements LoanCOBCatchUpService { @Override public IsCatchUpRunningDTO isCatchUpRunning() { LocalDate runningCatchUpBusinessDate = jobExecutionRepository.getBusinessDateOfRunningJobByExecutionParameter( - LoanCOBConstant.JOB_NAME, LoanCOBConstant.LOAN_COB_CUSTOM_JOB_PARAMETER_KEY, LoanCOBConstant.IS_CATCH_UP_PARAMETER_NAME, - "true", LoanCOBConstant.BUSINESS_DATE_PARAMETER_NAME); + LoanCOBConstant.JOB_NAME, LoanCOBConstant.COB_CUSTOM_JOB_PARAMETER_KEY, LoanCOBConstant.IS_CATCH_UP_PARAMETER_NAME, "true", + LoanCOBConstant.BUSINESS_DATE_PARAMETER_NAME); return new IsCatchUpRunningDTO(runningCatchUpBusinessDate != null, runningCatchUpBusinessDate); } } diff --git a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/jobs/filter/LoanCOBFilterHelper.java b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/jobs/filter/LoanCOBFilterHelper.java index 670caf598..5066277a0 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/jobs/filter/LoanCOBFilterHelper.java +++ b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/jobs/filter/LoanCOBFilterHelper.java @@ -39,7 +39,7 @@ import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.StringUtils; import org.apache.fineract.batch.domain.BatchRequest; import org.apache.fineract.cob.conditions.LoanCOBEnabledCondition; -import org.apache.fineract.cob.data.LoanIdAndLastClosedBusinessDate; +import org.apache.fineract.cob.data.COBIdAndLastClosedBusinessDate; import org.apache.fineract.cob.loan.RetrieveLoanIdService; import org.apache.fineract.cob.service.InlineLoanCOBExecutorServiceImpl; import org.apache.fineract.cob.service.LoanAccountLockService; @@ -195,7 +195,7 @@ public class LoanCOBFilterHelper implements InitializingBean { } public boolean isLoanBehind(List loanIds) { - List loanIdAndLastClosedBusinessDates = new ArrayList<>(); + List loanIdAndLastClosedBusinessDates = new ArrayList<>(); List> partitions = Lists.partition(loanIds, fineractProperties.getQuery().getInClauseParameterSizeLimit()); partitions.forEach(partition -> loanIdAndLastClosedBusinessDates.addAll(retrieveLoanIdService .retrieveLoanIdsBehindDate(ThreadLocalContextUtil.getBusinessDateByType(BusinessDateType.COB_DATE), partition))); diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanWritePlatformServiceJpaRepositoryImpl.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanWritePlatformServiceJpaRepositoryImpl.java index 57e3a1736..dcd2a834c 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanWritePlatformServiceJpaRepositoryImpl.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanWritePlatformServiceJpaRepositoryImpl.java @@ -52,7 +52,7 @@ import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.tuple.Pair; import org.apache.fineract.accounting.journalentry.service.JournalEntryWritePlatformService; -import org.apache.fineract.cob.exceptions.LoanAccountLockCannotBeOverruledException; +import org.apache.fineract.cob.exceptions.AccountLockCannotBeOverruledException; import org.apache.fineract.cob.service.LoanAccountLockService; import org.apache.fineract.infrastructure.codes.domain.CodeValue; import org.apache.fineract.infrastructure.codes.domain.CodeValueRepositoryWrapper; @@ -1904,7 +1904,7 @@ public class LoanWritePlatformServiceJpaRepositoryImpl implements LoanWritePlatf } } if (!lockedLoanIds.isEmpty()) { - throw new LoanAccountLockCannotBeOverruledException("There are hard-lcoked loan accounts: " + lockedLoanIds); + throw new AccountLockCannotBeOverruledException("There are hard-lcoked loan accounts: " + lockedLoanIds); } this.loanRepositoryWrapper.flush(); diff --git a/fineract-provider/src/test/java/org/apache/fineract/cob/loan/ApplyLoanLockTaskletStepDefinitions.java b/fineract-provider/src/test/java/org/apache/fineract/cob/loan/ApplyLoanLockTaskletStepDefinitions.java index 6e077b5e8..3ff79b721 100644 --- a/fineract-provider/src/test/java/org/apache/fineract/cob/loan/ApplyLoanLockTaskletStepDefinitions.java +++ b/fineract-provider/src/test/java/org/apache/fineract/cob/loan/ApplyLoanLockTaskletStepDefinitions.java @@ -34,7 +34,7 @@ import java.util.HashMap; import java.util.List; import java.util.Optional; import org.apache.fineract.cob.common.CustomJobParameterResolver; -import org.apache.fineract.cob.data.LoanCOBParameter; +import org.apache.fineract.cob.data.COBParameter; import org.apache.fineract.cob.domain.LoanAccountLock; import org.apache.fineract.cob.domain.LockOwner; import org.apache.fineract.cob.exceptions.LoanLockCannotBeAppliedException; @@ -76,7 +76,7 @@ public class ApplyLoanLockTaskletStepDefinitions implements En { ThreadLocalContextUtil.setBusinessDates(businessDateMap); StepExecution stepExecution = new StepExecution("test", null); ExecutionContext executionContext = new ExecutionContext(); - LoanCOBParameter loanCOBParameter = new LoanCOBParameter(1L, 4L); + COBParameter loanCOBParameter = new COBParameter(1L, 4L); executionContext.put(LoanCOBConstant.LOAN_COB_PARAMETER, loanCOBParameter); lenient().when( retrieveLoanIdService.retrieveAllNonClosedLoansByLastClosedBusinessDateAndMinAndMaxLoanId(loanCOBParameter, false)) diff --git a/fineract-provider/src/test/java/org/apache/fineract/cob/loan/LoanCOBPartitionerTest.java b/fineract-provider/src/test/java/org/apache/fineract/cob/loan/LoanCOBPartitionerTest.java index 0ec011905..799232c66 100644 --- a/fineract-provider/src/test/java/org/apache/fineract/cob/loan/LoanCOBPartitionerTest.java +++ b/fineract-provider/src/test/java/org/apache/fineract/cob/loan/LoanCOBPartitionerTest.java @@ -28,8 +28,8 @@ import java.util.Map; import java.util.Set; import org.apache.fineract.cob.COBBusinessStepService; import org.apache.fineract.cob.data.BusinessStepNameAndOrder; -import org.apache.fineract.cob.data.LoanCOBParameter; -import org.apache.fineract.cob.data.LoanCOBPartition; +import org.apache.fineract.cob.data.COBParameter; +import org.apache.fineract.cob.data.COBPartition; import org.apache.fineract.infrastructure.jobs.service.JobName; import org.apache.fineract.infrastructure.springbatch.PropertyService; import org.junit.jupiter.api.Assertions; @@ -68,7 +68,7 @@ class LoanCOBPartitionerTest { when(cobBusinessStepService.getCOBBusinessSteps(LoanCOBBusinessStep.class, LoanCOBConstant.LOAN_COB_JOB_NAME)) .thenReturn(BUSINESS_STEP_SET); when(retrieveLoanIdService.retrieveLoanCOBPartitions(1L, BUSINESS_DATE, false, 5)) - .thenReturn(List.of(new LoanCOBPartition(1L,10L, 1L, 5L), new LoanCOBPartition(11L,20L, 2L, 4L))); + .thenReturn(List.of(new COBPartition(1L,10L, 1L, 5L), new COBPartition(11L,20L, 2L, 4L))); LoanCOBPartitioner loanCOBPartitioner = new LoanCOBPartitioner(propertyService, cobBusinessStepService, retrieveLoanIdService, jobOperator, jobExplorer, 1L); loanCOBPartitioner.setBusinessDate(BUSINESS_DATE); loanCOBPartitioner.setIsCatchUp(false); @@ -128,7 +128,7 @@ class LoanCOBPartitionerTest { private void validatePartitions(Map partitions, int index, long min, long max) { Assertions.assertEquals(BUSINESS_STEP_SET, partitions.get(LoanCOBPartitioner.PARTITION_PREFIX + index).get(LoanCOBConstant.BUSINESS_STEPS)); - Assertions.assertEquals(new LoanCOBParameter(min, max), + Assertions.assertEquals(new COBParameter(min, max), partitions.get(LoanCOBPartitioner.PARTITION_PREFIX + index).get(LoanCOBConstant.LOAN_COB_PARAMETER)); Assertions.assertEquals("partition_" + index, partitions.get(LoanCOBPartitioner.PARTITION_PREFIX + index).get("partition")); } diff --git a/fineract-provider/src/test/java/org/apache/fineract/cob/loan/LoanItemReaderStepDefinitions.java b/fineract-provider/src/test/java/org/apache/fineract/cob/loan/LoanItemReaderStepDefinitions.java index 0e3981375..cc538e5cd 100644 --- a/fineract-provider/src/test/java/org/apache/fineract/cob/loan/LoanItemReaderStepDefinitions.java +++ b/fineract-provider/src/test/java/org/apache/fineract/cob/loan/LoanItemReaderStepDefinitions.java @@ -36,7 +36,7 @@ import java.util.List; import java.util.Optional; import java.util.stream.Collectors; import org.apache.fineract.cob.common.CustomJobParameterResolver; -import org.apache.fineract.cob.data.LoanCOBParameter; +import org.apache.fineract.cob.data.COBParameter; import org.apache.fineract.cob.domain.LoanAccountLock; import org.apache.fineract.cob.domain.LockOwner; import org.apache.fineract.cob.exceptions.LoanReadException; @@ -82,7 +82,7 @@ public class LoanItemReaderStepDefinitions implements En { minLoanId = splitAccounts.get(0); maxLoanId = splitAccounts.get(splitAccounts.size() - 1); } - LoanCOBParameter loanCOBParameter = new LoanCOBParameter(minLoanId, maxLoanId); + COBParameter loanCOBParameter = new COBParameter(minLoanId, maxLoanId); stepExecutionContext.put(LoanCOBConstant.LOAN_COB_PARAMETER, loanCOBParameter); stepExecution.setExecutionContext(stepExecutionContext); diff --git a/fineract-provider/src/test/java/org/apache/fineract/cob/loan/LoanItemReaderTest.java b/fineract-provider/src/test/java/org/apache/fineract/cob/loan/LoanItemReaderTest.java index b1f07ebdc..81d822cb0 100644 --- a/fineract-provider/src/test/java/org/apache/fineract/cob/loan/LoanItemReaderTest.java +++ b/fineract-provider/src/test/java/org/apache/fineract/cob/loan/LoanItemReaderTest.java @@ -33,7 +33,7 @@ import java.util.concurrent.Future; import java.util.concurrent.TimeUnit; import java.util.stream.IntStream; import org.apache.fineract.cob.common.CustomJobParameterResolver; -import org.apache.fineract.cob.data.LoanCOBParameter; +import org.apache.fineract.cob.data.COBParameter; import org.apache.fineract.cob.domain.LoanAccountLock; import org.apache.fineract.cob.domain.LockOwner; import org.apache.fineract.infrastructure.core.domain.FineractPlatformTenant; @@ -86,7 +86,7 @@ class LoanItemReaderTest { LoanItemReader loanItemReader = new LoanItemReader(loanRepository, retrieveLoanIdService, customJobParameterResolver, loanLockingService); when(stepExecution.getExecutionContext()).thenReturn(executionContext); - LoanCOBParameter loanCOBParameter = new LoanCOBParameter(1L, 5L); + COBParameter loanCOBParameter = new COBParameter(1L, 5L); when(executionContext.get(LoanCOBConstant.LOAN_COB_PARAMETER)).thenReturn(loanCOBParameter); when(retrieveLoanIdService.retrieveAllNonClosedLoansByLastClosedBusinessDateAndMinAndMaxLoanId(loanCOBParameter, false)) .thenReturn(new ArrayList<>(List.of(1L, 2L, 3L, 4L, 5L))); @@ -114,7 +114,7 @@ class LoanItemReaderTest { LoanItemReader loanItemReader = new LoanItemReader(loanRepository, retrieveLoanIdService, customJobParameterResolver, loanLockingService); when(stepExecution.getExecutionContext()).thenReturn(executionContext); - LoanCOBParameter loanCOBParameter = new LoanCOBParameter(1L, 5L); + COBParameter loanCOBParameter = new COBParameter(1L, 5L); when(executionContext.get(LoanCOBConstant.LOAN_COB_PARAMETER)).thenReturn(loanCOBParameter); when(retrieveLoanIdService.retrieveAllNonClosedLoansByLastClosedBusinessDateAndMinAndMaxLoanId(loanCOBParameter, false)) .thenReturn(new ArrayList<>(List.of())); @@ -135,7 +135,7 @@ class LoanItemReaderTest { LoanItemReader loanItemReader = new LoanItemReader(loanRepository, retrieveLoanIdService, customJobParameterResolver, loanLockingService); when(stepExecution.getExecutionContext()).thenReturn(executionContext); - LoanCOBParameter loanCOBParameter = new LoanCOBParameter(1L, 100L); + COBParameter loanCOBParameter = new COBParameter(1L, 100L); when(executionContext.get(LoanCOBConstant.LOAN_COB_PARAMETER)).thenReturn(loanCOBParameter); when(retrieveLoanIdService.retrieveAllNonClosedLoansByLastClosedBusinessDateAndMinAndMaxLoanId(loanCOBParameter, false)) .thenReturn(new ArrayList<>(IntStream.rangeClosed(1, 100).boxed().map(Long::valueOf).toList())); diff --git a/fineract-provider/src/test/java/org/apache/fineract/cob/loan/RetrieveAllNonClosedLoanIdServiceImplTest.java b/fineract-provider/src/test/java/org/apache/fineract/cob/loan/RetrieveAllNonClosedLoanIdServiceImplTest.java index 668ebffa4..2d39f1fc9 100644 --- a/fineract-provider/src/test/java/org/apache/fineract/cob/loan/RetrieveAllNonClosedLoanIdServiceImplTest.java +++ b/fineract-provider/src/test/java/org/apache/fineract/cob/loan/RetrieveAllNonClosedLoanIdServiceImplTest.java @@ -22,7 +22,7 @@ import static org.mockito.Mockito.times; import java.time.LocalDate; import java.util.List; -import org.apache.fineract.cob.data.LoanCOBPartition; +import org.apache.fineract.cob.data.COBPartition; import org.apache.fineract.portfolio.loanaccount.domain.LoanRepository; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; @@ -48,7 +48,7 @@ public class RetrieveAllNonClosedLoanIdServiceImplTest { @Captor private ArgumentCaptor paramsCaptor; @Captor - private ArgumentCaptor> rowMapper; + private ArgumentCaptor> rowMapper; @Test public void testRetrieveLoanCOBPartitionsNoCatchup() { diff --git a/fineract-provider/src/test/java/org/apache/fineract/cob/service/InlineLoanCOBExecutorServiceImplTest.java b/fineract-provider/src/test/java/org/apache/fineract/cob/service/InlineLoanCOBExecutorServiceImplTest.java index bb3a855ff..c910415c7 100644 --- a/fineract-provider/src/test/java/org/apache/fineract/cob/service/InlineLoanCOBExecutorServiceImplTest.java +++ b/fineract-provider/src/test/java/org/apache/fineract/cob/service/InlineLoanCOBExecutorServiceImplTest.java @@ -34,8 +34,8 @@ import java.time.LocalDate; import java.time.ZoneId; import java.util.HashMap; import java.util.List; -import org.apache.fineract.cob.data.LoanIdAndLastClosedBusinessDate; -import org.apache.fineract.cob.exceptions.LoanAccountLockCannotBeOverruledException; +import org.apache.fineract.cob.data.COBIdAndLastClosedBusinessDate; +import org.apache.fineract.cob.exceptions.AccountLockCannotBeOverruledException; import org.apache.fineract.cob.loan.RetrieveLoanIdService; import org.apache.fineract.infrastructure.businessdate.domain.BusinessDateType; import org.apache.fineract.infrastructure.core.api.JsonCommand; @@ -82,7 +82,7 @@ class InlineLoanCOBExecutorServiceImplTest { @Test void shouldExceptionThrownIfLoanIsAlreadyLocked() { JsonCommand command = mock(JsonCommand.class); - LoanIdAndLastClosedBusinessDate loan = mock(LoanIdAndLastClosedBusinessDate.class); + COBIdAndLastClosedBusinessDate loan = mock(COBIdAndLastClosedBusinessDate.class); ThreadLocalContextUtil.setTenant(new FineractPlatformTenant(1L, "default", "Default", "Asia/Kolkata", null)); HashMap businessDates = new HashMap<>(); LocalDate businessDate = LocalDate.now(ZoneId.systemDefault()); @@ -90,7 +90,7 @@ class InlineLoanCOBExecutorServiceImplTest { businessDates.put(BusinessDateType.COB_DATE, businessDate.minusDays(1)); ThreadLocalContextUtil.setBusinessDates(businessDates); - when(transactionTemplate.execute(any())).thenThrow(new LoanAccountLockCannotBeOverruledException("")); + when(transactionTemplate.execute(any())).thenThrow(new AccountLockCannotBeOverruledException("")); when(fineractProperties.getQuery()).thenReturn(fineractQueryProperties); when(fineractProperties.getApi()).thenReturn(fineractApiProperties); when(dataParser.parseExecution(any())).thenReturn(List.of(1L)); @@ -98,15 +98,15 @@ class InlineLoanCOBExecutorServiceImplTest { when(fineractApiProperties.getBodyItemSizeLimit()).thenReturn(fineractBodyItemSizeLimitProperties); when(fineractBodyItemSizeLimitProperties.getInlineLoanCob()).thenReturn(1000); when(retrieveLoanIdService.retrieveLoanIdsBehindDateOrNull(any(), anyList())).thenReturn(List.of(loan)); - assertThrows(LoanAccountLockCannotBeOverruledException.class, () -> testObj.executeInlineJob(command, "INLINE_LOAN_COB")); + assertThrows(AccountLockCannotBeOverruledException.class, () -> testObj.executeInlineJob(command, "INLINE_LOAN_COB")); } @Test void shouldListBePartitioned() { JsonCommand command = mock(JsonCommand.class); - LoanIdAndLastClosedBusinessDate loan1 = mock(LoanIdAndLastClosedBusinessDate.class); - LoanIdAndLastClosedBusinessDate loan2 = mock(LoanIdAndLastClosedBusinessDate.class); - LoanIdAndLastClosedBusinessDate loan3 = mock(LoanIdAndLastClosedBusinessDate.class); + COBIdAndLastClosedBusinessDate loan1 = mock(COBIdAndLastClosedBusinessDate.class); + COBIdAndLastClosedBusinessDate loan2 = mock(COBIdAndLastClosedBusinessDate.class); + COBIdAndLastClosedBusinessDate loan3 = mock(COBIdAndLastClosedBusinessDate.class); ThreadLocalContextUtil.setTenant(new FineractPlatformTenant(1L, "default", "Default", "Asia/Kolkata", null)); HashMap businessDates = new HashMap<>(); LocalDate businessDate = LocalDate.now(ZoneId.systemDefault()); @@ -114,7 +114,7 @@ class InlineLoanCOBExecutorServiceImplTest { businessDates.put(BusinessDateType.COB_DATE, businessDate.minusDays(1)); ThreadLocalContextUtil.setBusinessDates(businessDates); - when(transactionTemplate.execute(any())).thenThrow(new LoanAccountLockCannotBeOverruledException("")); + when(transactionTemplate.execute(any())).thenThrow(new AccountLockCannotBeOverruledException("")); when(fineractProperties.getQuery()).thenReturn(fineractQueryProperties); when(fineractProperties.getApi()).thenReturn(fineractApiProperties); when(dataParser.parseExecution(any())).thenReturn(List.of(1L, 2L, 3L)); @@ -122,16 +122,16 @@ class InlineLoanCOBExecutorServiceImplTest { when(fineractApiProperties.getBodyItemSizeLimit()).thenReturn(fineractBodyItemSizeLimitProperties); when(fineractBodyItemSizeLimitProperties.getInlineLoanCob()).thenReturn(1000); when(retrieveLoanIdService.retrieveLoanIdsBehindDateOrNull(any(), anyList())).thenReturn(List.of(loan1, loan2, loan3)); - assertThrows(LoanAccountLockCannotBeOverruledException.class, () -> testObj.executeInlineJob(command, "INLINE_LOAN_COB")); + assertThrows(AccountLockCannotBeOverruledException.class, () -> testObj.executeInlineJob(command, "INLINE_LOAN_COB")); verify(retrieveLoanIdService, times(2)).retrieveLoanIdsBehindDateOrNull(any(), anyList()); } @Test void shouldOldestCloseBusinessDateReturnWithCorrectDate() throws NoSuchMethodException, InvocationTargetException, IllegalAccessException { - LoanIdAndLastClosedBusinessDate loan1 = mock(LoanIdAndLastClosedBusinessDate.class); - LoanIdAndLastClosedBusinessDate loan2 = mock(LoanIdAndLastClosedBusinessDate.class); - LoanIdAndLastClosedBusinessDate loan3 = mock(LoanIdAndLastClosedBusinessDate.class); + COBIdAndLastClosedBusinessDate loan1 = mock(COBIdAndLastClosedBusinessDate.class); + COBIdAndLastClosedBusinessDate loan2 = mock(COBIdAndLastClosedBusinessDate.class); + COBIdAndLastClosedBusinessDate loan3 = mock(COBIdAndLastClosedBusinessDate.class); when(loan1.getLastClosedBusinessDate()).thenReturn(null); when(loan2.getLastClosedBusinessDate()).thenReturn(LocalDate.of(2023, 1, 10)); when(loan3.getLastClosedBusinessDate()).thenReturn(LocalDate.of(2023, 1, 11)); diff --git a/fineract-provider/src/test/java/org/apache/fineract/infrastructure/jobs/filter/LoanCOBApiFilterTest.java b/fineract-provider/src/test/java/org/apache/fineract/infrastructure/jobs/filter/LoanCOBApiFilterTest.java index 37452d3bf..4bf1f3a80 100644 --- a/fineract-provider/src/test/java/org/apache/fineract/infrastructure/jobs/filter/LoanCOBApiFilterTest.java +++ b/fineract-provider/src/test/java/org/apache/fineract/infrastructure/jobs/filter/LoanCOBApiFilterTest.java @@ -48,7 +48,7 @@ import java.util.Collections; import java.util.HashMap; import java.util.Optional; import java.util.UUID; -import org.apache.fineract.cob.data.LoanIdAndLastClosedBusinessDate; +import org.apache.fineract.cob.data.COBIdAndLastClosedBusinessDate; import org.apache.fineract.cob.loan.RetrieveLoanIdService; import org.apache.fineract.cob.service.InlineLoanCOBExecutorServiceImpl; import org.apache.fineract.cob.service.LoanAccountLockService; @@ -312,7 +312,7 @@ class LoanCOBApiFilterTest { businessDates.put(BusinessDateType.COB_DATE, businessDate.minusDays(1)); ThreadLocalContextUtil.setBusinessDates(businessDates); - LoanIdAndLastClosedBusinessDate result = mock(LoanIdAndLastClosedBusinessDate.class); + COBIdAndLastClosedBusinessDate result = mock(COBIdAndLastClosedBusinessDate.class); given(result.getId()).willReturn(2L); given(result.getLastClosedBusinessDate()).willReturn(businessDate.minusDays(2)); given(request.getPathInfo()).willReturn("/v1/loans/2?command=approve"); @@ -346,7 +346,7 @@ class LoanCOBApiFilterTest { businessDates.put(BusinessDateType.COB_DATE, businessDate.minusDays(1)); ThreadLocalContextUtil.setBusinessDates(businessDates); - LoanIdAndLastClosedBusinessDate result = mock(LoanIdAndLastClosedBusinessDate.class); + COBIdAndLastClosedBusinessDate result = mock(COBIdAndLastClosedBusinessDate.class); given(result.getId()).willReturn(2L); given(request.getPathInfo()).willReturn("/v1/loans/2?command=approve"); given(request.getMethod()).willReturn(HTTPMethods.POST.value()); diff --git a/fineract-savings/dependencies.gradle b/fineract-savings/dependencies.gradle index c4dd82a0d..5449981db 100644 --- a/fineract-savings/dependencies.gradle +++ b/fineract-savings/dependencies.gradle @@ -25,6 +25,7 @@ dependencies { // implementation dependencies are directly used (compiled against) in src/main (and src/test) // implementation(project(path: ':fineract-core')) + implementation(project(path: ':fineract-cob')) implementation(project(path: ':fineract-accounting')) implementation(project(path: ':fineract-charge')) implementation(project(path: ':fineract-rates')) diff --git a/settings.gradle b/settings.gradle index cd4aa8b14..de7530c1a 100644 --- a/settings.gradle +++ b/settings.gradle @@ -48,6 +48,7 @@ buildCache { rootProject.name='fineract' include ':fineract-core' +include ':fineract-cob' include ':fineract-validation' include ':fineract-command' include ':fineract-accounting'