From cd38262152533e370f0fc645b7391b3f49480147 Mon Sep 17 00:00:00 2001 From: Arnold Galovics Date: Thu, 23 Jun 2022 12:12:51 +0200 Subject: [PATCH] Refactored business events --- .../EmailCampaignDomainServiceImpl.java | 90 ++-- .../service/SmsCampaignDomainServiceImpl.java | 172 +++---- .../NotificationDomainServiceImpl.java | 423 ++++++++---------- .../businessevent/BusinessEventListener.java | 12 +- ...Entity.java => AbstractBusinessEvent.java} | 24 +- .../businessevent/domain/BusinessEvent.java | 83 +--- .../client/ClientActivateBusinessEvent.java | 28 ++ .../domain/client/ClientBusinessEvent.java | 29 ++ .../client/ClientCreateBusinessEvent.java | 28 ++ .../client/ClientRejectBusinessEvent.java | 28 ++ .../FixedDepositAccountBusinessEvent.java | 29 ++ ...ixedDepositAccountCreateBusinessEvent.java | 28 ++ .../RecurringDepositAccountBusinessEvent.java | 29 ++ ...ringDepositAccountCreateBusinessEvent.java | 28 ++ .../group/CentersCreateBusinessEvent.java | 28 ++ .../domain/group/GroupsBusinessEvent.java | 29 ++ .../group/GroupsCreateBusinessEvent.java | 28 ++ .../loan/LoanAcceptTransferBusinessEvent.java | 28 ++ .../LoanAdjustTransactionBusinessEvent.java | 41 ++ .../LoanApplyOverdueChargeBusinessEvent.java | 28 ++ .../loan/LoanApprovedBusinessEvent.java | 28 ++ .../domain/loan/LoanBusinessEvent.java | 29 ++ .../LoanCloseAsRescheduleBusinessEvent.java | 28 ++ .../domain/loan/LoanCloseBusinessEvent.java | 28 ++ .../domain/loan/LoanCreatedBusinessEvent.java | 28 ++ .../loan/LoanDisbursalBusinessEvent.java | 28 ++ .../LoanInitiateTransferBusinessEvent.java | 28 ++ ...oanInterestRecalculationBusinessEvent.java | 28 ++ .../LoanReassignOfficerBusinessEvent.java | 28 ++ .../loan/LoanRejectTransferBusinessEvent.java | 28 ++ .../loan/LoanRejectedBusinessEvent.java | 28 ++ .../loan/LoanRemoveOfficerBusinessEvent.java | 28 ++ .../loan/LoanUndoApprovalBusinessEvent.java | 28 ++ .../loan/LoanUndoDisbursalBusinessEvent.java | 28 ++ .../LoanUndoLastDisbursalBusinessEvent.java | 28 ++ .../LoanWithdrawTransferBusinessEvent.java | 28 ++ .../charge/LoanAddChargeBusinessEvent.java | 28 ++ .../loan/charge/LoanChargeBusinessEvent.java | 29 ++ .../charge/LoanDeleteChargeBusinessEvent.java | 28 ++ .../charge/LoanUpdateChargeBusinessEvent.java | 28 ++ .../charge/LoanWaiveChargeBusinessEvent.java | 28 ++ .../LoanWaiveChargeUndoBusinessEvent.java | 28 ++ .../product/LoanProductBusinessEvent.java | 29 ++ .../LoanProductCreateBusinessEvent.java | 28 ++ .../LoanChargePaymentBusinessEvent.java | 28 ++ .../LoanCreditBalanceRefundBusinessEvent.java | 28 ++ .../LoanForeClosureBusinessEvent.java | 28 ++ .../LoanGoodwillCreditBusinessEvent.java | 28 ++ .../LoanMakeRepaymentBusinessEvent.java | 28 ++ ...LoanMerchantIssuedRefundBusinessEvent.java | 28 ++ .../LoanPayoutRefundBusinessEvent.java | 28 ++ .../LoanRecoveryPaymentBusinessEvent.java | 28 ++ .../transaction/LoanRefundBusinessEvent.java | 28 ++ .../LoanTransactionBusinessEvent.java | 29 ++ .../LoanUndoWrittenOffBusinessEvent.java | 28 ++ .../LoanWaiveInterestBusinessEvent.java | 28 ++ .../LoanWrittenOffBusinessEvent.java | 28 ++ .../savings/SavingsAccountBusinessEvent.java | 29 ++ .../savings/SavingsActivateBusinessEvent.java | 28 ++ .../savings/SavingsApproveBusinessEvent.java | 28 ++ .../savings/SavingsCloseBusinessEvent.java | 28 ++ .../savings/SavingsCreateBusinessEvent.java | 28 ++ .../SavingsPostInterestBusinessEvent.java | 28 ++ .../savings/SavingsRejectBusinessEvent.java | 28 ++ ...avingsAccountTransactionBusinessEvent.java | 29 ++ .../SavingsDepositBusinessEvent.java | 28 ++ .../SavingsWithdrawalBusinessEvent.java | 28 ++ .../ShareAccountApproveBusinessEvent.java | 28 ++ .../share/ShareAccountBusinessEvent.java | 29 ++ .../ShareAccountCreateBusinessEvent.java | 28 ++ ...reProductDividentsCreateBusinessEvent.java | 28 ++ .../service/BusinessEventNotifierService.java | 16 +- .../BusinessEventNotifierServiceImpl.java | 53 +-- ...WritePlatformServiceJpaRepositoryImpl.java | 40 +- ...WritePlatformServiceJpaRepositoryImpl.java | 61 +-- .../domain/LoanAccountDomainServiceJpa.java | 109 ++--- .../service/GuarantorDomainServiceImpl.java | 178 +++----- ...WritePlatformServiceJpaRepositoryImpl.java | 24 +- .../service/LoanArrearsAgingServiceImpl.java | 201 ++++++--- ...WritePlatformServiceJpaRepositoryImpl.java | 267 +++-------- ...WritePlatformServiceJpaRepositoryImpl.java | 28 +- .../SavingsAccountDomainServiceJpa.java | 17 +- ...WritePlatformServiceJpaRepositoryImpl.java | 25 +- ...WritePlatformServiceJpaRepositoryImpl.java | 22 +- ...WritePlatformServiceJpaRepositoryImpl.java | 71 +-- ...WritePlatformServiceJpaRepositoryImpl.java | 16 +- ...WritePlatformServiceJpaRepositoryImpl.java | 43 +- 87 files changed, 2505 insertions(+), 1314 deletions(-) rename fineract-provider/src/main/java/org/apache/fineract/portfolio/businessevent/domain/{BusinessEntity.java => AbstractBusinessEvent.java} (59%) create mode 100644 fineract-provider/src/main/java/org/apache/fineract/portfolio/businessevent/domain/client/ClientActivateBusinessEvent.java create mode 100644 fineract-provider/src/main/java/org/apache/fineract/portfolio/businessevent/domain/client/ClientBusinessEvent.java create mode 100644 fineract-provider/src/main/java/org/apache/fineract/portfolio/businessevent/domain/client/ClientCreateBusinessEvent.java create mode 100644 fineract-provider/src/main/java/org/apache/fineract/portfolio/businessevent/domain/client/ClientRejectBusinessEvent.java create mode 100644 fineract-provider/src/main/java/org/apache/fineract/portfolio/businessevent/domain/deposit/FixedDepositAccountBusinessEvent.java create mode 100644 fineract-provider/src/main/java/org/apache/fineract/portfolio/businessevent/domain/deposit/FixedDepositAccountCreateBusinessEvent.java create mode 100644 fineract-provider/src/main/java/org/apache/fineract/portfolio/businessevent/domain/deposit/RecurringDepositAccountBusinessEvent.java create mode 100644 fineract-provider/src/main/java/org/apache/fineract/portfolio/businessevent/domain/deposit/RecurringDepositAccountCreateBusinessEvent.java create mode 100644 fineract-provider/src/main/java/org/apache/fineract/portfolio/businessevent/domain/group/CentersCreateBusinessEvent.java create mode 100644 fineract-provider/src/main/java/org/apache/fineract/portfolio/businessevent/domain/group/GroupsBusinessEvent.java create mode 100644 fineract-provider/src/main/java/org/apache/fineract/portfolio/businessevent/domain/group/GroupsCreateBusinessEvent.java create mode 100644 fineract-provider/src/main/java/org/apache/fineract/portfolio/businessevent/domain/loan/LoanAcceptTransferBusinessEvent.java create mode 100644 fineract-provider/src/main/java/org/apache/fineract/portfolio/businessevent/domain/loan/LoanAdjustTransactionBusinessEvent.java create mode 100644 fineract-provider/src/main/java/org/apache/fineract/portfolio/businessevent/domain/loan/LoanApplyOverdueChargeBusinessEvent.java create mode 100644 fineract-provider/src/main/java/org/apache/fineract/portfolio/businessevent/domain/loan/LoanApprovedBusinessEvent.java create mode 100644 fineract-provider/src/main/java/org/apache/fineract/portfolio/businessevent/domain/loan/LoanBusinessEvent.java create mode 100644 fineract-provider/src/main/java/org/apache/fineract/portfolio/businessevent/domain/loan/LoanCloseAsRescheduleBusinessEvent.java create mode 100644 fineract-provider/src/main/java/org/apache/fineract/portfolio/businessevent/domain/loan/LoanCloseBusinessEvent.java create mode 100644 fineract-provider/src/main/java/org/apache/fineract/portfolio/businessevent/domain/loan/LoanCreatedBusinessEvent.java create mode 100644 fineract-provider/src/main/java/org/apache/fineract/portfolio/businessevent/domain/loan/LoanDisbursalBusinessEvent.java create mode 100644 fineract-provider/src/main/java/org/apache/fineract/portfolio/businessevent/domain/loan/LoanInitiateTransferBusinessEvent.java create mode 100644 fineract-provider/src/main/java/org/apache/fineract/portfolio/businessevent/domain/loan/LoanInterestRecalculationBusinessEvent.java create mode 100644 fineract-provider/src/main/java/org/apache/fineract/portfolio/businessevent/domain/loan/LoanReassignOfficerBusinessEvent.java create mode 100644 fineract-provider/src/main/java/org/apache/fineract/portfolio/businessevent/domain/loan/LoanRejectTransferBusinessEvent.java create mode 100644 fineract-provider/src/main/java/org/apache/fineract/portfolio/businessevent/domain/loan/LoanRejectedBusinessEvent.java create mode 100644 fineract-provider/src/main/java/org/apache/fineract/portfolio/businessevent/domain/loan/LoanRemoveOfficerBusinessEvent.java create mode 100644 fineract-provider/src/main/java/org/apache/fineract/portfolio/businessevent/domain/loan/LoanUndoApprovalBusinessEvent.java create mode 100644 fineract-provider/src/main/java/org/apache/fineract/portfolio/businessevent/domain/loan/LoanUndoDisbursalBusinessEvent.java create mode 100644 fineract-provider/src/main/java/org/apache/fineract/portfolio/businessevent/domain/loan/LoanUndoLastDisbursalBusinessEvent.java create mode 100644 fineract-provider/src/main/java/org/apache/fineract/portfolio/businessevent/domain/loan/LoanWithdrawTransferBusinessEvent.java create mode 100644 fineract-provider/src/main/java/org/apache/fineract/portfolio/businessevent/domain/loan/charge/LoanAddChargeBusinessEvent.java create mode 100644 fineract-provider/src/main/java/org/apache/fineract/portfolio/businessevent/domain/loan/charge/LoanChargeBusinessEvent.java create mode 100644 fineract-provider/src/main/java/org/apache/fineract/portfolio/businessevent/domain/loan/charge/LoanDeleteChargeBusinessEvent.java create mode 100644 fineract-provider/src/main/java/org/apache/fineract/portfolio/businessevent/domain/loan/charge/LoanUpdateChargeBusinessEvent.java create mode 100644 fineract-provider/src/main/java/org/apache/fineract/portfolio/businessevent/domain/loan/charge/LoanWaiveChargeBusinessEvent.java create mode 100644 fineract-provider/src/main/java/org/apache/fineract/portfolio/businessevent/domain/loan/charge/LoanWaiveChargeUndoBusinessEvent.java create mode 100644 fineract-provider/src/main/java/org/apache/fineract/portfolio/businessevent/domain/loan/product/LoanProductBusinessEvent.java create mode 100644 fineract-provider/src/main/java/org/apache/fineract/portfolio/businessevent/domain/loan/product/LoanProductCreateBusinessEvent.java create mode 100644 fineract-provider/src/main/java/org/apache/fineract/portfolio/businessevent/domain/loan/transaction/LoanChargePaymentBusinessEvent.java create mode 100644 fineract-provider/src/main/java/org/apache/fineract/portfolio/businessevent/domain/loan/transaction/LoanCreditBalanceRefundBusinessEvent.java create mode 100644 fineract-provider/src/main/java/org/apache/fineract/portfolio/businessevent/domain/loan/transaction/LoanForeClosureBusinessEvent.java create mode 100644 fineract-provider/src/main/java/org/apache/fineract/portfolio/businessevent/domain/loan/transaction/LoanGoodwillCreditBusinessEvent.java create mode 100644 fineract-provider/src/main/java/org/apache/fineract/portfolio/businessevent/domain/loan/transaction/LoanMakeRepaymentBusinessEvent.java create mode 100644 fineract-provider/src/main/java/org/apache/fineract/portfolio/businessevent/domain/loan/transaction/LoanMerchantIssuedRefundBusinessEvent.java create mode 100644 fineract-provider/src/main/java/org/apache/fineract/portfolio/businessevent/domain/loan/transaction/LoanPayoutRefundBusinessEvent.java create mode 100644 fineract-provider/src/main/java/org/apache/fineract/portfolio/businessevent/domain/loan/transaction/LoanRecoveryPaymentBusinessEvent.java create mode 100644 fineract-provider/src/main/java/org/apache/fineract/portfolio/businessevent/domain/loan/transaction/LoanRefundBusinessEvent.java create mode 100644 fineract-provider/src/main/java/org/apache/fineract/portfolio/businessevent/domain/loan/transaction/LoanTransactionBusinessEvent.java create mode 100644 fineract-provider/src/main/java/org/apache/fineract/portfolio/businessevent/domain/loan/transaction/LoanUndoWrittenOffBusinessEvent.java create mode 100644 fineract-provider/src/main/java/org/apache/fineract/portfolio/businessevent/domain/loan/transaction/LoanWaiveInterestBusinessEvent.java create mode 100644 fineract-provider/src/main/java/org/apache/fineract/portfolio/businessevent/domain/loan/transaction/LoanWrittenOffBusinessEvent.java create mode 100644 fineract-provider/src/main/java/org/apache/fineract/portfolio/businessevent/domain/savings/SavingsAccountBusinessEvent.java create mode 100644 fineract-provider/src/main/java/org/apache/fineract/portfolio/businessevent/domain/savings/SavingsActivateBusinessEvent.java create mode 100644 fineract-provider/src/main/java/org/apache/fineract/portfolio/businessevent/domain/savings/SavingsApproveBusinessEvent.java create mode 100644 fineract-provider/src/main/java/org/apache/fineract/portfolio/businessevent/domain/savings/SavingsCloseBusinessEvent.java create mode 100644 fineract-provider/src/main/java/org/apache/fineract/portfolio/businessevent/domain/savings/SavingsCreateBusinessEvent.java create mode 100644 fineract-provider/src/main/java/org/apache/fineract/portfolio/businessevent/domain/savings/SavingsPostInterestBusinessEvent.java create mode 100644 fineract-provider/src/main/java/org/apache/fineract/portfolio/businessevent/domain/savings/SavingsRejectBusinessEvent.java create mode 100644 fineract-provider/src/main/java/org/apache/fineract/portfolio/businessevent/domain/savings/transaction/SavingsAccountTransactionBusinessEvent.java create mode 100644 fineract-provider/src/main/java/org/apache/fineract/portfolio/businessevent/domain/savings/transaction/SavingsDepositBusinessEvent.java create mode 100644 fineract-provider/src/main/java/org/apache/fineract/portfolio/businessevent/domain/savings/transaction/SavingsWithdrawalBusinessEvent.java create mode 100644 fineract-provider/src/main/java/org/apache/fineract/portfolio/businessevent/domain/share/ShareAccountApproveBusinessEvent.java create mode 100644 fineract-provider/src/main/java/org/apache/fineract/portfolio/businessevent/domain/share/ShareAccountBusinessEvent.java create mode 100644 fineract-provider/src/main/java/org/apache/fineract/portfolio/businessevent/domain/share/ShareAccountCreateBusinessEvent.java create mode 100644 fineract-provider/src/main/java/org/apache/fineract/portfolio/businessevent/domain/share/ShareProductDividentsCreateBusinessEvent.java diff --git a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/campaigns/email/service/EmailCampaignDomainServiceImpl.java b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/campaigns/email/service/EmailCampaignDomainServiceImpl.java index a5be1969f..a3b5fa0ad 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/campaigns/email/service/EmailCampaignDomainServiceImpl.java +++ b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/campaigns/email/service/EmailCampaignDomainServiceImpl.java @@ -23,92 +23,72 @@ import com.fasterxml.jackson.databind.ObjectMapper; import java.io.IOException; import java.util.HashMap; import java.util.List; -import java.util.Map; import javax.annotation.PostConstruct; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; import org.apache.fineract.infrastructure.campaigns.email.domain.EmailCampaign; import org.apache.fineract.infrastructure.campaigns.email.domain.EmailCampaignRepository; import org.apache.fineract.infrastructure.campaigns.sms.constants.SmsCampaignTriggerType; import org.apache.fineract.portfolio.businessevent.BusinessEventListener; -import org.apache.fineract.portfolio.businessevent.domain.BusinessEntity; -import org.apache.fineract.portfolio.businessevent.domain.BusinessEvent; +import org.apache.fineract.portfolio.businessevent.domain.loan.LoanApprovedBusinessEvent; +import org.apache.fineract.portfolio.businessevent.domain.loan.LoanRejectedBusinessEvent; +import org.apache.fineract.portfolio.businessevent.domain.loan.transaction.LoanMakeRepaymentBusinessEvent; import org.apache.fineract.portfolio.businessevent.service.BusinessEventNotifierService; import org.apache.fineract.portfolio.loanaccount.domain.Loan; import org.apache.fineract.portfolio.loanaccount.domain.LoanTransaction; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @Service +@RequiredArgsConstructor +@Slf4j public class EmailCampaignDomainServiceImpl implements EmailCampaignDomainService { - private static final Logger LOG = LoggerFactory.getLogger(EmailCampaignDomainServiceImpl.class); private final BusinessEventNotifierService businessEventNotifierService; private final EmailCampaignWritePlatformService emailCampaignWritePlatformService; private final EmailCampaignRepository emailCampaignRepository; - @Autowired - public EmailCampaignDomainServiceImpl(BusinessEventNotifierService businessEventNotifierService, - EmailCampaignWritePlatformService emailCampaignWritePlatformService, EmailCampaignRepository emailCampaignRepository) { - this.businessEventNotifierService = businessEventNotifierService; - this.emailCampaignWritePlatformService = emailCampaignWritePlatformService; - this.emailCampaignRepository = emailCampaignRepository; - } - @PostConstruct public void addListeners() { - this.businessEventNotifierService.addBusinessEventPostListeners(BusinessEvent.LOAN_APPROVED, - new EmailCampaignDomainServiceImpl.SendEmailOnLoanApproved()); - this.businessEventNotifierService.addBusinessEventPostListeners(BusinessEvent.LOAN_REJECTED, - new EmailCampaignDomainServiceImpl.SendEmailOnLoanRejected()); - this.businessEventNotifierService.addBusinessEventPostListeners(BusinessEvent.LOAN_MAKE_REPAYMENT, - new EmailCampaignDomainServiceImpl.SendEmailOnLoanRepayment()); + businessEventNotifierService.addBusinessEventListener(LoanApprovedBusinessEvent.class, new SendEmailOnLoanApproved()); + businessEventNotifierService.addBusinessEventListener(LoanRejectedBusinessEvent.class, new SendEmailOnLoanRejected()); + businessEventNotifierService.addBusinessEventListener(LoanMakeRepaymentBusinessEvent.class, new SendEmailOnLoanRepayment()); } - private class SendEmailOnLoanRepayment extends EmailBusinessEventAdapter { + private class SendEmailOnLoanRepayment implements BusinessEventListener { @Override - public void businessEventWasExecuted(Map businessEventEntity) { - Object entity = businessEventEntity.get(BusinessEntity.LOAN_TRANSACTION); - if (entity instanceof LoanTransaction) { - LoanTransaction loanTransaction = (LoanTransaction) entity; - try { - notifyLoanOwner(loanTransaction, "Loan Repayment"); - } catch (IOException e) { - LOG.error("Exception when trying to send triggered email: {}", e.getMessage()); - } + public void onBusinessEvent(LoanMakeRepaymentBusinessEvent event) { + LoanTransaction loanTransaction = event.get(); + try { + notifyLoanOwner(loanTransaction, "Loan Repayment"); + } catch (IOException e) { + log.error("Exception when trying to send triggered email: {}", e.getMessage()); } } } - private class SendEmailOnLoanRejected extends EmailBusinessEventAdapter { + private class SendEmailOnLoanRejected implements BusinessEventListener { @Override - public void businessEventWasExecuted(Map businessEventEntity) { - Object entity = businessEventEntity.get(BusinessEntity.LOAN); - if (entity instanceof Loan) { - Loan loan = (Loan) entity; - try { - notifyLoanOwner(loan, "Loan Rejected"); - } catch (IOException e) { - LOG.error("Exception when trying to send triggered email: {}", e.getMessage()); - } + public void onBusinessEvent(LoanRejectedBusinessEvent event) { + Loan loan = event.get(); + try { + notifyLoanOwner(loan, "Loan Rejected"); + } catch (IOException e) { + log.error("Exception when trying to send triggered email: {}", e.getMessage()); } } } - private class SendEmailOnLoanApproved extends EmailBusinessEventAdapter { + private class SendEmailOnLoanApproved implements BusinessEventListener { @Override - public void businessEventWasExecuted(Map businessEventEntity) { - Object entity = businessEventEntity.get(BusinessEntity.LOAN); - if (entity instanceof Loan) { - Loan loan = (Loan) entity; - try { - notifyLoanOwner(loan, "Loan Approved"); - } catch (IOException e) { - LOG.error("Exception when trying to send triggered email: {}", e.getMessage()); - } + public void onBusinessEvent(LoanApprovedBusinessEvent event) { + Loan loan = event.get(); + try { + notifyLoanOwner(loan, "Loan Approved"); + } catch (IOException e) { + log.error("Exception when trying to send triggered email: {}", e.getMessage()); } } } @@ -135,14 +115,6 @@ public class EmailCampaignDomainServiceImpl implements EmailCampaignDomainServic } } - private abstract static class EmailBusinessEventAdapter implements BusinessEventListener { - - @Override - public void businessEventToBeExecuted(Map businessEventEntity) { - // Nothing to do - } - } - private List retrieveEmailCampaigns(String paramValue) { List emailCampaigns = emailCampaignRepository.findActiveEmailCampaigns("%" + paramValue + "%", SmsCampaignTriggerType.TRIGGERED.getValue()); diff --git a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/campaigns/sms/service/SmsCampaignDomainServiceImpl.java b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/campaigns/sms/service/SmsCampaignDomainServiceImpl.java index 79ae5a60b..3dff93c1b 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/campaigns/sms/service/SmsCampaignDomainServiceImpl.java +++ b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/campaigns/sms/service/SmsCampaignDomainServiceImpl.java @@ -32,6 +32,8 @@ import java.util.List; import java.util.Map; import java.util.Set; import javax.annotation.PostConstruct; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; import org.apache.fineract.infrastructure.campaigns.sms.constants.SmsCampaignTriggerType; import org.apache.fineract.infrastructure.campaigns.sms.domain.SmsCampaign; import org.apache.fineract.infrastructure.campaigns.sms.domain.SmsCampaignRepository; @@ -43,8 +45,15 @@ import org.apache.fineract.infrastructure.sms.scheduler.SmsMessageScheduledJobSe import org.apache.fineract.organisation.office.domain.Office; import org.apache.fineract.organisation.office.domain.OfficeRepository; import org.apache.fineract.portfolio.businessevent.BusinessEventListener; -import org.apache.fineract.portfolio.businessevent.domain.BusinessEntity; -import org.apache.fineract.portfolio.businessevent.domain.BusinessEvent; +import org.apache.fineract.portfolio.businessevent.domain.client.ClientActivateBusinessEvent; +import org.apache.fineract.portfolio.businessevent.domain.client.ClientRejectBusinessEvent; +import org.apache.fineract.portfolio.businessevent.domain.loan.LoanApprovedBusinessEvent; +import org.apache.fineract.portfolio.businessevent.domain.loan.LoanRejectedBusinessEvent; +import org.apache.fineract.portfolio.businessevent.domain.loan.transaction.LoanMakeRepaymentBusinessEvent; +import org.apache.fineract.portfolio.businessevent.domain.savings.SavingsActivateBusinessEvent; +import org.apache.fineract.portfolio.businessevent.domain.savings.SavingsRejectBusinessEvent; +import org.apache.fineract.portfolio.businessevent.domain.savings.transaction.SavingsDepositBusinessEvent; +import org.apache.fineract.portfolio.businessevent.domain.savings.transaction.SavingsWithdrawalBusinessEvent; import org.apache.fineract.portfolio.businessevent.service.BusinessEventNotifierService; import org.apache.fineract.portfolio.client.domain.Client; import org.apache.fineract.portfolio.group.domain.Group; @@ -54,18 +63,13 @@ import org.apache.fineract.portfolio.loanaccount.domain.LoanTransaction; import org.apache.fineract.portfolio.loanaccount.exception.InvalidLoanTypeException; import org.apache.fineract.portfolio.savings.domain.SavingsAccount; import org.apache.fineract.portfolio.savings.domain.SavingsAccountTransaction; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @Service +@Slf4j +@RequiredArgsConstructor public class SmsCampaignDomainServiceImpl implements SmsCampaignDomainService { - private static final Logger LOG = LoggerFactory.getLogger(SmsCampaignDomainServiceImpl.class); - - // private static final int POOL_SIZE = 5 ; - private final SmsCampaignRepository smsCampaignRepository; private final SmsMessageRepository smsMessageRepository; private final OfficeRepository officeRepository; @@ -76,35 +80,19 @@ public class SmsCampaignDomainServiceImpl implements SmsCampaignDomainService { private final SmsMessageScheduledJobService smsMessageScheduledJobService; private final SmsCampaignValidator smsCampaignValidator; - @Autowired - public SmsCampaignDomainServiceImpl(final SmsCampaignRepository smsCampaignRepository, final SmsMessageRepository smsMessageRepository, - final BusinessEventNotifierService businessEventNotifierService, final OfficeRepository officeRepository, - final SmsCampaignWritePlatformService smsCampaignWritePlatformCommandHandler, final GroupRepository groupRepository, - final SmsMessageScheduledJobService smsMessageScheduledJobService, final SmsCampaignValidator smsCampaignValidator) { - this.smsCampaignRepository = smsCampaignRepository; - this.smsMessageRepository = smsMessageRepository; - this.businessEventNotifierService = businessEventNotifierService; - this.officeRepository = officeRepository; - this.smsCampaignWritePlatformCommandHandler = smsCampaignWritePlatformCommandHandler; - this.groupRepository = groupRepository; - this.smsMessageScheduledJobService = smsMessageScheduledJobService; - this.smsCampaignValidator = smsCampaignValidator; - } - @PostConstruct public void addListeners() { - this.businessEventNotifierService.addBusinessEventPostListeners(BusinessEvent.LOAN_APPROVED, new SendSmsOnLoanApproved()); - this.businessEventNotifierService.addBusinessEventPostListeners(BusinessEvent.LOAN_REJECTED, new SendSmsOnLoanRejected()); - this.businessEventNotifierService.addBusinessEventPostListeners(BusinessEvent.LOAN_MAKE_REPAYMENT, new SendSmsOnLoanRepayment()); - this.businessEventNotifierService.addBusinessEventPostListeners(BusinessEvent.CLIENTS_ACTIVATE, new ClientActivatedListener()); - this.businessEventNotifierService.addBusinessEventPostListeners(BusinessEvent.CLIENTS_REJECT, new ClientRejectedListener()); - this.businessEventNotifierService.addBusinessEventPostListeners(BusinessEvent.SAVINGS_ACTIVATE, - new SavingsAccountActivatedListener()); - this.businessEventNotifierService.addBusinessEventPostListeners(BusinessEvent.SAVINGS_REJECT, new SavingsAccountRejectedListener()); - this.businessEventNotifierService.addBusinessEventPostListeners(BusinessEvent.SAVINGS_DEPOSIT, - new SavingsAccountTransactionListener(true)); - this.businessEventNotifierService.addBusinessEventPostListeners(BusinessEvent.SAVINGS_WITHDRAWAL, - new SavingsAccountTransactionListener(false)); + businessEventNotifierService.addBusinessEventListener(LoanApprovedBusinessEvent.class, new SendSmsOnLoanApproved()); + businessEventNotifierService.addBusinessEventListener(LoanRejectedBusinessEvent.class, new SendSmsOnLoanRejected()); + businessEventNotifierService.addBusinessEventListener(LoanMakeRepaymentBusinessEvent.class, new SendSmsOnLoanRepayment()); + businessEventNotifierService.addBusinessEventListener(ClientActivateBusinessEvent.class, new ClientActivatedListener()); + businessEventNotifierService.addBusinessEventListener(ClientRejectBusinessEvent.class, new ClientRejectedListener()); + businessEventNotifierService.addBusinessEventListener(SavingsActivateBusinessEvent.class, new SavingsAccountActivatedListener()); + businessEventNotifierService.addBusinessEventListener(SavingsRejectBusinessEvent.class, new SavingsAccountRejectedListener()); + businessEventNotifierService.addBusinessEventListener(SavingsDepositBusinessEvent.class, + new DepositSavingsAccountTransactionListener()); + businessEventNotifierService.addBusinessEventListener(SavingsWithdrawalBusinessEvent.class, + new NonDepositSavingsAccountTransactionListener()); } private void notifyRejectedLoanOwner(Loan loan) { @@ -227,9 +215,9 @@ public class SmsCampaignDomainServiceImpl implements SmsCampaignDomainService { } } } catch (final IOException e) { - LOG.error("smsParams does not contain the key: ", e); + log.error("smsParams does not contain the key: ", e); } catch (final RuntimeException e) { - LOG.debug("Client Office Id and SMS Campaign Office id doesn't match ", e); + log.debug("Client Office Id and SMS Campaign Office id doesn't match ", e); } } } @@ -282,9 +270,9 @@ public class SmsCampaignDomainServiceImpl implements SmsCampaignDomainService { this.smsMessageScheduledJobService.sendTriggeredMessages(smsDataMap); } } catch (final IOException e) { - LOG.error("smsParams does not contain the key: ", e); + log.error("smsParams does not contain the key: ", e); } catch (final RuntimeException e) { - LOG.debug("Client Office Id and SMS Campaign Office id doesn't match ", e); + log.debug("Client Office Id and SMS Campaign Office id doesn't match ", e); } } } @@ -382,123 +370,77 @@ public class SmsCampaignDomainServiceImpl implements SmsCampaignDomainService { return smsParams; } - private abstract static class SmsBusinessEventAdapter implements BusinessEventListener { + private class SendSmsOnLoanApproved implements BusinessEventListener { @Override - public void businessEventToBeExecuted(Map businessEventEntity) { - // Nothing to do + public void onBusinessEvent(LoanApprovedBusinessEvent event) { + Loan loan = event.get(); + notifyAcceptedLoanOwner(loan); } } - private class SendSmsOnLoanApproved extends SmsBusinessEventAdapter { + private class SendSmsOnLoanRejected implements BusinessEventListener { @Override - public void businessEventWasExecuted(Map businessEventEntity) { - Object entity = businessEventEntity.get(BusinessEntity.LOAN); - if (entity instanceof Loan) { - Loan loan = (Loan) entity; - notifyAcceptedLoanOwner(loan); - } + public void onBusinessEvent(LoanRejectedBusinessEvent event) { + Loan loan = event.get(); + notifyRejectedLoanOwner(loan); } } - private class SendSmsOnLoanRejected extends SmsBusinessEventAdapter { + private class SendSmsOnLoanRepayment implements BusinessEventListener { @Override - public void businessEventWasExecuted(Map businessEventEntity) { - Object entity = businessEventEntity.get(BusinessEntity.LOAN); - if (entity instanceof Loan) { - Loan loan = (Loan) entity; - notifyRejectedLoanOwner(loan); - } + public void onBusinessEvent(LoanMakeRepaymentBusinessEvent event) { + sendSmsForLoanRepayment(event.get()); } } - private class SendSmsOnLoanRepayment extends SmsBusinessEventAdapter { + private class ClientActivatedListener implements BusinessEventListener { @Override - public void businessEventWasExecuted(Map businessEventEntity) { - Object entity = businessEventEntity.get(BusinessEntity.LOAN_TRANSACTION); - if (entity instanceof LoanTransaction) { - LoanTransaction loanTransaction = (LoanTransaction) entity; - sendSmsForLoanRepayment(loanTransaction); - } + public void onBusinessEvent(ClientActivateBusinessEvent event) { + notifyClientActivated(event.get()); } } - private class ClientActivatedListener extends SmsBusinessEventAdapter { + private class ClientRejectedListener implements BusinessEventListener { @Override - public void businessEventWasExecuted(Map businessEventEntity) { - Object entity = businessEventEntity.get(BusinessEntity.CLIENT); - if (entity instanceof Client) { - notifyClientActivated((Client) entity); - } + public void onBusinessEvent(ClientRejectBusinessEvent event) { + notifyClientRejected(event.get()); } } - private class ClientRejectedListener extends SmsBusinessEventAdapter { + private class SavingsAccountActivatedListener implements BusinessEventListener { @Override - public void businessEventWasExecuted(Map businessEventEntity) { - Object entity = businessEventEntity.get(BusinessEntity.CLIENT); - if (entity instanceof Client) { - notifyClientRejected((Client) entity); - } - + public void onBusinessEvent(SavingsActivateBusinessEvent event) { + notifySavingsAccountActivated(event.get()); } } - private class SavingsAccountActivatedListener extends SmsBusinessEventAdapter { + private class SavingsAccountRejectedListener implements BusinessEventListener { @Override - public void businessEventWasExecuted(Map businessEventEntity) { - Object entity = businessEventEntity.get(BusinessEntity.SAVING); - if (entity instanceof SavingsAccount) { - notifySavingsAccountActivated((SavingsAccount) entity); - } - + public void onBusinessEvent(SavingsRejectBusinessEvent event) { + notifySavingsAccountRejected(event.get()); } } - private class SavingsAccountRejectedListener extends SmsBusinessEventAdapter { + private class DepositSavingsAccountTransactionListener implements BusinessEventListener { @Override - public void businessEventWasExecuted(Map businessEventEntity) { - Object entity = businessEventEntity.get(BusinessEntity.SAVING); - if (entity instanceof SavingsAccount) { - notifySavingsAccountRejected((SavingsAccount) entity); - } + public void onBusinessEvent(SavingsDepositBusinessEvent event) { + sendSmsForSavingsTransaction(event.get(), true); } } - private class SavingsAccountTransactionListener extends SmsBusinessEventAdapter { - - final boolean isDeposit; - - SavingsAccountTransactionListener(final boolean isDeposit) { - this.isDeposit = isDeposit; - } + private class NonDepositSavingsAccountTransactionListener implements BusinessEventListener { @Override - public void businessEventWasExecuted(Map businessEventEntity) { - Object entity = businessEventEntity.get(BusinessEntity.SAVINGS_TRANSACTION); - if (entity instanceof SavingsAccountTransaction) { - sendSmsForSavingsTransaction((SavingsAccountTransaction) entity, this.isDeposit); - } + public void onBusinessEvent(SavingsWithdrawalBusinessEvent event) { + sendSmsForSavingsTransaction(event.get(), false); } } - - /* - * private abstract class Task implements Runnable { - * - * protected final FineractPlatformTenant tenant; - * - * protected final String reportName ; - * - * private final Object entity ; - * - * public Task(final FineractPlatformTenant tenant, final String reportName, final Object entity) { this.tenant = - * tenant; this.reportName = reportName ; this.entity = entity ; } } - */ } diff --git a/fineract-provider/src/main/java/org/apache/fineract/notification/service/NotificationDomainServiceImpl.java b/fineract-provider/src/main/java/org/apache/fineract/notification/service/NotificationDomainServiceImpl.java index 673916713..d5b66c108 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/notification/service/NotificationDomainServiceImpl.java +++ b/fineract-provider/src/main/java/org/apache/fineract/notification/service/NotificationDomainServiceImpl.java @@ -21,7 +21,6 @@ package org.apache.fineract.notification.service; import static java.util.stream.Collectors.toSet; import java.util.Collection; -import java.util.Map; import java.util.Set; import javax.annotation.PostConstruct; import lombok.RequiredArgsConstructor; @@ -32,8 +31,25 @@ import org.apache.fineract.infrastructure.security.service.PlatformSecurityConte import org.apache.fineract.notification.data.NotificationData; import org.apache.fineract.notification.eventandlistener.NotificationEventPublisher; import org.apache.fineract.portfolio.businessevent.BusinessEventListener; -import org.apache.fineract.portfolio.businessevent.domain.BusinessEntity; -import org.apache.fineract.portfolio.businessevent.domain.BusinessEvent; +import org.apache.fineract.portfolio.businessevent.domain.client.ClientCreateBusinessEvent; +import org.apache.fineract.portfolio.businessevent.domain.deposit.FixedDepositAccountCreateBusinessEvent; +import org.apache.fineract.portfolio.businessevent.domain.deposit.RecurringDepositAccountCreateBusinessEvent; +import org.apache.fineract.portfolio.businessevent.domain.group.CentersCreateBusinessEvent; +import org.apache.fineract.portfolio.businessevent.domain.group.GroupsCreateBusinessEvent; +import org.apache.fineract.portfolio.businessevent.domain.loan.LoanApprovedBusinessEvent; +import org.apache.fineract.portfolio.businessevent.domain.loan.LoanCloseAsRescheduleBusinessEvent; +import org.apache.fineract.portfolio.businessevent.domain.loan.LoanCloseBusinessEvent; +import org.apache.fineract.portfolio.businessevent.domain.loan.LoanCreatedBusinessEvent; +import org.apache.fineract.portfolio.businessevent.domain.loan.product.LoanProductCreateBusinessEvent; +import org.apache.fineract.portfolio.businessevent.domain.loan.transaction.LoanMakeRepaymentBusinessEvent; +import org.apache.fineract.portfolio.businessevent.domain.savings.SavingsApproveBusinessEvent; +import org.apache.fineract.portfolio.businessevent.domain.savings.SavingsCloseBusinessEvent; +import org.apache.fineract.portfolio.businessevent.domain.savings.SavingsCreateBusinessEvent; +import org.apache.fineract.portfolio.businessevent.domain.savings.SavingsPostInterestBusinessEvent; +import org.apache.fineract.portfolio.businessevent.domain.savings.transaction.SavingsDepositBusinessEvent; +import org.apache.fineract.portfolio.businessevent.domain.share.ShareAccountApproveBusinessEvent; +import org.apache.fineract.portfolio.businessevent.domain.share.ShareAccountCreateBusinessEvent; +import org.apache.fineract.portfolio.businessevent.domain.share.ShareProductDividentsCreateBusinessEvent; import org.apache.fineract.portfolio.businessevent.service.BusinessEventNotifierService; import org.apache.fineract.portfolio.client.domain.Client; import org.apache.fineract.portfolio.loanaccount.domain.Loan; @@ -60,318 +76,231 @@ public class NotificationDomainServiceImpl implements NotificationDomainService @PostConstruct public void addListeners() { - businessEventNotifierService.addBusinessEventPostListeners(BusinessEvent.CLIENTS_CREATE, new ClientCreatedListener()); - businessEventNotifierService.addBusinessEventPostListeners(BusinessEvent.SAVINGS_APPROVE, new SavingsAccountApprovedListener()); - businessEventNotifierService.addBusinessEventPostListeners(BusinessEvent.CENTERS_CREATE, new CenterCreatedListener()); - businessEventNotifierService.addBusinessEventPostListeners(BusinessEvent.GROUPS_CREATE, new GroupCreatedListener()); - businessEventNotifierService.addBusinessEventPostListeners(BusinessEvent.SAVINGS_DEPOSIT, new SavingsAccountDepositListener()); - businessEventNotifierService.addBusinessEventPostListeners(BusinessEvent.SHARE_PRODUCT_DIVIDENDS_CREATE, + businessEventNotifierService.addBusinessEventListener(ClientCreateBusinessEvent.class, new ClientCreatedListener()); + businessEventNotifierService.addBusinessEventListener(SavingsApproveBusinessEvent.class, new SavingsAccountApprovedListener()); + businessEventNotifierService.addBusinessEventListener(CentersCreateBusinessEvent.class, new CenterCreatedListener()); + businessEventNotifierService.addBusinessEventListener(GroupsCreateBusinessEvent.class, new GroupCreatedListener()); + businessEventNotifierService.addBusinessEventListener(SavingsDepositBusinessEvent.class, new SavingsAccountDepositListener()); + businessEventNotifierService.addBusinessEventListener(ShareProductDividentsCreateBusinessEvent.class, new ShareProductDividendCreatedListener()); - businessEventNotifierService.addBusinessEventPostListeners(BusinessEvent.FIXED_DEPOSIT_ACCOUNT_CREATE, + businessEventNotifierService.addBusinessEventListener(FixedDepositAccountCreateBusinessEvent.class, new FixedDepositAccountCreatedListener()); - businessEventNotifierService.addBusinessEventPostListeners(BusinessEvent.RECURRING_DEPOSIT_ACCOUNT_CREATE, + businessEventNotifierService.addBusinessEventListener(RecurringDepositAccountCreateBusinessEvent.class, new RecurringDepositAccountCreatedListener()); - businessEventNotifierService.addBusinessEventPostListeners(BusinessEvent.SAVINGS_POST_INTEREST, new SavingsPostInterestListener()); - businessEventNotifierService.addBusinessEventPostListeners(BusinessEvent.LOAN_CREATE, new LoanCreatedListener()); - businessEventNotifierService.addBusinessEventPostListeners(BusinessEvent.LOAN_APPROVED, new LoanApprovedListener()); - businessEventNotifierService.addBusinessEventPostListeners(BusinessEvent.LOAN_CLOSE, new LoanClosedListener()); - businessEventNotifierService.addBusinessEventPostListeners(BusinessEvent.LOAN_CLOSE_AS_RESCHEDULE, + businessEventNotifierService.addBusinessEventListener(SavingsPostInterestBusinessEvent.class, new SavingsPostInterestListener()); + businessEventNotifierService.addBusinessEventListener(LoanCreatedBusinessEvent.class, new LoanCreatedListener()); + businessEventNotifierService.addBusinessEventListener(LoanApprovedBusinessEvent.class, new LoanApprovedListener()); + businessEventNotifierService.addBusinessEventListener(LoanCloseBusinessEvent.class, new LoanClosedListener()); + businessEventNotifierService.addBusinessEventListener(LoanCloseAsRescheduleBusinessEvent.class, new LoanCloseAsRescheduledListener()); - businessEventNotifierService.addBusinessEventPostListeners(BusinessEvent.LOAN_MAKE_REPAYMENT, new LoanMakeRepaymentListener()); - businessEventNotifierService.addBusinessEventPostListeners(BusinessEvent.LOAN_PRODUCT_CREATE, new LoanProductCreatedListener()); - businessEventNotifierService.addBusinessEventPostListeners(BusinessEvent.SAVINGS_CREATE, new SavingsAccountCreatedListener()); - businessEventNotifierService.addBusinessEventPostListeners(BusinessEvent.SAVINGS_CLOSE, new SavingsAccountClosedListener()); - businessEventNotifierService.addBusinessEventPostListeners(BusinessEvent.SHARE_ACCOUNT_CREATE, new ShareAccountCreatedListener()); - businessEventNotifierService.addBusinessEventPostListeners(BusinessEvent.SHARE_ACCOUNT_APPROVE, new ShareAccountApprovedListener()); + businessEventNotifierService.addBusinessEventListener(LoanMakeRepaymentBusinessEvent.class, new LoanMakeRepaymentListener()); + businessEventNotifierService.addBusinessEventListener(LoanProductCreateBusinessEvent.class, new LoanProductCreatedListener()); + businessEventNotifierService.addBusinessEventListener(SavingsCreateBusinessEvent.class, new SavingsAccountCreatedListener()); + businessEventNotifierService.addBusinessEventListener(SavingsCloseBusinessEvent.class, new SavingsAccountClosedListener()); + businessEventNotifierService.addBusinessEventListener(ShareAccountCreateBusinessEvent.class, new ShareAccountCreatedListener()); + businessEventNotifierService.addBusinessEventListener(ShareAccountApproveBusinessEvent.class, new ShareAccountApprovedListener()); } - private abstract static class NotificationBusinessEventAdapter implements BusinessEventListener { + private class ClientCreatedListener implements BusinessEventListener { @Override - public void businessEventToBeExecuted(Map businessEventEntity) {} + public void onBusinessEvent(ClientCreateBusinessEvent event) { + Client client = event.get(); + buildNotification("ACTIVATE_CLIENT", "client", client.getId(), "New client created", "created", + context.authenticatedUser().getId(), client.getOffice().getId()); + } } - private class ClientCreatedListener extends NotificationBusinessEventAdapter { + private class CenterCreatedListener implements BusinessEventListener { @Override - public void businessEventWasExecuted(Map businessEventEntity) { - Client client; - Object entity = businessEventEntity.get(BusinessEntity.CLIENT); - if (entity != null) { - client = (Client) entity; - buildNotification("ACTIVATE_CLIENT", "client", client.getId(), "New client created", "created", - context.authenticatedUser().getId(), client.getOffice().getId()); + public void onBusinessEvent(CentersCreateBusinessEvent event) { + CommandProcessingResult commandProcessingResult = event.get(); + buildNotification("ACTIVATE_CENTER", "center", commandProcessingResult.getGroupId(), "New center created", "created", + context.authenticatedUser().getId(), commandProcessingResult.getOfficeId()); + } + } + + private class GroupCreatedListener implements BusinessEventListener { + + @Override + public void onBusinessEvent(GroupsCreateBusinessEvent event) { + CommandProcessingResult commandProcessingResult = event.get(); + buildNotification("ACTIVATE_GROUP", "group", commandProcessingResult.getGroupId(), "New group created", "created", + context.authenticatedUser().getId(), commandProcessingResult.getOfficeId()); + } + } + + private class SavingsAccountDepositListener implements BusinessEventListener { + + @Override + public void onBusinessEvent(SavingsDepositBusinessEvent event) { + SavingsAccountTransaction savingsAccountTransaction = event.get(); + buildNotification("READ_SAVINGSACCOUNT", "savingsAccount", savingsAccountTransaction.getSavingsAccount().getId(), + "Deposit made", "depositMade", context.authenticatedUser().getId(), + savingsAccountTransaction.getSavingsAccount().officeId()); + } + } + + private class ShareProductDividendCreatedListener implements BusinessEventListener { + + @Override + public void onBusinessEvent(ShareProductDividentsCreateBusinessEvent event) { + Long shareProductId = event.get(); + buildNotification("READ_DIVIDEND_SHAREPRODUCT", "shareProduct", shareProductId, "Dividend posted to account", "dividendPosted", + context.authenticatedUser().getId(), context.authenticatedUser().getOffice().getId()); + } + } + + private class FixedDepositAccountCreatedListener implements BusinessEventListener { + + @Override + public void onBusinessEvent(FixedDepositAccountCreateBusinessEvent event) { + FixedDepositAccount fixedDepositAccount = event.get(); + buildNotification("APPROVE_FIXEDDEPOSITACCOUNT", "fixedDeposit", fixedDepositAccount.getId(), + "New fixed deposit account created", "created", context.authenticatedUser().getId(), fixedDepositAccount.officeId()); + } + } + + private class RecurringDepositAccountCreatedListener implements BusinessEventListener { + + @Override + public void onBusinessEvent(RecurringDepositAccountCreateBusinessEvent event) { + RecurringDepositAccount recurringDepositAccount = event.get(); + buildNotification("APPROVE_RECURRINGDEPOSITACCOUNT", "recurringDepositAccount", recurringDepositAccount.getId(), + "New recurring deposit account created", "created", context.authenticatedUser().getId(), + recurringDepositAccount.officeId()); + } + } + + private class SavingsAccountApprovedListener implements BusinessEventListener { + + @Override + public void onBusinessEvent(SavingsApproveBusinessEvent event) { + SavingsAccount savingsAccount = event.get(); + if (savingsAccount.depositAccountType().equals(DepositAccountType.FIXED_DEPOSIT)) { + + buildNotification("ACTIVATE_FIXEDDEPOSITACCOUNT", "fixedDeposit", savingsAccount.getId(), "Fixed deposit account approved", + "approved", context.authenticatedUser().getId(), savingsAccount.officeId()); + } else if (savingsAccount.depositAccountType().equals(DepositAccountType.RECURRING_DEPOSIT)) { + + buildNotification("ACTIVATE_RECURRINGDEPOSITACCOUNT", "recurringDepositAccount", savingsAccount.getId(), + "Recurring deposit account approved", "approved", context.authenticatedUser().getId(), savingsAccount.officeId()); + } else if (savingsAccount.depositAccountType().equals(DepositAccountType.SAVINGS_DEPOSIT)) { + + buildNotification("ACTIVATE_SAVINGSACCOUNT", "savingsAccount", savingsAccount.getId(), "Savings account approved", + "approved", context.authenticatedUser().getId(), savingsAccount.officeId()); } } } - private class CenterCreatedListener extends NotificationBusinessEventAdapter { + private class SavingsPostInterestListener implements BusinessEventListener { @Override - public void businessEventWasExecuted(Map businessEventEntity) { - CommandProcessingResult commandProcessingResult; - Object entity = businessEventEntity.get(BusinessEntity.GROUP); - if (entity != null) { - commandProcessingResult = (CommandProcessingResult) entity; - buildNotification("ACTIVATE_CENTER", "center", commandProcessingResult.getGroupId(), "New center created", "created", - context.authenticatedUser().getId(), commandProcessingResult.getOfficeId()); - } + public void onBusinessEvent(SavingsPostInterestBusinessEvent event) { + SavingsAccount savingsAccount = event.get(); + buildNotification("READ_SAVINGSACCOUNT", "savingsAccount", savingsAccount.getId(), "Interest posted to account", + "interestPosted", context.authenticatedUser().getId(), savingsAccount.officeId()); } } - private class GroupCreatedListener extends NotificationBusinessEventAdapter { + private class LoanCreatedListener implements BusinessEventListener { @Override - public void businessEventWasExecuted(Map businessEventEntity) { - CommandProcessingResult commandProcessingResult; - Object entity = businessEventEntity.get(BusinessEntity.GROUP); - if (entity != null) { - commandProcessingResult = (CommandProcessingResult) entity; - buildNotification("ACTIVATE_GROUP", "group", commandProcessingResult.getGroupId(), "New group created", "created", - context.authenticatedUser().getId(), commandProcessingResult.getOfficeId()); - } + public void onBusinessEvent(LoanCreatedBusinessEvent event) { + Loan loan = event.get(); + buildNotification("APPROVE_LOAN", "loan", loan.getId(), "New loan created", "created", context.authenticatedUser().getId(), + loan.getOfficeId()); } } - private class SavingsAccountDepositListener extends NotificationBusinessEventAdapter { + private class LoanApprovedListener implements BusinessEventListener { @Override - public void businessEventWasExecuted(Map businessEventEntity) { - SavingsAccountTransaction savingsAccountTransaction; - Object entity = businessEventEntity.get(BusinessEntity.SAVINGS_TRANSACTION); - if (entity != null) { - savingsAccountTransaction = (SavingsAccountTransaction) entity; - buildNotification("READ_SAVINGSACCOUNT", "savingsAccount", savingsAccountTransaction.getSavingsAccount().getId(), - "Deposit made", "depositMade", context.authenticatedUser().getId(), - savingsAccountTransaction.getSavingsAccount().officeId()); - } + public void onBusinessEvent(LoanApprovedBusinessEvent event) { + Loan loan = event.get(); + buildNotification("DISBURSE_LOAN", "loan", loan.getId(), "New loan approved", "approved", context.authenticatedUser().getId(), + loan.getOfficeId()); } } - private class ShareProductDividendCreatedListener extends NotificationBusinessEventAdapter { + private class LoanClosedListener implements BusinessEventListener { @Override - public void businessEventWasExecuted(Map businessEventEntity) { - Long shareProductId; - Object entity = businessEventEntity.get(BusinessEntity.SHARE_PRODUCT); - if (entity != null) { - shareProductId = (Long) entity; - buildNotification("READ_DIVIDEND_SHAREPRODUCT", "shareProduct", shareProductId, "Dividend posted to account", - "dividendPosted", context.authenticatedUser().getId(), context.authenticatedUser().getOffice().getId()); - } + public void onBusinessEvent(LoanCloseBusinessEvent event) { + Loan loan = event.get(); + buildNotification("READ_LOAN", "loan", loan.getId(), "Loan closed", "loanClosed", context.authenticatedUser().getId(), + loan.getOfficeId()); } } - private class FixedDepositAccountCreatedListener extends NotificationBusinessEventAdapter { + private class LoanCloseAsRescheduledListener implements BusinessEventListener { @Override - public void businessEventWasExecuted(Map businessEventEntity) { - FixedDepositAccount fixedDepositAccount; - Object entity = businessEventEntity.get(BusinessEntity.DEPOSIT_ACCOUNT); - if (entity != null) { - fixedDepositAccount = (FixedDepositAccount) entity; - buildNotification("APPROVE_FIXEDDEPOSITACCOUNT", "fixedDeposit", fixedDepositAccount.getId(), - "New fixed deposit account created", "created", context.authenticatedUser().getId(), - fixedDepositAccount.officeId()); - } + public void onBusinessEvent(LoanCloseAsRescheduleBusinessEvent event) { + Loan loan = event.get(); + buildNotification("READ_Rescheduled Loans", "loan", loan.getId(), "Loan has been rescheduled", "loanRescheduled", + context.authenticatedUser().getId(), loan.getOfficeId()); } } - private class RecurringDepositAccountCreatedListener extends NotificationBusinessEventAdapter { + private class LoanMakeRepaymentListener implements BusinessEventListener { @Override - public void businessEventWasExecuted(Map businessEventEntity) { - RecurringDepositAccount recurringDepositAccount; - Object entity = businessEventEntity.get(BusinessEntity.DEPOSIT_ACCOUNT); - if (entity != null) { - recurringDepositAccount = (RecurringDepositAccount) entity; - buildNotification("APPROVE_RECURRINGDEPOSITACCOUNT", "recurringDepositAccount", recurringDepositAccount.getId(), - "New recurring deposit account created", "created", context.authenticatedUser().getId(), - recurringDepositAccount.officeId()); - } + public void onBusinessEvent(LoanMakeRepaymentBusinessEvent event) { + Loan loan = event.get().getLoan(); + buildNotification("READ_LOAN", "loan", loan.getId(), "Repayment made", "repaymentMade", context.authenticatedUser().getId(), + loan.getOfficeId()); } } - private class SavingsAccountApprovedListener extends NotificationBusinessEventAdapter { + private class LoanProductCreatedListener implements BusinessEventListener { @Override - public void businessEventWasExecuted(Map businessEventEntity) { - SavingsAccount savingsAccount; - Object entity = businessEventEntity.get(BusinessEntity.SAVING); - if (entity != null) { - savingsAccount = (SavingsAccount) entity; - if (savingsAccount.depositAccountType().equals(DepositAccountType.FIXED_DEPOSIT)) { - - buildNotification("ACTIVATE_FIXEDDEPOSITACCOUNT", "fixedDeposit", savingsAccount.getId(), - "Fixed deposit account approved", "approved", context.authenticatedUser().getId(), savingsAccount.officeId()); - } else if (savingsAccount.depositAccountType().equals(DepositAccountType.RECURRING_DEPOSIT)) { - - buildNotification("ACTIVATE_RECURRINGDEPOSITACCOUNT", "recurringDepositAccount", savingsAccount.getId(), - "Recurring deposit account approved", "approved", context.authenticatedUser().getId(), - savingsAccount.officeId()); - } else if (savingsAccount.depositAccountType().equals(DepositAccountType.SAVINGS_DEPOSIT)) { - - buildNotification("ACTIVATE_SAVINGSACCOUNT", "savingsAccount", savingsAccount.getId(), "Savings account approved", - "approved", context.authenticatedUser().getId(), savingsAccount.officeId()); - } - } + public void onBusinessEvent(LoanProductCreateBusinessEvent event) { + LoanProduct loanProduct = event.get(); + buildNotification("READ_LOANPRODUCT", "loanProduct", loanProduct.getId(), "New loan product created", "created", + context.authenticatedUser().getId(), context.authenticatedUser().getOffice().getId()); } } - private class SavingsPostInterestListener extends NotificationBusinessEventAdapter { + private class SavingsAccountCreatedListener implements BusinessEventListener { @Override - public void businessEventWasExecuted(Map businessEventEntity) { - SavingsAccount savingsAccount; - Object entity = businessEventEntity.get(BusinessEntity.SAVING); - if (entity != null) { - savingsAccount = (SavingsAccount) entity; - buildNotification("READ_SAVINGSACCOUNT", "savingsAccount", savingsAccount.getId(), "Interest posted to account", - "interestPosted", context.authenticatedUser().getId(), savingsAccount.officeId()); - } + public void onBusinessEvent(SavingsCreateBusinessEvent event) { + SavingsAccount savingsAccount = event.get(); + buildNotification("APPROVE_SAVINGSACCOUNT", "savingsAccount", savingsAccount.getId(), "New savings account created", "created", + context.authenticatedUser().getId(), savingsAccount.officeId()); } } - private class LoanCreatedListener extends NotificationBusinessEventAdapter { + private class SavingsAccountClosedListener implements BusinessEventListener { @Override - public void businessEventWasExecuted(Map businessEventEntity) { - Loan loan; - Object entity = businessEventEntity.get(BusinessEntity.LOAN); - if (entity != null) { - loan = (Loan) entity; - buildNotification("APPROVE_LOAN", "loan", loan.getId(), "New loan created", "created", context.authenticatedUser().getId(), - loan.getOfficeId()); - } - + public void onBusinessEvent(SavingsCloseBusinessEvent event) { + SavingsAccount savingsAccount = event.get(); + buildNotification("READ_SAVINGSACCOUNT", "savingsAccount", savingsAccount.getId(), "Savings has gone into dormant", "closed", + context.authenticatedUser().getId(), savingsAccount.officeId()); } } - private class LoanApprovedListener extends NotificationBusinessEventAdapter { + private class ShareAccountCreatedListener implements BusinessEventListener { @Override - public void businessEventWasExecuted(Map businessEventEntity) { - Loan loan; - Object entity = businessEventEntity.get(BusinessEntity.LOAN); - if (entity != null) { - loan = (Loan) entity; - buildNotification("DISBURSE_LOAN", "loan", loan.getId(), "New loan approved", "approved", - context.authenticatedUser().getId(), loan.getOfficeId()); - } + public void onBusinessEvent(ShareAccountCreateBusinessEvent event) { + ShareAccount shareAccount = event.get(); + buildNotification("APPROVE_SHAREACCOUNT", "shareAccount", shareAccount.getId(), "New share account created", "created", + context.authenticatedUser().getId(), shareAccount.getOfficeId()); } } - private class LoanClosedListener extends NotificationBusinessEventAdapter { + private class ShareAccountApprovedListener implements BusinessEventListener { @Override - public void businessEventWasExecuted(Map businessEventEntity) { - - Loan loan; - Object entity = businessEventEntity.get(BusinessEntity.LOAN); - if (entity != null) { - loan = (Loan) entity; - buildNotification("READ_LOAN", "loan", loan.getId(), "Loan closed", "loanClosed", context.authenticatedUser().getId(), - loan.getOfficeId()); - } - } - } - - private class LoanCloseAsRescheduledListener extends NotificationBusinessEventAdapter { - - @Override - public void businessEventWasExecuted(Map businessEventEntity) { - Loan loan; - Object entity = businessEventEntity.get(BusinessEntity.LOAN); - if (entity != null) { - loan = (Loan) entity; - buildNotification("READ_Rescheduled Loans", "loan", loan.getId(), "Loan has been rescheduled", "loanRescheduled", - context.authenticatedUser().getId(), loan.getOfficeId()); - } - } - } - - private class LoanMakeRepaymentListener extends NotificationBusinessEventAdapter { - - @Override - public void businessEventWasExecuted(Map businessEventEntity) { - Loan loan; - Object entity = businessEventEntity.get(BusinessEntity.LOAN); - if (entity != null) { - loan = (Loan) entity; - buildNotification("READ_LOAN", "loan", loan.getId(), "Repayment made", "repaymentMade", context.authenticatedUser().getId(), - loan.getOfficeId()); - } - } - } - - private class LoanProductCreatedListener extends NotificationBusinessEventAdapter { - - @Override - public void businessEventWasExecuted(Map businessEventEntity) { - - LoanProduct loanProduct; - Object entity = businessEventEntity.get(BusinessEntity.LOAN_PRODUCT); - if (entity != null) { - loanProduct = (LoanProduct) entity; - buildNotification("READ_LOANPRODUCT", "loanProduct", loanProduct.getId(), "New loan product created", "created", - context.authenticatedUser().getId(), context.authenticatedUser().getOffice().getId()); - } - } - } - - private class SavingsAccountCreatedListener extends NotificationBusinessEventAdapter { - - @Override - public void businessEventWasExecuted(Map businessEventEntity) { - SavingsAccount savingsAccount; - Object entity = businessEventEntity.get(BusinessEntity.SAVING); - if (entity != null) { - savingsAccount = (SavingsAccount) entity; - buildNotification("APPROVE_SAVINGSACCOUNT", "savingsAccount", savingsAccount.getId(), "New savings account created", - "created", context.authenticatedUser().getId(), savingsAccount.officeId()); - } - } - } - - private class SavingsAccountClosedListener extends NotificationBusinessEventAdapter { - - @Override - public void businessEventWasExecuted(Map businessEventEntity) { - SavingsAccount savingsAccount; - Object entity = businessEventEntity.get(BusinessEntity.SAVING); - if (entity != null) { - savingsAccount = (SavingsAccount) entity; - buildNotification("READ_SAVINGSACCOUNT", "savingsAccount", savingsAccount.getId(), "Savings has gone into dormant", - "closed", context.authenticatedUser().getId(), savingsAccount.officeId()); - } - } - } - - private class ShareAccountCreatedListener extends NotificationBusinessEventAdapter { - - @Override - public void businessEventWasExecuted(Map businessEventEntity) { - ShareAccount shareAccount; - Object entity = businessEventEntity.get(BusinessEntity.SHARE_ACCOUNT); - if (entity != null) { - shareAccount = (ShareAccount) entity; - buildNotification("APPROVE_SHAREACCOUNT", "shareAccount", shareAccount.getId(), "New share account created", "created", - context.authenticatedUser().getId(), shareAccount.getOfficeId()); - } - } - } - - private class ShareAccountApprovedListener extends NotificationBusinessEventAdapter { - - @Override - public void businessEventWasExecuted(Map businessEventEntity) { - ShareAccount shareAccount; - Object entity = businessEventEntity.get(BusinessEntity.SHARE_ACCOUNT); - if (entity != null) { - shareAccount = (ShareAccount) entity; - buildNotification("ACTIVATE_SHAREACCOUNT", "shareAccount", shareAccount.getId(), "Share account approved", "approved", - context.authenticatedUser().getId(), shareAccount.getOfficeId()); - } + public void onBusinessEvent(ShareAccountApproveBusinessEvent event) { + ShareAccount shareAccount = event.get(); + buildNotification("ACTIVATE_SHAREACCOUNT", "shareAccount", shareAccount.getId(), "Share account approved", "approved", + context.authenticatedUser().getId(), shareAccount.getOfficeId()); } } diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/businessevent/BusinessEventListener.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/businessevent/BusinessEventListener.java index d0f1bd4cb..2d1505485 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/businessevent/BusinessEventListener.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/businessevent/BusinessEventListener.java @@ -18,24 +18,18 @@ */ package org.apache.fineract.portfolio.businessevent; -import java.util.Map; -import org.apache.fineract.portfolio.businessevent.domain.BusinessEntity; +import org.apache.fineract.portfolio.businessevent.domain.BusinessEvent; /** * The interface to be implemented by classes that want to be informed when a Business Event executes. example: on * completion of loan approval event need to block guarantor funds * */ -public interface BusinessEventListener { - - /** - * Implement this method for notifications before executing Business Event - */ - void businessEventToBeExecuted(Map businessEventEntity); +public interface BusinessEventListener> { /** * Implement this method for notifications after executing Business Event */ - void businessEventWasExecuted(Map businessEventEntity); + void onBusinessEvent(T event); } diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/businessevent/domain/BusinessEntity.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/businessevent/domain/AbstractBusinessEvent.java similarity index 59% rename from fineract-provider/src/main/java/org/apache/fineract/portfolio/businessevent/domain/BusinessEntity.java rename to fineract-provider/src/main/java/org/apache/fineract/portfolio/businessevent/domain/AbstractBusinessEvent.java index d41604afb..3faacfc66 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/businessevent/domain/BusinessEntity.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/businessevent/domain/AbstractBusinessEvent.java @@ -18,27 +18,15 @@ */ package org.apache.fineract.portfolio.businessevent.domain; -public enum BusinessEntity { +import lombok.RequiredArgsConstructor; - LOAN("loan"), // - LOAN_TRANSACTION("loan_transaction"), // - LOAN_CHARGE("loan_charge"), // - LOAN_ADJUSTED_TRANSACTION("loan_adjusted_transaction"), SAVING("saving"), // - CLIENT("client"), // - SAVINGS_TRANSACTION("Savings Transaction"), // - GROUP("group"), // - SHARE_ACCOUNT("share_account"), // - SHARE_PRODUCT("share_product"), // - DEPOSIT_ACCOUNT("deposit_account"), // - LOAN_PRODUCT("loan_product"); +@RequiredArgsConstructor +public abstract class AbstractBusinessEvent implements BusinessEvent { - private final String value; + private final T value; - BusinessEntity(final String value) { - this.value = value; - } - - public String getValue() { + @Override + public T get() { return value; } } diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/businessevent/domain/BusinessEvent.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/businessevent/domain/BusinessEvent.java index 4c08fc66b..da12bb295 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/businessevent/domain/BusinessEvent.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/businessevent/domain/BusinessEvent.java @@ -18,86 +18,7 @@ */ package org.apache.fineract.portfolio.businessevent.domain; -import java.util.HashSet; -import java.util.Set; +public interface BusinessEvent { -public enum BusinessEvent { - - LOAN_APPROVED("loan_approved"), // - LOAN_REJECTED("loan_reject"), // - LOAN_UNDO_APPROVAL("loan_undo_approval"), // - LOAN_UNDO_DISBURSAL("loan_undo_disbursal"), // - LOAN_UNDO_LASTDISBURSAL("loan_undo_lastdisbursal"), // - LOAN_UNDO_TRANSACTION("loan_undo_transaction"), // - LOAN_ADJUST_TRANSACTION("loan_adjust_transaction"), // - LOAN_MAKE_REPAYMENT("loan_repayment_transaction"), // - LOAN_MERCHANT_ISSUED_REFUND("loan_merchant_issued_refund"), // - LOAN_PAYOUT_REFUND("loan_payout_refund"), // - LOAN_GOODWILL_CREDIT("loan_goodwill_credit"), // - LOAN_RECOVERY_PAYMENT("loan_recovery_payment"), // - LOAN_WRITTEN_OFF("loan_writtenoff"), // - LOAN_UNDO_WRITTEN_OFF("loan_undo_writtenoff"), // - LOAN_DISBURSAL("loan_disbursal"), // - LOAN_WAIVE_INTEREST("loan_waive_interest"), // - LOAN_CLOSE("loan_close"), // - LOAN_CLOSE_AS_RESCHEDULE("loan_close_as_reschedule"), // - LOAN_ADD_CHARGE("loan_add_charge"), // - LOAN_UPDATE_CHARGE("loan_update_charge"), // - LOAN_WAIVE_CHARGE_UNDO("loan_waive_charge_undo"), // - LOAN_WAIVE_CHARGE("loan_waive_charge"), // - LOAN_DELETE_CHARGE("loan_delete_charge"), // - LOAN_CHARGE_PAYMENT("loan_charge_payment"), // - LOAN_INITIATE_TRANSFER("loan_initiate_transfer"), // - LOAN_ACCEPT_TRANSFER("loan_accept_transfer"), // - LOAN_WITHDRAW_TRANSFER("loan_withdraw_transfer"), // - LOAN_REJECT_TRANSFER("loan_reject_transfer"), // - LOAN_REASSIGN_OFFICER("loan_reassign_officer"), // - LOAN_REMOVE_OFFICER("loan_remove_officer"), // - LOAN_APPLY_OVERDUE_CHARGE("loan_apply_overdue_charge"), // - LOAN_INTEREST_RECALCULATION("loan_interest_recalculation"), // - LOAN_REFUND("loan_refund"), // - LOAN_FORECLOSURE("loan_foreclosure"), // - LOAN_CREDIT_BALANCE_REFUND("loan_credit_balance_refund"), // - LOAN_CREATE("loan_create"), // - LOAN_PRODUCT_CREATE("loan_product_create"), // - SAVINGS_ACTIVATE("savings_activated"), // - SAVINGS_REJECT("savings_reject"), // - SAVINGS_POST_INTEREST("savings_post_interest"), // - SAVINGS_DEPOSIT("savings_deposit"), // - SAVINGS_CLOSE("savings_close"), // - SAVINGS_WITHDRAWAL("savings_withdrawal"), // - SAVINGS_APPROVE("savings_approve"), // - SAVINGS_CREATE("savings_create"), // - CLIENTS_ACTIVATE("clients_activate"), // - SHARE_ACCOUNT_CREATE("share_account_create"), // - CLIENTS_REJECT("clients_reject"), // - CLIENTS_CREATE("clients_create"), // - CENTERS_CREATE("centers_create"), // - GROUPS_CREATE("groups_create"), // - SHARE_PRODUCT_DIVIDENDS_CREATE("share_product_dividends_create"), // - FIXED_DEPOSIT_ACCOUNT_CREATE("fixed_deposit_account_create"), // - SHARE_ACCOUNT_APPROVE("share_account_approve"), // - RECURRING_DEPOSIT_ACCOUNT_CREATE("recurring_deposit_account_create"); - - private static final Set VALUES = new HashSet<>(); - - static { - for (final BusinessEvent type : BusinessEvent.values()) { - VALUES.add(type.value); - } - } - - private final String value; - - BusinessEvent(final String value) { - this.value = value; - } - - public static Set getAllValues() { - return VALUES; - } - - public String getValue() { - return value; - } + T get(); } diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/businessevent/domain/client/ClientActivateBusinessEvent.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/businessevent/domain/client/ClientActivateBusinessEvent.java new file mode 100644 index 000000000..d7efcd423 --- /dev/null +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/businessevent/domain/client/ClientActivateBusinessEvent.java @@ -0,0 +1,28 @@ +/** + * 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.businessevent.domain.client; + +import org.apache.fineract.portfolio.client.domain.Client; + +public class ClientActivateBusinessEvent extends ClientBusinessEvent { + + public ClientActivateBusinessEvent(Client value) { + super(value); + } +} diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/businessevent/domain/client/ClientBusinessEvent.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/businessevent/domain/client/ClientBusinessEvent.java new file mode 100644 index 000000000..6861f71e5 --- /dev/null +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/businessevent/domain/client/ClientBusinessEvent.java @@ -0,0 +1,29 @@ +/** + * 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.businessevent.domain.client; + +import org.apache.fineract.portfolio.businessevent.domain.AbstractBusinessEvent; +import org.apache.fineract.portfolio.client.domain.Client; + +public abstract class ClientBusinessEvent extends AbstractBusinessEvent { + + public ClientBusinessEvent(Client value) { + super(value); + } +} diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/businessevent/domain/client/ClientCreateBusinessEvent.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/businessevent/domain/client/ClientCreateBusinessEvent.java new file mode 100644 index 000000000..16370acf7 --- /dev/null +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/businessevent/domain/client/ClientCreateBusinessEvent.java @@ -0,0 +1,28 @@ +/** + * 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.businessevent.domain.client; + +import org.apache.fineract.portfolio.client.domain.Client; + +public class ClientCreateBusinessEvent extends ClientBusinessEvent { + + public ClientCreateBusinessEvent(Client value) { + super(value); + } +} diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/businessevent/domain/client/ClientRejectBusinessEvent.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/businessevent/domain/client/ClientRejectBusinessEvent.java new file mode 100644 index 000000000..8a4d190ec --- /dev/null +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/businessevent/domain/client/ClientRejectBusinessEvent.java @@ -0,0 +1,28 @@ +/** + * 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.businessevent.domain.client; + +import org.apache.fineract.portfolio.client.domain.Client; + +public class ClientRejectBusinessEvent extends ClientBusinessEvent { + + public ClientRejectBusinessEvent(Client value) { + super(value); + } +} diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/businessevent/domain/deposit/FixedDepositAccountBusinessEvent.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/businessevent/domain/deposit/FixedDepositAccountBusinessEvent.java new file mode 100644 index 000000000..3b69bbfe4 --- /dev/null +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/businessevent/domain/deposit/FixedDepositAccountBusinessEvent.java @@ -0,0 +1,29 @@ +/** + * 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.businessevent.domain.deposit; + +import org.apache.fineract.portfolio.businessevent.domain.AbstractBusinessEvent; +import org.apache.fineract.portfolio.savings.domain.FixedDepositAccount; + +public abstract class FixedDepositAccountBusinessEvent extends AbstractBusinessEvent { + + public FixedDepositAccountBusinessEvent(FixedDepositAccount value) { + super(value); + } +} diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/businessevent/domain/deposit/FixedDepositAccountCreateBusinessEvent.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/businessevent/domain/deposit/FixedDepositAccountCreateBusinessEvent.java new file mode 100644 index 000000000..1099ebd80 --- /dev/null +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/businessevent/domain/deposit/FixedDepositAccountCreateBusinessEvent.java @@ -0,0 +1,28 @@ +/** + * 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.businessevent.domain.deposit; + +import org.apache.fineract.portfolio.savings.domain.FixedDepositAccount; + +public class FixedDepositAccountCreateBusinessEvent extends FixedDepositAccountBusinessEvent { + + public FixedDepositAccountCreateBusinessEvent(FixedDepositAccount value) { + super(value); + } +} diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/businessevent/domain/deposit/RecurringDepositAccountBusinessEvent.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/businessevent/domain/deposit/RecurringDepositAccountBusinessEvent.java new file mode 100644 index 000000000..8dd360843 --- /dev/null +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/businessevent/domain/deposit/RecurringDepositAccountBusinessEvent.java @@ -0,0 +1,29 @@ +/** + * 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.businessevent.domain.deposit; + +import org.apache.fineract.portfolio.businessevent.domain.AbstractBusinessEvent; +import org.apache.fineract.portfolio.savings.domain.RecurringDepositAccount; + +public abstract class RecurringDepositAccountBusinessEvent extends AbstractBusinessEvent { + + public RecurringDepositAccountBusinessEvent(RecurringDepositAccount value) { + super(value); + } +} diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/businessevent/domain/deposit/RecurringDepositAccountCreateBusinessEvent.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/businessevent/domain/deposit/RecurringDepositAccountCreateBusinessEvent.java new file mode 100644 index 000000000..ca7096991 --- /dev/null +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/businessevent/domain/deposit/RecurringDepositAccountCreateBusinessEvent.java @@ -0,0 +1,28 @@ +/** + * 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.businessevent.domain.deposit; + +import org.apache.fineract.portfolio.savings.domain.RecurringDepositAccount; + +public class RecurringDepositAccountCreateBusinessEvent extends RecurringDepositAccountBusinessEvent { + + public RecurringDepositAccountCreateBusinessEvent(RecurringDepositAccount value) { + super(value); + } +} diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/businessevent/domain/group/CentersCreateBusinessEvent.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/businessevent/domain/group/CentersCreateBusinessEvent.java new file mode 100644 index 000000000..ccfa2f105 --- /dev/null +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/businessevent/domain/group/CentersCreateBusinessEvent.java @@ -0,0 +1,28 @@ +/** + * 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.businessevent.domain.group; + +import org.apache.fineract.infrastructure.core.data.CommandProcessingResult; + +public class CentersCreateBusinessEvent extends GroupsBusinessEvent { + + public CentersCreateBusinessEvent(CommandProcessingResult value) { + super(value); + } +} diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/businessevent/domain/group/GroupsBusinessEvent.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/businessevent/domain/group/GroupsBusinessEvent.java new file mode 100644 index 000000000..c1de3ea88 --- /dev/null +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/businessevent/domain/group/GroupsBusinessEvent.java @@ -0,0 +1,29 @@ +/** + * 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.businessevent.domain.group; + +import org.apache.fineract.infrastructure.core.data.CommandProcessingResult; +import org.apache.fineract.portfolio.businessevent.domain.AbstractBusinessEvent; + +public abstract class GroupsBusinessEvent extends AbstractBusinessEvent { + + public GroupsBusinessEvent(CommandProcessingResult value) { + super(value); + } +} diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/businessevent/domain/group/GroupsCreateBusinessEvent.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/businessevent/domain/group/GroupsCreateBusinessEvent.java new file mode 100644 index 000000000..ee53b704a --- /dev/null +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/businessevent/domain/group/GroupsCreateBusinessEvent.java @@ -0,0 +1,28 @@ +/** + * 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.businessevent.domain.group; + +import org.apache.fineract.infrastructure.core.data.CommandProcessingResult; + +public class GroupsCreateBusinessEvent extends GroupsBusinessEvent { + + public GroupsCreateBusinessEvent(CommandProcessingResult value) { + super(value); + } +} diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/businessevent/domain/loan/LoanAcceptTransferBusinessEvent.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/businessevent/domain/loan/LoanAcceptTransferBusinessEvent.java new file mode 100644 index 000000000..8abb87df7 --- /dev/null +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/businessevent/domain/loan/LoanAcceptTransferBusinessEvent.java @@ -0,0 +1,28 @@ +/** + * 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.businessevent.domain.loan; + +import org.apache.fineract.portfolio.loanaccount.domain.Loan; + +public class LoanAcceptTransferBusinessEvent extends LoanBusinessEvent { + + public LoanAcceptTransferBusinessEvent(Loan value) { + super(value); + } +} diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/businessevent/domain/loan/LoanAdjustTransactionBusinessEvent.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/businessevent/domain/loan/LoanAdjustTransactionBusinessEvent.java new file mode 100644 index 000000000..ed6ebe588 --- /dev/null +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/businessevent/domain/loan/LoanAdjustTransactionBusinessEvent.java @@ -0,0 +1,41 @@ +/** + * 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.businessevent.domain.loan; + +import lombok.Getter; +import lombok.RequiredArgsConstructor; +import lombok.Setter; +import org.apache.fineract.portfolio.businessevent.domain.AbstractBusinessEvent; +import org.apache.fineract.portfolio.loanaccount.domain.LoanTransaction; + +public class LoanAdjustTransactionBusinessEvent extends AbstractBusinessEvent { + + public LoanAdjustTransactionBusinessEvent(Data value) { + super(value); + } + + @RequiredArgsConstructor + @Getter + public static class Data { + + private final LoanTransaction transactionToAdjust; + @Setter + private LoanTransaction newTransactionDetail; + } +} diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/businessevent/domain/loan/LoanApplyOverdueChargeBusinessEvent.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/businessevent/domain/loan/LoanApplyOverdueChargeBusinessEvent.java new file mode 100644 index 000000000..a8b55301e --- /dev/null +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/businessevent/domain/loan/LoanApplyOverdueChargeBusinessEvent.java @@ -0,0 +1,28 @@ +/** + * 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.businessevent.domain.loan; + +import org.apache.fineract.portfolio.loanaccount.domain.Loan; + +public class LoanApplyOverdueChargeBusinessEvent extends LoanBusinessEvent { + + public LoanApplyOverdueChargeBusinessEvent(Loan value) { + super(value); + } +} diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/businessevent/domain/loan/LoanApprovedBusinessEvent.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/businessevent/domain/loan/LoanApprovedBusinessEvent.java new file mode 100644 index 000000000..ab2a82116 --- /dev/null +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/businessevent/domain/loan/LoanApprovedBusinessEvent.java @@ -0,0 +1,28 @@ +/** + * 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.businessevent.domain.loan; + +import org.apache.fineract.portfolio.loanaccount.domain.Loan; + +public class LoanApprovedBusinessEvent extends LoanBusinessEvent { + + public LoanApprovedBusinessEvent(Loan value) { + super(value); + } +} diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/businessevent/domain/loan/LoanBusinessEvent.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/businessevent/domain/loan/LoanBusinessEvent.java new file mode 100644 index 000000000..ec3d52dbf --- /dev/null +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/businessevent/domain/loan/LoanBusinessEvent.java @@ -0,0 +1,29 @@ +/** + * 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.businessevent.domain.loan; + +import org.apache.fineract.portfolio.businessevent.domain.AbstractBusinessEvent; +import org.apache.fineract.portfolio.loanaccount.domain.Loan; + +public abstract class LoanBusinessEvent extends AbstractBusinessEvent { + + public LoanBusinessEvent(Loan value) { + super(value); + } +} diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/businessevent/domain/loan/LoanCloseAsRescheduleBusinessEvent.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/businessevent/domain/loan/LoanCloseAsRescheduleBusinessEvent.java new file mode 100644 index 000000000..b3f77b49a --- /dev/null +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/businessevent/domain/loan/LoanCloseAsRescheduleBusinessEvent.java @@ -0,0 +1,28 @@ +/** + * 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.businessevent.domain.loan; + +import org.apache.fineract.portfolio.loanaccount.domain.Loan; + +public class LoanCloseAsRescheduleBusinessEvent extends LoanBusinessEvent { + + public LoanCloseAsRescheduleBusinessEvent(Loan value) { + super(value); + } +} diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/businessevent/domain/loan/LoanCloseBusinessEvent.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/businessevent/domain/loan/LoanCloseBusinessEvent.java new file mode 100644 index 000000000..05c301ab5 --- /dev/null +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/businessevent/domain/loan/LoanCloseBusinessEvent.java @@ -0,0 +1,28 @@ +/** + * 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.businessevent.domain.loan; + +import org.apache.fineract.portfolio.loanaccount.domain.Loan; + +public class LoanCloseBusinessEvent extends LoanBusinessEvent { + + public LoanCloseBusinessEvent(Loan value) { + super(value); + } +} diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/businessevent/domain/loan/LoanCreatedBusinessEvent.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/businessevent/domain/loan/LoanCreatedBusinessEvent.java new file mode 100644 index 000000000..1673ce007 --- /dev/null +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/businessevent/domain/loan/LoanCreatedBusinessEvent.java @@ -0,0 +1,28 @@ +/** + * 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.businessevent.domain.loan; + +import org.apache.fineract.portfolio.loanaccount.domain.Loan; + +public class LoanCreatedBusinessEvent extends LoanBusinessEvent { + + public LoanCreatedBusinessEvent(Loan value) { + super(value); + } +} diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/businessevent/domain/loan/LoanDisbursalBusinessEvent.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/businessevent/domain/loan/LoanDisbursalBusinessEvent.java new file mode 100644 index 000000000..957be1625 --- /dev/null +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/businessevent/domain/loan/LoanDisbursalBusinessEvent.java @@ -0,0 +1,28 @@ +/** + * 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.businessevent.domain.loan; + +import org.apache.fineract.portfolio.loanaccount.domain.Loan; + +public class LoanDisbursalBusinessEvent extends LoanBusinessEvent { + + public LoanDisbursalBusinessEvent(Loan value) { + super(value); + } +} diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/businessevent/domain/loan/LoanInitiateTransferBusinessEvent.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/businessevent/domain/loan/LoanInitiateTransferBusinessEvent.java new file mode 100644 index 000000000..27b50b77e --- /dev/null +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/businessevent/domain/loan/LoanInitiateTransferBusinessEvent.java @@ -0,0 +1,28 @@ +/** + * 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.businessevent.domain.loan; + +import org.apache.fineract.portfolio.loanaccount.domain.Loan; + +public class LoanInitiateTransferBusinessEvent extends LoanBusinessEvent { + + public LoanInitiateTransferBusinessEvent(Loan value) { + super(value); + } +} diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/businessevent/domain/loan/LoanInterestRecalculationBusinessEvent.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/businessevent/domain/loan/LoanInterestRecalculationBusinessEvent.java new file mode 100644 index 000000000..b77014f6a --- /dev/null +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/businessevent/domain/loan/LoanInterestRecalculationBusinessEvent.java @@ -0,0 +1,28 @@ +/** + * 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.businessevent.domain.loan; + +import org.apache.fineract.portfolio.loanaccount.domain.Loan; + +public class LoanInterestRecalculationBusinessEvent extends LoanBusinessEvent { + + public LoanInterestRecalculationBusinessEvent(Loan value) { + super(value); + } +} diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/businessevent/domain/loan/LoanReassignOfficerBusinessEvent.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/businessevent/domain/loan/LoanReassignOfficerBusinessEvent.java new file mode 100644 index 000000000..814d5658e --- /dev/null +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/businessevent/domain/loan/LoanReassignOfficerBusinessEvent.java @@ -0,0 +1,28 @@ +/** + * 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.businessevent.domain.loan; + +import org.apache.fineract.portfolio.loanaccount.domain.Loan; + +public class LoanReassignOfficerBusinessEvent extends LoanBusinessEvent { + + public LoanReassignOfficerBusinessEvent(Loan value) { + super(value); + } +} diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/businessevent/domain/loan/LoanRejectTransferBusinessEvent.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/businessevent/domain/loan/LoanRejectTransferBusinessEvent.java new file mode 100644 index 000000000..99497cf8c --- /dev/null +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/businessevent/domain/loan/LoanRejectTransferBusinessEvent.java @@ -0,0 +1,28 @@ +/** + * 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.businessevent.domain.loan; + +import org.apache.fineract.portfolio.loanaccount.domain.Loan; + +public class LoanRejectTransferBusinessEvent extends LoanBusinessEvent { + + public LoanRejectTransferBusinessEvent(Loan value) { + super(value); + } +} diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/businessevent/domain/loan/LoanRejectedBusinessEvent.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/businessevent/domain/loan/LoanRejectedBusinessEvent.java new file mode 100644 index 000000000..e58e9c13d --- /dev/null +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/businessevent/domain/loan/LoanRejectedBusinessEvent.java @@ -0,0 +1,28 @@ +/** + * 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.businessevent.domain.loan; + +import org.apache.fineract.portfolio.loanaccount.domain.Loan; + +public class LoanRejectedBusinessEvent extends LoanBusinessEvent { + + public LoanRejectedBusinessEvent(Loan value) { + super(value); + } +} diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/businessevent/domain/loan/LoanRemoveOfficerBusinessEvent.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/businessevent/domain/loan/LoanRemoveOfficerBusinessEvent.java new file mode 100644 index 000000000..7e11f7524 --- /dev/null +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/businessevent/domain/loan/LoanRemoveOfficerBusinessEvent.java @@ -0,0 +1,28 @@ +/** + * 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.businessevent.domain.loan; + +import org.apache.fineract.portfolio.loanaccount.domain.Loan; + +public class LoanRemoveOfficerBusinessEvent extends LoanBusinessEvent { + + public LoanRemoveOfficerBusinessEvent(Loan value) { + super(value); + } +} diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/businessevent/domain/loan/LoanUndoApprovalBusinessEvent.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/businessevent/domain/loan/LoanUndoApprovalBusinessEvent.java new file mode 100644 index 000000000..2a474301d --- /dev/null +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/businessevent/domain/loan/LoanUndoApprovalBusinessEvent.java @@ -0,0 +1,28 @@ +/** + * 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.businessevent.domain.loan; + +import org.apache.fineract.portfolio.loanaccount.domain.Loan; + +public class LoanUndoApprovalBusinessEvent extends LoanBusinessEvent { + + public LoanUndoApprovalBusinessEvent(Loan value) { + super(value); + } +} diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/businessevent/domain/loan/LoanUndoDisbursalBusinessEvent.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/businessevent/domain/loan/LoanUndoDisbursalBusinessEvent.java new file mode 100644 index 000000000..4453dfa5d --- /dev/null +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/businessevent/domain/loan/LoanUndoDisbursalBusinessEvent.java @@ -0,0 +1,28 @@ +/** + * 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.businessevent.domain.loan; + +import org.apache.fineract.portfolio.loanaccount.domain.Loan; + +public class LoanUndoDisbursalBusinessEvent extends LoanBusinessEvent { + + public LoanUndoDisbursalBusinessEvent(Loan value) { + super(value); + } +} diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/businessevent/domain/loan/LoanUndoLastDisbursalBusinessEvent.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/businessevent/domain/loan/LoanUndoLastDisbursalBusinessEvent.java new file mode 100644 index 000000000..77cf23081 --- /dev/null +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/businessevent/domain/loan/LoanUndoLastDisbursalBusinessEvent.java @@ -0,0 +1,28 @@ +/** + * 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.businessevent.domain.loan; + +import org.apache.fineract.portfolio.loanaccount.domain.Loan; + +public class LoanUndoLastDisbursalBusinessEvent extends LoanBusinessEvent { + + public LoanUndoLastDisbursalBusinessEvent(Loan value) { + super(value); + } +} diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/businessevent/domain/loan/LoanWithdrawTransferBusinessEvent.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/businessevent/domain/loan/LoanWithdrawTransferBusinessEvent.java new file mode 100644 index 000000000..a5f70c5f4 --- /dev/null +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/businessevent/domain/loan/LoanWithdrawTransferBusinessEvent.java @@ -0,0 +1,28 @@ +/** + * 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.businessevent.domain.loan; + +import org.apache.fineract.portfolio.loanaccount.domain.Loan; + +public class LoanWithdrawTransferBusinessEvent extends LoanBusinessEvent { + + public LoanWithdrawTransferBusinessEvent(Loan value) { + super(value); + } +} diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/businessevent/domain/loan/charge/LoanAddChargeBusinessEvent.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/businessevent/domain/loan/charge/LoanAddChargeBusinessEvent.java new file mode 100644 index 000000000..78a4ef7df --- /dev/null +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/businessevent/domain/loan/charge/LoanAddChargeBusinessEvent.java @@ -0,0 +1,28 @@ +/** + * 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.businessevent.domain.loan.charge; + +import org.apache.fineract.portfolio.loanaccount.domain.LoanCharge; + +public class LoanAddChargeBusinessEvent extends LoanChargeBusinessEvent { + + public LoanAddChargeBusinessEvent(LoanCharge value) { + super(value); + } +} diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/businessevent/domain/loan/charge/LoanChargeBusinessEvent.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/businessevent/domain/loan/charge/LoanChargeBusinessEvent.java new file mode 100644 index 000000000..6e190e144 --- /dev/null +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/businessevent/domain/loan/charge/LoanChargeBusinessEvent.java @@ -0,0 +1,29 @@ +/** + * 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.businessevent.domain.loan.charge; + +import org.apache.fineract.portfolio.businessevent.domain.AbstractBusinessEvent; +import org.apache.fineract.portfolio.loanaccount.domain.LoanCharge; + +public abstract class LoanChargeBusinessEvent extends AbstractBusinessEvent { + + public LoanChargeBusinessEvent(LoanCharge value) { + super(value); + } +} diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/businessevent/domain/loan/charge/LoanDeleteChargeBusinessEvent.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/businessevent/domain/loan/charge/LoanDeleteChargeBusinessEvent.java new file mode 100644 index 000000000..e205409c6 --- /dev/null +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/businessevent/domain/loan/charge/LoanDeleteChargeBusinessEvent.java @@ -0,0 +1,28 @@ +/** + * 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.businessevent.domain.loan.charge; + +import org.apache.fineract.portfolio.loanaccount.domain.LoanCharge; + +public class LoanDeleteChargeBusinessEvent extends LoanChargeBusinessEvent { + + public LoanDeleteChargeBusinessEvent(LoanCharge value) { + super(value); + } +} diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/businessevent/domain/loan/charge/LoanUpdateChargeBusinessEvent.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/businessevent/domain/loan/charge/LoanUpdateChargeBusinessEvent.java new file mode 100644 index 000000000..80b08933f --- /dev/null +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/businessevent/domain/loan/charge/LoanUpdateChargeBusinessEvent.java @@ -0,0 +1,28 @@ +/** + * 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.businessevent.domain.loan.charge; + +import org.apache.fineract.portfolio.loanaccount.domain.LoanCharge; + +public class LoanUpdateChargeBusinessEvent extends LoanChargeBusinessEvent { + + public LoanUpdateChargeBusinessEvent(LoanCharge value) { + super(value); + } +} diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/businessevent/domain/loan/charge/LoanWaiveChargeBusinessEvent.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/businessevent/domain/loan/charge/LoanWaiveChargeBusinessEvent.java new file mode 100644 index 000000000..409b64897 --- /dev/null +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/businessevent/domain/loan/charge/LoanWaiveChargeBusinessEvent.java @@ -0,0 +1,28 @@ +/** + * 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.businessevent.domain.loan.charge; + +import org.apache.fineract.portfolio.loanaccount.domain.LoanCharge; + +public class LoanWaiveChargeBusinessEvent extends LoanChargeBusinessEvent { + + public LoanWaiveChargeBusinessEvent(LoanCharge value) { + super(value); + } +} diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/businessevent/domain/loan/charge/LoanWaiveChargeUndoBusinessEvent.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/businessevent/domain/loan/charge/LoanWaiveChargeUndoBusinessEvent.java new file mode 100644 index 000000000..4e566e3c4 --- /dev/null +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/businessevent/domain/loan/charge/LoanWaiveChargeUndoBusinessEvent.java @@ -0,0 +1,28 @@ +/** + * 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.businessevent.domain.loan.charge; + +import org.apache.fineract.portfolio.loanaccount.domain.LoanCharge; + +public class LoanWaiveChargeUndoBusinessEvent extends LoanChargeBusinessEvent { + + public LoanWaiveChargeUndoBusinessEvent(LoanCharge value) { + super(value); + } +} diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/businessevent/domain/loan/product/LoanProductBusinessEvent.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/businessevent/domain/loan/product/LoanProductBusinessEvent.java new file mode 100644 index 000000000..3bd3dce0c --- /dev/null +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/businessevent/domain/loan/product/LoanProductBusinessEvent.java @@ -0,0 +1,29 @@ +/** + * 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.businessevent.domain.loan.product; + +import org.apache.fineract.portfolio.businessevent.domain.AbstractBusinessEvent; +import org.apache.fineract.portfolio.loanproduct.domain.LoanProduct; + +public abstract class LoanProductBusinessEvent extends AbstractBusinessEvent { + + public LoanProductBusinessEvent(LoanProduct value) { + super(value); + } +} diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/businessevent/domain/loan/product/LoanProductCreateBusinessEvent.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/businessevent/domain/loan/product/LoanProductCreateBusinessEvent.java new file mode 100644 index 000000000..1329398a6 --- /dev/null +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/businessevent/domain/loan/product/LoanProductCreateBusinessEvent.java @@ -0,0 +1,28 @@ +/** + * 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.businessevent.domain.loan.product; + +import org.apache.fineract.portfolio.loanproduct.domain.LoanProduct; + +public class LoanProductCreateBusinessEvent extends LoanProductBusinessEvent { + + public LoanProductCreateBusinessEvent(LoanProduct value) { + super(value); + } +} diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/businessevent/domain/loan/transaction/LoanChargePaymentBusinessEvent.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/businessevent/domain/loan/transaction/LoanChargePaymentBusinessEvent.java new file mode 100644 index 000000000..666feb8d2 --- /dev/null +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/businessevent/domain/loan/transaction/LoanChargePaymentBusinessEvent.java @@ -0,0 +1,28 @@ +/** + * 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.businessevent.domain.loan.transaction; + +import org.apache.fineract.portfolio.loanaccount.domain.LoanTransaction; + +public class LoanChargePaymentBusinessEvent extends LoanTransactionBusinessEvent { + + public LoanChargePaymentBusinessEvent(LoanTransaction value) { + super(value); + } +} diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/businessevent/domain/loan/transaction/LoanCreditBalanceRefundBusinessEvent.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/businessevent/domain/loan/transaction/LoanCreditBalanceRefundBusinessEvent.java new file mode 100644 index 000000000..b2438a880 --- /dev/null +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/businessevent/domain/loan/transaction/LoanCreditBalanceRefundBusinessEvent.java @@ -0,0 +1,28 @@ +/** + * 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.businessevent.domain.loan.transaction; + +import org.apache.fineract.portfolio.loanaccount.domain.LoanTransaction; + +public class LoanCreditBalanceRefundBusinessEvent extends LoanTransactionBusinessEvent { + + public LoanCreditBalanceRefundBusinessEvent(LoanTransaction value) { + super(value); + } +} diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/businessevent/domain/loan/transaction/LoanForeClosureBusinessEvent.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/businessevent/domain/loan/transaction/LoanForeClosureBusinessEvent.java new file mode 100644 index 000000000..fa277a80f --- /dev/null +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/businessevent/domain/loan/transaction/LoanForeClosureBusinessEvent.java @@ -0,0 +1,28 @@ +/** + * 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.businessevent.domain.loan.transaction; + +import org.apache.fineract.portfolio.loanaccount.domain.LoanTransaction; + +public class LoanForeClosureBusinessEvent extends LoanTransactionBusinessEvent { + + public LoanForeClosureBusinessEvent(LoanTransaction value) { + super(value); + } +} diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/businessevent/domain/loan/transaction/LoanGoodwillCreditBusinessEvent.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/businessevent/domain/loan/transaction/LoanGoodwillCreditBusinessEvent.java new file mode 100644 index 000000000..9ff4b81d2 --- /dev/null +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/businessevent/domain/loan/transaction/LoanGoodwillCreditBusinessEvent.java @@ -0,0 +1,28 @@ +/** + * 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.businessevent.domain.loan.transaction; + +import org.apache.fineract.portfolio.loanaccount.domain.LoanTransaction; + +public class LoanGoodwillCreditBusinessEvent extends LoanTransactionBusinessEvent { + + public LoanGoodwillCreditBusinessEvent(LoanTransaction value) { + super(value); + } +} diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/businessevent/domain/loan/transaction/LoanMakeRepaymentBusinessEvent.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/businessevent/domain/loan/transaction/LoanMakeRepaymentBusinessEvent.java new file mode 100644 index 000000000..cbe4d9835 --- /dev/null +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/businessevent/domain/loan/transaction/LoanMakeRepaymentBusinessEvent.java @@ -0,0 +1,28 @@ +/** + * 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.businessevent.domain.loan.transaction; + +import org.apache.fineract.portfolio.loanaccount.domain.LoanTransaction; + +public class LoanMakeRepaymentBusinessEvent extends LoanTransactionBusinessEvent { + + public LoanMakeRepaymentBusinessEvent(LoanTransaction value) { + super(value); + } +} diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/businessevent/domain/loan/transaction/LoanMerchantIssuedRefundBusinessEvent.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/businessevent/domain/loan/transaction/LoanMerchantIssuedRefundBusinessEvent.java new file mode 100644 index 000000000..aa8c853f3 --- /dev/null +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/businessevent/domain/loan/transaction/LoanMerchantIssuedRefundBusinessEvent.java @@ -0,0 +1,28 @@ +/** + * 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.businessevent.domain.loan.transaction; + +import org.apache.fineract.portfolio.loanaccount.domain.LoanTransaction; + +public class LoanMerchantIssuedRefundBusinessEvent extends LoanTransactionBusinessEvent { + + public LoanMerchantIssuedRefundBusinessEvent(LoanTransaction value) { + super(value); + } +} diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/businessevent/domain/loan/transaction/LoanPayoutRefundBusinessEvent.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/businessevent/domain/loan/transaction/LoanPayoutRefundBusinessEvent.java new file mode 100644 index 000000000..00a294f6f --- /dev/null +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/businessevent/domain/loan/transaction/LoanPayoutRefundBusinessEvent.java @@ -0,0 +1,28 @@ +/** + * 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.businessevent.domain.loan.transaction; + +import org.apache.fineract.portfolio.loanaccount.domain.LoanTransaction; + +public class LoanPayoutRefundBusinessEvent extends LoanTransactionBusinessEvent { + + public LoanPayoutRefundBusinessEvent(LoanTransaction value) { + super(value); + } +} diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/businessevent/domain/loan/transaction/LoanRecoveryPaymentBusinessEvent.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/businessevent/domain/loan/transaction/LoanRecoveryPaymentBusinessEvent.java new file mode 100644 index 000000000..6445f18ce --- /dev/null +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/businessevent/domain/loan/transaction/LoanRecoveryPaymentBusinessEvent.java @@ -0,0 +1,28 @@ +/** + * 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.businessevent.domain.loan.transaction; + +import org.apache.fineract.portfolio.loanaccount.domain.LoanTransaction; + +public class LoanRecoveryPaymentBusinessEvent extends LoanTransactionBusinessEvent { + + public LoanRecoveryPaymentBusinessEvent(LoanTransaction value) { + super(value); + } +} diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/businessevent/domain/loan/transaction/LoanRefundBusinessEvent.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/businessevent/domain/loan/transaction/LoanRefundBusinessEvent.java new file mode 100644 index 000000000..f50de7a00 --- /dev/null +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/businessevent/domain/loan/transaction/LoanRefundBusinessEvent.java @@ -0,0 +1,28 @@ +/** + * 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.businessevent.domain.loan.transaction; + +import org.apache.fineract.portfolio.loanaccount.domain.LoanTransaction; + +public class LoanRefundBusinessEvent extends LoanTransactionBusinessEvent { + + public LoanRefundBusinessEvent(LoanTransaction value) { + super(value); + } +} diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/businessevent/domain/loan/transaction/LoanTransactionBusinessEvent.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/businessevent/domain/loan/transaction/LoanTransactionBusinessEvent.java new file mode 100644 index 000000000..2f818a725 --- /dev/null +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/businessevent/domain/loan/transaction/LoanTransactionBusinessEvent.java @@ -0,0 +1,29 @@ +/** + * 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.businessevent.domain.loan.transaction; + +import org.apache.fineract.portfolio.businessevent.domain.AbstractBusinessEvent; +import org.apache.fineract.portfolio.loanaccount.domain.LoanTransaction; + +public abstract class LoanTransactionBusinessEvent extends AbstractBusinessEvent { + + public LoanTransactionBusinessEvent(LoanTransaction value) { + super(value); + } +} diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/businessevent/domain/loan/transaction/LoanUndoWrittenOffBusinessEvent.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/businessevent/domain/loan/transaction/LoanUndoWrittenOffBusinessEvent.java new file mode 100644 index 000000000..0916db798 --- /dev/null +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/businessevent/domain/loan/transaction/LoanUndoWrittenOffBusinessEvent.java @@ -0,0 +1,28 @@ +/** + * 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.businessevent.domain.loan.transaction; + +import org.apache.fineract.portfolio.loanaccount.domain.LoanTransaction; + +public class LoanUndoWrittenOffBusinessEvent extends LoanTransactionBusinessEvent { + + public LoanUndoWrittenOffBusinessEvent(LoanTransaction value) { + super(value); + } +} diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/businessevent/domain/loan/transaction/LoanWaiveInterestBusinessEvent.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/businessevent/domain/loan/transaction/LoanWaiveInterestBusinessEvent.java new file mode 100644 index 000000000..e0b21d1da --- /dev/null +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/businessevent/domain/loan/transaction/LoanWaiveInterestBusinessEvent.java @@ -0,0 +1,28 @@ +/** + * 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.businessevent.domain.loan.transaction; + +import org.apache.fineract.portfolio.loanaccount.domain.LoanTransaction; + +public class LoanWaiveInterestBusinessEvent extends LoanTransactionBusinessEvent { + + public LoanWaiveInterestBusinessEvent(LoanTransaction value) { + super(value); + } +} diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/businessevent/domain/loan/transaction/LoanWrittenOffBusinessEvent.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/businessevent/domain/loan/transaction/LoanWrittenOffBusinessEvent.java new file mode 100644 index 000000000..8e49123c1 --- /dev/null +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/businessevent/domain/loan/transaction/LoanWrittenOffBusinessEvent.java @@ -0,0 +1,28 @@ +/** + * 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.businessevent.domain.loan.transaction; + +import org.apache.fineract.portfolio.loanaccount.domain.LoanTransaction; + +public class LoanWrittenOffBusinessEvent extends LoanTransactionBusinessEvent { + + public LoanWrittenOffBusinessEvent(LoanTransaction value) { + super(value); + } +} diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/businessevent/domain/savings/SavingsAccountBusinessEvent.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/businessevent/domain/savings/SavingsAccountBusinessEvent.java new file mode 100644 index 000000000..1183af386 --- /dev/null +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/businessevent/domain/savings/SavingsAccountBusinessEvent.java @@ -0,0 +1,29 @@ +/** + * 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.businessevent.domain.savings; + +import org.apache.fineract.portfolio.businessevent.domain.AbstractBusinessEvent; +import org.apache.fineract.portfolio.savings.domain.SavingsAccount; + +public abstract class SavingsAccountBusinessEvent extends AbstractBusinessEvent { + + public SavingsAccountBusinessEvent(SavingsAccount value) { + super(value); + } +} diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/businessevent/domain/savings/SavingsActivateBusinessEvent.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/businessevent/domain/savings/SavingsActivateBusinessEvent.java new file mode 100644 index 000000000..bd9939daf --- /dev/null +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/businessevent/domain/savings/SavingsActivateBusinessEvent.java @@ -0,0 +1,28 @@ +/** + * 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.businessevent.domain.savings; + +import org.apache.fineract.portfolio.savings.domain.SavingsAccount; + +public class SavingsActivateBusinessEvent extends SavingsAccountBusinessEvent { + + public SavingsActivateBusinessEvent(SavingsAccount value) { + super(value); + } +} diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/businessevent/domain/savings/SavingsApproveBusinessEvent.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/businessevent/domain/savings/SavingsApproveBusinessEvent.java new file mode 100644 index 000000000..dd62aa95a --- /dev/null +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/businessevent/domain/savings/SavingsApproveBusinessEvent.java @@ -0,0 +1,28 @@ +/** + * 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.businessevent.domain.savings; + +import org.apache.fineract.portfolio.savings.domain.SavingsAccount; + +public class SavingsApproveBusinessEvent extends SavingsAccountBusinessEvent { + + public SavingsApproveBusinessEvent(SavingsAccount value) { + super(value); + } +} diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/businessevent/domain/savings/SavingsCloseBusinessEvent.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/businessevent/domain/savings/SavingsCloseBusinessEvent.java new file mode 100644 index 000000000..38ec5f25f --- /dev/null +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/businessevent/domain/savings/SavingsCloseBusinessEvent.java @@ -0,0 +1,28 @@ +/** + * 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.businessevent.domain.savings; + +import org.apache.fineract.portfolio.savings.domain.SavingsAccount; + +public class SavingsCloseBusinessEvent extends SavingsAccountBusinessEvent { + + public SavingsCloseBusinessEvent(SavingsAccount value) { + super(value); + } +} diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/businessevent/domain/savings/SavingsCreateBusinessEvent.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/businessevent/domain/savings/SavingsCreateBusinessEvent.java new file mode 100644 index 000000000..7e754feec --- /dev/null +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/businessevent/domain/savings/SavingsCreateBusinessEvent.java @@ -0,0 +1,28 @@ +/** + * 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.businessevent.domain.savings; + +import org.apache.fineract.portfolio.savings.domain.SavingsAccount; + +public class SavingsCreateBusinessEvent extends SavingsAccountBusinessEvent { + + public SavingsCreateBusinessEvent(SavingsAccount value) { + super(value); + } +} diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/businessevent/domain/savings/SavingsPostInterestBusinessEvent.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/businessevent/domain/savings/SavingsPostInterestBusinessEvent.java new file mode 100644 index 000000000..87a554010 --- /dev/null +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/businessevent/domain/savings/SavingsPostInterestBusinessEvent.java @@ -0,0 +1,28 @@ +/** + * 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.businessevent.domain.savings; + +import org.apache.fineract.portfolio.savings.domain.SavingsAccount; + +public class SavingsPostInterestBusinessEvent extends SavingsAccountBusinessEvent { + + public SavingsPostInterestBusinessEvent(SavingsAccount value) { + super(value); + } +} diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/businessevent/domain/savings/SavingsRejectBusinessEvent.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/businessevent/domain/savings/SavingsRejectBusinessEvent.java new file mode 100644 index 000000000..31f0c5688 --- /dev/null +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/businessevent/domain/savings/SavingsRejectBusinessEvent.java @@ -0,0 +1,28 @@ +/** + * 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.businessevent.domain.savings; + +import org.apache.fineract.portfolio.savings.domain.SavingsAccount; + +public class SavingsRejectBusinessEvent extends SavingsAccountBusinessEvent { + + public SavingsRejectBusinessEvent(SavingsAccount value) { + super(value); + } +} diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/businessevent/domain/savings/transaction/SavingsAccountTransactionBusinessEvent.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/businessevent/domain/savings/transaction/SavingsAccountTransactionBusinessEvent.java new file mode 100644 index 000000000..10425222f --- /dev/null +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/businessevent/domain/savings/transaction/SavingsAccountTransactionBusinessEvent.java @@ -0,0 +1,29 @@ +/** + * 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.businessevent.domain.savings.transaction; + +import org.apache.fineract.portfolio.businessevent.domain.AbstractBusinessEvent; +import org.apache.fineract.portfolio.savings.domain.SavingsAccountTransaction; + +public abstract class SavingsAccountTransactionBusinessEvent extends AbstractBusinessEvent { + + public SavingsAccountTransactionBusinessEvent(SavingsAccountTransaction value) { + super(value); + } +} diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/businessevent/domain/savings/transaction/SavingsDepositBusinessEvent.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/businessevent/domain/savings/transaction/SavingsDepositBusinessEvent.java new file mode 100644 index 000000000..7055234f0 --- /dev/null +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/businessevent/domain/savings/transaction/SavingsDepositBusinessEvent.java @@ -0,0 +1,28 @@ +/** + * 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.businessevent.domain.savings.transaction; + +import org.apache.fineract.portfolio.savings.domain.SavingsAccountTransaction; + +public class SavingsDepositBusinessEvent extends SavingsAccountTransactionBusinessEvent { + + public SavingsDepositBusinessEvent(SavingsAccountTransaction value) { + super(value); + } +} diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/businessevent/domain/savings/transaction/SavingsWithdrawalBusinessEvent.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/businessevent/domain/savings/transaction/SavingsWithdrawalBusinessEvent.java new file mode 100644 index 000000000..c03ce46a8 --- /dev/null +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/businessevent/domain/savings/transaction/SavingsWithdrawalBusinessEvent.java @@ -0,0 +1,28 @@ +/** + * 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.businessevent.domain.savings.transaction; + +import org.apache.fineract.portfolio.savings.domain.SavingsAccountTransaction; + +public class SavingsWithdrawalBusinessEvent extends SavingsAccountTransactionBusinessEvent { + + public SavingsWithdrawalBusinessEvent(SavingsAccountTransaction value) { + super(value); + } +} diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/businessevent/domain/share/ShareAccountApproveBusinessEvent.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/businessevent/domain/share/ShareAccountApproveBusinessEvent.java new file mode 100644 index 000000000..adc843845 --- /dev/null +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/businessevent/domain/share/ShareAccountApproveBusinessEvent.java @@ -0,0 +1,28 @@ +/** + * 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.businessevent.domain.share; + +import org.apache.fineract.portfolio.shareaccounts.domain.ShareAccount; + +public class ShareAccountApproveBusinessEvent extends ShareAccountBusinessEvent { + + public ShareAccountApproveBusinessEvent(ShareAccount value) { + super(value); + } +} diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/businessevent/domain/share/ShareAccountBusinessEvent.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/businessevent/domain/share/ShareAccountBusinessEvent.java new file mode 100644 index 000000000..b3dd63658 --- /dev/null +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/businessevent/domain/share/ShareAccountBusinessEvent.java @@ -0,0 +1,29 @@ +/** + * 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.businessevent.domain.share; + +import org.apache.fineract.portfolio.businessevent.domain.AbstractBusinessEvent; +import org.apache.fineract.portfolio.shareaccounts.domain.ShareAccount; + +public abstract class ShareAccountBusinessEvent extends AbstractBusinessEvent { + + public ShareAccountBusinessEvent(ShareAccount value) { + super(value); + } +} diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/businessevent/domain/share/ShareAccountCreateBusinessEvent.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/businessevent/domain/share/ShareAccountCreateBusinessEvent.java new file mode 100644 index 000000000..62e4b5fd2 --- /dev/null +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/businessevent/domain/share/ShareAccountCreateBusinessEvent.java @@ -0,0 +1,28 @@ +/** + * 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.businessevent.domain.share; + +import org.apache.fineract.portfolio.shareaccounts.domain.ShareAccount; + +public class ShareAccountCreateBusinessEvent extends ShareAccountBusinessEvent { + + public ShareAccountCreateBusinessEvent(ShareAccount value) { + super(value); + } +} diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/businessevent/domain/share/ShareProductDividentsCreateBusinessEvent.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/businessevent/domain/share/ShareProductDividentsCreateBusinessEvent.java new file mode 100644 index 000000000..b0cef9f0c --- /dev/null +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/businessevent/domain/share/ShareProductDividentsCreateBusinessEvent.java @@ -0,0 +1,28 @@ +/** + * 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.businessevent.domain.share; + +import org.apache.fineract.portfolio.businessevent.domain.AbstractBusinessEvent; + +public class ShareProductDividentsCreateBusinessEvent extends AbstractBusinessEvent { + + public ShareProductDividentsCreateBusinessEvent(Long value) { + super(value); + } +} diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/businessevent/service/BusinessEventNotifierService.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/businessevent/service/BusinessEventNotifierService.java index 6ee4228b0..dffe2acdc 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/businessevent/service/BusinessEventNotifierService.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/businessevent/service/BusinessEventNotifierService.java @@ -18,9 +18,7 @@ */ package org.apache.fineract.portfolio.businessevent.service; -import java.util.Map; import org.apache.fineract.portfolio.businessevent.BusinessEventListener; -import org.apache.fineract.portfolio.businessevent.domain.BusinessEntity; import org.apache.fineract.portfolio.businessevent.domain.BusinessEvent; /** @@ -29,24 +27,14 @@ import org.apache.fineract.portfolio.businessevent.domain.BusinessEvent; */ public interface BusinessEventNotifierService { - /** - * Method should be called to notify listeners before Business event execution for any pre-processing of event - */ - void notifyBusinessEventToBeExecuted(BusinessEvent businessEvent, Map businessEventEntity); - /** * Method should be called to notify listeners after Business event execution for any post-processing of event */ - void notifyBusinessEventWasExecuted(BusinessEvent businessEvent, Map businessEventEntity); - - /** - * Method is to register a class as listener for pre-processing of any Business event - */ - void addBusinessEventPreListeners(BusinessEvent businessEvent, BusinessEventListener businessEventListener); + void notifyBusinessEvent(BusinessEvent businessEvent); /** * Method is to register a class as listener for post-processing of any Business event */ - void addBusinessEventPostListeners(BusinessEvent businessEvent, BusinessEventListener businessEventListener); + > void addBusinessEventListener(Class eventType, BusinessEventListener listener); } diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/businessevent/service/BusinessEventNotifierServiceImpl.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/businessevent/service/BusinessEventNotifierServiceImpl.java index dc8b539c4..e95a236e8 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/businessevent/service/BusinessEventNotifierServiceImpl.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/businessevent/service/BusinessEventNotifierServiceImpl.java @@ -23,32 +23,14 @@ import java.util.HashMap; import java.util.List; import java.util.Map; import org.apache.fineract.portfolio.businessevent.BusinessEventListener; -import org.apache.fineract.portfolio.businessevent.domain.BusinessEntity; import org.apache.fineract.portfolio.businessevent.domain.BusinessEvent; import org.springframework.stereotype.Service; @Service +@SuppressWarnings({ "unchecked", "rawtypes" }) public class BusinessEventNotifierServiceImpl implements BusinessEventNotifierService { - private final Map> preListeners = new HashMap<>(5); - private final Map> postListeners = new HashMap<>(5); - - /* - * (non-Javadoc) - * - * @see org.apache.fineract.portfolio.businessevent.service.BusinessEventNotifierService - * #notifyBusinessEventToBeExecuted (org.apache.fineract.portfolio.common.BusinessEventNotificationConstants - * .BusinessEvents, org.springframework.data.jpa.domain.AbstractPersistable) - */ - @Override - public void notifyBusinessEventToBeExecuted(BusinessEvent businessEvent, Map businessEventEntity) { - List businessEventListeners = this.preListeners.get(businessEvent); - if (businessEventListeners != null) { - for (BusinessEventListener eventListener : businessEventListeners) { - eventListener.businessEventToBeExecuted(businessEventEntity); - } - } - } + private final Map> listeners = new HashMap<>(); /* * (non-Javadoc) @@ -58,27 +40,15 @@ public class BusinessEventNotifierServiceImpl implements BusinessEventNotifierSe * .BusinessEvents, org.springframework.data.jpa.domain.AbstractPersistable) */ @Override - public void notifyBusinessEventWasExecuted(BusinessEvent businessEvent, Map businessEventEntity) { - List businessEventListeners = this.postListeners.get(businessEvent); + public void notifyBusinessEvent(BusinessEvent businessEvent) { + List businessEventListeners = listeners.get(businessEvent.getClass()); if (businessEventListeners != null) { for (BusinessEventListener eventListener : businessEventListeners) { - eventListener.businessEventWasExecuted(businessEventEntity); + eventListener.onBusinessEvent(businessEvent); } } } - /* - * (non-Javadoc) - * - * @see org.apache.fineract.portfolio.businessevent.service.BusinessEventNotifierService - * #addBusinessEventPreListeners (org.apache.fineract.portfolio.common.BusinessEventNotificationConstants - * .BusinessEvents, org.apache.fineract.portfolio.businessevent.BusinessEventListener) - */ - @Override - public void addBusinessEventPreListeners(BusinessEvent businessEvent, BusinessEventListener businessEventListener) { - addBusinessEventListeners(businessEvent, businessEventListener, preListeners); - } - /* * (non-Javadoc) * @@ -87,18 +57,13 @@ public class BusinessEventNotifierServiceImpl implements BusinessEventNotifierSe * .BusinessEvents, org.apache.fineract.portfolio.businessevent.BusinessEventListener) */ @Override - public void addBusinessEventPostListeners(BusinessEvent businessEvent, BusinessEventListener businessEventListener) { - addBusinessEventListeners(businessEvent, businessEventListener, postListeners); - } - - private void addBusinessEventListeners(BusinessEvent businessEvent, BusinessEventListener businessEventListener, - final Map> businessEventListenerMap) { - List businessEventListeners = businessEventListenerMap.get(businessEvent); + public > void addBusinessEventListener(Class eventType, BusinessEventListener listener) { + List businessEventListeners = listeners.get(eventType); if (businessEventListeners == null) { businessEventListeners = new ArrayList<>(); - businessEventListenerMap.put(businessEvent, businessEventListeners); + listeners.put(eventType, businessEventListeners); } - businessEventListeners.add(businessEventListener); + businessEventListeners.add(listener); } } diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/service/ClientWritePlatformServiceJpaRepositoryImpl.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/service/ClientWritePlatformServiceJpaRepositoryImpl.java index ecf80cc57..270084f14 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/service/ClientWritePlatformServiceJpaRepositoryImpl.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/service/ClientWritePlatformServiceJpaRepositoryImpl.java @@ -23,12 +23,12 @@ import java.time.LocalDate; import java.time.ZoneId; import java.time.format.DateTimeFormatter; import java.util.Date; -import java.util.HashMap; import java.util.LinkedHashMap; import java.util.List; import java.util.Locale; import java.util.Map; import javax.persistence.PersistenceException; +import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.exception.ExceptionUtils; import org.apache.fineract.commands.domain.CommandWrapper; import org.apache.fineract.commands.service.CommandProcessingService; @@ -55,8 +55,9 @@ import org.apache.fineract.organisation.office.domain.OfficeRepositoryWrapper; import org.apache.fineract.organisation.staff.domain.Staff; import org.apache.fineract.organisation.staff.domain.StaffRepositoryWrapper; import org.apache.fineract.portfolio.address.service.AddressWritePlatformService; -import org.apache.fineract.portfolio.businessevent.domain.BusinessEntity; -import org.apache.fineract.portfolio.businessevent.domain.BusinessEvent; +import org.apache.fineract.portfolio.businessevent.domain.client.ClientActivateBusinessEvent; +import org.apache.fineract.portfolio.businessevent.domain.client.ClientCreateBusinessEvent; +import org.apache.fineract.portfolio.businessevent.domain.client.ClientRejectBusinessEvent; import org.apache.fineract.portfolio.businessevent.service.BusinessEventNotifierService; import org.apache.fineract.portfolio.client.api.ClientApiConstants; import org.apache.fineract.portfolio.client.data.ClientDataValidator; @@ -87,8 +88,6 @@ import org.apache.fineract.portfolio.savings.domain.SavingsProductRepository; import org.apache.fineract.portfolio.savings.exception.SavingsProductNotFoundException; import org.apache.fineract.portfolio.savings.service.SavingsApplicationProcessWritePlatformService; import org.apache.fineract.useradministration.domain.AppUser; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.dao.DataIntegrityViolationException; import org.springframework.orm.jpa.JpaSystemException; @@ -96,10 +95,9 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @Service +@Slf4j public class ClientWritePlatformServiceJpaRepositoryImpl implements ClientWritePlatformService { - private static final Logger LOG = LoggerFactory.getLogger(ClientWritePlatformServiceJpaRepositoryImpl.class); - private final PlatformSecurityContext context; private final ClientRepositoryWrapper clientRepository; private final ClientNonPersonRepositoryWrapper clientNonPersonRepository; @@ -191,7 +189,7 @@ public class ClientWritePlatformServiceJpaRepositoryImpl implements ClientWriteP .build(); } catch (final JpaSystemException | DataIntegrityViolationException dve) { Throwable throwable = ExceptionUtils.getRootCause(dve.getCause()); - LOG.error("Error occured.", throwable); + log.error("Error occured.", throwable); throw new PlatformDataIntegrityException("error.msg.client.unknown.data.integrity.issue", "Unknown data integrity issue with resource.", dve); } @@ -305,8 +303,7 @@ public class ClientWritePlatformServiceJpaRepositoryImpl implements ClientWriteP this.clientRepository.saveAndFlush(newClient); if (newClient.isActive()) { - this.businessEventNotifierService.notifyBusinessEventWasExecuted(BusinessEvent.CLIENTS_ACTIVATE, - constructEntityMap(BusinessEntity.CLIENT, newClient)); + businessEventNotifierService.notifyBusinessEvent(new ClientActivateBusinessEvent(newClient)); } if (newClient.isAccountNumberRequiresAutoGeneration()) { AccountNumberFormat accountNumberFormat = this.accountNumberFormatRepository.findByAccountType(EntityAccountType.CLIENT); @@ -340,10 +337,9 @@ public class ClientWritePlatformServiceJpaRepositoryImpl implements ClientWriteP command.arrayOfParameterNamed(ClientApiConstants.datatables)); } - this.businessEventNotifierService.notifyBusinessEventWasExecuted(BusinessEvent.CLIENTS_CREATE, - constructEntityMap(BusinessEntity.CLIENT, newClient)); + businessEventNotifierService.notifyBusinessEvent(new ClientCreateBusinessEvent(newClient)); - this.entityDatatableChecksWritePlatformService.runTheCheck(newClient.getId(), EntityTables.CLIENT.getName(), + entityDatatableChecksWritePlatformService.runTheCheck(newClient.getId(), EntityTables.CLIENT.getName(), StatusEnum.CREATE.getCode().longValue(), EntityTables.CLIENT.getForeignKeyColumnNameOnDatatable()); return new CommandProcessingResultBuilder() // .withCommandId(command.commandId()) // @@ -594,9 +590,8 @@ public class ClientWritePlatformServiceJpaRepositoryImpl implements ClientWriteP final AppUser currentUser = this.context.authenticatedUser(); client.activate(currentUser, fmt, activationDate); CommandProcessingResult result = openSavingsAccount(client, fmt); - this.clientRepository.saveAndFlush(client); - this.businessEventNotifierService.notifyBusinessEventWasExecuted(BusinessEvent.CLIENTS_ACTIVATE, - constructEntityMap(BusinessEntity.CLIENT, client)); + clientRepository.saveAndFlush(client); + businessEventNotifierService.notifyBusinessEvent(new ClientActivateBusinessEvent(client)); return new CommandProcessingResultBuilder() // .withCommandId(command.commandId()) // .withOfficeId(client.officeId()) // @@ -627,7 +622,7 @@ public class ClientWritePlatformServiceJpaRepositoryImpl implements ClientWriteP } private void logAsErrorUnexpectedDataIntegrityException(final Exception dve) { - LOG.error("Error occured.", dve); + log.error("Error occured.", dve); } @Transactional @@ -849,9 +844,8 @@ public class ClientWritePlatformServiceJpaRepositoryImpl implements ClientWriteP rejectionDate, client.getSubmittedOnDate()); } client.reject(currentUser, rejectionReason, Date.from(rejectionDate.atStartOfDay(ZoneId.systemDefault()).toInstant())); - this.clientRepository.saveAndFlush(client); - this.businessEventNotifierService.notifyBusinessEventWasExecuted(BusinessEvent.CLIENTS_REJECT, - constructEntityMap(BusinessEntity.CLIENT, client)); + clientRepository.saveAndFlush(client); + businessEventNotifierService.notifyBusinessEvent(new ClientRejectBusinessEvent(client)); return new CommandProcessingResultBuilder() // .withCommandId(command.commandId()) // .withClientId(entityId) // @@ -966,10 +960,4 @@ public class ClientWritePlatformServiceJpaRepositoryImpl implements ClientWriteP .withEntityId(entityId) // .build(); } - - private Map constructEntityMap(final BusinessEntity entityEvent, Object entity) { - Map map = new HashMap<>(1); - map.put(entityEvent, entity); - return map; - } } diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/group/service/GroupingTypesWritePlatformServiceJpaRepositoryImpl.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/group/service/GroupingTypesWritePlatformServiceJpaRepositoryImpl.java index 188ef9766..1d3fe226d 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/group/service/GroupingTypesWritePlatformServiceJpaRepositoryImpl.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/group/service/GroupingTypesWritePlatformServiceJpaRepositoryImpl.java @@ -29,6 +29,8 @@ import java.util.List; import java.util.Map; import java.util.Set; import javax.persistence.PersistenceException; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.exception.ExceptionUtils; import org.apache.fineract.commands.domain.CommandWrapper; import org.apache.fineract.commands.service.CommandProcessingService; @@ -54,8 +56,8 @@ import org.apache.fineract.organisation.office.domain.OfficeRepositoryWrapper; import org.apache.fineract.organisation.office.exception.InvalidOfficeException; import org.apache.fineract.organisation.staff.domain.Staff; import org.apache.fineract.organisation.staff.domain.StaffRepositoryWrapper; -import org.apache.fineract.portfolio.businessevent.domain.BusinessEntity; -import org.apache.fineract.portfolio.businessevent.domain.BusinessEvent; +import org.apache.fineract.portfolio.businessevent.domain.group.CentersCreateBusinessEvent; +import org.apache.fineract.portfolio.businessevent.domain.group.GroupsCreateBusinessEvent; import org.apache.fineract.portfolio.businessevent.service.BusinessEventNotifierService; import org.apache.fineract.portfolio.calendar.domain.Calendar; import org.apache.fineract.portfolio.calendar.domain.CalendarEntityType; @@ -86,9 +88,6 @@ import org.apache.fineract.portfolio.note.domain.NoteRepository; import org.apache.fineract.portfolio.savings.domain.SavingsAccount; import org.apache.fineract.portfolio.savings.domain.SavingsAccountRepositoryWrapper; import org.apache.fineract.useradministration.domain.AppUser; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.dao.DataIntegrityViolationException; import org.springframework.orm.jpa.JpaSystemException; import org.springframework.stereotype.Service; @@ -97,10 +96,10 @@ import org.springframework.util.CollectionUtils; import org.springframework.util.ObjectUtils; @Service +@Slf4j +@RequiredArgsConstructor public class GroupingTypesWritePlatformServiceJpaRepositoryImpl implements GroupingTypesWritePlatformService { - private static final Logger LOG = LoggerFactory.getLogger(GroupingTypesWritePlatformServiceJpaRepositoryImpl.class); - private final PlatformSecurityContext context; private final GroupRepositoryWrapper groupRepository; private final ClientRepositoryWrapper clientRepositoryWrapper; @@ -120,38 +119,6 @@ public class GroupingTypesWritePlatformServiceJpaRepositoryImpl implements Group private final EntityDatatableChecksWritePlatformService entityDatatableChecksWritePlatformService; private final BusinessEventNotifierService businessEventNotifierService; - @Autowired - public GroupingTypesWritePlatformServiceJpaRepositoryImpl(final PlatformSecurityContext context, - final GroupRepositoryWrapper groupRepository, final ClientRepositoryWrapper clientRepositoryWrapper, - final OfficeRepositoryWrapper officeRepositoryWrapper, final StaffRepositoryWrapper staffRepository, - final NoteRepository noteRepository, final GroupLevelRepository groupLevelRepository, - final GroupingTypesDataValidator fromApiJsonDeserializer, final SavingsAccountRepositoryWrapper savingsAccountRepositoryWrapper, - final CodeValueRepositoryWrapper codeValueRepository, final CommandProcessingService commandProcessingService, - final CalendarInstanceRepository calendarInstanceRepository, final ConfigurationDomainService configurationDomainService, - final LoanRepositoryWrapper loanRepositoryWrapper, final AccountNumberFormatRepositoryWrapper accountNumberFormatRepository, - final AccountNumberGenerator accountNumberGenerator, - final EntityDatatableChecksWritePlatformService entityDatatableChecksWritePlatformService, - final BusinessEventNotifierService businessEventNotifierService) { - this.context = context; - this.groupRepository = groupRepository; - this.clientRepositoryWrapper = clientRepositoryWrapper; - this.officeRepositoryWrapper = officeRepositoryWrapper; - this.staffRepository = staffRepository; - this.noteRepository = noteRepository; - this.groupLevelRepository = groupLevelRepository; - this.fromApiJsonDeserializer = fromApiJsonDeserializer; - this.savingsAccountRepositoryWrapper = savingsAccountRepositoryWrapper; - this.codeValueRepository = codeValueRepository; - this.commandProcessingService = commandProcessingService; - this.calendarInstanceRepository = calendarInstanceRepository; - this.configurationDomainService = configurationDomainService; - this.loanRepositoryWrapper = loanRepositoryWrapper; - this.accountNumberFormatRepository = accountNumberFormatRepository; - this.accountNumberGenerator = accountNumberGenerator; - this.entityDatatableChecksWritePlatformService = entityDatatableChecksWritePlatformService; - this.businessEventNotifierService = businessEventNotifierService; - } - private CommandProcessingResult createGroupingType(final JsonCommand command, final GroupTypes groupingType, final Long centerId) { try { final String accountNo = command.stringValueOfParameterNamed(GroupingTypesApiConstants.accountNoParamName); @@ -290,8 +257,7 @@ public class GroupingTypesWritePlatformServiceJpaRepositoryImpl implements Group CommandProcessingResult commandProcessingResult = createGroupingType(command, GroupTypes.CENTER, centerId); - this.businessEventNotifierService.notifyBusinessEventWasExecuted(BusinessEvent.CENTERS_CREATE, - constructEntityMap(BusinessEntity.GROUP, commandProcessingResult)); + businessEventNotifierService.notifyBusinessEvent(new CentersCreateBusinessEvent(commandProcessingResult)); return commandProcessingResult; } @@ -308,8 +274,7 @@ public class GroupingTypesWritePlatformServiceJpaRepositoryImpl implements Group CommandProcessingResult commandProcessingResult = createGroupingType(command, GroupTypes.GROUP, centerId); - this.businessEventNotifierService.notifyBusinessEventWasExecuted(BusinessEvent.GROUPS_CREATE, - constructEntityMap(BusinessEntity.GROUP, commandProcessingResult)); + businessEventNotifierService.notifyBusinessEvent(new GroupsCreateBusinessEvent(commandProcessingResult)); return commandProcessingResult; } @@ -605,7 +570,7 @@ public class GroupingTypesWritePlatformServiceJpaRepositoryImpl implements Group .build(); } catch (final JpaSystemException | DataIntegrityViolationException dve) { Throwable throwable = ExceptionUtils.getRootCause(dve.getCause()); - LOG.error("Error occured.", throwable); + log.error("Error occured.", throwable); throw new PlatformDataIntegrityException("error.msg.group.unknown.data.integrity.issue", "Unknown data integrity issue with resource.", dve); } @@ -799,7 +764,7 @@ public class GroupingTypesWritePlatformServiceJpaRepositoryImpl implements Group name); } - LOG.error("Error occured.", dve); + log.error("Error occured.", dve); throw new PlatformDataIntegrityException("error.msg.group.unknown.data.integrity.issue", "Unknown data integrity issue with resource."); } @@ -997,10 +962,4 @@ public class GroupingTypesWritePlatformServiceJpaRepositoryImpl implements Group } } } - - private Map constructEntityMap(final BusinessEntity entityEvent, Object entity) { - Map map = new HashMap<>(1); - map.put(entityEvent, entity); - return map; - } } diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/LoanAccountDomainServiceJpa.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/LoanAccountDomainServiceJpa.java index e12c60d35..3b2370011 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/LoanAccountDomainServiceJpa.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/LoanAccountDomainServiceJpa.java @@ -26,11 +26,11 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; import java.util.Date; -import java.util.HashMap; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import java.util.Set; +import lombok.RequiredArgsConstructor; import org.apache.commons.lang3.StringUtils; import org.apache.fineract.accounting.journalentry.service.JournalEntryWritePlatformService; import org.apache.fineract.infrastructure.configuration.domain.ConfigurationDomainService; @@ -58,8 +58,16 @@ import org.apache.fineract.portfolio.account.domain.AccountTransferTransaction; import org.apache.fineract.portfolio.account.domain.StandingInstructionRepository; import org.apache.fineract.portfolio.account.domain.StandingInstructionStatus; import org.apache.fineract.portfolio.accountdetails.domain.AccountType; -import org.apache.fineract.portfolio.businessevent.domain.BusinessEntity; -import org.apache.fineract.portfolio.businessevent.domain.BusinessEvent; +import org.apache.fineract.portfolio.businessevent.domain.loan.transaction.LoanChargePaymentBusinessEvent; +import org.apache.fineract.portfolio.businessevent.domain.loan.transaction.LoanCreditBalanceRefundBusinessEvent; +import org.apache.fineract.portfolio.businessevent.domain.loan.transaction.LoanForeClosureBusinessEvent; +import org.apache.fineract.portfolio.businessevent.domain.loan.transaction.LoanGoodwillCreditBusinessEvent; +import org.apache.fineract.portfolio.businessevent.domain.loan.transaction.LoanMakeRepaymentBusinessEvent; +import org.apache.fineract.portfolio.businessevent.domain.loan.transaction.LoanMerchantIssuedRefundBusinessEvent; +import org.apache.fineract.portfolio.businessevent.domain.loan.transaction.LoanPayoutRefundBusinessEvent; +import org.apache.fineract.portfolio.businessevent.domain.loan.transaction.LoanRecoveryPaymentBusinessEvent; +import org.apache.fineract.portfolio.businessevent.domain.loan.transaction.LoanRefundBusinessEvent; +import org.apache.fineract.portfolio.businessevent.domain.loan.transaction.LoanTransactionBusinessEvent; import org.apache.fineract.portfolio.businessevent.service.BusinessEventNotifierService; import org.apache.fineract.portfolio.client.domain.Client; import org.apache.fineract.portfolio.client.exception.ClientNotActiveException; @@ -79,13 +87,13 @@ import org.apache.fineract.portfolio.repaymentwithpostdatedchecks.data.PostDated import org.apache.fineract.portfolio.repaymentwithpostdatedchecks.domain.PostDatedChecks; import org.apache.fineract.portfolio.repaymentwithpostdatedchecks.domain.PostDatedChecksRepository; import org.apache.fineract.useradministration.domain.AppUser; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.dao.DataIntegrityViolationException; import org.springframework.orm.jpa.JpaSystemException; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @Service +@RequiredArgsConstructor public class LoanAccountDomainServiceJpa implements LoanAccountDomainService { private final LoanAssembler loanAccountAssembler; @@ -100,7 +108,6 @@ public class LoanAccountDomainServiceJpa implements LoanAccountDomainService { private final NoteRepository noteRepository; private final AccountTransferRepository accountTransferRepository; private final ApplicationCurrencyRepositoryWrapper applicationCurrencyRepository; - private final LoanRepaymentScheduleInstallmentRepository repaymentScheduleInstallmentRepository; private final LoanAccrualPlatformService loanAccrualPlatformService; private final PlatformSecurityContext context; private final BusinessEventNotifierService businessEventNotifierService; @@ -109,41 +116,6 @@ public class LoanAccountDomainServiceJpa implements LoanAccountDomainService { private final PostDatedChecksRepository postDatedChecksRepository; private final LoanCollateralManagementRepository loanCollateralManagementRepository; - @Autowired - public LoanAccountDomainServiceJpa(final LoanAssembler loanAccountAssembler, final LoanRepositoryWrapper loanRepositoryWrapper, - final LoanTransactionRepository loanTransactionRepository, final NoteRepository noteRepository, - final ConfigurationDomainService configurationDomainService, final HolidayRepository holidayRepository, - final WorkingDaysRepositoryWrapper workingDaysRepository, - final ApplicationCurrencyRepositoryWrapper applicationCurrencyRepositoryWrapper, - final JournalEntryWritePlatformService journalEntryWritePlatformService, - final AccountTransferRepository accountTransferRepository, - final ApplicationCurrencyRepositoryWrapper applicationCurrencyRepository, - final LoanRepaymentScheduleInstallmentRepository repaymentScheduleInstallmentRepository, - final LoanAccrualPlatformService loanAccrualPlatformService, final PlatformSecurityContext context, - final BusinessEventNotifierService businessEventNotifierService, final LoanUtilService loanUtilService, - final StandingInstructionRepository standingInstructionRepository, final PostDatedChecksRepository postDatedChecksRepository, - final LoanCollateralManagementRepository loanCollateralManagementRepository) { - this.loanAccountAssembler = loanAccountAssembler; - this.loanTransactionRepository = loanTransactionRepository; - this.noteRepository = noteRepository; - this.configurationDomainService = configurationDomainService; - this.holidayRepository = holidayRepository; - this.workingDaysRepository = workingDaysRepository; - this.applicationCurrencyRepositoryWrapper = applicationCurrencyRepositoryWrapper; - this.journalEntryWritePlatformService = journalEntryWritePlatformService; - this.accountTransferRepository = accountTransferRepository; - this.applicationCurrencyRepository = applicationCurrencyRepository; - this.repaymentScheduleInstallmentRepository = repaymentScheduleInstallmentRepository; - this.loanAccrualPlatformService = loanAccrualPlatformService; - this.context = context; - this.businessEventNotifierService = businessEventNotifierService; - this.loanUtilService = loanUtilService; - this.standingInstructionRepository = standingInstructionRepository; - this.postDatedChecksRepository = postDatedChecksRepository; - this.loanCollateralManagementRepository = loanCollateralManagementRepository; - this.loanRepositoryWrapper = loanRepositoryWrapper; - } - @Transactional @Override public LoanTransaction makeRepayment(final LoanTransactionType repaymentTransactionType, final Loan loan, @@ -179,10 +151,6 @@ public class LoanAccountDomainServiceJpa implements LoanAccountDomainService { AppUser currentUser = getAppUserIfPresent(); checkClientOrGroupActive(loan); - BusinessEvent repaymentTypeEvent = getRepaymentTypeBusinessEvent(repaymentTransactionType, isRecoveryRepayment); - this.businessEventNotifierService.notifyBusinessEventToBeExecuted(repaymentTypeEvent, - constructEntityMap(BusinessEntity.LOAN, loan)); - // TODO: Is it required to validate transaction date with meeting dates // if repayments is synced with meeting? /* @@ -245,8 +213,9 @@ public class LoanAccountDomainServiceJpa implements LoanAccountDomainService { recalculateAccruals(loan); - this.businessEventNotifierService.notifyBusinessEventWasExecuted(repaymentTypeEvent, - constructEntityMap(BusinessEntity.LOAN_TRANSACTION, newRepaymentTransaction)); + LoanTransactionBusinessEvent repaymentEvent = getRepaymentTypeBusinessEvent(repaymentTransactionType, isRecoveryRepayment, + newRepaymentTransaction); + businessEventNotifierService.notifyBusinessEvent(repaymentEvent); // disable all active standing orders linked to this loan if status // changes to closed @@ -287,20 +256,21 @@ public class LoanAccountDomainServiceJpa implements LoanAccountDomainService { return newRepaymentTransaction; } - private BusinessEvent getRepaymentTypeBusinessEvent(LoanTransactionType repaymentTransactionType, boolean isRecoveryRepayment) { - BusinessEvent repaymentTypeEvent = null; + private LoanTransactionBusinessEvent getRepaymentTypeBusinessEvent(LoanTransactionType repaymentTransactionType, + boolean isRecoveryRepayment, LoanTransaction transaction) { + LoanTransactionBusinessEvent repaymentEvent = null; if (repaymentTransactionType.isRepayment()) { - repaymentTypeEvent = BusinessEvent.LOAN_MAKE_REPAYMENT; + repaymentEvent = new LoanMakeRepaymentBusinessEvent(transaction); } else if (repaymentTransactionType.isMerchantIssuedRefund()) { - repaymentTypeEvent = BusinessEvent.LOAN_MERCHANT_ISSUED_REFUND; + repaymentEvent = new LoanMerchantIssuedRefundBusinessEvent(transaction); } else if (repaymentTransactionType.isPayoutRefund()) { - repaymentTypeEvent = BusinessEvent.LOAN_PAYOUT_REFUND; + repaymentEvent = new LoanPayoutRefundBusinessEvent(transaction); } else if (repaymentTransactionType.isGoodwillCredit()) { - repaymentTypeEvent = BusinessEvent.LOAN_GOODWILL_CREDIT; + repaymentEvent = new LoanGoodwillCreditBusinessEvent(transaction); } else if (isRecoveryRepayment) { - repaymentTypeEvent = BusinessEvent.LOAN_RECOVERY_PAYMENT; + repaymentEvent = new LoanRecoveryPaymentBusinessEvent(transaction); } - return repaymentTypeEvent; + return repaymentEvent; } private void saveLoanTransactionWithDataIntegrityViolationChecks(LoanTransaction newRepaymentTransaction) { @@ -364,8 +334,6 @@ public class LoanAccountDomainServiceJpa implements LoanAccountDomainService { AppUser currentUser = getAppUserIfPresent(); boolean isAccountTransfer = true; checkClientOrGroupActive(loan); - this.businessEventNotifierService.notifyBusinessEventToBeExecuted(BusinessEvent.LOAN_CHARGE_PAYMENT, - constructEntityMap(BusinessEntity.LOAN, loan)); final List existingTransactionIds = new ArrayList<>(); final List existingReversedTransactionIds = new ArrayList<>(); @@ -400,8 +368,7 @@ public class LoanAccountDomainServiceJpa implements LoanAccountDomainService { postJournalEntries(loan, existingTransactionIds, existingReversedTransactionIds, isAccountTransfer); recalculateAccruals(loan); - this.businessEventNotifierService.notifyBusinessEventWasExecuted(BusinessEvent.LOAN_CHARGE_PAYMENT, - constructEntityMap(BusinessEntity.LOAN_TRANSACTION, newPaymentTransaction)); + businessEventNotifierService.notifyBusinessEvent(new LoanChargePaymentBusinessEvent(newPaymentTransaction)); return newPaymentTransaction; } @@ -450,8 +417,6 @@ public class LoanAccountDomainServiceJpa implements LoanAccountDomainService { boolean isAccountTransfer = true; final Loan loan = this.loanAccountAssembler.assembleFrom(accountId); checkClientOrGroupActive(loan); - this.businessEventNotifierService.notifyBusinessEventToBeExecuted(BusinessEvent.LOAN_REFUND, - constructEntityMap(BusinessEntity.LOAN, loan)); final List existingTransactionIds = new ArrayList<>(); final List existingReversedTransactionIds = new ArrayList<>(); @@ -476,8 +441,7 @@ public class LoanAccountDomainServiceJpa implements LoanAccountDomainService { } postJournalEntries(loan, existingTransactionIds, existingReversedTransactionIds, isAccountTransfer); - this.businessEventNotifierService.notifyBusinessEventWasExecuted(BusinessEvent.LOAN_REFUND, - constructEntityMap(BusinessEntity.LOAN_TRANSACTION, newRefundTransaction)); + businessEventNotifierService.notifyBusinessEvent(new LoanRefundBusinessEvent(newRefundTransaction)); builderResult.withEntityId(newRefundTransaction.getId()).withOfficeId(loan.getOfficeId()).withClientId(loan.getClientId()) .withGroupId(loan.getGroupId()); @@ -646,8 +610,6 @@ public class LoanAccountDomainServiceJpa implements LoanAccountDomainService { public CommandProcessingResultBuilder creditBalanceRefund(Long loanId, LocalDate transactionDate, BigDecimal transactionAmount, String noteText, String externalId) { final Loan loan = this.loanAccountAssembler.assembleFrom(loanId); - this.businessEventNotifierService.notifyBusinessEventToBeExecuted(BusinessEvent.LOAN_CREDIT_BALANCE_REFUND, - constructEntityMap(BusinessEntity.LOAN, loan)); final List existingTransactionIds = new ArrayList<>(); final List existingReversedTransactionIds = new ArrayList<>(); AppUser currentUser = getAppUserIfPresent(); @@ -668,8 +630,7 @@ public class LoanAccountDomainServiceJpa implements LoanAccountDomainService { postJournalEntries(loan, existingTransactionIds, existingReversedTransactionIds, false); recalculateAccruals(loan); - this.businessEventNotifierService.notifyBusinessEventWasExecuted(BusinessEvent.LOAN_CREDIT_BALANCE_REFUND, - constructEntityMap(BusinessEntity.LOAN_TRANSACTION, newCreditBalanceRefundTransaction)); + businessEventNotifierService.notifyBusinessEvent(new LoanCreditBalanceRefundBusinessEvent(newCreditBalanceRefundTransaction)); return new CommandProcessingResultBuilder().withEntityId(newCreditBalanceRefundTransaction.getId()) // .withOfficeId(loan.getOfficeId()) // @@ -682,8 +643,6 @@ public class LoanAccountDomainServiceJpa implements LoanAccountDomainService { BigDecimal transactionAmount, PaymentDetail paymentDetail, String noteText, String txnExternalId) { final Loan loan = this.loanAccountAssembler.assembleFrom(accountId); checkClientOrGroupActive(loan); - this.businessEventNotifierService.notifyBusinessEventToBeExecuted(BusinessEvent.LOAN_REFUND, - constructEntityMap(BusinessEntity.LOAN, loan)); final List existingTransactionIds = new ArrayList<>(); final List existingReversedTransactionIds = new ArrayList<>(); AppUser currentUser = getAppUserIfPresent(); @@ -709,8 +668,7 @@ public class LoanAccountDomainServiceJpa implements LoanAccountDomainService { postJournalEntries(loan, existingTransactionIds, existingReversedTransactionIds, false); recalculateAccruals(loan); - this.businessEventNotifierService.notifyBusinessEventWasExecuted(BusinessEvent.LOAN_REFUND, - constructEntityMap(BusinessEntity.LOAN_TRANSACTION, newRefundTransaction)); + businessEventNotifierService.notifyBusinessEvent(new LoanRefundBusinessEvent(newRefundTransaction)); builderResult.withEntityId(newRefundTransaction.getId()).withOfficeId(loan.getOfficeId()).withClientId(loan.getClientId()) .withGroupId(loan.getGroupId()); @@ -720,8 +678,6 @@ public class LoanAccountDomainServiceJpa implements LoanAccountDomainService { @Override public Map foreCloseLoan(final Loan loan, final LocalDate foreClosureDate, final String noteText) { - this.businessEventNotifierService.notifyBusinessEventToBeExecuted(BusinessEvent.LOAN_FORECLOSURE, - constructEntityMap(BusinessEntity.LOAN, loan)); MonetaryCurrency currency = loan.getCurrency(); LocalDateTime createdDate = DateUtils.getLocalDateTimeOfTenant(); final Map changes = new LinkedHashMap<>(); @@ -820,18 +776,11 @@ public class LoanAccountDomainServiceJpa implements LoanAccountDomainService { } postJournalEntries(loan, existingTransactionIds, existingReversedTransactionIds, false); - this.businessEventNotifierService.notifyBusinessEventWasExecuted(BusinessEvent.LOAN_FORECLOSURE, - constructEntityMap(BusinessEntity.LOAN_TRANSACTION, payment)); + businessEventNotifierService.notifyBusinessEvent(new LoanForeClosureBusinessEvent(payment)); return changes; } - private Map constructEntityMap(final BusinessEntity entityEvent, Object entity) { - Map map = new HashMap<>(1); - map.put(entityEvent, entity); - return map; - } - @Override @Transactional public void disableStandingInstructionsLinkedToClosedLoan(Loan loan) { diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/guarantor/service/GuarantorDomainServiceImpl.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/guarantor/service/GuarantorDomainServiceImpl.java index 98b9ced8d..51a69ded5 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/guarantor/service/GuarantorDomainServiceImpl.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/guarantor/service/GuarantorDomainServiceImpl.java @@ -40,8 +40,13 @@ import org.apache.fineract.portfolio.account.domain.AccountTransferDetails; import org.apache.fineract.portfolio.account.domain.AccountTransferType; import org.apache.fineract.portfolio.account.service.AccountTransfersWritePlatformService; import org.apache.fineract.portfolio.businessevent.BusinessEventListener; -import org.apache.fineract.portfolio.businessevent.domain.BusinessEntity; -import org.apache.fineract.portfolio.businessevent.domain.BusinessEvent; +import org.apache.fineract.portfolio.businessevent.domain.loan.LoanAdjustTransactionBusinessEvent; +import org.apache.fineract.portfolio.businessevent.domain.loan.LoanApprovedBusinessEvent; +import org.apache.fineract.portfolio.businessevent.domain.loan.LoanUndoApprovalBusinessEvent; +import org.apache.fineract.portfolio.businessevent.domain.loan.LoanUndoDisbursalBusinessEvent; +import org.apache.fineract.portfolio.businessevent.domain.loan.transaction.LoanMakeRepaymentBusinessEvent; +import org.apache.fineract.portfolio.businessevent.domain.loan.transaction.LoanUndoWrittenOffBusinessEvent; +import org.apache.fineract.portfolio.businessevent.domain.loan.transaction.LoanWrittenOffBusinessEvent; import org.apache.fineract.portfolio.businessevent.service.BusinessEventNotifierService; import org.apache.fineract.portfolio.loanaccount.domain.Loan; import org.apache.fineract.portfolio.loanaccount.domain.LoanTransaction; @@ -78,18 +83,14 @@ public class GuarantorDomainServiceImpl implements GuarantorDomainService { @PostConstruct public void addListeners() { - this.businessEventNotifierService.addBusinessEventPostListeners(BusinessEvent.LOAN_APPROVED, new ValidateOnBusinessEvent()); - this.businessEventNotifierService.addBusinessEventPostListeners(BusinessEvent.LOAN_APPROVED, new HoldFundsOnBusinessEvent()); - this.businessEventNotifierService.addBusinessEventPostListeners(BusinessEvent.LOAN_UNDO_APPROVAL, new UndoAllFundTransactions()); - this.businessEventNotifierService.addBusinessEventPostListeners(BusinessEvent.LOAN_UNDO_DISBURSAL, - new ReverseAllFundsOnBusinessEvent()); - this.businessEventNotifierService.addBusinessEventPostListeners(BusinessEvent.LOAN_ADJUST_TRANSACTION, - new AdjustFundsOnBusinessEvent()); - this.businessEventNotifierService.addBusinessEventPostListeners(BusinessEvent.LOAN_MAKE_REPAYMENT, - new ReleaseFundsOnBusinessEvent()); - this.businessEventNotifierService.addBusinessEventPostListeners(BusinessEvent.LOAN_WRITTEN_OFF, new ReleaseAllFunds()); - this.businessEventNotifierService.addBusinessEventPostListeners(BusinessEvent.LOAN_UNDO_WRITTEN_OFF, - new ReverseFundsOnBusinessEvent()); + businessEventNotifierService.addBusinessEventListener(LoanApprovedBusinessEvent.class, new ValidateOnBusinessEvent()); + businessEventNotifierService.addBusinessEventListener(LoanApprovedBusinessEvent.class, new HoldFundsOnBusinessEvent()); + businessEventNotifierService.addBusinessEventListener(LoanUndoApprovalBusinessEvent.class, new UndoAllFundTransactions()); + businessEventNotifierService.addBusinessEventListener(LoanUndoDisbursalBusinessEvent.class, new ReverseAllFundsOnBusinessEvent()); + businessEventNotifierService.addBusinessEventListener(LoanAdjustTransactionBusinessEvent.class, new AdjustFundsOnBusinessEvent()); + businessEventNotifierService.addBusinessEventListener(LoanMakeRepaymentBusinessEvent.class, new ReleaseFundsOnBusinessEvent()); + businessEventNotifierService.addBusinessEventListener(LoanWrittenOffBusinessEvent.class, new ReleaseAllFunds()); + businessEventNotifierService.addBusinessEventListener(LoanUndoWrittenOffBusinessEvent.class, new ReverseFundsOnBusinessEvent()); } @Override @@ -509,138 +510,91 @@ public class GuarantorDomainServiceImpl implements GuarantorDomainService { } } - private class ValidateOnBusinessEvent implements BusinessEventListener { + private class ValidateOnBusinessEvent implements BusinessEventListener { @Override - public void businessEventToBeExecuted(@SuppressWarnings("unused") Map businessEventEntity) {} - - @Override - public void businessEventWasExecuted(Map businessEventEntity) { - Object entity = businessEventEntity.get(BusinessEntity.LOAN); - if (entity instanceof Loan) { - Loan loan = (Loan) entity; - validateGuarantorBusinessRules(loan); - } + public void onBusinessEvent(LoanApprovedBusinessEvent event) { + Loan loan = event.get(); + validateGuarantorBusinessRules(loan); } } - private class HoldFundsOnBusinessEvent implements BusinessEventListener { + private class HoldFundsOnBusinessEvent implements BusinessEventListener { @Override - public void businessEventToBeExecuted(@SuppressWarnings("unused") Map businessEventEntity) {} - - @Override - public void businessEventWasExecuted(Map businessEventEntity) { - Object entity = businessEventEntity.get(BusinessEntity.LOAN); - if (entity instanceof Loan) { - Loan loan = (Loan) entity; - holdGuarantorFunds(loan); - } + public void onBusinessEvent(LoanApprovedBusinessEvent event) { + Loan loan = event.get(); + holdGuarantorFunds(loan); } } - private class ReleaseFundsOnBusinessEvent implements BusinessEventListener { + private class ReleaseFundsOnBusinessEvent implements BusinessEventListener { @Override - public void businessEventToBeExecuted(@SuppressWarnings("unused") Map businessEventEntity) {} - - @Override - public void businessEventWasExecuted(Map businessEventEntity) { - Object entity = businessEventEntity.get(BusinessEntity.LOAN_TRANSACTION); - if (entity instanceof LoanTransaction) { - LoanTransaction loanTransaction = (LoanTransaction) entity; - if (releaseLoanIds.containsKey(loanTransaction.getLoan().getId())) { - completeGuarantorFund(loanTransaction); - } else { - releaseGuarantorFunds(loanTransaction); - } - } - } - } - - private class ReverseFundsOnBusinessEvent implements BusinessEventListener { - - @Override - public void businessEventToBeExecuted(@SuppressWarnings("unused") Map businessEventEntity) {} - - @Override - public void businessEventWasExecuted(Map businessEventEntity) { - Object entity = businessEventEntity.get(BusinessEntity.LOAN_TRANSACTION); - if (entity instanceof LoanTransaction) { - LoanTransaction loanTransaction = (LoanTransaction) entity; - List reersedTransactions = new ArrayList<>(1); - reersedTransactions.add(loanTransaction.getId()); - reverseTransaction(reersedTransactions); - } - } - } - - private class AdjustFundsOnBusinessEvent implements BusinessEventListener { - - @Override - public void businessEventToBeExecuted(@SuppressWarnings("unused") Map businessEventEntity) {} - - @Override - public void businessEventWasExecuted(Map businessEventEntity) { - Object entity = businessEventEntity.get(BusinessEntity.LOAN_ADJUSTED_TRANSACTION); - if (entity instanceof LoanTransaction) { - LoanTransaction loanTransaction = (LoanTransaction) entity; - List reersedTransactions = new ArrayList<>(1); - reersedTransactions.add(loanTransaction.getId()); - reverseTransaction(reersedTransactions); - } - Object transactionentity = businessEventEntity.get(BusinessEntity.LOAN_TRANSACTION); - if (transactionentity != null && transactionentity instanceof LoanTransaction) { - LoanTransaction loanTransaction = (LoanTransaction) transactionentity; + public void onBusinessEvent(LoanMakeRepaymentBusinessEvent event) { + LoanTransaction loanTransaction = event.get(); + if (releaseLoanIds.containsKey(loanTransaction.getLoan().getId())) { + completeGuarantorFund(loanTransaction); + } else { releaseGuarantorFunds(loanTransaction); } } } - private class ReverseAllFundsOnBusinessEvent implements BusinessEventListener { + private class ReverseFundsOnBusinessEvent implements BusinessEventListener { @Override - public void businessEventToBeExecuted(@SuppressWarnings("unused") Map businessEventEntity) {} + public void onBusinessEvent(LoanUndoWrittenOffBusinessEvent event) { + LoanTransaction loanTransaction = event.get(); + List reversedTransactions = new ArrayList<>(); + reversedTransactions.add(loanTransaction.getId()); + reverseTransaction(reversedTransactions); + } + } + + private class AdjustFundsOnBusinessEvent implements BusinessEventListener { @Override - public void businessEventWasExecuted(Map businessEventEntity) { - Object entity = businessEventEntity.get(BusinessEntity.LOAN); - if (entity instanceof Loan) { - Loan loan = (Loan) entity; - List reersedTransactions = new ArrayList<>(1); - reersedTransactions.addAll(loan.findExistingTransactionIds()); - reverseTransaction(reersedTransactions); + public void onBusinessEvent(LoanAdjustTransactionBusinessEvent event) { + LoanAdjustTransactionBusinessEvent.Data eventData = event.get(); + + LoanTransaction loanTransaction = eventData.getTransactionToAdjust(); + List reersedTransactions = new ArrayList<>(1); + reersedTransactions.add(loanTransaction.getId()); + reverseTransaction(reersedTransactions); + + LoanTransaction newTransaction = event.get().getNewTransactionDetail(); + if (newTransaction != null) { + releaseGuarantorFunds(newTransaction); } } } - private class UndoAllFundTransactions implements BusinessEventListener { + private class ReverseAllFundsOnBusinessEvent implements BusinessEventListener { @Override - public void businessEventToBeExecuted(@SuppressWarnings("unused") Map businessEventEntity) {} - - @Override - public void businessEventWasExecuted(Map businessEventEntity) { - Object entity = businessEventEntity.get(BusinessEntity.LOAN); - if (entity instanceof Loan) { - Loan loan = (Loan) entity; - reverseAllFundTransaction(loan); - } + public void onBusinessEvent(LoanUndoDisbursalBusinessEvent event) { + Loan loan = event.get(); + List reversedTransactions = new ArrayList<>(loan.findExistingTransactionIds()); + reverseTransaction(reversedTransactions); } } - private class ReleaseAllFunds implements BusinessEventListener { + private class UndoAllFundTransactions implements BusinessEventListener { @Override - public void businessEventToBeExecuted(@SuppressWarnings("unused") Map businessEventEntity) {} + public void onBusinessEvent(LoanUndoApprovalBusinessEvent event) { + Loan loan = event.get(); + reverseAllFundTransaction(loan); + } + } + + private class ReleaseAllFunds implements BusinessEventListener { @Override - public void businessEventWasExecuted(Map businessEventEntity) { - Object entity = businessEventEntity.get(BusinessEntity.LOAN_TRANSACTION); - if (entity instanceof LoanTransaction) { - LoanTransaction loanTransaction = (LoanTransaction) entity; - releaseAllGuarantors(loanTransaction); - } + public void onBusinessEvent(LoanWrittenOffBusinessEvent event) { + LoanTransaction loanTransaction = event.get(); + releaseAllGuarantors(loanTransaction); } } 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 06df776c8..f4281ca03 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 @@ -67,8 +67,10 @@ import org.apache.fineract.portfolio.account.domain.AccountAssociationType; import org.apache.fineract.portfolio.account.domain.AccountAssociations; import org.apache.fineract.portfolio.account.domain.AccountAssociationsRepository; import org.apache.fineract.portfolio.accountdetails.domain.AccountType; -import org.apache.fineract.portfolio.businessevent.domain.BusinessEntity; -import org.apache.fineract.portfolio.businessevent.domain.BusinessEvent; +import org.apache.fineract.portfolio.businessevent.domain.loan.LoanApprovedBusinessEvent; +import org.apache.fineract.portfolio.businessevent.domain.loan.LoanCreatedBusinessEvent; +import org.apache.fineract.portfolio.businessevent.domain.loan.LoanRejectedBusinessEvent; +import org.apache.fineract.portfolio.businessevent.domain.loan.LoanUndoApprovalBusinessEvent; import org.apache.fineract.portfolio.businessevent.service.BusinessEventNotifierService; import org.apache.fineract.portfolio.calendar.domain.Calendar; import org.apache.fineract.portfolio.calendar.domain.CalendarEntityType; @@ -588,8 +590,7 @@ public class LoanApplicationWritePlatformServiceJpaRepositoryImpl implements Loa StatusEnum.CREATE.getCode().longValue(), EntityTables.LOAN.getForeignKeyColumnNameOnDatatable(), newLoanApplication.productId()); - this.businessEventNotifierService.notifyBusinessEventWasExecuted(BusinessEvent.LOAN_CREATE, - constructEntityMap(BusinessEntity.LOAN, newLoanApplication)); + businessEventNotifierService.notifyBusinessEvent(new LoanCreatedBusinessEvent(newLoanApplication)); return new CommandProcessingResultBuilder() // .withCommandId(command.commandId()) // @@ -1476,8 +1477,7 @@ public class LoanApplicationWritePlatformServiceJpaRepositoryImpl implements Loa this.noteRepository.save(note); } - this.businessEventNotifierService.notifyBusinessEventWasExecuted(BusinessEvent.LOAN_APPROVED, - constructEntityMap(BusinessEntity.LOAN, loan)); + businessEventNotifierService.notifyBusinessEvent(new LoanApprovedBusinessEvent(loan)); } return new CommandProcessingResultBuilder() // @@ -1555,8 +1555,7 @@ public class LoanApplicationWritePlatformServiceJpaRepositoryImpl implements Loa final Note note = Note.loanNote(loan, noteText); this.noteRepository.save(note); } - this.businessEventNotifierService.notifyBusinessEventWasExecuted(BusinessEvent.LOAN_UNDO_APPROVAL, - constructEntityMap(BusinessEntity.LOAN, loan)); + businessEventNotifierService.notifyBusinessEvent(new LoanUndoApprovalBusinessEvent(loan)); } return new CommandProcessingResultBuilder() // @@ -1626,8 +1625,7 @@ public class LoanApplicationWritePlatformServiceJpaRepositoryImpl implements Loa this.noteRepository.save(note); } } - this.businessEventNotifierService.notifyBusinessEventWasExecuted(BusinessEvent.LOAN_REJECTED, - constructEntityMap(BusinessEntity.LOAN, loan)); + businessEventNotifierService.notifyBusinessEvent(new LoanRejectedBusinessEvent(loan)); return new CommandProcessingResultBuilder() // .withCommandId(command.commandId()) // .withEntityId(loan.getId()) // @@ -1762,12 +1760,6 @@ public class LoanApplicationWritePlatformServiceJpaRepositoryImpl implements Loa return user; } - private Map constructEntityMap(final BusinessEntity entityEvent, Object entity) { - Map map = new HashMap<>(1); - map.put(entityEvent, entity); - return map; - } - private void officeSpecificLoanProductValidation(final Long productId, final Long officeId) { final GlobalConfigurationProperty restrictToUserOfficeProperty = this.globalConfigurationRepository .findOneByNameWithNotFoundDetection(FineractEntityAccessConstants.GLOBAL_CONFIG_FOR_OFFICE_SPECIFIC_PRODUCTS); 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 560fa32bb..ac3076c08 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 @@ -28,6 +28,8 @@ import java.util.HashMap; import java.util.List; import java.util.Map; import javax.annotation.PostConstruct; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; import org.apache.fineract.infrastructure.core.domain.JdbcSupport; import org.apache.fineract.infrastructure.core.service.DateUtils; import org.apache.fineract.infrastructure.core.service.ThreadLocalContextUtil; @@ -35,8 +37,17 @@ import org.apache.fineract.infrastructure.core.service.database.DatabaseSpecific import org.apache.fineract.infrastructure.jobs.annotation.CronTarget; import org.apache.fineract.infrastructure.jobs.service.JobName; import org.apache.fineract.portfolio.businessevent.BusinessEventListener; -import org.apache.fineract.portfolio.businessevent.domain.BusinessEntity; -import org.apache.fineract.portfolio.businessevent.domain.BusinessEvent; +import org.apache.fineract.portfolio.businessevent.domain.loan.LoanAdjustTransactionBusinessEvent; +import org.apache.fineract.portfolio.businessevent.domain.loan.LoanApplyOverdueChargeBusinessEvent; +import org.apache.fineract.portfolio.businessevent.domain.loan.LoanDisbursalBusinessEvent; +import org.apache.fineract.portfolio.businessevent.domain.loan.charge.LoanAddChargeBusinessEvent; +import org.apache.fineract.portfolio.businessevent.domain.loan.charge.LoanWaiveChargeBusinessEvent; +import org.apache.fineract.portfolio.businessevent.domain.loan.transaction.LoanChargePaymentBusinessEvent; +import org.apache.fineract.portfolio.businessevent.domain.loan.transaction.LoanForeClosureBusinessEvent; +import org.apache.fineract.portfolio.businessevent.domain.loan.transaction.LoanMakeRepaymentBusinessEvent; +import org.apache.fineract.portfolio.businessevent.domain.loan.transaction.LoanRefundBusinessEvent; +import org.apache.fineract.portfolio.businessevent.domain.loan.transaction.LoanUndoWrittenOffBusinessEvent; +import org.apache.fineract.portfolio.businessevent.domain.loan.transaction.LoanWaiveInterestBusinessEvent; import org.apache.fineract.portfolio.businessevent.service.BusinessEventNotifierService; import org.apache.fineract.portfolio.loanaccount.domain.Loan; import org.apache.fineract.portfolio.loanaccount.domain.LoanCharge; @@ -44,9 +55,6 @@ import org.apache.fineract.portfolio.loanaccount.domain.LoanRepaymentScheduleIns import org.apache.fineract.portfolio.loanaccount.domain.LoanSummary; import org.apache.fineract.portfolio.loanaccount.domain.LoanTransaction; import org.apache.fineract.portfolio.loanaccount.loanschedule.data.LoanSchedulePeriodData; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.dao.DataAccessException; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.jdbc.core.ResultSetExtractor; @@ -54,35 +62,31 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @Service -public class LoanArrearsAgingServiceImpl implements LoanArrearsAgingService, BusinessEventListener { +@Slf4j +@RequiredArgsConstructor +public class LoanArrearsAgingServiceImpl implements LoanArrearsAgingService { - private static final Logger LOG = LoggerFactory.getLogger(LoanArrearsAgingServiceImpl.class); + private final DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd"); + + private final JdbcTemplate jdbcTemplate; private final BusinessEventNotifierService businessEventNotifierService; private final DatabaseSpecificSQLGenerator sqlGenerator; - private final DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd"); - private final JdbcTemplate jdbcTemplate; - - @Autowired - public LoanArrearsAgingServiceImpl(final JdbcTemplate jdbcTemplate, final BusinessEventNotifierService businessEventNotifierService, - DatabaseSpecificSQLGenerator sqlGenerator) { - this.jdbcTemplate = jdbcTemplate; - this.businessEventNotifierService = businessEventNotifierService; - this.sqlGenerator = sqlGenerator; - } @PostConstruct public void registerForNotification() { - this.businessEventNotifierService.addBusinessEventPostListeners(BusinessEvent.LOAN_REFUND, this); - this.businessEventNotifierService.addBusinessEventPostListeners(BusinessEvent.LOAN_ADJUST_TRANSACTION, this); - this.businessEventNotifierService.addBusinessEventPostListeners(BusinessEvent.LOAN_MAKE_REPAYMENT, this); - this.businessEventNotifierService.addBusinessEventPostListeners(BusinessEvent.LOAN_UNDO_WRITTEN_OFF, this); - this.businessEventNotifierService.addBusinessEventPostListeners(BusinessEvent.LOAN_WAIVE_INTEREST, this); - this.businessEventNotifierService.addBusinessEventPostListeners(BusinessEvent.LOAN_ADD_CHARGE, this); - this.businessEventNotifierService.addBusinessEventPostListeners(BusinessEvent.LOAN_WAIVE_CHARGE, this); - this.businessEventNotifierService.addBusinessEventPostListeners(BusinessEvent.LOAN_CHARGE_PAYMENT, this); - this.businessEventNotifierService.addBusinessEventPostListeners(BusinessEvent.LOAN_APPLY_OVERDUE_CHARGE, this); - this.businessEventNotifierService.addBusinessEventPostListeners(BusinessEvent.LOAN_DISBURSAL, new DisbursementEventListener()); - this.businessEventNotifierService.addBusinessEventPostListeners(BusinessEvent.LOAN_FORECLOSURE, this); + businessEventNotifierService.addBusinessEventListener(LoanRefundBusinessEvent.class, new RefundEventListener()); + businessEventNotifierService.addBusinessEventListener(LoanAdjustTransactionBusinessEvent.class, + new AdjustTransactionBusinessEventEventListener()); + businessEventNotifierService.addBusinessEventListener(LoanMakeRepaymentBusinessEvent.class, new MakeRepaymentEventListener()); + businessEventNotifierService.addBusinessEventListener(LoanUndoWrittenOffBusinessEvent.class, new UndoWrittenOffEventListener()); + businessEventNotifierService.addBusinessEventListener(LoanWaiveInterestBusinessEvent.class, new WaiveInterestEventListener()); + businessEventNotifierService.addBusinessEventListener(LoanAddChargeBusinessEvent.class, new AddChargeEventListener()); + businessEventNotifierService.addBusinessEventListener(LoanWaiveChargeBusinessEvent.class, new WaiveChargeEventListener()); + businessEventNotifierService.addBusinessEventListener(LoanChargePaymentBusinessEvent.class, new LoanChargePaymentEventListener()); + businessEventNotifierService.addBusinessEventListener(LoanApplyOverdueChargeBusinessEvent.class, + new ApplyOverdueChargeEventListener()); + businessEventNotifierService.addBusinessEventListener(LoanDisbursalBusinessEvent.class, new DisbursementEventListener()); + businessEventNotifierService.addBusinessEventListener(LoanForeClosureBusinessEvent.class, new LoanForeClosureEventListener()); } @Transactional @@ -129,7 +133,7 @@ public class LoanArrearsAgingServiceImpl implements LoanArrearsAgingService, Bus result += i; } - LOG.info("{}: Records affected by updateLoanArrearsAgeingDetails: {}", ThreadLocalContextUtil.getTenant().getName(), result); + log.info("{}: Records affected by updateLoanArrearsAgeingDetails: {}", ThreadLocalContextUtil.getTenant().getName(), result); } @Override @@ -474,32 +478,7 @@ public class LoanArrearsAgingServiceImpl implements LoanArrearsAgingService, Bus } } - @SuppressWarnings("unused") - @Override - public void businessEventToBeExecuted(Map businessEventEntity) { - // TODO Auto-generated method stub - - } - - @Override - public void businessEventWasExecuted(Map businessEventEntity) { - Loan loan = null; - Object loanEntity = businessEventEntity.get(BusinessEntity.LOAN); - Object loanTransactionEntity = businessEventEntity.get(BusinessEntity.LOAN_TRANSACTION); - Object loanAdjustTransactionEntity = businessEventEntity.get(BusinessEntity.LOAN_ADJUSTED_TRANSACTION); - Object loanChargeEntity = businessEventEntity.get(BusinessEntity.LOAN_CHARGE); - if (loanEntity != null) { - loan = (Loan) loanEntity; - } else if (loanTransactionEntity != null) { - LoanTransaction loanTransaction = (LoanTransaction) loanTransactionEntity; - loan = loanTransaction.getLoan(); - } else if (loanAdjustTransactionEntity != null) { - LoanTransaction loanTransaction = (LoanTransaction) loanAdjustTransactionEntity; - loan = loanTransaction.getLoan(); - } else if (loanChargeEntity != null) { - LoanCharge loanCharge = (LoanCharge) loanChargeEntity; - loan = loanCharge.getLoan(); - } + private void handleArrearsForLoan(Loan loan) { if (loan != null && loan.isOpen() && loan.repaymentScheduleDetail().isInterestRecalculationEnabled() && loan.loanProduct().isArrearsBasedOnOriginalSchedule()) { updateLoanArrearsAgeingDetailsWithOriginalSchedule(loan); @@ -508,24 +487,116 @@ public class LoanArrearsAgingServiceImpl implements LoanArrearsAgingService, Bus } } - private class DisbursementEventListener implements BusinessEventListener { + private class RefundEventListener implements BusinessEventListener { @SuppressWarnings("unused") @Override - public void businessEventToBeExecuted(Map businessEventEntity) { - // TODO Auto-generated method stub - + public void onBusinessEvent(LoanRefundBusinessEvent event) { + LoanTransaction loanTransaction = event.get(); + Loan loan = loanTransaction.getLoan(); + handleArrearsForLoan(loan); } + } + + private class AdjustTransactionBusinessEventEventListener implements BusinessEventListener { @Override - public void businessEventWasExecuted(Map businessEventEntity) { - Object loanEntity = businessEventEntity.get(BusinessEntity.LOAN); - if (loanEntity != null) { - Loan loan = (Loan) loanEntity; - updateLoanArrearsAgeingDetails(loan); + public void onBusinessEvent(LoanAdjustTransactionBusinessEvent event) { + LoanTransaction loanTransaction = event.get().getTransactionToAdjust(); + if (loanTransaction == null) { + loanTransaction = event.get().getNewTransactionDetail(); } - + Loan loan = loanTransaction.getLoan(); + handleArrearsForLoan(loan); } + } + private class MakeRepaymentEventListener implements BusinessEventListener { + + @Override + public void onBusinessEvent(LoanMakeRepaymentBusinessEvent event) { + LoanTransaction loanTransaction = event.get(); + Loan loan = loanTransaction.getLoan(); + handleArrearsForLoan(loan); + } + } + + private class UndoWrittenOffEventListener implements BusinessEventListener { + + @Override + public void onBusinessEvent(LoanUndoWrittenOffBusinessEvent event) { + LoanTransaction loanTransaction = event.get(); + Loan loan = loanTransaction.getLoan(); + handleArrearsForLoan(loan); + } + } + + private class WaiveInterestEventListener implements BusinessEventListener { + + @Override + public void onBusinessEvent(LoanWaiveInterestBusinessEvent event) { + LoanTransaction loanTransaction = event.get(); + Loan loan = loanTransaction.getLoan(); + handleArrearsForLoan(loan); + } + } + + private class LoanForeClosureEventListener implements BusinessEventListener { + + @Override + public void onBusinessEvent(LoanForeClosureBusinessEvent event) { + LoanTransaction loanTransaction = event.get(); + Loan loan = loanTransaction.getLoan(); + handleArrearsForLoan(loan); + } + } + + private class LoanChargePaymentEventListener implements BusinessEventListener { + + @Override + public void onBusinessEvent(LoanChargePaymentBusinessEvent event) { + LoanTransaction loanTransaction = event.get(); + Loan loan = loanTransaction.getLoan(); + handleArrearsForLoan(loan); + } + } + + private class AddChargeEventListener implements BusinessEventListener { + + @Override + public void onBusinessEvent(LoanAddChargeBusinessEvent event) { + LoanCharge loanCharge = event.get(); + Loan loan = loanCharge.getLoan(); + handleArrearsForLoan(loan); + } + } + + private class WaiveChargeEventListener implements BusinessEventListener { + + @Override + public void onBusinessEvent(LoanWaiveChargeBusinessEvent event) { + LoanCharge loanCharge = event.get(); + Loan loan = loanCharge.getLoan(); + handleArrearsForLoan(loan); + } + } + + private class ApplyOverdueChargeEventListener implements BusinessEventListener { + + @Override + public void onBusinessEvent(LoanApplyOverdueChargeBusinessEvent event) { + Loan loan = event.get(); + handleArrearsForLoan(loan); + } + } + + private class DisbursementEventListener implements BusinessEventListener { + + @SuppressWarnings("unused") + @Override + public void onBusinessEvent(LoanDisbursalBusinessEvent event) { + Loan loan = event.get(); + updateLoanArrearsAgeingDetails(loan); + } } } 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 080f5a19e..a1bc6a52d 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 @@ -37,6 +37,8 @@ import java.util.List; import java.util.Locale; import java.util.Map; import java.util.Set; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.apache.fineract.accounting.journalentry.service.JournalEntryWritePlatformService; import org.apache.fineract.infrastructure.codes.domain.CodeValue; @@ -90,8 +92,28 @@ import org.apache.fineract.portfolio.account.service.AccountAssociationsReadPlat import org.apache.fineract.portfolio.account.service.AccountTransfersReadPlatformService; import org.apache.fineract.portfolio.account.service.AccountTransfersWritePlatformService; import org.apache.fineract.portfolio.accountdetails.domain.AccountType; -import org.apache.fineract.portfolio.businessevent.domain.BusinessEntity; -import org.apache.fineract.portfolio.businessevent.domain.BusinessEvent; +import org.apache.fineract.portfolio.businessevent.domain.loan.LoanAcceptTransferBusinessEvent; +import org.apache.fineract.portfolio.businessevent.domain.loan.LoanAdjustTransactionBusinessEvent; +import org.apache.fineract.portfolio.businessevent.domain.loan.LoanApplyOverdueChargeBusinessEvent; +import org.apache.fineract.portfolio.businessevent.domain.loan.LoanCloseAsRescheduleBusinessEvent; +import org.apache.fineract.portfolio.businessevent.domain.loan.LoanCloseBusinessEvent; +import org.apache.fineract.portfolio.businessevent.domain.loan.LoanDisbursalBusinessEvent; +import org.apache.fineract.portfolio.businessevent.domain.loan.LoanInitiateTransferBusinessEvent; +import org.apache.fineract.portfolio.businessevent.domain.loan.LoanInterestRecalculationBusinessEvent; +import org.apache.fineract.portfolio.businessevent.domain.loan.LoanReassignOfficerBusinessEvent; +import org.apache.fineract.portfolio.businessevent.domain.loan.LoanRejectTransferBusinessEvent; +import org.apache.fineract.portfolio.businessevent.domain.loan.LoanRemoveOfficerBusinessEvent; +import org.apache.fineract.portfolio.businessevent.domain.loan.LoanUndoDisbursalBusinessEvent; +import org.apache.fineract.portfolio.businessevent.domain.loan.LoanUndoLastDisbursalBusinessEvent; +import org.apache.fineract.portfolio.businessevent.domain.loan.LoanWithdrawTransferBusinessEvent; +import org.apache.fineract.portfolio.businessevent.domain.loan.charge.LoanAddChargeBusinessEvent; +import org.apache.fineract.portfolio.businessevent.domain.loan.charge.LoanDeleteChargeBusinessEvent; +import org.apache.fineract.portfolio.businessevent.domain.loan.charge.LoanUpdateChargeBusinessEvent; +import org.apache.fineract.portfolio.businessevent.domain.loan.charge.LoanWaiveChargeBusinessEvent; +import org.apache.fineract.portfolio.businessevent.domain.loan.charge.LoanWaiveChargeUndoBusinessEvent; +import org.apache.fineract.portfolio.businessevent.domain.loan.transaction.LoanUndoWrittenOffBusinessEvent; +import org.apache.fineract.portfolio.businessevent.domain.loan.transaction.LoanWaiveInterestBusinessEvent; +import org.apache.fineract.portfolio.businessevent.domain.loan.transaction.LoanWrittenOffBusinessEvent; import org.apache.fineract.portfolio.businessevent.service.BusinessEventNotifierService; import org.apache.fineract.portfolio.calendar.domain.Calendar; import org.apache.fineract.portfolio.calendar.domain.CalendarEntityType; @@ -198,19 +220,16 @@ import org.apache.fineract.portfolio.repaymentwithpostdatedchecks.service.Repaym import org.apache.fineract.portfolio.savings.domain.SavingsAccount; import org.apache.fineract.portfolio.transfer.api.TransferApiConstants; import org.apache.fineract.useradministration.domain.AppUser; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.annotation.Autowired; 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 { - private static final Logger LOG = LoggerFactory.getLogger(LoanWritePlatformServiceJpaRepositoryImpl.class); - private final PlatformSecurityContext context; private final LoanEventApiJsonValidator loanEventApiJsonValidator; private final LoanUpdateCommandFromApiJsonDeserializer loanUpdateCommandFromApiJsonDeserializer; @@ -253,78 +272,6 @@ public class LoanWritePlatformServiceJpaRepositoryImpl implements LoanWritePlatf private final RepaymentWithPostDatedChecksAssembler repaymentWithPostDatedChecksAssembler; private final PostDatedChecksRepository postDatedChecksRepository; - @Autowired - public LoanWritePlatformServiceJpaRepositoryImpl(final PlatformSecurityContext context, - final LoanEventApiJsonValidator loanEventApiJsonValidator, - final LoanUpdateCommandFromApiJsonDeserializer loanUpdateCommandFromApiJsonDeserializer, final LoanAssembler loanAssembler, - final LoanAccountDomainService loanAccountDomainService, final LoanTransactionRepository loanTransactionRepository, - final NoteRepository noteRepository, final ChargeRepositoryWrapper chargeRepository, - final LoanChargeRepository loanChargeRepository, final ApplicationCurrencyRepositoryWrapper applicationCurrencyRepository, - final JournalEntryWritePlatformService journalEntryWritePlatformService, - final CalendarInstanceRepository calendarInstanceRepository, - final PaymentDetailWritePlatformService paymentDetailWritePlatformService, final HolidayRepositoryWrapper holidayRepository, - final ConfigurationDomainService configurationDomainService, final WorkingDaysRepositoryWrapper workingDaysRepository, - final AccountTransfersWritePlatformService accountTransfersWritePlatformService, - final AccountTransfersReadPlatformService accountTransfersReadPlatformService, - final AccountAssociationsReadPlatformService accountAssociationsReadPlatformService, - final LoanChargeReadPlatformService loanChargeReadPlatformService, final LoanReadPlatformService loanReadPlatformService, - final FromJsonHelper fromApiJsonHelper, final AccountTransferRepository accountTransferRepository, - final CalendarRepository calendarRepository, - final LoanScheduleHistoryWritePlatformService loanScheduleHistoryWritePlatformService, - final LoanApplicationCommandFromApiJsonHelper loanApplicationCommandFromApiJsonHelper, - final AccountAssociationsRepository accountAssociationRepository, - final AccountTransferDetailRepository accountTransferDetailRepository, - final BusinessEventNotifierService businessEventNotifierService, final GuarantorDomainService guarantorDomainService, - final LoanUtilService loanUtilService, final LoanSummaryWrapper loanSummaryWrapper, - final EntityDatatableChecksWritePlatformService entityDatatableChecksWritePlatformService, - final LoanRepaymentScheduleTransactionProcessorFactory transactionProcessingStrategy, - final CodeValueRepositoryWrapper codeValueRepository, final LoanRepositoryWrapper loanRepositoryWrapper, - final CashierTransactionDataValidator cashierTransactionDataValidator, final GLIMAccountInfoRepository glimRepository, - final LoanRepository loanRepository, final RepaymentWithPostDatedChecksAssembler repaymentWithPostDatedChecksAssembler, - final PostDatedChecksRepository postDatedChecksRepository) { - this.context = context; - this.loanEventApiJsonValidator = loanEventApiJsonValidator; - this.loanAssembler = loanAssembler; - this.loanRepositoryWrapper = loanRepositoryWrapper; - this.loanAccountDomainService = loanAccountDomainService; - this.loanTransactionRepository = loanTransactionRepository; - this.noteRepository = noteRepository; - this.chargeRepository = chargeRepository; - this.loanChargeRepository = loanChargeRepository; - this.applicationCurrencyRepository = applicationCurrencyRepository; - this.journalEntryWritePlatformService = journalEntryWritePlatformService; - this.loanUpdateCommandFromApiJsonDeserializer = loanUpdateCommandFromApiJsonDeserializer; - this.calendarInstanceRepository = calendarInstanceRepository; - this.paymentDetailWritePlatformService = paymentDetailWritePlatformService; - this.holidayRepository = holidayRepository; - this.configurationDomainService = configurationDomainService; - this.workingDaysRepository = workingDaysRepository; - this.accountTransfersWritePlatformService = accountTransfersWritePlatformService; - this.accountTransfersReadPlatformService = accountTransfersReadPlatformService; - this.accountAssociationsReadPlatformService = accountAssociationsReadPlatformService; - this.loanChargeReadPlatformService = loanChargeReadPlatformService; - this.loanReadPlatformService = loanReadPlatformService; - this.fromApiJsonHelper = fromApiJsonHelper; - this.accountTransferRepository = accountTransferRepository; - this.calendarRepository = calendarRepository; - this.loanScheduleHistoryWritePlatformService = loanScheduleHistoryWritePlatformService; - this.loanApplicationCommandFromApiJsonHelper = loanApplicationCommandFromApiJsonHelper; - this.accountAssociationRepository = accountAssociationRepository; - this.accountTransferDetailRepository = accountTransferDetailRepository; - this.businessEventNotifierService = businessEventNotifierService; - this.guarantorDomainService = guarantorDomainService; - this.loanUtilService = loanUtilService; - this.loanSummaryWrapper = loanSummaryWrapper; - this.transactionProcessingStrategy = transactionProcessingStrategy; - this.entityDatatableChecksWritePlatformService = entityDatatableChecksWritePlatformService; - this.codeValueRepository = codeValueRepository; - this.cashierTransactionDataValidator = cashierTransactionDataValidator; - this.loanRepository = loanRepository; - this.glimRepository = glimRepository; - this.repaymentWithPostDatedChecksAssembler = repaymentWithPostDatedChecksAssembler; - this.postDatedChecksRepository = postDatedChecksRepository; - } - private LoanLifecycleStateMachine defaultLoanLifecycleStateMachine() { final List allowedLoanStatuses = Arrays.asList(LoanStatus.values()); return new DefaultLoanLifecycleStateMachine(allowedLoanStatuses); @@ -430,9 +377,6 @@ public class LoanWritePlatformServiceJpaRepositoryImpl implements LoanWritePlatf scheduleGeneratorDTO.isSkipRepaymentOnFirstDayofMonth(), scheduleGeneratorDTO.getNumberOfdays()); } - this.businessEventNotifierService.notifyBusinessEventToBeExecuted(BusinessEvent.LOAN_DISBURSAL, - constructEntityMap(BusinessEntity.LOAN, loan)); - final List existingTransactionIds = new ArrayList<>(); final List existingReversedTransactionIds = new ArrayList<>(); @@ -581,8 +525,7 @@ public class LoanWritePlatformServiceJpaRepositoryImpl implements LoanWritePlatf updatePostDatedChecks(postDatedChecks); } - this.businessEventNotifierService.notifyBusinessEventWasExecuted(BusinessEvent.LOAN_DISBURSAL, - constructEntityMap(BusinessEntity.LOAN, loan)); + businessEventNotifierService.notifyBusinessEvent(new LoanDisbursalBusinessEvent(loan)); Long entityId = loan.getId(); @@ -736,8 +679,6 @@ public class LoanWritePlatformServiceJpaRepositoryImpl implements LoanWritePlatf syncExpectedDateWithActualDisbursementDate(loan, actualDisbursementDate); } checkClientOrGroupActive(loan); - this.businessEventNotifierService.notifyBusinessEventToBeExecuted(BusinessEvent.LOAN_DISBURSAL, - constructEntityMap(BusinessEntity.LOAN, loan)); final List existingTransactionIds = new ArrayList<>(); final List existingReversedTransactionIds = new ArrayList<>(); @@ -827,9 +768,8 @@ public class LoanWritePlatformServiceJpaRepositoryImpl implements LoanWritePlatf this.accountTransfersWritePlatformService.transferFunds(accountTransferDTO); } updateRecurringCalendarDatesForInterestRecalculation(loan); - this.loanAccountDomainService.recalculateAccruals(loan); - this.businessEventNotifierService.notifyBusinessEventWasExecuted(BusinessEvent.LOAN_DISBURSAL, - constructEntityMap(BusinessEntity.LOAN, loan)); + loanAccountDomainService.recalculateAccruals(loan); + businessEventNotifierService.notifyBusinessEvent(new LoanDisbursalBusinessEvent(loan)); } return changes; @@ -867,8 +807,6 @@ public class LoanWritePlatformServiceJpaRepositoryImpl implements LoanWritePlatf final AppUser currentUser = getAppUserIfPresent(); final Loan loan = this.loanAssembler.assembleFrom(loanId); checkClientOrGroupActive(loan); - this.businessEventNotifierService.notifyBusinessEventToBeExecuted(BusinessEvent.LOAN_UNDO_DISBURSAL, - constructEntityMap(BusinessEntity.LOAN, loan)); removeLoanCycle(loan); final List existingTransactionIds = new ArrayList<>(); final List existingReversedTransactionIds = new ArrayList<>(); @@ -909,9 +847,8 @@ public class LoanWritePlatformServiceJpaRepositoryImpl implements LoanWritePlatf boolean isAccountTransfer = false; final Map accountingBridgeData = loan.deriveAccountingBridgeData(applicationCurrency.toData(), existingTransactionIds, existingReversedTransactionIds, isAccountTransfer); - this.journalEntryWritePlatformService.createJournalEntriesForLoan(accountingBridgeData); - this.businessEventNotifierService.notifyBusinessEventWasExecuted(BusinessEvent.LOAN_UNDO_DISBURSAL, - constructEntityMap(BusinessEntity.LOAN, loan)); + journalEntryWritePlatformService.createJournalEntriesForLoan(accountingBridgeData); + businessEventNotifierService.notifyBusinessEvent(new LoanUndoDisbursalBusinessEvent(loan)); } return new CommandProcessingResultBuilder() // @@ -941,7 +878,7 @@ public class LoanWritePlatformServiceJpaRepositoryImpl implements LoanWritePlatf Long[] childLoanId = new Long[repayments.size()]; for (int i = 0; i < repayments.size(); i++) { jsonObject = repayments.get(i).getAsJsonObject(); - LOG.info("{}", jsonObject.toString()); + log.info("{}", jsonObject.toString()); childLoanId[i] = jsonObject.get("loanId").getAsLong(); } int j = 0; @@ -1080,8 +1017,6 @@ public class LoanWritePlatformServiceJpaRepositoryImpl implements LoanWritePlatf checkClientOrGroupActive(loan); final LoanTransaction transactionToAdjust = this.loanTransactionRepository.findById(transactionId) .orElseThrow(() -> new LoanTransactionNotFoundException(transactionId)); - this.businessEventNotifierService.notifyBusinessEventToBeExecuted(BusinessEvent.LOAN_ADJUST_TRANSACTION, - constructEntityMap(BusinessEntity.LOAN_ADJUSTED_TRANSACTION, transactionToAdjust)); if (this.accountTransfersReadPlatformService.isAccountTransfer(transactionId, PortfolioAccountType.LOAN)) { throw new PlatformServiceUnavailableException("error.msg.loan.transfer.transaction.update.not.allowed", "Loan transaction:" + transactionId + " update not allowed as it involves in account transfer", transactionId); @@ -1190,11 +1125,11 @@ public class LoanWritePlatformServiceJpaRepositoryImpl implements LoanWritePlatf postJournalEntries(loan, existingTransactionIds, existingReversedTransactionIds); this.loanAccountDomainService.recalculateAccruals(loan); - Map entityMap = constructEntityMap(BusinessEntity.LOAN_ADJUSTED_TRANSACTION, transactionToAdjust); + LoanAdjustTransactionBusinessEvent.Data eventData = new LoanAdjustTransactionBusinessEvent.Data(transactionToAdjust); if (newTransactionDetail.isRepaymentType() && newTransactionDetail.isGreaterThanZero(loan.getPrincpal().getCurrency())) { - entityMap.put(BusinessEntity.LOAN_TRANSACTION, newTransactionDetail); + eventData.setNewTransactionDetail(newTransactionDetail); } - this.businessEventNotifierService.notifyBusinessEventWasExecuted(BusinessEvent.LOAN_ADJUST_TRANSACTION, entityMap); + businessEventNotifierService.notifyBusinessEvent(new LoanAdjustTransactionBusinessEvent(eventData)); return new CommandProcessingResultBuilder().withCommandId(command.commandId()).withEntityId(transactionId) .withOfficeId(loan.getOfficeId()).withClientId(loan.getClientId()).withGroupId(loan.getGroupId()).withLoanId(loanId) @@ -1235,8 +1170,6 @@ public class LoanWritePlatformServiceJpaRepositoryImpl implements LoanWritePlatf } final LoanTransaction waiveInterestTransaction = LoanTransaction.waiver(loan.getOffice(), loan, transactionAmountAsMoney, transactionDate, interestComponent, unrecognizedIncome, DateUtils.getLocalDateTimeOfTenant(), currentUser); - this.businessEventNotifierService.notifyBusinessEventToBeExecuted(BusinessEvent.LOAN_WAIVE_INTEREST, - constructEntityMap(BusinessEntity.LOAN_TRANSACTION, waiveInterestTransaction)); LocalDate recalculateFrom = null; if (loan.repaymentScheduleDetail().isInterestRecalculationEnabled()) { recalculateFrom = transactionDate; @@ -1272,9 +1205,8 @@ public class LoanWritePlatformServiceJpaRepositoryImpl implements LoanWritePlatf } postJournalEntries(loan, existingTransactionIds, existingReversedTransactionIds); - this.loanAccountDomainService.recalculateAccruals(loan); - this.businessEventNotifierService.notifyBusinessEventWasExecuted(BusinessEvent.LOAN_WAIVE_INTEREST, - constructEntityMap(BusinessEntity.LOAN_TRANSACTION, waiveInterestTransaction)); + loanAccountDomainService.recalculateAccruals(loan); + businessEventNotifierService.notifyBusinessEvent(new LoanWaiveInterestBusinessEvent(waiveInterestTransaction)); return new CommandProcessingResultBuilder().withCommandId(command.commandId()).withEntityId(waiveInterestTransaction.getId()) .withOfficeId(loan.getOfficeId()).withClientId(loan.getClientId()).withGroupId(loan.getGroupId()).withLoanId(loanId) .with(changes).build(); @@ -1301,8 +1233,6 @@ public class LoanWritePlatformServiceJpaRepositoryImpl implements LoanWritePlatf } checkClientOrGroupActive(loan); - this.businessEventNotifierService.notifyBusinessEventToBeExecuted(BusinessEvent.LOAN_WRITTEN_OFF, - constructEntityMap(BusinessEntity.LOAN, loan)); entityDatatableChecksWritePlatformService.runTheCheckForProduct(loanId, EntityTables.LOAN.getName(), StatusEnum.WRITE_OFF.getCode().longValue(), EntityTables.LOAN.getForeignKeyColumnNameOnDatatable(), loan.productId()); @@ -1322,8 +1252,8 @@ public class LoanWritePlatformServiceJpaRepositoryImpl implements LoanWritePlatf final ChangedTransactionDetail changedTransactionDetail = loan.closeAsWrittenOff(command, defaultLoanLifecycleStateMachine(), changes, existingTransactionIds, existingReversedTransactionIds, currentUser, scheduleGeneratorDTO); - LoanTransaction writeoff = changedTransactionDetail.getNewTransactionMappings().remove(0L); - this.loanTransactionRepository.saveAndFlush(writeoff); + LoanTransaction writeOff = changedTransactionDetail.getNewTransactionMappings().remove(0L); + this.loanTransactionRepository.saveAndFlush(writeOff); for (final Map.Entry mapEntry : changedTransactionDetail.getNewTransactionMappings().entrySet()) { this.loanTransactionRepository.save(mapEntry.getValue()); this.accountTransfersWritePlatformService.updateLoanTransaction(mapEntry.getKey(), mapEntry.getValue()); @@ -1332,15 +1262,14 @@ public class LoanWritePlatformServiceJpaRepositoryImpl implements LoanWritePlatf final String noteText = command.stringValueOfParameterNamed("note"); if (StringUtils.isNotBlank(noteText)) { changes.put("note", noteText); - final Note note = Note.loanTransactionNote(loan, writeoff, noteText); + final Note note = Note.loanTransactionNote(loan, writeOff, noteText); this.noteRepository.save(note); } postJournalEntries(loan, existingTransactionIds, existingReversedTransactionIds); - this.loanAccountDomainService.recalculateAccruals(loan); - this.businessEventNotifierService.notifyBusinessEventWasExecuted(BusinessEvent.LOAN_WRITTEN_OFF, - constructEntityMap(BusinessEntity.LOAN_TRANSACTION, writeoff)); - return new CommandProcessingResultBuilder().withCommandId(command.commandId()).withEntityId(writeoff.getId()) + loanAccountDomainService.recalculateAccruals(loan); + businessEventNotifierService.notifyBusinessEvent(new LoanWrittenOffBusinessEvent(writeOff)); + return new CommandProcessingResultBuilder().withCommandId(command.commandId()).withEntityId(writeOff.getId()) .withOfficeId(loan.getOfficeId()).withClientId(loan.getClientId()).withGroupId(loan.getGroupId()).withLoanId(loanId) .with(changes).build(); } @@ -1355,8 +1284,6 @@ public class LoanWritePlatformServiceJpaRepositoryImpl implements LoanWritePlatf final Loan loan = this.loanAssembler.assembleFrom(loanId); checkClientOrGroupActive(loan); - this.businessEventNotifierService.notifyBusinessEventToBeExecuted(BusinessEvent.LOAN_CLOSE, - constructEntityMap(BusinessEntity.LOAN, loan)); final Map changes = new LinkedHashMap<>(); changes.put("transactionDate", command.stringValueOfParameterNamed("transactionDate")); @@ -1396,10 +1323,9 @@ public class LoanWritePlatformServiceJpaRepositoryImpl implements LoanWritePlatf if (possibleClosingTransaction != null) { postJournalEntries(loan, existingTransactionIds, existingReversedTransactionIds); } - this.loanAccountDomainService.recalculateAccruals(loan); + loanAccountDomainService.recalculateAccruals(loan); - this.businessEventNotifierService.notifyBusinessEventWasExecuted(BusinessEvent.LOAN_CLOSE, - constructEntityMap(BusinessEntity.LOAN, loan)); + businessEventNotifierService.notifyBusinessEvent(new LoanCloseBusinessEvent(loan)); // Update loan transaction on repayment. if (AccountType.fromInt(loan.getLoanType()).isIndividualAccount()) { @@ -1444,8 +1370,6 @@ public class LoanWritePlatformServiceJpaRepositoryImpl implements LoanWritePlatf final Loan loan = this.loanAssembler.assembleFrom(loanId); checkClientOrGroupActive(loan); removeLoanCycle(loan); - this.businessEventNotifierService.notifyBusinessEventToBeExecuted(BusinessEvent.LOAN_CLOSE_AS_RESCHEDULE, - constructEntityMap(BusinessEntity.LOAN, loan)); final Map changes = new LinkedHashMap<>(); changes.put("transactionDate", command.stringValueOfParameterNamed("transactionDate")); @@ -1462,8 +1386,7 @@ public class LoanWritePlatformServiceJpaRepositoryImpl implements LoanWritePlatf final Note note = Note.loanNote(loan, noteText); this.noteRepository.save(note); } - this.businessEventNotifierService.notifyBusinessEventWasExecuted(BusinessEvent.LOAN_CLOSE_AS_RESCHEDULE, - constructEntityMap(BusinessEntity.LOAN, loan)); + businessEventNotifierService.notifyBusinessEvent(new LoanCloseAsRescheduleBusinessEvent(loan)); // disable all active standing instructions linked to the loan this.loanAccountDomainService.disableStandingInstructionsLinkedToClosedLoan(loan); @@ -1541,8 +1464,6 @@ public class LoanWritePlatformServiceJpaRepositoryImpl implements LoanWritePlatf disbursementDetail.expectedDisbursementDateAsLocalDate(), null, null); loanTrancheDisbursementCharge = new LoanTrancheDisbursementCharge(loanCharge, disbursementDetail); loanCharge.updateLoanTrancheDisbursementCharge(loanTrancheDisbursementCharge); - this.businessEventNotifierService.notifyBusinessEventToBeExecuted(BusinessEvent.LOAN_ADD_CHARGE, - constructEntityMap(BusinessEntity.LOAN_CHARGE, loanCharge)); validateAddLoanCharge(loan, chargeDefinition, loanCharge); addCharge(loan, chargeDefinition, loanCharge); isAppliedOnBackDate = true; @@ -1554,8 +1475,6 @@ public class LoanWritePlatformServiceJpaRepositoryImpl implements LoanWritePlatf loan.addTrancheLoanCharge(chargeDefinition); } else { loanCharge = LoanCharge.createNewFromJson(loan, chargeDefinition, command); - this.businessEventNotifierService.notifyBusinessEventToBeExecuted(BusinessEvent.LOAN_ADD_CHARGE, - constructEntityMap(BusinessEntity.LOAN_CHARGE, loanCharge)); validateAddLoanCharge(loan, chargeDefinition, loanCharge); isAppliedOnBackDate = addCharge(loan, chargeDefinition, loanCharge); @@ -1594,8 +1513,7 @@ public class LoanWritePlatformServiceJpaRepositoryImpl implements LoanWritePlatf && loan.isFeeCompoundingEnabledForInterestRecalculation()) { this.loanAccountDomainService.recalculateAccruals(loan); } - this.businessEventNotifierService.notifyBusinessEventWasExecuted(BusinessEvent.LOAN_ADD_CHARGE, - constructEntityMap(BusinessEntity.LOAN_CHARGE, loanCharge)); + businessEventNotifierService.notifyBusinessEvent(new LoanAddChargeBusinessEvent(loanCharge)); return new CommandProcessingResultBuilder().withCommandId(command.commandId()).withEntityId(loanCharge.getId()) .withOfficeId(loan.getOfficeId()).withClientId(loan.getClientId()).withGroupId(loan.getGroupId()).withLoanId(loanId) .build(); @@ -1711,14 +1629,10 @@ public class LoanWritePlatformServiceJpaRepositoryImpl implements LoanWritePlatf loanCharge.getId()); } - this.businessEventNotifierService.notifyBusinessEventToBeExecuted(BusinessEvent.LOAN_UPDATE_CHARGE, - constructEntityMap(BusinessEntity.LOAN_CHARGE, loanCharge)); - final Map changes = loan.updateLoanCharge(loanCharge, command); saveLoanWithDataIntegrityViolationChecks(loan); - this.businessEventNotifierService.notifyBusinessEventWasExecuted(BusinessEvent.LOAN_UPDATE_CHARGE, - constructEntityMap(BusinessEntity.LOAN_CHARGE, loanCharge)); + businessEventNotifierService.notifyBusinessEvent(new LoanUpdateChargeBusinessEvent(loanCharge)); return new CommandProcessingResultBuilder() // .withCommandId(command.commandId()) // .withEntityId(loanChargeId) // @@ -1770,9 +1684,6 @@ public class LoanWritePlatformServiceJpaRepositoryImpl implements LoanWritePlatf final Map changes = new LinkedHashMap<>(3); - this.businessEventNotifierService.notifyBusinessEventToBeExecuted(BusinessEvent.LOAN_WAIVE_CHARGE_UNDO, - constructEntityMap(BusinessEntity.LOAN_CHARGE, loanCharge)); - if (loanCharge.isInstalmentFee()) { LoanInstallmentCharge chargePerInstallment = null; @@ -1859,8 +1770,7 @@ public class LoanWritePlatformServiceJpaRepositoryImpl implements LoanWritePlatf saveLoanWithDataIntegrityViolationChecks(loan); - this.businessEventNotifierService.notifyBusinessEventWasExecuted(BusinessEvent.LOAN_WAIVE_CHARGE_UNDO, - constructEntityMap(BusinessEntity.LOAN_CHARGE, loanCharge)); + businessEventNotifierService.notifyBusinessEvent(new LoanWaiveChargeUndoBusinessEvent(loanCharge)); LoanTransaction loanTransactionData = this.loanTransactionRepository.getById(command.entityId()); changes.put("principalPortion", loanTransactionData.getPrincipalPortion()); @@ -1901,8 +1811,6 @@ public class LoanWritePlatformServiceJpaRepositoryImpl implements LoanWritePlatf } else if (loanCharge.isPaid()) { throw new LoanChargeCannotBeWaivedException(LoanChargeCannotBeWaivedReason.ALREADY_PAID, loanCharge.getId()); } - this.businessEventNotifierService.notifyBusinessEventToBeExecuted(BusinessEvent.LOAN_WAIVE_CHARGE, - constructEntityMap(BusinessEntity.LOAN_CHARGE, loanCharge)); Integer loanInstallmentNumber = null; if (loanCharge.isInstalmentFee()) { LoanInstallmentCharge chargePerInstallment = null; @@ -1951,8 +1859,7 @@ public class LoanWritePlatformServiceJpaRepositoryImpl implements LoanWritePlatf postJournalEntries(loan, existingTransactionIds, existingReversedTransactionIds); - this.businessEventNotifierService.notifyBusinessEventWasExecuted(BusinessEvent.LOAN_WAIVE_CHARGE, - constructEntityMap(BusinessEntity.LOAN_CHARGE, loanCharge)); + businessEventNotifierService.notifyBusinessEvent(new LoanWaiveChargeBusinessEvent(loanCharge)); return new CommandProcessingResultBuilder() // .withCommandId(command.commandId()) // @@ -1979,13 +1886,10 @@ public class LoanWritePlatformServiceJpaRepositoryImpl implements LoanWritePlatf throw new LoanChargeCannotBeDeletedException(LoanChargeCannotBeDeletedReason.LOAN_NOT_IN_SUBMITTED_AND_PENDING_APPROVAL_STAGE, loanCharge.getId()); } - this.businessEventNotifierService.notifyBusinessEventToBeExecuted(BusinessEvent.LOAN_DELETE_CHARGE, - constructEntityMap(BusinessEntity.LOAN_CHARGE, loanCharge)); loan.removeLoanCharge(loanCharge); saveLoanWithDataIntegrityViolationChecks(loan); - this.businessEventNotifierService.notifyBusinessEventWasExecuted(BusinessEvent.LOAN_DELETE_CHARGE, - constructEntityMap(BusinessEntity.LOAN_CHARGE, loanCharge)); + businessEventNotifierService.notifyBusinessEvent(new LoanDeleteChargeBusinessEvent(loanCharge)); return new CommandProcessingResultBuilder() // .withCommandId(command.commandId()) // .withEntityId(loanChargeId) // @@ -2172,7 +2076,7 @@ public class LoanWritePlatformServiceJpaRepositoryImpl implements LoanWritePlatf try { this.accountTransfersWritePlatformService.transferFunds(accountTransferDTO); } catch (RuntimeException e) { - LOG.error("Exception while paying charge {} for loan id {}", accountTransferDTO.getChargeId(), + log.error("Exception while paying charge {} for loan id {}", accountTransferDTO.getChargeId(), accountTransferDTO.getToAccountId(), e); errors.add(e); } @@ -2197,9 +2101,6 @@ public class LoanWritePlatformServiceJpaRepositoryImpl implements LoanWritePlatf checkClientOrGroupActive(loan); validateTransactionsForTransfer(loan, transferDate); - this.businessEventNotifierService.notifyBusinessEventToBeExecuted(BusinessEvent.LOAN_INITIATE_TRANSFER, - constructEntityMap(BusinessEntity.LOAN, loan)); - final List existingTransactionIds = new ArrayList<>(loan.findExistingTransactionIds()); final List existingReversedTransactionIds = new ArrayList<>(loan.findExistingReversedTransactionIds()); @@ -2212,8 +2113,7 @@ public class LoanWritePlatformServiceJpaRepositoryImpl implements LoanWritePlatf saveLoanWithDataIntegrityViolationChecks(loan); postJournalEntries(loan, existingTransactionIds, existingReversedTransactionIds); - this.businessEventNotifierService.notifyBusinessEventWasExecuted(BusinessEvent.LOAN_INITIATE_TRANSFER, - constructEntityMap(BusinessEntity.LOAN, loan)); + businessEventNotifierService.notifyBusinessEvent(new LoanInitiateTransferBusinessEvent(loan)); return newTransferTransaction; } @@ -2223,8 +2123,6 @@ public class LoanWritePlatformServiceJpaRepositoryImpl implements LoanWritePlatf final Staff loanOfficer) { AppUser currentUser = getAppUserIfPresent(); this.loanAssembler.setHelpers(loan); - this.businessEventNotifierService.notifyBusinessEventToBeExecuted(BusinessEvent.LOAN_ACCEPT_TRANSFER, - constructEntityMap(BusinessEntity.LOAN, loan)); final List existingTransactionIds = new ArrayList<>(loan.findExistingTransactionIds()); final List existingReversedTransactionIds = new ArrayList<>(loan.findExistingReversedTransactionIds()); @@ -2244,8 +2142,7 @@ public class LoanWritePlatformServiceJpaRepositoryImpl implements LoanWritePlatf saveLoanWithDataIntegrityViolationChecks(loan); postJournalEntries(loan, existingTransactionIds, existingReversedTransactionIds); - this.businessEventNotifierService.notifyBusinessEventWasExecuted(BusinessEvent.LOAN_ACCEPT_TRANSFER, - constructEntityMap(BusinessEntity.LOAN, loan)); + businessEventNotifierService.notifyBusinessEvent(new LoanAcceptTransferBusinessEvent(loan)); return newTransferAcceptanceTransaction; } @@ -2255,8 +2152,6 @@ public class LoanWritePlatformServiceJpaRepositoryImpl implements LoanWritePlatf public LoanTransaction withdrawLoanTransfer(final Loan loan, final LocalDate transferDate) { AppUser currentUser = getAppUserIfPresent(); this.loanAssembler.setHelpers(loan); - this.businessEventNotifierService.notifyBusinessEventToBeExecuted(BusinessEvent.LOAN_WITHDRAW_TRANSFER, - constructEntityMap(BusinessEntity.LOAN, loan)); final List existingTransactionIds = new ArrayList<>(loan.findExistingTransactionIds()); final List existingReversedTransactionIds = new ArrayList<>(loan.findExistingReversedTransactionIds()); @@ -2270,8 +2165,7 @@ public class LoanWritePlatformServiceJpaRepositoryImpl implements LoanWritePlatf saveLoanWithDataIntegrityViolationChecks(loan); postJournalEntries(loan, existingTransactionIds, existingReversedTransactionIds); - this.businessEventNotifierService.notifyBusinessEventWasExecuted(BusinessEvent.LOAN_WITHDRAW_TRANSFER, - constructEntityMap(BusinessEntity.LOAN, loan)); + businessEventNotifierService.notifyBusinessEvent(new LoanWithdrawTransferBusinessEvent(loan)); return newTransferAcceptanceTransaction; } @@ -2280,12 +2174,9 @@ public class LoanWritePlatformServiceJpaRepositoryImpl implements LoanWritePlatf @Override public void rejectLoanTransfer(final Loan loan) { this.loanAssembler.setHelpers(loan); - this.businessEventNotifierService.notifyBusinessEventToBeExecuted(BusinessEvent.LOAN_REJECT_TRANSFER, - constructEntityMap(BusinessEntity.LOAN, loan)); loan.setLoanStatus(LoanStatus.TRANSFER_ON_HOLD.getValue()); saveLoanWithDataIntegrityViolationChecks(loan); - this.businessEventNotifierService.notifyBusinessEventWasExecuted(BusinessEvent.LOAN_REJECT_TRANSFER, - constructEntityMap(BusinessEntity.LOAN, loan)); + businessEventNotifierService.notifyBusinessEvent(new LoanRejectTransferBusinessEvent(loan)); } @Transactional @@ -2303,8 +2194,6 @@ public class LoanWritePlatformServiceJpaRepositoryImpl implements LoanWritePlatf final Loan loan = this.loanAssembler.assembleFrom(loanId); checkClientOrGroupActive(loan); - this.businessEventNotifierService.notifyBusinessEventToBeExecuted(BusinessEvent.LOAN_REASSIGN_OFFICER, - constructEntityMap(BusinessEntity.LOAN, loan)); if (!loan.hasLoanOfficer(fromLoanOfficer)) { throw new LoanOfficerAssignmentException(loanId, fromLoanOfficerId); } @@ -2312,8 +2201,7 @@ public class LoanWritePlatformServiceJpaRepositoryImpl implements LoanWritePlatf loan.reassignLoanOfficer(toLoanOfficer, dateOfLoanOfficerAssignment); saveLoanWithDataIntegrityViolationChecks(loan); - this.businessEventNotifierService.notifyBusinessEventWasExecuted(BusinessEvent.LOAN_REASSIGN_OFFICER, - constructEntityMap(BusinessEntity.LOAN, loan)); + businessEventNotifierService.notifyBusinessEvent(new LoanReassignOfficerBusinessEvent(loan)); return new CommandProcessingResultBuilder() // .withCommandId(command.commandId()) // @@ -2343,8 +2231,6 @@ public class LoanWritePlatformServiceJpaRepositoryImpl implements LoanWritePlatf for (final String loanIdString : loanIds) { final Long loanId = Long.valueOf(loanIdString); final Loan loan = this.loanAssembler.assembleFrom(loanId); - this.businessEventNotifierService.notifyBusinessEventToBeExecuted(BusinessEvent.LOAN_REASSIGN_OFFICER, - constructEntityMap(BusinessEntity.LOAN, loan)); checkClientOrGroupActive(loan); if (!loan.hasLoanOfficer(fromLoanOfficer)) { @@ -2353,8 +2239,7 @@ public class LoanWritePlatformServiceJpaRepositoryImpl implements LoanWritePlatf loan.reassignLoanOfficer(toLoanOfficer, dateOfLoanOfficerAssignment); saveLoanWithDataIntegrityViolationChecks(loan); - this.businessEventNotifierService.notifyBusinessEventWasExecuted(BusinessEvent.LOAN_REASSIGN_OFFICER, - constructEntityMap(BusinessEntity.LOAN, loan)); + businessEventNotifierService.notifyBusinessEvent(new LoanReassignOfficerBusinessEvent(loan)); } this.loanRepositoryWrapper.flush(); @@ -2379,14 +2264,10 @@ public class LoanWritePlatformServiceJpaRepositoryImpl implements LoanWritePlatf if (loan.getLoanOfficer() == null) { throw new LoanOfficerUnassignmentException(loanId); } - this.businessEventNotifierService.notifyBusinessEventToBeExecuted(BusinessEvent.LOAN_REMOVE_OFFICER, - constructEntityMap(BusinessEntity.LOAN, loan)); - loan.removeLoanOfficer(dateOfLoanOfficerunAssigned); saveLoanWithDataIntegrityViolationChecks(loan); - this.businessEventNotifierService.notifyBusinessEventWasExecuted(BusinessEvent.LOAN_REMOVE_OFFICER, - constructEntityMap(BusinessEntity.LOAN, loan)); + businessEventNotifierService.notifyBusinessEvent(new LoanRemoveOfficerBusinessEvent(loan)); return new CommandProcessingResultBuilder() // .withCommandId(command.commandId()) // @@ -2754,8 +2635,7 @@ public class LoanWritePlatformServiceJpaRepositoryImpl implements LoanWritePlatf && loan.isFeeCompoundingEnabledForInterestRecalculation()) { this.loanAccountDomainService.recalculateAccruals(loan); } - this.businessEventNotifierService.notifyBusinessEventWasExecuted(BusinessEvent.LOAN_APPLY_OVERDUE_CHARGE, - constructEntityMap(BusinessEntity.LOAN, loan)); + businessEventNotifierService.notifyBusinessEvent(new LoanApplyOverdueChargeBusinessEvent(loan)); } } @@ -2835,8 +2715,6 @@ public class LoanWritePlatformServiceJpaRepositoryImpl implements LoanWritePlatf LocalDate recalculateFrom = DateUtils.getLocalDateOfTenant(); if (loan != null) { - this.businessEventNotifierService.notifyBusinessEventToBeExecuted(BusinessEvent.LOAN_APPLY_OVERDUE_CHARGE, - constructEntityMap(BusinessEntity.LOAN, loan)); for (Map.Entry entry : scheduleDates.entrySet()) { final LoanCharge loanCharge = LoanCharge.createNewFromJson(loan, chargeDefinition, command, entry.getValue()); @@ -2876,8 +2754,6 @@ public class LoanWritePlatformServiceJpaRepositoryImpl implements LoanWritePlatf } LocalDate recalculateFrom = null; LoanTransaction writeOffTransaction = loan.findWriteOffTransaction(); - this.businessEventNotifierService.notifyBusinessEventToBeExecuted(BusinessEvent.LOAN_UNDO_WRITTEN_OFF, - constructEntityMap(BusinessEntity.LOAN_TRANSACTION, writeOffTransaction)); ScheduleGeneratorDTO scheduleGeneratorDTO = this.loanUtilService.buildScheduleGeneratorDTO(loan, recalculateFrom); @@ -2894,8 +2770,7 @@ public class LoanWritePlatformServiceJpaRepositoryImpl implements LoanWritePlatf postJournalEntries(loan, existingTransactionIds, existingReversedTransactionIds); this.loanAccountDomainService.recalculateAccruals(loan); if (writeOffTransaction != null) { - this.businessEventNotifierService.notifyBusinessEventWasExecuted(BusinessEvent.LOAN_UNDO_WRITTEN_OFF, - constructEntityMap(BusinessEntity.LOAN_TRANSACTION, writeOffTransaction)); + businessEventNotifierService.notifyBusinessEvent(new LoanUndoWrittenOffBusinessEvent(writeOffTransaction)); } return new CommandProcessingResultBuilder() // .withOfficeId(loan.getOfficeId()) // @@ -3147,8 +3022,6 @@ public class LoanWritePlatformServiceJpaRepositoryImpl implements LoanWritePlatf Loan loan = this.loanAssembler.assembleFrom(loanId); LocalDate recalculateFrom = loan.fetchInterestRecalculateFromDate(); AppUser currentUser = getAppUserIfPresent(); - this.businessEventNotifierService.notifyBusinessEventToBeExecuted(BusinessEvent.LOAN_INTEREST_RECALCULATION, - constructEntityMap(BusinessEntity.LOAN, loan)); final List existingTransactionIds = new ArrayList<>(); final List existingReversedTransactionIds = new ArrayList<>(); @@ -3169,9 +3042,8 @@ public class LoanWritePlatformServiceJpaRepositoryImpl implements LoanWritePlatf } } postJournalEntries(loan, existingTransactionIds, existingReversedTransactionIds); - this.loanAccountDomainService.recalculateAccruals(loan); - this.businessEventNotifierService.notifyBusinessEventWasExecuted(BusinessEvent.LOAN_INTEREST_RECALCULATION, - constructEntityMap(BusinessEntity.LOAN, loan)); + loanAccountDomainService.recalculateAccruals(loan); + businessEventNotifierService.notifyBusinessEvent(new LoanInterestRecalculationBusinessEvent(loan)); } @Override @@ -3309,12 +3181,6 @@ public class LoanWritePlatformServiceJpaRepositoryImpl implements LoanWritePlatf return user; } - private Map constructEntityMap(final BusinessEntity entityEvent, Object entity) { - Map map = new HashMap<>(1); - map.put(entityEvent, entity); - return map; - } - @Override @Transactional public CommandProcessingResult undoLastLoanDisbursal(Long loanId, JsonCommand command) { @@ -3324,8 +3190,6 @@ public class LoanWritePlatformServiceJpaRepositoryImpl implements LoanWritePlatf final LocalDate recalculateFromDate = loan.getLastRepaymentDate(); validateIsMultiDisbursalLoanAndDisbursedMoreThanOneTranche(loan); checkClientOrGroupActive(loan); - this.businessEventNotifierService.notifyBusinessEventToBeExecuted(BusinessEvent.LOAN_UNDO_LASTDISBURSAL, - constructEntityMap(BusinessEntity.LOAN, loan)); final MonetaryCurrency currency = loan.getCurrency(); final ApplicationCurrency applicationCurrency = this.applicationCurrencyRepository.findOneWithNotFoundDetection(currency); @@ -3349,9 +3213,8 @@ public class LoanWritePlatformServiceJpaRepositoryImpl implements LoanWritePlatf boolean isAccountTransfer = false; final Map accountingBridgeData = loan.deriveAccountingBridgeData(applicationCurrency.toData(), existingTransactionIds, existingReversedTransactionIds, isAccountTransfer); - this.journalEntryWritePlatformService.createJournalEntriesForLoan(accountingBridgeData); - this.businessEventNotifierService.notifyBusinessEventWasExecuted(BusinessEvent.LOAN_UNDO_LASTDISBURSAL, - constructEntityMap(BusinessEntity.LOAN, loan)); + journalEntryWritePlatformService.createJournalEntriesForLoan(accountingBridgeData); + businessEventNotifierService.notifyBusinessEvent(new LoanUndoLastDisbursalBusinessEvent(loan)); } return new CommandProcessingResultBuilder() // diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanproduct/service/LoanProductWritePlatformServiceJpaRepositoryImpl.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanproduct/service/LoanProductWritePlatformServiceJpaRepositoryImpl.java index 60f50d942..1b31bcaeb 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanproduct/service/LoanProductWritePlatformServiceJpaRepositoryImpl.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanproduct/service/LoanProductWritePlatformServiceJpaRepositoryImpl.java @@ -22,7 +22,6 @@ import com.google.gson.JsonArray; import com.google.gson.JsonObject; import java.time.LocalDate; import java.util.ArrayList; -import java.util.HashMap; import java.util.List; import java.util.Map; import javax.persistence.PersistenceException; @@ -35,8 +34,7 @@ import org.apache.fineract.infrastructure.core.exception.PlatformDataIntegrityEx import org.apache.fineract.infrastructure.entityaccess.domain.FineractEntityAccessType; import org.apache.fineract.infrastructure.entityaccess.service.FineractEntityAccessUtil; import org.apache.fineract.infrastructure.security.service.PlatformSecurityContext; -import org.apache.fineract.portfolio.businessevent.domain.BusinessEntity; -import org.apache.fineract.portfolio.businessevent.domain.BusinessEvent; +import org.apache.fineract.portfolio.businessevent.domain.loan.product.LoanProductCreateBusinessEvent; import org.apache.fineract.portfolio.businessevent.service.BusinessEventNotifierService; import org.apache.fineract.portfolio.charge.domain.Charge; import org.apache.fineract.portfolio.charge.domain.ChargeRepositoryWrapper; @@ -136,29 +134,25 @@ public class LoanProductWritePlatformServiceJpaRepositoryImpl implements LoanPro floatingRate = this.floatingRateRepository .findOneWithNotFoundDetection(command.longValueOfParameterNamed("floatingRatesId")); } - final LoanProduct loanproduct = LoanProduct.assembleFromJson(fund, loanTransactionProcessingStrategy, charges, command, + final LoanProduct loanProduct = LoanProduct.assembleFromJson(fund, loanTransactionProcessingStrategy, charges, command, this.aprCalculator, floatingRate, rates); - loanproduct.updateLoanProductInRelatedClasses(); + loanProduct.updateLoanProductInRelatedClasses(); - this.loanProductRepository.saveAndFlush(loanproduct); + this.loanProductRepository.saveAndFlush(loanProduct); // save accounting mappings - this.accountMappingWritePlatformService.createLoanProductToGLAccountMapping(loanproduct.getId(), command); + this.accountMappingWritePlatformService.createLoanProductToGLAccountMapping(loanProduct.getId(), command); // check if the office specific products are enabled. If yes, then // save this savings product against a specific office // i.e. this savings product is specific for this office. fineractEntityAccessUtil.checkConfigurationAndAddProductResrictionsForUserOffice( - FineractEntityAccessType.OFFICE_ACCESS_TO_LOAN_PRODUCTS, loanproduct.getId()); + FineractEntityAccessType.OFFICE_ACCESS_TO_LOAN_PRODUCTS, loanProduct.getId()); - this.businessEventNotifierService.notifyBusinessEventWasExecuted(BusinessEvent.LOAN_PRODUCT_CREATE, - constructEntityMap(BusinessEntity.LOAN_PRODUCT, loanproduct)); - - this.businessEventNotifierService.notifyBusinessEventWasExecuted(BusinessEvent.LOAN_PRODUCT_CREATE, - constructEntityMap(BusinessEntity.LOAN_PRODUCT, loanproduct)); + businessEventNotifierService.notifyBusinessEvent(new LoanProductCreateBusinessEvent(loanProduct)); return new CommandProcessingResultBuilder() // .withCommandId(command.commandId()) // - .withEntityId(loanproduct.getId()) // + .withEntityId(loanProduct.getId()) // .build(); } catch (final JpaSystemException | DataIntegrityViolationException dve) { @@ -381,10 +375,4 @@ public class LoanProductWritePlatformServiceJpaRepositoryImpl implements LoanPro private void logAsErrorUnexpectedDataIntegrityException(final Exception dve) { LOG.error("Error occured.", dve); } - - private Map constructEntityMap(final BusinessEntity entityEvent, Object entity) { - Map map = new HashMap<>(1); - map.put(entityEvent, entity); - return map; - } } diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/SavingsAccountDomainServiceJpa.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/SavingsAccountDomainServiceJpa.java index 4c4af0091..d25b94566 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/SavingsAccountDomainServiceJpa.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/SavingsAccountDomainServiceJpa.java @@ -24,7 +24,6 @@ import java.time.LocalDate; import java.time.format.DateTimeFormatter; import java.util.ArrayList; import java.util.Date; -import java.util.HashMap; import java.util.HashSet; import java.util.List; import java.util.Map; @@ -38,8 +37,8 @@ import org.apache.fineract.organisation.monetary.domain.ApplicationCurrencyRepos import org.apache.fineract.organisation.monetary.domain.MonetaryCurrency; import org.apache.fineract.organisation.monetary.domain.Money; import org.apache.fineract.organisation.monetary.domain.MoneyHelper; -import org.apache.fineract.portfolio.businessevent.domain.BusinessEntity; -import org.apache.fineract.portfolio.businessevent.domain.BusinessEvent; +import org.apache.fineract.portfolio.businessevent.domain.savings.transaction.SavingsDepositBusinessEvent; +import org.apache.fineract.portfolio.businessevent.domain.savings.transaction.SavingsWithdrawalBusinessEvent; import org.apache.fineract.portfolio.businessevent.service.BusinessEventNotifierService; import org.apache.fineract.portfolio.paymentdetail.domain.PaymentDetail; import org.apache.fineract.portfolio.savings.SavingsAccountTransactionType; @@ -139,8 +138,7 @@ public class SavingsAccountDomainServiceJpa implements SavingsAccountDomainServi postJournalEntries(account, existingTransactionIds, existingReversedTransactionIds, transactionBooleanValues.isAccountTransfer(), backdatedTxnsAllowedTill); - this.businessEventNotifierService.notifyBusinessEventWasExecuted(BusinessEvent.SAVINGS_WITHDRAWAL, - constructEntityMap(BusinessEntity.SAVINGS_TRANSACTION, withdrawal)); + businessEventNotifierService.notifyBusinessEvent(new SavingsWithdrawalBusinessEvent(withdrawal)); return withdrawal; } @@ -215,8 +213,7 @@ public class SavingsAccountDomainServiceJpa implements SavingsAccountDomainServi this.savingsAccountRepository.saveAndFlush(account); postJournalEntries(account, existingTransactionIds, existingReversedTransactionIds, isAccountTransfer, backdatedTxnsAllowedTill); - this.businessEventNotifierService.notifyBusinessEventWasExecuted(BusinessEvent.SAVINGS_DEPOSIT, - constructEntityMap(BusinessEntity.SAVINGS_TRANSACTION, deposit)); + businessEventNotifierService.notifyBusinessEvent(new SavingsDepositBusinessEvent(deposit)); return deposit; } @@ -285,12 +282,6 @@ public class SavingsAccountDomainServiceJpa implements SavingsAccountDomainServi postJournalEntries(account, existingTransactionIds, existingReversedTransactionIds, isAccountTransfer, backdatedTxnsAllowedTill); } - private Map constructEntityMap(final BusinessEntity entityEvent, Object entity) { - Map map = new HashMap<>(1); - map.put(entityEvent, entity); - return map; - } - @Override public SavingsAccountTransaction handleReversal(SavingsAccount account, SavingsAccountTransaction savingsAccountTransaction, boolean backdatedTxnsAllowedTill) { diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/service/DepositApplicationProcessWritePlatformServiceJpaRepositoryImpl.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/service/DepositApplicationProcessWritePlatformServiceJpaRepositoryImpl.java index cac1ca356..2cf66788d 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/service/DepositApplicationProcessWritePlatformServiceJpaRepositoryImpl.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/service/DepositApplicationProcessWritePlatformServiceJpaRepositoryImpl.java @@ -27,7 +27,6 @@ import java.math.MathContext; import java.time.LocalDate; import java.time.temporal.ChronoField; import java.util.ArrayList; -import java.util.HashMap; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; @@ -55,8 +54,8 @@ import org.apache.fineract.organisation.staff.domain.StaffRepositoryWrapper; import org.apache.fineract.portfolio.account.domain.AccountAssociationType; import org.apache.fineract.portfolio.account.domain.AccountAssociations; import org.apache.fineract.portfolio.account.domain.AccountAssociationsRepository; -import org.apache.fineract.portfolio.businessevent.domain.BusinessEntity; -import org.apache.fineract.portfolio.businessevent.domain.BusinessEvent; +import org.apache.fineract.portfolio.businessevent.domain.deposit.FixedDepositAccountCreateBusinessEvent; +import org.apache.fineract.portfolio.businessevent.domain.deposit.RecurringDepositAccountCreateBusinessEvent; import org.apache.fineract.portfolio.businessevent.service.BusinessEventNotifierService; import org.apache.fineract.portfolio.calendar.domain.Calendar; import org.apache.fineract.portfolio.calendar.domain.CalendarEntityType; @@ -231,11 +230,7 @@ public class DepositApplicationProcessWritePlatformServiceJpaRepositoryImpl impl } final Long savingsId = account.getId(); - this.businessEventNotifierService.notifyBusinessEventWasExecuted(BusinessEvent.FIXED_DEPOSIT_ACCOUNT_CREATE, - constructEntityMap(BusinessEntity.DEPOSIT_ACCOUNT, account)); - - this.businessEventNotifierService.notifyBusinessEventWasExecuted(BusinessEvent.FIXED_DEPOSIT_ACCOUNT_CREATE, - constructEntityMap(BusinessEntity.DEPOSIT_ACCOUNT, account)); + businessEventNotifierService.notifyBusinessEvent(new FixedDepositAccountCreateBusinessEvent(account)); return new CommandProcessingResultBuilder() // .withCommandId(command.commandId()) // @@ -293,12 +288,8 @@ public class DepositApplicationProcessWritePlatformServiceJpaRepositoryImpl impl account.updateMaturityDateAndAmount(mc, isPreMatureClosure, isSavingsInterestPostingAtCurrentPeriodEnd, financialYearBeginningMonth); account.validateApplicableInterestRate(); - this.savingAccountRepository.save(account); - this.businessEventNotifierService.notifyBusinessEventWasExecuted(BusinessEvent.RECURRING_DEPOSIT_ACCOUNT_CREATE, - constructEntityMap(BusinessEntity.DEPOSIT_ACCOUNT, account)); - - this.businessEventNotifierService.notifyBusinessEventWasExecuted(BusinessEvent.RECURRING_DEPOSIT_ACCOUNT_CREATE, - constructEntityMap(BusinessEntity.DEPOSIT_ACCOUNT, account)); + savingAccountRepository.save(account); + businessEventNotifierService.notifyBusinessEvent(new RecurringDepositAccountCreateBusinessEvent(account)); return new CommandProcessingResultBuilder() // .withCommandId(command.commandId()) // @@ -792,10 +783,4 @@ public class DepositApplicationProcessWritePlatformServiceJpaRepositoryImpl impl } } } - - private Map constructEntityMap(final BusinessEntity entityEvent, Object entity) { - Map map = new HashMap<>(1); - map.put(entityEvent, entity); - return map; - } } diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/service/SavingsAccountWritePlatformServiceJpaRepositoryImpl.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/service/SavingsAccountWritePlatformServiceJpaRepositoryImpl.java index 8bf24db6c..1bd5291e4 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/service/SavingsAccountWritePlatformServiceJpaRepositoryImpl.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/service/SavingsAccountWritePlatformServiceJpaRepositoryImpl.java @@ -79,8 +79,9 @@ import org.apache.fineract.portfolio.account.domain.StandingInstructionRepositor import org.apache.fineract.portfolio.account.domain.StandingInstructionStatus; import org.apache.fineract.portfolio.account.service.AccountAssociationsReadPlatformService; import org.apache.fineract.portfolio.account.service.AccountTransfersReadPlatformService; -import org.apache.fineract.portfolio.businessevent.domain.BusinessEntity; -import org.apache.fineract.portfolio.businessevent.domain.BusinessEvent; +import org.apache.fineract.portfolio.businessevent.domain.savings.SavingsActivateBusinessEvent; +import org.apache.fineract.portfolio.businessevent.domain.savings.SavingsCloseBusinessEvent; +import org.apache.fineract.portfolio.businessevent.domain.savings.SavingsPostInterestBusinessEvent; import org.apache.fineract.portfolio.businessevent.service.BusinessEventNotifierService; import org.apache.fineract.portfolio.charge.domain.Charge; import org.apache.fineract.portfolio.charge.domain.ChargeRepositoryWrapper; @@ -272,8 +273,7 @@ public class SavingsAccountWritePlatformServiceJpaRepositoryImpl implements Savi } postJournalEntries(account, existingTransactionIds, existingReversedTransactionIds, false); - this.businessEventNotifierService.notifyBusinessEventWasExecuted(BusinessEvent.SAVINGS_ACTIVATE, - constructEntityMap(BusinessEntity.SAVING, account)); + businessEventNotifierService.notifyBusinessEvent(new SavingsActivateBusinessEvent(account)); return new CommandProcessingResultBuilder() // .withEntityId(savingsId) // @@ -577,8 +577,7 @@ public class SavingsAccountWritePlatformServiceJpaRepositoryImpl implements Savi } postInterest(account, postInterestAs, transactionDate, backdatedTxnsAllowedTill); - this.businessEventNotifierService.notifyBusinessEventWasExecuted(BusinessEvent.SAVINGS_POST_INTEREST, - constructEntityMap(BusinessEntity.SAVING, account)); + businessEventNotifierService.notifyBusinessEvent(new SavingsPostInterestBusinessEvent(account)); return new CommandProcessingResultBuilder() // .withEntityId(savingsId) // .withOfficeId(account.officeId()) // @@ -1032,10 +1031,9 @@ public class SavingsAccountWritePlatformServiceJpaRepositoryImpl implements Savi } - this.businessEventNotifierService.notifyBusinessEventWasExecuted(BusinessEvent.SAVINGS_CLOSE, - constructEntityMap(BusinessEntity.SAVING, account)); + businessEventNotifierService.notifyBusinessEvent(new SavingsCloseBusinessEvent(account)); // disable all standing orders linked to the savings account - this.disableStandingInstructionsLinkedToClosedSavings(account); + disableStandingInstructionsLinkedToClosedSavings(account); return new CommandProcessingResultBuilder() // .withEntityId(savingsId) // .withOfficeId(account.officeId()) // @@ -1760,12 +1758,6 @@ public class SavingsAccountWritePlatformServiceJpaRepositoryImpl implements Savi } } - private Map constructEntityMap(final BusinessEntity entityEvent, Object entity) { - Map map = new HashMap<>(1); - map.put(entityEvent, entity); - return map; - } - @Override public CommandProcessingResult blockAccount(final Long savingsId, final JsonCommand command) { diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/service/SavingsApplicationProcessWritePlatformServiceJpaRepositoryImpl.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/service/SavingsApplicationProcessWritePlatformServiceJpaRepositoryImpl.java index bce61ec1a..78ba63d97 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/service/SavingsApplicationProcessWritePlatformServiceJpaRepositoryImpl.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/service/SavingsApplicationProcessWritePlatformServiceJpaRepositoryImpl.java @@ -26,13 +26,14 @@ import java.math.BigDecimal; import java.time.ZoneId; import java.util.ArrayList; import java.util.Date; -import java.util.HashMap; import java.util.HashSet; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import java.util.Set; import javax.persistence.PersistenceException; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.exception.ExceptionUtils; import org.apache.fineract.commands.domain.CommandWrapper; @@ -56,8 +57,9 @@ import org.apache.fineract.infrastructure.security.service.PlatformSecurityConte import org.apache.fineract.organisation.monetary.domain.Money; import org.apache.fineract.organisation.staff.domain.Staff; import org.apache.fineract.organisation.staff.domain.StaffRepositoryWrapper; -import org.apache.fineract.portfolio.businessevent.domain.BusinessEntity; -import org.apache.fineract.portfolio.businessevent.domain.BusinessEvent; +import org.apache.fineract.portfolio.businessevent.domain.savings.SavingsApproveBusinessEvent; +import org.apache.fineract.portfolio.businessevent.domain.savings.SavingsCreateBusinessEvent; +import org.apache.fineract.portfolio.businessevent.domain.savings.SavingsRejectBusinessEvent; import org.apache.fineract.portfolio.businessevent.service.BusinessEventNotifierService; import org.apache.fineract.portfolio.client.domain.AccountNumberGenerator; import org.apache.fineract.portfolio.client.domain.Client; @@ -87,18 +89,15 @@ import org.apache.fineract.portfolio.savings.domain.SavingsProduct; import org.apache.fineract.portfolio.savings.domain.SavingsProductRepository; import org.apache.fineract.portfolio.savings.exception.SavingsProductNotFoundException; import org.apache.fineract.useradministration.domain.AppUser; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.dao.DataAccessException; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @Service +@Slf4j +@RequiredArgsConstructor public class SavingsApplicationProcessWritePlatformServiceJpaRepositoryImpl implements SavingsApplicationProcessWritePlatformService { - private static final Logger LOG = LoggerFactory.getLogger(SavingsApplicationProcessWritePlatformServiceJpaRepositoryImpl.class); - private final PlatformSecurityContext context; private final SavingsAccountRepositoryWrapper savingAccountRepository; private final SavingsAccountAssembler savingAccountAssembler; @@ -121,45 +120,6 @@ public class SavingsApplicationProcessWritePlatformServiceJpaRepositoryImpl impl private final GroupRepositoryWrapper groupRepositoryWrapper; private final GroupSavingsIndividualMonitoringWritePlatformService gsimWritePlatformService; - @Autowired - public SavingsApplicationProcessWritePlatformServiceJpaRepositoryImpl(final PlatformSecurityContext context, - final SavingsAccountRepositoryWrapper savingAccountRepository, final SavingsAccountAssembler savingAccountAssembler, - final SavingsAccountDataValidator savingsAccountDataValidator, final AccountNumberGenerator accountNumberGenerator, - final ClientRepositoryWrapper clientRepository, final GroupRepository groupRepository, - final SavingsProductRepository savingsProductRepository, final NoteRepository noteRepository, - final StaffRepositoryWrapper staffRepository, - final SavingsAccountApplicationTransitionApiJsonValidator savingsAccountApplicationTransitionApiJsonValidator, - final SavingsAccountChargeAssembler savingsAccountChargeAssembler, final CommandProcessingService commandProcessingService, - final SavingsAccountDomainService savingsAccountDomainService, - final SavingsAccountWritePlatformService savingsAccountWritePlatformService, - final AccountNumberFormatRepositoryWrapper accountNumberFormatRepository, - final BusinessEventNotifierService businessEventNotifierService, - final EntityDatatableChecksWritePlatformService entityDatatableChecksWritePlatformService, final GSIMRepositoy gsimRepository, - final GroupRepositoryWrapper groupRepositoryWrapper, - final GroupSavingsIndividualMonitoringWritePlatformService gsimWritePlatformService) { - this.context = context; - this.savingAccountRepository = savingAccountRepository; - this.savingAccountAssembler = savingAccountAssembler; - this.accountNumberGenerator = accountNumberGenerator; - this.savingsAccountDataValidator = savingsAccountDataValidator; - this.clientRepository = clientRepository; - this.groupRepository = groupRepository; - this.savingsProductRepository = savingsProductRepository; - this.noteRepository = noteRepository; - this.staffRepository = staffRepository; - this.savingsAccountApplicationTransitionApiJsonValidator = savingsAccountApplicationTransitionApiJsonValidator; - this.savingsAccountChargeAssembler = savingsAccountChargeAssembler; - this.commandProcessingService = commandProcessingService; - this.savingsAccountDomainService = savingsAccountDomainService; - this.accountNumberFormatRepository = accountNumberFormatRepository; - this.savingsAccountWritePlatformService = savingsAccountWritePlatformService; - this.businessEventNotifierService = businessEventNotifierService; - this.entityDatatableChecksWritePlatformService = entityDatatableChecksWritePlatformService; - this.gsimRepository = gsimRepository; - this.groupRepositoryWrapper = groupRepositoryWrapper; - this.gsimWritePlatformService = gsimWritePlatformService; - } - /* * Guaranteed to throw an exception no matter what the data integrity issue is. */ @@ -182,7 +142,7 @@ public class SavingsApplicationProcessWritePlatformServiceJpaRepositoryImpl impl } errorCodeBuilder.append(".unknown.data.integrity.issue"); - LOG.error("Error occured.", dve); + log.error("Error occured.", dve); throw new PlatformDataIntegrityException(errorCodeBuilder.toString(), "Unknown data integrity issue with savings account."); } @@ -305,8 +265,7 @@ public class SavingsApplicationProcessWritePlatformServiceJpaRepositoryImpl impl this.entityDatatableChecksWritePlatformService.runTheCheckForProduct(savingsId, EntityTables.SAVING.getName(), StatusEnum.CREATE.getCode().longValue(), EntityTables.SAVING.getForeignKeyColumnNameOnDatatable(), account.productId()); - this.businessEventNotifierService.notifyBusinessEventWasExecuted(BusinessEvent.SAVINGS_CREATE, - constructEntityMap(BusinessEntity.SAVING, account)); + businessEventNotifierService.notifyBusinessEvent(new SavingsCreateBusinessEvent(account)); return new CommandProcessingResultBuilder() // .withCommandId(command.commandId()) // @@ -534,8 +493,7 @@ public class SavingsApplicationProcessWritePlatformServiceJpaRepositoryImpl impl } } - this.businessEventNotifierService.notifyBusinessEventWasExecuted(BusinessEvent.SAVINGS_APPROVE, - constructEntityMap(BusinessEntity.SAVING, savingsAccount)); + businessEventNotifierService.notifyBusinessEvent(new SavingsApproveBusinessEvent(savingsAccount)); return new CommandProcessingResultBuilder() // .withCommandId(command.commandId()) // @@ -657,8 +615,7 @@ public class SavingsApplicationProcessWritePlatformServiceJpaRepositoryImpl impl this.noteRepository.save(note); } } - this.businessEventNotifierService.notifyBusinessEventWasExecuted(BusinessEvent.SAVINGS_REJECT, - constructEntityMap(BusinessEntity.SAVING, savingsAccount)); + businessEventNotifierService.notifyBusinessEvent(new SavingsRejectBusinessEvent(savingsAccount)); return new CommandProcessingResultBuilder() // .withCommandId(command.commandId()) // .withEntityId(savingsId) // @@ -759,10 +716,4 @@ public class SavingsApplicationProcessWritePlatformServiceJpaRepositoryImpl impl .setRollbackTransaction(rollbackTransaction)// .build(); } - - private Map constructEntityMap(final BusinessEntity entityEvent, Object entity) { - Map map = new HashMap<>(1); - map.put(entityEvent, entity); - return map; - } } diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/shareaccounts/service/ShareAccountWritePlatformServiceJpaRepositoryImpl.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/shareaccounts/service/ShareAccountWritePlatformServiceJpaRepositoryImpl.java index 4826b4327..622abd6c4 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/shareaccounts/service/ShareAccountWritePlatformServiceJpaRepositoryImpl.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/shareaccounts/service/ShareAccountWritePlatformServiceJpaRepositoryImpl.java @@ -42,8 +42,8 @@ import org.apache.fineract.infrastructure.core.service.DateUtils; import org.apache.fineract.organisation.monetary.data.CurrencyData; import org.apache.fineract.organisation.monetary.domain.MonetaryCurrency; import org.apache.fineract.portfolio.accounts.constants.ShareAccountApiConstants; -import org.apache.fineract.portfolio.businessevent.domain.BusinessEntity; -import org.apache.fineract.portfolio.businessevent.domain.BusinessEvent; +import org.apache.fineract.portfolio.businessevent.domain.share.ShareAccountApproveBusinessEvent; +import org.apache.fineract.portfolio.businessevent.domain.share.ShareAccountCreateBusinessEvent; import org.apache.fineract.portfolio.businessevent.service.BusinessEventNotifierService; import org.apache.fineract.portfolio.client.domain.AccountNumberGenerator; import org.apache.fineract.portfolio.note.domain.Note; @@ -105,8 +105,7 @@ public class ShareAccountWritePlatformServiceJpaRepositoryImpl implements ShareA journalEntryWritePlatformService.createJournalEntriesForShares( populateJournalEntries(account, account.getPendingForApprovalSharePurchaseTransactions())); - this.businessEventNotifierService.notifyBusinessEventWasExecuted(BusinessEvent.SHARE_ACCOUNT_CREATE, - constructEntityMap(BusinessEntity.SHARE_ACCOUNT, account)); + businessEventNotifierService.notifyBusinessEvent(new ShareAccountCreateBusinessEvent(account)); return new CommandProcessingResultBuilder() // .withCommandId(jsonCommand.commandId()) // @@ -282,8 +281,7 @@ public class ShareAccountWritePlatformServiceJpaRepositoryImpl implements ShareA this.journalEntryWritePlatformService.createJournalEntriesForShares(populateJournalEntries(account, journalTransactions)); - this.businessEventNotifierService.notifyBusinessEventWasExecuted(BusinessEvent.SHARE_ACCOUNT_APPROVE, - constructEntityMap(BusinessEntity.SHARE_ACCOUNT, account)); + businessEventNotifierService.notifyBusinessEvent(new ShareAccountApproveBusinessEvent(account)); return new CommandProcessingResultBuilder() // .withCommandId(jsonCommand.commandId()) // @@ -529,10 +527,4 @@ public class ShareAccountWritePlatformServiceJpaRepositoryImpl implements ShareA throw new PlatformDataIntegrityException("error.msg.shareaccount.unknown.data.integrity.issue", "Unknown data integrity issue with resource."); } - - private Map constructEntityMap(final BusinessEntity entityEvent, Object entity) { - Map map = new HashMap<>(1); - map.put(entityEvent, entity); - return map; - } } diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/shareproducts/service/ShareProductWritePlatformServiceJpaRepositoryImpl.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/shareproducts/service/ShareProductWritePlatformServiceJpaRepositoryImpl.java index df35435a3..1edd2cf3f 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/shareproducts/service/ShareProductWritePlatformServiceJpaRepositoryImpl.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/shareproducts/service/ShareProductWritePlatformServiceJpaRepositoryImpl.java @@ -21,9 +21,10 @@ package org.apache.fineract.portfolio.shareproducts.service; import com.google.gson.JsonElement; import java.math.BigDecimal; import java.time.LocalDate; -import java.util.HashMap; import java.util.Map; import javax.persistence.PersistenceException; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.exception.ExceptionUtils; import org.apache.fineract.accounting.producttoaccountmapping.service.ProductToGLAccountMappingWritePlatformService; import org.apache.fineract.infrastructure.core.api.JsonCommand; @@ -31,8 +32,7 @@ import org.apache.fineract.infrastructure.core.data.CommandProcessingResult; import org.apache.fineract.infrastructure.core.data.CommandProcessingResultBuilder; import org.apache.fineract.infrastructure.core.exception.PlatformDataIntegrityException; import org.apache.fineract.infrastructure.core.serialization.FromJsonHelper; -import org.apache.fineract.portfolio.businessevent.domain.BusinessEntity; -import org.apache.fineract.portfolio.businessevent.domain.BusinessEvent; +import org.apache.fineract.portfolio.businessevent.domain.share.ShareProductDividentsCreateBusinessEvent; import org.apache.fineract.portfolio.businessevent.service.BusinessEventNotifierService; import org.apache.fineract.portfolio.shareproducts.constants.ShareProductApiConstants; import org.apache.fineract.portfolio.shareproducts.domain.ShareProduct; @@ -41,18 +41,15 @@ import org.apache.fineract.portfolio.shareproducts.domain.ShareProductDividentPa import org.apache.fineract.portfolio.shareproducts.domain.ShareProductRepositoryWrapper; import org.apache.fineract.portfolio.shareproducts.exception.DividentProcessingException; import org.apache.fineract.portfolio.shareproducts.serialization.ShareProductDataSerializer; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.dao.DataIntegrityViolationException; import org.springframework.orm.jpa.JpaSystemException; import org.springframework.stereotype.Service; @Service +@Slf4j +@RequiredArgsConstructor public class ShareProductWritePlatformServiceJpaRepositoryImpl implements ShareProductWritePlatformService { - private static final Logger LOG = LoggerFactory.getLogger(ShareProductWritePlatformServiceJpaRepositoryImpl.class); - private final ShareProductRepositoryWrapper repository; private final ShareProductDataSerializer serializer; private final FromJsonHelper fromApiJsonHelper; @@ -61,22 +58,6 @@ public class ShareProductWritePlatformServiceJpaRepositoryImpl implements ShareP private final ProductToGLAccountMappingWritePlatformService accountMappingWritePlatformService; private final BusinessEventNotifierService businessEventNotifierService; - @Autowired - public ShareProductWritePlatformServiceJpaRepositoryImpl(final ShareProductRepositoryWrapper repository, - final ShareProductDataSerializer serializer, final FromJsonHelper fromApiJsonHelper, - final ShareProductDividentPayOutDetailsRepositoryWrapper shareProductDividentPayOutDetailsRepositor, - final ShareProductDividendAssembler shareProductDividendAssembler, - final ProductToGLAccountMappingWritePlatformService accountMappingWritePlatformService, - final BusinessEventNotifierService businessEventNotifierService) { - this.repository = repository; - this.serializer = serializer; - this.fromApiJsonHelper = fromApiJsonHelper; - this.shareProductDividentPayOutDetailsRepository = shareProductDividentPayOutDetailsRepositor; - this.shareProductDividendAssembler = shareProductDividendAssembler; - this.accountMappingWritePlatformService = accountMappingWritePlatformService; - this.businessEventNotifierService = businessEventNotifierService; - } - @Override public CommandProcessingResult createShareProduct(JsonCommand jsonCommand) { try { @@ -150,8 +131,7 @@ public class ShareProductWritePlatformServiceJpaRepositoryImpl implements ShareP } this.shareProductDividentPayOutDetailsRepository.save(dividendPayOutDetails); - this.businessEventNotifierService.notifyBusinessEventWasExecuted(BusinessEvent.SHARE_PRODUCT_DIVIDENDS_CREATE, - constructEntityMap(BusinessEntity.SHARE_PRODUCT, productId)); + businessEventNotifierService.notifyBusinessEvent(new ShareProductDividentsCreateBusinessEvent(productId)); return new CommandProcessingResultBuilder() // .withCommandId(jsonCommand.commandId()) // @@ -202,7 +182,7 @@ public class ShareProductWritePlatformServiceJpaRepositoryImpl implements ShareP } private void handleDataIntegrityIssues(final Exception e) { - LOG.error("Unknown data integrity issue with resource", e); + log.error("Unknown data integrity issue with resource", e); throw new PlatformDataIntegrityException("error.msg.shareproduct.unknown.data.integrity.issue", "Unknown data integrity issue with resource."); } @@ -215,15 +195,8 @@ public class ShareProductWritePlatformServiceJpaRepositoryImpl implements ShareP "Share Product with name `" + name + "` already exists", "name", name); } - LOG.error("Unknown data integrity issue with resource", dve); + log.error("Unknown data integrity issue with resource", dve); throw new PlatformDataIntegrityException("error.msg.shareproduct.unknown.data.integrity.issue", "Unknown data integrity issue with resource."); } - - private Map constructEntityMap(final BusinessEntity entityEvent, Object entity) { - Map map = new HashMap<>(1); - map.put(entityEvent, entity); - return map; - } - }