Merge pull request #1543 from rajuan/MIFOSX-2350

MIFOSX-2350 : Added additional validations
This commit is contained in:
Shaik Nazeer Hussain
2015-11-16 13:27:22 +05:30
10 changed files with 138 additions and 44 deletions
@@ -5,6 +5,8 @@
*/ */
package org.mifosplatform.portfolio.floatingrates.domain; package org.mifosplatform.portfolio.floatingrates.domain;
import java.util.Collection;
import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor; import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import org.springframework.data.jpa.repository.Query; 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") @Query("from FloatingRate floatingRate where floatingRate.isBaseLendingRate = 1 and floatingRate.isActive = 1")
FloatingRate retrieveBaseLendingRate(); 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<FloatingRate> retrieveFloatingRatesLinkedToBLR();
} }
@@ -9,6 +9,7 @@ import java.lang.reflect.Type;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
import java.util.Collection;
import java.util.HashSet; import java.util.HashSet;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
@@ -66,9 +67,10 @@ public class FloatingRateDataValidator {
baseDataValidator.reset().parameter("name").value(name).notBlank() baseDataValidator.reset().parameter("name").value(name).notBlank()
.notExceedingLengthOf(200); .notExceedingLengthOf(200);
Boolean isBaseLendingRate = null;
if (this.fromApiJsonHelper if (this.fromApiJsonHelper
.parameterExists("isBaseLendingRate", element)) { .parameterExists("isBaseLendingRate", element)) {
final Boolean isBaseLendingRate = this.fromApiJsonHelper isBaseLendingRate = this.fromApiJsonHelper
.extractBooleanNamed("isBaseLendingRate", element); .extractBooleanNamed("isBaseLendingRate", element);
baseDataValidator.reset().parameter("isBaseLendingRate") 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); throwExceptionIfValidationWarningsExist(dataValidationErrors);
} }
private void validateRatePeriods(DataValidatorBuilder baseDataValidator, private void validateRatePeriods(DataValidatorBuilder baseDataValidator,
JsonElement element) { JsonElement element, boolean isBaseLendingRate, boolean isBLRModifiedAsNonBLR) {
if (this.fromApiJsonHelper.parameterExists("ratePeriods", element)) { if (this.fromApiJsonHelper.parameterExists("ratePeriods", element)) {
final JsonArray ratePeriods = this.fromApiJsonHelper final JsonArray ratePeriods = this.fromApiJsonHelper
.extractJsonArrayNamed("ratePeriods", element); .extractJsonArrayNamed("ratePeriods", element);
@@ -161,7 +166,7 @@ public class FloatingRateDataValidator {
} else if (isDifferentialToBaseLendingRate) { } else if (isDifferentialToBaseLendingRate) {
FloatingRate baseLendingRate = this.floatingRateRepository FloatingRate baseLendingRate = this.floatingRateRepository
.retrieveBaseLendingRate(); .retrieveBaseLendingRate();
if (baseLendingRate == null) { if (baseLendingRate == null || isBLRModifiedAsNonBLR) {
baseDataValidator baseDataValidator
.reset() .reset()
.parameter( .parameter(
@@ -174,6 +179,20 @@ public class FloatingRateDataValidator {
"no.baselending.rate.defined", "no.baselending.rate.defined",
"Base Lending Rate doesn't exists"); "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); .notExceedingLengthOf(200);
} }
Boolean isBaseLendingRate = null;
Boolean isBLRModifiedAsNonBLR = false;
FloatingRate baseLendingRate = this.floatingRateRepository
.retrieveBaseLendingRate();
if (this.fromApiJsonHelper if (this.fromApiJsonHelper
.parameterExists("isBaseLendingRate", element)) { .parameterExists("isBaseLendingRate", element)) {
final Boolean isBaseLendingRate = this.fromApiJsonHelper isBaseLendingRate = this.fromApiJsonHelper
.extractBooleanNamed("isBaseLendingRate", element); .extractBooleanNamed("isBaseLendingRate", element);
baseDataValidator.reset().parameter("isBaseLendingRate") baseDataValidator.reset().parameter("isBaseLendingRate")
@@ -222,8 +245,6 @@ public class FloatingRateDataValidator {
baseDataValidator.reset().parameter("isBaseLendingRate") baseDataValidator.reset().parameter("isBaseLendingRate")
.trueOrFalseRequired(false); .trueOrFalseRequired(false);
} else if (isBaseLendingRate) { } else if (isBaseLendingRate) {
FloatingRate baseLendingRate = this.floatingRateRepository
.retrieveBaseLendingRate();
if (baseLendingRate != null if (baseLendingRate != null
&& baseLendingRate.getId() != floatingRateForUpdate && baseLendingRate.getId() != floatingRateForUpdate
.getId()) { .getId()) {
@@ -237,8 +258,9 @@ public class FloatingRateDataValidator {
} }
} }
Boolean isActive = null;
if (this.fromApiJsonHelper.parameterExists("isActive", element)) { if (this.fromApiJsonHelper.parameterExists("isActive", element)) {
final Boolean isActive = this.fromApiJsonHelper isActive = this.fromApiJsonHelper
.extractBooleanNamed("isActive", element); .extractBooleanNamed("isActive", element);
if (isActive == null) { if (isActive == null) {
baseDataValidator.reset().parameter("isActive") 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<FloatingRate> 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); throwExceptionIfValidationWarningsExist(dataValidationErrors);
} }
@@ -51,6 +51,7 @@ import org.mifosplatform.portfolio.common.domain.PeriodFrequencyType;
import org.mifosplatform.portfolio.common.service.BusinessEventNotifierService; import org.mifosplatform.portfolio.common.service.BusinessEventNotifierService;
import org.mifosplatform.portfolio.floatingrates.data.FloatingRateDTO; import org.mifosplatform.portfolio.floatingrates.data.FloatingRateDTO;
import org.mifosplatform.portfolio.floatingrates.data.FloatingRatePeriodData; 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.floatingrates.service.FloatingRatesReadPlatformService;
import org.mifosplatform.portfolio.group.domain.Group; import org.mifosplatform.portfolio.group.domain.Group;
import org.mifosplatform.portfolio.group.exception.GroupNotActiveException; import org.mifosplatform.portfolio.group.exception.GroupNotActiveException;
@@ -252,8 +253,14 @@ public class LoanAccountDomainServiceJpa implements LoanAccountDomainService {
if (loan.loanProduct().isLinkedToFloatingInterestRate()) { if (loan.loanProduct().isLinkedToFloatingInterestRate()) {
boolean isFloatingInterestRate = loan.getIsFloatingInterestRate(); boolean isFloatingInterestRate = loan.getIsFloatingInterestRate();
BigDecimal interestRateDiff = loan.getInterestRateDifferential(); BigDecimal interestRateDiff = loan.getInterestRateDifferential();
List<FloatingRatePeriodData> baseLendingRatePeriods = this.floatingRatesReadPlatformService.retrieveBaseLendingRate() List<FloatingRatePeriodData> baseLendingRatePeriods = null;
.getRatePeriods(); try{
baseLendingRatePeriods = this.floatingRatesReadPlatformService.retrieveBaseLendingRate()
.getRatePeriods();
}catch(final FloatingRateNotFoundException ex){
// Do not do anything
}
floatingRateDTO = new FloatingRateDTO(isFloatingInterestRate, loan.getDisbursementDate(), interestRateDiff, floatingRateDTO = new FloatingRateDTO(isFloatingInterestRate, loan.getDisbursementDate(), interestRateDiff,
baseLendingRatePeriods); baseLendingRatePeriods);
} }
@@ -49,6 +49,7 @@ import org.mifosplatform.portfolio.common.domain.DaysInYearType;
import org.mifosplatform.portfolio.common.domain.PeriodFrequencyType; import org.mifosplatform.portfolio.common.domain.PeriodFrequencyType;
import org.mifosplatform.portfolio.floatingrates.data.FloatingRateDTO; import org.mifosplatform.portfolio.floatingrates.data.FloatingRateDTO;
import org.mifosplatform.portfolio.floatingrates.data.FloatingRatePeriodData; 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.floatingrates.service.FloatingRatesReadPlatformService;
import org.mifosplatform.portfolio.group.domain.Group; import org.mifosplatform.portfolio.group.domain.Group;
import org.mifosplatform.portfolio.group.domain.GroupRepositoryWrapper; import org.mifosplatform.portfolio.group.domain.GroupRepositoryWrapper;
@@ -312,8 +313,13 @@ public class LoanScheduleAssembler {
LoanApiConstants.interestRateDifferentialParameterName, element); LoanApiConstants.interestRateDifferentialParameterName, element);
final Boolean isFloatingInterestRate = this.fromApiJsonHelper.extractBooleanNamed( final Boolean isFloatingInterestRate = this.fromApiJsonHelper.extractBooleanNamed(
LoanApiConstants.isFloatingInterestRateParameterName, element); LoanApiConstants.isFloatingInterestRateParameterName, element);
List<FloatingRatePeriodData> baseLendingRatePeriods = this.floatingRatesReadPlatformService.retrieveBaseLendingRate() List<FloatingRatePeriodData> baseLendingRatePeriods = null;
.getRatePeriods(); try{
baseLendingRatePeriods = this.floatingRatesReadPlatformService.retrieveBaseLendingRate()
.getRatePeriods();
}catch(final FloatingRateNotFoundException ex){
// Do not do anything
}
FloatingRateDTO floatingRateDTO = new FloatingRateDTO(isFloatingInterestRate, expectedDisbursementDate, interestRateDiff, FloatingRateDTO floatingRateDTO = new FloatingRateDTO(isFloatingInterestRate, expectedDisbursementDate, interestRateDiff,
baseLendingRatePeriods); baseLendingRatePeriods);
Collection<FloatingRatePeriodData> applicableRates = loanProduct.fetchInterestRates(floatingRateDTO); Collection<FloatingRatePeriodData> applicableRates = loanProduct.fetchInterestRates(floatingRateDTO);
@@ -28,6 +28,7 @@ import org.mifosplatform.portfolio.calendar.domain.CalendarInstance;
import org.mifosplatform.portfolio.calendar.domain.CalendarInstanceRepository; import org.mifosplatform.portfolio.calendar.domain.CalendarInstanceRepository;
import org.mifosplatform.portfolio.floatingrates.data.FloatingRateDTO; import org.mifosplatform.portfolio.floatingrates.data.FloatingRateDTO;
import org.mifosplatform.portfolio.floatingrates.data.FloatingRatePeriodData; 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.floatingrates.service.FloatingRatesReadPlatformService;
import org.mifosplatform.portfolio.loanaccount.domain.Loan; import org.mifosplatform.portfolio.loanaccount.domain.Loan;
import org.mifosplatform.portfolio.loanaccount.domain.LoanAccountDomainService; import org.mifosplatform.portfolio.loanaccount.domain.LoanAccountDomainService;
@@ -222,8 +223,13 @@ public class LoanScheduleCalculationPlatformServiceImpl implements LoanScheduleC
if (loan.loanProduct().isLinkedToFloatingInterestRate()) { if (loan.loanProduct().isLinkedToFloatingInterestRate()) {
boolean isFloatingInterestRate = loan.getIsFloatingInterestRate(); boolean isFloatingInterestRate = loan.getIsFloatingInterestRate();
BigDecimal interestRateDiff = loan.getInterestRateDifferential(); BigDecimal interestRateDiff = loan.getInterestRateDifferential();
List<FloatingRatePeriodData> baseLendingRatePeriods = this.floatingRatesReadPlatformService.retrieveBaseLendingRate() List<FloatingRatePeriodData> baseLendingRatePeriods = null;
.getRatePeriods(); try{
baseLendingRatePeriods = this.floatingRatesReadPlatformService.retrieveBaseLendingRate()
.getRatePeriods();
}catch(final FloatingRateNotFoundException ex){
// Do not do anything
}
floatingRateDTO = new FloatingRateDTO(isFloatingInterestRate, loan.getDisbursementDate(), interestRateDiff, floatingRateDTO = new FloatingRateDTO(isFloatingInterestRate, loan.getDisbursementDate(), interestRateDiff,
baseLendingRatePeriods); baseLendingRatePeriods);
} }
@@ -26,6 +26,7 @@ import org.mifosplatform.portfolio.calendar.domain.CalendarInstance;
import org.mifosplatform.portfolio.calendar.domain.CalendarInstanceRepository; import org.mifosplatform.portfolio.calendar.domain.CalendarInstanceRepository;
import org.mifosplatform.portfolio.floatingrates.data.FloatingRateDTO; import org.mifosplatform.portfolio.floatingrates.data.FloatingRateDTO;
import org.mifosplatform.portfolio.floatingrates.data.FloatingRatePeriodData; 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.floatingrates.service.FloatingRatesReadPlatformService;
import org.mifosplatform.portfolio.loanaccount.data.HolidayDetailDTO; import org.mifosplatform.portfolio.loanaccount.data.HolidayDetailDTO;
import org.mifosplatform.portfolio.loanaccount.domain.Loan; import org.mifosplatform.portfolio.loanaccount.domain.Loan;
@@ -121,8 +122,13 @@ public class LoanReschedulePreviewPlatformServiceImpl implements LoanRescheduleP
if (loan.loanProduct().isLinkedToFloatingInterestRate()) { if (loan.loanProduct().isLinkedToFloatingInterestRate()) {
boolean isFloatingInterestRate = loan.getIsFloatingInterestRate(); boolean isFloatingInterestRate = loan.getIsFloatingInterestRate();
BigDecimal interestRateDiff = loan.getInterestRateDifferential(); BigDecimal interestRateDiff = loan.getInterestRateDifferential();
List<FloatingRatePeriodData> baseLendingRatePeriods = this.floatingRatesReadPlatformService.retrieveBaseLendingRate() List<FloatingRatePeriodData> baseLendingRatePeriods = null;
.getRatePeriods(); try{
baseLendingRatePeriods = this.floatingRatesReadPlatformService.retrieveBaseLendingRate()
.getRatePeriods();
}catch(final FloatingRateNotFoundException ex){
// Do not do anything
}
floatingRateDTO = new FloatingRateDTO(isFloatingInterestRate, loan.getDisbursementDate(), interestRateDiff, floatingRateDTO = new FloatingRateDTO(isFloatingInterestRate, loan.getDisbursementDate(), interestRateDiff,
baseLendingRatePeriods); baseLendingRatePeriods);
} }
@@ -38,6 +38,7 @@ import org.mifosplatform.portfolio.calendar.domain.CalendarInstance;
import org.mifosplatform.portfolio.calendar.domain.CalendarInstanceRepository; import org.mifosplatform.portfolio.calendar.domain.CalendarInstanceRepository;
import org.mifosplatform.portfolio.floatingrates.data.FloatingRateDTO; import org.mifosplatform.portfolio.floatingrates.data.FloatingRateDTO;
import org.mifosplatform.portfolio.floatingrates.data.FloatingRatePeriodData; 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.floatingrates.service.FloatingRatesReadPlatformService;
import org.mifosplatform.portfolio.loanaccount.data.HolidayDetailDTO; import org.mifosplatform.portfolio.loanaccount.data.HolidayDetailDTO;
import org.mifosplatform.portfolio.loanaccount.data.LoanChargePaidByData; import org.mifosplatform.portfolio.loanaccount.data.LoanChargePaidByData;
@@ -581,8 +582,13 @@ public class LoanRescheduleRequestWritePlatformServiceImpl implements LoanResche
if (loan.loanProduct().isLinkedToFloatingInterestRate()) { if (loan.loanProduct().isLinkedToFloatingInterestRate()) {
boolean isFloatingInterestRate = loan.getIsFloatingInterestRate(); boolean isFloatingInterestRate = loan.getIsFloatingInterestRate();
BigDecimal interestRateDiff = loan.getInterestRateDifferential(); BigDecimal interestRateDiff = loan.getInterestRateDifferential();
List<FloatingRatePeriodData> baseLendingRatePeriods = this.floatingRatesReadPlatformService.retrieveBaseLendingRate() List<FloatingRatePeriodData> baseLendingRatePeriods = null;
.getRatePeriods(); try{
baseLendingRatePeriods = this.floatingRatesReadPlatformService.retrieveBaseLendingRate()
.getRatePeriods();
}catch(final FloatingRateNotFoundException ex){
// Do not do anything
}
floatingRateDTO = new FloatingRateDTO(isFloatingInterestRate, loan.getDisbursementDate(), interestRateDiff, floatingRateDTO = new FloatingRateDTO(isFloatingInterestRate, loan.getDisbursementDate(), interestRateDiff,
baseLendingRatePeriods); baseLendingRatePeriods);
} }
@@ -66,6 +66,7 @@ import org.mifosplatform.portfolio.common.service.CommonEnumerations;
import org.mifosplatform.portfolio.floatingrates.data.InterestRatePeriodData; import org.mifosplatform.portfolio.floatingrates.data.InterestRatePeriodData;
import org.mifosplatform.portfolio.floatingrates.data.FloatingRateDTO; import org.mifosplatform.portfolio.floatingrates.data.FloatingRateDTO;
import org.mifosplatform.portfolio.floatingrates.data.FloatingRatePeriodData; 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.floatingrates.service.FloatingRatesReadPlatformService;
import org.mifosplatform.portfolio.fund.data.FundData; import org.mifosplatform.portfolio.fund.data.FundData;
import org.mifosplatform.portfolio.fund.service.FundReadPlatformService; import org.mifosplatform.portfolio.fund.service.FundReadPlatformService;
@@ -1969,8 +1970,13 @@ public class LoanReadPlatformServiceImpl implements LoanReadPlatformService {
if (loan.loanProduct().isLinkedToFloatingInterestRate()) { if (loan.loanProduct().isLinkedToFloatingInterestRate()) {
boolean isFloatingInterestRate = loan.getIsFloatingInterestRate(); boolean isFloatingInterestRate = loan.getIsFloatingInterestRate();
BigDecimal interestRateDiff = loan.getInterestRateDifferential(); BigDecimal interestRateDiff = loan.getInterestRateDifferential();
List<FloatingRatePeriodData> baseLendingRatePeriods = this.floatingRatesReadPlatformService.retrieveBaseLendingRate() List<FloatingRatePeriodData> baseLendingRatePeriods = null;
.getRatePeriods(); try{
baseLendingRatePeriods = this.floatingRatesReadPlatformService.retrieveBaseLendingRate()
.getRatePeriods();
}catch(final FloatingRateNotFoundException ex){
// Do not do anything
}
floatingRateDTO = new FloatingRateDTO(isFloatingInterestRate, loan.getDisbursementDate(), interestRateDiff, floatingRateDTO = new FloatingRateDTO(isFloatingInterestRate, loan.getDisbursementDate(), interestRateDiff,
baseLendingRatePeriods); baseLendingRatePeriods);
} }
@@ -99,6 +99,7 @@ import org.mifosplatform.portfolio.common.domain.PeriodFrequencyType;
import org.mifosplatform.portfolio.common.service.BusinessEventNotifierService; import org.mifosplatform.portfolio.common.service.BusinessEventNotifierService;
import org.mifosplatform.portfolio.floatingrates.data.FloatingRateDTO; import org.mifosplatform.portfolio.floatingrates.data.FloatingRateDTO;
import org.mifosplatform.portfolio.floatingrates.data.FloatingRatePeriodData; 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.floatingrates.service.FloatingRatesReadPlatformService;
import org.mifosplatform.portfolio.group.domain.Group; import org.mifosplatform.portfolio.group.domain.Group;
import org.mifosplatform.portfolio.group.exception.GroupNotActiveException; import org.mifosplatform.portfolio.group.exception.GroupNotActiveException;
@@ -3053,8 +3054,13 @@ public class LoanWritePlatformServiceJpaRepositoryImpl implements LoanWritePlatf
if (loan.loanProduct().isLinkedToFloatingInterestRate()) { if (loan.loanProduct().isLinkedToFloatingInterestRate()) {
boolean isFloatingInterestRate = loan.getIsFloatingInterestRate(); boolean isFloatingInterestRate = loan.getIsFloatingInterestRate();
BigDecimal interestRateDiff = loan.getInterestRateDifferential(); BigDecimal interestRateDiff = loan.getInterestRateDifferential();
List<FloatingRatePeriodData> baseLendingRatePeriods = this.floatingRatesReadPlatformService.retrieveBaseLendingRate() List<FloatingRatePeriodData> baseLendingRatePeriods = null;
.getRatePeriods(); try{
baseLendingRatePeriods = this.floatingRatesReadPlatformService.retrieveBaseLendingRate()
.getRatePeriods();
}catch(final FloatingRateNotFoundException ex){
// Do not do anything
}
floatingRateDTO = new FloatingRateDTO(isFloatingInterestRate, loan.getDisbursementDate(), interestRateDiff, floatingRateDTO = new FloatingRateDTO(isFloatingInterestRate, loan.getDisbursementDate(), interestRateDiff,
baseLendingRatePeriods); baseLendingRatePeriods);
} }
@@ -326,31 +326,22 @@ public final class LoanProductDataValidator {
baseDataValidator.reset().parameter("interestRateDifferential").value(interestRateDifferential).notNull().zeroOrPositiveAmount(); baseDataValidator.reset().parameter("interestRateDifferential").value(interestRateDifferential).notNull().zeroOrPositiveAmount();
final String minDifferentialLendingRateParameterName = "minDifferentialLendingRate"; final String minDifferentialLendingRateParameterName = "minDifferentialLendingRate";
BigDecimal minDifferentialLendingRate = null; BigDecimal minDifferentialLendingRate = this.fromApiJsonHelper.extractBigDecimalWithLocaleNamed(minDifferentialLendingRateParameterName,
if (this.fromApiJsonHelper.parameterExists(minDifferentialLendingRateParameterName, element)) { element);
minDifferentialLendingRate = this.fromApiJsonHelper.extractBigDecimalWithLocaleNamed(minDifferentialLendingRateParameterName, baseDataValidator.reset().parameter(minDifferentialLendingRateParameterName).value(minDifferentialLendingRate).notNull()
element);
baseDataValidator.reset().parameter(minDifferentialLendingRateParameterName).value(minDifferentialLendingRate).ignoreIfNull()
.zeroOrPositiveAmount(); .zeroOrPositiveAmount();
}
final String defaultDifferentialLendingRateParameterName = "defaultDifferentialLendingRate"; final String defaultDifferentialLendingRateParameterName = "defaultDifferentialLendingRate";
BigDecimal defaultDifferentialLendingRate = null; BigDecimal defaultDifferentialLendingRate = this.fromApiJsonHelper.extractBigDecimalWithLocaleNamed(defaultDifferentialLendingRateParameterName,
if (this.fromApiJsonHelper.parameterExists(defaultDifferentialLendingRateParameterName, element)) { element);
defaultDifferentialLendingRate = this.fromApiJsonHelper.extractBigDecimalWithLocaleNamed(defaultDifferentialLendingRateParameterName, baseDataValidator.reset().parameter(defaultDifferentialLendingRateParameterName).value(defaultDifferentialLendingRate).notNull()
element);
baseDataValidator.reset().parameter(defaultDifferentialLendingRateParameterName).value(defaultDifferentialLendingRate).ignoreIfNull()
.zeroOrPositiveAmount(); .zeroOrPositiveAmount();
}
final String maxDifferentialLendingRateParameterName = "maxDifferentialLendingRate"; final String maxDifferentialLendingRateParameterName = "maxDifferentialLendingRate";
BigDecimal maxDifferentialLendingRate = null; BigDecimal maxDifferentialLendingRate = this.fromApiJsonHelper.extractBigDecimalWithLocaleNamed(maxDifferentialLendingRateParameterName,
if (this.fromApiJsonHelper.parameterExists(maxDifferentialLendingRateParameterName, element)) { element);
maxDifferentialLendingRate = this.fromApiJsonHelper.extractBigDecimalWithLocaleNamed(maxDifferentialLendingRateParameterName, baseDataValidator.reset().parameter(maxDifferentialLendingRateParameterName).value(maxDifferentialLendingRate).notNull()
element);
baseDataValidator.reset().parameter(maxDifferentialLendingRateParameterName).value(maxDifferentialLendingRate).ignoreIfNull()
.zeroOrPositiveAmount(); .zeroOrPositiveAmount();
}
if (defaultDifferentialLendingRate != null && defaultDifferentialLendingRate.compareTo(BigDecimal.ZERO) != -1) { if (defaultDifferentialLendingRate != null && defaultDifferentialLendingRate.compareTo(BigDecimal.ZERO) != -1) {
if (minDifferentialLendingRate != null && minDifferentialLendingRate.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, minDifferentialLendingRate = this.fromApiJsonHelper.extractBigDecimalWithLocaleNamed(minDifferentialLendingRateParameterName,
element); element);
} }
baseDataValidator.reset().parameter(minDifferentialLendingRateParameterName).value(minDifferentialLendingRate).ignoreIfNull() baseDataValidator.reset().parameter(minDifferentialLendingRateParameterName).value(minDifferentialLendingRate).notNull()
.zeroOrPositiveAmount(); .zeroOrPositiveAmount();
final String defaultDifferentialLendingRateParameterName = "defaultDifferentialLendingRate"; final String defaultDifferentialLendingRateParameterName = "defaultDifferentialLendingRate";
@@ -1062,7 +1053,7 @@ public final class LoanProductDataValidator {
defaultDifferentialLendingRate = this.fromApiJsonHelper.extractBigDecimalWithLocaleNamed(defaultDifferentialLendingRateParameterName, defaultDifferentialLendingRate = this.fromApiJsonHelper.extractBigDecimalWithLocaleNamed(defaultDifferentialLendingRateParameterName,
element); element);
} }
baseDataValidator.reset().parameter(defaultDifferentialLendingRateParameterName).value(defaultDifferentialLendingRate).ignoreIfNull() baseDataValidator.reset().parameter(defaultDifferentialLendingRateParameterName).value(defaultDifferentialLendingRate).notNull()
.zeroOrPositiveAmount(); .zeroOrPositiveAmount();
final String maxDifferentialLendingRateParameterName = "maxDifferentialLendingRate"; final String maxDifferentialLendingRateParameterName = "maxDifferentialLendingRate";
@@ -1072,7 +1063,7 @@ public final class LoanProductDataValidator {
maxDifferentialLendingRate = this.fromApiJsonHelper.extractBigDecimalWithLocaleNamed(maxDifferentialLendingRateParameterName, maxDifferentialLendingRate = this.fromApiJsonHelper.extractBigDecimalWithLocaleNamed(maxDifferentialLendingRateParameterName,
element); element);
} }
baseDataValidator.reset().parameter(maxDifferentialLendingRateParameterName).value(maxDifferentialLendingRate).ignoreIfNull() baseDataValidator.reset().parameter(maxDifferentialLendingRateParameterName).value(maxDifferentialLendingRate).notNull()
.zeroOrPositiveAmount(); .zeroOrPositiveAmount();
if (defaultDifferentialLendingRate != null && defaultDifferentialLendingRate.compareTo(BigDecimal.ZERO) != -1) { if (defaultDifferentialLendingRate != null && defaultDifferentialLendingRate.compareTo(BigDecimal.ZERO) != -1) {