Merge pull request #603 from pramodn02/MIFOSX-689_2

update account transfers with new loan transaction id
This commit is contained in:
Vishwas Babu A J
2013-09-23 00:24:36 -07:00
9 changed files with 62 additions and 28 deletions
@@ -175,4 +175,9 @@ public class AccountTransfer extends AbstractPersistable<Long> {
public SavingsAccount getFromAccount() {
return this.fromAccount;
}
public void updateToLoanTransaction(LoanTransaction toLoanTransaction) {
this.toLoanTransaction = toLoanTransaction;
}
}
@@ -19,4 +19,7 @@ public interface AccountTransferRepository extends JpaRepository<AccountTransfer
@Query("from AccountTransfer at where (at.fromLoanAccount.id= :accountNumber or at.toLoanAccount.id=:accountNumber) and at.reversed=false")
List<AccountTransfer> findAllByLoanId(@Param("accountNumber") Long accountNumber);
@Query("from AccountTransfer at where at.toLoanTransaction.id= :loanTransactionId and at.reversed=false")
AccountTransfer findByToLoanTransactionId(@Param("loanTransactionId") Long loanTransactionId);
}
@@ -9,6 +9,7 @@ import org.mifosplatform.infrastructure.core.api.JsonCommand;
import org.mifosplatform.infrastructure.core.data.CommandProcessingResult;
import org.mifosplatform.portfolio.account.PortfolioAccountType;
import org.mifosplatform.portfolio.account.data.AccountTransferDTO;
import org.mifosplatform.portfolio.loanaccount.domain.LoanTransaction;
public interface AccountTransfersWritePlatformService {
@@ -19,4 +20,6 @@ public interface AccountTransfersWritePlatformService {
Long transferFunds(AccountTransferDTO accountTransferDTO);
void reverseAllTransactions(Long accountId, PortfolioAccountType accountTypeId);
void updateLoanTransaction(Long loanTransactionId, LoanTransaction newLoanTransaction);
}
@@ -239,6 +239,16 @@ public class AccountTransfersWritePlatformServiceImpl implements AccountTransfer
return transferTransactionId;
}
@Override
@Transactional
public void updateLoanTransaction(final Long loanTransactionId,final LoanTransaction newLoanTransaction){
final AccountTransfer transferTransaction = this.accountTransferRepository.findByToLoanTransactionId(loanTransactionId);
if(transferTransaction!=null){
transferTransaction.updateToLoanTransaction(newLoanTransaction);
this.accountTransferRepository.save(transferTransaction);
}
}
private boolean isLoanToSavingsAccountTransfer(final PortfolioAccountType fromAccountType, final PortfolioAccountType toAccountType) {
return fromAccountType.isLoanAccount() && toAccountType.isSavingsAccount();
@@ -5,8 +5,8 @@
*/
package org.mifosplatform.portfolio.loanaccount.domain;
import java.util.ArrayList;
import java.util.List;
import java.util.HashMap;
import java.util.Map;
/**
* Stores details of {@link LoanTransaction}'s that were reversed or newly
@@ -16,16 +16,10 @@ import java.util.List;
*/
public class ChangedTransactionDetail {
private final List<LoanTransaction> newTransactions = new ArrayList<LoanTransaction>();
private final Map<Long,LoanTransaction> newTransactionMappings = new HashMap<Long, LoanTransaction>();
private final List<LoanTransaction> reversedTransactions = new ArrayList<LoanTransaction>();
public List<LoanTransaction> getNewTransactions() {
return this.newTransactions;
}
public List<LoanTransaction> getReversedTransactions() {
return this.reversedTransactions;
public Map<Long, LoanTransaction> getNewTransactionMappings() {
return this.newTransactionMappings;
}
}
@@ -444,10 +444,10 @@ public class Loan extends AbstractPersistable<Long> {
final List<LoanTransaction> allNonContraTransactionsPostDisbursement = retreiveListOfTransactionsPostDisbursement();
changedTransactionDetail = loanRepaymentScheduleTransactionProcessor.handleTransaction(getDisbursementDate(),
allNonContraTransactionsPostDisbursement, getCurrency(), this.repaymentScheduleInstallments, setOfLoanCharges());
for (final LoanTransaction transaction : changedTransactionDetail.getNewTransactions()) {
transaction.updateLoan(this);
for(Map.Entry<Long,LoanTransaction> mapEntry:changedTransactionDetail.getNewTransactionMappings().entrySet()){
mapEntry.getValue().updateLoan(this);
}
this.loanTransactions.addAll(changedTransactionDetail.getNewTransactions());
this.loanTransactions.addAll(changedTransactionDetail.getNewTransactionMappings().values());
} else {
// just reprocess the loan schedule only for now.
final LoanRepaymentScheduleProcessingWrapper wrapper = new LoanRepaymentScheduleProcessingWrapper();
@@ -1710,10 +1710,10 @@ public class Loan extends AbstractPersistable<Long> {
final List<LoanTransaction> allNonContraTransactionsPostDisbursement = retreiveListOfTransactionsPostDisbursement();
changedTransactionDetail = loanRepaymentScheduleTransactionProcessor.handleTransaction(getDisbursementDate(),
allNonContraTransactionsPostDisbursement, getCurrency(), this.repaymentScheduleInstallments, setOfLoanCharges());
for (final LoanTransaction newLoanTransaction : changedTransactionDetail.getNewTransactions()) {
newLoanTransaction.updateLoan(this);
for(Map.Entry<Long,LoanTransaction> mapEntry:changedTransactionDetail.getNewTransactionMappings().entrySet()){
mapEntry.getValue().updateLoan(this);
}
this.loanTransactions.addAll(changedTransactionDetail.getNewTransactions());
this.loanTransactions.addAll(changedTransactionDetail.getNewTransactionMappings().values());
}
updateLoanSummaryDerivedFields();
@@ -24,6 +24,8 @@ import org.mifosplatform.organisation.monetary.domain.MonetaryCurrency;
import org.mifosplatform.organisation.monetary.domain.Money;
import org.mifosplatform.organisation.workingdays.domain.WorkingDays;
import org.mifosplatform.organisation.workingdays.domain.WorkingDaysRepositoryWrapper;
import org.mifosplatform.portfolio.account.domain.AccountTransfer;
import org.mifosplatform.portfolio.account.domain.AccountTransferRepository;
import org.mifosplatform.portfolio.client.domain.Client;
import org.mifosplatform.portfolio.client.exception.ClientNotActiveException;
import org.mifosplatform.portfolio.group.domain.Group;
@@ -49,6 +51,7 @@ public class LoanAccountDomainServiceJpa implements LoanAccountDomainService {
private final ApplicationCurrencyRepositoryWrapper applicationCurrencyRepositoryWrapper;
private final JournalEntryWritePlatformService journalEntryWritePlatformService;
private final NoteRepository noteRepository;
private final AccountTransferRepository accountTransferRepository;
@Autowired
public LoanAccountDomainServiceJpa(final LoanAssembler loanAccountAssembler, final LoanRepository loanRepository,
@@ -56,7 +59,8 @@ public class LoanAccountDomainServiceJpa implements LoanAccountDomainService {
final ConfigurationDomainService configurationDomainService, final HolidayRepository holidayRepository,
final WorkingDaysRepositoryWrapper workingDaysRepository,
final ApplicationCurrencyRepositoryWrapper applicationCurrencyRepositoryWrapper,
final JournalEntryWritePlatformService journalEntryWritePlatformService) {
final JournalEntryWritePlatformService journalEntryWritePlatformService,
final AccountTransferRepository accountTransferRepository) {
this.loanAccountAssembler = loanAccountAssembler;
this.loanRepository = loanRepository;
this.loanTransactionRepository = loanTransactionRepository;
@@ -66,6 +70,7 @@ public class LoanAccountDomainServiceJpa implements LoanAccountDomainService {
this.workingDaysRepository = workingDaysRepository;
this.applicationCurrencyRepositoryWrapper = applicationCurrencyRepositoryWrapper;
this.journalEntryWritePlatformService = journalEntryWritePlatformService;
this.accountTransferRepository = accountTransferRepository;
}
@Transactional
@@ -115,8 +120,9 @@ public class LoanAccountDomainServiceJpa implements LoanAccountDomainService {
* recorded against the loan)
***/
if (changedTransactionDetail != null) {
for (final LoanTransaction loanTransaction : changedTransactionDetail.getNewTransactions()) {
this.loanTransactionRepository.save(loanTransaction);
for(Map.Entry<Long,LoanTransaction> mapEntry:changedTransactionDetail.getNewTransactionMappings().entrySet()){
this.loanTransactionRepository.save(mapEntry.getValue());
updateLoanTransaction(mapEntry.getKey(), mapEntry.getValue());
}
}
this.loanRepository.save(loan);
@@ -125,6 +131,8 @@ public class LoanAccountDomainServiceJpa implements LoanAccountDomainService {
final Note note = Note.loanTransactionNote(loan, newRepaymentTransaction, noteText);
this.noteRepository.save(note);
}
postJournalEntries(loan, existingTransactionIds, existingReversedTransactionIds);
@@ -247,4 +255,13 @@ public class LoanAccountDomainServiceJpa implements LoanAccountDomainService {
loanTransaction.reverse();
this.loanTransactionRepository.save(loanTransaction);
}
private void updateLoanTransaction(final Long loanTransactionId,final LoanTransaction newLoanTransaction){
final AccountTransfer transferTransaction = this.accountTransferRepository.findByToLoanTransactionId(loanTransactionId);
if(transferTransaction!=null){
transferTransaction.updateToLoanTransaction(newLoanTransaction);
this.accountTransferRepository.save(transferTransaction);
}
}
}
@@ -118,8 +118,7 @@ public abstract class AbstractLoanRepaymentScheduleTransactionProcessor implemen
**/
if (!LoanTransaction.transactionAmountsMatch(currency, loanTransaction, newLoanTransaction)) {
loanTransaction.reverse();
changedTransactionDetail.getReversedTransactions().add(loanTransaction);
changedTransactionDetail.getNewTransactions().add(newLoanTransaction);
changedTransactionDetail.getNewTransactionMappings().put(loanTransaction.getId(), newLoanTransaction);
}
}
@@ -523,8 +523,9 @@ public class LoanWritePlatformServiceJpaRepositoryImpl implements LoanWritePlatf
* payment recorded against the loan)
***/
if (changedTransactionDetail != null) {
for (final LoanTransaction loanTransaction : changedTransactionDetail.getNewTransactions()) {
this.loanTransactionRepository.save(loanTransaction);
for(Map.Entry<Long,LoanTransaction> mapEntry:changedTransactionDetail.getNewTransactionMappings().entrySet()){
this.loanTransactionRepository.save(mapEntry.getValue());
this.accountTransfersWritePlatformService.updateLoanTransaction(mapEntry.getKey(), mapEntry.getValue());
}
}
@@ -598,8 +599,9 @@ public class LoanWritePlatformServiceJpaRepositoryImpl implements LoanWritePlatf
* recorded against the loan)
***/
if (changedTransactionDetail != null) {
for (final LoanTransaction loanTransaction : changedTransactionDetail.getNewTransactions()) {
this.loanTransactionRepository.save(loanTransaction);
for(Map.Entry<Long,LoanTransaction> mapEntry:changedTransactionDetail.getNewTransactionMappings().entrySet()){
this.loanTransactionRepository.save(mapEntry.getValue());
this.accountTransfersWritePlatformService.updateLoanTransaction(mapEntry.getKey(), mapEntry.getValue());
}
}
@@ -819,8 +821,9 @@ public class LoanWritePlatformServiceJpaRepositoryImpl implements LoanWritePlatf
* latest payment recorded against the loan)
***/
if (changedTransactionDetail != null) {
for (final LoanTransaction loanTransaction : changedTransactionDetail.getNewTransactions()) {
this.loanTransactionRepository.save(loanTransaction);
for(Map.Entry<Long,LoanTransaction> mapEntry:changedTransactionDetail.getNewTransactionMappings().entrySet()){
this.loanTransactionRepository.save(mapEntry.getValue());
this.accountTransfersWritePlatformService.updateLoanTransaction(mapEntry.getKey(), mapEntry.getValue());
}
}