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);
+                    }
                 }
             }
         }

Reply via email to