MIFOSX-2209 : corrected refund transaction reversals on adjust transaction

This commit is contained in:
pramod
2015-09-14 10:14:09 +05:30
parent a9a5e735da
commit d112f4a79d
5 changed files with 60 additions and 14 deletions
@@ -5,6 +5,7 @@
*/
package org.mifosplatform.portfolio.account.domain;
import java.util.Collection;
import java.util.List;
import org.springframework.data.jpa.repository.JpaRepository;
@@ -12,14 +13,18 @@ import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
public interface AccountTransferRepository extends JpaRepository<AccountTransferTransaction, Long>, JpaSpecificationExecutor<AccountTransferTransaction> {
public interface AccountTransferRepository extends JpaRepository<AccountTransferTransaction, Long>,
JpaSpecificationExecutor<AccountTransferTransaction> {
@Query("from AccountTransferTransaction att where att.accountTransferDetails.fromLoanAccount.id= :accountNumber and att.reversed=false")
List<AccountTransferTransaction> findByFromLoanId(@Param("accountNumber") Long accountNumber);
@Query("from AccountTransferTransaction att where (att.accountTransferDetails.fromLoanAccount.id= :accountNumber or att.accountTransferDetails.toLoanAccount.id=:accountNumber) and att.reversed=false")
@Query("from AccountTransferTransaction att where (att.accountTransferDetails.fromLoanAccount.id= :accountNumber or att.accountTransferDetails.toLoanAccount.id=:accountNumber) and att.reversed=false order by att.id desc")
List<AccountTransferTransaction> findAllByLoanId(@Param("accountNumber") Long accountNumber);
@Query("from AccountTransferTransaction att where att.toLoanTransaction.id= :loanTransactionId and att.reversed=false")
AccountTransferTransaction findByToLoanTransactionId(@Param("loanTransactionId") Long loanTransactionId);
@Query("from AccountTransferTransaction att where att.fromLoanTransaction.id IN :loanTransactions and att.reversed=false")
List<AccountTransferTransaction> findByFromLoanTransactions(@Param("loanTransactions") Collection<Long> loanTransactions);
}
@@ -5,6 +5,8 @@
*/
package org.mifosplatform.portfolio.account.service;
import java.util.Collection;
import org.mifosplatform.infrastructure.core.api.JsonCommand;
import org.mifosplatform.infrastructure.core.data.CommandProcessingResult;
import org.mifosplatform.portfolio.account.PortfolioAccountType;
@@ -24,4 +26,6 @@ public interface AccountTransfersWritePlatformService {
void updateLoanTransaction(Long loanTransactionId, LoanTransaction newLoanTransaction);
CommandProcessingResult refundByTransfer(JsonCommand command);
void reverseTransfersWithFromAccountTransactions(Collection<Long> fromTransactionIds, PortfolioAccountType accountTypeId);
}
@@ -13,6 +13,7 @@ import static org.mifosplatform.portfolio.account.api.AccountTransfersApiConstan
import static org.mifosplatform.portfolio.account.api.AccountTransfersApiConstants.transferDateParamName;
import java.math.BigDecimal;
import java.util.Collection;
import java.util.List;
import java.util.Locale;
@@ -203,6 +204,19 @@ public class AccountTransfersWritePlatformServiceImpl implements AccountTransfer
}
}
@Override
@Transactional
public void reverseTransfersWithFromAccountTransactions(final Collection<Long> fromTransactionIds, final PortfolioAccountType accountTypeId) {
List<AccountTransferTransaction> acccountTransfers = null;
if (accountTypeId.isLoanAccount()) {
acccountTransfers = this.accountTransferRepository.findByFromLoanTransactions(fromTransactionIds);
}
if (acccountTransfers != null && acccountTransfers.size() > 0) {
undoTransactions(acccountTransfers);
}
}
@Override
@Transactional
@@ -1194,6 +1194,11 @@ public class Loan extends AbstractPersistable<Long> {
updateLoanOutstandingBalaces();
}
}
public void updateLoanSummarAndStatus(){
updateLoanSummaryDerivedFields();
doPostLoanTransactionChecks(getLastUserTransactionDate(), loanLifecycleStateMachine);
}
public Map<String, Object> loanApplicationModification(final JsonCommand command, final Set<LoanCharge> possiblyModifedLoanCharges,
final Set<LoanCollateral> possiblyModifedLoanCollateralItems, final AprCalculator aprCalculator, boolean isChargesModified) {
@@ -944,7 +944,19 @@ public class LoanWritePlatformServiceJpaRepositoryImpl implements LoanWritePlatf
}
this.noteRepository.save(note);
}
this.accountTransfersWritePlatformService.reverseTransfersWithFromAccountType(loanId, PortfolioAccountType.LOAN);
Collection<Long> transactionIds = new ArrayList<>();
for (LoanTransaction transaction : loan.getLoanTransactions()) {
if (transaction.isRefund() && transaction.isNotReversed()) {
transactionIds.add(transaction.getId());
}
}
if (!transactionIds.isEmpty()) {
this.accountTransfersWritePlatformService
.reverseTransfersWithFromAccountTransactions(transactionIds, PortfolioAccountType.LOAN);
loan.updateLoanSummarAndStatus();
}
postJournalEntries(loan, existingTransactionIds, existingReversedTransactionIds);
@@ -1307,16 +1319,15 @@ public class LoanWritePlatformServiceJpaRepositoryImpl implements LoanWritePlatf
boolean pendingDisbursementAvailable = false;
for (LoanDisbursementDetails disbursementDetail : loanDisburseDetails) {
if (disbursementDetail.actualDisbursementDate() == null) {
pendingDisbursementAvailable = true ;
break ;
pendingDisbursementAvailable = true;
break;
}
}
if(!pendingDisbursementAvailable) {
throw new ChargeCannotBeUpdatedException(
"error.msg.charge.cannot.be.updated.no.pending.disbursements.in.loan", "This charge cannot be added, No disbursement is pending");
}
if (!pendingDisbursementAvailable) { throw new ChargeCannotBeUpdatedException(
"error.msg.charge.cannot.be.updated.no.pending.disbursements.in.loan",
"This charge cannot be added, No disbursement is pending"); }
}
@Transactional
@Override
public CommandProcessingResult addLoanCharge(final Long loanId, final JsonCommand command) {
@@ -1330,12 +1341,19 @@ public class LoanWritePlatformServiceJpaRepositoryImpl implements LoanWritePlatf
final Long chargeDefinitionId = command.longValueOfParameterNamed("chargeId");
final Charge chargeDefinition = this.chargeRepository.findOneWithNotFoundDetection(chargeDefinitionId);
if(loan.isDisbursed() && chargeDefinition.isDisbursementCharge()) {
validateAddingNewChargeAllowed(loanDisburseDetails) ; //validates whether any pending disbursements are available to apply this charge
if (loan.isDisbursed() && chargeDefinition.isDisbursementCharge()) {
validateAddingNewChargeAllowed(loanDisburseDetails); // validates
// whether any
// pending
// disbursements
// are
// available to
// apply this
// charge
}
final List<Long> existingTransactionIds = new ArrayList<>(loan.findExistingTransactionIds());
final List<Long> existingReversedTransactionIds = new ArrayList<>(loan.findExistingReversedTransactionIds());
boolean isAppliedOnBackDate = false;
LoanCharge loanCharge = null;
if (chargeDefinition.isPercentageOfDisbursementAmount()) {
@@ -2704,7 +2722,7 @@ public class LoanWritePlatformServiceJpaRepositoryImpl implements LoanWritePlatf
loan.regenerateRepaymentScheduleWithInterestRecalculation(scheduleGeneratorDTO, currentUser);
} else {
loan.regenerateRepaymentSchedule(scheduleGeneratorDTO, currentUser);
loan.processPostDisbursementTransactions() ;
loan.processPostDisbursementTransactions();
}
}