/*
* 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.util.HashMap;
import java.util.List;
import java.util.Map;
import org.kuali.kfs.module.purap.PurapAuthorizationConstants;
import org.kuali.kfs.module.purap.PurapConstants;
import org.kuali.kfs.module.purap.PurapParameterConstants;
import org.kuali.kfs.module.purap.businessobject.LineItemReceivingItem;
import org.kuali.kfs.module.purap.document.LineItemReceivingDocument;
import org.kuali.kfs.module.purap.document.service.ReceivingService;
import org.kuali.kfs.sys.KFSConstants;
import org.kuali.kfs.sys.context.SpringContext;
import org.kuali.rice.coreservice.framework.parameter.ParameterService;
import org.kuali.rice.kew.api.WorkflowDocument;
import org.kuali.rice.kim.api.identity.Person;
import org.kuali.rice.kns.document.authorization.DocumentAuthorizer;
import org.kuali.rice.kns.service.DocumentHelperService;
import org.kuali.rice.kns.web.ui.ExtraButton;
import org.kuali.rice.kns.web.ui.HeaderField;
import org.kuali.rice.krad.util.GlobalVariables;
import org.kuali.rice.krad.util.ObjectUtils;
public class LineItemReceivingForm extends ReceivingFormBase {
protected Integer purchaseOrderId;
protected LineItemReceivingItem newLineItemReceivingItemLine;
protected boolean fromPurchaseOrder = false;
protected Boolean hideAddUnorderedItem = true;
/**
* Constructs a LineItemReceivingForm instance and sets up the appropriately casted document.
*/
public LineItemReceivingForm() {
super();
this.setNewLineItemReceivingItemLine(setupNewLineItemReceivingItemLine());
newLineItemReceivingItemLine.setItemTypeCode(PurapConstants.ItemTypeCodes.ITEM_TYPE_UNORDERED_ITEM_CODE);
}
@Override
protected String getDefaultDocumentTypeName() {
return "RCVL";
}
public LineItemReceivingDocument getLineItemReceivingDocument() {
return (LineItemReceivingDocument) getDocument();
}
public void setLineItemReceivingDocument(LineItemReceivingDocument lineItemReceivingDocument) {
setDocument(lineItemReceivingDocument);
}
public Integer getPurchaseOrderId() {
return purchaseOrderId;
}
public void setPurchaseOrderId(Integer purchaseOrderId) {
this.purchaseOrderId = purchaseOrderId;
}
public LineItemReceivingItem setupNewLineItemReceivingItemLine() {
return new LineItemReceivingItem();
}
public LineItemReceivingItem getNewLineItemReceivingItemLine() {
return newLineItemReceivingItemLine;
}
public void setNewLineItemReceivingItemLine(LineItemReceivingItem newLineItemReceivingItemLine) {
this.newLineItemReceivingItemLine = newLineItemReceivingItemLine;
}
@Override
public void populateHeaderFields(WorkflowDocument workflowDocument) {
super.populateHeaderFields(workflowDocument);
//leave the first field blank to match the other PURAP docs
getDocInfo().add(new HeaderField());
String applicationDocumentStatus = PurapConstants.PURAP_APPLICATION_DOCUMENT_STATUS_NOT_AVAILABLE;
if (ObjectUtils.isNotNull(this.getLineItemReceivingDocument().getAppDocStatus())) {
applicationDocumentStatus = workflowDocument.getApplicationDocumentStatus();
}
getDocInfo().add(new HeaderField("DataDictionary.LineItemReceivingDocument.attributes.applicationDocumentStatus", applicationDocumentStatus));
}
/**
* Override the superclass method to add appropriate buttons for LineItemReceivingDocument.
*
* @see org.kuali.rice.kns.web.struts.form.KualiForm#getExtraButtons()
*/
@Override
public List<ExtraButton> getExtraButtons() {
extraButtons.clear();
Map buttonsMap = createButtonsMap();
String displayInitTab = (String) getEditingMode().get(PurapAuthorizationConstants.LineItemReceivingEditMode.DISPLAY_INIT_TAB);
if (ObjectUtils.isNotNull(displayInitTab) && displayInitTab.equalsIgnoreCase("true")) {
extraButtons.add((ExtraButton) buttonsMap.get("methodToCall.continueReceivingLine"));
extraButtons.add((ExtraButton) buttonsMap.get("methodToCall.clearInitFields"));
}
else {
if (canCreateCorrection()) {
extraButtons.add((ExtraButton) buttonsMap.get("methodToCall.createReceivingCorrection"));
}
}
return extraButtons;
}
protected boolean canCreateCorrection() {
Person user = GlobalVariables.getUserSession().getPerson();
DocumentAuthorizer documentAuthorizer = SpringContext.getBean(DocumentHelperService.class).getDocumentAuthorizer(KFSConstants.FinancialDocumentTypeCodes.CORRECTION_RECEIVING);
boolean isUserAuthorized = documentAuthorizer.canInitiate(KFSConstants.FinancialDocumentTypeCodes.CORRECTION_RECEIVING, user);
return SpringContext.getBean(ReceivingService.class).canCreateCorrectionReceivingDocument(getLineItemReceivingDocument()) && isUserAuthorized;
}
/**
* Creates a MAP for all the buttons to appear on the Receiving Line Form, and sets the attributes of these buttons.
*
* @return the button map created.
*/
protected Map<String, ExtraButton> createButtonsMap() {
HashMap<String, ExtraButton> result = new HashMap<String, ExtraButton>();
// Continue button
ExtraButton continueButton = new ExtraButton();
continueButton.setExtraButtonProperty("methodToCall.continueReceivingLine");
continueButton.setExtraButtonSource("${" + KFSConstants.RICE_EXTERNALIZABLE_IMAGES_URL_KEY + "}buttonsmall_continue.gif");
continueButton.setExtraButtonAltText("Continue");
result.put(continueButton.getExtraButtonProperty(), continueButton);
// Clear button
ExtraButton clearButton = new ExtraButton();
clearButton.setExtraButtonProperty("methodToCall.clearInitFields");
clearButton.setExtraButtonSource("${" + KFSConstants.RICE_EXTERNALIZABLE_IMAGES_URL_KEY + "}buttonsmall_clear.gif");
clearButton.setExtraButtonAltText("Clear");
result.put(clearButton.getExtraButtonProperty(), clearButton);
// Correction button
ExtraButton correctionButton = new ExtraButton();
correctionButton.setExtraButtonProperty("methodToCall.createReceivingCorrection");
correctionButton.setExtraButtonSource("${" + KFSConstants.EXTERNALIZABLE_IMAGES_URL_KEY + "}buttonsmall_correction.gif");
correctionButton.setExtraButtonAltText("Correction");
result.put(correctionButton.getExtraButtonProperty(), correctionButton);
return result;
}
/**
* Returns the new Receiving Item Line and resets it to null.
*
* @return the new Receiving Item Line.
*/
public LineItemReceivingItem getAndResetNewReceivingItemLine() {
LineItemReceivingItem receivingItemLine = getNewLineItemReceivingItemLine();
setNewLineItemReceivingItemLine(setupNewReceivingItemLine());
return receivingItemLine;
}
/**
* This method should be overriden (or see accountingLines for an alternate way of doing this with newInstance)
*/
public LineItemReceivingItem setupNewReceivingItemLine() {
LineItemReceivingItem lineItemReceivingItem = new LineItemReceivingItem((LineItemReceivingDocument)getDocument());
newLineItemReceivingItemLine.setItemTypeCode(PurapConstants.ItemTypeCodes.ITEM_TYPE_UNORDERED_ITEM_CODE);
return lineItemReceivingItem;
}
/**
* Indicates if the clear and load quantity buttons can be shown, according to the
* value of a system parameter.
*
* @return
*/
public boolean isAbleToShowClearAndLoadQtyButtons(){
return SpringContext.getBean(ParameterService.class).getParameterValueAsBoolean(LineItemReceivingDocument.class, PurapParameterConstants.SHOW_CLEAR_AND_LOAD_QTY_BUTTONS);
}
/**
* Indicates if a warning should be given when users click "add unordered item" button, according to the system parameter.
*
* @return true if the parameter says YES; otherwise faluse.
*/
public boolean shouldGiveAddUnorderedItemWarning(){
return SpringContext.getBean(ParameterService.class).getParameterValueAsBoolean(LineItemReceivingDocument.class, PurapParameterConstants.UNORDERED_ITEM_WARNING_IND);
}
public boolean isFromPurchaseOrder() {
return fromPurchaseOrder;
}
public void setFromPurchaseOrder(boolean fromPurchaseOrder) {
this.fromPurchaseOrder = fromPurchaseOrder;
}
public Boolean getHideAddUnorderedItem() {
return hideAddUnorderedItem;
}
public void setHideAddUnorderedItem(Boolean hideAddUnorderedItem) {
this.hideAddUnorderedItem = hideAddUnorderedItem;
}
}