001 /* 002 * Copyright 2011 The Kuali Foundation. 003 * 004 * Licensed under the Educational Community License, Version 2.0 (the "License"); 005 * you may not use this file except in compliance with the License. 006 * You may obtain a copy of the License at 007 * 008 * http://www.opensource.org/licenses/ecl2.php 009 * 010 * Unless required by applicable law or agreed to in writing, software 011 * distributed under the License is distributed on an "AS IS" BASIS, 012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 013 * See the License for the specific language governing permissions and 014 * limitations under the License. 015 */ 016 package org.kuali.kfs.module.purap.document.web.struts; 017 018 import java.util.HashMap; 019 import java.util.List; 020 import java.util.Map; 021 022 import org.kuali.kfs.module.purap.PurapAuthorizationConstants; 023 import org.kuali.kfs.module.purap.PurapConstants; 024 import org.kuali.kfs.module.purap.PurapParameterConstants; 025 import org.kuali.kfs.module.purap.businessobject.LineItemReceivingItem; 026 import org.kuali.kfs.module.purap.document.CorrectionReceivingDocument; 027 import org.kuali.kfs.module.purap.document.LineItemReceivingDocument; 028 import org.kuali.kfs.module.purap.document.service.ReceivingService; 029 import org.kuali.kfs.sys.KFSConstants; 030 import org.kuali.kfs.sys.context.SpringContext; 031 import org.kuali.rice.kim.bo.Person; 032 import org.kuali.rice.kns.document.authorization.DocumentAuthorizer; 033 import org.kuali.rice.kns.service.DataDictionaryService; 034 import org.kuali.rice.kns.service.DocumentHelperService; 035 import org.kuali.rice.kns.service.ParameterService; 036 import org.kuali.rice.kns.util.GlobalVariables; 037 import org.kuali.rice.kns.util.ObjectUtils; 038 import org.kuali.rice.kns.web.ui.ExtraButton; 039 import org.kuali.rice.kns.web.ui.HeaderField; 040 import org.kuali.rice.kns.workflow.service.KualiWorkflowDocument; 041 042 public class LineItemReceivingForm extends ReceivingFormBase { 043 044 protected Integer purchaseOrderId; 045 protected LineItemReceivingItem newLineItemReceivingItemLine; 046 protected boolean fromPurchaseOrder = false; 047 048 /** 049 * Constructs a LineItemReceivingForm instance and sets up the appropriately casted document. 050 */ 051 public LineItemReceivingForm() { 052 super(); 053 054 this.setNewLineItemReceivingItemLine(setupNewLineItemReceivingItemLine()); 055 newLineItemReceivingItemLine.setItemTypeCode(PurapConstants.ItemTypeCodes.ITEM_TYPE_UNORDERED_ITEM_CODE); 056 } 057 058 @Override 059 protected String getDefaultDocumentTypeName() { 060 return "RCVL"; 061 } 062 063 public LineItemReceivingDocument getLineItemReceivingDocument() { 064 return (LineItemReceivingDocument) getDocument(); 065 } 066 067 public void setLineItemReceivingDocument(LineItemReceivingDocument lineItemReceivingDocument) { 068 setDocument(lineItemReceivingDocument); 069 } 070 071 public Integer getPurchaseOrderId() { 072 return purchaseOrderId; 073 } 074 075 public void setPurchaseOrderId(Integer purchaseOrderId) { 076 this.purchaseOrderId = purchaseOrderId; 077 } 078 079 public LineItemReceivingItem setupNewLineItemReceivingItemLine() { 080 return new LineItemReceivingItem(); 081 } 082 083 public LineItemReceivingItem getNewLineItemReceivingItemLine() { 084 return newLineItemReceivingItemLine; 085 } 086 087 public void setNewLineItemReceivingItemLine(LineItemReceivingItem newLineItemReceivingItemLine) { 088 this.newLineItemReceivingItemLine = newLineItemReceivingItemLine; 089 } 090 091 @Override 092 public void populateHeaderFields(KualiWorkflowDocument workflowDocument) { 093 super.populateHeaderFields(workflowDocument); 094 //leave the first field blank to match the other PURAP docs 095 getDocInfo().add(new HeaderField()); 096 097 if (ObjectUtils.isNotNull(this.getLineItemReceivingDocument().getLineItemReceivingStatus())) { 098 getDocInfo().add(new HeaderField("DataDictionary.LineItemReceivingDocument.attributes.lineItemReceivingStatusCode", this.getLineItemReceivingDocument().getLineItemReceivingStatus().getLineItemReceivingStatusDescription())); 099 } 100 else { 101 getDocInfo().add(new HeaderField("DataDictionary.LineItemReceivingDocument.attributes.lineItemReceivingStatusCode", "Not Available")); 102 } 103 } 104 105 /** 106 * Override the superclass method to add appropriate buttons for LineItemReceivingDocument. 107 * 108 * @see org.kuali.rice.kns.web.struts.form.KualiForm#getExtraButtons() 109 */ 110 @Override 111 public List<ExtraButton> getExtraButtons() { 112 extraButtons.clear(); 113 Map buttonsMap = createButtonsMap(); 114 115 String displayInitTab = (String) getEditingMode().get(PurapAuthorizationConstants.LineItemReceivingEditMode.DISPLAY_INIT_TAB); 116 if (ObjectUtils.isNotNull(displayInitTab) && displayInitTab.equalsIgnoreCase("true")) { 117 extraButtons.add((ExtraButton) buttonsMap.get("methodToCall.continueReceivingLine")); 118 extraButtons.add((ExtraButton) buttonsMap.get("methodToCall.clearInitFields")); 119 } 120 else { 121 if (canCreateCorrection()) { 122 extraButtons.add((ExtraButton) buttonsMap.get("methodToCall.createReceivingCorrection")); 123 } 124 } 125 126 return extraButtons; 127 } 128 129 protected boolean canCreateCorrection() { 130 Person user = GlobalVariables.getUserSession().getPerson(); 131 DocumentAuthorizer documentAuthorizer = SpringContext.getBean(DocumentHelperService.class).getDocumentAuthorizer(KFSConstants.FinancialDocumentTypeCodes.CORRECTION_RECEIVING); 132 boolean isUserAuthorized = documentAuthorizer.canInitiate(KFSConstants.FinancialDocumentTypeCodes.CORRECTION_RECEIVING, user); 133 return SpringContext.getBean(ReceivingService.class).canCreateCorrectionReceivingDocument(getLineItemReceivingDocument()) && isUserAuthorized; 134 } 135 136 /** 137 * Creates a MAP for all the buttons to appear on the Receiving Line Form, and sets the attributes of these buttons. 138 * 139 * @return the button map created. 140 */ 141 protected Map<String, ExtraButton> createButtonsMap() { 142 HashMap<String, ExtraButton> result = new HashMap<String, ExtraButton>(); 143 144 // Continue button 145 ExtraButton continueButton = new ExtraButton(); 146 continueButton.setExtraButtonProperty("methodToCall.continueReceivingLine"); 147 continueButton.setExtraButtonSource("${" + KFSConstants.RICE_EXTERNALIZABLE_IMAGES_URL_KEY + "}buttonsmall_continue.gif"); 148 continueButton.setExtraButtonAltText("Continue"); 149 result.put(continueButton.getExtraButtonProperty(), continueButton); 150 151 // Clear button 152 ExtraButton clearButton = new ExtraButton(); 153 clearButton.setExtraButtonProperty("methodToCall.clearInitFields"); 154 clearButton.setExtraButtonSource("${" + KFSConstants.RICE_EXTERNALIZABLE_IMAGES_URL_KEY + "}buttonsmall_clear.gif"); 155 clearButton.setExtraButtonAltText("Clear"); 156 result.put(clearButton.getExtraButtonProperty(), clearButton); 157 158 // Correction button 159 ExtraButton correctionButton = new ExtraButton(); 160 correctionButton.setExtraButtonProperty("methodToCall.createReceivingCorrection"); 161 correctionButton.setExtraButtonSource("${" + KFSConstants.EXTERNALIZABLE_IMAGES_URL_KEY + "}buttonsmall_correction.gif"); 162 correctionButton.setExtraButtonAltText("Correction"); 163 result.put(correctionButton.getExtraButtonProperty(), correctionButton); 164 165 return result; 166 } 167 168 /** 169 * Returns the new Receiving Item Line and resets it to null. 170 * 171 * @return the new Receiving Item Line. 172 */ 173 public LineItemReceivingItem getAndResetNewReceivingItemLine() { 174 LineItemReceivingItem receivingItemLine = getNewLineItemReceivingItemLine(); 175 setNewLineItemReceivingItemLine(setupNewReceivingItemLine()); 176 return receivingItemLine; 177 } 178 179 /** 180 * This method should be overriden (or see accountingLines for an alternate way of doing this with newInstance) 181 */ 182 public LineItemReceivingItem setupNewReceivingItemLine() { 183 LineItemReceivingItem lineItemReceivingItem = new LineItemReceivingItem((LineItemReceivingDocument)getDocument()); 184 newLineItemReceivingItemLine.setItemTypeCode(PurapConstants.ItemTypeCodes.ITEM_TYPE_UNORDERED_ITEM_CODE); 185 return lineItemReceivingItem; 186 } 187 188 /** 189 * Indicates if the clear and load quantity buttons can be shown, according to the 190 * value of a system parameter. 191 * 192 * @return 193 */ 194 public boolean isAbleToShowClearAndLoadQtyButtons(){ 195 return SpringContext.getBean(ParameterService.class).getIndicatorParameter(LineItemReceivingDocument.class, PurapParameterConstants.SHOW_CLEAR_AND_LOAD_QTY_BUTTONS); 196 } 197 198 public boolean isFromPurchaseOrder() { 199 return fromPurchaseOrder; 200 } 201 202 public void setFromPurchaseOrder(boolean fromPurchaseOrder) { 203 this.fromPurchaseOrder = fromPurchaseOrder; 204 } 205 206 }