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 }