Repository: incubator-fineract Updated Branches: refs/heads/develop 5a7fbd320 -> 2a1f634d7
http://git-wip-us.apache.org/repos/asf/incubator-fineract/blob/5ed50615/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanAssembler.java ---------------------------------------------------------------------- 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 755a751..a5f9af5 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 @@ -20,10 +20,13 @@ package org.apache.fineract.portfolio.loanaccount.service; import java.math.BigDecimal; import java.util.Arrays; +import java.util.Date; +import java.util.HashSet; import java.util.List; import java.util.Locale; import java.util.Set; +import org.apache.commons.lang.StringUtils; import org.apache.fineract.infrastructure.codes.domain.CodeValue; import org.apache.fineract.infrastructure.codes.domain.CodeValueRepositoryWrapper; import org.apache.fineract.infrastructure.configuration.domain.ConfigurationDomainService; @@ -82,7 +85,10 @@ import org.apache.fineract.useradministration.domain.AppUser; import org.joda.time.LocalDate; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; + +import com.google.gson.JsonArray; import com.google.gson.JsonElement; +import com.google.gson.JsonObject; @Service public class LoanAssembler { @@ -104,7 +110,6 @@ public class LoanAssembler { private final HolidayRepository holidayRepository; private final ConfigurationDomainService configurationDomainService; private final WorkingDaysRepositoryWrapper workingDaysRepository; - private final LoanUtilService loanUtilService; @Autowired public LoanAssembler(final FromJsonHelper fromApiJsonHelper, final LoanRepositoryWrapper loanRepository, @@ -116,7 +121,7 @@ public class LoanAssembler { final CollateralAssembler loanCollateralAssembler, final LoanSummaryWrapper loanSummaryWrapper, final LoanRepaymentScheduleTransactionProcessorFactory loanRepaymentScheduleTransactionProcessorFactory, final HolidayRepository holidayRepository, final ConfigurationDomainService configurationDomainService, - final WorkingDaysRepositoryWrapper workingDaysRepository, final LoanUtilService loanUtilService) { + final WorkingDaysRepositoryWrapper workingDaysRepository) { this.fromApiJsonHelper = fromApiJsonHelper; this.loanRepository = loanRepository; this.loanProductRepository = loanProductRepository; @@ -134,7 +139,6 @@ public class LoanAssembler { this.holidayRepository = holidayRepository; this.configurationDomainService = configurationDomainService; this.workingDaysRepository = workingDaysRepository; - this.loanUtilService = loanUtilService; } public Loan assembleFrom(final Long accountId) { @@ -188,7 +192,7 @@ public class LoanAssembler { } BigDecimal maxOutstandingLoanBalance = null; if (loanProduct.isMultiDisburseLoan()) { - disbursementDetails = this.loanUtilService.fetchDisbursementData(element.getAsJsonObject()); + disbursementDetails = fetchDisbursementData(element.getAsJsonObject()); final Locale locale = this.fromApiJsonHelper.extractLocaleParameter(element.getAsJsonObject()); maxOutstandingLoanBalance = this.fromApiJsonHelper.extractBigDecimalNamed(LoanApiConstants.maxOutstandingBalanceParameterName, element, locale); @@ -303,6 +307,41 @@ public class LoanAssembler { return loanApplication; } + public Set<LoanDisbursementDetails> fetchDisbursementData(final JsonObject command) { + final Locale locale = this.fromApiJsonHelper.extractLocaleParameter(command); + final String dateFormat = this.fromApiJsonHelper.extractDateFormatParameter(command); + Set<LoanDisbursementDetails> disbursementDatas = new HashSet<>(); + if (command.has(LoanApiConstants.disbursementDataParameterName)) { + final JsonArray disbursementDataArray = command.getAsJsonArray(LoanApiConstants.disbursementDataParameterName); + if (disbursementDataArray != null && disbursementDataArray.size() > 0) { + int i = 0; + do { + final JsonObject jsonObject = disbursementDataArray.get(i).getAsJsonObject(); + Date expectedDisbursementDate = null; + Date actualDisbursementDate = null; + BigDecimal principal = null; + + if (jsonObject.has(LoanApiConstants.disbursementDateParameterName)) { + LocalDate date = this.fromApiJsonHelper.extractLocalDateNamed(LoanApiConstants.disbursementDateParameterName, + jsonObject, dateFormat, locale); + if (date != null) { + expectedDisbursementDate = date.toDate(); + } + } + if (jsonObject.has(LoanApiConstants.disbursementPrincipalParameterName) + && jsonObject.get(LoanApiConstants.disbursementPrincipalParameterName).isJsonPrimitive() + && StringUtils.isNotBlank((jsonObject.get(LoanApiConstants.disbursementPrincipalParameterName).getAsString()))) { + principal = jsonObject.getAsJsonPrimitive(LoanApiConstants.disbursementPrincipalParameterName).getAsBigDecimal(); + } + + disbursementDatas.add(new LoanDisbursementDetails(expectedDisbursementDate, actualDisbursementDate, principal)); + i++; + } while (i < disbursementDataArray.size()); + } + } + return disbursementDatas; + } + private LoanLifecycleStateMachine defaultLoanLifecycleStateMachine() { final List<LoanStatus> allowedLoanStatuses = Arrays.asList(LoanStatus.values()); return new DefaultLoanLifecycleStateMachine(allowedLoanStatuses); http://git-wip-us.apache.org/repos/asf/incubator-fineract/blob/5ed50615/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanReadPlatformServiceImpl.java ---------------------------------------------------------------------- diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanReadPlatformServiceImpl.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanReadPlatformServiceImpl.java index 3f0e3a1..5c03080 100755 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanReadPlatformServiceImpl.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanReadPlatformServiceImpl.java @@ -35,7 +35,6 @@ import org.apache.commons.lang.StringUtils; import org.apache.fineract.accounting.common.AccountingRuleType; import org.apache.fineract.infrastructure.codes.data.CodeValueData; import org.apache.fineract.infrastructure.codes.service.CodeValueReadPlatformService; -import org.apache.fineract.infrastructure.configuration.domain.ConfigurationDomainService; import org.apache.fineract.infrastructure.core.data.EnumOptionData; import org.apache.fineract.infrastructure.core.domain.JdbcSupport; import org.apache.fineract.infrastructure.core.service.DateUtils; @@ -149,7 +148,6 @@ public class LoanReadPlatformServiceImpl implements LoanReadPlatformService { private final LoanRepaymentScheduleTransactionProcessorFactory loanRepaymentScheduleTransactionProcessorFactory; private final FloatingRatesReadPlatformService floatingRatesReadPlatformService; private final LoanUtilService loanUtilService; - private final ConfigurationDomainService configurationDomainService; @Autowired public LoanReadPlatformServiceImpl(final PlatformSecurityContext context, final LoanRepository loanRepository, @@ -162,8 +160,7 @@ public class LoanReadPlatformServiceImpl implements LoanReadPlatformService { final CalendarReadPlatformService calendarReadPlatformService, final StaffReadPlatformService staffReadPlatformService, final PaymentTypeReadPlatformService paymentTypeReadPlatformService, final LoanRepaymentScheduleTransactionProcessorFactory loanRepaymentScheduleTransactionProcessorFactory, - final FloatingRatesReadPlatformService floatingRatesReadPlatformService, final LoanUtilService loanUtilService, - final ConfigurationDomainService configurationDomainService) { + final FloatingRatesReadPlatformService floatingRatesReadPlatformService, final LoanUtilService loanUtilService) { this.context = context; this.loanRepository = loanRepository; this.loanTransactionRepository = loanTransactionRepository; @@ -183,7 +180,6 @@ public class LoanReadPlatformServiceImpl implements LoanReadPlatformService { this.loanRepaymentScheduleTransactionProcessorFactory = loanRepaymentScheduleTransactionProcessorFactory; this.floatingRatesReadPlatformService = floatingRatesReadPlatformService; this.loanUtilService = loanUtilService; - this.configurationDomainService = configurationDomainService; } @Override @@ -1563,7 +1559,6 @@ public class LoanReadPlatformServiceImpl implements LoanReadPlatformService { public Collection<LoanScheduleAccrualData> retriveScheduleAccrualData() { LoanScheduleAccrualMapper mapper = new LoanScheduleAccrualMapper(); - Date organisationStartDate = this.configurationDomainService.retrieveOrganisationStartDate(); final StringBuilder sqlBuilder = new StringBuilder(400); sqlBuilder .append("select ") @@ -1571,24 +1566,15 @@ public class LoanReadPlatformServiceImpl implements LoanReadPlatformService { .append(" where ((ls.fee_charges_amount <> if(ls.accrual_fee_charges_derived is null,0, ls.accrual_fee_charges_derived))") .append(" or ( ls.penalty_charges_amount <> if(ls.accrual_penalty_charges_derived is null,0,ls.accrual_penalty_charges_derived))") .append(" or ( ls.interest_amount <> if(ls.accrual_interest_derived is null,0,ls.accrual_interest_derived)))") - .append(" and loan.loan_status_id=:active and mpl.accounting_type=:type and loan.is_npa=0 and ls.duedate <= CURDATE() "); - if(organisationStartDate != null){ - sqlBuilder.append(" and ls.duedate > :organisationstartdate "); - } - sqlBuilder.append(" order by loan.id,ls.duedate "); - Map<String, Object> paramMap = new HashMap<>(3); - paramMap.put("active", LoanStatus.ACTIVE.getValue()); - paramMap.put("type", AccountingRuleType.ACCRUAL_PERIODIC.getValue()); - paramMap.put("organisationstartdate", formatter.print(new LocalDate(organisationStartDate))); - - return this.namedParameterJdbcTemplate.query(sqlBuilder.toString(), paramMap, mapper); + .append(" and loan.loan_status_id=? and mpl.accounting_type=? and loan.is_npa=0 and ls.duedate <= CURDATE() order by loan.id,ls.duedate"); + return this.jdbcTemplate.query(sqlBuilder.toString(), mapper, new Object[] { LoanStatus.ACTIVE.getValue(), + AccountingRuleType.ACCRUAL_PERIODIC.getValue() }); } @Override public Collection<LoanScheduleAccrualData> retrivePeriodicAccrualData(final LocalDate tillDate) { LoanSchedulePeriodicAccrualMapper mapper = new LoanSchedulePeriodicAccrualMapper(); - Date organisationStartDate = this.configurationDomainService.retrieveOrganisationStartDate(); final StringBuilder sqlBuilder = new StringBuilder(400); sqlBuilder .append("select ") @@ -1596,17 +1582,11 @@ public class LoanReadPlatformServiceImpl implements LoanReadPlatformService { .append(" where ((ls.fee_charges_amount <> if(ls.accrual_fee_charges_derived is null,0, ls.accrual_fee_charges_derived))") .append(" or (ls.penalty_charges_amount <> if(ls.accrual_penalty_charges_derived is null,0,ls.accrual_penalty_charges_derived))") .append(" or (ls.interest_amount <> if(ls.accrual_interest_derived is null,0,ls.accrual_interest_derived)))") - .append(" and loan.loan_status_id=:active and mpl.accounting_type=:type and (loan.closedon_date <= :tilldate or loan.closedon_date is null)") - .append(" and loan.is_npa=0 and (ls.duedate <= :tilldate or (ls.duedate > :tilldate and ls.fromdate < :tilldate)) "); - if(organisationStartDate != null){ - sqlBuilder.append(" and ls.duedate > :organisationstartdate "); - } - sqlBuilder.append(" order by loan.id,ls.duedate "); - Map<String, Object> paramMap = new HashMap<>(4); + .append(" and loan.loan_status_id=:active and mpl.accounting_type=:type and loan.is_npa=0 and (ls.duedate <= :tilldate or (ls.duedate > :tilldate and ls.fromdate < :tilldate)) order by loan.id,ls.duedate"); + Map<String, Object> paramMap = new HashMap<>(3); paramMap.put("active", LoanStatus.ACTIVE.getValue()); paramMap.put("type", AccountingRuleType.ACCRUAL_PERIODIC.getValue()); paramMap.put("tilldate", formatter.print(tillDate)); - paramMap.put("organisationstartdate", formatter.print(new LocalDate(organisationStartDate))); return this.namedParameterJdbcTemplate.query(sqlBuilder.toString(), paramMap, mapper); } http://git-wip-us.apache.org/repos/asf/incubator-fineract/blob/5ed50615/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanSchedularServiceImpl.java ---------------------------------------------------------------------- diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanSchedularServiceImpl.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanSchedularServiceImpl.java index 50de5d2..8c5309c 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanSchedularServiceImpl.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanSchedularServiceImpl.java @@ -171,7 +171,6 @@ public class LoanSchedularServiceImpl implements LoanSchedularService { + realCause.getMessage()); sb.append("Interest recalculation for loans failed for account:").append(loanId).append(" with message ") .append(realCause.getMessage()); - numberOfRetries = maxNumberOfRetries + 1; } i++; } http://git-wip-us.apache.org/repos/asf/incubator-fineract/blob/5ed50615/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanUtilService.java ---------------------------------------------------------------------- diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanUtilService.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanUtilService.java index ce63594..423e346 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanUtilService.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanUtilService.java @@ -19,15 +19,9 @@ package org.apache.fineract.portfolio.loanaccount.service; import java.math.BigDecimal; -import java.util.Date; -import java.util.HashSet; import java.util.List; -import java.util.Locale; -import java.util.Set; -import org.apache.commons.lang.StringUtils; import org.apache.fineract.infrastructure.configuration.domain.ConfigurationDomainService; -import org.apache.fineract.infrastructure.core.serialization.FromJsonHelper; import org.apache.fineract.organisation.holiday.domain.Holiday; import org.apache.fineract.organisation.holiday.domain.HolidayRepository; import org.apache.fineract.organisation.holiday.domain.HolidayStatusType; @@ -36,10 +30,8 @@ import org.apache.fineract.organisation.monetary.domain.ApplicationCurrencyRepos import org.apache.fineract.organisation.monetary.domain.MonetaryCurrency; import org.apache.fineract.organisation.workingdays.domain.WorkingDays; import org.apache.fineract.organisation.workingdays.domain.WorkingDaysRepositoryWrapper; -import org.apache.fineract.portfolio.calendar.data.CalendarHistoryDataWrapper; import org.apache.fineract.portfolio.calendar.domain.Calendar; import org.apache.fineract.portfolio.calendar.domain.CalendarEntityType; -import org.apache.fineract.portfolio.calendar.domain.CalendarHistory; import org.apache.fineract.portfolio.calendar.domain.CalendarInstance; import org.apache.fineract.portfolio.calendar.domain.CalendarInstanceRepository; import org.apache.fineract.portfolio.calendar.service.CalendarUtils; @@ -47,20 +39,15 @@ import org.apache.fineract.portfolio.floatingrates.data.FloatingRateDTO; import org.apache.fineract.portfolio.floatingrates.data.FloatingRatePeriodData; import org.apache.fineract.portfolio.floatingrates.exception.FloatingRateNotFoundException; import org.apache.fineract.portfolio.floatingrates.service.FloatingRatesReadPlatformService; -import org.apache.fineract.portfolio.loanaccount.api.LoanApiConstants; import org.apache.fineract.portfolio.loanaccount.data.HolidayDetailDTO; import org.apache.fineract.portfolio.loanaccount.data.ScheduleGeneratorDTO; import org.apache.fineract.portfolio.loanaccount.domain.Loan; -import org.apache.fineract.portfolio.loanaccount.domain.LoanDisbursementDetails; import org.apache.fineract.portfolio.loanaccount.loanschedule.domain.LoanScheduleGeneratorFactory; import org.apache.fineract.portfolio.loanproduct.domain.LoanProductRelatedDetail; import org.joda.time.LocalDate; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; -import com.google.gson.JsonArray; -import com.google.gson.JsonObject; - @Component public class LoanUtilService { @@ -71,14 +58,12 @@ public class LoanUtilService { private final WorkingDaysRepositoryWrapper workingDaysRepository; private final LoanScheduleGeneratorFactory loanScheduleFactory; private final FloatingRatesReadPlatformService floatingRatesReadPlatformService; - private final FromJsonHelper fromApiJsonHelper; @Autowired public LoanUtilService(final ApplicationCurrencyRepositoryWrapper applicationCurrencyRepository, final CalendarInstanceRepository calendarInstanceRepository, final ConfigurationDomainService configurationDomainService, final HolidayRepository holidayRepository, final WorkingDaysRepositoryWrapper workingDaysRepository, - final LoanScheduleGeneratorFactory loanScheduleFactory, final FloatingRatesReadPlatformService floatingRatesReadPlatformService, - final FromJsonHelper fromApiJsonHelper) { + final LoanScheduleGeneratorFactory loanScheduleFactory, final FloatingRatesReadPlatformService floatingRatesReadPlatformService) { this.applicationCurrencyRepository = applicationCurrencyRepository; this.calendarInstanceRepository = calendarInstanceRepository; this.configurationDomainService = configurationDomainService; @@ -86,7 +71,6 @@ public class LoanUtilService { this.workingDaysRepository = workingDaysRepository; this.loanScheduleFactory = loanScheduleFactory; this.floatingRatesReadPlatformService = floatingRatesReadPlatformService; - this.fromApiJsonHelper = fromApiJsonHelper; } public ScheduleGeneratorDTO buildScheduleGeneratorDTO(final Loan loan, final LocalDate recalculateFrom) { @@ -104,15 +88,8 @@ public class LoanUtilService { ApplicationCurrency applicationCurrency = this.applicationCurrencyRepository.findOneWithNotFoundDetection(currency); final CalendarInstance calendarInstance = this.calendarInstanceRepository.findCalendarInstaneByEntityId(loan.getId(), CalendarEntityType.LOANS.getValue()); - Calendar calendar = null; - CalendarHistoryDataWrapper calendarHistoryDataWrapper = null; - if (calendarInstance != null) { - calendar = calendarInstance.getCalendar(); - Set<CalendarHistory> calendarHistory = calendar.getCalendarHistory(); - calendarHistoryDataWrapper = new CalendarHistoryDataWrapper(calendarHistory); - } LocalDate calculatedRepaymentsStartingFromDate = this.getCalculatedRepaymentsStartingFromDate(loan.getDisbursementDate(), loan, - calendarInstance, calendarHistoryDataWrapper); + calendarInstance); CalendarInstance restCalendarInstance = null; CalendarInstance compoundingCalendarInstance = null; Long overdurPenaltyWaitPeriod = null; @@ -126,7 +103,7 @@ public class LoanUtilService { FloatingRateDTO floatingRateDTO = constructFloatingRateDTO(loan); ScheduleGeneratorDTO scheduleGeneratorDTO = new ScheduleGeneratorDTO(loanScheduleFactory, applicationCurrency, calculatedRepaymentsStartingFromDate, holidayDetails, restCalendarInstance, compoundingCalendarInstance, recalculateFrom, - overdurPenaltyWaitPeriod, floatingRateDTO, calendar, calendarHistoryDataWrapper); + overdurPenaltyWaitPeriod, floatingRateDTO); return scheduleGeneratorDTO; } @@ -134,8 +111,7 @@ public class LoanUtilService { public LocalDate getCalculatedRepaymentsStartingFromDate(final Loan loan) { final CalendarInstance calendarInstance = this.calendarInstanceRepository.findCalendarInstaneByEntityId(loan.getId(), CalendarEntityType.LOANS.getValue()); - final CalendarHistoryDataWrapper calendarHistoryDataWrapper = null; - return this.getCalculatedRepaymentsStartingFromDate(loan.getDisbursementDate(), loan, calendarInstance, calendarHistoryDataWrapper); + return this.getCalculatedRepaymentsStartingFromDate(loan.getDisbursementDate(), loan, calendarInstance); } private HolidayDetailDTO constructHolidayDTO(final Loan loan) { @@ -170,33 +146,22 @@ public class LoanUtilService { } private LocalDate getCalculatedRepaymentsStartingFromDate(final LocalDate actualDisbursementDate, final Loan loan, - final CalendarInstance calendarInstance, final CalendarHistoryDataWrapper calendarHistoryDataWrapper) { + final CalendarInstance calendarInstance) { final Calendar calendar = calendarInstance == null ? null : calendarInstance.getCalendar(); - return calculateRepaymentStartingFromDate(actualDisbursementDate, loan, calendar, calendarHistoryDataWrapper); + return calculateRepaymentStartingFromDate(actualDisbursementDate, loan, calendar); } public LocalDate getCalculatedRepaymentsStartingFromDate(final LocalDate actualDisbursementDate, final Loan loan, final Calendar calendar) { - final CalendarHistoryDataWrapper calendarHistoryDataWrapper = null; if (calendar == null) { return getCalculatedRepaymentsStartingFromDate(loan); } - return calculateRepaymentStartingFromDate(actualDisbursementDate, loan, calendar, calendarHistoryDataWrapper); + return calculateRepaymentStartingFromDate(actualDisbursementDate, loan, calendar); } - private LocalDate calculateRepaymentStartingFromDate(final LocalDate actualDisbursementDate, final Loan loan, final Calendar calendar, - final CalendarHistoryDataWrapper calendarHistoryDataWrapper) { + private LocalDate calculateRepaymentStartingFromDate(final LocalDate actualDisbursementDate, final Loan loan, final Calendar calendar) { LocalDate calculatedRepaymentsStartingFromDate = loan.getExpectedFirstRepaymentOnDate(); if (calendar != null) {// sync repayments - if (calculatedRepaymentsStartingFromDate == null && !calendar.getCalendarHistory().isEmpty() && - calendarHistoryDataWrapper != null) { - for (CalendarHistory calendarHistory : calendarHistoryDataWrapper.getCalendarHistoryList()) { - calculatedRepaymentsStartingFromDate = calendarHistory.getStartDateLocalDate(); - break; - } - return calculatedRepaymentsStartingFromDate; - } - // TODO: AA - user provided first repayment date takes precedence // over recalculated meeting date if (calculatedRepaymentsStartingFromDate == null) { @@ -217,40 +182,5 @@ public class LoanUtilService { } return calculatedRepaymentsStartingFromDate; } - - public Set<LoanDisbursementDetails> fetchDisbursementData(final JsonObject command) { - final Locale locale = this.fromApiJsonHelper.extractLocaleParameter(command); - final String dateFormat = this.fromApiJsonHelper.extractDateFormatParameter(command); - Set<LoanDisbursementDetails> disbursementDatas = new HashSet<>(); - if (command.has(LoanApiConstants.disbursementDataParameterName)) { - final JsonArray disbursementDataArray = command.getAsJsonArray(LoanApiConstants.disbursementDataParameterName); - if (disbursementDataArray != null && disbursementDataArray.size() > 0) { - int i = 0; - do { - final JsonObject jsonObject = disbursementDataArray.get(i).getAsJsonObject(); - Date expectedDisbursementDate = null; - Date actualDisbursementDate = null; - BigDecimal principal = null; - - if (jsonObject.has(LoanApiConstants.disbursementDateParameterName)) { - LocalDate date = this.fromApiJsonHelper.extractLocalDateNamed(LoanApiConstants.disbursementDateParameterName, - jsonObject, dateFormat, locale); - if (date != null) { - expectedDisbursementDate = date.toDate(); - } - } - if (jsonObject.has(LoanApiConstants.disbursementPrincipalParameterName) - && jsonObject.get(LoanApiConstants.disbursementPrincipalParameterName).isJsonPrimitive() - && StringUtils.isNotBlank((jsonObject.get(LoanApiConstants.disbursementPrincipalParameterName).getAsString()))) { - principal = jsonObject.getAsJsonPrimitive(LoanApiConstants.disbursementPrincipalParameterName).getAsBigDecimal(); - } - - disbursementDatas.add(new LoanDisbursementDetails(expectedDisbursementDate, actualDisbursementDate, principal)); - i++; - } while (i < disbursementDataArray.size()); - } - } - return disbursementDatas; - } } http://git-wip-us.apache.org/repos/asf/incubator-fineract/blob/5ed50615/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanWritePlatformServiceJpaRepositoryImpl.java ---------------------------------------------------------------------- diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanWritePlatformServiceJpaRepositoryImpl.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanWritePlatformServiceJpaRepositoryImpl.java index bcdb3e0..06ae1b1 100755 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanWritePlatformServiceJpaRepositoryImpl.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanWritePlatformServiceJpaRepositoryImpl.java @@ -83,6 +83,7 @@ import org.apache.fineract.portfolio.calendar.domain.CalendarInstance; import org.apache.fineract.portfolio.calendar.domain.CalendarInstanceRepository; import org.apache.fineract.portfolio.calendar.domain.CalendarRepository; import org.apache.fineract.portfolio.calendar.domain.CalendarType; +import org.apache.fineract.portfolio.calendar.exception.CalendarParameterUpdateNotSupportedException; import org.apache.fineract.portfolio.charge.domain.Charge; import org.apache.fineract.portfolio.charge.domain.ChargePaymentMode; import org.apache.fineract.portfolio.charge.domain.ChargeRepositoryWrapper; @@ -129,10 +130,8 @@ import org.apache.fineract.portfolio.loanaccount.domain.LoanLifecycleStateMachin import org.apache.fineract.portfolio.loanaccount.domain.LoanOverdueInstallmentCharge; import org.apache.fineract.portfolio.loanaccount.domain.LoanRepaymentScheduleInstallment; import org.apache.fineract.portfolio.loanaccount.domain.LoanRepaymentScheduleInstallmentRepository; -import org.apache.fineract.portfolio.loanaccount.domain.LoanRepaymentScheduleTransactionProcessorFactory; import org.apache.fineract.portfolio.loanaccount.domain.LoanRepository; import org.apache.fineract.portfolio.loanaccount.domain.LoanStatus; -import org.apache.fineract.portfolio.loanaccount.domain.LoanSummaryWrapper; import org.apache.fineract.portfolio.loanaccount.domain.LoanTrancheDisbursementCharge; import org.apache.fineract.portfolio.loanaccount.domain.LoanTransaction; import org.apache.fineract.portfolio.loanaccount.domain.LoanTransactionRepository; @@ -220,8 +219,6 @@ public class LoanWritePlatformServiceJpaRepositoryImpl implements LoanWritePlatf private final BusinessEventNotifierService businessEventNotifierService; private final GuarantorDomainService guarantorDomainService; private final LoanUtilService loanUtilService; - private final LoanSummaryWrapper loanSummaryWrapper; - private final LoanRepaymentScheduleTransactionProcessorFactory transactionProcessingStrategy; @Autowired public LoanWritePlatformServiceJpaRepositoryImpl(final PlatformSecurityContext context, @@ -248,8 +245,7 @@ public class LoanWritePlatformServiceJpaRepositoryImpl implements LoanWritePlatf final AccountAssociationsRepository accountAssociationRepository, final AccountTransferDetailRepository accountTransferDetailRepository, final BusinessEventNotifierService businessEventNotifierService, final GuarantorDomainService guarantorDomainService, - final LoanUtilService loanUtilService, final LoanSummaryWrapper loanSummaryWrapper, - final LoanRepaymentScheduleTransactionProcessorFactory transactionProcessingStrategy) { + final LoanUtilService loanUtilService) { this.context = context; this.loanEventApiJsonValidator = loanEventApiJsonValidator; this.loanAssembler = loanAssembler; @@ -284,8 +280,6 @@ public class LoanWritePlatformServiceJpaRepositoryImpl implements LoanWritePlatf this.businessEventNotifierService = businessEventNotifierService; this.guarantorDomainService = guarantorDomainService; this.loanUtilService = loanUtilService; - this.loanSummaryWrapper = loanSummaryWrapper; - this.transactionProcessingStrategy = transactionProcessingStrategy; } private LoanLifecycleStateMachine defaultLoanLifecycleStateMachine() { @@ -361,11 +355,8 @@ public class LoanWritePlatformServiceJpaRepositoryImpl implements LoanWritePlatf this.loanScheduleHistoryWritePlatformService.createAndSaveLoanScheduleArchive(loan.fetchRepaymentScheduleInstallments(), loan, null); } - if(configurationDomainService.isPaymnetypeApplicableforDisbursementCharge()){ - changedTransactionDetail = loan.disburse(currentUser, command, changes, scheduleGeneratorDTO,paymentDetail); - }else{ - changedTransactionDetail = loan.disburse(currentUser, command, changes, scheduleGeneratorDTO,null); - } + + changedTransactionDetail = loan.disburse(currentUser, command, changes, scheduleGeneratorDTO); } if (!changes.isEmpty()) { saveAndFlushLoanWithDataIntegrityViolationChecks(loan); @@ -597,11 +588,8 @@ public class LoanWritePlatformServiceJpaRepositoryImpl implements LoanWritePlatf this.loanScheduleHistoryWritePlatformService.createAndSaveLoanScheduleArchive( loan.fetchRepaymentScheduleInstallments(), loan, null); } - if(configurationDomainService.isPaymnetypeApplicableforDisbursementCharge()){ - changedTransactionDetail = loan.disburse(currentUser, command, changes, scheduleGeneratorDTO,paymentDetail); - }else{ - changedTransactionDetail = loan.disburse(currentUser, command, changes, scheduleGeneratorDTO,null); - } + + changedTransactionDetail = loan.disburse(currentUser, command, changes, scheduleGeneratorDTO); } if (!changes.isEmpty()) { @@ -1967,9 +1955,6 @@ public class LoanWritePlatformServiceJpaRepositoryImpl implements LoanWritePlatf final boolean isHolidayEnabled = this.configurationDomainService.isRescheduleRepaymentsOnHolidaysEnabled(); final WorkingDays workingDays = this.workingDaysRepository.findOne(); - final AppUser currentUser = getAppUserIfPresent(); - final List<Long> existingTransactionIds = new ArrayList<>(); - final List<Long> existingReversedTransactionIds = new ArrayList<>(); final Collection<Integer> loanStatuses = new ArrayList<>(Arrays.asList(LoanStatus.SUBMITTED_AND_PENDING_APPROVAL.getValue(), LoanStatus.APPROVED.getValue(), LoanStatus.ACTIVE.getValue())); final Collection<Integer> loanTypes = new ArrayList<>(Arrays.asList(AccountType.GROUP.getValue(), AccountType.JLG.getValue())); @@ -1981,19 +1966,16 @@ public class LoanWritePlatformServiceJpaRepositoryImpl implements LoanWritePlatf final List<Loan> loans = this.loanRepository.findByIdsAndLoanStatusAndLoanType(loanIds, loanStatuses, loanTypes); List<Holiday> holidays = null; - final LocalDate recalculateFrom = null; // loop through each loan to reschedule the repayment dates for (final Loan loan : loans) { if (loan != null) { - holidays = this.holidayRepository.findByOfficeIdAndGreaterThanDate(loan.getOfficeId(), loan.getDisbursementDate().toDate()); if (loan.repaymentScheduleDetail().isInterestRecalculationEnabled()) { - ScheduleGeneratorDTO scheduleGeneratorDTO = loanUtilService.buildScheduleGeneratorDTO(loan, recalculateFrom); - loan.setHelpers(null, this.loanSummaryWrapper, this.transactionProcessingStrategy); - loan.recalculateScheduleFromLastTransaction(scheduleGeneratorDTO, existingTransactionIds, - existingReversedTransactionIds, currentUser); - this.loanScheduleHistoryWritePlatformService.createAndSaveLoanScheduleArchive( - loan.fetchRepaymentScheduleInstallments(), loan, null); - } else if (reschedulebasedOnMeetingDates != null && reschedulebasedOnMeetingDates) { + final String defaultUserMessage = "Meeting calendar type update is not supported"; + throw new CalendarParameterUpdateNotSupportedException("jlg.loan.recalculation", defaultUserMessage); + } + holidays = this.holidayRepository.findByOfficeIdAndGreaterThanDate(loan.getOfficeId(), loan.getDisbursementDate().toDate()); + + if (reschedulebasedOnMeetingDates != null && reschedulebasedOnMeetingDates) { loan.updateLoanRepaymentScheduleDates(calendar.getStartDateLocalDate(), calendar.getRecurrence(), isHolidayEnabled, holidays, workingDays, reschedulebasedOnMeetingDates, presentMeetingDate, newMeetingDate); } else { http://git-wip-us.apache.org/repos/asf/incubator-fineract/blob/5ed50615/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/data/DepositAccountInterestRateChartData.java ---------------------------------------------------------------------- diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/data/DepositAccountInterestRateChartData.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/data/DepositAccountInterestRateChartData.java index 735f95d..7b78f03 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/data/DepositAccountInterestRateChartData.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/data/DepositAccountInterestRateChartData.java @@ -18,8 +18,9 @@ */ package org.apache.fineract.portfolio.savings.data; -import java.util.ArrayList; import java.util.Collection; +import java.util.HashSet; +import java.util.Set; import org.apache.fineract.infrastructure.codes.data.CodeValueData; import org.apache.fineract.infrastructure.core.data.EnumOptionData; @@ -37,11 +38,10 @@ public class DepositAccountInterestRateChartData { private final String description; private final LocalDate fromDate; private final LocalDate endDate; - private final boolean isPrimaryGroupingByAmount; private final Long accountId; private final String accountNumber; // associations - private Collection<DepositAccountInterestRateChartSlabData> chartSlabs; + private Set<DepositAccountInterestRateChartSlabData> chartSlabs; // template private final Collection<EnumOptionData> periodTypes; @@ -54,8 +54,8 @@ public class DepositAccountInterestRateChartData { private final Collection<CodeValueData> clientClassificationOptions; public static DepositAccountInterestRateChartData instance(Long id, String name, String description, LocalDate fromDate, - LocalDate endDate, boolean isPrimaryGroupingByAmount, Long accountId, String accountNumber, - Collection<DepositAccountInterestRateChartSlabData> chartSlabs, Collection<EnumOptionData> periodTypes) { + LocalDate endDate, Long accountId, String accountNumber, Set<DepositAccountInterestRateChartSlabData> chartSlabs, + Collection<EnumOptionData> periodTypes) { final Collection<EnumOptionData> entityTypeOptions = null; final Collection<EnumOptionData> attributeNameOptions = null; @@ -64,17 +64,17 @@ public class DepositAccountInterestRateChartData { final Collection<CodeValueData> genderOptions = null; final Collection<CodeValueData> clientTypeOptions = null; final Collection<CodeValueData> clientClassificationOptions = null; - return new DepositAccountInterestRateChartData(id, name, description, fromDate, endDate, isPrimaryGroupingByAmount, accountId, - accountNumber, chartSlabs, periodTypes, entityTypeOptions, attributeNameOptions, conditionTypeOptions, - incentiveTypeOptions, genderOptions, clientTypeOptions, clientClassificationOptions); + return new DepositAccountInterestRateChartData(id, name, description, fromDate, endDate, accountId, accountNumber, chartSlabs, + periodTypes, entityTypeOptions, attributeNameOptions, conditionTypeOptions, incentiveTypeOptions, genderOptions, + clientTypeOptions, clientClassificationOptions); } public static DepositAccountInterestRateChartData from(InterestRateChartData productChartData) { final Long id = null; final Long accountId = null; final String accountNumber = null; - Collection<DepositAccountInterestRateChartSlabData> fromProdChartSlabs = new ArrayList<>(); - Collection<InterestRateChartSlabData> productChartSlabDatas = productChartData.chartSlabs(); + Set<DepositAccountInterestRateChartSlabData> fromProdChartSlabs = new HashSet<>(); + Set<InterestRateChartSlabData> productChartSlabDatas = productChartData.chartSlabs(); if (productChartSlabDatas != null) { for (InterestRateChartSlabData productChartSlabData : productChartSlabDatas) { fromProdChartSlabs.add(DepositAccountInterestRateChartSlabData.from(productChartSlabData)); @@ -82,20 +82,20 @@ public class DepositAccountInterestRateChartData { } return new DepositAccountInterestRateChartData(id, productChartData.name(), productChartData.description(), - productChartData.fromDate(), productChartData.endDate(), productChartData.isPrimaryGroupingByAmount(), accountId, - accountNumber, fromProdChartSlabs, productChartData.periodTypes(), productChartData.entityTypeOptions(), - productChartData.attributeNameOptions(), productChartData.conditionTypeOptions(), productChartData.incentiveTypeOptions(), - productChartData.genderOptions(), productChartData.clientTypeOptions(), productChartData.clientClassificationOptions()); + productChartData.fromDate(), productChartData.endDate(), accountId, accountNumber, fromProdChartSlabs, + productChartData.periodTypes(), productChartData.entityTypeOptions(), productChartData.attributeNameOptions(), + productChartData.conditionTypeOptions(), productChartData.incentiveTypeOptions(), productChartData.genderOptions(), + productChartData.clientTypeOptions(), productChartData.clientClassificationOptions()); } public static DepositAccountInterestRateChartData withSlabs(DepositAccountInterestRateChartData interestRateChartData, - Collection<DepositAccountInterestRateChartSlabData> chartSlabs) { + Set<DepositAccountInterestRateChartSlabData> chartSlabs) { return new DepositAccountInterestRateChartData(interestRateChartData.id, interestRateChartData.name, interestRateChartData.description, interestRateChartData.fromDate, interestRateChartData.endDate, - interestRateChartData.isPrimaryGroupingByAmount, interestRateChartData.accountId, interestRateChartData.accountNumber, - chartSlabs, interestRateChartData.periodTypes, interestRateChartData.entityTypeOptions, - interestRateChartData.attributeNameOptions, interestRateChartData.conditionTypeOptions, - interestRateChartData.incentiveTypeOptions, interestRateChartData.genderOptions, interestRateChartData.clientTypeOptions, + interestRateChartData.accountId, interestRateChartData.accountNumber, chartSlabs, interestRateChartData.periodTypes, + interestRateChartData.entityTypeOptions, interestRateChartData.attributeNameOptions, + interestRateChartData.conditionTypeOptions, interestRateChartData.incentiveTypeOptions, + interestRateChartData.genderOptions, interestRateChartData.clientTypeOptions, interestRateChartData.clientClassificationOptions); } @@ -106,9 +106,9 @@ public class DepositAccountInterestRateChartData { final Collection<CodeValueData> clientTypeOptions, final Collection<CodeValueData> clientClassificationOptions) { return new DepositAccountInterestRateChartData(interestRateChartData.id, interestRateChartData.name, interestRateChartData.description, interestRateChartData.fromDate, interestRateChartData.endDate, - interestRateChartData.isPrimaryGroupingByAmount, interestRateChartData.accountId, interestRateChartData.accountNumber, - interestRateChartData.chartSlabs, periodTypes, entityTypeOptions, attributeNameOptions, conditionTypeOptions, - incentiveTypeOptions, genderOptions, clientTypeOptions, clientClassificationOptions); + interestRateChartData.accountId, interestRateChartData.accountNumber, interestRateChartData.chartSlabs, periodTypes, + entityTypeOptions, attributeNameOptions, conditionTypeOptions, incentiveTypeOptions, genderOptions, clientTypeOptions, + clientClassificationOptions); } public static DepositAccountInterestRateChartData template(Collection<EnumOptionData> periodTypes, @@ -123,26 +123,23 @@ public class DepositAccountInterestRateChartData { final LocalDate endDate = null; final Long accountId = null; final String accountNumber = null; - final boolean isPrimaryGroupingByAmount = false; - final Collection<DepositAccountInterestRateChartSlabData> chartSlabs = null; - return new DepositAccountInterestRateChartData(id, name, description, fromDate, endDate, isPrimaryGroupingByAmount, accountId, - accountNumber, chartSlabs, periodTypes, entityTypeOptions, attributeNameOptions, conditionTypeOptions, - incentiveTypeOptions, genderOptions, clientTypeOptions, clientClassificationOptions); + final Set<DepositAccountInterestRateChartSlabData> chartSlabs = null; + return new DepositAccountInterestRateChartData(id, name, description, fromDate, endDate, accountId, accountNumber, chartSlabs, + periodTypes, entityTypeOptions, attributeNameOptions, conditionTypeOptions, incentiveTypeOptions, genderOptions, + clientTypeOptions, clientClassificationOptions); } private DepositAccountInterestRateChartData(Long id, String name, String description, LocalDate fromDate, LocalDate endDate, - final boolean isPrimaryGroupingByAmount, Long accountId, String accountNumber, - Collection<DepositAccountInterestRateChartSlabData> chartSlabs, Collection<EnumOptionData> periodTypes, - final Collection<EnumOptionData> entityTypeOptions, final Collection<EnumOptionData> attributeNameOptions, - final Collection<EnumOptionData> conditionTypeOptions, final Collection<EnumOptionData> incentiveTypeOptions, - final Collection<CodeValueData> genderOptions, final Collection<CodeValueData> clientTypeOptions, - final Collection<CodeValueData> clientClassificationOptions) { + Long accountId, String accountNumber, Set<DepositAccountInterestRateChartSlabData> chartSlabs, + Collection<EnumOptionData> periodTypes, final Collection<EnumOptionData> entityTypeOptions, + final Collection<EnumOptionData> attributeNameOptions, final Collection<EnumOptionData> conditionTypeOptions, + final Collection<EnumOptionData> incentiveTypeOptions, final Collection<CodeValueData> genderOptions, + final Collection<CodeValueData> clientTypeOptions, final Collection<CodeValueData> clientClassificationOptions) { this.id = id; this.name = name; this.description = description; this.fromDate = fromDate; this.endDate = endDate; - this.isPrimaryGroupingByAmount = isPrimaryGroupingByAmount; this.chartSlabs = chartSlabs; this.accountId = accountId; this.accountNumber = accountNumber; @@ -158,7 +155,7 @@ public class DepositAccountInterestRateChartData { public void addChartSlab(final DepositAccountInterestRateChartSlabData chartSlab) { if (this.chartSlabs == null) { - this.chartSlabs = new ArrayList<>(); + this.chartSlabs = new HashSet<>(); } this.chartSlabs.add(chartSlab); http://git-wip-us.apache.org/repos/asf/incubator-fineract/blob/5ed50615/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/DepositAccountDomainServiceJpa.java ---------------------------------------------------------------------- diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/DepositAccountDomainServiceJpa.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/DepositAccountDomainServiceJpa.java index 0f2a1fa..ffaf648 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/DepositAccountDomainServiceJpa.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/DepositAccountDomainServiceJpa.java @@ -35,24 +35,16 @@ import org.apache.fineract.infrastructure.accountnumberformat.domain.AccountNumb import org.apache.fineract.infrastructure.accountnumberformat.domain.EntityAccountType; import org.apache.fineract.infrastructure.configuration.domain.ConfigurationDomainService; import org.apache.fineract.infrastructure.core.api.JsonCommand; -import org.apache.fineract.infrastructure.core.exception.GeneralPlatformDomainRuleException; import org.apache.fineract.infrastructure.core.service.DateUtils; import org.apache.fineract.organisation.monetary.domain.ApplicationCurrency; import org.apache.fineract.organisation.monetary.domain.ApplicationCurrencyRepositoryWrapper; import org.apache.fineract.organisation.monetary.domain.MonetaryCurrency; +import org.apache.fineract.organisation.monetary.domain.Money; import org.apache.fineract.portfolio.account.PortfolioAccountType; import org.apache.fineract.portfolio.account.data.AccountTransferDTO; import org.apache.fineract.portfolio.account.domain.AccountTransferType; import org.apache.fineract.portfolio.account.service.AccountTransfersWritePlatformService; -import org.apache.fineract.portfolio.calendar.domain.Calendar; -import org.apache.fineract.portfolio.calendar.domain.CalendarEntityType; -import org.apache.fineract.portfolio.calendar.domain.CalendarFrequencyType; -import org.apache.fineract.portfolio.calendar.domain.CalendarInstance; -import org.apache.fineract.portfolio.calendar.domain.CalendarInstanceRepository; -import org.apache.fineract.portfolio.calendar.domain.CalendarType; -import org.apache.fineract.portfolio.calendar.service.CalendarUtils; import org.apache.fineract.portfolio.client.domain.AccountNumberGenerator; -import org.apache.fineract.portfolio.common.domain.PeriodFrequencyType; import org.apache.fineract.portfolio.paymentdetail.domain.PaymentDetail; import org.apache.fineract.portfolio.savings.DepositAccountOnClosureType; import org.apache.fineract.portfolio.savings.DepositAccountType; @@ -79,7 +71,6 @@ public class DepositAccountDomainServiceJpa implements DepositAccountDomainServi private final AccountTransfersWritePlatformService accountTransfersWritePlatformService; private final ConfigurationDomainService configurationDomainService; private final AccountNumberFormatRepositoryWrapper accountNumberFormatRepository; - private final CalendarInstanceRepository calendarInstanceRepository; @Autowired public DepositAccountDomainServiceJpa(final SavingsAccountRepositoryWrapper savingsAccountRepository, @@ -88,8 +79,7 @@ public class DepositAccountDomainServiceJpa implements DepositAccountDomainServi final DepositAccountAssembler depositAccountAssembler, final SavingsAccountDomainService savingsAccountDomainService, final AccountTransfersWritePlatformService accountTransfersWritePlatformService, final ConfigurationDomainService configurationDomainService, - final AccountNumberFormatRepositoryWrapper accountNumberFormatRepository, - final CalendarInstanceRepository calendarInstanceRepository) { + final AccountNumberFormatRepositoryWrapper accountNumberFormatRepository) { this.savingsAccountRepository = savingsAccountRepository; this.applicationCurrencyRepositoryWrapper = applicationCurrencyRepositoryWrapper; this.journalEntryWritePlatformService = journalEntryWritePlatformService; @@ -99,7 +89,6 @@ public class DepositAccountDomainServiceJpa implements DepositAccountDomainServi this.accountTransfersWritePlatformService = accountTransfersWritePlatformService; this.configurationDomainService = configurationDomainService; this.accountNumberFormatRepository = accountNumberFormatRepository; - this.calendarInstanceRepository = calendarInstanceRepository; } @Transactional @@ -140,7 +129,6 @@ public class DepositAccountDomainServiceJpa implements DepositAccountDomainServi boolean isAccountTransfer = false; final boolean isPreMatureClosure = false; final MathContext mc = MathContext.DECIMAL64; - account.updateDepositAmount(transactionAmount); final SavingsAccountTransaction deposit = this.savingsAccountDomainService.handleDeposit(account, fmt, transactionDate, transactionAmount, paymentDetail, isAccountTransfer, isRegularTransaction); @@ -253,18 +241,21 @@ public class DepositAccountDomainServiceJpa implements DepositAccountDomainServi if (onClosureType.isReinvest()) { RecurringDepositAccount reinvestedDeposit = account.reInvest(transactionAmount); depositAccountAssembler.assignSavingAccountHelpers(reinvestedDeposit); - this.savingsAccountRepository.save(reinvestedDeposit); - final CalendarInstance calendarInstance = getCalendarInstance(account, reinvestedDeposit); - this.calendarInstanceRepository.save(calendarInstance); - final Calendar calendar = calendarInstance.getCalendar(); - final PeriodFrequencyType frequencyType = CalendarFrequencyType.from(CalendarUtils.getFrequency(calendar.getRecurrence())); - Integer frequency = CalendarUtils.getInterval(calendar.getRecurrence()); - frequency = frequency == -1 ? 1 : frequency; - reinvestedDeposit.generateSchedule(frequencyType, frequency, calendar); + reinvestedDeposit.updateMaturityDateAndAmount(mc, isPreMatureClosure, isSavingsInterestPostingAtCurrentPeriodEnd, + financialYearBeginningMonth); reinvestedDeposit.processAccountUponActivation(fmt, user); reinvestedDeposit.updateMaturityDateAndAmount(mc, isPreMatureClosure, isSavingsInterestPostingAtCurrentPeriodEnd, financialYearBeginningMonth); this.savingsAccountRepository.save(reinvestedDeposit); + + Money amountForDeposit = reinvestedDeposit.activateWithBalance(); + if (amountForDeposit.isGreaterThanZero()) { + handleRDDeposit(reinvestedDeposit, fmt, reinvestedDeposit.getActivationLocalDate(), amountForDeposit.getAmount(), + paymentDetail, isRegularTransaction); + } + reinvestedDeposit.updateMaturityDateAndAmount(mc, isPreMatureClosure, isSavingsInterestPostingAtCurrentPeriodEnd, + financialYearBeginningMonth); + this.savingsAccountRepository.save(reinvestedDeposit); autoGenerateAccountNumber(reinvestedDeposit); final SavingsAccountTransaction withdrawal = this.handleWithdrawal(account, fmt, closedDate, account.getAccountBalance(), @@ -301,31 +292,6 @@ public class DepositAccountDomainServiceJpa implements DepositAccountDomainServi return savingsTransactionId; } - private CalendarInstance getCalendarInstance(final RecurringDepositAccount account, RecurringDepositAccount reinvestedDeposit) { - CalendarInstance calendarInstance = null; - CalendarInstance parentCalendarInstance = this.calendarInstanceRepository.findByEntityIdAndEntityTypeIdAndCalendarTypeId( - account.getId(), CalendarEntityType.SAVINGS.getValue(), CalendarType.COLLECTION.getValue()); - if (account.isCalendarInherited()) { - calendarInstance = CalendarInstance.from(parentCalendarInstance.getCalendar(), account.getId(), - CalendarEntityType.SAVINGS.getValue()); - } else { - LocalDate calendarStartDate = reinvestedDeposit.depositStartDate(); - Calendar parentCalendar = parentCalendarInstance.getCalendar(); - final String recurrence = parentCalendar.getRecurrence(); - final String title = "recurring_savings_" + reinvestedDeposit.getId(); - final Calendar calendar = Calendar.createRepeatingCalendar(title, calendarStartDate, CalendarType.COLLECTION.getValue(), - recurrence); - calendarInstance = CalendarInstance.from(calendar, reinvestedDeposit.getId(), CalendarEntityType.SAVINGS.getValue()); - } - if (calendarInstance == null) { - final String defaultUserMessage = "No valid recurring details available for recurring depost account creation."; - throw new GeneralPlatformDomainRuleException( - "error.msg.recurring.deposit.account.cannot.create.no.valid.recurring.details.available", defaultUserMessage, - account.clientId()); - } - return calendarInstance; - } - private void autoGenerateAccountNumber(final SavingsAccount account) { if (account.isAccountNumberRequiresAutoGeneration()) { final AccountNumberFormat accountNumberFormat = this.accountNumberFormatRepository.findByAccountType(EntityAccountType.SAVINGS); http://git-wip-us.apache.org/repos/asf/incubator-fineract/blob/5ed50615/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/DepositAccountInterestRateChart.java ---------------------------------------------------------------------- diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/DepositAccountInterestRateChart.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/DepositAccountInterestRateChart.java index 7365b0f..25aab57 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/DepositAccountInterestRateChart.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/DepositAccountInterestRateChart.java @@ -92,7 +92,6 @@ public class DepositAccountInterestRateChart extends AbstractPersistable<Long> { if (this.chartSlabs == null) { this.chartSlabs = new HashSet<>(); } - return this.chartSlabs; } @@ -154,8 +153,4 @@ public class DepositAccountInterestRateChart extends AbstractPersistable<Long> { return effectiveInterestRate; } - - public boolean isPrimaryGroupingByAmount() { - return this.chartFields.isPrimaryGroupingByAmount(); - } } \ No newline at end of file http://git-wip-us.apache.org/repos/asf/incubator-fineract/blob/5ed50615/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/DepositProductAssembler.java ---------------------------------------------------------------------- diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/DepositProductAssembler.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/DepositProductAssembler.java index dcd446c..83b0e10 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/DepositProductAssembler.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/DepositProductAssembler.java @@ -18,8 +18,6 @@ */ package org.apache.fineract.portfolio.savings.domain; -import static org.apache.fineract.portfolio.savings.DepositsApiConstants.FIXED_DEPOSIT_PRODUCT_RESOURCE_NAME; -import static org.apache.fineract.portfolio.savings.DepositsApiConstants.RECURRING_DEPOSIT_PRODUCT_RESOURCE_NAME; import static org.apache.fineract.portfolio.savings.DepositsApiConstants.adjustAdvanceTowardsFuturePaymentsParamName; import static org.apache.fineract.portfolio.savings.DepositsApiConstants.allowWithdrawalParamName; import static org.apache.fineract.portfolio.savings.DepositsApiConstants.chartsParamName; @@ -54,16 +52,11 @@ import static org.apache.fineract.portfolio.savings.SavingsApiConstants.nominalA import static org.apache.fineract.portfolio.savings.SavingsApiConstants.shortNameParamName; import java.math.BigDecimal; -import java.util.ArrayList; import java.util.HashSet; -import java.util.List; import java.util.Set; import org.apache.fineract.accounting.common.AccountingRuleType; import org.apache.fineract.infrastructure.core.api.JsonCommand; -import org.apache.fineract.infrastructure.core.data.ApiParameterError; -import org.apache.fineract.infrastructure.core.data.DataValidatorBuilder; -import org.apache.fineract.infrastructure.core.exception.PlatformApiDataValidationException; import org.apache.fineract.organisation.monetary.domain.MonetaryCurrency; import org.apache.fineract.portfolio.charge.domain.Charge; import org.apache.fineract.portfolio.charge.domain.ChargeRepositoryWrapper; @@ -154,11 +147,7 @@ public class DepositProductAssembler { // Savings product charges final Set<Charge> charges = assembleListOfSavingsProductCharges(command, currencyCode); // Interest rate charts - final List<ApiParameterError> dataValidationErrors = new ArrayList<>(); - final DataValidatorBuilder baseDataValidator = new DataValidatorBuilder(dataValidationErrors) - .resource(FIXED_DEPOSIT_PRODUCT_RESOURCE_NAME); - final Set<InterestRateChart> charts = assembleListOfCharts(command, currency.getCode(), baseDataValidator); - throwExceptionIfValidationWarningsExist(dataValidationErrors); + final Set<InterestRateChart> charts = assembleListOfCharts(command, currency.getCode()); if (interestRate == null) { interestRate = BigDecimal.ZERO; } @@ -175,10 +164,6 @@ public class DepositProductAssembler { return fixedDepositProduct; } - private void throwExceptionIfValidationWarningsExist(final List<ApiParameterError> dataValidationErrors) { - if (!dataValidationErrors.isEmpty()) { throw new PlatformApiDataValidationException(dataValidationErrors); } - } - public RecurringDepositProduct assembleRecurringDepositProduct(final JsonCommand command) { final String name = command.stringValueOfParameterNamed(nameParamName); @@ -240,11 +225,7 @@ public class DepositProductAssembler { // Savings product charges final Set<Charge> charges = assembleListOfSavingsProductCharges(command, currencyCode); // Interest rate charts - final List<ApiParameterError> dataValidationErrors = new ArrayList<>(); - final DataValidatorBuilder baseDataValidator = new DataValidatorBuilder(dataValidationErrors) - .resource(RECURRING_DEPOSIT_PRODUCT_RESOURCE_NAME); - final Set<InterestRateChart> charts = assembleListOfCharts(command, currency.getCode(), baseDataValidator); - throwExceptionIfValidationWarningsExist(dataValidationErrors); + final Set<InterestRateChart> charts = assembleListOfCharts(command, currency.getCode()); if (interestRate == null) { interestRate = BigDecimal.ZERO; @@ -454,14 +435,15 @@ public class DepositProductAssembler { return charges; } - private Set<InterestRateChart> assembleListOfCharts(JsonCommand command, String currencyCode, DataValidatorBuilder baseDataValidator) { + private Set<InterestRateChart> assembleListOfCharts(JsonCommand command, String currencyCode) { final Set<InterestRateChart> charts = new HashSet<>(); + if (command.parameterExists(chartsParamName)) { final JsonArray chartsArray = command.arrayOfParameterNamed(chartsParamName); if (chartsArray != null) { for (int i = 0; i < chartsArray.size(); i++) { final JsonObject interstRateChartElement = chartsArray.get(i).getAsJsonObject(); - InterestRateChart chart = this.chartAssembler.assembleFrom(interstRateChartElement, currencyCode, baseDataValidator); + InterestRateChart chart = this.chartAssembler.assembleFrom(interstRateChartElement, currencyCode); charts.add(chart); } } http://git-wip-us.apache.org/repos/asf/incubator-fineract/blob/5ed50615/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/FixedDepositProduct.java ---------------------------------------------------------------------- diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/FixedDepositProduct.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/FixedDepositProduct.java index 9e4e075..5ab9cea 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/FixedDepositProduct.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/FixedDepositProduct.java @@ -198,7 +198,7 @@ public class FixedDepositProduct extends SavingsProduct { } } else { // assemble chart - final InterestRateChart newChart = this.chartAssembler.assembleFrom(chartElement, this.currency().getCode(), baseDataValidator); + final InterestRateChart newChart = this.chartAssembler.assembleFrom(chartElement, this.currency().getCode()); this.addChart(newChart); } } http://git-wip-us.apache.org/repos/asf/incubator-fineract/blob/5ed50615/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/RecurringDepositAccount.java ---------------------------------------------------------------------- diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/RecurringDepositAccount.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/RecurringDepositAccount.java index 1bf4e52..0d6f857 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/RecurringDepositAccount.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/RecurringDepositAccount.java @@ -174,29 +174,12 @@ public class RecurringDepositAccount extends SavingsAccount { final Map<String, Object> termAndPreClosureChanges = accountTermAndPreClosure.update(command, baseDataValidator); actualChanges.putAll(termAndPreClosureChanges); recurringDetail.update(command); + validateDomainRules(baseDataValidator); super.validateInterestPostingAndCompoundingPeriodTypes(baseDataValidator); if (!dataValidationErrors.isEmpty()) { throw new PlatformApiDataValidationException(dataValidationErrors); } } - private void updateDepositAmount() { - BigDecimal recurringAmount = getRecurringDetail().mandatoryRecommendedDepositAmount(); - Integer numberOfDepositPeriods = depositScheduleInstallments().size(); - if (this.accountTermAndPreClosure.depositPeriod() != null && recurringAmount != null && numberOfDepositPeriods != null) { - BigDecimal depositAmount = Money.of(product.currency(), recurringAmount).multipliedBy(numberOfDepositPeriods) - .plus(this.minRequiredOpeningBalance).getAmount(); - accountTermAndPreClosure.updateDepositAmount(depositAmount); - } else if (accountTermAndPreClosure.depositAmount() == null) { - accountTermAndPreClosure.updateDepositAmount(Money.zero(product.currency()).getAmount()); - } - } - - public void updateDepositAmount(final BigDecimal depositAmount) { - if (this.accountTermAndPreClosure.depositPeriod() == null) { - accountTermAndPreClosure.updateDepositAmount(accountTermAndPreClosure.depositAmount().add(depositAmount)); - } - } - @Override protected BigDecimal getEffectiveInterestRateAsFraction(final MathContext mc, final LocalDate interestPostingUpToDate) { boolean isPreMatureClosure = false; @@ -224,7 +207,7 @@ public class RecurringDepositAccount extends SavingsAccount { } if (depositCloseDate == null) { - depositCloseDate = DateUtils.getLocalDateOfTenant(); + depositCloseDate = LocalDate.now(); } final BigDecimal depositAmount = accountTermAndPreClosure.depositAmount(); @@ -983,8 +966,8 @@ public class RecurringDepositAccount extends SavingsAccount { .failWithCode("deposit.period.must.be.greater.than.lock.in.period", "Deposit period must be greater than account lock-in period."); } - } + if (firstDepositDateBeforeAccountSubmittedOrActivationDate()) { baseDataValidator.reset().failWithCodeNoParameterAddedToErrorCode( "expected.first.deposit.date.must.be.after.account.submitted.or.activation.date"); @@ -1006,7 +989,7 @@ public class RecurringDepositAccount extends SavingsAccount { final DataValidatorBuilder baseDataValidator = new DataValidatorBuilder(dataValidationErrors) .resource(RECURRING_DEPOSIT_ACCOUNT_RESOURCE_NAME); LocalDate maturityDate = calculateMaturityDate(); - if (this.chart != null) { + if (this.chart != null && maturityDate != null) { final LocalDate chartFromDate = this.chart.getFromDateAsLocalDate(); LocalDate chartEndDate = this.chart.getEndDateAsLocalDate(); chartEndDate = chartEndDate == null ? DateUtils.getLocalDateOfTenant() : chartEndDate; @@ -1016,11 +999,7 @@ public class RecurringDepositAccount extends SavingsAccount { baseDataValidator.reset().failWithCodeNoParameterAddedToErrorCode("no.valid.interest.rate.slab.available.for.date.range"); } - if (maturityDate == null) { - maturityDate = DateUtils.getLocalDateOfTenant(); - } - - final BigDecimal maturityAmount = this.accountTermAndPreClosure.depositAmount(); + final BigDecimal maturityAmount = this.accountTermAndPreClosure.maturityAmount(); BigDecimal applicableInterestRate = this.chart.getApplicableInterestRate(maturityAmount, depositStartDate(), maturityDate, this.client); @@ -1033,7 +1012,7 @@ public class RecurringDepositAccount extends SavingsAccount { baseDataValidator.reset().parameter(DepositsApiConstants.nominalAnnualInterestRateParamName).value(nominalAnnualInterestRate) .failWithCodeNoParameterAddedToErrorCode("interest.chart.or.nominal.interest.rate.required"); } - if (!dataValidationErrors.isEmpty()) { throw new PlatformApiDataValidationException(dataValidationErrors); } + /** * final boolean recurringFrequencyBeforeDepositPeriod = * recurringFrequencyBeforeDepositPeriod(); @@ -1138,7 +1117,6 @@ public class RecurringDepositAccount extends SavingsAccount { installmentDate = DepositAccountUtils.calculateNextDepositDate(installmentDate, frequency, recurringEvery); installmentNumber += 1; } - updateDepositAmount(); } private LocalDate calcualteScheduleTillDate(final PeriodFrequencyType frequency, final Integer recurringEvery) { http://git-wip-us.apache.org/repos/asf/incubator-fineract/blob/5ed50615/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/service/DepositAccountInterestRateChartReadPlatformServiceImpl.java ---------------------------------------------------------------------- diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/service/DepositAccountInterestRateChartReadPlatformServiceImpl.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/service/DepositAccountInterestRateChartReadPlatformServiceImpl.java index 451cc70..1adb84b 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/service/DepositAccountInterestRateChartReadPlatformServiceImpl.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/service/DepositAccountInterestRateChartReadPlatformServiceImpl.java @@ -90,20 +90,8 @@ public class DepositAccountInterestRateChartReadPlatformServiceImpl implements D @Override public DepositAccountInterestRateChartData retrieveOneWithSlabs(Long chartId) { this.context.authenticatedUser(); - StringBuilder sql = new StringBuilder(); - sql.append("select "); - sql.append(this.chartExtractor.schema()); - sql.append(" where irc.id = ? order by irc.id asc, "); - sql.append("CASE "); - sql.append("WHEN isPrimaryGroupingByAmount then ircd.amount_range_from "); - sql.append("WHEN isPrimaryGroupingByAmount then ircd.amount_range_to "); - sql.append("END,"); - sql.append("ircd.from_period, ircd.to_period,"); - sql.append("CASE "); - sql.append("WHEN !isPrimaryGroupingByAmount then ircd.amount_range_from "); - sql.append("WHEN !isPrimaryGroupingByAmount then ircd.amount_range_to "); - sql.append("END"); - Collection<DepositAccountInterestRateChartData> chartDatas = this.jdbcTemplate.query(sql.toString(), this.chartExtractor, + final String sql = "select " + this.chartExtractor.schema() + " where irc.id = ? order by ircd.id asc"; + Collection<DepositAccountInterestRateChartData> chartDatas = this.jdbcTemplate.query(sql, this.chartExtractor, new Object[] { chartId }); if (chartDatas == null || chartDatas.isEmpty()) { throw new DepositAccountInterestRateChartNotFoundException(chartId); } @@ -134,21 +122,8 @@ public class DepositAccountInterestRateChartReadPlatformServiceImpl implements D @Override public DepositAccountInterestRateChartData retrieveOneWithSlabsOnAccountId(Long accountId) { this.context.authenticatedUser(); - StringBuilder sql = new StringBuilder(); - sql.append("select "); - sql.append(this.chartExtractor.schema()); - sql.append(" where irc.savings_account_id = ? order by irc.id asc, "); - sql.append("CASE "); - sql.append("WHEN isPrimaryGroupingByAmount then ircd.amount_range_from "); - sql.append("WHEN isPrimaryGroupingByAmount then ircd.amount_range_to "); - sql.append("END,"); - sql.append("ircd.from_period, ircd.to_period,"); - sql.append("CASE "); - sql.append("WHEN !isPrimaryGroupingByAmount then ircd.amount_range_from "); - sql.append("WHEN !isPrimaryGroupingByAmount then ircd.amount_range_to "); - sql.append("END"); - - Collection<DepositAccountInterestRateChartData> chartDatas = this.jdbcTemplate.query(sql.toString(), this.chartExtractor, + final String sql = "select " + this.chartExtractor.schema() + " where irc.savings_account_id = ? order by ircd.id asc"; + Collection<DepositAccountInterestRateChartData> chartDatas = this.jdbcTemplate.query(sql, this.chartExtractor, new Object[] { accountId }); if (chartDatas == null || chartDatas.isEmpty()) { throw new DepositAccountInterestRateChartNotFoundException(accountId); } @@ -192,7 +167,6 @@ public class DepositAccountInterestRateChartReadPlatformServiceImpl implements D sqlBuilder .append("irc.id as ircId, irc.name as ircName, irc.description as ircDescription,") .append("irc.from_date as ircFromDate, irc.end_date as ircEndDate, ") - .append("irc.is_primary_grouping_by_amount as isPrimaryGroupingByAmount,") .append("ircd.id as ircdId, ircd.description as ircdDescription, ircd.period_type_enum ircdPeriodTypeId, ") .append("ircd.from_period as ircdFromPeriod, ircd.to_period as ircdToPeriod, ircd.amount_range_from as ircdAmountRangeFrom, ") .append("ircd.amount_range_to as ircdAmountRangeTo, ircd.annual_interest_rate as ircdAnnualInterestRate, ") @@ -257,7 +231,6 @@ public class DepositAccountInterestRateChartReadPlatformServiceImpl implements D sqlBuilder.append("irc.id as ircId, irc.name as ircName, irc.description as ircDescription, ") .append("irc.from_date as ircFromDate, irc.end_date as ircEndDate, ") - .append("irc.is_primary_grouping_by_amount as isPrimaryGroupingByAmount,") .append("sa.id as accountId, sa.account_no as accountNumber ").append("from ") .append("m_savings_account_interest_rate_chart irc left join m_savings_account sa on irc.savings_account_id=sa.id "); this.schemaSql = sqlBuilder.toString(); @@ -270,13 +243,12 @@ public class DepositAccountInterestRateChartReadPlatformServiceImpl implements D final String description = rs.getString("ircDescription"); final LocalDate fromDate = JdbcSupport.getLocalDate(rs, "ircFromDate"); final LocalDate endDate = JdbcSupport.getLocalDate(rs, "ircEndDate"); - final boolean isPrimaryGroupingByAmount = rs.getBoolean("isPrimaryGroupingByAmount"); final Long accountId = rs.getLong("accountId"); final String accountNumber = rs.getString("accountNumber"); final Collection<EnumOptionData> periodTypes = InterestRateChartEnumerations.periodType(PeriodFrequencyType.values()); - return DepositAccountInterestRateChartData.instance(id, name, description, fromDate, endDate, isPrimaryGroupingByAmount, - accountId, accountNumber, null, periodTypes); + return DepositAccountInterestRateChartData.instance(id, name, description, fromDate, endDate, accountId, accountNumber, null, + periodTypes); } } http://git-wip-us.apache.org/repos/asf/incubator-fineract/blob/5ed50615/fineract-provider/src/main/resources/sql/migrations/core_db/V291__organisation_start_date_config.sql ---------------------------------------------------------------------- diff --git a/fineract-provider/src/main/resources/sql/migrations/core_db/V291__organisation_start_date_config.sql b/fineract-provider/src/main/resources/sql/migrations/core_db/V291__organisation_start_date_config.sql deleted file mode 100644 index 90848f0..0000000 --- a/fineract-provider/src/main/resources/sql/migrations/core_db/V291__organisation_start_date_config.sql +++ /dev/null @@ -1,2 +0,0 @@ -ALTER TABLE `c_configuration` - ADD COLUMN `date_value` DATE NULL DEFAULT NULL AFTER `value`; \ No newline at end of file http://git-wip-us.apache.org/repos/asf/incubator-fineract/blob/5ed50615/fineract-provider/src/main/resources/sql/migrations/core_db/V292__update_organisation_start_date.sql ---------------------------------------------------------------------- diff --git a/fineract-provider/src/main/resources/sql/migrations/core_db/V292__update_organisation_start_date.sql b/fineract-provider/src/main/resources/sql/migrations/core_db/V292__update_organisation_start_date.sql deleted file mode 100644 index 5bb8e91..0000000 --- a/fineract-provider/src/main/resources/sql/migrations/core_db/V292__update_organisation_start_date.sql +++ /dev/null @@ -1 +0,0 @@ -INSERT INTO `c_configuration` ( `name`, `value`, `date_value`, `enabled`, `is_trap_door`, `description`) VALUES ('organisation-start-date', 0, NULL, 0, 0, NULL); http://git-wip-us.apache.org/repos/asf/incubator-fineract/blob/5ed50615/fineract-provider/src/main/resources/sql/migrations/core_db/V293__interest_rate_chart_support_for_amounts.sql ---------------------------------------------------------------------- diff --git a/fineract-provider/src/main/resources/sql/migrations/core_db/V293__interest_rate_chart_support_for_amounts.sql b/fineract-provider/src/main/resources/sql/migrations/core_db/V293__interest_rate_chart_support_for_amounts.sql deleted file mode 100644 index ccd4028..0000000 --- a/fineract-provider/src/main/resources/sql/migrations/core_db/V293__interest_rate_chart_support_for_amounts.sql +++ /dev/null @@ -1,13 +0,0 @@ -ALTER TABLE `m_interest_rate_slab` - CHANGE COLUMN `from_period` `from_period` INT(11) NULL DEFAULT NULL, - CHANGE COLUMN `period_type_enum` `period_type_enum` SMALLINT(5) NULL DEFAULT NULL ; - -ALTER TABLE `m_interest_rate_chart` - ADD COLUMN `is_primary_grouping_by_amount` TINYINT(1) NOT NULL DEFAULT '0'; - -ALTER TABLE `m_savings_account_interest_rate_chart` - ADD COLUMN `is_primary_grouping_by_amount` TINYINT NOT NULL DEFAULT '0' ; - -ALTER TABLE `m_savings_account_interest_rate_slab` - CHANGE COLUMN `period_type_enum` `period_type_enum` SMALLINT(5) NULL DEFAULT NULL, - CHANGE COLUMN `from_period` `from_period` INT(11) NULL DEFAULT NULL; \ No newline at end of file http://git-wip-us.apache.org/repos/asf/incubator-fineract/blob/5ed50615/fineract-provider/src/main/resources/sql/migrations/core_db/V294__configuration_for_paymnettype_application_forDisbursement_charge.sql ---------------------------------------------------------------------- diff --git a/fineract-provider/src/main/resources/sql/migrations/core_db/V294__configuration_for_paymnettype_application_forDisbursement_charge.sql b/fineract-provider/src/main/resources/sql/migrations/core_db/V294__configuration_for_paymnettype_application_forDisbursement_charge.sql deleted file mode 100644 index 3c4ac2b..0000000 --- a/fineract-provider/src/main/resources/sql/migrations/core_db/V294__configuration_for_paymnettype_application_forDisbursement_charge.sql +++ /dev/null @@ -1 +0,0 @@ -INSERT INTO `c_configuration` (`name`, `value`, `enabled`, `is_trap_door`, `description`) VALUES ('paymenttype-applicable-for-disbursement-charges', NULL, 0, 0, 'Is the Disbursement Entry need to be considering the fund source of the paymnet type');
