@@ -458,7 +458,7 @@
|
|||||||
<tr class="alt">
|
<tr class="alt">
|
||||||
<td></td>
|
<td></td>
|
||||||
<td>loans/{loanId}/charges/{loanChargeId}</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_retrieve">Retrieve a Loan Charge</a></td>
|
||||||
<td><a href="#loans_charges_update">Modify 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>
|
<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>
|
<tr>
|
||||||
<td></td>
|
<td></td>
|
||||||
<td>loans/{loanId}/charges/{loanChargeId}</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_retrieve">Retrieve a Loan Charge</a></td>
|
||||||
<td><a href="#loans_charges_update">Modify 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>
|
<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 (
|
* "APPLY Charge" transactions are created for all other fees (
|
||||||
* which are created during disbursal but not repaid)
|
* 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()) {
|
for (final LoanCharge charge : setOfLoanCharges()) {
|
||||||
if (charge.isDueAtDisbursement()) {
|
if (charge.isDueAtDisbursement()) {
|
||||||
if (totalFeeChargesDueAtDisbursement.isGreaterThanZero() && !charge.getChargePaymentMode().isPaymentModeAccountTransfer()) {
|
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();
|
charge.markAsFullyPaid();
|
||||||
// Add "Loan Charge Paid By" details to this transaction
|
// Add "Loan Charge Paid By" details to this transaction
|
||||||
final LoanChargePaidBy loanChargePaidBy = new LoanChargePaidBy(chargesPayment, charge, charge.amount());
|
final LoanChargePaidBy loanChargePaidBy = new LoanChargePaidBy(chargesPayment, charge, charge.amount());
|
||||||
chargesPayment.getLoanChargesPaid().add(loanChargePaidBy);
|
chargesPayment.getLoanChargesPaid().add(loanChargePaidBy);
|
||||||
|
disbursentMoney = disbursentMoney.plus(charge.amount());
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
handleChargeAppliedTransaction(charge, disbursedOn);
|
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())) {
|
if (getApprovedOnDate() != null && disbursedOn.isBefore(getApprovedOnDate())) {
|
||||||
final String errorMessage = "The date on which a loan is disbursed cannot be before its approval date: "
|
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);
|
allowTransactionsOnHoliday, holidays, workingDays, allowTransactionsOnNonWorkingDay, newPaymentTransaction);
|
||||||
}
|
}
|
||||||
this.loanTransactionRepository.save(newPaymentTransaction);
|
this.loanTransactionRepository.save(newPaymentTransaction);
|
||||||
this.loanRepository.save(loan);
|
this.loanRepository.saveAndFlush(loan);
|
||||||
|
|
||||||
if (StringUtils.isNotBlank(noteText)) {
|
if (StringUtils.isNotBlank(noteText)) {
|
||||||
final Note note = Note.loanTransactionNote(loan, newPaymentTransaction, 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.ArrayList;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.HashSet;
|
||||||
import java.util.LinkedHashMap;
|
import java.util.LinkedHashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Locale;
|
import java.util.Locale;
|
||||||
@@ -245,17 +247,21 @@ public class LoanWritePlatformServiceJpaRepositoryImpl implements LoanWritePlatf
|
|||||||
}
|
}
|
||||||
|
|
||||||
Set<LoanCharge> loanCharges = loan.charges();
|
Set<LoanCharge> loanCharges = loan.charges();
|
||||||
final Locale locale = command.extractLocale();
|
Map<Long,BigDecimal> disBuLoanCharges = new HashMap<Long,BigDecimal>();
|
||||||
final DateTimeFormatter fmt = DateTimeFormat.forPattern(command.dateFormat()).withLocale(locale);
|
|
||||||
for (LoanCharge loanCharge : loanCharges) {
|
for (LoanCharge loanCharge : loanCharges) {
|
||||||
if (loanCharge.isDueAtDisbursement() && loanCharge.getChargePaymentMode().isPaymentModeAccountTransfer()) {
|
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);
|
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,
|
PortfolioAccountType.SAVINGS, PortfolioAccountType.LOAN, savingAccountData.accountId(), loanId,
|
||||||
"Loan Charge Payment", locale, fmt, null, null, LoanTransactionType.REPAYMENT_AT_DISBURSEMENT.getValue(),
|
"Loan Charge Payment", locale, fmt, null, null, LoanTransactionType.REPAYMENT_AT_DISBURSEMENT.getValue(),
|
||||||
loanCharge.getId());
|
entrySet.getKey());
|
||||||
accountTransfersWritePlatformService.transferFunds(accountTransferDTO);
|
accountTransfersWritePlatformService.transferFunds(accountTransferDTO);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return new CommandProcessingResultBuilder() //
|
return new CommandProcessingResultBuilder() //
|
||||||
|
|||||||
Reference in New Issue
Block a user