diff --git a/api-docs/apiLive.htm b/api-docs/apiLive.htm
index b8fc7a7a4..cec952c08 100644
--- a/api-docs/apiLive.htm
+++ b/api-docs/apiLive.htm
@@ -458,7 +458,7 @@
|
loans/{loanId}/charges/{loanChargeId} |
- Pay Loan Charge |
+ Pay Loan Charge from Linked Savings |
Retrieve a Loan Charge |
Modify a Loan Charge |
Delete a Loan Charge |
@@ -19145,7 +19145,7 @@ GET https://DomainName/api/v1/search?query=000000111
|
loans/{loanId}/charges/{loanChargeId} |
- Pay a Loan Charge |
+ Pay Loan Charge from Linked Savings |
Retrieve a Loan Charge |
Modify a Loan Charge |
Delete a Loan Charge |
diff --git a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/loanaccount/domain/Loan.java b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/loanaccount/domain/Loan.java
index 44df3bf05..4ccd0aedc 100644
--- a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/loanaccount/domain/Loan.java
+++ b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/loanaccount/domain/Loan.java
@@ -1452,25 +1452,28 @@ public class Loan extends AbstractPersistable {
* "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: "
diff --git a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/loanaccount/domain/LoanAccountDomainServiceJpa.java b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/loanaccount/domain/LoanAccountDomainServiceJpa.java
index 1fd68c6b5..85e4b6a1d 100644
--- a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/loanaccount/domain/LoanAccountDomainServiceJpa.java
+++ b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/loanaccount/domain/LoanAccountDomainServiceJpa.java
@@ -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);
diff --git a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/loanaccount/service/LoanWritePlatformServiceJpaRepositoryImpl.java b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/loanaccount/service/LoanWritePlatformServiceJpaRepositoryImpl.java
index 49c93cc4d..02435d792 100644
--- a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/loanaccount/service/LoanWritePlatformServiceJpaRepositoryImpl.java
+++ b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/loanaccount/service/LoanWritePlatformServiceJpaRepositoryImpl.java
@@ -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 loanCharges = loan.charges();
- final Locale locale = command.extractLocale();
- final DateTimeFormatter fmt = DateTimeFormat.forPattern(command.dateFormat()).withLocale(locale);
+ Map disBuLoanCharges = new HashMap();
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 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() //