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 4d3c40dc5 FINERACT-1932: Add stater configuration class for 
portfolio.loanaccount module services
4d3c40dc5 is described below

commit 4d3c40dc50ba23b27a0825b3c33535bfb45ae653
Author: Mohamed Magdi-Abdelmonem <[email protected]>
AuthorDate: Sat Oct 7 21:43:12 2023 +0300

    FINERACT-1932: Add stater configuration class for portfolio.loanaccount 
module services
---
 .../service/BulkLoansReadPlatformServiceImpl.java  |   2 -
 .../GLIMAccountInfoReadPlatformServiceImpl.java    |  14 +-
 .../GLIMAccountInfoWritePlatformServiceImpl.java   |  13 +-
 .../service/LoanAccrualPlatformServiceImpl.java    |   2 -
 ...AccrualTransactionBusinessEventServiceImpl.java |   2 -
 .../LoanAccrualWritePlatformServiceImpl.java       |   2 -
 ...ationWritePlatformServiceJpaRepositoryImpl.java |   2 -
 .../service/LoanArrearsAgingServiceImpl.java       |   2 -
 .../loanaccount/service/LoanAssembler.java         |   2 -
 .../LoanCalculateRepaymentPastDueService.java      |   4 +-
 .../loanaccount/service/LoanChargeAssembler.java   |   2 -
 .../LoanChargePaidByReadPlatformServiceImpl.java   |  12 +-
 .../service/LoanChargeReadPlatformServiceImpl.java |   2 -
 .../LoanChargeWritePlatformServiceImpl.java        |   2 -
 .../service/LoanReadPlatformServiceImpl.java       |   2 -
 .../LoanStatusChangePlatformServiceImpl.java       |   2 -
 .../loanaccount/service/LoanUtilService.java       |  22 +-
 .../LoanWritePlatformServiceJpaRepositoryImpl.java |   2 -
 .../service/RecalculateInterestPoster.java         |  14 +-
 ...eplayedTransactionBusinessEventServiceImpl.java |   2 -
 .../starter/LoanAccountConfiguration.java          | 433 +++++++++++++++++++++
 21 files changed, 448 insertions(+), 92 deletions(-)

diff --git 
a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/BulkLoansReadPlatformServiceImpl.java
 
b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/BulkLoansReadPlatformServiceImpl.java
index 20e8ac585..48ba7dca4 100644
--- 
a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/BulkLoansReadPlatformServiceImpl.java
+++ 
b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/BulkLoansReadPlatformServiceImpl.java
@@ -32,9 +32,7 @@ import 
org.apache.fineract.portfolio.client.domain.ClientStatus;
 import org.apache.fineract.portfolio.group.domain.GroupingTypeStatus;
 import org.springframework.jdbc.core.JdbcTemplate;
 import org.springframework.jdbc.core.RowMapper;
-import org.springframework.stereotype.Service;
 
-@Service
 @RequiredArgsConstructor
 public class BulkLoansReadPlatformServiceImpl implements 
BulkLoansReadPlatformService {
 
diff --git 
a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/GLIMAccountInfoReadPlatformServiceImpl.java
 
b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/GLIMAccountInfoReadPlatformServiceImpl.java
index 76a9936df..82b630e9a 100644
--- 
a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/GLIMAccountInfoReadPlatformServiceImpl.java
+++ 
b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/GLIMAccountInfoReadPlatformServiceImpl.java
@@ -25,6 +25,7 @@ import java.sql.SQLException;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.List;
+import lombok.RequiredArgsConstructor;
 import 
org.apache.fineract.infrastructure.security.service.PlatformSecurityContext;
 import 
org.apache.fineract.portfolio.accountdetails.data.LoanAccountSummaryData;
 import 
org.apache.fineract.portfolio.accountdetails.service.AccountDetailsReadPlatformService;
@@ -32,27 +33,16 @@ import 
org.apache.fineract.portfolio.loanaccount.data.GLIMContainer;
 import org.apache.fineract.portfolio.loanaccount.data.GlimRepaymentTemplate;
 import 
org.apache.fineract.portfolio.loanaccount.data.GroupLoanIndividualMonitoringAccountData;
 import org.apache.fineract.portfolio.loanaccount.domain.LoanStatus;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.jdbc.core.JdbcTemplate;
 import org.springframework.jdbc.core.RowMapper;
-import org.springframework.stereotype.Service;
 
-@Service
+@RequiredArgsConstructor
 public class GLIMAccountInfoReadPlatformServiceImpl implements 
GLIMAccountInfoReadPlatformService {
 
     private final JdbcTemplate jdbcTemplate;
     private final PlatformSecurityContext context;
     private final AccountDetailsReadPlatformService 
accountDetailsReadPlatforService;
 
-    @Autowired
-    public GLIMAccountInfoReadPlatformServiceImpl(final 
PlatformSecurityContext context, final JdbcTemplate jdbcTemplate,
-            final AccountDetailsReadPlatformService 
accountDetailsReadPlatforService) {
-        this.context = context;
-        this.jdbcTemplate = jdbcTemplate;
-        this.accountDetailsReadPlatforService = 
accountDetailsReadPlatforService;
-
-    }
-
     private static final class GLIMFieldsMapper implements 
RowMapper<GroupLoanIndividualMonitoringAccountData> {
 
         public String schema() {
diff --git 
a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/GLIMAccountInfoWritePlatformServiceImpl.java
 
b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/GLIMAccountInfoWritePlatformServiceImpl.java
index 23ca79539..f07da8036 100644
--- 
a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/GLIMAccountInfoWritePlatformServiceImpl.java
+++ 
b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/GLIMAccountInfoWritePlatformServiceImpl.java
@@ -20,15 +20,14 @@
 package org.apache.fineract.portfolio.loanaccount.service;
 
 import java.math.BigDecimal;
+import lombok.RequiredArgsConstructor;
 import 
org.apache.fineract.infrastructure.security.service.PlatformSecurityContext;
 import org.apache.fineract.portfolio.group.domain.Group;
 import 
org.apache.fineract.portfolio.loanaccount.domain.GLIMAccountInfoRepository;
 import 
org.apache.fineract.portfolio.loanaccount.domain.GroupLoanIndividualMonitoringAccount;
 import org.apache.fineract.portfolio.loanaccount.domain.LoanRepository;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
 
-@Service
+@RequiredArgsConstructor
 public class GLIMAccountInfoWritePlatformServiceImpl implements 
GLIMAccountInfoWritePlatformService {
 
     private final PlatformSecurityContext context;
@@ -37,14 +36,6 @@ public class GLIMAccountInfoWritePlatformServiceImpl 
implements GLIMAccountInfoW
 
     private final LoanRepository loanRepository;
 
-    @Autowired
-    public GLIMAccountInfoWritePlatformServiceImpl(final 
PlatformSecurityContext context,
-            final GLIMAccountInfoRepository glimAccountRepository, final 
LoanRepository loanRepository) {
-        this.context = context;
-        this.glimAccountRepository = glimAccountRepository;
-        this.loanRepository = loanRepository;
-    }
-
     @Override
     public void addGLIMAccountInfo(String accountNumber, Group group, 
BigDecimal principalAmount, Long childAccountsCount,
             Boolean isAcceptingChild, Integer loanStatus, BigDecimal 
applicationId) {
diff --git 
a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanAccrualPlatformServiceImpl.java
 
b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanAccrualPlatformServiceImpl.java
index abe7867f3..85a6a8dcf 100644
--- 
a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanAccrualPlatformServiceImpl.java
+++ 
b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanAccrualPlatformServiceImpl.java
@@ -29,9 +29,7 @@ import lombok.extern.slf4j.Slf4j;
 import org.apache.fineract.infrastructure.jobs.exception.JobExecutionException;
 import org.apache.fineract.portfolio.loanaccount.data.LoanScheduleAccrualData;
 import org.apache.fineract.portfolio.loanaccount.domain.Loan;
-import org.springframework.stereotype.Service;
 
-@Service
 @Slf4j
 @RequiredArgsConstructor
 public class LoanAccrualPlatformServiceImpl implements 
LoanAccrualPlatformService {
diff --git 
a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanAccrualTransactionBusinessEventServiceImpl.java
 
b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanAccrualTransactionBusinessEventServiceImpl.java
index 2afa34d7a..0a0c84997 100644
--- 
a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanAccrualTransactionBusinessEventServiceImpl.java
+++ 
b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanAccrualTransactionBusinessEventServiceImpl.java
@@ -24,9 +24,7 @@ import 
org.apache.fineract.infrastructure.event.business.domain.loan.transaction
 import 
org.apache.fineract.infrastructure.event.business.service.BusinessEventNotifierService;
 import org.apache.fineract.portfolio.loanaccount.domain.Loan;
 import org.apache.fineract.portfolio.loanaccount.domain.LoanTransaction;
-import org.springframework.stereotype.Service;
 
-@Service
 @RequiredArgsConstructor
 public class LoanAccrualTransactionBusinessEventServiceImpl implements 
LoanAccrualTransactionBusinessEventService {
 
diff --git 
a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanAccrualWritePlatformServiceImpl.java
 
b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanAccrualWritePlatformServiceImpl.java
index 69a843747..dfe907b70 100644
--- 
a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanAccrualWritePlatformServiceImpl.java
+++ 
b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanAccrualWritePlatformServiceImpl.java
@@ -60,10 +60,8 @@ import 
org.apache.fineract.portfolio.loanproduct.service.LoanEnumerations;
 import org.apache.fineract.useradministration.domain.AppUser;
 import org.springframework.dao.DataAccessException;
 import org.springframework.jdbc.core.JdbcTemplate;
-import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
-@Service
 @RequiredArgsConstructor
 public class LoanAccrualWritePlatformServiceImpl implements 
LoanAccrualWritePlatformService {
 
diff --git 
a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanApplicationWritePlatformServiceJpaRepositoryImpl.java
 
b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanApplicationWritePlatformServiceJpaRepositoryImpl.java
index 13696fc18..ea34b502a 100644
--- 
a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanApplicationWritePlatformServiceJpaRepositoryImpl.java
+++ 
b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanApplicationWritePlatformServiceJpaRepositoryImpl.java
@@ -144,11 +144,9 @@ import 
org.apache.fineract.portfolio.savings.service.GSIMReadPlatformService;
 import org.apache.fineract.useradministration.domain.AppUser;
 import org.springframework.dao.DataIntegrityViolationException;
 import org.springframework.orm.jpa.JpaSystemException;
-import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.CollectionUtils;
 
-@Service
 @Slf4j
 @RequiredArgsConstructor
 public class LoanApplicationWritePlatformServiceJpaRepositoryImpl implements 
LoanApplicationWritePlatformService {
diff --git 
a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanArrearsAgingServiceImpl.java
 
b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanArrearsAgingServiceImpl.java
index 0401aa619..93ecfb0da 100644
--- 
a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanArrearsAgingServiceImpl.java
+++ 
b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanArrearsAgingServiceImpl.java
@@ -58,9 +58,7 @@ import 
org.apache.fineract.portfolio.loanaccount.loanschedule.data.LoanScheduleP
 import org.springframework.dao.DataAccessException;
 import org.springframework.jdbc.core.JdbcTemplate;
 import org.springframework.jdbc.core.ResultSetExtractor;
-import org.springframework.stereotype.Service;
 
-@Service
 @Slf4j
 @RequiredArgsConstructor
 public class LoanArrearsAgingServiceImpl implements LoanArrearsAgingService {
diff --git 
a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanAssembler.java
 
b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanAssembler.java
index 78a8eead9..80f7a0770 100644
--- 
a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanAssembler.java
+++ 
b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanAssembler.java
@@ -86,9 +86,7 @@ import 
org.apache.fineract.portfolio.loanproduct.exception.LinkedAccountRequired
 import 
org.apache.fineract.portfolio.loanproduct.exception.LoanProductNotFoundException;
 import org.apache.fineract.portfolio.rate.domain.Rate;
 import org.apache.fineract.portfolio.rate.service.RateAssembler;
-import org.springframework.stereotype.Service;
 
-@Service
 @RequiredArgsConstructor
 public class LoanAssembler {
 
diff --git 
a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanCalculateRepaymentPastDueService.java
 
b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanCalculateRepaymentPastDueService.java
index 15cf05d8a..23bdf788f 100644
--- 
a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanCalculateRepaymentPastDueService.java
+++ 
b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanCalculateRepaymentPastDueService.java
@@ -22,14 +22,14 @@ import java.math.BigDecimal;
 import java.time.LocalDate;
 import java.util.List;
 import java.util.stream.Collectors;
+import lombok.NoArgsConstructor;
 import org.apache.fineract.infrastructure.core.service.DateUtils;
 import org.apache.fineract.organisation.monetary.domain.MonetaryCurrency;
 import org.apache.fineract.portfolio.loanaccount.data.LoanRepaymentPastDueData;
 import org.apache.fineract.portfolio.loanaccount.domain.Loan;
 import 
org.apache.fineract.portfolio.loanaccount.domain.LoanRepaymentScheduleInstallment;
-import org.springframework.stereotype.Component;
 
-@Component
+@NoArgsConstructor
 public class LoanCalculateRepaymentPastDueService {
 
     public LoanRepaymentPastDueData 
retrieveLoanRepaymentPastDueAmountTillDate(Loan loan) {
diff --git 
a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanChargeAssembler.java
 
b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanChargeAssembler.java
index 827c8d3ef..5dd39775f 100644
--- 
a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanChargeAssembler.java
+++ 
b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanChargeAssembler.java
@@ -50,9 +50,7 @@ import 
org.apache.fineract.portfolio.loanaccount.domain.LoanTrancheDisbursementC
 import org.apache.fineract.portfolio.loanproduct.domain.LoanProduct;
 import org.apache.fineract.portfolio.loanproduct.domain.LoanProductRepository;
 import 
org.apache.fineract.portfolio.loanproduct.exception.LoanProductNotFoundException;
-import org.springframework.stereotype.Service;
 
-@Service
 @RequiredArgsConstructor
 public class LoanChargeAssembler {
 
diff --git 
a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanChargePaidByReadPlatformServiceImpl.java
 
b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanChargePaidByReadPlatformServiceImpl.java
index 82591ec5a..976c04f2e 100644
--- 
a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanChargePaidByReadPlatformServiceImpl.java
+++ 
b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanChargePaidByReadPlatformServiceImpl.java
@@ -23,26 +23,18 @@ import java.math.BigDecimal;
 import java.sql.ResultSet;
 import java.sql.SQLException;
 import java.util.List;
+import lombok.RequiredArgsConstructor;
 import 
org.apache.fineract.infrastructure.security.service.PlatformSecurityContext;
 import org.apache.fineract.portfolio.loanaccount.data.LoanChargePaidByData;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.jdbc.core.JdbcTemplate;
 import org.springframework.jdbc.core.RowMapper;
-import org.springframework.stereotype.Service;
 
-@Service
+@RequiredArgsConstructor
 public class LoanChargePaidByReadPlatformServiceImpl implements 
LoanChargePaidByReadPlatformService {
 
     private final JdbcTemplate jdbcTemplate;
     private final PlatformSecurityContext context;
 
-    @Autowired
-    public LoanChargePaidByReadPlatformServiceImpl(final 
PlatformSecurityContext context, final JdbcTemplate jdbcTemplate) {
-        this.context = context;
-        this.jdbcTemplate = jdbcTemplate;
-
-    }
-
     @Override
     public List<LoanChargePaidByData> getLoanChargesPaidByTransactionId(Long 
transactionId) {
         this.context.authenticatedUser();
diff --git 
a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanChargeReadPlatformServiceImpl.java
 
b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanChargeReadPlatformServiceImpl.java
index f61c454ff..79d2e4532 100644
--- 
a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanChargeReadPlatformServiceImpl.java
+++ 
b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanChargeReadPlatformServiceImpl.java
@@ -51,9 +51,7 @@ import org.apache.fineract.portfolio.tax.data.TaxGroupData;
 import org.springframework.dao.EmptyResultDataAccessException;
 import org.springframework.jdbc.core.JdbcTemplate;
 import org.springframework.jdbc.core.RowMapper;
-import org.springframework.stereotype.Service;
 
-@Service
 @RequiredArgsConstructor
 public class LoanChargeReadPlatformServiceImpl implements 
LoanChargeReadPlatformService {
 
diff --git 
a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanChargeWritePlatformServiceImpl.java
 
b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanChargeWritePlatformServiceImpl.java
index 27c292d52..d155d1911 100644
--- 
a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanChargeWritePlatformServiceImpl.java
+++ 
b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanChargeWritePlatformServiceImpl.java
@@ -130,11 +130,9 @@ import 
org.apache.fineract.portfolio.note.domain.NoteRepository;
 import org.apache.fineract.portfolio.paymentdetail.domain.PaymentDetail;
 import 
org.apache.fineract.portfolio.paymentdetail.service.PaymentDetailWritePlatformService;
 import org.apache.fineract.portfolio.savings.domain.SavingsAccount;
-import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 @Slf4j
-@Service
 @RequiredArgsConstructor
 public class LoanChargeWritePlatformServiceImpl implements 
LoanChargeWritePlatformService {
 
diff --git 
a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanReadPlatformServiceImpl.java
 
b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanReadPlatformServiceImpl.java
index f4715ae18..4e71c64df 100644
--- 
a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanReadPlatformServiceImpl.java
+++ 
b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanReadPlatformServiceImpl.java
@@ -141,12 +141,10 @@ import org.springframework.jdbc.core.JdbcTemplate;
 import org.springframework.jdbc.core.ResultSetExtractor;
 import org.springframework.jdbc.core.RowMapper;
 import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate;
-import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.CollectionUtils;
 
 @AllArgsConstructor
-@Service
 @Transactional(readOnly = true)
 public class LoanReadPlatformServiceImpl implements LoanReadPlatformService, 
LoanReadPlatformServiceCommon {
 
diff --git 
a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanStatusChangePlatformServiceImpl.java
 
b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanStatusChangePlatformServiceImpl.java
index 241d608d1..5ca41a4f3 100644
--- 
a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanStatusChangePlatformServiceImpl.java
+++ 
b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanStatusChangePlatformServiceImpl.java
@@ -26,11 +26,9 @@ import 
org.apache.fineract.infrastructure.event.business.domain.loan.LoanStatusC
 import 
org.apache.fineract.infrastructure.event.business.service.BusinessEventNotifierService;
 import org.apache.fineract.portfolio.loanaccount.domain.Loan;
 import 
org.apache.fineract.portfolio.loanaccount.domain.LoanAccountDomainServiceJpa;
-import org.springframework.stereotype.Service;
 
 @Slf4j
 @RequiredArgsConstructor
-@Service
 public class LoanStatusChangePlatformServiceImpl implements 
LoanStatusChangePlatformService {
 
     private final BusinessEventNotifierService businessEventNotifierService;
diff --git 
a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanUtilService.java
 
b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanUtilService.java
index 7c1450b56..6ea1add5a 100644
--- 
a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanUtilService.java
+++ 
b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanUtilService.java
@@ -26,6 +26,7 @@ import java.util.ArrayList;
 import java.util.List;
 import java.util.Locale;
 import java.util.Set;
+import lombok.RequiredArgsConstructor;
 import org.apache.commons.lang3.StringUtils;
 import 
org.apache.fineract.infrastructure.configuration.domain.ConfigurationDomainService;
 import 
org.apache.fineract.infrastructure.core.exception.PlatformServiceUnavailableException;
@@ -59,10 +60,8 @@ import 
org.apache.fineract.portfolio.loanaccount.domain.LoanDisbursementDetails;
 import org.apache.fineract.portfolio.loanaccount.domain.LoanTransactionType;
 import 
org.apache.fineract.portfolio.loanaccount.loanschedule.domain.LoanScheduleGeneratorFactory;
 import 
org.apache.fineract.portfolio.loanproduct.domain.LoanProductRelatedDetail;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Component;
 
-@Component
+@RequiredArgsConstructor
 public class LoanUtilService {
 
     private final ApplicationCurrencyRepositoryWrapper 
applicationCurrencyRepository;
@@ -75,23 +74,6 @@ public class LoanUtilService {
     private final FromJsonHelper fromApiJsonHelper;
     private final CalendarReadPlatformService calendarReadPlatformService;
 
-    @Autowired
-    public LoanUtilService(final ApplicationCurrencyRepositoryWrapper 
applicationCurrencyRepository,
-            final CalendarInstanceRepository calendarInstanceRepository, final 
ConfigurationDomainService configurationDomainService,
-            final HolidayRepository holidayRepository, final 
WorkingDaysRepositoryWrapper workingDaysRepository,
-            final LoanScheduleGeneratorFactory loanScheduleFactory, final 
FloatingRatesReadPlatformService floatingRatesReadPlatformService,
-            final FromJsonHelper fromApiJsonHelper, final 
CalendarReadPlatformService calendarReadPlatformService) {
-        this.applicationCurrencyRepository = applicationCurrencyRepository;
-        this.calendarInstanceRepository = calendarInstanceRepository;
-        this.configurationDomainService = configurationDomainService;
-        this.holidayRepository = holidayRepository;
-        this.workingDaysRepository = workingDaysRepository;
-        this.loanScheduleFactory = loanScheduleFactory;
-        this.floatingRatesReadPlatformService = 
floatingRatesReadPlatformService;
-        this.fromApiJsonHelper = fromApiJsonHelper;
-        this.calendarReadPlatformService = calendarReadPlatformService;
-    }
-
     public ScheduleGeneratorDTO buildScheduleGeneratorDTO(final Loan loan, 
final LocalDate recalculateFrom) {
         final HolidayDetailDTO holidayDetailDTO = null;
         return buildScheduleGeneratorDTO(loan, recalculateFrom, 
holidayDetailDTO);
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 4f0e5ae5d..ef4fbd40a 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
@@ -197,10 +197,8 @@ import 
org.apache.fineract.portfolio.transfer.api.TransferApiConstants;
 import org.apache.fineract.useradministration.domain.AppUser;
 import org.springframework.dao.DataIntegrityViolationException;
 import org.springframework.orm.jpa.JpaSystemException;
-import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
-@Service
 @Slf4j
 @RequiredArgsConstructor
 public class LoanWritePlatformServiceJpaRepositoryImpl implements 
LoanWritePlatformService {
diff --git 
a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/RecalculateInterestPoster.java
 
b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/RecalculateInterestPoster.java
index 6d0846fef..396af75ee 100644
--- 
a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/RecalculateInterestPoster.java
+++ 
b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/RecalculateInterestPoster.java
@@ -22,18 +22,14 @@ import java.util.ArrayList;
 import java.util.Collection;
 import java.util.List;
 import java.util.concurrent.Callable;
+import lombok.NoArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
 import org.apache.fineract.infrastructure.jobs.exception.JobExecutionException;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.context.annotation.Scope;
-import org.springframework.stereotype.Component;
 
-@Component
-@Scope("prototype")
+@NoArgsConstructor
+@Slf4j
 public class RecalculateInterestPoster implements Callable<Void> {
 
-    private static final Logger LOG = 
LoggerFactory.getLogger(RecalculateInterestPoster.class);
-
     private Collection<Long> loanIds;
     private LoanWritePlatformService loanWritePlatformService;
 
@@ -50,7 +46,7 @@ public class RecalculateInterestPoster implements 
Callable<Void> {
         if (!loanIds.isEmpty()) {
             List<Throwable> errors = new ArrayList<>();
             for (Long loanId : loanIds) {
-                LOG.debug("Loan ID {}", loanId);
+                log.debug("Loan ID {}", loanId);
                 try {
                     loanWritePlatformService.recalculateInterest(loanId);
                 } catch (Exception e) {
diff --git 
a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/ReplayedTransactionBusinessEventServiceImpl.java
 
b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/ReplayedTransactionBusinessEventServiceImpl.java
index 1359e00e6..6ac3ca3d1 100644
--- 
a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/ReplayedTransactionBusinessEventServiceImpl.java
+++ 
b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/ReplayedTransactionBusinessEventServiceImpl.java
@@ -26,9 +26,7 @@ import 
org.apache.fineract.portfolio.loanaccount.domain.ChangedTransactionDetail
 import org.apache.fineract.portfolio.loanaccount.domain.LoanTransaction;
 import 
org.apache.fineract.portfolio.loanaccount.domain.LoanTransactionRepository;
 import 
org.apache.fineract.portfolio.loanaccount.exception.LoanTransactionNotFoundException;
-import org.springframework.stereotype.Service;
 
-@Service
 @RequiredArgsConstructor
 public class ReplayedTransactionBusinessEventServiceImpl implements 
ReplayedTransactionBusinessEventService {
 
diff --git 
a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/starter/LoanAccountConfiguration.java
 
b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/starter/LoanAccountConfiguration.java
new file mode 100644
index 000000000..7a4f324d8
--- /dev/null
+++ 
b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/starter/LoanAccountConfiguration.java
@@ -0,0 +1,433 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.fineract.portfolio.loanaccount.starter;
+
+import 
org.apache.fineract.accounting.journalentry.service.JournalEntryWritePlatformService;
+import org.apache.fineract.batch.exception.ErrorHandler;
+import org.apache.fineract.cob.service.LoanAccountLockService;
+import 
org.apache.fineract.infrastructure.accountnumberformat.domain.AccountNumberFormatRepositoryWrapper;
+import 
org.apache.fineract.infrastructure.codes.domain.CodeValueRepositoryWrapper;
+import 
org.apache.fineract.infrastructure.codes.service.CodeValueReadPlatformService;
+import 
org.apache.fineract.infrastructure.configuration.domain.ConfigurationDomainService;
+import 
org.apache.fineract.infrastructure.configuration.domain.GlobalConfigurationRepositoryWrapper;
+import org.apache.fineract.infrastructure.core.serialization.FromJsonHelper;
+import org.apache.fineract.infrastructure.core.service.ExternalIdFactory;
+import org.apache.fineract.infrastructure.core.service.PaginationHelper;
+import 
org.apache.fineract.infrastructure.core.service.database.DatabaseSpecificSQLGenerator;
+import 
org.apache.fineract.infrastructure.dataqueries.service.EntityDatatableChecksWritePlatformService;
+import 
org.apache.fineract.infrastructure.entityaccess.domain.FineractEntityRelationRepository;
+import 
org.apache.fineract.infrastructure.entityaccess.domain.FineractEntityToEntityMappingRepository;
+import 
org.apache.fineract.infrastructure.event.business.service.BusinessEventNotifierService;
+import 
org.apache.fineract.infrastructure.security.service.PlatformSecurityContext;
+import org.apache.fineract.infrastructure.security.utils.ColumnValidator;
+import org.apache.fineract.organisation.holiday.domain.HolidayRepository;
+import 
org.apache.fineract.organisation.holiday.domain.HolidayRepositoryWrapper;
+import 
org.apache.fineract.organisation.monetary.domain.ApplicationCurrencyRepositoryWrapper;
+import org.apache.fineract.organisation.office.domain.OfficeRepository;
+import org.apache.fineract.organisation.staff.domain.StaffRepository;
+import org.apache.fineract.organisation.staff.service.StaffReadPlatformService;
+import 
org.apache.fineract.organisation.teller.data.CashierTransactionDataValidator;
+import 
org.apache.fineract.organisation.workingdays.domain.WorkingDaysRepositoryWrapper;
+import 
org.apache.fineract.portfolio.account.domain.AccountAssociationsRepository;
+import 
org.apache.fineract.portfolio.account.domain.AccountTransferDetailRepository;
+import 
org.apache.fineract.portfolio.account.service.AccountAssociationsReadPlatformService;
+import 
org.apache.fineract.portfolio.account.service.AccountTransfersReadPlatformService;
+import 
org.apache.fineract.portfolio.account.service.AccountTransfersWritePlatformService;
+import 
org.apache.fineract.portfolio.accountdetails.service.AccountDetailsReadPlatformService;
+import 
org.apache.fineract.portfolio.calendar.domain.CalendarInstanceRepository;
+import org.apache.fineract.portfolio.calendar.domain.CalendarRepository;
+import 
org.apache.fineract.portfolio.calendar.service.CalendarReadPlatformService;
+import org.apache.fineract.portfolio.charge.domain.ChargeRepositoryWrapper;
+import 
org.apache.fineract.portfolio.charge.service.ChargeDropdownReadPlatformService;
+import org.apache.fineract.portfolio.charge.service.ChargeReadPlatformService;
+import org.apache.fineract.portfolio.client.domain.AccountNumberGenerator;
+import org.apache.fineract.portfolio.client.domain.ClientRepositoryWrapper;
+import org.apache.fineract.portfolio.client.service.ClientReadPlatformService;
+import 
org.apache.fineract.portfolio.collateralmanagement.service.LoanCollateralAssembler;
+import 
org.apache.fineract.portfolio.common.service.DropdownReadPlatformService;
+import 
org.apache.fineract.portfolio.delinquency.service.DelinquencyReadPlatformService;
+import 
org.apache.fineract.portfolio.floatingrates.service.FloatingRatesReadPlatformService;
+import org.apache.fineract.portfolio.fund.domain.FundRepository;
+import org.apache.fineract.portfolio.fund.service.FundReadPlatformService;
+import org.apache.fineract.portfolio.group.domain.GroupRepository;
+import org.apache.fineract.portfolio.group.domain.GroupRepositoryWrapper;
+import org.apache.fineract.portfolio.group.service.GroupReadPlatformService;
+import 
org.apache.fineract.portfolio.loanaccount.domain.GLIMAccountInfoRepository;
+import 
org.apache.fineract.portfolio.loanaccount.domain.LoanAccountDomainService;
+import 
org.apache.fineract.portfolio.loanaccount.domain.LoanAccountDomainServiceJpa;
+import org.apache.fineract.portfolio.loanaccount.domain.LoanChargeRepository;
+import 
org.apache.fineract.portfolio.loanaccount.domain.LoanDisbursementDetailsRepository;
+import 
org.apache.fineract.portfolio.loanaccount.domain.LoanLifecycleStateMachine;
+import 
org.apache.fineract.portfolio.loanaccount.domain.LoanRepaymentScheduleInstallmentRepository;
+import 
org.apache.fineract.portfolio.loanaccount.domain.LoanRepaymentScheduleTransactionProcessorFactory;
+import org.apache.fineract.portfolio.loanaccount.domain.LoanRepository;
+import org.apache.fineract.portfolio.loanaccount.domain.LoanRepositoryWrapper;
+import org.apache.fineract.portfolio.loanaccount.domain.LoanSummaryWrapper;
+import 
org.apache.fineract.portfolio.loanaccount.domain.LoanTransactionRelationRepository;
+import 
org.apache.fineract.portfolio.loanaccount.domain.LoanTransactionRepository;
+import 
org.apache.fineract.portfolio.loanaccount.guarantor.service.GuarantorDomainService;
+import 
org.apache.fineract.portfolio.loanaccount.loanschedule.domain.AprCalculator;
+import 
org.apache.fineract.portfolio.loanaccount.loanschedule.domain.LoanScheduleGeneratorFactory;
+import 
org.apache.fineract.portfolio.loanaccount.loanschedule.service.LoanScheduleAssembler;
+import 
org.apache.fineract.portfolio.loanaccount.loanschedule.service.LoanScheduleCalculationPlatformService;
+import 
org.apache.fineract.portfolio.loanaccount.loanschedule.service.LoanScheduleHistoryWritePlatformService;
+import 
org.apache.fineract.portfolio.loanaccount.mapper.LoanTransactionRelationMapper;
+import 
org.apache.fineract.portfolio.loanaccount.serialization.LoanApplicationCommandFromApiJsonHelper;
+import 
org.apache.fineract.portfolio.loanaccount.serialization.LoanApplicationTransitionApiJsonValidator;
+import 
org.apache.fineract.portfolio.loanaccount.serialization.LoanChargeApiJsonValidator;
+import 
org.apache.fineract.portfolio.loanaccount.serialization.LoanEventApiJsonValidator;
+import 
org.apache.fineract.portfolio.loanaccount.serialization.LoanUpdateCommandFromApiJsonDeserializer;
+import 
org.apache.fineract.portfolio.loanaccount.service.BulkLoansReadPlatformService;
+import 
org.apache.fineract.portfolio.loanaccount.service.BulkLoansReadPlatformServiceImpl;
+import 
org.apache.fineract.portfolio.loanaccount.service.GLIMAccountInfoReadPlatformService;
+import 
org.apache.fineract.portfolio.loanaccount.service.GLIMAccountInfoReadPlatformServiceImpl;
+import 
org.apache.fineract.portfolio.loanaccount.service.GLIMAccountInfoWritePlatformService;
+import 
org.apache.fineract.portfolio.loanaccount.service.GLIMAccountInfoWritePlatformServiceImpl;
+import 
org.apache.fineract.portfolio.loanaccount.service.LoanAccrualPlatformService;
+import 
org.apache.fineract.portfolio.loanaccount.service.LoanAccrualPlatformServiceImpl;
+import 
org.apache.fineract.portfolio.loanaccount.service.LoanAccrualTransactionBusinessEventService;
+import 
org.apache.fineract.portfolio.loanaccount.service.LoanAccrualTransactionBusinessEventServiceImpl;
+import 
org.apache.fineract.portfolio.loanaccount.service.LoanAccrualWritePlatformService;
+import 
org.apache.fineract.portfolio.loanaccount.service.LoanAccrualWritePlatformServiceImpl;
+import 
org.apache.fineract.portfolio.loanaccount.service.LoanApplicationWritePlatformService;
+import 
org.apache.fineract.portfolio.loanaccount.service.LoanApplicationWritePlatformServiceJpaRepositoryImpl;
+import 
org.apache.fineract.portfolio.loanaccount.service.LoanArrearsAgingService;
+import 
org.apache.fineract.portfolio.loanaccount.service.LoanArrearsAgingServiceImpl;
+import org.apache.fineract.portfolio.loanaccount.service.LoanAssembler;
+import 
org.apache.fineract.portfolio.loanaccount.service.LoanCalculateRepaymentPastDueService;
+import org.apache.fineract.portfolio.loanaccount.service.LoanChargeAssembler;
+import 
org.apache.fineract.portfolio.loanaccount.service.LoanChargePaidByReadPlatformService;
+import 
org.apache.fineract.portfolio.loanaccount.service.LoanChargePaidByReadPlatformServiceImpl;
+import 
org.apache.fineract.portfolio.loanaccount.service.LoanChargeReadPlatformService;
+import 
org.apache.fineract.portfolio.loanaccount.service.LoanChargeReadPlatformServiceImpl;
+import 
org.apache.fineract.portfolio.loanaccount.service.LoanChargeWritePlatformService;
+import 
org.apache.fineract.portfolio.loanaccount.service.LoanChargeWritePlatformServiceImpl;
+import 
org.apache.fineract.portfolio.loanaccount.service.LoanReadPlatformService;
+import 
org.apache.fineract.portfolio.loanaccount.service.LoanReadPlatformServiceImpl;
+import 
org.apache.fineract.portfolio.loanaccount.service.LoanStatusChangePlatformService;
+import 
org.apache.fineract.portfolio.loanaccount.service.LoanStatusChangePlatformServiceImpl;
+import org.apache.fineract.portfolio.loanaccount.service.LoanUtilService;
+import 
org.apache.fineract.portfolio.loanaccount.service.LoanWritePlatformService;
+import 
org.apache.fineract.portfolio.loanaccount.service.LoanWritePlatformServiceJpaRepositoryImpl;
+import 
org.apache.fineract.portfolio.loanaccount.service.RecalculateInterestPoster;
+import 
org.apache.fineract.portfolio.loanaccount.service.ReplayedTransactionBusinessEventService;
+import 
org.apache.fineract.portfolio.loanaccount.service.ReplayedTransactionBusinessEventServiceImpl;
+import org.apache.fineract.portfolio.loanproduct.domain.LoanProductRepository;
+import 
org.apache.fineract.portfolio.loanproduct.serialization.LoanProductDataValidator;
+import 
org.apache.fineract.portfolio.loanproduct.service.LoanDropdownReadPlatformService;
+import 
org.apache.fineract.portfolio.loanproduct.service.LoanProductReadPlatformService;
+import org.apache.fineract.portfolio.note.domain.NoteRepository;
+import 
org.apache.fineract.portfolio.paymentdetail.service.PaymentDetailWritePlatformService;
+import 
org.apache.fineract.portfolio.paymenttype.service.PaymentTypeReadPlatformService;
+import org.apache.fineract.portfolio.rate.service.RateAssembler;
+import 
org.apache.fineract.portfolio.repaymentwithpostdatedchecks.domain.PostDatedChecksRepository;
+import 
org.apache.fineract.portfolio.repaymentwithpostdatedchecks.service.RepaymentWithPostDatedChecksAssembler;
+import org.apache.fineract.portfolio.savings.domain.SavingsAccountAssembler;
+import org.apache.fineract.portfolio.savings.service.GSIMReadPlatformService;
+import 
org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.context.annotation.Scope;
+import org.springframework.jdbc.core.JdbcTemplate;
+import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate;
+
+@Configuration
+public class LoanAccountConfiguration {
+
+    @Bean
+    @ConditionalOnMissingBean(BulkLoansReadPlatformService.class)
+    public BulkLoansReadPlatformService 
bulkLoansReadPlatformServicev(JdbcTemplate jdbcTemplate, 
PlatformSecurityContext context,
+            AccountDetailsReadPlatformService 
accountDetailsReadPlatformService) {
+        return new BulkLoansReadPlatformServiceImpl(jdbcTemplate, context, 
accountDetailsReadPlatformService);
+    }
+
+    @Bean
+    @ConditionalOnMissingBean(GLIMAccountInfoReadPlatformService.class)
+    public GLIMAccountInfoReadPlatformService 
glimAccountInfoReadPlatformService(JdbcTemplate jdbcTemplate, 
PlatformSecurityContext context,
+            AccountDetailsReadPlatformService 
accountDetailsReadPlatforService) {
+        return new GLIMAccountInfoReadPlatformServiceImpl(jdbcTemplate, 
context, accountDetailsReadPlatforService);
+    }
+
+    @Bean
+    @ConditionalOnMissingBean(GLIMAccountInfoWritePlatformService.class)
+    public GLIMAccountInfoWritePlatformService 
glimAccountInfoWritePlatformService(PlatformSecurityContext context,
+            GLIMAccountInfoRepository glimAccountRepository,
+
+            LoanRepository loanRepository) {
+        return new GLIMAccountInfoWritePlatformServiceImpl(context, 
glimAccountRepository, loanRepository);
+    }
+
+    @Bean
+    @ConditionalOnMissingBean(LoanAccrualPlatformService.class)
+    public LoanAccrualPlatformService 
loanAccrualPlatformService(LoanReadPlatformService loanReadPlatformService,
+            LoanAccrualWritePlatformService loanAccrualWritePlatformService) {
+        return new LoanAccrualPlatformServiceImpl(loanReadPlatformService, 
loanAccrualWritePlatformService);
+    }
+
+    @Bean
+    @ConditionalOnMissingBean(LoanAccrualTransactionBusinessEventService.class)
+    public LoanAccrualTransactionBusinessEventService 
loanAccrualTransactionBusinessEventService(
+
+            BusinessEventNotifierService businessEventNotifierService) {
+        return new 
LoanAccrualTransactionBusinessEventServiceImpl(businessEventNotifierService);
+    }
+
+    @Bean
+    @ConditionalOnMissingBean(LoanAccrualWritePlatformService.class)
+    public LoanAccrualWritePlatformService 
loanAccrualWritePlatformService(LoanReadPlatformService loanReadPlatformService,
+            LoanChargeReadPlatformService loanChargeReadPlatformService, 
JdbcTemplate jdbcTemplate,
+            DatabaseSpecificSQLGenerator sqlGenerator, 
JournalEntryWritePlatformService journalEntryWritePlatformService,
+            PlatformSecurityContext context, LoanRepositoryWrapper 
loanRepositoryWrapper, LoanRepository loanRepository,
+            OfficeRepository officeRepository, BusinessEventNotifierService 
businessEventNotifierService,
+            LoanTransactionRepository loanTransactionRepository,
+            LoanAccrualTransactionBusinessEventService 
loanAccrualTransactionBusinessEventService,
+            ConfigurationDomainService configurationDomainService, 
ExternalIdFactory externalIdFactory) {
+        return new 
LoanAccrualWritePlatformServiceImpl(loanReadPlatformService, 
loanChargeReadPlatformService, jdbcTemplate, sqlGenerator,
+                journalEntryWritePlatformService, context, 
loanRepositoryWrapper, loanRepository, officeRepository,
+                businessEventNotifierService, loanTransactionRepository, 
loanAccrualTransactionBusinessEventService,
+                configurationDomainService, externalIdFactory);
+    }
+
+    @Bean
+    @ConditionalOnMissingBean(LoanApplicationWritePlatformService.class)
+    public LoanApplicationWritePlatformService 
loanApplicationWritePlatformService(PlatformSecurityContext context,
+            FromJsonHelper fromJsonHelper, 
LoanApplicationTransitionApiJsonValidator 
loanApplicationTransitionApiJsonValidator,
+            LoanProductDataValidator loanProductCommandFromApiJsonDeserializer,
+            LoanApplicationCommandFromApiJsonHelper fromApiJsonDeserializer, 
LoanRepositoryWrapper loanRepositoryWrapper,
+            NoteRepository noteRepository, 
LoanScheduleCalculationPlatformService calculationPlatformService, 
LoanAssembler loanAssembler,
+            ClientRepositoryWrapper clientRepository, LoanProductRepository 
loanProductRepository, LoanChargeAssembler loanChargeAssembler,
+            LoanCollateralAssembler loanCollateralAssembler, AprCalculator 
aprCalculator, AccountNumberGenerator accountNumberGenerator,
+            LoanSummaryWrapper loanSummaryWrapper, GroupRepositoryWrapper 
groupRepository,
+            LoanRepaymentScheduleTransactionProcessorFactory 
loanRepaymentScheduleTransactionProcessorFactory,
+            CalendarRepository calendarRepository, CalendarInstanceRepository 
calendarInstanceRepository,
+            SavingsAccountAssembler savingsAccountAssembler, 
AccountAssociationsRepository accountAssociationsRepository,
+            LoanReadPlatformService loanReadPlatformService, 
AccountNumberFormatRepositoryWrapper accountNumberFormatRepository,
+            BusinessEventNotifierService businessEventNotifierService, 
ConfigurationDomainService configurationDomainService,
+            LoanScheduleAssembler loanScheduleAssembler, LoanUtilService 
loanUtilService,
+            CalendarReadPlatformService calendarReadPlatformService,
+            EntityDatatableChecksWritePlatformService 
entityDatatableChecksWritePlatformService,
+            GlobalConfigurationRepositoryWrapper globalConfigurationRepository,
+            FineractEntityToEntityMappingRepository entityMappingRepository,
+            FineractEntityRelationRepository fineractEntityRelationRepository,
+            LoanProductReadPlatformService loanProductReadPlatformService,
+
+            RateAssembler rateAssembler, GLIMAccountInfoWritePlatformService 
glimAccountInfoWritePlatformService,
+            GLIMAccountInfoRepository glimRepository, LoanRepository 
loanRepository, GSIMReadPlatformService gsimReadPlatformService,
+            LoanLifecycleStateMachine defaultLoanLifecycleStateMachine) {
+        return new 
LoanApplicationWritePlatformServiceJpaRepositoryImpl(context, fromJsonHelper, 
loanApplicationTransitionApiJsonValidator,
+                loanProductCommandFromApiJsonDeserializer, 
fromApiJsonDeserializer, loanRepositoryWrapper, noteRepository,
+                calculationPlatformService, loanAssembler, clientRepository, 
loanProductRepository, loanChargeAssembler,
+                loanCollateralAssembler, aprCalculator, 
accountNumberGenerator, loanSummaryWrapper, groupRepository,
+                loanRepaymentScheduleTransactionProcessorFactory, 
calendarRepository, calendarInstanceRepository, savingsAccountAssembler,
+                accountAssociationsRepository, loanReadPlatformService, 
accountNumberFormatRepository, businessEventNotifierService,
+                configurationDomainService, loanScheduleAssembler, 
loanUtilService, calendarReadPlatformService,
+                entityDatatableChecksWritePlatformService, 
globalConfigurationRepository, entityMappingRepository,
+                fineractEntityRelationRepository, 
loanProductReadPlatformService, rateAssembler, 
glimAccountInfoWritePlatformService,
+                glimRepository, loanRepository, gsimReadPlatformService, 
defaultLoanLifecycleStateMachine);
+    }
+
+    @Bean
+    @ConditionalOnMissingBean(LoanArrearsAgingService.class)
+    public LoanArrearsAgingService loanArrearsAgingService(JdbcTemplate 
jdbcTemplate,
+            BusinessEventNotifierService businessEventNotifierService, 
DatabaseSpecificSQLGenerator sqlGenerator) {
+        return new LoanArrearsAgingServiceImpl(jdbcTemplate, 
businessEventNotifierService, sqlGenerator);
+    }
+
+    @Bean
+    @ConditionalOnMissingBean(LoanAssembler.class)
+    public LoanAssembler loanAssembler(FromJsonHelper fromApiJsonHelper, 
LoanRepositoryWrapper loanRepository,
+            LoanProductRepository loanProductRepository, 
ClientRepositoryWrapper clientRepository, GroupRepository groupRepository,
+            FundRepository fundRepository, StaffRepository staffRepository, 
CodeValueRepositoryWrapper codeValueRepository,
+            LoanScheduleAssembler loanScheduleAssembler, LoanChargeAssembler 
loanChargeAssembler,
+            LoanCollateralAssembler collateralAssembler, LoanSummaryWrapper 
loanSummaryWrapper,
+            LoanRepaymentScheduleTransactionProcessorFactory 
loanRepaymentScheduleTransactionProcessorFactory,
+            HolidayRepository holidayRepository, ConfigurationDomainService 
configurationDomainService,
+            WorkingDaysRepositoryWrapper workingDaysRepository, 
LoanUtilService loanUtilService, RateAssembler rateAssembler,
+            LoanLifecycleStateMachine defaultLoanLifecycleStateMachine, 
ExternalIdFactory externalIdFactory) {
+        return new LoanAssembler(fromApiJsonHelper, loanRepository, 
loanProductRepository, clientRepository, groupRepository,
+                fundRepository, staffRepository, codeValueRepository, 
loanScheduleAssembler, loanChargeAssembler, collateralAssembler,
+                loanSummaryWrapper, 
loanRepaymentScheduleTransactionProcessorFactory, holidayRepository, 
configurationDomainService,
+                workingDaysRepository, loanUtilService, rateAssembler, 
defaultLoanLifecycleStateMachine, externalIdFactory);
+    }
+
+    @Bean
+    @ConditionalOnMissingBean(LoanCalculateRepaymentPastDueService.class)
+    public LoanCalculateRepaymentPastDueService 
loanCalculateRepaymentPastDueService() {
+        return new LoanCalculateRepaymentPastDueService();
+    }
+
+    @Bean
+    @ConditionalOnMissingBean(LoanChargeAssembler.class)
+    public LoanChargeAssembler loanChargeAssembler(
+
+            FromJsonHelper fromApiJsonHelper, ChargeRepositoryWrapper 
chargeRepository, LoanChargeRepository loanChargeRepository,
+            LoanProductRepository loanProductRepository, ExternalIdFactory 
externalIdFactory) {
+        return new LoanChargeAssembler(fromApiJsonHelper, chargeRepository, 
loanChargeRepository, loanProductRepository, externalIdFactory);
+    }
+
+    @Bean
+    @ConditionalOnMissingBean(LoanChargePaidByReadPlatformService.class)
+    public LoanChargePaidByReadPlatformService 
loanChargePaidByReadPlatformService(JdbcTemplate jdbcTemplate,
+            PlatformSecurityContext context) {
+        return new LoanChargePaidByReadPlatformServiceImpl(jdbcTemplate, 
context);
+    }
+
+    @Bean
+    @ConditionalOnMissingBean(LoanChargeReadPlatformService.class)
+    public LoanChargeReadPlatformService 
loanChargeReadPlatformService(JdbcTemplate jdbcTemplate,
+            ChargeDropdownReadPlatformService 
chargeDropdownReadPlatformService, DropdownReadPlatformService 
dropdownReadPlatformService,
+            LoanChargeRepository loanChargeRepository) {
+        return new LoanChargeReadPlatformServiceImpl(jdbcTemplate, 
chargeDropdownReadPlatformService, dropdownReadPlatformService,
+                loanChargeRepository);
+    }
+
+    @Bean
+    @ConditionalOnMissingBean(LoanChargeWritePlatformService.class)
+    public LoanChargeWritePlatformService 
loanChargeWritePlatformService(LoanChargeApiJsonValidator 
loanChargeApiJsonValidator,
+            LoanAssembler loanAssembler, ChargeRepositoryWrapper 
chargeRepository,
+            BusinessEventNotifierService businessEventNotifierService, 
LoanTransactionRepository loanTransactionRepository,
+            AccountTransfersWritePlatformService 
accountTransfersWritePlatformService, LoanRepositoryWrapper 
loanRepositoryWrapper,
+            JournalEntryWritePlatformService journalEntryWritePlatformService, 
LoanAccountDomainService loanAccountDomainService,
+            LoanChargeRepository loanChargeRepository, 
LoanWritePlatformService loanWritePlatformService, LoanUtilService 
loanUtilService,
+            LoanChargeReadPlatformService loanChargeReadPlatformService, 
LoanLifecycleStateMachine defaultLoanLifecycleStateMachine,
+            AccountAssociationsReadPlatformService 
accountAssociationsReadPlatformService, FromJsonHelper fromApiJsonHelper,
+            ConfigurationDomainService configurationDomainService,
+            LoanRepaymentScheduleTransactionProcessorFactory 
loanRepaymentScheduleTransactionProcessorFactory,
+            ExternalIdFactory externalIdFactory, 
AccountTransferDetailRepository accountTransferDetailRepository,
+            LoanChargeAssembler loanChargeAssembler, 
ReplayedTransactionBusinessEventService replayedTransactionBusinessEventService,
+            PaymentDetailWritePlatformService 
paymentDetailWritePlatformService, NoteRepository noteRepository,
+            LoanAccrualTransactionBusinessEventService 
loanAccrualTransactionBusinessEventService
+
+    ) {
+        return new 
LoanChargeWritePlatformServiceImpl(loanChargeApiJsonValidator, loanAssembler, 
chargeRepository,
+                businessEventNotifierService, loanTransactionRepository, 
accountTransfersWritePlatformService, loanRepositoryWrapper,
+                journalEntryWritePlatformService, loanAccountDomainService, 
loanChargeRepository, loanWritePlatformService, loanUtilService,
+                loanChargeReadPlatformService, 
defaultLoanLifecycleStateMachine, accountAssociationsReadPlatformService, 
fromApiJsonHelper,
+                configurationDomainService, 
loanRepaymentScheduleTransactionProcessorFactory, externalIdFactory,
+                accountTransferDetailRepository, loanChargeAssembler, 
replayedTransactionBusinessEventService,
+                paymentDetailWritePlatformService, noteRepository, 
loanAccrualTransactionBusinessEventService);
+    }
+
+    @Bean
+    @ConditionalOnMissingBean(LoanReadPlatformService.class)
+    public LoanReadPlatformService loanReadPlatformService(JdbcTemplate 
jdbcTemplate, PlatformSecurityContext context,
+            LoanRepositoryWrapper loanRepositoryWrapper, 
ApplicationCurrencyRepositoryWrapper applicationCurrencyRepository,
+            LoanProductReadPlatformService loanProductReadPlatformService, 
ClientReadPlatformService clientReadPlatformService,
+            GroupReadPlatformService groupReadPlatformService, 
LoanDropdownReadPlatformService loanDropdownReadPlatformService,
+            FundReadPlatformService fundReadPlatformService, 
ChargeReadPlatformService chargeReadPlatformService,
+            CodeValueReadPlatformService codeValueReadPlatformService, 
CalendarReadPlatformService calendarReadPlatformService,
+            StaffReadPlatformService staffReadPlatformService, 
PaginationHelper paginationHelper,
+            NamedParameterJdbcTemplate namedParameterJdbcTemplate, 
PaymentTypeReadPlatformService paymentTypeReadPlatformService,
+            LoanRepaymentScheduleTransactionProcessorFactory 
loanRepaymentScheduleTransactionProcessorFactory,
+            FloatingRatesReadPlatformService floatingRatesReadPlatformService, 
LoanUtilService loanUtilService,
+            ConfigurationDomainService configurationDomainService, 
AccountDetailsReadPlatformService accountDetailsReadPlatformService,
+            ColumnValidator columnValidator, DatabaseSpecificSQLGenerator 
sqlGenerator,
+            DelinquencyReadPlatformService delinquencyReadPlatformService, 
LoanTransactionRepository loanTransactionRepository,
+            LoanTransactionRelationRepository 
loanTransactionRelationRepository,
+            LoanTransactionRelationMapper loanTransactionRelationMapper,
+            LoanChargePaidByReadPlatformService 
loanChargePaidByReadPlatformService) {
+        return new LoanReadPlatformServiceImpl(jdbcTemplate, context, 
loanRepositoryWrapper, applicationCurrencyRepository,
+                loanProductReadPlatformService, clientReadPlatformService, 
groupReadPlatformService, loanDropdownReadPlatformService,
+                fundReadPlatformService, chargeReadPlatformService, 
codeValueReadPlatformService, calendarReadPlatformService,
+                staffReadPlatformService, paginationHelper, 
namedParameterJdbcTemplate, paymentTypeReadPlatformService,
+                loanRepaymentScheduleTransactionProcessorFactory, 
floatingRatesReadPlatformService, loanUtilService,
+                configurationDomainService, accountDetailsReadPlatformService, 
columnValidator, sqlGenerator,
+                delinquencyReadPlatformService, loanTransactionRepository, 
loanTransactionRelationRepository, loanTransactionRelationMapper,
+                loanChargePaidByReadPlatformService
+
+        );
+    }
+
+    @Bean
+    @ConditionalOnMissingBean(LoanStatusChangePlatformService.class)
+    public LoanStatusChangePlatformService 
loanStatusChangePlatformService(BusinessEventNotifierService 
businessEventNotifierService,
+            LoanAccountDomainServiceJpa loanAccountDomainService) {
+        return new 
LoanStatusChangePlatformServiceImpl(businessEventNotifierService, 
loanAccountDomainService);
+    }
+
+    @Bean
+    @ConditionalOnMissingBean(LoanUtilService.class)
+    public LoanUtilService 
loanUtilService(ApplicationCurrencyRepositoryWrapper 
applicationCurrencyRepository,
+            CalendarInstanceRepository calendarInstanceRepository, 
ConfigurationDomainService configurationDomainService,
+            HolidayRepository holidayRepository, WorkingDaysRepositoryWrapper 
workingDaysRepository,
+            LoanScheduleGeneratorFactory loanScheduleFactory, 
FloatingRatesReadPlatformService floatingRatesReadPlatformService,
+            FromJsonHelper fromApiJsonHelper, CalendarReadPlatformService 
calendarReadPlatformService) {
+        return new LoanUtilService(applicationCurrencyRepository, 
calendarInstanceRepository, configurationDomainService, holidayRepository,
+                workingDaysRepository, loanScheduleFactory, 
floatingRatesReadPlatformService, fromApiJsonHelper,
+                calendarReadPlatformService);
+    }
+
+    @Bean
+    @ConditionalOnMissingBean(LoanWritePlatformService.class)
+    public LoanWritePlatformService 
loanWritePlatformService(PlatformSecurityContext context,
+            LoanEventApiJsonValidator loanEventApiJsonValidator,
+            LoanUpdateCommandFromApiJsonDeserializer 
loanUpdateCommandFromApiJsonDeserializer, LoanRepositoryWrapper 
loanRepositoryWrapper,
+            LoanAccountDomainService loanAccountDomainService, NoteRepository 
noteRepository,
+            LoanTransactionRepository loanTransactionRepository, 
LoanTransactionRelationRepository loanTransactionRelationRepository,
+            LoanAssembler loanAssembler, JournalEntryWritePlatformService 
journalEntryWritePlatformService,
+            CalendarInstanceRepository calendarInstanceRepository, 
PaymentDetailWritePlatformService paymentDetailWritePlatformService,
+            HolidayRepositoryWrapper holidayRepository, 
ConfigurationDomainService configurationDomainService,
+            WorkingDaysRepositoryWrapper workingDaysRepository, 
AccountTransfersWritePlatformService accountTransfersWritePlatformService,
+            AccountTransfersReadPlatformService 
accountTransfersReadPlatformService,
+            AccountAssociationsReadPlatformService 
accountAssociationsReadPlatformService, LoanReadPlatformService 
loanReadPlatformService,
+            FromJsonHelper fromApiJsonHelper, CalendarRepository 
calendarRepository,
+            LoanScheduleHistoryWritePlatformService 
loanScheduleHistoryWritePlatformService,
+            LoanApplicationCommandFromApiJsonHelper 
loanApplicationCommandFromApiJsonHelper,
+            AccountAssociationsRepository accountAssociationRepository, 
AccountTransferDetailRepository accountTransferDetailRepository,
+            BusinessEventNotifierService businessEventNotifierService, 
GuarantorDomainService guarantorDomainService,
+            LoanUtilService loanUtilService, LoanSummaryWrapper 
loanSummaryWrapper,
+            EntityDatatableChecksWritePlatformService 
entityDatatableChecksWritePlatformService,
+            LoanRepaymentScheduleTransactionProcessorFactory 
transactionProcessingStrategy, CodeValueRepositoryWrapper codeValueRepository,
+            CashierTransactionDataValidator cashierTransactionDataValidator, 
GLIMAccountInfoRepository glimRepository,
+            LoanRepository loanRepository, 
RepaymentWithPostDatedChecksAssembler repaymentWithPostDatedChecksAssembler,
+            PostDatedChecksRepository postDatedChecksRepository, 
LoanDisbursementDetailsRepository loanDisbursementDetailsRepository,
+            LoanRepaymentScheduleInstallmentRepository 
loanRepaymentScheduleInstallmentRepository,
+            LoanLifecycleStateMachine defaultLoanLifecycleStateMachine, 
LoanAccountLockService loanAccountLockService,
+            ExternalIdFactory externalIdFactory, 
ReplayedTransactionBusinessEventService replayedTransactionBusinessEventService,
+            LoanAccrualTransactionBusinessEventService 
loanAccrualTransactionBusinessEventService, ErrorHandler errorHandler) {
+        return new LoanWritePlatformServiceJpaRepositoryImpl(context, 
loanEventApiJsonValidator, loanUpdateCommandFromApiJsonDeserializer,
+                loanRepositoryWrapper, loanAccountDomainService, 
noteRepository, loanTransactionRepository,
+                loanTransactionRelationRepository, loanAssembler, 
journalEntryWritePlatformService, calendarInstanceRepository,
+                paymentDetailWritePlatformService, holidayRepository, 
configurationDomainService, workingDaysRepository,
+                accountTransfersWritePlatformService, 
accountTransfersReadPlatformService, accountAssociationsReadPlatformService,
+                loanReadPlatformService, fromApiJsonHelper, 
calendarRepository, loanScheduleHistoryWritePlatformService,
+                loanApplicationCommandFromApiJsonHelper, 
accountAssociationRepository, accountTransferDetailRepository,
+                businessEventNotifierService, guarantorDomainService, 
loanUtilService, loanSummaryWrapper,
+                entityDatatableChecksWritePlatformService, 
transactionProcessingStrategy, codeValueRepository,
+                cashierTransactionDataValidator, glimRepository, 
loanRepository, repaymentWithPostDatedChecksAssembler,
+                postDatedChecksRepository, loanDisbursementDetailsRepository, 
loanRepaymentScheduleInstallmentRepository,
+                defaultLoanLifecycleStateMachine, loanAccountLockService, 
externalIdFactory, replayedTransactionBusinessEventService,
+                loanAccrualTransactionBusinessEventService, errorHandler);
+    }
+
+    @Bean
+    @Scope("prototype")
+    @ConditionalOnMissingBean(RecalculateInterestPoster.class)
+    public RecalculateInterestPoster recalculateInterestPoster() {
+        return new RecalculateInterestPoster();
+    }
+
+    @Bean
+    @ConditionalOnMissingBean(ReplayedTransactionBusinessEventService.class)
+    public ReplayedTransactionBusinessEventService 
replayedTransactionBusinessEventService(
+            BusinessEventNotifierService businessEventNotifierService, 
LoanTransactionRepository loanTransactionRepository) {
+        return new 
ReplayedTransactionBusinessEventServiceImpl(businessEventNotifierService, 
loanTransactionRepository);
+    }
+
+}

Reply via email to