View Javadoc
1   /*
2    * Copyright 2006 The Kuali Foundation
3    * 
4    * Licensed under the Educational Community License, Version 2.0 (the "License");
5    * you may not use this file except in compliance with the License.
6    * You may obtain a copy of the License at
7    * 
8    * http://www.opensource.org/licenses/ecl2.php
9    * 
10   * Unless required by applicable law or agreed to in writing, software
11   * distributed under the License is distributed on an "AS IS" BASIS,
12   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13   * See the License for the specific language governing permissions and
14   * limitations under the License.
15   */
16  package org.kuali.ole.module.purap.document;
17  
18  import org.apache.commons.lang.StringUtils;
19  import org.kuali.ole.coa.businessobject.Account;
20  import org.kuali.ole.coa.businessobject.Chart;
21  import org.kuali.ole.coa.businessobject.Organization;
22  import org.kuali.ole.integration.purap.CapitalAssetLocation;
23  import org.kuali.ole.integration.purap.CapitalAssetSystem;
24  import org.kuali.ole.integration.purap.ItemCapitalAsset;
25  import org.kuali.ole.module.purap.PurapConstants;
26  import org.kuali.ole.module.purap.PurapParameterConstants;
27  import org.kuali.ole.module.purap.PurapPropertyConstants;
28  import org.kuali.ole.module.purap.businessobject.*;
29  import org.kuali.ole.module.purap.document.service.PurapService;
30  import org.kuali.ole.module.purap.document.service.PurchasingDocumentSpecificService;
31  import org.kuali.ole.module.purap.document.service.PurchasingService;
32  import org.kuali.ole.module.purap.document.service.ReceivingAddressService;
33  import org.kuali.ole.module.purap.util.ItemParser;
34  import org.kuali.ole.module.purap.util.ItemParserBase;
35  import org.kuali.ole.sys.context.SpringContext;
36  import org.kuali.ole.sys.service.impl.OleParameterConstants;
37  import org.kuali.ole.vnd.VendorPropertyConstants;
38  import org.kuali.ole.vnd.businessobject.*;
39  import org.kuali.ole.vnd.document.service.VendorService;
40  import org.kuali.rice.core.api.datetime.DateTimeService;
41  import org.kuali.rice.core.api.util.type.KualiDecimal;
42  import org.kuali.rice.coreservice.framework.parameter.ParameterService;
43  import org.kuali.rice.krad.rules.rule.event.ApproveDocumentEvent;
44  import org.kuali.rice.krad.rules.rule.event.KualiDocumentEvent;
45  import org.kuali.rice.krad.rules.rule.event.RouteDocumentEvent;
46  import org.kuali.rice.krad.util.GlobalVariables;
47  import org.kuali.rice.krad.util.ObjectUtils;
48  import org.kuali.rice.location.api.country.Country;
49  import org.kuali.rice.location.api.country.CountryService;
50  
51  import java.sql.Date;
52  import java.util.ArrayList;
53  import java.util.Iterator;
54  import java.util.List;
55  
56  /**
57   * Base class for Purchasing Documents.
58   */
59  public abstract class PurchasingDocumentBase extends PurchasingAccountsPayableDocumentBase implements PurchasingDocument {
60      protected static org.apache.log4j.Logger LOG = org.apache.log4j.Logger.getLogger(PurchasingDocumentBase.class);
61  
62      // SHARED FIELDS BETWEEN REQUISITION AND PURCHASE ORDER
63      protected String documentFundingSourceCode;
64      protected String requisitionSourceCode;
65      protected String purchaseOrderTransmissionMethodCode;
66      protected String purchaseOrderCostSourceCode;
67      protected String deliveryRequiredDateReasonCode;
68      protected String recurringPaymentTypeCode;
69      protected String chartOfAccountsCode;
70      protected String organizationCode;
71      protected String deliveryCampusCode;
72      protected KualiDecimal purchaseOrderTotalLimit;
73      protected Boolean vendorRestrictedIndicator;
74      protected String vendorPhoneNumber;
75      protected String vendorFaxNumber;
76      protected Integer vendorContractGeneratedIdentifier;
77      protected String vendorNoteText;
78      protected String requestorPersonName;
79      protected String requestorPersonEmailAddress;
80      protected String requestorPersonPhoneNumber;
81      protected String nonInstitutionFundOrgChartOfAccountsCode;
82      protected String nonInstitutionFundOrganizationCode;
83      protected String nonInstitutionFundChartOfAccountsCode;
84      protected String nonInstitutionFundAccountNumber;
85      protected boolean deliveryBuildingOtherIndicator;
86      protected String deliveryBuildingCode;
87      protected String deliveryBuildingName;
88      protected String deliveryBuildingRoomNumber;
89      protected String deliveryBuildingLine1Address;
90      protected String deliveryBuildingLine2Address;
91      protected String deliveryCityName;
92      protected String deliveryStateCode;
93      protected String deliveryPostalCode;
94      protected String deliveryCountryCode;
95      protected String deliveryToName;
96      protected String deliveryToEmailAddress;
97      protected String deliveryToPhoneNumber;
98      protected Date deliveryRequiredDate;
99      protected String deliveryInstructionText;
100     protected Date purchaseOrderBeginDate;
101     protected Date purchaseOrderEndDate;
102     protected String institutionContactName;
103     protected String institutionContactPhoneNumber;
104     protected String institutionContactEmailAddress;
105     protected String billingName;
106     protected String billingLine1Address;
107     protected String billingLine2Address;
108     protected String billingCityName;
109     protected String billingStateCode;
110     protected String billingPostalCode;
111     protected String billingCountryCode;
112     protected String billingPhoneNumber;
113     protected String billingEmailAddress;
114     protected String receivingName;
115     protected String receivingLine1Address;
116     protected String receivingLine2Address;
117     protected String receivingCityName;
118     protected String receivingStateCode;
119     protected String receivingPostalCode;
120     protected String receivingCountryCode;
121     protected boolean addressToVendorIndicator; // if true, use receiving address
122     protected String externalOrganizationB2bSupplierIdentifier;
123     protected boolean purchaseOrderAutomaticIndicator;
124     protected String vendorPaymentTermsCode;
125     protected String vendorShippingTitleCode;
126     protected String vendorShippingPaymentTermsCode;
127     protected String capitalAssetSystemTypeCode;
128     protected String capitalAssetSystemStateCode;
129     protected String justification;
130 
131     // NOT PERSISTED IN DB
132     protected String supplierDiversityLabel;
133     protected String vendorContactsLabel;
134 
135     // REFERENCE OBJECTS
136     protected FundingSource fundingSource;
137     protected RequisitionSource requisitionSource;
138     protected PurchaseOrderTransmissionMethod purchaseOrderTransmissionMethod;
139     protected PurchaseOrderCostSource purchaseOrderCostSource;
140     protected DeliveryRequiredDateReason deliveryRequiredDateReason;
141     protected RecurringPaymentType recurringPaymentType;
142     protected Organization organization;
143     protected Chart chartOfAccounts;
144     protected CampusParameter deliveryCampus;
145     protected Chart nonInstitutionFundOrgChartOfAccounts;
146     protected Organization nonInstitutionFundOrganization;
147     protected Account nonInstitutionFundAccount;
148     protected Chart nonInstitutionFundChartOfAccounts;
149     protected VendorContract vendorContract;
150     protected CapitalAssetSystemType capitalAssetSystemType;
151     protected CapitalAssetSystemState capitalAssetSystemState;
152     protected List<CapitalAssetSystem> purchasingCapitalAssetSystems;
153     protected List<PurchasingCapitalAssetItem> purchasingCapitalAssetItems;
154 
155     protected boolean receivingDocumentRequiredIndicator;
156     protected boolean paymentRequestPositiveApprovalIndicator;
157 
158     protected List<CommodityCode> commodityCodesForRouting;
159 
160     /**
161      * Default Constructor.
162      */
163     public PurchasingDocumentBase() {
164         super();
165 
166         purchasingCapitalAssetItems = new ArrayList();
167         purchasingCapitalAssetSystems = new ArrayList();
168     }
169 
170     @Override
171     public abstract PurchasingDocumentSpecificService getDocumentSpecificService();
172 
173     /**
174      * @see org.kuali.ole.module.purap.document.PurchasingDocument#templateVendorDetail(org.kuali.ole.vnd.businessobject.VendorDetail)
175      */
176     @Override
177     public void templateVendorDetail(VendorDetail vendorDetail) {
178         if (ObjectUtils.isNotNull(vendorDetail)) {
179             this.setVendorDetail(vendorDetail);
180             this.setVendorName(vendorDetail.getVendorName());
181             this.setVendorShippingTitleCode(vendorDetail.getVendorShippingTitleCode());
182             this.setVendorPaymentTermsCode(vendorDetail.getVendorPaymentTermsCode());
183             this.setVendorShippingPaymentTermsCode(vendorDetail.getVendorShippingPaymentTermsCode());
184             this.setVendorCustomerNumber("");
185         }
186     }
187 
188     /**
189      * @see org.kuali.ole.module.purap.document.PurchasingDocument#templateVendorContract(org.kuali.ole.vnd.businessobject.VendorContract)
190      */
191     @Override
192     public void templateVendorContract(VendorContract vendorContract) {
193         if (ObjectUtils.isNotNull(vendorContract)) {
194             this.setVendorContract(vendorContract);
195             this.setVendorContractGeneratedIdentifier(vendorContract.getVendorContractGeneratedIdentifier());
196             this.setVendorShippingTitleCode(vendorContract.getVendorShippingTitleCode());
197             this.setVendorPaymentTermsCode(vendorContract.getVendorPaymentTermsCode());
198             this.setVendorShippingPaymentTermsCode(vendorContract.getVendorShippingPaymentTermsCode());
199             this.setPurchaseOrderCostSourceCode(vendorContract.getPurchaseOrderCostSourceCode());
200         }
201     }
202 
203     /**
204      * @see org.kuali.ole.module.purap.document.PurchasingAccountsPayableDocumentBase#templateVendorAddress(org.kuali.ole.vnd.businessobject.VendorAddress)
205      */
206     @Override
207     public void templateVendorAddress(VendorAddress vendorAddress) {
208         super.templateVendorAddress(vendorAddress);
209         if (vendorAddress != null) {
210             this.setVendorFaxNumber(vendorAddress.getVendorFaxNumber());
211             this.setVendorAttentionName(vendorAddress.getVendorAttentionName());
212         }
213     }
214 
215     /**
216      * @see org.kuali.ole.module.purap.document.PurchasingDocumentBase#templateBillingAddress(org.kuali.ole.module.purap.businessobject.BillingAddress).
217      */
218     @Override
219     public void templateBillingAddress(BillingAddress billingAddress) {
220         if (ObjectUtils.isNotNull(billingAddress)) {
221             this.setBillingName(billingAddress.getBillingName());
222             this.setBillingLine1Address(billingAddress.getBillingLine1Address());
223             this.setBillingLine2Address(billingAddress.getBillingLine2Address());
224             this.setBillingCityName(billingAddress.getBillingCityName());
225             this.setBillingStateCode(billingAddress.getBillingStateCode());
226             this.setBillingPostalCode(billingAddress.getBillingPostalCode());
227             this.setBillingCountryCode(billingAddress.getBillingCountryCode());
228             this.setBillingPhoneNumber(billingAddress.getBillingPhoneNumber());
229             this.setBillingEmailAddress(billingAddress.getBillingEmailAddress());
230         }
231     }
232 
233     /**
234      * @see org.kuali.ole.module.purap.document.PurchasingDocumentBase#templateReceivingAddress(org.kuali.ole.module.purap.businessobject.ReceivingAddress).
235      */
236     @Override
237     public void templateReceivingAddress(ReceivingAddress receivingAddress) {
238         if (receivingAddress != null) {
239             this.setReceivingName(receivingAddress.getReceivingName());
240             this.setReceivingLine1Address(receivingAddress.getReceivingLine1Address());
241             this.setReceivingLine2Address(receivingAddress.getReceivingLine2Address());
242             this.setReceivingCityName(receivingAddress.getReceivingCityName());
243             this.setReceivingStateCode(receivingAddress.getReceivingStateCode());
244             this.setReceivingPostalCode(receivingAddress.getReceivingPostalCode());
245             this.setReceivingCountryCode(receivingAddress.getReceivingCountryCode());
246             this.setAddressToVendorIndicator(receivingAddress.isUseReceivingIndicator());
247         } else {
248             this.setReceivingName(null);
249             this.setReceivingLine1Address(null);
250             this.setReceivingLine2Address(null);
251             this.setReceivingCityName(null);
252             this.setReceivingStateCode(null);
253             this.setReceivingPostalCode(null);
254             this.setReceivingCountryCode(null);
255             this.setAddressToVendorIndicator(false);
256         }
257     }
258 
259     /**
260      * Loads the default receiving address from database corresponding to the chart/org of this document.
261      */
262     @Override
263     public void loadReceivingAddress() {
264         /*
265         Map criteria = new HashMap();
266         criteria.put(OLEPropertyConstants.CHART_OF_ACCOUNTS_CODE, this.getChartOfAccountsCode());
267         criteria.put(OLEPropertyConstants.ORGANIZATION_CODE, this.getOrganizationCode());
268         criteria.put(PurapPropertyConstants.RCVNG_ADDR_DFLT_IND, true);        
269         criteria.put(PurapPropertyConstants.RCVNG_ADDR_ACTIVE, true);        
270         List<ReceivingAddress> addresses = (List)SpringContext.getBean(BusinessObjectService.class).findMatching(ReceivingAddress.class, criteria);
271         if (addresses != null && addresses.size()>0 ) 
272             this.templateReceivingAddress(addresses.get(0));        
273         else // if no address is found, fill with null
274             this.templateReceivingAddress(null);
275         */
276         String chartCode = getChartOfAccountsCode();
277         String orgCode = getOrganizationCode();
278         ReceivingAddress address = SpringContext.getBean(ReceivingAddressService.class).findUniqueDefaultByChartOrg(chartCode, orgCode);
279         // if default address for chart/org not found, look for chart default 
280         if (address == null && orgCode != null) {
281             address = SpringContext.getBean(ReceivingAddressService.class).findUniqueDefaultByChartOrg(chartCode, null);
282         }
283         this.templateReceivingAddress(address);
284     }
285 
286     /**
287      * Iterates through the purchasingCapitalAssetItems of the document and returns the purchasingCapitalAssetItem with the item id equal to the number given, or null if a
288      * match is not found.
289      *
290      * @param itemIdentifier item id to match on.
291      * @return the PurchasingCapitalAssetItem if a match is found, else null.
292      */
293     public PurchasingCapitalAssetItem getPurchasingCapitalAssetItemByItemIdentifier(int itemIdentifier) {
294         for (Iterator iter = purchasingCapitalAssetItems.iterator(); iter.hasNext(); ) {
295             PurchasingCapitalAssetItem camsItem = (PurchasingCapitalAssetItem) iter.next();
296             if (camsItem.getItemIdentifier().intValue() == itemIdentifier) {
297                 return camsItem;
298             }
299         }
300         return null;
301     }
302 
303 
304     /**
305      * @see org.kuali.ole.module.purap.document.PurchasingAccountsPayableDocumentBase#addItem(org.kuali.ole.module.purap.businessobject.PurApItem)
306      */
307     @Override
308     public void addItem(PurApItem item) {
309         item.refreshReferenceObject(PurapPropertyConstants.COMMODITY_CODE);
310         super.addItem(item);
311     }
312 
313     /**
314      * @see org.kuali.ole.module.purap.document.PurchasingAccountsPayableDocumentBase#populateDocumentForRouting()
315      */
316     @Override
317     public void populateDocumentForRouting() {
318         commodityCodesForRouting = new ArrayList<CommodityCode>();
319         for (PurchasingItemBase item : (List<PurchasingItemBase>) this.getItems()) {
320             if (item.getCommodityCode() != null && !commodityCodesForRouting.contains(item.getCommodityCode())) {
321                 commodityCodesForRouting.add(item.getCommodityCode());
322             }
323         }
324         super.populateDocumentForRouting();
325     }
326 
327     // GETTERS AND SETTERS
328 
329     /**
330      * @see org.kuali.ole.module.purap.document.PurchasingDocument.getItemParser().
331      */
332     @Override
333     public ItemParser getItemParser() {
334         return new ItemParserBase();
335     }
336 
337     /**
338      * Decides whether receivingDocumentRequiredIndicator functionality shall be enabled according to the controlling parameter.
339      */
340     public boolean isEnableReceivingDocumentRequiredIndicator() {
341         return SpringContext.getBean(ParameterService.class).getParameterValueAsBoolean(OleParameterConstants.PURCHASING_DOCUMENT.class, PurapParameterConstants.RECEIVING_DOCUMENT_REQUIRED_IND);
342     }
343 
344     /**
345      * Decides whether paymentRequestPositiveApprovalIndicator functionality shall be enabled according to the controlling parameter.
346      */
347     public boolean isEnablePaymentRequestPositiveApprovalIndicator() {
348         return SpringContext.getBean(ParameterService.class).getParameterValueAsBoolean(OleParameterConstants.PURCHASING_DOCUMENT.class, PurapParameterConstants.PAYMENT_REQUEST_POSITIVE_APPROVAL_IND);
349     }
350 
351     @Override
352     public String getBillingCityName() {
353         return billingCityName;
354     }
355 
356     @Override
357     public void setBillingCityName(String billingCityName) {
358         this.billingCityName = billingCityName;
359     }
360 
361     @Override
362     public String getBillingCountryCode() {
363         return billingCountryCode;
364     }
365 
366     @Override
367     public void setBillingCountryCode(String billingCountryCode) {
368         this.billingCountryCode = billingCountryCode;
369     }
370 
371     @Override
372     public String getBillingCountryName() {
373         if (StringUtils.isNotBlank(getBillingCountryCode())) {
374             Country country = SpringContext.getBean(CountryService.class).getCountry(getBillingCountryCode());
375             if (country != null) {
376                 return country.getName();
377             }
378         }
379         return null;
380     }
381 
382     @Override
383     public String getBillingLine1Address() {
384         return billingLine1Address;
385     }
386 
387     @Override
388     public void setBillingLine1Address(String billingLine1Address) {
389         this.billingLine1Address = billingLine1Address;
390     }
391 
392     @Override
393     public String getBillingLine2Address() {
394         return billingLine2Address;
395     }
396 
397     @Override
398     public void setBillingLine2Address(String billingLine2Address) {
399         this.billingLine2Address = billingLine2Address;
400     }
401 
402     @Override
403     public String getBillingName() {
404         return billingName;
405     }
406 
407     @Override
408     public void setBillingName(String billingName) {
409         this.billingName = billingName;
410     }
411 
412     @Override
413     public String getBillingPhoneNumber() {
414         return billingPhoneNumber;
415     }
416 
417     @Override
418     public void setBillingPhoneNumber(String billingPhoneNumber) {
419         this.billingPhoneNumber = billingPhoneNumber;
420     }
421 
422     public String getBillingEmailAddress() {
423         return billingEmailAddress;
424     }
425 
426     public void setBillingEmailAddress(String billingEmailAddress) {
427         this.billingEmailAddress = billingEmailAddress;
428     }
429 
430     @Override
431     public String getBillingPostalCode() {
432         return billingPostalCode;
433     }
434 
435     @Override
436     public void setBillingPostalCode(String billingPostalCode) {
437         this.billingPostalCode = billingPostalCode;
438     }
439 
440     @Override
441     public String getBillingStateCode() {
442         return billingStateCode;
443     }
444 
445     @Override
446     public void setBillingStateCode(String billingStateCode) {
447         this.billingStateCode = billingStateCode;
448     }
449 
450     @Override
451     public String getReceivingCityName() {
452         return receivingCityName;
453     }
454 
455     @Override
456     public void setReceivingCityName(String receivingCityName) {
457         this.receivingCityName = receivingCityName;
458     }
459 
460     @Override
461     public String getReceivingCountryCode() {
462         return receivingCountryCode;
463     }
464 
465     @Override
466     public void setReceivingCountryCode(String receivingCountryCode) {
467         this.receivingCountryCode = receivingCountryCode;
468     }
469 
470     @Override
471     public String getReceivingCountryName() {
472         if (StringUtils.isNotBlank(getReceivingCountryCode())) {
473             Country country = SpringContext.getBean(CountryService.class).getCountry(getReceivingCountryCode());
474             if (country != null) {
475                 return country.getName();
476             }
477         }
478         return null;
479     }
480 
481     @Override
482     public String getReceivingLine1Address() {
483         return receivingLine1Address;
484     }
485 
486     @Override
487     public void setReceivingLine1Address(String receivingLine1Address) {
488         this.receivingLine1Address = receivingLine1Address;
489     }
490 
491     @Override
492     public String getReceivingLine2Address() {
493         return receivingLine2Address;
494     }
495 
496     @Override
497     public void setReceivingLine2Address(String receivingLine2Address) {
498         this.receivingLine2Address = receivingLine2Address;
499     }
500 
501     @Override
502     public String getReceivingName() {
503         return receivingName;
504     }
505 
506     @Override
507     public void setReceivingName(String receivingName) {
508         this.receivingName = receivingName;
509     }
510 
511     @Override
512     public String getReceivingPostalCode() {
513         return receivingPostalCode;
514     }
515 
516     @Override
517     public void setReceivingPostalCode(String receivingPostalCode) {
518         this.receivingPostalCode = receivingPostalCode;
519     }
520 
521     @Override
522     public String getReceivingStateCode() {
523         return receivingStateCode;
524     }
525 
526     @Override
527     public void setReceivingStateCode(String receivingStateCode) {
528         this.receivingStateCode = receivingStateCode;
529     }
530 
531     @Override
532     public boolean getAddressToVendorIndicator() {
533         return addressToVendorIndicator;
534     }
535 
536     @Override
537     public void setAddressToVendorIndicator(boolean addressToVendor) {
538         this.addressToVendorIndicator = addressToVendor;
539     }
540 
541     @Override
542     public String getChartOfAccountsCode() {
543         return chartOfAccountsCode;
544     }
545 
546     @Override
547     public void setChartOfAccountsCode(String chartOfAccountsCode) {
548         this.chartOfAccountsCode = chartOfAccountsCode;
549     }
550 
551     @Override
552     public String getDeliveryBuildingCode() {
553         return deliveryBuildingCode;
554     }
555 
556     @Override
557     public void setDeliveryBuildingCode(String deliveryBuildingCode) {
558         this.deliveryBuildingCode = deliveryBuildingCode;
559     }
560 
561     @Override
562     public String getDeliveryBuildingLine1Address() {
563         return deliveryBuildingLine1Address;
564     }
565 
566     @Override
567     public void setDeliveryBuildingLine1Address(String deliveryBuildingLine1Address) {
568         this.deliveryBuildingLine1Address = deliveryBuildingLine1Address;
569     }
570 
571     @Override
572     public String getDeliveryBuildingLine2Address() {
573         return deliveryBuildingLine2Address;
574     }
575 
576     @Override
577     public void setDeliveryBuildingLine2Address(String deliveryBuildingLine2Address) {
578         this.deliveryBuildingLine2Address = deliveryBuildingLine2Address;
579     }
580 
581     @Override
582     public String getDeliveryBuildingName() {
583         return deliveryBuildingName;
584     }
585 
586     @Override
587     public void setDeliveryBuildingName(String deliveryBuildingName) {
588         this.deliveryBuildingName = deliveryBuildingName;
589     }
590 
591     @Override
592     public boolean isDeliveryBuildingOtherIndicator() {
593         return deliveryBuildingOtherIndicator;
594     }
595 
596     @Override
597     public void setDeliveryBuildingOtherIndicator(boolean deliveryBuildingOtherIndicator) {
598         this.deliveryBuildingOtherIndicator = deliveryBuildingOtherIndicator;
599     }
600 
601     @Override
602     public String getDeliveryBuildingRoomNumber() {
603         return deliveryBuildingRoomNumber;
604     }
605 
606     @Override
607     public void setDeliveryBuildingRoomNumber(String deliveryBuildingRoomNumber) {
608         this.deliveryBuildingRoomNumber = deliveryBuildingRoomNumber;
609     }
610 
611     @Override
612     public String getDeliveryCampusCode() {
613         return deliveryCampusCode;
614     }
615 
616     @Override
617     public void setDeliveryCampusCode(String deliveryCampusCode) {
618         this.deliveryCampusCode = deliveryCampusCode;
619     }
620 
621     @Override
622     public String getDeliveryCityName() {
623         return deliveryCityName;
624     }
625 
626     @Override
627     public void setDeliveryCityName(String deliveryCityName) {
628         this.deliveryCityName = deliveryCityName;
629     }
630 
631     @Override
632     public String getDeliveryCountryCode() {
633         return deliveryCountryCode;
634     }
635 
636     @Override
637     public String getDeliveryCountryName() {
638         if (StringUtils.isNotBlank(getDeliveryCountryCode())) {
639             Country country = SpringContext.getBean(CountryService.class).getCountry(getDeliveryCountryCode());
640             if (country != null) {
641                 return country.getName();
642             }
643         }
644         return null;
645     }
646 
647     @Override
648     public void setDeliveryCountryCode(String deliveryCountryCode) {
649         this.deliveryCountryCode = deliveryCountryCode;
650     }
651 
652 
653     @Override
654     public String getDeliveryInstructionText() {
655         return deliveryInstructionText;
656     }
657 
658     @Override
659     public void setDeliveryInstructionText(String deliveryInstructionText) {
660         this.deliveryInstructionText = deliveryInstructionText;
661     }
662 
663     @Override
664     public String getDeliveryPostalCode() {
665         return deliveryPostalCode;
666     }
667 
668     @Override
669     public void setDeliveryPostalCode(String deliveryPostalCode) {
670         this.deliveryPostalCode = deliveryPostalCode;
671     }
672 
673     @Override
674     public Date getDeliveryRequiredDate() {
675         return deliveryRequiredDate;
676     }
677 
678     @Override
679     public void setDeliveryRequiredDate(Date deliveryRequiredDate) {
680         this.deliveryRequiredDate = deliveryRequiredDate;
681     }
682 
683     @Override
684     public String getDeliveryRequiredDateReasonCode() {
685         return deliveryRequiredDateReasonCode;
686     }
687 
688     @Override
689     public void setDeliveryRequiredDateReasonCode(String deliveryRequiredDateReasonCode) {
690         this.deliveryRequiredDateReasonCode = deliveryRequiredDateReasonCode;
691     }
692 
693     @Override
694     public String getDeliveryStateCode() {
695         return deliveryStateCode;
696     }
697 
698     @Override
699     public void setDeliveryStateCode(String deliveryStateCode) {
700         this.deliveryStateCode = deliveryStateCode;
701     }
702 
703     @Override
704     public String getDeliveryToEmailAddress() {
705         return deliveryToEmailAddress;
706     }
707 
708     @Override
709     public void setDeliveryToEmailAddress(String deliveryToEmailAddress) {
710         this.deliveryToEmailAddress = deliveryToEmailAddress;
711     }
712 
713     @Override
714     public String getDeliveryToName() {
715         return deliveryToName;
716     }
717 
718     @Override
719     public void setDeliveryToName(String deliveryToName) {
720         this.deliveryToName = deliveryToName;
721     }
722 
723     @Override
724     public String getDeliveryToPhoneNumber() {
725         return deliveryToPhoneNumber;
726     }
727 
728     @Override
729     public void setDeliveryToPhoneNumber(String deliveryToPhoneNumber) {
730         this.deliveryToPhoneNumber = deliveryToPhoneNumber;
731     }
732 
733     @Override
734     public String getExternalOrganizationB2bSupplierIdentifier() {
735         return externalOrganizationB2bSupplierIdentifier;
736     }
737 
738     @Override
739     public void setExternalOrganizationB2bSupplierIdentifier(String externalOrganizationB2bSupplierIdentifier) {
740         this.externalOrganizationB2bSupplierIdentifier = externalOrganizationB2bSupplierIdentifier;
741     }
742 
743     @Override
744     public String getDocumentFundingSourceCode() {
745         return documentFundingSourceCode;
746     }
747 
748     @Override
749     public void setDocumentFundingSourceCode(String documentFundingSourceCode) {
750         this.documentFundingSourceCode = documentFundingSourceCode;
751     }
752 
753     @Override
754     public String getInstitutionContactEmailAddress() {
755         return institutionContactEmailAddress;
756     }
757 
758     @Override
759     public void setInstitutionContactEmailAddress(String institutionContactEmailAddress) {
760         this.institutionContactEmailAddress = institutionContactEmailAddress;
761     }
762 
763     @Override
764     public String getInstitutionContactName() {
765         return institutionContactName;
766     }
767 
768     @Override
769     public void setInstitutionContactName(String institutionContactName) {
770         this.institutionContactName = institutionContactName;
771     }
772 
773     @Override
774     public String getInstitutionContactPhoneNumber() {
775         return institutionContactPhoneNumber;
776     }
777 
778     @Override
779     public void setInstitutionContactPhoneNumber(String institutionContactPhoneNumber) {
780         this.institutionContactPhoneNumber = institutionContactPhoneNumber;
781     }
782 
783     @Override
784     public String getNonInstitutionFundAccountNumber() {
785         return nonInstitutionFundAccountNumber;
786     }
787 
788     @Override
789     public void setNonInstitutionFundAccountNumber(String nonInstitutionFundAccountNumber) {
790         this.nonInstitutionFundAccountNumber = nonInstitutionFundAccountNumber;
791     }
792 
793     @Override
794     public String getNonInstitutionFundChartOfAccountsCode() {
795         return nonInstitutionFundChartOfAccountsCode;
796     }
797 
798     @Override
799     public void setNonInstitutionFundChartOfAccountsCode(String nonInstitutionFundChartOfAccountsCode) {
800         this.nonInstitutionFundChartOfAccountsCode = nonInstitutionFundChartOfAccountsCode;
801     }
802 
803     @Override
804     public String getNonInstitutionFundOrganizationCode() {
805         return nonInstitutionFundOrganizationCode;
806     }
807 
808     @Override
809     public void setNonInstitutionFundOrganizationCode(String nonInstitutionFundOrganizationCode) {
810         this.nonInstitutionFundOrganizationCode = nonInstitutionFundOrganizationCode;
811     }
812 
813     @Override
814     public String getNonInstitutionFundOrgChartOfAccountsCode() {
815         return nonInstitutionFundOrgChartOfAccountsCode;
816     }
817 
818     @Override
819     public void setNonInstitutionFundOrgChartOfAccountsCode(String nonInstitutionFundOrgChartOfAccountsCode) {
820         this.nonInstitutionFundOrgChartOfAccountsCode = nonInstitutionFundOrgChartOfAccountsCode;
821     }
822 
823     @Override
824     public String getOrganizationCode() {
825         return organizationCode;
826     }
827 
828     @Override
829     public void setOrganizationCode(String organizationCode) {
830         this.organizationCode = organizationCode;
831     }
832 
833     @Override
834     public boolean getPurchaseOrderAutomaticIndicator() {
835         return purchaseOrderAutomaticIndicator;
836     }
837 
838     @Override
839     public void setPurchaseOrderAutomaticIndicator(boolean purchaseOrderAutomaticIndicator) {
840         this.purchaseOrderAutomaticIndicator = purchaseOrderAutomaticIndicator;
841     }
842 
843     @Override
844     public Date getPurchaseOrderBeginDate() {
845         return purchaseOrderBeginDate;
846     }
847 
848     @Override
849     public void setPurchaseOrderBeginDate(Date purchaseOrderBeginDate) {
850         this.purchaseOrderBeginDate = purchaseOrderBeginDate;
851     }
852 
853     @Override
854     public String getPurchaseOrderCostSourceCode() {
855         return purchaseOrderCostSourceCode;
856     }
857 
858     @Override
859     public void setPurchaseOrderCostSourceCode(String purchaseOrderCostSourceCode) {
860         this.purchaseOrderCostSourceCode = purchaseOrderCostSourceCode;
861     }
862 
863     @Override
864     public Date getPurchaseOrderEndDate() {
865         return purchaseOrderEndDate;
866     }
867 
868     @Override
869     public void setPurchaseOrderEndDate(Date purchaseOrderEndDate) {
870         this.purchaseOrderEndDate = purchaseOrderEndDate;
871     }
872 
873     @Override
874     public KualiDecimal getPurchaseOrderTotalLimit() {
875         return purchaseOrderTotalLimit;
876     }
877 
878     @Override
879     public void setPurchaseOrderTotalLimit(KualiDecimal purchaseOrderTotalLimit) {
880         this.purchaseOrderTotalLimit = purchaseOrderTotalLimit;
881     }
882 
883     @Override
884     public String getPurchaseOrderTransmissionMethodCode() {
885         return purchaseOrderTransmissionMethodCode;
886     }
887 
888     @Override
889     public void setPurchaseOrderTransmissionMethodCode(String purchaseOrderTransmissionMethodCode) {
890         this.purchaseOrderTransmissionMethodCode = purchaseOrderTransmissionMethodCode;
891     }
892 
893     @Override
894     public String getRecurringPaymentTypeCode() {
895         return recurringPaymentTypeCode;
896     }
897 
898     @Override
899     public void setRecurringPaymentTypeCode(String recurringPaymentTypeCode) {
900         this.recurringPaymentTypeCode = recurringPaymentTypeCode;
901     }
902 
903     @Override
904     public String getRequestorPersonEmailAddress() {
905         return requestorPersonEmailAddress;
906     }
907 
908     @Override
909     public void setRequestorPersonEmailAddress(String requestorPersonEmailAddress) {
910         this.requestorPersonEmailAddress = requestorPersonEmailAddress;
911     }
912 
913     @Override
914     public String getRequestorPersonName() {
915         return requestorPersonName;
916     }
917 
918     @Override
919     public void setRequestorPersonName(String requestorPersonName) {
920         this.requestorPersonName = requestorPersonName;
921     }
922 
923     @Override
924     public String getRequestorPersonPhoneNumber() {
925         return requestorPersonPhoneNumber;
926     }
927 
928     @Override
929     public void setRequestorPersonPhoneNumber(String requestorPersonPhoneNumber) {
930         this.requestorPersonPhoneNumber = requestorPersonPhoneNumber;
931     }
932 
933     @Override
934     public String getRequisitionSourceCode() {
935         return requisitionSourceCode;
936     }
937 
938     @Override
939     public void setRequisitionSourceCode(String requisitionSourceCode) {
940         this.requisitionSourceCode = requisitionSourceCode;
941     }
942 
943     public String getVendorContactsLabel() {
944         return vendorContactsLabel;
945     }
946 
947     public void setVendorContactsLabel(String vendorContactsLabel) {
948         this.vendorContactsLabel = vendorContactsLabel;
949     }
950 
951     public VendorContract getVendorContract() {
952         if (ObjectUtils.isNull(vendorContract)) {
953             refreshReferenceObject(PurapPropertyConstants.VENDOR_CONTRACT);
954         }
955         return vendorContract;
956     }
957 
958     public void setVendorContract(VendorContract vendorContract) {
959         this.vendorContract = vendorContract;
960     }
961 
962     @Override
963     public Integer getVendorContractGeneratedIdentifier() {
964         return vendorContractGeneratedIdentifier;
965     }
966 
967     @Override
968     public void setVendorContractGeneratedIdentifier(Integer vendorContractGeneratedIdentifier) {
969         this.vendorContractGeneratedIdentifier = vendorContractGeneratedIdentifier;
970     }
971 
972     public String getVendorContractName() {
973         getVendorContract();
974         if (ObjectUtils.isNull(vendorContract)) {
975             return "";
976         } else {
977             return vendorContract.getVendorContractName();
978         }
979     }
980 
981     @Override
982     public String getVendorFaxNumber() {
983         return vendorFaxNumber;
984     }
985 
986     @Override
987     public void setVendorFaxNumber(String vendorFaxNumber) {
988         this.vendorFaxNumber = vendorFaxNumber;
989     }
990 
991     @Override
992     public String getVendorNoteText() {
993         return vendorNoteText;
994     }
995 
996     @Override
997     public void setVendorNoteText(String vendorNoteText) {
998         this.vendorNoteText = vendorNoteText;
999     }
1000 
1001     @Override
1002     public String getVendorPaymentTermsCode() {
1003         return vendorPaymentTermsCode;
1004     }
1005 
1006     @Override
1007     public void setVendorPaymentTermsCode(String vendorPaymentTermsCode) {
1008         this.vendorPaymentTermsCode = vendorPaymentTermsCode;
1009     }
1010 
1011     @Override
1012     public String getVendorPhoneNumber() {
1013         return vendorPhoneNumber;
1014     }
1015 
1016     @Override
1017     public void setVendorPhoneNumber(String vendorPhoneNumber) {
1018         this.vendorPhoneNumber = vendorPhoneNumber;
1019     }
1020 
1021     @Override
1022     public Boolean getVendorRestrictedIndicator() {
1023         return vendorRestrictedIndicator;
1024     }
1025 
1026     @Override
1027     public void setVendorRestrictedIndicator(Boolean vendorRestrictedIndicator) {
1028         this.vendorRestrictedIndicator = vendorRestrictedIndicator;
1029     }
1030 
1031     @Override
1032     public String getVendorShippingPaymentTermsCode() {
1033         return vendorShippingPaymentTermsCode;
1034     }
1035 
1036     @Override
1037     public void setVendorShippingPaymentTermsCode(String vendorShippingPaymentTermsCode) {
1038         this.vendorShippingPaymentTermsCode = vendorShippingPaymentTermsCode;
1039     }
1040 
1041     @Override
1042     public String getVendorShippingTitleCode() {
1043         return vendorShippingTitleCode;
1044     }
1045 
1046     @Override
1047     public void setVendorShippingTitleCode(String vendorShippingTitleCode) {
1048         this.vendorShippingTitleCode = vendorShippingTitleCode;
1049     }
1050 
1051     @Override
1052     public Chart getChartOfAccounts() {
1053         return chartOfAccounts;
1054     }
1055 
1056     @Override
1057     public CampusParameter getDeliveryCampus() {
1058         return deliveryCampus;
1059     }
1060 
1061     @Override
1062     public DeliveryRequiredDateReason getDeliveryRequiredDateReason() {
1063         return deliveryRequiredDateReason;
1064     }
1065 
1066     @Override
1067     public FundingSource getFundingSource() {
1068         return fundingSource;
1069     }
1070 
1071     @Override
1072     public Account getNonInstitutionFundAccount() {
1073         return nonInstitutionFundAccount;
1074     }
1075 
1076     @Override
1077     public Chart getNonInstitutionFundChartOfAccounts() {
1078         return nonInstitutionFundChartOfAccounts;
1079     }
1080 
1081     @Override
1082     public Organization getNonInstitutionFundOrganization() {
1083         return nonInstitutionFundOrganization;
1084     }
1085 
1086     @Override
1087     public Chart getNonInstitutionFundOrgChartOfAccounts() {
1088         return nonInstitutionFundOrgChartOfAccounts;
1089     }
1090 
1091     @Override
1092     public Organization getOrganization() {
1093         return organization;
1094     }
1095 
1096     @Override
1097     public PurchaseOrderTransmissionMethod getPurchaseOrderTransmissionMethod() {
1098         return purchaseOrderTransmissionMethod;
1099     }
1100 
1101     @Override
1102     public RecurringPaymentType getRecurringPaymentType() {
1103         return recurringPaymentType;
1104     }
1105 
1106     @Override
1107     public RequisitionSource getRequisitionSource() {
1108         return requisitionSource;
1109     }
1110 
1111     public String getSupplierDiversityLabel() {
1112         return supplierDiversityLabel;
1113     }
1114 
1115     @Override
1116     public PurchaseOrderCostSource getPurchaseOrderCostSource() {
1117         if (ObjectUtils.isNull(purchaseOrderCostSource)) {
1118             refreshReferenceObject(PurapPropertyConstants.PURCHASE_ORDER_COST_SOURCE);
1119         }
1120         return purchaseOrderCostSource;
1121     }
1122 
1123     /**
1124      * @deprecated
1125      */
1126     @Deprecated
1127     @Override
1128     public void setChartOfAccounts(Chart chartOfAccounts) {
1129         this.chartOfAccounts = chartOfAccounts;
1130     }
1131 
1132     /**
1133      * @deprecated
1134      */
1135     @Deprecated
1136     @Override
1137     public void setDeliveryCampus(CampusParameter deliveryCampus) {
1138         this.deliveryCampus = deliveryCampus;
1139     }
1140 
1141     /**
1142      * @deprecated
1143      */
1144     @Deprecated
1145     @Override
1146     public void setDeliveryRequiredDateReason(DeliveryRequiredDateReason deliveryRequiredDateReason) {
1147         this.deliveryRequiredDateReason = deliveryRequiredDateReason;
1148     }
1149 
1150     /**
1151      * @deprecated
1152      */
1153     @Deprecated
1154     @Override
1155     public void setFundingSource(FundingSource fundingSource) {
1156         this.fundingSource = fundingSource;
1157     }
1158 
1159     /**
1160      * @deprecated
1161      */
1162     @Deprecated
1163     @Override
1164     public void setNonInstitutionFundAccount(Account nonInstitutionFundAccount) {
1165         this.nonInstitutionFundAccount = nonInstitutionFundAccount;
1166     }
1167 
1168     /**
1169      * @deprecated
1170      */
1171     @Deprecated
1172     @Override
1173     public void setNonInstitutionFundChartOfAccounts(Chart nonInstitutionFundChartOfAccounts) {
1174         this.nonInstitutionFundChartOfAccounts = nonInstitutionFundChartOfAccounts;
1175     }
1176 
1177     /**
1178      * @deprecated
1179      */
1180     @Deprecated
1181     @Override
1182     public void setNonInstitutionFundOrganization(Organization nonInstitutionFundOrganization) {
1183         this.nonInstitutionFundOrganization = nonInstitutionFundOrganization;
1184     }
1185 
1186     /**
1187      * @deprecated
1188      */
1189     @Deprecated
1190     @Override
1191     public void setNonInstitutionFundOrgChartOfAccounts(Chart nonInstitutionFundOrgChartOfAccounts) {
1192         this.nonInstitutionFundOrgChartOfAccounts = nonInstitutionFundOrgChartOfAccounts;
1193     }
1194 
1195     /**
1196      * @deprecated
1197      */
1198     @Deprecated
1199     @Override
1200     public void setOrganization(Organization organization) {
1201         this.organization = organization;
1202     }
1203 
1204     /**
1205      * @deprecated
1206      */
1207     @Deprecated
1208     @Override
1209     public void setPurchaseOrderCostSource(PurchaseOrderCostSource purchaseOrderCostSource) {
1210         this.purchaseOrderCostSource = purchaseOrderCostSource;
1211     }
1212 
1213     /**
1214      * @deprecated
1215      */
1216     @Deprecated
1217     @Override
1218     public void setPurchaseOrderTransmissionMethod(PurchaseOrderTransmissionMethod purchaseOrderTransmissionMethod) {
1219         this.purchaseOrderTransmissionMethod = purchaseOrderTransmissionMethod;
1220     }
1221 
1222     /**
1223      * @deprecated
1224      */
1225     @Deprecated
1226     @Override
1227     public void setRecurringPaymentType(RecurringPaymentType recurringPaymentType) {
1228         this.recurringPaymentType = recurringPaymentType;
1229     }
1230 
1231     /**
1232      * @deprecated
1233      */
1234     @Deprecated
1235     @Override
1236     public void setRequisitionSource(RequisitionSource requisitionSource) {
1237         this.requisitionSource = requisitionSource;
1238     }
1239 
1240     /**
1241      * Gets the receivingDocumentRequiredIndicator attribute.
1242      *
1243      * @return Returns the receivingDocumentRequiredIndicator.
1244      */
1245     @Override
1246     public boolean isReceivingDocumentRequiredIndicator() {
1247         return receivingDocumentRequiredIndicator;
1248     }
1249 
1250     /**
1251      * Sets the receivingDocumentRequiredIndicator attribute value.
1252      *
1253      * @param receivingDocumentRequiredIndicator
1254      *         The receivingDocumentRequiredIndicator to set.
1255      */
1256     @Override
1257     public void setReceivingDocumentRequiredIndicator(boolean receivingDocumentRequiredIndicator) {
1258         // if receivingDocumentRequiredIndicator functionality is disabled, always set it to false, overriding the passed-in value
1259         if (!isEnableReceivingDocumentRequiredIndicator()) {
1260             receivingDocumentRequiredIndicator = false;
1261         } else {
1262             this.receivingDocumentRequiredIndicator = receivingDocumentRequiredIndicator;
1263         }
1264     }
1265 
1266     @Override
1267     public boolean isPaymentRequestPositiveApprovalIndicator() {
1268         return paymentRequestPositiveApprovalIndicator;
1269     }
1270 
1271     @Override
1272     public void setPaymentRequestPositiveApprovalIndicator(boolean paymentRequestPositiveApprovalIndicator) {
1273         // if paymentRequestPositiveApprovalIndicator functionality is disabled, always set it to false, overriding the passed-in value
1274         if (!isEnablePaymentRequestPositiveApprovalIndicator()) {
1275             paymentRequestPositiveApprovalIndicator = false;
1276         } else {
1277             this.paymentRequestPositiveApprovalIndicator = paymentRequestPositiveApprovalIndicator;
1278         }
1279     }
1280 
1281     public List<CommodityCode> getCommodityCodesForRouting() {
1282         return commodityCodesForRouting;
1283     }
1284 
1285     public void setCommodityCodesForRouting(List<CommodityCode> commodityCodesForRouting) {
1286         this.commodityCodesForRouting = commodityCodesForRouting;
1287     }
1288 
1289     @Override
1290     public String getCapitalAssetSystemTypeCode() {
1291         return capitalAssetSystemTypeCode;
1292     }
1293 
1294     @Override
1295     public void setCapitalAssetSystemTypeCode(String capitalAssetSystemTypeCode) {
1296         this.capitalAssetSystemTypeCode = capitalAssetSystemTypeCode;
1297     }
1298 
1299     @Override
1300     public String getCapitalAssetSystemStateCode() {
1301         return capitalAssetSystemStateCode;
1302     }
1303 
1304     @Override
1305     public void setCapitalAssetSystemStateCode(String capitalAssetSystemStateCode) {
1306         this.capitalAssetSystemStateCode = capitalAssetSystemStateCode;
1307     }
1308 
1309     /**
1310      * Gets the justification attribute.
1311      *
1312      * @return Returns the justification.
1313      */
1314     public String getJustification() {
1315         return justification;
1316     }
1317 
1318     /**
1319      * Sets the justification attribute value.
1320      *
1321      * @param justification The justification to set.
1322      */
1323     public void setJustification(String justification) {
1324         this.justification = justification;
1325     }
1326 
1327     @Override
1328     public CapitalAssetSystemType getCapitalAssetSystemType() {
1329         if (ObjectUtils.isNull(capitalAssetSystemType)) {
1330             this.refreshReferenceObject("capitalAssetSystemType");
1331         }
1332         return capitalAssetSystemType;
1333     }
1334 
1335     @Override
1336     public void setCapitalAssetSystemType(CapitalAssetSystemType capitalAssetSystemType) {
1337         this.capitalAssetSystemType = capitalAssetSystemType;
1338     }
1339 
1340     @Override
1341     public CapitalAssetSystemState getCapitalAssetSystemState() {
1342         if (ObjectUtils.isNull(capitalAssetSystemState)) {
1343             this.refreshReferenceObject("capitalAssetSystemState");
1344         }
1345         return capitalAssetSystemState;
1346     }
1347 
1348     @Override
1349     public void setCapitalAssetSystemState(CapitalAssetSystemState capitalAssetSystemState) {
1350         this.capitalAssetSystemState = capitalAssetSystemState;
1351     }
1352 
1353     @Override
1354     public List<CapitalAssetSystem> getPurchasingCapitalAssetSystems() {
1355         return purchasingCapitalAssetSystems;
1356     }
1357 
1358     @Override
1359     public void setPurchasingCapitalAssetSystems(List<CapitalAssetSystem> purchasingCapitalAssetSystems) {
1360         this.purchasingCapitalAssetSystems = purchasingCapitalAssetSystems;
1361     }
1362 
1363     @Override
1364     public List<PurchasingCapitalAssetItem> getPurchasingCapitalAssetItems() {
1365         return purchasingCapitalAssetItems;
1366     }
1367 
1368     @Override
1369     public void setPurchasingCapitalAssetItems(List<PurchasingCapitalAssetItem> purchasingCapitalAssetItems) {
1370         this.purchasingCapitalAssetItems = purchasingCapitalAssetItems;
1371     }
1372 
1373     @Override
1374     public abstract Class getPurchasingCapitalAssetItemClass();
1375 
1376     @Override
1377     public abstract Class getPurchasingCapitalAssetSystemClass();
1378 
1379     @Override
1380     public PurchasingItem getPurchasingItem(Integer itemIdentifier) {
1381 
1382         if (ObjectUtils.isNull(itemIdentifier)) {
1383             return null;
1384         }
1385 
1386         PurchasingItem item = null;
1387 
1388         for (PurchasingItem pi : (List<PurchasingItem>) this.getItems()) {
1389             if (itemIdentifier.equals(pi.getItemIdentifier())) {
1390                 item = pi;
1391                 break;
1392             }
1393         }
1394 
1395         return item;
1396     }
1397 
1398     @Override
1399     public PurchasingCapitalAssetItem getPurchasingCapitalAssetItem(Integer itemIdentifier) {
1400 
1401         if (ObjectUtils.isNull(itemIdentifier)) {
1402             return null;
1403         }
1404 
1405         PurchasingCapitalAssetItem item = null;
1406 
1407         for (PurchasingCapitalAssetItem pcai : this.getPurchasingCapitalAssetItems()) {
1408             if (itemIdentifier.equals(pcai.getItemIdentifier())) {
1409                 item = pcai;
1410                 break;
1411             }
1412         }
1413 
1414         return item;
1415     }
1416 
1417     /**
1418      * @see org.kuali.ole.module.purap.document.PurchasingAccountsPayableDocumentBase#buildListOfDeletionAwareLists()
1419      */
1420     @Override
1421     public List buildListOfDeletionAwareLists() {
1422         List managedLists = super.buildListOfDeletionAwareLists();
1423         if (allowDeleteAwareCollection) {
1424             List<ItemCapitalAsset> assetLists = new ArrayList<ItemCapitalAsset>();
1425             List<CapitalAssetLocation> capitalAssetLocationLists = new ArrayList<CapitalAssetLocation>();
1426             if (StringUtils.equals(this.getCapitalAssetSystemTypeCode(), PurapConstants.CapitalAssetSystemTypes.INDIVIDUAL)) {
1427                 for (PurchasingCapitalAssetItem capitalAssetItem : this.getPurchasingCapitalAssetItems()) {
1428                     //We only need to add the itemCapitalAssets to assetLists if the system is not null, otherwise 
1429                     //just let the assetLists be empty ArrayList.
1430                     if (capitalAssetItem.getPurchasingCapitalAssetSystem() != null) {
1431                         assetLists.addAll(capitalAssetItem.getPurchasingCapitalAssetSystem().getItemCapitalAssets());
1432                         capitalAssetLocationLists.addAll(capitalAssetItem.getPurchasingCapitalAssetSystem().getCapitalAssetLocations());
1433                     }
1434                 }
1435             } else {
1436                 for (CapitalAssetSystem system : this.getPurchasingCapitalAssetSystems()) {
1437                     assetLists.addAll(system.getItemCapitalAssets());
1438                     capitalAssetLocationLists.addAll(system.getCapitalAssetLocations());
1439                 }
1440             }
1441             managedLists.add(assetLists);
1442             managedLists.add(capitalAssetLocationLists);
1443             managedLists.add(this.getPurchasingCapitalAssetSystems());
1444             //managedLists.add(this.getPurchasingCapitalAssetItems());
1445         }
1446         return managedLists;
1447     }
1448 
1449     /**
1450      * Overrides the method in PurchasingAccountsPayableDocumentBase to remove the
1451      * purchasingCapitalAssetSystem when the system type is either ONE or MULT.
1452      *
1453      * @see org.kuali.ole.module.purap.document.PurchasingAccountsPayableDocumentBase#prepareForSave(org.kuali.rice.krad.rule.event.KualiDocumentEvent)
1454      */
1455     @Override
1456     public void prepareForSave(KualiDocumentEvent event) {
1457         super.prepareForSave(event);
1458         if (StringUtils.isNotBlank(this.getCapitalAssetSystemTypeCode())) {
1459             if (this.getCapitalAssetSystemTypeCode().equals(PurapConstants.CapitalAssetSystemTypes.ONE_SYSTEM) || this.getCapitalAssetSystemTypeCode().equals(PurapConstants.CapitalAssetSystemTypes.MULTIPLE)) {
1460                 //If the system state is ONE or MULT, we have to remove all the systems on the items because it's not applicable.
1461                 for (PurchasingCapitalAssetItem camsItem : this.getPurchasingCapitalAssetItems()) {
1462                     camsItem.setPurchasingCapitalAssetSystem(null);
1463                 }
1464             }
1465         }
1466         if (event instanceof RouteDocumentEvent || event instanceof ApproveDocumentEvent) {
1467 
1468             boolean defaultUseTaxIndicatorValue = SpringContext.getBean(PurchasingService.class).getDefaultUseTaxIndicatorValue(this);
1469             SpringContext.getBean(PurapService.class).updateUseTaxIndicator(this, defaultUseTaxIndicatorValue);
1470         }
1471     }
1472 
1473     @Override
1474     public Date getTransactionTaxDate() {
1475         return SpringContext.getBean(DateTimeService.class).getCurrentSqlDate();
1476     }
1477 
1478     @Override
1479     public void clearCapitalAssetFields() {
1480         this.getPurchasingCapitalAssetItems().clear();
1481         this.getPurchasingCapitalAssetSystems().clear();
1482         this.setCapitalAssetSystemStateCode(null);
1483         this.setCapitalAssetSystemTypeCode(null);
1484         this.setCapitalAssetSystemState(null);
1485         this.setCapitalAssetSystemType(null);
1486 
1487     }
1488 
1489     /**
1490      * @return the payment request positive approval indicator
1491      */
1492     public boolean getPaymentRequestPositiveApprovalIndicatorForSearching() {
1493         return paymentRequestPositiveApprovalIndicator;
1494     }
1495 
1496     /**
1497      * @return the receiving document required indicator
1498      */
1499     public boolean getReceivingDocumentRequiredIndicatorForSearching() {
1500         return receivingDocumentRequiredIndicator;
1501     }
1502 
1503     public String getDocumentChartOfAccountsCodeForSearching() {
1504         return chartOfAccountsCode;
1505     }
1506 
1507     public String getDocumentOrganizationCodeForSearching() {
1508         return organizationCode;
1509     }
1510 
1511     @Override
1512     public boolean shouldGiveErrorForEmptyAccountsProration() {
1513         return true;
1514     }
1515 
1516     public String getChartAndOrgCodeForResult() {
1517         return getChartOfAccountsCode() + "-" + getOrganizationCode();
1518     }
1519 
1520     public String getDeliveryCampusCodeForSearch() {
1521         return getDeliveryCampusCode();
1522     }
1523 
1524     public boolean getHasB2BVendor() {
1525         if (getVendorHeaderGeneratedIdentifier() != null) {
1526             refreshReferenceObject(VendorPropertyConstants.VENDOR_DETAIL);
1527             String campusCode = GlobalVariables.getUserSession().getPerson().getCampusCode();
1528             VendorDetail vendorDetail = getVendorDetail();
1529             if (vendorDetail == null || StringUtils.isEmpty(campusCode)) {
1530                 return false; // this should never happen
1531             }
1532             return SpringContext.getBean(VendorService.class).getVendorB2BContract(vendorDetail, campusCode) != null;
1533         }
1534         return false;
1535     }
1536 }