001 /*
002 * Copyright 2011 The Kuali Foundation.
003 *
004 * Licensed under the Educational Community License, Version 2.0 (the "License");
005 * you may not use this file except in compliance with the License.
006 * You may obtain a copy of the License at
007 *
008 * http://www.opensource.org/licenses/ecl2.php
009 *
010 * Unless required by applicable law or agreed to in writing, software
011 * distributed under the License is distributed on an "AS IS" BASIS,
012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
013 * See the License for the specific language governing permissions and
014 * limitations under the License.
015 */
016 package org.kuali.kfs.module.purap;
017
018 import java.util.ArrayList;
019 import java.util.List;
020
021 import org.kuali.kfs.module.purap.PurapConstants.PaymentRequestStatuses;
022
023 /**
024 * Holds Workflow constants for PURAP documents
025 */
026 public class PurapWorkflowConstants {
027
028 public interface NodeDetails {
029 public String getName();
030
031 public String getAwaitingStatusCode();
032
033 public String getDisapprovedStatusCode();
034
035 public NodeDetails getPreviousNodeDetails();
036
037 public NodeDetails getNextNodeDetails();
038
039 public NodeDetails getNodeDetailByName(String name);
040
041 public int getOrdinal();
042 }
043
044 // Global
045 public static final String HAS_ACCOUNTING_LINES = "HasAccountingLines";
046 public static final String AMOUNT_REQUIRES_SEPARATION_OF_DUTIES_REVIEW_SPLIT = "AmountRequiresSeparationOfDutiesReview";
047 public static final String CONTRACT_MANAGEMENT_REVIEW_REQUIRED = "RequiresContractManagementReview";
048 public static final String VENDOR_IS_EMPLOYEE_OR_NON_RESIDENT_ALIEN = "VendorIsEmployeeOrNonResidentAlien";
049 public static final String AWARD_REVIEW_REQUIRED = "RequiresAwardReview";
050 public static final String BUDGET_REVIEW_REQUIRED = "RequiresBudgetReview";
051 public static final String TRANSMISSION_METHOD_IS_PRINT = "TransmissionMethodIsPrint";
052 public static final String HAS_NEW_UNORDERED_ITEMS = "HasNewUnorderedItems";
053 public static final String RELATES_TO_OUTSTANDING_TRANSACTIONS = "RelatesToOutstandingTransactions";
054 public static final String REQUIRES_IMAGE_ATTACHMENT = "RequiresImageAttachment";
055 public static final String PURCHASE_WAS_RECEIVED = "PurchaseWasReceived";
056
057 public static final String DOC_ADHOC_NODE_NAME = "AdHoc";
058
059 public static class ContractManagerAssignmentDocument {
060 public static final String WORKFLOW_DOCUMENT_TITLE = "Contract Manager Assignment";
061 public static final String ASSIGN_CONTRACT_DOC_ERROR_COMPLETING_POST_PROCESSING = "Unable to save the contract manager for the following Requisitions: ";
062 }
063
064 public static class RequisitionDocument {
065 public enum NodeDetailEnum implements NodeDetails {
066 ADHOC_REVIEW(DOC_ADHOC_NODE_NAME, null, PurapConstants.RequisitionStatuses.CANCELLED), CONTENT_REVIEW("Organization", PurapConstants.RequisitionStatuses.AWAIT_CONTENT_REVIEW, PurapConstants.RequisitionStatuses.DAPRVD_CONTENT), HAS_ACCOUNTING_LINES("Initiator", PurapConstants.RequisitionStatuses.AWAIT_HAS_ACCOUNTING_LINES, PurapConstants.RequisitionStatuses.DAPRVD_HAS_ACCOUNTING_LINES), SUB_ACCOUNT_REVIEW("SubAccount", PurapConstants.RequisitionStatuses.AWAIT_SUB_ACCT_REVIEW, PurapConstants.RequisitionStatuses.DAPRVD_SUB_ACCT), ACCOUNT_REVIEW("Account", PurapConstants.RequisitionStatuses.AWAIT_FISCAL_REVIEW, PurapConstants.RequisitionStatuses.DAPRVD_FISCAL), ORG_REVIEW("AccountingOrganizationHierarchy", PurapConstants.RequisitionStatuses.AWAIT_CHART_REVIEW, PurapConstants.RequisitionStatuses.DAPRVD_CHART), COMMODITY_CODE_REVIEW("Commodity", PurapConstants.RequisitionStatuses.AWAIT_COMMODITY_CODE_REVIEW, PurapConstants.RequisitionStatuses.DAPRVD_COMMODITY_CODE), SEPARATION_OF_DUTIES_REVIEW("SeparationOfDuties", PurapConstants.RequisitionStatuses.AWAIT_SEP_OF_DUTY_REVIEW, PurapConstants.RequisitionStatuses.DAPRVD_SEP_OF_DUTY), ;
067 private final String name;
068 private final String awaitingStatusCode;
069 private final String disapprovedStatusCode;
070
071 NodeDetailEnum(String name, String awaitingStatusCode, String disapprovedStatusCode) {
072 this.name = name;
073 this.awaitingStatusCode = awaitingStatusCode;
074 this.disapprovedStatusCode = disapprovedStatusCode;
075 }
076
077 public String getName() {
078 return name;
079 }
080
081 public String getAwaitingStatusCode() {
082 return awaitingStatusCode;
083 }
084
085 public String getDisapprovedStatusCode() {
086 return disapprovedStatusCode;
087 }
088
089 public NodeDetails getPreviousNodeDetails() {
090 if (this.ordinal() > 0) {
091 return NodeDetailEnum.values()[this.ordinal() - 1];
092 }
093 return null;
094 }
095
096 public NodeDetails getNextNodeDetails() {
097 if (this.ordinal() < (NodeDetailEnum.values().length - 1)) {
098 return NodeDetailEnum.values()[this.ordinal() + 1];
099 }
100 return null;
101 }
102
103 public NodeDetails getNodeDetailByName(String name) {
104 return getNodeDetailEnumByName(name);
105 }
106
107 public static NodeDetails getNodeDetailEnumByName(String name) {
108 for (NodeDetailEnum nodeDetailEnum : NodeDetailEnum.values()) {
109 if (nodeDetailEnum.name.equals(name)) {
110 return nodeDetailEnum;
111 }
112 }
113 return null;
114 }
115
116 public int getOrdinal() {
117 return this.ordinal();
118 }
119 }
120
121 }
122
123 public static class PurchaseOrderDocument {
124 public enum NodeDetailEnum implements NodeDetails {
125 ADHOC_REVIEW(DOC_ADHOC_NODE_NAME, null, PurapConstants.PurchaseOrderStatuses.CANCELLED), AWAIT_NEW_UNORDERED_ITEM_REVIEW("NewUnorderedItems", PurapConstants.PurchaseOrderStatuses.AWAIT_NEW_UNORDERED_ITEM_REVIEW, PurapConstants.PurchaseOrderStatuses.VOID), INTERNAL_PURCHASING_REVIEW("ContractManagement", PurapConstants.PurchaseOrderStatuses.AWAIT_PURCHASING_REVIEW, PurapConstants.PurchaseOrderStatuses.DAPRVD_PURCHASING), COMMODITY_CODE_REVIEW("Commodity", PurapConstants.PurchaseOrderStatuses.AWAIT_COMMODITY_CODE_REVIEW, PurapConstants.PurchaseOrderStatuses.DAPRVD_COMMODITY_CODE), CONTRACTS_AND_GRANTS_REVIEW("Award", PurapConstants.PurchaseOrderStatuses.AWAIT_CONTRACTS_GRANTS_REVIEW, PurapConstants.PurchaseOrderStatuses.DAPRVD_CONTRACTS_GRANTS), BUDGET_OFFICE_REVIEW("Budget", PurapConstants.PurchaseOrderStatuses.AWAIT_BUDGET_REVIEW, PurapConstants.PurchaseOrderStatuses.DAPRVD_BUDGET), VENDOR_TAX_REVIEW("Tax", PurapConstants.PurchaseOrderStatuses.AWAIT_TAX_REVIEW, PurapConstants.PurchaseOrderStatuses.DAPRVD_TAX), DOCUMENT_TRANSMISSION("JoinVendorIsEmployeeOrNonResidentAlien", null, PurapConstants.PurchaseOrderStatuses.VOID), ;
126
127 private final String name;
128 private final String awaitingStatusCode;
129 private final String disapprovedStatusCode;
130
131 NodeDetailEnum(String name, String awaitingStatusCode, String disapprovedStatusCode) {
132 this.name = name;
133 this.awaitingStatusCode = awaitingStatusCode;
134 this.disapprovedStatusCode = disapprovedStatusCode;
135 }
136
137 public String getName() {
138 return name;
139 }
140
141 public String getAwaitingStatusCode() {
142 return awaitingStatusCode;
143 }
144
145 public String getDisapprovedStatusCode() {
146 return disapprovedStatusCode;
147 }
148
149 public NodeDetails getPreviousNodeDetails() {
150 if (this.ordinal() > 0) {
151 return NodeDetailEnum.values()[this.ordinal() - 1];
152 }
153 return null;
154 }
155
156 public NodeDetails getNextNodeDetails() {
157 if (this.ordinal() < (NodeDetailEnum.values().length - 1)) {
158 return NodeDetailEnum.values()[this.ordinal() + 1];
159 }
160 return null;
161 }
162
163 public NodeDetails getNodeDetailByName(String name) {
164 return getNodeDetailEnumByName(name);
165 }
166
167 public static NodeDetails getNodeDetailEnumByName(String name) {
168 for (NodeDetailEnum nodeDetailEnum : NodeDetailEnum.values()) {
169 if (nodeDetailEnum.name.equals(name)) {
170 return nodeDetailEnum;
171 }
172 }
173 return null;
174 }
175
176 public int getOrdinal() {
177 return this.ordinal();
178 }
179 }
180 }
181
182 public static class PaymentRequestDocument {
183 public enum NodeDetailEnum implements NodeDetails {
184 ADHOC_REVIEW(DOC_ADHOC_NODE_NAME, null, PaymentRequestStatuses.CANCELLED_IN_PROCESS, false),
185 ACCOUNTS_PAYABLE_REVIEW("ImageAttachment", PaymentRequestStatuses.AWAITING_ACCOUNTS_PAYABLE_REVIEW, PaymentRequestStatuses.CANCELLED_IN_PROCESS, false),
186 AWAITING_RECEIVING_REVIEW("PurchaseWasReceived", PaymentRequestStatuses.AWAITING_RECEIVING_REVIEW, PaymentRequestStatuses.CANCELLED_POST_AP_APPROVE, false),
187 SUB_ACCOUNT_REVIEW("SubAccount", PaymentRequestStatuses.AWAITING_SUB_ACCT_MGR_REVIEW, PaymentRequestStatuses.CANCELLED_POST_AP_APPROVE, false),
188 ACCOUNT_REVIEW("Account", PaymentRequestStatuses.AWAITING_FISCAL_REVIEW, PaymentRequestStatuses.CANCELLED_POST_AP_APPROVE, true),
189 ORG_REVIEW("AccountingOrganizationHierarchy", PaymentRequestStatuses.AWAITING_ORG_REVIEW, PaymentRequestStatuses.CANCELLED_POST_AP_APPROVE, false),
190 VENDOR_TAX_REVIEW("Tax", PaymentRequestStatuses.AWAITING_TAX_REVIEW, PaymentRequestStatuses.CANCELLED_POST_AP_APPROVE, true);
191
192 private final String name;
193 private final String awaitingStatusCode;
194 private final String disapprovedStatusCode;
195 private final boolean correctingGeneralLedgerEntriesRequired;
196
197 NodeDetailEnum(String name, String awaitingStatusCode, String disapprovedStatusCode, boolean correctingGeneralLedgerEntriesRequired) {
198 this.name = name;
199 this.awaitingStatusCode = awaitingStatusCode;
200 this.disapprovedStatusCode = disapprovedStatusCode;
201 this.correctingGeneralLedgerEntriesRequired = correctingGeneralLedgerEntriesRequired;
202 }
203
204 public String getName() {
205 return name;
206 }
207
208 public String getAwaitingStatusCode() {
209 return awaitingStatusCode;
210 }
211
212 public String getDisapprovedStatusCode() {
213 return disapprovedStatusCode;
214 }
215
216 public boolean isCorrectingGeneralLedgerEntriesRequired() {
217 return correctingGeneralLedgerEntriesRequired;
218 }
219
220 public NodeDetails getPreviousNodeDetails() {
221 if (this.ordinal() > 0) {
222 return NodeDetailEnum.values()[this.ordinal() - 1];
223 }
224 return null;
225 }
226
227 public NodeDetails getNextNodeDetails() {
228 if (this.ordinal() < (NodeDetailEnum.values().length - 1)) {
229 return NodeDetailEnum.values()[this.ordinal() + 1];
230 }
231 return null;
232 }
233
234 public NodeDetails getNodeDetailByName(String name) {
235 return getNodeDetailEnumByName(name);
236 }
237
238 public static NodeDetails getNodeDetailEnumByName(String name) {
239 for (NodeDetailEnum nodeDetailEnum : NodeDetailEnum.values()) {
240 if (nodeDetailEnum.name.equals(name)) {
241 return nodeDetailEnum;
242 }
243 }
244 return null;
245 }
246
247 public static List<String> getNodesRequiringCorrectingGeneralLedgerEntries() {
248 List<String> returnEnumNames = new ArrayList<String>();
249 for (NodeDetailEnum currentEnum : NodeDetailEnum.values()) {
250 if (currentEnum.isCorrectingGeneralLedgerEntriesRequired()) {
251 returnEnumNames.add(currentEnum.getName());
252 }
253 }
254 return returnEnumNames;
255 }
256
257 public int getOrdinal() {
258 return this.ordinal();
259 }
260 }
261 }
262
263 public static class CreditMemoDocument {
264 public enum NodeDetailEnum implements NodeDetails {
265 ADHOC_REVIEW(DOC_ADHOC_NODE_NAME, null, PurapConstants.PaymentRequestStatuses.CANCELLED_IN_PROCESS, false), ACCOUNTS_PAYABLE_REVIEW("ImageAttachment", PurapConstants.CreditMemoStatuses.AWAITING_ACCOUNTS_PAYABLE_REVIEW, PurapConstants.CreditMemoStatuses.CANCELLED_PRIOR_TO_AP_APPROVAL, false), ;
266
267 private final String name;
268 private final String awaitingStatusCode;
269 private final String disapprovedStatusCode;
270 private final boolean correctingGeneralLedgerEntriesRequired;
271
272 NodeDetailEnum(String name, String awaitingStatusCode, String disapprovedStatusCode, boolean correctingGeneralLedgerEntriesRequired) {
273 this.name = name;
274 this.awaitingStatusCode = awaitingStatusCode;
275 this.disapprovedStatusCode = disapprovedStatusCode;
276 this.correctingGeneralLedgerEntriesRequired = correctingGeneralLedgerEntriesRequired;
277 }
278
279 public String getName() {
280 return name;
281 }
282
283 public String getAwaitingStatusCode() {
284 return awaitingStatusCode;
285 }
286
287 public String getDisapprovedStatusCode() {
288 return disapprovedStatusCode;
289 }
290
291 public boolean isCorrectingGeneralLedgerEntriesRequired() {
292 return correctingGeneralLedgerEntriesRequired;
293 }
294
295 public NodeDetails getPreviousNodeDetails() {
296 if (this.ordinal() > 0) {
297 return NodeDetailEnum.values()[this.ordinal() - 1];
298 }
299 return null;
300 }
301
302 public NodeDetails getNextNodeDetails() {
303 if (this.ordinal() < (NodeDetailEnum.values().length - 1)) {
304 return NodeDetailEnum.values()[this.ordinal() + 1];
305 }
306 return null;
307 }
308
309 public NodeDetails getNodeDetailByName(String name) {
310 return getNodeDetailEnumByName(name);
311 }
312
313 public static NodeDetails getNodeDetailEnumByName(String name) {
314 for (NodeDetailEnum nodeDetailEnum : NodeDetailEnum.values()) {
315 if (nodeDetailEnum.name.equals(name)) {
316 return nodeDetailEnum;
317 }
318 }
319 return null;
320 }
321
322 public static List<String> getNodesRequiringCorrectingGeneralLedgerEntries() {
323 List<String> returnEnumNames = new ArrayList<String>();
324 for (NodeDetailEnum currentEnum : NodeDetailEnum.values()) {
325 if (currentEnum.isCorrectingGeneralLedgerEntriesRequired()) {
326 returnEnumNames.add(currentEnum.getName());
327 }
328 }
329 return returnEnumNames;
330 }
331
332 public int getOrdinal() {
333 return this.ordinal();
334 }
335 }
336 }
337 }