Example usage for org.joda.time LocalDate isBefore

List of usage examples for org.joda.time LocalDate isBefore

Introduction

In this page you can find the example usage for org.joda.time LocalDate isBefore.

Prototype

public boolean isBefore(ReadablePartial partial) 

Source Link

Document

Is this partial earlier than the specified partial.

Usage

From source file:com.gst.portfolio.savings.domain.SavingsAccount.java

License:Apache License

public Map<String, Object> rejectApplication(final AppUser currentUser, final JsonCommand command,
        final LocalDate tenantsTodayDate) {

    final Map<String, Object> actualChanges = new LinkedHashMap<>();

    final List<ApiParameterError> dataValidationErrors = new ArrayList<>();
    final DataValidatorBuilder baseDataValidator = new DataValidatorBuilder(dataValidationErrors)
            .resource(SAVINGS_ACCOUNT_RESOURCE_NAME + SavingsApiConstants.rejectAction);

    final SavingsAccountStatusType currentStatus = SavingsAccountStatusType.fromInt(this.status);
    if (!SavingsAccountStatusType.SUBMITTED_AND_PENDING_APPROVAL.hasStateOf(currentStatus)) {

        baseDataValidator.reset().parameter(SavingsApiConstants.rejectedOnDateParamName)
                .failWithCodeNoParameterAddedToErrorCode("not.in.submittedandpendingapproval.state");

        if (!dataValidationErrors.isEmpty()) {
            throw new PlatformApiDataValidationException(dataValidationErrors);
        }//w  w w.  j  a  v  a 2  s.  c  om
    }

    this.status = SavingsAccountStatusType.REJECTED.getValue();
    actualChanges.put(SavingsApiConstants.statusParamName, SavingsEnumerations.status(this.status));

    final LocalDate rejectedOn = command
            .localDateValueOfParameterNamed(SavingsApiConstants.rejectedOnDateParamName);
    final String rejectedOnAsString = command
            .stringValueOfParameterNamed(SavingsApiConstants.rejectedOnDateParamName);

    this.rejectedOnDate = rejectedOn.toDate();
    this.rejectedBy = currentUser;
    this.withdrawnOnDate = null;
    this.withdrawnBy = null;
    this.closedOnDate = rejectedOn.toDate();
    this.closedBy = currentUser;

    actualChanges.put(SavingsApiConstants.localeParamName, command.locale());
    actualChanges.put(SavingsApiConstants.dateFormatParamName, command.dateFormat());
    actualChanges.put(SavingsApiConstants.rejectedOnDateParamName, rejectedOnAsString);
    actualChanges.put(SavingsApiConstants.closedOnDateParamName, rejectedOnAsString);

    final LocalDate submittalDate = getSubmittedOnLocalDate();

    if (rejectedOn.isBefore(submittalDate)) {

        final DateTimeFormatter formatter = DateTimeFormat.forPattern(command.dateFormat())
                .withLocale(command.extractLocale());
        final String submittalDateAsString = formatter.print(submittalDate);

        baseDataValidator.reset().parameter(SavingsApiConstants.rejectedOnDateParamName)
                .value(submittalDateAsString)
                .failWithCodeNoParameterAddedToErrorCode("cannot.be.before.submittal.date");

        if (!dataValidationErrors.isEmpty()) {
            throw new PlatformApiDataValidationException(dataValidationErrors);
        }
    }

    if (rejectedOn.isAfter(tenantsTodayDate)) {

        baseDataValidator.reset().parameter(SavingsApiConstants.rejectedOnDateParamName).value(rejectedOn)
                .failWithCodeNoParameterAddedToErrorCode("cannot.be.a.future.date");

        if (!dataValidationErrors.isEmpty()) {
            throw new PlatformApiDataValidationException(dataValidationErrors);
        }
    }
    validateActivityNotBeforeClientOrGroupTransferDate(SavingsEvent.SAVINGS_APPLICATION_REJECTED, rejectedOn);

    return actualChanges;
}

From source file:com.gst.portfolio.savings.domain.SavingsAccount.java

License:Apache License

public Map<String, Object> applicantWithdrawsFromApplication(final AppUser currentUser,
        final JsonCommand command, final LocalDate tenantsTodayDate) {
    final Map<String, Object> actualChanges = new LinkedHashMap<>();

    final List<ApiParameterError> dataValidationErrors = new ArrayList<>();
    final DataValidatorBuilder baseDataValidator = new DataValidatorBuilder(dataValidationErrors)
            .resource(SAVINGS_ACCOUNT_RESOURCE_NAME + SavingsApiConstants.withdrawnByApplicantAction);

    final SavingsAccountStatusType currentStatus = SavingsAccountStatusType.fromInt(this.status);
    if (!SavingsAccountStatusType.SUBMITTED_AND_PENDING_APPROVAL.hasStateOf(currentStatus)) {

        baseDataValidator.reset().parameter(SavingsApiConstants.withdrawnOnDateParamName)
                .failWithCodeNoParameterAddedToErrorCode("not.in.submittedandpendingapproval.state");

        if (!dataValidationErrors.isEmpty()) {
            throw new PlatformApiDataValidationException(dataValidationErrors);
        }/*from  w  ww  . ja v a  2s.  c  om*/
    }

    this.status = SavingsAccountStatusType.WITHDRAWN_BY_APPLICANT.getValue();
    actualChanges.put(SavingsApiConstants.statusParamName, SavingsEnumerations.status(this.status));

    final LocalDate withdrawnOn = command
            .localDateValueOfParameterNamed(SavingsApiConstants.withdrawnOnDateParamName);
    final String withdrawnOnAsString = command
            .stringValueOfParameterNamed(SavingsApiConstants.withdrawnOnDateParamName);

    this.rejectedOnDate = null;
    this.rejectedBy = null;
    this.withdrawnOnDate = withdrawnOn.toDate();
    this.withdrawnBy = currentUser;
    this.closedOnDate = withdrawnOn.toDate();
    this.closedBy = currentUser;

    actualChanges.put(SavingsApiConstants.localeParamName, command.locale());
    actualChanges.put(SavingsApiConstants.dateFormatParamName, command.dateFormat());
    actualChanges.put(SavingsApiConstants.withdrawnOnDateParamName, withdrawnOnAsString);
    actualChanges.put(SavingsApiConstants.closedOnDateParamName, withdrawnOnAsString);

    final LocalDate submittalDate = getSubmittedOnLocalDate();
    if (withdrawnOn.isBefore(submittalDate)) {

        final DateTimeFormatter formatter = DateTimeFormat.forPattern(command.dateFormat())
                .withLocale(command.extractLocale());
        final String submittalDateAsString = formatter.print(submittalDate);

        baseDataValidator.reset().parameter(SavingsApiConstants.withdrawnOnDateParamName)
                .value(submittalDateAsString)
                .failWithCodeNoParameterAddedToErrorCode("cannot.be.before.submittal.date");

        if (!dataValidationErrors.isEmpty()) {
            throw new PlatformApiDataValidationException(dataValidationErrors);
        }
    }

    if (withdrawnOn.isAfter(tenantsTodayDate)) {

        baseDataValidator.reset().parameter(SavingsApiConstants.withdrawnOnDateParamName).value(withdrawnOn)
                .failWithCodeNoParameterAddedToErrorCode("cannot.be.a.future.date");

        if (!dataValidationErrors.isEmpty()) {
            throw new PlatformApiDataValidationException(dataValidationErrors);
        }
    }
    validateActivityNotBeforeClientOrGroupTransferDate(SavingsEvent.SAVINGS_APPLICATION_WITHDRAWAL_BY_CUSTOMER,
            withdrawnOn);

    return actualChanges;
}

From source file:com.gst.portfolio.savings.domain.SavingsAccount.java

License:Apache License

public Map<String, Object> activate(final AppUser currentUser, final JsonCommand command,
        final LocalDate tenantsTodayDate) {

    final Map<String, Object> actualChanges = new LinkedHashMap<>();

    final List<ApiParameterError> dataValidationErrors = new ArrayList<>();
    final DataValidatorBuilder baseDataValidator = new DataValidatorBuilder(dataValidationErrors)
            .resource(depositAccountType().resourceName() + SavingsApiConstants.activateAction);

    final SavingsAccountStatusType currentStatus = SavingsAccountStatusType.fromInt(this.status);
    if (!SavingsAccountStatusType.APPROVED.hasStateOf(currentStatus)) {

        baseDataValidator.reset().parameter(SavingsApiConstants.activatedOnDateParamName)
                .failWithCodeNoParameterAddedToErrorCode("not.in.approved.state");

        if (!dataValidationErrors.isEmpty()) {
            throw new PlatformApiDataValidationException(dataValidationErrors);
        }//  w  w w  .j ava  2 s. c om
    }

    final Locale locale = command.extractLocale();
    final DateTimeFormatter fmt = DateTimeFormat.forPattern(command.dateFormat()).withLocale(locale);
    final LocalDate activationDate = command
            .localDateValueOfParameterNamed(SavingsApiConstants.activatedOnDateParamName);

    this.status = SavingsAccountStatusType.ACTIVE.getValue();
    actualChanges.put(SavingsApiConstants.statusParamName, SavingsEnumerations.status(this.status));
    actualChanges.put(SavingsApiConstants.localeParamName, command.locale());
    actualChanges.put(SavingsApiConstants.dateFormatParamName, command.dateFormat());
    actualChanges.put(SavingsApiConstants.activatedOnDateParamName, activationDate.toString(fmt));

    this.rejectedOnDate = null;
    this.rejectedBy = null;
    this.withdrawnOnDate = null;
    this.withdrawnBy = null;
    this.closedOnDate = null;
    this.closedBy = null;
    this.activatedOnDate = activationDate.toDate();
    this.activatedBy = currentUser;
    this.lockedInUntilDate = calculateDateAccountIsLockedUntil(getActivationLocalDate());

    /*
     * if (annualFeeSettingsSet()) {
     * updateToNextAnnualFeeDueDateFrom(getActivationLocalDate()); }
     */
    if (this.client != null && this.client.isActivatedAfter(activationDate)) {
        final DateTimeFormatter formatter = DateTimeFormat.forPattern(command.dateFormat())
                .withLocale(command.extractLocale());
        final String dateAsString = formatter.print(this.client.getActivationLocalDate());
        baseDataValidator.reset().parameter(SavingsApiConstants.activatedOnDateParamName).value(dateAsString)
                .failWithCodeNoParameterAddedToErrorCode("cannot.be.before.client.activation.date");
        if (!dataValidationErrors.isEmpty()) {
            throw new PlatformApiDataValidationException(dataValidationErrors);
        }
    }

    if (this.group != null && this.group.isActivatedAfter(activationDate)) {
        final DateTimeFormatter formatter = DateTimeFormat.forPattern(command.dateFormat())
                .withLocale(command.extractLocale());
        final String dateAsString = formatter.print(this.client.getActivationLocalDate());
        baseDataValidator.reset().parameter(SavingsApiConstants.activatedOnDateParamName).value(dateAsString)
                .failWithCodeNoParameterAddedToErrorCode("cannot.be.before.group.activation.date");
        if (!dataValidationErrors.isEmpty()) {
            throw new PlatformApiDataValidationException(dataValidationErrors);
        }
    }

    final LocalDate approvalDate = getApprovedOnLocalDate();
    if (activationDate.isBefore(approvalDate)) {

        final DateTimeFormatter formatter = DateTimeFormat.forPattern(command.dateFormat())
                .withLocale(command.extractLocale());
        final String dateAsString = formatter.print(approvalDate);

        baseDataValidator.reset().parameter(SavingsApiConstants.activatedOnDateParamName).value(dateAsString)
                .failWithCodeNoParameterAddedToErrorCode("cannot.be.before.approval.date");

        if (!dataValidationErrors.isEmpty()) {
            throw new PlatformApiDataValidationException(dataValidationErrors);
        }
    }

    if (activationDate.isAfter(tenantsTodayDate)) {

        baseDataValidator.reset().parameter(SavingsApiConstants.activatedOnDateParamName).value(activationDate)
                .failWithCodeNoParameterAddedToErrorCode("cannot.be.a.future.date");

        if (!dataValidationErrors.isEmpty()) {
            throw new PlatformApiDataValidationException(dataValidationErrors);
        }
    }
    validateActivityNotBeforeClientOrGroupTransferDate(SavingsEvent.SAVINGS_ACTIVATE, activationDate);

    return actualChanges;
}

From source file:com.gst.portfolio.savings.domain.SavingsAccount.java

License:Apache License

public Map<String, Object> close(final AppUser currentUser, final JsonCommand command,
        final LocalDate tenantsTodayDate) {

    final Map<String, Object> actualChanges = new LinkedHashMap<>();

    final List<ApiParameterError> dataValidationErrors = new ArrayList<>();
    final DataValidatorBuilder baseDataValidator = new DataValidatorBuilder(dataValidationErrors)
            .resource(SAVINGS_ACCOUNT_RESOURCE_NAME + SavingsApiConstants.closeAction);

    final SavingsAccountStatusType currentStatus = SavingsAccountStatusType.fromInt(this.status);
    if (!SavingsAccountStatusType.ACTIVE.hasStateOf(currentStatus)) {
        baseDataValidator.reset().failWithCodeNoParameterAddedToErrorCode("not.in.active.state");
        if (!dataValidationErrors.isEmpty()) {
            throw new PlatformApiDataValidationException(dataValidationErrors);
        }//  w  w w.  ja  v  a  2 s  .c o m
    }

    final Locale locale = command.extractLocale();
    final DateTimeFormatter fmt = DateTimeFormat.forPattern(command.dateFormat()).withLocale(locale);
    final LocalDate closedDate = command
            .localDateValueOfParameterNamed(SavingsApiConstants.closedOnDateParamName);

    if (closedDate.isBefore(getActivationLocalDate())) {
        baseDataValidator.reset().parameter(SavingsApiConstants.closedOnDateParamName).value(closedDate)
                .failWithCode("must.be.after.activation.date");
        if (!dataValidationErrors.isEmpty()) {
            throw new PlatformApiDataValidationException(dataValidationErrors);
        }
    }
    if (closedDate.isAfter(tenantsTodayDate)) {
        baseDataValidator.reset().parameter(SavingsApiConstants.closedOnDateParamName).value(closedDate)
                .failWithCode("cannot.be.a.future.date");
        if (!dataValidationErrors.isEmpty()) {
            throw new PlatformApiDataValidationException(dataValidationErrors);
        }
    }
    final List<SavingsAccountTransaction> savingsAccountTransactions = retreiveListOfTransactions();
    if (savingsAccountTransactions.size() > 0) {
        final SavingsAccountTransaction accountTransaction = savingsAccountTransactions
                .get(savingsAccountTransactions.size() - 1);
        if (accountTransaction.isAfter(closedDate)) {
            baseDataValidator.reset().parameter(SavingsApiConstants.closedOnDateParamName).value(closedDate)
                    .failWithCode("must.be.after.last.transaction.date");
            if (!dataValidationErrors.isEmpty()) {
                throw new PlatformApiDataValidationException(dataValidationErrors);
            }
        }
    }
    if (getAccountBalance().doubleValue() != 0) {
        baseDataValidator.reset().failWithCodeNoParameterAddedToErrorCode("results.in.balance.not.zero");
        if (!dataValidationErrors.isEmpty()) {
            throw new PlatformApiDataValidationException(dataValidationErrors);
        }
    }
    validateActivityNotBeforeClientOrGroupTransferDate(SavingsEvent.SAVINGS_CLOSE_ACCOUNT, closedDate);
    this.status = SavingsAccountStatusType.CLOSED.getValue();
    actualChanges.put(SavingsApiConstants.statusParamName, SavingsEnumerations.status(this.status));
    actualChanges.put(SavingsApiConstants.localeParamName, command.locale());
    actualChanges.put(SavingsApiConstants.dateFormatParamName, command.dateFormat());
    actualChanges.put(SavingsApiConstants.closedOnDateParamName, closedDate.toString(fmt));

    this.rejectedOnDate = null;
    this.rejectedBy = null;
    this.withdrawnOnDate = null;
    this.withdrawnBy = null;
    this.closedOnDate = closedDate.toDate();
    this.closedBy = currentUser;

    return actualChanges;
}

From source file:com.gst.portfolio.savings.domain.SavingsAccount.java

License:Apache License

protected void validateActivityNotBeforeClientOrGroupTransferDate(final SavingsEvent event,
        final LocalDate activityDate) {
    if (this.client != null && this.client.getOfficeJoiningLocalDate() != null) {
        final LocalDate clientOfficeJoiningDate = this.client.getOfficeJoiningLocalDate();
        if (activityDate.isBefore(clientOfficeJoiningDate)) {
            throw new SavingsActivityPriorToClientTransferException(event.toString(), clientOfficeJoiningDate);
        }/*  w  w  w.ja va2 s .com*/
    }
}

From source file:com.gst.portfolio.savings.domain.SavingsAccount.java

License:Apache License

public void addCharge(final DateTimeFormatter formatter, final SavingsAccountCharge savingsAccountCharge,
        final Charge chargeDefinition) {

    final List<ApiParameterError> dataValidationErrors = new ArrayList<>();
    final DataValidatorBuilder baseDataValidator = new DataValidatorBuilder(dataValidationErrors)
            .resource(SAVINGS_ACCOUNT_RESOURCE_NAME);

    if (isClosed()) {
        baseDataValidator.reset()/*from   w w w .j av  a  2s  . c  o m*/
                .failWithCodeNoParameterAddedToErrorCode("transaction.invalid.account.is.closed");
        if (!dataValidationErrors.isEmpty()) {
            throw new PlatformApiDataValidationException(dataValidationErrors);
        }
    }

    if (!hasCurrencyCodeOf(chargeDefinition.getCurrencyCode())) {
        baseDataValidator.reset().failWithCodeNoParameterAddedToErrorCode(
                "transaction.invalid.account.currency.and.charge.currency.not.same");
        if (!dataValidationErrors.isEmpty()) {
            throw new PlatformApiDataValidationException(dataValidationErrors);
        }
    }

    final LocalDate chargeDueDate = savingsAccountCharge.getDueLocalDate();

    if (savingsAccountCharge.isOnSpecifiedDueDate()) {
        if (getActivationLocalDate() != null && chargeDueDate.isBefore(getActivationLocalDate())) {
            baseDataValidator.reset().parameter(dueAsOfDateParamName)
                    .value(getActivationLocalDate().toString(formatter))
                    .failWithCodeNoParameterAddedToErrorCode("before.activationDate");
            throw new PlatformApiDataValidationException(dataValidationErrors);
        } else if (getSubmittedOnLocalDate() != null && chargeDueDate.isBefore(getSubmittedOnLocalDate())) {
            baseDataValidator.reset().parameter(dueAsOfDateParamName)
                    .value(getSubmittedOnLocalDate().toString(formatter))
                    .failWithCodeNoParameterAddedToErrorCode("before.submittedOnDate");
            throw new PlatformApiDataValidationException(dataValidationErrors);
        }
    }

    if (savingsAccountCharge.isSavingsActivation()
            && !(isSubmittedAndPendingApproval() || (isApproved() && isNotActive()))) {
        baseDataValidator.reset().failWithCodeNoParameterAddedToErrorCode(
                "not.valid.account.status.cannot.add.activation.time.charge");
        throw new PlatformApiDataValidationException(dataValidationErrors);
    }

    // Only one withdrawal fee is supported per account
    if (savingsAccountCharge.isWithdrawalFee()) {
        if (this.isWithDrawalFeeExists()) {
            baseDataValidator.reset().failWithCodeNoParameterAddedToErrorCode(
                    "multiple.withdrawal.fee.per.account.not.supported");
            throw new PlatformApiDataValidationException(dataValidationErrors);
        }
    }

    // Only one annual fee is supported per account
    if (savingsAccountCharge.isAnnualFee()) {
        if (this.isAnnualFeeExists()) {
            baseDataValidator.reset()
                    .failWithCodeNoParameterAddedToErrorCode("multiple.annual.fee.per.account.not.supported");
            throw new PlatformApiDataValidationException(dataValidationErrors);
        }

    }

    if (savingsAccountCharge.isAnnualFee() || savingsAccountCharge.isMonthlyFee()
            || savingsAccountCharge.isWeeklyFee()) {
        // update due date
        if (isActive()) {
            savingsAccountCharge.updateToNextDueDateFrom(getActivationLocalDate());
        } else if (isApproved()) {
            savingsAccountCharge.updateToNextDueDateFrom(getApprovedOnLocalDate());
        }
    }

    // activation charge and withdrawal charges not required this validation
    if (savingsAccountCharge.isOnSpecifiedDueDate()) {
        validateActivityNotBeforeClientOrGroupTransferDate(SavingsEvent.SAVINGS_APPLY_CHARGE, chargeDueDate);
    }

    // add new charge to savings account
    this.charges.add(savingsAccountCharge);

}

From source file:com.gst.portfolio.savings.domain.SavingsAccount.java

License:Apache License

public void payCharge(final SavingsAccountCharge savingsAccountCharge, final BigDecimal amountPaid,
        final LocalDate transactionDate, final DateTimeFormatter formatter, final AppUser user) {

    final List<ApiParameterError> dataValidationErrors = new ArrayList<>();
    final DataValidatorBuilder baseDataValidator = new DataValidatorBuilder(dataValidationErrors)
            .resource(SAVINGS_ACCOUNT_RESOURCE_NAME);

    if (isClosed()) {
        baseDataValidator.reset()//from  w w  w.  j av a  2  s  .c om
                .failWithCodeNoParameterAddedToErrorCode("transaction.invalid.account.is.closed");
        if (!dataValidationErrors.isEmpty()) {
            throw new PlatformApiDataValidationException(dataValidationErrors);
        }
    }

    if (isNotActive()) {
        baseDataValidator.reset()
                .failWithCodeNoParameterAddedToErrorCode("transaction.invalid.account.is.not.active");
        if (!dataValidationErrors.isEmpty()) {
            throw new PlatformApiDataValidationException(dataValidationErrors);
        }
    }

    if (savingsAccountCharge.isNotActive()) {
        baseDataValidator.reset().failWithCodeNoParameterAddedToErrorCode("charge.is.not.active");
        if (!dataValidationErrors.isEmpty()) {
            throw new PlatformApiDataValidationException(dataValidationErrors);
        }
    }

    if (getActivationLocalDate() != null && transactionDate.isBefore(getActivationLocalDate())) {
        baseDataValidator.reset().parameter(dueAsOfDateParamName)
                .value(getActivationLocalDate().toString(formatter))
                .failWithCodeNoParameterAddedToErrorCode("transaction.before.activationDate");
        throw new PlatformApiDataValidationException(dataValidationErrors);
    }

    if (DateUtils.isDateInTheFuture(transactionDate)) {
        baseDataValidator.reset().parameter(dueAsOfDateParamName).value(transactionDate.toString(formatter))
                .failWithCodeNoParameterAddedToErrorCode("transaction.is.futureDate");
        throw new PlatformApiDataValidationException(dataValidationErrors);
    }

    if (savingsAccountCharge.isSavingsActivation()) {
        baseDataValidator.reset().failWithCodeNoParameterAddedToErrorCode(
                "transaction.not.valid.cannot.pay.activation.time.charge.is.automated");
        throw new PlatformApiDataValidationException(dataValidationErrors);
    }

    if (savingsAccountCharge.isAnnualFee()) {
        final LocalDate annualFeeDueDate = savingsAccountCharge.getDueLocalDate();
        if (annualFeeDueDate == null) {
            baseDataValidator.reset().failWithCodeNoParameterAddedToErrorCode("no.annualfee.settings");
            throw new PlatformApiDataValidationException(dataValidationErrors);
        }

        if (!annualFeeDueDate.equals(transactionDate)) {
            baseDataValidator.reset().failWithCodeNoParameterAddedToErrorCode("invalid.date");
            throw new PlatformApiDataValidationException(dataValidationErrors);
        }

        Date currentAnnualFeeNextDueDate = findLatestAnnualFeeTransactionDueDate();
        if (currentAnnualFeeNextDueDate != null
                && new LocalDate(currentAnnualFeeNextDueDate).isEqual(transactionDate)) {
            baseDataValidator.reset().parameter("dueDate").value(transactionDate.toString(formatter))
                    .failWithCodeNoParameterAddedToErrorCode("transaction.exists.on.date");

            throw new PlatformApiDataValidationException(dataValidationErrors);
        }
    }

    // validate charge is not already paid or waived
    if (savingsAccountCharge.isWaived()) {
        baseDataValidator.reset().failWithCodeNoParameterAddedToErrorCode(
                "transaction.invalid.account.charge.is.already.waived");
        if (!dataValidationErrors.isEmpty()) {
            throw new PlatformApiDataValidationException(dataValidationErrors);
        }
    } else if (savingsAccountCharge.isPaid()) {
        baseDataValidator.reset()
                .failWithCodeNoParameterAddedToErrorCode("transaction.invalid.account.charge.is.paid");
        if (!dataValidationErrors.isEmpty()) {
            throw new PlatformApiDataValidationException(dataValidationErrors);
        }
    }

    final Money chargePaid = Money.of(currency, amountPaid);
    if (!savingsAccountCharge.getAmountOutstanding(getCurrency()).isGreaterThanOrEqualTo(chargePaid)) {
        baseDataValidator.reset()
                .failWithCodeNoParameterAddedToErrorCode("transaction.invalid.charge.amount.paid.in.access");
        if (!dataValidationErrors.isEmpty()) {
            throw new PlatformApiDataValidationException(dataValidationErrors);
        }
    }

    this.payCharge(savingsAccountCharge, chargePaid, transactionDate, user);
}

From source file:com.gst.portfolio.savings.domain.SavingsAccountTransaction.java

License:Apache License

public void updateCumulativeBalanceAndDates(final MonetaryCurrency currency, final LocalDate endOfBalanceDate) {
    // balance end date should not be before transaction date
    if (endOfBalanceDate != null && endOfBalanceDate.isBefore(this.transactionLocalDate())) {
        this.balanceEndDate = this.transactionLocalDate().toDate();
    } else if (endOfBalanceDate != null) {
        this.balanceEndDate = endOfBalanceDate.toDate();
    } else {/*from   w w w. j a v  a 2  s .co m*/
        this.balanceEndDate = null;
    }
    this.balanceNumberOfDays = LocalDateInterval.create(getTransactionLocalDate(), endOfBalanceDate)
            .daysInPeriodInclusiveOfEndDate();
    this.cumulativeBalance = Money.of(currency, this.runningBalance).multipliedBy(this.balanceNumberOfDays)
            .getAmount();
}

From source file:com.gst.portfolio.savings.domain.SavingsHelper.java

License:Apache License

public List<LocalDateInterval> determineInterestPostingPeriods(
        final LocalDate startInterestCalculationLocalDate, final LocalDate interestPostingUpToDate,
        final SavingsPostingInterestPeriodType postingPeriodType, final Integer financialYearBeginningMonth,
        List<LocalDate> postInterestAsOn) {

    final List<LocalDateInterval> postingPeriods = new ArrayList<>();
    LocalDate periodStartDate = startInterestCalculationLocalDate;
    LocalDate periodEndDate = periodStartDate;
    LocalDate actualPeriodStartDate = periodStartDate;

    while (!periodStartDate.isAfter(interestPostingUpToDate)
            && !periodEndDate.isAfter(interestPostingUpToDate)) {

        final LocalDate interestPostingLocalDate = determineInterestPostingPeriodEndDateFrom(periodStartDate,
                postingPeriodType, interestPostingUpToDate, financialYearBeginningMonth);

        periodEndDate = interestPostingLocalDate.minusDays(1);

        if (!postInterestAsOn.isEmpty()) {
            for (LocalDate transactiondate : postInterestAsOn) {
                if (periodStartDate.isBefore(transactiondate)
                        && (periodEndDate.isAfter(transactiondate) || periodEndDate.isEqual(transactiondate))) {
                    periodEndDate = transactiondate.minusDays(1);
                    actualPeriodStartDate = periodEndDate;
                    break;
                }//from w  w  w  .ja v a  2 s  .co m
            }
        }

        postingPeriods.add(LocalDateInterval.create(periodStartDate, periodEndDate));

        if (actualPeriodStartDate.isEqual(periodEndDate)) {
            periodEndDate = actualPeriodStartDate.plusDays(1);
            periodStartDate = actualPeriodStartDate.plusDays(1);
        } else {
            periodEndDate = interestPostingLocalDate;
            periodStartDate = interestPostingLocalDate;
        }
    }

    return postingPeriods;
}

From source file:com.gst.portfolio.savings.service.SavingsAccountWritePlatformServiceJpaRepositoryImpl.java

License:Apache License

@Override
public CommandProcessingResult postInterest(final JsonCommand command) {

    Long savingsId = command.getSavingsId();
    final boolean postInterestAs = command.booleanPrimitiveValueOfParameterNamed("isPostInterestAsOn");
    final LocalDate transactionDate = command.localDateValueOfParameterNamed("transactionDate");
    final SavingsAccount account = this.savingAccountAssembler.assembleFrom(savingsId);
    checkClientOrGroupActive(account);/*from   w  ww.  j  a v a  2  s.  c  o  m*/
    if (postInterestAs == true) {

        if (transactionDate == null) {

            throw new PostInterestAsOnDateException(PostInterestAsOnException_TYPE.VALID_DATE);
        }
        if (transactionDate.isBefore(account.accountSubmittedOrActivationDate())) {
            throw new PostInterestAsOnDateException(PostInterestAsOnException_TYPE.ACTIVATION_DATE);
        }
        List<SavingsAccountTransaction> savingTransactions = account.getTransactions();
        for (SavingsAccountTransaction savingTransaction : savingTransactions) {
            if (transactionDate.toDate().before(savingTransaction.getDateOf())) {
                throw new PostInterestAsOnDateException(PostInterestAsOnException_TYPE.LAST_TRANSACTION_DATE);
            }
        }

        LocalDate today = DateUtils.getLocalDateOfTenant();
        if (transactionDate.isAfter(today)) {
            throw new PostInterestAsOnDateException(PostInterestAsOnException_TYPE.FUTURE_DATE);
        }

    }
    postInterest(account, postInterestAs, transactionDate);
    return new CommandProcessingResultBuilder() //
            .withEntityId(savingsId) //
            .withOfficeId(account.officeId()) //
            .withClientId(account.clientId()) //
            .withGroupId(account.groupId()) //
            .withSavingsId(savingsId) //
            .build();
}