/* * Copyright (c) 2005-2011 Grameen Foundation USA * All rights reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or * implied. See the License for the specific language governing * permissions and limitations under the License. * * See also http://www.apache.org/licenses/LICENSE-2.0.html for an * explanation of the license and how it is applied. */ package org.mifos.accounts.savings.struts.actionforms; import java.util.Locale; import javax.servlet.http.HttpServletRequest; import org.apache.commons.lang.StringUtils; import org.apache.struts.Globals; import org.apache.struts.action.ActionErrors; import org.apache.struts.action.ActionMapping; import org.apache.struts.action.ActionMessage; import org.joda.time.LocalDate; import org.mifos.accounts.business.AccountPaymentEntity; import org.mifos.accounts.savings.business.SavingsBO; import org.mifos.accounts.savings.util.helpers.SavingsConstants; import org.mifos.accounts.savings.util.helpers.SavingsHelper; import org.mifos.accounts.util.helpers.AccountActionTypes; import org.mifos.accounts.util.helpers.AccountConstants; import org.mifos.customers.util.helpers.CustomerConstants; import org.mifos.framework.exceptions.ApplicationException; import org.mifos.framework.struts.actionforms.BaseActionForm; import org.mifos.framework.util.helpers.Constants; import org.mifos.framework.util.helpers.DoubleConversionResult; import org.mifos.framework.util.helpers.SessionUtils; public class SavingsApplyAdjustmentActionForm extends BaseActionForm { private static final long serialVersionUID = 6884712605827765997L; public String lastPaymentAmount; public String note; public String input; public String lastPaymentAmountOption; public Integer paymentId; private String trxnDateDD; private String trxnDateMM; private String trxnDateYY; public SavingsApplyAdjustmentActionForm() { } public String getLastPaymentAmount() { return lastPaymentAmount; } public void setLastPaymentAmount(String lastPaymentAmount) { this.lastPaymentAmount = lastPaymentAmount; } public String getInput() { return input; } public void setInput(String input) { this.input = input; } public String getNote() { return note; } public void setNote(String note) { this.note = note; } public String getLastPaymentAmountOption() { return lastPaymentAmountOption; } public void setLastPaymentAmountOption(String lastPaymentAmountOption) { this.lastPaymentAmountOption = lastPaymentAmountOption; } public Integer getPaymentId() { return paymentId; } public void setPaymentId(Integer paymentId) { this.paymentId = paymentId; } public String getTrxnDateDD() { return trxnDateDD; } public void setTrxnDateDD(String trxnDateDD) { this.trxnDateDD = trxnDateDD; } public String getTrxnDateMM() { return trxnDateMM; } public void setTrxnDateMM(String trxnDateMM) { this.trxnDateMM = trxnDateMM; } public String getTrxnDateYY() { return trxnDateYY; } public void setTrxnDateYY(String trxnDateYY) { this.trxnDateYY = trxnDateYY; } public LocalDate getTrxnDateLocal() { LocalDate trxnDate = null; if (isTrxnDateEntered()) { Integer day = Integer.parseInt(trxnDateDD); Integer month = Integer.parseInt(trxnDateMM); Integer year = Integer.parseInt(trxnDateYY); trxnDate = new LocalDate(year, month, day); } return trxnDate; } public void setTrxnDate(LocalDate trxnDate) { if (trxnDate == null) { trxnDateDD = null; trxnDateMM = null; trxnDateYY = null; } else { trxnDateDD = String.valueOf(trxnDate.getDayOfMonth()); trxnDateMM = String.valueOf(trxnDate.getMonthOfYear()); trxnDateYY = String.valueOf(trxnDate.getYear()); } } public String getTrxnDate() { return compileDateString(trxnDateDD, trxnDateMM, trxnDateYY); } @Override public ActionErrors validate(ActionMapping mapping, HttpServletRequest request) { String method = request.getParameter("method"); ActionErrors errors = new ActionErrors(); if (null == request.getAttribute(Constants.CURRENTFLOWKEY)) { request.setAttribute(Constants.CURRENTFLOWKEY, request.getParameter(Constants.CURRENTFLOWKEY)); } try { if (method != null && method.equals("preview")) { SavingsBO savings = (SavingsBO) SessionUtils.getAttribute(Constants.BUSINESS_KEY, request); AccountPaymentEntity payment = savings.findPaymentById(this.paymentId); if (payment == null || savings.getLastPmntAmnt() == 0 || !(new SavingsHelper().getPaymentActionType(payment).equals( AccountActionTypes.SAVINGS_WITHDRAWAL.getValue()) || new SavingsHelper() .getPaymentActionType(payment).equals(AccountActionTypes.SAVINGS_DEPOSIT.getValue()))) { errors.add(SavingsConstants.INVALID_LAST_PAYMENT, new ActionMessage( SavingsConstants.INVALID_LAST_PAYMENT)); } else { if (StringUtils.isBlank(getLastPaymentAmount())) { errors.add(SavingsConstants.INVALID_ADJUSTMENT_AMOUNT, new ActionMessage( SavingsConstants.INVALID_ADJUSTMENT_AMOUNT)); } if (StringUtils.isNotBlank(getLastPaymentAmount())) { Locale locale = getUserContext(request).getPreferredLocale(); validateAmount(errors, locale); } if (StringUtils.isNotBlank(getNote()) && getNote().length() > CustomerConstants.COMMENT_LENGTH) { errors.add(AccountConstants.MAX_NOTE_LENGTH, new ActionMessage( AccountConstants.MAX_NOTE_LENGTH, AccountConstants.COMMENT_LENGTH)); } validateDate(errors); errors.add(super.validate(mapping, request)); } } } catch (ApplicationException ae) { errors.add(ae.getKey(), new ActionMessage(ae.getKey(), ae.getValues())); } if (!errors.isEmpty()) { request.setAttribute(Globals.ERROR_KEY, errors); request.setAttribute("methodCalled", method); } return errors; } private void validateAmount(ActionErrors errors, Locale locale) { DoubleConversionResult conversionResult = validateAmount(getLastPaymentAmount(), SavingsConstants.AMOUNT, errors); if (conversionResult.getErrors().size() == 0 && !(conversionResult.getDoubleValue() > 0.0)) { // commented off for [MIFOS-2958] /* * addError(errors, SavingsConstants.AMOUNT, AccountConstants.ERRORS_MUST_BE_GREATER_THAN_ZERO, * getLocalizedMessage(SavingsConstants.AMOUNT, locale, FilePaths.SAVING_UI_RESOURCE_PROPERTYFILE)); */ } } private void validateDate(ActionErrors errors) { try { if (isTrxnDateEntered()) { LocalDate trxnDate = getTrxnDateLocal(); if (trxnDate.isAfter(new LocalDate())) { addError(errors, SavingsConstants.TRXN_DATE_FIELD, SavingsConstants.FUTURE_DATE, getLocalizedMessage(SavingsConstants.TRXN_DATE)); } } else { addError(errors, SavingsConstants.TRXN_DATE_FIELD, SavingsConstants.MANDATORY, getLocalizedMessage(SavingsConstants.TRXN_DATE)); } } catch (RuntimeException ex) { addError(errors, SavingsConstants.TRXN_DATE_FIELD, SavingsConstants.INVALID_TRXN_DATE, getLocalizedMessage(SavingsConstants.TRXN_DATE)); } } public boolean isTrxnDateEntered() { return StringUtils.isNotBlank(trxnDateDD) || StringUtils.isNotBlank(trxnDateMM) || StringUtils.isNotBlank(trxnDateYY); } }