josehernandezfintecheandomx commented on code in PR #2668:
URL: https://github.com/apache/fineract/pull/2668#discussion_r1005805936
##########
fineract-provider/src/main/java/org/apache/fineract/portfolio/delinquency/service/DelinquencyWritePlatformServiceImpl.java:
##########
@@ -134,8 +146,72 @@ public CommandProcessingResult
deleteDelinquencyBucket(Long delinquencyBucketId,
"Data integrity issue with resource: " +
delinquencyBucket.getId());
}
repositoryBucket.delete(delinquencyBucket);
+ return new
CommandProcessingResultBuilder().withCommandId(command.commandId()).withEntityId(delinquencyBucket.getId()).build();
}
- return new
CommandProcessingResultBuilder().withCommandId(command.commandId()).withEntityId(delinquencyBucket.getId()).build();
+ return new
CommandProcessingResultBuilder().withCommandId(command.commandId()).withEntityId(delinquencyBucketId).build();
+ }
+
+ @Override
+ public LoanScheduleDelinquencyData
calculateDelinquencyData(LoanScheduleDelinquencyData
loanScheduleDelinquencyData) {
+ final LocalDate businessDate = DateUtils.getBusinessLocalDate();
+ Loan loan = loanScheduleDelinquencyData.getLoan();
+ if (loan == null) {
+ loan =
this.loanRepository.findOneWithNotFoundDetection(loanScheduleDelinquencyData.getLoanId());
+ }
+
+ final Integer graceOnArrearAgeing =
loan.getLoanProduct().getLoanProductRelatedDetail().getGraceOnArrearsAgeing();
+ final LocalDate overdueSinceDate = getOverdueSinceDate(loan,
businessDate, graceOnArrearAgeing);
+ final Long overdueDays = calculateOverdueDays(businessDate,
overdueSinceDate);
+ return new LoanScheduleDelinquencyData(loan.getId(),
loan.getLoanProduct().getId(), overdueSinceDate, overdueDays, loan);
+ }
+
+ private LocalDate getOverdueSinceDate(final Loan loan, final LocalDate
businessDate, final Integer graceOnArrearAgeing) {
+ final LoanRepaymentScheduleInstallment loanRepaymentSchedule =
this.loanRepaymentScheduleInstallmentRepository
+
.findFirstByLoanAndDueDateLessThanEqualAndObligationsMetOnDateOrderByDueDate(loan,
businessDate, null);
+
+ LocalDate overdueSinceDate = null;
+ final MonetaryCurrency loanCurrency = loan.getCurrency();
+ if (loanRepaymentSchedule != null) {
+ // Default Due date
+ overdueSinceDate = loanRepaymentSchedule.getDueDate();
+ // Include grace days If It's defined
+ if (overdueSinceDate != null && graceOnArrearAgeing != null) {
+ overdueSinceDate =
overdueSinceDate.plusDays(graceOnArrearAgeing.longValue());
+ }
+
+ // If there is some Loan Transaction Chargeback
+ List<LoanTransaction> loanTransactions =
this.loanTransactionRepository
+
.findByLoanAndTypeOfAndDateOfLessThanEqualAndReversedOrderByDateOfDesc(loan,
LoanTransactionType.CHARGEBACK.getValue(),
+ overdueSinceDate, false);
+ for (LoanTransaction loanTransaction : loanTransactions) {
+ final LoanTransactionToRepaymentScheduleMapping
transactionMapping = this.loanTransactionRepaymentScheduleMappingRepository
+ .findByLoanTransaction(loanTransaction);
+ if
(!transactionMapping.getLoanRepaymentScheduleInstallment().isPrincipalCompleted(loanCurrency))
{
+ overdueSinceDate = loanTransaction.getTransactionDate();
+ break;
+ }
+ }
+ } else {
+ // If there is some Loan Transaction Chargeback
+ final LoanTransaction loanTransaction =
this.loanTransactionRepository
+
.findFirstByLoanAndTypeOfAndReversedOrderByDateOfDesc(loan,
LoanTransactionType.CHARGEBACK.getValue(), false);
Review Comment:
Done
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]