List of usage examples for org.joda.time LocalDate plusDays
public LocalDate plusDays(int days)
From source file:org.apache.fineract.portfolio.loanaccount.domain.Loan.java
License:Apache License
public void updateLoanRepaymentScheduleDates(final LocalDate meetingStartDate, final String recuringRule, final boolean isHolidayEnabled, final List<Holiday> holidays, final WorkingDays workingDays, final Boolean reschedulebasedOnMeetingDates, final LocalDate presentMeetingDate, final LocalDate newMeetingDate) { // first repayment's from date is same as disbursement date. /*//from ww w .jav a2s . c om * meetingStartDate is used as seedDate Capture the seedDate from user * and use the seedDate as meetingStart date */ LocalDate tmpFromDate = getDisbursementDate(); final PeriodFrequencyType repaymentPeriodFrequencyType = this.loanRepaymentScheduleDetail .getRepaymentPeriodFrequencyType(); final Integer loanRepaymentInterval = this.loanRepaymentScheduleDetail.getRepayEvery(); final String frequency = CalendarUtils .getMeetingFrequencyFromPeriodFrequencyType(repaymentPeriodFrequencyType); LocalDate newRepaymentDate = null; Boolean isFirstTime = true; LocalDate latestRepaymentDate = null; for (final LoanRepaymentScheduleInstallment loanRepaymentScheduleInstallment : this.repaymentScheduleInstallments) { LocalDate oldDueDate = loanRepaymentScheduleInstallment.getDueDate(); if (oldDueDate.isEqual(presentMeetingDate) || oldDueDate.isAfter(presentMeetingDate)) { if (isFirstTime) { isFirstTime = false; newRepaymentDate = newMeetingDate; } else { // tmpFromDate.plusDays(1) is done to make sure // getNewRepaymentMeetingDate method returns next meeting // date and not the same as tmpFromDate newRepaymentDate = CalendarUtils.getNewRepaymentMeetingDate(recuringRule, tmpFromDate, tmpFromDate.plusDays(1), loanRepaymentInterval, frequency, workingDays); } if (isHolidayEnabled) { newRepaymentDate = HolidayUtil.getRepaymentRescheduleDateToIfHoliday(newRepaymentDate, holidays); } if (latestRepaymentDate == null || latestRepaymentDate.isBefore(newRepaymentDate)) { latestRepaymentDate = newRepaymentDate; } loanRepaymentScheduleInstallment.updateDueDate(newRepaymentDate); // reset from date to get actual daysInPeriod if (!isFirstTime) { loanRepaymentScheduleInstallment.updateFromDate(tmpFromDate); } tmpFromDate = newRepaymentDate;// update with new repayment // date } else { tmpFromDate = oldDueDate; } } if (latestRepaymentDate != null) { this.expectedMaturityDate = latestRepaymentDate.toDate(); } }
From source file:org.apache.fineract.portfolio.loanaccount.loanschedule.service.LoanScheduleAssembler.java
License:Apache License
private LocalDate deriveFirstRepaymentDate(final AccountType loanType, final Integer repaymentEvery, final LocalDate expectedDisbursementDate, final PeriodFrequencyType repaymentPeriodFrequencyType, final Integer minimumDaysBetweenDisbursalAndFirstRepayment, final Calendar calendar) { LocalDate derivedFirstRepayment = null; final LocalDate dateBasedOnMinimumDaysBetweenDisbursalAndFirstRepayment = expectedDisbursementDate .plusDays(minimumDaysBetweenDisbursalAndFirstRepayment); if ((loanType.isJLGAccount() || loanType.isGroupAccount()) && calendar != null) { final LocalDate refernceDateForCalculatingFirstRepaymentDate = expectedDisbursementDate; derivedFirstRepayment = deriveFirstRepaymentDateForJLGLoans(repaymentEvery, expectedDisbursementDate, refernceDateForCalculatingFirstRepaymentDate, repaymentPeriodFrequencyType, minimumDaysBetweenDisbursalAndFirstRepayment, calendar); } /*** Individual or group account, or JLG not linked to a meeting ***/ else {/*from w ww . ja v a 2 s.c om*/ LocalDate dateBasedOnRepaymentFrequency; // Derive the first repayment date as greater date among // (disbursement date + plus frequency) or // (disbursement date + minimum between disbursal and first // repayment ) if (repaymentPeriodFrequencyType.isDaily()) { dateBasedOnRepaymentFrequency = expectedDisbursementDate.plusDays(repaymentEvery); } else if (repaymentPeriodFrequencyType.isWeekly()) { dateBasedOnRepaymentFrequency = expectedDisbursementDate.plusWeeks(repaymentEvery); } else if (repaymentPeriodFrequencyType.isMonthly()) { dateBasedOnRepaymentFrequency = expectedDisbursementDate.plusMonths(repaymentEvery); } /** yearly loan **/ else { dateBasedOnRepaymentFrequency = expectedDisbursementDate.plusYears(repaymentEvery); } derivedFirstRepayment = dateBasedOnRepaymentFrequency.isAfter( dateBasedOnMinimumDaysBetweenDisbursalAndFirstRepayment) ? dateBasedOnRepaymentFrequency : dateBasedOnMinimumDaysBetweenDisbursalAndFirstRepayment; } return derivedFirstRepayment; }
From source file:org.apache.fineract.portfolio.loanaccount.loanschedule.service.LoanScheduleAssembler.java
License:Apache License
private LocalDate deriveFirstRepaymentDateForJLGLoans(final Integer repaymentEvery, final LocalDate expectedDisbursementDate, final LocalDate refernceDateForCalculatingFirstRepaymentDate, final PeriodFrequencyType repaymentPeriodFrequencyType, final Integer minimumDaysBetweenDisbursalAndFirstRepayment, final Calendar calendar) { final String frequency = CalendarUtils .getMeetingFrequencyFromPeriodFrequencyType(repaymentPeriodFrequencyType); final LocalDate derivedFirstRepayment = CalendarUtils.getFirstRepaymentMeetingDate(calendar, refernceDateForCalculatingFirstRepaymentDate, repaymentEvery, frequency); final LocalDate minimumFirstRepaymentDate = expectedDisbursementDate .plusDays(minimumDaysBetweenDisbursalAndFirstRepayment); return minimumFirstRepaymentDate.isBefore(derivedFirstRepayment) ? derivedFirstRepayment : deriveFirstRepaymentDateForJLGLoans(repaymentEvery, expectedDisbursementDate, derivedFirstRepayment, repaymentPeriodFrequencyType, minimumDaysBetweenDisbursalAndFirstRepayment, calendar); }
From source file:org.apache.fineract.portfolio.savings.domain.SavingsHelper.java
License:Apache License
private LocalDate determineInterestPostingPeriodEndDateFrom(final LocalDate periodStartDate, final SavingsPostingInterestPeriodType interestPostingPeriodType, final LocalDate interestPostingUpToDate, Integer financialYearBeginningMonth) { LocalDate periodEndDate = interestPostingUpToDate; final Integer monthOfYear = periodStartDate.getMonthOfYear(); financialYearBeginningMonth--;//from w w w. j a v a 2 s . c o m if (financialYearBeginningMonth == 0) financialYearBeginningMonth = 12; final ArrayList<LocalDate> quarterlyDates = new ArrayList<>(); quarterlyDates .add(periodStartDate.withMonthOfYear(financialYearBeginningMonth).dayOfMonth().withMaximumValue()); quarterlyDates.add(periodStartDate.withMonthOfYear(financialYearBeginningMonth).plusMonths(3) .withYear(periodStartDate.getYear()).dayOfMonth().withMaximumValue()); quarterlyDates.add(periodStartDate.withMonthOfYear(financialYearBeginningMonth).plusMonths(6) .withYear(periodStartDate.getYear()).dayOfMonth().withMaximumValue()); quarterlyDates.add(periodStartDate.withMonthOfYear(financialYearBeginningMonth).plusMonths(9) .withYear(periodStartDate.getYear()).dayOfMonth().withMaximumValue()); Collections.sort(quarterlyDates); final ArrayList<LocalDate> biannualDates = new ArrayList<>(); biannualDates .add(periodStartDate.withMonthOfYear(financialYearBeginningMonth).dayOfMonth().withMaximumValue()); biannualDates.add(periodStartDate.withMonthOfYear(financialYearBeginningMonth).plusMonths(6) .withYear(periodStartDate.getYear()).dayOfMonth().withMaximumValue()); Collections.sort(biannualDates); boolean isEndDateSet = false; switch (interestPostingPeriodType) { case INVALID: break; case MONTHLY: // produce period end date on last day of current month periodEndDate = periodStartDate.dayOfMonth().withMaximumValue(); break; case QUATERLY: for (LocalDate quarterlyDate : quarterlyDates) { if (quarterlyDate.isAfter(periodStartDate)) { periodEndDate = quarterlyDate; isEndDateSet = true; break; } } if (!isEndDateSet) periodEndDate = quarterlyDates.get(0).plusYears(1).dayOfMonth().withMaximumValue(); break; case BIANNUAL: for (LocalDate biannualDate : biannualDates) { if (biannualDate.isAfter(periodStartDate)) { periodEndDate = biannualDate; isEndDateSet = true; break; } } if (!isEndDateSet) periodEndDate = biannualDates.get(0).plusYears(1).dayOfMonth().withMaximumValue(); break; case ANNUAL: if (financialYearBeginningMonth < monthOfYear) { periodEndDate = periodStartDate.withMonthOfYear(financialYearBeginningMonth); periodEndDate = periodEndDate.plusYears(1); } else { periodEndDate = periodStartDate.withMonthOfYear(financialYearBeginningMonth); } periodEndDate = periodEndDate.dayOfMonth().withMaximumValue(); break; } // interest posting always occurs on next day after the period end date. periodEndDate = periodEndDate.plusDays(1); return periodEndDate; }
From source file:org.apache.fineract.portfolio.tax.serialization.TaxValidator.java
License:Apache License
private void validateGroupTotal(final List<TaxGroupMappings> taxMappings, final DataValidatorBuilder baseDataValidator, final String paramenter) { for (TaxGroupMappings groupMappingsOne : taxMappings) { Collection<LocalDate> dates = groupMappingsOne.getTaxComponent().allStartDates(); for (LocalDate date : dates) { LocalDate applicableDate = date.plusDays(1); BigDecimal total = BigDecimal.ZERO; for (TaxGroupMappings groupMappings : taxMappings) { if (groupMappings.occursOnDayFromAndUpToAndIncluding(applicableDate)) { BigDecimal applicablePercentage = groupMappings.getTaxComponent() .getApplicablePercentage(applicableDate); if (applicablePercentage != null) { total = total.add(applicablePercentage); }/*w ww .ja v a 2 s .c o m*/ } } baseDataValidator.reset().parameter(paramenter).value(total) .notGreaterThanMax(BigDecimal.valueOf(100)); } } }
From source file:org.apache.isis.viewer.wicket.ui.components.scalars.jodatime.DateConverterForJodaLocalDate.java
License:Apache License
@Override protected String doConvertToString(LocalDate value, Locale locale) { return value.plusDays(adjustBy).toString(getFormatterForDatePattern()); }
From source file:org.apereo.portal.events.aggr.action.JpaSearchRequestAggregationDao.java
License:Apache License
@Override public final List<SearchRequestAggregationImpl> getAggregations(DateTime start, DateTime end, AggregationInterval interval, AggregatedGroupMapping aggregatedGroupMapping, AggregatedGroupMapping... aggregatedGroupMappings) { if (!start.isBefore(end)) { throw new IllegalArgumentException("Start must be before End: " + start + " - " + end); }//from w w w. j a v a 2s . c om final LocalDate startDate = start.toLocalDate(); final LocalDate endDate = end.toLocalDate(); final TypedQuery<SearchRequestAggregationImpl> query = this .createQuery(this.findAllSearchRequestAggregationsByDateRangeQuery); query.setParameter(this.startDate, startDate); query.setParameter(this.startTime, start.toLocalTime()); query.setParameter(this.endDate, endDate); query.setParameter(this.endTime, end.toLocalTime()); query.setParameter(this.endPlusOneDate, endDate.plusDays(1)); query.setParameter(this.intervalParameter, interval); final Set<AggregatedGroupMapping> groups = ImmutableSet.<AggregatedGroupMapping>builder() .add(aggregatedGroupMapping).add(aggregatedGroupMappings).build(); query.setParameter(this.aggregatedGroupsParameter, groups); return query.getResultList(); }
From source file:org.apereo.portal.events.aggr.JpaBaseAggregationDao.java
License:Apache License
@Override public final List<T> getAggregations(DateTime start, DateTime end, Set<K> keys, AggregatedGroupMapping... aggregatedGroupMappings) { if (!start.isBefore(end)) { throw new IllegalArgumentException("Start must be before End: " + start + " - " + end); }//from www . jav a 2s . c o m final LocalDate startDate = start.toLocalDate(); final LocalDate endDate = end.toLocalDate(); final TypedQuery<T> query = this.createQuery(findAggregationsByDateRangeQuery); query.setParameter(this.startDate, startDate); query.setParameter(this.startTime, start.toLocalTime()); query.setParameter(this.endDate, endDate); query.setParameter(this.endTime, end.toLocalTime()); query.setParameter(this.endPlusOneDate, endDate.plusDays(1)); // Get the first key to use for the interval K key = keys.iterator().next(); query.setParameter(this.intervalParameter, key.getInterval()); this.bindAggregationSpecificKeyParameters(query, keys); final Set<AggregatedGroupMapping> groups = collectAllGroupsFromParams(keys, aggregatedGroupMappings); query.setParameter(this.aggregatedGroupsParameter, groups); return query.getResultList(); }
From source file:org.apereo.portal.events.aggr.JpaBaseAggregationDao.java
License:Apache License
@Override public Collection<T> getUnclosedAggregations(DateTime start, DateTime end, AggregationInterval interval) { if (!start.isBefore(end)) { throw new IllegalArgumentException("Start must be before End: " + start + " - " + end); }// w ww . j a v a2 s . c o m final LocalDate startDate = start.toLocalDate(); final LocalDate endDate = end.toLocalDate(); final TypedQuery<T> query = this.createQuery(findUnclosedAggregationsByDateRangeQuery); query.setParameter(this.startDate, startDate); query.setParameter(this.startTime, start.toLocalTime()); query.setParameter(this.endDate, endDate); query.setParameter(this.endTime, end.toLocalTime()); query.setParameter(this.endPlusOneDate, endDate.plusDays(1)); query.setParameter(this.intervalParameter, interval); //Need set to handle duplicate results from join return new LinkedHashSet<T>(query.getResultList()); }
From source file:org.apereo.portal.events.aggr.portletlayout.JpaPortletLayoutAggregationDao.java
License:Apache License
public final List<PortletLayoutAggregationImpl> getAggregationsForAllPortlets(DateTime start, DateTime end, AggregationInterval interval, AggregatedGroupMapping aggregatedGroupMapping, AggregatedGroupMapping... aggregatedGroupMappings) { if (!start.isBefore(end)) { throw new IllegalArgumentException("Start must be before End: " + start + " - " + end); }/*from w w w. j av a 2 s .c om*/ final LocalDate startDate = start.toLocalDate(); final LocalDate endDate = end.toLocalDate(); final TypedQuery<PortletLayoutAggregationImpl> query = this .createQuery(this.findAllPortletAggregationsByDateRangeQuery); query.setParameter(this.startDate, startDate); query.setParameter(this.startTime, start.toLocalTime()); query.setParameter(this.endDate, endDate); query.setParameter(this.endTime, end.toLocalTime()); query.setParameter(this.endPlusOneDate, endDate.plusDays(1)); query.setParameter(this.intervalParameter, interval); final Set<AggregatedGroupMapping> groups = ImmutableSet.<AggregatedGroupMapping>builder() .add(aggregatedGroupMapping).add(aggregatedGroupMappings).build(); query.setParameter(this.aggregatedGroupsParameter, groups); return query.getResultList(); }