This is an automated email from the ASF dual-hosted git repository. avikg pushed a commit to branch develop in repository https://gitbox.apache.org/repos/asf/fineract.git
The following commit(s) were added to refs/heads/develop by this push: new 8f444be Made loan collateral optional while creating loan account-FINERACT-1405 (#1889) 8f444be is described below commit 8f444bed5c04725a83060e2935d77a8c4bd47cc2 Author: Shreyas S Kumar <56754851+shreyas-...@users.noreply.github.com> AuthorDate: Mon Oct 11 19:38:07 2021 +0530 Made loan collateral optional while creating loan account-FINERACT-1405 (#1889) --- .../LoanApplicationCommandFromApiJsonHelper.java | 66 +++++++++++----------- .../loanaccount/service/LoanAssembler.java | 28 +++++---- 2 files changed, 47 insertions(+), 47 deletions(-) diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/serialization/LoanApplicationCommandFromApiJsonHelper.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/serialization/LoanApplicationCommandFromApiJsonHelper.java index 26d216d..a3e0f14 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/serialization/LoanApplicationCommandFromApiJsonHelper.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/serialization/LoanApplicationCommandFromApiJsonHelper.java @@ -918,39 +918,41 @@ public final class LoanApplicationCommandFromApiJsonHelper { final Type collateralParameterTypeOfMap = new TypeToken<Map<String, Object>>() {}.getType(); final Set<String> supportedParameters = new HashSet<>(Arrays.asList("id", "clientCollateralId", "quantity")); final JsonArray array = topLevelJsonElement.get("collateral").getAsJsonArray(); - BigDecimal totalAmount = BigDecimal.ZERO; - for (int i = 1; i <= array.size(); i++) { - final JsonObject collateralItemElement = array.get(i - 1).getAsJsonObject(); - - final String collateralJson = this.fromApiJsonHelper.toJson(collateralItemElement); - this.fromApiJsonHelper.checkForUnsupportedParameters(collateralParameterTypeOfMap, collateralJson, - supportedParameters); - - final Long id = this.fromApiJsonHelper.extractLongNamed("id", collateralItemElement); - baseDataValidator.reset().parameter("collateral").parameterAtIndexArray("id", i).value(id).ignoreIfNull(); - - final Long clientCollateralId = this.fromApiJsonHelper.extractLongNamed("clientCollateralId", - collateralItemElement); - baseDataValidator.reset().parameter("collateral").parameterAtIndexArray("clientCollateralId", i) - .value(clientCollateralId).notNull().integerGreaterThanZero(); - - final BigDecimal quantity = this.fromApiJsonHelper.extractBigDecimalNamed("quantity", collateralItemElement, - locale); - baseDataValidator.reset().parameter("collateral").parameterAtIndexArray("quantity", i).value(quantity).notNull() - .positiveAmount(); - - if (clientCollateralId != null || quantity != null) { - BigDecimal baseAmount = this.clientCollateralManagementRepositoryWrapper.getCollateral(clientCollateralId) - .getCollaterals().getBasePrice(); - BigDecimal pctToBase = this.clientCollateralManagementRepositoryWrapper.getCollateral(clientCollateralId) - .getCollaterals().getPctToBase(); - BigDecimal total = baseAmount.multiply(pctToBase).multiply(quantity); - totalAmount = totalAmount.add(total); + if (array.size() > 0) { + BigDecimal totalAmount = BigDecimal.ZERO; + for (int i = 1; i <= array.size(); i++) { + final JsonObject collateralItemElement = array.get(i - 1).getAsJsonObject(); + + final String collateralJson = this.fromApiJsonHelper.toJson(collateralItemElement); + this.fromApiJsonHelper.checkForUnsupportedParameters(collateralParameterTypeOfMap, collateralJson, + supportedParameters); + + final Long id = this.fromApiJsonHelper.extractLongNamed("id", collateralItemElement); + baseDataValidator.reset().parameter("collateral").parameterAtIndexArray("id", i).value(id).ignoreIfNull(); + + final Long clientCollateralId = this.fromApiJsonHelper.extractLongNamed("clientCollateralId", + collateralItemElement); + baseDataValidator.reset().parameter("collateral").parameterAtIndexArray("clientCollateralId", i) + .value(clientCollateralId).notNull().integerGreaterThanZero(); + + final BigDecimal quantity = this.fromApiJsonHelper.extractBigDecimalNamed("quantity", collateralItemElement, + locale); + baseDataValidator.reset().parameter("collateral").parameterAtIndexArray("quantity", i).value(quantity) + .notNull().positiveAmount(); + + if (clientCollateralId != null || quantity != null) { + BigDecimal baseAmount = this.clientCollateralManagementRepositoryWrapper + .getCollateral(clientCollateralId).getCollaterals().getBasePrice(); + BigDecimal pctToBase = this.clientCollateralManagementRepositoryWrapper + .getCollateral(clientCollateralId).getCollaterals().getPctToBase(); + BigDecimal total = baseAmount.multiply(pctToBase).multiply(quantity); + totalAmount = totalAmount.add(total); + } } - } - if (principal != null) { - if (principal.compareTo(totalAmount) > 0 || array.size() == 0) { - throw new InvalidAmountOfCollaterals(totalAmount); + if (principal != null) { + if (principal.compareTo(totalAmount) > 0) { + throw new InvalidAmountOfCollaterals(totalAmount); + } } } } else { diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanAssembler.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanAssembler.java index 06514eb..ffaa632 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanAssembler.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanAssembler.java @@ -227,21 +227,19 @@ public class LoanAssembler { if (loanAccountType.isIndividualAccount()) { collateral = this.collateralAssembler.fromParsedJson(element); - if (collateral.size() == 0) { - throw new InvalidAmountOfCollaterals(BigDecimal.ZERO); - } - - BigDecimal totalValue = BigDecimal.ZERO; - for (LoanCollateralManagement collateralManagement : collateral) { - final CollateralManagementDomain collateralManagementDomain = collateralManagement.getClientCollateralManagement() - .getCollaterals(); - BigDecimal totalCollateral = collateralManagement.getQuantity().multiply(collateralManagementDomain.getBasePrice()) - .multiply(collateralManagementDomain.getPctToBase()).divide(BigDecimal.valueOf(100)); - totalValue = totalValue.add(totalCollateral); - } - - if (amount.compareTo(totalValue) > 0) { - throw new InvalidAmountOfCollaterals(totalValue); + if (collateral.size() > 0) { + BigDecimal totalValue = BigDecimal.ZERO; + for (LoanCollateralManagement collateralManagement : collateral) { + final CollateralManagementDomain collateralManagementDomain = collateralManagement.getClientCollateralManagement() + .getCollaterals(); + BigDecimal totalCollateral = collateralManagement.getQuantity().multiply(collateralManagementDomain.getBasePrice()) + .multiply(collateralManagementDomain.getPctToBase()).divide(BigDecimal.valueOf(100)); + totalValue = totalValue.add(totalCollateral); + } + + if (amount.compareTo(totalValue) > 0) { + throw new InvalidAmountOfCollaterals(totalValue); + } } } }