1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package org.kuali.ole.module.purap.document.web.struts;
17
18 import org.apache.struts.action.ActionForm;
19 import org.apache.struts.action.ActionForward;
20 import org.apache.struts.action.ActionMapping;
21 import org.kuali.ole.module.purap.PurapConstants;
22 import org.kuali.ole.module.purap.PurapConstants.CorrectionReceivingDocumentStrings;
23 import org.kuali.ole.module.purap.PurapConstants.PREQDocumentsStrings;
24 import org.kuali.ole.module.purap.PurapKeyConstants;
25 import org.kuali.ole.module.purap.PurapPropertyConstants;
26 import org.kuali.ole.module.purap.businessobject.LineItemReceivingItem;
27 import org.kuali.ole.module.purap.document.LineItemReceivingDocument;
28 import org.kuali.ole.module.purap.document.PurchaseOrderDocument;
29 import org.kuali.ole.module.purap.document.ReceivingDocument;
30 import org.kuali.ole.module.purap.document.service.PurchaseOrderService;
31 import org.kuali.ole.module.purap.document.service.ReceivingService;
32 import org.kuali.ole.module.purap.document.validation.event.AddReceivingItemEvent;
33 import org.kuali.ole.module.purap.util.ReceivingQuestionCallback;
34 import org.kuali.ole.sys.OLEConstants;
35 import org.kuali.ole.sys.OLEKeyConstants;
36 import org.kuali.ole.sys.OLEPropertyConstants;
37 import org.kuali.ole.sys.context.SpringContext;
38 import org.kuali.rice.core.api.config.property.ConfigurationService;
39 import org.kuali.rice.core.api.util.type.KualiDecimal;
40 import org.kuali.rice.kew.api.exception.WorkflowException;
41 import org.kuali.rice.kim.api.KimConstants;
42 import org.kuali.rice.kns.question.ConfirmationQuestion;
43 import org.kuali.rice.kns.service.DocumentHelperService;
44 import org.kuali.rice.kns.web.struts.form.KualiDocumentFormBase;
45 import org.kuali.rice.krad.service.KualiRuleService;
46 import org.kuali.rice.krad.util.GlobalVariables;
47 import org.kuali.rice.krad.util.KRADConstants;
48 import org.kuali.rice.krad.util.ObjectUtils;
49 import org.kuali.rice.krad.util.UrlFactory;
50
51 import javax.servlet.http.HttpServletRequest;
52 import javax.servlet.http.HttpServletResponse;
53 import java.util.HashMap;
54 import java.util.List;
55 import java.util.Properties;
56
57 public class LineItemReceivingAction extends ReceivingBaseAction {
58
59 @Override
60 protected void createDocument(KualiDocumentFormBase kualiDocumentFormBase) throws WorkflowException {
61
62 super.createDocument(kualiDocumentFormBase);
63
64 LineItemReceivingForm rlf = (LineItemReceivingForm) kualiDocumentFormBase;
65 LineItemReceivingDocument rlDoc = (LineItemReceivingDocument) rlf.getDocument();
66
67
68 rlDoc.setPurchaseOrderIdentifier(rlf.getPurchaseOrderId());
69
70 rlDoc.initiateDocument();
71
72 }
73
74 public ActionForward continueReceivingLine(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
75 LineItemReceivingForm rlf = (LineItemReceivingForm) form;
76 LineItemReceivingDocument rlDoc = (LineItemReceivingDocument) rlf.getDocument();
77
78 GlobalVariables.getMessageMap().clearErrorPath();
79 GlobalVariables.getMessageMap().addToErrorPath(OLEPropertyConstants.DOCUMENT);
80 boolean valid = true;
81 boolean poNotNull = true;
82
83
84 if (ObjectUtils.isNull(rlDoc.getPurchaseOrderIdentifier())) {
85 GlobalVariables.getMessageMap().putError(PurapPropertyConstants.PURCHASE_ORDER_IDENTIFIER, OLEKeyConstants.ERROR_REQUIRED, PREQDocumentsStrings.PURCHASE_ORDER_ID);
86 poNotNull = false;
87 }
88
89 if (ObjectUtils.isNull(rlDoc.getShipmentReceivedDate())) {
90 GlobalVariables.getMessageMap().putError(PurapPropertyConstants.SHIPMENT_RECEIVED_DATE, OLEKeyConstants.ERROR_REQUIRED, PurapConstants.LineItemReceivingDocumentStrings.VENDOR_DATE);
91 }
92
93
94 if (poNotNull == false) {
95 return mapping.findForward(OLEConstants.MAPPING_BASIC);
96 }
97
98 PurchaseOrderDocument po = SpringContext.getBean(PurchaseOrderService.class).getCurrentPurchaseOrder(rlDoc.getPurchaseOrderIdentifier());
99 if (ObjectUtils.isNotNull(po)) {
100
101 rlDoc.setAccountsPayablePurchasingDocumentLinkIdentifier(po.getAccountsPayablePurchasingDocumentLinkIdentifier());
102
103
104 if (!SpringContext.getBean(DocumentHelperService.class).getDocumentAuthorizer(rlDoc).isAuthorizedByTemplate(rlDoc, KRADConstants.KNS_NAMESPACE, KimConstants.PermissionTemplateNames.OPEN_DOCUMENT, GlobalVariables.getUserSession().getPrincipalId())) {
105 throw buildAuthorizationException("initiate document", rlDoc);
106 }
107 } else {
108 GlobalVariables.getMessageMap().putError(PurapPropertyConstants.PURCHASE_ORDER_IDENTIFIER, PurapKeyConstants.ERROR_PURCHASE_ORDER_NOT_EXIST);
109 return mapping.findForward(OLEConstants.MAPPING_BASIC);
110 }
111
112
113 ActionForward forward = performDuplicateReceivingLineCheck(mapping, form, request, response, rlDoc);
114 if (forward != null) {
115 return forward;
116 }
117
118 if (!SpringContext.getBean(ReceivingService.class).isPurchaseOrderActiveForLineItemReceivingDocumentCreation(rlDoc.getPurchaseOrderIdentifier())) {
119 GlobalVariables.getMessageMap().putError(PurapPropertyConstants.PURCHASE_ORDER_IDENTIFIER, PurapKeyConstants.ERROR_RECEIVING_LINE_DOCUMENT_PO_NOT_ACTIVE, rlDoc.getPurchaseOrderIdentifier().toString());
120 valid &= false;
121 }
122
123 if (SpringContext.getBean(ReceivingService.class).canCreateLineItemReceivingDocument(rlDoc.getPurchaseOrderIdentifier(), rlDoc.getDocumentNumber()) == false) {
124 String inProcessDocNum = "";
125 List<String> inProcessDocNumbers = SpringContext.getBean(ReceivingService.class).getLineItemReceivingDocumentNumbersInProcessForPurchaseOrder(rlDoc.getPurchaseOrderIdentifier(), rlDoc.getDocumentNumber());
126 if (!inProcessDocNumbers.isEmpty()) {
127 inProcessDocNum = inProcessDocNumbers.get(0);
128 }
129 GlobalVariables.getMessageMap().putError(PurapPropertyConstants.PURCHASE_ORDER_IDENTIFIER, PurapKeyConstants.ERROR_RECEIVING_LINE_DOCUMENT_ACTIVE_FOR_PO, inProcessDocNum, rlDoc.getPurchaseOrderIdentifier().toString());
130 valid &= false;
131 }
132
133
134 if (valid) {
135 SpringContext.getBean(ReceivingService.class).populateAndSaveLineItemReceivingDocument(rlDoc);
136 }
137
138 return mapping.findForward(OLEConstants.MAPPING_BASIC);
139 }
140
141 public ActionForward createReceivingCorrection(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
142 LineItemReceivingForm rlForm = (LineItemReceivingForm) form;
143 LineItemReceivingDocument document = (LineItemReceivingDocument) rlForm.getDocument();
144
145 String operation = "AddCorrectionNote ";
146
147 ReceivingQuestionCallback callback = new ReceivingQuestionCallback() {
148 public boolean questionComplete = false;
149 protected String correctionDocumentnoteText;
150
151 @Override
152 public ReceivingDocument doPostQuestion(ReceivingDocument document, String noteText) throws Exception {
153
154 this.setQuestionComplete(true);
155 this.setCorrectionDocumentCreationNoteText(noteText);
156 return document;
157 }
158
159 @Override
160 public boolean isQuestionComplete() {
161 return this.questionComplete;
162 }
163
164 @Override
165 public void setQuestionComplete(boolean questionComplete) {
166 this.questionComplete = questionComplete;
167 }
168
169 @Override
170 public String getCorrectionDocumentCreationNoteText() {
171 return correctionDocumentnoteText;
172 }
173
174 @Override
175 public void setCorrectionDocumentCreationNoteText(String noteText) {
176 correctionDocumentnoteText = noteText;
177 }
178 };
179
180
181 ActionForward forward = askQuestionWithInput(mapping, form, request, response, CorrectionReceivingDocumentStrings.NOTE_QUESTION, CorrectionReceivingDocumentStrings.NOTE_PREFIX, operation, PurapKeyConstants.MESSAGE_RECEIVING_CORRECTION_NOTE, callback);
182
183
184 if (callback.isQuestionComplete()) {
185
186
187 String basePath = getApplicationBaseUrl();
188 String methodToCallDocHandler = "docHandler";
189 String methodToCallReceivingCorrection = "initiate";
190
191 Properties parameters = new Properties();
192 parameters.put(OLEConstants.DISPATCH_REQUEST_PARAMETER, methodToCallDocHandler);
193 parameters.put(OLEConstants.PARAMETER_COMMAND, methodToCallReceivingCorrection);
194 parameters.put(OLEConstants.DOCUMENT_TYPE_NAME, "RCVC");
195 parameters.put("receivingLineDocId", document.getDocumentHeader().getDocumentNumber());
196 parameters.put(PurapConstants.CorrectionReceivingDocumentStrings.CORRECTION_RECEIVING_CREATION_NOTE_PARAMETER, callback.getCorrectionDocumentCreationNoteText());
197
198
199 String receivingCorrectionUrl = UrlFactory.parameterizeUrl(basePath + "/" + "purapCorrectionReceiving.do", parameters);
200
201 forward = new ActionForward(receivingCorrectionUrl, true);
202 }
203
204 return forward;
205
206 }
207
208 public ActionForward clearInitFields(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
209 LineItemReceivingForm rlForm = (LineItemReceivingForm) form;
210 LineItemReceivingDocument rlDocument = (LineItemReceivingDocument) rlForm.getDocument();
211 rlDocument.clearInitFields(rlForm.isFromPurchaseOrder());
212
213 return mapping.findForward(OLEConstants.MAPPING_BASIC);
214 }
215
216 protected ActionForward performDuplicateReceivingLineCheck(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response, LineItemReceivingDocument lineItemReceivingDocument) throws Exception {
217 ActionForward forward = null;
218 HashMap<String, String> duplicateMessages = SpringContext.getBean(ReceivingService.class).receivingLineDuplicateMessages(lineItemReceivingDocument);
219 if (duplicateMessages != null && !duplicateMessages.isEmpty()) {
220 Object question = request.getParameter(OLEConstants.QUESTION_INST_ATTRIBUTE_NAME);
221 if (question == null) {
222
223 return this.performQuestionWithoutInput(mapping, form, request, response, PurapConstants.LineItemReceivingDocumentStrings.DUPLICATE_RECEIVING_LINE_QUESTION, duplicateMessages.get(PurapConstants.LineItemReceivingDocumentStrings.DUPLICATE_RECEIVING_LINE_QUESTION), OLEConstants.CONFIRMATION_QUESTION, OLEConstants.ROUTE_METHOD, "");
224 }
225
226 Object buttonClicked = request.getParameter(OLEConstants.QUESTION_CLICKED_BUTTON);
227 if ((PurapConstants.LineItemReceivingDocumentStrings.DUPLICATE_RECEIVING_LINE_QUESTION.equals(question)) && ConfirmationQuestion.NO.equals(buttonClicked)) {
228 forward = mapping.findForward(OLEConstants.MAPPING_BASIC);
229 }
230 }
231
232 return forward;
233 }
234
235
236
237
238
239
240
241
242
243
244
245 public ActionForward addItem(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
246 LineItemReceivingForm lineItemReceivingForm = (LineItemReceivingForm) form;
247 LineItemReceivingItem item = lineItemReceivingForm.getNewLineItemReceivingItemLine();
248 LineItemReceivingDocument lineItemReceivingDocument = (LineItemReceivingDocument) lineItemReceivingForm.getDocument();
249
250 boolean rulePassed = SpringContext.getBean(KualiRuleService.class).applyRules(new AddReceivingItemEvent(PurapPropertyConstants.NEW_LINE_ITEM_RECEIVING_ITEM_LINE, lineItemReceivingDocument, item));
251 if (rulePassed) {
252 lineItemReceivingForm.setHideAddUnorderedItem(true);
253 item = lineItemReceivingForm.getAndResetNewReceivingItemLine();
254 lineItemReceivingDocument.addItem(item);
255
256 }
257
258 return mapping.findForward(OLEConstants.MAPPING_BASIC);
259 }
260
261
262
263
264
265
266
267
268
269
270
271 public ActionForward clearQty(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
272 LineItemReceivingForm lineItemReceivingForm = (LineItemReceivingForm) form;
273
274 LineItemReceivingDocument lineItemReceivingDocument = (LineItemReceivingDocument) lineItemReceivingForm.getDocument();
275
276 for (LineItemReceivingItem item : (List<LineItemReceivingItem>) lineItemReceivingDocument.getItems()) {
277 item.setItemReceivedTotalQuantity(KualiDecimal.ZERO);
278 }
279
280 return mapping.findForward(OLEConstants.MAPPING_BASIC);
281 }
282
283
284
285
286
287
288
289
290
291
292
293 public ActionForward loadQty(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
294 LineItemReceivingForm lineItemReceivingForm = (LineItemReceivingForm) form;
295
296 LineItemReceivingDocument lineItemReceivingDocument = (LineItemReceivingDocument) lineItemReceivingForm.getDocument();
297
298 for (LineItemReceivingItem item : (List<LineItemReceivingItem>) lineItemReceivingDocument.getItems()) {
299 if (item.isOrderedItem()) {
300 if (item.getItemOrderedQuantity().subtract(item.getItemReceivedPriorQuantity()).isGreaterEqual(KualiDecimal.ZERO)) {
301 item.setItemReceivedTotalQuantity(item.getItemOrderedQuantity().subtract(item.getItemReceivedPriorQuantity()));
302 } else {
303 item.setItemReceivedTotalQuantity(KualiDecimal.ZERO);
304 }
305 }
306 }
307
308 return mapping.findForward(OLEConstants.MAPPING_BASIC);
309 }
310
311
312
313
314
315
316
317
318
319
320
321
322 public ActionForward showAddUnorderedItem(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
323 LineItemReceivingForm lineItemReceivingForm = (LineItemReceivingForm) form;
324
325 boolean shouldGiveWarning = lineItemReceivingForm.shouldGiveAddUnorderedItemWarning();
326 if (!shouldGiveWarning) {
327 lineItemReceivingForm.setHideAddUnorderedItem(false);
328 return mapping.findForward(OLEConstants.MAPPING_BASIC);
329 }
330
331 String msgkey = PurapKeyConstants.WARNING_RECEIVING_LINEITEM_ADD_UNORDERED;
332 String msgtxt = SpringContext.getBean(ConfigurationService.class).getPropertyValueAsString(msgkey);
333 Object question = request.getParameter(OLEConstants.QUESTION_INST_ATTRIBUTE_NAME);
334
335 if (question == null) {
336 return performQuestionWithoutInput(mapping, form, request, response, msgkey, msgtxt, OLEConstants.CONFIRMATION_QUESTION, "showAddUnorderedItem", "");
337 }
338
339 Object buttonClicked = request.getParameter(OLEConstants.QUESTION_CLICKED_BUTTON);
340 if ((msgkey.equals(question)) && ConfirmationQuestion.YES.equals(buttonClicked)) {
341 lineItemReceivingForm.setHideAddUnorderedItem(false);
342 }
343
344 return mapping.findForward(OLEConstants.MAPPING_BASIC);
345 }
346
347 }