This is an automated email from the ASF dual-hosted git repository.
arnold pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/fineract.git
The following commit(s) were added to refs/heads/develop by this push:
new 7452ea2552 FINERACT-1932: Fineract modularization - fineract-cob
7452ea2552 is described below
commit 7452ea2552cf27c5f009c3d63df3a3e44fe81471
Author: Jose Alberto Hernandez <[email protected]>
AuthorDate: Thu Jul 10 22:30:40 2025 -0500
FINERACT-1932: Fineract modularization - fineract-cob
---
build.gradle | 2 +
custom/acme/loan/cob/dependencies.gradle | 1 +
custom/acme/loan/starter/dependencies.gradle | 1 +
fineract-cob/build.gradle | 76 ++++++++++++++++++++
.../dependencies.gradle | 79 ++++++++++++++++-----
.../org/apache/fineract/cob/COBBusinessStep.java | 0
.../fineract/cob/COBBusinessStepService.java | 0
.../fineract/cob/COBBusinessStepServiceImpl.java | 0
.../java/org/apache/fineract/cob/COBConstant.java | 15 ++--
.../cob/common/CustomJobParameterResolver.java | 0
.../fineract/cob/common/ResetContextTasklet.java | 0
.../cob/conditions/BatchManagerCondition.java | 0
.../cob/conditions/BatchWorkerCondition.java | 0
.../org/apache/fineract/cob/data/BusinessStep.java | 0
.../fineract/cob/data/BusinessStepDetail.java | 0
.../cob/data/BusinessStepNameAndOrder.java | 0
.../cob/data/COBIdAndExternalIdAndAccountNo.java | 2 +-
.../cob/data/COBIdAndLastClosedBusinessDate.java | 2 +-
.../org/apache/fineract/cob/data/COBParameter.java | 6 +-
.../org/apache/fineract/cob/data/COBPartition.java | 2 +-
.../fineract/cob/data/ConfiguredJobNamesDTO.java | 0
.../fineract/cob/data/IsCatchUpRunningDTO.java | 0
.../cob/data/JobBusinessStepConfigData.java | 0
.../fineract/cob/data/JobBusinessStepDetail.java | 0
.../cob/data/LoanDataForExternalTransfer.java | 0
.../cob/data/OldestCOBProcessedLoanDTO.java | 0
.../fineract/cob/domain/BatchBusinessStep.java | 0
.../cob/domain/BatchBusinessStepRepository.java | 0
.../domain/CustomLoanAccountLockRepository.java | 0
.../CustomLoanAccountLockRepositoryImpl.java | 0
.../AccountLockCannotBeOverruledException.java | 6 +-
.../cob/exceptions/BusinessStepException.java | 0
.../BusinessStepNotBelongsToJobException.java | 0
.../CustomJobParameterNotFoundException.java | 0
.../cob/listener/COBExecutionListenerRunner.java | 0
.../cob/listener/FineractCOBAfterJobListener.java | 0
.../cob/listener/FineractCOBBeforeJobListener.java | 0
.../listener/JobExecutionContextCopyListener.java | 0
.../fineract/cob/service/BusinessStepCategory.java | 0
.../cob/service/BusinessStepCategoryService.java | 0
.../cob/service/BusinessStepConfigDataParser.java | 0
.../service/BusinessStepConfigUpdateHandler.java | 0
.../fineract/cob/service/BusinessStepMapper.java | 0
.../cob/service/ConfigJobParameterService.java | 0
.../cob/service/ConfigJobParameterServiceImpl.java | 0
.../apache/fineract/cob/service/ReloadService.java | 0
.../fineract/cob/service/ReloaderService.java | 0
.../BusinessStepExceptionMapper.java | 2 +-
...BusinessStepNotBelongsToJobExceptionMapper.java | 2 +-
.../module/fineract-cob/persistence.xml | 80 ++++++++++++++++++++++
.../infrastructure/jobs/data/JobParameterDTO.java | 0
.../infrastructure/jobs/data/JobParametersDTO.java | 0
.../jobs/domain/CustomJobParameter.java | 0
.../jobs/domain/CustomJobParameterRepository.java | 0
.../domain/CustomJobParameterRepositoryImpl.java | 0
.../springbatch/SpringBatchJobConstants.java | 0
.../src/docs/en/chapters/custom/business-step.adoc | 2 +-
fineract-investor/dependencies.gradle | 1 +
fineract-loan/dependencies.gradle | 1 +
...ccountLockCannotBeOverruledExceptionMapper.java | 6 +-
.../loanaccount/domain/LoanRepository.java | 12 ++--
fineract-provider/dependencies.gradle | 1 +
.../fineract/cob/api/InternalCOBApiResource.java | 4 +-
.../fineract/cob/loan/ApplyLoanLockTasklet.java | 8 +--
.../apache/fineract/cob/loan/LoanCOBConstant.java | 10 +--
.../fineract/cob/loan/LoanCOBPartitioner.java | 16 ++---
.../apache/fineract/cob/loan/LoanItemReader.java | 8 +--
.../RetrieveAllNonClosedLoanIdServiceImpl.java | 29 ++++----
.../fineract/cob/loan/RetrieveLoanIdService.java | 20 +++---
.../cob/loan/StayedLockedLoansTasklet.java | 4 +-
.../service/AsyncLoanCOBExecutorServiceImpl.java | 4 +-
.../service/InlineLoanCOBExecutorServiceImpl.java | 24 +++----
...va => LoanBusinessStepCategoryServiceImpl.java} | 2 +-
.../cob/service/LoanCOBCatchUpServiceImpl.java | 16 ++---
.../jobs/filter/LoanCOBFilterHelper.java | 4 +-
.../LoanWritePlatformServiceJpaRepositoryImpl.java | 4 +-
.../loan/ApplyLoanLockTaskletStepDefinitions.java | 4 +-
.../fineract/cob/loan/LoanCOBPartitionerTest.java | 8 +--
.../cob/loan/LoanItemReaderStepDefinitions.java | 4 +-
.../fineract/cob/loan/LoanItemReaderTest.java | 8 +--
.../RetrieveAllNonClosedLoanIdServiceImplTest.java | 4 +-
.../InlineLoanCOBExecutorServiceImplTest.java | 26 +++----
.../jobs/filter/LoanCOBApiFilterTest.java | 6 +-
fineract-savings/dependencies.gradle | 1 +
settings.gradle | 1 +
85 files changed, 362 insertions(+), 152 deletions(-)
diff --git a/build.gradle b/build.gradle
index b0b1646123..a8a58ad682 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 8ca9727e6a..ae2a5f48a7 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 9832dd16ff..9b87d70a3a 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 0000000000..35b92ce025
--- /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-loan/dependencies.gradle
b/fineract-cob/dependencies.gradle
similarity index 58%
copy from fineract-loan/dependencies.gradle
copy to fineract-cob/dependencies.gradle
index 5d439e7088..08d98b14c9 100644
--- a/fineract-loan/dependencies.gradle
+++ b/fineract-cob/dependencies.gradle
@@ -18,26 +18,27 @@
*/
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 dependencies are directly used (compiled against) in
src/main (and src/test)
- //
+ implementation(project(path: ':fineract-avro-schemas'))
+ implementation(project(path: ':fineract-command'))
+ implementation(project(path: ':fineract-validation'))
implementation(project(path: ':fineract-core'))
- implementation(project(path: ':fineract-accounting'))
- implementation(project(path: ':fineract-charge'))
- implementation(project(path: ':fineract-rates'))
- implementation(project(path: ':fineract-tax'))
+
+ // 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',
@@ -56,27 +57,59 @@ dependencies {
'io.github.resilience4j:resilience4j-spring-boot3',
'org.apache.httpcomponents:httpcore',
- 'org.apache.commons:commons-collections4'
-
)
- implementation ('org.mnode.ical4j:ical4j') {
- exclude group: 'commons-logging'
- exclude group: 'javax.activation'
- exclude group: 'com.sun.mail', module: 'javax.mail'
+ 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'
}
- compileOnly 'org.projectlombok:lombok'
- annotationProcessor 'org.projectlombok:lombok'
- annotationProcessor 'org.mapstruct:mapstruct-processor'
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( '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'
@@ -84,5 +117,17 @@ dependencies {
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%
copy from
fineract-core/src/main/java/org/apache/fineract/cob/COBBusinessStep.java
copy 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-core/src/main/java/org/apache/fineract/cob/COBBusinessStep.java
b/fineract-cob/src/main/java/org/apache/fineract/cob/COBConstant.java
similarity index 66%
rename from
fineract-core/src/main/java/org/apache/fineract/cob/COBBusinessStep.java
rename to fineract-cob/src/main/java/org/apache/fineract/cob/COBConstant.java
index 2d0cea7d4c..0e874850aa 100644
--- a/fineract-core/src/main/java/org/apache/fineract/cob/COBBusinessStep.java
+++ b/fineract-cob/src/main/java/org/apache/fineract/cob/COBConstant.java
@@ -18,13 +18,18 @@
*/
package org.apache.fineract.cob;
-import
org.apache.fineract.infrastructure.core.domain.AbstractPersistableCustom;
+public class COBConstant {
-public interface COBBusinessStep<T extends AbstractPersistableCustom<Long>> {
+ public static final String BUSINESS_STEPS = "businessSteps";
- T execute(T input);
+ public static final String BUSINESS_DATE_PARAMETER_NAME = "BusinessDate";
+ public static final String IS_CATCH_UP_PARAMETER_NAME = "IS_CATCH_UP";
- String getEnumStyledName();
+ public static final String COB_CUSTOM_JOB_PARAMETER_KEY =
"CUSTOM_JOB_PARAMETER_ID";
- String getHumanReadableName();
+ 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 b7a94b13f0..dc1cd1bb8a 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 cdebe11857..534902a0e5 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 36f5d22a05..2d44f55b1c 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 9039c1ab61..863d2b1d7c 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 9a10fc49a5..16ab50e68c 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 64111e91bd..c31df0ff67 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 618b78e3fc..b2173399d7 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 0000000000..2798800004
--- /dev/null
+++
b/fineract-cob/src/main/resources/jpa/static-weaving/module/fineract-cob/persistence.xml
@@ -0,0 +1,80 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+ 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.
+
+-->
+
+
+<persistence version="2.0"
+ xmlns="http://java.sun.com/xml/ns/persistence"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://java.sun.com/xml/ns/persistence
http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
+
+ <!-- This file is only used for static weaving, nothing more. -->
+ <!-- You can find the runtime configuration in the JPAConfig class -->
+ <persistence-unit name="jpa-pu" transaction-type="RESOURCE_LOCAL">
+ <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
+ <!-- Core Module Entities -->
+ <class>org.apache.fineract.useradministration.domain.Role</class>
+ <class>org.apache.fineract.portfolio.fund.domain.Fund</class>
+
<class>org.apache.fineract.infrastructure.documentmanagement.domain.Image</class>
+
<class>org.apache.fineract.organisation.workingdays.domain.WorkingDays</class>
+ <class>org.apache.fineract.useradministration.domain.Permission</class>
+
<class>org.apache.fineract.useradministration.domain.AppUserClientMapping</class>
+ <class>org.apache.fineract.commands.domain.CommandSource</class>
+ <class>org.apache.fineract.useradministration.domain.AppUser</class>
+
<class>org.apache.fineract.accounting.glaccount.domain.GLAccount</class>
+
<class>org.apache.fineract.organisation.monetary.domain.OrganisationCurrency</class>
+ <class>org.apache.fineract.organisation.staff.domain.Staff</class>
+ <class>org.apache.fineract.portfolio.rate.domain.Rate</class>
+
<class>org.apache.fineract.organisation.monetary.domain.ApplicationCurrency</class>
+
<class>org.apache.fineract.portfolio.calendar.domain.CalendarInstance</class>
+
<class>org.apache.fineract.portfolio.paymentdetail.domain.PaymentDetail</class>
+ <class>org.apache.fineract.portfolio.calendar.domain.Calendar</class>
+
<class>org.apache.fineract.portfolio.calendar.domain.CalendarHistory</class>
+
<class>org.apache.fineract.portfolio.client.domain.ClientIdentifier</class>
+
<class>org.apache.fineract.portfolio.delinquency.domain.DelinquencyBucket</class>
+
<class>org.apache.fineract.portfolio.delinquency.domain.DelinquencyRange</class>
+
<class>org.apache.fineract.portfolio.group.domain.StaffAssignmentHistory</class>
+ <class>org.apache.fineract.portfolio.group.domain.Group</class>
+ <class>org.apache.fineract.portfolio.client.domain.Client</class>
+
<class>org.apache.fineract.infrastructure.event.external.repository.domain.ExternalEventConfiguration</class>
+ <class>org.apache.fineract.portfolio.group.domain.GroupRole</class>
+
<class>org.apache.fineract.portfolio.paymenttype.domain.PaymentType</class>
+ <class>org.apache.fineract.portfolio.group.domain.GroupLevel</class>
+
<class>org.apache.fineract.infrastructure.event.external.repository.domain.ExternalEvent</class>
+ <class>org.apache.fineract.organisation.office.domain.Office</class>
+ <class>org.apache.fineract.organisation.holiday.domain.Holiday</class>
+
<class>org.apache.fineract.infrastructure.cache.domain.PlatformCache</class>
+ <class>org.apache.fineract.infrastructure.codes.domain.Code</class>
+
<class>org.apache.fineract.infrastructure.businessdate.domain.BusinessDate</class>
+
<class>org.apache.fineract.infrastructure.codes.domain.CodeValue</class>
+
+ <!-- Command Module Entities -->
+
<class>org.apache.fineract.command.persistence.domain.CommandEntity</class>
+
<class>org.apache.fineract.command.persistence.converter.JsonAttributeConverter</class>
+
+ <!-- Validation Module Entities -->
+
+ <exclude-unlisted-classes>false</exclude-unlisted-classes>
+ <properties>
+ <property name="eclipselink.weaving" value="static" />
+ </properties>
+ </persistence-unit>
+</persistence>
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 398c5e7208..d6496ef000 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 02c5931641..e590c341c0 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 5d439e7088..6f364634aa 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 9990f6f43e..fa95f05a97 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<LoanAccountLockCannotBeOverruledException> {
+public class LoanAccountLockCannotBeOverruledExceptionMapper implements
ExceptionMapper<AccountLockCannotBeOverruledException> {
@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 a4bfa9ed40..05f3314d4b 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<Loan, Long>, JpaSpecificat
List<Long> findIdsByExternalIds(@Param("externalIds") List<ExternalId>
externalIds);
@Query(FIND_ALL_LOANS_BEHIND_BY_LOAN_IDS_AND_STATUSES)
- List<LoanIdAndLastClosedBusinessDate>
findAllLoansBehindByLoanIdsAndStatuses(@Param("cobBusinessDate") LocalDate
cobBusinessDate,
+ List<COBIdAndLastClosedBusinessDate>
findAllLoansBehindByLoanIdsAndStatuses(@Param("cobBusinessDate") LocalDate
cobBusinessDate,
@Param("loanIds") List<Long> loanIds, @Param("loanStatuses")
Collection<LoanStatus> loanStatuses);
@Query(FIND_ALL_LOANS_BEHIND_OR_NULL_BY_LOAN_IDS_AND_STATUSES)
- List<LoanIdAndLastClosedBusinessDate>
findAllLoansBehindOrNullByLoanIdsAndStatuses(@Param("cobBusinessDate")
LocalDate cobBusinessDate,
+ List<COBIdAndLastClosedBusinessDate>
findAllLoansBehindOrNullByLoanIdsAndStatuses(@Param("cobBusinessDate")
LocalDate cobBusinessDate,
@Param("loanIds") List<Long> loanIds, @Param("loanStatuses")
Collection<LoanStatus> 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<Loan, Long>, JpaSpecificat
@Param("loanStatuses") Collection<LoanStatus> loanStatuses);
@Query(FIND_OLDEST_COB_PROCESSED_LOAN)
- List<LoanIdAndLastClosedBusinessDate>
findOldestCOBProcessedLoan(@Param("cobBusinessDate") LocalDate cobBusinessDate,
+ List<COBIdAndLastClosedBusinessDate>
findOldestCOBProcessedLoan(@Param("cobBusinessDate") LocalDate cobBusinessDate,
@Param("loanStatuses") Collection<LoanStatus> loanStatuses);
@Query(FIND_ALL_STAYED_LOCKED_BY_COB_BUSINESS_DATE)
- List<LoanIdAndExternalIdAndAccountNo>
findAllStayedLockedByCobBusinessDate(@Param("cobBusinessDate") LocalDate
cobBusinessDate);
+ List<COBIdAndExternalIdAndAccountNo>
findAllStayedLockedByCobBusinessDate(@Param("cobBusinessDate") LocalDate
cobBusinessDate);
@Query(FIND_ALL_LOAN_IDS_BY_STATUS)
List<Long> findLoanIdByStatus(@Param("loanStatus") LoanStatus loanStatus);
diff --git a/fineract-provider/dependencies.gradle
b/fineract-provider/dependencies.gradle
index bfbc20da42..462689794b 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 3f911919bb..09284b2b9f 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<LoanCOBPartition> loanCOBPartitions =
retrieveLoanIdService.retrieveLoanCOBPartitions(LoanCOBConstant.NUMBER_OF_DAYS_BEHIND,
+ List<COBPartition> 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 d25f74b687..dab46770dd 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<Long> 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 97f09d7bb9..9916ffea78 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 0d27e8bcbb..69bb2c8bec 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<LoanCOBPartition> loanCOBPartitions = new ArrayList<>(
+ List<COBPartition> 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<LoanCOBPartition> loanCOBPartitions) {
- return
loanCOBPartitions.stream().map(LoanCOBPartition::getCount).reduce(0L,
Long::sum);
+ private long getLoanCount(List<COBPartition> loanCOBPartitions) {
+ return
loanCOBPartitions.stream().map(COBPartition::getCount).reduce(0L, Long::sum);
}
- private ExecutionContext createNewPartition(Set<BusinessStepNameAndOrder>
cobBusinessSteps, LoanCOBPartition loanCOBPartition) {
+ private ExecutionContext createNewPartition(Set<BusinessStepNameAndOrder>
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 19f886024d..933c656674 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<Long> 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 b5c757ee31..7c81cc43da 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<LoanCOBPartition> retrieveLoanCOBPartitions(Long numberOfDays,
LocalDate businessDate, boolean isCatchUp,
- int partitionSize) {
+ public List<COBPartition> 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<LoanIdAndLastClosedBusinessDate>
retrieveLoanIdsBehindDate(LocalDate businessDate, List<Long> loanIds) {
+ public List<COBIdAndLastClosedBusinessDate>
retrieveLoanIdsBehindDate(LocalDate businessDate, List<Long> loanIds) {
return
loanRepository.findAllLoansBehindByLoanIdsAndStatuses(businessDate, loanIds,
NON_CLOSED_LOAN_STATUSES);
}
@Override
- public List<LoanIdAndLastClosedBusinessDate>
retrieveLoanIdsBehindDateOrNull(LocalDate businessDate, List<Long> loanIds) {
+ public List<COBIdAndLastClosedBusinessDate>
retrieveLoanIdsBehindDateOrNull(LocalDate businessDate, List<Long> loanIds) {
return
loanRepository.findAllLoansBehindOrNullByLoanIdsAndStatuses(businessDate,
loanIds, NON_CLOSED_LOAN_STATUSES);
}
@Override
- public List<LoanIdAndLastClosedBusinessDate>
retrieveLoanIdsOldestCobProcessed(LocalDate businessDate) {
+ public List<COBIdAndLastClosedBusinessDate>
retrieveLoanIdsOldestCobProcessed(LocalDate businessDate) {
return loanRepository.findOldestCOBProcessedLoan(businessDate,
NON_CLOSED_LOAN_STATUSES);
}
@Override
- public List<Long>
retrieveAllNonClosedLoansByLastClosedBusinessDateAndMinAndMaxLoanId(LoanCOBParameter
loanCOBParameter,
+ public List<Long>
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<LoanIdAndExternalIdAndAccountNo>
findAllStayedLockedByCobBusinessDate(LocalDate cobBusinessDate) {
+ public List<COBIdAndExternalIdAndAccountNo>
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 82df2c73c7..8604b01baa 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<LoanCOBPartition> retrieveLoanCOBPartitions(Long numberOfDays,
LocalDate businessDate, boolean isCatchUp, int partitionSize);
+ List<COBPartition> retrieveLoanCOBPartitions(Long numberOfDays, LocalDate
businessDate, boolean isCatchUp, int partitionSize);
- List<LoanIdAndLastClosedBusinessDate> retrieveLoanIdsBehindDate(LocalDate
businessDate, List<Long> loanIds);
+ List<COBIdAndLastClosedBusinessDate> retrieveLoanIdsBehindDate(LocalDate
businessDate, List<Long> loanIds);
- List<LoanIdAndLastClosedBusinessDate>
retrieveLoanIdsBehindDateOrNull(LocalDate businessDate, List<Long> loanIds);
+ List<COBIdAndLastClosedBusinessDate>
retrieveLoanIdsBehindDateOrNull(LocalDate businessDate, List<Long> loanIds);
- List<LoanIdAndLastClosedBusinessDate>
retrieveLoanIdsOldestCobProcessed(LocalDate businessDate);
+ List<COBIdAndLastClosedBusinessDate>
retrieveLoanIdsOldestCobProcessed(LocalDate businessDate);
- List<Long>
retrieveAllNonClosedLoansByLastClosedBusinessDateAndMinAndMaxLoanId(LoanCOBParameter
loanCOBParameter, boolean isCatchUp);
+ List<Long>
retrieveAllNonClosedLoansByLastClosedBusinessDateAndMinAndMaxLoanId(COBParameter
loanCOBParameter, boolean isCatchUp);
- List<LoanIdAndExternalIdAndAccountNo>
findAllStayedLockedByCobBusinessDate(@Param("cobBusinessDate") LocalDate
cobBusinessDate);
+ List<COBIdAndExternalIdAndAccountNo>
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 0b99ac3979..2bc4f773b9 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<LoanIdAndExternalIdAndAccountNo> stayedLockedLoanAccounts =
retrieveLoanIdService
+ List<COBIdAndExternalIdAndAccountNo> stayedLockedLoanAccounts =
retrieveLoanIdService
.findAllStayedLockedByCobBusinessDate(cobBusinessDate);
List<LoanAccountStayedLockedData> 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 92d9c49249..8de6583679 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>
loanIdAndLastClosedBusinessDate = retrieveLoanIdService
+ List<COBIdAndLastClosedBusinessDate>
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 4e106d3b2b..ec8fb7ba0e 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<L
@Override
@Transactional(propagation = Propagation.NOT_SUPPORTED)
- public CommandProcessingResult executeInlineJob(JsonCommand command,
String jobName) throws LoanAccountLockCannotBeOverruledException {
+ public CommandProcessingResult executeInlineJob(JsonCommand command,
String jobName) throws AccountLockCannotBeOverruledException {
List<Long> loanIds = dataParser.parseExecution(command);
validateLoanIdsListSize(loanIds);
execute(loanIds, jobName);
@@ -111,7 +111,7 @@ public class InlineLoanCOBExecutorServiceImpl implements
InlineExecutorService<L
@Override
public void execute(List<Long> loanIds, String jobName) {
LocalDate cobBusinessDate =
ThreadLocalContextUtil.getBusinessDateByType(BusinessDateType.COB_DATE);
- List<LoanIdAndLastClosedBusinessDate> loansToBeProcessed =
getLoansToBeProcessed(loanIds, cobBusinessDate);
+ List<COBIdAndLastClosedBusinessDate> 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<L
}
}
- private List<Long>
getLoanIdsToBeProcessed(List<LoanIdAndLastClosedBusinessDate>
loansToBeProcessed, LocalDate executingBusinessDate) {
+ private List<Long>
getLoanIdsToBeProcessed(List<COBIdAndLastClosedBusinessDate>
loansToBeProcessed, LocalDate executingBusinessDate) {
List<Long> loanIdsToBeProcessed = new ArrayList<>();
loansToBeProcessed.forEach(loan -> {
if (loan.getLastClosedBusinessDate() != null) {
@@ -159,16 +159,16 @@ public class InlineLoanCOBExecutorServiceImpl implements
InlineExecutorService<L
}
}
- private LocalDate
getOldestCOBBusinessDate(List<LoanIdAndLastClosedBusinessDate> loans) {
- LoanIdAndLastClosedBusinessDate oldestLoan =
loans.stream().min(Comparator
-
.comparing(LoanIdAndLastClosedBusinessDate::getLastClosedBusinessDate,
Comparator.nullsLast(Comparator.naturalOrder())))
+ private LocalDate
getOldestCOBBusinessDate(List<COBIdAndLastClosedBusinessDate> 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<LoanIdAndLastClosedBusinessDate>
getLoansToBeProcessed(List<Long> loanIds, LocalDate cobBusinessDate) {
- List<LoanIdAndLastClosedBusinessDate> loanIdAndLastClosedBusinessDates
= new ArrayList<>();
+ private List<COBIdAndLastClosedBusinessDate>
getLoansToBeProcessed(List<Long> loanIds, LocalDate cobBusinessDate) {
+ List<COBIdAndLastClosedBusinessDate> loanIdAndLastClosedBusinessDates
= new ArrayList<>();
List<List<Long>> 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<L
if (!alreadyLockedLoanIds.isEmpty()) {
String message = "There is a hard lock on the loan account without
any error, so it can't be overruled.";
String loanIdsMessage = " Locked loan IDs: " +
alreadyLockedLoanIds;
- throw new LoanAccountLockCannotBeOverruledException(message +
loanIdsMessage);
+ throw new AccountLockCannotBeOverruledException(message +
loanIdsMessage);
}
return loanAccountLocks;
@@ -229,7 +229,7 @@ public class InlineLoanCOBExecutorServiceImpl implements
InlineExecutorService<L
loanAccountLockRepository.saveAndFlush(loanAccountLock);
} catch (Exception e) {
log.error("Error updating lock on loan account. Locked
loan ID: {}", loanAccountLock.getLoanId(), e);
- throw new LoanAccountLockCannotBeOverruledException(
+ throw new AccountLockCannotBeOverruledException(
"Error updating lock on loan account. Locked
loan ID: %s".formatted(loanAccountLock.getLoanId()), e);
}
});
diff --git
a/fineract-provider/src/main/java/org/apache/fineract/cob/service/BusinessStepCategoryServiceImpl.java
b/fineract-provider/src/main/java/org/apache/fineract/cob/service/LoanBusinessStepCategoryServiceImpl.java
similarity index 94%
rename from
fineract-provider/src/main/java/org/apache/fineract/cob/service/BusinessStepCategoryServiceImpl.java
rename to
fineract-provider/src/main/java/org/apache/fineract/cob/service/LoanBusinessStepCategoryServiceImpl.java
index d089830931..d4308f8b95 100644
---
a/fineract-provider/src/main/java/org/apache/fineract/cob/service/BusinessStepCategoryServiceImpl.java
+++
b/fineract-provider/src/main/java/org/apache/fineract/cob/service/LoanBusinessStepCategoryServiceImpl.java
@@ -24,7 +24,7 @@ import org.apache.fineract.cob.loan.LoanCOBBusinessStep;
import org.springframework.stereotype.Service;
@Service
-public class BusinessStepCategoryServiceImpl implements
BusinessStepCategoryService {
+public class LoanBusinessStepCategoryServiceImpl implements
BusinessStepCategoryService {
private static final Map<BusinessStepCategory, Class<? extends
COBBusinessStep>> 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 8643df3b60..39b346b4a3 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> loanIdAndLastClosedBusinessDate
= retrieveLoanIdService
+ List<COBIdAndLastClosedBusinessDate> 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 670caf5988..5066277a08 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<Long> loanIds) {
- List<LoanIdAndLastClosedBusinessDate> loanIdAndLastClosedBusinessDates
= new ArrayList<>();
+ List<COBIdAndLastClosedBusinessDate> loanIdAndLastClosedBusinessDates
= new ArrayList<>();
List<List<Long>> 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 57e3a17368..dcd2a834cb 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 6e077b5e82..3ff79b721f 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 0ec011905a..799232c667 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<String, ExecutionContext> 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 0e39813752..cc538e5cdc 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 b1f07ebdca..81d822cb02 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 668ebffa40..2d39f1fc9a 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<SqlParameterSource> paramsCaptor;
@Captor
- private ArgumentCaptor<RowMapper<LoanCOBPartition>> rowMapper;
+ private ArgumentCaptor<RowMapper<COBPartition>> 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 bb3a855ff8..c910415c71 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<BusinessDateType, LocalDate> 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<BusinessDateType, LocalDate> 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 37452d3bfb..4bf1f3a807 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 c4dd82a0d8..5449981db3 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 cd4aa8b14b..de7530c1a1 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'