/* * 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.accounting.struts.actionform; import java.util.Locale; import java.util.ResourceBundle; import javax.servlet.http.HttpServletRequest; import org.apache.commons.lang.StringUtils; import org.apache.struts.action.ActionErrors; import org.apache.struts.action.ActionMapping; import org.apache.struts.action.ActionMessage; import org.mifos.application.accounting.util.helpers.SimpleAccountingConstants; import org.mifos.application.admin.servicefacade.InvalidDateException; import org.mifos.application.master.business.MifosCurrency; import org.mifos.framework.struts.actionforms.BaseActionForm; import org.mifos.framework.util.helpers.ConversionError; import org.mifos.framework.util.helpers.DateUtils; import org.mifos.framework.util.helpers.DoubleConversionResult; import org.mifos.framework.util.helpers.FilePaths; import org.mifos.security.util.UserContext; import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class JournalVoucherActionForm extends BaseActionForm { private static final Logger logger = LoggerFactory .getLogger(MultipleGeneralLedgerActionForm.class); private String voucherDate; private String voucherId; private String trxnType; private String debitAccountHead; private String officeHierarchy; private String office; private String creditAccountHead; private String amount; private String voucherNotes; private String officeLevelId; public String getOfficeLevelId() { return officeLevelId; } public void setOfficeLevelId(String officeLevelId) { this.officeLevelId = officeLevelId; } public String getVoucherId() { return voucherId; } public void setVoucherId(String voucherId) { this.voucherId = voucherId; } public String getTrxnType() { return trxnType; } public void setTrxnType(String trxnType) { this.trxnType = trxnType; } public String getDebitAccountHead() { return debitAccountHead; } public void setDebitAccountHead(String debitAccountHead) { this.debitAccountHead = debitAccountHead; } public String getOfficeHierarchy() { return officeHierarchy; } public void setOfficeHierarchy(String officeHierarchy) { this.officeHierarchy = officeHierarchy; } public String getOffice() { return office; } public void setOffice(String office) { this.office = office; } public String getCreditAccountHead() { return creditAccountHead; } public void setCreditAccountHead(String creditAccountHead) { this.creditAccountHead = creditAccountHead; } public String getAmount() { return amount; } public void setAmount(String amount) { this.amount = amount.replaceAll(",", ""); } public String getVoucherNotes() { return voucherNotes; } public void setVoucherNotes(String voucherNotes) { this.voucherNotes = voucherNotes; } public void setVoucherDate(String voucherDate) { this.voucherDate = voucherDate; } public void setVoucherDate(java.util.Date date){ this.voucherDate = DateUtils.format(date); } public String getVoucherDate() { return voucherDate; } @Override public void reset(ActionMapping mapping, HttpServletRequest request) { logger.debug("reset method called"); if (request.getParameter(SimpleAccountingConstants.METHOD).equals( "load")) { this.voucherDate = null; this.office = null; this.officeHierarchy = null; this.trxnType = null; this.debitAccountHead = null; this.creditAccountHead = null; this.amount = null; this.voucherNotes = null; } } @Override public ActionErrors validate(ActionMapping mapping, HttpServletRequest request) { logger.debug("JournalVoucherActionForm.validate"); ActionErrors errors = new ActionErrors(); if (request.getParameter(SimpleAccountingConstants.METHOD) .equalsIgnoreCase(SimpleAccountingConstants.PREVIEW)) { return mandatoryCheck(getUserContext(request)); } return errors; } private ActionErrors voucherDateValidate(ActionErrors errors, Locale locale) { if (StringUtils.isNotBlank(getVoucherDate()) && !DateUtils.isValidDate(getVoucherDate())) { ResourceBundle resources = ResourceBundle.getBundle( FilePaths.SIMPLE_ACCOUNTING_RESOURCE, locale); String voucherDate = resources .getString(SimpleAccountingConstants.VOUCHERDATE); errors.add(SimpleAccountingConstants.INVALIDDATE, new ActionMessage(SimpleAccountingConstants.INVALIDDATE, voucherDate)); } return errors; } private ActionErrors mandatoryCheck(UserContext userContext) { Locale locale = userContext.getPreferredLocale(); ResourceBundle resources = ResourceBundle.getBundle( FilePaths.SIMPLE_ACCOUNTING_RESOURCE, locale); String voucher_date = resources .getString(SimpleAccountingConstants.VOUCHERDATE); String office_Hierarchy = resources .getString(SimpleAccountingConstants.OFFICE_HIERARCHY); String officeId = resources.getString(SimpleAccountingConstants.OFFICE); String main_Account = resources .getString(SimpleAccountingConstants.DEBIT_ACCOUNT); String subAccount = resources .getString(SimpleAccountingConstants.CREDIT_ACCOUNT); String Amount = resources.getString(SimpleAccountingConstants.AMOUNT); String Notes = resources .getString(SimpleAccountingConstants.VOUCHER_NOTES); ActionErrors errors = new ActionErrors(); java.sql.Date currentDate = null; try { currentDate = DateUtils.getLocaleDate( userContext.getPreferredLocale(), DateUtils.getCurrentDate(userContext.getPreferredLocale())); } catch (InvalidDateException ide) { errors.add(SimpleAccountingConstants.INVALIDDATE, new ActionMessage(SimpleAccountingConstants.INVALIDDATE)); } java.sql.Date voucherDate = null; if (getVoucherDate() == null || "".equals(getVoucherDate())) { errors.add(SimpleAccountingConstants.MANDATORYENTER, new ActionMessage(SimpleAccountingConstants.MANDATORYENTER, voucher_date)); } else if (getVoucherDate() != null && !getVoucherDate().equals("") && !DateUtils.isValidDate(getVoucherDate())) { errors = voucherDateValidate(errors, locale); } else if (DateUtils.isValidDate(getVoucherDate())) { try { voucherDate = DateUtils .getDateAsSentFromBrowser(getVoucherDate()); } catch (InvalidDateException ide) { errors.add(SimpleAccountingConstants.MANDATORYFIELDS, new ActionMessage( SimpleAccountingConstants.INVALIDDATE, voucher_date)); } if (voucherDate.compareTo(currentDate) > 0) { errors.add(SimpleAccountingConstants.INVALID_FUTURE, new ActionMessage( SimpleAccountingConstants.INVALID_FUTURE, voucher_date)); } } if (officeHierarchy == null || "".equals(officeHierarchy.trim())) { errors.add(SimpleAccountingConstants.MANDATORYFIELDS, new ActionMessage( SimpleAccountingConstants.MANDATORYFIELDS, office_Hierarchy)); } if (office == null || "".equals(office.trim())) { errors.add( SimpleAccountingConstants.MANDATORYFIELDS, new ActionMessage( SimpleAccountingConstants.MANDATORYFIELDS, officeId)); } if (debitAccountHead == null || "".equals(debitAccountHead.trim())) { errors.add(SimpleAccountingConstants.MANDATORYFIELDS, new ActionMessage( SimpleAccountingConstants.MANDATORYFIELDS, main_Account)); } if (creditAccountHead == null || "".equals(creditAccountHead.trim())) { errors.add(SimpleAccountingConstants.MANDATORYFIELDS, new ActionMessage( SimpleAccountingConstants.MANDATORYFIELDS, subAccount)); } if (amount == null || "".equals(amount.trim())) { errors.add(SimpleAccountingConstants.MANDATORYFIELDS, new ActionMessage( SimpleAccountingConstants.MANDATORYFIELDS, Amount)); } if (StringUtils.isNotBlank(getAmount())) { DoubleConversionResult conversionResult = validateAmount( getAmount(), Amount, errors); if (conversionResult.getErrors().size() == 0 && !(conversionResult.getDoubleValue() > 0.0)) { addError( errors, SimpleAccountingConstants.AMOUNT, SimpleAccountingConstants.ERRORS_MUST_BE_GREATER_THAN_ZERO, Amount); } } if (voucherNotes == null || "".equals(voucherNotes.trim())) { errors.add(SimpleAccountingConstants.MANDATORYFIELDS, new ActionMessage( SimpleAccountingConstants.MANDATORYFIELDS, Notes)); } return errors; } protected DoubleConversionResult validateAmount(String amountString, MifosCurrency currency, String fieldPropertyKey, ActionErrors errors, String installmentNo) { String fieldName = fieldPropertyKey; DoubleConversionResult conversionResult = parseDoubleDecimalForMoney( amountString, currency); for (ConversionError error : conversionResult.getErrors()) { String errorText = error.toLocalizedMessage(currency); addError(errors, fieldName, "errors.generic", fieldName, errorText); } return conversionResult; } protected DoubleConversionResult validateAmount(String amountString, String fieldPropertyKey, ActionErrors errors) { return validateAmount(amountString, null, fieldPropertyKey, errors, ""); } }