Merge pull request #594 from pramodn02/MIFOSX-642_2

Mifosx 642 2
This commit is contained in:
Vishwas Babu A J
2013-09-19 08:25:21 -07:00
4 changed files with 25 additions and 16 deletions
+2 -2
View File
@@ -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>
@@ -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: "
@@ -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);
@@ -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() //