This is an automated email from the ASF dual-hosted git repository.

awasum 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 e1666ba  FINERACT-839: NPE when creating a Loan for a client fix
     new dfcad32  Merge pull request #696 from adamsaghy/bugfix/loanproductdata
e1666ba is described below

commit e1666ba8fc2b5c74f5bb6ad835cbae38b1cfce47
Author: Adam Saghy <[email protected]>
AuthorDate: Thu Jan 23 15:10:28 2020 +0100

    FINERACT-839: NPE when creating a Loan for a client fix
---
 .../loanproduct/data/LoanProductData.java          | 107 ++++++++++-----------
 1 file changed, 53 insertions(+), 54 deletions(-)

diff --git 
a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanproduct/data/LoanProductData.java
 
b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanproduct/data/LoanProductData.java
index 6c5676a..e6493ca 100644
--- 
a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanproduct/data/LoanProductData.java
+++ 
b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanproduct/data/LoanProductData.java
@@ -49,6 +49,7 @@ import java.util.ArrayList;
 import java.util.Collection;
 import java.util.List;
 import java.util.Map;
+import net.sf.ehcache.util.FindBugsSuppressWarnings;
 
 /**
  * Immutable data object to represent loan products.
@@ -473,10 +474,10 @@ public class LoanProductData implements Serializable {
     }
 
     public static LoanProductData loanProductWithFloatingRates(final Long id, 
final String name,
-            final boolean isLinkedToFloatingInterestRates, final Integer 
floatingRateId, final String floatingRateName,
-            final BigDecimal interestRateDifferential, final BigDecimal 
minDifferentialLendingRate,
-            final BigDecimal defaultDifferentialLendingRate, final BigDecimal 
maxDifferentialLendingRate,
-            final boolean isFloatingInterestRateCalculationAllowed) {
+                                                               final boolean 
isLinkedToFloatingInterestRates, final Integer floatingRateId, final String 
floatingRateName,
+                                                               final 
BigDecimal interestRateDifferential, final BigDecimal 
minDifferentialLendingRate,
+                                                               final 
BigDecimal defaultDifferentialLendingRate, final BigDecimal 
maxDifferentialLendingRate,
+                                                               final boolean 
isFloatingInterestRateCalculationAllowed) {
         final String shortName = null;
         final String description = null;
         final CurrencyData currency = CurrencyData.blank();
@@ -567,9 +568,9 @@ public class LoanProductData implements Serializable {
     }
 
     public static LoanProductData withAccountingDetails(final LoanProductData 
productData, final Map<String, Object> accountingMappings,
-            final Collection<PaymentTypeToGLAccountMapper> 
paymentChannelToFundSourceMappings,
-            final Collection<ChargeToGLAccountMapper> feeToGLAccountMappings,
-            final Collection<ChargeToGLAccountMapper> 
penaltyToGLAccountMappings) {
+                                                        final 
Collection<PaymentTypeToGLAccountMapper> paymentChannelToFundSourceMappings,
+                                                        final 
Collection<ChargeToGLAccountMapper> feeToGLAccountMappings,
+                                                        final 
Collection<ChargeToGLAccountMapper> penaltyToGLAccountMappings) {
         productData.accountingMappings = accountingMappings;
         productData.paymentChannelToFundSourceMappings = 
paymentChannelToFundSourceMappings;
         productData.feeToIncomeAccountMappings = feeToGLAccountMappings;
@@ -578,30 +579,30 @@ public class LoanProductData implements Serializable {
     }
 
     public LoanProductData(final Long id, final String name, final String 
shortName, final String description, final CurrencyData currency,
-            final BigDecimal principal, final BigDecimal minPrincipal, final 
BigDecimal maxPrincipal, final BigDecimal tolerance,
-            final Integer numberOfRepayments, final Integer 
minNumberOfRepayments, final Integer maxNumberOfRepayments,
-            final Integer repaymentEvery, final BigDecimal 
interestRatePerPeriod, final BigDecimal minInterestRatePerPeriod,
-            final BigDecimal maxInterestRatePerPeriod, final BigDecimal 
annualInterestRate, final EnumOptionData repaymentFrequencyType,
-            final EnumOptionData interestRateFrequencyType, final 
EnumOptionData amortizationType, final EnumOptionData interestType,
-            final EnumOptionData interestCalculationPeriodType, final Boolean 
allowPartialPeriodInterestCalcualtion, final Long fundId,
-            final String fundName, final Long transactionProcessingStrategyId, 
final String transactionProcessingStrategyName,
-            final Integer graceOnPrincipalPayment, final Integer 
recurringMoratoriumOnPrincipalPeriods, final Integer graceOnInterestPayment, 
final Integer graceOnInterestCharged,
-            final Collection<ChargeData> charges, final EnumOptionData 
accountingType, final boolean includeInBorrowerCycle, boolean useBorrowerCycle, 
final LocalDate startDate,
-            final LocalDate closeDate, final String status, final String 
externalId,
-            Collection<LoanProductBorrowerCycleVariationData> 
principalVariations,
-            Collection<LoanProductBorrowerCycleVariationData> 
interestRateVariations,
-            Collection<LoanProductBorrowerCycleVariationData> 
numberOfRepaymentVariations, Boolean multiDisburseLoan,
-            Integer maxTrancheCount, BigDecimal outstandingLoanBalance, final 
Integer graceOnArrearsAgeing, final Integer overdueDaysForNPA,
-            final EnumOptionData daysInMonthType, final EnumOptionData 
daysInYearType, final boolean isInterestRecalculationEnabled, final 
LoanProductInterestRecalculationData interestRecalculationData,
-            final Integer minimumDaysBetweenDisbursalAndFirstRepayment, 
boolean holdGuaranteeFunds,
-            final LoanProductGuaranteeData loanProductGuaranteeData, final 
BigDecimal principalThresholdForLastInstallment,
-            final boolean accountMovesOutOfNPAOnlyOnArrearsCompletion, boolean 
canDefineInstallmentAmount,
-            Integer installmentAmountInMultiplesOf, 
LoanProductConfigurableAttributes allowAttributeOverrides,
-            boolean isLinkedToFloatingInterestRates, Integer floatingRateId, 
String floatingRateName, BigDecimal interestRateDifferential,
-            BigDecimal minDifferentialLendingRate, BigDecimal 
defaultDifferentialLendingRate, BigDecimal maxDifferentialLendingRate,
-            boolean isFloatingInterestRateCalculationAllowed, final boolean 
isVariableInstallmentsAllowed,
-            final Integer minimumGapBetweenInstallments, final Integer 
maximumGapBetweenInstallments,
-            final boolean syncExpectedWithDisbursementDate, final boolean 
canUseForTopup, final boolean isEqualAmortization) {
+                           final BigDecimal principal, final BigDecimal 
minPrincipal, final BigDecimal maxPrincipal, final BigDecimal tolerance,
+                           final Integer numberOfRepayments, final Integer 
minNumberOfRepayments, final Integer maxNumberOfRepayments,
+                           final Integer repaymentEvery, final BigDecimal 
interestRatePerPeriod, final BigDecimal minInterestRatePerPeriod,
+                           final BigDecimal maxInterestRatePerPeriod, final 
BigDecimal annualInterestRate, final EnumOptionData repaymentFrequencyType,
+                           final EnumOptionData interestRateFrequencyType, 
final EnumOptionData amortizationType, final EnumOptionData interestType,
+                           final EnumOptionData interestCalculationPeriodType, 
final Boolean allowPartialPeriodInterestCalcualtion, final Long fundId,
+                           final String fundName, final Long 
transactionProcessingStrategyId, final String transactionProcessingStrategyName,
+                           final Integer graceOnPrincipalPayment, final 
Integer recurringMoratoriumOnPrincipalPeriods, final Integer 
graceOnInterestPayment, final Integer graceOnInterestCharged,
+                           final Collection<ChargeData> charges, final 
EnumOptionData accountingType, final boolean includeInBorrowerCycle, boolean 
useBorrowerCycle, final LocalDate startDate,
+                           final LocalDate closeDate, final String status, 
final String externalId,
+                           Collection<LoanProductBorrowerCycleVariationData> 
principalVariations,
+                           Collection<LoanProductBorrowerCycleVariationData> 
interestRateVariations,
+                           Collection<LoanProductBorrowerCycleVariationData> 
numberOfRepaymentVariations, Boolean multiDisburseLoan,
+                           Integer maxTrancheCount, BigDecimal 
outstandingLoanBalance, final Integer graceOnArrearsAgeing, final Integer 
overdueDaysForNPA,
+                           final EnumOptionData daysInMonthType, final 
EnumOptionData daysInYearType, final boolean isInterestRecalculationEnabled, 
final LoanProductInterestRecalculationData interestRecalculationData,
+                           final Integer 
minimumDaysBetweenDisbursalAndFirstRepayment, boolean holdGuaranteeFunds,
+                           final LoanProductGuaranteeData 
loanProductGuaranteeData, final BigDecimal principalThresholdForLastInstallment,
+                           final boolean 
accountMovesOutOfNPAOnlyOnArrearsCompletion, boolean canDefineInstallmentAmount,
+                           Integer installmentAmountInMultiplesOf, 
LoanProductConfigurableAttributes allowAttributeOverrides,
+                           boolean isLinkedToFloatingInterestRates, Integer 
floatingRateId, String floatingRateName, BigDecimal interestRateDifferential,
+                           BigDecimal minDifferentialLendingRate, BigDecimal 
defaultDifferentialLendingRate, BigDecimal maxDifferentialLendingRate,
+                           boolean isFloatingInterestRateCalculationAllowed, 
final boolean isVariableInstallmentsAllowed,
+                           final Integer minimumGapBetweenInstallments, final 
Integer maximumGapBetweenInstallments,
+                           final boolean syncExpectedWithDisbursementDate, 
final boolean canUseForTopup, final boolean isEqualAmortization) {
         this.id = id;
         this.name = name;
         this.shortName = shortName;
@@ -710,18 +711,18 @@ public class LoanProductData implements Serializable {
     }
 
     public LoanProductData(final LoanProductData productData, final 
Collection<ChargeData> chargeOptions,
-            final Collection<ChargeData> penaltyOptions, final 
Collection<PaymentTypeData> paymentTypeOptions,
-            final Collection<CurrencyData> currencyOptions, final 
List<EnumOptionData> amortizationTypeOptions,
-            final List<EnumOptionData> interestTypeOptions, final 
List<EnumOptionData> interestCalculationPeriodTypeOptions,
-            final List<EnumOptionData> repaymentFrequencyTypeOptions, final 
List<EnumOptionData> interestRateFrequencyTypeOptions,
-            final Collection<FundData> fundOptions, final 
Collection<TransactionProcessingStrategyData> transactionStrategyOptions,
-            final Map<String, List<GLAccountData>> accountingMappingOptions, 
final List<EnumOptionData> accountingRuleOptions,
-            final List<EnumOptionData> valueConditionTypeOptions, final 
List<EnumOptionData> daysInMonthTypeOptions,
-            final List<EnumOptionData> daysInYearTypeOptions, final 
List<EnumOptionData> interestRecalculationCompoundingTypeOptions,
-            final List<EnumOptionData> rescheduleStrategyTypeOptions, final 
List<EnumOptionData> interestRecalculationFrequencyTypeOptions,
-            final List<EnumOptionData> 
preCloseInterestCalculationStrategyOptions, final List<FloatingRateData> 
floatingRateOptions,
-            final List<EnumOptionData> interestRecalculationNthDayTypeOptions,
-            final List<EnumOptionData> 
interestRecalculationDayOfWeekTypeOptions) {
+                           final Collection<ChargeData> penaltyOptions, final 
Collection<PaymentTypeData> paymentTypeOptions,
+                           final Collection<CurrencyData> currencyOptions, 
final List<EnumOptionData> amortizationTypeOptions,
+                           final List<EnumOptionData> interestTypeOptions, 
final List<EnumOptionData> interestCalculationPeriodTypeOptions,
+                           final List<EnumOptionData> 
repaymentFrequencyTypeOptions, final List<EnumOptionData> 
interestRateFrequencyTypeOptions,
+                           final Collection<FundData> fundOptions, final 
Collection<TransactionProcessingStrategyData> transactionStrategyOptions,
+                           final Map<String, List<GLAccountData>> 
accountingMappingOptions, final List<EnumOptionData> accountingRuleOptions,
+                           final List<EnumOptionData> 
valueConditionTypeOptions, final List<EnumOptionData> daysInMonthTypeOptions,
+                           final List<EnumOptionData> daysInYearTypeOptions, 
final List<EnumOptionData> interestRecalculationCompoundingTypeOptions,
+                           final List<EnumOptionData> 
rescheduleStrategyTypeOptions, final List<EnumOptionData> 
interestRecalculationFrequencyTypeOptions,
+                           final List<EnumOptionData> 
preCloseInterestCalculationStrategyOptions, final List<FloatingRateData> 
floatingRateOptions,
+                           final List<EnumOptionData> 
interestRecalculationNthDayTypeOptions,
+                           final List<EnumOptionData> 
interestRecalculationDayOfWeekTypeOptions) {
         this.id = productData.id;
         this.name = productData.name;
         this.shortName = productData.shortName;
@@ -1134,17 +1135,15 @@ public class LoanProductData implements Serializable {
         if (isInterestRecalculationEnabled()) { return 
this.interestRecalculationData.getRecalculationCompoundingFrequencyInterval(); }
         return null;
     }
+
+    @FindBugsSuppressWarnings("NP_BOOLEAN_RETURN_NULL")
     public Boolean isCompoundingToBePostedAsTransaction() {
-        if (isInterestRecalculationEnabled()) {
-            return 
this.interestRecalculationData.isCompoundingToBePostedAsTransaction();
-        } else {
-            return 
!this.interestRecalculationData.isCompoundingToBePostedAsTransaction();
-        }
+        return isInterestRecalculationEnabled() ? 
this.interestRecalculationData.isCompoundingToBePostedAsTransaction() : null;
     }
+
+    @FindBugsSuppressWarnings("NP_BOOLEAN_RETURN_NULL")
     public Boolean allowCompoundingOnEod() {
-        if (isInterestRecalculationEnabled()) {
-            return this.interestRecalculationData.allowCompoundingOnEod();
-        } return !this.interestRecalculationData.allowCompoundingOnEod();
+        return isInterestRecalculationEnabled() ? 
this.interestRecalculationData.allowCompoundingOnEod() : null;
     }
 
     public boolean canDefineInstallmentAmount() {
@@ -1200,9 +1199,9 @@ public class LoanProductData implements Serializable {
         return syncExpectedWithDisbursementDate;
     }
 
-        public boolean canUseForTopup() {
-            return this.canUseForTopup;
-        }
+    public boolean canUseForTopup() {
+        return this.canUseForTopup;
+    }
 
     public BigDecimal getInterestRateDifferential() {
         return this.interestRateDifferential;

Reply via email to