4343import org .apache .fineract .client .models .PostClassificationToIncomeAccountMappings ;
4444import org .apache .fineract .client .models .PostLoanProductsRequest ;
4545import org .apache .fineract .client .models .PostLoanProductsResponse ;
46+ import org .apache .fineract .client .models .PostWriteOffReasonToExpenseAccountMappings ;
4647import org .apache .fineract .client .services .LoanProductsApi ;
4748import org .apache .fineract .test .data .AdvancePaymentsAdjustmentType ;
4849import org .apache .fineract .test .data .ChargeProductType ;
5556import org .apache .fineract .test .data .PreClosureInterestCalculationRule ;
5657import org .apache .fineract .test .data .RecalculationRestFrequencyType ;
5758import org .apache .fineract .test .data .TransactionProcessingStrategyCode ;
59+ import org .apache .fineract .test .data .codevalue .CodeValue ;
60+ import org .apache .fineract .test .data .codevalue .CodeValueResolver ;
61+ import org .apache .fineract .test .data .codevalue .DefaultCodeValue ;
5862import org .apache .fineract .test .data .loanproduct .DefaultLoanProduct ;
5963import org .apache .fineract .test .factory .LoanProductsRequestFactory ;
64+ import org .apache .fineract .test .helper .CodeHelper ;
6065import org .apache .fineract .test .helper .Utils ;
6166import org .apache .fineract .test .support .TestContext ;
6267import org .apache .fineract .test .support .TestContextKey ;
@@ -69,6 +74,8 @@ public class LoanProductGlobalInitializerStep implements FineractGlobalInitializ
6974
7075 private final LoanProductsApi loanProductsApi ;
7176 private final LoanProductsRequestFactory loanProductsRequestFactory ;
77+ private final CodeHelper codeHelper ;
78+ private final CodeValueResolver codeValueResolver ;
7279
7380 @ Override
7481 public void initialize () throws Exception {
@@ -1319,7 +1326,7 @@ public void initialize() throws Exception {
13191326 .recalculationRestFrequencyType (1 )//
13201327 .recalculationRestFrequencyInterval (1 )//
13211328 .repaymentEvery (1 )//
1322- .interestRatePerPeriod (( double ) 7.0 )//
1329+ .interestRatePerPeriod (7D )//
13231330 .interestRateFrequencyType (INTEREST_RATE_FREQUENCY_TYPE_MONTH )//
13241331 .enableDownPayment (false )//
13251332 .interestRecalculationCompoundingMethod (0 )//
@@ -3818,6 +3825,56 @@ public void initialize() throws Exception {
38183825 TestContext .INSTANCE .set (
38193826 TestContextKey .DEFAULT_LOAN_PRODUCT_CREATE_RESPONSE_LP2_PROGRESSIVE_ADV_PMNT_ALLOCATION_CAPITALIZED_INCOME_ADJ_CUSTOM_ALLOC_CLASSIFICATION_INCOME_MAP ,
38203827 responseLoanProductsRequestLP2ProgressiveAdvPaymAllocCapitaizedIncomeClassificationIncomeMap );
3828+
3829+ // LP2 with progressive loan schedule + horizontal + interest EMI + 360/30
3830+ // + interest recalculation, buy down fees enabled
3831+ // + Write off reason expense map
3832+ final String name142 = DefaultLoanProduct .LP2_PROGRESSIVE_ADVANCED_PAYMENT_ALLOCATION_WRITE_OFF_REASON_MAP .getName ();
3833+ final Long writeOffReasonCodeId = codeHelper .retrieveCodeByName ("WriteOffReasons" ).getId ();
3834+ final CodeValue writeOffReasonCodeValueBadDebt = DefaultCodeValue .valueOf ("BAD_DEBT" );
3835+ final CodeValue writeOffReasonCodeValueForgiven = DefaultCodeValue .valueOf ("FORGIVEN" );
3836+ final CodeValue writeOffReasonCodeValueTest = DefaultCodeValue .valueOf ("TEST" );
3837+ long writeOffReasonIdBadDebt = codeValueResolver .resolve (writeOffReasonCodeId , writeOffReasonCodeValueBadDebt );
3838+ long writeOffReasonIdForgiven = codeValueResolver .resolve (writeOffReasonCodeId , writeOffReasonCodeValueForgiven );
3839+ long writeOffReasonIdTest = codeValueResolver .resolve (writeOffReasonCodeId , writeOffReasonCodeValueTest );
3840+
3841+ List <PostWriteOffReasonToExpenseAccountMappings > writeOffReasonToExpenseAccountMappings = new ArrayList <>();
3842+ PostWriteOffReasonToExpenseAccountMappings writeOffReasonToExpenseAccountMappingsBadDebt = new PostWriteOffReasonToExpenseAccountMappings ();
3843+ writeOffReasonToExpenseAccountMappingsBadDebt .setWriteOffReasonCodeValueId (String .valueOf (writeOffReasonIdBadDebt ));
3844+ writeOffReasonToExpenseAccountMappingsBadDebt .setExpenseAccountId ("12" ); // Credit Loss/Bad Debt
3845+ PostWriteOffReasonToExpenseAccountMappings writeOffReasonToExpenseAccountMappingsForgiven = new PostWriteOffReasonToExpenseAccountMappings ();
3846+ writeOffReasonToExpenseAccountMappingsForgiven .setWriteOffReasonCodeValueId (String .valueOf (writeOffReasonIdForgiven ));
3847+ writeOffReasonToExpenseAccountMappingsForgiven .setExpenseAccountId ("23" ); // Buy Down Expense
3848+ PostWriteOffReasonToExpenseAccountMappings writeOffReasonToExpenseAccountMappingsTest = new PostWriteOffReasonToExpenseAccountMappings ();
3849+ writeOffReasonToExpenseAccountMappingsTest .setWriteOffReasonCodeValueId (String .valueOf (writeOffReasonIdTest ));
3850+ writeOffReasonToExpenseAccountMappingsTest .setExpenseAccountId ("16" ); // Written off
3851+
3852+ writeOffReasonToExpenseAccountMappings .add (writeOffReasonToExpenseAccountMappingsBadDebt );
3853+ writeOffReasonToExpenseAccountMappings .add (writeOffReasonToExpenseAccountMappingsForgiven );
3854+ writeOffReasonToExpenseAccountMappings .add (writeOffReasonToExpenseAccountMappingsTest );
3855+
3856+ final PostLoanProductsRequest loanProductsRequestLP2ProgressiveAdvPaymentWriteOffReasonMap = loanProductsRequestFactory
3857+ .defaultLoanProductsRequestLP2BuyDownFees ()//
3858+ .name (name142 )//
3859+ .transactionProcessingStrategyCode (ADVANCED_PAYMENT_ALLOCATION .getValue ())//
3860+ .loanScheduleType ("PROGRESSIVE" ) //
3861+ .isInterestRecalculationEnabled (true )//
3862+ .preClosureInterestCalculationStrategy (1 )//
3863+ .rescheduleStrategyMethod (4 )//
3864+ .interestRecalculationCompoundingMethod (0 )//
3865+ .recalculationRestFrequencyType (2 )//
3866+ .recalculationRestFrequencyInterval (1 )//
3867+ .paymentAllocation (List .of (//
3868+ createPaymentAllocation ("DEFAULT" , "NEXT_INSTALLMENT" ), //
3869+ createPaymentAllocation ("GOODWILL_CREDIT" , "LAST_INSTALLMENT" ), //
3870+ createPaymentAllocation ("MERCHANT_ISSUED_REFUND" , "REAMORTIZATION" ), //
3871+ createPaymentAllocation ("PAYOUT_REFUND" , "NEXT_INSTALLMENT" )))//
3872+ .writeOffReasonsToExpenseMappings (writeOffReasonToExpenseAccountMappings );//
3873+
3874+ final Response <PostLoanProductsResponse > responseLoanProductsRequestLP2ProgressiveAdvPaymentWriteOffReasonMap = loanProductsApi
3875+ .createLoanProduct (loanProductsRequestLP2ProgressiveAdvPaymentWriteOffReasonMap ).execute ();
3876+ TestContext .INSTANCE .set (TestContextKey .DEFAULT_LOAN_PRODUCT_CREATE_RESPONSE_LP2_PROGRESSIVE_ADV_PYMNT_WRITE_OFF_REASON_MAP ,
3877+ responseLoanProductsRequestLP2ProgressiveAdvPaymentWriteOffReasonMap );
38213878 }
38223879
38233880 public static AdvancedPaymentData createPaymentAllocation (String transactionType , String futureInstallmentAllocationRule ,
0 commit comments