diff --git a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/loanaccount/service/LoanProductRelatedDetailAssembler.java b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/loanaccount/service/LoanProductRelatedDetailAssembler.java index f84b80acc..6ba2b9909 100644 --- a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/loanaccount/service/LoanProductRelatedDetailAssembler.java +++ b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/loanaccount/service/LoanProductRelatedDetailAssembler.java @@ -57,6 +57,6 @@ public class LoanProductRelatedDetailAssembler { return new LoanProductRelatedDetail(currency, principalAmount, defaultNominalInterestRatePerPeriod, interestPeriodFrequencyType, defaultAnnualNominalInterestRate, interestMethod, interestCalculationPeriodMethod, repayEvery, repaymentFrequencyType, - defaultNumberOfInstallments, amortizationMethod, inArrearsTolerance, null); + defaultNumberOfInstallments, amortizationMethod, inArrearsTolerance); } } \ No newline at end of file diff --git a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/loanproduct/domain/LoanProduct.java b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/loanproduct/domain/LoanProduct.java index 4ae641c43..ff52e38a8 100644 --- a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/loanproduct/domain/LoanProduct.java +++ b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/loanproduct/domain/LoanProduct.java @@ -58,6 +58,9 @@ public class LoanProduct extends AbstractAuditableCustom { @Embedded private final LoanProductRelatedDetail loanProductRelatedDetail; + @Column(name = "accounting_type", nullable = false) + private Integer accountingType; + public static LoanProduct assembleFromJson(final Fund fund, final LoanTransactionProcessingStrategy loanTransactionProcessingStrategy, final Set productCharges, final JsonCommand command, final AprCalculator aprCalculator) { @@ -83,8 +86,7 @@ public class LoanProduct extends AbstractAuditableCustom { final Integer repaymentEvery = command.integerValueOfParameterNamed("repaymentEvery"); final Integer numberOfRepayments = command.integerValueOfParameterNamed("numberOfRepayments"); final BigDecimal inArrearsTolerance = command.bigDecimalValueOfParameterNamed("inArrearsTolerance"); - final AccountingRuleType accountingRuleType = AccountingRuleType.fromInt(command - .integerValueOfParameterNamed("accountingType")); + final AccountingRuleType accountingRuleType = AccountingRuleType.fromInt(command.integerValueOfParameterNamed("accountingType")); return new LoanProduct(fund, loanTransactionProcessingStrategy, name, description, currency, principal, interestRatePerPeriod, interestFrequencyType, annualInterestRate, interestMethod, interestCalculationPeriodMethod, repaymentEvery, @@ -118,7 +120,11 @@ public class LoanProduct extends AbstractAuditableCustom { this.loanProductRelatedDetail = new LoanProductRelatedDetail(currency, defaultPrincipal, defaultNominalInterestRatePerPeriod, interestPeriodFrequencyType, defaultAnnualNominalInterestRate, interestMethod, interestCalculationPeriodMethod, repayEvery, - repaymentFrequencyType, defaultNumberOfInstallments, amortizationMethod, inArrearsTolerance, accountingRuleType); + repaymentFrequencyType, defaultNumberOfInstallments, amortizationMethod, inArrearsTolerance); + + if (accountingRuleType != null) { + this.accountingType = accountingRuleType.getValue(); + } } public MonetaryCurrency getCurrency() { @@ -128,7 +134,7 @@ public class LoanProduct extends AbstractAuditableCustom { public Set getCharges() { return charges; } - + public void update(final Fund fund) { this.fund = fund; } @@ -145,6 +151,13 @@ public class LoanProduct extends AbstractAuditableCustom { final Map actualChanges = this.loanProductRelatedDetail.update(command, aprCalculator); + final String accountingTypeParamName = "accountingType"; + if (command.isChangeInIntegerParameterNamed(accountingTypeParamName, this.accountingType)) { + final Integer newValue = command.integerValueOfParameterNamed(accountingTypeParamName); + actualChanges.put(accountingTypeParamName, newValue); + this.accountingType = newValue; + } + final String nameParamName = "name"; if (command.isChangeInStringParameterNamed(nameParamName, this.name)) { final String newValue = command.stringValueOfParameterNamed(nameParamName); diff --git a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/loanproduct/domain/LoanProductRelatedDetail.java b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/loanproduct/domain/LoanProductRelatedDetail.java index 0d48abf90..7edc826ac 100644 --- a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/loanproduct/domain/LoanProductRelatedDetail.java +++ b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/loanproduct/domain/LoanProductRelatedDetail.java @@ -73,23 +73,7 @@ public class LoanProductRelatedDetail implements LoanProductMinimumRepaymentSche @Column(name = "arrearstolerance_amount", scale = 6, precision = 19, nullable = true) private BigDecimal inArrearsTolerance; - - @Column(name = "accounting_type", nullable = false) - private Integer accountingType; - public static LoanProductRelatedDetail createFrom(final MonetaryCurrency currency, final BigDecimal principal, - final BigDecimal nominalInterestRatePerPeriod, final PeriodFrequencyType interestRatePeriodFrequencyType, - final BigDecimal nominalAnnualInterestRate, final InterestMethod interestMethod, - final InterestCalculationPeriodMethod interestCalculationPeriodMethod, final Integer repaymentEvery, - final PeriodFrequencyType repaymentPeriodFrequencyType, final Integer numberOfRepayments, - final AmortizationMethod amortizationMethod, final BigDecimal inArrearsTolerance, - final AccountingRuleType accountingRuleType) { - - return new LoanProductRelatedDetail(currency, principal, nominalInterestRatePerPeriod, interestRatePeriodFrequencyType, - nominalAnnualInterestRate, interestMethod, interestCalculationPeriodMethod, repaymentEvery, repaymentPeriodFrequencyType, - numberOfRepayments, amortizationMethod, inArrearsTolerance, accountingRuleType); - } - public static LoanProductRelatedDetail createFrom(final MonetaryCurrency currency, final BigDecimal principal, final BigDecimal nominalInterestRatePerPeriod, final PeriodFrequencyType interestRatePeriodFrequencyType, final BigDecimal nominalAnnualInterestRate, final InterestMethod interestMethod, @@ -99,7 +83,7 @@ public class LoanProductRelatedDetail implements LoanProductMinimumRepaymentSche return new LoanProductRelatedDetail(currency, principal, nominalInterestRatePerPeriod, interestRatePeriodFrequencyType, nominalAnnualInterestRate, interestMethod, interestCalculationPeriodMethod, repaymentEvery, repaymentPeriodFrequencyType, - numberOfRepayments, amortizationMethod, inArrearsTolerance, null); + numberOfRepayments, amortizationMethod, inArrearsTolerance); } protected LoanProductRelatedDetail() { @@ -111,8 +95,7 @@ public class LoanProductRelatedDetail implements LoanProductMinimumRepaymentSche final BigDecimal defaultAnnualNominalInterestRate, final InterestMethod interestMethod, final InterestCalculationPeriodMethod interestCalculationPeriodMethod, final Integer repayEvery, final PeriodFrequencyType repaymentFrequencyType, final Integer defaultNumberOfRepayments, - final AmortizationMethod amortizationMethod, final BigDecimal inArrearsTolerance, - final AccountingRuleType accountingRuleType) { + final AmortizationMethod amortizationMethod, final BigDecimal inArrearsTolerance) { this.currency = currency; this.principal = defaultPrincipal; this.nominalInterestRatePerPeriod = defaultNominalInterestRatePerPeriod; @@ -129,9 +112,6 @@ public class LoanProductRelatedDetail implements LoanProductMinimumRepaymentSche } else { this.inArrearsTolerance = inArrearsTolerance; } - if(accountingRuleType !=null){ - this.accountingType = accountingRuleType.getValue(); - } } public MonetaryCurrency getCurrency() { @@ -184,11 +164,6 @@ public class LoanProductRelatedDetail implements LoanProductMinimumRepaymentSche public AmortizationMethod getAmortizationMethod() { return amortizationMethod; } - - - public Integer getAccountingType() { - return this.accountingType; - } public Map update(final JsonCommand command, final AprCalculator aprCalculator) { @@ -310,13 +285,6 @@ public class LoanProductRelatedDetail implements LoanProductMinimumRepaymentSche actualChanges.put("locale", localeAsInput); this.interestCalculationPeriodMethod = InterestCalculationPeriodMethod.fromInt(newValue); } - - final String accountingTypeParamName = "accountingType"; - if (command.isChangeInIntegerParameterNamed(accountingTypeParamName, this.accountingType)) { - final Integer newValue = command.integerValueOfParameterNamed(accountingTypeParamName); - actualChanges.put(accountingTypeParamName, newValue); - this.accountingType = newValue; - } return actualChanges; } diff --git a/mifosng-provider/src/test/java/org/mifosplatform/portfolio/loanaccount/LoanProductRelatedDetailTestHelper.java b/mifosng-provider/src/test/java/org/mifosplatform/portfolio/loanaccount/LoanProductRelatedDetailTestHelper.java index 03392f210..5a40c5d7a 100644 --- a/mifosng-provider/src/test/java/org/mifosplatform/portfolio/loanaccount/LoanProductRelatedDetailTestHelper.java +++ b/mifosng-provider/src/test/java/org/mifosplatform/portfolio/loanaccount/LoanProductRelatedDetailTestHelper.java @@ -11,135 +11,120 @@ import org.mifosplatform.portfolio.loanproduct.domain.LoanProductRelatedDetail; import org.mifosplatform.portfolio.loanproduct.domain.PeriodFrequencyType; /** - * This class is used to keep in one place configurations for setting up {@link LoanProductRelatedDetail} object used in {@link LoanScheduleGenerator}'s + * This class is used to keep in one place configurations for setting up + * {@link LoanProductRelatedDetail} object used in {@link LoanScheduleGenerator} + * 's */ public class LoanProductRelatedDetailTestHelper { - - public static LoanProductRelatedDetail createSettingsForEqualPrincipalAmortizationQuarterly() { - - MonetaryCurrency currency = new MonetaryCurrencyBuilder().withCode("USD").withDigitsAfterDecimal(2).build(); - BigDecimal defaultPrincipal = BigDecimal.valueOf(Double.valueOf("200000")); - - // 2% per month, 24% per year - BigDecimal defaultNominalInterestRatePerPeriod = BigDecimal.valueOf(Double.valueOf("2")); - PeriodFrequencyType interestPeriodFrequencyType = PeriodFrequencyType.MONTHS; - BigDecimal defaultAnnualNominalInterestRate = BigDecimal.valueOf(Double.valueOf("24")); - - InterestMethod interestMethod = InterestMethod.DECLINING_BALANCE; - InterestCalculationPeriodMethod interestCalculationPeriodMethod = InterestCalculationPeriodMethod.SAME_AS_REPAYMENT_PERIOD; - Integer repayEvery = Integer.valueOf(3); - PeriodFrequencyType repaymentFrequencyType = PeriodFrequencyType.MONTHS; - - Integer defaultNumberOfRepayments = Integer.valueOf(4); - AmortizationMethod amortizationMethod = AmortizationMethod.EQUAL_PRINCIPAL; - - BigDecimal inArrearsTolerance = BigDecimal.ZERO; - - return createLoanProductRelatedDetail(currency, defaultPrincipal, - defaultNominalInterestRatePerPeriod, - interestPeriodFrequencyType, defaultAnnualNominalInterestRate, - interestMethod, interestCalculationPeriodMethod, repayEvery, - repaymentFrequencyType, defaultNumberOfRepayments, - amortizationMethod, inArrearsTolerance); - } - public static LoanProductRelatedDetail createSettingsForEqualInstallmentAmortizationQuarterly() { - MonetaryCurrency currency = new MonetaryCurrencyBuilder().withCode("USD").withDigitsAfterDecimal(2).build(); - BigDecimal defaultPrincipal = BigDecimal.valueOf(Double.valueOf("200000")); - - // 2% per month, 24% per year - BigDecimal defaultNominalInterestRatePerPeriod = BigDecimal.valueOf(Double.valueOf("2")); - PeriodFrequencyType interestPeriodFrequencyType = PeriodFrequencyType.MONTHS; - BigDecimal defaultAnnualNominalInterestRate = BigDecimal.valueOf(Double.valueOf("24")); - - InterestMethod interestMethod = InterestMethod.DECLINING_BALANCE; - InterestCalculationPeriodMethod interestCalculationPeriodMethod = InterestCalculationPeriodMethod.SAME_AS_REPAYMENT_PERIOD; - Integer repayEvery = Integer.valueOf(3); - PeriodFrequencyType repaymentFrequencyType = PeriodFrequencyType.MONTHS; - - Integer defaultNumberOfRepayments = Integer.valueOf(4); - AmortizationMethod amortizationMethod = AmortizationMethod.EQUAL_INSTALLMENTS; - - BigDecimal inArrearsTolerance = BigDecimal.ZERO; - - return createLoanProductRelatedDetail(currency, defaultPrincipal, - defaultNominalInterestRatePerPeriod, - interestPeriodFrequencyType, defaultAnnualNominalInterestRate, - interestMethod, interestCalculationPeriodMethod, repayEvery, - repaymentFrequencyType, defaultNumberOfRepayments, - amortizationMethod, inArrearsTolerance); - } - - public static LoanProductRelatedDetail createSettingsForFlatQuarterly(final AmortizationMethod amortizationMethod) { - - MonetaryCurrency currency = new MonetaryCurrencyBuilder().withCode("USD").withDigitsAfterDecimal(2).build(); - BigDecimal defaultPrincipal = BigDecimal.valueOf(Double.valueOf("200000")); - - // 2% per month, 24% per year - BigDecimal defaultNominalInterestRatePerPeriod = BigDecimal.valueOf(Double.valueOf("2")); - PeriodFrequencyType interestPeriodFrequencyType = PeriodFrequencyType.MONTHS; - BigDecimal defaultAnnualNominalInterestRate = BigDecimal.valueOf(Double.valueOf("24")); - - InterestMethod interestMethod = InterestMethod.FLAT; - InterestCalculationPeriodMethod interestCalculationPeriodMethod = InterestCalculationPeriodMethod.SAME_AS_REPAYMENT_PERIOD; - Integer repayEvery = Integer.valueOf(3); - PeriodFrequencyType repaymentFrequencyType = PeriodFrequencyType.MONTHS; - - Integer defaultNumberOfRepayments = Integer.valueOf(4); - - BigDecimal inArrearsTolerance = BigDecimal.ZERO; - - return createLoanProductRelatedDetail(currency, defaultPrincipal, - defaultNominalInterestRatePerPeriod, - interestPeriodFrequencyType, defaultAnnualNominalInterestRate, - interestMethod, interestCalculationPeriodMethod, repayEvery, - repaymentFrequencyType, defaultNumberOfRepayments, - amortizationMethod, inArrearsTolerance); - } - - public static LoanProductRelatedDetail createSettingsForIrregularFlatEveryFourMonths() { - - MonetaryCurrency currency = new MonetaryCurrencyBuilder().withCode("KSH").withDigitsAfterDecimal(0).build(); - BigDecimal defaultPrincipal = BigDecimal.valueOf(Double.valueOf("15000")); - - // 2% per month, 24% per year - BigDecimal defaultNominalInterestRatePerPeriod = BigDecimal.valueOf(Double.valueOf("2")); - PeriodFrequencyType interestPeriodFrequencyType = PeriodFrequencyType.MONTHS; - BigDecimal defaultAnnualNominalInterestRate = BigDecimal.valueOf(Double.valueOf("24")); - - InterestMethod interestMethod = InterestMethod.FLAT; - InterestCalculationPeriodMethod interestCalculationPeriodMethod = InterestCalculationPeriodMethod.SAME_AS_REPAYMENT_PERIOD; - Integer repayEvery = Integer.valueOf(3); - PeriodFrequencyType repaymentFrequencyType = PeriodFrequencyType.MONTHS; - - Integer defaultNumberOfRepayments = Integer.valueOf(2); - - BigDecimal inArrearsTolerance = BigDecimal.ZERO; - - AmortizationMethod amortizationMethod = AmortizationMethod.EQUAL_PRINCIPAL; - - return createLoanProductRelatedDetail(currency, defaultPrincipal, - defaultNominalInterestRatePerPeriod, - interestPeriodFrequencyType, defaultAnnualNominalInterestRate, - interestMethod, interestCalculationPeriodMethod, repayEvery, - repaymentFrequencyType, defaultNumberOfRepayments, - amortizationMethod, inArrearsTolerance); - } - - - private static LoanProductRelatedDetail createLoanProductRelatedDetail( - MonetaryCurrency currency, BigDecimal defaultPrincipal, - BigDecimal defaultNominalInterestRatePerPeriod, - PeriodFrequencyType interestPeriodFrequencyType, - BigDecimal defaultAnnualNominalInterestRate, - InterestMethod interestMethod, - InterestCalculationPeriodMethod interestCalculationPeriodMethod, - Integer repayEvery, PeriodFrequencyType repaymentFrequencyType, - Integer defaultNumberOfRepayments, - AmortizationMethod amortizationMethod, BigDecimal inArrearsTolerance) { - - return new LoanProductRelatedDetail(currency, defaultPrincipal, defaultNominalInterestRatePerPeriod, - interestPeriodFrequencyType, defaultAnnualNominalInterestRate, interestMethod, - interestCalculationPeriodMethod, repayEvery, repaymentFrequencyType, defaultNumberOfRepayments, amortizationMethod, inArrearsTolerance, null); - } + public static LoanProductRelatedDetail createSettingsForEqualPrincipalAmortizationQuarterly() { + + MonetaryCurrency currency = new MonetaryCurrencyBuilder().withCode("USD").withDigitsAfterDecimal(2).build(); + BigDecimal defaultPrincipal = BigDecimal.valueOf(Double.valueOf("200000")); + + // 2% per month, 24% per year + BigDecimal defaultNominalInterestRatePerPeriod = BigDecimal.valueOf(Double.valueOf("2")); + PeriodFrequencyType interestPeriodFrequencyType = PeriodFrequencyType.MONTHS; + BigDecimal defaultAnnualNominalInterestRate = BigDecimal.valueOf(Double.valueOf("24")); + + InterestMethod interestMethod = InterestMethod.DECLINING_BALANCE; + InterestCalculationPeriodMethod interestCalculationPeriodMethod = InterestCalculationPeriodMethod.SAME_AS_REPAYMENT_PERIOD; + Integer repayEvery = Integer.valueOf(3); + PeriodFrequencyType repaymentFrequencyType = PeriodFrequencyType.MONTHS; + + Integer defaultNumberOfRepayments = Integer.valueOf(4); + AmortizationMethod amortizationMethod = AmortizationMethod.EQUAL_PRINCIPAL; + + BigDecimal inArrearsTolerance = BigDecimal.ZERO; + + return createLoanProductRelatedDetail(currency, defaultPrincipal, defaultNominalInterestRatePerPeriod, interestPeriodFrequencyType, + defaultAnnualNominalInterestRate, interestMethod, interestCalculationPeriodMethod, repayEvery, repaymentFrequencyType, + defaultNumberOfRepayments, amortizationMethod, inArrearsTolerance); + } + + public static LoanProductRelatedDetail createSettingsForEqualInstallmentAmortizationQuarterly() { + MonetaryCurrency currency = new MonetaryCurrencyBuilder().withCode("USD").withDigitsAfterDecimal(2).build(); + BigDecimal defaultPrincipal = BigDecimal.valueOf(Double.valueOf("200000")); + + // 2% per month, 24% per year + BigDecimal defaultNominalInterestRatePerPeriod = BigDecimal.valueOf(Double.valueOf("2")); + PeriodFrequencyType interestPeriodFrequencyType = PeriodFrequencyType.MONTHS; + BigDecimal defaultAnnualNominalInterestRate = BigDecimal.valueOf(Double.valueOf("24")); + + InterestMethod interestMethod = InterestMethod.DECLINING_BALANCE; + InterestCalculationPeriodMethod interestCalculationPeriodMethod = InterestCalculationPeriodMethod.SAME_AS_REPAYMENT_PERIOD; + Integer repayEvery = Integer.valueOf(3); + PeriodFrequencyType repaymentFrequencyType = PeriodFrequencyType.MONTHS; + + Integer defaultNumberOfRepayments = Integer.valueOf(4); + AmortizationMethod amortizationMethod = AmortizationMethod.EQUAL_INSTALLMENTS; + + BigDecimal inArrearsTolerance = BigDecimal.ZERO; + + return createLoanProductRelatedDetail(currency, defaultPrincipal, defaultNominalInterestRatePerPeriod, interestPeriodFrequencyType, + defaultAnnualNominalInterestRate, interestMethod, interestCalculationPeriodMethod, repayEvery, repaymentFrequencyType, + defaultNumberOfRepayments, amortizationMethod, inArrearsTolerance); + } + + public static LoanProductRelatedDetail createSettingsForFlatQuarterly(final AmortizationMethod amortizationMethod) { + + MonetaryCurrency currency = new MonetaryCurrencyBuilder().withCode("USD").withDigitsAfterDecimal(2).build(); + BigDecimal defaultPrincipal = BigDecimal.valueOf(Double.valueOf("200000")); + + // 2% per month, 24% per year + BigDecimal defaultNominalInterestRatePerPeriod = BigDecimal.valueOf(Double.valueOf("2")); + PeriodFrequencyType interestPeriodFrequencyType = PeriodFrequencyType.MONTHS; + BigDecimal defaultAnnualNominalInterestRate = BigDecimal.valueOf(Double.valueOf("24")); + + InterestMethod interestMethod = InterestMethod.FLAT; + InterestCalculationPeriodMethod interestCalculationPeriodMethod = InterestCalculationPeriodMethod.SAME_AS_REPAYMENT_PERIOD; + Integer repayEvery = Integer.valueOf(3); + PeriodFrequencyType repaymentFrequencyType = PeriodFrequencyType.MONTHS; + + Integer defaultNumberOfRepayments = Integer.valueOf(4); + + BigDecimal inArrearsTolerance = BigDecimal.ZERO; + + return createLoanProductRelatedDetail(currency, defaultPrincipal, defaultNominalInterestRatePerPeriod, interestPeriodFrequencyType, + defaultAnnualNominalInterestRate, interestMethod, interestCalculationPeriodMethod, repayEvery, repaymentFrequencyType, + defaultNumberOfRepayments, amortizationMethod, inArrearsTolerance); + } + + public static LoanProductRelatedDetail createSettingsForIrregularFlatEveryFourMonths() { + + MonetaryCurrency currency = new MonetaryCurrencyBuilder().withCode("KSH").withDigitsAfterDecimal(0).build(); + BigDecimal defaultPrincipal = BigDecimal.valueOf(Double.valueOf("15000")); + + // 2% per month, 24% per year + BigDecimal defaultNominalInterestRatePerPeriod = BigDecimal.valueOf(Double.valueOf("2")); + PeriodFrequencyType interestPeriodFrequencyType = PeriodFrequencyType.MONTHS; + BigDecimal defaultAnnualNominalInterestRate = BigDecimal.valueOf(Double.valueOf("24")); + + InterestMethod interestMethod = InterestMethod.FLAT; + InterestCalculationPeriodMethod interestCalculationPeriodMethod = InterestCalculationPeriodMethod.SAME_AS_REPAYMENT_PERIOD; + Integer repayEvery = Integer.valueOf(3); + PeriodFrequencyType repaymentFrequencyType = PeriodFrequencyType.MONTHS; + + Integer defaultNumberOfRepayments = Integer.valueOf(2); + + BigDecimal inArrearsTolerance = BigDecimal.ZERO; + + AmortizationMethod amortizationMethod = AmortizationMethod.EQUAL_PRINCIPAL; + + return createLoanProductRelatedDetail(currency, defaultPrincipal, defaultNominalInterestRatePerPeriod, interestPeriodFrequencyType, + defaultAnnualNominalInterestRate, interestMethod, interestCalculationPeriodMethod, repayEvery, repaymentFrequencyType, + defaultNumberOfRepayments, amortizationMethod, inArrearsTolerance); + } + + private static LoanProductRelatedDetail createLoanProductRelatedDetail(MonetaryCurrency currency, BigDecimal defaultPrincipal, + BigDecimal defaultNominalInterestRatePerPeriod, PeriodFrequencyType interestPeriodFrequencyType, + BigDecimal defaultAnnualNominalInterestRate, InterestMethod interestMethod, + InterestCalculationPeriodMethod interestCalculationPeriodMethod, Integer repayEvery, + PeriodFrequencyType repaymentFrequencyType, Integer defaultNumberOfRepayments, AmortizationMethod amortizationMethod, + BigDecimal inArrearsTolerance) { + + return new LoanProductRelatedDetail(currency, defaultPrincipal, defaultNominalInterestRatePerPeriod, interestPeriodFrequencyType, + defaultAnnualNominalInterestRate, interestMethod, interestCalculationPeriodMethod, repayEvery, repaymentFrequencyType, + defaultNumberOfRepayments, amortizationMethod, inArrearsTolerance); + } } \ No newline at end of file