/*
* 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.purap.document.web.struts;
import java.math.BigDecimal;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import org.apache.commons.lang.StringUtils;
import org.kuali.kfs.integration.purap.CapitalAssetLocation;
import org.kuali.kfs.module.purap.PurapConstants;
import org.kuali.kfs.module.purap.PurapConstants.RequisitionStatuses;
import org.kuali.kfs.module.purap.businessobject.PurApItem;
import org.kuali.kfs.module.purap.businessobject.RequisitionAccount;
import org.kuali.kfs.module.purap.businessobject.RequisitionCapitalAssetLocation;
import org.kuali.kfs.module.purap.businessobject.RequisitionItem;
import org.kuali.kfs.module.purap.businessobject.RequisitionItemCapitalAsset;
import org.kuali.kfs.module.purap.document.RequisitionDocument;
import org.kuali.rice.kew.api.WorkflowDocument;
import org.kuali.rice.kns.web.ui.ExtraButton;
import org.kuali.rice.kns.web.ui.HeaderField;
import org.kuali.rice.krad.util.KRADConstants;
import org.kuali.rice.krad.util.ObjectUtils;
/**
* Struts Action Form for Requisition document.
*/
public class RequisitionForm extends PurchasingFormBase {
protected String shopUrl;
/**
* Constructs a RequisitionForm instance and sets up the appropriately casted document.
*/
public RequisitionForm() {
super();
}
/**
* Gets the documentType attribute.
*
* @return Returns the documentType
*/
@Override
protected String getDefaultDocumentTypeName() {
return "REQS";
}
public RequisitionDocument getRequisitionDocument() {
return (RequisitionDocument) getDocument();
}
public void setRequisitionDocument(RequisitionDocument requisitionDocument) {
setDocument(requisitionDocument);
}
/**
* KRAD Conversion: Performs customization of header fields.
*
* Use of data dictionary for bo RequisitionDocument.
*/
@Override
public void populateHeaderFields(WorkflowDocument workflowDocument) {
super.populateHeaderFields(workflowDocument);
if (ObjectUtils.isNotNull(this.getRequisitionDocument().getPurapDocumentIdentifier())) {
getDocInfo().add(new HeaderField("DataDictionary.RequisitionDocument.attributes.purapDocumentIdentifier", ((RequisitionDocument) this.getDocument()).getPurapDocumentIdentifier().toString()));
}
else {
getDocInfo().add(new HeaderField("DataDictionary.RequisitionDocument.attributes.purapDocumentIdentifier", PurapConstants.PURAP_APPLICATION_DOCUMENT_ID_NOT_AVAILABLE));
}
String applicationDocumentStatus = PurapConstants.PURAP_APPLICATION_DOCUMENT_STATUS_NOT_AVAILABLE;
if (ObjectUtils.isNotNull(this.getRequisitionDocument().getApplicationDocumentStatus())) {
applicationDocumentStatus = workflowDocument.getApplicationDocumentStatus();
}
getDocInfo().add(new HeaderField("DataDictionary.RequisitionDocument.attributes.applicationDocumentStatus", applicationDocumentStatus));
}
/**
* @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 (KRADConstants.DISPATCH_REQUEST_PARAMETER.equals(methodToCallParameterName) &&
("displayB2BRequisition".equals(methodToCallParameterValue))) {
return true;
}
return super.shouldMethodToCallParameterBeUsed(methodToCallParameterName, methodToCallParameterValue, request);
}
@Override
public Class getCapitalAssetLocationClass() {
return RequisitionCapitalAssetLocation.class;
}
@Override
public Class getItemCapitalAssetClass() {
return RequisitionItemCapitalAsset.class;
}
/**
* @see org.kuali.kfs.module.purap.document.web.struts.PurchasingFormBase#setupNewPurchasingItemLine()
*/
@Override
public PurApItem setupNewPurchasingItemLine() {
return new RequisitionItem();
}
/**
* @see org.kuali.kfs.module.purap.document.web.struts.PurchasingFormBase#setupNewPurchasingAccountingLine()
*/
@Override
public RequisitionAccount setupNewPurchasingAccountingLine() {
return new RequisitionAccount();
}
/**
* @see org.kuali.kfs.module.purap.document.web.struts.PurchasingFormBase#setupNewAccountDistributionAccountingLine()
*/
@Override
public RequisitionAccount setupNewAccountDistributionAccountingLine() {
RequisitionAccount account = setupNewPurchasingAccountingLine();
account.setAccountLinePercent(new BigDecimal(100));
return account;
}
@Override
public CapitalAssetLocation setupNewPurchasingCapitalAssetLocationLine() {
return new RequisitionCapitalAssetLocation();
}
public String getShopUrl() {
return shopUrl;
}
public void setShopUrl(String shopUrl) {
this.shopUrl = shopUrl;
}
/**
* @see org.kuali.kfs.module.purap.document.web.struts.PurchasingFormBase#getExtraButtons()
*
* KRAD Conversion: Performs customization of extra buttons.
*
* No data dictionary is involved.
*/
@Override
public List<ExtraButton> getExtraButtons() {
super.getExtraButtons();
for (int i = 0; i < extraButtons.size(); i++) {
ExtraButton extraButton = extraButtons.get(i);
if ("methodToCall.calculate".equalsIgnoreCase(extraButton.getExtraButtonProperty()) ){
if(canUserCalculate() == false){
extraButtons.remove(i);
return extraButtons;
}
}
}
return extraButtons;
}
@Override
public boolean canUserCalculate(){
return documentActions != null && documentActions.containsKey(KRADConstants.KUALI_ACTION_CAN_EDIT) &&
!getRequisitionDocument().isDocumentStoppedInRouteNode(RequisitionStatuses.NODE_ORG_REVIEW);
}
}