Merge branch 'mifosplatform-1.9.1' of github.com:openMF/mifosx into MIFOSX-647
This commit is contained in:
+4
@@ -0,0 +1,4 @@
|
|||||||
|
INSERT INTO `acc_product_mapping` (`gl_account_id`,`product_id`,`product_type`,`payment_type`,`charge_id`,`financial_account_type`)
|
||||||
|
select mapping.gl_account_id,mapping.product_id,mapping.product_type,mapping.payment_type,mapping.charge_id, 10
|
||||||
|
from acc_product_mapping mapping
|
||||||
|
where mapping.financial_account_type = 1 and mapping.product_type=1;
|
||||||
+4
-2
@@ -64,7 +64,8 @@ public class CashBasedAccountingProcessorForLoan implements AccountingProcessorF
|
|||||||
CASH_ACCOUNTS_FOR_LOAN.LOAN_PORTFOLIO, loanProductId, paymentTypeId, loanId, transactionId, transactionDate,
|
CASH_ACCOUNTS_FOR_LOAN.LOAN_PORTFOLIO, loanProductId, paymentTypeId, loanId, transactionId, transactionDate,
|
||||||
principalAmount, false);
|
principalAmount, false);
|
||||||
} else if (loanTransactionDTO.getTransactionType().isInitiateTransfer()
|
} else if (loanTransactionDTO.getTransactionType().isInitiateTransfer()
|
||||||
|| loanTransactionDTO.getTransactionType().isApproveTransfer()) {
|
|| loanTransactionDTO.getTransactionType().isApproveTransfer()
|
||||||
|
|| loanTransactionDTO.getTransactionType().isWithdrawTransfer()) {
|
||||||
createJournalEntriesForTransfers(loanDTO, loanTransactionDTO, office);
|
createJournalEntriesForTransfers(loanDTO, loanTransactionDTO, office);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -184,7 +185,8 @@ public class CashBasedAccountingProcessorForLoan implements AccountingProcessorF
|
|||||||
helper.createCashBasedJournalEntriesAndReversalsForLoan(office, CASH_ACCOUNTS_FOR_LOAN.TRANSFERS_SUSPENSE,
|
helper.createCashBasedJournalEntriesAndReversalsForLoan(office, CASH_ACCOUNTS_FOR_LOAN.TRANSFERS_SUSPENSE,
|
||||||
CASH_ACCOUNTS_FOR_LOAN.LOAN_PORTFOLIO, loanProductId, null, loanId, transactionId, transactionDate, principalAmount,
|
CASH_ACCOUNTS_FOR_LOAN.LOAN_PORTFOLIO, loanProductId, null, loanId, transactionId, transactionDate, principalAmount,
|
||||||
isReversal);
|
isReversal);
|
||||||
} else if (loanTransactionDTO.getTransactionType().isApproveTransfer()) {
|
} else if (loanTransactionDTO.getTransactionType().isApproveTransfer()
|
||||||
|
|| loanTransactionDTO.getTransactionType().isWithdrawTransfer()) {
|
||||||
helper.createCashBasedJournalEntriesAndReversalsForLoan(office, CASH_ACCOUNTS_FOR_LOAN.LOAN_PORTFOLIO,
|
helper.createCashBasedJournalEntriesAndReversalsForLoan(office, CASH_ACCOUNTS_FOR_LOAN.LOAN_PORTFOLIO,
|
||||||
CASH_ACCOUNTS_FOR_LOAN.TRANSFERS_SUSPENSE, loanProductId, null, loanId, transactionId, transactionDate,
|
CASH_ACCOUNTS_FOR_LOAN.TRANSFERS_SUSPENSE, loanProductId, null, loanId, transactionId, transactionDate,
|
||||||
principalAmount, isReversal);
|
principalAmount, isReversal);
|
||||||
|
|||||||
+5
@@ -106,6 +106,11 @@ public final class ProductToGLAccountMappingFromApiJsonDeserializer {
|
|||||||
baseDataValidator.reset().parameter(LOAN_PRODUCT_ACCOUNTING_PARAMS.LOSSES_WRITTEN_OFF.getValue()).value(writeOffAccountId)
|
baseDataValidator.reset().parameter(LOAN_PRODUCT_ACCOUNTING_PARAMS.LOSSES_WRITTEN_OFF.getValue()).value(writeOffAccountId)
|
||||||
.notNull().integerGreaterThanZero();
|
.notNull().integerGreaterThanZero();
|
||||||
|
|
||||||
|
final Long transfersInSuspenseAccountId = this.fromApiJsonHelper.extractLongNamed(
|
||||||
|
LOAN_PRODUCT_ACCOUNTING_PARAMS.TRANSFERS_SUSPENSE.getValue(), element);
|
||||||
|
baseDataValidator.reset().parameter(LOAN_PRODUCT_ACCOUNTING_PARAMS.TRANSFERS_SUSPENSE.getValue())
|
||||||
|
.value(transfersInSuspenseAccountId).notNull().integerGreaterThanZero();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (isAccrualBasedAccounting(accountingRuleType)) {
|
if (isAccrualBasedAccounting(accountingRuleType)) {
|
||||||
|
|||||||
+4
@@ -112,6 +112,8 @@ public class LoanProductToGLAccountMappingHelper extends ProductToGLAccountMappi
|
|||||||
LOAN_PRODUCT_ACCOUNTING_PARAMS.INCOME_FROM_PENALTIES.getValue(), element);
|
LOAN_PRODUCT_ACCOUNTING_PARAMS.INCOME_FROM_PENALTIES.getValue(), element);
|
||||||
final Long writeOffAccountId = this.fromApiJsonHelper.extractLongNamed(
|
final Long writeOffAccountId = this.fromApiJsonHelper.extractLongNamed(
|
||||||
LOAN_PRODUCT_ACCOUNTING_PARAMS.LOSSES_WRITTEN_OFF.getValue(), element);
|
LOAN_PRODUCT_ACCOUNTING_PARAMS.LOSSES_WRITTEN_OFF.getValue(), element);
|
||||||
|
final Long transfersInSuspenseAccountId = this.fromApiJsonHelper.extractLongNamed(
|
||||||
|
LOAN_PRODUCT_ACCOUNTING_PARAMS.TRANSFERS_SUSPENSE.getValue(), element);
|
||||||
|
|
||||||
final Long receivableInterestAccountId = this.fromApiJsonHelper.extractLongNamed(
|
final Long receivableInterestAccountId = this.fromApiJsonHelper.extractLongNamed(
|
||||||
LOAN_PRODUCT_ACCOUNTING_PARAMS.INTEREST_RECEIVABLE.getValue(), element);
|
LOAN_PRODUCT_ACCOUNTING_PARAMS.INTEREST_RECEIVABLE.getValue(), element);
|
||||||
@@ -130,6 +132,7 @@ public class LoanProductToGLAccountMappingHelper extends ProductToGLAccountMappi
|
|||||||
changes.put(LOAN_PRODUCT_ACCOUNTING_PARAMS.INCOME_FROM_FEES.getValue(), incomeFromFeeId);
|
changes.put(LOAN_PRODUCT_ACCOUNTING_PARAMS.INCOME_FROM_FEES.getValue(), incomeFromFeeId);
|
||||||
changes.put(LOAN_PRODUCT_ACCOUNTING_PARAMS.INCOME_FROM_PENALTIES.getValue(), incomeFromPenaltyId);
|
changes.put(LOAN_PRODUCT_ACCOUNTING_PARAMS.INCOME_FROM_PENALTIES.getValue(), incomeFromPenaltyId);
|
||||||
changes.put(LOAN_PRODUCT_ACCOUNTING_PARAMS.LOSSES_WRITTEN_OFF.getValue(), writeOffAccountId);
|
changes.put(LOAN_PRODUCT_ACCOUNTING_PARAMS.LOSSES_WRITTEN_OFF.getValue(), writeOffAccountId);
|
||||||
|
changes.put(LOAN_PRODUCT_ACCOUNTING_PARAMS.TRANSFERS_SUSPENSE.getValue(), transfersInSuspenseAccountId);
|
||||||
break;
|
break;
|
||||||
case ACCRUAL_BASED:
|
case ACCRUAL_BASED:
|
||||||
changes.put(LOAN_PRODUCT_ACCOUNTING_PARAMS.FUND_SOURCE.getValue(), fundAccountId);
|
changes.put(LOAN_PRODUCT_ACCOUNTING_PARAMS.FUND_SOURCE.getValue(), fundAccountId);
|
||||||
@@ -141,6 +144,7 @@ public class LoanProductToGLAccountMappingHelper extends ProductToGLAccountMappi
|
|||||||
changes.put(LOAN_PRODUCT_ACCOUNTING_PARAMS.INTEREST_RECEIVABLE.getValue(), receivableInterestAccountId);
|
changes.put(LOAN_PRODUCT_ACCOUNTING_PARAMS.INTEREST_RECEIVABLE.getValue(), receivableInterestAccountId);
|
||||||
changes.put(LOAN_PRODUCT_ACCOUNTING_PARAMS.FEES_RECEIVABLE.getValue(), receivableFeeAccountId);
|
changes.put(LOAN_PRODUCT_ACCOUNTING_PARAMS.FEES_RECEIVABLE.getValue(), receivableFeeAccountId);
|
||||||
changes.put(LOAN_PRODUCT_ACCOUNTING_PARAMS.PENALTIES_RECEIVABLE.getValue(), receivablePenaltyAccountId);
|
changes.put(LOAN_PRODUCT_ACCOUNTING_PARAMS.PENALTIES_RECEIVABLE.getValue(), receivablePenaltyAccountId);
|
||||||
|
changes.put(LOAN_PRODUCT_ACCOUNTING_PARAMS.TRANSFERS_SUSPENSE.getValue(), transfersInSuspenseAccountId);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+1
-1
@@ -2090,7 +2090,7 @@ public class Loan extends AbstractPersistable<Long> {
|
|||||||
return !isDisbursed();
|
return !isDisbursed();
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean isDisbursed() {
|
public boolean isDisbursed() {
|
||||||
return hasDisbursementTransaction();
|
return hasDisbursementTransaction();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+1
-1
@@ -139,7 +139,7 @@ public final class LoanTransaction extends AbstractPersistable<Long> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static LoanTransaction withdrawTransfer(final Office office, final Loan loan, final LocalDate transferDate) {
|
public static LoanTransaction withdrawTransfer(final Office office, final Loan loan, final LocalDate transferDate) {
|
||||||
return new LoanTransaction(loan, office, LoanTransactionType.APPROVE_TRANSFER.getValue(), transferDate.toDateMidnight().toDate(),
|
return new LoanTransaction(loan, office, LoanTransactionType.WITHDRAW_TRANSFER.getValue(), transferDate.toDateMidnight().toDate(),
|
||||||
loan.getSummary().getTotalOutstanding(), loan.getSummary().getTotalPrincipalOutstanding(), loan.getSummary()
|
loan.getSummary().getTotalOutstanding(), loan.getSummary().getTotalPrincipalOutstanding(), loan.getSummary()
|
||||||
.getTotalInterestOutstanding(), loan.getSummary().getTotalFeeChargesOutstanding(), loan.getSummary()
|
.getTotalInterestOutstanding(), loan.getSummary().getTotalFeeChargesOutstanding(), loan.getSummary()
|
||||||
.getTotalPenaltyChargesOutstanding(), false, null);
|
.getTotalPenaltyChargesOutstanding(), false, null);
|
||||||
|
|||||||
+3
-3
@@ -59,12 +59,12 @@ public interface LoanWritePlatformService {
|
|||||||
|
|
||||||
void applyHolidaysToLoans();
|
void applyHolidaysToLoans();
|
||||||
|
|
||||||
LoanTransaction initiateLoanTransfer(Long accountId, LocalDate TransferDate);
|
LoanTransaction initiateLoanTransfer(Long accountId, LocalDate transferDate);
|
||||||
|
|
||||||
LoanTransaction withdrawLoanTransfer(Long accountId, LocalDate TransferDate);
|
LoanTransaction withdrawLoanTransfer(Long accountId, LocalDate transferDate);
|
||||||
|
|
||||||
void rejectLoanTransfer(Long accountId);
|
void rejectLoanTransfer(Long accountId);
|
||||||
|
|
||||||
LoanTransaction acceptLoanTransfer(Long accountId, LocalDate TransferDate, Office acceptedInOffice, Staff loanOfficer);
|
LoanTransaction acceptLoanTransfer(Long accountId, LocalDate transferDate, Office acceptedInOffice, Staff loanOfficer);
|
||||||
|
|
||||||
}
|
}
|
||||||
+4
-4
@@ -908,7 +908,7 @@ public class LoanWritePlatformServiceJpaRepositoryImpl implements LoanWritePlatf
|
|||||||
|
|
||||||
@Transactional
|
@Transactional
|
||||||
@Override
|
@Override
|
||||||
public LoanTransaction initiateLoanTransfer(final Long accountId, final LocalDate TransferDate) {
|
public LoanTransaction initiateLoanTransfer(final Long accountId, final LocalDate transferDate) {
|
||||||
|
|
||||||
final Loan loan = this.loanAssembler.assembleFrom(accountId);
|
final Loan loan = this.loanAssembler.assembleFrom(accountId);
|
||||||
checkClientOrGroupActive(loan);
|
checkClientOrGroupActive(loan);
|
||||||
@@ -916,7 +916,7 @@ public class LoanWritePlatformServiceJpaRepositoryImpl implements LoanWritePlatf
|
|||||||
final List<Long> existingTransactionIds = new ArrayList<Long>(loan.findExistingTransactionIds());
|
final List<Long> existingTransactionIds = new ArrayList<Long>(loan.findExistingTransactionIds());
|
||||||
final List<Long> existingReversedTransactionIds = new ArrayList<Long>(loan.findExistingReversedTransactionIds());
|
final List<Long> existingReversedTransactionIds = new ArrayList<Long>(loan.findExistingReversedTransactionIds());
|
||||||
|
|
||||||
final LoanTransaction newTransferTransaction = LoanTransaction.initiateTransfer(loan.getOffice(), loan, TransferDate);
|
final LoanTransaction newTransferTransaction = LoanTransaction.initiateTransfer(loan.getOffice(), loan, transferDate);
|
||||||
loan.getLoanTransactions().add(newTransferTransaction);
|
loan.getLoanTransactions().add(newTransferTransaction);
|
||||||
loan.setLoanStatus(LoanStatus.TRANSFER_IN_PROGRESS.getValue());
|
loan.setLoanStatus(LoanStatus.TRANSFER_IN_PROGRESS.getValue());
|
||||||
|
|
||||||
@@ -955,13 +955,13 @@ public class LoanWritePlatformServiceJpaRepositoryImpl implements LoanWritePlatf
|
|||||||
|
|
||||||
@Transactional
|
@Transactional
|
||||||
@Override
|
@Override
|
||||||
public LoanTransaction withdrawLoanTransfer(Long accountId, LocalDate TransferDate) {
|
public LoanTransaction withdrawLoanTransfer(Long accountId, LocalDate transferDate) {
|
||||||
final Loan loan = this.loanAssembler.assembleFrom(accountId);
|
final Loan loan = this.loanAssembler.assembleFrom(accountId);
|
||||||
|
|
||||||
final List<Long> existingTransactionIds = new ArrayList<Long>(loan.findExistingTransactionIds());
|
final List<Long> existingTransactionIds = new ArrayList<Long>(loan.findExistingTransactionIds());
|
||||||
final List<Long> existingReversedTransactionIds = new ArrayList<Long>(loan.findExistingReversedTransactionIds());
|
final List<Long> existingReversedTransactionIds = new ArrayList<Long>(loan.findExistingReversedTransactionIds());
|
||||||
|
|
||||||
final LoanTransaction newTransferAcceptanceTransaction = LoanTransaction.withdrawTransfer(loan.getOffice(), loan, TransferDate);
|
final LoanTransaction newTransferAcceptanceTransaction = LoanTransaction.withdrawTransfer(loan.getOffice(), loan, transferDate);
|
||||||
loan.getLoanTransactions().add(newTransferAcceptanceTransaction);
|
loan.getLoanTransactions().add(newTransferAcceptanceTransaction);
|
||||||
loan.setLoanStatus(LoanStatus.ACTIVE.getValue());
|
loan.setLoanStatus(LoanStatus.ACTIVE.getValue());
|
||||||
|
|
||||||
|
|||||||
+6
-2
@@ -325,7 +325,11 @@ public class TransferWritePlatformServiceJpaRepositoryImpl implements TransferWr
|
|||||||
if (loanRepository.doNonClosedLoanAccountsExistForClient(client.getId())) {
|
if (loanRepository.doNonClosedLoanAccountsExistForClient(client.getId())) {
|
||||||
// get each individual loan for the client
|
// get each individual loan for the client
|
||||||
for (Loan loan : loanRepository.findLoanByClientId(client.getId())) {
|
for (Loan loan : loanRepository.findLoanByClientId(client.getId())) {
|
||||||
if (!loan.isClosed()) {
|
/**
|
||||||
|
* We need to create transactions etc only for loans which are
|
||||||
|
* disbursed and not yet closed
|
||||||
|
**/
|
||||||
|
if (loan.isDisbursed() && !loan.isClosed()) {
|
||||||
switch (transferEventType) {
|
switch (transferEventType) {
|
||||||
case ACCEPTANCE:
|
case ACCEPTANCE:
|
||||||
this.loanWritePlatformService.acceptLoanTransfer(loan.getId(), DateUtils.getLocalDateOfTenant(),
|
this.loanWritePlatformService.acceptLoanTransfer(loan.getId(), DateUtils.getLocalDateOfTenant(),
|
||||||
@@ -335,7 +339,7 @@ public class TransferWritePlatformServiceJpaRepositoryImpl implements TransferWr
|
|||||||
this.loanWritePlatformService.initiateLoanTransfer(loan.getId(), DateUtils.getLocalDateOfTenant());
|
this.loanWritePlatformService.initiateLoanTransfer(loan.getId(), DateUtils.getLocalDateOfTenant());
|
||||||
break;
|
break;
|
||||||
case REJECTION:
|
case REJECTION:
|
||||||
// do nothing
|
this.loanWritePlatformService.rejectLoanTransfer(loan.getId());
|
||||||
break;
|
break;
|
||||||
case WITHDRAWAL:
|
case WITHDRAWAL:
|
||||||
this.loanWritePlatformService.withdrawLoanTransfer(loan.getId(), DateUtils.getLocalDateOfTenant());
|
this.loanWritePlatformService.withdrawLoanTransfer(loan.getId(), DateUtils.getLocalDateOfTenant());
|
||||||
|
|||||||
Reference in New Issue
Block a user