diff --git a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/floatingrates/domain/FloatingRateRepository.java b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/floatingrates/domain/FloatingRateRepository.java index 476e4dec5..b773288dd 100644 --- a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/floatingrates/domain/FloatingRateRepository.java +++ b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/floatingrates/domain/FloatingRateRepository.java @@ -5,6 +5,8 @@ */ package org.mifosplatform.portfolio.floatingrates.domain; +import java.util.Collection; + import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.JpaSpecificationExecutor; import org.springframework.data.jpa.repository.Query; @@ -15,5 +17,12 @@ public interface FloatingRateRepository extends @Query("from FloatingRate floatingRate where floatingRate.isBaseLendingRate = 1 and floatingRate.isActive = 1") FloatingRate retrieveBaseLendingRate(); + + @Query("from FloatingRate floatingRate " + + " inner join floatingRate.floatingRatePeriods as periods" + + " where floatingRate.isActive = 1 " + + " and periods.isActive = 1 " + + " and periods.isDifferentialToBaseLendingRate = 1") + Collection retrieveFloatingRatesLinkedToBLR(); } diff --git a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/floatingrates/serialization/FloatingRateDataValidator.java b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/floatingrates/serialization/FloatingRateDataValidator.java index 6e74d1f23..c09e3bd30 100644 --- a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/floatingrates/serialization/FloatingRateDataValidator.java +++ b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/floatingrates/serialization/FloatingRateDataValidator.java @@ -9,6 +9,7 @@ import java.lang.reflect.Type; import java.math.BigDecimal; import java.util.ArrayList; import java.util.Arrays; +import java.util.Collection; import java.util.HashSet; import java.util.List; import java.util.Map; @@ -66,9 +67,10 @@ public class FloatingRateDataValidator { baseDataValidator.reset().parameter("name").value(name).notBlank() .notExceedingLengthOf(200); + Boolean isBaseLendingRate = null; if (this.fromApiJsonHelper .parameterExists("isBaseLendingRate", element)) { - final Boolean isBaseLendingRate = this.fromApiJsonHelper + isBaseLendingRate = this.fromApiJsonHelper .extractBooleanNamed("isBaseLendingRate", element); baseDataValidator.reset().parameter("isBaseLendingRate") @@ -99,13 +101,16 @@ public class FloatingRateDataValidator { } } - validateRatePeriods(baseDataValidator, element); + if(isBaseLendingRate == null){ + isBaseLendingRate = false; + } + validateRatePeriods(baseDataValidator, element, isBaseLendingRate, false); throwExceptionIfValidationWarningsExist(dataValidationErrors); } private void validateRatePeriods(DataValidatorBuilder baseDataValidator, - JsonElement element) { + JsonElement element, boolean isBaseLendingRate, boolean isBLRModifiedAsNonBLR) { if (this.fromApiJsonHelper.parameterExists("ratePeriods", element)) { final JsonArray ratePeriods = this.fromApiJsonHelper .extractJsonArrayNamed("ratePeriods", element); @@ -161,7 +166,7 @@ public class FloatingRateDataValidator { } else if (isDifferentialToBaseLendingRate) { FloatingRate baseLendingRate = this.floatingRateRepository .retrieveBaseLendingRate(); - if (baseLendingRate == null) { + if (baseLendingRate == null || isBLRModifiedAsNonBLR) { baseDataValidator .reset() .parameter( @@ -174,6 +179,20 @@ public class FloatingRateDataValidator { "no.baselending.rate.defined", "Base Lending Rate doesn't exists"); } + + if(isBaseLendingRate){ + baseDataValidator + .reset() + .parameter( + "isDifferentialToBaseLendingRate") + .parameterAtIndexArray( + "isDifferentialToBaseLendingRate", + i + 1) + .value(isDifferentialToBaseLendingRate) + .failWithCode( + "cannot.be.true.for.baselendingrate", + "isDifferentialToBaseLendingRate cannot be true for floating rate marked as Base Lending Rate."); + } } } @@ -211,9 +230,13 @@ public class FloatingRateDataValidator { .notExceedingLengthOf(200); } + Boolean isBaseLendingRate = null; + Boolean isBLRModifiedAsNonBLR = false; + FloatingRate baseLendingRate = this.floatingRateRepository + .retrieveBaseLendingRate(); if (this.fromApiJsonHelper .parameterExists("isBaseLendingRate", element)) { - final Boolean isBaseLendingRate = this.fromApiJsonHelper + isBaseLendingRate = this.fromApiJsonHelper .extractBooleanNamed("isBaseLendingRate", element); baseDataValidator.reset().parameter("isBaseLendingRate") @@ -222,8 +245,6 @@ public class FloatingRateDataValidator { baseDataValidator.reset().parameter("isBaseLendingRate") .trueOrFalseRequired(false); } else if (isBaseLendingRate) { - FloatingRate baseLendingRate = this.floatingRateRepository - .retrieveBaseLendingRate(); if (baseLendingRate != null && baseLendingRate.getId() != floatingRateForUpdate .getId()) { @@ -237,8 +258,9 @@ public class FloatingRateDataValidator { } } + Boolean isActive = null; if (this.fromApiJsonHelper.parameterExists("isActive", element)) { - final Boolean isActive = this.fromApiJsonHelper + isActive = this.fromApiJsonHelper .extractBooleanNamed("isActive", element); if (isActive == null) { baseDataValidator.reset().parameter("isActive") @@ -246,7 +268,36 @@ public class FloatingRateDataValidator { } } - validateRatePeriods(baseDataValidator, element); + if(isBaseLendingRate == null){ + isBaseLendingRate = floatingRateForUpdate.isBaseLendingRate(); + } + + if(isActive == null){ + isActive = floatingRateForUpdate.isActive(); + } + + if(baseLendingRate != null + && baseLendingRate.getId() == floatingRateForUpdate + .getId()){ + if(!isBaseLendingRate || !isActive){ + isBLRModifiedAsNonBLR = true; + } + } + + if(isBLRModifiedAsNonBLR){ + Collection floatingRates = this.floatingRateRepository.retrieveFloatingRatesLinkedToBLR(); + if(floatingRates != null && floatingRates.size() > 0){ + baseDataValidator + .reset() + .parameter("isBaseLendingRate") + .value(isBaseLendingRate) + .failWithCode("cannot.be.marked.non.baselendingrate", + "There are floating rates linked to this Base Lending Rate, cannot be marked as non-Base Lending Rate."); + } + } + + + validateRatePeriods(baseDataValidator, element, isBaseLendingRate, isBLRModifiedAsNonBLR); throwExceptionIfValidationWarningsExist(dataValidationErrors); } diff --git a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/loanaccount/domain/LoanAccountDomainServiceJpa.java b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/loanaccount/domain/LoanAccountDomainServiceJpa.java index def77af74..5e84d4869 100755 --- a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/loanaccount/domain/LoanAccountDomainServiceJpa.java +++ b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/loanaccount/domain/LoanAccountDomainServiceJpa.java @@ -51,6 +51,7 @@ import org.mifosplatform.portfolio.common.domain.PeriodFrequencyType; import org.mifosplatform.portfolio.common.service.BusinessEventNotifierService; import org.mifosplatform.portfolio.floatingrates.data.FloatingRateDTO; import org.mifosplatform.portfolio.floatingrates.data.FloatingRatePeriodData; +import org.mifosplatform.portfolio.floatingrates.exception.FloatingRateNotFoundException; import org.mifosplatform.portfolio.floatingrates.service.FloatingRatesReadPlatformService; import org.mifosplatform.portfolio.group.domain.Group; import org.mifosplatform.portfolio.group.exception.GroupNotActiveException; @@ -252,8 +253,14 @@ public class LoanAccountDomainServiceJpa implements LoanAccountDomainService { if (loan.loanProduct().isLinkedToFloatingInterestRate()) { boolean isFloatingInterestRate = loan.getIsFloatingInterestRate(); BigDecimal interestRateDiff = loan.getInterestRateDifferential(); - List baseLendingRatePeriods = this.floatingRatesReadPlatformService.retrieveBaseLendingRate() - .getRatePeriods(); + List baseLendingRatePeriods = null; + try{ + baseLendingRatePeriods = this.floatingRatesReadPlatformService.retrieveBaseLendingRate() + .getRatePeriods(); + }catch(final FloatingRateNotFoundException ex){ + // Do not do anything + } + floatingRateDTO = new FloatingRateDTO(isFloatingInterestRate, loan.getDisbursementDate(), interestRateDiff, baseLendingRatePeriods); } diff --git a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/loanaccount/loanschedule/service/LoanScheduleAssembler.java b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/loanaccount/loanschedule/service/LoanScheduleAssembler.java index 2d6136139..1417af4c8 100644 --- a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/loanaccount/loanschedule/service/LoanScheduleAssembler.java +++ b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/loanaccount/loanschedule/service/LoanScheduleAssembler.java @@ -49,6 +49,7 @@ import org.mifosplatform.portfolio.common.domain.DaysInYearType; import org.mifosplatform.portfolio.common.domain.PeriodFrequencyType; import org.mifosplatform.portfolio.floatingrates.data.FloatingRateDTO; import org.mifosplatform.portfolio.floatingrates.data.FloatingRatePeriodData; +import org.mifosplatform.portfolio.floatingrates.exception.FloatingRateNotFoundException; import org.mifosplatform.portfolio.floatingrates.service.FloatingRatesReadPlatformService; import org.mifosplatform.portfolio.group.domain.Group; import org.mifosplatform.portfolio.group.domain.GroupRepositoryWrapper; @@ -312,8 +313,13 @@ public class LoanScheduleAssembler { LoanApiConstants.interestRateDifferentialParameterName, element); final Boolean isFloatingInterestRate = this.fromApiJsonHelper.extractBooleanNamed( LoanApiConstants.isFloatingInterestRateParameterName, element); - List baseLendingRatePeriods = this.floatingRatesReadPlatformService.retrieveBaseLendingRate() - .getRatePeriods(); + List baseLendingRatePeriods = null; + try{ + baseLendingRatePeriods = this.floatingRatesReadPlatformService.retrieveBaseLendingRate() + .getRatePeriods(); + }catch(final FloatingRateNotFoundException ex){ + // Do not do anything + } FloatingRateDTO floatingRateDTO = new FloatingRateDTO(isFloatingInterestRate, expectedDisbursementDate, interestRateDiff, baseLendingRatePeriods); Collection applicableRates = loanProduct.fetchInterestRates(floatingRateDTO); diff --git a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/loanaccount/loanschedule/service/LoanScheduleCalculationPlatformServiceImpl.java b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/loanaccount/loanschedule/service/LoanScheduleCalculationPlatformServiceImpl.java index 7f11bbeb8..d809a2d15 100644 --- a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/loanaccount/loanschedule/service/LoanScheduleCalculationPlatformServiceImpl.java +++ b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/loanaccount/loanschedule/service/LoanScheduleCalculationPlatformServiceImpl.java @@ -28,6 +28,7 @@ import org.mifosplatform.portfolio.calendar.domain.CalendarInstance; import org.mifosplatform.portfolio.calendar.domain.CalendarInstanceRepository; import org.mifosplatform.portfolio.floatingrates.data.FloatingRateDTO; import org.mifosplatform.portfolio.floatingrates.data.FloatingRatePeriodData; +import org.mifosplatform.portfolio.floatingrates.exception.FloatingRateNotFoundException; import org.mifosplatform.portfolio.floatingrates.service.FloatingRatesReadPlatformService; import org.mifosplatform.portfolio.loanaccount.domain.Loan; import org.mifosplatform.portfolio.loanaccount.domain.LoanAccountDomainService; @@ -222,8 +223,13 @@ public class LoanScheduleCalculationPlatformServiceImpl implements LoanScheduleC if (loan.loanProduct().isLinkedToFloatingInterestRate()) { boolean isFloatingInterestRate = loan.getIsFloatingInterestRate(); BigDecimal interestRateDiff = loan.getInterestRateDifferential(); - List baseLendingRatePeriods = this.floatingRatesReadPlatformService.retrieveBaseLendingRate() - .getRatePeriods(); + List baseLendingRatePeriods = null; + try{ + baseLendingRatePeriods = this.floatingRatesReadPlatformService.retrieveBaseLendingRate() + .getRatePeriods(); + }catch(final FloatingRateNotFoundException ex){ + // Do not do anything + } floatingRateDTO = new FloatingRateDTO(isFloatingInterestRate, loan.getDisbursementDate(), interestRateDiff, baseLendingRatePeriods); } diff --git a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/loanaccount/rescheduleloan/service/LoanReschedulePreviewPlatformServiceImpl.java b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/loanaccount/rescheduleloan/service/LoanReschedulePreviewPlatformServiceImpl.java index a41c254ed..940c85db7 100644 --- a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/loanaccount/rescheduleloan/service/LoanReschedulePreviewPlatformServiceImpl.java +++ b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/loanaccount/rescheduleloan/service/LoanReschedulePreviewPlatformServiceImpl.java @@ -26,6 +26,7 @@ import org.mifosplatform.portfolio.calendar.domain.CalendarInstance; import org.mifosplatform.portfolio.calendar.domain.CalendarInstanceRepository; import org.mifosplatform.portfolio.floatingrates.data.FloatingRateDTO; import org.mifosplatform.portfolio.floatingrates.data.FloatingRatePeriodData; +import org.mifosplatform.portfolio.floatingrates.exception.FloatingRateNotFoundException; import org.mifosplatform.portfolio.floatingrates.service.FloatingRatesReadPlatformService; import org.mifosplatform.portfolio.loanaccount.data.HolidayDetailDTO; import org.mifosplatform.portfolio.loanaccount.domain.Loan; @@ -121,8 +122,13 @@ public class LoanReschedulePreviewPlatformServiceImpl implements LoanRescheduleP if (loan.loanProduct().isLinkedToFloatingInterestRate()) { boolean isFloatingInterestRate = loan.getIsFloatingInterestRate(); BigDecimal interestRateDiff = loan.getInterestRateDifferential(); - List baseLendingRatePeriods = this.floatingRatesReadPlatformService.retrieveBaseLendingRate() - .getRatePeriods(); + List baseLendingRatePeriods = null; + try{ + baseLendingRatePeriods = this.floatingRatesReadPlatformService.retrieveBaseLendingRate() + .getRatePeriods(); + }catch(final FloatingRateNotFoundException ex){ + // Do not do anything + } floatingRateDTO = new FloatingRateDTO(isFloatingInterestRate, loan.getDisbursementDate(), interestRateDiff, baseLendingRatePeriods); } diff --git a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/loanaccount/rescheduleloan/service/LoanRescheduleRequestWritePlatformServiceImpl.java b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/loanaccount/rescheduleloan/service/LoanRescheduleRequestWritePlatformServiceImpl.java index b63b88ce5..2301f6bb8 100644 --- a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/loanaccount/rescheduleloan/service/LoanRescheduleRequestWritePlatformServiceImpl.java +++ b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/loanaccount/rescheduleloan/service/LoanRescheduleRequestWritePlatformServiceImpl.java @@ -38,6 +38,7 @@ import org.mifosplatform.portfolio.calendar.domain.CalendarInstance; import org.mifosplatform.portfolio.calendar.domain.CalendarInstanceRepository; import org.mifosplatform.portfolio.floatingrates.data.FloatingRateDTO; import org.mifosplatform.portfolio.floatingrates.data.FloatingRatePeriodData; +import org.mifosplatform.portfolio.floatingrates.exception.FloatingRateNotFoundException; import org.mifosplatform.portfolio.floatingrates.service.FloatingRatesReadPlatformService; import org.mifosplatform.portfolio.loanaccount.data.HolidayDetailDTO; import org.mifosplatform.portfolio.loanaccount.data.LoanChargePaidByData; @@ -581,8 +582,13 @@ public class LoanRescheduleRequestWritePlatformServiceImpl implements LoanResche if (loan.loanProduct().isLinkedToFloatingInterestRate()) { boolean isFloatingInterestRate = loan.getIsFloatingInterestRate(); BigDecimal interestRateDiff = loan.getInterestRateDifferential(); - List baseLendingRatePeriods = this.floatingRatesReadPlatformService.retrieveBaseLendingRate() - .getRatePeriods(); + List baseLendingRatePeriods = null; + try{ + baseLendingRatePeriods = this.floatingRatesReadPlatformService.retrieveBaseLendingRate() + .getRatePeriods(); + }catch(final FloatingRateNotFoundException ex){ + // Do not do anything + } floatingRateDTO = new FloatingRateDTO(isFloatingInterestRate, loan.getDisbursementDate(), interestRateDiff, baseLendingRatePeriods); } diff --git a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/loanaccount/service/LoanReadPlatformServiceImpl.java b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/loanaccount/service/LoanReadPlatformServiceImpl.java index 68def0c3a..8c011c1cf 100755 --- a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/loanaccount/service/LoanReadPlatformServiceImpl.java +++ b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/loanaccount/service/LoanReadPlatformServiceImpl.java @@ -66,6 +66,7 @@ import org.mifosplatform.portfolio.common.service.CommonEnumerations; import org.mifosplatform.portfolio.floatingrates.data.InterestRatePeriodData; import org.mifosplatform.portfolio.floatingrates.data.FloatingRateDTO; import org.mifosplatform.portfolio.floatingrates.data.FloatingRatePeriodData; +import org.mifosplatform.portfolio.floatingrates.exception.FloatingRateNotFoundException; import org.mifosplatform.portfolio.floatingrates.service.FloatingRatesReadPlatformService; import org.mifosplatform.portfolio.fund.data.FundData; import org.mifosplatform.portfolio.fund.service.FundReadPlatformService; @@ -1969,8 +1970,13 @@ public class LoanReadPlatformServiceImpl implements LoanReadPlatformService { if (loan.loanProduct().isLinkedToFloatingInterestRate()) { boolean isFloatingInterestRate = loan.getIsFloatingInterestRate(); BigDecimal interestRateDiff = loan.getInterestRateDifferential(); - List baseLendingRatePeriods = this.floatingRatesReadPlatformService.retrieveBaseLendingRate() - .getRatePeriods(); + List baseLendingRatePeriods = null; + try{ + baseLendingRatePeriods = this.floatingRatesReadPlatformService.retrieveBaseLendingRate() + .getRatePeriods(); + }catch(final FloatingRateNotFoundException ex){ + // Do not do anything + } floatingRateDTO = new FloatingRateDTO(isFloatingInterestRate, loan.getDisbursementDate(), interestRateDiff, baseLendingRatePeriods); } diff --git a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/loanaccount/service/LoanWritePlatformServiceJpaRepositoryImpl.java b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/loanaccount/service/LoanWritePlatformServiceJpaRepositoryImpl.java index 458165dc4..3f8d0d140 100755 --- a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/loanaccount/service/LoanWritePlatformServiceJpaRepositoryImpl.java +++ b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/loanaccount/service/LoanWritePlatformServiceJpaRepositoryImpl.java @@ -99,6 +99,7 @@ import org.mifosplatform.portfolio.common.domain.PeriodFrequencyType; import org.mifosplatform.portfolio.common.service.BusinessEventNotifierService; import org.mifosplatform.portfolio.floatingrates.data.FloatingRateDTO; import org.mifosplatform.portfolio.floatingrates.data.FloatingRatePeriodData; +import org.mifosplatform.portfolio.floatingrates.exception.FloatingRateNotFoundException; import org.mifosplatform.portfolio.floatingrates.service.FloatingRatesReadPlatformService; import org.mifosplatform.portfolio.group.domain.Group; import org.mifosplatform.portfolio.group.exception.GroupNotActiveException; @@ -3053,8 +3054,13 @@ public class LoanWritePlatformServiceJpaRepositoryImpl implements LoanWritePlatf if (loan.loanProduct().isLinkedToFloatingInterestRate()) { boolean isFloatingInterestRate = loan.getIsFloatingInterestRate(); BigDecimal interestRateDiff = loan.getInterestRateDifferential(); - List baseLendingRatePeriods = this.floatingRatesReadPlatformService.retrieveBaseLendingRate() - .getRatePeriods(); + List baseLendingRatePeriods = null; + try{ + baseLendingRatePeriods = this.floatingRatesReadPlatformService.retrieveBaseLendingRate() + .getRatePeriods(); + }catch(final FloatingRateNotFoundException ex){ + // Do not do anything + } floatingRateDTO = new FloatingRateDTO(isFloatingInterestRate, loan.getDisbursementDate(), interestRateDiff, baseLendingRatePeriods); } diff --git a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/loanproduct/serialization/LoanProductDataValidator.java b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/loanproduct/serialization/LoanProductDataValidator.java index 62a23adb4..06a9b8d3d 100755 --- a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/loanproduct/serialization/LoanProductDataValidator.java +++ b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/loanproduct/serialization/LoanProductDataValidator.java @@ -326,31 +326,22 @@ public final class LoanProductDataValidator { baseDataValidator.reset().parameter("interestRateDifferential").value(interestRateDifferential).notNull().zeroOrPositiveAmount(); final String minDifferentialLendingRateParameterName = "minDifferentialLendingRate"; - BigDecimal minDifferentialLendingRate = null; - if (this.fromApiJsonHelper.parameterExists(minDifferentialLendingRateParameterName, element)) { - minDifferentialLendingRate = this.fromApiJsonHelper.extractBigDecimalWithLocaleNamed(minDifferentialLendingRateParameterName, - element); - baseDataValidator.reset().parameter(minDifferentialLendingRateParameterName).value(minDifferentialLendingRate).ignoreIfNull() + BigDecimal minDifferentialLendingRate = this.fromApiJsonHelper.extractBigDecimalWithLocaleNamed(minDifferentialLendingRateParameterName, + element); + baseDataValidator.reset().parameter(minDifferentialLendingRateParameterName).value(minDifferentialLendingRate).notNull() .zeroOrPositiveAmount(); - } final String defaultDifferentialLendingRateParameterName = "defaultDifferentialLendingRate"; - BigDecimal defaultDifferentialLendingRate = null; - if (this.fromApiJsonHelper.parameterExists(defaultDifferentialLendingRateParameterName, element)) { - defaultDifferentialLendingRate = this.fromApiJsonHelper.extractBigDecimalWithLocaleNamed(defaultDifferentialLendingRateParameterName, - element); - baseDataValidator.reset().parameter(defaultDifferentialLendingRateParameterName).value(defaultDifferentialLendingRate).ignoreIfNull() + BigDecimal defaultDifferentialLendingRate = this.fromApiJsonHelper.extractBigDecimalWithLocaleNamed(defaultDifferentialLendingRateParameterName, + element); + baseDataValidator.reset().parameter(defaultDifferentialLendingRateParameterName).value(defaultDifferentialLendingRate).notNull() .zeroOrPositiveAmount(); - } final String maxDifferentialLendingRateParameterName = "maxDifferentialLendingRate"; - BigDecimal maxDifferentialLendingRate = null; - if (this.fromApiJsonHelper.parameterExists(maxDifferentialLendingRateParameterName, element)) { - maxDifferentialLendingRate = this.fromApiJsonHelper.extractBigDecimalWithLocaleNamed(maxDifferentialLendingRateParameterName, - element); - baseDataValidator.reset().parameter(maxDifferentialLendingRateParameterName).value(maxDifferentialLendingRate).ignoreIfNull() + BigDecimal maxDifferentialLendingRate = this.fromApiJsonHelper.extractBigDecimalWithLocaleNamed(maxDifferentialLendingRateParameterName, + element); + baseDataValidator.reset().parameter(maxDifferentialLendingRateParameterName).value(maxDifferentialLendingRate).notNull() .zeroOrPositiveAmount(); - } if (defaultDifferentialLendingRate != null && defaultDifferentialLendingRate.compareTo(BigDecimal.ZERO) != -1) { if (minDifferentialLendingRate != null && minDifferentialLendingRate.compareTo(BigDecimal.ZERO) != -1) { @@ -1052,7 +1043,7 @@ public final class LoanProductDataValidator { minDifferentialLendingRate = this.fromApiJsonHelper.extractBigDecimalWithLocaleNamed(minDifferentialLendingRateParameterName, element); } - baseDataValidator.reset().parameter(minDifferentialLendingRateParameterName).value(minDifferentialLendingRate).ignoreIfNull() + baseDataValidator.reset().parameter(minDifferentialLendingRateParameterName).value(minDifferentialLendingRate).notNull() .zeroOrPositiveAmount(); final String defaultDifferentialLendingRateParameterName = "defaultDifferentialLendingRate"; @@ -1062,7 +1053,7 @@ public final class LoanProductDataValidator { defaultDifferentialLendingRate = this.fromApiJsonHelper.extractBigDecimalWithLocaleNamed(defaultDifferentialLendingRateParameterName, element); } - baseDataValidator.reset().parameter(defaultDifferentialLendingRateParameterName).value(defaultDifferentialLendingRate).ignoreIfNull() + baseDataValidator.reset().parameter(defaultDifferentialLendingRateParameterName).value(defaultDifferentialLendingRate).notNull() .zeroOrPositiveAmount(); final String maxDifferentialLendingRateParameterName = "maxDifferentialLendingRate"; @@ -1072,7 +1063,7 @@ public final class LoanProductDataValidator { maxDifferentialLendingRate = this.fromApiJsonHelper.extractBigDecimalWithLocaleNamed(maxDifferentialLendingRateParameterName, element); } - baseDataValidator.reset().parameter(maxDifferentialLendingRateParameterName).value(maxDifferentialLendingRate).ignoreIfNull() + baseDataValidator.reset().parameter(maxDifferentialLendingRateParameterName).value(maxDifferentialLendingRate).notNull() .zeroOrPositiveAmount(); if (defaultDifferentialLendingRate != null && defaultDifferentialLendingRate.compareTo(BigDecimal.ZERO) != -1) {