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 }