diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/api/ClientsApiResourceSwagger.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/api/ClientsApiResourceSwagger.java index a8a237b119a..017837f4092 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/api/ClientsApiResourceSwagger.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/api/ClientsApiResourceSwagger.java @@ -402,7 +402,7 @@ private PostClientsClientIdRequest() {} @Schema(example = "03 August 2021") public String activationDate; - @Schema(example = "dd MMM yyyy") + @Schema(example = "dd MMMM yyyy") public String dateFormat; @Schema(example = "en") public String locale; diff --git a/integration-tests/src/test/java/org/apache/fineract/integrationtests/ClientLoanIntegrationTest.java b/integration-tests/src/test/java/org/apache/fineract/integrationtests/ClientLoanIntegrationTest.java index 77c2ece7718..75423a9088c 100644 --- a/integration-tests/src/test/java/org/apache/fineract/integrationtests/ClientLoanIntegrationTest.java +++ b/integration-tests/src/test/java/org/apache/fineract/integrationtests/ClientLoanIntegrationTest.java @@ -2541,204 +2541,210 @@ public void loanWithFlatChargesAndPeriodicAccrualAccountingEnabled() throws Inte */ @Test public void loanWithChargesOfTypeAmountPercentageAndPeriodicAccrualAccountingEnabled() throws InterruptedException { + try { + GlobalConfigurationHelper.manageConfigurations(REQUEST_SPEC, RESPONSE_SPEC, + GlobalConfigurationHelper.ENABLE_AUTOGENERATED_EXTERNAL_ID, true); + final Integer clientID = ClientHelper.createClient(REQUEST_SPEC, RESPONSE_SPEC); + ClientHelper.verifyClientCreatedOnServer(REQUEST_SPEC, RESPONSE_SPEC, clientID); - final Integer clientID = ClientHelper.createClient(REQUEST_SPEC, RESPONSE_SPEC); - ClientHelper.verifyClientCreatedOnServer(REQUEST_SPEC, RESPONSE_SPEC, clientID); - - // Add charges with payment mode regular - List charges = new ArrayList<>(); - Integer percentageDisbursementCharge = ChargesHelper.createCharges(REQUEST_SPEC, RESPONSE_SPEC, - ChargesHelper.getLoanDisbursementJSON(ChargesHelper.CHARGE_CALCULATION_TYPE_PERCENTAGE_AMOUNT, "1")); - addCharges(charges, percentageDisbursementCharge, "1", null); - - Integer percentageSpecifiedDueDateCharge = ChargesHelper.createCharges(REQUEST_SPEC, RESPONSE_SPEC, - ChargesHelper.getLoanSpecifiedDueDateJSON(ChargesHelper.CHARGE_CALCULATION_TYPE_PERCENTAGE_AMOUNT, "1", false)); - addCharges(charges, percentageSpecifiedDueDateCharge, "1", "29 September 2011"); + // Add charges with payment mode regular + List charges = new ArrayList<>(); + Integer percentageDisbursementCharge = ChargesHelper.createCharges(REQUEST_SPEC, RESPONSE_SPEC, + ChargesHelper.getLoanDisbursementJSON(ChargesHelper.CHARGE_CALCULATION_TYPE_PERCENTAGE_AMOUNT, "1")); + addCharges(charges, percentageDisbursementCharge, "1", null); - Integer percentageInstallmentFee = ChargesHelper.createCharges(REQUEST_SPEC, RESPONSE_SPEC, - ChargesHelper.getLoanInstallmentJSON(ChargesHelper.CHARGE_CALCULATION_TYPE_PERCENTAGE_AMOUNT, "1", false)); - addCharges(charges, percentageInstallmentFee, "1", "29 September 2011"); + Integer percentageSpecifiedDueDateCharge = ChargesHelper.createCharges(REQUEST_SPEC, RESPONSE_SPEC, + ChargesHelper.getLoanSpecifiedDueDateJSON(ChargesHelper.CHARGE_CALCULATION_TYPE_PERCENTAGE_AMOUNT, "1", false)); + addCharges(charges, percentageSpecifiedDueDateCharge, "1", "29 September 2011"); - final Account assetAccount = ACCOUNT_HELPER.createAssetAccount(); - final Account incomeAccount = ACCOUNT_HELPER.createIncomeAccount(); - final Account expenseAccount = ACCOUNT_HELPER.createExpenseAccount(); - final Account overpaymentAccount = ACCOUNT_HELPER.createLiabilityAccount(); + Integer percentageInstallmentFee = ChargesHelper.createCharges(REQUEST_SPEC, RESPONSE_SPEC, + ChargesHelper.getLoanInstallmentJSON(ChargesHelper.CHARGE_CALCULATION_TYPE_PERCENTAGE_AMOUNT, "1", false)); + addCharges(charges, percentageInstallmentFee, "1", "29 September 2011"); - List collaterals = new ArrayList<>(); - - final Integer collateralId = CollateralManagementHelper.createCollateralProduct(REQUEST_SPEC, RESPONSE_SPEC); + final Account assetAccount = ACCOUNT_HELPER.createAssetAccount(); + final Account incomeAccount = ACCOUNT_HELPER.createIncomeAccount(); + final Account expenseAccount = ACCOUNT_HELPER.createExpenseAccount(); + final Account overpaymentAccount = ACCOUNT_HELPER.createLiabilityAccount(); - final Integer clientCollateralId = CollateralManagementHelper.createClientCollateral(REQUEST_SPEC, RESPONSE_SPEC, - String.valueOf(clientID), collateralId); - addCollaterals(collaterals, clientCollateralId, BigDecimal.valueOf(1)); + List collaterals = new ArrayList<>(); - final Integer loanProductID = createLoanProduct(false, ACCRUAL_PERIODIC, assetAccount, incomeAccount, expenseAccount, - overpaymentAccount); - final Integer loanID = applyForLoanApplication(clientID, loanProductID, charges, null, "12,000.00", collaterals); - Assertions.assertNotNull(loanID); - HashMap loanStatusHashMap = LoanStatusChecker.getStatusOfLoan(REQUEST_SPEC, RESPONSE_SPEC, loanID); - LoanStatusChecker.verifyLoanIsPending(loanStatusHashMap); + final Integer collateralId = CollateralManagementHelper.createCollateralProduct(REQUEST_SPEC, RESPONSE_SPEC); - ArrayList loanSchedule = LOAN_TRANSACTION_HELPER.getLoanRepaymentSchedule(REQUEST_SPEC, RESPONSE_SPEC, loanID); - verifyLoanRepaymentSchedule(loanSchedule); + final Integer clientCollateralId = CollateralManagementHelper.createClientCollateral(REQUEST_SPEC, RESPONSE_SPEC, + String.valueOf(clientID), collateralId); + addCollaterals(collaterals, clientCollateralId, BigDecimal.valueOf(1)); - List loanCharges = LOAN_TRANSACTION_HELPER.getLoanCharges(loanID); - validateCharge(percentageDisbursementCharge, loanCharges, "1", "120.00", "0.0", "0.0"); - validateCharge(percentageSpecifiedDueDateCharge, loanCharges, "1", "120.00", "0.0", "0.0"); - validateCharge(percentageInstallmentFee, loanCharges, "1", "120.00", "0.0", "0.0"); - - // check for disbursement fee - HashMap disbursementDetail = loanSchedule.get(0); - validateNumberForEqual("120.00", String.valueOf(disbursementDetail.get("feeChargesDue"))); - - // check for charge at specified date and installment fee - HashMap firstInstallment = loanSchedule.get(1); - validateNumberForEqual("149.11", String.valueOf(firstInstallment.get("feeChargesDue"))); + final Integer loanProductID = createLoanProduct(false, ACCRUAL_PERIODIC, assetAccount, incomeAccount, expenseAccount, + overpaymentAccount); + final Integer loanID = applyForLoanApplication(clientID, loanProductID, charges, null, "12,000.00", collaterals); + Assertions.assertNotNull(loanID); + HashMap loanStatusHashMap = LoanStatusChecker.getStatusOfLoan(REQUEST_SPEC, RESPONSE_SPEC, loanID); + LoanStatusChecker.verifyLoanIsPending(loanStatusHashMap); - // check for installment fee - HashMap secondInstallment = loanSchedule.get(2); - validateNumberForEqual("29.70", String.valueOf(secondInstallment.get("feeChargesDue"))); + ArrayList loanSchedule = LOAN_TRANSACTION_HELPER.getLoanRepaymentSchedule(REQUEST_SPEC, RESPONSE_SPEC, loanID); + verifyLoanRepaymentSchedule(loanSchedule); - LOG.info("-----------------------------------APPROVE LOAN-----------------------------------------"); - loanStatusHashMap = LOAN_TRANSACTION_HELPER.approveLoan("20 September 2011", loanID); - LoanStatusChecker.verifyLoanIsApproved(loanStatusHashMap); - LoanStatusChecker.verifyLoanIsWaitingForDisbursal(loanStatusHashMap); + List loanCharges = LOAN_TRANSACTION_HELPER.getLoanCharges(loanID); + validateCharge(percentageDisbursementCharge, loanCharges, "1", "120.00", "0.0", "0.0"); + validateCharge(percentageSpecifiedDueDateCharge, loanCharges, "1", "120.00", "0.0", "0.0"); + validateCharge(percentageInstallmentFee, loanCharges, "1", "120.00", "0.0", "0.0"); - LOG.info("-------------------------------DISBURSE LOAN-------------------------------------------"); - GlobalConfigurationHelper.manageConfigurations(REQUEST_SPEC, RESPONSE_SPEC, - GlobalConfigurationHelper.ENABLE_AUTOGENERATED_EXTERNAL_ID, true); - String loanDetails = LOAN_TRANSACTION_HELPER.getLoanDetails(REQUEST_SPEC, RESPONSE_SPEC, loanID); - loanStatusHashMap = LOAN_TRANSACTION_HELPER.disburseLoanWithNetDisbursalAmount("20 September 2011", loanID, - JsonPath.from(loanDetails).get("netDisbursalAmount").toString()); - LoanStatusChecker.verifyLoanIsActive(loanStatusHashMap); + // check for disbursement fee + HashMap disbursementDetail = loanSchedule.get(0); + validateNumberForEqual("120.00", String.valueOf(disbursementDetail.get("feeChargesDue"))); - ArrayList loanTransactionDetails = LOAN_TRANSACTION_HELPER.getLoanTransactionDetails(REQUEST_SPEC, RESPONSE_SPEC, loanID); - validateAccrualTransactionForDisbursementCharge(loanTransactionDetails); - final JournalEntry[] assetAccountInitialEntry = { new JournalEntry(Float.parseFloat("120.00"), JournalEntry.TransactionType.DEBIT), - new JournalEntry(Float.parseFloat("12000.00"), JournalEntry.TransactionType.CREDIT), - new JournalEntry(Float.parseFloat("12000.00"), JournalEntry.TransactionType.DEBIT) }; - JOURNAL_ENTRY_HELPER.checkJournalEntryForAssetAccount(assetAccount, "20 September 2011", assetAccountInitialEntry); - JOURNAL_ENTRY_HELPER.checkJournalEntryForIncomeAccount(incomeAccount, "20 September 2011", - new JournalEntry(Float.parseFloat("120.00"), JournalEntry.TransactionType.CREDIT)); - loanCharges.clear(); - loanCharges = LOAN_TRANSACTION_HELPER.getLoanCharges(loanID); - validateCharge(percentageDisbursementCharge, loanCharges, "1", "0.0", "120.00", "0.0"); + // check for charge at specified date and installment fee + HashMap firstInstallment = loanSchedule.get(1); + validateNumberForEqual("149.11", String.valueOf(firstInstallment.get("feeChargesDue"))); - LOG.info("-------------Make repayment 1-----------"); - LOAN_TRANSACTION_HELPER.makeRepayment("20 October 2011", Float.parseFloat("3300.60"), loanID); - loanCharges.clear(); - loanCharges = LOAN_TRANSACTION_HELPER.getLoanCharges(loanID); - validateCharge(percentageDisbursementCharge, loanCharges, "1", "0.00", "120.00", "0.0"); - validateCharge(percentageSpecifiedDueDateCharge, loanCharges, "1", "0.00", "120.0", "0.0"); - validateCharge(percentageInstallmentFee, loanCharges, "1", "90.89", "29.11", "0.0"); + // check for installment fee + HashMap secondInstallment = loanSchedule.get(2); + validateNumberForEqual("29.70", String.valueOf(secondInstallment.get("feeChargesDue"))); - JOURNAL_ENTRY_HELPER.checkJournalEntryForAssetAccount(assetAccount, "20 October 2011", - new JournalEntry(Float.parseFloat("3300.60"), JournalEntry.TransactionType.DEBIT), - new JournalEntry(Float.parseFloat("3300.60"), JournalEntry.TransactionType.CREDIT)); + LOG.info("-----------------------------------APPROVE LOAN-----------------------------------------"); + loanStatusHashMap = LOAN_TRANSACTION_HELPER.approveLoan("20 September 2011", loanID); + LoanStatusChecker.verifyLoanIsApproved(loanStatusHashMap); + LoanStatusChecker.verifyLoanIsWaitingForDisbursal(loanStatusHashMap); - LOAN_TRANSACTION_HELPER.addChargesForLoan(loanID, LoanTransactionHelper - .getSpecifiedDueDateChargesForLoanAsJSON(String.valueOf(percentageSpecifiedDueDateCharge), "29 October 2011", "1")); - loanSchedule.clear(); - loanSchedule = LOAN_TRANSACTION_HELPER.getLoanRepaymentSchedule(REQUEST_SPEC, RESPONSE_SPEC, loanID); + LOG.info("-------------------------------DISBURSE LOAN-------------------------------------------"); + String loanDetails = LOAN_TRANSACTION_HELPER.getLoanDetails(REQUEST_SPEC, RESPONSE_SPEC, loanID); + loanStatusHashMap = LOAN_TRANSACTION_HELPER.disburseLoanWithNetDisbursalAmount("20 September 2011", loanID, + JsonPath.from(loanDetails).get("netDisbursalAmount").toString()); + LoanStatusChecker.verifyLoanIsActive(loanStatusHashMap); - secondInstallment = loanSchedule.get(2); - validateNumberForEqual("149.70", String.valueOf(secondInstallment.get("feeChargesDue"))); - LOG.info("----------- Waive installment charge for 2nd installment ---------"); - LOAN_TRANSACTION_HELPER.waiveChargesForLoan(loanID, (Integer) getloanCharge(percentageInstallmentFee, loanCharges).get("id"), - LoanTransactionHelper.getWaiveChargeJSON(String.valueOf(2))); - loanCharges.clear(); - loanCharges = LOAN_TRANSACTION_HELPER.getLoanCharges(loanID); - validateCharge(percentageInstallmentFee, loanCharges, "1", "61.19", "29.11", "29.70"); + ArrayList loanTransactionDetails = LOAN_TRANSACTION_HELPER.getLoanTransactionDetails(REQUEST_SPEC, RESPONSE_SPEC, + loanID); + validateAccrualTransactionForDisbursementCharge(loanTransactionDetails); + final JournalEntry[] assetAccountInitialEntry = { + new JournalEntry(Float.parseFloat("120.00"), JournalEntry.TransactionType.DEBIT), + new JournalEntry(Float.parseFloat("12000.00"), JournalEntry.TransactionType.CREDIT), + new JournalEntry(Float.parseFloat("12000.00"), JournalEntry.TransactionType.DEBIT) }; + JOURNAL_ENTRY_HELPER.checkJournalEntryForAssetAccount(assetAccount, "20 September 2011", assetAccountInitialEntry); + JOURNAL_ENTRY_HELPER.checkJournalEntryForIncomeAccount(incomeAccount, "20 September 2011", + new JournalEntry(Float.parseFloat("120.00"), JournalEntry.TransactionType.CREDIT)); + loanCharges.clear(); + loanCharges = LOAN_TRANSACTION_HELPER.getLoanCharges(loanID); + validateCharge(percentageDisbursementCharge, loanCharges, "1", "0.0", "120.00", "0.0"); + + LOG.info("-------------Make repayment 1-----------"); + LOAN_TRANSACTION_HELPER.makeRepayment("20 October 2011", Float.parseFloat("3300.60"), loanID); + loanCharges.clear(); + loanCharges = LOAN_TRANSACTION_HELPER.getLoanCharges(loanID); + validateCharge(percentageDisbursementCharge, loanCharges, "1", "0.00", "120.00", "0.0"); + validateCharge(percentageSpecifiedDueDateCharge, loanCharges, "1", "0.00", "120.0", "0.0"); + validateCharge(percentageInstallmentFee, loanCharges, "1", "90.89", "29.11", "0.0"); + + JOURNAL_ENTRY_HELPER.checkJournalEntryForAssetAccount(assetAccount, "20 October 2011", + new JournalEntry(Float.parseFloat("3300.60"), JournalEntry.TransactionType.DEBIT), + new JournalEntry(Float.parseFloat("3300.60"), JournalEntry.TransactionType.CREDIT)); - /* - * JOURNAL_ENTRY_HELPER.checkJournalEntryForAssetAccount( assetAccount, "20 September 2011", new - * JournalEntry(Float.parseFloat("29.7"), JournalEntry.TransactionType.CREDIT)); - * JOURNAL_ENTRY_HELPER.checkJournalEntryForExpenseAccount (expenseAccount, "20 September 2011", new - * JournalEntry(Float.parseFloat("29.7"), JournalEntry.TransactionType.DEBIT)); - */ + LOAN_TRANSACTION_HELPER.addChargesForLoan(loanID, LoanTransactionHelper + .getSpecifiedDueDateChargesForLoanAsJSON(String.valueOf(percentageSpecifiedDueDateCharge), "29 October 2011", "1")); + loanSchedule.clear(); + loanSchedule = LOAN_TRANSACTION_HELPER.getLoanRepaymentSchedule(REQUEST_SPEC, RESPONSE_SPEC, loanID); - final String jobName = "Add Accrual Transactions"; + secondInstallment = loanSchedule.get(2); + validateNumberForEqual("149.70", String.valueOf(secondInstallment.get("feeChargesDue"))); + LOG.info("----------- Waive installment charge for 2nd installment ---------"); + LOAN_TRANSACTION_HELPER.waiveChargesForLoan(loanID, (Integer) getloanCharge(percentageInstallmentFee, loanCharges).get("id"), + LoanTransactionHelper.getWaiveChargeJSON(String.valueOf(2))); + loanCharges.clear(); + loanCharges = LOAN_TRANSACTION_HELPER.getLoanCharges(loanID); + validateCharge(percentageInstallmentFee, loanCharges, "1", "61.19", "29.11", "29.70"); - SCHEDULER_JOB_HELPER.executeAndAwaitJob(jobName); + /* + * JOURNAL_ENTRY_HELPER.checkJournalEntryForAssetAccount( assetAccount, "20 September 2011", new + * JournalEntry(Float.parseFloat("29.7"), JournalEntry.TransactionType.CREDIT)); + * JOURNAL_ENTRY_HELPER.checkJournalEntryForExpenseAccount (expenseAccount, "20 September 2011", new + * JournalEntry(Float.parseFloat("29.7"), JournalEntry.TransactionType.DEBIT)); + */ - loanSchedule.clear(); - loanSchedule = LOAN_TRANSACTION_HELPER.getLoanRepaymentSchedule(REQUEST_SPEC, RESPONSE_SPEC, loanID); - checkAccrualTransactions(loanSchedule, loanID); + final String jobName = "Add Accrual Transactions"; - LOG.info("----------Make repayment 2------------"); - LOAN_TRANSACTION_HELPER.makeRepayment("20 November 2011", Float.parseFloat("3271.49"), loanID); - JOURNAL_ENTRY_HELPER.checkJournalEntryForAssetAccount(assetAccount, "20 November 2011", - new JournalEntry(Float.parseFloat("3271.49"), JournalEntry.TransactionType.DEBIT), - new JournalEntry(Float.parseFloat("3271.49"), JournalEntry.TransactionType.CREDIT)); + SCHEDULER_JOB_HELPER.executeAndAwaitJob(jobName); - loanSchedule.clear(); - loanSchedule = LOAN_TRANSACTION_HELPER.getLoanRepaymentSchedule(REQUEST_SPEC, RESPONSE_SPEC, loanID); - secondInstallment = loanSchedule.get(2); - validateNumberForEqual("0", String.valueOf(secondInstallment.get("totalOutstandingForPeriod"))); + loanSchedule.clear(); + loanSchedule = LOAN_TRANSACTION_HELPER.getLoanRepaymentSchedule(REQUEST_SPEC, RESPONSE_SPEC, loanID); + checkAccrualTransactions(loanSchedule, loanID); - LOG.info("--------------Waive interest---------------"); - LOAN_TRANSACTION_HELPER.waiveInterest("20 December 2011", String.valueOf(61.79), loanID); + LOG.info("----------Make repayment 2------------"); + LOAN_TRANSACTION_HELPER.makeRepayment("20 November 2011", Float.parseFloat("3271.49"), loanID); + JOURNAL_ENTRY_HELPER.checkJournalEntryForAssetAccount(assetAccount, "20 November 2011", + new JournalEntry(Float.parseFloat("3271.49"), JournalEntry.TransactionType.DEBIT), + new JournalEntry(Float.parseFloat("3271.49"), JournalEntry.TransactionType.CREDIT)); - loanSchedule.clear(); - loanSchedule = LOAN_TRANSACTION_HELPER.getLoanRepaymentSchedule(REQUEST_SPEC, RESPONSE_SPEC, loanID); - HashMap thirdInstallment = loanSchedule.get(3); - validateNumberForEqual("60.59", String.valueOf(thirdInstallment.get("interestOutstanding"))); + loanSchedule.clear(); + loanSchedule = LOAN_TRANSACTION_HELPER.getLoanRepaymentSchedule(REQUEST_SPEC, RESPONSE_SPEC, loanID); + secondInstallment = loanSchedule.get(2); + validateNumberForEqual("0", String.valueOf(secondInstallment.get("totalOutstandingForPeriod"))); - JOURNAL_ENTRY_HELPER.checkJournalEntryForAssetAccount(assetAccount, "20 December 2011", - new JournalEntry(Float.parseFloat("61.79"), JournalEntry.TransactionType.CREDIT)); - JOURNAL_ENTRY_HELPER.checkJournalEntryForExpenseAccount(expenseAccount, "20 December 2011", - new JournalEntry(Float.parseFloat("61.79"), JournalEntry.TransactionType.DEBIT)); + LOG.info("--------------Waive interest---------------"); + LOAN_TRANSACTION_HELPER.waiveInterest("20 December 2011", String.valueOf(61.79), loanID); - Integer percentagePenaltySpecifiedDueDate = ChargesHelper.createCharges(REQUEST_SPEC, RESPONSE_SPEC, - ChargesHelper.getLoanSpecifiedDueDateJSON(ChargesHelper.CHARGE_CALCULATION_TYPE_PERCENTAGE_AMOUNT, "1", true)); - LOAN_TRANSACTION_HELPER.addChargesForLoan(loanID, LoanTransactionHelper - .getSpecifiedDueDateChargesForLoanAsJSON(String.valueOf(percentagePenaltySpecifiedDueDate), "29 September 2011", "1")); - loanCharges.clear(); - loanCharges = LOAN_TRANSACTION_HELPER.getLoanCharges(loanID); - validateCharge(percentagePenaltySpecifiedDueDate, loanCharges, "1", "0.00", "120.0", "0.0"); + loanSchedule.clear(); + loanSchedule = LOAN_TRANSACTION_HELPER.getLoanRepaymentSchedule(REQUEST_SPEC, RESPONSE_SPEC, loanID); + HashMap thirdInstallment = loanSchedule.get(3); + validateNumberForEqual("60.59", String.valueOf(thirdInstallment.get("interestOutstanding"))); - loanSchedule.clear(); - loanSchedule = LOAN_TRANSACTION_HELPER.getLoanRepaymentSchedule(REQUEST_SPEC, RESPONSE_SPEC, loanID); - secondInstallment = loanSchedule.get(2); - validateNumberForEqual("120", String.valueOf(secondInstallment.get("totalOutstandingForPeriod"))); + JOURNAL_ENTRY_HELPER.checkJournalEntryForAssetAccount(assetAccount, "20 December 2011", + new JournalEntry(Float.parseFloat("61.79"), JournalEntry.TransactionType.CREDIT)); + JOURNAL_ENTRY_HELPER.checkJournalEntryForExpenseAccount(expenseAccount, "20 December 2011", + new JournalEntry(Float.parseFloat("61.79"), JournalEntry.TransactionType.DEBIT)); - // checking the journal entry as applied penalty has been collected - JOURNAL_ENTRY_HELPER.checkJournalEntryForAssetAccount(assetAccount, "20 October 2011", - new JournalEntry(Float.parseFloat("3300.60"), JournalEntry.TransactionType.DEBIT), - new JournalEntry(Float.parseFloat("3300.60"), JournalEntry.TransactionType.CREDIT)); + Integer percentagePenaltySpecifiedDueDate = ChargesHelper.createCharges(REQUEST_SPEC, RESPONSE_SPEC, + ChargesHelper.getLoanSpecifiedDueDateJSON(ChargesHelper.CHARGE_CALCULATION_TYPE_PERCENTAGE_AMOUNT, "1", true)); + LOAN_TRANSACTION_HELPER.addChargesForLoan(loanID, LoanTransactionHelper + .getSpecifiedDueDateChargesForLoanAsJSON(String.valueOf(percentagePenaltySpecifiedDueDate), "29 September 2011", "1")); + loanCharges.clear(); + loanCharges = LOAN_TRANSACTION_HELPER.getLoanCharges(loanID); + validateCharge(percentagePenaltySpecifiedDueDate, loanCharges, "1", "0.00", "120.0", "0.0"); - LOG.info("----------Make repayment 3 advance------------"); - LOAN_TRANSACTION_HELPER.makeRepayment("20 November 2011", Float.parseFloat("3301.78"), loanID); - JOURNAL_ENTRY_HELPER.checkJournalEntryForAssetAccount(assetAccount, "20 November 2011", - new JournalEntry(Float.parseFloat("3301.78"), JournalEntry.TransactionType.DEBIT), - new JournalEntry(Float.parseFloat("3301.78"), JournalEntry.TransactionType.CREDIT)); + loanSchedule.clear(); + loanSchedule = LOAN_TRANSACTION_HELPER.getLoanRepaymentSchedule(REQUEST_SPEC, RESPONSE_SPEC, loanID); + secondInstallment = loanSchedule.get(2); + validateNumberForEqual("120", String.valueOf(secondInstallment.get("totalOutstandingForPeriod"))); - LOAN_TRANSACTION_HELPER.addChargesForLoan(loanID, LoanTransactionHelper - .getSpecifiedDueDateChargesForLoanAsJSON(String.valueOf(percentagePenaltySpecifiedDueDate), "10 January 2012", "1")); - loanSchedule.clear(); - loanSchedule = LOAN_TRANSACTION_HELPER.getLoanRepaymentSchedule(REQUEST_SPEC, RESPONSE_SPEC, loanID); - HashMap fourthInstallment = loanSchedule.get(4); - validateNumberForEqual("120", String.valueOf(fourthInstallment.get("penaltyChargesOutstanding"))); - validateNumberForEqual("3240.58", String.valueOf(fourthInstallment.get("totalOutstandingForPeriod"))); + // checking the journal entry as applied penalty has been collected + JOURNAL_ENTRY_HELPER.checkJournalEntryForAssetAccount(assetAccount, "20 October 2011", + new JournalEntry(Float.parseFloat("3300.60"), JournalEntry.TransactionType.DEBIT), + new JournalEntry(Float.parseFloat("3300.60"), JournalEntry.TransactionType.CREDIT)); - LOG.info("----------Pay applied penalty ------------"); - LOAN_TRANSACTION_HELPER.makeRepayment("20 January 2012", Float.parseFloat("120"), loanID); - JOURNAL_ENTRY_HELPER.checkJournalEntryForAssetAccount(assetAccount, "20 January 2012", - new JournalEntry(Float.parseFloat("120"), JournalEntry.TransactionType.DEBIT), - new JournalEntry(Float.parseFloat("120"), JournalEntry.TransactionType.CREDIT)); - loanSchedule.clear(); - loanSchedule = LOAN_TRANSACTION_HELPER.getLoanRepaymentSchedule(REQUEST_SPEC, RESPONSE_SPEC, loanID); - fourthInstallment = loanSchedule.get(4); - validateNumberForEqual("0", String.valueOf(fourthInstallment.get("penaltyChargesOutstanding"))); - validateNumberForEqual("3120.58", String.valueOf(fourthInstallment.get("totalOutstandingForPeriod"))); + LOG.info("----------Make repayment 3 advance------------"); + LOAN_TRANSACTION_HELPER.makeRepayment("20 November 2011", Float.parseFloat("3301.78"), loanID); + JOURNAL_ENTRY_HELPER.checkJournalEntryForAssetAccount(assetAccount, "20 November 2011", + new JournalEntry(Float.parseFloat("3301.78"), JournalEntry.TransactionType.DEBIT), + new JournalEntry(Float.parseFloat("3301.78"), JournalEntry.TransactionType.CREDIT)); - LOG.info("----------Make repayment 4 ------------"); - LOAN_TRANSACTION_HELPER.makeRepayment("20 January 2012", Float.parseFloat("3120.58"), loanID); - JOURNAL_ENTRY_HELPER.checkJournalEntryForAssetAccount(assetAccount, "20 January 2012", - new JournalEntry(Float.parseFloat("3120.58"), JournalEntry.TransactionType.DEBIT), - new JournalEntry(Float.parseFloat("3120.58"), JournalEntry.TransactionType.CREDIT)); - loanStatusHashMap = LOAN_TRANSACTION_HELPER.getLoanDetail(REQUEST_SPEC, RESPONSE_SPEC, loanID, "status"); - LoanStatusChecker.verifyLoanAccountIsClosed(loanStatusHashMap); + LOAN_TRANSACTION_HELPER.addChargesForLoan(loanID, LoanTransactionHelper + .getSpecifiedDueDateChargesForLoanAsJSON(String.valueOf(percentagePenaltySpecifiedDueDate), "10 January 2012", "1")); + loanSchedule.clear(); + loanSchedule = LOAN_TRANSACTION_HELPER.getLoanRepaymentSchedule(REQUEST_SPEC, RESPONSE_SPEC, loanID); + HashMap fourthInstallment = loanSchedule.get(4); + validateNumberForEqual("120", String.valueOf(fourthInstallment.get("penaltyChargesOutstanding"))); + validateNumberForEqual("3240.58", String.valueOf(fourthInstallment.get("totalOutstandingForPeriod"))); + + LOG.info("----------Pay applied penalty ------------"); + LOAN_TRANSACTION_HELPER.makeRepayment("20 January 2012", Float.parseFloat("120"), loanID); + JOURNAL_ENTRY_HELPER.checkJournalEntryForAssetAccount(assetAccount, "20 January 2012", + new JournalEntry(Float.parseFloat("120"), JournalEntry.TransactionType.DEBIT), + new JournalEntry(Float.parseFloat("120"), JournalEntry.TransactionType.CREDIT)); + loanSchedule.clear(); + loanSchedule = LOAN_TRANSACTION_HELPER.getLoanRepaymentSchedule(REQUEST_SPEC, RESPONSE_SPEC, loanID); + fourthInstallment = loanSchedule.get(4); + validateNumberForEqual("0", String.valueOf(fourthInstallment.get("penaltyChargesOutstanding"))); + validateNumberForEqual("3120.58", String.valueOf(fourthInstallment.get("totalOutstandingForPeriod"))); + + LOG.info("----------Make repayment 4 ------------"); + LOAN_TRANSACTION_HELPER.makeRepayment("20 January 2012", Float.parseFloat("3120.58"), loanID); + JOURNAL_ENTRY_HELPER.checkJournalEntryForAssetAccount(assetAccount, "20 January 2012", + new JournalEntry(Float.parseFloat("3120.58"), JournalEntry.TransactionType.DEBIT), + new JournalEntry(Float.parseFloat("3120.58"), JournalEntry.TransactionType.CREDIT)); + loanStatusHashMap = LOAN_TRANSACTION_HELPER.getLoanDetail(REQUEST_SPEC, RESPONSE_SPEC, loanID, "status"); + LoanStatusChecker.verifyLoanAccountIsClosed(loanStatusHashMap); + } finally { + GlobalConfigurationHelper.manageConfigurations(REQUEST_SPEC, RESPONSE_SPEC, + GlobalConfigurationHelper.ENABLE_AUTOGENERATED_EXTERNAL_ID, false); + } } /*** @@ -3434,56 +3440,60 @@ public void testLoanScheduleWithInterestRecalculation_WITH_REST_DAILY_INTEREST_C @Test public void testInteroperationLoanRepaymentAPI() { + try { + DateFormat dateFormat = new SimpleDateFormat(DATETIME_PATTERN, Locale.US); + dateFormat.setTimeZone(Utils.getTimeZoneOfTenant()); + GlobalConfigurationHelper.updateEnabledFlagForGlobalConfiguration(REQUEST_SPEC, RESPONSE_SPEC, "42", true); + Calendar startDate = Calendar.getInstance(Utils.getTimeZoneOfTenant()); + startDate.add(Calendar.MONTH, -8); + + Calendar firstRepaymentDate = (Calendar) startDate.clone(); + firstRepaymentDate.add(Calendar.MONTH, 1); + firstRepaymentDate.add(Calendar.DAY_OF_MONTH, + firstRepaymentDate.getActualMaximum(Calendar.DAY_OF_MONTH) - Calendar.DAY_OF_MONTH); + String firstRepayment = dateFormat.format(firstRepaymentDate.getTime()); + + final String loanDisbursementDate = dateFormat.format(startDate.getTime()); + final Integer clientID = ClientHelper.createClient(REQUEST_SPEC, RESPONSE_SPEC); + ClientHelper.verifyClientCreatedOnServer(REQUEST_SPEC, RESPONSE_SPEC, clientID); + final Integer loanProductID = createLoanProductWithInterestRecalculationAndCompoundingDetails( + LoanProductTestBuilder.INTEREST_PRINCIPAL_PENALTIES_FEES_ORDER_STRATEGY, + LoanProductTestBuilder.RECALCULATION_COMPOUNDING_METHOD_NONE, + LoanProductTestBuilder.RECALCULATION_STRATEGY_REDUCE_NUMBER_OF_INSTALLMENTS, + LoanProductTestBuilder.RECALCULATION_FREQUENCY_TYPE_SAME_AS_REPAYMENT_PERIOD, + LoanProductTestBuilder.INTEREST_APPLICABLE_STRATEGY_ON_PRE_CLOSE_DATE, null, "12"); + + final Integer loanID = applyForLoanApplicationForInterestRecalculation(clientID, loanProductID, loanDisbursementDate, + LoanApplicationTestBuilder.INTEREST_PRINCIPAL_PENALTIES_FEES_ORDER_STRATEGY, firstRepayment); + + Assertions.assertNotNull(loanID); + HashMap loanStatusHashMap = LoanStatusChecker.getStatusOfLoan(REQUEST_SPEC, RESPONSE_SPEC, loanID); + LoanStatusChecker.verifyLoanIsPending(loanStatusHashMap); - DateFormat dateFormat = new SimpleDateFormat(DATETIME_PATTERN, Locale.US); - dateFormat.setTimeZone(Utils.getTimeZoneOfTenant()); - GlobalConfigurationHelper.updateEnabledFlagForGlobalConfiguration(REQUEST_SPEC, RESPONSE_SPEC, "42", true); - Calendar startDate = Calendar.getInstance(Utils.getTimeZoneOfTenant()); - startDate.add(Calendar.MONTH, -8); - - Calendar firstRepaymentDate = (Calendar) startDate.clone(); - firstRepaymentDate.add(Calendar.MONTH, 1); - firstRepaymentDate.add(Calendar.DAY_OF_MONTH, firstRepaymentDate.getActualMaximum(Calendar.DAY_OF_MONTH) - Calendar.DAY_OF_MONTH); - String firstRepayment = dateFormat.format(firstRepaymentDate.getTime()); - - final String loanDisbursementDate = dateFormat.format(startDate.getTime()); - final Integer clientID = ClientHelper.createClient(REQUEST_SPEC, RESPONSE_SPEC); - ClientHelper.verifyClientCreatedOnServer(REQUEST_SPEC, RESPONSE_SPEC, clientID); - final Integer loanProductID = createLoanProductWithInterestRecalculationAndCompoundingDetails( - LoanProductTestBuilder.INTEREST_PRINCIPAL_PENALTIES_FEES_ORDER_STRATEGY, - LoanProductTestBuilder.RECALCULATION_COMPOUNDING_METHOD_NONE, - LoanProductTestBuilder.RECALCULATION_STRATEGY_REDUCE_NUMBER_OF_INSTALLMENTS, - LoanProductTestBuilder.RECALCULATION_FREQUENCY_TYPE_SAME_AS_REPAYMENT_PERIOD, - LoanProductTestBuilder.INTEREST_APPLICABLE_STRATEGY_ON_PRE_CLOSE_DATE, null, "12"); - - final Integer loanID = applyForLoanApplicationForInterestRecalculation(clientID, loanProductID, loanDisbursementDate, - LoanApplicationTestBuilder.INTEREST_PRINCIPAL_PENALTIES_FEES_ORDER_STRATEGY, firstRepayment); - - Assertions.assertNotNull(loanID); - HashMap loanStatusHashMap = LoanStatusChecker.getStatusOfLoan(REQUEST_SPEC, RESPONSE_SPEC, loanID); - LoanStatusChecker.verifyLoanIsPending(loanStatusHashMap); - - LOG.info("-----------------------------------APPROVE LOAN-----------------------------------------"); - loanStatusHashMap = LOAN_TRANSACTION_HELPER.approveLoan(loanDisbursementDate, loanID); - LoanStatusChecker.verifyLoanIsApproved(loanStatusHashMap); - LoanStatusChecker.verifyLoanIsWaitingForDisbursal(loanStatusHashMap); + LOG.info("-----------------------------------APPROVE LOAN-----------------------------------------"); + loanStatusHashMap = LOAN_TRANSACTION_HELPER.approveLoan(loanDisbursementDate, loanID); + LoanStatusChecker.verifyLoanIsApproved(loanStatusHashMap); + LoanStatusChecker.verifyLoanIsWaitingForDisbursal(loanStatusHashMap); - LOG.info("-------------------------------DISBURSE LOAN-------------------------------------------"); - String loanDetails = LOAN_TRANSACTION_HELPER.getLoanDetails(REQUEST_SPEC, RESPONSE_SPEC, loanID); - loanStatusHashMap = LOAN_TRANSACTION_HELPER.disburseLoanWithNetDisbursalAmount(loanDisbursementDate, loanID, - JsonPath.from(loanDetails).get("netDisbursalAmount").toString()); - LoanStatusChecker.verifyLoanIsActive(loanStatusHashMap); + LOG.info("-------------------------------DISBURSE LOAN-------------------------------------------"); + String loanDetails = LOAN_TRANSACTION_HELPER.getLoanDetails(REQUEST_SPEC, RESPONSE_SPEC, loanID); + loanStatusHashMap = LOAN_TRANSACTION_HELPER.disburseLoanWithNetDisbursalAmount(loanDisbursementDate, loanID, + JsonPath.from(loanDetails).get("netDisbursalAmount").toString()); + LoanStatusChecker.verifyLoanIsActive(loanStatusHashMap); - ArrayList loanSchedule = LOAN_TRANSACTION_HELPER.getLoanRepaymentSchedule(REQUEST_SPEC, RESPONSE_SPEC, loanID); - Assertions.assertNotNull(loanSchedule); - startDate.add(Calendar.DAY_OF_MONTH, 2); - String loanFirstRepaymentDate = dateFormat.format(startDate.getTime()); + ArrayList loanSchedule = LOAN_TRANSACTION_HELPER.getLoanRepaymentSchedule(REQUEST_SPEC, RESPONSE_SPEC, loanID); + Assertions.assertNotNull(loanSchedule); + startDate.add(Calendar.DAY_OF_MONTH, 2); + String loanFirstRepaymentDate = dateFormat.format(startDate.getTime()); - Float earlyPayment = Float.parseFloat("3000"); - String accountNo = JsonPath.from(loanDetails).get("accountNo").toString(); + Float earlyPayment = Float.parseFloat("3000"); + String accountNo = JsonPath.from(loanDetails).get("accountNo").toString(); - HashMap loanRepayment = LOAN_TRANSACTION_HELPER.makeRepaymentWithAccountNo(loanFirstRepaymentDate, earlyPayment, accountNo); - assertNotNull(loanRepayment); + HashMap loanRepayment = LOAN_TRANSACTION_HELPER.makeRepaymentWithAccountNo(loanFirstRepaymentDate, earlyPayment, accountNo); + assertNotNull(loanRepayment); + } finally { + GlobalConfigurationHelper.updateEnabledFlagForGlobalConfiguration(REQUEST_SPEC, RESPONSE_SPEC, "42", false); + } } @Test @@ -4917,134 +4927,140 @@ public void testLoanScheduleWithInterestRecalculation_WITH_INTEREST_FIRST_STRATE @Test public void testLoanScheduleWithInterestRecalculationMakePrepaymentAfterRepayment() { + try { + DateFormat dateFormat = new SimpleDateFormat(DATETIME_PATTERN, Locale.US); + dateFormat.setTimeZone(Utils.getTimeZoneOfTenant()); + GlobalConfigurationHelper.updateEnabledFlagForGlobalConfiguration(REQUEST_SPEC, RESPONSE_SPEC, "42", true); + Calendar startDate = Calendar.getInstance(Utils.getTimeZoneOfTenant()); + Calendar currentDate = Calendar.getInstance(Utils.getTimeZoneOfTenant()); + startDate.add(Calendar.MONTH, -8); + + Calendar firstRepaymentDate = (Calendar) startDate.clone(); + firstRepaymentDate.add(Calendar.MONTH, 1); + firstRepaymentDate.add(Calendar.DAY_OF_MONTH, + firstRepaymentDate.getActualMaximum(Calendar.DAY_OF_MONTH) - Calendar.DAY_OF_MONTH); + String firstRepayment = dateFormat.format(firstRepaymentDate.getTime()); + + final String loanDisbursementDate = dateFormat.format(startDate.getTime()); + final Integer clientID = ClientHelper.createClient(REQUEST_SPEC, RESPONSE_SPEC); + ClientHelper.verifyClientCreatedOnServer(REQUEST_SPEC, RESPONSE_SPEC, clientID); + final Integer loanProductID = createLoanProductWithInterestRecalculationAndCompoundingDetails( + LoanProductTestBuilder.INTEREST_PRINCIPAL_PENALTIES_FEES_ORDER_STRATEGY, + LoanProductTestBuilder.RECALCULATION_COMPOUNDING_METHOD_NONE, + LoanProductTestBuilder.RECALCULATION_STRATEGY_REDUCE_NUMBER_OF_INSTALLMENTS, + LoanProductTestBuilder.RECALCULATION_FREQUENCY_TYPE_SAME_AS_REPAYMENT_PERIOD, + LoanProductTestBuilder.INTEREST_APPLICABLE_STRATEGY_ON_PRE_CLOSE_DATE, null, "12"); + + final Integer loanID = applyForLoanApplicationForInterestRecalculation(clientID, loanProductID, loanDisbursementDate, + LoanApplicationTestBuilder.INTEREST_PRINCIPAL_PENALTIES_FEES_ORDER_STRATEGY, firstRepayment); + + Assertions.assertNotNull(loanID); + HashMap loanStatusHashMap = LoanStatusChecker.getStatusOfLoan(REQUEST_SPEC, RESPONSE_SPEC, loanID); + LoanStatusChecker.verifyLoanIsPending(loanStatusHashMap); - DateFormat dateFormat = new SimpleDateFormat(DATETIME_PATTERN, Locale.US); - dateFormat.setTimeZone(Utils.getTimeZoneOfTenant()); - GlobalConfigurationHelper.updateEnabledFlagForGlobalConfiguration(REQUEST_SPEC, RESPONSE_SPEC, "42", true); - Calendar startDate = Calendar.getInstance(Utils.getTimeZoneOfTenant()); - Calendar currentDate = Calendar.getInstance(Utils.getTimeZoneOfTenant()); - startDate.add(Calendar.MONTH, -8); - - Calendar firstRepaymentDate = (Calendar) startDate.clone(); - firstRepaymentDate.add(Calendar.MONTH, 1); - firstRepaymentDate.add(Calendar.DAY_OF_MONTH, firstRepaymentDate.getActualMaximum(Calendar.DAY_OF_MONTH) - Calendar.DAY_OF_MONTH); - String firstRepayment = dateFormat.format(firstRepaymentDate.getTime()); - - final String loanDisbursementDate = dateFormat.format(startDate.getTime()); - final Integer clientID = ClientHelper.createClient(REQUEST_SPEC, RESPONSE_SPEC); - ClientHelper.verifyClientCreatedOnServer(REQUEST_SPEC, RESPONSE_SPEC, clientID); - final Integer loanProductID = createLoanProductWithInterestRecalculationAndCompoundingDetails( - LoanProductTestBuilder.INTEREST_PRINCIPAL_PENALTIES_FEES_ORDER_STRATEGY, - LoanProductTestBuilder.RECALCULATION_COMPOUNDING_METHOD_NONE, - LoanProductTestBuilder.RECALCULATION_STRATEGY_REDUCE_NUMBER_OF_INSTALLMENTS, - LoanProductTestBuilder.RECALCULATION_FREQUENCY_TYPE_SAME_AS_REPAYMENT_PERIOD, - LoanProductTestBuilder.INTEREST_APPLICABLE_STRATEGY_ON_PRE_CLOSE_DATE, null, "12"); - - final Integer loanID = applyForLoanApplicationForInterestRecalculation(clientID, loanProductID, loanDisbursementDate, - LoanApplicationTestBuilder.INTEREST_PRINCIPAL_PENALTIES_FEES_ORDER_STRATEGY, firstRepayment); - - Assertions.assertNotNull(loanID); - HashMap loanStatusHashMap = LoanStatusChecker.getStatusOfLoan(REQUEST_SPEC, RESPONSE_SPEC, loanID); - LoanStatusChecker.verifyLoanIsPending(loanStatusHashMap); - - LOG.info("-----------------------------------APPROVE LOAN-----------------------------------------"); - loanStatusHashMap = LOAN_TRANSACTION_HELPER.approveLoan(loanDisbursementDate, loanID); - LoanStatusChecker.verifyLoanIsApproved(loanStatusHashMap); - LoanStatusChecker.verifyLoanIsWaitingForDisbursal(loanStatusHashMap); - - LOG.info("-------------------------------DISBURSE LOAN-------------------------------------------"); - String loanDetails = LOAN_TRANSACTION_HELPER.getLoanDetails(REQUEST_SPEC, RESPONSE_SPEC, loanID); - loanStatusHashMap = LOAN_TRANSACTION_HELPER.disburseLoanWithNetDisbursalAmount(loanDisbursementDate, loanID, - JsonPath.from(loanDetails).get("netDisbursalAmount").toString()); - LoanStatusChecker.verifyLoanIsActive(loanStatusHashMap); + LOG.info("-----------------------------------APPROVE LOAN-----------------------------------------"); + loanStatusHashMap = LOAN_TRANSACTION_HELPER.approveLoan(loanDisbursementDate, loanID); + LoanStatusChecker.verifyLoanIsApproved(loanStatusHashMap); + LoanStatusChecker.verifyLoanIsWaitingForDisbursal(loanStatusHashMap); - ArrayList loanSchedule = LOAN_TRANSACTION_HELPER.getLoanRepaymentSchedule(REQUEST_SPEC, RESPONSE_SPEC, loanID); - Assertions.assertNotNull(loanSchedule); - startDate.add(Calendar.DAY_OF_MONTH, 2); - String loanFirstRepaymentDate = dateFormat.format(startDate.getTime()); - // - Float earlyPayment = Float.parseFloat("3000"); - LOAN_TRANSACTION_HELPER.makeRepayment(loanFirstRepaymentDate, earlyPayment, loanID); + LOG.info("-------------------------------DISBURSE LOAN-------------------------------------------"); + String loanDetails = LOAN_TRANSACTION_HELPER.getLoanDetails(REQUEST_SPEC, RESPONSE_SPEC, loanID); + loanStatusHashMap = LOAN_TRANSACTION_HELPER.disburseLoanWithNetDisbursalAmount(loanDisbursementDate, loanID, + JsonPath.from(loanDetails).get("netDisbursalAmount").toString()); + LoanStatusChecker.verifyLoanIsActive(loanStatusHashMap); - HashMap prepayDetail = LOAN_TRANSACTION_HELPER.getPrepayAmount(REQUEST_SPEC, RESPONSE_SPEC, loanID); - String prepayAmount = String.valueOf(prepayDetail.get("amount")); - String loanPrepaymentDate = dateFormat.format(currentDate.getTime()); - LOAN_TRANSACTION_HELPER.makeRepayment(loanPrepaymentDate, Float.parseFloat(prepayAmount), loanID); - loanStatusHashMap = LoanStatusChecker.getStatusOfLoan(REQUEST_SPEC, RESPONSE_SPEC, loanID); - LoanStatusChecker.verifyLoanAccountIsClosed(loanStatusHashMap); - GlobalConfigurationHelper.updateEnabledFlagForGlobalConfiguration(REQUEST_SPEC, RESPONSE_SPEC, "42", false); + ArrayList loanSchedule = LOAN_TRANSACTION_HELPER.getLoanRepaymentSchedule(REQUEST_SPEC, RESPONSE_SPEC, loanID); + Assertions.assertNotNull(loanSchedule); + startDate.add(Calendar.DAY_OF_MONTH, 2); + String loanFirstRepaymentDate = dateFormat.format(startDate.getTime()); + // + Float earlyPayment = Float.parseFloat("3000"); + LOAN_TRANSACTION_HELPER.makeRepayment(loanFirstRepaymentDate, earlyPayment, loanID); + + HashMap prepayDetail = LOAN_TRANSACTION_HELPER.getPrepayAmount(REQUEST_SPEC, RESPONSE_SPEC, loanID); + String prepayAmount = String.valueOf(prepayDetail.get("amount")); + String loanPrepaymentDate = dateFormat.format(currentDate.getTime()); + LOAN_TRANSACTION_HELPER.makeRepayment(loanPrepaymentDate, Float.parseFloat(prepayAmount), loanID); + loanStatusHashMap = LoanStatusChecker.getStatusOfLoan(REQUEST_SPEC, RESPONSE_SPEC, loanID); + LoanStatusChecker.verifyLoanAccountIsClosed(loanStatusHashMap); + } finally { + GlobalConfigurationHelper.updateEnabledFlagForGlobalConfiguration(REQUEST_SPEC, RESPONSE_SPEC, "42", false); + } } @Test public void testLoanScheduleWithInterestRecalculationMakeAdvancePaymentTillSettlement() { + try { + final ResponseSpecification errorResponse = new ResponseSpecBuilder().expectStatusCode(403).build(); + final LoanTransactionHelper validationErrorHelper = new LoanTransactionHelper(REQUEST_SPEC, errorResponse); + DateFormat dateFormat = new SimpleDateFormat(DATETIME_PATTERN, Locale.US); + dateFormat.setTimeZone(Utils.getTimeZoneOfTenant()); + GlobalConfigurationHelper.updateEnabledFlagForGlobalConfiguration(REQUEST_SPEC, RESPONSE_SPEC, "42", true); + Calendar startDate = Calendar.getInstance(Utils.getTimeZoneOfTenant()); + Calendar currentDate = Calendar.getInstance(Utils.getTimeZoneOfTenant()); + startDate.add(Calendar.MONTH, -8); + + Calendar firstRepaymentDate = (Calendar) startDate.clone(); + firstRepaymentDate.add(Calendar.MONTH, 1); + firstRepaymentDate.add(Calendar.DAY_OF_MONTH, + firstRepaymentDate.getActualMaximum(Calendar.DAY_OF_MONTH) - Calendar.DAY_OF_MONTH); + String firstRepayment = dateFormat.format(firstRepaymentDate.getTime()); + + final String loanDisbursementDate = dateFormat.format(startDate.getTime()); + final Integer clientID = ClientHelper.createClient(REQUEST_SPEC, RESPONSE_SPEC); + ClientHelper.verifyClientCreatedOnServer(REQUEST_SPEC, RESPONSE_SPEC, clientID); + final Integer loanProductID = createLoanProductWithInterestRecalculationAndCompoundingDetails( + LoanProductTestBuilder.INTEREST_PRINCIPAL_PENALTIES_FEES_ORDER_STRATEGY, + LoanProductTestBuilder.RECALCULATION_COMPOUNDING_METHOD_NONE, + LoanProductTestBuilder.RECALCULATION_STRATEGY_REDUCE_NUMBER_OF_INSTALLMENTS, + LoanProductTestBuilder.RECALCULATION_FREQUENCY_TYPE_SAME_AS_REPAYMENT_PERIOD, + LoanProductTestBuilder.INTEREST_APPLICABLE_STRATEGY_ON_PRE_CLOSE_DATE, null, "12"); + + final Integer loanID = applyForLoanApplicationForInterestRecalculation(clientID, loanProductID, loanDisbursementDate, + LoanApplicationTestBuilder.INTEREST_PRINCIPAL_PENALTIES_FEES_ORDER_STRATEGY, firstRepayment); + + Assertions.assertNotNull(loanID); + HashMap loanStatusHashMap = LoanStatusChecker.getStatusOfLoan(REQUEST_SPEC, RESPONSE_SPEC, loanID); + LoanStatusChecker.verifyLoanIsPending(loanStatusHashMap); - final ResponseSpecification errorResponse = new ResponseSpecBuilder().expectStatusCode(403).build(); - final LoanTransactionHelper validationErrorHelper = new LoanTransactionHelper(REQUEST_SPEC, errorResponse); - DateFormat dateFormat = new SimpleDateFormat(DATETIME_PATTERN, Locale.US); - dateFormat.setTimeZone(Utils.getTimeZoneOfTenant()); - GlobalConfigurationHelper.updateEnabledFlagForGlobalConfiguration(REQUEST_SPEC, RESPONSE_SPEC, "42", true); - Calendar startDate = Calendar.getInstance(Utils.getTimeZoneOfTenant()); - Calendar currentDate = Calendar.getInstance(Utils.getTimeZoneOfTenant()); - startDate.add(Calendar.MONTH, -8); - - Calendar firstRepaymentDate = (Calendar) startDate.clone(); - firstRepaymentDate.add(Calendar.MONTH, 1); - firstRepaymentDate.add(Calendar.DAY_OF_MONTH, firstRepaymentDate.getActualMaximum(Calendar.DAY_OF_MONTH) - Calendar.DAY_OF_MONTH); - String firstRepayment = dateFormat.format(firstRepaymentDate.getTime()); - - final String loanDisbursementDate = dateFormat.format(startDate.getTime()); - final Integer clientID = ClientHelper.createClient(REQUEST_SPEC, RESPONSE_SPEC); - ClientHelper.verifyClientCreatedOnServer(REQUEST_SPEC, RESPONSE_SPEC, clientID); - final Integer loanProductID = createLoanProductWithInterestRecalculationAndCompoundingDetails( - LoanProductTestBuilder.INTEREST_PRINCIPAL_PENALTIES_FEES_ORDER_STRATEGY, - LoanProductTestBuilder.RECALCULATION_COMPOUNDING_METHOD_NONE, - LoanProductTestBuilder.RECALCULATION_STRATEGY_REDUCE_NUMBER_OF_INSTALLMENTS, - LoanProductTestBuilder.RECALCULATION_FREQUENCY_TYPE_SAME_AS_REPAYMENT_PERIOD, - LoanProductTestBuilder.INTEREST_APPLICABLE_STRATEGY_ON_PRE_CLOSE_DATE, null, "12"); - - final Integer loanID = applyForLoanApplicationForInterestRecalculation(clientID, loanProductID, loanDisbursementDate, - LoanApplicationTestBuilder.INTEREST_PRINCIPAL_PENALTIES_FEES_ORDER_STRATEGY, firstRepayment); - - Assertions.assertNotNull(loanID); - HashMap loanStatusHashMap = LoanStatusChecker.getStatusOfLoan(REQUEST_SPEC, RESPONSE_SPEC, loanID); - LoanStatusChecker.verifyLoanIsPending(loanStatusHashMap); - - LOG.info("-----------------------------------APPROVE LOAN-----------------------------------------"); - loanStatusHashMap = LOAN_TRANSACTION_HELPER.approveLoan(loanDisbursementDate, loanID); - LoanStatusChecker.verifyLoanIsApproved(loanStatusHashMap); - LoanStatusChecker.verifyLoanIsWaitingForDisbursal(loanStatusHashMap); - - LOG.info("-------------------------------DISBURSE LOAN-------------------------------------------"); - String loanDetails = LOAN_TRANSACTION_HELPER.getLoanDetails(REQUEST_SPEC, RESPONSE_SPEC, loanID); - loanStatusHashMap = LOAN_TRANSACTION_HELPER.disburseLoanWithNetDisbursalAmount(loanDisbursementDate, loanID, - JsonPath.from(loanDetails).get("netDisbursalAmount").toString()); - LoanStatusChecker.verifyLoanIsActive(loanStatusHashMap); + LOG.info("-----------------------------------APPROVE LOAN-----------------------------------------"); + loanStatusHashMap = LOAN_TRANSACTION_HELPER.approveLoan(loanDisbursementDate, loanID); + LoanStatusChecker.verifyLoanIsApproved(loanStatusHashMap); + LoanStatusChecker.verifyLoanIsWaitingForDisbursal(loanStatusHashMap); - ArrayList loanSchedule = LOAN_TRANSACTION_HELPER.getLoanRepaymentSchedule(REQUEST_SPEC, RESPONSE_SPEC, loanID); - Assertions.assertNotNull(loanSchedule); - Calendar repaymentDate = (Calendar) firstRepaymentDate.clone(); - startDate.add(Calendar.DAY_OF_MONTH, 2); - String loanFirstRepaymentDate = dateFormat.format(startDate.getTime()); - // - Float earlyPayment = Float.parseFloat("3000"); - String retrieveDueDate = null; - Float amount = null; - LOAN_TRANSACTION_HELPER.makeRepayment(loanFirstRepaymentDate, earlyPayment, loanID); - for (int i = 1; i < loanSchedule.size(); i++) { + LOG.info("-------------------------------DISBURSE LOAN-------------------------------------------"); + String loanDetails = LOAN_TRANSACTION_HELPER.getLoanDetails(REQUEST_SPEC, RESPONSE_SPEC, loanID); + loanStatusHashMap = LOAN_TRANSACTION_HELPER.disburseLoanWithNetDisbursalAmount(loanDisbursementDate, loanID, + JsonPath.from(loanDetails).get("netDisbursalAmount").toString()); + LoanStatusChecker.verifyLoanIsActive(loanStatusHashMap); - retrieveDueDate = dateFormat.format(repaymentDate.getTime()); - amount = (Float) loanSchedule.get(i).get("principalOriginalDue") + (Float) loanSchedule.get(i).get("interestOriginalDue"); - if (currentDate.after(repaymentDate)) { - LOAN_TRANSACTION_HELPER.makeRepayment(retrieveDueDate, amount, loanID); - } else { - break; + ArrayList loanSchedule = LOAN_TRANSACTION_HELPER.getLoanRepaymentSchedule(REQUEST_SPEC, RESPONSE_SPEC, loanID); + Assertions.assertNotNull(loanSchedule); + Calendar repaymentDate = (Calendar) firstRepaymentDate.clone(); + startDate.add(Calendar.DAY_OF_MONTH, 2); + String loanFirstRepaymentDate = dateFormat.format(startDate.getTime()); + // + Float earlyPayment = Float.parseFloat("3000"); + String retrieveDueDate = null; + Float amount = null; + LOAN_TRANSACTION_HELPER.makeRepayment(loanFirstRepaymentDate, earlyPayment, loanID); + for (int i = 1; i < loanSchedule.size(); i++) { + + retrieveDueDate = dateFormat.format(repaymentDate.getTime()); + amount = (Float) loanSchedule.get(i).get("principalOriginalDue") + (Float) loanSchedule.get(i).get("interestOriginalDue"); + if (currentDate.after(repaymentDate)) { + LOAN_TRANSACTION_HELPER.makeRepayment(retrieveDueDate, amount, loanID); + } else { + break; + } + repaymentDate.add(Calendar.MONTH, 1); } - repaymentDate.add(Calendar.MONTH, 1); + HashMap savingsAccountErrorData = validationErrorHelper.makeRepayment(retrieveDueDate, amount, loanID); + ArrayList error = (ArrayList) savingsAccountErrorData.get("errors"); + assertEquals("error.msg.loan.transaction.cannot.be.a.future.date", error.get(0).get("userMessageGlobalisationCode")); + } finally { + GlobalConfigurationHelper.updateEnabledFlagForGlobalConfiguration(REQUEST_SPEC, RESPONSE_SPEC, "42", false); } - HashMap savingsAccountErrorData = validationErrorHelper.makeRepayment(retrieveDueDate, amount, loanID); - ArrayList error = (ArrayList) savingsAccountErrorData.get("errors"); - assertEquals("error.msg.loan.transaction.cannot.be.a.future.date", error.get(0).get("userMessageGlobalisationCode")); - GlobalConfigurationHelper.updateEnabledFlagForGlobalConfiguration(REQUEST_SPEC, RESPONSE_SPEC, "42", false); } @Test @@ -5722,6 +5738,8 @@ public void chargeAdjustmentAccountingValidation() { assertTrue(loanDetails.getStatus().getOverpaid()); } finally { GlobalConfigurationHelper.updateIsBusinessDateEnabled(REQUEST_SPEC, RESPONSE_SPEC, Boolean.FALSE); + GlobalConfigurationHelper.manageConfigurations(REQUEST_SPEC, RESPONSE_SPEC, + GlobalConfigurationHelper.ENABLE_AUTOGENERATED_EXTERNAL_ID, false); } } @@ -6256,65 +6274,69 @@ public void chargeOff() { .dateFormat(DATETIME_PATTERN).transactionDate("08 September 2022").locale("en").transactionAmount(3007.0)); } finally { GlobalConfigurationHelper.updateIsBusinessDateEnabled(REQUEST_SPEC, RESPONSE_SPEC, Boolean.FALSE); + GlobalConfigurationHelper.updateIsAutomaticExternalIdGenerationEnabled(REQUEST_SPEC, RESPONSE_SPEC, false); } } @Test public void testCloseOpenMaturityDate() { - GlobalConfigurationHelper.updateIsAutomaticExternalIdGenerationEnabled(REQUEST_SPEC, RESPONSE_SPEC, true); - final Account assetAccount = ACCOUNT_HELPER.createAssetAccount(); - final Account incomeAccount = ACCOUNT_HELPER.createIncomeAccount(); - final Account expenseAccount = ACCOUNT_HELPER.createExpenseAccount(); - final Account overpaymentAccount = ACCOUNT_HELPER.createLiabilityAccount(); - - final Integer loanProductID = createLoanProductWithPeriodicAccrualAccountingNoInterest(assetAccount, incomeAccount, expenseAccount, - overpaymentAccount); + try { + GlobalConfigurationHelper.updateIsAutomaticExternalIdGenerationEnabled(REQUEST_SPEC, RESPONSE_SPEC, true); + final Account assetAccount = ACCOUNT_HELPER.createAssetAccount(); + final Account incomeAccount = ACCOUNT_HELPER.createIncomeAccount(); + final Account expenseAccount = ACCOUNT_HELPER.createExpenseAccount(); + final Account overpaymentAccount = ACCOUNT_HELPER.createLiabilityAccount(); - final Integer clientID = ClientHelper.createClient(REQUEST_SPEC, RESPONSE_SPEC, "01 January 2011"); + final Integer loanProductID = createLoanProductWithPeriodicAccrualAccountingNoInterest(assetAccount, incomeAccount, + expenseAccount, overpaymentAccount); - final Integer loanID = applyForLoanApplication(clientID, loanProductID); + final Integer clientID = ClientHelper.createClient(REQUEST_SPEC, RESPONSE_SPEC, "01 January 2011"); - HashMap loanStatusHashMap = LoanStatusChecker.getStatusOfLoan(REQUEST_SPEC, RESPONSE_SPEC, loanID); - LoanStatusChecker.verifyLoanIsPending(loanStatusHashMap); + final Integer loanID = applyForLoanApplication(clientID, loanProductID); - loanStatusHashMap = LOAN_TRANSACTION_HELPER.approveLoan("02 September 2022", loanID); - LoanStatusChecker.verifyLoanIsApproved(loanStatusHashMap); - LoanStatusChecker.verifyLoanIsWaitingForDisbursal(loanStatusHashMap); + HashMap loanStatusHashMap = LoanStatusChecker.getStatusOfLoan(REQUEST_SPEC, RESPONSE_SPEC, loanID); + LoanStatusChecker.verifyLoanIsPending(loanStatusHashMap); - loanStatusHashMap = LOAN_TRANSACTION_HELPER.disburseLoanWithNetDisbursalAmount("03 September 2022", loanID, "1000"); - LoanStatusChecker.verifyLoanIsActive(loanStatusHashMap); + loanStatusHashMap = LOAN_TRANSACTION_HELPER.approveLoan("02 September 2022", loanID); + LoanStatusChecker.verifyLoanIsApproved(loanStatusHashMap); + LoanStatusChecker.verifyLoanIsWaitingForDisbursal(loanStatusHashMap); - GetLoansLoanIdResponse loanDetails = LOAN_TRANSACTION_HELPER.getLoanDetails((long) loanID); - LocalDate expectedMaturityDate = loanDetails.getTimeline().getExpectedMaturityDate(); - LocalDate actualMaturityDate = loanDetails.getTimeline().getActualMaturityDate(); + loanStatusHashMap = LOAN_TRANSACTION_HELPER.disburseLoanWithNetDisbursalAmount("03 September 2022", loanID, "1000"); + LoanStatusChecker.verifyLoanIsActive(loanStatusHashMap); - assertTrue(expectedMaturityDate.isEqual(actualMaturityDate)); + GetLoansLoanIdResponse loanDetails = LOAN_TRANSACTION_HELPER.getLoanDetails((long) loanID); + LocalDate expectedMaturityDate = loanDetails.getTimeline().getExpectedMaturityDate(); + LocalDate actualMaturityDate = loanDetails.getTimeline().getActualMaturityDate(); - LOAN_TRANSACTION_HELPER.makeRepayment("04 September 2022", Float.parseFloat("500"), loanID); - LOAN_TRANSACTION_HELPER.makeRepayment("05 September 2022", Float.parseFloat("700"), loanID); + assertTrue(expectedMaturityDate.isEqual(actualMaturityDate)); - loanDetails = LOAN_TRANSACTION_HELPER.getLoanDetails((long) loanID); + LOAN_TRANSACTION_HELPER.makeRepayment("04 September 2022", Float.parseFloat("500"), loanID); + LOAN_TRANSACTION_HELPER.makeRepayment("05 September 2022", Float.parseFloat("700"), loanID); - expectedMaturityDate = loanDetails.getTimeline().getExpectedMaturityDate(); - actualMaturityDate = loanDetails.getTimeline().getActualMaturityDate(); + loanDetails = LOAN_TRANSACTION_HELPER.getLoanDetails((long) loanID); - assertNotNull(expectedMaturityDate); - assertNull(actualMaturityDate); + expectedMaturityDate = loanDetails.getTimeline().getExpectedMaturityDate(); + actualMaturityDate = loanDetails.getTimeline().getActualMaturityDate(); - LOAN_TRANSACTION_HELPER.reverseLoanTransaction((long) loanID, loanDetails.getTransactions().get(1).getId(), - new PostLoansLoanIdTransactionsTransactionIdRequest().dateFormat(DATETIME_PATTERN).transactionDate("04 September 2022") - .transactionAmount(0.0).locale("en")); + assertNotNull(expectedMaturityDate); + assertNull(actualMaturityDate); - loanDetails = LOAN_TRANSACTION_HELPER.getLoanDetails((long) loanID); + LOAN_TRANSACTION_HELPER.reverseLoanTransaction((long) loanID, loanDetails.getTransactions().get(1).getId(), + new PostLoansLoanIdTransactionsTransactionIdRequest().dateFormat(DATETIME_PATTERN).transactionDate("04 September 2022") + .transactionAmount(0.0).locale("en")); - expectedMaturityDate = loanDetails.getTimeline().getExpectedMaturityDate(); - actualMaturityDate = loanDetails.getTimeline().getActualMaturityDate(); + loanDetails = LOAN_TRANSACTION_HELPER.getLoanDetails((long) loanID); - assertNotNull(expectedMaturityDate); - assertNotNull(actualMaturityDate); + expectedMaturityDate = loanDetails.getTimeline().getExpectedMaturityDate(); + actualMaturityDate = loanDetails.getTimeline().getActualMaturityDate(); - assertTrue(expectedMaturityDate.isEqual(actualMaturityDate)); + assertNotNull(expectedMaturityDate); + assertNotNull(actualMaturityDate); + assertTrue(expectedMaturityDate.isEqual(actualMaturityDate)); + } finally { + GlobalConfigurationHelper.updateIsAutomaticExternalIdGenerationEnabled(REQUEST_SPEC, RESPONSE_SPEC, false); + } } @Test diff --git a/integration-tests/src/test/java/org/apache/fineract/integrationtests/ClientSavingsIntegrationTest.java b/integration-tests/src/test/java/org/apache/fineract/integrationtests/ClientSavingsIntegrationTest.java index 8923bcefe33..1deff5deed3 100644 --- a/integration-tests/src/test/java/org/apache/fineract/integrationtests/ClientSavingsIntegrationTest.java +++ b/integration-tests/src/test/java/org/apache/fineract/integrationtests/ClientSavingsIntegrationTest.java @@ -2235,7 +2235,7 @@ public void testSavingsAccountBlockStatus() { Integer releaseTransactionId = this.savingsAccountHelper.releaseAmount(savingsId, holdTransactionId); Date today = Date.from(Utils.getLocalDateOfTenant().atStartOfDay(Utils.getZoneIdOfTenant()).toInstant()); String todayDate = today.toString(); - SimpleDateFormat dt1 = new SimpleDateFormat("dd MMM yyyy"); + SimpleDateFormat dt1 = new SimpleDateFormat("dd MMMM yyyy"); todayDate = dt1.format(today).toString(); withdrawTransactionId = (Integer) this.savingsAccountHelper.withdrawalFromSavingsAccount(savingsId, "300", todayDate, CommonConstants.RESPONSE_RESOURCE_ID); diff --git a/integration-tests/src/test/java/org/apache/fineract/integrationtests/SavingsAccountTransactionTest.java b/integration-tests/src/test/java/org/apache/fineract/integrationtests/SavingsAccountTransactionTest.java index ad52b84b10c..e5661ea8f75 100644 --- a/integration-tests/src/test/java/org/apache/fineract/integrationtests/SavingsAccountTransactionTest.java +++ b/integration-tests/src/test/java/org/apache/fineract/integrationtests/SavingsAccountTransactionTest.java @@ -50,7 +50,7 @@ public class SavingsAccountTransactionTest { public static final String ACCOUNT_TYPE_INDIVIDUAL = "INDIVIDUAL"; - public static final String DEFAULT_DATE_FORMAT = "dd MMM yyyy"; + public static final String DEFAULT_DATE_FORMAT = "dd MMMM yyyy"; final String startDateString = "03 June 2023"; final String depositDateString = "05 June 2023"; final String withdrawDateString = "10 June 2023"; diff --git a/integration-tests/src/test/java/org/apache/fineract/integrationtests/SavingsAccountTransactionsSearchIntegrationTest.java b/integration-tests/src/test/java/org/apache/fineract/integrationtests/SavingsAccountTransactionsSearchIntegrationTest.java index 4be682d153a..ca4c287fcc9 100644 --- a/integration-tests/src/test/java/org/apache/fineract/integrationtests/SavingsAccountTransactionsSearchIntegrationTest.java +++ b/integration-tests/src/test/java/org/apache/fineract/integrationtests/SavingsAccountTransactionsSearchIntegrationTest.java @@ -62,7 +62,7 @@ public class SavingsAccountTransactionsSearchIntegrationTest { public static final String ACCOUNT_TYPE_INDIVIDUAL = "INDIVIDUAL"; - public static final String DEFAULT_DATE_FORMAT = "dd MMM yyyy"; + public static final String DEFAULT_DATE_FORMAT = "dd MMMM yyyy"; public static final Locale DEFAULT_LOCALE = Locale.ENGLISH; final String startDate = "01 May 2023"; final String firstDepositDate = "05 May 2023"; diff --git a/integration-tests/src/test/java/org/apache/fineract/integrationtests/SavingsAccountsExternalIdTest.java b/integration-tests/src/test/java/org/apache/fineract/integrationtests/SavingsAccountsExternalIdTest.java index 8a068e2a7e4..8e22852d933 100644 --- a/integration-tests/src/test/java/org/apache/fineract/integrationtests/SavingsAccountsExternalIdTest.java +++ b/integration-tests/src/test/java/org/apache/fineract/integrationtests/SavingsAccountsExternalIdTest.java @@ -44,8 +44,7 @@ public class SavingsAccountsExternalIdTest extends IntegrationTest { public static final String EXTERNAL_ID = UUID.randomUUID().toString(); private final String dateFormat = "dd MMMM yyyy"; private final String locale = "en"; - private final String formattedDate = LocalDate.now(ZoneId.systemDefault()).minusDays(5) - .format(DateTimeFormatter.ofPattern("dd MMM yyyy")); + private final String formattedDate = LocalDate.now(ZoneId.systemDefault()).minusDays(5).format(DateTimeFormatter.ofPattern(dateFormat)); @Test @Order(1) diff --git a/integration-tests/src/test/java/org/apache/fineract/integrationtests/SavingsAccountsTest.java b/integration-tests/src/test/java/org/apache/fineract/integrationtests/SavingsAccountsTest.java index c340785ae1a..6c8bfffbff3 100644 --- a/integration-tests/src/test/java/org/apache/fineract/integrationtests/SavingsAccountsTest.java +++ b/integration-tests/src/test/java/org/apache/fineract/integrationtests/SavingsAccountsTest.java @@ -42,7 +42,7 @@ public class SavingsAccountsTest extends IntegrationTest { private static final Logger LOG = LoggerFactory.getLogger(SavingsAccountsTest.class); private final String dateFormat = "dd MMMM yyyy"; private final String locale = "en"; - private final SimpleDateFormat simpleDateFormat = new SimpleDateFormat("dd MMM yyyy"); + private final SimpleDateFormat simpleDateFormat = new SimpleDateFormat(dateFormat); private final String formattedDate = simpleDateFormat.format(new Date()); private int savingId = 1; diff --git a/integration-tests/src/test/java/org/apache/fineract/integrationtests/common/CenterDomain.java b/integration-tests/src/test/java/org/apache/fineract/integrationtests/common/CenterDomain.java index 5ec1af12186..d882b733a1e 100644 --- a/integration-tests/src/test/java/org/apache/fineract/integrationtests/common/CenterDomain.java +++ b/integration-tests/src/test/java/org/apache/fineract/integrationtests/common/CenterDomain.java @@ -150,7 +150,7 @@ public static String jsonRequestToCreateCenter(Integer id, Integer statusId, Str if (active) { map.put("active", "true"); map.put("locale", "en"); - map.put("dateFormat", "dd MMM yyyy"); + map.put("dateFormat", "dd MMMM yyyy"); map.put("activationDate", activationDate); } else { map.put("active", "false"); diff --git a/integration-tests/src/test/java/org/apache/fineract/integrationtests/common/CenterHelper.java b/integration-tests/src/test/java/org/apache/fineract/integrationtests/common/CenterHelper.java index 413e647669a..53bdfc758b1 100644 --- a/integration-tests/src/test/java/org/apache/fineract/integrationtests/common/CenterHelper.java +++ b/integration-tests/src/test/java/org/apache/fineract/integrationtests/common/CenterHelper.java @@ -113,7 +113,7 @@ public static int createCenter(final String name, final int officeId, final Stri if (activationDate != null) { hm.put("active", true); hm.put("locale", "en"); - hm.put("dateFormat", "dd MMM yyyy"); + hm.put("dateFormat", "dd MMMM yyyy"); hm.put("activationDate", activationDate); } diff --git a/integration-tests/src/test/java/org/apache/fineract/integrationtests/common/shares/DividendsIntegrationTests.java b/integration-tests/src/test/java/org/apache/fineract/integrationtests/common/shares/DividendsIntegrationTests.java index a4ecbc51741..1c995beda9e 100644 --- a/integration-tests/src/test/java/org/apache/fineract/integrationtests/common/shares/DividendsIntegrationTests.java +++ b/integration-tests/src/test/java/org/apache/fineract/integrationtests/common/shares/DividendsIntegrationTests.java @@ -58,7 +58,7 @@ public void setup() { @SuppressWarnings("unchecked") @Test public void testCreateDividends() { - DateFormat simple = new SimpleDateFormat("dd MMM yyyy"); + DateFormat simple = new SimpleDateFormat("dd MMMM yyyy"); final Integer productId = createShareProduct(); ArrayList shareAccounts = new ArrayList<>(); for (int i = 0; i < 5; i++) { @@ -109,12 +109,12 @@ public void testCreateDividends() { Calendar cal = Calendar.getInstance(); cal.set(startdateList.get(0), startdateList.get(1) - 1, startdateList.get(2)); Date startDate = cal.getTime(); - Assertions.assertEquals("01 Jan 2015", simple.format(startDate)); + Assertions.assertEquals("01 January 2015", simple.format(startDate)); List enddateList = (List) dividend.get("dividendPeriodEndDate"); cal = Calendar.getInstance(); cal.set(enddateList.get(0), enddateList.get(1) - 1, enddateList.get(2)); Date endDate = cal.getTime(); - Assertions.assertEquals("01 Apr 2016", simple.format(endDate)); + Assertions.assertEquals("01 April 2016", simple.format(endDate)); Map dividenddetails = ShareDividendsTransactionHelper.retrieveDividendDetails(productId, dividendId, requestSpec, responseSpec); @@ -151,12 +151,12 @@ public void testCreateDividends() { cal = Calendar.getInstance(); cal.set(startdateList.get(0), startdateList.get(1) - 1, startdateList.get(2)); startDate = cal.getTime(); - Assertions.assertEquals("01 Jan 2015", simple.format(startDate)); + Assertions.assertEquals("01 January 2015", simple.format(startDate)); enddateList = (List) dividend.get("dividendPeriodEndDate"); cal = Calendar.getInstance(); cal.set(enddateList.get(0), enddateList.get(1) - 1, enddateList.get(2)); endDate = cal.getTime(); - Assertions.assertEquals("01 Apr 2016", simple.format(endDate)); + Assertions.assertEquals("01 April 2016", simple.format(endDate)); dividenddetails = ShareDividendsTransactionHelper.retrieveDividendDetails(productId, dividendId, requestSpec, responseSpec); Assertions.assertEquals("5", String.valueOf(dividenddetails.get("totalFilteredRecords"))); diff --git a/integration-tests/src/test/java/org/apache/fineract/integrationtests/common/shares/ShareAccountIntegrationTests.java b/integration-tests/src/test/java/org/apache/fineract/integrationtests/common/shares/ShareAccountIntegrationTests.java index ff84125deb1..4da6723dfd0 100644 --- a/integration-tests/src/test/java/org/apache/fineract/integrationtests/common/shares/ShareAccountIntegrationTests.java +++ b/integration-tests/src/test/java/org/apache/fineract/integrationtests/common/shares/ShareAccountIntegrationTests.java @@ -383,7 +383,7 @@ public void testCreateShareAccountWithCharges() { Map shareAccountDataForUpdate = new HashMap<>(); shareAccountDataForUpdate.put("requestedShares", 30); - shareAccountDataForUpdate.put("applicationDate", "02 Mar 2016"); + shareAccountDataForUpdate.put("applicationDate", "02 March 2016"); shareAccountDataForUpdate.put("dateFormat", "dd MMMM yyyy"); shareAccountDataForUpdate.put("locale", "en_GB"); shareAccountDataForUpdate.put("charges", charges); @@ -394,7 +394,7 @@ public void testCreateShareAccountWithCharges() { List> transactions = (List>) shareAccountData.get("purchasedShares"); Assertions.assertNotNull(transactions); Assertions.assertEquals(2, transactions.size()); - DateFormat simple = new SimpleDateFormat("dd MMM yyyy"); + DateFormat simple = new SimpleDateFormat("dd MMMM yyyy"); for (int i = 0; i < transactions.size(); i++) { Map transaction = transactions.get(i); Map transactionTypeMap = (Map) transaction.get("type"); @@ -409,7 +409,7 @@ public void testCreateShareAccountWithCharges() { Assertions.assertEquals("60.0", String.valueOf(transaction.get("amountPaid"))); Assertions.assertEquals("2.0", String.valueOf(transaction.get("chargeAmount"))); Assertions.assertEquals("2.0", String.valueOf(transaction.get("purchasedPrice"))); - Assertions.assertEquals("02 Mar 2016", simple.format(date)); + Assertions.assertEquals("02 March 2016", simple.format(date)); } else if (transactionType.equals("charge.payment")) { Assertions.assertEquals("2.0", String.valueOf(transaction.get("amount"))); Assertions.assertEquals("0", String.valueOf(transaction.get("amountPaid"))); @@ -444,7 +444,7 @@ public void testCreateShareAccountWithCharges() { Map approveMap = new HashMap<>(); approveMap.put("note", "Share Account Approval Note"); approveMap.put("dateFormat", "dd MMMM yyyy"); - approveMap.put("approvedDate", "01 Jan 2016"); + approveMap.put("approvedDate", "01 January 2016"); approveMap.put("locale", "en"); String approve = new Gson().toJson(approveMap); ShareAccountTransactionHelper.postCommand("approve", shareAccountId, approve, requestSpec, responseSpec); @@ -456,7 +456,7 @@ public void testCreateShareAccountWithCharges() { Calendar cal = Calendar.getInstance(); cal.set(dateList.get(0), dateList.get(1) - 1, dateList.get(2)); Date approvedDate = cal.getTime(); - Assertions.assertEquals("01 Jan 2016", simple.format(approvedDate)); + Assertions.assertEquals("01 January 2016", simple.format(approvedDate)); // charges verification chargesList = (List>) shareAccountData.get("charges"); @@ -483,7 +483,7 @@ public void testCreateShareAccountWithCharges() { Map activateMap = new HashMap<>(); activateMap.put("dateFormat", "dd MMMM yyyy"); - activateMap.put("activatedDate", "01 Jan 2016"); + activateMap.put("activatedDate", "01 January 2016"); activateMap.put("locale", "en"); String activateJson = new Gson().toJson(activateMap); ShareAccountTransactionHelper.postCommand("activate", shareAccountId, activateJson, requestSpec, responseSpec); @@ -495,7 +495,7 @@ public void testCreateShareAccountWithCharges() { cal = Calendar.getInstance(); cal.set(dateList.get(0), dateList.get(1) - 1, dateList.get(2)); Date activatedDate = cal.getTime(); - Assertions.assertEquals("01 Jan 2016", simple.format(activatedDate)); + Assertions.assertEquals("01 January 2016", simple.format(activatedDate)); transactions = (List>) shareAccountData.get("purchasedShares"); Assertions.assertNotNull(transactions); @@ -514,12 +514,12 @@ public void testCreateShareAccountWithCharges() { Assertions.assertEquals("62.0", String.valueOf(transaction.get("amountPaid"))); Assertions.assertEquals("2.0", String.valueOf(transaction.get("chargeAmount"))); Assertions.assertEquals("2.0", String.valueOf(transaction.get("purchasedPrice"))); - Assertions.assertEquals("02 Mar 2016", simple.format(date)); + Assertions.assertEquals("02 March 2016", simple.format(date)); } else if (transactionType.equals("charge.payment")) { Assertions.assertEquals("2.0", String.valueOf(transaction.get("amount"))); Assertions.assertEquals("2.0", String.valueOf(transaction.get("amountPaid"))); Assertions.assertEquals("0", String.valueOf(transaction.get("chargeAmount"))); - Assertions.assertEquals("01 Jan 2016", simple.format(date)); + Assertions.assertEquals("01 January 2016", simple.format(date)); } } @@ -552,7 +552,7 @@ public void testCreateShareAccountWithCharges() { // apply additional shares Map additionalSharesRequestMap = new HashMap<>(); - additionalSharesRequestMap.put("requestedDate", "01 Apr 2016"); + additionalSharesRequestMap.put("requestedDate", "01 April 2016"); additionalSharesRequestMap.put("dateFormat", "dd MMMM yyyy"); additionalSharesRequestMap.put("locale", "en"); additionalSharesRequestMap.put("requestedShares", "15"); @@ -573,13 +573,13 @@ public void testCreateShareAccountWithCharges() { Date date = cal.getTime(); String transactionType = (String) transactionTypeMap.get("code"); String transactionDate = simple.format(date); - if (transactionType.equals("purchasedSharesType.purchased") && transactionDate.equals("02 Mar 2016")) { + if (transactionType.equals("purchasedSharesType.purchased") && transactionDate.equals("02 March 2016")) { Assertions.assertEquals("30", String.valueOf(transaction.get("numberOfShares"))); Assertions.assertEquals("62.0", String.valueOf(transaction.get("amount"))); Assertions.assertEquals("62.0", String.valueOf(transaction.get("amountPaid"))); Assertions.assertEquals("2.0", String.valueOf(transaction.get("chargeAmount"))); Assertions.assertEquals("2.0", String.valueOf(transaction.get("purchasedPrice"))); - } else if (transactionType.equals("purchasedSharesType.purchased") && transactionDate.equals("01 Apr 2016")) { + } else if (transactionType.equals("purchasedSharesType.purchased") && transactionDate.equals("01 April 2016")) { addtionalSharesRequestId = String.valueOf(transaction.get("id")); Assertions.assertEquals("15", String.valueOf(transaction.get("numberOfShares"))); Assertions.assertEquals("32.0", String.valueOf(transaction.get("amount"))); @@ -593,7 +593,7 @@ public void testCreateShareAccountWithCharges() { Assertions.assertEquals("2.0", String.valueOf(transaction.get("amount"))); Assertions.assertEquals("2.0", String.valueOf(transaction.get("amountPaid"))); Assertions.assertEquals("0", String.valueOf(transaction.get("chargeAmount"))); - Assertions.assertEquals("01 Jan 2016", transactionDate); + Assertions.assertEquals("01 January 2016", transactionDate); } } @@ -648,13 +648,13 @@ public void testCreateShareAccountWithCharges() { Date date = cal.getTime(); String transactionType = (String) transactionTypeMap.get("code"); String transactionDate = simple.format(date); - if (transactionType.equals("purchasedSharesType.purchased") && transactionDate.equals("02 Mar 2016")) { + if (transactionType.equals("purchasedSharesType.purchased") && transactionDate.equals("02 March 2016")) { Assertions.assertEquals("30", String.valueOf(transaction.get("numberOfShares"))); Assertions.assertEquals("62.0", String.valueOf(transaction.get("amount"))); Assertions.assertEquals("62.0", String.valueOf(transaction.get("amountPaid"))); Assertions.assertEquals("2.0", String.valueOf(transaction.get("chargeAmount"))); Assertions.assertEquals("2.0", String.valueOf(transaction.get("purchasedPrice"))); - } else if (transactionType.equals("purchasedSharesType.purchased") && transactionDate.equals("01 Apr 2016")) { + } else if (transactionType.equals("purchasedSharesType.purchased") && transactionDate.equals("01 April 2016")) { Assertions.assertEquals("15", String.valueOf(transaction.get("numberOfShares"))); Assertions.assertEquals("32.0", String.valueOf(transaction.get("amount"))); Assertions.assertEquals("32.0", String.valueOf(transaction.get("amountPaid"))); @@ -667,7 +667,7 @@ public void testCreateShareAccountWithCharges() { Assertions.assertEquals("2.0", String.valueOf(transaction.get("amount"))); Assertions.assertEquals("2.0", String.valueOf(transaction.get("amountPaid"))); Assertions.assertEquals("0", String.valueOf(transaction.get("chargeAmount"))); - Assertions.assertEquals("01 Jan 2016", transactionDate); + Assertions.assertEquals("01 January 2016", transactionDate); } } @@ -843,13 +843,13 @@ public void testCreateShareAccountWithCharges() { Date date = cal.getTime(); String transactionType = (String) transactionTypeMap.get("code"); String transactionDate = simple.format(date); - if (transactionType.equals("purchasedSharesType.purchased") && transactionDate.equals("02 Mar 2016")) { + if (transactionType.equals("purchasedSharesType.purchased") && transactionDate.equals("02 March 2016")) { Assertions.assertEquals("30", String.valueOf(transaction.get("numberOfShares"))); Assertions.assertEquals("62.0", String.valueOf(transaction.get("amount"))); Assertions.assertEquals("62.0", String.valueOf(transaction.get("amountPaid"))); Assertions.assertEquals("2.0", String.valueOf(transaction.get("chargeAmount"))); Assertions.assertEquals("2.0", String.valueOf(transaction.get("purchasedPrice"))); - } else if (transactionType.equals("purchasedSharesType.purchased") && transactionDate.equals("01 Apr 2016")) { + } else if (transactionType.equals("purchasedSharesType.purchased") && transactionDate.equals("01 April 2016")) { Assertions.assertEquals("15", String.valueOf(transaction.get("numberOfShares"))); Assertions.assertEquals("32.0", String.valueOf(transaction.get("amount"))); Assertions.assertEquals("32.0", String.valueOf(transaction.get("amountPaid"))); @@ -868,7 +868,7 @@ public void testCreateShareAccountWithCharges() { Assertions.assertEquals("2.0", String.valueOf(transaction.get("amount"))); Assertions.assertEquals("2.0", String.valueOf(transaction.get("amountPaid"))); Assertions.assertEquals("0", String.valueOf(transaction.get("chargeAmount"))); - Assertions.assertEquals("01 Jan 2016", transactionDate); + Assertions.assertEquals("01 January 2016", transactionDate); } } @@ -921,13 +921,13 @@ public void testCreateShareAccountWithCharges() { Date date = cal.getTime(); String transactionType = (String) transactionTypeMap.get("code"); String transactionDate = simple.format(date); - if (transactionType.equals("purchasedSharesType.purchased") && transactionDate.equals("02 Mar 2016")) { + if (transactionType.equals("purchasedSharesType.purchased") && transactionDate.equals("02 March 2016")) { Assertions.assertEquals("30", String.valueOf(transaction.get("numberOfShares"))); Assertions.assertEquals("62.0", String.valueOf(transaction.get("amount"))); Assertions.assertEquals("62.0", String.valueOf(transaction.get("amountPaid"))); Assertions.assertEquals("2.0", String.valueOf(transaction.get("chargeAmount"))); Assertions.assertEquals("2.0", String.valueOf(transaction.get("purchasedPrice"))); - } else if (transactionType.equals("purchasedSharesType.purchased") && transactionDate.equals("01 Apr 2016")) { + } else if (transactionType.equals("purchasedSharesType.purchased") && transactionDate.equals("01 April 2016")) { Assertions.assertEquals("15", String.valueOf(transaction.get("numberOfShares"))); Assertions.assertEquals("32.0", String.valueOf(transaction.get("amount"))); Assertions.assertEquals("32.0", String.valueOf(transaction.get("amountPaid"))); @@ -953,7 +953,7 @@ public void testCreateShareAccountWithCharges() { Assertions.assertEquals("2.0", String.valueOf(transaction.get("amount"))); Assertions.assertEquals("2.0", String.valueOf(transaction.get("amountPaid"))); Assertions.assertEquals("0", String.valueOf(transaction.get("chargeAmount"))); - Assertions.assertEquals("01 Jan 2016", transactionDate); + Assertions.assertEquals("01 January 2016", transactionDate); } } // charges verification @@ -990,16 +990,16 @@ private Integer createShareProduct() { private Integer createShareAccount(final Integer clientId, final Integer productId, final Integer savingsAccountId) { String josn = new ShareAccountHelper().withClientId(String.valueOf(clientId)).withProductId(String.valueOf(productId)) - .withExternalId("External1").withSavingsAccountId(String.valueOf(savingsAccountId)).withSubmittedDate("01 Jan 2016") - .withApplicationDate("01 Jan 2016").withRequestedShares("25").build(); + .withExternalId("External1").withSavingsAccountId(String.valueOf(savingsAccountId)).withSubmittedDate("01 January 2016") + .withApplicationDate("01 January 2016").withRequestedShares("25").build(); return ShareAccountTransactionHelper.createShareAccount(josn, requestSpec, responseSpec); } private Integer createShareAccount(final Integer clientId, final Integer productId, final Integer savingsAccountId, List> charges) { String josn = new ShareAccountHelper().withClientId(String.valueOf(clientId)).withProductId(String.valueOf(productId)) - .withExternalId("External1").withSavingsAccountId(String.valueOf(savingsAccountId)).withSubmittedDate("01 Jan 2016") - .withApplicationDate("01 Jan 2016").withRequestedShares("25").withCharges(charges).build(); + .withExternalId("External1").withSavingsAccountId(String.valueOf(savingsAccountId)).withSubmittedDate("01 January 2016") + .withApplicationDate("01 January 2016").withRequestedShares("25").withCharges(charges).build(); return ShareAccountTransactionHelper.createShareAccount(josn, requestSpec, responseSpec); }