1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.kuali.ole.module.purap.document;
18
19 import org.kuali.ole.module.purap.PurapConstants;
20 import org.kuali.ole.module.purap.PurapConstants.PurapDocTypeCodes;
21 import org.kuali.ole.module.purap.PurapConstants.PurchaseOrderStatuses;
22 import org.kuali.ole.module.purap.document.service.PurchaseOrderService;
23 import org.kuali.ole.module.purap.service.PurapGeneralLedgerService;
24 import org.kuali.ole.sys.OLEConstants;
25 import org.kuali.ole.sys.businessobject.AccountingLine;
26 import org.kuali.ole.sys.businessobject.GeneralLedgerPendingEntry;
27 import org.kuali.ole.sys.businessobject.GeneralLedgerPendingEntrySourceDetail;
28 import org.kuali.ole.sys.context.SpringContext;
29 import org.kuali.rice.kew.api.exception.WorkflowException;
30 import org.kuali.rice.kew.framework.postprocessor.DocumentRouteStatusChange;
31 import org.kuali.rice.krad.rules.rule.event.KualiDocumentEvent;
32 import org.kuali.rice.krad.workflow.service.WorkflowDocumentService;
33
34 import java.util.ArrayList;
35 import java.util.Iterator;
36 import java.util.List;
37
38 import static org.kuali.ole.sys.OLEConstants.GL_DEBIT_CODE;
39
40
41
42
43 public class PurchaseOrderReopenDocument extends PurchaseOrderDocument {
44 protected static org.apache.log4j.Logger LOG = org.apache.log4j.Logger.getLogger(PurchaseOrderReopenDocument.class);
45
46
47
48
49
50
51
52 @Override
53 public void prepareForSave(KualiDocumentEvent event) {
54 LOG.info("prepareForSave(KualiDocumentEvent) do not create gl entries");
55
56
57 super.prepareForSave(event);
58 }
59
60
61
62
63
64
65
66 @Override
67 public void doRouteStatusChange(DocumentRouteStatusChange statusChangeEvent) {
68 super.doRouteStatusChange(statusChangeEvent);
69
70 try {
71
72 if (this.getFinancialSystemDocumentHeader().getWorkflowDocument().isProcessed()) {
73
74 SpringContext.getBean(PurapGeneralLedgerService.class).generateEntriesReopenPurchaseOrder(this);
75
76
77 SpringContext.getBean(PurchaseOrderService.class).setCurrentAndPendingIndicatorsForApprovedPODocuments(this);
78
79
80 updateAndSaveAppDocStatus(PurchaseOrderStatuses.APPDOC_OPEN);
81 }
82
83 else if (this.getFinancialSystemDocumentHeader().getWorkflowDocument().isDisapproved()) {
84 SpringContext.getBean(PurchaseOrderService.class).setCurrentAndPendingIndicatorsForDisapprovedReopenPODocuments(this);
85
86
87 try {
88 String nodeName = SpringContext.getBean(WorkflowDocumentService.class).getCurrentRouteLevelName(this.getFinancialSystemDocumentHeader().getWorkflowDocument());
89 String reqStatus = PurapConstants.PurchaseOrderStatuses.getPurchaseOrderAppDocDisapproveStatuses().get(nodeName);
90 updateAndSaveAppDocStatus(reqStatus);
91 } catch (WorkflowException e) {
92 logAndThrowRuntimeException("Error saving routing data while saving App Doc Status " + getDocumentNumber(), e);
93 }
94 }
95
96 else if (this.getFinancialSystemDocumentHeader().getWorkflowDocument().isCanceled()) {
97 SpringContext.getBean(PurchaseOrderService.class).setCurrentAndPendingIndicatorsForCancelledReopenPODocuments(this);
98
99 updateAndSaveAppDocStatus(PurchaseOrderStatuses.APPDOC_CANCELLED);
100 }
101 } catch (WorkflowException e) {
102 logAndThrowRuntimeException("Error saving routing data while saving document with id " + getDocumentNumber(), e);
103 }
104 }
105
106
107
108
109
110 @Override
111 public void customizeExplicitGeneralLedgerPendingEntry(GeneralLedgerPendingEntrySourceDetail postable, GeneralLedgerPendingEntry explicitEntry) {
112 super.customizeExplicitGeneralLedgerPendingEntry(postable, explicitEntry);
113
114 SpringContext.getBean(PurapGeneralLedgerService.class).customizeGeneralLedgerPendingEntry(this, (AccountingLine) postable, explicitEntry, getPurapDocumentIdentifier(), GL_DEBIT_CODE, PurapDocTypeCodes.PO_DOCUMENT, true);
115
116
117 explicitEntry.setFinancialDocumentTypeCode(PurapDocTypeCodes.PO_REOPEN_DOCUMENT);
118 explicitEntry.setFinancialDocumentApprovedCode(OLEConstants.PENDING_ENTRY_APPROVED_STATUS_CODE.APPROVED);
119 }
120
121 @Override
122 public List<GeneralLedgerPendingEntrySourceDetail> getGeneralLedgerPendingEntrySourceDetails() {
123 List<GeneralLedgerPendingEntrySourceDetail> accountingLines = new ArrayList<GeneralLedgerPendingEntrySourceDetail>();
124 if (getGlOnlySourceAccountingLines() != null) {
125 Iterator iter = getGlOnlySourceAccountingLines().iterator();
126 while (iter.hasNext()) {
127 accountingLines.add((GeneralLedgerPendingEntrySourceDetail) iter.next());
128 }
129 }
130 return accountingLines;
131 }
132
133
134 }