@@ -458,7 +458,7 @@
|
||||
<tr class="alt">
|
||||
<td></td>
|
||||
<td>loans/{loanId}/charges/{loanChargeId}</td>
|
||||
<td><a href="#loans_charges_pay">Pay Loan Charge</a></td>
|
||||
<td><a href="#loans_charges_pay">Pay Loan Charge from Linked Savings</a></td>
|
||||
<td><a href="#loans_charges_retrieve">Retrieve a Loan Charge</a></td>
|
||||
<td><a href="#loans_charges_update">Modify a Loan Charge</a></td>
|
||||
<td><a href="#loans_charges_delete">Delete a Loan Charge</a></td>
|
||||
@@ -19145,7 +19145,7 @@ GET https://DomainName/api/v1/search?query=000000111
|
||||
<tr>
|
||||
<td></td>
|
||||
<td>loans/{loanId}/charges/{loanChargeId}</td>
|
||||
<td><a href="#loans_charges_pay">Pay a Loan Charge</a></td>
|
||||
<td><a href="#loans_charges_pay">Pay Loan Charge from Linked Savings</a></td>
|
||||
<td><a href="#loans_charges_retrieve">Retrieve a Loan Charge</a></td>
|
||||
<td><a href="#loans_charges_update">Modify a Loan Charge</a></td>
|
||||
<td><a href="#loans_charges_delete">Delete a Loan Charge</a></td>
|
||||
|
||||
+11
-8
@@ -1452,25 +1452,28 @@ public class Loan extends AbstractPersistable<Long> {
|
||||
* "APPLY Charge" transactions are created for all other fees (
|
||||
* which are created during disbursal but not repaid)
|
||||
**/
|
||||
Money disbursentMoney = Money.zero(getCurrency());
|
||||
final LoanTransaction chargesPayment = LoanTransaction.repaymentAtDisbursement(this.getOffice(),
|
||||
disbursentMoney, null, disbursedOn, txnExternalId);
|
||||
for (final LoanCharge charge : setOfLoanCharges()) {
|
||||
if (charge.isDueAtDisbursement()) {
|
||||
if (totalFeeChargesDueAtDisbursement.isGreaterThanZero() && !charge.getChargePaymentMode().isPaymentModeAccountTransfer()) {
|
||||
final LoanTransaction chargesPayment = LoanTransaction.repaymentAtDisbursement(this.getOffice(),
|
||||
charge.getAmount(getCurrency()), null, disbursedOn, txnExternalId);
|
||||
final Money zero = Money.zero(getCurrency());
|
||||
chargesPayment.updateComponents(zero, zero, charge.getAmount(getCurrency()), zero);
|
||||
chargesPayment.updateLoan(this);
|
||||
this.loanTransactions.add(chargesPayment);
|
||||
|
||||
charge.markAsFullyPaid();
|
||||
// Add "Loan Charge Paid By" details to this transaction
|
||||
final LoanChargePaidBy loanChargePaidBy = new LoanChargePaidBy(chargesPayment, charge, charge.amount());
|
||||
chargesPayment.getLoanChargesPaid().add(loanChargePaidBy);
|
||||
disbursentMoney = disbursentMoney.plus(charge.amount());
|
||||
}
|
||||
} else {
|
||||
handleChargeAppliedTransaction(charge, disbursedOn);
|
||||
}
|
||||
}
|
||||
}
|
||||
if(disbursentMoney.isGreaterThanZero()){
|
||||
final Money zero = Money.zero(getCurrency());
|
||||
chargesPayment.updateComponentsAndTotal(zero, zero, disbursentMoney, zero);
|
||||
chargesPayment.updateLoan(this);
|
||||
this.loanTransactions.add(chargesPayment);
|
||||
}
|
||||
|
||||
if (getApprovedOnDate() != null && disbursedOn.isBefore(getApprovedOnDate())) {
|
||||
final String errorMessage = "The date on which a loan is disbursed cannot be before its approval date: "
|
||||
|
||||
+1
-1
@@ -164,7 +164,7 @@ public class LoanAccountDomainServiceJpa implements LoanAccountDomainService {
|
||||
allowTransactionsOnHoliday, holidays, workingDays, allowTransactionsOnNonWorkingDay, newPaymentTransaction);
|
||||
}
|
||||
this.loanTransactionRepository.save(newPaymentTransaction);
|
||||
this.loanRepository.save(loan);
|
||||
this.loanRepository.saveAndFlush(loan);
|
||||
|
||||
if (StringUtils.isNotBlank(noteText)) {
|
||||
final Note note = Note.loanTransactionNote(loan, newPaymentTransaction, noteText);
|
||||
|
||||
+11
-5
@@ -9,6 +9,8 @@ import java.math.BigDecimal;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.Collection;
|
||||
import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
import java.util.LinkedHashMap;
|
||||
import java.util.List;
|
||||
import java.util.Locale;
|
||||
@@ -245,17 +247,21 @@ public class LoanWritePlatformServiceJpaRepositoryImpl implements LoanWritePlatf
|
||||
}
|
||||
|
||||
Set<LoanCharge> loanCharges = loan.charges();
|
||||
final Locale locale = command.extractLocale();
|
||||
final DateTimeFormatter fmt = DateTimeFormat.forPattern(command.dateFormat()).withLocale(locale);
|
||||
Map<Long,BigDecimal> disBuLoanCharges = new HashMap<Long,BigDecimal>();
|
||||
for (LoanCharge loanCharge : loanCharges) {
|
||||
if (loanCharge.isDueAtDisbursement() && loanCharge.getChargePaymentMode().isPaymentModeAccountTransfer()) {
|
||||
disBuLoanCharges.put(loanCharge.getId(), loanCharge.amount());
|
||||
}
|
||||
}
|
||||
final Locale locale = command.extractLocale();
|
||||
final DateTimeFormatter fmt = DateTimeFormat.forPattern(command.dateFormat()).withLocale(locale);
|
||||
for (Map.Entry<Long, BigDecimal> entrySet: disBuLoanCharges.entrySet()) {
|
||||
PortfolioAccountData savingAccountData = this.accountAssociationsReadPlatformService.retriveLoanAssociation(loanId);
|
||||
AccountTransferDTO accountTransferDTO = new AccountTransferDTO(actualDisbursementDate, loanCharge.amount(),
|
||||
AccountTransferDTO accountTransferDTO = new AccountTransferDTO(actualDisbursementDate, entrySet.getValue(),
|
||||
PortfolioAccountType.SAVINGS, PortfolioAccountType.LOAN, savingAccountData.accountId(), loanId,
|
||||
"Loan Charge Payment", locale, fmt, null, null, LoanTransactionType.REPAYMENT_AT_DISBURSEMENT.getValue(),
|
||||
loanCharge.getId());
|
||||
entrySet.getKey());
|
||||
accountTransfersWritePlatformService.transferFunds(accountTransferDTO);
|
||||
}
|
||||
}
|
||||
|
||||
return new CommandProcessingResultBuilder() //
|
||||
|
||||
Reference in New Issue
Block a user