1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package org.kuali.ole.select.document;
17
18 import org.apache.commons.lang.ArrayUtils;
19 import org.apache.commons.lang.StringEscapeUtils;
20 import org.apache.commons.lang.StringUtils;
21 import org.kuali.ole.docstore.common.client.DocstoreClientLocator;
22 import org.kuali.ole.docstore.common.document.Bib;
23 import org.kuali.ole.docstore.common.document.BibMarc;
24 import org.kuali.ole.DocumentUniqueIDPrefix;
25 import org.kuali.ole.docstore.engine.service.storage.rdbms.pojo.BibInfoRecord;
26 import org.kuali.ole.gl.service.SufficientFundsService;
27 import org.kuali.ole.module.purap.PurapConstants;
28 import org.kuali.ole.module.purap.PurapConstants.InvoiceStatuses;
29 import org.kuali.ole.module.purap.PurapParameterConstants;
30 import org.kuali.ole.module.purap.PurapPropertyConstants;
31 import org.kuali.ole.module.purap.PurapWorkflowConstants;
32 import org.kuali.ole.module.purap.businessobject.*;
33 import org.kuali.ole.module.purap.document.InvoiceDocument;
34 import org.kuali.ole.module.purap.document.PurchaseOrderDocument;
35 import org.kuali.ole.module.purap.document.PurchasingAccountsPayableDocument;
36 import org.kuali.ole.module.purap.document.service.AccountsPayableService;
37 import org.kuali.ole.module.purap.document.service.InvoiceService;
38 import org.kuali.ole.module.purap.document.service.PurapService;
39 import org.kuali.ole.module.purap.document.validation.event.AttributedContinuePurapEvent;
40 import org.kuali.ole.module.purap.service.PurapAccountingService;
41 import org.kuali.ole.module.purap.util.ExpiredOrClosedAccountEntry;
42 import org.kuali.ole.module.purap.util.SummaryAccount;
43 import org.kuali.ole.select.OleSelectConstant;
44 import org.kuali.ole.select.bo.OLELinkPurapDonor;
45 import org.kuali.ole.select.businessobject.*;
46 import org.kuali.ole.select.document.service.OleInvoiceService;
47 import org.kuali.ole.select.document.service.impl.OleInvoiceFundCheckServiceImpl;
48 import org.kuali.ole.select.form.OLEInvoiceForm;
49 import org.kuali.ole.select.service.BibInfoService;
50 import org.kuali.ole.select.service.BibInfoWrapperService;
51 import org.kuali.ole.select.service.FileProcessingService;
52 import org.kuali.ole.select.service.impl.BibInfoServiceImpl;
53 import org.kuali.ole.sys.OLEConstants;
54 import org.kuali.ole.sys.OLEPropertyConstants;
55 import org.kuali.ole.sys.businessobject.Bank;
56 import org.kuali.ole.sys.businessobject.GeneralLedgerPendingEntry;
57 import org.kuali.ole.sys.businessobject.SourceAccountingLine;
58 import org.kuali.ole.sys.businessobject.SufficientFundsItem;
59 import org.kuali.ole.sys.context.SpringContext;
60 import org.kuali.ole.sys.service.BankService;
61 import org.kuali.ole.sys.service.GeneralLedgerPendingEntryService;
62 import org.kuali.ole.sys.service.UniversityDateService;
63 import org.kuali.ole.vnd.VendorConstants;
64 import org.kuali.ole.vnd.businessobject.OleCurrencyType;
65 import org.kuali.ole.vnd.businessobject.OleExchangeRate;
66 import org.kuali.ole.vnd.businessobject.VendorAddress;
67 import org.kuali.ole.vnd.document.service.VendorService;
68 import org.kuali.rice.core.api.config.property.ConfigContext;
69 import org.kuali.rice.core.api.config.property.ConfigurationService;
70 import org.kuali.rice.core.api.datetime.DateTimeService;
71 import org.kuali.rice.core.api.util.type.KualiDecimal;
72 import org.kuali.rice.coreservice.framework.parameter.ParameterService;
73 import org.kuali.rice.kew.api.KewApiConstants;
74 import org.kuali.rice.kew.api.KewApiServiceLocator;
75 import org.kuali.rice.kew.api.WorkflowDocument;
76 import org.kuali.rice.kew.api.action.ActionRequestType;
77 import org.kuali.rice.kew.api.action.ActionTaken;
78 import org.kuali.rice.kew.api.action.RoutingReportCriteria;
79 import org.kuali.rice.kew.api.exception.WorkflowException;
80 import org.kuali.rice.kew.framework.postprocessor.DocumentRouteLevelChange;
81 import org.kuali.rice.kew.framework.postprocessor.DocumentRouteStatusChange;
82 import org.kuali.rice.kim.api.identity.Person;
83 import org.kuali.rice.kim.api.identity.PersonService;
84 import org.kuali.rice.kim.api.identity.principal.Principal;
85 import org.kuali.rice.kim.api.services.IdentityManagementService;
86 import org.kuali.rice.kim.api.services.KimApiServiceLocator;
87 import org.kuali.rice.krad.bo.Note;
88 import org.kuali.rice.krad.document.Copyable;
89 import org.kuali.rice.krad.exception.ValidationException;
90 import org.kuali.rice.krad.rules.rule.event.KualiDocumentEvent;
91 import org.kuali.rice.krad.service.BusinessObjectService;
92 import org.kuali.rice.krad.service.DocumentService;
93 import org.kuali.rice.krad.util.GlobalVariables;
94 import org.kuali.rice.krad.util.ObjectUtils;
95 import org.kuali.rice.krad.workflow.service.WorkflowDocumentService;
96
97 import java.math.BigDecimal;
98 import java.math.RoundingMode;
99 import java.util.*;
100
101
102
103
104
105 public class OleInvoiceDocument extends InvoiceDocument implements Copyable {
106
107 private static org.apache.log4j.Logger LOG = org.apache.log4j.Logger.getLogger(OleInvoiceDocument.class);
108
109 private Integer invoiceTypeId;
110 private Integer invoiceSubTypeId;
111 private String vendorId;
112 private String invoiceTypeHdnId;
113 private String invoiceSubTypeHdnId;
114 private String acquisitionUnit;
115 private String empty;
116 protected transient List<SummaryAccount> summaryAccounts;
117 private boolean sfcFlag;
118 private String invoiceItemTotal;
119 private String invoiceForeignItemTotal;
120 private String invoiceAmount;
121 private boolean baSfcFlag;
122 private boolean validationFlag;
123 private boolean blanketApproveValidationFlag;
124 private boolean blanketApproveSubscriptionDateValidationFlag;
125 private boolean subscriptionDateValidationFlag;
126 private String purchaseOrderDocumentNums;
127 private boolean duplicateApproveFlag = false;
128 private boolean blanketApproveFlag=true;
129 private boolean overviewFlag = true;
130 private boolean vendorInfoFlag = true;
131 private boolean invoiceInfoFlag = true;
132 private boolean processItemFlag = false;
133 private boolean processTitlesFlag = false;
134 private boolean currentItemsFlag = false;
135
136
137 private boolean additionalChargesFlag = false;
138 private boolean accountSummaryFlag = false;
139 private boolean notesAndAttachmentFlag = false;
140 private boolean adHocRecipientsFlag = false;
141 private boolean routeLogFlag = false;
142 private boolean routeLogDisplayFlag = false;
143 private boolean unsaved = false;
144 private boolean canClose = false;
145
146 private String cloneDebitInvoice;
147 private boolean cloneFlag = false;
148 private boolean amountExceeds = false;
149 private String exceedsEncumbranceTitle;
150 private String exceedsEncumbranceExtendedCost;
151 private String exceedsEncumbranceListPrice;
152 private boolean amountExceedsForBlanketApprove;
153 private boolean itemSign;
154
155 private String vendorLink;
156 private boolean foreignCurrencyFlag=false;
157 private Long invoiceCurrencyTypeId;
158 private String invoiceCurrencyType;
159 private OleCurrencyType oleCurrencyType;
160 private boolean currencyOverrideFlag = false;
161 private String currencyOverrideMessage;
162 private String invoiceCurrencyExchangeRate;
163 private boolean dbRetrieval= false;
164 private boolean enableCurrentItems = false;
165 private String foreignVendorAmount;
166 private String foreignInvoiceAmount;
167 private List<OleInvoiceItem> deletedInvoiceItems = new ArrayList<>();
168 private boolean duplicateRouteFlag;
169 private boolean duplicateSaveFlag;
170
171 public boolean isBlanketApproveFlag() {
172 return blanketApproveFlag;
173 }
174 private boolean currencyTypeIndicator = true;
175
176 public void setBlanketApproveFlag(boolean blanketApproveFlag) {
177 this.blanketApproveFlag = blanketApproveFlag;
178 }
179
180 private List<OlePaymentRequestDocument> paymentRequestDocuments = new ArrayList<OlePaymentRequestDocument>();
181
182 public boolean isCanClose() {
183 return canClose;
184 }
185
186 public void setCanClose(boolean canClose) {
187 this.canClose = canClose;
188 }
189
190 public boolean isUnsaved() {
191 return unsaved;
192 }
193
194 public void setUnsaved(boolean unsaved) {
195 this.unsaved = unsaved;
196 }
197
198 private boolean duplicateFlag = false;
199
200
201 private BigDecimal priorTotal = new BigDecimal(0);
202
203 public String getAcquisitionUnit() {
204 return acquisitionUnit;
205 }
206
207 public void setAcquisitionUnit(String acquisitionUnit) {
208 this.acquisitionUnit = acquisitionUnit;
209 }
210
211 public BigDecimal getPriorTotal() {
212 return priorTotal;
213 }
214
215 public void setPriorTotal(BigDecimal priorTotal) {
216 this.priorTotal = priorTotal;
217 }
218
219 public String getEmpty() {
220 return empty;
221 }
222
223 public void setEmpty(String empty) {
224 this.empty = empty;
225 }
226
227
228
229
230
231
232 private OleInvoiceSubType oleInvoiceSubType;
233 private OleInvoiceType oleInvoiceType;
234
235
236 private boolean prorateQty;
237 private boolean prorateDollar;
238 private boolean prorateManual;
239 private boolean noProrate;
240
241 private String prorateBy;
242
243 private BigDecimal foreignVendorInvoiceAmount;
244
245 private BigDecimal purchaseOrderTypeId;
246 private PurchaseOrderType orderType;
247 private static transient BibInfoService bibInfoService;
248 private String paymentMethodIdentifier;
249 private Integer paymentMethodId;
250 private OlePaymentMethod paymentMethod;
251 private String vendorFaxNumber;
252
253 protected Integer accountsPayablePurchasingDocumentLinkIdentifier;
254 protected List<PurchasingAccountsPayableDocument> purchaseOrders;
255
256
257 private String invoicedGrandTotal;
258 private String invoicedItemTotal;
259
260 private String searchResultInvoiceDate;
261 private String searchResultInvoicePayDate;
262 private boolean offsetAccountIndicator;
263
264 public boolean isNoProrate() {
265 return noProrate;
266 }
267
268 public void setNoProrate(boolean noProrate) {
269 this.noProrate = noProrate;
270 }
271
272 @SuppressWarnings("rawtypes")
273 public List getPurchaseOrders() {
274 return purchaseOrders;
275 }
276
277 @SuppressWarnings("rawtypes")
278 public void setPurchaseOrders(List purchaseOrders) {
279 this.purchaseOrders = purchaseOrders;
280 }
281
282 public String getVendorFaxNumber() {
283 return vendorFaxNumber;
284 }
285
286 public void setVendorFaxNumber(String vendorFaxNumber) {
287 this.vendorFaxNumber = vendorFaxNumber;
288 }
289
290 public String getPaymentMethodIdentifier() {
291 return paymentMethodIdentifier;
292 }
293
294 public void setPaymentMethodIdentifier(String paymentMethodIdentifier) {
295 this.paymentMethodIdentifier = paymentMethodIdentifier;
296 }
297
298 public String getVendorId() {
299 return vendorId;
300 }
301
302 public void setVendorId(String vendorId) {
303 this.vendorId = vendorId;
304 }
305
306 public String getInvoiceSubTypeHdnId() {
307 return invoiceSubTypeHdnId;
308 }
309
310 public void setInvoiceSubTypeHdnId(String invoiceSubTypeHdnId) {
311 this.invoiceSubTypeHdnId = invoiceSubTypeHdnId;
312 }
313
314
315 private String documentYear;
316 private String documentTotalAmount;
317
318
319
320
321 public String getDocumentYear() {
322 return documentYear;
323 }
324
325 public void setDocumentYear(String documentYear) {
326 this.documentYear = documentYear;
327 }
328
329 public String getDocumentTotalAmount() {
330 if (!isDbRetrieval()) {
331 this.documentTotalAmount = this.getTotalDollarAmount().toString();
332 }
333 return documentTotalAmount;
334
335 }
336
337 public void setDocumentTotalAmount(String documentTotalAmount) {
338 this.documentTotalAmount = documentTotalAmount;
339 }
340
341
342
343
344
345
346
347
348
349 private List<OlePurchaseOrderItem> purchaseOrderItems = new ArrayList<OlePurchaseOrderItem>();
350
351
352 public List<OlePurchaseOrderItem> getPurchaseOrderItems() {
353 return purchaseOrderItems;
354 }
355
356 public void setPurchaseOrderItems(List<OlePurchaseOrderItem> purchaseOrderItems) {
357 this.purchaseOrderItems = purchaseOrderItems;
358 }
359
360 public Integer getPaymentMethodId() {
361 return paymentMethodId;
362 }
363
364 public void setPaymentMethodId(Integer paymentMethodId) {
365 this.paymentMethodId = paymentMethodId;
366 }
367
368 public OlePaymentMethod getPaymentMethod() {
369 return paymentMethod;
370 }
371
372 public void setPaymentMethod(OlePaymentMethod paymentMethod) {
373 this.paymentMethod = paymentMethod;
374 }
375
376 public static BibInfoService getBibInfoService() {
377 if (bibInfoService == null) {
378 bibInfoService = SpringContext.getBean(BibInfoServiceImpl.class);
379 }
380 return bibInfoService;
381 }
382
383 @Override
384 public BigDecimal getPurchaseOrderTypeId() {
385 return purchaseOrderTypeId;
386 }
387
388 @Override
389 public void setPurchaseOrderTypeId(BigDecimal purchaseOrderTypeId) {
390 this.purchaseOrderTypeId = purchaseOrderTypeId;
391 }
392
393 @Override
394 public PurchaseOrderType getOrderType() {
395 return orderType;
396 }
397
398 @Override
399 public Integer getAccountsPayablePurchasingDocumentLinkIdentifier() {
400 return accountsPayablePurchasingDocumentLinkIdentifier;
401 }
402
403 @Override
404 public void setAccountsPayablePurchasingDocumentLinkIdentifier(Integer accountsPayablePurchasingDocumentLinkIdentifier) {
405 this.accountsPayablePurchasingDocumentLinkIdentifier = accountsPayablePurchasingDocumentLinkIdentifier;
406 }
407
408 @Override
409 public void setOrderType(PurchaseOrderType orderType) {
410 this.orderType = orderType;
411 }
412
413 public Integer getInvoiceTypeId() {
414 return invoiceTypeId;
415 }
416
417 public void setInvoiceTypeId(Integer invoiceTypeId) {
418 this.invoiceTypeId = invoiceTypeId;
419 }
420
421 public String getInvoiceTypeHdnId() {
422 return invoiceTypeHdnId;
423 }
424
425 public void setInvoiceTypeHdnId(String invoiceTypeHdnId) {
426 this.invoiceTypeHdnId = invoiceTypeHdnId;
427 }
428
429 public Integer getInvoiceSubTypeId() {
430 return invoiceSubTypeId;
431 }
432
433 public void setInvoiceSubTypeId(Integer invoiceSubTypeId) {
434 this.invoiceSubTypeId = invoiceSubTypeId;
435 }
436
437 public String getInvoiceType() {
438 return invoiceType;
439 }
440
441 public void setInvoiceType(String invoiceType) {
442 this.invoiceType = invoiceType;
443 }
444
445
446 public String getInvoiceSubType() {
447 return invoiceSubType;
448 }
449
450 public void setInvoiceSubType(String invoiceSubType) {
451 this.invoiceSubType = invoiceSubType;
452 }
453
454 public OleInvoiceSubType getOleInvoiceSubType() {
455 return oleInvoiceSubType;
456 }
457
458 public void setOleInvoiceSubType(OleInvoiceSubType oleInvoiceSubType) {
459 this.oleInvoiceSubType = oleInvoiceSubType;
460 }
461
462 public OleInvoiceType getOleInvoiceType() {
463 return oleInvoiceType;
464 }
465
466 public void setOleInvoiceType(OleInvoiceType oleInvoiceType) {
467 this.oleInvoiceType = oleInvoiceType;
468 }
469
470 public boolean isProrateQty() {
471 return prorateQty;
472 }
473
474 public void setProrateQty(boolean prorateQty) {
475 this.prorateQty = prorateQty;
476 }
477
478 public boolean isProrateDollar() {
479 return prorateDollar;
480 }
481
482 public void setProrateDollar(boolean prorateDollar) {
483 this.prorateDollar = prorateDollar;
484 }
485
486 public boolean isProrateManual() {
487 return prorateManual;
488 }
489
490 public void setProrateManual(boolean prorateManual) {
491 this.prorateManual = prorateManual;
492 }
493
494 public boolean isAmountExceeds() {
495 return amountExceeds;
496 }
497
498 public void setAmountExceeds(boolean amountExceeds) {
499 this.amountExceeds = amountExceeds;
500 }
501
502 public String getExceedsEncumbranceTitle() {
503 return exceedsEncumbranceTitle;
504 }
505
506 public void setExceedsEncumbranceTitle(String exceedsEncumbranceTitle) {
507 this.exceedsEncumbranceTitle = exceedsEncumbranceTitle;
508 }
509
510 public String getExceedsEncumbranceExtendedCost() {
511 return exceedsEncumbranceExtendedCost;
512 }
513
514 public void setExceedsEncumbranceExtendedCost(String exceedsEncumbranceExtendedCost) {
515 this.exceedsEncumbranceExtendedCost = exceedsEncumbranceExtendedCost;
516 }
517
518 public String getExceedsEncumbranceListPrice() {
519 return exceedsEncumbranceListPrice;
520 }
521
522 public void setExceedsEncumbranceListPrice(String exceedsEncumbranceListPrice) {
523 this.exceedsEncumbranceListPrice = exceedsEncumbranceListPrice;
524 }
525
526 public boolean isAmountExceedsForBlanketApprove() {
527 return amountExceedsForBlanketApprove;
528 }
529
530 public void setAmountExceedsForBlanketApprove(boolean amountExceedsForBlanketApprove) {
531 this.amountExceedsForBlanketApprove = amountExceedsForBlanketApprove;
532 }
533
534 private static transient ConfigurationService kualiConfigurationService;
535 private static transient BibInfoWrapperService bibInfoWrapperService;
536 private static transient FileProcessingService fileProcessingService;
537 private static transient BusinessObjectService businessObjectService;
538 private static transient VendorService vendorService;
539 private static transient InvoiceService invoiceService;
540 private static transient OleInvoiceService oleInvoiceService;
541 private static transient PurapService purapService;
542 private static transient AccountsPayableService accountsPayableService;
543 private static transient IdentityManagementService identityManagementService;
544 private static transient WorkflowDocumentService workflowDocumentService;
545
546
547 private boolean proformaIndicator;
548
549 public static WorkflowDocumentService getWorkflowDocumentService() {
550 if (workflowDocumentService == null) {
551 workflowDocumentService = SpringContext.getBean(WorkflowDocumentService.class);
552 }
553 return workflowDocumentService;
554 }
555
556 public static void setWorkflowDocumentService(WorkflowDocumentService workflowDocumentService) {
557 OleInvoiceDocument.workflowDocumentService = workflowDocumentService;
558 }
559
560 public static InvoiceService getInvoiceService() {
561 if (invoiceService == null) {
562 invoiceService = SpringContext.getBean(InvoiceService.class);
563 }
564 return invoiceService;
565 }
566
567 public static void setInvoiceService(InvoiceService invoiceService) {
568 OleInvoiceDocument.invoiceService = invoiceService;
569 }
570
571 public static VendorService getVendorService() {
572 if (vendorService == null) {
573 vendorService = SpringContext.getBean(VendorService.class);
574 }
575 return vendorService;
576 }
577
578 public static void setVendorService(VendorService vendorService) {
579 OleInvoiceDocument.vendorService = vendorService;
580 }
581
582 public static PurapService getPurapService() {
583 if (purapService == null) {
584 purapService = SpringContext.getBean(PurapService.class);
585 }
586 return purapService;
587 }
588
589 public static void setPurapService(PurapService purapService) {
590 OleInvoiceDocument.purapService = purapService;
591 }
592
593 public static OleInvoiceService getOleInvoiceService() {
594 if (oleInvoiceService == null) {
595 oleInvoiceService = SpringContext.getBean(OleInvoiceService.class);
596 }
597 return oleInvoiceService;
598 }
599
600 public static void setOleInvoiceService(OleInvoiceService oleInvoiceService) {
601 OleInvoiceDocument.oleInvoiceService = oleInvoiceService;
602 }
603
604 public static IdentityManagementService getIdentityManagementService() {
605 if (identityManagementService == null) {
606 identityManagementService = SpringContext.getBean(IdentityManagementService.class);
607 }
608 return identityManagementService;
609 }
610
611 public static void setIdentityManagementService(IdentityManagementService identityManagementService) {
612 OleInvoiceDocument.identityManagementService = identityManagementService;
613 }
614
615 public static AccountsPayableService getAccountsPayableService() {
616 if (accountsPayableService == null) {
617 accountsPayableService = SpringContext.getBean(AccountsPayableService.class);
618 }
619 return accountsPayableService;
620 }
621
622 public static void setAccountsPayableService(AccountsPayableService accountsPayableService) {
623 OleInvoiceDocument.accountsPayableService = accountsPayableService;
624 }
625
626 public static ConfigurationService getConfigurationService() {
627 if (kualiConfigurationService == null) {
628 kualiConfigurationService = SpringContext.getBean(ConfigurationService.class);
629 }
630 return kualiConfigurationService;
631 }
632
633 public static void setConfigurationService(ConfigurationService kualiConfigurationService) {
634 OleInvoiceDocument.kualiConfigurationService = kualiConfigurationService;
635 }
636
637 public static BibInfoWrapperService getBibInfoWrapperService() {
638 if (bibInfoWrapperService == null) {
639 bibInfoWrapperService = SpringContext.getBean(BibInfoWrapperService.class);
640 }
641 return bibInfoWrapperService;
642 }
643
644 public static void setBibInfoWrapperService(BibInfoWrapperService bibInfoWrapperService) {
645 OleInvoiceDocument.bibInfoWrapperService = bibInfoWrapperService;
646 }
647
648
649 public static FileProcessingService getFileProcessingService() {
650 if (fileProcessingService == null) {
651 fileProcessingService = SpringContext.getBean(FileProcessingService.class);
652 }
653 return fileProcessingService;
654 }
655
656 public static void setFileProcessingService(FileProcessingService fileProcessingService) {
657 OleInvoiceDocument.fileProcessingService = fileProcessingService;
658 }
659
660 public static DateTimeService getDateTimeService() {
661 if (dateTimeService == null) {
662 dateTimeService = SpringContext.getBean(DateTimeService.class);
663 }
664 return dateTimeService;
665 }
666
667 public static void setDateTimeService(DateTimeService dateTimeService) {
668 OleInvoiceDocument.dateTimeService = dateTimeService;
669 }
670
671 @Override
672 public BusinessObjectService getBusinessObjectService() {
673 if (businessObjectService == null) {
674 businessObjectService = SpringContext.getBean(BusinessObjectService.class);
675 }
676 return businessObjectService;
677 }
678
679 public void setBusinessObjectService(BusinessObjectService businessObjectService) {
680 this.businessObjectService = businessObjectService;
681 }
682
683
684
685
686 public OleInvoiceDocument() {
687 super();
688
689
690 }
691
692 public void initiateDocument() throws WorkflowException {
693 super.initiateDocument();
694 OleInvoiceItem item;
695 this.setUseTaxIndicator(false);
696 String[] collapseSections = getOleInvoiceService().getDefaultCollapseSections();
697 this.setOverviewFlag(getOleInvoiceService().canCollapse(OLEConstants.OVERVIEW_SECTION, collapseSections));
698 this.setVendorInfoFlag(getOleInvoiceService().canCollapse(OLEConstants.VENDOR_INFO_SECTION, collapseSections));
699 this.setInvoiceInfoFlag(getOleInvoiceService().canCollapse(OLEConstants.INVOICE_INFO_SECTION, collapseSections));
700 this.setProcessTitlesFlag(getOleInvoiceService().canCollapse(OLEConstants.PROCESS_TITLES_SECTION, collapseSections));
701 this.setCurrentItemsFlag(getOleInvoiceService().canCollapse(OLEConstants.CURRENT_ITEM_SECTION, collapseSections));
702 this.setAdditionalChargesFlag(getOleInvoiceService().canCollapse(OLEConstants.ADDITIONAL_CHARGES_SECTION, collapseSections));
703 this.setAccountSummaryFlag(getOleInvoiceService().canCollapse(OLEConstants.ACCOUNT_SUMMARY_SECTION, collapseSections));
704 this.setAdHocRecipientsFlag(getOleInvoiceService().canCollapse(OLEConstants.ADHOC_RECIPIENT_SECTION, collapseSections));
705 this.setRouteLogFlag(getOleInvoiceService().canCollapse(OLEConstants.ROUTE_LOG_SECTION, collapseSections));
706 this.setNotesAndAttachmentFlag(getOleInvoiceService().canCollapse(OLEConstants.NOTES_AND_ATTACH_SECTION, collapseSections));
707
708 if (this.getItems() == null || this.getItems().size() == 0) {
709 this.items = new ArrayList<>();
710 SpringContext.getBean(PurapService.class).addBelowLineItems(this);
711 List<OleInvoiceItem> oleInvItems = this.getItems();
712 for (OleInvoiceItem oleInvoiceItem : oleInvItems) {
713 oleInvoiceItem.setPostingYear(SpringContext.getBean(UniversityDateService.class).getCurrentUniversityDate().getUniversityFiscalYear());
714 }
715 }
716 }
717
718
719
720
721
722
723 @Override
724 public void populateInvoiceFromPurchaseOrder(PurchaseOrderDocument po, HashMap<String, ExpiredOrClosedAccountEntry> expiredOrClosedAccountList) {
725 LOG.debug("Inside populateInvoiceFromPurchaseOrder method of OleInvoice Document");
726 this.setPaymentMethodId(po.getVendorDetail().getPaymentMethodId());
727 this.setPurchaseOrderIdentifier(po.getPurapDocumentIdentifier());
728 this.getDocumentHeader().setOrganizationDocumentNumber(po.getDocumentHeader().getOrganizationDocumentNumber());
729 this.setPostingYear(po.getPostingYear());
730 this.setReceivingDocumentRequiredIndicator(po.isReceivingDocumentRequiredIndicator());
731 this.setUseTaxIndicator(po.isUseTaxIndicator());
732 this.setInvoicePositiveApprovalIndicator(po.isPaymentRequestPositiveApprovalIndicator());
733 this.setVendorCustomerNumber(po.getVendorCustomerNumber());
734
735 if (po.getPurchaseOrderCostSource() != null) {
736 this.setInvoiceCostSource(po.getPurchaseOrderCostSource());
737 this.setInvoiceCostSourceCode(po.getPurchaseOrderCostSourceCode());
738 }
739
740 if (po.getVendorShippingPaymentTerms() != null) {
741 this.setVendorShippingPaymentTerms(po.getVendorShippingPaymentTerms());
742 this.setVendorShippingPaymentTermsCode(po.getVendorShippingPaymentTermsCode());
743 }
744
745 if (po.getVendorPaymentTerms() != null) {
746 this.setVendorPaymentTermsCode(po.getVendorPaymentTermsCode());
747 this.setVendorPaymentTerms(po.getVendorPaymentTerms());
748 }
749
750 if (po.getRecurringPaymentType() != null) {
751 this.setRecurringPaymentType(po.getRecurringPaymentType());
752 this.setRecurringPaymentTypeCode(po.getRecurringPaymentTypeCode());
753 }
754
755 Bank defaultBank = SpringContext.getBean(BankService.class).getDefaultBankByDocType(this.getClass());
756 if (defaultBank != null) {
757 this.setBankCode(defaultBank.getBankCode());
758 this.setBank(defaultBank);
759 }
760 this.setVendorHeaderGeneratedIdentifier(po.getVendorHeaderGeneratedIdentifier());
761 this.setVendorDetailAssignedIdentifier(po.getVendorDetailAssignedIdentifier());
762 this.setVendorCustomerNumber(po.getVendorCustomerNumber());
763 this.setVendorName(po.getVendorName());
764
765
766 this.setOriginalVendorHeaderGeneratedIdentifier(po.getVendorHeaderGeneratedIdentifier());
767 this.setOriginalVendorDetailAssignedIdentifier(po.getVendorDetailAssignedIdentifier());
768
769
770 this.setAlternateVendorHeaderGeneratedIdentifier(po.getAlternateVendorHeaderGeneratedIdentifier());
771 this.setAlternateVendorDetailAssignedIdentifier(po.getAlternateVendorDetailAssignedIdentifier());
772
773
774 String userCampus = GlobalVariables.getUserSession().getPerson().getCampusCode();
775 VendorAddress vendorAddress = getVendorService().getVendorDefaultAddress(po.getVendorHeaderGeneratedIdentifier(), po.getVendorDetailAssignedIdentifier(), VendorConstants.AddressTypes.REMIT, userCampus);
776 if (vendorAddress != null) {
777 this.templateVendorAddress(vendorAddress);
778 this.setVendorAddressGeneratedIdentifier(vendorAddress.getVendorAddressGeneratedIdentifier());
779 setVendorAttentionName(StringUtils.defaultString(vendorAddress.getVendorAttentionName()));
780 } else {
781
782 this.setVendorAddressGeneratedIdentifier(po.getVendorAddressGeneratedIdentifier());
783 this.setVendorLine1Address(po.getVendorLine1Address());
784 this.setVendorLine2Address(po.getVendorLine2Address());
785 this.setVendorCityName(po.getVendorCityName());
786 this.setVendorAddressInternationalProvinceName(po.getVendorAddressInternationalProvinceName());
787 this.setVendorStateCode(po.getVendorStateCode());
788 this.setVendorPostalCode(po.getVendorPostalCode());
789 this.setVendorCountryCode(po.getVendorCountryCode());
790
791 boolean blankAttentionLine = StringUtils.equalsIgnoreCase(
792 "Y",
793 SpringContext.getBean(ParameterService.class).getParameterValueAsString(
794 PurapConstants.PURAP_NAMESPACE, "Document",
795 PurapParameterConstants.BLANK_ATTENTION_LINE_FOR_PO_TYPE_ADDRESS));
796
797 if (blankAttentionLine) {
798 setVendorAttentionName(StringUtils.EMPTY);
799 } else {
800 setVendorAttentionName(StringUtils.defaultString(po.getVendorAttentionName()));
801 }
802 }
803
804 this.setInvoicePayDate(getInvoiceService().calculatePayDate(this.getInvoiceDate(), this.getVendorPaymentTerms()));
805
806 if (getInvoiceService().encumberedItemExistsForInvoicing(po)) {
807 for (OlePurchaseOrderItem poi : (List<OlePurchaseOrderItem>) po.getItems()) {
808
809 if (getDocumentSpecificService().poItemEligibleForAp(this, poi)) {
810 OleInvoiceItem invoiceItem = new OleInvoiceItem(poi, this, expiredOrClosedAccountList);
811 invoiceItem.setReceivingDocumentRequiredIndicator(po.isReceivingDocumentRequiredIndicator());
812 this.getItems().add(invoiceItem);
813 PurchasingCapitalAssetItem purchasingCAMSItem = po.getPurchasingCapitalAssetItemByItemIdentifier(poi.getItemIdentifier());
814 if (purchasingCAMSItem != null) {
815 invoiceItem.setCapitalAssetTransactionTypeCode(purchasingCAMSItem.getCapitalAssetTransactionTypeCode());
816 }
817
818
819
820
821
822
823
824
825 }
826 }
827 }
828
829
830 getPurapService().addBelowLineItems(this);
831 this.setAccountsPayablePurchasingDocumentLinkIdentifier(po.getAccountsPayablePurchasingDocumentLinkIdentifier());
832
833
834 getInvoiceService().removeIneligibleAdditionalCharges(this);
835
836 this.fixItemReferences();
837 this.refreshNonUpdateableReferences();
838 }
839
840 @Override
841 public Class getItemClass() {
842 return OleInvoiceItem.class;
843 }
844
845 @Override
846 public PurApAccountingLine getFirstAccount() {
847
848 if ((getItems() != null) && (!getItems().isEmpty())) {
849 OleInvoiceItem itemToUse = null;
850 for (Iterator iter = getItems().iterator(); iter.hasNext(); ) {
851 OleInvoiceItem item = (OleInvoiceItem) iter.next();
852 if ((item.isConsideredEntered()) && ((item.getSourceAccountingLines() != null) && (!item.getSourceAccountingLines().isEmpty()))) {
853
854 PurApAccountingLine accountLine = item.getSourceAccountingLine(0);
855 accountLine.refreshNonUpdateableReferences();
856 return accountLine;
857 }
858
859
860
861
862
863
864
865
866 }
867 }
868 return null;
869
870 }
871
872 @Override
873 public PurApItem getItem(int pos) {
874 OleInvoiceItem item = (OleInvoiceItem) super.getItem(pos);
875 if (item.getInvoice() == null) {
876 item.setInvoice(this);
877 }
878 return item;
879 }
880
881
882
883
884
885
886 public void loadInvoiceDocument() {
887 try {
888 long b1 = System.currentTimeMillis();
889
890 LOG.debug("###########inside OleInvoiceDocument processAfterRetrieve###########");
891
892 if (this.getPaymentMethodId() != null) {
893 OlePaymentMethod olePaymentMethod = SpringContext.getBean(BusinessObjectService.class)
894 .findBySinglePrimaryKey(OlePaymentMethod.class, this.getPaymentMethodId());
895 this.setPaymentMethod(olePaymentMethod);
896 this.setPaymentMethodIdentifier(this.getPaymentMethodId().toString());
897 }
898 if (this.getInvoiceTypeId() != null) {
899 this.setInvoiceTypeHdnId(this.getInvoiceTypeId().toString());
900 }
901 if (this.getInvoiceSubTypeId() != null) {
902 this.setInvoiceSubTypeHdnId(this.getInvoiceSubTypeId().toString());
903 }
904 if (this.getVendorInvoiceAmount() != null) {
905 this.setInvoiceAmount(this.getVendorInvoiceAmount().toString());
906 }
907 if (this.getForeignVendorInvoiceAmount() != null) {
908 this.setForeignInvoiceAmount(this.getForeignVendorInvoiceAmount().toString());
909 }
910 List<BigDecimal> newUnitPriceList = new ArrayList<BigDecimal>();
911 BigDecimal newUnitPrice = new BigDecimal(0);
912 BigDecimal hundred = new BigDecimal(100);
913 List<OleInvoiceItem> item = this.getItems();
914 String titleId = null;
915
916
917
918
919
920
921
922
923
924
925
926
927 String itemDescription = "";
928 BigDecimal exchangeRate = new BigDecimal("0");
929 if (this.getInvoiceCurrencyTypeId() != null) {
930 OleCurrencyType oleCurrencyType = SpringContext.getBean(BusinessObjectService.class)
931 .findBySinglePrimaryKey(OleCurrencyType.class, this.getInvoiceCurrencyTypeId());
932 this.setOleCurrencyType(oleCurrencyType);
933 this.setInvoiceCurrencyType(this.getInvoiceCurrencyTypeId().toString());
934 if ( oleCurrencyType.getCurrencyType().equalsIgnoreCase(OleSelectConstant.CURRENCY_TYPE_NAME) ){
935 currencyTypeIndicator=true;
936 this.setForeignCurrencyFlag(false);
937 } else {
938 currencyTypeIndicator=false;
939 this.setForeignCurrencyFlag(true);
940 }
941 } else {
942 if ( this.getVendorDetail() !=null && this.getVendorDetail().getCurrencyType() != null ){
943 if(this.getVendorDetail().getCurrencyType().getCurrencyType().equalsIgnoreCase(OleSelectConstant.CURRENCY_TYPE_NAME)){
944 currencyTypeIndicator=true;
945 this.setForeignCurrencyFlag(false);
946 this.setInvoiceCurrencyType(this.getVendorDetail().getCurrencyType().getCurrencyTypeId().toString());
947 }
948 else{
949 currencyTypeIndicator=false;
950 this.setForeignCurrencyFlag(true);
951 this.setInvoiceCurrencyType(this.getVendorDetail().getCurrencyType().getCurrencyTypeId().toString());
952 }
953 }
954 }
955
956 if (this.getInvoiceCurrencyTypeId() != null && (!currencyTypeIndicator) ){
957 if (StringUtils.isBlank(this.getInvoiceCurrencyExchangeRate())) {
958 exchangeRate = SpringContext.getBean(OleInvoiceService.class).getExchangeRate(this.getInvoiceCurrencyType()).getExchangeRate();
959 this.setInvoiceCurrencyExchangeRate(exchangeRate.toString());
960
961
962 }
963 }
964
965 for (int i = 0; item.size() > i; i++) {
966 OleInvoiceItem items = (OleInvoiceItem) this.getItem(i);
967 if (this.getInvoiceCurrencyTypeId() != null) {
968 items.setItemCurrencyType(oleCurrencyType.getCurrencyType());
969 items.setInvoicedCurrency(oleCurrencyType.getCurrencyType());
970 } else {
971 if (this.getVendorDetail() !=null && this.getVendorDetail().getCurrencyType() != null ){
972 items.setItemCurrencyType(this.getVendorDetail().getCurrencyType().getCurrencyType());
973 items.setInvoicedCurrency(this.getVendorDetail().getCurrencyType().getCurrencyType());
974 }
975 }
976
977 if (this.getInvoiceCurrencyTypeId() != null && (!currencyTypeIndicator) ){
978 if (StringUtils.isNotBlank(this.getInvoiceCurrencyExchangeRate())) {
979 try {
980
981 items.setItemExchangeRate(new KualiDecimal(this.getInvoiceCurrencyExchangeRate()));
982 items.setExchangeRate(this.getInvoiceCurrencyExchangeRate());
983 }
984 catch (NumberFormatException nfe) {
985 throw new RuntimeException("Invalid Exchange Rate", nfe);
986 }
987 } else {
988 items.setItemExchangeRate(new KualiDecimal(exchangeRate));
989 items.setExchangeRate(exchangeRate.toString());
990 }
991 if (items.getItemExchangeRate() != null && items.getItemForeignUnitCost() != null && !this.getApplicationDocumentStatus().equals("Department-Approved")) {
992 items.setItemUnitCostUSD(new KualiDecimal(items.getItemForeignUnitCost().bigDecimalValue().divide(new BigDecimal(items.getExchangeRate()), 4, BigDecimal.ROUND_HALF_UP)));
993 items.setItemUnitPrice(items.getItemForeignUnitCost().bigDecimalValue().divide(new BigDecimal(items.getExchangeRate()), 4, BigDecimal.ROUND_HALF_UP));
994 items.setItemListPrice(items.getItemUnitCostUSD());
995 items.setExtendedPrice(items.calculateExtendedPrice());
996 }
997
998 }
999
1000 if (LOG.isDebugEnabled()) {
1001 LOG.debug("Title id while retriving ------>" + items.getItemTitleId());
1002 }
1003 if (items.getItemTitleId() != null) {
1004 BibInfoRecord bibInfoRecord = items.getBibInfoRecord();
1005
1006 if(bibInfoRecord !=null){
1007 items.setBibUUID(bibInfoRecord.getBibIdStr());
1008 items.setDocFormat(DocumentUniqueIDPrefix.getBibFormatType(items.getItemTitleId()));
1009
1010 itemDescription = ((bibInfoRecord.getTitle() != null && !bibInfoRecord.getTitle().isEmpty()) ? bibInfoRecord.getTitle().trim() + ", " : "")
1011 + ((bibInfoRecord.getAuthor() != null && !bibInfoRecord
1012 .getAuthor().isEmpty()) ? bibInfoRecord.getAuthor().trim() + ", "
1013 : "")
1014 + ((bibInfoRecord.getPublisher() != null && !bibInfoRecord
1015 .getPublisher().isEmpty()) ? bibInfoRecord.getPublisher().trim()
1016 + ", " : "")
1017 + ((bibInfoRecord.getIsxn() != null && !bibInfoRecord.getIsxn()
1018 .isEmpty()) ? bibInfoRecord.getIsxn().trim() + ", " : "");
1019 }
1020 if (itemDescription != null && !(itemDescription.equals(""))) {
1021 itemDescription = itemDescription.lastIndexOf(",") < 0 ? itemDescription :
1022 itemDescription.substring(0, itemDescription.lastIndexOf(","));
1023 StringEscapeUtils stringEscapeUtils = new StringEscapeUtils();
1024 itemDescription = stringEscapeUtils.unescapeXml(itemDescription);
1025 items.setItemDescription(itemDescription);
1026 }
1027 HashMap<String, String> queryMap = new HashMap<String, String>();
1028 if (items.getPoItemIdentifier() != null) {
1029 queryMap.put(OLEConstants.OleCopy.PO_ITM_ID, items.getPoItemIdentifier().toString());
1030 List<OLELinkPurapDonor> oleLinkPurapDonorList = (List<OLELinkPurapDonor>) getBusinessObjectService().findMatching(OLELinkPurapDonor.class, queryMap);
1031 if (oleLinkPurapDonorList != null) {
1032 items.setOleDonors(oleLinkPurapDonorList);
1033 oleLinkPurapDonorList.clear();
1034 }
1035 }
1036 }
1037 if ((items.getItemType().isQuantityBasedGeneralLedgerIndicator())) {
1038 if (items.getItemDiscount() == null) {
1039 items.setItemDiscount(KualiDecimal.ZERO);
1040 }
1041
1042 if (items.getItemListPrice() == null) {
1043 items.setItemListPrice(KualiDecimal.ZERO);
1044 }
1045
1046
1047
1048
1049
1050
1051
1052 }
1053
1054
1055
1056
1057
1058 items.setOleOpenQuantity(String.valueOf(items.getPoOutstandingQuantity()));
1059 }
1060 if (this.getVendorHeaderGeneratedIdentifier() != null && this.getVendorDetailAssignedIdentifier() != null) {
1061 this.setVendorId(this.getVendorHeaderGeneratedIdentifier().toString() + "-" + this.getVendorDetailAssignedIdentifier().toString());
1062 }
1063
1064 if (this.getProrateBy() != null) {
1065 this.setProrateQty(this.getProrateBy().equals(OLEConstants.PRORATE_BY_QTY));
1066 this.setProrateManual(this.getProrateBy().equals(OLEConstants.MANUAL_PRORATE));
1067 this.setProrateDollar(this.getProrateBy().equals(OLEConstants.PRORATE_BY_DOLLAR));
1068 this.setNoProrate(this.getProrateBy().equals(OLEConstants.NO_PRORATE));
1069 }
1070 long b2 = System.currentTimeMillis();
1071 long tot = b2-b1;
1072 LOG.info("loadInvoiceDocument"+tot);
1073 } catch (Exception e) {
1074 LOG.error("Exception during processAfterRetrieve in OleInvoiceDocument "+e);
1075 throw new RuntimeException(e);
1076 }
1077
1078 }
1079
1080
1081
1082
1083
1084 @Override
1085 public void doRouteStatusChange(DocumentRouteStatusChange statusChangeEvent) {
1086 LOG.debug("doRouteStatusChange() started");
1087
1088 super.doRouteStatusChange(statusChangeEvent);
1089 try {
1090
1091 if (this.getDocumentHeader().getWorkflowDocument().isProcessed()) {
1092 if (!InvoiceStatuses.APPDOC_AUTO_APPROVED.equals(getApplicationDocumentStatus())) {
1093
1094 getOleInvoiceService().completePaymentDocument(this);
1095 this.setApplicationDocumentStatus(PurapConstants.InvoiceStatuses.APPDOC_DEPARTMENT_APPROVED);
1096 if (this.getImmediatePaymentIndicator()) {
1097 this.setInvoicePayDate(new java.sql.Date(this.getAccountsPayableApprovalTimestamp().getTime()));
1098 }
1099
1100
1101
1102 populateDocumentForRouting();
1103 getPurapService().saveDocumentNoValidation(this);
1104 SpringContext.getBean(OleInvoiceService.class).createPaymentRequestOrCreditMemoDocument(this);
1105
1106 return;
1107 }
1108 }
1109
1110
1111
1112
1113
1114
1115
1116
1117 else if (this.getDocumentHeader().getWorkflowDocument().isDisapproved()) {
1118
1119
1120 String nodeName = getDocumentHeader().getWorkflowDocument().getCurrentNodeNames().iterator().next();
1121 HashMap<String, String> disApprovedStatusMap = PurapConstants.InvoiceStatuses
1122 .getInvoiceAppDocDisapproveStatuses();
1123
1124
1125 if (ObjectUtils.isNotNull(nodeName)) {
1126 String newStatusCode = disApprovedStatusMap.get(nodeName);
1127
1128 if ((StringUtils.isBlank(newStatusCode))
1129 && ((InvoiceStatuses.APPDOC_INITIATE.equals(getApplicationDocumentStatus())) || (InvoiceStatuses.APPDOC_IN_PROCESS
1130 .equals(getApplicationDocumentStatus())))) {
1131 newStatusCode = InvoiceStatuses.APPDOC_CANCELLED_POST_AP_APPROVE;
1132 }
1133 if (StringUtils.isNotBlank(newStatusCode)) {
1134 getAccountsPayableService().cancelAccountsPayableDocument(this, nodeName);
1135 return;
1136 }
1137 }
1138 logAndThrowRuntimeException("No status found to set for document being disapproved in node '" + nodeName + "'");
1139 }
1140
1141 else if (this.getDocumentHeader().getWorkflowDocument().isCanceled()) {
1142
1143
1144
1145 String nodeName = getDocumentHeader().getWorkflowDocument().getCurrentNodeNames().iterator().next();
1146 HashMap<String, String> disApprovedStatusMap = PurapConstants.InvoiceStatuses
1147 .getInvoiceAppDocDisapproveStatuses();
1148 if (ObjectUtils.isNotNull(nodeName)) {
1149
1150 String cancelledStatusCode = disApprovedStatusMap.get(nodeName);
1151 if (StringUtils.isNotBlank(cancelledStatusCode)) {
1152 this.setApplicationDocumentStatus(cancelledStatusCode);
1153 getPurapService().saveDocumentNoValidation(this);
1154 return;
1155 }
1156 }
1157 logAndThrowRuntimeException("No status found to set for document being canceled in node '" + nodeName
1158 + "'");
1159 }
1160 } catch (Exception e) {
1161 logAndThrowRuntimeException("Error saving routing data while saving document with id " + getDocumentNumber(), e);
1162 }
1163 }
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175 public void appSpecificRouteDocumentToUser(WorkflowDocument workflowDocument, String userNetworkId,
1176 String annotation, String responsibility) throws WorkflowException {
1177 if (ObjectUtils.isNotNull(workflowDocument)) {
1178 String annotationNote = (ObjectUtils.isNull(annotation)) ? "" : annotation;
1179 String responsibilityNote = (ObjectUtils.isNull(responsibility)) ? "" : responsibility;
1180 String currentNodeName = getCurrentRouteNodeName(workflowDocument);
1181 Principal principal = getIdentityManagementService().getPrincipalByPrincipalName(userNetworkId);
1182 workflowDocument.adHocToPrincipal(ActionRequestType.FYI, currentNodeName, annotationNote,
1183 principal.getPrincipalId(), responsibilityNote, true);
1184 }
1185 }
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195 protected String getCurrentRouteNodeName(WorkflowDocument wd) throws WorkflowException {
1196
1197 Set<String> nodeNameSet = wd.getNodeNames();
1198 String[] nodeNames = (String[]) nodeNameSet.toArray();
1199
1200 if ((nodeNames == null) || (nodeNames.length == 0)) {
1201 return null;
1202 } else {
1203 return nodeNames[0];
1204 }
1205 }
1206
1207 public BigDecimal getForeignVendorInvoiceAmount() {
1208 return foreignVendorInvoiceAmount;
1209 }
1210
1211 public void setForeignVendorInvoiceAmount(BigDecimal foreignVendorInvoiceAmount) {
1212 this.foreignVendorInvoiceAmount = foreignVendorInvoiceAmount;
1213 }
1214
1215
1216
1217
1218
1219
1220 public String getBibeditorCreateURL() {
1221 String bibeditorCreateURL = getConfigurationService().getPropertyValueAsString(
1222 OLEConstants.BIBEDITOR_CREATE_URL_KEY);
1223 return bibeditorCreateURL;
1224 }
1225
1226
1227
1228
1229
1230
1231 public String getBibeditorEditURL() {
1232 String bibeditorEditURL = getConfigurationService().getPropertyValueAsString(OLEConstants.BIBEDITOR_URL_KEY);
1233 return bibeditorEditURL;
1234 }
1235
1236
1237
1238
1239
1240
1241 public String getBibeditorViewURL() {
1242 String bibeditorViewURL = getConfigurationService().getPropertyValueAsString(OLEConstants.DOCSTORE_APP_URL_KEY);
1243 return bibeditorViewURL;
1244 }
1245
1246
1247
1248
1249
1250
1251 public String getMarcXMLFileDirLocation() throws Exception {
1252 String externaleDirectory = getFileProcessingService().getMarcXMLFileDirLocation();
1253 return externaleDirectory;
1254 }
1255
1256 @Override
1257 public void prepareForSave(KualiDocumentEvent event) {
1258
1259
1260 if (event instanceof AttributedContinuePurapEvent) {
1261 SpringContext.getBean(OleInvoiceService.class).populateInvoice(this);
1262 }
1263 if(this.getVendorPaymentTermsCode() != null && this.getVendorPaymentTermsCode().isEmpty()) {
1264 this.setVendorPaymentTermsCode(null);
1265 }
1266 super.prepareForSave(event);
1267 try {
1268 if (this.proformaIndicator && !this.immediatePaymentIndicator) {
1269 this.setImmediatePaymentIndicator(true);
1270 }
1271 LOG.debug("###########Inside OleInvoiceDocument " + "repareForSave###########");
1272 List<OleInvoiceItem> items = new ArrayList<OleInvoiceItem>();
1273 items = this.getItems();
1274 Iterator iterator = items.iterator();
1275 HashMap dataMap = new HashMap();
1276 String titleId;
1277 while (iterator.hasNext()) {
1278 LOG.debug("###########inside prepareForSave item loop###########");
1279 Object object = iterator.next();
1280 if (object instanceof OleInvoiceItem) {
1281 LOG.debug("###########inside prepareForSave ole payment request item###########");
1282 OleInvoiceItem singleItem = (OleInvoiceItem) object;
1283 if (StringUtils.isNotBlank(this.invoiceCurrencyType)) {
1284 this.setInvoiceCurrencyTypeId(new Long(this.getInvoiceCurrencyType()));
1285 String currencyType = SpringContext.getBean(OleInvoiceService.class).getCurrencyType(this.getInvoiceCurrencyType());
1286 if (StringUtils.isNotBlank(currencyType)) {
1287 if(!currencyType.equalsIgnoreCase(OleSelectConstant.CURRENCY_TYPE_NAME)) {
1288 if (StringUtils.isNotBlank(this.getInvoiceCurrencyExchangeRate())) {
1289 try {
1290 Double.parseDouble(this.getInvoiceCurrencyExchangeRate());
1291 singleItem.setItemExchangeRate(new KualiDecimal(this.getInvoiceCurrencyExchangeRate()));
1292 singleItem.setExchangeRate(this.getInvoiceCurrencyExchangeRate());
1293 }
1294 catch (NumberFormatException nfe) {
1295 throw new RuntimeException("Invalid Exchange Rate", nfe);
1296 }
1297 } else {
1298 BigDecimal exchangeRate = SpringContext.getBean(OleInvoiceService.class).getExchangeRate(this.getInvoiceCurrencyType()).getExchangeRate();
1299 this.setInvoiceCurrencyExchangeRate(exchangeRate.toString());
1300 singleItem.setItemExchangeRate(new KualiDecimal(exchangeRate));
1301 singleItem.setExchangeRate(exchangeRate.toString());
1302 }
1303 this.setVendorInvoiceAmount(this.getForeignVendorInvoiceAmount() != null ?
1304 new KualiDecimal(this.getForeignVendorInvoiceAmount().divide(new BigDecimal(singleItem.getExchangeRate()), 4, RoundingMode.HALF_UP)) : null);
1305 }
1306 }
1307 }
1308 setItemDescription(singleItem);
1309 Map<String, String> copyCriteria = new HashMap<String, String>();
1310 if (singleItem.getPaidCopies().size() <= 0 && singleItem.getPoItemIdentifier() != null && (this.getPurapDocumentIdentifier() != null && singleItem.getItemIdentifier() != null)) {
1311 copyCriteria.put("poItemId", singleItem.getPoItemIdentifier().toString());
1312 List<OleCopy> copies = (List<OleCopy>) getBusinessObjectService().findMatching(OleCopy.class, copyCriteria);
1313 if (copies.size() > 0) {
1314 List<OLEPaidCopy> paidCopies = new ArrayList<OLEPaidCopy>();
1315 for (OleCopy copy : copies) {
1316 OLEPaidCopy paidCopy = new OLEPaidCopy();
1317 paidCopy.setCopyId(copy.getCopyId());
1318 paidCopy.setInvoiceItemId(this.getPurapDocumentIdentifier());
1319 paidCopy.setInvoiceIdentifier(singleItem.getItemIdentifier());
1320
1321 paidCopies.add(paidCopy);
1322 }
1323 getBusinessObjectService().save(paidCopies);
1324 singleItem.setPaidCopies(paidCopies);
1325 }
1326 }
1327 }
1328 }
1329 } catch (Exception e) {
1330 LOG.error("Exception during prepareForSave() in OleInvoiceDocument", e);
1331 throw new RuntimeException(e);
1332 }
1333 }
1334
1335
1336
1337
1338
1339
1340
1341
1342
1343
1344
1345
1346
1347
1348
1349
1350
1351
1352
1353
1354
1355
1356
1357
1358
1359
1360
1361
1362
1363
1364
1365
1366
1367
1368
1369
1370
1371
1372
1373
1374
1375
1376
1377
1378
1379
1380
1381
1382
1383
1384
1385
1386
1387
1388
1389
1390
1391
1392
1393
1394
1395
1396
1397
1398
1399
1400
1401
1402
1403
1404
1405
1406
1407
1408
1409
1410
1411
1412
1413
1414
1415
1416
1417
1418
1419
1420
1421
1422
1423
1424
1425
1426
1427
1428
1429
1430
1431
1432
1433
1434
1435 public boolean getIsSaved() {
1436 if (this.getDocumentHeader().getWorkflowDocument().isSaved()
1437 || this.getDocumentHeader().getWorkflowDocument().isInitiated()) {
1438 return true;
1439 }
1440 return false;
1441 }
1442
1443 private void setItemDescription(OleInvoiceItem singleItem) throws Exception {
1444 if (singleItem.getOleOrderRecord() != null) {
1445 Map<String, ?> bibAssociatedFieldValuesMap = singleItem.getOleOrderRecord().getOleBibRecord().getBibAssociatedFieldsValueMap();
1446 List titleList = (List) bibAssociatedFieldValuesMap.get("Title_search");
1447 String title = titleList != null && !titleList.isEmpty() ? (String) (titleList).get(0) : null;
1448 List authorList = (List) bibAssociatedFieldValuesMap.get("Author_search");
1449 String author = authorList != null && !authorList.isEmpty() ? (String) (authorList).get(0) : null;
1450 List publisherList = (List) bibAssociatedFieldValuesMap.get("Publisher_search");
1451 String publisher = publisherList != null && !publisherList.isEmpty() ? (String) (publisherList).get(0) : null;
1452 List isbnList = (List) bibAssociatedFieldValuesMap.get("020a");
1453 String isbn = isbnList != null && !isbnList.isEmpty() ? (String) (isbnList).get(0) : null;
1454
1455 singleItem.setBibUUID(singleItem.getOleOrderRecord().getOleBibRecord().getBibUUID());
1456 singleItem.setItemDescription(title + "," + author + "," + publisher + "," + isbn);
1457 }
1458 }
1459
1460 public String getProrateBy() {
1461 return prorateBy;
1462 }
1463
1464 public void setProrateBy(String prorateBy) {
1465 this.prorateBy = prorateBy;
1466 }
1467
1468
1469
1470
1471
1472
1473 public boolean isProformaIndicator() {
1474 return proformaIndicator;
1475 }
1476
1477
1478
1479
1480
1481
1482
1483 public void setProformaIndicator(boolean proformaIndicator) {
1484 this.proformaIndicator = proformaIndicator;
1485 }
1486
1487
1488
1489
1490
1491
1492 @Override
1493 protected boolean shouldWaitForReceiving() {
1494
1495 Boolean invReceiveInd = false;
1496
1497 for (OleInvoiceItem invoiceItem : (List<OleInvoiceItem>) this.getItems()) {
1498 if (invoiceItem.isReceivingDocumentRequiredIndicator()) {
1499 invReceiveInd = true;
1500 break;
1501 }
1502 }
1503
1504
1505 if (invReceiveInd && !this.proformaIndicator) {
1506 return !isReceivingRequirementMet();
1507 }
1508
1509
1510 return false;
1511 }
1512
1513
1514
1515
1516
1517
1518 @Override
1519 public boolean answerSplitNodeQuestion(String nodeName) throws UnsupportedOperationException {
1520 if (nodeName.equals(OLEConstants.HAS_VENDOR_DEPOSIT_ACCOUNT)) {
1521 return hasVendorDepositAccount();
1522 }
1523 if (nodeName.equals(OLEConstants.OleInvoice.HAS_INVOICE_TYPE)) {
1524 return hasInvoiceType();
1525 }
1526 if (nodeName.equals(OLEConstants.OleInvoice.HAS_PREPAID_INVOICE_TYPE)) {
1527 return hasPrepaidInvoiceType();
1528 }
1529 if (nodeName.equals(OLEConstants.OleInvoice.HAS_PAYMENT_METHOD)) {
1530 return hasPaymentMethod();
1531 }
1532 if (nodeName.equals(PurapWorkflowConstants.BUDGET_REVIEW_REQUIRED)) {
1533 return isBudgetReviewRequired();
1534 }
1535 if (nodeName.equals(PurapWorkflowConstants.REQUIRES_IMAGE_ATTACHMENT)) {
1536 return requiresAccountsPayableReviewRouting();
1537 }
1538 if (nodeName.equals(PurapWorkflowConstants.PURCHASE_WAS_RECEIVED)) {
1539 return shouldWaitForReceiving();
1540 }
1541 if (nodeName.equals(PurapWorkflowConstants.VENDOR_IS_EMPLOYEE_OR_NON_RESIDENT_ALIEN)) {
1542 return isVendorEmployeeOrNonResidentAlien();
1543 }
1544 if (nodeName.equals(OLEConstants.REQUIRES_SEPARATION_OF_DUTIES)) {
1545 return isSeparationOfDutiesReviewRequired();
1546 }
1547
1548 if (nodeName.equals(PurapWorkflowConstants.NOTIFY_BUDGET_REVIEW)) {
1549 return isNotificationRequired();
1550 }
1551 throw new UnsupportedOperationException("Cannot answer split question for this node you call \"" + nodeName + "\"");
1552 }
1553
1554 private boolean hasInvoiceType() {
1555 if (this.getInvoiceTypeId() != null) {
1556 return true;
1557 }
1558 return false;
1559 }
1560
1561 private boolean hasVendorDepositAccount() {
1562 if (this.getPaymentMethodIdentifier() != null) {
1563 String paymentType = SpringContext.getBean(OleInvoiceService.class).getPaymentMethodType(this.getPaymentMethodIdentifier());
1564 if (paymentType.equals("Deposit")) {
1565 return true;
1566 }
1567 }
1568 return false;
1569 }
1570
1571 private boolean hasPrepaidInvoiceType() {
1572 if (this.getInvoiceTypeId() != null) {
1573 Map<String, String> invoiceMap = new HashMap<String, String>();
1574 invoiceMap.put("invoiceTypeId", this.getInvoiceTypeId().toString());
1575 OleInvoiceType invoiceType = this.getBusinessObjectService().findByPrimaryKey(OleInvoiceType.class,
1576 invoiceMap);
1577 if (invoiceType != null &&
1578 invoiceType.getInvoiceType().equals("Prepay") ||
1579 invoiceType.getInvoiceType().equals("Deposit")) {
1580 return true;
1581 }
1582 }
1583 return false;
1584 }
1585
1586 private boolean hasPaymentMethod() {
1587 if (this.getPaymentMethodId() != null) {
1588 return true;
1589 }
1590 return false;
1591 }
1592
1593 public Set<Person> getAllPriorApprovers() throws WorkflowException {
1594 PersonService personService = KimApiServiceLocator.getPersonService();
1595 List<ActionTaken> actionsTaken = getDocumentHeader().getWorkflowDocument().getActionsTaken();
1596 Set<String> principalIds = new HashSet<String>();
1597 Set<Person> persons = new HashSet<Person>();
1598
1599 for (ActionTaken actionTaken : actionsTaken) {
1600 if (KewApiConstants.ACTION_TAKEN_APPROVED_CD.equals(actionTaken.getActionTaken())) {
1601 String principalId = actionTaken.getPrincipalId();
1602 if (!principalIds.contains(principalId)) {
1603 principalIds.add(principalId);
1604 persons.add(personService.getPerson(principalId));
1605 }
1606 }
1607 }
1608 return persons;
1609 }
1610
1611 protected boolean isSeparationOfDutiesReviewRequired() {
1612 try {
1613 Set<Person> priorApprovers = getAllPriorApprovers();
1614
1615
1616 String initiatorPrincipalId = getDocumentHeader().getWorkflowDocument().getInitiatorPrincipalId();
1617 Person initiator = SpringContext.getBean(PersonService.class).getPerson(initiatorPrincipalId);
1618
1619 boolean priorApproverIsInitiator = priorApprovers.contains(initiator);
1620 boolean onlyOneApprover = (priorApprovers.size() == 1);
1621 if (priorApproverIsInitiator && onlyOneApprover) {
1622 return true;
1623 }
1624
1625
1626
1627 if (priorApprovers.size() > 0) {
1628 return false;
1629 }
1630 } catch (WorkflowException we) {
1631 LOG.error("Exception while attempting to retrieve all prior approvers from workflow: " + we);
1632 }
1633 return false;
1634 }
1635
1636 public boolean isBudgetReviewRequired() {
1637
1638 OleInvoiceFundCheckServiceImpl oleInvoiceFundCheckServiceImpl = new OleInvoiceFundCheckServiceImpl();
1639 boolean required = false;
1640 if ((SpringContext.getBean(OleInvoiceService.class).getPaymentMethodType(this.getPaymentMethodIdentifier())).equals(OLEConstants.DEPOSIT)) {
1641 return false;
1642 }
1643
1644 if (SpringContext.getBean(UniversityDateService.class).getCurrentFiscalYear().compareTo(getPostingYear()) >= 0) {
1645 List<SourceAccountingLine> sourceAccountingLineList = this.getSourceAccountingLines();
1646 for (SourceAccountingLine accLine : sourceAccountingLineList) {
1647 String chart = accLine.getAccount().getChartOfAccountsCode();
1648 String account = accLine.getAccount().getAccountNumber();
1649 String sfCode = accLine.getAccount().getAccountSufficientFundsCode();
1650 Map<String, Object> key = new HashMap<String, Object>();
1651 key.put(OLEPropertyConstants.CHART_OF_ACCOUNTS_CODE, chart);
1652 key.put(OLEPropertyConstants.ACCOUNT_NUMBER, account);
1653 OleSufficientFundCheck oleSufficientFundCheck = businessObjectService.findByPrimaryKey(
1654 OleSufficientFundCheck.class, key);
1655
1656
1657
1658
1659 SpringContext.getBean(GeneralLedgerPendingEntryService.class).generateGeneralLedgerPendingEntries(this);
1660 SpringContext.getBean(BusinessObjectService.class).save(getGeneralLedgerPendingEntries());
1661
1662 if (oleSufficientFundCheck != null) {
1663 String option = oleSufficientFundCheck.getNotificationOption() != null ? oleSufficientFundCheck
1664 .getNotificationOption() : "";
1665 if (option.equals(OLEPropertyConstants.BUD_REVIEW)) {
1666
1667
1668
1669
1670
1671
1672
1673 required = oleInvoiceFundCheckServiceImpl.hasSufficientFundCheckRequired(accLine);
1674 SpringContext.getBean(GeneralLedgerPendingEntryService.class).delete(getDocumentNumber());
1675
1676 return required;
1677 }
1678 }
1679 }
1680 }
1681 SpringContext.getBean(GeneralLedgerPendingEntryService.class).delete(getDocumentNumber());
1682
1683 return required;
1684
1685
1686
1687
1688
1689
1690
1691
1692
1693
1694
1695
1696
1697
1698
1699
1700
1701
1702
1703
1704
1705 }
1706
1707 private boolean isNotificationRequired() {
1708 OleInvoiceFundCheckServiceImpl oleInvoiceFundCheckServiceImpl = new OleInvoiceFundCheckServiceImpl();
1709 if ((SpringContext.getBean(OleInvoiceService.class).getPaymentMethodType(this.getPaymentMethodIdentifier())).equals(OLEConstants.DEPOSIT)) {
1710 return false;
1711 }
1712 List<SourceAccountingLine> sourceAccountingLineList = this.getSourceAccountingLines();
1713 boolean sufficientFundCheck = false;
1714 for (SourceAccountingLine accLine : sourceAccountingLineList) {
1715 Map searchMap = new HashMap();
1716 String notificationOption = null;
1717 Map<String, Object> key = new HashMap<String, Object>();
1718 String chartCode = accLine.getChartOfAccountsCode();
1719 String accNo = accLine.getAccountNumber();
1720 String objectCd = accLine.getFinancialObjectCode();
1721 key.put(OLEPropertyConstants.CHART_OF_ACCOUNTS_CODE, chartCode);
1722 key.put(OLEPropertyConstants.ACCOUNT_NUMBER, accNo);
1723 OleSufficientFundCheck account = SpringContext.getBean(BusinessObjectService.class).findByPrimaryKey(
1724 OleSufficientFundCheck.class, key);
1725 if (account != null) {
1726 notificationOption = account.getNotificationOption();
1727 }
1728 if (notificationOption != null && notificationOption.equals(OLEPropertyConstants.NOTIFICATION)) {
1729 sufficientFundCheck = oleInvoiceFundCheckServiceImpl.hasSufficientFundCheckRequired(accLine);
1730 return sufficientFundCheck;
1731 }
1732 }
1733 return sufficientFundCheck;
1734 }
1735
1736 @Override
1737 protected void populateAccountsForRouting() {
1738
1739
1740 List<SufficientFundsItem> fundsItems = new ArrayList<SufficientFundsItem>();
1741 try {
1742
1743
1744 String nodeName = getFinancialSystemDocumentHeader().getWorkflowDocument().getCurrentNodeNames().iterator()
1745 .next();
1746 if (nodeName != null
1747 && (nodeName.equalsIgnoreCase(PurapWorkflowConstants.BUDGET_NODE) || nodeName
1748 .equalsIgnoreCase(PurapWorkflowConstants.BUDGET_REVIEW_REQUIRED))) {
1749 if (SpringContext.getBean(UniversityDateService.class).getCurrentFiscalYear()
1750 .compareTo(getPostingYear()) >= 0) {
1751
1752 SpringContext.getBean(GeneralLedgerPendingEntryService.class).generateGeneralLedgerPendingEntries(
1753 this);
1754 SpringContext.getBean(BusinessObjectService.class).save(getGeneralLedgerPendingEntries());
1755
1756 List<GeneralLedgerPendingEntry> pendingEntries = getPendingLedgerEntriesForSufficientFundsChecking();
1757 for (GeneralLedgerPendingEntry glpe : pendingEntries) {
1758 glpe.getChartOfAccountsCode();
1759 }
1760
1761 fundsItems = SpringContext.getBean(SufficientFundsService.class).checkSufficientFundsForInvoice(pendingEntries);
1762
1763
1764
1765
1766
1767
1768
1769
1770
1771
1772 }
1773 SpringContext.getBean(PurapAccountingService.class).updateAccountAmounts(this);
1774 if (accountsForRouting == null) {
1775 accountsForRouting = (SpringContext.getBean(PurapAccountingService.class).generateSummary(getItems()));
1776 }
1777 String documentFiscalYearString = this.getPostingYear().toString();
1778 List<String> fundsItemList = new ArrayList<String>();
1779 for (SufficientFundsItem fundsItem : fundsItems) {
1780 fundsItemList.add(fundsItem.getAccount().getChartOfAccountsCode());
1781 }
1782 if (accountsForRouting != null) {
1783 for (Iterator accountsForRoutingIter = accountsForRouting.iterator(); accountsForRoutingIter.hasNext(); ) {
1784 if (!(fundsItemList.contains(((SourceAccountingLine) accountsForRoutingIter.next())
1785 .getChartOfAccountsCode()))) {
1786 accountsForRoutingIter.remove();
1787 }
1788 }
1789
1790
1791 setAccountsForRouting(accountsForRouting);
1792 }
1793
1794
1795
1796 refreshNonUpdateableReferences();
1797 for (SourceAccountingLine sourceLine : getAccountsForRouting()) {
1798 sourceLine.refreshNonUpdateableReferences();
1799 }
1800 } else {
1801 super.populateAccountsForRouting();
1802 }
1803 SpringContext.getBean(GeneralLedgerPendingEntryService.class).delete(getDocumentNumber());
1804 } catch (Exception e) {
1805 logAndThrowRuntimeException("Error in populateAccountsForRouting while submitting document with id "
1806 + getDocumentNumber(), e);
1807 }
1808
1809 }
1810
1811
1812
1813
1814 @Override
1815 public void doRouteLevelChange(DocumentRouteLevelChange levelChangeEvent) {
1816
1817 super.doRouteLevelChange(levelChangeEvent);
1818 try {
1819 String newNodeName = levelChangeEvent.getNewNodeName();
1820 List<String> desiredActions = new ArrayList<String>(2);
1821 RoutingReportCriteria.Builder reportCriteria = RoutingReportCriteria.Builder
1822 .createByDocumentIdAndTargetNodeName(getDocumentNumber(), newNodeName);
1823 desiredActions.add(ActionRequestType.APPROVE.getCode());
1824 desiredActions.add(ActionRequestType.FYI.getCode());
1825 desiredActions.add(ActionRequestType.COMPLETE.getCode());
1826 if (KewApiServiceLocator.getWorkflowDocumentActionsService().documentWillHaveAtLeastOneActionRequest(
1827 reportCriteria.build(), desiredActions, false)) {
1828 if (StringUtils.isNotBlank(newNodeName)) {
1829 if (StringUtils.isNotBlank(newNodeName)) {
1830 if (newNodeName.equalsIgnoreCase(PurapWorkflowConstants.BUDGET_NODE)
1831 || newNodeName.equalsIgnoreCase(PurapWorkflowConstants.FYI_BUDGET)) {
1832 String note = "";
1833 if (newNodeName.equalsIgnoreCase(PurapWorkflowConstants.BUDGET_NODE)) {
1834 note = OLEConstants.SufficientFundCheck.INV_NOTE;
1835 }
1836 if (newNodeName.equalsIgnoreCase(PurapWorkflowConstants.FYI_BUDGET)) {
1837 note = OLEConstants.SufficientFundCheck.FYI_NOTE;
1838 }
1839 DocumentService documentService = SpringContext.getBean(DocumentService.class);
1840 Note apoNote = documentService.createNoteFromDocument(this, note);
1841 this.addNote(apoNote);
1842 documentService.saveDocumentNotes(this);
1843 }
1844 }
1845 }
1846 }
1847 } catch (Exception e) {
1848 String errorMsg = "Workflow Error found checking actions requests on document with id "
1849 + getDocumentNumber() + ". *** WILL NOT UPDATE PURAP STATUS ***";
1850 LOG.error(errorMsg, e);
1851 }
1852 }
1853
1854 private OleInvoiceDocument invoiceDocumentObject;
1855
1856 public OleInvoiceDocument getInvoiceDocumentObject() {
1857 return invoiceDocumentObject;
1858 }
1859
1860 public void setInvoiceDocumentObject(OleInvoiceDocument invoiceDocumentObject) {
1861 this.invoiceDocumentObject = invoiceDocumentObject;
1862 }
1863
1864
1865 private String invoiceNumber;
1866
1867 private String invoicePaymentClassification;
1868 private String invoiceVendorAmount;
1869 private String invoiceExtractDate;
1870 private String invoiceProcessedDate;
1871 private String invoiceType;
1872 private String invoiceSubType;
1873 private String invoiceBankCode;
1874
1875 private String invoicePayDateCheck;
1876 private String vendorAmount;
1877 private String itemTotal;
1878 private String foreignItemTotal;
1879 private String grantTotal;
1880 private String foreignGrandTotal;
1881
1882 private String invoicedForeignItemTotal;
1883 private String invoicedForeignGrandTotal;
1884
1885 public String getInvoicePayDateCheck() {
1886 return invoicePayDateCheck;
1887 }
1888
1889 public void setInvoicePayDateCheck(String invoicePayDateCheck) {
1890 this.invoicePayDateCheck = invoicePayDateCheck;
1891 }
1892
1893
1894 public String getInvoiceNumber() {
1895 return invoiceNumber;
1896 }
1897
1898 public void setInvoiceNumber(String invoiceNumber) {
1899 this.invoiceNumber = invoiceNumber;
1900 }
1901
1902
1903 public String getInvoicePaymentClassification() {
1904 return invoicePaymentClassification;
1905 }
1906
1907 public void setInvoicePaymentClassification(String invoicePaymentClassification) {
1908 this.invoicePaymentClassification = invoicePaymentClassification;
1909 }
1910
1911 public String getInvoiceVendorAmount() {
1912 return invoiceVendorAmount;
1913 }
1914
1915 public void setInvoiceVendorAmount(String invoiceVendorAmount) {
1916 this.invoiceVendorAmount = invoiceVendorAmount;
1917 }
1918
1919 public String getInvoiceExtractDate() {
1920 return invoiceExtractDate;
1921 }
1922
1923 public void setInvoiceExtractDate(String invoiceExtractDate) {
1924 this.invoiceExtractDate = invoiceExtractDate;
1925 }
1926
1927 public String getInvoiceProcessedDate() {
1928 return invoiceProcessedDate;
1929 }
1930
1931 public void setInvoiceProcessedDate(String invoiceProcessedDate) {
1932 this.invoiceProcessedDate = invoiceProcessedDate;
1933 }
1934
1935 public String getInvoiceBankCode() {
1936 return invoiceBankCode;
1937 }
1938
1939 public void setInvoiceBankCode(String invoiceBankCode) {
1940 this.invoiceBankCode = invoiceBankCode;
1941 }
1942
1943
1944 private String poId;
1945
1946 public String getPoId() {
1947 return poId;
1948 }
1949
1950 public void setPoId(String poId) {
1951 this.poId = poId;
1952 }
1953
1954
1955 public String getInvoiceCostSourceCode() {
1956 return invoiceCostSourceCode;
1957 }
1958
1959 public void setInvoiceCostSourceCode(String invoiceCostSourceCode) {
1960 this.invoiceCostSourceCode = invoiceCostSourceCode;
1961 }
1962
1963 public Integer getVendorHeaderGeneratedIdentifier() {
1964 return vendorHeaderGeneratedIdentifier;
1965 }
1966
1967 public void setVendorHeaderGeneratedIdentifier(Integer vendorHeaderGeneratedIdentifier) {
1968 this.vendorHeaderGeneratedIdentifier = vendorHeaderGeneratedIdentifier;
1969 }
1970
1971 public List<SummaryAccount> getSummaryAccounts() {
1972 if (summaryAccounts == null) {
1973 refreshAccountSummmary();
1974 }
1975 return summaryAccounts;
1976 }
1977
1978 public void setSummaryAccounts(List<SummaryAccount> summaryAccounts) {
1979 this.summaryAccounts = summaryAccounts;
1980 }
1981
1982 public void clearSummaryAccounts() {
1983 summaryAccounts = new ArrayList<SummaryAccount>();
1984 }
1985
1986
1987
1988
1989
1990 public void refreshAccountSummmary() {
1991 clearSummaryAccounts();
1992 summaryAccounts.addAll(SpringContext.getBean(PurapAccountingService.class).generateSummaryAccounts(this));
1993 }
1994
1995 public boolean isSfcFlag() {
1996 return sfcFlag;
1997 }
1998
1999 public void setSfcFlag(boolean sfcFlag) {
2000 this.sfcFlag = sfcFlag;
2001 }
2002
2003 public String getInvoiceItemTotal() {
2004
2005 BigDecimal addChargeItem = BigDecimal.ZERO;
2006 List<OleInvoiceItem> item = this.getItems();
2007 for (OleInvoiceItem invoiceditem : item) {
2008 if (invoiceditem.getItemType().isAdditionalChargeIndicator() && invoiceditem.getExtendedPrice() != null) {
2009 addChargeItem = addChargeItem.add(invoiceditem.getExtendedPrice().bigDecimalValue());
2010 }
2011 }
2012 return (this.getTotalDollarAmount().subtract(new KualiDecimal(addChargeItem)).toString());
2013
2014
2015
2016 }
2017
2018 public void setInvoiceItemTotal(String invoiceItemTotal) {
2019 this.invoiceItemTotal = invoiceItemTotal;
2020 }
2021
2022 public String getInvoiceForeignItemTotal() {
2023 BigDecimal addChargeItem = BigDecimal.ZERO;
2024 List<OleInvoiceItem> item = this.getItems();
2025 for (OleInvoiceItem invoicedItem : item) {
2026 if (invoicedItem.getItemType().isAdditionalChargeIndicator() && invoicedItem.getItemUnitPrice() != null) {
2027 addChargeItem = addChargeItem.add(invoicedItem.getItemUnitPrice());
2028 }
2029 }
2030 return (this.getTotalDollarAmount().subtract(new KualiDecimal(addChargeItem)).toString());
2031 }
2032
2033 public void setInvoiceForeignItemTotal(String invoiceForeignItemTotal) {
2034 this.invoiceForeignItemTotal = invoiceForeignItemTotal;
2035 }
2036
2037 public String getVendorAmount() {
2038 if (vendorAmount != null && !vendorAmount.isEmpty()) {
2039 return vendorAmount;
2040 } else {
2041 vendorAmount = this.getInvoiceAmount();
2042 if (vendorAmount != null && vendorAmount.contains("-")) {
2043 vendorAmount = vendorAmount.replace("-", "");
2044 vendorAmount = "(" + vendorAmount + ")";
2045 }
2046 return vendorAmount;
2047 }
2048 }
2049
2050 public void setVendorAmount(String vendorAmount) {
2051 this.vendorAmount = vendorAmount;
2052 if (vendorAmount.contains("(") || vendorAmount.contains(")")) {
2053 vendorAmount = vendorAmount.replace("(", "");
2054 vendorAmount = vendorAmount.replace(")", "");
2055 vendorAmount = "-" + vendorAmount;
2056 this.vendorAmount = vendorAmount;
2057 }
2058 if (vendorAmount != null && new KualiDecimal(vendorAmount).isLessThan(KualiDecimal.ZERO)) {
2059 this.setInvoiceAmount(vendorAmount);
2060 vendorAmount = vendorAmount.replace("-", "");
2061 vendorAmount = "(" + vendorAmount + ")";
2062 this.vendorAmount = vendorAmount;
2063 } else {
2064 this.setInvoiceAmount(vendorAmount);
2065 this.vendorAmount = vendorAmount;
2066 }
2067 }
2068
2069 public String getForeignVendorAmount() {
2070 if (foreignVendorAmount != null && !foreignVendorAmount.isEmpty()) {
2071 return foreignVendorAmount;
2072 } else {
2073 foreignVendorAmount = this.getForeignVendorInvoiceAmount() != null ? this.getForeignVendorInvoiceAmount().toString() : null;
2074 if (foreignVendorAmount != null && foreignVendorAmount.contains("-")) {
2075 foreignVendorAmount = foreignVendorAmount.replace("-", "");
2076 foreignVendorAmount = "(" + foreignVendorAmount + ")";
2077 }
2078 return foreignVendorAmount;
2079 }
2080 }
2081
2082 public void setForeignVendorAmount(String foreignVendorAmount) {
2083 this.foreignVendorAmount = foreignVendorAmount;
2084 if (foreignVendorAmount.contains("(") || foreignVendorAmount.contains(")")) {
2085 foreignVendorAmount = foreignVendorAmount.replace("(", "");
2086 foreignVendorAmount = foreignVendorAmount.replace(")", "");
2087 foreignVendorAmount = "-" + foreignVendorAmount;
2088 this.foreignVendorAmount = foreignVendorAmount;
2089 }
2090 if (foreignVendorAmount != null && new KualiDecimal(foreignVendorAmount).isLessThan(KualiDecimal.ZERO)) {
2091 this.setForeignInvoiceAmount(foreignVendorAmount);
2092 foreignVendorAmount = foreignVendorAmount.replace("-", "");
2093 foreignVendorAmount = "(" + foreignVendorAmount + ")";
2094 this.foreignVendorAmount = foreignVendorAmount;
2095 } else {
2096 this.setForeignInvoiceAmount(foreignVendorAmount);
2097 this.foreignVendorAmount = foreignVendorAmount;
2098 }
2099 }
2100
2101 public String getForeignInvoiceAmount() {
2102 return foreignInvoiceAmount;
2103 }
2104
2105 public void setForeignInvoiceAmount(String foreignInvoiceAmount) {
2106 this.foreignInvoiceAmount = foreignInvoiceAmount;
2107 }
2108
2109 public String getInvoiceAmount() {
2110 return invoiceAmount;
2111 }
2112
2113 public void setInvoiceAmount(String invoiceAmount) {
2114 this.invoiceAmount = invoiceAmount;
2115 }
2116
2117 public boolean isBaSfcFlag() {
2118 return baSfcFlag;
2119 }
2120
2121 public void setBaSfcFlag(boolean baSfcFlag) {
2122 this.baSfcFlag = baSfcFlag;
2123 }
2124
2125
2126
2127
2128
2129
2130
2131
2132 protected KualiDecimal getInvoicedTotalWithAllItems(boolean includeBelowTheLine, List<OleInvoiceItem> itemsForTotal) {
2133
2134 BigDecimal total = BigDecimal.ZERO;
2135 for (OleInvoiceItem item : itemsForTotal) {
2136 item.refreshReferenceObject(PurapPropertyConstants.ITEM_TYPE);
2137 ItemType it = item.getItemType();
2138 if (includeBelowTheLine || it.isLineItemIndicator()) {
2139 BigDecimal totalAmount = item.getTotalAmount().bigDecimalValue();
2140 BigDecimal itemTotal = (totalAmount != null) ? totalAmount : BigDecimal.ZERO;
2141 if (item.isDebitItem()) {
2142 total = total.add(itemTotal);
2143 } else {
2144 total = total.subtract(itemTotal);
2145 }
2146
2147
2148
2149 }
2150 }
2151 return new KualiDecimal(total);
2152 }
2153
2154 protected KualiDecimal getInvoicedForeignTotalWithAllItems(boolean includeBelowTheLine, List<OleInvoiceItem> itemsForTotal) {
2155
2156 KualiDecimal total = new KualiDecimal(BigDecimal.ZERO);
2157 for (OleInvoiceItem item : itemsForTotal) {
2158 item.refreshReferenceObject(PurapPropertyConstants.ITEM_TYPE);
2159 ItemType it = item.getItemType();
2160 if (includeBelowTheLine || it.isLineItemIndicator()) {
2161 KualiDecimal totalAmount = item.getForeignTotalAmount();
2162 KualiDecimal itemTotal = (totalAmount != null) ? totalAmount : KualiDecimal.ZERO;
2163 if (item.isDebitItem()) {
2164 total = total.add(itemTotal);
2165 } else {
2166 total = total.subtract(itemTotal);
2167 }
2168 }
2169 }
2170 return total;
2171 }
2172
2173 public String getInvoicedItemTotal() {
2174 KualiDecimal total = getInvoicedTotalWithAllItems(false, this.getItems());
2175 if (this.isItemSign()) {
2176 if (total.isLessThan(KualiDecimal.ZERO)) {
2177 total = total;
2178 }
2179 }
2180 return total != null ? total.toString() : "0";
2181 }
2182
2183 public void setInvoicedItemTotal(String invoicedItemTotal) {
2184 this.invoicedItemTotal = invoicedItemTotal;
2185 }
2186
2187 public String getInvoicedForeignItemTotal() {
2188 KualiDecimal foreignItemTotal = getInvoicedForeignTotalWithAllItems(false, this.getItems());
2189
2190
2191
2192
2193
2194 return foreignItemTotal != null ? foreignItemTotal.toString() : "0";
2195 }
2196
2197 public void setInvoicedForeignItemTotal(String invoicedForeignItemTotal) {
2198 this.invoicedForeignItemTotal = invoicedForeignItemTotal;
2199 }
2200
2201 public String getItemTotal() {
2202 if(!this.isDbRetrieval()){
2203 itemTotal = this.getInvoicedItemTotal();
2204 }
2205 if (itemTotal != null && !itemTotal.contains("(")
2206 && new KualiDecimal(itemTotal).isLessThan(KualiDecimal.ZERO)) {
2207 itemTotal = itemTotal.replace("-", "");
2208 itemTotal = "(" + itemTotal + ")";
2209 }
2210 return itemTotal;
2211 }
2212
2213 public void setItemTotal(String itemTotal) {
2214 this.itemTotal = itemTotal;
2215 }
2216
2217 public String getForeignItemTotal() {
2218 if(!this.isDbRetrieval()){
2219 foreignItemTotal = this.getInvoicedForeignItemTotal();
2220 }
2221 if (foreignItemTotal != null && !foreignItemTotal.contains("(")
2222 && new KualiDecimal(foreignItemTotal).isLessThan(KualiDecimal.ZERO)) {
2223 foreignItemTotal = foreignItemTotal.replace("-", "");
2224 foreignItemTotal = "(" + foreignItemTotal + ")";
2225 }
2226 return foreignItemTotal;
2227 }
2228
2229 public void setForeignItemTotal(String foreignItemTotal) {
2230 this.foreignItemTotal = foreignItemTotal;
2231 }
2232
2233 public String getGrantTotal() {
2234 if(!this.isDbRetrieval()){
2235 grantTotal = this.getInvoicedGrandTotal();
2236 }
2237 if (grantTotal != null && !grantTotal.contains("(")
2238 && new KualiDecimal(grantTotal).isLessThan(KualiDecimal.ZERO)) {
2239 grantTotal = grantTotal.replace("-", "");
2240 grantTotal = "(" + grantTotal + ")";
2241 }
2242 return grantTotal;
2243 }
2244
2245 public void setGrantTotal(String grantTotal) {
2246 this.grantTotal = grantTotal;
2247 }
2248
2249 public String getForeignGrandTotal() {
2250 if(!this.isDbRetrieval()){
2251 foreignGrandTotal = this.getInvoicedForeignGrandTotal();
2252 }
2253 if (foreignGrandTotal != null && !foreignGrandTotal.contains("(")
2254 && new KualiDecimal(foreignGrandTotal).isLessThan(KualiDecimal.ZERO)) {
2255 foreignGrandTotal = foreignGrandTotal.replace("-", "");
2256 foreignGrandTotal = "(" + foreignGrandTotal + ")";
2257 }
2258 return foreignGrandTotal;
2259 }
2260
2261 public void setForeignGrandTotal(String foreignGrandTotal) {
2262 this.foreignGrandTotal = foreignGrandTotal;
2263 }
2264
2265 public String getInvoicedGrandTotal() {
2266 KualiDecimal total = getInvoicedTotalWithAllItems(true, this.getItems());
2267
2268
2269
2270
2271
2272 return total != null ? total.toString() : "0";
2273 }
2274
2275 public void setInvoicedGrandTotal(String invoicedGrandTotal) {
2276 this.invoicedGrandTotal = invoicedGrandTotal;
2277 }
2278
2279 public String getInvoicedForeignGrandTotal() {
2280 KualiDecimal total = getInvoicedForeignTotalWithAllItems(true, this.getItems());
2281
2282
2283
2284
2285
2286 for (OleInvoiceItem item : (List<OleInvoiceItem>)this.getItems()) {
2287 if (!item.getItemType().getItemTypeCode().equalsIgnoreCase(PurapConstants.ItemTypeCodes.ITEM_TYPE_ITEM_CODE)
2288 && item.getAdditionalForeignUnitCost() != null) {
2289 total = total.add(new KualiDecimal(item.getAdditionalForeignUnitCost()));
2290 }
2291 else if (!item.getItemType().getItemTypeCode().equalsIgnoreCase(PurapConstants.ItemTypeCodes.ITEM_TYPE_ITEM_CODE)
2292 && item.getItemForeignUnitCost() != null) {
2293 total = total.add(item.getItemForeignUnitCost());
2294 }
2295 }
2296
2297 return total != null ? total.toString() : "0";
2298 }
2299 public void setInvoicedForeignGrandTotal(String invoicedForeignGrandTotal) {
2300 this.invoicedForeignGrandTotal = invoicedForeignGrandTotal;
2301 }
2302
2303 public boolean isValidationFlag() {
2304 return validationFlag;
2305 }
2306
2307 public void setValidationFlag(boolean validationFlag) {
2308 this.validationFlag = validationFlag;
2309 }
2310
2311 public boolean isBlanketApproveValidationFlag() {
2312 return blanketApproveValidationFlag;
2313 }
2314
2315 public void setBlanketApproveValidationFlag(boolean blanketApproveValidationFlag) {
2316 this.blanketApproveValidationFlag = blanketApproveValidationFlag;
2317 }
2318
2319 public String getPurchaseOrderDocumentNums() {
2320 return purchaseOrderDocumentNums;
2321 }
2322
2323 public void setPurchaseOrderDocumentNums(String purchaseOrderDocumentNums) {
2324 this.purchaseOrderDocumentNums = purchaseOrderDocumentNums;
2325 }
2326
2327
2328
2329
2330
2331
2332
2333
2334
2335 public boolean isOverviewFlag() {
2336 return overviewFlag;
2337 }
2338
2339 public void setOverviewFlag(boolean overviewFlag) {
2340 this.overviewFlag = overviewFlag;
2341 }
2342
2343 public boolean isVendorInfoFlag() {
2344 return vendorInfoFlag;
2345 }
2346
2347 public void setVendorInfoFlag(boolean vendorInfoFlag) {
2348 this.vendorInfoFlag = vendorInfoFlag;
2349 }
2350
2351 public boolean isInvoiceInfoFlag() {
2352 return invoiceInfoFlag;
2353 }
2354
2355 public void setInvoiceInfoFlag(boolean invoiceInfoFlag) {
2356 this.invoiceInfoFlag = invoiceInfoFlag;
2357 }
2358
2359 public boolean isProcessItemFlag() {
2360 return processItemFlag;
2361 }
2362
2363 public void setProcessItemFlag(boolean processItemFlag) {
2364 this.processItemFlag = processItemFlag;
2365 }
2366
2367 public boolean isProcessTitlesFlag() {
2368 return processTitlesFlag;
2369 }
2370
2371 public void setProcessTitlesFlag(boolean processTitlesFlag) {
2372 this.processTitlesFlag = processTitlesFlag;
2373 }
2374
2375 public boolean isCurrentItemsFlag() {
2376 return currentItemsFlag;
2377 }
2378
2379 public void setCurrentItemsFlag(boolean currentItemsFlag) {
2380 this.currentItemsFlag = currentItemsFlag;
2381 }
2382
2383 public boolean isAdditionalChargesFlag() {
2384 return additionalChargesFlag;
2385 }
2386
2387 public void setAdditionalChargesFlag(boolean additionalChargesFlag) {
2388 this.additionalChargesFlag = additionalChargesFlag;
2389 }
2390
2391 public boolean isAccountSummaryFlag() {
2392 return accountSummaryFlag;
2393 }
2394
2395 public void setAccountSummaryFlag(boolean accountSummaryFlag) {
2396 this.accountSummaryFlag = accountSummaryFlag;
2397 }
2398
2399 public boolean isNotesAndAttachmentFlag() {
2400 return notesAndAttachmentFlag;
2401 }
2402
2403 public void setNotesAndAttachmentFlag(boolean notesAndAttachmentFlag) {
2404 this.notesAndAttachmentFlag = notesAndAttachmentFlag;
2405 }
2406
2407 public boolean isAdHocRecipientsFlag() {
2408 return adHocRecipientsFlag;
2409 }
2410
2411 public void setAdHocRecipientsFlag(boolean adHocRecipientsFlag) {
2412 this.adHocRecipientsFlag = adHocRecipientsFlag;
2413 }
2414
2415 public boolean isRouteLogFlag() {
2416 return routeLogFlag;
2417 }
2418
2419 public void setRouteLogFlag(boolean routeLogFlag) {
2420 this.routeLogFlag = routeLogFlag;
2421 }
2422
2423 public boolean isRouteLogDisplayFlag() {
2424 return routeLogDisplayFlag;
2425 }
2426
2427 public void setRouteLogDisplayFlag(boolean routeLogDisplayFlag) {
2428 this.routeLogDisplayFlag = routeLogDisplayFlag;
2429 }
2430
2431
2432
2433
2434
2435 @Override
2436 public void toCopy() throws WorkflowException, ValidationException {
2437 super.toCopy();
2438 String[] collapseSections = getOleInvoiceService().getDefaultCollapseSections();
2439 this.setOverviewFlag(getOleInvoiceService().canCollapse(OLEConstants.OVERVIEW_SECTION, collapseSections));
2440 this.setVendorInfoFlag(getOleInvoiceService().canCollapse(OLEConstants.VENDOR_INFO_SECTION, collapseSections));
2441 this.setInvoiceInfoFlag(getOleInvoiceService().canCollapse(OLEConstants.INVOICE_INFO_SECTION, collapseSections));
2442 this.setProcessTitlesFlag(getOleInvoiceService().canCollapse(OLEConstants.PROCESS_TITLES_SECTION, collapseSections));
2443 this.setCurrentItemsFlag(getOleInvoiceService().canCollapse(OLEConstants.CURRENT_ITEM_SECTION, collapseSections));
2444 this.setAdditionalChargesFlag(getOleInvoiceService().canCollapse(OLEConstants.ADDITIONAL_CHARGES_SECTION, collapseSections));
2445 this.setAccountSummaryFlag(getOleInvoiceService().canCollapse(OLEConstants.ACCOUNT_SUMMARY_SECTION, collapseSections));
2446 this.setAdHocRecipientsFlag(getOleInvoiceService().canCollapse(OLEConstants.ADHOC_RECIPIENT_SECTION, collapseSections));
2447 this.setRouteLogFlag(getOleInvoiceService().canCollapse(OLEConstants.ROUTE_LOG_SECTION, collapseSections));
2448 this.setNotesAndAttachmentFlag(getOleInvoiceService().canCollapse(OLEConstants.NOTES_AND_ATTACH_SECTION, collapseSections));
2449
2450 this.setAccountsPayablePurchasingDocumentLinkIdentifier(null);
2451 this.setRelatedViews(null);
2452 this.setInvoiceNumber("");
2453 this.setNoteLine1Text("");
2454
2455 Person currentUser = GlobalVariables.getUserSession().getPerson();
2456 this.setPurapDocumentIdentifier(null);
2457
2458
2459
2460 updateAndSaveAppDocStatus(InvoiceStatuses.APPDOC_INITIATE);
2461 this.setPostingYear(SpringContext.getBean(UniversityDateService.class).getCurrentFiscalYear());
2462
2463 for (Iterator iter = this.getItems().iterator(); iter.hasNext(); ) {
2464 OleInvoiceItem item = (OleInvoiceItem) iter.next();
2465 item.setPurapDocumentIdentifier(null);
2466 item.setItemIdentifier(null);
2467 if (this.getCloneDebitInvoice().equalsIgnoreCase("true")) {
2468 item.setDebitItem(true);
2469 item.setInvoiceListPrice(item.getItemListPrice().abs().toString());
2470 } else {
2471 item.setDebitItem(false);
2472 item.setInvoiceListPrice(item.getItemListPrice().negated().toString());
2473 }
2474 for (Iterator acctIter = item.getSourceAccountingLines().iterator(); acctIter.hasNext(); ) {
2475 InvoiceAccount account = (InvoiceAccount) acctIter.next();
2476 account.setAccountIdentifier(null);
2477 account.setItemIdentifier(null);
2478 account.setObjectId(null);
2479 account.setVersionNumber(null);
2480 }
2481 item.setPaidCopies(new ArrayList<OLEPaidCopy>());
2482 }
2483 SpringContext.getBean(PurapService.class).addBelowLineItems(this);
2484 this.refreshNonUpdateableReferences();
2485 }
2486
2487
2488
2489
2490
2491
2492
2493 @Override
2494 public boolean getAllowsCopy() {
2495
2496 boolean allowsCopy = true;
2497 return allowsCopy;
2498 }
2499
2500
2501
2502
2503
2504
2505 public boolean isDuplicateFlag() {
2506 return duplicateFlag;
2507 }
2508
2509
2510
2511
2512
2513
2514 public void setDuplicateFlag(boolean duplicateFlag) {
2515 this.duplicateFlag = duplicateFlag;
2516 }
2517
2518 public String getSearchResultInvoiceDate() {
2519 return searchResultInvoiceDate;
2520 }
2521
2522 public void setSearchResultInvoiceDate(String searchResultInvoiceDate) {
2523 this.searchResultInvoiceDate = searchResultInvoiceDate;
2524 }
2525
2526 public String getSearchResultInvoicePayDate() {
2527 return searchResultInvoicePayDate;
2528 }
2529
2530 public void setSearchResultInvoicePayDate(String searchResultInvoicePayDate) {
2531 this.searchResultInvoicePayDate = searchResultInvoicePayDate;
2532 }
2533
2534 public boolean isDuplicateApproveFlag() {
2535 return duplicateApproveFlag;
2536 }
2537
2538 public void setDuplicateApproveFlag(boolean duplicateApproveFlag) {
2539 this.duplicateApproveFlag = duplicateApproveFlag;
2540 }
2541
2542 public String getCloneDebitInvoice() {
2543 return cloneDebitInvoice;
2544 }
2545
2546 public void setCloneDebitInvoice(String cloneDebitInvoice) {
2547 this.cloneDebitInvoice = cloneDebitInvoice;
2548 }
2549
2550 public boolean isCloneFlag() {
2551 return cloneFlag;
2552 }
2553
2554 public void setCloneFlag(boolean cloneFlag) {
2555 this.cloneFlag = cloneFlag;
2556 }
2557
2558 public List<OlePaymentRequestDocument> getPaymentRequestDocuments() {
2559 return paymentRequestDocuments;
2560 }
2561
2562 public void setPaymentRequestDocuments(List<OlePaymentRequestDocument> paymentRequestDocuments) {
2563 this.paymentRequestDocuments = paymentRequestDocuments;
2564 }
2565
2566 public boolean isOffsetAccountIndicator() {
2567 return offsetAccountIndicator;
2568 }
2569
2570 public void setOffsetAccountIndicator(boolean offsetAccountIndicator) {
2571 this.offsetAccountIndicator = offsetAccountIndicator;
2572 }
2573
2574 public boolean isItemSign() {
2575 return itemSign;
2576 }
2577
2578 public void setItemSign(boolean itemSign) {
2579 this.itemSign = itemSign;
2580 }
2581
2582 public boolean isBlanketApproveSubscriptionDateValidationFlag() {
2583 return blanketApproveSubscriptionDateValidationFlag;
2584 }
2585
2586 public void setBlanketApproveSubscriptionDateValidationFlag(boolean blanketApproveSubscriptionDateValidationFlag) {
2587 this.blanketApproveSubscriptionDateValidationFlag = blanketApproveSubscriptionDateValidationFlag;
2588 }
2589
2590 public boolean isSubscriptionDateValidationFlag() {
2591 return subscriptionDateValidationFlag;
2592 }
2593
2594 public void setSubscriptionDateValidationFlag(boolean subscriptionDateValidationFlag) {
2595 this.subscriptionDateValidationFlag = subscriptionDateValidationFlag;
2596 }
2597
2598 public String getVendorLink() {
2599 String oleurl = ConfigContext.getCurrentContextConfig().getProperty("ole.url");
2600 String url = oleurl+ OLEConstants.VENDOR_LINK +vendorHeaderGeneratedIdentifier + "&vendorDetailAssignedIdentifier="
2601 +vendorDetailAssignedIdentifier;
2602 return url;
2603 }
2604
2605 public void setVendorLink(String vendorLink) {
2606 this.vendorLink = vendorLink;
2607 }
2608
2609 public boolean isForeignCurrencyFlag() {
2610 return foreignCurrencyFlag;
2611 }
2612
2613 public void setForeignCurrencyFlag(boolean foreignCurrencyFlag) {
2614 this.foreignCurrencyFlag = foreignCurrencyFlag;
2615 }
2616
2617 public Long getInvoiceCurrencyTypeId() {
2618 return invoiceCurrencyTypeId;
2619 }
2620
2621 public void setInvoiceCurrencyTypeId(Long invoiceCurrencyTypeId) {
2622 this.invoiceCurrencyTypeId = invoiceCurrencyTypeId;
2623 }
2624
2625 public String getInvoiceCurrencyType() {
2626 return invoiceCurrencyType;
2627 }
2628
2629 public void setInvoiceCurrencyType(String invoiceCurrencyType) {
2630 this.invoiceCurrencyType = invoiceCurrencyType;
2631 }
2632
2633 public OleCurrencyType getOleCurrencyType() {
2634 return oleCurrencyType;
2635 }
2636
2637 public void setOleCurrencyType(OleCurrencyType oleCurrencyType) {
2638 this.oleCurrencyType = oleCurrencyType;
2639 }
2640
2641 public boolean isCurrencyOverrideFlag() {
2642 return currencyOverrideFlag;
2643 }
2644
2645 public void setCurrencyOverrideFlag(boolean currencyOverrideFlag) {
2646 this.currencyOverrideFlag = currencyOverrideFlag;
2647 }
2648
2649 public String getCurrencyOverrideMessage() {
2650 return currencyOverrideMessage;
2651 }
2652
2653 public void setCurrencyOverrideMessage(String currencyOverrideMessage) {
2654 this.currencyOverrideMessage = currencyOverrideMessage;
2655 }
2656
2657 public String getInvoiceCurrencyExchangeRate() {
2658 if (invoiceCurrencyExchangeRate != null && !invoiceCurrencyExchangeRate.isEmpty()) {
2659 if (invoiceCurrencyExchangeRate != null && invoiceCurrencyExchangeRate.contains("-")) {
2660 invoiceCurrencyExchangeRate = invoiceCurrencyExchangeRate.replace("-", "");
2661 invoiceCurrencyExchangeRate = "(" + invoiceCurrencyExchangeRate + ")";
2662 }
2663 return invoiceCurrencyExchangeRate;
2664 }
2665 return invoiceCurrencyExchangeRate;
2666 }
2667
2668 public void setInvoiceCurrencyExchangeRate(String invoiceCurrencyExchangeRate) {
2669 this.invoiceCurrencyExchangeRate = invoiceCurrencyExchangeRate;
2670 if (invoiceCurrencyExchangeRate != null) {
2671 if (invoiceCurrencyExchangeRate.contains("(") || invoiceCurrencyExchangeRate.contains(")")) {
2672 invoiceCurrencyExchangeRate = invoiceCurrencyExchangeRate.replace("(", "");
2673 invoiceCurrencyExchangeRate = invoiceCurrencyExchangeRate.replace(")", "");
2674 invoiceCurrencyExchangeRate = "-" + invoiceCurrencyExchangeRate;
2675 this.invoiceCurrencyExchangeRate = invoiceCurrencyExchangeRate;
2676 }
2677 if (new KualiDecimal(invoiceCurrencyExchangeRate).isLessThan(KualiDecimal.ZERO)) {
2678 invoiceCurrencyExchangeRate = invoiceCurrencyExchangeRate.replace("-", "");
2679 invoiceCurrencyExchangeRate = "(" + invoiceCurrencyExchangeRate + ")";
2680 this.invoiceCurrencyExchangeRate = invoiceCurrencyExchangeRate;
2681 }
2682 }
2683 }
2684
2685 public boolean isDbRetrieval() {
2686 return dbRetrieval;
2687 }
2688
2689 public void setDbRetrieval(boolean dbRetrieval) {
2690 this.dbRetrieval = dbRetrieval;
2691 }
2692
2693 public boolean isEnableCurrentItems() {
2694 return enableCurrentItems;
2695 }
2696
2697 public void setEnableCurrentItems(boolean enableCurrentItems) {
2698 this.enableCurrentItems = enableCurrentItems;
2699 }
2700
2701 public List<OleInvoiceItem> getDeletedInvoiceItems() {
2702 return deletedInvoiceItems;
2703 }
2704
2705 public void setDeletedInvoiceItems(List<OleInvoiceItem> deletedInvoiceItems) {
2706 this.deletedInvoiceItems = deletedInvoiceItems;
2707 }
2708
2709 public boolean isDuplicateRouteFlag() {
2710 return duplicateRouteFlag;
2711 }
2712
2713 public void setDuplicateRouteFlag(boolean duplicateRouteFlag) {
2714 this.duplicateRouteFlag = duplicateRouteFlag;
2715 }
2716
2717 public boolean isDuplicateSaveFlag() {
2718 return duplicateSaveFlag;
2719 }
2720
2721 public void setDuplicateSaveFlag(boolean duplicateSaveFlag) {
2722 this.duplicateSaveFlag = duplicateSaveFlag;
2723 }
2724 }