Merge pull request #1497 from pramodn02/develop
MIFOSX-2209 : corrected refund transaction reversals on adjust transaction
This commit is contained in:
+7
-2
@@ -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);
|
||||
}
|
||||
+4
@@ -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);
|
||||
}
|
||||
+14
@@ -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
|
||||
|
||||
+5
@@ -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) {
|
||||
|
||||
+30
-12
@@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user