1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package org.kuali.ole.select.document.web.struts;
17
18 import org.apache.commons.lang.StringEscapeUtils;
19 import org.apache.commons.lang.StringUtils;
20 import org.apache.struts.action.ActionForm;
21 import org.apache.struts.action.ActionForward;
22 import org.apache.struts.action.ActionMapping;
23 import org.kuali.ole.docstore.common.document.Bib;
24 import org.kuali.ole.module.purap.PurapConstants;
25 import org.kuali.ole.module.purap.PurapConstants.CorrectionReceivingDocumentStrings;
26 import org.kuali.ole.module.purap.PurapConstants.PREQDocumentsStrings;
27 import org.kuali.ole.module.purap.PurapKeyConstants;
28 import org.kuali.ole.module.purap.PurapPropertyConstants;
29 import org.kuali.ole.module.purap.document.LineItemReceivingDocument;
30 import org.kuali.ole.module.purap.document.PurchaseOrderDocument;
31 import org.kuali.ole.module.purap.document.ReceivingDocument;
32 import org.kuali.ole.module.purap.document.service.PurchaseOrderService;
33 import org.kuali.ole.module.purap.document.service.ReceivingService;
34 import org.kuali.ole.module.purap.document.validation.event.AddReceivingItemEvent;
35 import org.kuali.ole.module.purap.document.web.struts.LineItemReceivingAction;
36 import org.kuali.ole.module.purap.document.web.struts.LineItemReceivingForm;
37 import org.kuali.ole.module.purap.util.ReceivingQuestionCallback;
38 import org.kuali.ole.pojo.OleBibRecord;
39 import org.kuali.ole.pojo.OleEditorResponse;
40 import org.kuali.ole.select.OleSelectConstant;
41 import org.kuali.ole.select.bo.OLEDonor;
42 import org.kuali.ole.select.bo.OLEEditorResponse;
43 import org.kuali.ole.select.bo.OLELinkPurapDonor;
44 import org.kuali.ole.select.businessobject.*;
45 import org.kuali.ole.select.document.OleLineItemReceivingDocument;
46 import org.kuali.ole.select.document.service.OleCopyHelperService;
47 import org.kuali.ole.select.document.service.OleDocstoreHelperService;
48 import org.kuali.ole.select.document.service.OleLineItemReceivingService;
49 import org.kuali.ole.select.document.service.OleNoteTypeService;
50 import org.kuali.ole.select.document.service.impl.OleLineItemReceivingServiceImpl;
51 import org.kuali.ole.select.document.validation.event.OleLineItemReceivingDescEvent;
52 import org.kuali.ole.select.service.BibInfoWrapperService;
53 import org.kuali.ole.select.service.FileProcessingService;
54 import org.kuali.ole.select.service.impl.BibInfoWrapperServiceImpl;
55 import org.kuali.ole.sys.OLEConstants;
56 import org.kuali.ole.sys.OLEKeyConstants;
57 import org.kuali.ole.sys.OLEPropertyConstants;
58 import org.kuali.ole.sys.context.SpringContext;
59 import org.kuali.rice.core.api.config.property.ConfigurationService;
60 import org.kuali.rice.core.api.datetime.DateTimeService;
61 import org.kuali.rice.core.api.util.type.KualiDecimal;
62 import org.kuali.rice.core.api.util.type.KualiInteger;
63 import org.kuali.rice.kim.api.KimConstants;
64 import org.kuali.rice.kim.api.services.IdentityManagementService;
65 import org.kuali.rice.kns.service.DocumentHelperService;
66 import org.kuali.rice.kns.web.struts.form.KualiDocumentFormBase;
67 import org.kuali.rice.krad.exception.DocumentAuthorizationException;
68 import org.kuali.rice.krad.service.KRADServiceLocator;
69 import org.kuali.rice.krad.service.KRADServiceLocatorWeb;
70 import org.kuali.rice.krad.service.KualiRuleService;
71 import org.kuali.rice.krad.service.LookupService;
72 import org.kuali.rice.krad.util.GlobalVariables;
73 import org.kuali.rice.krad.util.KRADConstants;
74 import org.kuali.rice.krad.util.ObjectUtils;
75 import org.kuali.rice.krad.util.UrlFactory;
76
77 import javax.servlet.http.HttpServletRequest;
78 import javax.servlet.http.HttpServletResponse;
79 import java.util.*;
80
81
82
83
84 public class OleLineItemReceivingAction extends LineItemReceivingAction {
85
86 private static org.apache.log4j.Logger LOG = org.apache.log4j.Logger.getLogger(OleLineItemReceivingAction.class);
87 private static transient ConfigurationService kualiConfigurationService;
88 private static transient OleLineItemReceivingService oleLineItemReceivingService;
89
90
91
92
93
94
95
96
97
98
99
100 @Override
101 public ActionForward clearQty(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
102 LOG.debug("Inside clearQty of OleLineItemReceivingAction");
103 OleLineItemReceivingForm lineItemReceivingForm = (OleLineItemReceivingForm) form;
104
105 OleLineItemReceivingDocument lineItemReceivingDocument = (OleLineItemReceivingDocument) lineItemReceivingForm.getDocument();
106
107 for (OleLineItemReceivingItem item : (List<OleLineItemReceivingItem>) lineItemReceivingDocument.getItems()) {
108 item.setItemReceivedTotalParts(KualiDecimal.ZERO);
109 }
110 LOG.debug("Leaving clearQty of OleLineItemReceivingAction");
111 return super.clearQty(mapping, lineItemReceivingForm, request, response);
112 }
113
114
115
116
117
118
119
120
121
122
123
124 @Override
125 public ActionForward loadQty(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
126 LOG.debug("Inside loadQty of OleLineItemReceivingAction");
127 OleLineItemReceivingForm lineItemReceivingForm = (OleLineItemReceivingForm) form;
128
129 OleLineItemReceivingDocument lineItemReceivingDocument = (OleLineItemReceivingDocument) lineItemReceivingForm.getDocument();
130
131 for (OleLineItemReceivingItem item : (List<OleLineItemReceivingItem>) lineItemReceivingDocument.getItems()) {
132 if (item.isOrderedItem()) {
133 if (item.getItemOrderedParts().subtract(item.getItemReceivedPriorParts()).isGreaterEqual(KualiDecimal.ZERO)) {
134 item.setItemReceivedTotalParts(item.getItemOrderedQuantity().subtract(item.getItemReceivedPriorParts()));
135 } else {
136 item.setItemReceivedTotalParts(KualiDecimal.ZERO);
137 }
138 }
139 }
140 LOG.debug("Leaving loadQty of OleLineItemReceivingAction");
141 return super.loadQty(mapping, form, request, response);
142 }
143
144
145
146
147
148
149
150
151
152
153
154 public ActionForward addExceptionNote(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
155 LOG.debug("Inside addExceptionNote of OleLineItemReceivingAction");
156 OleLineItemReceivingForm receiveForm = (OleLineItemReceivingForm) form;
157 OleLineItemReceivingDocument receiveDocument = (OleLineItemReceivingDocument) receiveForm.getDocument();
158 OleLineItemReceivingItem selectedItem = (OleLineItemReceivingItem) receiveDocument.getItem(this.getSelectedLine(request));
159 OleReceivingLineExceptionNotes exceptionNotes = new OleReceivingLineExceptionNotes();
160 exceptionNotes.setExceptionTypeId(selectedItem.getExceptionTypeId());
161 exceptionNotes.setExceptionNotes(selectedItem.getExceptionNotes());
162 exceptionNotes.setReceivingLineItemIdentifier(selectedItem.getReceivingItemIdentifier());
163 selectedItem.addExceptionNote(exceptionNotes);
164 ((OleLineItemReceivingItem) receiveDocument.getItem(this.getSelectedLine(request))).setExceptionTypeId(null);
165 ((OleLineItemReceivingItem) receiveDocument.getItem(this.getSelectedLine(request))).setExceptionNotes(null);
166 LOG.debug("Leaving addExceptionNote of OleLineItemReceivingAction");
167 return mapping.findForward(OLEConstants.MAPPING_BASIC);
168 }
169
170
171
172
173
174
175
176
177
178
179
180 public ActionForward deleteExceptionNote(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
181 LOG.debug("Inside deleteExceptionNote of OleLineItemReceivingAction");
182 OleLineItemReceivingForm receiveForm = (OleLineItemReceivingForm) form;
183 OleLineItemReceivingDocument receiveDocument = (OleLineItemReceivingDocument) receiveForm.getDocument();
184 String[] indexes = getSelectedLineForDelete(request);
185 int itemIndex = Integer.parseInt(indexes[0]);
186 int noteIndex = Integer.parseInt(indexes[1]);
187 OleLineItemReceivingItem item = (OleLineItemReceivingItem) receiveDocument.getItem((itemIndex));
188 item.getExceptionNoteList().remove(noteIndex);
189 LOG.debug("Leaving deleteExceptionNote of OleLineItemReceivingAction");
190 return mapping.findForward(OLEConstants.MAPPING_BASIC);
191 }
192
193
194
195
196
197
198
199
200
201
202
203 public ActionForward addReceiptNote(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
204 LOG.debug("Inside addReceiptNote of OleLineItemReceivingAction");
205 OleLineItemReceivingForm receiveForm = (OleLineItemReceivingForm) form;
206 OleLineItemReceivingDocument receiveDocument = (OleLineItemReceivingDocument) receiveForm.getDocument();
207 OleLineItemReceivingItem selectedItem = (OleLineItemReceivingItem) receiveDocument.getItem(this.getSelectedLine(request));
208 OleLineItemReceivingReceiptNotes receiptNotes = new OleLineItemReceivingReceiptNotes();
209 OleNoteType oleNoteType = SpringContext.getBean(OleNoteTypeService.class).getNoteTypeDetails(selectedItem.getNoteTypeId());
210 receiptNotes.setNoteTypeId(selectedItem.getNoteTypeId());
211 receiptNotes.setNotes(selectedItem.getReceiptNotes());
212 receiptNotes.setReceivingLineItemIdentifier(selectedItem.getReceivingItemIdentifier());
213 receiptNotes.setNoteType(oleNoteType);
214 selectedItem.addReceiptNote(receiptNotes);
215 selectedItem.addNote(receiptNotes);
216 ((OleLineItemReceivingItem) receiveDocument.getItem(this.getSelectedLine(request))).setNoteTypeId(null);
217 ((OleLineItemReceivingItem) receiveDocument.getItem(this.getSelectedLine(request))).setReceiptNotes(null);
218 LOG.debug("Leaving addReceiptNote of OleLineItemReceivingAction");
219 return mapping.findForward(OLEConstants.MAPPING_BASIC);
220 }
221
222
223
224
225
226
227
228
229
230
231
232 public ActionForward deleteReceiptNote(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
233 LOG.debug("Inside deleteReceiptNote of OleLineItemReceivingAction");
234 OleLineItemReceivingForm receiveForm = (OleLineItemReceivingForm) form;
235 OleLineItemReceivingDocument receiveDocument = (OleLineItemReceivingDocument) receiveForm.getDocument();
236 String[] indexes = getSelectedLineForDelete(request);
237 int itemIndex = Integer.parseInt(indexes[0]);
238 int noteIndex = Integer.parseInt(indexes[1]);
239 OleLineItemReceivingItem item = (OleLineItemReceivingItem) receiveDocument.getItem((itemIndex));
240 item.getReceiptNoteList().remove(noteIndex);
241 int index = ObjectUtils.isNotNull(item.getReceiptNoteListSize()) ? item.getReceiptNoteListSize() : 0;
242 index = index + (ObjectUtils.isNotNull(item.getSpecialHandlingNoteList()) ? item.getSpecialHandlingNoteList().size() : 0);
243 if (ObjectUtils.isNotNull(item.getReceiptNoteListSize()) || (ObjectUtils.isNotNull(item.getSpecialHandlingNoteList()) && item.getSpecialHandlingNoteList().size() > 0)) {
244 index = index - 1;
245 }
246 item.getNoteList().remove(index + noteIndex);
247 LOG.debug("leaving deleteReceiptNote of OleLineItemReceivingAction");
248 return mapping.findForward(OLEConstants.MAPPING_BASIC);
249 }
250
251
252
253
254
255
256
257
258
259 protected String[] getSelectedLineForDelete(HttpServletRequest request) {
260 LOG.debug("Inside getSelectedLineForDelete of OleLineItemReceivingAction");
261 String accountString = new String();
262 String parameterName = (String) request.getAttribute(OLEConstants.METHOD_TO_CALL_ATTRIBUTE);
263 if (StringUtils.isNotBlank(parameterName)) {
264 accountString = StringUtils.substringBetween(parameterName, ".line", ".");
265 }
266 String[] result = StringUtils.split(accountString, ":");
267 LOG.debug("Leaving getSelectedLineForDelete of OleLineItemReceivingAction");
268 return result;
269 }
270
271
272
273
274
275
276
277
278
279
280
281
282
283 @Override
284 public ActionForward createReceivingCorrection(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
285 LOG.debug("Inside createReceivingCorrection of OleLineItemReceivingAction");
286 LineItemReceivingForm rlForm = (LineItemReceivingForm) form;
287 LineItemReceivingDocument document = (LineItemReceivingDocument) rlForm.getDocument();
288
289 String operation = "AddCorrectionNote ";
290
291 ReceivingQuestionCallback callback = new ReceivingQuestionCallback() {
292 public boolean questionComplete = false;
293 protected String correctionDocumentnoteText;
294
295 @Override
296 public ReceivingDocument doPostQuestion(ReceivingDocument document, String noteText) throws Exception {
297
298 this.setQuestionComplete(true);
299 this.setCorrectionDocumentCreationNoteText(noteText);
300 return document;
301 }
302
303 @Override
304 public boolean isQuestionComplete() {
305 return this.questionComplete;
306 }
307
308 @Override
309 public void setQuestionComplete(boolean questionComplete) {
310 this.questionComplete = questionComplete;
311 }
312
313 @Override
314 public String getCorrectionDocumentCreationNoteText() {
315 return correctionDocumentnoteText;
316 }
317
318 @Override
319 public void setCorrectionDocumentCreationNoteText(String noteText) {
320 correctionDocumentnoteText = noteText;
321 }
322 };
323
324
325 ActionForward forward = askQuestionWithInput(mapping, form, request, response, CorrectionReceivingDocumentStrings.NOTE_QUESTION, CorrectionReceivingDocumentStrings.NOTE_PREFIX, operation, PurapKeyConstants.MESSAGE_RECEIVING_CORRECTION_NOTE, callback);
326
327
328 if (callback.isQuestionComplete()) {
329
330
331 String basePath = getApplicationBaseUrl();
332 String methodToCallDocHandler = "docHandler";
333 String methodToCallReceivingCorrection = "initiate";
334
335 Properties parameters = new Properties();
336 parameters.put(OLEConstants.DISPATCH_REQUEST_PARAMETER, methodToCallDocHandler);
337 parameters.put(OLEConstants.PARAMETER_COMMAND, methodToCallReceivingCorrection);
338 parameters.put(OLEConstants.DOCUMENT_TYPE_NAME, "OLE_RCVC");
339 parameters.put("receivingLineDocId", document.getDocumentHeader().getDocumentNumber());
340 parameters.put(PurapConstants.CorrectionReceivingDocumentStrings.CORRECTION_RECEIVING_CREATION_NOTE_PARAMETER, callback.getCorrectionDocumentCreationNoteText());
341
342
343 String receivingCorrectionUrl = UrlFactory.parameterizeUrl(basePath + "/" + "selectOleCorrectionReceiving.do", parameters);
344
345 forward = new ActionForward(receivingCorrectionUrl, true);
346 }
347
348 LOG.debug("Leaving createReceivingCorrection of OleLineItemReceivingAction");
349
350 return forward;
351
352 }
353
354
355
356
357
358
359 @Override
360 public ActionForward continueReceivingLine(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
361 LOG.debug("Inside continueReceivingLine of OleLineItemReceivingAction");
362 LineItemReceivingForm rlf = (LineItemReceivingForm) form;
363 LineItemReceivingDocument rlDoc = (LineItemReceivingDocument) rlf.getDocument();
364
365
366 if (ObjectUtils.isNull(rlDoc.getDocumentHeader()) || ObjectUtils.isNull(rlDoc.getDocumentHeader().getDocumentNumber())) {
367 KualiDocumentFormBase kualiDocumentFormBase = (KualiDocumentFormBase) form;
368 createDocument(kualiDocumentFormBase);
369 rlDoc = (LineItemReceivingDocument) kualiDocumentFormBase.getDocument();
370 rlDoc.setPurchaseOrderIdentifier(rlf.getPurchaseOrderId());
371
372 DateTimeService dateTimeService = SpringContext.getBean(DateTimeService.class);
373 rlDoc.setShipmentReceivedDate(dateTimeService.getCurrentSqlDate());
374 }
375
376 getOleLineItemReceivingService().getInitialCollapseSections(rlDoc);
377 GlobalVariables.getMessageMap().clearErrorPath();
378 GlobalVariables.getMessageMap().addToErrorPath(OLEPropertyConstants.DOCUMENT);
379 boolean valid = true;
380 boolean poNotNull = true;
381
382
383 if (ObjectUtils.isNull(rlDoc.getPurchaseOrderIdentifier())) {
384 GlobalVariables.getMessageMap().putError(PurapPropertyConstants.PURCHASE_ORDER_IDENTIFIER, OLEKeyConstants.ERROR_REQUIRED, PREQDocumentsStrings.PURCHASE_ORDER_ID);
385 poNotNull = false;
386 }
387
388 if (ObjectUtils.isNull(rlDoc.getShipmentReceivedDate())) {
389 GlobalVariables.getMessageMap().putError(PurapPropertyConstants.SHIPMENT_RECEIVED_DATE, OLEKeyConstants.ERROR_REQUIRED, PurapConstants.LineItemReceivingDocumentStrings.VENDOR_DATE);
390 }
391
392
393 if (poNotNull == false) {
394 return mapping.findForward(OLEConstants.MAPPING_BASIC);
395 }
396
397 PurchaseOrderDocument po = SpringContext.getBean(PurchaseOrderService.class).getCurrentPurchaseOrder(rlDoc.getPurchaseOrderIdentifier());
398 if (ObjectUtils.isNotNull(po)) {
399
400 rlDoc.setAccountsPayablePurchasingDocumentLinkIdentifier(po.getAccountsPayablePurchasingDocumentLinkIdentifier());
401
402
403 if (!SpringContext.getBean(DocumentHelperService.class).getDocumentAuthorizer(rlDoc).isAuthorizedByTemplate(rlDoc, KRADConstants.KNS_NAMESPACE, KimConstants.PermissionTemplateNames.OPEN_DOCUMENT, GlobalVariables.getUserSession().getPrincipalId())) {
404 throw buildAuthorizationException("initiate document", rlDoc);
405 }
406 } else {
407 GlobalVariables.getMessageMap().putError(PurapPropertyConstants.PURCHASE_ORDER_IDENTIFIER, PurapKeyConstants.ERROR_PURCHASE_ORDER_NOT_EXIST);
408 return mapping.findForward(OLEConstants.MAPPING_BASIC);
409 }
410
411
412 ActionForward forward = performDuplicateReceivingLineCheck(mapping, form, request, response, rlDoc);
413 if (forward != null) {
414 return forward;
415 }
416
417 if (!SpringContext.getBean(ReceivingService.class).isPurchaseOrderActiveForLineItemReceivingDocumentCreation(rlDoc.getPurchaseOrderIdentifier())) {
418 GlobalVariables.getMessageMap().putError(PurapPropertyConstants.PURCHASE_ORDER_IDENTIFIER, PurapKeyConstants.ERROR_RECEIVING_LINE_DOCUMENT_PO_NOT_ACTIVE, rlDoc.getPurchaseOrderIdentifier().toString());
419 valid &= false;
420 }
421
422 if (SpringContext.getBean(ReceivingService.class).canCreateLineItemReceivingDocument(rlDoc.getPurchaseOrderIdentifier(), rlDoc.getDocumentNumber()) == false) {
423 String inProcessDocNum = "";
424 List<String> inProcessDocNumbers = SpringContext.getBean(ReceivingService.class).getLineItemReceivingDocumentNumbersInProcessForPurchaseOrder(rlDoc.getPurchaseOrderIdentifier(), rlDoc.getDocumentNumber());
425 if (!inProcessDocNumbers.isEmpty()) {
426 inProcessDocNum = inProcessDocNumbers.get(0);
427 }
428 GlobalVariables.getMessageMap().putError(PurapPropertyConstants.PURCHASE_ORDER_IDENTIFIER, PurapKeyConstants.ERROR_RECEIVING_LINE_DOCUMENT_ACTIVE_FOR_PO, inProcessDocNum, rlDoc.getPurchaseOrderIdentifier().toString());
429 valid &= false;
430 }
431
432
433 if (valid) {
434 SpringContext.getBean(ReceivingService.class).populateAndSaveLineItemReceivingDocument(rlDoc);
435 }
436
437 LOG.debug("Leaving continueReceivingLine of OleLineItemReceivingAction");
438
439 return mapping.findForward(OLEConstants.MAPPING_BASIC);
440 }
441
442
443
444
445
446
447
448
449
450
451
452 @Override
453 public ActionForward addItem(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
454 OleLineItemReceivingForm oleLineItemReceivingForm = (OleLineItemReceivingForm) form;
455 OleLineItemReceivingItem item = (OleLineItemReceivingItem) oleLineItemReceivingForm.getNewLineItemReceivingItemLine();
456 OleLineItemReceivingDocument lineItemReceivingDocument = (OleLineItemReceivingDocument) oleLineItemReceivingForm.getDocument();
457
458 LOG.debug("Inside addItem >>>>>>>>>>>>>>>>>");
459
460 String documentTypeName = OLEConstants.FinancialDocumentTypeCodes.LINE_ITEM_RECEIVING;
461 String nameSpaceCode = OLEConstants.OleLineItemReceiving.LINE_ITEM_RECEIVING_NAMESPACE;
462 if (LOG.isDebugEnabled()) {
463 LOG.debug("Inside addItem documentTypeName >>>>>>>>>>>>>>>>>" + documentTypeName);
464 }
465 LOG.debug("Inside addItem nameSpaceCode >>>>>>>>>>>>>>>>>" + nameSpaceCode);
466
467
468 boolean hasPermission = SpringContext.getBean(IdentityManagementService.class).hasPermission(GlobalVariables.getUserSession().getPerson().getPrincipalId(), nameSpaceCode,
469 OLEConstants.OleLineItemReceiving.ADD_NEW_LINE_ITEM);
470
471 if (!hasPermission) {
472 if (LOG.isDebugEnabled()) {
473 LOG.debug("Inside addItem hasPermission if>>>>>>>>>>>>>>>>>" + hasPermission);
474 }
475 throw new DocumentAuthorizationException(GlobalVariables.getUserSession().getPerson().getPrincipalName(), "add New Line Items", lineItemReceivingDocument.getDocumentNumber());
476
477
478 }
479
480 boolean rulePassed = SpringContext.getBean(KualiRuleService.class).applyRules(new AddReceivingItemEvent(PurapPropertyConstants.NEW_LINE_ITEM_RECEIVING_ITEM_LINE, lineItemReceivingDocument, item));
481 if (rulePassed) {
482 item = (OleLineItemReceivingItem) oleLineItemReceivingForm.getAndResetNewReceivingItemLine();
483
484
485 BibInfoWrapperService docStore = SpringContext.getBean(BibInfoWrapperServiceImpl.class);
486 FileProcessingService fileProcessingService = SpringContext.getBean(FileProcessingService.class);
487 String titleId = null;
488 boolean isBibFileExist = false;
489 Iterator itemIterator = lineItemReceivingDocument.getItems().iterator();
490 int itemCounter = 0;
491 while (itemIterator.hasNext()) {
492 OleLineItemReceivingItem tempItem = (OleLineItemReceivingItem) itemIterator.next();
493 if (tempItem.getItemTypeCode().equals(PurapConstants.ItemTypeCodes.ITEM_TYPE_ITEM_CODE) || tempItem.getItemTypeCode().equals(PurapConstants.ItemTypeCodes.ITEM_TYPE_UNORDERED_ITEM_CODE)) {
494 itemCounter++;
495 }
496 }
497 String itemNo = String.valueOf(itemCounter);
498
499 HashMap<String, String> dataMap = new HashMap<String, String>();
500 item.setBibInfoBean(new BibInfoBean());
501 if (item.getBibInfoBean().getDocStoreOperation() == null) {
502 item.getBibInfoBean().setDocStoreOperation(OleSelectConstant.DOCSTORE_OPERATION_STAFF);
503 }
504 String fileName = lineItemReceivingDocument.getDocumentNumber() + "_" + itemNo;
505
506
507 setItemDescription(item, fileName);
508 item.setStartingCopyNumber(new KualiInteger(1));
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537 boolean ruleFlag = getKualiRuleService().applyRules(new OleLineItemReceivingDescEvent(lineItemReceivingDocument, item));
538 if (ruleFlag) {
539 lineItemReceivingDocument.addItem(item);
540 }
541 }
542 return mapping.findForward(OLEConstants.MAPPING_BASIC);
543 }
544
545 @Override
546 public ActionForward route(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
547
548
549 OleLineItemReceivingForm oleLineItemReceivingForm = (OleLineItemReceivingForm) form;
550 OleLineItemReceivingDocument lineItemReceivingDocument = (OleLineItemReceivingDocument) oleLineItemReceivingForm.getDocument();
551 List<OleLineItemReceivingItem> items = lineItemReceivingDocument.getItems();
552 for (OleLineItemReceivingItem item : items) {
553 OleLineItemReceivingService oleLineItemReceivingService = SpringContext
554 .getBean(OleLineItemReceivingServiceImpl.class);
555 OlePurchaseOrderItem olePurchaseOrderItem = oleLineItemReceivingService.getOlePurchaseOrderItem(item.getPurchaseOrderIdentifier());
556 OleLineItemReceivingDoc oleLineItemReceivingItemDoc = new OleLineItemReceivingDoc();
557 oleLineItemReceivingItemDoc.setReceivingLineItemIdentifier(item.getReceivingItemIdentifier());
558 if (item.getItemTitleId() != null) {
559 oleLineItemReceivingItemDoc.setItemTitleId(item.getItemTitleId());
560 } else {
561
562 oleLineItemReceivingItemDoc.setItemTitleId(olePurchaseOrderItem.getItemTitleId());
563 }
564 if (olePurchaseOrderItem != null) {
565
566
567
568 OleCopyHelperService oleCopyHelperService = SpringContext.getBean(OleCopyHelperService.class);
569 oleCopyHelperService.updateRequisitionAndPOItems(olePurchaseOrderItem, item, null, lineItemReceivingDocument.getIsATypeOfRCVGDoc());
570
571 }
572
573 }
574 return super.route(mapping, form, request, response);
575 }
576
577 @Override
578 public ActionForward save(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
579 ActionForward forward = super.save(mapping, form, request, response);
580 OleLineItemReceivingForm oleLineItemReceivingForm = (OleLineItemReceivingForm) form;
581 OleLineItemReceivingDocument lineItemReceivingDocument = (OleLineItemReceivingDocument) oleLineItemReceivingForm.getDocument();
582 List<OleLineItemReceivingItem> items = lineItemReceivingDocument.getItems();
583 for (OleLineItemReceivingItem item : items) {
584 OleLineItemReceivingService oleLineItemReceivingService = SpringContext.getBean(OleLineItemReceivingServiceImpl.class);
585 ;
586 OleLineItemReceivingDoc oleLineItemReceivingItemDoc = new OleLineItemReceivingDoc();
587 oleLineItemReceivingItemDoc.setReceivingLineItemIdentifier(item.getReceivingItemIdentifier());
588 if (item.getItemTitleId() != null) {
589 oleLineItemReceivingItemDoc.setItemTitleId(item.getItemTitleId());
590 } else {
591 OlePurchaseOrderItem olePurchaseOrderItem = oleLineItemReceivingService.getOlePurchaseOrderItem(item.getPurchaseOrderIdentifier());
592 oleLineItemReceivingItemDoc.setItemTitleId(olePurchaseOrderItem.getItemTitleId());
593 }
594 oleLineItemReceivingService.saveOleLineItemReceivingItemDoc(oleLineItemReceivingItemDoc);
595 }
596 return forward;
597 }
598
599 private void setItemDescription(OleLineItemReceivingItem item, String fileName) {
600 if (OleDocstoreResponse.getInstance().getEditorResponse() != null) {
601 Map<String, OLEEditorResponse> oleEditorResponses = OleDocstoreResponse.getInstance().getEditorResponse();
602 OLEEditorResponse oleEditorResponse = oleEditorResponses.get(fileName);
603 Bib bib = oleEditorResponse != null ? oleEditorResponse.getBib() : null;
604 bib = (Bib) bib.deserializeContent(bib);
605 if (bib != null) {
606 String title = (bib.getTitle() != null&& !bib.getTitle().isEmpty()) ? bib.getTitle() + ", " : "";
607 String author = (bib.getAuthor()!=null && !bib.getAuthor().isEmpty()) ? bib.getAuthor() + ", " : "";
608 String publisher = (bib.getPublisher()!=null && !bib.getPublisher().isEmpty()) ? bib.getPublisher() + ", " : "";
609 String isbn = (bib.getIsbn()!=null && !bib.getIsbn().isEmpty()) ? bib.getIsbn() + ", " : "";
610 String description = title + author + publisher + isbn;
611 item.setItemDescription(description.substring(0, (description.lastIndexOf(","))));
612 }
613 if (bib != null) {
614 item.setBibUUID(bib.getId());
615 item.setItemTitleId(bib.getId());
616 OleLineItemReceivingDoc oleLineItemReceivingDoc = new OleLineItemReceivingDoc();
617 oleLineItemReceivingDoc.setItemTitleId(oleEditorResponse.getBib().getId());
618 item.getOleLineItemReceivingItemDocList().add(oleLineItemReceivingDoc);
619 }
620 OleDocstoreResponse.getInstance().getEditorResponse().remove(oleEditorResponse);
621 }
622 }
623
624 public boolean checkForCopiesAndLocation(OleLineItemReceivingItem item) {
625 boolean isValid = true;
626 if (null == item.getItemCopies() || null == item.getLocationCopies()) {
627 GlobalVariables.getMessageMap().putError(PurapConstants.ITEM_TAB_ERROR_PROPERTY,
628 OLEConstants.ITEM_ITEMCOPIES_OR_LOCATIONCOPIES_SHOULDNOT_BE_NULL, new String[]{});
629 isValid = false;
630 }
631 return isValid;
632 }
633
634 public boolean checkForItemCopiesGreaterThanQuantity(OleLineItemReceivingItem item) {
635 boolean isValid = true;
636 if (item.getItemCopies().isGreaterThan(item.getItemReceivedTotalQuantity())) {
637 GlobalVariables.getMessageMap().putError(PurapConstants.ITEM_TAB_ERROR_PROPERTY,
638 OLEConstants.ITEM_COPIES_ITEMCOPIES_GREATERTHAN_ITEMCOPIESORDERED, new String[]{});
639 isValid = false;
640 }
641 return isValid;
642 }
643
644 public boolean checkForTotalCopiesGreaterThanQuantity(OleLineItemReceivingItem item) {
645 boolean isValid = true;
646 int copies = 0;
647 if (item.getCopies().size() > 0) {
648 for (int itemCopies = 0; itemCopies < item.getCopies().size(); itemCopies++) {
649 copies = copies + item.getCopies().get(itemCopies).getItemCopies().intValue();
650 }
651 if (item.getItemReceivedTotalQuantity().isLessThan(item.getItemCopies().add(new KualiDecimal(copies)))) {
652 GlobalVariables.getMessageMap().putError(PurapConstants.ITEM_TAB_ERROR_PROPERTY,
653 OLEConstants.TOTAL_OF_ITEM_COPIES_ITEMCOPIES_GREATERTHAN_ITEMCOPIESORDERED, new String[]{});
654 isValid = false;
655 }
656 }
657 return isValid;
658 }
659
660
661
662
663
664
665
666
667 public OleRequisitionCopies setCopyValues(OleLineItemReceivingItem item) {
668 OleRequisitionCopies itemCopy = new OleRequisitionCopies();
669 int parts = 0;
670 if (null != item.getItemReceivedTotalParts()) {
671 parts = item.getItemReceivedTotalParts().intValue();
672 itemCopy.setParts(new KualiInteger(parts));
673 } else if (null != item.getItemOrderedParts()) {
674 parts = item.getItemOrderedParts().intValue();
675 itemCopy.setParts(new KualiInteger(parts));
676
677 }
678 itemCopy.setItemCopies(item.getItemCopies());
679 StringBuffer enumeration = new StringBuffer();
680 if (item.getStartingCopyNumber() != null && item.getStartingCopyNumber().isNonZero()) {
681 itemCopy.setStartingCopyNumber(item.getStartingCopyNumber());
682 } else {
683 int startingCopies = 1;
684 for (int copy = 0; copy < item.getCopies().size(); copy++) {
685 startingCopies = startingCopies + item.getCopies().get(copy).getItemCopies().intValue();
686 }
687 itemCopy.setStartingCopyNumber(new KualiInteger(startingCopies));
688 }
689 String partEnumerationCopy = getConfigurationService().getPropertyValueAsString(
690 OLEConstants.PART_ENUMERATION_COPY);
691 String partEnumerationVolume = getConfigurationService().getPropertyValueAsString(
692 OLEConstants.PART_ENUMERATION_VOLUME);
693 int startingCopyNumber = itemCopy.getStartingCopyNumber().intValue();
694 for (int noOfCopies = 0; noOfCopies < item.getItemCopies().intValue(); noOfCopies++) {
695 for (int noOfParts = 0; noOfParts < parts; noOfParts++) {
696 int newNoOfCopies = startingCopyNumber + noOfCopies;
697 int newNoOfParts = noOfParts + 1;
698 if (noOfCopies + 1 == item.getItemCopies().intValue() && newNoOfParts == parts) {
699 enumeration = enumeration.append(
700 partEnumerationCopy + newNoOfCopies + OLEConstants.DOT_TO_SEPARATE_COPIES_PARTS).append(
701 partEnumerationVolume + newNoOfParts);
702 } else {
703 enumeration = enumeration.append(
704 partEnumerationCopy + newNoOfCopies + OLEConstants.DOT_TO_SEPARATE_COPIES_PARTS).append(
705 partEnumerationVolume + newNoOfParts + OLEConstants.COMMA_TO_SEPARATE_ENUMERATION);
706 }
707 }
708 }
709 itemCopy.setPartEnumeration(enumeration.toString());
710 itemCopy.setLocationCopies(item.getLocationCopies());
711 return itemCopy;
712 }
713
714
715
716
717
718
719
720
721
722
723
724 public ActionForward receiveCopy(ActionMapping mapping, ActionForm form, HttpServletRequest request,
725 HttpServletResponse response) throws Exception {
726 LOG.debug("Inside receiveCopy Method of OLELineItemReceivingAction");
727 OleLineItemReceivingForm lineItemReceivingForm = (OleLineItemReceivingForm) form;
728 String[] indexes = getSelectedLineForAccounts(request);
729 int itemIndex = Integer.parseInt(indexes[0]);
730 OleLineItemReceivingItem item = (OleLineItemReceivingItem) ((LineItemReceivingDocument) lineItemReceivingForm
731 .getDocument()).getItem((itemIndex));
732 OleCopy oleCopy = null;
733 if(item.getCopyList().size()==1){
734 oleCopy = item.getCopyList().get(0);
735 }else {
736 int copyIndex = Integer.parseInt(indexes[1]);
737 oleCopy = item.getCopyList().get(copyIndex);
738 }
739 oleCopy.setReceiptStatus(OLEConstants.OleLineItemReceiving.RECEIVED_STATUS);
740 LOG.debug("Selected Copy is Received");
741 LOG.debug("Leaving receiveCopy Method of OLELineItemReceivingAction");
742 return mapping.findForward(OLEConstants.MAPPING_BASIC);
743 }
744
745 public static ConfigurationService getConfigurationService() {
746 if (kualiConfigurationService == null) {
747 kualiConfigurationService = SpringContext.getBean(ConfigurationService.class);
748 }
749 return kualiConfigurationService;
750 }
751
752
753
754
755
756
757
758
759
760 protected String[] getSelectedLineForAccounts(HttpServletRequest request) {
761 String accountString = new String();
762 String parameterName = (String) request.getAttribute(OLEConstants.METHOD_TO_CALL_ATTRIBUTE);
763 if (StringUtils.isNotBlank(parameterName)) {
764 accountString = StringUtils.substringBetween(parameterName, ".line", ".");
765 }
766 String[] result = StringUtils.split(accountString, ":");
767
768 return result;
769 }
770
771 @Override
772 public ActionForward blanketApprove(ActionMapping mapping, ActionForm form, HttpServletRequest request,
773 HttpServletResponse response) throws Exception {
774 OleLineItemReceivingForm oleLineItemReceivingForm = (OleLineItemReceivingForm) form;
775 OleLineItemReceivingDocument lineItemReceivingDocument = (OleLineItemReceivingDocument) oleLineItemReceivingForm
776 .getDocument();
777 List<OleLineItemReceivingItem> items = lineItemReceivingDocument.getItems();
778 for (OleLineItemReceivingItem item : items) {
779 OleLineItemReceivingService oleLineItemReceivingService = SpringContext
780 .getBean(OleLineItemReceivingServiceImpl.class);
781 OlePurchaseOrderItem olePurchaseOrderItem = oleLineItemReceivingService.getOlePurchaseOrderItem(item
782 .getPurchaseOrderIdentifier());
783 OleLineItemReceivingDoc oleLineItemReceivingItemDoc = new OleLineItemReceivingDoc();
784 oleLineItemReceivingItemDoc.setReceivingLineItemIdentifier(item.getReceivingItemIdentifier());
785 if (item.getItemTitleId() != null) {
786 oleLineItemReceivingItemDoc.setItemTitleId(item.getItemTitleId());
787 } else {
788
789 oleLineItemReceivingItemDoc.setItemTitleId(olePurchaseOrderItem.getItemTitleId());
790 }
791 if (olePurchaseOrderItem != null) {
792
793 OleCopyHelperService oleCopyHelperService = SpringContext.getBean(OleCopyHelperService.class);
794 oleCopyHelperService.updateRequisitionAndPOItems(olePurchaseOrderItem, item, null, lineItemReceivingDocument.getIsATypeOfRCVGDoc());
795
796 }
797
798 }
799 return super.blanketApprove(mapping, form, request, response);
800 }
801
802 public static OleLineItemReceivingService getOleLineItemReceivingService() {
803 if (oleLineItemReceivingService == null) {
804 oleLineItemReceivingService = SpringContext.getBean(OleLineItemReceivingService.class);
805 }
806 return oleLineItemReceivingService;
807 }
808
809 public ActionForward addDonor(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
810 boolean flag = true;
811 OleLineItemReceivingForm oleLineItemReceivingForm = (OleLineItemReceivingForm) form;
812 OleLineItemReceivingDocument receiveDocument = (OleLineItemReceivingDocument) oleLineItemReceivingForm.getDocument();
813 OleLineItemReceivingItem item = (OleLineItemReceivingItem) receiveDocument.getItem(this.getSelectedLine(request));
814 Map map = new HashMap();
815 if (item.getDonorCode() != null) {
816 map.put(OLEConstants.DONOR_CODE, item.getDonorCode());
817 List<OLEDonor> oleDonorList = (List<OLEDonor>) getLookupService().findCollectionBySearch(OLEDonor.class, map);
818 if (oleDonorList != null && oleDonorList.size() > 0) {
819 OLEDonor oleDonor = oleDonorList.get(0);
820 if (oleDonor != null) {
821 for (OLELinkPurapDonor oleLinkPurapDonor : item.getOleDonors()) {
822 if (oleLinkPurapDonor.getDonorCode().equalsIgnoreCase(item.getDonorCode())) {
823 flag = false;
824 GlobalVariables.getMessageMap().putError(PurapConstants.ITEM_TAB_ERROR_PROPERTY,
825 OLEConstants.DONOR_CODE_EXISTS, new String[]{});
826 return mapping.findForward(OLEConstants.MAPPING_BASIC);
827 }
828 }
829 if (flag) {
830 OLELinkPurapDonor donor = new OLELinkPurapDonor();
831 donor.setDonorId(oleDonor.getDonorId());
832 donor.setDonorCode(oleDonor.getDonorCode());
833 item.getOleDonors().add(donor);
834 item.setDonorCode(null);
835 }
836 }
837 } else {
838 GlobalVariables.getMessageMap().putError(PurapConstants.ITEM_TAB_ERROR_PROPERTY,
839 OLEConstants.ERROR_DONOR_CODE, new String[]{});
840 }
841 }
842 return mapping.findForward(OLEConstants.MAPPING_BASIC);
843 }
844
845 private LookupService getLookupService() {
846 return KRADServiceLocatorWeb.getLookupService();
847 }
848
849 public ActionForward deleteDonor(ActionMapping mapping, ActionForm form, HttpServletRequest request,
850 HttpServletResponse response) throws Exception {
851 OleLineItemReceivingForm oleLineItemReceivingForm = (OleLineItemReceivingForm) form;
852 OleLineItemReceivingDocument receiveDocument = (OleLineItemReceivingDocument) oleLineItemReceivingForm.getDocument();
853 String[] indexes = getSelectedLineForAccounts(request);
854 int itemIndex = Integer.parseInt(indexes[0]);
855 int donorIndex = Integer.parseInt(indexes[1]);
856 OleLineItemReceivingItem item = (OleLineItemReceivingItem) receiveDocument.getItem((itemIndex));
857 item.getOleDonors().remove(donorIndex);
858 return mapping.findForward(OLEConstants.MAPPING_BASIC);
859 }
860 }