FINERACT-1905-Charge-submitted-date-Accrual-entry-reverse-issue

This commit is contained in:
Ruchi Dhamankar
2023-05-22 11:32:39 +02:00
committed by Adam Saghy
parent f045752d7d
commit c18fead7f3
3 changed files with 110 additions and 5 deletions
@@ -42,6 +42,10 @@ public class TemporaryConfigurationServiceContainer implements InitializingBean
return TemporaryConfigurationServiceContainer.STATIC_REF_CONFIGURATION_SERVICE.isExternalIdAutoGenerationEnabled();
}
public static String getAccrualDateConfigForCharge() {
return TemporaryConfigurationServiceContainer.STATIC_REF_CONFIGURATION_SERVICE.getAccrualDateConfigForCharge();
}
@SuppressFBWarnings("ST_WRITE_TO_STATIC_FROM_INSTANCE_METHOD")
@Override
public void afterPropertiesSet() throws Exception {
@@ -1322,17 +1322,21 @@ public class Loan extends AbstractAuditableWithUTCDateTimeCustom {
private void applyPeriodicAccruals(final Collection<LoanTransaction> accruals) {
List<LoanRepaymentScheduleInstallment> installments = getRepaymentScheduleInstallments();
boolean isBasedOnSubmittedOnDate = TemporaryConfigurationServiceContainer.getAccrualDateConfigForCharge()
.equalsIgnoreCase("submitted-date");
for (LoanRepaymentScheduleInstallment installment : installments) {
Money interest = Money.zero(getCurrency());
Money fee = Money.zero(getCurrency());
Money penality = Money.zero(getCurrency());
for (LoanTransaction loanTransaction : accruals) {
LocalDate transactionDateForRange = isBasedOnSubmittedOnDate
? loanTransaction.getLoanChargesPaid().stream().findFirst().get().getLoanCharge().getDueDate()
: loanTransaction.getTransactionDate();
boolean isInRange = installment.isFirstPeriod()
? !loanTransaction.getTransactionDate().isBefore(installment.getFromDate())
&& !loanTransaction.getTransactionDate().isAfter(installment.getDueDate())
: loanTransaction.getTransactionDate().isAfter(installment.getFromDate())
&& !loanTransaction.getTransactionDate().isAfter(installment.getDueDate());
? !transactionDateForRange.isBefore(installment.getFromDate())
&& !transactionDateForRange.isAfter(installment.getDueDate())
: transactionDateForRange.isAfter(installment.getFromDate())
&& !transactionDateForRange.isAfter(installment.getDueDate());
if (isInRange) {
interest = interest.plus(loanTransaction.getInterestPortion(getCurrency()));
fee = fee.plus(loanTransaction.getFeeChargesPortion(getCurrency()));