1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package org.kuali.ole.module.purap.document.authorization;
17
18 import org.kuali.ole.module.purap.PurapAuthorizationConstants;
19 import org.kuali.ole.module.purap.PurapAuthorizationConstants.RequisitionEditMode;
20 import org.kuali.ole.module.purap.PurapConstants;
21 import org.kuali.ole.module.purap.PurapConstants.RequisitionSources;
22 import org.kuali.ole.module.purap.PurapConstants.RequisitionStatuses;
23 import org.kuali.ole.module.purap.PurapParameterConstants;
24 import org.kuali.ole.module.purap.businessobject.RequisitionItem;
25 import org.kuali.ole.module.purap.document.PurchasingAccountsPayableDocument;
26 import org.kuali.ole.module.purap.document.RequisitionDocument;
27 import org.kuali.ole.module.purap.document.service.PurapService;
28 import org.kuali.ole.sys.context.SpringContext;
29 import org.kuali.ole.sys.service.impl.OleParameterConstants;
30 import org.kuali.rice.coreservice.framework.parameter.ParameterService;
31 import org.kuali.rice.kew.api.WorkflowDocument;
32 import org.kuali.rice.krad.document.Document;
33 import org.kuali.rice.krad.util.ObjectUtils;
34
35 import java.util.ArrayList;
36 import java.util.Iterator;
37 import java.util.List;
38 import java.util.Set;
39
40
41 public class RequisitionDocumentPresentationController extends PurchasingAccountsPayableDocumentPresentationController {
42
43 @Override
44 public boolean canEdit(Document document) {
45 RequisitionDocument reqDocument = (RequisitionDocument) document;
46
47
48 if (!RequisitionStatuses.APPDOC_IN_PROCESS.equals(reqDocument.getApplicationDocumentStatus()) &&
49 !RequisitionStatuses.APPDOC_AWAIT_CONTENT_REVIEW.equals(reqDocument.getApplicationDocumentStatus()) &&
50 !RequisitionStatuses.APPDOC_AWAIT_HAS_ACCOUNTING_LINES.equals(reqDocument.getApplicationDocumentStatus()) &&
51 !RequisitionStatuses.APPDOC_AWAIT_FISCAL_REVIEW.equals(reqDocument.getApplicationDocumentStatus())) {
52
53
54 return false;
55 }
56 return super.canEdit(document);
57 }
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97 @Override
98 public Set<String> getEditModes(Document document) {
99 Set<String> editModes = super.getEditModes(document);
100 RequisitionDocument reqDocument = (RequisitionDocument) document;
101
102
103 boolean enableCommodityCode = SpringContext.getBean(ParameterService.class).getParameterValueAsBoolean(OleParameterConstants.PURCHASING_DOCUMENT.class, PurapParameterConstants.ENABLE_COMMODITY_CODE_IND);
104 if (enableCommodityCode) {
105 editModes.add(RequisitionEditMode.ENABLE_COMMODITY_CODE);
106 }
107
108
109 if (ObjectUtils.isNotNull(reqDocument.getVendorHeaderGeneratedIdentifier())) {
110 editModes.add(RequisitionEditMode.LOCK_VENDOR_ENTRY);
111 }
112
113
114 if (RequisitionSources.B2B.equals(reqDocument.getRequisitionSourceCode())) {
115 editModes.add(RequisitionEditMode.LOCK_B2B_ENTRY);
116 }
117
118
119 if (!RequisitionSources.B2B.equals(reqDocument.getRequisitionSourceCode()) &&
120 SpringContext.getBean(PurapService.class).allowEncumberNextFiscalYear()) {
121 editModes.add(RequisitionEditMode.ALLOW_POSTING_YEAR_ENTRY);
122 }
123
124
125
126
127
128
129
130
131
132
133
134
135 boolean salesTaxInd = SpringContext.getBean(ParameterService.class).getParameterValueAsBoolean(OleParameterConstants.PURCHASING_DOCUMENT.class, PurapParameterConstants.ENABLE_SALES_TAX_IND);
136 if (salesTaxInd) {
137 editModes.add(PurapAuthorizationConstants.PURAP_TAX_ENABLED);
138 editModes.add(RequisitionEditMode.CLEAR_ALL_TAXES);
139
140 if (reqDocument.isUseTaxIndicator()) {
141
142 editModes.add(RequisitionEditMode.LOCK_TAX_AMOUNT_ENTRY);
143 }
144 }
145
146
147 boolean displayReceivingAddress = SpringContext.getBean(ParameterService.class).getParameterValueAsBoolean(OleParameterConstants.PURCHASING_DOCUMENT.class, PurapParameterConstants.ENABLE_RECEIVING_ADDRESS_IND);
148 if (displayReceivingAddress) {
149 editModes.add(RequisitionEditMode.DISPLAY_RECEIVING_ADDRESS);
150 }
151
152
153 boolean lockAddressToVendor = !SpringContext.getBean(ParameterService.class).getParameterValueAsBoolean(PurapConstants.PURAP_NAMESPACE, "Requisition", PurapParameterConstants.ENABLE_ADDRESS_TO_VENDOR_SELECTION_IND);
154 if (lockAddressToVendor) {
155 editModes.add(RequisitionEditMode.LOCK_ADDRESS_TO_VENDOR);
156 }
157
158
159
160
161 if (reqDocument.isDocumentStoppedInRouteNode(RequisitionStatuses.NODE_CONTENT_REVIEW) ||
162 reqDocument.isDocumentStoppedInRouteNode(RequisitionStatuses.NODE_HAS_ACCOUNTING_LINES)) {
163 editModes.add(RequisitionEditMode.LOCK_CONTENT_ENTRY);
164 }
165
166
167
168
169 else if (reqDocument.isDocumentStoppedInRouteNode(RequisitionStatuses.NODE_ACCOUNT)) {
170
171
172 editModes.add(RequisitionEditMode.RESTRICT_FISCAL_ENTRY);
173
174 List lineList = new ArrayList();
175 for (Iterator iter = reqDocument.getItems().iterator(); iter.hasNext(); ) {
176 RequisitionItem item = (RequisitionItem) iter.next();
177 lineList.addAll(item.getSourceAccountingLines());
178
179
180 if (item.getSourceAccountingLines().size() == 0) {
181 editModes.add(RequisitionEditMode.RESTRICT_FISCAL_ENTRY);
182
183
184 }
185 }
186
187 }
188
189 return editModes;
190 }
191
192 @Override
193 public boolean canCopy(Document document) {
194
195
196
197 WorkflowDocument workflowDocument = document.getDocumentHeader().getWorkflowDocument();
198
199 if (workflowDocument.isInitiated() && !workflowDocument.isSaved()) {
200 return false;
201 }
202 return super.canCopy(document);
203 }
204
205 @Override
206 public boolean canReload(Document document) {
207 RequisitionDocument reqDocument = (RequisitionDocument) document;
208
209
210 WorkflowDocument workflowDocument = ((PurchasingAccountsPayableDocument) document).getFinancialSystemDocumentHeader().getWorkflowDocument();
211
212 if (workflowDocument.isAcknowledgeRequested()) {
213 return false;
214 }
215 if (reqDocument.isDocumentStoppedInRouteNode(RequisitionStatuses.NODE_SUBACCOUNT)) {
216 return false;
217 }
218
219
220 else if (isDocInRouteNodeNotForCurrentUser(reqDocument, RequisitionStatuses.NODE_SUBACCOUNT)) {
221 return true;
222 }
223
224
225 else if (reqDocument.isDocumentStoppedInRouteNode(RequisitionStatuses.NODE_ORG_REVIEW)) {
226 return false;
227 }
228
229 else if (isDocInRouteNodeNotForCurrentUser(reqDocument, RequisitionStatuses.NODE_ORG_REVIEW)) {
230 return true;
231 }
232
233
234 else if (reqDocument.isDocumentStoppedInRouteNode(RequisitionStatuses.NODE_SEPARATION_OF_DUTIES)) {
235 return false;
236 }
237
238 else if (isDocInRouteNodeNotForCurrentUser(reqDocument, RequisitionStatuses.NODE_SEPARATION_OF_DUTIES)) {
239 return true;
240 }
241
242 return super.canReload(document);
243 }
244
245 @Override
246 public boolean canSave(Document document) {
247 RequisitionDocument reqDocument = (RequisitionDocument) document;
248
249 if (reqDocument.isDocumentStoppedInRouteNode(RequisitionStatuses.NODE_ORG_REVIEW)) {
250 return false;
251 }
252 return super.canSave(document);
253 }
254
255
256
257
258
259
260 protected boolean isDocInRouteNodeNotForCurrentUser(Document document, String nodeName) {
261 List<String> currentRouteLevels = new ArrayList<String>();
262
263 WorkflowDocument workflowDocument = ((PurchasingAccountsPayableDocument) document).getFinancialSystemDocumentHeader().getWorkflowDocument();
264 Set<String> names = workflowDocument.getCurrentNodeNames();
265
266 currentRouteLevels = new ArrayList<String>(names);
267
268 if (currentRouteLevels.contains(nodeName) && !workflowDocument.isApprovalRequested()) {
269 return true;
270 }
271 return false;
272 }
273 }