/*
* 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.module.cab.document.web.struts;
import java.util.ArrayList;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import org.apache.commons.lang.StringUtils;
import org.apache.log4j.Logger;
import org.kuali.kfs.module.cab.CabConstants;
import org.kuali.kfs.module.cab.CabPropertyConstants;
import org.kuali.kfs.module.cab.businessobject.PurchasingAccountsPayableDocument;
import org.kuali.kfs.module.cab.document.service.GlAndPurApHelperService;
import org.kuali.kfs.module.cab.document.service.PurApInfoService;
import org.kuali.kfs.module.purap.document.PurchaseOrderDocument;
import org.kuali.kfs.sys.context.SpringContext;
import org.kuali.rice.core.api.util.type.KualiDecimal;
import org.kuali.rice.kew.api.exception.WorkflowException;
import org.kuali.rice.kns.web.struts.form.KualiForm;
import org.kuali.rice.krad.service.DocumentService;
import org.kuali.rice.krad.util.KRADConstants;
import org.kuali.rice.krad.util.ObjectUtils;
public class PurApLineForm extends KualiForm {
private static final Logger LOG = Logger.getLogger(PurApLineAction.class);
private Integer purchaseOrderIdentifier;
private String purApContactEmailAddress;
private String purApContactPhoneNumber;
private List<PurchasingAccountsPayableDocument> purApDocs;
private int actionPurApDocIndex;
private int actionItemAssetIndex;
private KualiDecimal mergeQty;
private String mergeDesc;
private Integer requisitionIdentifier;
private String purchaseOrderInquiryUrl;
private boolean selectAll;
private String documentNumber;
public PurApLineForm() {
this.purApDocs = new ArrayList<PurchasingAccountsPayableDocument>();
}
@Override
public boolean shouldMethodToCallParameterBeUsed(String methodToCallParameterName, String methodToCallParameterValue, HttpServletRequest request) {
if (StringUtils.equals(methodToCallParameterName, KRADConstants.DISPATCH_REQUEST_PARAMETER) && StringUtils.equals(methodToCallParameterValue, CabConstants.Actions.START)) {
return true;
}
return super.shouldMethodToCallParameterBeUsed(methodToCallParameterName, methodToCallParameterValue, request);
}
@Override
public void addRequiredNonEditableProperties() {
super.addRequiredNonEditableProperties();
registerRequiredNonEditableProperty(CabPropertyConstants.PurchasingAccountsPayableDocument.PURCHASE_ORDER_IDENTIFIER);
}
/**
* Gets the documentNumber attribute.
*
* @return Returns the documentNumber.
*/
public String getDocumentNumber() {
return documentNumber;
}
/**
* Sets the documentNumber attribute value.
*
* @param documentNumber The documentNumber to set.
*/
public void setDocumentNumber(String documentNumber) {
this.documentNumber = documentNumber;
}
/**
* Gets the requisitionIdentifier attribute.
*
* @return Returns the requisitionIdentifier.
*/
public Integer getRequisitionIdentifier() {
return requisitionIdentifier;
}
/**
* Sets the requisitionIdentifier attribute value.
*
* @param requisitionIdentifier The requisitionIdentifier to set.
*/
public void setRequisitionIdentifier(Integer requisitionIdentifier) {
this.requisitionIdentifier = requisitionIdentifier;
}
/**
* Gets the mergeQty attribute.
*
* @return Returns the mergeQty.
*/
public KualiDecimal getMergeQty() {
return mergeQty;
}
/**
* Sets the mergeQty attribute value.
*
* @param mergeQty The mergeQty to set.
*/
public void setMergeQty(KualiDecimal mergeQty) {
this.mergeQty = mergeQty;
}
/**
* Gets the mergeDesc attribute.
*
* @return Returns the mergeDesc.
*/
public String getMergeDesc() {
return mergeDesc;
}
/**
* Sets the mergeDesc attribute value.
*
* @param mergeDesc The mergeDesc to set.
*/
public void setMergeDesc(String mergeDesc) {
this.mergeDesc = mergeDesc;
}
/**
* Gets the purApContactEmailAddress attribute.
*
* @return Returns the purApContactEmailAddress.
*/
public String getPurApContactEmailAddress() {
return purApContactEmailAddress;
}
/**
* Sets the purApContactEmailAddress attribute value.
*
* @param purApContactEmailAddress The purApContactEmailAddress to set.
*/
public void setPurApContactEmailAddress(String purApContactEmailAddress) {
this.purApContactEmailAddress = purApContactEmailAddress;
}
/**
* Gets the purApContactPhoneNumber attribute.
*
* @return Returns the purApContactPhoneNumber.
*/
public String getPurApContactPhoneNumber() {
return purApContactPhoneNumber;
}
/**
* Sets the purApContactPhoneNumber attribute value.
*
* @param purApContactPhoneNumber The purApContactPhoneNumber to set.
*/
public void setPurApContactPhoneNumber(String purApContactPhoneNumber) {
this.purApContactPhoneNumber = purApContactPhoneNumber;
}
/**
* Gets the actionPurApDocIndex attribute.
*
* @return Returns the actionPurApDocIndex.
*/
public int getActionPurApDocIndex() {
return actionPurApDocIndex;
}
/**
* Sets the actionPurApDocIndex attribute value.
*
* @param actionPurApDocIndex The actionPurApDocIndex to set.
*/
public void setActionPurApDocIndex(int actionPurApDocIndex) {
this.actionPurApDocIndex = actionPurApDocIndex;
}
/**
* Gets the actionItemAssetIndex attribute.
*
* @return Returns the actionItemAssetIndex.
*/
public int getActionItemAssetIndex() {
return actionItemAssetIndex;
}
/**
* Sets the actionItemAssetIndex attribute value.
*
* @param actionItemAssetIndex The actionItemAssetIndex to set.
*/
public void setActionItemAssetIndex(int actionItemAssetIndex) {
this.actionItemAssetIndex = actionItemAssetIndex;
}
/**
* Gets the purchaseOrderIdentifier attribute.
*
* @return Returns the purchaseOrderIdentifier.
*/
public Integer getPurchaseOrderIdentifier() {
return purchaseOrderIdentifier;
}
/**
* Sets the purchaseOrderIdentifier attribute value.
*
* @param purchaseOrderIdentifier The purchaseOrderIdentifier to set.
*/
public void setPurchaseOrderIdentifier(Integer purchaseOrderIdentifier) {
this.purchaseOrderIdentifier = purchaseOrderIdentifier;
}
/**
* Gets the purApDocs attribute.
*
* @return Returns the purApDocs.
*/
public List<PurchasingAccountsPayableDocument> getPurApDocs() {
return purApDocs;
}
/**
* Sets the purApDocs attribute value.
*
* @param purApDocs The purApDocs to set.
*/
public void setPurApDocs(List<PurchasingAccountsPayableDocument> purApDocs) {
this.purApDocs = purApDocs;
}
/**
* Gets the purchaseOrderInquiryUrl attribute.
*
* @return Returns the purchaseOrderInquiryUrl.
*/
public String getPurchaseOrderInquiryUrl() {
return purchaseOrderInquiryUrl;
}
@Override
public void populate(HttpServletRequest request) {
super.populate(request);
String parameterName = (String) request.getAttribute(KRADConstants.METHOD_TO_CALL_ATTRIBUTE);
if (StringUtils.isNotBlank(parameterName)) {
// populate collection index
String purApDocIndex = StringUtils.substringBetween(parameterName, CabConstants.DOT_DOC, ".");
if (StringUtils.isNotBlank(purApDocIndex)) {
this.setActionPurApDocIndex(Integer.parseInt(purApDocIndex));
}
String itemAssetIndex = StringUtils.substringBetween(parameterName, CabConstants.DOT_LINE, ".");
if (StringUtils.isNotBlank(itemAssetIndex)) {
this.setActionItemAssetIndex(Integer.parseInt(itemAssetIndex));
}
}
if (this.purchaseOrderIdentifier != null) {
PurchaseOrderDocument poDoc = this.getPurApInfoService().getCurrentDocumentForPurchaseOrderIdentifier(this.purchaseOrderIdentifier);
if (ObjectUtils.isNotNull(poDoc) && StringUtils.isNotBlank(poDoc.getDocumentNumber())) {
this.purchaseOrderInquiryUrl = "purapPurchaseOrder.do?methodToCall=docHandler&docId=" + poDoc.getDocumentNumber() + "&command=displayDocSearchView";
}
}
// clear up the documentNumber saved when submit CAMS doc
this.setDocumentNumber(null);
}
private PurApInfoService getPurApInfoService() {
return SpringContext.getBean(PurApInfoService.class);
}
public boolean isSelectAll() {
return selectAll;
}
public void setSelectAll(boolean selectAll) {
this.selectAll = selectAll;
}
/**
* Return Asset Global forwarding URL.
*
* @param request
* @param documentNumber
* @return
*/
public String getDocHandlerForwardLink() {
String docHandlerLink = "";
if (StringUtils.isNotBlank(this.documentNumber)) {
try {
String docTypeName = SpringContext.getBean(DocumentService.class).getByDocumentHeaderId(this.documentNumber).getDocumentHeader().getWorkflowDocument().getDocumentTypeName();
docHandlerLink = SpringContext.getBean(GlAndPurApHelperService.class).getDocHandlerUrl(this.documentNumber, docTypeName);
}
catch (WorkflowException e) {
throw new RuntimeException("Caught WorkflowException trying to get document type name from Workflow", e);
}
}
return docHandlerLink;
}
public PurchasingAccountsPayableDocument getPurApDoc(int index) {
int size = getPurApDocs().size();
while (size <= index || getPurApDocs().get(index) == null) {
getPurApDocs().add(size++, new PurchasingAccountsPayableDocument());
}
return (PurchasingAccountsPayableDocument) getPurApDocs().get(index);
}
}