in fineract-loan/src/main/java/org/apache/fineract/portfolio/loanproduct/data/LoanProductData.java [996:1192]
public LoanProductData(final LoanProductData productData, final Collection<ChargeData> chargeOptions,
final Collection<ChargeData> penaltyOptions, final Collection<PaymentTypeData> paymentTypeOptions,
final Collection<CurrencyData> currencyOptions, final List<EnumOptionData> amortizationTypeOptions,
final List<EnumOptionData> interestTypeOptions, final List<EnumOptionData> interestCalculationPeriodTypeOptions,
final List<EnumOptionData> repaymentFrequencyTypeOptions, final List<EnumOptionData> interestRateFrequencyTypeOptions,
final Collection<FundData> fundOptions, final Collection<TransactionProcessingStrategyData> transactionStrategyOptions,
final Collection<RateData> rateOptions, final Map<String, List<GLAccountData>> accountingMappingOptions,
final List<EnumOptionData> accountingRuleOptions, final List<EnumOptionData> valueConditionTypeOptions,
final List<EnumOptionData> daysInMonthTypeOptions, final List<EnumOptionData> daysInYearTypeOptions,
final List<EnumOptionData> interestRecalculationCompoundingTypeOptions,
final List<EnumOptionData> rescheduleStrategyTypeOptions, final List<EnumOptionData> interestRecalculationFrequencyTypeOptions,
final List<EnumOptionData> preCloseInterestCalculationStrategyOptions, final List<FloatingRateData> floatingRateOptions,
final List<EnumOptionData> interestRecalculationNthDayTypeOptions,
final List<EnumOptionData> interestRecalculationDayOfWeekTypeOptions, final boolean isRatesEnabled,
final Collection<DelinquencyBucketData> delinquencyBucketOptions, final List<EnumOptionData> repaymentStartDateTypeOptions,
final List<EnumOptionData> advancedPaymentAllocationTransactionTypes,
final List<EnumOptionData> advancedPaymentAllocationFutureInstallmentAllocationRules,
final List<EnumOptionData> advancedPaymentAllocationTypes, final List<EnumOptionData> loanScheduleTypeOptions,
final List<EnumOptionData> loanScheduleProcessingTypeOptions, final List<EnumOptionData> creditAllocationTransactionTypes,
final List<EnumOptionData> creditAllocationAllocationTypes,
final List<StringEnumOptionData> supportedInterestRefundTypesOptions,
final List<StringEnumOptionData> chargeOffBehaviourOptions, final List<CodeValueData> chargeOffReasonOptions,
final List<StringEnumOptionData> daysInYearCustomStrategyOptions,
final List<StringEnumOptionData> capitalizedIncomeCalculationTypeOptions,
final List<StringEnumOptionData> capitalizedIncomeStrategyOptions,
final List<StringEnumOptionData> capitalizedIncomeTypeOptions) {
this.id = productData.id;
this.name = productData.name;
this.shortName = productData.shortName;
this.description = productData.description;
this.fundId = productData.fundId;
this.fundName = productData.fundName;
this.principal = productData.principal;
this.minPrincipal = productData.minPrincipal;
this.maxPrincipal = productData.maxPrincipal;
this.inArrearsTolerance = productData.inArrearsTolerance;
this.numberOfRepayments = productData.numberOfRepayments;
this.minNumberOfRepayments = productData.minNumberOfRepayments;
this.maxNumberOfRepayments = productData.maxNumberOfRepayments;
this.repaymentEvery = productData.repaymentEvery;
this.fixedLength = productData.fixedLength;
this.interestRatePerPeriod = productData.interestRatePerPeriod;
this.minInterestRatePerPeriod = productData.minInterestRatePerPeriod;
this.maxInterestRatePerPeriod = productData.maxInterestRatePerPeriod;
this.annualInterestRate = productData.annualInterestRate;
this.isLinkedToFloatingInterestRates = productData.isLinkedToFloatingInterestRates;
this.floatingRateId = productData.floatingRateId;
this.floatingRateName = productData.floatingRateName;
this.interestRateDifferential = productData.interestRateDifferential;
this.minDifferentialLendingRate = productData.minDifferentialLendingRate;
this.defaultDifferentialLendingRate = productData.defaultDifferentialLendingRate;
this.maxDifferentialLendingRate = productData.maxDifferentialLendingRate;
this.isFloatingInterestRateCalculationAllowed = productData.isFloatingInterestRateCalculationAllowed;
this.allowVariableInstallments = productData.allowVariableInstallments;
this.minimumGap = productData.minimumGap;
this.maximumGap = productData.maximumGap;
this.repaymentFrequencyType = productData.repaymentFrequencyType;
this.interestRateFrequencyType = productData.interestRateFrequencyType;
this.amortizationType = productData.amortizationType;
this.interestType = productData.interestType;
this.interestCalculationPeriodType = productData.interestCalculationPeriodType;
this.allowPartialPeriodInterestCalculation = productData.allowPartialPeriodInterestCalculation;
this.startDate = productData.startDate;
this.closeDate = productData.closeDate;
this.status = productData.status;
this.externalId = productData.externalId;
this.charges = nullIfEmpty(productData.charges());
this.principalVariationsForBorrowerCycle = productData.principalVariationsForBorrowerCycle;
this.interestRateVariationsForBorrowerCycle = productData.interestRateVariationsForBorrowerCycle;
this.numberOfRepaymentVariationsForBorrowerCycle = productData.numberOfRepaymentVariationsForBorrowerCycle;
this.accountingRule = productData.accountingRule;
this.accountingMappings = productData.accountingMappings;
this.paymentChannelToFundSourceMappings = productData.paymentChannelToFundSourceMappings;
this.feeToIncomeAccountMappings = productData.feeToIncomeAccountMappings;
this.penaltyToIncomeAccountMappings = productData.penaltyToIncomeAccountMappings;
this.chargeOffReasonToExpenseAccountMappings = productData.chargeOffReasonToExpenseAccountMappings;
this.chargeOptions = chargeOptions;
this.penaltyOptions = penaltyOptions;
this.paymentTypeOptions = paymentTypeOptions;
this.currencyOptions = currencyOptions;
this.currency = productData.currency;
this.fundOptions = fundOptions;
this.transactionProcessingStrategyOptions = transactionStrategyOptions;
this.rateOptions = rateOptions;
this.floatingRateOptions = floatingRateOptions;
if (this.transactionProcessingStrategyOptions != null && this.transactionProcessingStrategyOptions.size() == 1) {
final List<TransactionProcessingStrategyData> listOfOptions = new ArrayList<>(this.transactionProcessingStrategyOptions);
this.transactionProcessingStrategyCode = listOfOptions.get(0).getCode();
this.transactionProcessingStrategyName = listOfOptions.get(0).getName();
} else {
this.transactionProcessingStrategyCode = productData.transactionProcessingStrategyCode;
this.transactionProcessingStrategyName = productData.transactionProcessingStrategyName;
}
this.graceOnPrincipalPayment = productData.graceOnPrincipalPayment;
this.recurringMoratoriumOnPrincipalPeriods = productData.recurringMoratoriumOnPrincipalPeriods;
this.graceOnInterestPayment = productData.graceOnInterestPayment;
this.graceOnInterestCharged = productData.graceOnInterestCharged;
this.includeInBorrowerCycle = productData.includeInBorrowerCycle;
this.useBorrowerCycle = productData.useBorrowerCycle;
this.multiDisburseLoan = productData.multiDisburseLoan;
this.maxTrancheCount = productData.maxTrancheCount;
this.outstandingLoanBalance = productData.outstandingLoanBalance;
this.disallowExpectedDisbursements = productData.disallowExpectedDisbursements;
this.allowApprovedDisbursedAmountsOverApplied = productData.allowApprovedDisbursedAmountsOverApplied;
this.overAppliedCalculationType = productData.overAppliedCalculationType;
this.overAppliedNumber = productData.overAppliedNumber;
this.minimumDaysBetweenDisbursalAndFirstRepayment = productData.minimumDaysBetweenDisbursalAndFirstRepayment;
this.amortizationTypeOptions = amortizationTypeOptions;
this.interestTypeOptions = interestTypeOptions;
this.interestCalculationPeriodTypeOptions = interestCalculationPeriodTypeOptions;
this.interestRecalculationNthDayTypeOptions = interestRecalculationNthDayTypeOptions;
this.interestRecalculationDayOfWeekTypeOptions = interestRecalculationDayOfWeekTypeOptions;
this.repaymentFrequencyTypeOptions = repaymentFrequencyTypeOptions;
this.interestRateFrequencyTypeOptions = interestRateFrequencyTypeOptions;
this.accountingMappingOptions = accountingMappingOptions;
this.accountingRuleOptions = accountingRuleOptions;
this.valueConditionTypeOptions = valueConditionTypeOptions;
this.graceOnArrearsAgeing = productData.graceOnArrearsAgeing;
this.overdueDaysForNPA = productData.overdueDaysForNPA;
this.daysInMonthType = productData.daysInMonthType;
this.daysInYearType = productData.daysInYearType;
this.isInterestRecalculationEnabled = productData.isInterestRecalculationEnabled;
this.interestRecalculationData = productData.interestRecalculationData;
this.holdGuaranteeFunds = productData.holdGuaranteeFunds;
this.productGuaranteeData = productData.productGuaranteeData;
this.principalThresholdForLastInstallment = productData.principalThresholdForLastInstallment;
this.fixedPrincipalPercentagePerInstallment = productData.fixedPrincipalPercentagePerInstallment;
this.accountMovesOutOfNPAOnlyOnArrearsCompletion = productData.accountMovesOutOfNPAOnlyOnArrearsCompletion;
this.daysInMonthTypeOptions = daysInMonthTypeOptions;
this.daysInYearTypeOptions = daysInYearTypeOptions;
this.interestRecalculationCompoundingTypeOptions = interestRecalculationCompoundingTypeOptions;
this.rescheduleStrategyTypeOptions = rescheduleStrategyTypeOptions;
this.allowAttributeOverrides = productData.allowAttributeOverrides;
if (CollectionUtils.isEmpty(interestRecalculationFrequencyTypeOptions)) {
this.interestRecalculationFrequencyTypeOptions = null;
} else {
this.interestRecalculationFrequencyTypeOptions = interestRecalculationFrequencyTypeOptions;
}
this.canDefineInstallmentAmount = productData.canDefineInstallmentAmount;
this.installmentAmountInMultiplesOf = productData.installmentAmountInMultiplesOf;
this.preClosureInterestCalculationStrategyOptions = preCloseInterestCalculationStrategyOptions;
this.syncExpectedWithDisbursementDate = productData.syncExpectedWithDisbursementDate;
this.canUseForTopup = productData.canUseForTopup;
this.isEqualAmortization = productData.isEqualAmortization;
this.rates = productData.rates;
this.isRatesEnabled = isRatesEnabled;
this.delinquencyBucketOptions = delinquencyBucketOptions;
this.delinquencyBucket = productData.delinquencyBucket;
this.dueDaysForRepaymentEvent = productData.dueDaysForRepaymentEvent;
this.overDueDaysForRepaymentEvent = productData.overDueDaysForRepaymentEvent;
this.enableDownPayment = productData.enableDownPayment;
this.disbursedAmountPercentageForDownPayment = productData.disbursedAmountPercentageForDownPayment;
this.enableAutoRepaymentForDownPayment = productData.enableAutoRepaymentForDownPayment;
this.paymentAllocation = productData.paymentAllocation;
this.creditAllocation = productData.creditAllocation;
this.repaymentStartDateType = productData.repaymentStartDateType;
this.repaymentStartDateTypeOptions = repaymentStartDateTypeOptions;
this.advancedPaymentAllocationTransactionTypes = advancedPaymentAllocationTransactionTypes;
this.advancedPaymentAllocationFutureInstallmentAllocationRules = advancedPaymentAllocationFutureInstallmentAllocationRules;
this.advancedPaymentAllocationTypes = advancedPaymentAllocationTypes;
this.creditAllocationAllocationTypes = creditAllocationAllocationTypes;
this.creditAllocationTransactionTypes = creditAllocationTransactionTypes;
this.enableInstallmentLevelDelinquency = productData.enableInstallmentLevelDelinquency;
this.loanScheduleType = productData.getLoanScheduleType();
this.loanScheduleProcessingType = productData.getLoanScheduleProcessingType();
this.loanScheduleProcessingTypeOptions = loanScheduleProcessingTypeOptions;
this.loanScheduleTypeOptions = loanScheduleTypeOptions;
this.enableAccrualActivityPosting = productData.enableAccrualActivityPosting;
this.supportedInterestRefundTypesOptions = supportedInterestRefundTypesOptions;
this.supportedInterestRefundTypes = productData.supportedInterestRefundTypes;
this.chargeOffBehaviour = productData.chargeOffBehaviour;
this.chargeOffBehaviourOptions = chargeOffBehaviourOptions;
this.chargeOffReasonOptions = chargeOffReasonOptions;
this.interestRecognitionOnDisbursementDate = productData.interestRecognitionOnDisbursementDate;
this.daysInYearCustomStrategyOptions = daysInYearCustomStrategyOptions;
this.daysInYearCustomStrategy = productData.daysInYearCustomStrategy;
this.enableIncomeCapitalization = productData.enableIncomeCapitalization;
this.capitalizedIncomeCalculationType = productData.capitalizedIncomeCalculationType;
this.capitalizedIncomeStrategy = productData.capitalizedIncomeStrategy;
this.capitalizedIncomeType = productData.capitalizedIncomeType;
this.capitalizedIncomeCalculationTypeOptions = capitalizedIncomeCalculationTypeOptions;
this.capitalizedIncomeStrategyOptions = capitalizedIncomeStrategyOptions;
this.capitalizedIncomeTypeOptions = capitalizedIncomeTypeOptions;
}