List of usage examples for org.joda.time LocalDate isBefore
public boolean isBefore(ReadablePartial partial)
From source file:org.mifos.accounts.savings.business.SavingsBO.java
License:Open Source License
public AccountPaymentEntity findMostRecentDepositOrWithdrawalByDate() { AccountPaymentEntity mostRecentPayment = null; if (!this.accountPayments.isEmpty()) { for (AccountPaymentEntity accountPaymentEntity : this.accountPayments) { if (mostRecentPayment == null && accountPaymentEntity.isSavingsDepositOrWithdrawal()) { mostRecentPayment = accountPaymentEntity; } else if (mostRecentPayment != null) { LocalDate paymentDate = new LocalDate(accountPaymentEntity.getPaymentDate()); if ((paymentDate.isAfter(new LocalDate(mostRecentPayment.getPaymentDate())) && paymentDate.isBefore(new LocalDate().plusDays(1))) || (paymentDate.isEqual(new LocalDate(mostRecentPayment.getPaymentDate())) && accountPaymentEntity.getPaymentId() != null && mostRecentPayment.getPaymentId() != null && accountPaymentEntity.getPaymentId() > mostRecentPayment.getPaymentId()) && accountPaymentEntity.isSavingsDepositOrWithdrawal()) { mostRecentPayment = accountPaymentEntity; }/*from w ww.j av a 2 s .com*/ } } } return mostRecentPayment; }
From source file:org.mifos.accounts.savings.business.SavingsBO.java
License:Open Source License
@Override public boolean isTrxnDateValid(Date trxnDate, Date lastMeetingDate, boolean repaymentIndependentOfMeetingEnabled) { LocalDate transactionLocalDate = new LocalDate(trxnDate); LocalDate today = new LocalDate(); if (AccountingRules.isBackDatedTxnAllowed()) { if (repaymentIndependentOfMeetingEnabled) { Date activationDate = this.getActivationDate(); return trxnDate.compareTo(DateUtils.getDateWithoutTimeStamp(activationDate)) >= 0; }/* w ww .j av a 2s . com*/ InterestScheduledEvent postingEvent = new SavingsInterestScheduledEventFactory() .createScheduledEventFrom(this.getInterestPostingMeeting()); LocalDate nextPostingDate = new LocalDate(this.nextIntPostDate); LocalDate currentPostingPeriodStartDate = postingEvent .findFirstDateOfPeriodForMatchingDate(nextPostingDate); if (getInterestPostingMeeting().isDaily()) { if (lastIntPostDate == null) { currentPostingPeriodStartDate = new LocalDate(activationDate); } else { currentPostingPeriodStartDate = new LocalDate(lastIntPostDate).plusDays(1); } } // FIXME throw an exception with the correct reason instead of returning false if (transactionLocalDate.isBefore(currentPostingPeriodStartDate)) { return false; } LocalDate activationDate = new LocalDate(this.activationDate); if (lastMeetingDate != null) { LocalDate meetingDate = new LocalDate(lastMeetingDate); return (transactionLocalDate.isAfter(meetingDate) || transactionLocalDate.isEqual(meetingDate)) && (transactionLocalDate.isAfter(activationDate) || transactionLocalDate.isEqual(activationDate)); } return (transactionLocalDate.isAfter(activationDate) || transactionLocalDate.isEqual(activationDate)) && (transactionLocalDate.isBefore(today) || transactionLocalDate.isEqual(today)); } return transactionLocalDate.isEqual(today); }
From source file:org.mifos.accounts.savings.interest.CalendarPeriod.java
License:Open Source License
/** * checks that <code>date</code> occurs within the {@link CalendarPeriod} with startDate and endDate inclusive. *///w ww. jav a 2s .c om public boolean contains(LocalDate date) { return (date.isEqual(this.startDate) || date.isAfter(this.startDate)) && (date.isEqual(this.endDate) || date.isBefore(endDate)); }
From source file:org.mifos.accounts.savings.interest.CalendarPeriodHelper.java
License:Open Source License
/** * determines all possible periods from the start of the fiscal year of the accounts first activity date. *//*from w w w .java2s . c o m*/ public List<CalendarPeriod> determineAllPossiblePeriods(LocalDate firstActivityDate, InterestScheduledEvent interestCalculationEvent, LocalDate endDateOfLastPeriod) { List<CalendarPeriod> validIntervals = new ArrayList<CalendarPeriod>(); // fiscal start of year is jan-01 so begin at jan-01 of first deposit. LocalDate startOfFiscalYearOfFirstDeposit = new LocalDate( new DateTime().withYearOfEra(firstActivityDate.getYear()).withMonthOfYear(1).withDayOfMonth(1)); List<LocalDate> allMatchingDates = interestCalculationEvent .findAllMatchingDatesFromBaseDateUpToAndIncludingNearestMatchingEndDate( startOfFiscalYearOfFirstDeposit, endDateOfLastPeriod); for (LocalDate matchingDate : allMatchingDates) { LocalDate firstDayofInterval = interestCalculationEvent .findFirstDateOfPeriodForMatchingDate(matchingDate); CalendarPeriod interval = new CalendarPeriod(firstDayofInterval, matchingDate); if (interval.contains(firstActivityDate)) { if (matchingDate.isAfter(endDateOfLastPeriod)) { interval = new CalendarPeriod(firstActivityDate, endDateOfLastPeriod); } else { interval = new CalendarPeriod(firstActivityDate, matchingDate); } validIntervals.add(interval); } else if (matchingDate.isAfter(firstActivityDate) && matchingDate.isBefore(endDateOfLastPeriod) || matchingDate.isEqual(endDateOfLastPeriod)) { validIntervals.add(interval); } else if (matchingDate.isAfter(endDateOfLastPeriod) && (firstDayofInterval.isBefore(endDateOfLastPeriod) || firstDayofInterval.isEqual(endDateOfLastPeriod))) { interval = new CalendarPeriod(firstDayofInterval, endDateOfLastPeriod); validIntervals.add(interval); } } return validIntervals; }
From source file:org.mifos.accounts.savings.interest.schedule.internal.DailyInterestScheduledEvent.java
License:Open Source License
@Override public List<LocalDate> findAllMatchingDatesFromBaseDateUpToAndIncludingNearestMatchingEndDate( LocalDate baseDate, LocalDate cutOffDate) { List<LocalDate> allMatchingDates = new ArrayList<LocalDate>(); LocalDate previousMatchingDate = baseDate.minusDays(1); LocalDate matchingDate = nextMatchingDateFromAlreadyMatchingDate(previousMatchingDate); while (matchingDate.isEqual(cutOffDate) || matchingDate.isBefore(cutOffDate)) { allMatchingDates.add(matchingDate); matchingDate = nextMatchingDateFromAlreadyMatchingDate(matchingDate); }/*from w ww. j ava2 s . c o m*/ if (!allMatchingDates.contains(matchingDate)) { allMatchingDates.add(matchingDate); } return allMatchingDates; }
From source file:org.mifos.accounts.savings.interest.schedule.internal.MonthlyOnLastDayOfMonthInterestScheduledEvent.java
License:Open Source License
@Override public List<LocalDate> findAllMatchingDatesFromBaseDateUpToAndIncludingNearestMatchingEndDate( LocalDate baseDate, LocalDate cutOffDate) { List<LocalDate> allMatchingDates = new ArrayList<LocalDate>(); LocalDate previousMatchingDate = baseDate.minusDays(1); LocalDate matchingDate = nextMatchingDateFromAlreadyMatchingDate(previousMatchingDate); while (matchingDate.isEqual(cutOffDate) || matchingDate.isBefore(cutOffDate)) { allMatchingDates.add(matchingDate); matchingDate = nextMatchingDateFromAlreadyMatchingDate(matchingDate); }//www. j a va 2s .c om if (!allMatchingDates.contains(matchingDate)) { allMatchingDates.add(matchingDate); } return allMatchingDates; }
From source file:org.mifos.application.holiday.business.HolidayBO.java
License:Open Source License
@Override public boolean encloses(final Date date) { LocalDate dateToCheck = new LocalDate(date); LocalDate fromDate = new LocalDate(getHolidayFromDate()); LocalDate thruDate = new LocalDate(getHolidayThruDate()); return ((dateToCheck.isEqual(fromDate) || dateToCheck.isAfter(fromDate)) && (dateToCheck.isBefore(thruDate) || dateToCheck.isEqual(thruDate))); }
From source file:org.mifos.application.meeting.business.MeetingBO.java
License:Open Source License
public boolean queryDateIsInMeetingIntervalForFixedDate(LocalDate queryDate, LocalDate fixedDate) { LocalDate startOfMeetingInterval = startDateForMeetingInterval(fixedDate); LocalDate endOfMeetingInterval; if (isWeekly()) { endOfMeetingInterval = startOfMeetingInterval.plusWeeks(getRecurAfter()); } else if (isMonthly()) { endOfMeetingInterval = startOfMeetingInterval.plusMonths(getRecurAfter()); } else {/*from ww w. j a v a 2 s.c om*/ // we don't handle meeting intervals in days return false; } return (queryDate.isEqual(startOfMeetingInterval) || queryDate.isAfter(startOfMeetingInterval)) && queryDate.isBefore(endOfMeetingInterval); }
From source file:org.mifos.application.servicefacade.LoanAccountServiceFacadeWebTier.java
License:Open Source License
@Override public LoanCreationLoanDetailsDto retrieveLoanDetailsForLoanAccountCreation(Integer customerId, Short productId, boolean isLoanWithBackdatedPayments) { try {/*from w w w. j a v a2 s . c o m*/ List<org.mifos.dto.domain.FeeDto> additionalFees = new ArrayList<org.mifos.dto.domain.FeeDto>(); List<org.mifos.dto.domain.FeeDto> defaultFees = new ArrayList<org.mifos.dto.domain.FeeDto>(); List<PenaltyDto> defaultPenalties = new ArrayList<PenaltyDto>(); LoanOfferingBO loanProduct = this.loanProductDao.findById(productId.intValue()); MeetingBO loanProductMeeting = loanProduct.getLoanOfferingMeetingValue(); MeetingDto loanOfferingMeetingDto = loanProductMeeting.toDto(); List<FeeBO> fees = this.feeDao.getAllAppllicableFeeForLoanCreation(); for (FeeBO fee : fees) { if (!fee.isPeriodic() || (MeetingBO.isMeetingMatched(fee.getFeeFrequency().getFeeMeetingFrequency(), loanProductMeeting))) { org.mifos.dto.domain.FeeDto feeDto = fee.toDto(); FeeFrequencyType feeFrequencyType = FeeFrequencyType .getFeeFrequencyType(fee.getFeeFrequency().getFeeFrequencyType().getId()); FeeFrequencyTypeEntity feeFrequencyEntity = this.loanProductDao .retrieveFeeFrequencyType(feeFrequencyType); String feeFrequencyTypeName = ApplicationContextProvider.getBean(MessageLookup.class) .lookup(feeFrequencyEntity.getLookUpValue()); feeDto.setFeeFrequencyType(feeFrequencyTypeName); if (feeDto.getFeeFrequency().isOneTime()) { FeePayment feePayment = FeePayment .getFeePayment(fee.getFeeFrequency().getFeePayment().getId()); FeePaymentEntity feePaymentEntity = this.loanProductDao.retrieveFeePaymentType(feePayment); String feePaymentName = ApplicationContextProvider.getBean(MessageLookup.class) .lookup(feePaymentEntity.getLookUpValue()); feeDto.getFeeFrequency().setPayment(feePaymentName); } if (loanProduct.isFeePresent(fee)) { defaultFees.add(feeDto); } else { additionalFees.add(feeDto); } } } List<PenaltyBO> penalties = this.penaltyDao.getAllAppllicablePenaltyForLoanCreation(); for (PenaltyBO penalty : penalties) { if (loanProduct.isPenaltyPresent(penalty)) { defaultPenalties.add(penalty.toDto()); } } if (AccountingRules.isMultiCurrencyEnabled()) { defaultFees = getFilteredFeesByCurrency(defaultFees, loanProduct.getCurrency().getCurrencyId()); additionalFees = getFilteredFeesByCurrency(additionalFees, loanProduct.getCurrency().getCurrencyId()); } Map<String, String> defaultFeeOptions = new LinkedHashMap<String, String>(); for (org.mifos.dto.domain.FeeDto feeDto : defaultFees) { defaultFeeOptions.put(feeDto.getId(), feeDto.getName()); } Map<String, String> additionalFeeOptions = new LinkedHashMap<String, String>(); for (org.mifos.dto.domain.FeeDto feeDto : additionalFees) { additionalFeeOptions.put(feeDto.getId(), feeDto.getName()); } CustomerBO customer = this.customerDao.findCustomerById(customerId); boolean isRepaymentIndependentOfMeetingEnabled = new ConfigurationBusinessService() .isRepaymentIndepOfMeetingEnabled(); LoanDisbursementDateFactory loanDisbursementDateFactory = new LoanDisbursmentDateFactoryImpl(); LoanDisbursementDateFinder loanDisbursementDateFinder = null; LocalDate nextPossibleDisbursementDate = null; MeetingBO customerMeeting = customer.getCustomerMeetingValue(); LocalDate dateToStart = new LocalDate(); if (customerMeeting.isWeekly()) { LocalDate meetingStartDate = new LocalDate(customerMeeting.getMeetingStartDate()); if (dateToStart.isBefore(meetingStartDate)) { dateToStart = meetingStartDate; loanDisbursementDateFinder = loanDisbursementDateFactory.create(customer, loanProduct, false, isLoanWithBackdatedPayments); } else { loanDisbursementDateFinder = loanDisbursementDateFactory.create(customer, loanProduct, isRepaymentIndependentOfMeetingEnabled, isLoanWithBackdatedPayments); } nextPossibleDisbursementDate = loanDisbursementDateFinder .findClosestMatchingDateFromAndInclusiveOf(dateToStart); } else { loanDisbursementDateFinder = loanDisbursementDateFactory.create(customer, loanProduct, isRepaymentIndependentOfMeetingEnabled, isLoanWithBackdatedPayments); nextPossibleDisbursementDate = loanDisbursementDateFinder .findClosestMatchingDateFromAndInclusiveOf(dateToStart); } LoanAmountOption eligibleLoanAmount = loanProduct.eligibleLoanAmount( customer.getMaxLoanAmount(loanProduct), customer.getMaxLoanCycleForProduct(loanProduct)); LoanOfferingInstallmentRange eligibleNoOfInstall = loanProduct.eligibleNoOfInstall( customer.getMaxLoanAmount(loanProduct), customer.getMaxLoanCycleForProduct(loanProduct)); Double defaultInterestRate = loanProduct.getDefInterestRate(); Double maxInterestRate = loanProduct.getMaxInterestRate(); Double minInterestRate = loanProduct.getMinInterestRate(); LinkedHashMap<String, String> collateralOptions = new LinkedHashMap<String, String>(); LinkedHashMap<String, String> purposeOfLoanOptions = new LinkedHashMap<String, String>(); CustomValueDto customValueDto = legacyMasterDao.getLookUpEntity(MasterConstants.COLLATERAL_TYPES); List<CustomValueListElementDto> collateralTypes = customValueDto.getCustomValueListElements(); for (CustomValueListElementDto element : collateralTypes) { collateralOptions.put(element.getId().toString(), element.getName()); } // Business activities got in getPrdOfferings also but only for glim. List<ValueListElement> loanPurposes = legacyMasterDao .findValueListElements(MasterConstants.LOAN_PURPOSES); for (ValueListElement element : loanPurposes) { purposeOfLoanOptions.put(element.getId().toString(), element.getName()); } List<FundDto> fundDtos = new ArrayList<FundDto>(); List<FundBO> funds = getFunds(loanProduct); for (FundBO fund : funds) { FundDto fundDto = new FundDto(); fundDto.setId(Short.toString(fund.getFundId())); fundDto.setCode(translateFundCodeToDto(fund.getFundCode())); fundDto.setName(fund.getFundName()); fundDtos.add(fundDto); } ProductDetailsDto productDto = loanProduct.toDetailsDto(); CustomerDetailDto customerDetailDto = customer.toCustomerDetailDto(); Integer gracePeriodInInstallments = loanProduct.getGracePeriodDuration().intValue(); final List<PrdOfferingDto> loanProductDtos = retrieveActiveLoanProductsApplicableForCustomer(customer, isRepaymentIndependentOfMeetingEnabled); InterestType interestType = InterestType.fromInt(loanProduct.getInterestTypes().getId().intValue()); InterestTypesEntity productInterestType = this.loanProductDao.findInterestType(interestType); String interestTypeName = ApplicationContextProvider.getBean(MessageLookup.class) .lookup(productInterestType.getLookUpValue()); LinkedHashMap<String, String> daysOfTheWeekOptions = new LinkedHashMap<String, String>(); List<WeekDay> workingDays = new FiscalCalendarRules().getWorkingDays(); for (WeekDay workDay : workingDays) { String weekdayName = ApplicationContextProvider.getBean(MessageLookup.class) .lookup(workDay.getPropertiesKey()); workDay.setWeekdayName(weekdayName); daysOfTheWeekOptions.put(workDay.getValue().toString(), weekdayName); } LinkedHashMap<String, String> weeksOfTheMonthOptions = new LinkedHashMap<String, String>(); for (RankOfDay weekOfMonth : RankOfDay.values()) { String weekOfMonthName = ApplicationContextProvider.getBean(MessageLookup.class) .lookup(weekOfMonth.getPropertiesKey()); weeksOfTheMonthOptions.put(weekOfMonth.getValue().toString(), weekOfMonthName); } boolean variableInstallmentsAllowed = loanProduct.isVariableInstallmentsAllowed(); boolean fixedRepaymentSchedule = loanProduct.isFixedRepaymentSchedule(); Integer minGapInDays = Integer.valueOf(0); Integer maxGapInDays = Integer.valueOf(0); BigDecimal minInstallmentAmount = BigDecimal.ZERO; if (variableInstallmentsAllowed) { VariableInstallmentDetailsBO variableInstallmentsDetails = loanProduct .getVariableInstallmentDetails(); minGapInDays = variableInstallmentsDetails.getMinGapInDays(); maxGapInDays = variableInstallmentsDetails.getMaxGapInDays(); minInstallmentAmount = variableInstallmentsDetails.getMinInstallmentAmount().getAmount(); } boolean compareCashflowEnabled = loanProduct.isCashFlowCheckEnabled(); // GLIM specific final boolean isGroup = customer.isGroup(); final boolean isGlimEnabled = configurationPersistence.isGlimEnabled(); //Group Loan Account with members specific final boolean isGroupLoanWithMembersEnabled = AccountingRules.isGroupLoanWithMembers(); List<LoanAccountDetailsDto> clientDetails = new ArrayList<LoanAccountDetailsDto>(); if (isGroup && (isGlimEnabled || isGroupLoanWithMembersEnabled)) { final List<ClientBO> activeClientsOfGroup = customerDao.findActiveClientsUnderGroup(customer); if (activeClientsOfGroup == null || activeClientsOfGroup.isEmpty()) { throw new BusinessRuleException(GroupConstants.IMPOSSIBLE_TO_CREATE_GROUP_LOAN); } for (ClientBO client : activeClientsOfGroup) { LoanAccountDetailsDto clientDetail = new LoanAccountDetailsDto(); clientDetail.setClientId(client.getGlobalCustNum()); clientDetail.setClientName(client.getDisplayName()); clientDetails.add(clientDetail); } } // end of GLIM specific int digitsAfterDecimalForInterest = AccountingRules.getDigitsAfterDecimalForInterest().intValue(); int digitsBeforeDecimalForInterest = AccountingRules.getDigitsBeforeDecimalForInterest().intValue(); int digitsAfterDecimalForMonetaryAmounts = AccountingRules.getDigitsAfterDecimal().intValue(); int digitsBeforeDecimalForMonetaryAmounts = AccountingRules.getDigitsBeforeDecimal().intValue(); ApplicationConfigurationDto appConfig = new ApplicationConfigurationDto(digitsAfterDecimalForInterest, digitsBeforeDecimalForInterest, digitsAfterDecimalForMonetaryAmounts, digitsBeforeDecimalForMonetaryAmounts); Map<String, String> disbursalPaymentTypes = new LinkedHashMap<String, String>(); try { for (PaymentTypeDto paymentTypeDto : accountService.getLoanDisbursementTypes()) { disbursalPaymentTypes.put(paymentTypeDto.getValue().toString(), paymentTypeDto.getName()); } } catch (Exception e) { throw new SystemException(e); } Map<String, String> repaymentpaymentTypes = new LinkedHashMap<String, String>(); try { for (PaymentTypeDto paymentTypeDto : accountService.getLoanPaymentTypes()) { repaymentpaymentTypes.put(paymentTypeDto.getValue().toString(), paymentTypeDto.getName()); } } catch (Exception e) { throw new SystemException(e); } return new LoanCreationLoanDetailsDto(isRepaymentIndependentOfMeetingEnabled, loanOfferingMeetingDto, customer.getCustomerMeetingValue().toDto(), loanPurposes, productDto, gracePeriodInInstallments, customerDetailDto, loanProductDtos, interestTypeName, fundDtos, collateralOptions, purposeOfLoanOptions, defaultFeeOptions, additionalFeeOptions, defaultFees, additionalFees, BigDecimal.valueOf(eligibleLoanAmount.getDefaultLoanAmount()), BigDecimal.valueOf(eligibleLoanAmount.getMaxLoanAmount()), BigDecimal.valueOf(eligibleLoanAmount.getMinLoanAmount()), defaultInterestRate, maxInterestRate, minInterestRate, eligibleNoOfInstall.getDefaultNoOfInstall().intValue(), eligibleNoOfInstall.getMaxNoOfInstall().intValue(), eligibleNoOfInstall.getMinNoOfInstall().intValue(), nextPossibleDisbursementDate, daysOfTheWeekOptions, weeksOfTheMonthOptions, variableInstallmentsAllowed, fixedRepaymentSchedule, minGapInDays, maxGapInDays, minInstallmentAmount, compareCashflowEnabled, isGlimEnabled, isGroup, clientDetails, appConfig, defaultPenalties, disbursalPaymentTypes, repaymentpaymentTypes, isGroupLoanWithMembersEnabled); } catch (SystemException e) { throw new MifosRuntimeException(e); } }
From source file:org.mifos.application.servicefacade.LoanAccountServiceFacadeWebTier.java
License:Open Source License
@Override public Errors validateLoanDisbursementDate(LocalDate loanDisbursementDate, Integer customerId, Integer productId) {//from w w w . j ava 2 s . c om Errors errors = new Errors(); if (loanDisbursementDate.isBefore(new LocalDate())) { String[] args = { "" }; errors.addError("dibursementdate.cannot.be.before.todays.date", args); } CustomerBO customer = this.customerDao.findCustomerById(customerId); LocalDate customerActivationDate = new LocalDate(customer.getCustomerActivationDate()); if (loanDisbursementDate.isBefore(customerActivationDate)) { String[] args = { customerActivationDate.toString("dd-MMM-yyyy") }; errors.addError("dibursementdate.before.customer.activation.date", args); } LoanOfferingBO loanProduct = this.loanProductDao.findById(productId); LocalDate productStartDate = new LocalDate(loanProduct.getStartDate()); if (loanDisbursementDate.isBefore(productStartDate)) { String[] args = { productStartDate.toString("dd-MMM-yyyy") }; errors.addError("dibursementdate.before.product.startDate", args); } try { this.holidayServiceFacade.validateDisbursementDateForNewLoan(customer.getOfficeId(), loanDisbursementDate.toDateMidnight().toDateTime()); } catch (BusinessRuleException e) { String[] args = { "" }; errors.addError("dibursementdate.falls.on.holiday", args); } boolean isRepaymentIndependentOfMeetingEnabled = new ConfigurationBusinessService() .isRepaymentIndepOfMeetingEnabled(); LoanDisbursementDateFactory loanDisbursementDateFactory = new LoanDisbursmentDateFactoryImpl(); LoanDisbursementDateValidator loanDisbursementDateFinder = loanDisbursementDateFactory.create(customer, loanProduct, isRepaymentIndependentOfMeetingEnabled, false); boolean isValid = loanDisbursementDateFinder .isDisbursementDateValidInRelationToSchedule(loanDisbursementDate); if (!isValid) { String[] args = { "" }; errors.addError("dibursementdate.invalid.in.relation.to.meeting.schedule", args); } return errors; }