FINERTACT-1724: Advanced payment allocation fixes for Loan Schedule
This commit is contained in:
committed by
Adam Saghy
parent
834cfb6e27
commit
aff009c400
+1
-5
@@ -41,7 +41,6 @@ import org.apache.fineract.infrastructure.core.data.DataValidatorBuilder;
|
||||
import org.apache.fineract.infrastructure.core.exception.PlatformApiDataValidationException;
|
||||
import org.apache.fineract.infrastructure.core.serialization.FromJsonHelper;
|
||||
import org.apache.fineract.infrastructure.core.service.DateUtils;
|
||||
import org.apache.fineract.infrastructure.security.service.PlatformSecurityContext;
|
||||
import org.apache.fineract.organisation.holiday.domain.Holiday;
|
||||
import org.apache.fineract.organisation.holiday.domain.HolidayRepository;
|
||||
import org.apache.fineract.organisation.holiday.domain.HolidayStatusType;
|
||||
@@ -137,7 +136,6 @@ public class LoanScheduleAssembler {
|
||||
private final FloatingRatesReadPlatformService floatingRatesReadPlatformService;
|
||||
private final VariableLoanScheduleFromApiJsonValidator variableLoanScheduleFromApiJsonValidator;
|
||||
private final CalendarInstanceRepository calendarInstanceRepository;
|
||||
private final PlatformSecurityContext context;
|
||||
private final LoanUtilService loanUtilService;
|
||||
|
||||
@Autowired
|
||||
@@ -150,8 +148,7 @@ public class LoanScheduleAssembler {
|
||||
final WorkingDaysRepositoryWrapper workingDaysRepository,
|
||||
final FloatingRatesReadPlatformService floatingRatesReadPlatformService,
|
||||
final VariableLoanScheduleFromApiJsonValidator variableLoanScheduleFromApiJsonValidator,
|
||||
final CalendarInstanceRepository calendarInstanceRepository, final PlatformSecurityContext context,
|
||||
final LoanUtilService loanUtilService) {
|
||||
final CalendarInstanceRepository calendarInstanceRepository, final LoanUtilService loanUtilService) {
|
||||
this.fromApiJsonHelper = fromApiJsonHelper;
|
||||
this.loanProductRepository = loanProductRepository;
|
||||
this.applicationCurrencyRepository = applicationCurrencyRepository;
|
||||
@@ -167,7 +164,6 @@ public class LoanScheduleAssembler {
|
||||
this.floatingRatesReadPlatformService = floatingRatesReadPlatformService;
|
||||
this.variableLoanScheduleFromApiJsonValidator = variableLoanScheduleFromApiJsonValidator;
|
||||
this.calendarInstanceRepository = calendarInstanceRepository;
|
||||
this.context = context;
|
||||
this.loanUtilService = loanUtilService;
|
||||
}
|
||||
|
||||
|
||||
+27
-7
@@ -781,16 +781,27 @@ public final class LoanProductDataValidator {
|
||||
.value(enableInstallmentLevelDelinquency).ignoreIfNull().validateForBooleanValue();
|
||||
}
|
||||
|
||||
final String loanScheduleType = this.fromApiJsonHelper.extractStringNamed(LoanProductConstants.LOAN_SCHEDULE_TYPE, element);
|
||||
baseDataValidator.reset().parameter(LoanProductConstants.LOAN_SCHEDULE_TYPE).value(loanScheduleType).ignoreIfNull()
|
||||
.isOneOfEnumValues(LoanScheduleType.class);
|
||||
String loanScheduleType = LoanScheduleType.CUMULATIVE.name();
|
||||
if (this.fromApiJsonHelper.parameterExists(LoanProductConstants.LOAN_SCHEDULE_TYPE, element)) {
|
||||
loanScheduleType = this.fromApiJsonHelper.extractStringNamed(LoanProductConstants.LOAN_SCHEDULE_TYPE, element);
|
||||
baseDataValidator.reset().parameter(LoanProductConstants.LOAN_SCHEDULE_TYPE).value(loanScheduleType)
|
||||
.isOneOfEnumValues(LoanScheduleType.class);
|
||||
}
|
||||
|
||||
if (!LoanScheduleType.PROGRESSIVE.equals(LoanScheduleType.valueOf(loanScheduleType))
|
||||
&& AdvancedPaymentScheduleTransactionProcessor.ADVANCED_PAYMENT_ALLOCATION_STRATEGY
|
||||
.equals(transactionProcessingStrategyCode)) {
|
||||
baseDataValidator.reset().parameter(LoanProductConstants.LOAN_SCHEDULE_PROCESSING_TYPE).failWithCode(
|
||||
"supported.only.for.progressive.loan.schedule.type",
|
||||
"Progressive repayment schedule processing is only available with `Advanced payment allocation` strategy");
|
||||
}
|
||||
|
||||
String loanScheduleProcessingType = LoanScheduleProcessingType.HORIZONTAL.name();
|
||||
if (this.fromApiJsonHelper.parameterExists(LoanProductConstants.LOAN_SCHEDULE_PROCESSING_TYPE, element)) {
|
||||
loanScheduleProcessingType = this.fromApiJsonHelper.extractStringNamed(LoanProductConstants.LOAN_SCHEDULE_PROCESSING_TYPE,
|
||||
element);
|
||||
baseDataValidator.reset().parameter(LoanProductConstants.LOAN_SCHEDULE_PROCESSING_TYPE).value(loanScheduleProcessingType)
|
||||
.ignoreIfNull().isOneOfEnumValues(LoanScheduleProcessingType.class);
|
||||
.isOneOfEnumValues(LoanScheduleProcessingType.class);
|
||||
|
||||
if (LoanScheduleProcessingType.VERTICAL.equals(LoanScheduleProcessingType.valueOf(loanScheduleProcessingType))
|
||||
&& !AdvancedPaymentScheduleTransactionProcessor.ADVANCED_PAYMENT_ALLOCATION_STRATEGY
|
||||
@@ -1784,10 +1795,19 @@ public final class LoanProductDataValidator {
|
||||
.value(enableInstallmentLevelDelinquency).ignoreIfNull().validateForBooleanValue();
|
||||
}
|
||||
|
||||
String loanScheduleType = loanProduct.getLoanProductRelatedDetail().getLoanScheduleType().name();
|
||||
if (this.fromApiJsonHelper.parameterExists(LoanProductConstants.LOAN_SCHEDULE_TYPE, element)) {
|
||||
final String loanScheduleType = this.fromApiJsonHelper.extractStringNamed(LoanProductConstants.LOAN_SCHEDULE_TYPE, element);
|
||||
baseDataValidator.reset().parameter(LoanProductConstants.LOAN_SCHEDULE_TYPE).value(loanScheduleType).ignoreIfNull()
|
||||
loanScheduleType = this.fromApiJsonHelper.extractStringNamed(LoanProductConstants.LOAN_SCHEDULE_TYPE, element);
|
||||
baseDataValidator.reset().parameter(LoanProductConstants.LOAN_SCHEDULE_TYPE).value(loanScheduleType)
|
||||
.isOneOfEnumValues(LoanScheduleType.class);
|
||||
|
||||
if (!LoanScheduleType.PROGRESSIVE.equals(LoanScheduleType.valueOf(loanScheduleType))
|
||||
&& AdvancedPaymentScheduleTransactionProcessor.ADVANCED_PAYMENT_ALLOCATION_STRATEGY
|
||||
.equals(transactionProcessingStrategyCode)) {
|
||||
baseDataValidator.reset().parameter(LoanProductConstants.LOAN_SCHEDULE_PROCESSING_TYPE).failWithCode(
|
||||
"supported.only.for.progressive.loan.schedule.type",
|
||||
"Progressive repayment schedule processing is only available with `Advanced payment allocation` strategy");
|
||||
}
|
||||
}
|
||||
|
||||
String loanScheduleProcessingType = loanProduct.getLoanProductRelatedDetail().getLoanScheduleProcessingType().name();
|
||||
@@ -1795,7 +1815,7 @@ public final class LoanProductDataValidator {
|
||||
loanScheduleProcessingType = this.fromApiJsonHelper.extractStringNamed(LoanProductConstants.LOAN_SCHEDULE_PROCESSING_TYPE,
|
||||
element);
|
||||
baseDataValidator.reset().parameter(LoanProductConstants.LOAN_SCHEDULE_PROCESSING_TYPE).value(loanScheduleProcessingType)
|
||||
.ignoreIfNull().isOneOfEnumValues(LoanScheduleProcessingType.class);
|
||||
.isOneOfEnumValues(LoanScheduleProcessingType.class);
|
||||
}
|
||||
|
||||
List<LoanProductPaymentAllocationRule> allocationRules = loanProduct.getPaymentAllocationRules();
|
||||
|
||||
Reference in New Issue
Block a user