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.apache.commons.lang.StringUtils;
20 import org.kuali.ole.coa.businessobject.Account;
21 import org.kuali.ole.gl.service.SufficientFundsService;
22 import org.kuali.ole.integration.purap.CapitalAssetSystem;
23 import org.kuali.ole.module.purap.*;
24 import org.kuali.ole.module.purap.PurapConstants.*;
25 import org.kuali.ole.module.purap.businessobject.*;
26 import org.kuali.ole.module.purap.document.dataaccess.PurchaseOrderDao;
27 import org.kuali.ole.module.purap.document.service.PurchaseOrderService;
28 import org.kuali.ole.module.purap.document.service.PurchasingDocumentSpecificService;
29 import org.kuali.ole.module.purap.document.service.RequisitionService;
30 import org.kuali.ole.module.purap.service.PurapAccountingService;
31 import org.kuali.ole.module.purap.service.PurapGeneralLedgerService;
32 import org.kuali.ole.module.purap.util.PurApItemUtils;
33 import org.kuali.ole.select.OleSelectConstant;
34 import org.kuali.ole.select.businessobject.OlePurchaseOrderItem;
35 import org.kuali.ole.select.businessobject.OleSufficientFundCheck;
36 import org.kuali.ole.select.document.OlePurchaseOrderDocument;
37 import org.kuali.ole.select.document.service.OleDocstoreHelperService;
38 import org.kuali.ole.select.document.service.OleRequisitionDocumentService;
39 import org.kuali.ole.sys.OLEConstants;
40 import org.kuali.ole.sys.OLEPropertyConstants;
41 import org.kuali.ole.sys.businessobject.*;
42 import org.kuali.ole.sys.context.SpringContext;
43 import org.kuali.ole.sys.document.MultiselectableDocSearchConversion;
44 import org.kuali.ole.sys.service.GeneralLedgerPendingEntryService;
45 import org.kuali.ole.sys.service.UniversityDateService;
46 import org.kuali.ole.vnd.VendorConstants;
47 import org.kuali.ole.vnd.businessobject.*;
48 import org.kuali.ole.vnd.document.service.VendorService;
49 import org.kuali.rice.core.api.datetime.DateTimeService;
50 import org.kuali.rice.core.api.parameter.ParameterEvaluatorService;
51 import org.kuali.rice.core.api.resourceloader.GlobalResourceLoader;
52 import org.kuali.rice.core.api.util.type.KualiDecimal;
53 import org.kuali.rice.coreservice.framework.parameter.ParameterService;
54 import org.kuali.rice.kew.api.KewApiServiceLocator;
55 import org.kuali.rice.kew.api.WorkflowDocument;
56 import org.kuali.rice.kew.api.action.ActionRequestType;
57 import org.kuali.rice.kew.api.document.search.DocumentSearchCriteria;
58 import org.kuali.rice.kew.api.exception.WorkflowException;
59 import org.kuali.rice.kew.framework.postprocessor.ActionTakenEvent;
60 import org.kuali.rice.kew.framework.postprocessor.DocumentRouteLevelChange;
61 import org.kuali.rice.kew.framework.postprocessor.DocumentRouteStatusChange;
62 import org.kuali.rice.kim.api.identity.Person;
63 import org.kuali.rice.kim.api.identity.PersonService;
64 import org.kuali.rice.kns.service.DataDictionaryService;
65 import org.kuali.rice.krad.bo.Note;
66 import org.kuali.rice.krad.bo.PersistableBusinessObject;
67 import org.kuali.rice.krad.dao.DocumentDao;
68 import org.kuali.rice.krad.rules.rule.event.KualiDocumentEvent;
69 import org.kuali.rice.krad.service.BusinessObjectService;
70 import org.kuali.rice.krad.service.DocumentHeaderService;
71 import org.kuali.rice.krad.service.KRADServiceLocatorInternal;
72 import org.kuali.rice.krad.service.SequenceAccessorService;
73 import org.kuali.rice.krad.util.GlobalVariables;
74 import org.kuali.rice.krad.util.NoteType;
75 import org.kuali.rice.krad.util.ObjectUtils;
76 import org.kuali.rice.krad.workflow.service.WorkflowDocumentService;
77
78 import java.math.BigDecimal;
79 import java.sql.Date;
80 import java.sql.Timestamp;
81 import java.util.*;
82
83 import static org.kuali.ole.sys.OLEConstants.GL_CREDIT_CODE;
84 import static org.kuali.ole.sys.OLEConstants.GL_DEBIT_CODE;
85
86
87
88
89 public class PurchaseOrderDocument extends PurchasingDocumentBase implements MultiselectableDocSearchConversion {
90 private static final org.apache.log4j.Logger LOG = org.apache.log4j.Logger.getLogger(PurchaseOrderDocument.class);
91
92 protected Timestamp purchaseOrderCreateTimestamp;
93 protected Integer requisitionIdentifier;
94 protected String purchaseOrderVendorChoiceCode;
95 protected String recurringPaymentFrequencyCode;
96 protected KualiDecimal recurringPaymentAmount;
97 protected Date recurringPaymentDate;
98 protected KualiDecimal initialPaymentAmount;
99 protected Date initialPaymentDate;
100 protected KualiDecimal finalPaymentAmount;
101 protected Date finalPaymentDate;
102 protected Timestamp purchaseOrderInitialOpenTimestamp;
103 protected Timestamp purchaseOrderLastTransmitTimestamp;
104 protected Date purchaseOrderQuoteDueDate;
105 protected String purchaseOrderQuoteTypeCode;
106 protected String purchaseOrderQuoteVendorNoteText;
107 protected boolean purchaseOrderConfirmedIndicator;
108 protected String purchaseOrderCommodityDescription;
109 protected Integer purchaseOrderPreviousIdentifier;
110 protected Integer alternateVendorHeaderGeneratedIdentifier;
111 protected Integer alternateVendorDetailAssignedIdentifier;
112 protected Integer newQuoteVendorHeaderGeneratedIdentifier;
113 protected Integer newQuoteVendorDetailAssignedIdentifier;
114 protected String alternateVendorName;
115 protected boolean purchaseOrderCurrentIndicator = false;
116 protected boolean pendingActionIndicator = false;
117 protected Timestamp purchaseOrderFirstTransmissionTimestamp;
118 protected Integer contractManagerCode;
119 protected Date purchaseOrderQuoteInitializationDate;
120 protected Date purchaseOrderQuoteAwardedDate;
121 protected String assignedUserPrincipalId;
122
123
124 protected List<PurchaseOrderVendorStipulation> purchaseOrderVendorStipulations;
125 protected List<PurchaseOrderVendorQuote> purchaseOrderVendorQuotes;
126
127
128 protected String statusChange;
129 protected String alternateVendorNumber;
130 protected String purchaseOrderRetransmissionMethodCode;
131 protected String retransmitHeader;
132 protected Integer purchaseOrderQuoteListIdentifier;
133 protected KualiDecimal internalPurchasingLimit;
134 protected boolean pendingSplit = false;
135 protected boolean copyingNotesWhenSplitting;
136 protected boolean assigningSensitiveData = false;
137 protected List<PurchaseOrderSensitiveData> purchaseOrderSensitiveData;
138 protected String assignedUserPrincipalName;
139
140
141 protected List<SourceAccountingLine> glOnlySourceAccountingLines;
142
143
144 protected PurchaseOrderVendorChoice purchaseOrderVendorChoice;
145 protected PaymentTermType vendorPaymentTerms;
146 protected ShippingTitle vendorShippingTitle;
147 protected ShippingPaymentTerms vendorShippingPaymentTerms;
148 protected RecurringPaymentFrequency recurringPaymentFrequency;
149 protected ContractManager contractManager;
150 private String vendorAliasName;
151
152 public String getVendorAliasName() {
153 return vendorAliasName;
154 }
155
156 public void setVendorAliasName(String vendorAliasName) {
157 this.vendorAliasName = vendorAliasName;
158 }
159
160
161
162
163 public PurchaseOrderDocument() {
164 super();
165 this.purchaseOrderVendorStipulations = new ArrayList<PurchaseOrderVendorStipulation>();
166 this.purchaseOrderVendorQuotes = new ArrayList<PurchaseOrderVendorQuote>();
167 this.purchaseOrderCreateTimestamp = new Timestamp(new java.util.Date().getTime());
168 }
169
170 @Override
171 public PurchasingDocumentSpecificService getDocumentSpecificService() {
172 return SpringContext.getBean(PurchaseOrderService.class);
173 }
174
175
176
177
178
179
180
181 @Override
182 public boolean isInquiryRendered() {
183
184 if (this.getDocumentHeader().getDocumentNumber() == null) {
185 this.setDocumentHeader(SpringContext.getBean(DocumentHeaderService.class).getDocumentHeaderById(documentNumber));
186 }
187 String applicationDocumentStatus = getApplicationDocumentStatus();
188
189 if (isPostingYearPrior() &&
190 (PurapConstants.PurchaseOrderStatuses.APPDOC_CLOSED.equals(applicationDocumentStatus) ||
191 PurapConstants.PurchaseOrderStatuses.APPDOC_CANCELLED.equals(applicationDocumentStatus) ||
192 PurapConstants.PurchaseOrderStatuses.APPDOC_VOID.equals(applicationDocumentStatus))) {
193 return false;
194 } else {
195 return true;
196 }
197 }
198
199
200
201
202 @Override
203 public String getDocumentTitle() {
204 if (SpringContext.getBean(ParameterService.class).getParameterValueAsBoolean(PurchaseOrderDocument.class, PurapParameterConstants.PURAP_OVERRIDE_PO_DOC_TITLE)) {
205 return getCustomDocumentTitle();
206 }
207
208 return this.buildDocumentTitle(super.getDocumentTitle());
209 }
210
211
212
213
214
215
216
217 protected String getCustomDocumentTitle() {
218 String poNumber = getPurapDocumentIdentifier().toString();
219 String cmCode = getContractManagerCode().toString();
220 String vendorName = StringUtils.trimToEmpty(getVendorName());
221 String totalAmount = getTotalDollarAmount().toString();
222 PurApAccountingLine accountingLine = getFirstAccount();
223 String chartAcctCode = accountingLine != null ? accountingLine.getChartOfAccountsCode() : "";
224 String accountNumber = accountingLine != null ? accountingLine.getAccountNumber() : "";
225 String chartCode = getChartOfAccountsCode();
226 String orgCode = getOrganizationCode();
227 String deliveryCampus = getDeliveryCampus() != null ? getDeliveryCampus().getCampus().getShortName() : "";
228 String documentTitle = "";
229
230 Set<String> nodeNames = this.getFinancialSystemDocumentHeader().getWorkflowDocument().getCurrentNodeNames();
231
232 String routeLevel = "";
233 if (nodeNames.size() >= 1) {
234 routeLevel = nodeNames.iterator().next();
235 }
236
237 if (StringUtils.equals(getApplicationDocumentStatus(), PurchaseOrderStatuses.APPDOC_OPEN)) {
238 documentTitle = super.getDocumentTitle();
239 } else if (routeLevel.equals(PurchaseOrderStatuses.NODE_BUDGET_OFFICE_REVIEW) || routeLevel.equals(PurchaseOrderStatuses.NODE_CONTRACTS_AND_GRANTS_REVIEW)) {
240
241 documentTitle = "PO: " + poNumber + " Account Number: " + chartAcctCode + "-" + accountNumber + " Dept: " + chartCode + "-" + orgCode + " Delivery Campus: " + deliveryCampus;
242 } else if (routeLevel.equals(PurchaseOrderStatuses.NODE_VENDOR_TAX_REVIEW)) {
243
244 documentTitle = "Vendor: " + vendorName + " PO: " + poNumber + " Account Number: " + chartCode + "-" + accountNumber + " Dept: " + chartCode + "-" + orgCode + " Delivery Campus: " + deliveryCampus;
245 } else {
246 documentTitle += "PO: " + poNumber + " Contract Manager: " + cmCode + " Vendor: " + vendorName + " Amount: " + totalAmount;
247 }
248
249 return documentTitle;
250 }
251
252
253
254
255 @Override
256 public Class getSourceAccountingLineClass() {
257
258 return super.getSourceAccountingLineClass();
259 }
260
261
262
263
264
265
266 protected PurApAccountingLine getFirstAccount() {
267
268 if (getItems() != null && !getItems().isEmpty()) {
269 for (Iterator iter = getItems().iterator(); iter.hasNext(); ) {
270 PurchaseOrderItem item = (PurchaseOrderItem) iter.next();
271 if (item.isConsideredEntered() && item.getSourceAccountingLines() != null && !item.getSourceAccountingLines().isEmpty()) {
272
273 PurApAccountingLine accountingLine = item.getSourceAccountingLine(0);
274 accountingLine.refreshNonUpdateableReferences();
275 return accountingLine;
276 }
277 }
278 }
279 return null;
280 }
281
282 public String getAssignedUserPrincipalId() {
283 return assignedUserPrincipalId;
284 }
285
286 public void setAssignedUserPrincipalId(String assignedUserPrincipalId) {
287 this.assignedUserPrincipalId = assignedUserPrincipalId;
288 }
289
290 public String getAssignedUserPrincipalName() {
291
292 if (assignedUserPrincipalName == null && assignedUserPrincipalId != null) {
293
294
295
296 Person assignedUser = SpringContext.getBean(PersonService.class).getPerson(assignedUserPrincipalId);
297 if (assignedUser != null) {
298 this.assignedUserPrincipalName = assignedUser.getPrincipalName();
299 } else {
300 assignedUserPrincipalName = null;
301 }
302
303 }
304
305 return assignedUserPrincipalName;
306 }
307
308 public void setAssignedUserPrincipalName(String assignedUserPrincipalName) {
309 this.assignedUserPrincipalName = assignedUserPrincipalName;
310
311
312 Person assignedUser = null;
313 if (assignedUserPrincipalName != null) {
314 assignedUser = SpringContext.getBean(PersonService.class).getPersonByPrincipalName(assignedUserPrincipalName);
315 }
316 if (assignedUser != null) {
317 assignedUserPrincipalId = assignedUser.getPrincipalId();
318 } else {
319 assignedUserPrincipalId = null;
320 }
321 }
322
323 public boolean getAssigningSensitiveData() {
324 return assigningSensitiveData;
325 }
326
327 public void setAssigningSensitiveData(boolean assigningSensitiveData) {
328 this.assigningSensitiveData = assigningSensitiveData;
329 }
330
331 public List<PurchaseOrderSensitiveData> getPurchaseOrderSensitiveData() {
332 Map fieldValues = new HashMap();
333 fieldValues.put(PurapPropertyConstants.PURAP_DOC_ID, getPurapDocumentIdentifier());
334 return new ArrayList<PurchaseOrderSensitiveData>(SpringContext.getBean(BusinessObjectService.class).findMatching(PurchaseOrderSensitiveData.class, fieldValues));
335 }
336
337 public void setPurchaseOrderSensitiveData(List<PurchaseOrderSensitiveData> purchaseOrderSensitiveData) {
338 this.purchaseOrderSensitiveData = purchaseOrderSensitiveData;
339 }
340
341 public ContractManager getContractManager() {
342 if (ObjectUtils.isNull(contractManager)) {
343 refreshReferenceObject(PurapPropertyConstants.CONTRACT_MANAGER);
344 }
345 return contractManager;
346 }
347
348 public void setContractManager(ContractManager contractManager) {
349 this.contractManager = contractManager;
350 }
351
352 public Integer getContractManagerCode() {
353 return contractManagerCode;
354 }
355
356 public void setContractManagerCode(Integer contractManagerCode) {
357 this.contractManagerCode = contractManagerCode;
358 }
359
360
361
362
363 @Override
364 public List buildListOfDeletionAwareLists() {
365 List managedLists = super.buildListOfDeletionAwareLists();
366 managedLists.add(this.getGeneralLedgerPendingEntries());
367 if (allowDeleteAwareCollection) {
368 managedLists.add(this.getPurchaseOrderVendorQuotes());
369
370 managedLists.add(this.getPurchaseOrderVendorStipulations());
371 }
372 return managedLists;
373 }
374
375
376
377
378 @Override
379 public Boolean getOverrideWorkflowButtons() {
380 if (ObjectUtils.isNull(super.getOverrideWorkflowButtons())) {
381
382 setOverrideWorkflowButtons(Boolean.TRUE);
383 }
384 return super.getOverrideWorkflowButtons();
385 }
386
387
388
389
390
391 @Override
392 public void customPrepareForSave(KualiDocumentEvent event) {
393 super.customPrepareForSave(event);
394 if (ObjectUtils.isNull(getPurapDocumentIdentifier())) {
395
396
397 SequenceAccessorService sas = SpringContext.getBean(SequenceAccessorService.class);
398 Long poSequenceNumber = sas.getNextAvailableSequenceNumber("PO_ID", this.getClass());
399 setPurapDocumentIdentifier(poSequenceNumber.intValue());
400 }
401
402
403 for (Iterator items = this.getItems().iterator(); items.hasNext(); ) {
404 PurchaseOrderItem item = (PurchaseOrderItem) items.next();
405
406
407 item.setItemOutstandingEncumberedQuantity(item.getItemQuantity());
408 if (item.getItemInvoicedTotalQuantity() == null) {
409 item.setItemInvoicedTotalQuantity(KualiDecimal.ZERO);
410 }
411 if (item.getItemInvoicedTotalAmount() == null) {
412 item.setItemInvoicedTotalAmount(KualiDecimal.ZERO);
413 }
414
415
416 item.setItemOutstandingEncumberedAmount(item.getTotalAmount() == null ? KualiDecimal.ZERO : item.getTotalAmount());
417
418 List accounts = item.getSourceAccountingLines();
419 Collections.sort(accounts);
420
421 for (Iterator iterator = accounts.iterator(); iterator.hasNext(); ) {
422 PurchaseOrderAccount account = (PurchaseOrderAccount) iterator.next();
423 if (!account.isEmpty()) {
424 account.setItemAccountOutstandingEncumbranceAmount(account.getAmount());
425 }
426 }
427 }
428
429 this.setSourceAccountingLines(SpringContext.getBean(PurapAccountingService.class).generateSummaryWithNoZeroTotals(this.getItems()));
430 }
431
432
433
434
435 @Override
436 public void prepareForSave(KualiDocumentEvent event) {
437 WorkflowDocument workFlowDocument = getDocumentHeader().getWorkflowDocument();
438 String documentType = workFlowDocument.getDocumentTypeName();
439
440
441 if ((documentType.equals(PurapConstants.PurchaseOrderDocTypes.PURCHASE_ORDER_DOCUMENT)) ||
442 (documentType.equals(PurapConstants.PurchaseOrderDocTypes.PURCHASE_ORDER_SPLIT_DOCUMENT))) {
443 if (workFlowDocument.isCanceled()) {
444
445 setGeneralLedgerPendingEntries(new ArrayList());
446 } else if (workFlowDocument.isFinal()) {
447 } else {
448 super.prepareForSave(event);
449 }
450 }
451 }
452
453
454
455
456 public void setDefaultValuesForAPO() {
457 this.setPurchaseOrderAutomaticIndicator(Boolean.TRUE);
458 if (!RequisitionSources.B2B.equals(this.getRequisitionSourceCode())) {
459 String paramName = PurapParameterConstants.DEFAULT_APO_VENDOR_CHOICE;
460 String paramValue = SpringContext.getBean(ParameterService.class).getParameterValueAsString(PurchaseOrderDocument.class, paramName);
461 this.setPurchaseOrderVendorChoiceCode(paramValue);
462 }
463 }
464
465
466
467
468
469
470 public void populatePurchaseOrderFromRequisition(RequisitionDocument requisitionDocument) {
471 this.getDocumentHeader().setOrganizationDocumentNumber(requisitionDocument.getDocumentHeader().getOrganizationDocumentNumber());
472 this.getDocumentHeader().setDocumentDescription(requisitionDocument.getDocumentHeader().getDocumentDescription());
473 this.getDocumentHeader().setExplanation(requisitionDocument.getDocumentHeader().getExplanation());
474
475 this.setBillingName(requisitionDocument.getBillingName());
476 this.setBillingLine1Address(requisitionDocument.getBillingLine1Address());
477 this.setBillingLine2Address(requisitionDocument.getBillingLine2Address());
478 this.setBillingCityName(requisitionDocument.getBillingCityName());
479 this.setBillingStateCode(requisitionDocument.getBillingStateCode());
480 this.setBillingPostalCode(requisitionDocument.getBillingPostalCode());
481 this.setBillingCountryCode(requisitionDocument.getBillingCountryCode());
482 this.setBillingPhoneNumber(requisitionDocument.getBillingPhoneNumber());
483 this.setBillingEmailAddress(requisitionDocument.getBillingEmailAddress());
484
485 this.setReceivingName(requisitionDocument.getReceivingName());
486 this.setReceivingCityName(requisitionDocument.getReceivingCityName());
487 this.setReceivingLine1Address(requisitionDocument.getReceivingLine1Address());
488 this.setReceivingLine2Address(requisitionDocument.getReceivingLine2Address());
489 this.setReceivingStateCode(requisitionDocument.getReceivingStateCode());
490 this.setReceivingPostalCode(requisitionDocument.getReceivingPostalCode());
491 this.setReceivingCountryCode(requisitionDocument.getReceivingCountryCode());
492 this.setAddressToVendorIndicator(requisitionDocument.getAddressToVendorIndicator());
493
494 this.setDeliveryBuildingCode(requisitionDocument.getDeliveryBuildingCode());
495 this.setDeliveryBuildingRoomNumber(requisitionDocument.getDeliveryBuildingRoomNumber());
496 this.setDeliveryBuildingName(requisitionDocument.getDeliveryBuildingName());
497 this.setDeliveryCampusCode(requisitionDocument.getDeliveryCampusCode());
498 this.setDeliveryCityName(requisitionDocument.getDeliveryCityName());
499 this.setDeliveryCountryCode(requisitionDocument.getDeliveryCountryCode());
500 this.setDeliveryInstructionText(requisitionDocument.getDeliveryInstructionText());
501 this.setDeliveryBuildingLine1Address(requisitionDocument.getDeliveryBuildingLine1Address());
502 this.setDeliveryBuildingLine2Address(requisitionDocument.getDeliveryBuildingLine2Address());
503 this.setDeliveryPostalCode(requisitionDocument.getDeliveryPostalCode());
504 this.setDeliveryRequiredDate(requisitionDocument.getDeliveryRequiredDate());
505 this.setDeliveryRequiredDateReasonCode(requisitionDocument.getDeliveryRequiredDateReasonCode());
506 this.setDeliveryStateCode(requisitionDocument.getDeliveryStateCode());
507 this.setDeliveryToEmailAddress(requisitionDocument.getDeliveryToEmailAddress());
508 this.setDeliveryToName(requisitionDocument.getDeliveryToName());
509 this.setDeliveryToPhoneNumber(requisitionDocument.getDeliveryToPhoneNumber());
510 this.setDeliveryBuildingOtherIndicator(requisitionDocument.isDeliveryBuildingOtherIndicator());
511
512 this.setPurchaseOrderBeginDate(requisitionDocument.getPurchaseOrderBeginDate());
513 this.setPurchaseOrderCostSourceCode(requisitionDocument.getPurchaseOrderCostSourceCode());
514 this.setPostingYear(requisitionDocument.getPostingYear());
515 this.setPurchaseOrderEndDate(requisitionDocument.getPurchaseOrderEndDate());
516 this.setChartOfAccountsCode(requisitionDocument.getChartOfAccountsCode());
517 this.setDocumentFundingSourceCode(requisitionDocument.getDocumentFundingSourceCode());
518 this.setInstitutionContactEmailAddress(requisitionDocument.getInstitutionContactEmailAddress());
519 this.setInstitutionContactName(requisitionDocument.getInstitutionContactName());
520 this.setInstitutionContactPhoneNumber(requisitionDocument.getInstitutionContactPhoneNumber());
521 this.setNonInstitutionFundAccountNumber(requisitionDocument.getNonInstitutionFundAccountNumber());
522 this.setNonInstitutionFundChartOfAccountsCode(requisitionDocument.getNonInstitutionFundChartOfAccountsCode());
523 this.setNonInstitutionFundOrgChartOfAccountsCode(requisitionDocument.getNonInstitutionFundOrgChartOfAccountsCode());
524 this.setNonInstitutionFundOrganizationCode(requisitionDocument.getNonInstitutionFundOrganizationCode());
525 this.setOrganizationCode(requisitionDocument.getOrganizationCode());
526 this.setRecurringPaymentTypeCode(requisitionDocument.getRecurringPaymentTypeCode());
527 this.setRequestorPersonEmailAddress(requisitionDocument.getRequestorPersonEmailAddress());
528 this.setRequestorPersonName(requisitionDocument.getRequestorPersonName());
529 this.setRequestorPersonPhoneNumber(requisitionDocument.getRequestorPersonPhoneNumber());
530 this.setRequisitionIdentifier(requisitionDocument.getPurapDocumentIdentifier());
531 this.setPurchaseOrderTotalLimit(requisitionDocument.getPurchaseOrderTotalLimit());
532 this.setPurchaseOrderTransmissionMethodCode(requisitionDocument.getPurchaseOrderTransmissionMethodCode());
533 this.setUseTaxIndicator(requisitionDocument.isUseTaxIndicator());
534 this.setPurchaseOrderTypeId(requisitionDocument.getPurchaseOrderTypeId());
535 this.setVendorCityName(requisitionDocument.getVendorCityName());
536 this.setVendorContractGeneratedIdentifier(requisitionDocument.getVendorContractGeneratedIdentifier());
537 this.setVendorCountryCode(requisitionDocument.getVendorCountryCode());
538 this.setVendorCustomerNumber(requisitionDocument.getVendorCustomerNumber());
539 this.setVendorAttentionName(requisitionDocument.getVendorAttentionName());
540 this.setVendorDetailAssignedIdentifier(requisitionDocument.getVendorDetailAssignedIdentifier());
541 this.setVendorFaxNumber(requisitionDocument.getVendorFaxNumber());
542 this.setVendorHeaderGeneratedIdentifier(requisitionDocument.getVendorHeaderGeneratedIdentifier());
543 this.setVendorLine1Address(requisitionDocument.getVendorLine1Address());
544 this.setVendorLine2Address(requisitionDocument.getVendorLine2Address());
545 this.setVendorAddressInternationalProvinceName(requisitionDocument.getVendorAddressInternationalProvinceName());
546 this.setVendorName(requisitionDocument.getVendorName());
547 this.setVendorNoteText(requisitionDocument.getVendorNoteText());
548 this.setVendorPhoneNumber(requisitionDocument.getVendorPhoneNumber());
549 this.setVendorPostalCode(requisitionDocument.getVendorPostalCode());
550 this.setVendorStateCode(requisitionDocument.getVendorStateCode());
551 this.setVendorRestrictedIndicator(requisitionDocument.getVendorRestrictedIndicator());
552 this.setJustification(requisitionDocument.getJustification());
553
554 this.setExternalOrganizationB2bSupplierIdentifier(requisitionDocument.getExternalOrganizationB2bSupplierIdentifier());
555 this.setRequisitionSourceCode(requisitionDocument.getRequisitionSourceCode());
556 this.setAccountsPayablePurchasingDocumentLinkIdentifier(requisitionDocument.getAccountsPayablePurchasingDocumentLinkIdentifier());
557 this.setReceivingDocumentRequiredIndicator(requisitionDocument.isReceivingDocumentRequiredIndicator());
558 this.setPaymentRequestPositiveApprovalIndicator(requisitionDocument.isPaymentRequestPositiveApprovalIndicator());
559
560
561
562 setApplicationDocumentStatus(PurapConstants.PurchaseOrderStatuses.APPDOC_IN_PROCESS);
563 this.setAccountDistributionMethod(requisitionDocument.getAccountDistributionMethod());
564
565 List<PurchaseOrderItem> items = new ArrayList();
566 for (PurApItem reqItem : ((PurchasingAccountsPayableDocument) requisitionDocument).getItems()) {
567 RequisitionCapitalAssetItem reqCamsItem = (RequisitionCapitalAssetItem) requisitionDocument.getPurchasingCapitalAssetItemByItemIdentifier(reqItem.getItemIdentifier().intValue());
568 items.add(new PurchaseOrderItem((RequisitionItem) reqItem, this, reqCamsItem));
569 }
570 this.setItems(items);
571
572
573 this.setCapitalAssetSystemTypeCode(requisitionDocument.getCapitalAssetSystemTypeCode());
574 this.setCapitalAssetSystemStateCode(requisitionDocument.getCapitalAssetSystemStateCode());
575 for (CapitalAssetSystem capitalAssetSystem : requisitionDocument.getPurchasingCapitalAssetSystems()) {
576 this.getPurchasingCapitalAssetSystems().add(new PurchaseOrderCapitalAssetSystem(capitalAssetSystem));
577 }
578
579 this.fixItemReferences();
580 }
581
582
583
584
585
586
587
588 public PurchaseOrderVendorStipulation getPurchaseOrderVendorStipulation(int index) {
589 while (getPurchaseOrderVendorStipulations().size() <= index) {
590 getPurchaseOrderVendorStipulations().add(new PurchaseOrderVendorStipulation());
591 }
592 return purchaseOrderVendorStipulations.get(index);
593 }
594
595 @Override
596 public List<String> getWorkflowEngineDocumentIdsToLock() {
597 List<String> docIdStrings = new ArrayList<String>();
598 docIdStrings.add(getDocumentNumber());
599 String currentDocumentTypeName = this.getDocumentHeader().getWorkflowDocument().getDocumentTypeName();
600
601 List<PurchaseOrderView> relatedPoViews = getRelatedViews().getRelatedPurchaseOrderViews();
602 for (PurchaseOrderView poView : relatedPoViews) {
603
604 if (!(PurapConstants.PurchaseOrderStatuses.APPDOC_IN_PROCESS.equals(this.getApplicationDocumentStatus()) && PurapConstants.PurchaseOrderDocTypes.PURCHASE_ORDER_SPLIT_DOCUMENT.equals(currentDocumentTypeName))) {
605 docIdStrings.add(poView.getDocumentNumber());
606 }
607 }
608
609 return docIdStrings;
610 }
611
612
613
614
615 @Override
616 public void doRouteStatusChange(DocumentRouteStatusChange statusChangeEvent) {
617 LOG.debug("doRouteStatusChange() started");
618 super.doRouteStatusChange(statusChangeEvent);
619 String currentDocumentTypeName = this.getDocumentHeader().getWorkflowDocument().getDocumentTypeName();
620
621 if (this.getFinancialSystemDocumentHeader().getWorkflowDocument().isFinal() && !(currentDocumentTypeName.equals(OLEConstants.FinancialDocumentTypeCodes.PURCHASE_ORDER_RETRANSMIT))) {
622
623 OleDocstoreHelperService oleDocstoreHelperService = SpringContext
624 .getBean(OleDocstoreHelperService.class);
625 List<OlePurchaseOrderItem> items = this.getItems();
626 StringBuffer cancellationNote = new StringBuffer();
627 List<Note> noteList = new ArrayList<>();
628 for (OlePurchaseOrderItem item : items) {
629 if (item.getItemType().isQuantityBasedGeneralLedgerIndicator()) {
630 if (currentDocumentTypeName.equalsIgnoreCase(PurchaseOrderDocTypes.PURCHASE_ORDER_VOID_DOCUMENT)) {
631 for (Note noteObj :this.getNotes()) {
632 if (noteObj.getNoteText().contains(PODocumentsStrings.VOID_NOTE_PREFIX)) {
633 noteList.add(noteObj);
634 }
635 }
636
637 if (noteList.size()>1) {
638 for(int noteObj=0; noteObj<noteList.size(); noteObj++) {
639 String[] attachedNote = noteList.get(noteObj).getNoteText().split(PODocumentsStrings.VOID_NOTE_PREFIX);
640 cancellationNote = cancellationNote.append(attachedNote[1].trim());
641 if (noteObj==0) {
642 cancellationNote = cancellationNote.append(OLEConstants.COMMA);
643 }
644 }
645 } else {
646 String[] attachedNote = noteList.get(0).getNoteText().split(PODocumentsStrings.VOID_NOTE_PREFIX);
647 cancellationNote = cancellationNote.append(attachedNote[1].trim());
648 }
649 }
650 if(currentDocumentTypeName.equals(OLEConstants.FinancialDocumentTypeCodes.PURCHASE_ORDER)) {
651 oleDocstoreHelperService.createOrUpdateDocStoreBasedOnLocation(this, item, currentDocumentTypeName, cancellationNote.toString());
652 }
653 cancellationNote.delete(0,cancellationNote.length());
654 noteList.clear();
655 }
656 }
657 }
658 if (PurapConstants.PurchaseOrderDocTypes.PURCHASE_ORDER_DOCUMENT.equals(currentDocumentTypeName) || PurapConstants.PurchaseOrderDocTypes.PURCHASE_ORDER_SPLIT_DOCUMENT.equals(currentDocumentTypeName)) {
659 try {
660
661 if (this.getFinancialSystemDocumentHeader().getWorkflowDocument().isProcessed()) {
662 setPurchaseOrderLastTransmitTimestamp(SpringContext.getBean(DateTimeService.class).getCurrentTimestamp());
663 SpringContext.getBean(PurchaseOrderService.class).completePurchaseOrder(this);
664 if (this.getFinancialSystemDocumentHeader().getWorkflowDocument().isProcessed() && !this.getFinancialSystemDocumentHeader().getWorkflowDocument().isFinal()) {
665 SpringContext.getBean(WorkflowDocumentService.class).saveRoutingData(this.getFinancialSystemDocumentHeader().getWorkflowDocument());
666 }
667 }
668
669 else if (this.getFinancialSystemDocumentHeader().getWorkflowDocument().isDisapproved()) {
670 String nodeName = SpringContext.getBean(WorkflowDocumentService.class).getCurrentRouteLevelName(this.getFinancialSystemDocumentHeader().getWorkflowDocument());
671 String disapprovalStatus = PurapConstants.PurchaseOrderStatuses.getPurchaseOrderAppDocDisapproveStatuses().get(nodeName);
672
673 if (ObjectUtils.isNotNull(disapprovalStatus)) {
674
675 updateAndSaveAppDocStatus(disapprovalStatus);
676
677 RequisitionDocument req = getPurApSourceDocumentIfPossible();
678 String principalId = req.getFinancialSystemDocumentHeader().getWorkflowDocument()
679 .getRoutedByPrincipalId();
680 appSpecificRouteDocumentToUser(this.getFinancialSystemDocumentHeader().getWorkflowDocument(),
681 principalId,
682 "Notification of Order Disapproval for Requisition " + req.getPurapDocumentIdentifier()
683 + "(document id " + req.getDocumentNumber() + ")", "Requisition Routed By User");
684 return;
685 }
686 logAndThrowRuntimeException("No status found to set for document being disapproved in node '" + nodeName + "'");
687 }
688
689 else if (this.getFinancialSystemDocumentHeader().getWorkflowDocument().isCanceled()) {
690 updateAndSaveAppDocStatus(PurchaseOrderStatuses.APPDOC_CANCELLED);
691 }
692 } catch (WorkflowException e) {
693 logAndThrowRuntimeException("Error saving routing data while saving document with id " + getDocumentNumber(), e);
694 }
695 }
696 }
697
698
699
700
701
702
703
704
705 protected String getCurrentRouteNodeName(WorkflowDocument wd) throws WorkflowException {
706 ArrayList<String> nodeNames = new ArrayList(wd.getCurrentNodeNames());
707 if ((nodeNames == null) || (nodeNames.size() == 0)) {
708 return null;
709 } else {
710 return nodeNames.get(0);
711 }
712 }
713
714
715
716
717
718
719
720
721
722
723 public void appSpecificRouteDocumentToUser(WorkflowDocument workflowDocument, String routePrincipalName,
724 String annotation, String responsibility) throws WorkflowException {
725 if (ObjectUtils.isNotNull(workflowDocument)) {
726 String annotationNote = (ObjectUtils.isNull(annotation)) ? "" : annotation;
727 String responsibilityNote = (ObjectUtils.isNull(responsibility)) ? "" : responsibility;
728 String currentNodeName = getCurrentRouteNodeName(workflowDocument);
729
730 workflowDocument.adHocToPrincipal(ActionRequestType.FYI, currentNodeName, annotationNote,
731 routePrincipalName, responsibilityNote, true);
732 }
733 }
734
735
736
737
738 @Override
739 public void doRouteLevelChange(DocumentRouteLevelChange levelChangeEvent) {
740
741 super.doRouteLevelChange(levelChangeEvent);
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769 }
770
771
772
773
774 @Override
775 public void doActionTaken(ActionTakenEvent event) {
776 super.doActionTaken(event);
777
778 }
779
780
781
782
783
784
785 public List getItemsActiveOnly() {
786 List returnList = new ArrayList();
787 for (Iterator iter = getItems().iterator(); iter.hasNext(); ) {
788 PurchaseOrderItem item = (PurchaseOrderItem) iter.next();
789 if (item.isItemActiveIndicator()) {
790 returnList.add(item);
791 }
792 }
793 return returnList;
794 }
795
796
797
798
799
800
801 public List getItemsActiveOnlySetupAlternateAmount() {
802 List returnList = new ArrayList();
803 for (Iterator iter = getItems().iterator(); iter.hasNext(); ) {
804 PurchaseOrderItem item = (PurchaseOrderItem) iter.next();
805 if (item.isItemActiveIndicator()) {
806 for (Object element : item.getSourceAccountingLines()) {
807 PurchaseOrderAccount account = (PurchaseOrderAccount) element;
808 account.setAlternateAmountForGLEntryCreation(account.getItemAccountOutstandingEncumbranceAmount());
809 }
810 returnList.add(item);
811 }
812 }
813 return returnList;
814 }
815
816 public Integer getAlternateVendorDetailAssignedIdentifier() {
817 return alternateVendorDetailAssignedIdentifier;
818 }
819
820 public void setAlternateVendorDetailAssignedIdentifier(Integer alternateVendorDetailAssignedIdentifier) {
821 this.alternateVendorDetailAssignedIdentifier = alternateVendorDetailAssignedIdentifier;
822 }
823
824 public Integer getAlternateVendorHeaderGeneratedIdentifier() {
825 return alternateVendorHeaderGeneratedIdentifier;
826 }
827
828 public void setAlternateVendorHeaderGeneratedIdentifier(Integer alternateVendorHeaderGeneratedIdentifier) {
829 this.alternateVendorHeaderGeneratedIdentifier = alternateVendorHeaderGeneratedIdentifier;
830 }
831
832 public String getAlternateVendorName() {
833 return alternateVendorName;
834 }
835
836 public void setAlternateVendorName(String alternateVendorName) {
837 this.alternateVendorName = alternateVendorName;
838 }
839
840 public KualiDecimal getFinalPaymentAmount() {
841 return finalPaymentAmount;
842 }
843
844 public void setFinalPaymentAmount(KualiDecimal finalPaymentAmount) {
845 this.finalPaymentAmount = finalPaymentAmount;
846 }
847
848 public Date getFinalPaymentDate() {
849 return finalPaymentDate;
850 }
851
852 public void setFinalPaymentDate(Date finalPaymentDate) {
853 this.finalPaymentDate = finalPaymentDate;
854 }
855
856 public KualiDecimal getInitialPaymentAmount() {
857 return initialPaymentAmount;
858 }
859
860 public void setInitialPaymentAmount(KualiDecimal initialPaymentAmount) {
861 this.initialPaymentAmount = initialPaymentAmount;
862 }
863
864 public Date getInitialPaymentDate() {
865 return initialPaymentDate;
866 }
867
868 public void setInitialPaymentDate(Date initialPaymentDate) {
869 this.initialPaymentDate = initialPaymentDate;
870 }
871
872 public String getPurchaseOrderCommodityDescription() {
873 return purchaseOrderCommodityDescription;
874 }
875
876 public void setPurchaseOrderCommodityDescription(String purchaseOrderCommodityDescription) {
877 this.purchaseOrderCommodityDescription = purchaseOrderCommodityDescription;
878 }
879
880 public boolean isPurchaseOrderConfirmedIndicator() {
881 return purchaseOrderConfirmedIndicator;
882 }
883
884 public void setPurchaseOrderConfirmedIndicator(boolean purchaseOrderConfirmedIndicator) {
885 this.purchaseOrderConfirmedIndicator = purchaseOrderConfirmedIndicator;
886 }
887
888 public Timestamp getPurchaseOrderCreateTimestamp() {
889 return purchaseOrderCreateTimestamp;
890 }
891
892 public void setPurchaseOrderCreateTimestamp(Timestamp purchaseOrderCreateTimestamp) {
893 this.purchaseOrderCreateTimestamp = purchaseOrderCreateTimestamp;
894 }
895
896 public Timestamp getPurchaseOrderInitialOpenTimestamp() {
897 return purchaseOrderInitialOpenTimestamp;
898 }
899
900 public void setPurchaseOrderInitialOpenTimestamp(Timestamp purchaseOrderInitialOpenDate) {
901 this.purchaseOrderInitialOpenTimestamp = purchaseOrderInitialOpenDate;
902 }
903
904 public Timestamp getPurchaseOrderLastTransmitTimestamp() {
905 return purchaseOrderLastTransmitTimestamp;
906 }
907
908 public void setPurchaseOrderLastTransmitTimestamp(Timestamp PurchaseOrderLastTransmitTimestamp) {
909 this.purchaseOrderLastTransmitTimestamp = PurchaseOrderLastTransmitTimestamp;
910 }
911
912 public Integer getPurchaseOrderPreviousIdentifier() {
913 return purchaseOrderPreviousIdentifier;
914 }
915
916 public void setPurchaseOrderPreviousIdentifier(Integer purchaseOrderPreviousIdentifier) {
917 this.purchaseOrderPreviousIdentifier = purchaseOrderPreviousIdentifier;
918 }
919
920 public Date getPurchaseOrderQuoteDueDate() {
921 return purchaseOrderQuoteDueDate;
922 }
923
924 public void setPurchaseOrderQuoteDueDate(Date purchaseOrderQuoteDueDate) {
925 this.purchaseOrderQuoteDueDate = purchaseOrderQuoteDueDate;
926 }
927
928 public String getPurchaseOrderQuoteTypeDescription() {
929 String descript = purchaseOrderQuoteTypeCode;
930 if (PurapConstants.QuoteTypes.COMPETITIVE.equals(purchaseOrderQuoteTypeCode)) {
931 descript = QuoteTypeDescriptions.COMPETITIVE;
932 } else if (PurapConstants.QuoteTypes.PRICE_CONFIRMATION.equals(purchaseOrderQuoteTypeCode)) {
933 descript = QuoteTypeDescriptions.PRICE_CONFIRMATION;
934 }
935 return descript;
936 }
937
938 public String getPurchaseOrderQuoteTypeCode() {
939 return purchaseOrderQuoteTypeCode;
940 }
941
942 public void setPurchaseOrderQuoteTypeCode(String purchaseOrderQuoteTypeCode) {
943 this.purchaseOrderQuoteTypeCode = purchaseOrderQuoteTypeCode;
944 }
945
946 public String getPurchaseOrderQuoteVendorNoteText() {
947 return purchaseOrderQuoteVendorNoteText;
948 }
949
950 public void setPurchaseOrderQuoteVendorNoteText(String purchaseOrderQuoteVendorNoteText) {
951 this.purchaseOrderQuoteVendorNoteText = purchaseOrderQuoteVendorNoteText;
952 }
953
954 public String getPurchaseOrderVendorChoiceCode() {
955 return purchaseOrderVendorChoiceCode;
956 }
957
958 public void setPurchaseOrderVendorChoiceCode(String purchaseOrderVendorChoiceCode) {
959 this.purchaseOrderVendorChoiceCode = purchaseOrderVendorChoiceCode;
960 }
961
962 public KualiDecimal getRecurringPaymentAmount() {
963 return recurringPaymentAmount;
964 }
965
966 public void setRecurringPaymentAmount(KualiDecimal recurringPaymentAmount) {
967 this.recurringPaymentAmount = recurringPaymentAmount;
968 }
969
970 public Date getRecurringPaymentDate() {
971 return recurringPaymentDate;
972 }
973
974 public void setRecurringPaymentDate(Date recurringPaymentDate) {
975 this.recurringPaymentDate = recurringPaymentDate;
976 }
977
978 public String getRecurringPaymentFrequencyCode() {
979 return recurringPaymentFrequencyCode;
980 }
981
982 public void setRecurringPaymentFrequencyCode(String recurringPaymentFrequencyCode) {
983 this.recurringPaymentFrequencyCode = recurringPaymentFrequencyCode;
984 }
985
986 public Integer getRequisitionIdentifier() {
987 return requisitionIdentifier;
988 }
989
990 public void setRequisitionIdentifier(Integer requisitionIdentifier) {
991 this.requisitionIdentifier = requisitionIdentifier;
992 }
993
994 public PurchaseOrderVendorChoice getPurchaseOrderVendorChoice() {
995 return purchaseOrderVendorChoice;
996 }
997
998 public void setPurchaseOrderVendorChoice(PurchaseOrderVendorChoice purchaseOrderVendorChoice) {
999 this.purchaseOrderVendorChoice = purchaseOrderVendorChoice;
1000 }
1001
1002 public RecurringPaymentFrequency getRecurringPaymentFrequency() {
1003 return recurringPaymentFrequency;
1004 }
1005
1006 public void setRecurringPaymentFrequency(RecurringPaymentFrequency recurringPaymentFrequency) {
1007 this.recurringPaymentFrequency = recurringPaymentFrequency;
1008 }
1009
1010 public PaymentTermType getVendorPaymentTerms() {
1011 return vendorPaymentTerms;
1012 }
1013
1014 public void setVendorPaymentTerms(PaymentTermType vendorPaymentTerms) {
1015 this.vendorPaymentTerms = vendorPaymentTerms;
1016 }
1017
1018 public ShippingPaymentTerms getVendorShippingPaymentTerms() {
1019 return vendorShippingPaymentTerms;
1020 }
1021
1022 public void setVendorShippingPaymentTerms(ShippingPaymentTerms vendorShippingPaymentTerms) {
1023 this.vendorShippingPaymentTerms = vendorShippingPaymentTerms;
1024 }
1025
1026 public ShippingTitle getVendorShippingTitle() {
1027
1028 if (ObjectUtils.isNull(vendorShippingTitle)) {
1029 this.refreshReferenceObject("vendorShippingTitle");
1030 }
1031
1032 return vendorShippingTitle;
1033 }
1034
1035 public void setVendorShippingTitle(ShippingTitle vendorShippingTitle) {
1036 this.vendorShippingTitle = vendorShippingTitle;
1037 }
1038
1039 public List getPurchaseOrderVendorStipulations() {
1040 return purchaseOrderVendorStipulations;
1041 }
1042
1043 public String getStatusChange() {
1044 return statusChange;
1045 }
1046
1047 public void setPurchaseOrderVendorStipulations(List purchaseOrderVendorStipulations) {
1048 this.purchaseOrderVendorStipulations = purchaseOrderVendorStipulations;
1049 }
1050
1051 public List<PurchaseOrderVendorQuote> getPurchaseOrderVendorQuotes() {
1052 return purchaseOrderVendorQuotes;
1053 }
1054
1055 public void setPurchaseOrderVendorQuotes(List<PurchaseOrderVendorQuote> purchaseOrderVendorQuotes) {
1056 this.purchaseOrderVendorQuotes = purchaseOrderVendorQuotes;
1057 }
1058
1059 public PurchaseOrderVendorQuote getPurchaseOrderVendorQuote(int index) {
1060 while (getPurchaseOrderVendorQuotes().size() <= index) {
1061 getPurchaseOrderVendorQuotes().add(new PurchaseOrderVendorQuote());
1062 }
1063 return purchaseOrderVendorQuotes.get(index);
1064 }
1065
1066 public void setStatusChange(String statusChange) {
1067 this.statusChange = statusChange;
1068 }
1069
1070 public String getPurchaseOrderRetransmissionMethodCode() {
1071 return purchaseOrderRetransmissionMethodCode;
1072 }
1073
1074 public void setPurchaseOrderRetransmissionMethodCode(String purchaseOrderRetransmissionMethodCode) {
1075 this.purchaseOrderRetransmissionMethodCode = purchaseOrderRetransmissionMethodCode;
1076 }
1077
1078 public String getRetransmitHeader() {
1079 return retransmitHeader;
1080 }
1081
1082 public void setRetransmitHeader(String retransmitHeader) {
1083 this.retransmitHeader = retransmitHeader;
1084 }
1085
1086 public boolean isPendingActionIndicator() {
1087 return pendingActionIndicator;
1088 }
1089
1090 public void setPendingActionIndicator(boolean pendingActionIndicator) {
1091 this.pendingActionIndicator = pendingActionIndicator;
1092 }
1093
1094 public boolean isPurchaseOrderCurrentIndicator() {
1095 return purchaseOrderCurrentIndicator;
1096 }
1097
1098 public void setPurchaseOrderCurrentIndicator(boolean purchaseOrderCurrentIndicator) {
1099 this.purchaseOrderCurrentIndicator = purchaseOrderCurrentIndicator;
1100 }
1101
1102 public Timestamp getPurchaseOrderFirstTransmissionTimestamp() {
1103 return purchaseOrderFirstTransmissionTimestamp;
1104 }
1105
1106 public void setPurchaseOrderFirstTransmissionTimestamp(Timestamp purchaseOrderFirstTransmissionTimestamp) {
1107 this.purchaseOrderFirstTransmissionTimestamp = purchaseOrderFirstTransmissionTimestamp;
1108 }
1109
1110
1111
1112
1113
1114
1115 public Date getPurchaseOrderQuoteAwardedDate() {
1116 return purchaseOrderQuoteAwardedDate;
1117 }
1118
1119
1120
1121
1122
1123
1124 public void setPurchaseOrderQuoteAwardedDate(Date purchaseOrderQuoteAwardedDate) {
1125 this.purchaseOrderQuoteAwardedDate = purchaseOrderQuoteAwardedDate;
1126 }
1127
1128
1129
1130
1131
1132
1133 public Date getPurchaseOrderQuoteInitializationDate() {
1134 return purchaseOrderQuoteInitializationDate;
1135 }
1136
1137
1138
1139
1140
1141
1142
1143 public void setPurchaseOrderQuoteInitializationDate(Date purchaseOrderQuoteInitializationDate) {
1144 this.purchaseOrderQuoteInitializationDate = purchaseOrderQuoteInitializationDate;
1145 }
1146
1147
1148
1149
1150
1151
1152 public String getAlternateVendorNumber() {
1153 String hdrGenId = "";
1154 String detAssgndId = "";
1155 String vendorNumber = "";
1156 if (this.alternateVendorHeaderGeneratedIdentifier != null) {
1157 hdrGenId = this.alternateVendorHeaderGeneratedIdentifier.toString();
1158 }
1159 if (this.alternateVendorDetailAssignedIdentifier != null) {
1160 detAssgndId = this.alternateVendorDetailAssignedIdentifier.toString();
1161 }
1162 if (!StringUtils.isEmpty(hdrGenId) && !StringUtils.isEmpty(detAssgndId)) {
1163 vendorNumber = hdrGenId + VendorConstants.DASH + detAssgndId;
1164 }
1165 return vendorNumber;
1166 }
1167
1168
1169
1170
1171
1172
1173 public void setAlternateVendorNumber(String vendorNumber) {
1174 if (!StringUtils.isEmpty(vendorNumber)) {
1175 int dashInd = vendorNumber.indexOf(VendorConstants.DASH);
1176 if (vendorNumber.length() >= dashInd) {
1177 String vndrHdrGenId = vendorNumber.substring(0, dashInd);
1178 String vndrDetailAssgnedId = vendorNumber.substring(dashInd + 1);
1179 if (!StringUtils.isEmpty(vndrHdrGenId) && !StringUtils.isEmpty(vndrDetailAssgnedId)) {
1180 this.alternateVendorHeaderGeneratedIdentifier = new Integer(vndrHdrGenId);
1181 this.alternateVendorDetailAssignedIdentifier = new Integer(vndrDetailAssgnedId);
1182 }
1183 }
1184 } else {
1185 this.alternateVendorNumber = vendorNumber;
1186 }
1187 }
1188
1189
1190
1191
1192
1193
1194 public void templateAlternateVendor(VendorDetail vendorDetail) {
1195 if (vendorDetail == null) {
1196 return;
1197 }
1198 this.setAlternateVendorNumber(vendorDetail.getVendorHeaderGeneratedIdentifier() + VendorConstants.DASH + vendorDetail.getVendorDetailAssignedIdentifier());
1199 this.setAlternateVendorName(vendorDetail.getVendorName());
1200 }
1201
1202
1203
1204
1205 @Override
1206 public Class getItemClass() {
1207 return PurchaseOrderItem.class;
1208 }
1209
1210 @Override
1211 public Class getItemUseTaxClass() {
1212 return PurchaseOrderItemUseTax.class;
1213 }
1214
1215
1216
1217
1218 @Override
1219 public RequisitionDocument getPurApSourceDocumentIfPossible() {
1220 RequisitionDocument sourceDoc = null;
1221 if (ObjectUtils.isNotNull(getRequisitionIdentifier())) {
1222 sourceDoc = SpringContext.getBean(RequisitionService.class).getRequisitionById(getRequisitionIdentifier());
1223 }
1224 return sourceDoc;
1225 }
1226
1227
1228
1229
1230 @Override
1231 public String getPurApSourceDocumentLabelIfPossible() {
1232 return SpringContext.getBean(DataDictionaryService.class).getDocumentLabelByTypeName(OLEConstants.FinancialDocumentTypeCodes.REQUISITION);
1233 }
1234
1235 public Integer getNewQuoteVendorDetailAssignedIdentifier() {
1236 return newQuoteVendorDetailAssignedIdentifier;
1237 }
1238
1239 public void setNewQuoteVendorDetailAssignedIdentifier(Integer newQuoteVendorDetailAssignedIdentifier) {
1240 this.newQuoteVendorDetailAssignedIdentifier = newQuoteVendorDetailAssignedIdentifier;
1241 }
1242
1243 public Integer getNewQuoteVendorHeaderGeneratedIdentifier() {
1244 return newQuoteVendorHeaderGeneratedIdentifier;
1245 }
1246
1247 public void setNewQuoteVendorHeaderGeneratedIdentifier(Integer newQuoteVendorHeaderGeneratedIdentifier) {
1248 this.newQuoteVendorHeaderGeneratedIdentifier = newQuoteVendorHeaderGeneratedIdentifier;
1249 }
1250
1251 public Integer getPurchaseOrderQuoteListIdentifier() {
1252 return purchaseOrderQuoteListIdentifier;
1253 }
1254
1255 public void setPurchaseOrderQuoteListIdentifier(Integer purchaseOrderQuoteListIdentifier) {
1256 this.purchaseOrderQuoteListIdentifier = purchaseOrderQuoteListIdentifier;
1257 }
1258
1259
1260
1261
1262
1263
1264 public boolean isPurchaseOrderAwarded() {
1265 return (getAwardedVendorQuote() != null);
1266 }
1267
1268
1269
1270
1271
1272
1273 public PurchaseOrderVendorQuote getAwardedVendorQuote() {
1274 for (PurchaseOrderVendorQuote vendorQuote : purchaseOrderVendorQuotes) {
1275 if (vendorQuote.getPurchaseOrderQuoteAwardTimestamp() != null) {
1276 return vendorQuote;
1277 }
1278 }
1279 return null;
1280 }
1281
1282
1283
1284
1285 @Override
1286 public KualiDecimal getTotalDollarAmount() {
1287
1288 return getTotalDollarAmount(false, true);
1289 }
1290
1291
1292
1293
1294 @Override
1295 public KualiDecimal getTotalDollarAmountAboveLineItems() {
1296 return getTotalDollarAmount(false, false);
1297 }
1298
1299
1300
1301
1302
1303
1304
1305
1306 public KualiDecimal getTotalDollarAmount(boolean includeInactive, boolean includeBelowTheLine) {
1307 KualiDecimal total = new KualiDecimal(BigDecimal.ZERO);
1308 for (PurApItem item : (List<PurApItem>) getItems()) {
1309
1310 if (item.getPurapDocument() == null) {
1311 item.setPurapDocument(this);
1312 }
1313 ItemType it = item.getItemType();
1314 if ((includeBelowTheLine || it.isLineItemIndicator()) && (includeInactive || PurApItemUtils.checkItemActive(item))) {
1315 KualiDecimal totalAmount = item.getTotalAmount();
1316 KualiDecimal itemTotal = (totalAmount != null) ? totalAmount : KualiDecimal.ZERO;
1317 total = total.add(itemTotal);
1318 }
1319 }
1320 return total;
1321 }
1322
1323
1324
1325
1326 @Override
1327 public KualiDecimal getTotalPreTaxDollarAmount() {
1328
1329 return getTotalPreTaxDollarAmount(false, true);
1330 }
1331
1332
1333
1334
1335 @Override
1336 public KualiDecimal getTotalPreTaxDollarAmountAboveLineItems() {
1337 return getTotalPreTaxDollarAmount(false, false);
1338 }
1339
1340
1341
1342
1343
1344
1345
1346
1347 public KualiDecimal getTotalPreTaxDollarAmount(boolean includeInactive, boolean includeBelowTheLine) {
1348 KualiDecimal total = new KualiDecimal(BigDecimal.ZERO);
1349 for (PurchaseOrderItem item : (List<PurchaseOrderItem>) getItems()) {
1350 ItemType it = item.getItemType();
1351 if ((includeBelowTheLine || it.isLineItemIndicator()) && (includeInactive || item.isItemActiveIndicator())) {
1352 KualiDecimal extendedPrice = item.getExtendedPrice();
1353 KualiDecimal itemTotal = (extendedPrice != null) ? extendedPrice : KualiDecimal.ZERO;
1354 total = total.add(itemTotal);
1355 }
1356 }
1357 return total;
1358 }
1359
1360
1361 @Override
1362 public KualiDecimal getTotalTaxAmount() {
1363
1364 return getTotalTaxAmount(false, true);
1365 }
1366
1367 @Override
1368 public KualiDecimal getTotalTaxAmountAboveLineItems() {
1369 return getTotalTaxAmount(false, false);
1370 }
1371
1372
1373
1374
1375
1376
1377
1378
1379 public KualiDecimal getTotalTaxAmount(boolean includeInactive, boolean includeBelowTheLine) {
1380 KualiDecimal total = new KualiDecimal(BigDecimal.ZERO);
1381 for (PurchaseOrderItem item : (List<PurchaseOrderItem>) getItems()) {
1382 ItemType it = item.getItemType();
1383 if ((includeBelowTheLine || it.isLineItemIndicator()) && (includeInactive || item.isItemActiveIndicator())) {
1384 KualiDecimal taxAmount = item.getItemTaxAmount();
1385 KualiDecimal itemTotal = (taxAmount != null) ? taxAmount : KualiDecimal.ZERO;
1386 total = total.add(itemTotal);
1387 }
1388 }
1389 return total;
1390 }
1391
1392
1393
1394
1395
1396
1397 public boolean getContainsUnpaidPaymentRequestsOrCreditMemos() {
1398 if (getRelatedViews().getRelatedPaymentRequestViews() != null) {
1399 for (PaymentRequestView element : getRelatedViews().getRelatedPaymentRequestViews()) {
1400
1401
1402 if (!PurapConstants.PaymentRequestStatuses.CANCELLED_STATUSES.contains(element.getApplicationDocumentStatus())) {
1403 if (element.getPaymentPaidTimestamp() == null) {
1404 return true;
1405 }
1406 }
1407 }
1408 }
1409 if (getRelatedViews().getRelatedCreditMemoViews() != null) {
1410 for (CreditMemoView element : getRelatedViews().getRelatedCreditMemoViews()) {
1411
1412
1413 if (!CreditMemoStatuses.CANCELLED_STATUSES.contains(element.getApplicationDocumentStatus())) {
1414 if (element.getCreditMemoPaidTimestamp() == null) {
1415 return true;
1416 }
1417 }
1418 }
1419 }
1420 if (getRelatedViews().getRelatedInvoiceViews() != null) {
1421 for (InvoiceView element : getRelatedViews().getRelatedInvoiceViews()) {
1422
1423
1424 if (!PurapConstants.InvoiceStatuses.CANCELLED_STATUSES.contains(element.getApplicationDocumentStatus())) {
1425 if (element.getPaymentPaidTimestamp() == null) {
1426 return true;
1427 }
1428 }
1429 }
1430 }
1431
1432 return false;
1433 }
1434
1435 public boolean getAdditionalChargesExist() {
1436 List<PurchaseOrderItem> items = this.getItems();
1437 for (PurchaseOrderItem item : items) {
1438 if ((item != null) &&
1439 (item.getItemType() != null) &&
1440 (item.getItemType().isAdditionalChargeIndicator()) &&
1441 (item.getExtendedPrice() != null) &&
1442 (!KualiDecimal.ZERO.equals(item.getExtendedPrice()))) {
1443 return true;
1444 }
1445 }
1446 return false;
1447 }
1448
1449
1450
1451
1452
1453
1454 @Deprecated
1455 public String getContractManagerName() {
1456 return "";
1457 }
1458
1459
1460
1461
1462
1463
1464 @Deprecated
1465 public void setContractManagerName(String contractManagerName) {
1466 }
1467
1468 public KualiDecimal getInternalPurchasingLimit() {
1469
1470
1471 if (internalPurchasingLimit == null) {
1472 setInternalPurchasingLimit(SpringContext.getBean(PurchaseOrderService.class).getInternalPurchasingDollarLimit(this));
1473 }
1474 return internalPurchasingLimit;
1475 }
1476
1477 public void setInternalPurchasingLimit(KualiDecimal internalPurchasingLimit) {
1478 this.internalPurchasingLimit = internalPurchasingLimit;
1479 }
1480
1481 public boolean isPendingSplit() {
1482 return pendingSplit;
1483 }
1484
1485 public void setPendingSplit(boolean pendingSplit) {
1486 this.pendingSplit = pendingSplit;
1487 }
1488
1489 public boolean isCopyingNotesWhenSplitting() {
1490 return copyingNotesWhenSplitting;
1491 }
1492
1493 public void setCopyingNotesWhenSplitting(boolean copyingNotesWhenSplitting) {
1494 this.copyingNotesWhenSplitting = copyingNotesWhenSplitting;
1495 }
1496
1497
1498
1499
1500
1501 @Override
1502 public void customizeExplicitGeneralLedgerPendingEntry(GeneralLedgerPendingEntrySourceDetail postable, GeneralLedgerPendingEntry explicitEntry) {
1503 super.customizeExplicitGeneralLedgerPendingEntry(postable, explicitEntry);
1504
1505 SpringContext.getBean(PurapGeneralLedgerService.class).customizeGeneralLedgerPendingEntry(this, (AccountingLine) postable, explicitEntry, getPurapDocumentIdentifier(), GL_DEBIT_CODE, PurapDocTypeCodes.PO_DOCUMENT, true);
1506
1507 KualiDecimal accountTotalGLEntryAmount = this.getAccountTotalGLEntryAmount((AccountingLine) postable);
1508 explicitEntry.setTransactionLedgerEntryAmount(accountTotalGLEntryAmount);
1509 String debitCreditCode = GL_DEBIT_CODE;
1510
1511
1512 if (accountTotalGLEntryAmount.doubleValue() < 0) {
1513 if (GL_CREDIT_CODE.equals(debitCreditCode)) {
1514 if (GL_CREDIT_CODE.equals(debitCreditCode)) {
1515 explicitEntry.setTransactionDebitCreditCode(GL_DEBIT_CODE);
1516 }
1517 } else {
1518 explicitEntry.setTransactionDebitCreditCode(GL_CREDIT_CODE);
1519 }
1520 } else {
1521 explicitEntry.setTransactionDebitCreditCode(debitCreditCode);
1522 }
1523
1524
1525 explicitEntry.setFinancialDocumentTypeCode(PurapDocTypeCodes.PO_DOCUMENT);
1526 }
1527
1528 @Override
1529 public Class getPurchasingCapitalAssetItemClass() {
1530 return PurchaseOrderCapitalAssetItem.class;
1531 }
1532
1533 @Override
1534 public Class getPurchasingCapitalAssetSystemClass() {
1535 return PurchaseOrderCapitalAssetSystem.class;
1536 }
1537
1538
1539
1540
1541
1542
1543
1544
1545 public boolean canClosePOForTradeIn() {
1546 for (PurchaseOrderItem item : (List<PurchaseOrderItem>) getItems()) {
1547 if (item.getItemTypeCode().equals(PurapConstants.ItemTypeCodes.ITEM_TYPE_TRADE_IN_CODE) && item.getItemOutstandingEncumberedAmount().isLessThan(new KualiDecimal(0))) {
1548 GlobalVariables.getMessageMap().putError(PurapConstants.ITEM_TAB_ERROR_PROPERTY, PurapKeyConstants.ERROR_ITEM_TRADE_IN_OUTSTANDING_ENCUMBERED_AMOUNT_NEGATIVE, "amend the PO");
1549 return false;
1550 }
1551 }
1552 return true;
1553 }
1554
1555
1556
1557
1558
1559
1560
1561
1562
1563
1564 @Override
1565 public boolean answerSplitNodeQuestion(String nodeName) throws UnsupportedOperationException {
1566 if (nodeName.equals(PurapWorkflowConstants.CONTRACT_MANAGEMENT_REVIEW_REQUIRED)) {
1567 return isContractManagementReviewRequired();
1568 }
1569 if (nodeName.equals(PurapWorkflowConstants.AWARD_REVIEW_REQUIRED)) {
1570 return isAwardReviewRequired();
1571 }
1572 if (nodeName.equals(PurapWorkflowConstants.BUDGET_REVIEW_REQUIRED)) {
1573 return isBudgetReviewRequired();
1574 }
1575 if (nodeName.equals(PurapWorkflowConstants.VENDOR_IS_EMPLOYEE_OR_NON_RESIDENT_ALIEN)) {
1576 return isVendorEmployeeOrNonResidentAlien();
1577 }
1578
1579 if (nodeName.equals(PurapWorkflowConstants.NOTIFY_BUDGET_REVIEW)) {
1580 return isNotificationRequired();
1581 }
1582 return super.answerSplitNodeQuestion(nodeName);
1583 }
1584
1585 protected boolean isContractManagementReviewRequired() {
1586 KualiDecimal internalPurchasingLimit = SpringContext.getBean(PurchaseOrderService.class).getInternalPurchasingDollarLimit(this);
1587 return ((ObjectUtils.isNull(internalPurchasingLimit)) || (internalPurchasingLimit.compareTo(this.getTotalDollarAmount()) < 0));
1588
1589 }
1590
1591 protected boolean isAwardReviewRequired() {
1592 ParameterService parameterService = SpringContext.getBean(ParameterService.class);
1593 boolean objectCodeAllowed = true;
1594
1595 for (PurApItem item : (List<PurApItem>) this.getItems()) {
1596 for (PurApAccountingLine accountingLine : item.getSourceAccountingLines()) {
1597
1598 objectCodeAllowed = isObjectCodeAllowedForAwardRouting(accountingLine, parameterService);
1599
1600
1601 if (objectCodeAllowed) {
1602 return objectCodeAllowed;
1603 }
1604
1605 }
1606 }
1607 return objectCodeAllowed;
1608 }
1609
1610 protected boolean isObjectCodeAllowedForAwardRouting(PurApAccountingLine accountingLine, ParameterService parameterService) {
1611 if (ObjectUtils.isNull(accountingLine.getObjectCode())) {
1612 return false;
1613 }
1614
1615
1616 if (!accountingLine.getObjectCode().isFinancialObjectActiveCode()) {
1617 return false;
1618 }
1619
1620 String chartCode = accountingLine.getChartOfAccountsCode();
1621
1622 boolean objectCodeAllowed = SpringContext.getBean(ParameterEvaluatorService.class).getParameterEvaluator(PurchaseOrderDocument.class, PurapParameterConstants.CG_ROUTE_OBJECT_LEVELS_BY_CHART, PurapParameterConstants.NO_CG_ROUTE_OBJECT_LEVELS_BY_CHART, chartCode, accountingLine.getObjectCode().getFinancialObjectLevelCode()).evaluationSucceeds();
1623
1624 if (!objectCodeAllowed) {
1625
1626
1627 objectCodeAllowed = SpringContext.getBean(ParameterEvaluatorService.class).getParameterEvaluator(PurchaseOrderDocument.class, PurapParameterConstants.CG_ROUTE_OBJECT_CODES_BY_CHART, PurapParameterConstants.NO_CG_ROUTE_OBJECT_CODES_BY_CHART, chartCode, accountingLine.getFinancialObjectCode()).evaluationSucceeds();
1628 }
1629 return objectCodeAllowed;
1630 }
1631
1632 protected boolean isBudgetReviewRequired() {
1633
1634 if (SpringContext.getBean(UniversityDateService.class).getCurrentFiscalYear().compareTo(getPostingYear()) >= 0) {
1635
1636 List<SourceAccountingLine> sourceAccountingLineList = this.getSourceAccountingLines();
1637 boolean sufficientFundCheck = false;
1638 for (SourceAccountingLine accLine : sourceAccountingLineList) {
1639 Map searchMap = new HashMap();
1640 String notificationOption = null;
1641 Map<String, Object> key = new HashMap<String, Object>();
1642 String chartCode = accLine.getChartOfAccountsCode();
1643 String accNo = accLine.getAccountNumber();
1644 String objectCd = accLine.getFinancialObjectCode();
1645 key.put(OLEPropertyConstants.CHART_OF_ACCOUNTS_CODE, chartCode);
1646 key.put(OLEPropertyConstants.ACCOUNT_NUMBER, accNo);
1647 OleSufficientFundCheck account = SpringContext.getBean(BusinessObjectService.class).findByPrimaryKey(
1648 OleSufficientFundCheck.class, key);
1649 if (account != null) {
1650 notificationOption = account.getNotificationOption();
1651 }
1652 if (notificationOption != null
1653 && (notificationOption.equals(OLEPropertyConstants.BUD_REVIEW) )) {
1654
1655
1656
1657
1658
1659 List<GeneralLedgerPendingEntry> pendingEntries = getPendingLedgerEntriesForSufficientFundsChecking();
1660
1661
1662 for (GeneralLedgerPendingEntry glpe : pendingEntries) {
1663 glpe.getChartOfAccountsCode();
1664 }
1665 SpringContext.getBean(GeneralLedgerPendingEntryService.class).delete(getDocumentNumber());
1666 List<SufficientFundsItem> fundsItems = SpringContext.getBean(SufficientFundsService.class).checkSufficientFunds(pendingEntries);
1667 SpringContext.getBean(GeneralLedgerPendingEntryService.class).generateGeneralLedgerPendingEntries(this);
1668 SpringContext.getBean(BusinessObjectService.class).save(getGeneralLedgerPendingEntries());
1669 if (fundsItems.size() > 0) {
1670 return true;
1671 }
1672 }
1673
1674
1675
1676
1677
1678
1679
1680 }
1681 }
1682
1683 return false;
1684 }
1685
1686 private boolean isNotificationRequired() {
1687 OleRequisitionDocumentService oleRequisitionDocumentService = (OleRequisitionDocumentService) SpringContext
1688 .getBean("oleRequisitionDocumentService");
1689 List<SourceAccountingLine> sourceAccountingLineList = this.getSourceAccountingLines();
1690 boolean sufficientFundCheck = false;
1691 for (SourceAccountingLine accLine : sourceAccountingLineList) {
1692 Map searchMap = new HashMap();
1693 String notificationOption = null;
1694 Map<String, Object> key = new HashMap<String, Object>();
1695 String chartCode = accLine.getChartOfAccountsCode();
1696 String accNo = accLine.getAccountNumber();
1697 String objectCd = accLine.getFinancialObjectCode();
1698 key.put(OLEPropertyConstants.CHART_OF_ACCOUNTS_CODE, chartCode);
1699 key.put(OLEPropertyConstants.ACCOUNT_NUMBER, accNo);
1700 OleSufficientFundCheck account = SpringContext.getBean(BusinessObjectService.class).findByPrimaryKey(
1701 OleSufficientFundCheck.class, key);
1702 if (account != null) {
1703 notificationOption = account.getNotificationOption();
1704 }
1705 if (notificationOption != null && notificationOption.equals(OLEPropertyConstants.NOTIFICATION)) {
1706 sufficientFundCheck = oleRequisitionDocumentService.hasSufficientFundsOnRequisition(accLine);
1707 if (sufficientFundCheck) {
1708 return sufficientFundCheck;
1709 }
1710 }
1711 }
1712 return sufficientFundCheck;
1713 }
1714
1715
1716 protected boolean isVendorEmployeeOrNonResidentAlien() {
1717 if (ObjectUtils.isNull(this.getVendorHeaderGeneratedIdentifier())) {
1718
1719 return false;
1720 }
1721 String currencytype=new String();
1722 String vendorHeaderGeneratedId = this.getVendorHeaderGeneratedIdentifier().toString();
1723 VendorService vendorService = SpringContext.getBean(VendorService.class);
1724 boolean routeDocumentAsEmployeeVendor = vendorService.isVendorInstitutionEmployee(Integer.valueOf(vendorHeaderGeneratedId));
1725
1726 Map fieldValues = new HashMap();
1727 fieldValues.put(OleSelectConstant.VENDOR_HEADER_GENERATED_ID, vendorHeaderGeneratedId);
1728 ArrayList<VendorDetail> vendorDetail=new ArrayList<>(SpringContext.getBean(BusinessObjectService.class).findMatching(VendorDetail.class, fieldValues)) ;
1729 if(vendorDetail!=null && vendorDetail.size()>0 ) {
1730 if (vendorDetail.get(0).getCurrencyType()!= null){
1731 currencytype=vendorDetail.get(0).getCurrencyType().getCurrencyType();
1732 }
1733 }
1734 if ((!routeDocumentAsEmployeeVendor) && ((currencytype.equalsIgnoreCase(OleSelectConstant.CURRENCY_TYPE_NAME) || (vendorDetail.get(0).getCurrencyType() == null)) )) {
1735
1736 return false;
1737 }
1738
1739 return true;
1740 }
1741
1742 public List<Account> getAccountsForAwardRouting() {
1743 List<Account> accounts = new ArrayList<Account>();
1744
1745 ParameterService parameterService = SpringContext.getBean(ParameterService.class);
1746 for (PurApItem item : (List<PurApItem>) this.getItems()) {
1747 for (PurApAccountingLine accountingLine : item.getSourceAccountingLines()) {
1748 if (isObjectCodeAllowedForAwardRouting(accountingLine, parameterService)) {
1749 if (ObjectUtils.isNull(accountingLine.getAccount())) {
1750 accountingLine.refreshReferenceObject("account");
1751 }
1752 if (accountingLine.getAccount() != null && !accounts.contains(accountingLine.getAccount())) {
1753 accounts.add(accountingLine.getAccount());
1754 }
1755 }
1756 }
1757 }
1758 return accounts;
1759 }
1760
1761 @Override
1762 public DocumentSearchCriteria convertSelections(DocumentSearchCriteria searchCriteria) {
1763
1764
1765
1766
1767
1768
1769
1770
1771
1772
1773
1774
1775
1776
1777
1778
1779
1780
1781
1782
1783
1784
1785 return searchCriteria;
1786 }
1787
1788
1789
1790
1791 public boolean getPurchaseOrderCurrentIndicatorForSearching() {
1792 return purchaseOrderCurrentIndicator;
1793 }
1794
1795 public String getDocumentTitleForResult() throws WorkflowException {
1796 return KewApiServiceLocator.getDocumentTypeService().getDocumentTypeByName(this.getFinancialSystemDocumentHeader().getWorkflowDocument().getDocumentTypeName()).getLabel();
1797 }
1798
1799
1800
1801
1802
1803
1804 public boolean getNeedWarning() {
1805 return getPurchaseOrderInitialOpenTimestamp() == null;
1806 }
1807
1808 public List<SourceAccountingLine> getGlOnlySourceAccountingLines() {
1809 return glOnlySourceAccountingLines;
1810 }
1811
1812 public void setGlOnlySourceAccountingLines(List<SourceAccountingLine> glOnlySourceAccountingLines) {
1813 this.glOnlySourceAccountingLines = glOnlySourceAccountingLines;
1814 }
1815
1816 @Override
1817 public PersistableBusinessObject getNoteTarget() {
1818 PurchaseOrderDao purchaseOrderDao = SpringContext.getBean(PurchaseOrderDao.class);
1819 DocumentDao docDao = GlobalResourceLoader.getService( "documentDao" );
1820
1821 PurchaseOrderDocument oldest = docDao.findByDocumentHeaderId(PurchaseOrderDocument.class,
1822 purchaseOrderDao.getOldestPurchaseOrderDocumentNumber(this.getPurapDocumentIdentifier()));
1823
1824
1825 if (oldest != null) {
1826 return oldest.getDocumentHeader();
1827 }
1828
1829 return this.getDocumentHeader();
1830 }
1831
1832 @Override
1833 public NoteType getNoteType() {
1834 return NoteType.BUSINESS_OBJECT;
1835 }
1836
1837 public boolean isCreatedFromRequisition() {
1838 return this.getRequisitionIdentifier() != null;
1839 }
1840
1841 }