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'