Code cleanup - loan product
This commit is contained in:
committed by
Arnold Gálovics
parent
8b3975f8d7
commit
7a2af51e6c
+1
-1
@@ -368,7 +368,7 @@ public class AuditReadPlatformServiceImpl implements AuditReadPlatformService {
|
||||
commandAsJsonMap.remove(typeName);
|
||||
|
||||
final Integer enumTypeId = auditObject.get(typeName).getAsInt();
|
||||
final String code = LoanEnumerations.loanEnumueration(typeName, enumTypeId).getValue();
|
||||
final String code = LoanEnumerations.loanEnumeration(typeName, enumTypeId).getValue();
|
||||
if (code != null) {
|
||||
commandAsJsonMap.put(typeName, code);
|
||||
}
|
||||
|
||||
+1
-1
@@ -647,7 +647,7 @@ public class LoansApiResource {
|
||||
interestCalculationPeriodTypeOptions = this.dropdownReadPlatformService.retrieveLoanInterestRateCalculatedInPeriodOptions();
|
||||
|
||||
fundOptions = this.fundReadPlatformService.retrieveAllFunds();
|
||||
repaymentStrategyOptions = this.dropdownReadPlatformService.retreiveTransactionProcessingStrategies();
|
||||
repaymentStrategyOptions = this.dropdownReadPlatformService.retrieveTransactionProcessingStrategies();
|
||||
if (product.getMultiDisburseLoan()) {
|
||||
chargeOptions = this.chargeReadPlatformService.retrieveLoanAccountApplicableCharges(loanId,
|
||||
new ChargeTimeType[] { ChargeTimeType.OVERDUE_INSTALLMENT });
|
||||
|
||||
+2
-2
@@ -1333,7 +1333,7 @@ public final class LoanAccountData {
|
||||
final CollectionData delinquent) {
|
||||
LoanProductConfigurableAttributes loanProductConfigurableAttributes = null;
|
||||
if (acc.product != null) {
|
||||
loanProductConfigurableAttributes = acc.product.getloanProductConfigurableAttributes();
|
||||
loanProductConfigurableAttributes = acc.product.getLoanProductConfigurableAttributes();
|
||||
}
|
||||
|
||||
return new LoanAccountData(acc.id, acc.accountNo, acc.status, acc.externalId, acc.clientId, acc.clientAccountNo, acc.clientName,
|
||||
@@ -1788,7 +1788,7 @@ public final class LoanAccountData {
|
||||
this.createStandingInstructionAtDisbursement = createStandingInstructionAtDisbursement;
|
||||
this.paidInAdvance = paidInAdvance;
|
||||
if (this.product != null) {
|
||||
this.product.setloanProductConfigurableAttributes(product.getloanProductConfigurableAttributes());
|
||||
this.product.setLoanProductConfigurableAttributes(product.getLoanProductConfigurableAttributes());
|
||||
}
|
||||
this.interestRatesPeriods = interestRatesPeriods;
|
||||
this.isVariableInstallmentsAllowed = isVariableInstallmentsAllowed;
|
||||
|
||||
+2
-2
@@ -33,7 +33,7 @@ import org.apache.fineract.portfolio.group.domain.Group;
|
||||
|
||||
@Entity
|
||||
@Table(name = "glim_accounts", uniqueConstraints = { @UniqueConstraint(columnNames = { "account_number" }, name = "FK_glim_id") })
|
||||
public final class GroupLoanIndividualMonitoringAccount extends AbstractPersistableCustom {
|
||||
public class GroupLoanIndividualMonitoringAccount extends AbstractPersistableCustom {
|
||||
|
||||
@ManyToOne
|
||||
@JoinColumn(name = "group_id", nullable = false)
|
||||
@@ -60,7 +60,7 @@ public final class GroupLoanIndividualMonitoringAccount extends AbstractPersista
|
||||
@Column(name = "application_id", nullable = true)
|
||||
private BigDecimal applicationId;
|
||||
|
||||
private GroupLoanIndividualMonitoringAccount() {}
|
||||
protected GroupLoanIndividualMonitoringAccount() {}
|
||||
|
||||
private GroupLoanIndividualMonitoringAccount(String accountNumber, Group group, BigDecimal principalAmount, Long childAccountsCount,
|
||||
Boolean isAcceptingChild, Integer loanStatus, BigDecimal applicationId) {
|
||||
|
||||
+3
-3
@@ -2769,7 +2769,7 @@ public class Loan extends AbstractAuditableWithUTCDateTimeCustom {
|
||||
final LoanApplicationTerms loanApplicationTerms = constructLoanApplicationTerms(scheduleGeneratorDTO);
|
||||
LoanScheduleGenerator loanScheduleGenerator = null;
|
||||
if (loanApplicationTerms.isEqualAmortization()) {
|
||||
if (loanApplicationTerms.getInterestMethod().isDecliningBalnce()) {
|
||||
if (loanApplicationTerms.getInterestMethod().isDecliningBalance()) {
|
||||
final LoanScheduleGenerator decliningLoanScheduleGenerator = scheduleGeneratorDTO.getLoanScheduleFactory()
|
||||
.create(InterestMethod.DECLINING_BALANCE);
|
||||
Set<LoanCharge> loanCharges = charges();
|
||||
@@ -2801,7 +2801,7 @@ public class Loan extends AbstractAuditableWithUTCDateTimeCustom {
|
||||
LocalDate interestRateStartDate = DateUtils.getBusinessLocalDate();
|
||||
for (FloatingRatePeriodData periodData : applicableRates) {
|
||||
LoanTermVariationsData loanTermVariation = new LoanTermVariationsData(
|
||||
LoanEnumerations.loanvariationType(LoanTermVariationType.INTEREST_RATE), periodData.getFromDateAsLocalDate(),
|
||||
LoanEnumerations.loanVariationType(LoanTermVariationType.INTEREST_RATE), periodData.getFromDateAsLocalDate(),
|
||||
periodData.getInterestRate(), dateValue, isSpecificToInstallment);
|
||||
if (!interestRateStartDate.isBefore(periodData.getFromDateAsLocalDate())) {
|
||||
interestRateStartDate = periodData.getFromDateAsLocalDate();
|
||||
@@ -4771,7 +4771,7 @@ public class Loan extends AbstractAuditableWithUTCDateTimeCustom {
|
||||
}
|
||||
|
||||
public void updateInterestRateFrequencyType() {
|
||||
this.loanRepaymentScheduleDetail.updatenterestPeriodFrequencyType(this.loanProduct.getInterestPeriodFrequencyType());
|
||||
this.loanRepaymentScheduleDetail.updateInterestPeriodFrequencyType(this.loanProduct.getInterestPeriodFrequencyType());
|
||||
}
|
||||
|
||||
public Integer getTermFrequency() {
|
||||
|
||||
+1
-1
@@ -114,7 +114,7 @@ public class LoanTermVariations extends AbstractPersistableCustom {
|
||||
}
|
||||
|
||||
public LoanTermVariationsData toData() {
|
||||
EnumOptionData type = LoanEnumerations.loanvariationType(this.termType);
|
||||
EnumOptionData type = LoanEnumerations.loanVariationType(this.termType);
|
||||
return new LoanTermVariationsData(getId(), type, this.termApplicableFrom, this.decimalValue, this.dateValue,
|
||||
this.isSpecificToInstallment);
|
||||
}
|
||||
|
||||
+4
-4
@@ -1018,7 +1018,7 @@ public abstract class AbstractLoanScheduleGenerator implements LoanScheduleGener
|
||||
for (LoanTermVariationsData variation : interestRatesForInstallments) {
|
||||
if (variation.isApplicable(modifiedScheduledDueDate) && variation.getDecimalValue() != null && !variation.isProcessed()) {
|
||||
loanApplicationTerms.updateAnnualNominalInterestRate(variation.getDecimalValue());
|
||||
if (loanApplicationTerms.getInterestMethod().isDecliningBalnce()) {
|
||||
if (loanApplicationTerms.getInterestMethod().isDecliningBalance()) {
|
||||
if (loanApplicationTerms.getActualFixedEmiAmount() == null) {
|
||||
loanApplicationTerms.setFixedEmiAmount(null);
|
||||
}
|
||||
@@ -1046,7 +1046,7 @@ public abstract class AbstractLoanScheduleGenerator implements LoanScheduleGener
|
||||
scheduleParams.setActualRepaymentDate(previousRepaymentDate);
|
||||
modifiedScheduledDueDate = loanTermVariationsData.getTermApplicableFrom();
|
||||
if (loanTermVariationsData.getDecimalValue() != null) {
|
||||
if (loanApplicationTerms.getInterestMethod().isDecliningBalnce()
|
||||
if (loanApplicationTerms.getInterestMethod().isDecliningBalance()
|
||||
&& loanApplicationTerms.getAmortizationMethod().isEqualInstallment()) {
|
||||
loanApplicationTerms.setCurrentPeriodFixedEmiAmount(loanTermVariationsData.getDecimalValue());
|
||||
} else {
|
||||
@@ -1144,7 +1144,7 @@ public abstract class AbstractLoanScheduleGenerator implements LoanScheduleGener
|
||||
for (LoanTermVariationsData variation : loanApplicationTerms.getLoanTermVariations().getInterestRateFromInstallment()) {
|
||||
if (variation.isApplicable(modifiedScheduledDueDate) && variation.getDecimalValue() != null && !variation.isProcessed()) {
|
||||
loanApplicationTerms.updateAnnualNominalInterestRate(variation.getDecimalValue());
|
||||
if (loanApplicationTerms.getInterestMethod().isDecliningBalnce()) {
|
||||
if (loanApplicationTerms.getInterestMethod().isDecliningBalance()) {
|
||||
adjustInstallmentOrPrincipalAmount(loanApplicationTerms, totalCumulativePrincipal, instalmentNumber, mc);
|
||||
} else {
|
||||
loanApplicationTerms.setTotalPrincipalAccountedForInterestCalculation(totalCumulativePrincipal);
|
||||
@@ -1270,7 +1270,7 @@ public abstract class AbstractLoanScheduleGenerator implements LoanScheduleGener
|
||||
private boolean updateFixedInstallmentAmount(final MathContext mc, final LoanApplicationTerms loanApplicationTerms, int periodNumber,
|
||||
Money outstandingBalance) {
|
||||
boolean isAmountChanged = false;
|
||||
if (loanApplicationTerms.getActualFixedEmiAmount() == null && loanApplicationTerms.getInterestMethod().isDecliningBalnce()
|
||||
if (loanApplicationTerms.getActualFixedEmiAmount() == null && loanApplicationTerms.getInterestMethod().isDecliningBalance()
|
||||
&& loanApplicationTerms.getAmortizationMethod().isEqualInstallment()) {
|
||||
if (periodNumber < loanApplicationTerms.getPrincipalGrace() + 1) {
|
||||
periodNumber = loanApplicationTerms.getPrincipalGrace() + 1;
|
||||
|
||||
+1
-1
@@ -691,7 +691,7 @@ public final class LoanApplicationTerms {
|
||||
}
|
||||
switch (interestMethod) {
|
||||
case FLAT:
|
||||
if (this.isEqualAmortization() && this.totalInterestDue != null && this.interestMethod.isDecliningBalnce()) {
|
||||
if (this.isEqualAmortization() && this.totalInterestDue != null && this.interestMethod.isDecliningBalance()) {
|
||||
interestForInstallment = flatInterestPerInstallment(mc, this.totalInterestDue);
|
||||
} else {
|
||||
switch (this.amortizationMethod) {
|
||||
|
||||
+3
-3
@@ -420,7 +420,7 @@ public class LoanScheduleAssembler {
|
||||
final boolean isSpecificToInstallment = false;
|
||||
for (FloatingRatePeriodData periodData : applicableRates) {
|
||||
LoanTermVariationsData loanTermVariation = new LoanTermVariationsData(
|
||||
LoanEnumerations.loanvariationType(LoanTermVariationType.INTEREST_RATE), periodData.getFromDateAsLocalDate(),
|
||||
LoanEnumerations.loanVariationType(LoanTermVariationType.INTEREST_RATE), periodData.getFromDateAsLocalDate(),
|
||||
periodData.getInterestRate(), dateValue, isSpecificToInstallment);
|
||||
if (!interestRateStartDate.isBefore(periodData.getFromDateAsLocalDate())) {
|
||||
interestRateStartDate = periodData.getFromDateAsLocalDate();
|
||||
@@ -644,7 +644,7 @@ public class LoanScheduleAssembler {
|
||||
|
||||
LoanScheduleGenerator loanScheduleGenerator = this.loanScheduleFactory.create(loanApplicationTerms.getInterestMethod());
|
||||
if (loanApplicationTerms.isEqualAmortization()) {
|
||||
if (loanApplicationTerms.getInterestMethod().isDecliningBalnce()) {
|
||||
if (loanApplicationTerms.getInterestMethod().isDecliningBalance()) {
|
||||
final LoanScheduleGenerator decliningLoanScheduleGenerator = this.loanScheduleFactory
|
||||
.create(InterestMethod.DECLINING_BALANCE);
|
||||
LoanScheduleModel loanSchedule = decliningLoanScheduleGenerator.generate(mc, loanApplicationTerms, loanCharges, detailDTO);
|
||||
@@ -993,7 +993,7 @@ public class LoanScheduleAssembler {
|
||||
BigDecimal decimalValue = null;
|
||||
LoanTermVariationType decimalValueVariationType = LoanTermVariationType.INVALID;
|
||||
if (loan.getLoanProductRelatedDetail().getAmortizationMethod().isEqualInstallment()
|
||||
&& loan.getLoanProductRelatedDetail().getInterestMethod().isDecliningBalnce()) {
|
||||
&& loan.getLoanProductRelatedDetail().getInterestMethod().isDecliningBalance()) {
|
||||
decimalValue = this.fromApiJsonHelper.extractBigDecimalNamed(LoanApiConstants.installmentAmountParamName, arrayElement,
|
||||
locale);
|
||||
decimalValueVariationType = LoanTermVariationType.EMI_AMOUNT;
|
||||
|
||||
+1
-1
@@ -182,7 +182,7 @@ public class LoanRescheduleRequestReadPlatformServiceImpl implements LoanResched
|
||||
final boolean isSpecificToInstallment = rs.getBoolean("isSpecificToInstallment");
|
||||
final int termType = rs.getInt("termType");
|
||||
|
||||
return new LoanTermVariationsData(id, LoanEnumerations.loanvariationType(termType), variationApplicableFrom, decimalValue,
|
||||
return new LoanTermVariationsData(id, LoanEnumerations.loanVariationType(termType), variationApplicableFrom, decimalValue,
|
||||
dateValue, isSpecificToInstallment);
|
||||
}
|
||||
|
||||
|
||||
+2
-2
@@ -133,12 +133,12 @@ public class VariableLoanScheduleFromApiJsonValidator {
|
||||
baseDataValidator.reset().parameter(arrayName).parameterAtIndexArray(LoanApiConstants.principalParamName, i)
|
||||
.value(principalAmount).zeroOrPositiveAmount();
|
||||
|
||||
if (loan.getLoanProductRelatedDetail().getInterestMethod().isDecliningBalnce()
|
||||
if (loan.getLoanProductRelatedDetail().getInterestMethod().isDecliningBalance()
|
||||
&& loan.getLoanProductRelatedDetail().getAmortizationMethod().isEqualInstallment() && principalAmount != null) {
|
||||
List<String> unsupportedParams = new ArrayList<>(1);
|
||||
unsupportedParams.add(LoanApiConstants.principalParamName);
|
||||
throw new UnsupportedParameterException(unsupportedParams);
|
||||
} else if ((!loan.getLoanProductRelatedDetail().getInterestMethod().isDecliningBalnce()
|
||||
} else if ((!loan.getLoanProductRelatedDetail().getInterestMethod().isDecliningBalance()
|
||||
|| loan.getLoanProductRelatedDetail().getAmortizationMethod().isEqualPrincipal()) && installmentAmount != null) {
|
||||
List<String> unsupportedParams = new ArrayList<>(1);
|
||||
unsupportedParams.add(LoanApiConstants.installmentAmountParamName);
|
||||
|
||||
+4
-3
@@ -121,6 +121,7 @@ import org.apache.fineract.portfolio.paymentdetail.data.PaymentDetailData;
|
||||
import org.apache.fineract.portfolio.paymenttype.data.PaymentTypeData;
|
||||
import org.apache.fineract.portfolio.paymenttype.service.PaymentTypeReadPlatformService;
|
||||
import org.apache.fineract.useradministration.domain.AppUser;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.dao.DataAccessException;
|
||||
import org.springframework.dao.EmptyResultDataAccessException;
|
||||
@@ -1097,7 +1098,7 @@ public class LoanReadPlatformServiceImpl implements LoanReadPlatformService {
|
||||
}
|
||||
|
||||
@Override
|
||||
public LoanScheduleData extractData(final ResultSet rs) throws SQLException, DataAccessException {
|
||||
public LoanScheduleData extractData(@NotNull final ResultSet rs) throws SQLException, DataAccessException {
|
||||
BigDecimal waivedChargeAmount = BigDecimal.ZERO;
|
||||
for (DisbursementData disbursementDetail : disbursementData) {
|
||||
waivedChargeAmount = waivedChargeAmount.add(disbursementDetail.getWaivedChargeAmount());
|
||||
@@ -1427,7 +1428,7 @@ public class LoanReadPlatformServiceImpl implements LoanReadPlatformService {
|
||||
.retrieveLoanInterestRateCalculatedInPeriodOptions();
|
||||
final Collection<FundData> fundOptions = this.fundReadPlatformService.retrieveAllFunds();
|
||||
final Collection<TransactionProcessingStrategyData> repaymentStrategyOptions = this.loanDropdownReadPlatformService
|
||||
.retreiveTransactionProcessingStrategies();
|
||||
.retrieveTransactionProcessingStrategies();
|
||||
final Collection<CodeValueData> loanPurposeOptions = this.codeValueReadPlatformService.retrieveCodeValuesByCode("LoanPurpose");
|
||||
final Collection<CodeValueData> loanCollateralOptions = this.codeValueReadPlatformService
|
||||
.retrieveCodeValuesByCode("LoanCollateral");
|
||||
@@ -1642,7 +1643,7 @@ public class LoanReadPlatformServiceImpl implements LoanReadPlatformService {
|
||||
final LocalDate dateValue = JdbcSupport.getLocalDate(rs, "dateValue");
|
||||
final boolean isSpecificToInstallment = rs.getBoolean("isSpecificToInstallment");
|
||||
|
||||
return new LoanTermVariationsData(id, LoanEnumerations.loanvariationType(LoanTermVariationType.EMI_AMOUNT),
|
||||
return new LoanTermVariationsData(id, LoanEnumerations.loanVariationType(LoanTermVariationType.EMI_AMOUNT),
|
||||
variationApplicableFrom, decimalValue, dateValue, isSpecificToInstallment);
|
||||
}
|
||||
|
||||
|
||||
+1
-1
@@ -65,7 +65,7 @@ public interface LoanProductConstants {
|
||||
String MIN_NUMBER_OF_REPAYMENTS = "minNumberOfRepayments";
|
||||
String MAX_NUMBER_OF_REPAYMENTS = "maxNumberOfRepayments";
|
||||
|
||||
String VALUE_CONDITION_END_WITH_ERROR = "condition.type.must.end.with.greterthan";
|
||||
String VALUE_CONDITION_END_WITH_ERROR = "condition.type.must.end.with.greater.than";
|
||||
String VALUE_CONDITION_START_WITH_ERROR = "condition.type.must.start.with.equal";
|
||||
String SHORT_NAME = "shortName";
|
||||
|
||||
|
||||
+2
-2
@@ -351,7 +351,7 @@ public class LoanProductsApiResource {
|
||||
}
|
||||
|
||||
final Collection<TransactionProcessingStrategyData> transactionProcessingStrategyOptions = this.dropdownReadPlatformService
|
||||
.retreiveTransactionProcessingStrategies();
|
||||
.retrieveTransactionProcessingStrategies();
|
||||
|
||||
final Map<String, List<GLAccountData>> accountOptions = this.accountingDropdownReadPlatformService
|
||||
.retrieveAccountMappingOptionsForLoanProducts();
|
||||
@@ -374,7 +374,7 @@ public class LoanProductsApiResource {
|
||||
final List<EnumOptionData> interestRecalculationDayOfWeekTypeOptions = dropdownReadPlatformService
|
||||
.retrieveInterestRecalculationDayOfWeekTypeOptions();
|
||||
final List<EnumOptionData> preCloseInterestCalculationStrategyOptions = dropdownReadPlatformService
|
||||
.retrivePreCloseInterestCalculationStrategyOptions();
|
||||
.retrievePreCloseInterestCalculationStrategyOptions();
|
||||
final List<FloatingRateData> floatingRateOptions = this.floatingRateReadPlatformService.retrieveLookupActive();
|
||||
|
||||
return new LoanProductData(productData, chargeOptions, penaltyOptions, paymentTypeOptions, currencyOptions, amortizationTypeOptions,
|
||||
|
||||
+4
-4
@@ -530,17 +530,17 @@ final class LoanProductsApiResourceSwagger {
|
||||
|
||||
private GetLoanProductsTemplateCurrency() {}
|
||||
|
||||
@Schema(example = "")
|
||||
@Schema(example = "USD")
|
||||
public String code;
|
||||
@Schema(example = "")
|
||||
@Schema(example = "Usa dollar")
|
||||
public String name;
|
||||
@Schema(example = "0")
|
||||
public Integer decimalPlaces;
|
||||
@Schema(example = "0")
|
||||
public Integer inMultiplesOf;
|
||||
@Schema(example = "")
|
||||
@Schema(example = "$")
|
||||
public String displaySymbol;
|
||||
@Schema(example = "")
|
||||
@Schema(example = "USD")
|
||||
public String nameCode;
|
||||
@Schema(example = "[]")
|
||||
public String displayLabel;
|
||||
|
||||
+6
-6
@@ -254,7 +254,7 @@ public class LoanProductData implements Serializable {
|
||||
final Integer overAppliedNumber = null;
|
||||
|
||||
final LoanProductGuaranteeData productGuaranteeData = null;
|
||||
final Boolean holdGuaranteeFunds = false;
|
||||
final boolean holdGuaranteeFunds = false;
|
||||
final BigDecimal principalThresholdForLastInstallment = null;
|
||||
final BigDecimal fixedPrincipalPercentagePerInstallment = null;
|
||||
final boolean accountMovesOutOfNPAOnlyOnArrearsCompletion = false;
|
||||
@@ -364,7 +364,7 @@ public class LoanProductData implements Serializable {
|
||||
final boolean isInterestRecalculationEnabled = false;
|
||||
final LoanProductInterestRecalculationData interestRecalculationData = null;
|
||||
final Integer minimumDaysBetweenDisbursalAndFirstRepayment = null;
|
||||
final Boolean holdGuaranteeFunds = false;
|
||||
final boolean holdGuaranteeFunds = false;
|
||||
final LoanProductGuaranteeData productGuaranteeData = null;
|
||||
final BigDecimal principalThresholdForLastInstallment = null;
|
||||
final BigDecimal fixedPrincipalPercentagePerInstallment = null;
|
||||
@@ -476,7 +476,7 @@ public class LoanProductData implements Serializable {
|
||||
final LoanProductInterestRecalculationData interestRecalculationData = LoanProductInterestRecalculationData
|
||||
.sensibleDefaultsForNewLoanProductCreation();
|
||||
final Integer minimumDaysBetweenDisbursalAndFirstRepayment = null;
|
||||
final Boolean holdGuaranteeFunds = false;
|
||||
final boolean holdGuaranteeFunds = false;
|
||||
final LoanProductGuaranteeData productGuaranteeData = null;
|
||||
final BigDecimal principalThresholdForLastInstallment = null;
|
||||
final BigDecimal fixedPrincipalPercentagePerInstallment = null;
|
||||
@@ -582,7 +582,7 @@ public class LoanProductData implements Serializable {
|
||||
final LoanProductInterestRecalculationData interestRecalculationData = LoanProductInterestRecalculationData
|
||||
.sensibleDefaultsForNewLoanProductCreation();
|
||||
final Integer minimumDaysBetweenDisbursalAndFirstRepayment = null;
|
||||
final Boolean holdGuaranteeFunds = false;
|
||||
final boolean holdGuaranteeFunds = false;
|
||||
final LoanProductGuaranteeData productGuaranteeData = null;
|
||||
final BigDecimal principalThresholdForLastInstallment = null;
|
||||
final BigDecimal fixedPrincipalPercentagePerInstallment = null;
|
||||
@@ -1265,11 +1265,11 @@ public class LoanProductData implements Serializable {
|
||||
return this.canDefineInstallmentAmount;
|
||||
}
|
||||
|
||||
public LoanProductConfigurableAttributes getloanProductConfigurableAttributes() {
|
||||
public LoanProductConfigurableAttributes getLoanProductConfigurableAttributes() {
|
||||
return this.allowAttributeOverrides;
|
||||
}
|
||||
|
||||
public void setloanProductConfigurableAttributes(LoanProductConfigurableAttributes loanProductConfigurableAttributes) {
|
||||
public void setLoanProductConfigurableAttributes(LoanProductConfigurableAttributes loanProductConfigurableAttributes) {
|
||||
this.allowAttributeOverrides = loanProductConfigurableAttributes;
|
||||
}
|
||||
|
||||
|
||||
+5
-13
@@ -46,19 +46,11 @@ public enum AmortizationMethod {
|
||||
return null;
|
||||
}
|
||||
|
||||
AmortizationMethod repaymentMethod = null;
|
||||
switch (selectedMethod) {
|
||||
case 0:
|
||||
repaymentMethod = AmortizationMethod.EQUAL_PRINCIPAL;
|
||||
break;
|
||||
case 1:
|
||||
repaymentMethod = AmortizationMethod.EQUAL_INSTALLMENTS;
|
||||
break;
|
||||
default:
|
||||
repaymentMethod = AmortizationMethod.INVALID;
|
||||
break;
|
||||
}
|
||||
return repaymentMethod;
|
||||
return switch (selectedMethod) {
|
||||
case 0 -> AmortizationMethod.EQUAL_PRINCIPAL;
|
||||
case 1 -> AmortizationMethod.EQUAL_INSTALLMENTS;
|
||||
default -> AmortizationMethod.INVALID;
|
||||
};
|
||||
}
|
||||
|
||||
public boolean isEqualInstallment() {
|
||||
|
||||
+5
-13
@@ -42,19 +42,11 @@ public enum InterestCalculationPeriodMethod {
|
||||
|
||||
public static InterestCalculationPeriodMethod fromInt(final Integer selectedMethod) {
|
||||
|
||||
InterestCalculationPeriodMethod repaymentMethod = null;
|
||||
switch (selectedMethod) {
|
||||
case 0:
|
||||
repaymentMethod = InterestCalculationPeriodMethod.DAILY;
|
||||
break;
|
||||
case 1:
|
||||
repaymentMethod = InterestCalculationPeriodMethod.SAME_AS_REPAYMENT_PERIOD;
|
||||
break;
|
||||
default:
|
||||
repaymentMethod = InterestCalculationPeriodMethod.INVALID;
|
||||
break;
|
||||
}
|
||||
return repaymentMethod;
|
||||
return switch (selectedMethod) {
|
||||
case 0 -> InterestCalculationPeriodMethod.DAILY;
|
||||
case 1 -> InterestCalculationPeriodMethod.SAME_AS_REPAYMENT_PERIOD;
|
||||
default -> InterestCalculationPeriodMethod.INVALID;
|
||||
};
|
||||
}
|
||||
|
||||
public boolean isDaily() {
|
||||
|
||||
+6
-14
@@ -40,22 +40,14 @@ public enum InterestMethod {
|
||||
|
||||
public static InterestMethod fromInt(final Integer selectedMethod) {
|
||||
|
||||
InterestMethod repaymentMethod = null;
|
||||
switch (selectedMethod) {
|
||||
case 0:
|
||||
repaymentMethod = InterestMethod.DECLINING_BALANCE;
|
||||
break;
|
||||
case 1:
|
||||
repaymentMethod = InterestMethod.FLAT;
|
||||
break;
|
||||
default:
|
||||
repaymentMethod = InterestMethod.INVALID;
|
||||
break;
|
||||
}
|
||||
return repaymentMethod;
|
||||
return switch (selectedMethod) {
|
||||
case 0 -> InterestMethod.DECLINING_BALANCE;
|
||||
case 1 -> InterestMethod.FLAT;
|
||||
default -> InterestMethod.INVALID;
|
||||
};
|
||||
}
|
||||
|
||||
public boolean isDecliningBalnce() {
|
||||
public boolean isDecliningBalance() {
|
||||
return this.value.equals(InterestMethod.DECLINING_BALANCE.getValue());
|
||||
}
|
||||
}
|
||||
|
||||
+1
-2
@@ -50,8 +50,7 @@ public enum InterestRecalculationCompoundingMethod {
|
||||
}
|
||||
|
||||
public static InterestRecalculationCompoundingMethod fromInt(final Integer ruleTypeValue) {
|
||||
final InterestRecalculationCompoundingMethod type = intToEnumMap.get(ruleTypeValue);
|
||||
return type;
|
||||
return intToEnumMap.get(ruleTypeValue);
|
||||
}
|
||||
|
||||
InterestRecalculationCompoundingMethod(final Integer value, final String code) {
|
||||
|
||||
+1
-2
@@ -53,8 +53,7 @@ public enum InterestRecalculationPeriodMethod {
|
||||
}
|
||||
|
||||
public static InterestRecalculationPeriodMethod fromInt(final Integer ruleTypeValue) {
|
||||
final InterestRecalculationPeriodMethod type = intToEnumMap.get(ruleTypeValue);
|
||||
return type;
|
||||
return intToEnumMap.get(ruleTypeValue);
|
||||
}
|
||||
|
||||
InterestRecalculationPeriodMethod(final Integer value, final String code) {
|
||||
|
||||
+3
-4
@@ -30,7 +30,7 @@ import java.util.Map;
|
||||
*/
|
||||
public enum LendingStrategy {
|
||||
|
||||
INDIVIDUAL_LOAN(100, "lendingStrategy.individaulLoan", "individaulLoan"), //
|
||||
INDIVIDUAL_LOAN(100, "lendingStrategy.individualLoan", "individualLoan"), //
|
||||
GROUP_LOAN(200, "lendingStrategy.groupLoan", "groupLoan"), //
|
||||
JOINT_LIABILITY_LOAN(300, "lendingStrategy.joinLiabilityLoan", "joinLiabilityLoan"), //
|
||||
LINKED_LOAN(400, "lendingStrategy.linkedLoan", "linkedLoan"), //
|
||||
@@ -68,8 +68,7 @@ public enum LendingStrategy {
|
||||
}
|
||||
|
||||
public static LendingStrategy fromInt(final int i) {
|
||||
final LendingStrategy type = intToEnumMap.get(Integer.valueOf(i));
|
||||
return type;
|
||||
return intToEnumMap.get(i);
|
||||
}
|
||||
|
||||
public static int getMinValue() {
|
||||
@@ -82,7 +81,7 @@ public enum LendingStrategy {
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return name().toString();
|
||||
return name();
|
||||
}
|
||||
|
||||
public Integer getId() {
|
||||
|
||||
+1
-2
@@ -55,8 +55,7 @@ public enum LoanPreClosureInterestCalculationStrategy {
|
||||
}
|
||||
|
||||
public static LoanPreClosureInterestCalculationStrategy fromInt(final Integer ruleTypeValue) {
|
||||
final LoanPreClosureInterestCalculationStrategy type = intToEnumMap.get(ruleTypeValue);
|
||||
return type;
|
||||
return intToEnumMap.get(ruleTypeValue);
|
||||
}
|
||||
|
||||
LoanPreClosureInterestCalculationStrategy(final Integer value, final String code) {
|
||||
|
||||
+54
-85
@@ -79,11 +79,11 @@ import org.apache.fineract.portfolio.rate.domain.Rate;
|
||||
public class LoanProduct extends AbstractPersistableCustom {
|
||||
|
||||
@ManyToOne
|
||||
@JoinColumn(name = "fund_id", nullable = true)
|
||||
@JoinColumn(name = "fund_id")
|
||||
private Fund fund;
|
||||
|
||||
@ManyToOne
|
||||
@JoinColumn(name = "loan_transaction_strategy_id", nullable = true)
|
||||
@JoinColumn(name = "loan_transaction_strategy_id")
|
||||
private LoanTransactionProcessingStrategy transactionProcessingStrategy;
|
||||
|
||||
@Column(name = "name", nullable = false, unique = true)
|
||||
@@ -119,36 +119,36 @@ public class LoanProduct extends AbstractPersistableCustom {
|
||||
private boolean useBorrowerCycle;
|
||||
|
||||
@Embedded
|
||||
private LoanProductTrancheDetails loanProducTrancheDetails;
|
||||
private LoanProductTrancheDetails loanProductTrancheDetails;
|
||||
|
||||
@Column(name = "start_date", nullable = true)
|
||||
@Column(name = "start_date")
|
||||
private LocalDate startDate;
|
||||
|
||||
@Column(name = "close_date", nullable = true)
|
||||
@Column(name = "close_date")
|
||||
private LocalDate closeDate;
|
||||
|
||||
@Column(name = "external_id", length = 100, nullable = true, unique = true)
|
||||
@Column(name = "external_id", length = 100, unique = true)
|
||||
private String externalId;
|
||||
|
||||
@OneToMany(cascade = CascadeType.ALL, mappedBy = "loanProduct", orphanRemoval = true, fetch = FetchType.EAGER)
|
||||
private Set<LoanProductBorrowerCycleVariations> borrowerCycleVariations = new HashSet<>();
|
||||
|
||||
@Column(name = "overdue_days_for_npa", nullable = true)
|
||||
@Column(name = "overdue_days_for_npa")
|
||||
private Integer overdueDaysForNPA;
|
||||
|
||||
@Column(name = "min_days_between_disbursal_and_first_repayment", nullable = true)
|
||||
@Column(name = "min_days_between_disbursal_and_first_repayment")
|
||||
private Integer minimumDaysBetweenDisbursalAndFirstRepayment;
|
||||
|
||||
@OneToOne(cascade = CascadeType.ALL, mappedBy = "loanProduct", optional = true, orphanRemoval = true, fetch = FetchType.EAGER)
|
||||
@OneToOne(cascade = CascadeType.ALL, mappedBy = "loanProduct", orphanRemoval = true, fetch = FetchType.EAGER)
|
||||
private LoanProductInterestRecalculationDetails productInterestRecalculationDetails;
|
||||
|
||||
@Column(name = "hold_guarantee_funds")
|
||||
private boolean holdGuaranteeFunds;
|
||||
|
||||
@OneToOne(cascade = CascadeType.ALL, mappedBy = "loanProduct", optional = true, orphanRemoval = true, fetch = FetchType.EAGER)
|
||||
@OneToOne(cascade = CascadeType.ALL, mappedBy = "loanProduct", orphanRemoval = true, fetch = FetchType.EAGER)
|
||||
private LoanProductGuaranteeDetails loanProductGuaranteeDetails;
|
||||
|
||||
@OneToOne(cascade = CascadeType.ALL, mappedBy = "loanProduct", optional = true, orphanRemoval = true)
|
||||
@OneToOne(cascade = CascadeType.ALL, mappedBy = "loanProduct", orphanRemoval = true)
|
||||
private LoanProductConfigurableAttributes loanConfigurableAttributes;
|
||||
|
||||
@Column(name = "principal_threshold_for_last_installment", scale = 2, precision = 5, nullable = false)
|
||||
@@ -160,19 +160,19 @@ public class LoanProduct extends AbstractPersistableCustom {
|
||||
@Column(name = "can_define_fixed_emi_amount")
|
||||
private boolean canDefineInstallmentAmount;
|
||||
|
||||
@Column(name = "instalment_amount_in_multiples_of", nullable = true)
|
||||
@Column(name = "instalment_amount_in_multiples_of")
|
||||
private Integer installmentAmountInMultiplesOf;
|
||||
|
||||
@Column(name = "is_linked_to_floating_interest_rates", nullable = false)
|
||||
private boolean isLinkedToFloatingInterestRate;
|
||||
|
||||
@OneToOne(cascade = CascadeType.ALL, mappedBy = "loanProduct", optional = true, orphanRemoval = true, fetch = FetchType.EAGER)
|
||||
@OneToOne(cascade = CascadeType.ALL, mappedBy = "loanProduct", orphanRemoval = true, fetch = FetchType.EAGER)
|
||||
private LoanProductFloatingRates floatingRates;
|
||||
|
||||
@Column(name = "allow_variabe_installments", nullable = false)
|
||||
private boolean allowVariabeInstallments;
|
||||
|
||||
@OneToOne(cascade = CascadeType.ALL, mappedBy = "loanProduct", optional = true, orphanRemoval = true, fetch = FetchType.EAGER)
|
||||
@OneToOne(cascade = CascadeType.ALL, mappedBy = "loanProduct", orphanRemoval = true, fetch = FetchType.EAGER)
|
||||
private LoanProductVariableInstallmentConfig variableInstallmentConfig;
|
||||
|
||||
@Column(name = "sync_expected_with_disbursement_date")
|
||||
@@ -181,7 +181,7 @@ public class LoanProduct extends AbstractPersistableCustom {
|
||||
@Column(name = "can_use_for_topup", nullable = false)
|
||||
private boolean canUseForTopup = false;
|
||||
|
||||
@Column(name = "fixed_principal_percentage_per_installment", scale = 2, precision = 5, nullable = true)
|
||||
@Column(name = "fixed_principal_percentage_per_installment", scale = 2, precision = 5)
|
||||
private BigDecimal fixedPrincipalPercentagePerInstallment;
|
||||
|
||||
@Column(name = "disallow_expected_disbursements", nullable = false)
|
||||
@@ -190,14 +190,14 @@ public class LoanProduct extends AbstractPersistableCustom {
|
||||
@Column(name = "allow_approved_disbursed_amounts_over_applied", nullable = false)
|
||||
private boolean allowApprovedDisbursedAmountsOverApplied;
|
||||
|
||||
@Column(name = "over_applied_calculation_type", nullable = true)
|
||||
@Column(name = "over_applied_calculation_type")
|
||||
private String overAppliedCalculationType;
|
||||
|
||||
@Column(name = "over_applied_number", nullable = true)
|
||||
@Column(name = "over_applied_number")
|
||||
private Integer overAppliedNumber;
|
||||
|
||||
@ManyToOne(fetch = FetchType.LAZY)
|
||||
@JoinColumn(name = "delinquency_bucket_id", nullable = true)
|
||||
@JoinColumn(name = "delinquency_bucket_id")
|
||||
private DelinquencyBucket delinquencyBucket;
|
||||
|
||||
public static LoanProduct assembleFromJson(final Fund fund, final LoanTransactionProcessingStrategy loanTransactionProcessingStrategy,
|
||||
@@ -289,7 +289,7 @@ public class LoanProduct extends AbstractPersistableCustom {
|
||||
final Set<LoanProductBorrowerCycleVariations> loanProductBorrowerCycleVariations = new HashSet<>();
|
||||
|
||||
if (useBorrowerCycle) {
|
||||
populateBorrowerCyclevariations(command, loanProductBorrowerCycleVariations);
|
||||
populateBorrowerCycleVariations(command, loanProductBorrowerCycleVariations);
|
||||
}
|
||||
|
||||
final boolean multiDisburseLoan = command
|
||||
@@ -351,24 +351,20 @@ public class LoanProduct extends AbstractPersistableCustom {
|
||||
final boolean syncExpectedWithDisbursementDate = command.booleanPrimitiveValueOfParameterNamed("syncExpectedWithDisbursementDate");
|
||||
|
||||
final boolean canUseForTopup = command.parameterExists(LoanProductConstants.CAN_USE_FOR_TOPUP)
|
||||
? command.booleanPrimitiveValueOfParameterNamed(LoanProductConstants.CAN_USE_FOR_TOPUP)
|
||||
: false;
|
||||
&& command.booleanPrimitiveValueOfParameterNamed(LoanProductConstants.CAN_USE_FOR_TOPUP);
|
||||
|
||||
final boolean isEqualAmortization = command.parameterExists(LoanProductConstants.IS_EQUAL_AMORTIZATION_PARAM)
|
||||
? command.booleanPrimitiveValueOfParameterNamed(LoanProductConstants.IS_EQUAL_AMORTIZATION_PARAM)
|
||||
: false;
|
||||
&& command.booleanPrimitiveValueOfParameterNamed(LoanProductConstants.IS_EQUAL_AMORTIZATION_PARAM);
|
||||
|
||||
BigDecimal fixedPrincipalPercentagePerInstallment = command
|
||||
.bigDecimalValueOfParameterNamed(LoanProductConstants.fixedPrincipalPercentagePerInstallmentParamName);
|
||||
|
||||
final boolean disallowExpectedDisbursements = command.parameterExists(LoanProductConstants.DISALLOW_EXPECTED_DISBURSEMENTS)
|
||||
? command.booleanPrimitiveValueOfParameterNamed(LoanProductConstants.DISALLOW_EXPECTED_DISBURSEMENTS)
|
||||
: false;
|
||||
&& command.booleanPrimitiveValueOfParameterNamed(LoanProductConstants.DISALLOW_EXPECTED_DISBURSEMENTS);
|
||||
|
||||
final boolean allowApprovedDisbursedAmountsOverApplied = command
|
||||
.parameterExists(LoanProductConstants.ALLOW_APPROVED_DISBURSED_AMOUNTS_OVER_APPLIED)
|
||||
? command.booleanPrimitiveValueOfParameterNamed(LoanProductConstants.ALLOW_APPROVED_DISBURSED_AMOUNTS_OVER_APPLIED)
|
||||
: false;
|
||||
&& command.booleanPrimitiveValueOfParameterNamed(LoanProductConstants.ALLOW_APPROVED_DISBURSED_AMOUNTS_OVER_APPLIED);
|
||||
|
||||
final String overAppliedCalculationType = command
|
||||
.stringValueOfParameterNamedAllowingNull(LoanProductConstants.OVER_APPLIED_CALCULATION_TYPE);
|
||||
@@ -403,11 +399,7 @@ public class LoanProduct extends AbstractPersistableCustom {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @param command
|
||||
* @param loanProductBorrowerCycleVariations
|
||||
*/
|
||||
private static void populateBorrowerCyclevariations(final JsonCommand command,
|
||||
private static void populateBorrowerCycleVariations(final JsonCommand command,
|
||||
final Set<LoanProductBorrowerCycleVariations> loanProductBorrowerCycleVariations) {
|
||||
assemblePrincipalVariations(command, loanProductBorrowerCycleVariations);
|
||||
|
||||
@@ -416,39 +408,27 @@ public class LoanProduct extends AbstractPersistableCustom {
|
||||
assembleInterestRateVariations(command, loanProductBorrowerCycleVariations);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param command
|
||||
* @param loanProductBorrowerCycleVariations
|
||||
*/
|
||||
private static void assembleInterestRateVariations(final JsonCommand command,
|
||||
final Set<LoanProductBorrowerCycleVariations> loanProductBorrowerCycleVariations) {
|
||||
assembleVaritions(command, loanProductBorrowerCycleVariations, LoanProductParamType.INTERESTRATE.getValue(),
|
||||
assembleVariations(command, loanProductBorrowerCycleVariations, LoanProductParamType.INTERESTRATE.getValue(),
|
||||
LoanProductConstants.INTEREST_RATE_VARIATIONS_FOR_BORROWER_CYCLE_PARAMETER_NAME);
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @param command
|
||||
* @param loanProductBorrowerCycleVariations
|
||||
*/
|
||||
private static void assembleRepaymentVariations(final JsonCommand command,
|
||||
final Set<LoanProductBorrowerCycleVariations> loanProductBorrowerCycleVariations) {
|
||||
assembleVaritions(command, loanProductBorrowerCycleVariations, LoanProductParamType.REPAYMENT.getValue(),
|
||||
assembleVariations(command, loanProductBorrowerCycleVariations, LoanProductParamType.REPAYMENT.getValue(),
|
||||
LoanProductConstants.NUMBER_OF_REPAYMENT_VARIATIONS_FOR_BORROWER_CYCLE_PARAMETER_NAME);
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @param command
|
||||
* @param loanProductBorrowerCycleVariations
|
||||
*/
|
||||
private static void assemblePrincipalVariations(final JsonCommand command,
|
||||
final Set<LoanProductBorrowerCycleVariations> loanProductBorrowerCycleVariations) {
|
||||
assembleVaritions(command, loanProductBorrowerCycleVariations, LoanProductParamType.PRINCIPAL.getValue(),
|
||||
assembleVariations(command, loanProductBorrowerCycleVariations, LoanProductParamType.PRINCIPAL.getValue(),
|
||||
LoanProductConstants.PRINCIPAL_VARIATIONS_FOR_BORROWER_CYCLE_PARAMETER_NAME);
|
||||
}
|
||||
|
||||
private static void assembleVaritions(final JsonCommand command,
|
||||
private static void assembleVariations(final JsonCommand command,
|
||||
final Set<LoanProductBorrowerCycleVariations> loanProductBorrowerCycleVariations, Integer paramType,
|
||||
String variationParameterName) {
|
||||
if (command.parameterExists(variationParameterName)) {
|
||||
@@ -497,11 +477,11 @@ public class LoanProduct extends AbstractPersistableCustom {
|
||||
private Map<String, Object> updateBorrowerCycleVariations(final JsonCommand command) {
|
||||
final Map<String, Object> actualChanges = new LinkedHashMap<>(20);
|
||||
List<Long> variationIds = fetchAllVariationIds();
|
||||
updateBorrowerCycleVaritions(command, LoanProductParamType.PRINCIPAL.getValue(),
|
||||
updateBorrowerCycleVariations(command, LoanProductParamType.PRINCIPAL.getValue(),
|
||||
LoanProductConstants.PRINCIPAL_VARIATIONS_FOR_BORROWER_CYCLE_PARAMETER_NAME, actualChanges, variationIds);
|
||||
updateBorrowerCycleVaritions(command, LoanProductParamType.INTERESTRATE.getValue(),
|
||||
updateBorrowerCycleVariations(command, LoanProductParamType.INTERESTRATE.getValue(),
|
||||
LoanProductConstants.INTEREST_RATE_VARIATIONS_FOR_BORROWER_CYCLE_PARAMETER_NAME, actualChanges, variationIds);
|
||||
updateBorrowerCycleVaritions(command, LoanProductParamType.REPAYMENT.getValue(),
|
||||
updateBorrowerCycleVariations(command, LoanProductParamType.REPAYMENT.getValue(),
|
||||
LoanProductConstants.NUMBER_OF_REPAYMENT_VARIATIONS_FOR_BORROWER_CYCLE_PARAMETER_NAME, actualChanges, variationIds);
|
||||
for (Long id : variationIds) {
|
||||
this.borrowerCycleVariations.remove(fetchLoanProductBorrowerCycleVariationById(id));
|
||||
@@ -517,7 +497,7 @@ public class LoanProduct extends AbstractPersistableCustom {
|
||||
return list;
|
||||
}
|
||||
|
||||
private void updateBorrowerCycleVaritions(final JsonCommand command, Integer paramType, String variationParameterName,
|
||||
private void updateBorrowerCycleVariations(final JsonCommand command, Integer paramType, String variationParameterName,
|
||||
final Map<String, Object> actualChanges, List<Long> variationIds) {
|
||||
if (command.parameterExists(variationParameterName)) {
|
||||
final JsonArray variationArray = command.arrayOfParameterNamed(variationParameterName);
|
||||
@@ -579,18 +559,8 @@ public class LoanProduct extends AbstractPersistableCustom {
|
||||
}
|
||||
}
|
||||
|
||||
private void clearVariations(LoanProductParamType paramType, boolean clearAll) {
|
||||
if (clearAll) {
|
||||
this.borrowerCycleVariations.clear();
|
||||
} else {
|
||||
Set<LoanProductBorrowerCycleVariations> remove = new HashSet<>();
|
||||
for (LoanProductBorrowerCycleVariations borrowerCycleVariations : this.borrowerCycleVariations) {
|
||||
if (paramType.equals(borrowerCycleVariations.getParamType())) {
|
||||
remove.add(borrowerCycleVariations);
|
||||
}
|
||||
}
|
||||
this.borrowerCycleVariations.removeAll(remove);
|
||||
}
|
||||
private void clearVariations() {
|
||||
this.borrowerCycleVariations.clear();
|
||||
}
|
||||
|
||||
public LoanProduct() {
|
||||
@@ -642,13 +612,13 @@ public class LoanProduct extends AbstractPersistableCustom {
|
||||
this.charges = charges;
|
||||
}
|
||||
|
||||
this.isLinkedToFloatingInterestRate = isLinkedToFloatingInterestRates == null ? false : isLinkedToFloatingInterestRates;
|
||||
this.isLinkedToFloatingInterestRate = isLinkedToFloatingInterestRates != null && isLinkedToFloatingInterestRates;
|
||||
if (isLinkedToFloatingInterestRate) {
|
||||
this.floatingRates = new LoanProductFloatingRates(floatingRate, this, interestRateDifferential, minDifferentialLendingRate,
|
||||
maxDifferentialLendingRate, defaultDifferentialLendingRate, isFloatingInterestRateCalculationAllowed);
|
||||
}
|
||||
|
||||
this.allowVariabeInstallments = isVariableInstallmentsAllowed == null ? false : isVariableInstallmentsAllowed;
|
||||
this.allowVariabeInstallments = isVariableInstallmentsAllowed != null && isVariableInstallmentsAllowed;
|
||||
|
||||
if (allowVariabeInstallments) {
|
||||
this.variableInstallmentConfig = new LoanProductVariableInstallmentConfig(this, minimumGapBetweenInstallments,
|
||||
@@ -687,7 +657,7 @@ public class LoanProduct extends AbstractPersistableCustom {
|
||||
loanConfigurableAttributes.updateLoanProduct(this);
|
||||
}
|
||||
|
||||
this.loanProducTrancheDetails = new LoanProductTrancheDetails(multiDisburseLoan, maxTrancheCount, outstandingLoanBalance);
|
||||
this.loanProductTrancheDetails = new LoanProductTrancheDetails(multiDisburseLoan, maxTrancheCount, outstandingLoanBalance);
|
||||
this.overdueDaysForNPA = overdueDaysForNPA;
|
||||
this.productInterestRecalculationDetails = productInterestRecalculationDetails;
|
||||
this.minimumDaysBetweenDisbursalAndFirstRepayment = minimumDaysBetweenDisbursalAndFirstRepayment;
|
||||
@@ -948,7 +918,7 @@ public class LoanProduct extends AbstractPersistableCustom {
|
||||
if (this.useBorrowerCycle) {
|
||||
actualChanges.putAll(updateBorrowerCycleVariations(command));
|
||||
} else {
|
||||
clearVariations(null, true);
|
||||
clearVariations();
|
||||
}
|
||||
final String dateFormatAsInput = command.dateFormat();
|
||||
final String localeAsInput = command.locale();
|
||||
@@ -982,7 +952,7 @@ public class LoanProduct extends AbstractPersistableCustom {
|
||||
actualChanges.put(accountingTypeParamName, newValue);
|
||||
this.externalId = newValue;
|
||||
}
|
||||
loanProducTrancheDetails.update(command, actualChanges, localeAsInput);
|
||||
loanProductTrancheDetails.update(command, actualChanges, localeAsInput);
|
||||
|
||||
if (command.isChangeInIntegerParameterNamed(LoanProductConstants.OVERDUE_DAYS_FOR_NPA_PARAMETER_NAME, this.overdueDaysForNPA)) {
|
||||
final Integer newValue = command.integerValueOfParameterNamed(LoanProductConstants.OVERDUE_DAYS_FOR_NPA_PARAMETER_NAME);
|
||||
@@ -1015,9 +985,7 @@ public class LoanProduct extends AbstractPersistableCustom {
|
||||
actualChanges.put(LoanProductConstants.DELINQUENCY_BUCKET_PARAM_NAME, newValue);
|
||||
}
|
||||
|
||||
/**
|
||||
* Update interest recalculation settings
|
||||
*/
|
||||
// Update interest recalculation settings
|
||||
final boolean isInterestRecalculationEnabledChanged = actualChanges
|
||||
.containsKey(LoanProductConstants.IS_INTEREST_RECALCULATION_ENABLED_PARAMETER_NAME);
|
||||
|
||||
@@ -1324,15 +1292,15 @@ public class LoanProduct extends AbstractPersistableCustom {
|
||||
}
|
||||
|
||||
public boolean isMultiDisburseLoan() {
|
||||
return this.loanProducTrancheDetails.isMultiDisburseLoan();
|
||||
return this.loanProductTrancheDetails.isMultiDisburseLoan();
|
||||
}
|
||||
|
||||
public BigDecimal outstandingLoanBalance() {
|
||||
return this.loanProducTrancheDetails.outstandingLoanBalance();
|
||||
return this.loanProductTrancheDetails.outstandingLoanBalance();
|
||||
}
|
||||
|
||||
public Integer maxTrancheCount() {
|
||||
return this.loanProducTrancheDetails.maxTrancheCount();
|
||||
return this.loanProductTrancheDetails.maxTrancheCount();
|
||||
}
|
||||
|
||||
public boolean isInterestRecalculationEnabled() {
|
||||
@@ -1398,27 +1366,28 @@ public class LoanProduct extends AbstractPersistableCustom {
|
||||
if (cycleVariation.getBorrowerCycleNumber().equals(cycleNumber)
|
||||
&& cycleVariation.getValueConditionType().equals(LoanProductValueConditionType.EQUAL)) {
|
||||
switch (cycleVariation.getParamType()) {
|
||||
case PRINCIPAL:
|
||||
case PRINCIPAL -> {
|
||||
borrowerCycleVariations.put(LoanProductConstants.PRINCIPAL, cycleVariation.getDefaultValue());
|
||||
borrowerCycleVariations.put(LoanProductConstants.MIN_PRINCIPAL, cycleVariation.getMinValue());
|
||||
borrowerCycleVariations.put(LoanProductConstants.MAX_PRINCIPAL, cycleVariation.getMaxValue());
|
||||
principalCycleUsed = cycleVariation.getBorrowerCycleNumber();
|
||||
break;
|
||||
case INTERESTRATE:
|
||||
}
|
||||
case INTERESTRATE -> {
|
||||
borrowerCycleVariations.put(LoanProductConstants.INTEREST_RATE_PER_PERIOD, cycleVariation.getDefaultValue());
|
||||
borrowerCycleVariations.put(LoanProductConstants.MIN_INTEREST_RATE_PER_PERIOD, cycleVariation.getMinValue());
|
||||
borrowerCycleVariations.put(LoanProductConstants.MAX_INTEREST_RATE_PER_PERIOD, cycleVariation.getMaxValue());
|
||||
interestCycleUsed = cycleVariation.getBorrowerCycleNumber();
|
||||
break;
|
||||
case REPAYMENT:
|
||||
}
|
||||
case REPAYMENT -> {
|
||||
borrowerCycleVariations.put(LoanProductConstants.MAX_INTEREST_RATE_PER_PERIOD,
|
||||
cycleVariation.getDefaultValue());
|
||||
borrowerCycleVariations.put(LoanProductConstants.MIN_NUMBER_OF_REPAYMENTS, cycleVariation.getMinValue());
|
||||
borrowerCycleVariations.put(LoanProductConstants.MAX_NUMBER_OF_REPAYMENTS, cycleVariation.getMaxValue());
|
||||
repaymentCycleUsed = cycleVariation.getBorrowerCycleNumber();
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
case INVALID -> {
|
||||
|
||||
}
|
||||
}
|
||||
} else if (cycleVariation.getBorrowerCycleNumber() < cycleNumber
|
||||
&& cycleVariation.getValueConditionType().equals(LoanProductValueConditionType.GREATERTHAN)) {
|
||||
@@ -1588,8 +1557,8 @@ public class LoanProduct extends AbstractPersistableCustom {
|
||||
this.overAppliedNumber = overAppliedNumber;
|
||||
}
|
||||
|
||||
public void setLoanProducTrancheDetails(LoanProductTrancheDetails loanProducTrancheDetails) {
|
||||
this.loanProducTrancheDetails = loanProducTrancheDetails;
|
||||
public void setLoanProductTrancheDetails(LoanProductTrancheDetails loanProducTrancheDetails) {
|
||||
this.loanProductTrancheDetails = loanProducTrancheDetails;
|
||||
}
|
||||
|
||||
public DelinquencyBucket getDelinquencyBucket() {
|
||||
|
||||
+2
-2
@@ -44,10 +44,10 @@ public class LoanProductBorrowerCycleVariations extends AbstractPersistableCusto
|
||||
@Column(name = "value_condition", nullable = false)
|
||||
private Integer valueConditionType;
|
||||
|
||||
@Column(name = "min_value", scale = 6, precision = 19, nullable = true)
|
||||
@Column(name = "min_value", scale = 6, precision = 19)
|
||||
private BigDecimal minValue;
|
||||
|
||||
@Column(name = "max_value", scale = 6, precision = 19, nullable = true)
|
||||
@Column(name = "max_value", scale = 6, precision = 19)
|
||||
private BigDecimal maxValue;
|
||||
|
||||
@Column(name = "default_value", scale = 6, precision = 19, nullable = false)
|
||||
|
||||
+12
-12
@@ -23,7 +23,7 @@ import java.util.Objects;
|
||||
import javax.persistence.Column;
|
||||
import javax.persistence.Entity;
|
||||
import javax.persistence.JoinColumn;
|
||||
import javax.persistence.ManyToOne;
|
||||
import javax.persistence.OneToOne;
|
||||
import javax.persistence.Table;
|
||||
import org.apache.fineract.infrastructure.core.api.JsonCommand;
|
||||
import org.apache.fineract.infrastructure.core.domain.AbstractPersistableCustom;
|
||||
@@ -33,35 +33,35 @@ import org.apache.fineract.portfolio.loanproduct.LoanProductConstants;
|
||||
@Table(name = "m_product_loan_configurable_attributes")
|
||||
public class LoanProductConfigurableAttributes extends AbstractPersistableCustom implements Serializable {
|
||||
|
||||
@ManyToOne
|
||||
@OneToOne
|
||||
@JoinColumn(name = "loan_product_id", nullable = false)
|
||||
private LoanProduct loanProduct;
|
||||
|
||||
@Column(name = "amortization_method_enum", nullable = true)
|
||||
@Column(name = "amortization_method_enum")
|
||||
private Boolean amortizationType;
|
||||
|
||||
@Column(name = "interest_method_enum", nullable = true)
|
||||
@Column(name = "interest_method_enum")
|
||||
private Boolean interestType;
|
||||
|
||||
@Column(name = "loan_transaction_strategy_id", nullable = true)
|
||||
@Column(name = "loan_transaction_strategy_id")
|
||||
private Boolean transactionProcessingStrategyId;
|
||||
|
||||
@Column(name = "interest_calculated_in_period_enum", nullable = true)
|
||||
@Column(name = "interest_calculated_in_period_enum")
|
||||
private Boolean interestCalculationPeriodType;
|
||||
|
||||
@Column(name = "arrearstolerance_amount", nullable = true)
|
||||
@Column(name = "arrearstolerance_amount")
|
||||
private Boolean inArrearsTolerance;
|
||||
|
||||
@Column(name = "repay_every", nullable = true)
|
||||
@Column(name = "repay_every")
|
||||
private Boolean repaymentEvery;
|
||||
|
||||
@Column(name = "moratorium", nullable = true)
|
||||
@Column(name = "moratorium")
|
||||
private Boolean graceOnPrincipalAndInterestPayment;
|
||||
|
||||
@Column(name = "grace_on_arrears_ageing", nullable = true)
|
||||
@Column(name = "grace_on_arrears_ageing")
|
||||
private Boolean graceOnArrearsAgeing;
|
||||
|
||||
private static final String[] supportedloanConfigurableAttributes = { LoanProductConstants.amortizationTypeParamName,
|
||||
private static final String[] supportedLoanConfigurableAttributes = { LoanProductConstants.amortizationTypeParamName,
|
||||
LoanProductConstants.interestTypeParamName, LoanProductConstants.transactionProcessingStrategyIdParamName,
|
||||
LoanProductConstants.interestCalculationPeriodTypeParamName, LoanProductConstants.inArrearsToleranceParamName,
|
||||
LoanProductConstants.repaymentEveryParamName, LoanProductConstants.graceOnPrincipalAndInterestPaymentParamName,
|
||||
@@ -134,7 +134,7 @@ public class LoanProductConfigurableAttributes extends AbstractPersistableCustom
|
||||
}
|
||||
|
||||
public static String[] getAllowedLoanConfigurableAttributes() {
|
||||
return supportedloanConfigurableAttributes;
|
||||
return supportedLoanConfigurableAttributes;
|
||||
}
|
||||
|
||||
public LoanProduct getLoanProduct() {
|
||||
|
||||
+1
-1
@@ -105,7 +105,7 @@ public class LoanProductFloatingRates extends AbstractPersistableCustom {
|
||||
return this.isFloatingInterestRateCalculationAllowed;
|
||||
}
|
||||
|
||||
public Map<? extends String, ? extends Object> update(JsonCommand command, FloatingRate floatingRate) {
|
||||
public Map<? extends String, ?> update(JsonCommand command, FloatingRate floatingRate) {
|
||||
final Map<String, Object> actualChanges = new LinkedHashMap<>(20);
|
||||
if (floatingRate != null) {
|
||||
final String floatingRatesId = "floatingRatesId";
|
||||
|
||||
+2
-2
@@ -46,10 +46,10 @@ public class LoanProductGuaranteeDetails extends AbstractPersistableCustom {
|
||||
@Column(name = "mandatory_guarantee", scale = 6, precision = 19, nullable = false)
|
||||
private BigDecimal mandatoryGuarantee;
|
||||
|
||||
@Column(name = "minimum_guarantee_from_own_funds", scale = 6, precision = 19, nullable = true)
|
||||
@Column(name = "minimum_guarantee_from_own_funds", scale = 6, precision = 19)
|
||||
private BigDecimal minimumGuaranteeFromOwnFunds;
|
||||
|
||||
@Column(name = "minimum_guarantee_from_guarantor_funds", scale = 6, precision = 19, nullable = true)
|
||||
@Column(name = "minimum_guarantee_from_guarantor_funds", scale = 6, precision = 19)
|
||||
private BigDecimal minimumGuaranteeFromGuarantor;
|
||||
|
||||
protected LoanProductGuaranteeDetails() {
|
||||
|
||||
+14
-14
@@ -60,28 +60,28 @@ public class LoanProductInterestRecalculationDetails extends AbstractPersistable
|
||||
@Column(name = "rest_frequency_interval", nullable = false)
|
||||
private Integer restInterval;
|
||||
|
||||
@Column(name = "rest_frequency_nth_day_enum", nullable = true)
|
||||
@Column(name = "rest_frequency_nth_day_enum")
|
||||
private Integer restFrequencyNthDay;
|
||||
|
||||
@Column(name = "rest_frequency_weekday_enum", nullable = true)
|
||||
@Column(name = "rest_frequency_weekday_enum")
|
||||
private Integer restFrequencyWeekday;
|
||||
|
||||
@Column(name = "rest_frequency_on_day", nullable = true)
|
||||
@Column(name = "rest_frequency_on_day")
|
||||
private Integer restFrequencyOnDay;
|
||||
|
||||
@Column(name = "compounding_frequency_type_enum", nullable = true)
|
||||
@Column(name = "compounding_frequency_type_enum")
|
||||
private Integer compoundingFrequencyType;
|
||||
|
||||
@Column(name = "compounding_frequency_interval", nullable = true)
|
||||
@Column(name = "compounding_frequency_interval")
|
||||
private Integer compoundingInterval;
|
||||
|
||||
@Column(name = "compounding_frequency_nth_day_enum", nullable = true)
|
||||
@Column(name = "compounding_frequency_nth_day_enum")
|
||||
private Integer compoundingFrequencyNthDay;
|
||||
|
||||
@Column(name = "compounding_frequency_weekday_enum", nullable = true)
|
||||
@Column(name = "compounding_frequency_weekday_enum")
|
||||
private Integer compoundingFrequencyWeekday;
|
||||
|
||||
@Column(name = "compounding_frequency_on_day", nullable = true)
|
||||
@Column(name = "compounding_frequency_on_day")
|
||||
private Integer compoundingFrequencyOnDay;
|
||||
|
||||
@Column(name = "arrears_based_on_original_schedule")
|
||||
@@ -302,8 +302,8 @@ public class LoanProductInterestRecalculationDetails extends AbstractPersistable
|
||||
InterestRecalculationCompoundingMethod compoundingMethod = InterestRecalculationCompoundingMethod
|
||||
.fromInt(this.interestRecalculationCompoundingMethod);
|
||||
if (compoundingMethod.isCompoundingEnabled()) {
|
||||
RecalculationFrequencyType compoundingfrequencyType = RecalculationFrequencyType.fromInt(this.compoundingFrequencyType);
|
||||
if (compoundingfrequencyType.isSameAsRepayment()) {
|
||||
RecalculationFrequencyType compoundingFrequencyType = RecalculationFrequencyType.fromInt(this.compoundingFrequencyType);
|
||||
if (compoundingFrequencyType.isSameAsRepayment()) {
|
||||
this.compoundingInterval = null;
|
||||
this.compoundingFrequencyNthDay = null;
|
||||
this.compoundingFrequencyWeekday = null;
|
||||
@@ -346,10 +346,10 @@ public class LoanProductInterestRecalculationDetails extends AbstractPersistable
|
||||
this.compoundingFrequencyWeekday = null;
|
||||
}
|
||||
|
||||
if (compoundingfrequencyType.isWeekly()) {
|
||||
if (compoundingFrequencyType.isWeekly()) {
|
||||
this.compoundingFrequencyNthDay = null;
|
||||
this.compoundingFrequencyOnDay = null;
|
||||
} else if (compoundingfrequencyType.isMonthly()) {
|
||||
} else if (compoundingFrequencyType.isMonthly()) {
|
||||
if (command
|
||||
.integerValueOfParameterNamed(LoanProductConstants.recalculationCompoundingFrequencyOnDayParamName) != null) {
|
||||
this.compoundingFrequencyNthDay = null;
|
||||
@@ -357,13 +357,13 @@ public class LoanProductInterestRecalculationDetails extends AbstractPersistable
|
||||
} else {
|
||||
this.compoundingFrequencyOnDay = null;
|
||||
}
|
||||
} else if (compoundingfrequencyType.isDaily()) {
|
||||
} else if (compoundingFrequencyType.isDaily()) {
|
||||
this.compoundingFrequencyNthDay = null;
|
||||
this.compoundingFrequencyWeekday = null;
|
||||
this.compoundingFrequencyOnDay = null;
|
||||
}
|
||||
}
|
||||
if (!compoundingfrequencyType.isDaily()) {
|
||||
if (!compoundingFrequencyType.isDaily()) {
|
||||
if (command.isChangeInBooleanParameterNamed(LoanProductConstants.allowCompoundingOnEodParamName, allowCompoundingOnEod())) {
|
||||
boolean newValue = command.booleanPrimitiveValueOfParameterNamed(LoanProductConstants.allowCompoundingOnEodParamName);
|
||||
actualChanges.put(LoanProductConstants.allowCompoundingOnEodParamName, newValue);
|
||||
|
||||
+6
-6
@@ -31,22 +31,22 @@ import org.apache.fineract.infrastructure.core.api.JsonCommand;
|
||||
@Embeddable
|
||||
public class LoanProductMinMaxConstraints {
|
||||
|
||||
@Column(name = "min_principal_amount", scale = 6, precision = 19, nullable = true)
|
||||
@Column(name = "min_principal_amount", scale = 6, precision = 19)
|
||||
private BigDecimal minPrincipal;
|
||||
|
||||
@Column(name = "max_principal_amount", scale = 6, precision = 19, nullable = true)
|
||||
@Column(name = "max_principal_amount", scale = 6, precision = 19)
|
||||
private BigDecimal maxPrincipal;
|
||||
|
||||
@Column(name = "min_nominal_interest_rate_per_period", scale = 6, precision = 19, nullable = true)
|
||||
@Column(name = "min_nominal_interest_rate_per_period", scale = 6, precision = 19)
|
||||
private BigDecimal minNominalInterestRatePerPeriod;
|
||||
|
||||
@Column(name = "max_nominal_interest_rate_per_period", scale = 6, precision = 19, nullable = true)
|
||||
@Column(name = "max_nominal_interest_rate_per_period", scale = 6, precision = 19)
|
||||
private BigDecimal maxNominalInterestRatePerPeriod;
|
||||
|
||||
@Column(name = "min_number_of_repayments", nullable = true)
|
||||
@Column(name = "min_number_of_repayments")
|
||||
private Integer minNumberOfRepayments;
|
||||
|
||||
@Column(name = "max_number_of_repayments", nullable = true)
|
||||
@Column(name = "max_number_of_repayments")
|
||||
private Integer maxNumberOfRepayments;
|
||||
|
||||
public static LoanProductMinMaxConstraints createFrom(final BigDecimal minPrincipal, final BigDecimal maxPrincipal,
|
||||
|
||||
+6
-14
@@ -44,20 +44,12 @@ public enum LoanProductParamType {
|
||||
public static LoanProductParamType fromInt(final Integer chargeTime) {
|
||||
LoanProductParamType loanProductParamType = LoanProductParamType.INVALID;
|
||||
if (chargeTime != null) {
|
||||
switch (chargeTime) {
|
||||
case 1:
|
||||
loanProductParamType = PRINCIPAL;
|
||||
break;
|
||||
case 2:
|
||||
loanProductParamType = INTERESTRATE;
|
||||
break;
|
||||
case 3:
|
||||
loanProductParamType = REPAYMENT;
|
||||
break;
|
||||
default:
|
||||
loanProductParamType = INVALID;
|
||||
break;
|
||||
}
|
||||
loanProductParamType = switch (chargeTime) {
|
||||
case 1 -> PRINCIPAL;
|
||||
case 2 -> INTERESTRATE;
|
||||
case 3 -> REPAYMENT;
|
||||
default -> INVALID;
|
||||
};
|
||||
}
|
||||
return loanProductParamType;
|
||||
}
|
||||
|
||||
+15
-15
@@ -51,19 +51,19 @@ public class LoanProductRelatedDetail implements LoanProductMinimumRepaymentSche
|
||||
@Embedded
|
||||
private MonetaryCurrency currency;
|
||||
|
||||
@Column(name = "principal_amount", scale = 6, precision = 19, nullable = true)
|
||||
@Column(name = "principal_amount", scale = 6, precision = 19)
|
||||
private BigDecimal principal;
|
||||
|
||||
@Column(name = "nominal_interest_rate_per_period", scale = 6, precision = 19, nullable = true)
|
||||
@Column(name = "nominal_interest_rate_per_period", scale = 6, precision = 19)
|
||||
private BigDecimal nominalInterestRatePerPeriod;
|
||||
|
||||
// FIXME - move away form JPA ordinal use for enums using just integer -
|
||||
// requires sql patch for existing users of software.
|
||||
@Enumerated(EnumType.ORDINAL)
|
||||
@Column(name = "interest_period_frequency_enum", nullable = true)
|
||||
@Column(name = "interest_period_frequency_enum")
|
||||
private PeriodFrequencyType interestPeriodFrequencyType;
|
||||
|
||||
@Column(name = "annual_nominal_interest_rate", scale = 6, precision = 19, nullable = true)
|
||||
@Column(name = "annual_nominal_interest_rate", scale = 6, precision = 19)
|
||||
private BigDecimal annualNominalInterestRate;
|
||||
|
||||
// FIXME - move away form JPA ordinal use for enums using just integer -
|
||||
@@ -93,16 +93,16 @@ public class LoanProductRelatedDetail implements LoanProductMinimumRepaymentSche
|
||||
@Column(name = "number_of_repayments", nullable = false)
|
||||
private Integer numberOfRepayments;
|
||||
|
||||
@Column(name = "grace_on_principal_periods", nullable = true)
|
||||
@Column(name = "grace_on_principal_periods")
|
||||
private Integer graceOnPrincipalPayment;
|
||||
|
||||
@Column(name = "recurring_moratorium_principal_periods", nullable = true)
|
||||
@Column(name = "recurring_moratorium_principal_periods")
|
||||
private Integer recurringMoratoriumOnPrincipalPeriods;
|
||||
|
||||
@Column(name = "grace_on_interest_periods", nullable = true)
|
||||
@Column(name = "grace_on_interest_periods")
|
||||
private Integer graceOnInterestPayment;
|
||||
|
||||
@Column(name = "grace_interest_free_periods", nullable = true)
|
||||
@Column(name = "grace_interest_free_periods")
|
||||
private Integer graceOnInterestCharged;
|
||||
|
||||
// FIXME - move away form JPA ordinal use for enums using just integer -
|
||||
@@ -111,10 +111,10 @@ public class LoanProductRelatedDetail implements LoanProductMinimumRepaymentSche
|
||||
@Column(name = "amortization_method_enum", nullable = false)
|
||||
private AmortizationMethod amortizationMethod;
|
||||
|
||||
@Column(name = "arrearstolerance_amount", scale = 6, precision = 19, nullable = true)
|
||||
@Column(name = "arrearstolerance_amount", scale = 6, precision = 19)
|
||||
private BigDecimal inArrearsTolerance;
|
||||
|
||||
@Column(name = "grace_on_arrears_ageing", nullable = true)
|
||||
@Column(name = "grace_on_arrears_ageing")
|
||||
private Integer graceOnArrearsAgeing;
|
||||
|
||||
@Column(name = "days_in_month_enum", nullable = false)
|
||||
@@ -190,7 +190,7 @@ public class LoanProductRelatedDetail implements LoanProductMinimumRepaymentSche
|
||||
|
||||
private Integer defaultToNullIfZero(final Integer value) {
|
||||
Integer defaultTo = value;
|
||||
if (value != null && Integer.valueOf(0).equals(value)) {
|
||||
if (Integer.valueOf(0).equals(value)) {
|
||||
defaultTo = null;
|
||||
}
|
||||
return defaultTo;
|
||||
@@ -537,11 +537,11 @@ public class LoanProductRelatedDetail implements LoanProductMinimumRepaymentSche
|
||||
|
||||
int graceOnPrincipal = 0;
|
||||
if (this.getGraceOnPrincipalPayment() != null) {
|
||||
graceOnPrincipal = this.getGraceOnPrincipalPayment().intValue();
|
||||
graceOnPrincipal = this.getGraceOnPrincipalPayment();
|
||||
}
|
||||
int recurMoratoriumOnPrincipal = 0;
|
||||
if (this.recurringMoratoriumOnPrincipalPeriods() != null) {
|
||||
recurMoratoriumOnPrincipal = this.recurringMoratoriumOnPrincipalPeriods().intValue();
|
||||
recurMoratoriumOnPrincipal = this.recurringMoratoriumOnPrincipalPeriods();
|
||||
}
|
||||
|
||||
if ((recurMoratoriumOnPrincipal > 0) && ((this.numberOfRepayments - graceOnPrincipal) % (recurMoratoriumOnPrincipal + 1) != 1)) {
|
||||
@@ -558,7 +558,7 @@ public class LoanProductRelatedDetail implements LoanProductMinimumRepaymentSche
|
||||
private Integer defaultToZeroIfNull(final Integer value) {
|
||||
Integer result = value;
|
||||
if (value == null) {
|
||||
result = Integer.valueOf(0);
|
||||
result = 0;
|
||||
}
|
||||
return result;
|
||||
}
|
||||
@@ -573,7 +573,7 @@ public class LoanProductRelatedDetail implements LoanProductMinimumRepaymentSche
|
||||
return this.currency.getCode().equalsIgnoreCase(currencyCode);
|
||||
}
|
||||
|
||||
public void updatenterestPeriodFrequencyType(final PeriodFrequencyType interestPeriodFrequencyType) {
|
||||
public void updateInterestPeriodFrequencyType(final PeriodFrequencyType interestPeriodFrequencyType) {
|
||||
this.interestPeriodFrequencyType = interestPeriodFrequencyType;
|
||||
}
|
||||
|
||||
|
||||
+2
-3
@@ -31,10 +31,10 @@ public class LoanProductTrancheDetails {
|
||||
@Column(name = "allow_multiple_disbursals")
|
||||
private boolean multiDisburseLoan;
|
||||
|
||||
@Column(name = "max_disbursals", nullable = true)
|
||||
@Column(name = "max_disbursals")
|
||||
private Integer maxTrancheCount;
|
||||
|
||||
@Column(name = "max_outstanding_loan_balance", scale = 6, precision = 19, nullable = true)
|
||||
@Column(name = "max_outstanding_loan_balance", scale = 6, precision = 19)
|
||||
private BigDecimal outstandingLoanBalance;
|
||||
|
||||
protected LoanProductTrancheDetails() {
|
||||
@@ -67,7 +67,6 @@ public class LoanProductTrancheDetails {
|
||||
final BigDecimal newValue = command
|
||||
.bigDecimalValueOfParameterNamed(LoanProductConstants.OUTSTANDING_LOAN_BALANCE_PARAMETER_NAME);
|
||||
actualChanges.put(LoanProductConstants.OUTSTANDING_LOAN_BALANCE_PARAMETER_NAME, newValue);
|
||||
actualChanges.put(LoanProductConstants.OUTSTANDING_LOAN_BALANCE_PARAMETER_NAME, localeAsInput);
|
||||
this.outstandingLoanBalance = newValue;
|
||||
}
|
||||
} else {
|
||||
|
||||
+6
-12
@@ -44,17 +44,11 @@ public enum LoanProductValueConditionType {
|
||||
public static LoanProductValueConditionType fromInt(final Integer type) {
|
||||
LoanProductValueConditionType loanProductParamType = LoanProductValueConditionType.INVALID;
|
||||
if (type != null) {
|
||||
switch (type) {
|
||||
case 2:
|
||||
loanProductParamType = EQUAL;
|
||||
break;
|
||||
case 3:
|
||||
loanProductParamType = GREATERTHAN;
|
||||
break;
|
||||
default:
|
||||
loanProductParamType = INVALID;
|
||||
break;
|
||||
}
|
||||
loanProductParamType = switch (type) {
|
||||
case 2 -> EQUAL;
|
||||
case 3 -> GREATERTHAN;
|
||||
default -> INVALID;
|
||||
};
|
||||
}
|
||||
return loanProductParamType;
|
||||
}
|
||||
@@ -63,7 +57,7 @@ public enum LoanProductValueConditionType {
|
||||
return LoanProductValueConditionType.EQUAL.getValue().equals(this.value);
|
||||
}
|
||||
|
||||
public boolean isValueConditionTypeGreterThan() {
|
||||
public boolean isValueConditionTypeGreaterThan() {
|
||||
return LoanProductValueConditionType.GREATERTHAN.getValue().equals(this.value);
|
||||
}
|
||||
|
||||
|
||||
+1
-1
@@ -57,7 +57,7 @@ public class LoanProductVariableInstallmentConfig extends AbstractPersistableCus
|
||||
this.loanProduct = loanProduct;
|
||||
}
|
||||
|
||||
public Map<? extends String, ? extends Object> update(JsonCommand command) {
|
||||
public Map<? extends String, ?> update(JsonCommand command) {
|
||||
final Map<String, Object> actualChanges = new LinkedHashMap<>(3);
|
||||
|
||||
if (command.isChangeInIntegerParameterNamed(LoanProductConstants.minimumGapBetweenInstallments, this.minimumGap)) {
|
||||
|
||||
+1
-2
@@ -48,8 +48,7 @@ public enum LoanRescheduleStrategyMethod {
|
||||
}
|
||||
|
||||
public static LoanRescheduleStrategyMethod fromInt(final Integer ruleTypeValue) {
|
||||
final LoanRescheduleStrategyMethod type = intToEnumMap.get(ruleTypeValue);
|
||||
return type;
|
||||
return intToEnumMap.get(ruleTypeValue);
|
||||
}
|
||||
|
||||
LoanRescheduleStrategyMethod(final Integer value, final String code) {
|
||||
|
||||
+7
-18
@@ -44,8 +44,7 @@ public enum RecalculationFrequencyType {
|
||||
if (ruleTypeValue == null) {
|
||||
return RecalculationFrequencyType.INVALID;
|
||||
}
|
||||
final RecalculationFrequencyType type = intToEnumMap.get(ruleTypeValue);
|
||||
return type;
|
||||
return intToEnumMap.get(ruleTypeValue);
|
||||
}
|
||||
|
||||
RecalculationFrequencyType(final Integer value, final String code) {
|
||||
@@ -78,21 +77,11 @@ public enum RecalculationFrequencyType {
|
||||
}
|
||||
|
||||
public boolean isSameFrequency(final PeriodFrequencyType frequencyType) {
|
||||
boolean isSameFre = false;
|
||||
switch (this) {
|
||||
case DAILY:
|
||||
isSameFre = frequencyType.isDaily();
|
||||
break;
|
||||
case MONTHLY:
|
||||
isSameFre = frequencyType.isMonthly();
|
||||
break;
|
||||
case WEEKLY:
|
||||
isSameFre = frequencyType.isWeekly();
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
return isSameFre;
|
||||
return switch (this) {
|
||||
case DAILY -> frequencyType.isDaily();
|
||||
case MONTHLY -> frequencyType.isMonthly();
|
||||
case WEEKLY -> frequencyType.isWeekly();
|
||||
default -> false;
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
+1
-1
@@ -26,6 +26,6 @@ import org.apache.fineract.infrastructure.core.exception.AbstractPlatformDomainR
|
||||
public class InvalidLendingStrategy extends AbstractPlatformDomainRuleException {
|
||||
|
||||
public InvalidLendingStrategy(final Integer strategyId) {
|
||||
super("error.msg.unsupported.lending.strategy", "Stratagy code [" + strategyId + "] passed is not valid.");
|
||||
super("error.msg.unsupported.lending.strategy", "Strategy code [" + strategyId + "] passed is not valid.");
|
||||
}
|
||||
}
|
||||
|
||||
+1
-1
@@ -53,7 +53,7 @@ import org.springframework.stereotype.Component;
|
||||
@Path("/loanproducts/{productId}/productmix")
|
||||
@Component
|
||||
@Scope("singleton")
|
||||
@Tag(name = "Product Mix", description = "")
|
||||
@Tag(name = "Product Mix")
|
||||
public class ProductMixApiResource {
|
||||
|
||||
private final String resourceNameForPermissions = "PRODUCTMIX";
|
||||
|
||||
+1
-2
@@ -22,7 +22,6 @@ import com.google.gson.JsonElement;
|
||||
import com.google.gson.reflect.TypeToken;
|
||||
import java.lang.reflect.Type;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
@@ -42,7 +41,7 @@ public final class ProductMixDataValidator {
|
||||
/**
|
||||
* The parameters supported for this command.
|
||||
*/
|
||||
private final Set<String> supportedParameters = new HashSet<>(Arrays.asList("restrictedProducts"));
|
||||
private final Set<String> supportedParameters = new HashSet<>(List.of("restrictedProducts"));
|
||||
|
||||
private final FromJsonHelper fromApiJsonHelper;
|
||||
|
||||
|
||||
+1
-1
@@ -60,7 +60,7 @@ public class ProductMixReadPlatformServiceImpl implements ProductMixReadPlatform
|
||||
|
||||
final String sql = "Select " + extractor.schema() + " where pm.product_id=?";
|
||||
|
||||
final Map<Long, ProductMixData> productMixData = this.jdbcTemplate.query(sql, extractor, new Object[] { productId }); // NOSONAR
|
||||
final Map<Long, ProductMixData> productMixData = this.jdbcTemplate.query(sql, extractor, productId); // NOSONAR
|
||||
|
||||
return productMixData.get(productId);
|
||||
|
||||
|
||||
+4
-4
@@ -180,18 +180,18 @@ public class ProductMixWritePlatformServiceJpaRepositoryImpl implements ProductM
|
||||
|
||||
private Map<Long, LoanProduct> getRestrictedProducts(final Set<String> restrictedIds) {
|
||||
|
||||
final Map<Long, LoanProduct> restricrtedProducts = new HashMap<>();
|
||||
final Map<Long, LoanProduct> restrictedProducts = new HashMap<>();
|
||||
|
||||
for (final String restrictedId : restrictedIds) {
|
||||
final Long restrictedIdAsLong = Long.valueOf(restrictedId);
|
||||
final LoanProduct restrictedProduct = findByProductIdIfProvided(Long.valueOf(restrictedId));
|
||||
restricrtedProducts.put(restrictedIdAsLong, restrictedProduct);
|
||||
restrictedProducts.put(restrictedIdAsLong, restrictedProduct);
|
||||
}
|
||||
return restricrtedProducts;
|
||||
return restrictedProducts;
|
||||
}
|
||||
|
||||
private void handleDataIntegrityIssues(final NonTransientDataAccessException dve) {
|
||||
LOG.error("Error occured.", dve);
|
||||
LOG.error("Error occurred.", dve);
|
||||
throw new PlatformDataIntegrityException("error.msg.product.loan.unknown.data.integrity.issue",
|
||||
"Unknown data integrity issue with resource.");
|
||||
}
|
||||
|
||||
+27
-46
@@ -113,7 +113,7 @@ public final class LoanProductDataValidator {
|
||||
LoanProductConstants.ALLOW_APPROVED_DISBURSED_AMOUNTS_OVER_APPLIED, LoanProductConstants.OVER_APPLIED_CALCULATION_TYPE,
|
||||
LoanProductConstants.OVER_APPLIED_NUMBER, LoanProductConstants.DELINQUENCY_BUCKET_PARAM_NAME));
|
||||
|
||||
private static final String[] supportedloanConfigurableAttributes = { LoanProductConstants.amortizationTypeParamName,
|
||||
private static final String[] supportedLoanConfigurableAttributes = { LoanProductConstants.amortizationTypeParamName,
|
||||
LoanProductConstants.interestTypeParamName, LoanProductConstants.transactionProcessingStrategyIdParamName,
|
||||
LoanProductConstants.interestCalculationPeriodTypeParamName, LoanProductConstants.inArrearsToleranceParamName,
|
||||
LoanProductConstants.repaymentEveryParamName, LoanProductConstants.graceOnPrincipalAndInterestPaymentParamName,
|
||||
@@ -301,17 +301,11 @@ public final class LoanProductDataValidator {
|
||||
baseDataValidator.reset().parameter(LoanProductConstants.OVERDUE_DAYS_FOR_NPA_PARAMETER_NAME).value(overdueDaysForNPA)
|
||||
.integerZeroOrGreater();
|
||||
|
||||
/**
|
||||
* { @link DaysInYearType }
|
||||
*/
|
||||
final Integer daysInYearType = this.fromApiJsonHelper.extractIntegerNamed(LoanProductConstants.DAYS_IN_YEAR_TYPE_PARAMETER_NAME,
|
||||
element, Locale.getDefault());
|
||||
baseDataValidator.reset().parameter(LoanProductConstants.DAYS_IN_YEAR_TYPE_PARAMETER_NAME).value(daysInYearType).notNull()
|
||||
.isOneOfTheseValues(1, 360, 364, 365);
|
||||
|
||||
/**
|
||||
* { @link DaysInMonthType }
|
||||
*/
|
||||
final Integer daysInMonthType = this.fromApiJsonHelper.extractIntegerNamed(LoanProductConstants.DAYS_IN_MONTH_TYPE_PARAMETER_NAME,
|
||||
element, Locale.getDefault());
|
||||
baseDataValidator.reset().parameter(LoanProductConstants.DAYS_IN_MONTH_TYPE_PARAMETER_NAME).value(daysInMonthType).notNull()
|
||||
@@ -342,7 +336,7 @@ public final class LoanProductDataValidator {
|
||||
|
||||
// interest rates
|
||||
if (this.fromApiJsonHelper.parameterExists("isLinkedToFloatingInterestRates", element)
|
||||
&& this.fromApiJsonHelper.extractBooleanNamed("isLinkedToFloatingInterestRates", element) == true) {
|
||||
&& this.fromApiJsonHelper.extractBooleanNamed("isLinkedToFloatingInterestRates", element)) {
|
||||
if (isEqualAmortization) {
|
||||
throw new EqualAmortizationUnsupportedFeatureException("floating.interest.rate", "floating interest rate");
|
||||
}
|
||||
@@ -370,7 +364,7 @@ public final class LoanProductDataValidator {
|
||||
"interestRateFrequencyType param is not supported when isLinkedToFloatingInterestRates is true");
|
||||
}
|
||||
if ((interestType == null || !interestType.equals(InterestMethod.DECLINING_BALANCE.getValue()))
|
||||
|| (isInterestRecalculationEnabled == null || isInterestRecalculationEnabled == false)) {
|
||||
|| (isInterestRecalculationEnabled == null || !isInterestRecalculationEnabled)) {
|
||||
baseDataValidator.reset().parameter("isLinkedToFloatingInterestRates").failWithCode(
|
||||
"supported.only.for.declining.balance.interest.recalculation.enabled",
|
||||
"Floating interest rates are supported only for declining balance and interest recalculation enabled loan products");
|
||||
@@ -713,17 +707,15 @@ public final class LoanProductDataValidator {
|
||||
|
||||
// Validate that parameter names are allowed
|
||||
Set<String> supportedConfigurableAttributes = new HashSet<>();
|
||||
Collections.addAll(supportedConfigurableAttributes, supportedloanConfigurableAttributes);
|
||||
Collections.addAll(supportedConfigurableAttributes, supportedLoanConfigurableAttributes);
|
||||
this.fromApiJsonHelper.checkForUnsupportedNestedParameters(LoanProductConstants.allowAttributeOverridesParamName, object,
|
||||
supportedConfigurableAttributes);
|
||||
|
||||
Integer length = supportedloanConfigurableAttributes.length;
|
||||
|
||||
for (int i = 0; i < length; i++) {
|
||||
for (String supportedLoanConfigurableAttribute : supportedLoanConfigurableAttributes) {
|
||||
/* Validate the attribute names */
|
||||
if (this.fromApiJsonHelper.parameterExists(supportedloanConfigurableAttributes[i], object)) {
|
||||
Boolean loanConfigurationAttributeValue = this.fromApiJsonHelper
|
||||
.extractBooleanNamed(supportedloanConfigurableAttributes[i], object);
|
||||
if (this.fromApiJsonHelper.parameterExists(supportedLoanConfigurableAttribute, object)) {
|
||||
Boolean loanConfigurationAttributeValue = this.fromApiJsonHelper.extractBooleanNamed(supportedLoanConfigurableAttribute,
|
||||
object);
|
||||
/* Validate the boolean value */
|
||||
baseDataValidator.reset().parameter(LoanProductConstants.allowAttributeOverridesParamName)
|
||||
.value(loanConfigurationAttributeValue).notNull().validateForBooleanValue();
|
||||
@@ -775,9 +767,6 @@ public final class LoanProductDataValidator {
|
||||
private void validateInterestRecalculationParams(final JsonElement element, final DataValidatorBuilder baseDataValidator,
|
||||
final LoanProduct loanProduct) {
|
||||
|
||||
/**
|
||||
* { @link InterestRecalculationCompoundingMethod }
|
||||
*/
|
||||
InterestRecalculationCompoundingMethod compoundingMethod = null;
|
||||
|
||||
if (loanProduct == null || this.fromApiJsonHelper
|
||||
@@ -800,9 +789,6 @@ public final class LoanProductDataValidator {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* { @link LoanRescheduleStrategyMethod }
|
||||
*/
|
||||
if (loanProduct == null
|
||||
|| this.fromApiJsonHelper.parameterExists(LoanProductConstants.rescheduleStrategyMethodParameterName, element)) {
|
||||
final Integer rescheduleStrategyMethod = this.fromApiJsonHelper
|
||||
@@ -857,7 +843,7 @@ public final class LoanProductDataValidator {
|
||||
}
|
||||
|
||||
if (compoundingMethod.isCompoundingEnabled()) {
|
||||
RecalculationFrequencyType compoundingfrequencyType = null;
|
||||
RecalculationFrequencyType compoundingFrequencyType = null;
|
||||
|
||||
if (loanProduct == null || this.fromApiJsonHelper
|
||||
.parameterExists(LoanProductConstants.recalculationCompoundingFrequencyTypeParameterName, element)) {
|
||||
@@ -866,8 +852,8 @@ public final class LoanProductDataValidator {
|
||||
baseDataValidator.reset().parameter(LoanProductConstants.recalculationCompoundingFrequencyTypeParameterName)
|
||||
.value(recalculationCompoundingFrequencyType).notNull().inMinMaxRange(1, 4);
|
||||
if (recalculationCompoundingFrequencyType != null) {
|
||||
compoundingfrequencyType = RecalculationFrequencyType.fromInt(recalculationCompoundingFrequencyType);
|
||||
if (!compoundingfrequencyType.isSameAsRepayment()) {
|
||||
compoundingFrequencyType = RecalculationFrequencyType.fromInt(recalculationCompoundingFrequencyType);
|
||||
if (!compoundingFrequencyType.isSameAsRepayment()) {
|
||||
PeriodFrequencyType repaymentFrequencyType = null;
|
||||
if (this.fromApiJsonHelper.parameterExists("repaymentFrequencyType", element)) {
|
||||
Integer repaymentFrequencyTypeVal = this.fromApiJsonHelper.extractIntegerNamed("repaymentFrequencyType",
|
||||
@@ -876,7 +862,7 @@ public final class LoanProductDataValidator {
|
||||
} else if (loanProduct != null) {
|
||||
repaymentFrequencyType = loanProduct.getLoanProductRelatedDetail().getRepaymentPeriodFrequencyType();
|
||||
}
|
||||
if (!compoundingfrequencyType.isSameFrequency(repaymentFrequencyType)) {
|
||||
if (!compoundingFrequencyType.isSameFrequency(repaymentFrequencyType)) {
|
||||
baseDataValidator.reset().parameter(LoanProductConstants.recalculationCompoundingFrequencyTypeParameterName)
|
||||
.value(recalculationCompoundingFrequencyType).failWithCode("must.be.same.as.repayment.frequency");
|
||||
}
|
||||
@@ -884,15 +870,15 @@ public final class LoanProductDataValidator {
|
||||
}
|
||||
}
|
||||
|
||||
if (compoundingfrequencyType == null) {
|
||||
if (compoundingFrequencyType == null) {
|
||||
if (loanProduct == null) {
|
||||
compoundingfrequencyType = RecalculationFrequencyType.INVALID;
|
||||
compoundingFrequencyType = RecalculationFrequencyType.INVALID;
|
||||
} else {
|
||||
compoundingfrequencyType = loanProduct.getProductInterestRecalculationDetails().getCompoundingFrequencyType();
|
||||
compoundingFrequencyType = loanProduct.getProductInterestRecalculationDetails().getCompoundingFrequencyType();
|
||||
}
|
||||
}
|
||||
|
||||
if (!compoundingfrequencyType.isSameAsRepayment()) {
|
||||
if (!compoundingFrequencyType.isSameAsRepayment()) {
|
||||
if (loanProduct == null || this.fromApiJsonHelper
|
||||
.parameterExists(LoanProductConstants.recalculationCompoundingFrequencyIntervalParameterName, element)) {
|
||||
final Integer recurrenceInterval = this.fromApiJsonHelper.extractIntegerNamed(
|
||||
@@ -1119,9 +1105,6 @@ public final class LoanProductDataValidator {
|
||||
.inMinMaxRange(0, 1);
|
||||
}
|
||||
|
||||
/**
|
||||
* { @link DaysInYearType }
|
||||
*/
|
||||
if (this.fromApiJsonHelper.parameterExists(LoanProductConstants.DAYS_IN_YEAR_TYPE_PARAMETER_NAME, element)) {
|
||||
final Integer daysInYearType = this.fromApiJsonHelper.extractIntegerNamed(LoanProductConstants.DAYS_IN_YEAR_TYPE_PARAMETER_NAME,
|
||||
element, Locale.getDefault());
|
||||
@@ -1129,9 +1112,6 @@ public final class LoanProductDataValidator {
|
||||
.isOneOfTheseValues(1, 360, 364, 365);
|
||||
}
|
||||
|
||||
/**
|
||||
* { @link DaysInMonthType }
|
||||
*/
|
||||
if (this.fromApiJsonHelper.parameterExists(LoanProductConstants.DAYS_IN_YEAR_TYPE_PARAMETER_NAME, element)) {
|
||||
final Integer daysInMonthType = this.fromApiJsonHelper
|
||||
.extractIntegerNamed(LoanProductConstants.DAYS_IN_MONTH_TYPE_PARAMETER_NAME, element, Locale.getDefault());
|
||||
@@ -1209,7 +1189,7 @@ public final class LoanProductDataValidator {
|
||||
? this.fromApiJsonHelper.extractIntegerNamed("interestType", element, Locale.getDefault())
|
||||
: loanProduct.getLoanProductRelatedDetail().getInterestMethod().getValue();
|
||||
if ((interestType == null || !interestType.equals(InterestMethod.DECLINING_BALANCE.getValue()))
|
||||
|| (isInterestRecalculationEnabled == null || isInterestRecalculationEnabled == false)) {
|
||||
|| (isInterestRecalculationEnabled == null || !isInterestRecalculationEnabled)) {
|
||||
baseDataValidator.reset().parameter("isLinkedToFloatingInterestRates").failWithCode(
|
||||
"supported.only.for.declining.balance.interest.recalculation.enabled",
|
||||
"Floating interest rates are supported only for declining balance and interest recalculation enabled loan products");
|
||||
@@ -1534,6 +1514,7 @@ public final class LoanProductDataValidator {
|
||||
|
||||
private void validateChargeToIncomeAccountMappings(final DataValidatorBuilder baseDataValidator, final JsonElement element) {
|
||||
// validate for both fee and penalty charges
|
||||
// TODO: This look faulty. Need to analyze this behaviour before changing
|
||||
validateChargeToIncomeAccountMappings(baseDataValidator, element, true);
|
||||
validateChargeToIncomeAccountMappings(baseDataValidator, element, true);
|
||||
}
|
||||
@@ -1776,7 +1757,7 @@ public final class LoanProductDataValidator {
|
||||
final DataValidatorBuilder baseDataValidator) {
|
||||
|
||||
if ((this.fromApiJsonHelper.parameterExists("isLinkedToFloatingInterestRates", element)
|
||||
&& this.fromApiJsonHelper.extractBooleanNamed("isLinkedToFloatingInterestRates", element) == true)
|
||||
&& this.fromApiJsonHelper.extractBooleanNamed("isLinkedToFloatingInterestRates", element))
|
||||
|| loanProduct.isLinkedToFloatingInterestRate()) {
|
||||
return;
|
||||
}
|
||||
@@ -1901,7 +1882,7 @@ public final class LoanProductDataValidator {
|
||||
final String maxParameterName, final String valueUsageConditionParamName, final String cycleNumbersParamName) {
|
||||
final JsonObject topLevelJsonElement = element.getAsJsonObject();
|
||||
final Locale locale = this.fromApiJsonHelper.extractLocaleParameter(topLevelJsonElement);
|
||||
Integer lastCycleNumber = 0;
|
||||
int lastCycleNumber = 0;
|
||||
LoanProductValueConditionType lastConditionType = LoanProductValueConditionType.EQUAL;
|
||||
if (this.fromApiJsonHelper.parameterExists(variationParameterName, element)) {
|
||||
final JsonArray variationArray = this.fromApiJsonHelper.extractJsonArrayNamed(variationParameterName, element);
|
||||
@@ -2021,7 +2002,7 @@ public final class LoanProductDataValidator {
|
||||
|
||||
if (mandatoryGuarantee.compareTo(minimumGuaranteeFromOwnFunds.add(minimumGuaranteeFromGuarantor)) < 0) {
|
||||
baseDataValidator.parameter(LoanProductConstants.mandatoryGuaranteeParamName)
|
||||
.failWithCode("must.be.greter.than.sum.of.min.funds");
|
||||
.failWithCode("must.be.greater.than.sum.of.min.funds");
|
||||
}
|
||||
|
||||
}
|
||||
@@ -2039,11 +2020,11 @@ public final class LoanProductDataValidator {
|
||||
.extractBooleanNamed(LoanProductConstants.ALLOW_PARTIAL_PERIOD_INTEREST_CALCUALTION_PARAM_NAME, element);
|
||||
baseDataValidator.reset().parameter(LoanProductConstants.ALLOW_PARTIAL_PERIOD_INTEREST_CALCUALTION_PARAM_NAME)
|
||||
.value(considerPartialInterestEnabled).notNull().isOneOfTheseValues(true, false);
|
||||
final boolean considerPartialPeriods = considerPartialInterestEnabled == null ? false : considerPartialInterestEnabled;
|
||||
final boolean considerPartialPeriods = considerPartialInterestEnabled != null && considerPartialInterestEnabled;
|
||||
if (interestCalculationPeriodMethod.isDaily()) {
|
||||
if (considerPartialPeriods) {
|
||||
baseDataValidator.reset().parameter(LoanProductConstants.ALLOW_PARTIAL_PERIOD_INTEREST_CALCUALTION_PARAM_NAME)
|
||||
.failWithCode("not.supported.for.daily.calcualtions");
|
||||
.failWithCode("not.supported.for.daily.calculations");
|
||||
}
|
||||
} else {
|
||||
considerPartialPeriodUpdates = considerPartialPeriods;
|
||||
@@ -2061,7 +2042,7 @@ public final class LoanProductDataValidator {
|
||||
}
|
||||
if (isInterestRecalculationEnabled != null && isInterestRecalculationEnabled) {
|
||||
baseDataValidator.reset().parameter(LoanProductConstants.IS_INTEREST_RECALCULATION_ENABLED_PARAMETER_NAME)
|
||||
.failWithCode("not.supported.for.selected.interest.calcualtion.type");
|
||||
.failWithCode("not.supported.for.selected.interest.calculation.type");
|
||||
}
|
||||
|
||||
Boolean multiDisburseLoan = null;
|
||||
@@ -2073,7 +2054,7 @@ public final class LoanProductDataValidator {
|
||||
}
|
||||
if (multiDisburseLoan != null && multiDisburseLoan) {
|
||||
baseDataValidator.reset().parameter(LoanProductConstants.MULTI_DISBURSE_LOAN_PARAMETER_NAME)
|
||||
.failWithCode("not.supported.for.selected.interest.calcualtion.type");
|
||||
.failWithCode("not.supported.for.selected.interest.calculation.type");
|
||||
}
|
||||
|
||||
Boolean variableInstallments = null;
|
||||
@@ -2085,7 +2066,7 @@ public final class LoanProductDataValidator {
|
||||
}
|
||||
if (variableInstallments != null && variableInstallments) {
|
||||
baseDataValidator.reset().parameter(LoanProductConstants.allowVariableInstallmentsParamName)
|
||||
.failWithCode("not.supported.for.selected.interest.calcualtion.type");
|
||||
.failWithCode("not.supported.for.selected.interest.calculation.type");
|
||||
}
|
||||
|
||||
Boolean floatingInterestRates = null;
|
||||
@@ -2096,7 +2077,7 @@ public final class LoanProductDataValidator {
|
||||
}
|
||||
if (floatingInterestRates != null && floatingInterestRates) {
|
||||
baseDataValidator.reset().parameter("isLinkedToFloatingInterestRates")
|
||||
.failWithCode("not.supported.for.selected.interest.calcualtion.type");
|
||||
.failWithCode("not.supported.for.selected.interest.calculation.type");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+7
-21
@@ -32,27 +32,13 @@ public final class LendingStrategyEnumerations {
|
||||
}
|
||||
|
||||
public static EnumOptionData lendingStrategy(final LendingStrategy type) {
|
||||
EnumOptionData optionData = null;
|
||||
switch (type) {
|
||||
case INDIVIDUAL_LOAN:
|
||||
optionData = new EnumOptionData(type.getId().longValue(), type.getCode(), "Individual loan");
|
||||
break;
|
||||
case GROUP_LOAN:
|
||||
optionData = new EnumOptionData(type.getId().longValue(), type.getCode(), "Group loan");
|
||||
break;
|
||||
case JOINT_LIABILITY_LOAN:
|
||||
optionData = new EnumOptionData(type.getId().longValue(), type.getCode(), "Joint liability loan");
|
||||
break;
|
||||
case LINKED_LOAN:
|
||||
optionData = new EnumOptionData(type.getId().longValue(), type.getCode(), "Linked loan");
|
||||
break;
|
||||
|
||||
default:
|
||||
optionData = new EnumOptionData(LendingStrategy.INVALID.getId().longValue(), LendingStrategy.INVALID.getCode(), "Invalid");
|
||||
break;
|
||||
|
||||
}
|
||||
return optionData;
|
||||
return switch (type) {
|
||||
case INDIVIDUAL_LOAN -> new EnumOptionData(type.getId().longValue(), type.getCode(), "Individual loan");
|
||||
case GROUP_LOAN -> new EnumOptionData(type.getId().longValue(), type.getCode(), "Group loan");
|
||||
case JOINT_LIABILITY_LOAN -> new EnumOptionData(type.getId().longValue(), type.getCode(), "Joint liability loan");
|
||||
case LINKED_LOAN -> new EnumOptionData(type.getId().longValue(), type.getCode(), "Linked loan");
|
||||
default -> new EnumOptionData(LendingStrategy.INVALID.getId().longValue(), LendingStrategy.INVALID.getCode(), "Invalid");
|
||||
};
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
+2
-2
@@ -41,7 +41,7 @@ public interface LoanDropdownReadPlatformService {
|
||||
|
||||
List<EnumOptionData> retrieveInterestRateFrequencyTypeOptions();
|
||||
|
||||
Collection<TransactionProcessingStrategyData> retreiveTransactionProcessingStrategies();
|
||||
Collection<TransactionProcessingStrategyData> retrieveTransactionProcessingStrategies();
|
||||
|
||||
List<EnumOptionData> retrieveLoanCycleValueConditionTypeOptions();
|
||||
|
||||
@@ -55,6 +55,6 @@ public interface LoanDropdownReadPlatformService {
|
||||
|
||||
List<EnumOptionData> retrieveInterestRecalculationFrequencyTypeOptions();
|
||||
|
||||
List<EnumOptionData> retrivePreCloseInterestCalculationStrategyOptions();
|
||||
List<EnumOptionData> retrievePreCloseInterestCalculationStrategyOptions();
|
||||
|
||||
}
|
||||
|
||||
+27
-54
@@ -71,73 +71,60 @@ public class LoanDropdownReadPlatformServiceImpl implements LoanDropdownReadPlat
|
||||
@Override
|
||||
public List<EnumOptionData> retrieveLoanAmortizationTypeOptions() {
|
||||
|
||||
final List<EnumOptionData> allowedAmortizationMethods = Arrays.asList(amortizationType(AmortizationMethod.EQUAL_INSTALLMENTS),
|
||||
amortizationType(AmortizationMethod.EQUAL_PRINCIPAL));
|
||||
|
||||
return allowedAmortizationMethods;
|
||||
return Arrays.asList(amortizationType(AmortizationMethod.EQUAL_INSTALLMENTS), amortizationType(AmortizationMethod.EQUAL_PRINCIPAL));
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<EnumOptionData> retrieveLoanInterestTypeOptions() {
|
||||
final List<EnumOptionData> allowedRepaymentScheduleCalculationMethods = Arrays.asList(interestType(InterestMethod.FLAT),
|
||||
interestType(InterestMethod.DECLINING_BALANCE));
|
||||
|
||||
return allowedRepaymentScheduleCalculationMethods;
|
||||
return Arrays.asList(interestType(InterestMethod.FLAT), interestType(InterestMethod.DECLINING_BALANCE));
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<EnumOptionData> retrieveLoanInterestRateCalculatedInPeriodOptions() {
|
||||
|
||||
final List<EnumOptionData> allowedOptions = Arrays.asList(interestCalculationPeriodType(InterestCalculationPeriodMethod.DAILY),
|
||||
return Arrays.asList(interestCalculationPeriodType(InterestCalculationPeriodMethod.DAILY),
|
||||
interestCalculationPeriodType(InterestCalculationPeriodMethod.SAME_AS_REPAYMENT_PERIOD));
|
||||
|
||||
return allowedOptions;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<EnumOptionData> retrieveLoanTermFrequencyTypeOptions() {
|
||||
final List<EnumOptionData> loanTermFrequencyOptions = Arrays.asList(loanTermFrequencyType(PeriodFrequencyType.DAYS),
|
||||
loanTermFrequencyType(PeriodFrequencyType.WEEKS), loanTermFrequencyType(PeriodFrequencyType.MONTHS),
|
||||
loanTermFrequencyType(PeriodFrequencyType.YEARS));
|
||||
return loanTermFrequencyOptions;
|
||||
return Arrays.asList(loanTermFrequencyType(PeriodFrequencyType.DAYS), loanTermFrequencyType(PeriodFrequencyType.WEEKS),
|
||||
loanTermFrequencyType(PeriodFrequencyType.MONTHS), loanTermFrequencyType(PeriodFrequencyType.YEARS));
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<EnumOptionData> retrieveRepaymentFrequencyTypeOptions() {
|
||||
|
||||
final List<EnumOptionData> repaymentFrequencyOptions = Arrays.asList(repaymentFrequencyType(PeriodFrequencyType.DAYS),
|
||||
repaymentFrequencyType(PeriodFrequencyType.WEEKS), repaymentFrequencyType(PeriodFrequencyType.MONTHS));
|
||||
return repaymentFrequencyOptions;
|
||||
return Arrays.asList(repaymentFrequencyType(PeriodFrequencyType.DAYS), repaymentFrequencyType(PeriodFrequencyType.WEEKS),
|
||||
repaymentFrequencyType(PeriodFrequencyType.MONTHS));
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<EnumOptionData> retrieveRepaymentFrequencyOptionsForNthDayOfMonth() {
|
||||
final List<EnumOptionData> repaymentFrequencyOptions = Arrays.asList(repaymentFrequencyNthDayType(NthDayType.ONE),
|
||||
repaymentFrequencyNthDayType(NthDayType.TWO), repaymentFrequencyNthDayType(NthDayType.THREE),
|
||||
repaymentFrequencyNthDayType(NthDayType.FOUR), repaymentFrequencyNthDayType(NthDayType.LAST));
|
||||
return repaymentFrequencyOptions;
|
||||
return Arrays.asList(repaymentFrequencyNthDayType(NthDayType.ONE), repaymentFrequencyNthDayType(NthDayType.TWO),
|
||||
repaymentFrequencyNthDayType(NthDayType.THREE), repaymentFrequencyNthDayType(NthDayType.FOUR),
|
||||
repaymentFrequencyNthDayType(NthDayType.LAST));
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<EnumOptionData> retrieveRepaymentFrequencyOptionsForDaysOfWeek() {
|
||||
|
||||
final List<EnumOptionData> repaymentFrequencyOptions = Arrays.asList(repaymentFrequencyDayOfWeekType(DayOfWeekType.SUNDAY),
|
||||
repaymentFrequencyDayOfWeekType(DayOfWeekType.MONDAY), repaymentFrequencyDayOfWeekType(DayOfWeekType.TUESDAY),
|
||||
repaymentFrequencyDayOfWeekType(DayOfWeekType.WEDNESDAY), repaymentFrequencyDayOfWeekType(DayOfWeekType.THURSDAY),
|
||||
repaymentFrequencyDayOfWeekType(DayOfWeekType.FRIDAY), repaymentFrequencyDayOfWeekType(DayOfWeekType.SATURDAY));
|
||||
return repaymentFrequencyOptions;
|
||||
return Arrays.asList(repaymentFrequencyDayOfWeekType(DayOfWeekType.SUNDAY), repaymentFrequencyDayOfWeekType(DayOfWeekType.MONDAY),
|
||||
repaymentFrequencyDayOfWeekType(DayOfWeekType.TUESDAY), repaymentFrequencyDayOfWeekType(DayOfWeekType.WEDNESDAY),
|
||||
repaymentFrequencyDayOfWeekType(DayOfWeekType.THURSDAY), repaymentFrequencyDayOfWeekType(DayOfWeekType.FRIDAY),
|
||||
repaymentFrequencyDayOfWeekType(DayOfWeekType.SATURDAY));
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<EnumOptionData> retrieveInterestRateFrequencyTypeOptions() {
|
||||
// support for monthly and annual percentage rate (MPR) and (APR)
|
||||
final List<EnumOptionData> interestRateFrequencyTypeOptions = Arrays.asList(interestRateFrequencyType(PeriodFrequencyType.MONTHS),
|
||||
interestRateFrequencyType(PeriodFrequencyType.YEARS), interestRateFrequencyType(PeriodFrequencyType.WHOLE_TERM));
|
||||
return interestRateFrequencyTypeOptions;
|
||||
return Arrays.asList(interestRateFrequencyType(PeriodFrequencyType.MONTHS), interestRateFrequencyType(PeriodFrequencyType.YEARS),
|
||||
interestRateFrequencyType(PeriodFrequencyType.WHOLE_TERM));
|
||||
}
|
||||
|
||||
@Override
|
||||
public Collection<TransactionProcessingStrategyData> retreiveTransactionProcessingStrategies() {
|
||||
public Collection<TransactionProcessingStrategyData> retrieveTransactionProcessingStrategies() {
|
||||
|
||||
final Collection<TransactionProcessingStrategyData> strategyOptions = new ArrayList<>();
|
||||
Sort sort = Sort.by("sortOrder");
|
||||
@@ -152,72 +139,58 @@ public class LoanDropdownReadPlatformServiceImpl implements LoanDropdownReadPlat
|
||||
@Override
|
||||
public List<EnumOptionData> retrieveLoanCycleValueConditionTypeOptions() {
|
||||
|
||||
final List<EnumOptionData> repaymentFrequencyOptions = Arrays.asList(
|
||||
loanCycleValueConditionType(LoanProductValueConditionType.EQUAL),
|
||||
return Arrays.asList(loanCycleValueConditionType(LoanProductValueConditionType.EQUAL),
|
||||
loanCycleValueConditionType(LoanProductValueConditionType.GREATERTHAN));
|
||||
return repaymentFrequencyOptions;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<EnumOptionData> retrieveInterestRecalculationCompoundingTypeOptions() {
|
||||
|
||||
final List<EnumOptionData> interestRecalculationCompoundingTypeOptions = Arrays.asList(
|
||||
interestRecalculationCompoundingType(InterestRecalculationCompoundingMethod.NONE),
|
||||
return Arrays.asList(interestRecalculationCompoundingType(InterestRecalculationCompoundingMethod.NONE),
|
||||
interestRecalculationCompoundingType(InterestRecalculationCompoundingMethod.FEE),
|
||||
interestRecalculationCompoundingType(InterestRecalculationCompoundingMethod.INTEREST),
|
||||
interestRecalculationCompoundingType(InterestRecalculationCompoundingMethod.INTEREST_AND_FEE));
|
||||
return interestRecalculationCompoundingTypeOptions;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<EnumOptionData> retrieveInterestRecalculationNthDayTypeOptions() {
|
||||
final List<EnumOptionData> interestRecalculationCompoundingNthDayTypeOptions = Arrays.asList(
|
||||
interestRecalculationCompoundingNthDayType(NthDayType.ONE), interestRecalculationCompoundingNthDayType(NthDayType.TWO),
|
||||
interestRecalculationCompoundingNthDayType(NthDayType.THREE), interestRecalculationCompoundingNthDayType(NthDayType.FOUR),
|
||||
interestRecalculationCompoundingNthDayType(NthDayType.LAST));
|
||||
return interestRecalculationCompoundingNthDayTypeOptions;
|
||||
return Arrays.asList(interestRecalculationCompoundingNthDayType(NthDayType.ONE),
|
||||
interestRecalculationCompoundingNthDayType(NthDayType.TWO), interestRecalculationCompoundingNthDayType(NthDayType.THREE),
|
||||
interestRecalculationCompoundingNthDayType(NthDayType.FOUR), interestRecalculationCompoundingNthDayType(NthDayType.LAST));
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<EnumOptionData> retrieveInterestRecalculationDayOfWeekTypeOptions() {
|
||||
final List<EnumOptionData> interestRecalculationCompoundingNthDayTypeOptions = Arrays.asList(
|
||||
interestRecalculationCompoundingDayOfWeekType(DayOfWeekType.SUNDAY),
|
||||
return Arrays.asList(interestRecalculationCompoundingDayOfWeekType(DayOfWeekType.SUNDAY),
|
||||
interestRecalculationCompoundingDayOfWeekType(DayOfWeekType.MONDAY),
|
||||
interestRecalculationCompoundingDayOfWeekType(DayOfWeekType.TUESDAY),
|
||||
interestRecalculationCompoundingDayOfWeekType(DayOfWeekType.WEDNESDAY),
|
||||
interestRecalculationCompoundingDayOfWeekType(DayOfWeekType.THURSDAY),
|
||||
interestRecalculationCompoundingDayOfWeekType(DayOfWeekType.FRIDAY),
|
||||
interestRecalculationCompoundingDayOfWeekType(DayOfWeekType.SATURDAY));
|
||||
return interestRecalculationCompoundingNthDayTypeOptions;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<EnumOptionData> retrieveRescheduleStrategyTypeOptions() {
|
||||
|
||||
final List<EnumOptionData> rescheduleStrategyTypeOptions = Arrays.asList(
|
||||
rescheduleStrategyType(LoanRescheduleStrategyMethod.REDUCE_EMI_AMOUNT),
|
||||
return Arrays.asList(rescheduleStrategyType(LoanRescheduleStrategyMethod.REDUCE_EMI_AMOUNT),
|
||||
rescheduleStrategyType(LoanRescheduleStrategyMethod.REDUCE_NUMBER_OF_INSTALLMENTS),
|
||||
rescheduleStrategyType(LoanRescheduleStrategyMethod.RESCHEDULE_NEXT_REPAYMENTS));
|
||||
return rescheduleStrategyTypeOptions;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<EnumOptionData> retrieveInterestRecalculationFrequencyTypeOptions() {
|
||||
|
||||
final List<EnumOptionData> interestRecalculationFrequencyTypeOptions = Arrays.asList(
|
||||
interestRecalculationFrequencyType(RecalculationFrequencyType.SAME_AS_REPAYMENT_PERIOD),
|
||||
return Arrays.asList(interestRecalculationFrequencyType(RecalculationFrequencyType.SAME_AS_REPAYMENT_PERIOD),
|
||||
interestRecalculationFrequencyType(RecalculationFrequencyType.DAILY),
|
||||
interestRecalculationFrequencyType(RecalculationFrequencyType.WEEKLY),
|
||||
interestRecalculationFrequencyType(RecalculationFrequencyType.MONTHLY));
|
||||
return interestRecalculationFrequencyTypeOptions;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<EnumOptionData> retrivePreCloseInterestCalculationStrategyOptions() {
|
||||
public List<EnumOptionData> retrievePreCloseInterestCalculationStrategyOptions() {
|
||||
|
||||
final List<EnumOptionData> preCloseInterestCalculationStrategyOptions = Arrays.asList(
|
||||
preCloseInterestCalculationStrategy(LoanPreClosureInterestCalculationStrategy.TILL_PRE_CLOSURE_DATE),
|
||||
return Arrays.asList(preCloseInterestCalculationStrategy(LoanPreClosureInterestCalculationStrategy.TILL_PRE_CLOSURE_DATE),
|
||||
preCloseInterestCalculationStrategy(LoanPreClosureInterestCalculationStrategy.TILL_REST_FREQUENCY_DATE));
|
||||
return preCloseInterestCalculationStrategyOptions;
|
||||
}
|
||||
}
|
||||
|
||||
+259
-520
@@ -58,31 +58,21 @@ public final class LoanEnumerations {
|
||||
public static final String INTEREST_RECALCULATION_COMPOUNDING_TYPE = "interestRecalculationCompoundingType";
|
||||
public static final String RESCHEDULE_STRATEGY_TYPE = "rescheduleStrategyType";
|
||||
|
||||
public static EnumOptionData loanEnumueration(final String typeName, final int id) {
|
||||
if (typeName.equals(LOAN_TERM_FREQUENCY_TYPE)) {
|
||||
return loanTermFrequencyType(id);
|
||||
} else if (typeName.equals(TERM_FREQUENCY_TYPE)) {
|
||||
return termFrequencyType(id);
|
||||
} else if (typeName.equals(REPAYMENT_FREQUENCY_TYPE)) {
|
||||
return repaymentFrequencyType(id);
|
||||
} else if (typeName.equals(INTEREST_RATE_FREQUENCY_TYPE)) {
|
||||
return interestRateFrequencyType(id);
|
||||
} else if (typeName.equals(AMORTIZATION_TYPE)) {
|
||||
return amortizationType(id);
|
||||
} else if (typeName.equals(INTEREST_TYPE)) {
|
||||
return interestType(id);
|
||||
} else if (typeName.equals(INTEREST_CALCULATION_PERIOD_TYPE)) {
|
||||
return interestCalculationPeriodType(id);
|
||||
} else if (typeName.equals(ACCOUNTING_RULE_TYPE)) {
|
||||
return AccountingEnumerations.accountingRuleType(id);
|
||||
} else if (typeName.equals(LOAN_TYPE)) {
|
||||
return AccountEnumerations.loanType(id);
|
||||
} else if (typeName.equals(INTEREST_RECALCULATION_COMPOUNDING_TYPE)) {
|
||||
return interestRecalculationCompoundingType(id);
|
||||
} else if (typeName.equals(RESCHEDULE_STRATEGY_TYPE)) {
|
||||
return rescheduleStrategyType(id);
|
||||
}
|
||||
return null;
|
||||
public static EnumOptionData loanEnumeration(final String typeName, final int id) {
|
||||
return switch (typeName) {
|
||||
case LOAN_TERM_FREQUENCY_TYPE -> loanTermFrequencyType(id);
|
||||
case TERM_FREQUENCY_TYPE -> termFrequencyType(id);
|
||||
case REPAYMENT_FREQUENCY_TYPE -> repaymentFrequencyType(id);
|
||||
case INTEREST_RATE_FREQUENCY_TYPE -> interestRateFrequencyType(id);
|
||||
case AMORTIZATION_TYPE -> amortizationType(id);
|
||||
case INTEREST_TYPE -> interestType(id);
|
||||
case INTEREST_CALCULATION_PERIOD_TYPE -> interestCalculationPeriodType(id);
|
||||
case ACCOUNTING_RULE_TYPE -> AccountingEnumerations.accountingRuleType(id);
|
||||
case LOAN_TYPE -> AccountEnumerations.loanType(id);
|
||||
case INTEREST_RECALCULATION_COMPOUNDING_TYPE -> interestRecalculationCompoundingType(id);
|
||||
case RESCHEDULE_STRATEGY_TYPE -> rescheduleStrategyType(id);
|
||||
default -> null;
|
||||
};
|
||||
}
|
||||
|
||||
public static EnumOptionData loanTermFrequencyType(final int id) {
|
||||
@@ -91,30 +81,18 @@ public final class LoanEnumerations {
|
||||
|
||||
public static EnumOptionData loanTermFrequencyType(final PeriodFrequencyType type) {
|
||||
final String codePrefix = "loanTermFrequency.";
|
||||
EnumOptionData optionData = null;
|
||||
switch (type) {
|
||||
case DAYS:
|
||||
optionData = new EnumOptionData(PeriodFrequencyType.DAYS.getValue().longValue(),
|
||||
codePrefix + PeriodFrequencyType.DAYS.getCode(), "Days");
|
||||
break;
|
||||
case WEEKS:
|
||||
optionData = new EnumOptionData(PeriodFrequencyType.WEEKS.getValue().longValue(),
|
||||
codePrefix + PeriodFrequencyType.WEEKS.getCode(), "Weeks");
|
||||
break;
|
||||
case MONTHS:
|
||||
optionData = new EnumOptionData(PeriodFrequencyType.MONTHS.getValue().longValue(),
|
||||
codePrefix + PeriodFrequencyType.MONTHS.getCode(), "Months");
|
||||
break;
|
||||
case YEARS:
|
||||
optionData = new EnumOptionData(PeriodFrequencyType.YEARS.getValue().longValue(),
|
||||
codePrefix + PeriodFrequencyType.YEARS.getCode(), "Years");
|
||||
break;
|
||||
default:
|
||||
optionData = new EnumOptionData(PeriodFrequencyType.INVALID.getValue().longValue(), PeriodFrequencyType.INVALID.getCode(),
|
||||
"Invalid");
|
||||
break;
|
||||
}
|
||||
return optionData;
|
||||
return switch (type) {
|
||||
case DAYS -> new EnumOptionData(PeriodFrequencyType.DAYS.getValue().longValue(),
|
||||
codePrefix + PeriodFrequencyType.DAYS.getCode(), "Days");
|
||||
case WEEKS -> new EnumOptionData(PeriodFrequencyType.WEEKS.getValue().longValue(),
|
||||
codePrefix + PeriodFrequencyType.WEEKS.getCode(), "Weeks");
|
||||
case MONTHS -> new EnumOptionData(PeriodFrequencyType.MONTHS.getValue().longValue(),
|
||||
codePrefix + PeriodFrequencyType.MONTHS.getCode(), "Months");
|
||||
case YEARS -> new EnumOptionData(PeriodFrequencyType.YEARS.getValue().longValue(),
|
||||
codePrefix + PeriodFrequencyType.YEARS.getCode(), "Years");
|
||||
default -> new EnumOptionData(PeriodFrequencyType.INVALID.getValue().longValue(), PeriodFrequencyType.INVALID.getCode(),
|
||||
"Invalid");
|
||||
};
|
||||
}
|
||||
|
||||
public static EnumOptionData termFrequencyType(final int id) {
|
||||
@@ -123,30 +101,18 @@ public final class LoanEnumerations {
|
||||
|
||||
public static EnumOptionData termFrequencyType(final PeriodFrequencyType type) {
|
||||
final String codePrefix = "termFrequency.";
|
||||
EnumOptionData optionData = null;
|
||||
switch (type) {
|
||||
case DAYS:
|
||||
optionData = new EnumOptionData(PeriodFrequencyType.DAYS.getValue().longValue(),
|
||||
codePrefix + PeriodFrequencyType.DAYS.getCode(), "Days");
|
||||
break;
|
||||
case WEEKS:
|
||||
optionData = new EnumOptionData(PeriodFrequencyType.WEEKS.getValue().longValue(),
|
||||
codePrefix + PeriodFrequencyType.WEEKS.getCode(), "Weeks");
|
||||
break;
|
||||
case MONTHS:
|
||||
optionData = new EnumOptionData(PeriodFrequencyType.MONTHS.getValue().longValue(),
|
||||
codePrefix + PeriodFrequencyType.MONTHS.getCode(), "Months");
|
||||
break;
|
||||
case YEARS:
|
||||
optionData = new EnumOptionData(PeriodFrequencyType.YEARS.getValue().longValue(),
|
||||
codePrefix + PeriodFrequencyType.YEARS.getCode(), "Years");
|
||||
break;
|
||||
default:
|
||||
optionData = new EnumOptionData(PeriodFrequencyType.INVALID.getValue().longValue(), PeriodFrequencyType.INVALID.getCode(),
|
||||
"Invalid");
|
||||
break;
|
||||
}
|
||||
return optionData;
|
||||
return switch (type) {
|
||||
case DAYS -> new EnumOptionData(PeriodFrequencyType.DAYS.getValue().longValue(),
|
||||
codePrefix + PeriodFrequencyType.DAYS.getCode(), "Days");
|
||||
case WEEKS -> new EnumOptionData(PeriodFrequencyType.WEEKS.getValue().longValue(),
|
||||
codePrefix + PeriodFrequencyType.WEEKS.getCode(), "Weeks");
|
||||
case MONTHS -> new EnumOptionData(PeriodFrequencyType.MONTHS.getValue().longValue(),
|
||||
codePrefix + PeriodFrequencyType.MONTHS.getCode(), "Months");
|
||||
case YEARS -> new EnumOptionData(PeriodFrequencyType.YEARS.getValue().longValue(),
|
||||
codePrefix + PeriodFrequencyType.YEARS.getCode(), "Years");
|
||||
default -> new EnumOptionData(PeriodFrequencyType.INVALID.getValue().longValue(), PeriodFrequencyType.INVALID.getCode(),
|
||||
"Invalid");
|
||||
};
|
||||
}
|
||||
|
||||
public static EnumOptionData repaymentFrequencyType(final int id) {
|
||||
@@ -163,32 +129,16 @@ public final class LoanEnumerations {
|
||||
public static EnumOptionData repaymentFrequencyNthDayType(final NthDayType type) {
|
||||
final String codePrefix = "repaymentFrequency.";
|
||||
long nthDayValue = type.getValue().longValue();
|
||||
EnumOptionData optionData = null;
|
||||
switch (type) {
|
||||
case ONE:
|
||||
optionData = new EnumOptionData(nthDayValue, codePrefix + type.getCode(), "first");
|
||||
break;
|
||||
case TWO:
|
||||
optionData = new EnumOptionData(nthDayValue, codePrefix + type.getCode(), "second");
|
||||
break;
|
||||
case THREE:
|
||||
optionData = new EnumOptionData(nthDayValue, codePrefix + type.getCode(), "third");
|
||||
break;
|
||||
case FOUR:
|
||||
optionData = new EnumOptionData(nthDayValue, codePrefix + type.getCode(), "fourth");
|
||||
break;
|
||||
case FIVE:
|
||||
optionData = new EnumOptionData(nthDayValue, codePrefix + type.getCode(), "fifth");
|
||||
break;
|
||||
case LAST:
|
||||
optionData = new EnumOptionData(nthDayValue, codePrefix + type.getCode(), "last");
|
||||
break;
|
||||
default:
|
||||
optionData = new EnumOptionData(Integer.valueOf(0).longValue(), codePrefix + type.getCode(), "invalid");
|
||||
break;
|
||||
}
|
||||
|
||||
return optionData;
|
||||
return switch (type) {
|
||||
case ONE -> new EnumOptionData(nthDayValue, codePrefix + type.getCode(), "first");
|
||||
case TWO -> new EnumOptionData(nthDayValue, codePrefix + type.getCode(), "second");
|
||||
case THREE -> new EnumOptionData(nthDayValue, codePrefix + type.getCode(), "third");
|
||||
case FOUR -> new EnumOptionData(nthDayValue, codePrefix + type.getCode(), "fourth");
|
||||
case FIVE -> new EnumOptionData(nthDayValue, codePrefix + type.getCode(), "fifth");
|
||||
case LAST -> new EnumOptionData(nthDayValue, codePrefix + type.getCode(), "last");
|
||||
default -> new EnumOptionData(Integer.valueOf(0).longValue(), codePrefix + type.getCode(), "invalid");
|
||||
};
|
||||
}
|
||||
|
||||
public static EnumOptionData repaymentFrequencyDayOfWeekType(final Integer id) {
|
||||
@@ -200,37 +150,24 @@ public final class LoanEnumerations {
|
||||
|
||||
public static EnumOptionData repaymentFrequencyDayOfWeekType(final DayOfWeekType type) {
|
||||
final String codePrefix = "repaymentFrequency.";
|
||||
EnumOptionData optionData = new EnumOptionData(type.getValue().longValue(), codePrefix + type.getCode(), type.toString());
|
||||
|
||||
return optionData;
|
||||
return new EnumOptionData(type.getValue().longValue(), codePrefix + type.getCode(), type.toString());
|
||||
}
|
||||
|
||||
public static EnumOptionData repaymentFrequencyType(final PeriodFrequencyType type) {
|
||||
final String codePrefix = "repaymentFrequency.";
|
||||
EnumOptionData optionData = null;
|
||||
switch (type) {
|
||||
case DAYS:
|
||||
optionData = new EnumOptionData(PeriodFrequencyType.DAYS.getValue().longValue(),
|
||||
codePrefix + PeriodFrequencyType.DAYS.getCode(), "Days");
|
||||
break;
|
||||
case WEEKS:
|
||||
optionData = new EnumOptionData(PeriodFrequencyType.WEEKS.getValue().longValue(),
|
||||
codePrefix + PeriodFrequencyType.WEEKS.getCode(), "Weeks");
|
||||
break;
|
||||
case MONTHS:
|
||||
optionData = new EnumOptionData(PeriodFrequencyType.MONTHS.getValue().longValue(),
|
||||
codePrefix + PeriodFrequencyType.MONTHS.getCode(), "Months");
|
||||
break;
|
||||
case YEARS:
|
||||
optionData = new EnumOptionData(PeriodFrequencyType.YEARS.getValue().longValue(),
|
||||
codePrefix + PeriodFrequencyType.YEARS.getCode(), "Years");
|
||||
break;
|
||||
default:
|
||||
optionData = new EnumOptionData(PeriodFrequencyType.INVALID.getValue().longValue(), PeriodFrequencyType.INVALID.getCode(),
|
||||
"Invalid");
|
||||
break;
|
||||
}
|
||||
return optionData;
|
||||
return switch (type) {
|
||||
case DAYS -> new EnumOptionData(PeriodFrequencyType.DAYS.getValue().longValue(),
|
||||
codePrefix + PeriodFrequencyType.DAYS.getCode(), "Days");
|
||||
case WEEKS -> new EnumOptionData(PeriodFrequencyType.WEEKS.getValue().longValue(),
|
||||
codePrefix + PeriodFrequencyType.WEEKS.getCode(), "Weeks");
|
||||
case MONTHS -> new EnumOptionData(PeriodFrequencyType.MONTHS.getValue().longValue(),
|
||||
codePrefix + PeriodFrequencyType.MONTHS.getCode(), "Months");
|
||||
case YEARS -> new EnumOptionData(PeriodFrequencyType.YEARS.getValue().longValue(),
|
||||
codePrefix + PeriodFrequencyType.YEARS.getCode(), "Years");
|
||||
default -> new EnumOptionData(PeriodFrequencyType.INVALID.getValue().longValue(), PeriodFrequencyType.INVALID.getCode(),
|
||||
"Invalid");
|
||||
};
|
||||
}
|
||||
|
||||
public static EnumOptionData interestRateFrequencyType(final Integer id) {
|
||||
@@ -239,26 +176,16 @@ public final class LoanEnumerations {
|
||||
|
||||
public static EnumOptionData interestRateFrequencyType(final PeriodFrequencyType type) {
|
||||
final String codePrefix = "interestRateFrequency.";
|
||||
EnumOptionData optionData = null;
|
||||
switch (type) {
|
||||
case MONTHS:
|
||||
optionData = new EnumOptionData(PeriodFrequencyType.MONTHS.getValue().longValue(),
|
||||
codePrefix + PeriodFrequencyType.MONTHS.getCode(), "Per month");
|
||||
break;
|
||||
case YEARS:
|
||||
optionData = new EnumOptionData(PeriodFrequencyType.YEARS.getValue().longValue(),
|
||||
codePrefix + PeriodFrequencyType.YEARS.getCode(), "Per year");
|
||||
break;
|
||||
case WHOLE_TERM:
|
||||
optionData = new EnumOptionData(PeriodFrequencyType.WHOLE_TERM.getValue().longValue(),
|
||||
codePrefix + PeriodFrequencyType.WHOLE_TERM.getCode(), "Whole term");
|
||||
break;
|
||||
default:
|
||||
optionData = new EnumOptionData(PeriodFrequencyType.INVALID.getValue().longValue(), PeriodFrequencyType.INVALID.getCode(),
|
||||
"Invalid");
|
||||
break;
|
||||
}
|
||||
return optionData;
|
||||
return switch (type) {
|
||||
case MONTHS -> new EnumOptionData(PeriodFrequencyType.MONTHS.getValue().longValue(),
|
||||
codePrefix + PeriodFrequencyType.MONTHS.getCode(), "Per month");
|
||||
case YEARS -> new EnumOptionData(PeriodFrequencyType.YEARS.getValue().longValue(),
|
||||
codePrefix + PeriodFrequencyType.YEARS.getCode(), "Per year");
|
||||
case WHOLE_TERM -> new EnumOptionData(PeriodFrequencyType.WHOLE_TERM.getValue().longValue(),
|
||||
codePrefix + PeriodFrequencyType.WHOLE_TERM.getCode(), "Whole term");
|
||||
default -> new EnumOptionData(PeriodFrequencyType.INVALID.getValue().longValue(), PeriodFrequencyType.INVALID.getCode(),
|
||||
"Invalid");
|
||||
};
|
||||
}
|
||||
|
||||
public static EnumOptionData amortizationType(final Integer id) {
|
||||
@@ -266,22 +193,14 @@ public final class LoanEnumerations {
|
||||
}
|
||||
|
||||
public static EnumOptionData amortizationType(final AmortizationMethod amortizationMethod) {
|
||||
EnumOptionData optionData = null;
|
||||
switch (amortizationMethod) {
|
||||
case EQUAL_INSTALLMENTS:
|
||||
optionData = new EnumOptionData(AmortizationMethod.EQUAL_INSTALLMENTS.getValue().longValue(),
|
||||
AmortizationMethod.EQUAL_INSTALLMENTS.getCode(), "Equal installments");
|
||||
break;
|
||||
case EQUAL_PRINCIPAL:
|
||||
optionData = new EnumOptionData(AmortizationMethod.EQUAL_PRINCIPAL.getValue().longValue(),
|
||||
AmortizationMethod.EQUAL_PRINCIPAL.getCode(), "Equal principal payments");
|
||||
break;
|
||||
default:
|
||||
optionData = new EnumOptionData(AmortizationMethod.INVALID.getValue().longValue(), AmortizationMethod.INVALID.getCode(),
|
||||
"Invalid");
|
||||
break;
|
||||
}
|
||||
return optionData;
|
||||
return switch (amortizationMethod) {
|
||||
case EQUAL_INSTALLMENTS -> new EnumOptionData(AmortizationMethod.EQUAL_INSTALLMENTS.getValue().longValue(),
|
||||
AmortizationMethod.EQUAL_INSTALLMENTS.getCode(), "Equal installments");
|
||||
case EQUAL_PRINCIPAL -> new EnumOptionData(AmortizationMethod.EQUAL_PRINCIPAL.getValue().longValue(),
|
||||
AmortizationMethod.EQUAL_PRINCIPAL.getCode(), "Equal principal payments");
|
||||
default -> new EnumOptionData(AmortizationMethod.INVALID.getValue().longValue(), AmortizationMethod.INVALID.getCode(),
|
||||
"Invalid");
|
||||
};
|
||||
}
|
||||
|
||||
public static EnumOptionData interestType(final Integer id) {
|
||||
@@ -289,20 +208,12 @@ public final class LoanEnumerations {
|
||||
}
|
||||
|
||||
public static EnumOptionData interestType(final InterestMethod type) {
|
||||
EnumOptionData optionData = null;
|
||||
switch (type) {
|
||||
case FLAT:
|
||||
optionData = new EnumOptionData(InterestMethod.FLAT.getValue().longValue(), InterestMethod.FLAT.getCode(), "Flat");
|
||||
break;
|
||||
case DECLINING_BALANCE:
|
||||
optionData = new EnumOptionData(InterestMethod.DECLINING_BALANCE.getValue().longValue(),
|
||||
InterestMethod.DECLINING_BALANCE.getCode(), "Declining Balance");
|
||||
break;
|
||||
default:
|
||||
optionData = new EnumOptionData(InterestMethod.INVALID.getValue().longValue(), InterestMethod.INVALID.getCode(), "Invalid");
|
||||
break;
|
||||
}
|
||||
return optionData;
|
||||
return switch (type) {
|
||||
case FLAT -> new EnumOptionData(InterestMethod.FLAT.getValue().longValue(), InterestMethod.FLAT.getCode(), "Flat");
|
||||
case DECLINING_BALANCE -> new EnumOptionData(InterestMethod.DECLINING_BALANCE.getValue().longValue(),
|
||||
InterestMethod.DECLINING_BALANCE.getCode(), "Declining Balance");
|
||||
default -> new EnumOptionData(InterestMethod.INVALID.getValue().longValue(), InterestMethod.INVALID.getCode(), "Invalid");
|
||||
};
|
||||
}
|
||||
|
||||
public static EnumOptionData interestCalculationPeriodType(final Integer id) {
|
||||
@@ -310,22 +221,15 @@ public final class LoanEnumerations {
|
||||
}
|
||||
|
||||
public static EnumOptionData interestCalculationPeriodType(final InterestCalculationPeriodMethod type) {
|
||||
EnumOptionData optionData = null;
|
||||
switch (type) {
|
||||
case DAILY:
|
||||
optionData = new EnumOptionData(InterestCalculationPeriodMethod.DAILY.getValue().longValue(),
|
||||
InterestCalculationPeriodMethod.DAILY.getCode(), "Daily");
|
||||
break;
|
||||
case SAME_AS_REPAYMENT_PERIOD:
|
||||
optionData = new EnumOptionData(InterestCalculationPeriodMethod.SAME_AS_REPAYMENT_PERIOD.getValue().longValue(),
|
||||
InterestCalculationPeriodMethod.SAME_AS_REPAYMENT_PERIOD.getCode(), "Same as repayment period");
|
||||
break;
|
||||
default:
|
||||
optionData = new EnumOptionData(InterestCalculationPeriodMethod.INVALID.getValue().longValue(),
|
||||
InterestCalculationPeriodMethod.INVALID.getCode(), "Invalid");
|
||||
break;
|
||||
}
|
||||
return optionData;
|
||||
return switch (type) {
|
||||
case DAILY -> new EnumOptionData(InterestCalculationPeriodMethod.DAILY.getValue().longValue(),
|
||||
InterestCalculationPeriodMethod.DAILY.getCode(), "Daily");
|
||||
case SAME_AS_REPAYMENT_PERIOD -> new EnumOptionData(
|
||||
InterestCalculationPeriodMethod.SAME_AS_REPAYMENT_PERIOD.getValue().longValue(),
|
||||
InterestCalculationPeriodMethod.SAME_AS_REPAYMENT_PERIOD.getCode(), "Same as repayment period");
|
||||
default -> new EnumOptionData(InterestCalculationPeriodMethod.INVALID.getValue().longValue(),
|
||||
InterestCalculationPeriodMethod.INVALID.getCode(), "Invalid");
|
||||
};
|
||||
}
|
||||
|
||||
public static LoanTransactionEnumData transactionType(final Integer id) {
|
||||
@@ -333,106 +237,57 @@ public final class LoanEnumerations {
|
||||
}
|
||||
|
||||
public static LoanTransactionEnumData transactionType(final LoanTransactionType type) {
|
||||
LoanTransactionEnumData optionData = null;
|
||||
switch (type) {
|
||||
case INVALID:
|
||||
optionData = new LoanTransactionEnumData(LoanTransactionType.INVALID.getValue().longValue(),
|
||||
LoanTransactionType.INVALID.getCode(), "Invalid");
|
||||
break;
|
||||
case DISBURSEMENT:
|
||||
optionData = new LoanTransactionEnumData(LoanTransactionType.DISBURSEMENT.getValue().longValue(),
|
||||
LoanTransactionType.DISBURSEMENT.getCode(), "Disbursement");
|
||||
break;
|
||||
case REPAYMENT:
|
||||
optionData = new LoanTransactionEnumData(LoanTransactionType.REPAYMENT.getValue().longValue(),
|
||||
LoanTransactionType.REPAYMENT.getCode(), "Repayment");
|
||||
break;
|
||||
case REPAYMENT_AT_DISBURSEMENT:
|
||||
optionData = new LoanTransactionEnumData(LoanTransactionType.REPAYMENT_AT_DISBURSEMENT.getValue().longValue(),
|
||||
LoanTransactionType.REPAYMENT_AT_DISBURSEMENT.getCode(), "Repayment (at time of disbursement)");
|
||||
break;
|
||||
case CONTRA:
|
||||
optionData = new LoanTransactionEnumData(LoanTransactionType.CONTRA.getValue().longValue(),
|
||||
LoanTransactionType.CONTRA.getCode(), "Reversal");
|
||||
break;
|
||||
case WAIVE_INTEREST:
|
||||
optionData = new LoanTransactionEnumData(LoanTransactionType.WAIVE_INTEREST.getValue().longValue(),
|
||||
LoanTransactionType.WAIVE_INTEREST.getCode(), "Waive interest");
|
||||
break;
|
||||
case MARKED_FOR_RESCHEDULING:
|
||||
optionData = new LoanTransactionEnumData(LoanTransactionType.MARKED_FOR_RESCHEDULING.getValue().longValue(),
|
||||
LoanTransactionType.MARKED_FOR_RESCHEDULING.getCode(), "Close (as rescheduled)");
|
||||
break;
|
||||
case WRITEOFF:
|
||||
optionData = new LoanTransactionEnumData(LoanTransactionType.WRITEOFF.getValue().longValue(),
|
||||
LoanTransactionType.WRITEOFF.getCode(), "Close (as written-off)");
|
||||
break;
|
||||
case RECOVERY_REPAYMENT:
|
||||
optionData = new LoanTransactionEnumData(LoanTransactionType.RECOVERY_REPAYMENT.getValue().longValue(),
|
||||
LoanTransactionType.RECOVERY_REPAYMENT.getCode(), "Repayment (after write-off)");
|
||||
break;
|
||||
case WAIVE_CHARGES:
|
||||
optionData = new LoanTransactionEnumData(LoanTransactionType.WAIVE_CHARGES.getValue().longValue(),
|
||||
LoanTransactionType.WAIVE_CHARGES.getCode(), "Waive loan charges");
|
||||
break;
|
||||
case ACCRUAL:
|
||||
optionData = new LoanTransactionEnumData(LoanTransactionType.ACCRUAL.getValue().longValue(),
|
||||
LoanTransactionType.ACCRUAL.getCode(), "Accrual");
|
||||
break;
|
||||
case APPROVE_TRANSFER:
|
||||
optionData = new LoanTransactionEnumData(LoanTransactionType.APPROVE_TRANSFER.getValue().longValue(),
|
||||
LoanTransactionType.APPROVE_TRANSFER.getCode(), "Transfer approved");
|
||||
break;
|
||||
case INITIATE_TRANSFER:
|
||||
optionData = new LoanTransactionEnumData(LoanTransactionType.INITIATE_TRANSFER.getValue().longValue(),
|
||||
LoanTransactionType.INITIATE_TRANSFER.getCode(), "Transfer initiated");
|
||||
break;
|
||||
case WITHDRAW_TRANSFER:
|
||||
optionData = new LoanTransactionEnumData(LoanTransactionType.WITHDRAW_TRANSFER.getValue().longValue(),
|
||||
LoanTransactionType.WITHDRAW_TRANSFER.getCode(), "Transfer Withdrawn");
|
||||
break;
|
||||
case REJECT_TRANSFER:
|
||||
optionData = new LoanTransactionEnumData(LoanTransactionType.REJECT_TRANSFER.getValue().longValue(),
|
||||
LoanTransactionType.REJECT_TRANSFER.getCode(), "Transfer Rejected");
|
||||
break;
|
||||
case REFUND:
|
||||
optionData = new LoanTransactionEnumData(LoanTransactionType.REFUND.getValue().longValue(),
|
||||
LoanTransactionType.REFUND.getCode(), "Transfer Refund");
|
||||
break;
|
||||
case CHARGE_PAYMENT:
|
||||
optionData = new LoanTransactionEnumData(LoanTransactionType.CHARGE_PAYMENT.getValue().longValue(),
|
||||
LoanTransactionType.CHARGE_PAYMENT.getCode(), "Charge Payment");
|
||||
break;
|
||||
case REFUND_FOR_ACTIVE_LOAN:
|
||||
optionData = new LoanTransactionEnumData(LoanTransactionType.REFUND_FOR_ACTIVE_LOAN.getValue().longValue(),
|
||||
LoanTransactionType.REFUND_FOR_ACTIVE_LOAN.getCode(), "Refund");
|
||||
break;
|
||||
case INCOME_POSTING:
|
||||
optionData = new LoanTransactionEnumData(LoanTransactionType.INCOME_POSTING.getValue().longValue(),
|
||||
LoanTransactionType.INCOME_POSTING.getCode(), "Income Posting");
|
||||
break;
|
||||
case CREDIT_BALANCE_REFUND:
|
||||
optionData = new LoanTransactionEnumData(LoanTransactionType.CREDIT_BALANCE_REFUND.getValue().longValue(),
|
||||
LoanTransactionType.CREDIT_BALANCE_REFUND.getCode(), "Credit Balance Refund");
|
||||
break;
|
||||
case MERCHANT_ISSUED_REFUND:
|
||||
optionData = new LoanTransactionEnumData(LoanTransactionType.MERCHANT_ISSUED_REFUND.getValue().longValue(),
|
||||
LoanTransactionType.MERCHANT_ISSUED_REFUND.getCode(), "Merchant Issued Refund");
|
||||
break;
|
||||
case PAYOUT_REFUND:
|
||||
optionData = new LoanTransactionEnumData(LoanTransactionType.PAYOUT_REFUND.getValue().longValue(),
|
||||
LoanTransactionType.PAYOUT_REFUND.getCode(), "Payout Refund");
|
||||
break;
|
||||
case GOODWILL_CREDIT:
|
||||
optionData = new LoanTransactionEnumData(LoanTransactionType.GOODWILL_CREDIT.getValue().longValue(),
|
||||
LoanTransactionType.GOODWILL_CREDIT.getCode(), "Goodwill Credit");
|
||||
break;
|
||||
case CHARGE_REFUND:
|
||||
optionData = new LoanTransactionEnumData(LoanTransactionType.CHARGE_REFUND.getValue().longValue(),
|
||||
LoanTransactionType.CHARGE_REFUND.getCode(), "Charge Refund");
|
||||
break;
|
||||
}
|
||||
return optionData;
|
||||
return switch (type) {
|
||||
case INVALID -> new LoanTransactionEnumData(LoanTransactionType.INVALID.getValue().longValue(),
|
||||
LoanTransactionType.INVALID.getCode(), "Invalid");
|
||||
case DISBURSEMENT -> new LoanTransactionEnumData(LoanTransactionType.DISBURSEMENT.getValue().longValue(),
|
||||
LoanTransactionType.DISBURSEMENT.getCode(), "Disbursement");
|
||||
case REPAYMENT -> new LoanTransactionEnumData(LoanTransactionType.REPAYMENT.getValue().longValue(),
|
||||
LoanTransactionType.REPAYMENT.getCode(), "Repayment");
|
||||
case REPAYMENT_AT_DISBURSEMENT -> new LoanTransactionEnumData(
|
||||
LoanTransactionType.REPAYMENT_AT_DISBURSEMENT.getValue().longValue(),
|
||||
LoanTransactionType.REPAYMENT_AT_DISBURSEMENT.getCode(), "Repayment (at time of disbursement)");
|
||||
case CONTRA -> new LoanTransactionEnumData(LoanTransactionType.CONTRA.getValue().longValue(),
|
||||
LoanTransactionType.CONTRA.getCode(), "Reversal");
|
||||
case WAIVE_INTEREST -> new LoanTransactionEnumData(LoanTransactionType.WAIVE_INTEREST.getValue().longValue(),
|
||||
LoanTransactionType.WAIVE_INTEREST.getCode(), "Waive interest");
|
||||
case MARKED_FOR_RESCHEDULING -> new LoanTransactionEnumData(LoanTransactionType.MARKED_FOR_RESCHEDULING.getValue().longValue(),
|
||||
LoanTransactionType.MARKED_FOR_RESCHEDULING.getCode(), "Close (as rescheduled)");
|
||||
case WRITEOFF -> new LoanTransactionEnumData(LoanTransactionType.WRITEOFF.getValue().longValue(),
|
||||
LoanTransactionType.WRITEOFF.getCode(), "Close (as written-off)");
|
||||
case RECOVERY_REPAYMENT -> new LoanTransactionEnumData(LoanTransactionType.RECOVERY_REPAYMENT.getValue().longValue(),
|
||||
LoanTransactionType.RECOVERY_REPAYMENT.getCode(), "Repayment (after write-off)");
|
||||
case WAIVE_CHARGES -> new LoanTransactionEnumData(LoanTransactionType.WAIVE_CHARGES.getValue().longValue(),
|
||||
LoanTransactionType.WAIVE_CHARGES.getCode(), "Waive loan charges");
|
||||
case ACCRUAL -> new LoanTransactionEnumData(LoanTransactionType.ACCRUAL.getValue().longValue(),
|
||||
LoanTransactionType.ACCRUAL.getCode(), "Accrual");
|
||||
case APPROVE_TRANSFER -> new LoanTransactionEnumData(LoanTransactionType.APPROVE_TRANSFER.getValue().longValue(),
|
||||
LoanTransactionType.APPROVE_TRANSFER.getCode(), "Transfer approved");
|
||||
case INITIATE_TRANSFER -> new LoanTransactionEnumData(LoanTransactionType.INITIATE_TRANSFER.getValue().longValue(),
|
||||
LoanTransactionType.INITIATE_TRANSFER.getCode(), "Transfer initiated");
|
||||
case WITHDRAW_TRANSFER -> new LoanTransactionEnumData(LoanTransactionType.WITHDRAW_TRANSFER.getValue().longValue(),
|
||||
LoanTransactionType.WITHDRAW_TRANSFER.getCode(), "Transfer Withdrawn");
|
||||
case REJECT_TRANSFER -> new LoanTransactionEnumData(LoanTransactionType.REJECT_TRANSFER.getValue().longValue(),
|
||||
LoanTransactionType.REJECT_TRANSFER.getCode(), "Transfer Rejected");
|
||||
case REFUND -> new LoanTransactionEnumData(LoanTransactionType.REFUND.getValue().longValue(),
|
||||
LoanTransactionType.REFUND.getCode(), "Transfer Refund");
|
||||
case CHARGE_PAYMENT -> new LoanTransactionEnumData(LoanTransactionType.CHARGE_PAYMENT.getValue().longValue(),
|
||||
LoanTransactionType.CHARGE_PAYMENT.getCode(), "Charge Payment");
|
||||
case REFUND_FOR_ACTIVE_LOAN -> new LoanTransactionEnumData(LoanTransactionType.REFUND_FOR_ACTIVE_LOAN.getValue().longValue(),
|
||||
LoanTransactionType.REFUND_FOR_ACTIVE_LOAN.getCode(), "Refund");
|
||||
case INCOME_POSTING -> new LoanTransactionEnumData(LoanTransactionType.INCOME_POSTING.getValue().longValue(),
|
||||
LoanTransactionType.INCOME_POSTING.getCode(), "Income Posting");
|
||||
case CREDIT_BALANCE_REFUND -> new LoanTransactionEnumData(LoanTransactionType.CREDIT_BALANCE_REFUND.getValue().longValue(),
|
||||
LoanTransactionType.CREDIT_BALANCE_REFUND.getCode(), "Credit Balance Refund");
|
||||
case MERCHANT_ISSUED_REFUND -> new LoanTransactionEnumData(LoanTransactionType.MERCHANT_ISSUED_REFUND.getValue().longValue(),
|
||||
LoanTransactionType.MERCHANT_ISSUED_REFUND.getCode(), "Merchant Issued Refund");
|
||||
case PAYOUT_REFUND -> new LoanTransactionEnumData(LoanTransactionType.PAYOUT_REFUND.getValue().longValue(),
|
||||
LoanTransactionType.PAYOUT_REFUND.getCode(), "Payout Refund");
|
||||
case GOODWILL_CREDIT -> new LoanTransactionEnumData(LoanTransactionType.GOODWILL_CREDIT.getValue().longValue(),
|
||||
LoanTransactionType.GOODWILL_CREDIT.getCode(), "Goodwill Credit");
|
||||
case CHARGE_REFUND -> new LoanTransactionEnumData(LoanTransactionType.CHARGE_REFUND.getValue().longValue(),
|
||||
LoanTransactionType.CHARGE_REFUND.getCode(), "Charge Refund");
|
||||
};
|
||||
}
|
||||
|
||||
public static EnumOptionData status(final LoanStatusEnumData status) {
|
||||
@@ -449,55 +304,28 @@ public final class LoanEnumerations {
|
||||
}
|
||||
|
||||
public static LoanStatusEnumData status(final LoanStatus status) {
|
||||
LoanStatusEnumData optionData = new LoanStatusEnumData(LoanStatus.INVALID.getValue().longValue(), LoanStatus.INVALID.getCode(),
|
||||
"Invalid");
|
||||
switch (status) {
|
||||
case INVALID:
|
||||
optionData = new LoanStatusEnumData(LoanStatus.INVALID.getValue().longValue(), LoanStatus.INVALID.getCode(), "Invalid");
|
||||
break;
|
||||
case SUBMITTED_AND_PENDING_APPROVAL:
|
||||
optionData = new LoanStatusEnumData(LoanStatus.SUBMITTED_AND_PENDING_APPROVAL.getValue().longValue(),
|
||||
LoanStatus.SUBMITTED_AND_PENDING_APPROVAL.getCode(), "Submitted and pending approval");
|
||||
break;
|
||||
case APPROVED:
|
||||
optionData = new LoanStatusEnumData(LoanStatus.APPROVED.getValue().longValue(), LoanStatus.APPROVED.getCode(), "Approved");
|
||||
break;
|
||||
case ACTIVE:
|
||||
optionData = new LoanStatusEnumData(LoanStatus.ACTIVE.getValue().longValue(), LoanStatus.ACTIVE.getCode(), "Active");
|
||||
break;
|
||||
case REJECTED:
|
||||
optionData = new LoanStatusEnumData(LoanStatus.REJECTED.getValue().longValue(), LoanStatus.REJECTED.getCode(), "Rejected");
|
||||
break;
|
||||
case WITHDRAWN_BY_CLIENT:
|
||||
optionData = new LoanStatusEnumData(LoanStatus.WITHDRAWN_BY_CLIENT.getValue().longValue(),
|
||||
LoanStatus.WITHDRAWN_BY_CLIENT.getCode(), "Withdrawn by applicant");
|
||||
break;
|
||||
case CLOSED_OBLIGATIONS_MET:
|
||||
optionData = new LoanStatusEnumData(LoanStatus.CLOSED_OBLIGATIONS_MET.getValue().longValue(),
|
||||
LoanStatus.CLOSED_OBLIGATIONS_MET.getCode(), "Closed (obligations met)");
|
||||
break;
|
||||
case CLOSED_WRITTEN_OFF:
|
||||
optionData = new LoanStatusEnumData(LoanStatus.CLOSED_WRITTEN_OFF.getValue().longValue(),
|
||||
LoanStatus.CLOSED_WRITTEN_OFF.getCode(), "Closed (written off)");
|
||||
break;
|
||||
case CLOSED_RESCHEDULE_OUTSTANDING_AMOUNT:
|
||||
optionData = new LoanStatusEnumData(LoanStatus.CLOSED_RESCHEDULE_OUTSTANDING_AMOUNT.getValue().longValue(),
|
||||
LoanStatus.CLOSED_RESCHEDULE_OUTSTANDING_AMOUNT.getCode(), "Closed (rescheduled)");
|
||||
break;
|
||||
case OVERPAID:
|
||||
optionData = new LoanStatusEnumData(LoanStatus.OVERPAID.getValue().longValue(), LoanStatus.OVERPAID.getCode(), "Overpaid");
|
||||
break;
|
||||
case TRANSFER_IN_PROGRESS:
|
||||
optionData = new LoanStatusEnumData(LoanStatus.TRANSFER_IN_PROGRESS.getValue().longValue(),
|
||||
LoanStatus.TRANSFER_IN_PROGRESS.getCode(), "Transfer in progress");
|
||||
break;
|
||||
case TRANSFER_ON_HOLD:
|
||||
optionData = new LoanStatusEnumData(LoanStatus.TRANSFER_ON_HOLD.getValue().longValue(),
|
||||
LoanStatus.TRANSFER_ON_HOLD.getCode(), "Transfer on hold");
|
||||
break;
|
||||
}
|
||||
|
||||
return optionData;
|
||||
return switch (status) {
|
||||
case INVALID -> new LoanStatusEnumData(LoanStatus.INVALID.getValue().longValue(), LoanStatus.INVALID.getCode(), "Invalid");
|
||||
case SUBMITTED_AND_PENDING_APPROVAL -> new LoanStatusEnumData(LoanStatus.SUBMITTED_AND_PENDING_APPROVAL.getValue().longValue(),
|
||||
LoanStatus.SUBMITTED_AND_PENDING_APPROVAL.getCode(), "Submitted and pending approval");
|
||||
case APPROVED -> new LoanStatusEnumData(LoanStatus.APPROVED.getValue().longValue(), LoanStatus.APPROVED.getCode(), "Approved");
|
||||
case ACTIVE -> new LoanStatusEnumData(LoanStatus.ACTIVE.getValue().longValue(), LoanStatus.ACTIVE.getCode(), "Active");
|
||||
case REJECTED -> new LoanStatusEnumData(LoanStatus.REJECTED.getValue().longValue(), LoanStatus.REJECTED.getCode(), "Rejected");
|
||||
case WITHDRAWN_BY_CLIENT -> new LoanStatusEnumData(LoanStatus.WITHDRAWN_BY_CLIENT.getValue().longValue(),
|
||||
LoanStatus.WITHDRAWN_BY_CLIENT.getCode(), "Withdrawn by applicant");
|
||||
case CLOSED_OBLIGATIONS_MET -> new LoanStatusEnumData(LoanStatus.CLOSED_OBLIGATIONS_MET.getValue().longValue(),
|
||||
LoanStatus.CLOSED_OBLIGATIONS_MET.getCode(), "Closed (obligations met)");
|
||||
case CLOSED_WRITTEN_OFF -> new LoanStatusEnumData(LoanStatus.CLOSED_WRITTEN_OFF.getValue().longValue(),
|
||||
LoanStatus.CLOSED_WRITTEN_OFF.getCode(), "Closed (written off)");
|
||||
case CLOSED_RESCHEDULE_OUTSTANDING_AMOUNT -> new LoanStatusEnumData(
|
||||
LoanStatus.CLOSED_RESCHEDULE_OUTSTANDING_AMOUNT.getValue().longValue(),
|
||||
LoanStatus.CLOSED_RESCHEDULE_OUTSTANDING_AMOUNT.getCode(), "Closed (rescheduled)");
|
||||
case OVERPAID -> new LoanStatusEnumData(LoanStatus.OVERPAID.getValue().longValue(), LoanStatus.OVERPAID.getCode(), "Overpaid");
|
||||
case TRANSFER_IN_PROGRESS -> new LoanStatusEnumData(LoanStatus.TRANSFER_IN_PROGRESS.getValue().longValue(),
|
||||
LoanStatus.TRANSFER_IN_PROGRESS.getCode(), "Transfer in progress");
|
||||
case TRANSFER_ON_HOLD -> new LoanStatusEnumData(LoanStatus.TRANSFER_ON_HOLD.getValue().longValue(),
|
||||
LoanStatus.TRANSFER_ON_HOLD.getCode(), "Transfer on hold");
|
||||
};
|
||||
}
|
||||
|
||||
public static EnumOptionData loanCycleValueConditionType(final int id) {
|
||||
@@ -505,22 +333,14 @@ public final class LoanEnumerations {
|
||||
}
|
||||
|
||||
public static EnumOptionData loanCycleValueConditionType(final LoanProductValueConditionType type) {
|
||||
EnumOptionData optionData = null;
|
||||
switch (type) {
|
||||
case EQUAL:
|
||||
optionData = new EnumOptionData(LoanProductValueConditionType.EQUAL.getValue().longValue(),
|
||||
LoanProductValueConditionType.EQUAL.getCode(), "equals");
|
||||
break;
|
||||
case GREATERTHAN:
|
||||
optionData = new EnumOptionData(LoanProductValueConditionType.GREATERTHAN.getValue().longValue(),
|
||||
LoanProductValueConditionType.GREATERTHAN.getCode(), "greater than");
|
||||
break;
|
||||
default:
|
||||
optionData = new EnumOptionData(LoanProductValueConditionType.INVALID.getValue().longValue(),
|
||||
LoanProductValueConditionType.INVALID.getCode(), "Invalid");
|
||||
break;
|
||||
}
|
||||
return optionData;
|
||||
return switch (type) {
|
||||
case EQUAL -> new EnumOptionData(LoanProductValueConditionType.EQUAL.getValue().longValue(),
|
||||
LoanProductValueConditionType.EQUAL.getCode(), "equals");
|
||||
case GREATERTHAN -> new EnumOptionData(LoanProductValueConditionType.GREATERTHAN.getValue().longValue(),
|
||||
LoanProductValueConditionType.GREATERTHAN.getCode(), "greater than");
|
||||
default -> new EnumOptionData(LoanProductValueConditionType.INVALID.getValue().longValue(),
|
||||
LoanProductValueConditionType.INVALID.getCode(), "Invalid");
|
||||
};
|
||||
}
|
||||
|
||||
public static EnumOptionData loanCycleParamType(final int id) {
|
||||
@@ -528,81 +348,48 @@ public final class LoanEnumerations {
|
||||
}
|
||||
|
||||
public static EnumOptionData loanCycleParamType(final LoanProductParamType type) {
|
||||
EnumOptionData optionData = null;
|
||||
switch (type) {
|
||||
case PRINCIPAL:
|
||||
optionData = new EnumOptionData(LoanProductParamType.PRINCIPAL.getValue().longValue(),
|
||||
LoanProductParamType.PRINCIPAL.getCode(), "principal");
|
||||
break;
|
||||
case INTERESTRATE:
|
||||
optionData = new EnumOptionData(LoanProductParamType.INTERESTRATE.getValue().longValue(),
|
||||
LoanProductParamType.INTERESTRATE.getCode(), "Interest rate");
|
||||
break;
|
||||
case REPAYMENT:
|
||||
optionData = new EnumOptionData(LoanProductParamType.REPAYMENT.getValue().longValue(),
|
||||
LoanProductParamType.REPAYMENT.getCode(), "repayment");
|
||||
break;
|
||||
default:
|
||||
optionData = new EnumOptionData(LoanProductParamType.INVALID.getValue().longValue(), LoanProductParamType.INVALID.getCode(),
|
||||
"Invalid");
|
||||
break;
|
||||
}
|
||||
return optionData;
|
||||
return switch (type) {
|
||||
case PRINCIPAL -> new EnumOptionData(LoanProductParamType.PRINCIPAL.getValue().longValue(),
|
||||
LoanProductParamType.PRINCIPAL.getCode(), "principal");
|
||||
case INTERESTRATE -> new EnumOptionData(LoanProductParamType.INTERESTRATE.getValue().longValue(),
|
||||
LoanProductParamType.INTERESTRATE.getCode(), "Interest rate");
|
||||
case REPAYMENT -> new EnumOptionData(LoanProductParamType.REPAYMENT.getValue().longValue(),
|
||||
LoanProductParamType.REPAYMENT.getCode(), "repayment");
|
||||
default -> new EnumOptionData(LoanProductParamType.INVALID.getValue().longValue(), LoanProductParamType.INVALID.getCode(),
|
||||
"Invalid");
|
||||
};
|
||||
}
|
||||
|
||||
public static EnumOptionData loanvariationType(final int id) {
|
||||
return loanvariationType(LoanTermVariationType.fromInt(id));
|
||||
public static EnumOptionData loanVariationType(final int id) {
|
||||
return loanVariationType(LoanTermVariationType.fromInt(id));
|
||||
}
|
||||
|
||||
public static EnumOptionData loanvariationType(final LoanTermVariationType type) {
|
||||
EnumOptionData optionData = null;
|
||||
switch (type) {
|
||||
case EMI_AMOUNT:
|
||||
optionData = new EnumOptionData(LoanTermVariationType.EMI_AMOUNT.getValue().longValue(),
|
||||
LoanTermVariationType.EMI_AMOUNT.getCode(), "emiAmount");
|
||||
break;
|
||||
case INTEREST_RATE:
|
||||
optionData = new EnumOptionData(LoanTermVariationType.INTEREST_RATE.getValue().longValue(),
|
||||
LoanTermVariationType.INTEREST_RATE.getCode(), "interestRate");
|
||||
break;
|
||||
case DELETE_INSTALLMENT:
|
||||
optionData = new EnumOptionData(LoanTermVariationType.DELETE_INSTALLMENT.getValue().longValue(),
|
||||
LoanTermVariationType.DELETE_INSTALLMENT.getCode(), "deleteInstallment");
|
||||
break;
|
||||
case DUE_DATE:
|
||||
optionData = new EnumOptionData(LoanTermVariationType.DUE_DATE.getValue().longValue(),
|
||||
LoanTermVariationType.DUE_DATE.getCode(), "dueDate");
|
||||
break;
|
||||
case INSERT_INSTALLMENT:
|
||||
optionData = new EnumOptionData(LoanTermVariationType.INSERT_INSTALLMENT.getValue().longValue(),
|
||||
LoanTermVariationType.DUE_DATE.getCode(), "insertInstallment");
|
||||
break;
|
||||
case PRINCIPAL_AMOUNT:
|
||||
optionData = new EnumOptionData(LoanTermVariationType.PRINCIPAL_AMOUNT.getValue().longValue(),
|
||||
LoanTermVariationType.PRINCIPAL_AMOUNT.getCode(), "principalAmount");
|
||||
break;
|
||||
case GRACE_ON_INTEREST:
|
||||
optionData = new EnumOptionData(LoanTermVariationType.GRACE_ON_INTEREST.getValue().longValue(),
|
||||
LoanTermVariationType.GRACE_ON_INTEREST.getCode(), "graceOnInterest");
|
||||
break;
|
||||
case GRACE_ON_PRINCIPAL:
|
||||
optionData = new EnumOptionData(LoanTermVariationType.GRACE_ON_PRINCIPAL.getValue().longValue(),
|
||||
LoanTermVariationType.GRACE_ON_PRINCIPAL.getCode(), "graceOnPrincipal");
|
||||
break;
|
||||
case EXTEND_REPAYMENT_PERIOD:
|
||||
optionData = new EnumOptionData(LoanTermVariationType.EXTEND_REPAYMENT_PERIOD.getValue().longValue(),
|
||||
LoanTermVariationType.EXTEND_REPAYMENT_PERIOD.getCode(), "extendRepaymentPeriod");
|
||||
break;
|
||||
case INTEREST_RATE_FROM_INSTALLMENT:
|
||||
optionData = new EnumOptionData(LoanTermVariationType.INTEREST_RATE_FROM_INSTALLMENT.getValue().longValue(),
|
||||
LoanTermVariationType.INTEREST_RATE_FROM_INSTALLMENT.getCode(), "interestRateForInstallment");
|
||||
break;
|
||||
default:
|
||||
optionData = new EnumOptionData(LoanTermVariationType.INVALID.getValue().longValue(),
|
||||
LoanTermVariationType.INVALID.getCode(), "Invalid");
|
||||
break;
|
||||
}
|
||||
return optionData;
|
||||
public static EnumOptionData loanVariationType(final LoanTermVariationType type) {
|
||||
return switch (type) {
|
||||
case EMI_AMOUNT -> new EnumOptionData(LoanTermVariationType.EMI_AMOUNT.getValue().longValue(),
|
||||
LoanTermVariationType.EMI_AMOUNT.getCode(), "emiAmount");
|
||||
case INTEREST_RATE -> new EnumOptionData(LoanTermVariationType.INTEREST_RATE.getValue().longValue(),
|
||||
LoanTermVariationType.INTEREST_RATE.getCode(), "interestRate");
|
||||
case DELETE_INSTALLMENT -> new EnumOptionData(LoanTermVariationType.DELETE_INSTALLMENT.getValue().longValue(),
|
||||
LoanTermVariationType.DELETE_INSTALLMENT.getCode(), "deleteInstallment");
|
||||
case DUE_DATE -> new EnumOptionData(LoanTermVariationType.DUE_DATE.getValue().longValue(),
|
||||
LoanTermVariationType.DUE_DATE.getCode(), "dueDate");
|
||||
case INSERT_INSTALLMENT -> new EnumOptionData(LoanTermVariationType.INSERT_INSTALLMENT.getValue().longValue(),
|
||||
LoanTermVariationType.DUE_DATE.getCode(), "insertInstallment");
|
||||
case PRINCIPAL_AMOUNT -> new EnumOptionData(LoanTermVariationType.PRINCIPAL_AMOUNT.getValue().longValue(),
|
||||
LoanTermVariationType.PRINCIPAL_AMOUNT.getCode(), "principalAmount");
|
||||
case GRACE_ON_INTEREST -> new EnumOptionData(LoanTermVariationType.GRACE_ON_INTEREST.getValue().longValue(),
|
||||
LoanTermVariationType.GRACE_ON_INTEREST.getCode(), "graceOnInterest");
|
||||
case GRACE_ON_PRINCIPAL -> new EnumOptionData(LoanTermVariationType.GRACE_ON_PRINCIPAL.getValue().longValue(),
|
||||
LoanTermVariationType.GRACE_ON_PRINCIPAL.getCode(), "graceOnPrincipal");
|
||||
case EXTEND_REPAYMENT_PERIOD -> new EnumOptionData(LoanTermVariationType.EXTEND_REPAYMENT_PERIOD.getValue().longValue(),
|
||||
LoanTermVariationType.EXTEND_REPAYMENT_PERIOD.getCode(), "extendRepaymentPeriod");
|
||||
case INTEREST_RATE_FROM_INSTALLMENT -> new EnumOptionData(
|
||||
LoanTermVariationType.INTEREST_RATE_FROM_INSTALLMENT.getValue().longValue(),
|
||||
LoanTermVariationType.INTEREST_RATE_FROM_INSTALLMENT.getCode(), "interestRateForInstallment");
|
||||
default -> new EnumOptionData(LoanTermVariationType.INVALID.getValue().longValue(), LoanTermVariationType.INVALID.getCode(),
|
||||
"Invalid");
|
||||
};
|
||||
}
|
||||
|
||||
public static EnumOptionData interestRecalculationCompoundingType(final int id) {
|
||||
@@ -610,26 +397,16 @@ public final class LoanEnumerations {
|
||||
}
|
||||
|
||||
public static EnumOptionData interestRecalculationCompoundingType(final InterestRecalculationCompoundingMethod type) {
|
||||
EnumOptionData optionData = null;
|
||||
switch (type) {
|
||||
case FEE:
|
||||
optionData = new EnumOptionData(InterestRecalculationCompoundingMethod.FEE.getValue().longValue(),
|
||||
InterestRecalculationCompoundingMethod.FEE.getCode(), "Fee");
|
||||
break;
|
||||
case INTEREST:
|
||||
optionData = new EnumOptionData(InterestRecalculationCompoundingMethod.INTEREST.getValue().longValue(),
|
||||
InterestRecalculationCompoundingMethod.INTEREST.getCode(), "Interest");
|
||||
break;
|
||||
case INTEREST_AND_FEE:
|
||||
optionData = new EnumOptionData(InterestRecalculationCompoundingMethod.INTEREST_AND_FEE.getValue().longValue(),
|
||||
InterestRecalculationCompoundingMethod.INTEREST_AND_FEE.getCode(), "Fee and Interest");
|
||||
break;
|
||||
default:
|
||||
optionData = new EnumOptionData(InterestRecalculationCompoundingMethod.NONE.getValue().longValue(),
|
||||
InterestRecalculationCompoundingMethod.NONE.getCode(), "None");
|
||||
break;
|
||||
}
|
||||
return optionData;
|
||||
return switch (type) {
|
||||
case FEE -> new EnumOptionData(InterestRecalculationCompoundingMethod.FEE.getValue().longValue(),
|
||||
InterestRecalculationCompoundingMethod.FEE.getCode(), "Fee");
|
||||
case INTEREST -> new EnumOptionData(InterestRecalculationCompoundingMethod.INTEREST.getValue().longValue(),
|
||||
InterestRecalculationCompoundingMethod.INTEREST.getCode(), "Interest");
|
||||
case INTEREST_AND_FEE -> new EnumOptionData(InterestRecalculationCompoundingMethod.INTEREST_AND_FEE.getValue().longValue(),
|
||||
InterestRecalculationCompoundingMethod.INTEREST_AND_FEE.getCode(), "Fee and Interest");
|
||||
default -> new EnumOptionData(InterestRecalculationCompoundingMethod.NONE.getValue().longValue(),
|
||||
InterestRecalculationCompoundingMethod.NONE.getCode(), "None");
|
||||
};
|
||||
}
|
||||
|
||||
public static EnumOptionData interestRecalculationCompoundingNthDayType(final Integer id) {
|
||||
@@ -642,31 +419,15 @@ public final class LoanEnumerations {
|
||||
public static EnumOptionData interestRecalculationCompoundingNthDayType(final NthDayType type) {
|
||||
final String codePrefix = "interestRecalculationCompounding.";
|
||||
long nthDayValue = type.getValue().longValue();
|
||||
EnumOptionData optionData = null;
|
||||
switch (type) {
|
||||
case ONE:
|
||||
optionData = new EnumOptionData(nthDayValue, codePrefix + type.getCode(), "first");
|
||||
break;
|
||||
case TWO:
|
||||
optionData = new EnumOptionData(nthDayValue, codePrefix + type.getCode(), "second");
|
||||
break;
|
||||
case THREE:
|
||||
optionData = new EnumOptionData(nthDayValue, codePrefix + type.getCode(), "third");
|
||||
break;
|
||||
case FOUR:
|
||||
optionData = new EnumOptionData(nthDayValue, codePrefix + type.getCode(), "fourth");
|
||||
break;
|
||||
case FIVE:
|
||||
optionData = new EnumOptionData(nthDayValue, codePrefix + type.getCode(), "fifth");
|
||||
break;
|
||||
case LAST:
|
||||
optionData = new EnumOptionData(nthDayValue, codePrefix + type.getCode(), "last");
|
||||
break;
|
||||
default:
|
||||
optionData = new EnumOptionData(Integer.valueOf(0).longValue(), codePrefix + type.getCode(), "invalid");
|
||||
break;
|
||||
}
|
||||
return optionData;
|
||||
return switch (type) {
|
||||
case ONE -> new EnumOptionData(nthDayValue, codePrefix + type.getCode(), "first");
|
||||
case TWO -> new EnumOptionData(nthDayValue, codePrefix + type.getCode(), "second");
|
||||
case THREE -> new EnumOptionData(nthDayValue, codePrefix + type.getCode(), "third");
|
||||
case FOUR -> new EnumOptionData(nthDayValue, codePrefix + type.getCode(), "fourth");
|
||||
case FIVE -> new EnumOptionData(nthDayValue, codePrefix + type.getCode(), "fifth");
|
||||
case LAST -> new EnumOptionData(nthDayValue, codePrefix + type.getCode(), "last");
|
||||
default -> new EnumOptionData(Integer.valueOf(0).longValue(), codePrefix + type.getCode(), "invalid");
|
||||
};
|
||||
}
|
||||
|
||||
public static EnumOptionData interestRecalculationCompoundingDayOfWeekType(final Integer id) {
|
||||
@@ -678,8 +439,7 @@ public final class LoanEnumerations {
|
||||
|
||||
public static EnumOptionData interestRecalculationCompoundingDayOfWeekType(final DayOfWeekType type) {
|
||||
final String codePrefix = "interestRecalculationCompounding.";
|
||||
EnumOptionData optionData = new EnumOptionData(type.getValue().longValue(), codePrefix + type.getCode(), type.toString());
|
||||
return optionData;
|
||||
return new EnumOptionData(type.getValue().longValue(), codePrefix + type.getCode(), type.toString());
|
||||
}
|
||||
|
||||
public static EnumOptionData rescheduleStrategyType(final int id) {
|
||||
@@ -687,26 +447,18 @@ public final class LoanEnumerations {
|
||||
}
|
||||
|
||||
public static EnumOptionData rescheduleStrategyType(final LoanRescheduleStrategyMethod type) {
|
||||
EnumOptionData optionData = null;
|
||||
switch (type) {
|
||||
case REDUCE_EMI_AMOUNT:
|
||||
optionData = new EnumOptionData(LoanRescheduleStrategyMethod.REDUCE_EMI_AMOUNT.getValue().longValue(),
|
||||
LoanRescheduleStrategyMethod.REDUCE_EMI_AMOUNT.getCode(), "Reduce EMI amount");
|
||||
break;
|
||||
case REDUCE_NUMBER_OF_INSTALLMENTS:
|
||||
optionData = new EnumOptionData(LoanRescheduleStrategyMethod.REDUCE_NUMBER_OF_INSTALLMENTS.getValue().longValue(),
|
||||
LoanRescheduleStrategyMethod.REDUCE_NUMBER_OF_INSTALLMENTS.getCode(), "Reduce number of installments");
|
||||
break;
|
||||
case RESCHEDULE_NEXT_REPAYMENTS:
|
||||
optionData = new EnumOptionData(LoanRescheduleStrategyMethod.RESCHEDULE_NEXT_REPAYMENTS.getValue().longValue(),
|
||||
LoanRescheduleStrategyMethod.RESCHEDULE_NEXT_REPAYMENTS.getCode(), "Reschedule next repayments");
|
||||
break;
|
||||
default:
|
||||
optionData = new EnumOptionData(LoanRescheduleStrategyMethod.INVALID.getValue().longValue(),
|
||||
LoanRescheduleStrategyMethod.INVALID.getCode(), "Invalid");
|
||||
break;
|
||||
}
|
||||
return optionData;
|
||||
return switch (type) {
|
||||
case REDUCE_EMI_AMOUNT -> new EnumOptionData(LoanRescheduleStrategyMethod.REDUCE_EMI_AMOUNT.getValue().longValue(),
|
||||
LoanRescheduleStrategyMethod.REDUCE_EMI_AMOUNT.getCode(), "Reduce EMI amount");
|
||||
case REDUCE_NUMBER_OF_INSTALLMENTS -> new EnumOptionData(
|
||||
LoanRescheduleStrategyMethod.REDUCE_NUMBER_OF_INSTALLMENTS.getValue().longValue(),
|
||||
LoanRescheduleStrategyMethod.REDUCE_NUMBER_OF_INSTALLMENTS.getCode(), "Reduce number of installments");
|
||||
case RESCHEDULE_NEXT_REPAYMENTS -> new EnumOptionData(
|
||||
LoanRescheduleStrategyMethod.RESCHEDULE_NEXT_REPAYMENTS.getValue().longValue(),
|
||||
LoanRescheduleStrategyMethod.RESCHEDULE_NEXT_REPAYMENTS.getCode(), "Reschedule next repayments");
|
||||
default -> new EnumOptionData(LoanRescheduleStrategyMethod.INVALID.getValue().longValue(),
|
||||
LoanRescheduleStrategyMethod.INVALID.getCode(), "Invalid");
|
||||
};
|
||||
}
|
||||
|
||||
public static EnumOptionData interestRecalculationFrequencyType(final int id) {
|
||||
@@ -714,31 +466,18 @@ public final class LoanEnumerations {
|
||||
}
|
||||
|
||||
public static EnumOptionData interestRecalculationFrequencyType(final RecalculationFrequencyType type) {
|
||||
EnumOptionData optionData = null;
|
||||
switch (type) {
|
||||
case DAILY:
|
||||
optionData = new EnumOptionData(RecalculationFrequencyType.DAILY.getValue().longValue(),
|
||||
RecalculationFrequencyType.DAILY.getCode(), "Daily");
|
||||
break;
|
||||
case MONTHLY:
|
||||
optionData = new EnumOptionData(RecalculationFrequencyType.MONTHLY.getValue().longValue(),
|
||||
RecalculationFrequencyType.MONTHLY.getCode(), "Monthly");
|
||||
break;
|
||||
case SAME_AS_REPAYMENT_PERIOD:
|
||||
optionData = new EnumOptionData(RecalculationFrequencyType.SAME_AS_REPAYMENT_PERIOD.getValue().longValue(),
|
||||
RecalculationFrequencyType.SAME_AS_REPAYMENT_PERIOD.getCode(), "Same as repayment period");
|
||||
break;
|
||||
case WEEKLY:
|
||||
optionData = new EnumOptionData(RecalculationFrequencyType.WEEKLY.getValue().longValue(),
|
||||
RecalculationFrequencyType.WEEKLY.getCode(), "Weekly");
|
||||
break;
|
||||
default:
|
||||
optionData = new EnumOptionData(RecalculationFrequencyType.INVALID.getValue().longValue(),
|
||||
RecalculationFrequencyType.INVALID.getCode(), "Invalid");
|
||||
break;
|
||||
|
||||
}
|
||||
return optionData;
|
||||
return switch (type) {
|
||||
case DAILY -> new EnumOptionData(RecalculationFrequencyType.DAILY.getValue().longValue(),
|
||||
RecalculationFrequencyType.DAILY.getCode(), "Daily");
|
||||
case MONTHLY -> new EnumOptionData(RecalculationFrequencyType.MONTHLY.getValue().longValue(),
|
||||
RecalculationFrequencyType.MONTHLY.getCode(), "Monthly");
|
||||
case SAME_AS_REPAYMENT_PERIOD -> new EnumOptionData(RecalculationFrequencyType.SAME_AS_REPAYMENT_PERIOD.getValue().longValue(),
|
||||
RecalculationFrequencyType.SAME_AS_REPAYMENT_PERIOD.getCode(), "Same as repayment period");
|
||||
case WEEKLY -> new EnumOptionData(RecalculationFrequencyType.WEEKLY.getValue().longValue(),
|
||||
RecalculationFrequencyType.WEEKLY.getCode(), "Weekly");
|
||||
default -> new EnumOptionData(RecalculationFrequencyType.INVALID.getValue().longValue(),
|
||||
RecalculationFrequencyType.INVALID.getCode(), "Invalid");
|
||||
};
|
||||
}
|
||||
|
||||
public static EnumOptionData preCloseInterestCalculationStrategy(final int id) {
|
||||
@@ -750,11 +489,11 @@ public final class LoanEnumerations {
|
||||
switch (type) {
|
||||
case TILL_PRE_CLOSURE_DATE:
|
||||
optionData = new EnumOptionData(LoanPreClosureInterestCalculationStrategy.TILL_PRE_CLOSURE_DATE.getValue().longValue(),
|
||||
LoanPreClosureInterestCalculationStrategy.TILL_PRE_CLOSURE_DATE.getCode(), "Till preclose Date");
|
||||
LoanPreClosureInterestCalculationStrategy.TILL_PRE_CLOSURE_DATE.getCode(), "Till Pre-Close Date");
|
||||
break;
|
||||
case TILL_REST_FREQUENCY_DATE:
|
||||
optionData = new EnumOptionData(LoanPreClosureInterestCalculationStrategy.TILL_REST_FREQUENCY_DATE.getValue().longValue(),
|
||||
LoanPreClosureInterestCalculationStrategy.TILL_REST_FREQUENCY_DATE.getCode(), "Till rest Frequency Date");
|
||||
LoanPreClosureInterestCalculationStrategy.TILL_REST_FREQUENCY_DATE.getCode(), "Till Rest Frequency Date");
|
||||
break;
|
||||
case NONE:
|
||||
break;
|
||||
|
||||
+11
-11
@@ -47,6 +47,7 @@ import org.apache.fineract.portfolio.loanproduct.domain.LoanProductParamType;
|
||||
import org.apache.fineract.portfolio.loanproduct.exception.LoanProductNotFoundException;
|
||||
import org.apache.fineract.portfolio.rate.data.RateData;
|
||||
import org.apache.fineract.portfolio.rate.service.RateReadService;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.dao.EmptyResultDataAccessException;
|
||||
import org.springframework.jdbc.core.JdbcTemplate;
|
||||
@@ -91,7 +92,7 @@ public class LoanProductReadPlatformServiceImpl implements LoanProductReadPlatfo
|
||||
final LoanProductMapper rm = new LoanProductMapper(charges, borrowerCycleVariationDatas, rates, delinquencyBucketOptions);
|
||||
final String sql = "select " + rm.loanProductSchema() + " where lp.id = ?";
|
||||
|
||||
return this.jdbcTemplate.queryForObject(sql, rm, new Object[] { loanProductId }); // NOSONAR
|
||||
return this.jdbcTemplate.queryForObject(sql, rm, loanProductId); // NOSONAR
|
||||
|
||||
} catch (final EmptyResultDataAccessException e) {
|
||||
throw new LoanProductNotFoundException(loanProductId, e);
|
||||
@@ -102,7 +103,7 @@ public class LoanProductReadPlatformServiceImpl implements LoanProductReadPlatfo
|
||||
public Collection<LoanProductBorrowerCycleVariationData> retrieveLoanProductBorrowerCycleVariations(final Long loanProductId) {
|
||||
final LoanProductBorrowerCycleMapper rm = new LoanProductBorrowerCycleMapper();
|
||||
final String sql = "select " + rm.schema() + " where bc.loan_product_id=? order by bc.borrower_cycle_number,bc.value_condition";
|
||||
return this.jdbcTemplate.query(sql, rm, new Object[] { loanProductId }); // NOSONAR
|
||||
return this.jdbcTemplate.query(sql, rm, loanProductId); // NOSONAR
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -261,7 +262,7 @@ public class LoanProductReadPlatformServiceImpl implements LoanProductReadPlatfo
|
||||
}
|
||||
|
||||
@Override
|
||||
public LoanProductData mapRow(final ResultSet rs, @SuppressWarnings("unused") final int rowNum) throws SQLException {
|
||||
public LoanProductData mapRow(@NotNull final ResultSet rs, @SuppressWarnings("unused") final int rowNum) throws SQLException {
|
||||
|
||||
final Long id = JdbcSupport.getLong(rs, "id");
|
||||
final String name = rs.getString("name");
|
||||
@@ -564,9 +565,8 @@ public class LoanProductReadPlatformServiceImpl implements LoanProductReadPlatfo
|
||||
final BigDecimal maxValue = rs.getBigDecimal("maxVal");
|
||||
final BigDecimal minValue = rs.getBigDecimal("minVal");
|
||||
|
||||
final LoanProductBorrowerCycleVariationData borrowerCycleVariationData = new LoanProductBorrowerCycleVariationData(id,
|
||||
cycleNumber, paramTypeData, conditionTypeData, defaultValue, minValue, maxValue);
|
||||
return borrowerCycleVariationData;
|
||||
return new LoanProductBorrowerCycleVariationData(id, cycleNumber, paramTypeData, conditionTypeData, defaultValue, minValue,
|
||||
maxValue);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -587,7 +587,7 @@ public class LoanProductReadPlatformServiceImpl implements LoanProductReadPlatfo
|
||||
sql += " and id in (" + inClause + ") ";
|
||||
}
|
||||
|
||||
return this.jdbcTemplate.query(sql, rm, new Object[] { currencyCode }); // NOSONAR
|
||||
return this.jdbcTemplate.query(sql, rm, currencyCode); // NOSONAR
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -636,7 +636,7 @@ public class LoanProductReadPlatformServiceImpl implements LoanProductReadPlatfo
|
||||
sql += " and lp.id in ( " + inClause2 + " ) ";
|
||||
}
|
||||
|
||||
return this.jdbcTemplate.query(sql, rm, new Object[] { productId, productId }); // NOSONAR
|
||||
return this.jdbcTemplate.query(sql, rm, productId, productId); // NOSONAR
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -659,7 +659,7 @@ public class LoanProductReadPlatformServiceImpl implements LoanProductReadPlatfo
|
||||
sql += "lp.id not in (" + "Select pm.restricted_product_id from m_product_mix pm where pm.product_id=? " + "UNION "
|
||||
+ "Select pm.product_id from m_product_mix pm where pm.restricted_product_id=?)";
|
||||
|
||||
return this.jdbcTemplate.query(sql, rm, new Object[] { productId, productId }); // NOSONAR
|
||||
return this.jdbcTemplate.query(sql, rm, productId, productId); // NOSONAR
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -669,7 +669,7 @@ public class LoanProductReadPlatformServiceImpl implements LoanProductReadPlatfo
|
||||
final LoanProductFloatingRateMapper rm = new LoanProductFloatingRateMapper();
|
||||
final String sql = "select " + rm.schema() + " where lp.id = ?";
|
||||
|
||||
return this.jdbcTemplate.queryForObject(sql, rm, new Object[] { loanProductId }); // NOSONAR
|
||||
return this.jdbcTemplate.queryForObject(sql, rm, loanProductId); // NOSONAR
|
||||
|
||||
} catch (final EmptyResultDataAccessException e) {
|
||||
throw new LoanProductNotFoundException(loanProductId, e);
|
||||
@@ -693,7 +693,7 @@ public class LoanProductReadPlatformServiceImpl implements LoanProductReadPlatfo
|
||||
}
|
||||
|
||||
@Override
|
||||
public LoanProductData mapRow(final ResultSet rs, @SuppressWarnings("unused") final int rowNum) throws SQLException {
|
||||
public LoanProductData mapRow(@NotNull final ResultSet rs, @SuppressWarnings("unused") final int rowNum) throws SQLException {
|
||||
|
||||
final Long id = JdbcSupport.getLong(rs, "id");
|
||||
final String name = rs.getString("name");
|
||||
|
||||
+2
-2
@@ -274,7 +274,7 @@ public class LoanProductWritePlatformServiceJpaRepositoryImpl implements LoanPro
|
||||
|
||||
} catch (final DataIntegrityViolationException | JpaSystemException dve) {
|
||||
handleDataIntegrityIssues(command, dve.getMostSpecificCause(), dve);
|
||||
return new CommandProcessingResult(Long.valueOf(-1));
|
||||
return new CommandProcessingResult((long) -1);
|
||||
} catch (final PersistenceException dve) {
|
||||
Throwable throwable = ExceptionUtils.getRootCause(dve.getCause());
|
||||
handleDataIntegrityIssues(command, throwable, dve);
|
||||
@@ -390,6 +390,6 @@ public class LoanProductWritePlatformServiceJpaRepositoryImpl implements LoanPro
|
||||
}
|
||||
|
||||
private void logAsErrorUnexpectedDataIntegrityException(final Exception dve) {
|
||||
LOG.error("Error occured.", dve);
|
||||
LOG.error("Error occurred.", dve);
|
||||
}
|
||||
}
|
||||
|
||||
+1
-1
@@ -72,7 +72,7 @@ public class LoanProductValidationStepDefinitions implements En {
|
||||
|
||||
private LoanProduct newLoanProduct(boolean allowMultipleDisbursals) {
|
||||
LoanProduct lp = new LoanProduct();
|
||||
lp.setLoanProducTrancheDetails(new LoanProductTrancheDetails(allowMultipleDisbursals, null, null));
|
||||
lp.setLoanProductTrancheDetails(new LoanProductTrancheDetails(allowMultipleDisbursals, null, null));
|
||||
return lp;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user