1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package org.kuali.ole.select.document;
17
18 import org.apache.commons.lang.StringEscapeUtils;
19 import org.apache.commons.lang.StringUtils;
20 import org.kuali.ole.docstore.common.client.*;
21 import org.kuali.ole.docstore.common.client.impl.DocstoreClientLocatorServiceImpl;
22 import org.kuali.ole.docstore.common.document.Bib;
23 import org.kuali.ole.docstore.common.document.BibMarc;
24 import org.kuali.ole.DocumentUniqueIDPrefix;
25 import org.kuali.ole.docstore.model.bo.WorkBibDocument;
26 import org.kuali.ole.docstore.model.bo.WorkInstanceDocument;
27 import org.kuali.ole.docstore.model.bo.WorkItemDocument;
28 import org.kuali.ole.docstore.model.enums.DocType;
29 import org.kuali.ole.gl.service.SufficientFundsService;
30 import org.kuali.ole.module.purap.PurapWorkflowConstants;
31 import org.kuali.ole.module.purap.businessobject.PurchaseOrderType;
32 import org.kuali.ole.module.purap.document.PurchaseOrderAmendmentDocument;
33 import org.kuali.ole.module.purap.document.RequisitionDocument;
34 import org.kuali.ole.module.purap.document.service.OlePurapService;
35 import org.kuali.ole.module.purap.service.PurapAccountingService;
36 import org.kuali.ole.select.OleSelectConstant;
37 import org.kuali.ole.select.businessobject.*;
38 import org.kuali.ole.select.document.service.*;
39 import org.kuali.ole.sys.OLEConstants;
40 import org.kuali.ole.sys.OLEPropertyConstants;
41 import org.kuali.ole.sys.businessobject.GeneralLedgerPendingEntry;
42 import org.kuali.ole.sys.businessobject.SourceAccountingLine;
43 import org.kuali.ole.sys.businessobject.SufficientFundsItem;
44 import org.kuali.ole.sys.context.SpringContext;
45 import org.kuali.ole.sys.service.GeneralLedgerPendingEntryService;
46 import org.kuali.ole.sys.service.UniversityDateService;
47 import org.kuali.ole.vnd.businessobject.VendorAlias;
48 import org.kuali.rice.core.api.util.type.KualiDecimal;
49 import org.kuali.rice.core.api.util.type.KualiInteger;
50 import org.kuali.rice.kew.api.action.RoutingReportCriteria;
51 import org.kuali.rice.kew.framework.postprocessor.DocumentRouteLevelChange;
52 import org.kuali.rice.kew.framework.postprocessor.DocumentRouteStatusChange;
53 import org.kuali.rice.krad.bo.Note;
54 import org.kuali.rice.krad.rules.rule.event.KualiDocumentEvent;
55 import org.kuali.rice.krad.service.BusinessObjectService;
56 import org.kuali.rice.krad.service.DocumentService;
57
58 import java.math.BigDecimal;
59 import java.util.*;
60
61 public class OlePurchaseOrderAmendmentDocument extends PurchaseOrderAmendmentDocument {
62 private static org.apache.log4j.Logger LOG = org.apache.log4j.Logger.getLogger(OlePurchaseOrderAmendmentDocument.class);
63
64 private String vendorPoNumber;
65 private static transient OlePatronRecordHandler olePatronRecordHandler;
66 private static transient OlePatronDocumentList olePatronDocumentList;
67 private static transient OleSelectDocumentService oleSelectDocumentService;
68 private static transient OlePurapService olePurapService;
69 private static transient OleCopyHelperService oleCopyHelperService;
70 private String vendorAliasName;
71 private DocstoreClientLocator docstoreClientLocator;
72
73 public DocstoreClientLocator getDocstoreClientLocator() {
74 if (docstoreClientLocator == null) {
75 docstoreClientLocator = SpringContext.getBean(DocstoreClientLocator.class);
76 }
77 return docstoreClientLocator;
78 }
79
80 public static OleSelectDocumentService getOleSelectDocumentService() {
81 if (oleSelectDocumentService == null) {
82 oleSelectDocumentService = SpringContext.getBean(OleSelectDocumentService.class);
83 }
84 return oleSelectDocumentService;
85 }
86
87 public static void setOleSelectDocumentService(OleSelectDocumentService oleSelectDocumentService) {
88 OlePurchaseOrderAmendmentDocument.oleSelectDocumentService = oleSelectDocumentService;
89 }
90
91 public static OlePatronDocumentList getOlePatronDocumentList() {
92 if (olePatronDocumentList == null) {
93 olePatronDocumentList = SpringContext.getBean(OlePatronDocumentList.class);
94 }
95 return olePatronDocumentList;
96 }
97
98 public static void setOlePatronDocumentList(OlePatronDocumentList olePatronDocumentList) {
99 OlePurchaseOrderAmendmentDocument.olePatronDocumentList = olePatronDocumentList;
100 }
101
102
103 public OlePatronRecordHandler getOlePatronRecordHandler() {
104 if (null == olePatronRecordHandler) {
105 olePatronRecordHandler = new OlePatronRecordHandler();
106 }
107 return olePatronRecordHandler;
108 }
109
110 public void setOlePatronRecordHandler(OlePatronRecordHandler olePatronRecordHandler) {
111 this.olePatronRecordHandler = olePatronRecordHandler;
112 }
113
114 public String getVendorAliasName() {
115 return vendorAliasName;
116 }
117
118 public void setVendorAliasName(String vendorAliasName) {
119 this.vendorAliasName = vendorAliasName;
120 }
121
122 public static OlePurapService getOlePurapService() {
123 if (olePurapService == null) {
124 olePurapService = SpringContext.getBean(OlePurapService.class);
125 }
126 return olePurapService;
127 }
128
129 public static void setOlePurapService(OlePurapService olePurapService) {
130 OlePurchaseOrderAmendmentDocument.olePurapService = olePurapService;
131 }
132
133 public static OleCopyHelperService getOleCopyHelperService() {
134 if(oleCopyHelperService == null){
135 oleCopyHelperService = SpringContext.getBean(OleCopyHelperService.class);
136 }
137 return oleCopyHelperService;
138 }
139
140 public static void setOleCopyHelperService(OleCopyHelperService oleCopyHelperService) {
141 OlePurchaseOrderAmendmentDocument.oleCopyHelperService = oleCopyHelperService;
142 }
143
144 @Override
145 public void doRouteStatusChange(DocumentRouteStatusChange statusChangeEvent) {
146 super.doRouteStatusChange(statusChangeEvent);
147 if (getDocumentHeader().getWorkflowDocument().isProcessed()) {
148 SpringContext.getBean(OlePurchaseOrderService.class).setStatusCompletePurchaseOrderAmendment(this);
149 }
150 }
151
152
153
154
155
156
157 @Override
158 public void populatePurchaseOrderFromRequisition(RequisitionDocument requisitionDocument) {
159
160 LOG.debug("Inside populatePurchaseOrderFromRequisition of OlePurchaseOrderAmendmentDocument");
161 SpringContext.getBean(OlePurchaseOrderDocumentHelperService.class).populatePurchaseOrderFromRequisition(this, requisitionDocument);
162
163
164 }
165
166
167
168
169
170
171 @Override
172 public void prepareForSave(KualiDocumentEvent event) {
173
174 LOG.debug("Inside prepareForSave of OlePurchaseOrderAmendmentDocument");
175
176 OleDocstoreHelperService oleDocstoreHelperService = SpringContext
177 .getBean(OleDocstoreHelperService.class);
178 List<OlePurchaseOrderItem> purItem = this.getItems();
179 for (int i = 0; purItem.size() > i; i++) {
180 OlePurchaseOrderItem item = (OlePurchaseOrderItem) this.getItem(i);
181 if (item.isItemLocationChangeFlag()) {
182 oleDocstoreHelperService.updateItemLocation(this, item);
183 }
184 }
185 SpringContext.getBean(OlePurchaseOrderDocumentHelperService.class).prepareForSave(this, event);
186 super.prepareForSave(event);
187 }
188
189
190
191
192
193
194 @Override
195 public void processAfterRetrieve() {
196 LOG.debug("Inside processAfterRetrieve of OlePurchaseOrderAmendmentDocument");
197 if (this.getVendorAliasName() == null) {
198 populateVendorAliasName();
199 }
200 try {
201 PurchaseOrderType purchaseOrderTypeDoc = getOlePurapService().getPurchaseOrderType(this.getPurchaseOrderTypeId());
202 if(purchaseOrderTypeDoc != null){
203 this.setOrderType(purchaseOrderTypeDoc);
204 }
205 } catch (Exception e) {
206 LOG.error("Error in OlePurchaseOrderDocument:processAfterRetrieve for OleRequisitionItem " + e.getMessage());
207 throw new RuntimeException(e);
208 }
209 try {
210 List<OlePurchaseOrderItem> items = this.getItems();
211 Iterator iterator = items.iterator();
212 while (iterator.hasNext()) {
213 Object object = iterator.next();
214 if (object instanceof OlePurchaseOrderItem) {
215 OlePurchaseOrderItem singleItem = (OlePurchaseOrderItem) object;
216 setItemDetailWhileProcessAfterRetrive(singleItem);
217 }
218 }
219 } catch (Exception e) {
220 LOG.error("Exception in OlePurchaseOrderDocument:processAfterRetrieve for OlePurchaseOrderItem " + e.getMessage());
221 throw new RuntimeException(e);
222 }
223 }
224
225
226
227
228
229 private void setItemDetailWhileProcessAfterRetrive(OlePurchaseOrderItem olePurchaseOrderItem)throws Exception{
230 if (olePurchaseOrderItem.getRequestorId() != null) {
231 olePurchaseOrderItem.setRequestorFirstName(getOlePurapService().getPatronName(olePurchaseOrderItem.getRequestorId()));
232 }
233 olePurchaseOrderItem.setPreviousItemQuantity(olePurchaseOrderItem.getItemQuantity());
234 olePurchaseOrderItem.setPreviousItemNoOfParts(olePurchaseOrderItem.getItemNoOfParts());
235
236 if (olePurchaseOrderItem.getBibInfoBean() == null) {
237 olePurchaseOrderItem.setBibInfoBean(new BibInfoBean());
238 }
239 if ((!StringUtils.isEmpty(olePurchaseOrderItem.getInternalRequestorId()) || !StringUtils.isEmpty(olePurchaseOrderItem
240 .getRequestorId())) && olePurchaseOrderItem.getBibInfoBean().getRequestorType() == null) {
241 String requestorType = OleSelectConstant.REQUESTOR_TYPE_STAFF;
242 Map<String, Object> criteria = new HashMap<String, Object>();
243 criteria.put(OleSelectConstant.REQUESTOR_TYPE, requestorType);
244 Collection<OleRequestorType> requestorTypeList = SpringContext.getBean(BusinessObjectService.class).findMatching(OleRequestorType.class, criteria);
245 LOG.debug("###########inside prepareForSave getting requestor type###########");
246 olePurchaseOrderItem.setRequestorTypeId(requestorTypeList.iterator().next().getRequestorTypeId());
247 }
248 if(olePurchaseOrderItem.getItemUnitPrice()!=null){
249 olePurchaseOrderItem.setItemUnitPrice(olePurchaseOrderItem.getItemUnitPrice().setScale(2, BigDecimal.ROUND_HALF_UP));
250 }
251 if (olePurchaseOrderItem.getItemTitleId() != null) {
252 LOG.debug("###########inside processAfterRetrieve OlePurchaseOrderAmendmentDocument ###########");
253 Bib bib = new BibMarc();
254 if (olePurchaseOrderItem.getItemTitleId() != null && olePurchaseOrderItem.getItemTitleId() != "") {
255 bib = getDocstoreClientLocator().getDocstoreClient().retrieveBib(olePurchaseOrderItem.getItemTitleId());
256 olePurchaseOrderItem.setBibUUID(bib.getId());
257 }
258 olePurchaseOrderItem.setDocFormat(DocumentUniqueIDPrefix.getBibFormatType(olePurchaseOrderItem.getItemTitleId()));
259 olePurchaseOrderItem.setBibInfoBean(new BibInfoBean());
260 olePurchaseOrderItem.setItemDescription(getOlePurapService().getItemDescription(bib));
261 }
262 if (olePurchaseOrderItem.getItemType() != null && olePurchaseOrderItem.getItemType().isQuantityBasedGeneralLedgerIndicator()) {
263 populateCopiesSection(olePurchaseOrderItem);
264 }
265 if(olePurchaseOrderItem.getCopyList().size() > 0) {
266 getOlePurapService().setInvoiceDocumentsForPO(olePurchaseOrderItem);
267 }
268 }
269
270
271
272
273
274 private void populateCopiesSection(OlePurchaseOrderItem singleItem) {
275 if (singleItem.getCopies().size() > 0) {
276 List<OleCopy> copyList = getOleCopyHelperService().setCopyValuesForList(singleItem.getCopies(), singleItem.getItemTitleId(), null);
277 if (copyList.size() >= singleItem.getCopyList().size()) {
278 int copyCount = 0;
279 for (OleCopy oleCopy : singleItem.getCopyList()) {
280 OleCopy copy = copyList.get(copyCount);
281 oleCopy.setLocation(copy.getLocation());
282 oleCopy.setEnumeration(copy.getEnumeration());
283 oleCopy.setCopyNumber(copy.getCopyNumber());
284 oleCopy.setPartNumber(copy.getPartNumber());
285 copyCount++;
286 }
287 for(int i = copyCount ; i<copyList.size() ; i++){
288 singleItem.getCopyList().add(copyList.get(copyCount));
289 copyCount++;
290 }
291 }
292 }
293 else {
294 if (singleItem.getItemQuantity() != null && singleItem.getItemNoOfParts() != null && (singleItem.getItemQuantity().isGreaterThan(new KualiDecimal(1))
295 || singleItem.getItemNoOfParts().isGreaterThan(new KualiInteger(1)))) {
296 singleItem.setCopies(getOleCopyHelperService().setCopiesToLineItem(singleItem.getCopyList(), singleItem.getItemNoOfParts(), singleItem.getItemTitleId()));
297 }
298 }
299 if (singleItem.getItemQuantity() != null && singleItem.getItemNoOfParts() != null && !singleItem.getItemQuantity().isGreaterThan(new KualiDecimal(1))
300 && !singleItem.getItemNoOfParts().isGreaterThan(new KualiInteger(1))&&singleItem.getCopyList().size()>0) {
301 singleItem.setSingleCopyNumber(singleItem.getCopyList().get(0).getCopyNumber());
302 }
303 }
304
305
306
307
308
309
310
311
312
313
314 public List<OleCopies> setCopiesToLineItem(OlePurchaseOrderItem singleItem, WorkBibDocument workBibDocument) {
315 List<WorkInstanceDocument> instanceDocuments = workBibDocument.getWorkInstanceDocumentList();
316 List<OleCopies> copies = new ArrayList<OleCopies>();
317 for (WorkInstanceDocument workInstanceDocument : instanceDocuments) {
318 List<WorkItemDocument> itemDocuments = workInstanceDocument.getItemDocumentList();
319 StringBuffer enumeration = new StringBuffer();
320 for (int itemDocs = 0; itemDocs < itemDocuments.size(); itemDocs++) {
321 if (itemDocs + 1 == itemDocuments.size()) {
322 enumeration = enumeration.append(itemDocuments.get(itemDocs).getEnumeration());
323 } else {
324 enumeration = enumeration.append(itemDocuments.get(itemDocs).getEnumeration() + ",");
325 }
326
327 }
328 int startingCopy = 0;
329 if (singleItem.getItemNoOfParts().intValue() != 0 && null != enumeration) {
330 String enumerationSplit = enumeration.substring(1, 2);
331 boolean isint = checkIsEnumerationSplitIsIntegerOrNot(enumerationSplit);
332 if (isint) {
333 startingCopy = Integer.parseInt(enumerationSplit);
334 }
335 }
336 if (singleItem.getItemQuantity().isGreaterThan(new KualiDecimal(1))
337 || singleItem.getItemNoOfParts().isGreaterThan(new KualiInteger(1))) {
338 boolean isValid = checkForEnumeration(enumeration);
339 if (isValid) {
340 int noOfCopies = workInstanceDocument.getItemDocumentList().size()
341 / singleItem.getItemNoOfParts().intValue();
342 OleRequisitionCopies copy = new OleRequisitionCopies();
343 copy.setParts(singleItem.getItemNoOfParts());
344 copy.setLocationCopies(workInstanceDocument.getHoldingsDocument().getLocationName());
345 copy.setItemCopies(new KualiDecimal(noOfCopies));
346 copy.setPartEnumeration(enumeration.toString());
347 copy.setStartingCopyNumber(new KualiInteger(startingCopy));
348 copies.add(copy);
349 }
350 }
351 }
352 return copies;
353 }
354
355 public boolean checkForEnumeration(StringBuffer enumeration) {
356 if (null != enumeration && !(enumeration.equals("")) && !(enumeration.toString().equals("null"))) {
357 return true;
358 } else {
359 return false;
360 }
361 }
362
363 public boolean checkIsEnumerationSplitIsIntegerOrNot(String enumerationSplit) {
364 try {
365 int startingCopy = Integer.parseInt(enumerationSplit);
366 } catch (NumberFormatException e) {
367 return false;
368 }
369 return true;
370 }
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400 @Override
401 public List getItemsActiveOnly() {
402 LOG.debug("Inside getItemsActiveOnly of OlePurchaseOrderReopenDocument");
403 return SpringContext.getBean(OlePurchaseOrderDocumentHelperService.class).getItemsActiveOnly(this);
404 }
405
406
407
408
409
410
411 @Override
412 public List getItemsActiveOnlySetupAlternateAmount() {
413 LOG.debug("Inside getItemsActiveOnlySetupAlternateAmount of OlePurchaseOrderReopenDocument");
414 return SpringContext.getBean(OlePurchaseOrderDocumentHelperService.class).getItemsActiveOnlySetupAlternateAmount(this);
415 }
416
417 @Override
418 public boolean getAdditionalChargesExist() {
419 LOG.debug("Inside getAdditionalChargesExist of OlePurchaseOrderReopenDocument");
420 return SpringContext.getBean(OlePurchaseOrderDocumentHelperService.class).getAdditionalChargesExist(this);
421 }
422
423
424
425
426
427
428 public boolean getIsFinalReqs() {
429 LOG.debug("Inside getIsFinalReqs of OlePurchaseOrderAmendmentDocument");
430
431 return SpringContext.getBean(OlePurchaseOrderDocumentHelperService.class).getIsFinalReqs(this);
432 }
433
434 public boolean getIsSplitPO() {
435 LOG.debug("Inside getIsSplitPO of OlePurchaseOrderAmendmentDocument");
436 return SpringContext.getBean(OlePurchaseOrderDocumentHelperService.class).getIsSplitPO(this);
437 }
438
439 public boolean getIsReOpenPO() {
440 LOG.debug("Inside getIsReOpenPO of OlePurchaseOrderAmendmentDocument");
441 return SpringContext.getBean(OlePurchaseOrderDocumentHelperService.class).getIsReOpenPO(this);
442 }
443
444
445
446
447
448
449 public String getBibeditorCreateURL() {
450 LOG.debug("Inside getBibeditorCreateURL of OlePurchaseOrderAmendmentDocument");
451 return SpringContext.getBean(OlePurchaseOrderDocumentHelperService.class).getBibeditorCreateURL();
452 }
453
454 public String getBibSearchURL() {
455 LOG.debug("Inside getBibSearchURL of OlePurchaseOrderAmendmentDocument");
456 return SpringContext.getBean(OlePurchaseOrderDocumentHelperService.class).getBibSearchURL();
457 }
458
459
460
461
462
463
464 public String getBibeditorEditURL() {
465 LOG.debug("Inside getBibeditorEditURL of OlePurchaseOrderAmendmentDocument");
466 return SpringContext.getBean(OlePurchaseOrderDocumentHelperService.class).getBibeditorEditURL();
467 }
468
469
470
471
472
473
474 public String getDublinEditorEditURL() {
475 return SpringContext.getBean(OlePurchaseOrderDocumentHelperService.class).getDublinEditorEditURL();
476 }
477
478
479
480
481
482 public String getInstanceEditorURL() {
483 return SpringContext.getBean(OlePurchaseOrderDocumentHelperService.class).getInstanceEditorURL();
484 }
485
486
487
488
489
490
491 public String getBibeditorViewURL() {
492 return SpringContext.getBean(OlePurchaseOrderDocumentHelperService.class).getBibeditorViewURL();
493 }
494
495
496
497
498
499 public String getDublinEditorViewURL() {
500 return SpringContext.getBean(OlePurchaseOrderDocumentHelperService.class).getDublinEditorViewURL();
501 }
502
503
504
505
506
507 public String getMarcXMLFileDirLocation() throws Exception {
508 LOG.debug("Inside getMarcXMLFileDirLocation of OlePurchaseOrderAmendmentDocument");
509 return SpringContext.getBean(OlePurchaseOrderDocumentHelperService.class).getMarcXMLFileDirLocation();
510 }
511
512 @Override
513 public Class getItemClass() {
514 return OlePurchaseOrderItem.class;
515 }
516
517
518 @Override
519 public boolean answerSplitNodeQuestion(String nodeName) throws UnsupportedOperationException {
520 if (nodeName.equals(PurapWorkflowConstants.HAS_NEW_UNORDERED_ITEMS)) {
521 return isNewUnorderedItem();
522 }
523 if (nodeName.equals(PurapWorkflowConstants.CONTRACT_MANAGEMENT_REVIEW_REQUIRED)) {
524 return isContractManagementReviewRequired();
525 }
526 if (nodeName.equals(PurapWorkflowConstants.AWARD_REVIEW_REQUIRED)) {
527 return isAwardReviewRequired();
528 }
529 if (nodeName.equals(PurapWorkflowConstants.BUDGET_REVIEW_REQUIRED)) {
530 return isBudgetReviewRequired();
531 }
532 if (nodeName.equals(PurapWorkflowConstants.VENDOR_IS_EMPLOYEE_OR_NON_RESIDENT_ALIEN)) {
533 return isVendorEmployeeOrNonResidentAlien();
534 }
535
536 if (nodeName.equals(PurapWorkflowConstants.NOTIFY_BUDGET_REVIEW)) {
537 return isNotificationRequired();
538 }
539 throw new UnsupportedOperationException("Cannot answer split question for this node you call \"" + nodeName + "\"");
540 }
541
542 public String getVendorPoNumber() {
543 return vendorPoNumber;
544 }
545
546 public void setVendorPoNumber(String vendorPoNumber) {
547 this.vendorPoNumber = vendorPoNumber;
548 }
549
550
551
552
553
554
555 public boolean getIsSaved() {
556 if (this.getDocumentHeader().getWorkflowDocument().isSaved() || this.getDocumentHeader().getWorkflowDocument().isInitiated()) {
557 return true;
558 }
559 return false;
560 }
561
562 public boolean getIsATypeOfRCVGDoc() {
563 return false;
564 }
565
566 public boolean getIsATypeOfCORRDoc() {
567 return false;
568 }
569
570
571 @Override
572 public void doRouteLevelChange(DocumentRouteLevelChange levelChangeEvent) {
573 super.doRouteLevelChange(levelChangeEvent);
574 try {
575 String newNodeName = levelChangeEvent.getNewNodeName();
576 String documentId = this.getDocumentNumber();
577 if (!OLEConstants.PO_NOTE_MAP.containsKey(documentId)
578 && newNodeName != null
579 && (newNodeName.equalsIgnoreCase(PurapWorkflowConstants.BUDGET_NODE) || newNodeName
580 .equalsIgnoreCase(PurapWorkflowConstants.FYI_BUDGET))) {
581 addPurchaseOrderNote(levelChangeEvent);
582 OLEConstants.PO_NOTE_MAP.put(documentId, true);
583
584 }
585 } catch (Exception e) {
586 String errorMsg = "Workflow Error found checking actions requests on document with id "
587 + getDocumentNumber() + ". *** WILL NOT UPDATE PURAP STATUS ***";
588 LOG.error(errorMsg, e);
589 }
590 }
591
592 public void addPurchaseOrderNote(DocumentRouteLevelChange levelChangeEvent) {
593
594 String newNodeName = levelChangeEvent.getNewNodeName();
595 RoutingReportCriteria.Builder reportCriteria = RoutingReportCriteria.Builder
596 .createByDocumentIdAndTargetNodeName(getDocumentNumber(), newNodeName);
597 if (newNodeName != null
598 && (newNodeName.equalsIgnoreCase(PurapWorkflowConstants.BUDGET_NODE) || newNodeName
599 .equalsIgnoreCase(PurapWorkflowConstants.FYI_BUDGET))) {
600 String note = "";
601 if(newNodeName.equalsIgnoreCase(PurapWorkflowConstants.BUDGET_NODE)){
602 note = OLEConstants.SufficientFundCheck.POA_NOTE;
603 }
604 if(newNodeName.equalsIgnoreCase(PurapWorkflowConstants.FYI_BUDGET)){
605 note = OLEConstants.SufficientFundCheck.FYI_NOTE;
606 }
607 DocumentService documentService = SpringContext.getBean(DocumentService.class);
608 Note apoNote = documentService.createNoteFromDocument(this, note);
609 this.addNote(apoNote);
610 String documentTypeName = this.getDocumentHeader().getWorkflowDocument().getDocumentTypeName();
611 if (documentTypeName != null
612 && documentTypeName.equals(OLEConstants.FinancialDocumentTypeCodes.PURCHASE_ORDER_AMENDMENT)) {
613 documentService.saveDocumentNotes(this);
614 }
615
616 }
617
618 }
619
620
621
622
623
624 @Override
625 protected void populateAccountsForRouting() {
626 List<SufficientFundsItem> fundsItems = new ArrayList<SufficientFundsItem>();
627 String documentId = this.getDocumentNumber();
628 try {
629 String nodeName = getFinancialSystemDocumentHeader().getWorkflowDocument().getCurrentNodeNames().iterator()
630 .next();
631 if (nodeName != null
632 && (nodeName.equalsIgnoreCase(PurapWorkflowConstants.BUDGET_NODE) || nodeName
633 .equalsIgnoreCase(PurapWorkflowConstants.BUDGET_REVIEW_REQUIRED))) {
634 if (SpringContext.getBean(UniversityDateService.class).getCurrentFiscalYear()
635 .compareTo(getPostingYear()) >= 0) {
636 List<GeneralLedgerPendingEntry> pendingEntries = getPendingLedgerEntriesForSufficientFundsChecking();
637 for (GeneralLedgerPendingEntry glpe : pendingEntries) {
638 glpe.getChartOfAccountsCode();
639 }
640 SpringContext.getBean(GeneralLedgerPendingEntryService.class).delete(getDocumentNumber());
641 fundsItems = SpringContext.getBean(SufficientFundsService.class).checkSufficientFunds(
642 pendingEntries);
643 SpringContext.getBean(GeneralLedgerPendingEntryService.class).generateGeneralLedgerPendingEntries(
644 this);
645 SpringContext.getBean(BusinessObjectService.class).save(getGeneralLedgerPendingEntries());
646 }
647 SpringContext.getBean(PurapAccountingService.class).updateAccountAmounts(this);
648 accountsForRouting = (SpringContext.getBean(PurapAccountingService.class).generateSummary(getItems()));
649 String documentFiscalYearString = this.getPostingYear().toString();
650 List<String> fundsItemList = new ArrayList<String>();
651 List<String> accountsList = new ArrayList<String>();
652 for (SufficientFundsItem fundsItem : fundsItems) {
653 fundsItemList.add(fundsItem.getAccount().getChartOfAccountsCode());
654 }
655 setAccountsForRouting(accountsForRouting);
656 refreshNonUpdateableReferences();
657 for (SourceAccountingLine sourceLine : getAccountsForRouting()) {
658 sourceLine.refreshNonUpdateableReferences();
659 }
660 } else {
661 super.populateAccountsForRouting();
662 }
663 } catch (Exception e) {
664 logAndThrowRuntimeException("Error in populateAccountsForRouting while submitting document with id "
665 + getDocumentNumber(), e);
666 }
667 }
668
669
670 @Override
671 protected boolean isBudgetReviewRequired() {
672 OleRequisitionDocumentService oleRequisitionDocumentService = (OleRequisitionDocumentService) SpringContext
673 .getBean("oleRequisitionDocumentService");
674 boolean sufficientFundCheck = false;
675 List<SourceAccountingLine> sourceAccountingLineList = this.getSourceAccountingLines();
676 for (SourceAccountingLine accLine : sourceAccountingLineList) {
677 Map searchMap = new HashMap();
678 String notificationOption = null;
679 Map<String, Object> key = new HashMap<String, Object>();
680 String chartCode = accLine.getChartOfAccountsCode();
681 String accNo = accLine.getAccountNumber();
682 String objectCd = accLine.getFinancialObjectCode();
683 key.put(OLEPropertyConstants.CHART_OF_ACCOUNTS_CODE, chartCode);
684 key.put(OLEPropertyConstants.ACCOUNT_NUMBER, accNo);
685 OleSufficientFundCheck account = SpringContext.getBean(BusinessObjectService.class).findByPrimaryKey(
686 OleSufficientFundCheck.class, key);
687 if (account != null) {
688 notificationOption = account.getNotificationOption();
689 }
690 if (notificationOption != null
691 && (notificationOption.equals(OLEPropertyConstants.BUD_REVIEW))) {
692 sufficientFundCheck = oleRequisitionDocumentService.hasSufficientFundsOnRequisition(accLine);
693 if (sufficientFundCheck) {
694 return true;
695 }
696 }
697 }
698 return sufficientFundCheck;
699 }
700
701 private boolean isNotificationRequired() {
702 OleRequisitionDocumentService oleRequisitionDocumentService = (OleRequisitionDocumentService) SpringContext
703 .getBean("oleRequisitionDocumentService");
704 List<SourceAccountingLine> sourceAccountingLineList = this.getSourceAccountingLines();
705 boolean sufficientFundCheck = false;
706 for (SourceAccountingLine accLine : sourceAccountingLineList) {
707 Map searchMap = new HashMap();
708 String notificationOption = null;
709 Map<String, Object> key = new HashMap<String, Object>();
710 String chartCode = accLine.getChartOfAccountsCode();
711 String accNo = accLine.getAccountNumber();
712 String objectCd = accLine.getFinancialObjectCode();
713 key.put(OLEPropertyConstants.CHART_OF_ACCOUNTS_CODE, chartCode);
714 key.put(OLEPropertyConstants.ACCOUNT_NUMBER, accNo);
715 OleSufficientFundCheck account = SpringContext.getBean(BusinessObjectService.class).findByPrimaryKey(
716 OleSufficientFundCheck.class, key);
717 if (account != null) {
718 notificationOption = account.getNotificationOption();
719 }
720 if (notificationOption != null && notificationOption.equals(OLEPropertyConstants.NOTIFICATION)) {
721 sufficientFundCheck = oleRequisitionDocumentService.hasSufficientFundsOnRequisition(accLine);
722 if (sufficientFundCheck) {
723 return true;
724 }
725 }
726 }
727 return sufficientFundCheck;
728 }
729
730 private void populateVendorAliasName() {
731 Map vendorDetailMap = new HashMap();
732 vendorDetailMap.put(OLEConstants.VENDOR_HEADER_IDENTIFIER, this.getVendorHeaderGeneratedIdentifier());
733 vendorDetailMap.put(OLEConstants.VENDOR_DETAIL_IDENTIFIER, this.getVendorDetailAssignedIdentifier());
734 List<VendorAlias> vendorDetailList = (List) getBusinessObjectService().findMatching(VendorAlias.class, vendorDetailMap);
735 if (vendorDetailList != null && vendorDetailList.size() > 0) {
736 this.setVendorAliasName(vendorDetailList.get(0).getVendorAliasName());
737 }
738 }
739
740 }