diff --git a/mifosng-provider/src/main/java/org/mifosplatform/infrastructure/configuration/data/GlobalConfigurationPropertyData.java b/mifosng-provider/src/main/java/org/mifosplatform/infrastructure/configuration/data/GlobalConfigurationPropertyData.java index f71f7c804..ff6bef7ed 100755 --- a/mifosng-provider/src/main/java/org/mifosplatform/infrastructure/configuration/data/GlobalConfigurationPropertyData.java +++ b/mifosng-provider/src/main/java/org/mifosplatform/infrastructure/configuration/data/GlobalConfigurationPropertyData.java @@ -20,21 +20,25 @@ public class GlobalConfigurationPropertyData { private final Long id; @SuppressWarnings("unused") private final String description; + @SuppressWarnings("unused") + private final boolean trapDoor; - public GlobalConfigurationPropertyData(final String name, final boolean enabled, final Long value, final String description) { + public GlobalConfigurationPropertyData(final String name, final boolean enabled, final Long value, final String description, final boolean trapDoor) { this.name = name; this.enabled = enabled; this.value = value; this.id = null; this.description = description; + this.trapDoor = trapDoor; } public GlobalConfigurationPropertyData(final String name, final boolean enabled, final Long value, final Long id, - final String description) { + final String description, final boolean isTrapDoor) { this.name = name; this.enabled = enabled; this.value = value; this.id = id; this.description = description; + this.trapDoor = isTrapDoor; } } \ No newline at end of file diff --git a/mifosng-provider/src/main/java/org/mifosplatform/infrastructure/configuration/service/ConfigurationReadPlatformServiceImpl.java b/mifosng-provider/src/main/java/org/mifosplatform/infrastructure/configuration/service/ConfigurationReadPlatformServiceImpl.java index ccf83f165..f3117f14f 100755 --- a/mifosng-provider/src/main/java/org/mifosplatform/infrastructure/configuration/service/ConfigurationReadPlatformServiceImpl.java +++ b/mifosng-provider/src/main/java/org/mifosplatform/infrastructure/configuration/service/ConfigurationReadPlatformServiceImpl.java @@ -43,11 +43,9 @@ public class ConfigurationReadPlatformServiceImpl implements ConfigurationReadPl if (survey) { sql += " JOIN x_registered_table on x_registered_table.registered_table_name = c.name "; - sql += " WHERE x_registered_table.category =" + DataTableApiConstant.CATEGORY_PPI + " and c.is_trap_door=0"; + sql += " WHERE x_registered_table.category =" + DataTableApiConstant.CATEGORY_PPI; - } else { - sql += " WHERE c.is_trap_door=0"; - } + } sql += " order by c.id"; final List globalConfiguration = this.jdbcTemplate.query(sql, this.rm, new Object[] {}); @@ -80,7 +78,7 @@ public class ConfigurationReadPlatformServiceImpl implements ConfigurationReadPl final String description = rs.getString("description"); final Long id = rs.getLong("id"); final boolean isTrapDoor = rs.getBoolean("is_trap_door"); - return new GlobalConfigurationPropertyData(name, enabled, value, id, description); + return new GlobalConfigurationPropertyData(name, enabled, value, id, description, isTrapDoor); } } diff --git a/mifosng-provider/src/main/java/org/mifosplatform/organisation/monetary/domain/Money.java b/mifosng-provider/src/main/java/org/mifosplatform/organisation/monetary/domain/Money.java index 39c3a6266..af8dc4b41 100644 --- a/mifosng-provider/src/main/java/org/mifosplatform/organisation/monetary/domain/Money.java +++ b/mifosng-provider/src/main/java/org/mifosplatform/organisation/monetary/domain/Money.java @@ -76,7 +76,7 @@ public class Money implements Comparable { final double existingVal = amountScaled.doubleValue(); amountScaled = BigDecimal.valueOf(roundToMultiplesOf(existingVal, inMultiplesOf)); } - this.amount = amountScaled.setScale(this.currencyDigitsAfterDecimal, RoundingMode.valueOf(MoneyHelper.getRoundingMode())); + this.amount = amountScaled.setScale(this.currencyDigitsAfterDecimal, MoneyHelper.getRoundingMode()); } public static double roundToMultiplesOf(final double existingVal, final Integer inMultiplesOf) { diff --git a/mifosng-provider/src/main/java/org/mifosplatform/organisation/monetary/domain/MoneyHelper.java b/mifosng-provider/src/main/java/org/mifosplatform/organisation/monetary/domain/MoneyHelper.java index fa4644aac..e8c4f3121 100644 --- a/mifosng-provider/src/main/java/org/mifosplatform/organisation/monetary/domain/MoneyHelper.java +++ b/mifosng-provider/src/main/java/org/mifosplatform/organisation/monetary/domain/MoneyHelper.java @@ -5,6 +5,8 @@ */ package org.mifosplatform.organisation.monetary.domain; +import java.math.RoundingMode; + import javax.annotation.PostConstruct; import org.mifosplatform.infrastructure.configuration.domain.ConfigurationDomainService; @@ -14,7 +16,7 @@ import org.springframework.stereotype.Component; @Component public class MoneyHelper { - private static int roundingModeIntValue = -1; + private static RoundingMode roundingMode = null; private static ConfigurationDomainService staticConfigurationDomainService; @Autowired @@ -26,11 +28,11 @@ public class MoneyHelper { } - public static int getRoundingMode() { - if (roundingModeIntValue == -1) { - roundingModeIntValue = staticConfigurationDomainService.getRoundingMode(); + public static RoundingMode getRoundingMode() { + if (roundingMode == null) { + roundingMode = RoundingMode.valueOf(staticConfigurationDomainService.getRoundingMode()); } - return roundingModeIntValue; + return roundingMode; } } diff --git a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/loanaccount/domain/Loan.java b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/loanaccount/domain/Loan.java index 18c996b75..5b1269526 100755 --- a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/loanaccount/domain/Loan.java +++ b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/loanaccount/domain/Loan.java @@ -2323,7 +2323,7 @@ public class Loan extends AbstractPersistable { final InterestMethod interestMethod = this.loanRepaymentScheduleDetail.getInterestMethod(); final LoanScheduleGenerator loanScheduleGenerator = scheduleGeneratorDTO.getLoanScheduleFactory().create(interestMethod); - final RoundingMode roundingMode = RoundingMode.valueOf(MoneyHelper.getRoundingMode()); + final RoundingMode roundingMode = MoneyHelper.getRoundingMode(); final MathContext mc = new MathContext(8, roundingMode); final Integer loanTermFrequency = this.termFrequency; @@ -4682,7 +4682,7 @@ public class Loan extends AbstractPersistable { final InterestMethod interestMethod = this.loanRepaymentScheduleDetail.getInterestMethod(); final LoanScheduleGenerator loanScheduleGenerator = generatorDTO.getLoanScheduleFactory().create(interestMethod); - final RoundingMode roundingMode = RoundingMode.valueOf(MoneyHelper.getRoundingMode()); + final RoundingMode roundingMode = MoneyHelper.getRoundingMode(); final MathContext mc = new MathContext(8, roundingMode); final LoanApplicationTerms loanApplicationTerms = constructLoanApplicationTerms(generatorDTO.getApplicationCurrency(), @@ -4745,7 +4745,7 @@ public class Loan extends AbstractPersistable { final InterestMethod interestMethod = this.loanRepaymentScheduleDetail.getInterestMethod(); final LoanScheduleGenerator loanScheduleGenerator = loanScheduleFactory.create(interestMethod); - final RoundingMode roundingMode = RoundingMode.valueOf(MoneyHelper.getRoundingMode()); + final RoundingMode roundingMode = MoneyHelper.getRoundingMode(); final MathContext mc = new MathContext(8, roundingMode); final Integer loanTermFrequency = this.termFrequency; diff --git a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/loanaccount/domain/LoanCharge.java b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/loanaccount/domain/LoanCharge.java index f7a255e2f..ef7f408d4 100755 --- a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/loanaccount/domain/LoanCharge.java +++ b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/loanaccount/domain/LoanCharge.java @@ -553,7 +553,7 @@ public class LoanCharge extends AbstractPersistable { BigDecimal percentageOf = BigDecimal.ZERO; if (isGreaterThanZero(value)) { - final MathContext mc = new MathContext(8, RoundingMode.valueOf(MoneyHelper.getRoundingMode())); + final MathContext mc = new MathContext(8, MoneyHelper.getRoundingMode()); final BigDecimal multiplicand = percentage.divide(BigDecimal.valueOf(100l), mc); percentageOf = value.multiply(multiplicand, mc); } diff --git a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/loanaccount/guarantor/service/GuarantorDomainServiceImpl.java b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/loanaccount/guarantor/service/GuarantorDomainServiceImpl.java index 53ff34026..0803cb902 100755 --- a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/loanaccount/guarantor/service/GuarantorDomainServiceImpl.java +++ b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/loanaccount/guarantor/service/GuarantorDomainServiceImpl.java @@ -239,7 +239,7 @@ public class GuarantorDomainServiceImpl implements GuarantorDomainService { BigDecimal remainingAmount = guarantorFundingDetails.getAmountRemaining(); if (loan.getGuaranteeAmount().compareTo(loan.getPrincpal().getAmount()) == 1) { remainingAmount = remainingAmount.multiply(loan.getPrincpal().getAmount()).divide(loan.getGuaranteeAmount(), - RoundingMode.valueOf(MoneyHelper.getRoundingMode())); + MoneyHelper.getRoundingMode()); } AccountTransferDTO accountTransferDTO = new AccountTransferDTO(transactionDate, remainingAmount, fromAccountType, toAccountType, fromAccountId, toAccountId, description, locale, fmt, paymentDetail, fromTransferType, @@ -381,7 +381,7 @@ public class GuarantorDomainServiceImpl implements GuarantorDomainService { BigDecimal totalGuaranteeAmount = loan.getGuaranteeAmount(); BigDecimal principal = loan.getPrincpal().getAmount(); if ((amountForRelease != null) && (totalGuaranteeAmount != null)) { - amountForRelease = amountForRelease.multiply(totalGuaranteeAmount).divide(principal, RoundingMode.valueOf(MoneyHelper.getRoundingMode())); + amountForRelease = amountForRelease.multiply(totalGuaranteeAmount).divide(principal, MoneyHelper.getRoundingMode()); List accountOnHoldTransactions = new ArrayList<>(); BigDecimal amountLeft = calculateAndRelaseGuarantorFunds(externalGuarantorList, guarantorGuarantee, amountForRelease, @@ -467,7 +467,7 @@ public class GuarantorDomainServiceImpl implements GuarantorDomainService { BigDecimal amountLeft = amountForRelease; for (GuarantorFundingDetails fundingDetails : guarantorList) { BigDecimal guarantorAmount = amountForRelease.multiply(fundingDetails.getAmountRemaining()).divide(totalGuaranteeAmount, - RoundingMode.valueOf(MoneyHelper.getRoundingMode())); + MoneyHelper.getRoundingMode()); if (fundingDetails.getAmountRemaining().compareTo(guarantorAmount) < 1) { guarantorAmount = fundingDetails.getAmountRemaining(); } diff --git a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/loanaccount/loanschedule/domain/LoanApplicationTerms.java b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/loanaccount/loanschedule/domain/LoanApplicationTerms.java index b89ae080b..ae48943a8 100644 --- a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/loanaccount/loanschedule/domain/LoanApplicationTerms.java +++ b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/loanaccount/loanschedule/domain/LoanApplicationTerms.java @@ -403,7 +403,7 @@ public final class LoanApplicationTerms { } else if (this.actualFixedEmiAmount != null) { final Money difference = this.principal.minus(totalCumulativePrincipalToDate); final Money principalThreshold = principalForPeriod.multipliedBy(this.principalThresholdForLastInstalment).dividedBy(100, - RoundingMode.valueOf(MoneyHelper.getRoundingMode())); + MoneyHelper.getRoundingMode()); if (difference.isLessThan(principalThreshold)) { adjusted = principalForPeriod.plus(difference.abs()); } diff --git a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/loanaccount/loanschedule/service/LoanScheduleAssembler.java b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/loanaccount/loanschedule/service/LoanScheduleAssembler.java index 5275f9beb..8a3d070ca 100644 --- a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/loanaccount/loanschedule/service/LoanScheduleAssembler.java +++ b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/loanaccount/loanschedule/service/LoanScheduleAssembler.java @@ -444,7 +444,7 @@ public class LoanScheduleAssembler { final LoanScheduleGenerator loanScheduleGenerator = this.loanScheduleFactory.create(loanApplicationTerms.getInterestMethod()); - final RoundingMode roundingMode = RoundingMode.valueOf(MoneyHelper.getRoundingMode()); + final RoundingMode roundingMode = MoneyHelper.getRoundingMode(); final MathContext mc = new MathContext(8, roundingMode); HolidayDetailDTO detailDTO = new HolidayDetailDTO(isHolidayEnabled, holidays, workingDays); @@ -455,7 +455,7 @@ public class LoanScheduleAssembler { public LoanScheduleModel assembleForInterestRecalculation(final LoanApplicationTerms loanApplicationTerms, final Long officeId, List transactions, final Set loanCharges, final LoanRepaymentScheduleTransactionProcessor loanRepaymentScheduleTransactionProcessor) { - final RoundingMode roundingMode = RoundingMode.valueOf(MoneyHelper.getRoundingMode()); + final RoundingMode roundingMode = MoneyHelper.getRoundingMode(); final MathContext mc = new MathContext(8, roundingMode); final boolean isHolidayEnabled = this.configurationDomainService.isRescheduleRepaymentsOnHolidaysEnabled(); @@ -474,7 +474,7 @@ public class LoanScheduleAssembler { final Long officeId, List loanTransactions, final LoanRepaymentScheduleTransactionProcessor loanRepaymentScheduleTransactionProcessor) { final LoanScheduleGenerator loanScheduleGenerator = this.loanScheduleFactory.create(loanApplicationTerms.getInterestMethod()); - final RoundingMode roundingMode = RoundingMode.valueOf(MoneyHelper.getRoundingMode()); + final RoundingMode roundingMode = MoneyHelper.getRoundingMode(); final MathContext mc = new MathContext(8, roundingMode); final boolean isHolidayEnabled = this.configurationDomainService.isRescheduleRepaymentsOnHolidaysEnabled(); diff --git a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/loanaccount/rescheduleloan/service/LoanReschedulePreviewPlatformServiceImpl.java b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/loanaccount/rescheduleloan/service/LoanReschedulePreviewPlatformServiceImpl.java index c4dd40514..3d37e656f 100644 --- a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/loanaccount/rescheduleloan/service/LoanReschedulePreviewPlatformServiceImpl.java +++ b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/loanaccount/rescheduleloan/service/LoanReschedulePreviewPlatformServiceImpl.java @@ -81,7 +81,7 @@ public class LoanReschedulePreviewPlatformServiceImpl implements LoanRescheduleP final ApplicationCurrency applicationCurrency = this.applicationCurrencyRepository.findOneWithNotFoundDetection(currency); final InterestMethod interestMethod = loan.getLoanRepaymentScheduleDetail().getInterestMethod(); - final RoundingMode roundingMode = RoundingMode.valueOf(MoneyHelper.getRoundingMode()); + final RoundingMode roundingMode = MoneyHelper.getRoundingMode(); final MathContext mathContext = new MathContext(8, roundingMode); List oldPeriods = this.loanScheduleHistoryWritePlatformService .createLoanScheduleArchive(loan.getRepaymentScheduleInstallments(), loan, loanRescheduleRequest); diff --git a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/loanaccount/rescheduleloan/service/LoanRescheduleRequestWritePlatformServiceImpl.java b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/loanaccount/rescheduleloan/service/LoanRescheduleRequestWritePlatformServiceImpl.java index ddf0867f9..a983ac96d 100644 --- a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/loanaccount/rescheduleloan/service/LoanRescheduleRequestWritePlatformServiceImpl.java +++ b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/loanaccount/rescheduleloan/service/LoanRescheduleRequestWritePlatformServiceImpl.java @@ -292,7 +292,7 @@ public class LoanRescheduleRequestWritePlatformServiceImpl implements LoanResche final ApplicationCurrency applicationCurrency = this.applicationCurrencyRepository.findOneWithNotFoundDetection(currency); final InterestMethod interestMethod = loan.getLoanRepaymentScheduleDetail().getInterestMethod(); - final RoundingMode roundingMode = RoundingMode.valueOf(MoneyHelper.getRoundingMode()); + final RoundingMode roundingMode = MoneyHelper.getRoundingMode(); final MathContext mathContext = new MathContext(8, roundingMode); Collection loanRepaymentScheduleHistoryList = this.loanScheduleHistoryWritePlatformService diff --git a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/loanaccount/service/LoanAccrualWritePlatformServiceImpl.java b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/loanaccount/service/LoanAccrualWritePlatformServiceImpl.java index f8edaabb6..a4e69ee6f 100755 --- a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/loanaccount/service/LoanAccrualWritePlatformServiceImpl.java +++ b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/loanaccount/service/LoanAccrualWritePlatformServiceImpl.java @@ -141,7 +141,7 @@ public class LoanAccrualWritePlatformServiceImpl implements LoanAccrualWritePlat double iterest = interestPerDay * daysToBeAccrued; interestportion = BigDecimal.valueOf(iterest); } - interestportion = interestportion.setScale(accrualData.getCurrencyData().decimalPlaces(), RoundingMode.valueOf(MoneyHelper.getRoundingMode())); + interestportion = interestportion.setScale(accrualData.getCurrencyData().decimalPlaces(), MoneyHelper.getRoundingMode()); BigDecimal totalAccInterest = accrualData.getAccruedInterestIncome(); BigDecimal totalAccPenalty = accrualData.getAccruedPenaltyIncome(); diff --git a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/savings/domain/SavingsAccountCharge.java b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/savings/domain/SavingsAccountCharge.java index 33421ac53..fea8e4630 100644 --- a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/savings/domain/SavingsAccountCharge.java +++ b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/savings/domain/SavingsAccountCharge.java @@ -528,7 +528,7 @@ public class SavingsAccountCharge extends AbstractPersistable { BigDecimal percentageOf = BigDecimal.ZERO; if (isGreaterThanZero(value)) { - final MathContext mc = new MathContext(8, RoundingMode.valueOf(MoneyHelper.getRoundingMode())); + final MathContext mc = new MathContext(8, MoneyHelper.getRoundingMode()); final BigDecimal multiplicand = percentage.divide(BigDecimal.valueOf(100l), mc); percentageOf = value.multiply(multiplicand, mc); } diff --git a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/savings/domain/interest/AnnualCompoundingPeriod.java b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/savings/domain/interest/AnnualCompoundingPeriod.java index 046c816b3..0340bf92a 100644 --- a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/savings/domain/interest/AnnualCompoundingPeriod.java +++ b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/savings/domain/interest/AnnualCompoundingPeriod.java @@ -72,14 +72,14 @@ public class AnnualCompoundingPeriod implements CompoundingPeriod { BigDecimal interestEarned = BigDecimal.ZERO; if (cumulativeBalance.compareTo(BigDecimal.ZERO) != 0 && numberOfDays > 0) { final BigDecimal averageDailyBalance = cumulativeBalance.divide(BigDecimal.valueOf(numberOfDays), MathContext.DECIMAL64) - .setScale(9, RoundingMode.valueOf(MoneyHelper.getRoundingMode())); + .setScale(9, MoneyHelper.getRoundingMode()); final BigDecimal multiplicand = BigDecimal.ONE.divide(BigDecimal.valueOf(daysInYear), MathContext.DECIMAL64); final BigDecimal dailyInterestRate = interestRateAsFraction.multiply(multiplicand, MathContext.DECIMAL64); final BigDecimal periodicInterestRate = dailyInterestRate.multiply(BigDecimal.valueOf(numberOfDays), MathContext.DECIMAL64); if (averageDailyBalance.compareTo(minBalanceForInterestCalculation) >= 0) { interestEarned = averageDailyBalance.multiply(periodicInterestRate, MathContext.DECIMAL64).setScale(9, - RoundingMode.valueOf(MoneyHelper.getRoundingMode())); + MoneyHelper.getRoundingMode()); } } diff --git a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/savings/domain/interest/BiAnnualCompoundingPeriod.java b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/savings/domain/interest/BiAnnualCompoundingPeriod.java index a6edf7641..43ae86ee9 100644 --- a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/savings/domain/interest/BiAnnualCompoundingPeriod.java +++ b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/savings/domain/interest/BiAnnualCompoundingPeriod.java @@ -72,14 +72,14 @@ public class BiAnnualCompoundingPeriod implements CompoundingPeriod { BigDecimal interestEarned = BigDecimal.ZERO; if (cumulativeBalance.compareTo(BigDecimal.ZERO) != 0 && numberOfDays > 0) { final BigDecimal averageDailyBalance = cumulativeBalance.divide(BigDecimal.valueOf(numberOfDays), MathContext.DECIMAL64) - .setScale(9, RoundingMode.valueOf(MoneyHelper.getRoundingMode())); + .setScale(9, MoneyHelper.getRoundingMode()); final BigDecimal multiplicand = BigDecimal.ONE.divide(BigDecimal.valueOf(daysInYear), MathContext.DECIMAL64); final BigDecimal dailyInterestRate = interestRateAsFraction.multiply(multiplicand, MathContext.DECIMAL64); final BigDecimal periodicInterestRate = dailyInterestRate.multiply(BigDecimal.valueOf(numberOfDays), MathContext.DECIMAL64); if (averageDailyBalance.compareTo(minBalanceForInterestCalculation) >= 0) { interestEarned = averageDailyBalance.multiply(periodicInterestRate, MathContext.DECIMAL64).setScale(9, - RoundingMode.valueOf(MoneyHelper.getRoundingMode())); + MoneyHelper.getRoundingMode()); } } diff --git a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/savings/domain/interest/EndOfDayBalance.java b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/savings/domain/interest/EndOfDayBalance.java index 53ad518a3..aa35ed6db 100644 --- a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/savings/domain/interest/EndOfDayBalance.java +++ b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/savings/domain/interest/EndOfDayBalance.java @@ -45,7 +45,7 @@ public class EndOfDayBalance { final BigDecimal daysAsBigDecimal = BigDecimal.valueOf(this.numberOfDays); final BigDecimal realBalanceForInterestCalculation = this.endOfDayBalance.getAmount().add(interestToCompound); return realBalanceForInterestCalculation.multiply(daysAsBigDecimal, MathContext.DECIMAL64).setScale(9, - RoundingMode.valueOf(MoneyHelper.getRoundingMode())); + MoneyHelper.getRoundingMode()); } public BigDecimal calculateInterestOnBalance(final BigDecimal interestToCompound, final BigDecimal interestRateAsFraction, @@ -56,10 +56,10 @@ public class EndOfDayBalance { final BigDecimal periodicInterestRate = dailyInterestRate.multiply(BigDecimal.valueOf(this.numberOfDays), MathContext.DECIMAL64); final BigDecimal realBalanceForInterestCalculation = this.endOfDayBalance.getAmount().add(interestToCompound); - BigDecimal interest = BigDecimal.ZERO.setScale(9, RoundingMode.valueOf(MoneyHelper.getRoundingMode())); + BigDecimal interest = BigDecimal.ZERO.setScale(9, MoneyHelper.getRoundingMode()); if (realBalanceForInterestCalculation.compareTo(minBalanceForInterestCalculation) >= 0) { interest = realBalanceForInterestCalculation.multiply(periodicInterestRate, MathContext.DECIMAL64).setScale(9, - RoundingMode.valueOf(MoneyHelper.getRoundingMode())); + MoneyHelper.getRoundingMode()); } return interest; } @@ -83,10 +83,10 @@ public class EndOfDayBalance { final double interestRateForCompoundingPeriodPowered = Math.pow(interestRateForCompoundingPeriodPlusOne.doubleValue(), Integer.valueOf(this.numberOfDays).doubleValue()); - BigDecimal futureValue = presentValue.setScale(9, RoundingMode.valueOf(MoneyHelper.getRoundingMode())); + BigDecimal futureValue = presentValue.setScale(9, MoneyHelper.getRoundingMode()); if (presentValue.compareTo(minBalanceForInterestCalculation) >= 0) { futureValue = presentValue.multiply(BigDecimal.valueOf(interestRateForCompoundingPeriodPowered), MathContext.DECIMAL64) - .setScale(9, RoundingMode.valueOf(MoneyHelper.getRoundingMode())); + .setScale(9, MoneyHelper.getRoundingMode()); } return futureValue.subtract(presentValue); } diff --git a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/savings/domain/interest/MonthlyCompoundingPeriod.java b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/savings/domain/interest/MonthlyCompoundingPeriod.java index b93abc56a..519b4c127 100644 --- a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/savings/domain/interest/MonthlyCompoundingPeriod.java +++ b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/savings/domain/interest/MonthlyCompoundingPeriod.java @@ -72,14 +72,14 @@ public class MonthlyCompoundingPeriod implements CompoundingPeriod { BigDecimal interestEarned = BigDecimal.ZERO; if (cumulativeBalance.compareTo(BigDecimal.ZERO) != 0 && numberOfDays > 0) { final BigDecimal averageDailyBalance = cumulativeBalance.divide(BigDecimal.valueOf(numberOfDays), MathContext.DECIMAL64) - .setScale(9, RoundingMode.valueOf(MoneyHelper.getRoundingMode())); + .setScale(9, MoneyHelper.getRoundingMode()); final BigDecimal multiplicand = BigDecimal.ONE.divide(BigDecimal.valueOf(daysInYear), MathContext.DECIMAL64); final BigDecimal dailyInterestRate = interestRateAsFraction.multiply(multiplicand, MathContext.DECIMAL64); final BigDecimal periodicInterestRate = dailyInterestRate.multiply(BigDecimal.valueOf(numberOfDays), MathContext.DECIMAL64); if (averageDailyBalance.compareTo(minBalanceForInterestCalculation) >= 0) { interestEarned = averageDailyBalance.multiply(periodicInterestRate, MathContext.DECIMAL64).setScale(9, - RoundingMode.valueOf(MoneyHelper.getRoundingMode())); + MoneyHelper.getRoundingMode()); } } diff --git a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/savings/domain/interest/QuarterlyCompoundingPeriod.java b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/savings/domain/interest/QuarterlyCompoundingPeriod.java index 1cd365bc7..7b8d50c7c 100644 --- a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/savings/domain/interest/QuarterlyCompoundingPeriod.java +++ b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/savings/domain/interest/QuarterlyCompoundingPeriod.java @@ -72,14 +72,14 @@ public class QuarterlyCompoundingPeriod implements CompoundingPeriod { BigDecimal interestEarned = BigDecimal.ZERO; if (cumulativeBalance.compareTo(BigDecimal.ZERO) != 0 && numberOfDays > 0) { final BigDecimal averageDailyBalance = cumulativeBalance.divide(BigDecimal.valueOf(numberOfDays), MathContext.DECIMAL64) - .setScale(9, RoundingMode.valueOf(MoneyHelper.getRoundingMode())); + .setScale(9, MoneyHelper.getRoundingMode()); final BigDecimal multiplicand = BigDecimal.ONE.divide(BigDecimal.valueOf(daysInYear), MathContext.DECIMAL64); final BigDecimal dailyInterestRate = interestRateAsFraction.multiply(multiplicand, MathContext.DECIMAL64); final BigDecimal periodicInterestRate = dailyInterestRate.multiply(BigDecimal.valueOf(numberOfDays), MathContext.DECIMAL64); if (averageDailyBalance.compareTo(minBalanceForInterestCalculation) >= 0) { interestEarned = averageDailyBalance.multiply(periodicInterestRate, MathContext.DECIMAL64).setScale(9, - RoundingMode.valueOf(MoneyHelper.getRoundingMode())); + MoneyHelper.getRoundingMode()); } } diff --git a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/savings/service/DepositAccountWritePlatformServiceJpaRepositoryImpl.java b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/savings/service/DepositAccountWritePlatformServiceJpaRepositoryImpl.java index 858a01bfd..770b50890 100644 --- a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/savings/service/DepositAccountWritePlatformServiceJpaRepositoryImpl.java +++ b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/savings/service/DepositAccountWritePlatformServiceJpaRepositoryImpl.java @@ -467,7 +467,7 @@ public class DepositAccountWritePlatformServiceJpaRepositoryImpl implements Depo checkClientOrGroupActive(account); final LocalDate today = DateUtils.getLocalDateOfTenant(); - final MathContext mc = new MathContext(15, RoundingMode.valueOf(MoneyHelper.getRoundingMode())); + final MathContext mc = new MathContext(15, MoneyHelper.getRoundingMode()); boolean isInterestTransfer = false; account.calculateInterestUsing(mc, today, isInterestTransfer, isSavingsInterestPostingAtCurrentPeriodEnd, @@ -511,7 +511,7 @@ public class DepositAccountWritePlatformServiceJpaRepositoryImpl implements Depo final Set existingReversedTransactionIds = new HashSet<>(); updateExistingTransactionsDetails(account, existingTransactionIds, existingReversedTransactionIds); final LocalDate today = DateUtils.getLocalDateOfTenant(); - final MathContext mc = new MathContext(10, RoundingMode.valueOf(MoneyHelper.getRoundingMode())); + final MathContext mc = new MathContext(10, MoneyHelper.getRoundingMode()); boolean isInterestTransfer = false; account.postInterest(mc, today, isInterestTransfer, isSavingsInterestPostingAtCurrentPeriodEnd, financialYearBeginningMonth); this.savingAccountRepository.save(account); @@ -660,7 +660,7 @@ public class DepositAccountWritePlatformServiceJpaRepositoryImpl implements Depo final Map changes = new LinkedHashMap<>(); final PaymentDetail paymentDetail = this.paymentDetailWritePlatformService.createAndPersistPaymentDetail(command, changes); - final MathContext mc = new MathContext(10, RoundingMode.valueOf(MoneyHelper.getRoundingMode())); + final MathContext mc = new MathContext(10, MoneyHelper.getRoundingMode()); account.undoTransaction(transactionId); SavingsAccountTransaction transaction = null; diff --git a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/savings/service/SavingsAccountWritePlatformServiceJpaRepositoryImpl.java b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/savings/service/SavingsAccountWritePlatformServiceJpaRepositoryImpl.java index b6e280f4d..6a2faae29 100644 --- a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/savings/service/SavingsAccountWritePlatformServiceJpaRepositoryImpl.java +++ b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/savings/service/SavingsAccountWritePlatformServiceJpaRepositoryImpl.java @@ -322,7 +322,7 @@ public class SavingsAccountWritePlatformServiceJpaRepositoryImpl implements Savi checkClientOrGroupActive(account); final LocalDate today = DateUtils.getLocalDateOfTenant(); - final MathContext mc = new MathContext(15, RoundingMode.valueOf(MoneyHelper.getRoundingMode())); + final MathContext mc = new MathContext(15, MoneyHelper.getRoundingMode()); boolean isInterestTransfer = false; account.calculateInterestUsing(mc, today, isInterestTransfer, isSavingsInterestPostingAtCurrentPeriodEnd, financialYearBeginningMonth); @@ -367,7 +367,7 @@ public class SavingsAccountWritePlatformServiceJpaRepositoryImpl implements Savi final Set existingReversedTransactionIds = new HashSet<>(); updateExistingTransactionsDetails(account, existingTransactionIds, existingReversedTransactionIds); final LocalDate today = DateUtils.getLocalDateOfTenant(); - final MathContext mc = new MathContext(10, RoundingMode.valueOf(MoneyHelper.getRoundingMode())); + final MathContext mc = new MathContext(10, MoneyHelper.getRoundingMode()); boolean isInterestTransfer = false; account.postInterest(mc, today, isInterestTransfer, isSavingsInterestPostingAtCurrentPeriodEnd, financialYearBeginningMonth); @@ -415,7 +415,7 @@ public class SavingsAccountWritePlatformServiceJpaRepositoryImpl implements Savi "Savings account transaction:" + transactionId + " update not allowed for this savings type", transactionId); } final LocalDate today = DateUtils.getLocalDateOfTenant(); - final MathContext mc = new MathContext(15, RoundingMode.valueOf(MoneyHelper.getRoundingMode())); + final MathContext mc = new MathContext(15, MoneyHelper.getRoundingMode()); if (account.isNotActive()) { throwValidationForActiveStatus(SavingsApiConstants.undoTransactionAction); @@ -497,7 +497,7 @@ public class SavingsAccountWritePlatformServiceJpaRepositoryImpl implements Savi final Map changes = new LinkedHashMap<>(); final PaymentDetail paymentDetail = this.paymentDetailWritePlatformService.createAndPersistPaymentDetail(command, changes); - final MathContext mc = new MathContext(10, RoundingMode.valueOf(MoneyHelper.getRoundingMode())); + final MathContext mc = new MathContext(10, MoneyHelper.getRoundingMode()); account.undoTransaction(transactionId); // for undo withdrawal fee diff --git a/mifosng-provider/src/main/resources/sql/migrations/core_db/V266__add_rounding_mode_configuration.sql b/mifosng-provider/src/main/resources/sql/migrations/core_db/V270__add_rounding_mode_configuration.sql similarity index 100% rename from mifosng-provider/src/main/resources/sql/migrations/core_db/V266__add_rounding_mode_configuration.sql rename to mifosng-provider/src/main/resources/sql/migrations/core_db/V270__add_rounding_mode_configuration.sql diff --git a/mifosng-provider/src/test/java/org/mifosplatform/portfolio/loanaccount/AdhikarLoanRepaymentScheduleTransactionProcessorTest.java b/mifosng-provider/src/test/java/org/mifosplatform/portfolio/loanaccount/AdhikarLoanRepaymentScheduleTransactionProcessorTest.java index adba90b9a..1b7a7252f 100644 --- a/mifosng-provider/src/test/java/org/mifosplatform/portfolio/loanaccount/AdhikarLoanRepaymentScheduleTransactionProcessorTest.java +++ b/mifosng-provider/src/test/java/org/mifosplatform/portfolio/loanaccount/AdhikarLoanRepaymentScheduleTransactionProcessorTest.java @@ -6,6 +6,7 @@ package org.mifosplatform.portfolio.loanaccount; import java.lang.reflect.Field; +import java.math.RoundingMode; import java.util.List; import org.joda.time.LocalDate; @@ -33,9 +34,9 @@ public class AdhikarLoanRepaymentScheduleTransactionProcessorTest { @Before public void setUpForEachTestCase() throws Exception { - Field field = MoneyHelper.class.getDeclaredField("roundingModeIntValue"); + Field field = MoneyHelper.class.getDeclaredField("roundingMode"); field.setAccessible(true); - field.setInt(null, 6); + field.set(null, RoundingMode.HALF_EVEN); this.installments = LoanScheduleTestDataHelper.createSimpleLoanSchedule(this.july2nd, this.usDollars); this.processor = new RBILoanRepaymentScheduleTransactionProcessor();