/* * The Kuali Financial System, a comprehensive financial management system for higher education. * * Copyright 2005-2014 The Kuali Foundation * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ package org.kuali.kfs.fp.document.web.struts; import java.util.HashMap; import java.util.List; import java.util.Map; import javax.servlet.http.HttpServletRequest; import org.apache.commons.lang.StringUtils; import org.kuali.kfs.fp.businessobject.DisbursementVoucherNonEmployeeExpense; import org.kuali.kfs.fp.businessobject.DisbursementVoucherPayeeDetail; import org.kuali.kfs.fp.businessobject.DisbursementVoucherPreConferenceRegistrant; import org.kuali.kfs.fp.businessobject.TravelPerDiem; import org.kuali.kfs.fp.document.DisbursementVoucherConstants; import org.kuali.kfs.fp.document.DisbursementVoucherDocument; import org.kuali.kfs.fp.document.service.DisbursementVoucherCoverSheetService; import org.kuali.kfs.sys.KFSConstants; import org.kuali.kfs.sys.KFSPropertyConstants; import org.kuali.kfs.sys.KfsAuthorizationConstants.DisbursementVoucherEditMode; import org.kuali.kfs.sys.context.SpringContext; import org.kuali.kfs.sys.document.service.PaymentSourceHelperService; import org.kuali.kfs.sys.service.UniversityDateService; import org.kuali.kfs.sys.web.struts.KualiAccountingDocumentFormBase; import org.kuali.rice.core.web.format.SimpleBooleanFormatter; import org.kuali.rice.coreservice.framework.parameter.ParameterService; import org.kuali.rice.kns.service.BusinessObjectDictionaryService; import org.kuali.rice.kns.web.ui.ExtraButton; import org.kuali.rice.krad.service.KeyValuesService; import org.kuali.rice.krad.util.KRADConstants; /** * This class is the action form for the Disbursement Voucher. */ public class DisbursementVoucherForm extends KualiAccountingDocumentFormBase { protected static org.apache.log4j.Logger LOG = org.apache.log4j.Logger.getLogger(DisbursementVoucherForm.class); protected static final long serialVersionUID = 1L; protected String payeeIdNumber; protected String vendorHeaderGeneratedIdentifier = StringUtils.EMPTY; protected String vendorDetailAssignedIdentifier = StringUtils.EMPTY; protected String vendorAddressGeneratedIdentifier; protected String tempPayeeIdNumber; protected String tempVendorHeaderGeneratedIdentifier = StringUtils.EMPTY; protected String tempVendorDetailAssignedIdentifier = StringUtils.EMPTY; protected String tempVendorAddressGeneratedIdentifier; protected String oldPayeeType = StringUtils.EMPTY; protected boolean hasMultipleAddresses = false; protected DisbursementVoucherNonEmployeeExpense newNonEmployeeExpenseLine; protected DisbursementVoucherNonEmployeeExpense newPrePaidNonEmployeeExpenseLine; protected DisbursementVoucherPreConferenceRegistrant newPreConferenceRegistrantLine; protected String wireChargeMessage; protected boolean canExport = false; /** * Constructs a DisbursementVoucherForm.java. */ public DisbursementVoucherForm() { super(); setFormatterType("canPrintCoverSheet", SimpleBooleanFormatter.class); } @Override protected String getDefaultDocumentTypeName() { return "DV"; } /** * @return Returns the newNonEmployeeExpenseLine. */ public DisbursementVoucherNonEmployeeExpense getNewNonEmployeeExpenseLine() { return newNonEmployeeExpenseLine; } /** * @param newNonEmployeeExpenseLine The newNonEmployeeExpenseLine to set. */ public void setNewNonEmployeeExpenseLine(DisbursementVoucherNonEmployeeExpense newNonEmployeeExpenseLine) { this.newNonEmployeeExpenseLine = newNonEmployeeExpenseLine; } /** * @return Returns the newPreConferenceRegistrantLine. */ public DisbursementVoucherPreConferenceRegistrant getNewPreConferenceRegistrantLine() { return newPreConferenceRegistrantLine; } /** * @param newPreConferenceRegistrantLine The newPreConferenceRegistrantLine to set. */ public void setNewPreConferenceRegistrantLine(DisbursementVoucherPreConferenceRegistrant newPreConferenceRegistrantLine) { this.newPreConferenceRegistrantLine = newPreConferenceRegistrantLine; } /** * @return Returns the newPrePaidNonEmployeeExpenseLine. */ public DisbursementVoucherNonEmployeeExpense getNewPrePaidNonEmployeeExpenseLine() { return newPrePaidNonEmployeeExpenseLine; } /** * @param newPrePaidNonEmployeeExpenseLine The newPrePaidNonEmployeeExpenseLine to set. */ public void setNewPrePaidNonEmployeeExpenseLine(DisbursementVoucherNonEmployeeExpense newPrePaidNonEmployeeExpenseLine) { this.newPrePaidNonEmployeeExpenseLine = newPrePaidNonEmployeeExpenseLine; } /** * @return Returns the wireChargeMessage. */ public String getWireChargeMessage() { return wireChargeMessage; } /** * @param wireChargeMessage The wireChargeMessage to set. */ public void setWireChargeMessage(String wireChargeMessage) { this.wireChargeMessage = wireChargeMessage; } /** * determines if the DV document is in a state that allows printing of the cover sheet * * @return true if the DV document is in a state that allows printing of the cover sheet; otherwise, return false */ public boolean getCanPrintCoverSheet() { DisbursementVoucherDocument disbursementVoucherDocument = (DisbursementVoucherDocument) this.getDocument(); return SpringContext.getBean(DisbursementVoucherCoverSheetService.class).isCoverSheetPrintable(disbursementVoucherDocument); } /** * @return a list of available travel expense type codes for rendering per diem link page. */ public List<TravelPerDiem> getTravelPerDiemCategoryCodes() { Map<String, Object> criteria = new HashMap<String, Object>(); criteria.put(KFSPropertyConstants.UNIVERSITY_FISCAL_YEAR, SpringContext.getBean(UniversityDateService.class).getCurrentFiscalYear()); return (List<TravelPerDiem>) SpringContext.getBean(KeyValuesService.class).findMatching(TravelPerDiem.class, criteria); } /** * @return the per diem link message from the parameters table. */ public String getTravelPerDiemLinkPageMessage() { return SpringContext.getBean(ParameterService.class).getParameterValueAsString(DisbursementVoucherDocument.class, DisbursementVoucherConstants.TRAVEL_PER_DIEM_MESSAGE_PARM_NM); } /** * Gets the payeeIdNumber attribute. * * @return Returns the payeeIdNumber. */ public String getPayeeIdNumber() { return payeeIdNumber; } /** * Sets the payeeIdNumber attribute value. * * @param payeeIdNumber The payeeIdNumber to set. */ public void setPayeeIdNumber(String payeeIdNumber) { String separator = "-"; if (this.isVendor() && StringUtils.contains(payeeIdNumber, separator)) { this.vendorHeaderGeneratedIdentifier = StringUtils.substringBefore(payeeIdNumber, separator); this.vendorDetailAssignedIdentifier = StringUtils.substringAfter(payeeIdNumber, separator); } this.payeeIdNumber = payeeIdNumber; } /** * Gets the payeeIdNumber attribute. * * @return Returns the payeeIdNumber. */ public String getTempPayeeIdNumber() { return tempPayeeIdNumber; } /** * Sets the payeeIdNumber attribute value. * * @param payeeIdNumber The payeeIdNumber to set. */ public void setTempPayeeIdNumber(String payeeIdNumber) { String separator = "-"; if (this.isVendor() && StringUtils.contains(payeeIdNumber, separator)) { this.tempVendorHeaderGeneratedIdentifier = StringUtils.substringBefore(payeeIdNumber, separator); this.tempVendorDetailAssignedIdentifier = StringUtils.substringAfter(payeeIdNumber, separator); } this.tempPayeeIdNumber = payeeIdNumber; } /** * Gets the hasMultipleAddresses attribute. * * @return Returns the hasMultipleAddresses. */ public boolean hasMultipleAddresses() { return hasMultipleAddresses; } /** * Gets the hasMultipleAddresses attribute. * * @return Returns the hasMultipleAddresses. */ public boolean getHasMultipleAddresses() { return hasMultipleAddresses; } /** * Sets the hasMultipleAddresses attribute value. * * @param hasMultipleAddresses The hasMultipleAddresses to set. */ public void setHasMultipleAddresses(boolean hasMultipleAddresses) { this.hasMultipleAddresses = hasMultipleAddresses; } /** * Gets the vendorHeaderGeneratedIdentifier attribute. * * @return Returns the vendorHeaderGeneratedIdentifier. */ public String getVendorHeaderGeneratedIdentifier() { return vendorHeaderGeneratedIdentifier; } /** * Sets the vendorHeaderGeneratedIdentifier attribute value. * * @param vendorHeaderGeneratedIdentifier The vendorHeaderGeneratedIdentifier to set. */ public void setVendorHeaderGeneratedIdentifier(String vendorHeaderGeneratedIdentifier) { this.vendorHeaderGeneratedIdentifier = vendorHeaderGeneratedIdentifier; } /** * Gets the vendorDetailAssignedIdentifier attribute. * * @return Returns the vendorDetailAssignedIdentifier. */ public String getVendorDetailAssignedIdentifier() { return vendorDetailAssignedIdentifier; } /** * Sets the vendorDetailAssignedIdentifier attribute value. * * @param vendorDetailAssignedIdentifier The vendorDetailAssignedIdentifier to set. */ public void setVendorDetailAssignedIdentifier(String vendorDetailAssignedIdentifier) { this.vendorDetailAssignedIdentifier = vendorDetailAssignedIdentifier; } /** * Gets the vendorAddressGeneratedIdentifier attribute. * * @return Returns the vendorAddressGeneratedIdentifier. */ public String getVendorAddressGeneratedIdentifier() { return vendorAddressGeneratedIdentifier; } /** * Sets the vendorAddressGeneratedIdentifier attribute value. * * @param vendorAddressGeneratedIdentifier The vendorAddressGeneratedIdentifier to set. */ public void setVendorAddressGeneratedIdentifier(String vendorAddressGeneratedIdentifier) { this.vendorAddressGeneratedIdentifier = vendorAddressGeneratedIdentifier; } public DisbursementVoucherDocument getDisbursementVoucherDocument() { return (DisbursementVoucherDocument) getDocument(); } /** * @see org.kuali.rice.kns.web.struts.form.KualiTransactionalDocumentFormBase#populate(javax.servlet.http.HttpServletRequest) */ @Override public void populate(HttpServletRequest request) { super.populate(request); DisbursementVoucherPayeeDetail payeeDetail = getDisbursementVoucherDocument().getDvPayeeDetail(); SpringContext.getBean(BusinessObjectDictionaryService.class).performForceUppercase(payeeDetail); } /** * Gets the tempVendorHeaderGeneratedIdentifier attribute. * @return Returns the tempVendorHeaderGeneratedIdentifier. */ public String getTempVendorHeaderGeneratedIdentifier() { return tempVendorHeaderGeneratedIdentifier; } /** * Sets the tempVendorHeaderGeneratedIdentifier attribute value. * @param tempVendorHeaderGeneratedIdentifier The tempVendorHeaderGeneratedIdentifier to set. */ public void setTempVendorHeaderGeneratedIdentifier(String tempVendorHeaderGeneratedIdentifier) { this.tempVendorHeaderGeneratedIdentifier = tempVendorHeaderGeneratedIdentifier; } /** * Gets the tempVendorDetailAssignedIdentifier attribute. * @return Returns the tempVendorDetailAssignedIdentifier. */ public String getTempVendorDetailAssignedIdentifier() { return tempVendorDetailAssignedIdentifier; } /** * Sets the tempVendorDetailAssignedIdentifier attribute value. * @param tempVendorDetailAssignedIdentifier The tempVendorDetailAssignedIdentifier to set. */ public void setTempVendorDetailAssignedIdentifier(String tempVendorDetailAssignedIdentifier) { this.tempVendorDetailAssignedIdentifier = tempVendorDetailAssignedIdentifier; } /** * Gets the tempVendorAddressGeneratedIdentifier attribute. * @return Returns the tempVendorAddressGeneratedIdentifier. */ public String getTempVendorAddressGeneratedIdentifier() { return tempVendorAddressGeneratedIdentifier; } /** * Sets the tempVendorAddressGeneratedIdentifier attribute value. * @param tempVendorAddressGeneratedIdentifier The tempVendorAddressGeneratedIdentifier to set. */ public void setTempVendorAddressGeneratedIdentifier(String tempVendorAddressGeneratedIdentifier) { this.tempVendorAddressGeneratedIdentifier = tempVendorAddressGeneratedIdentifier; } /** * Gets the oldPayeeType attribute. * @return Returns the oldPayeeType. */ public String getOldPayeeType() { return oldPayeeType; } /** * Sets the oldPayeeType attribute value. * @param oldPayeeType The oldPayeeType to set. */ public void setOldPayeeType(String oldPayeeType) { this.oldPayeeType = oldPayeeType; } /** * determine whether the selected payee is an employee */ public boolean isEmployee() { DisbursementVoucherDocument disbursementVoucherDocument = (DisbursementVoucherDocument) this.getDocument(); return disbursementVoucherDocument.getDvPayeeDetail().isEmployee(); } /** * determine whether the selected payee is a vendor */ public boolean isVendor() { DisbursementVoucherDocument disbursementVoucherDocument = (DisbursementVoucherDocument) this.getDocument(); return disbursementVoucherDocument.getDvPayeeDetail().isVendor(); } /** * determine whether the selected payee is a customer */ public boolean isCustomer() { DisbursementVoucherDocument disbursementVoucherDocument = (DisbursementVoucherDocument) this.getDocument(); return disbursementVoucherDocument.getDvPayeeDetail().isCustomer(); } /** * @see org.kuali.rice.kns.web.struts.form.KualiDocumentFormBase#shouldMethodToCallParameterBeUsed(java.lang.String, * java.lang.String, javax.servlet.http.HttpServletRequest) */ @Override public boolean shouldMethodToCallParameterBeUsed(String methodToCallParameterName, String methodToCallParameterValue, HttpServletRequest request) { if (StringUtils.equals(methodToCallParameterName, KRADConstants.DISPATCH_REQUEST_PARAMETER)) { if (this.getExcludedmethodToCall().contains(methodToCallParameterValue)) { return true; } } return super.shouldMethodToCallParameterBeUsed(methodToCallParameterName, methodToCallParameterValue, request); } /** * @see org.kuali.kfs.sys.web.struts.KualiAccountingDocumentFormBase#getExcludedmethodToCall() */ @Override protected List<String> getExcludedmethodToCall() { List<String> execludedMethodToCall = super.getExcludedmethodToCall(); execludedMethodToCall.add("printDisbursementVoucherCoverSheet"); execludedMethodToCall.add("showTravelPerDiemLinks"); return execludedMethodToCall; } /** * Gets the canExport attribute. * @return Returns the canExport. */ public boolean isCanExport() { return canExport; } /** * Sets the canExport attribute value. * @param canExport The canExport to set. */ public void setCanExport(boolean canExport) { this.canExport = canExport; } /** * RQ_AP_0760 : Ability to view disbursement information on the * Disbursement Voucher Document. * * This method composes the url to be used when we want to look up * the payment details from the disbursementInfo.tag. * * @return */ public String getDisbursementInfoUrl() { final PaymentSourceHelperService paymentSourceHelperService = SpringContext.getBean(PaymentSourceHelperService.class); return paymentSourceHelperService.getDisbursementInfoUrl(); } /** * Adds ExtractNow as an extra button if the ExtractNowAction is allowed. * @see org.kuali.rice.kns.web.struts.form.KualiForm#getExtraButtons() */ @Override public List<ExtraButton> getExtraButtons() { List<ExtraButton> buttons = super.getExtraButtons(); if (getEditingMode().containsKey(DisbursementVoucherEditMode.EXTRACT_NOW)) { buttons.add(createExtractNowButton()); } return buttons; } /** * Creates ExtractNow as an extra button. */ protected ExtraButton createExtractNowButton(){ ExtraButton button = new ExtraButton(); button.setExtraButtonProperty("methodToCall.extractNow"); button.setExtraButtonSource("${" + KFSConstants.EXTERNALIZABLE_IMAGES_URL_KEY + "}buttonsmall_extractnow.gif"); button.setExtraButtonAltText("Extract Immediate Payments Now"); return button; } }