fixing test case failures due to work on tranche loans improvement

This commit is contained in:
Vishwas Babu A J
2015-03-03 17:36:08 +05:30
parent 445a98d225
commit e5ccac0ca2
2 changed files with 465 additions and 640 deletions
@@ -17,7 +17,6 @@ import java.util.Set;
import org.apache.commons.lang.StringUtils;
import org.joda.time.LocalDate;
import org.mifosplatform.infrastructure.core.api.JsonCommand;
import org.mifosplatform.infrastructure.core.data.ApiParameterError;
import org.mifosplatform.infrastructure.core.data.DataValidatorBuilder;
import org.mifosplatform.infrastructure.core.exception.InvalidJsonException;
@@ -832,154 +831,97 @@ public final class LoanApplicationCommandFromApiJsonHelper {
"Validation errors exist.", dataValidationErrors); }
}
private void validateDisbursementsAreDatewiseOrdered(JsonElement element, final DataValidatorBuilder baseDataValidator) {
final JsonObject topLevelJsonElement = element.getAsJsonObject();
final Locale locale = this.fromApiJsonHelper
.extractLocaleParameter(topLevelJsonElement);
final String dateFormat = this.fromApiJsonHelper
.extractDateFormatParameter(topLevelJsonElement);
final JsonArray variationArray = this.fromApiJsonHelper
.extractJsonArrayNamed(
LoanApiConstants.disbursementDataParameterName,
element);
for(int i=0 ; i< variationArray.size();i++){
final JsonObject jsonObject1 = variationArray.get(i)
.getAsJsonObject();
LocalDate date1 = this.fromApiJsonHelper
.extractLocalDateNamed(
LoanApiConstants.disbursementDateParameterName,
jsonObject1, dateFormat, locale);
for(int j=i+1;j<variationArray.size();j++){
final JsonObject jsonObject2 = variationArray.get(j)
.getAsJsonObject();
LocalDate date2 = this.fromApiJsonHelper
.extractLocalDateNamed(
LoanApiConstants.disbursementDateParameterName,
jsonObject2, dateFormat, locale);
if(date1.isAfter(date2)){
baseDataValidator
.reset()
.parameter(
LoanApiConstants.disbursementDataParameterName)
.failWithCode(
LoanApiConstants.DISBURSEMENT_DATES_NOT_IN_ORDER);
}
}
}
}
private void validateDisbursementsAreDatewiseOrdered(JsonElement element, final DataValidatorBuilder baseDataValidator) {
final JsonObject topLevelJsonElement = element.getAsJsonObject();
final Locale locale = this.fromApiJsonHelper.extractLocaleParameter(topLevelJsonElement);
final String dateFormat = this.fromApiJsonHelper.extractDateFormatParameter(topLevelJsonElement);
final JsonArray variationArray = this.fromApiJsonHelper.extractJsonArrayNamed(LoanApiConstants.disbursementDataParameterName,
element);
if (variationArray != null) {
for (int i = 0; i < variationArray.size(); i++) {
final JsonObject jsonObject1 = variationArray.get(i).getAsJsonObject();
LocalDate date1 = this.fromApiJsonHelper.extractLocalDateNamed(LoanApiConstants.disbursementDateParameterName, jsonObject1,
dateFormat, locale);
for (int j = i + 1; j < variationArray.size(); j++) {
final JsonObject jsonObject2 = variationArray.get(j).getAsJsonObject();
LocalDate date2 = this.fromApiJsonHelper.extractLocalDateNamed(LoanApiConstants.disbursementDateParameterName,
jsonObject2, dateFormat, locale);
if (date1.isAfter(date2)) {
baseDataValidator.reset().parameter(LoanApiConstants.disbursementDataParameterName)
.failWithCode(LoanApiConstants.DISBURSEMENT_DATES_NOT_IN_ORDER);
}
}
}
}
}
public void validateLoanMultiDisbursementdate(final JsonElement element, final DataValidatorBuilder baseDataValidator,
LocalDate expectedDisbursement, BigDecimal totalPrincipal) {
public void validateLoanMultiDisbursementdate(final JsonElement element,
final DataValidatorBuilder baseDataValidator,
LocalDate expectedDisbursement, BigDecimal totalPrincipal) {
this.validateDisbursementsAreDatewiseOrdered(element, baseDataValidator);
final JsonObject topLevelJsonElement = element.getAsJsonObject();
final Locale locale = this.fromApiJsonHelper
.extractLocaleParameter(topLevelJsonElement);
final String dateFormat = this.fromApiJsonHelper
.extractDateFormatParameter(topLevelJsonElement);
if (this.fromApiJsonHelper.parameterExists(
LoanApiConstants.disbursementDataParameterName, element)
&& expectedDisbursement != null && totalPrincipal != null) {
BigDecimal tatalDisbursement = BigDecimal.ZERO;
boolean isFirstinstallmentOnExpectedDisbursementDate = false;
final JsonArray variationArray = this.fromApiJsonHelper
.extractJsonArrayNamed(
LoanApiConstants.disbursementDataParameterName,
element);
List<LocalDate> expectedDisbursementDates = new ArrayList<>();
if (variationArray != null && variationArray.size() > 0) {
int i = 0;
do {
final JsonObject jsonObject = variationArray.get(i)
.getAsJsonObject();
LocalDate expectedDisbursementDate = this.fromApiJsonHelper
.extractLocalDateNamed(
LoanApiConstants.disbursementDateParameterName,
jsonObject, dateFormat, locale);
if (expectedDisbursementDates
.contains(expectedDisbursementDate)) {
baseDataValidator
.reset()
.parameter(
LoanApiConstants.disbursementDateParameterName)
.failWithCode(
LoanApiConstants.DISBURSEMENT_DATE_UNIQUE_ERROR);
}
if(expectedDisbursementDate.isBefore(expectedDisbursement)){
baseDataValidator
.reset()
.parameter(
LoanApiConstants.disbursementDataParameterName)
.failWithCode(
LoanApiConstants.DISBURSEMENT_DATE_BEFORE_ERROR);
}
expectedDisbursementDates.add(expectedDisbursementDate);
BigDecimal principal = this.fromApiJsonHelper
.extractBigDecimalNamed(
LoanApiConstants.disbursementPrincipalParameterName,
jsonObject, locale);
baseDataValidator
.reset()
.parameter(
LoanApiConstants.disbursementDataParameterName)
.parameterAtIndexArray(
LoanApiConstants.disbursementPrincipalParameterName,
i).value(principal).notBlank();
if (principal != null) {
tatalDisbursement = tatalDisbursement.add(principal);
}
final JsonObject topLevelJsonElement = element.getAsJsonObject();
final Locale locale = this.fromApiJsonHelper.extractLocaleParameter(topLevelJsonElement);
final String dateFormat = this.fromApiJsonHelper.extractDateFormatParameter(topLevelJsonElement);
if (this.fromApiJsonHelper.parameterExists(LoanApiConstants.disbursementDataParameterName, element) && expectedDisbursement != null
&& totalPrincipal != null) {
BigDecimal tatalDisbursement = BigDecimal.ZERO;
boolean isFirstinstallmentOnExpectedDisbursementDate = false;
final JsonArray variationArray = this.fromApiJsonHelper.extractJsonArrayNamed(LoanApiConstants.disbursementDataParameterName,
element);
List<LocalDate> expectedDisbursementDates = new ArrayList<>();
if (variationArray != null && variationArray.size() > 0) {
int i = 0;
do {
final JsonObject jsonObject = variationArray.get(i).getAsJsonObject();
LocalDate expectedDisbursementDate = this.fromApiJsonHelper.extractLocalDateNamed(
LoanApiConstants.disbursementDateParameterName, jsonObject, dateFormat, locale);
if (expectedDisbursementDates.contains(expectedDisbursementDate)) {
baseDataValidator.reset().parameter(LoanApiConstants.disbursementDateParameterName)
.failWithCode(LoanApiConstants.DISBURSEMENT_DATE_UNIQUE_ERROR);
}
if (expectedDisbursementDate.isBefore(expectedDisbursement)) {
baseDataValidator.reset().parameter(LoanApiConstants.disbursementDataParameterName)
.failWithCode(LoanApiConstants.DISBURSEMENT_DATE_BEFORE_ERROR);
}
expectedDisbursementDates.add(expectedDisbursementDate);
BigDecimal principal = this.fromApiJsonHelper.extractBigDecimalNamed(
LoanApiConstants.disbursementPrincipalParameterName, jsonObject, locale);
baseDataValidator.reset().parameter(LoanApiConstants.disbursementDataParameterName)
.parameterAtIndexArray(LoanApiConstants.disbursementPrincipalParameterName, i).value(principal).notBlank();
if (principal != null) {
tatalDisbursement = tatalDisbursement.add(principal);
}
baseDataValidator
.reset()
.parameter(
LoanApiConstants.disbursementDataParameterName)
.parameterAtIndexArray(
LoanApiConstants.disbursementDateParameterName,
i).value(expectedDisbursementDate)
.notNull();
baseDataValidator.reset().parameter(LoanApiConstants.disbursementDataParameterName)
.parameterAtIndexArray(LoanApiConstants.disbursementDateParameterName, i).value(expectedDisbursementDate)
.notNull();
if (expectedDisbursement.equals(expectedDisbursementDate)) {
isFirstinstallmentOnExpectedDisbursementDate = true;
}
i++;
} while (i < variationArray.size());
if (!isFirstinstallmentOnExpectedDisbursementDate) {
baseDataValidator
.reset()
.parameter(
LoanApiConstants.disbursementDateParameterName)
.failWithCode(
LoanApiConstants.DISBURSEMENT_DATE_START_WITH_ERROR);
}
if (expectedDisbursement.equals(expectedDisbursementDate)) {
isFirstinstallmentOnExpectedDisbursementDate = true;
}
i++;
} while (i < variationArray.size());
if (!isFirstinstallmentOnExpectedDisbursementDate) {
baseDataValidator.reset().parameter(LoanApiConstants.disbursementDateParameterName)
.failWithCode(LoanApiConstants.DISBURSEMENT_DATE_START_WITH_ERROR);
}
if (tatalDisbursement.compareTo(totalPrincipal) == 1) {
baseDataValidator
.reset()
.parameter(
LoanApiConstants.disbursementPrincipalParameterName)
.failWithCode(
LoanApiConstants.APPROVED_AMOUNT_IS_LESS_THAN_SUM_OF_TRANCHES);
}
final String interestTypeParameterName = "interestType";
final Integer interestType = this.fromApiJsonHelper
.extractIntegerSansLocaleNamed(
interestTypeParameterName, element);
baseDataValidator
.reset()
.parameter(interestTypeParameterName)
.value(interestType)
.ignoreIfNull()
.integerSameAsNumber(
InterestMethod.DECLINING_BALANCE.getValue());
if (tatalDisbursement.compareTo(totalPrincipal) == 1) {
baseDataValidator.reset().parameter(LoanApiConstants.disbursementPrincipalParameterName)
.failWithCode(LoanApiConstants.APPROVED_AMOUNT_IS_LESS_THAN_SUM_OF_TRANCHES);
}
final String interestTypeParameterName = "interestType";
final Integer interestType = this.fromApiJsonHelper.extractIntegerSansLocaleNamed(interestTypeParameterName, element);
baseDataValidator.reset().parameter(interestTypeParameterName).value(interestType).ignoreIfNull()
.integerSameAsNumber(InterestMethod.DECLINING_BALANCE.getValue());
}
}
}
}
}
}
public void validateRecalcuationFrequency(final LocalDate recalculationFrequencyDate, final LocalDate expectedDisbursementDate,
final List<ApiParameterError> dataValidationErrors) {