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;
|
package org.mifosplatform.portfolio.account.domain;
|
||||||
|
|
||||||
|
import java.util.Collection;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import org.springframework.data.jpa.repository.JpaRepository;
|
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.jpa.repository.Query;
|
||||||
import org.springframework.data.repository.query.Param;
|
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")
|
@Query("from AccountTransferTransaction att where att.accountTransferDetails.fromLoanAccount.id= :accountNumber and att.reversed=false")
|
||||||
List<AccountTransferTransaction> findByFromLoanId(@Param("accountNumber") Long accountNumber);
|
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);
|
List<AccountTransferTransaction> findAllByLoanId(@Param("accountNumber") Long accountNumber);
|
||||||
|
|
||||||
@Query("from AccountTransferTransaction att where att.toLoanTransaction.id= :loanTransactionId and att.reversed=false")
|
@Query("from AccountTransferTransaction att where att.toLoanTransaction.id= :loanTransactionId and att.reversed=false")
|
||||||
AccountTransferTransaction findByToLoanTransactionId(@Param("loanTransactionId") Long loanTransactionId);
|
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;
|
package org.mifosplatform.portfolio.account.service;
|
||||||
|
|
||||||
|
import java.util.Collection;
|
||||||
|
|
||||||
import org.mifosplatform.infrastructure.core.api.JsonCommand;
|
import org.mifosplatform.infrastructure.core.api.JsonCommand;
|
||||||
import org.mifosplatform.infrastructure.core.data.CommandProcessingResult;
|
import org.mifosplatform.infrastructure.core.data.CommandProcessingResult;
|
||||||
import org.mifosplatform.portfolio.account.PortfolioAccountType;
|
import org.mifosplatform.portfolio.account.PortfolioAccountType;
|
||||||
@@ -24,4 +26,6 @@ public interface AccountTransfersWritePlatformService {
|
|||||||
void updateLoanTransaction(Long loanTransactionId, LoanTransaction newLoanTransaction);
|
void updateLoanTransaction(Long loanTransactionId, LoanTransaction newLoanTransaction);
|
||||||
|
|
||||||
CommandProcessingResult refundByTransfer(JsonCommand command);
|
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 static org.mifosplatform.portfolio.account.api.AccountTransfersApiConstants.transferDateParamName;
|
||||||
|
|
||||||
import java.math.BigDecimal;
|
import java.math.BigDecimal;
|
||||||
|
import java.util.Collection;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Locale;
|
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
|
@Override
|
||||||
@Transactional
|
@Transactional
|
||||||
|
|||||||
+5
@@ -1194,6 +1194,11 @@ public class Loan extends AbstractPersistable<Long> {
|
|||||||
updateLoanOutstandingBalaces();
|
updateLoanOutstandingBalaces();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void updateLoanSummarAndStatus(){
|
||||||
|
updateLoanSummaryDerivedFields();
|
||||||
|
doPostLoanTransactionChecks(getLastUserTransactionDate(), loanLifecycleStateMachine);
|
||||||
|
}
|
||||||
|
|
||||||
public Map<String, Object> loanApplicationModification(final JsonCommand command, final Set<LoanCharge> possiblyModifedLoanCharges,
|
public Map<String, Object> loanApplicationModification(final JsonCommand command, final Set<LoanCharge> possiblyModifedLoanCharges,
|
||||||
final Set<LoanCollateral> possiblyModifedLoanCollateralItems, final AprCalculator aprCalculator, boolean isChargesModified) {
|
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.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);
|
postJournalEntries(loan, existingTransactionIds, existingReversedTransactionIds);
|
||||||
|
|
||||||
@@ -1307,16 +1319,15 @@ public class LoanWritePlatformServiceJpaRepositoryImpl implements LoanWritePlatf
|
|||||||
boolean pendingDisbursementAvailable = false;
|
boolean pendingDisbursementAvailable = false;
|
||||||
for (LoanDisbursementDetails disbursementDetail : loanDisburseDetails) {
|
for (LoanDisbursementDetails disbursementDetail : loanDisburseDetails) {
|
||||||
if (disbursementDetail.actualDisbursementDate() == null) {
|
if (disbursementDetail.actualDisbursementDate() == null) {
|
||||||
pendingDisbursementAvailable = true ;
|
pendingDisbursementAvailable = true;
|
||||||
break ;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if(!pendingDisbursementAvailable) {
|
if (!pendingDisbursementAvailable) { throw new ChargeCannotBeUpdatedException(
|
||||||
throw new ChargeCannotBeUpdatedException(
|
"error.msg.charge.cannot.be.updated.no.pending.disbursements.in.loan",
|
||||||
"error.msg.charge.cannot.be.updated.no.pending.disbursements.in.loan", "This charge cannot be added, No disbursement is pending");
|
"This charge cannot be added, No disbursement is pending"); }
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Transactional
|
@Transactional
|
||||||
@Override
|
@Override
|
||||||
public CommandProcessingResult addLoanCharge(final Long loanId, final JsonCommand command) {
|
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 Long chargeDefinitionId = command.longValueOfParameterNamed("chargeId");
|
||||||
final Charge chargeDefinition = this.chargeRepository.findOneWithNotFoundDetection(chargeDefinitionId);
|
final Charge chargeDefinition = this.chargeRepository.findOneWithNotFoundDetection(chargeDefinitionId);
|
||||||
|
|
||||||
if(loan.isDisbursed() && chargeDefinition.isDisbursementCharge()) {
|
if (loan.isDisbursed() && chargeDefinition.isDisbursementCharge()) {
|
||||||
validateAddingNewChargeAllowed(loanDisburseDetails) ; //validates whether any pending disbursements are available to apply this charge
|
validateAddingNewChargeAllowed(loanDisburseDetails); // validates
|
||||||
|
// whether any
|
||||||
|
// pending
|
||||||
|
// disbursements
|
||||||
|
// are
|
||||||
|
// available to
|
||||||
|
// apply this
|
||||||
|
// charge
|
||||||
}
|
}
|
||||||
final List<Long> existingTransactionIds = new ArrayList<>(loan.findExistingTransactionIds());
|
final List<Long> existingTransactionIds = new ArrayList<>(loan.findExistingTransactionIds());
|
||||||
final List<Long> existingReversedTransactionIds = new ArrayList<>(loan.findExistingReversedTransactionIds());
|
final List<Long> existingReversedTransactionIds = new ArrayList<>(loan.findExistingReversedTransactionIds());
|
||||||
|
|
||||||
boolean isAppliedOnBackDate = false;
|
boolean isAppliedOnBackDate = false;
|
||||||
LoanCharge loanCharge = null;
|
LoanCharge loanCharge = null;
|
||||||
if (chargeDefinition.isPercentageOfDisbursementAmount()) {
|
if (chargeDefinition.isPercentageOfDisbursementAmount()) {
|
||||||
@@ -2704,7 +2722,7 @@ public class LoanWritePlatformServiceJpaRepositoryImpl implements LoanWritePlatf
|
|||||||
loan.regenerateRepaymentScheduleWithInterestRecalculation(scheduleGeneratorDTO, currentUser);
|
loan.regenerateRepaymentScheduleWithInterestRecalculation(scheduleGeneratorDTO, currentUser);
|
||||||
} else {
|
} else {
|
||||||
loan.regenerateRepaymentSchedule(scheduleGeneratorDTO, currentUser);
|
loan.regenerateRepaymentSchedule(scheduleGeneratorDTO, currentUser);
|
||||||
loan.processPostDisbursementTransactions() ;
|
loan.processPostDisbursementTransactions();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user