001    /*
002     * Copyright 2011 The Kuali Foundation.
003     * 
004     * Licensed under the Educational Community License, Version 2.0 (the "License");
005     * you may not use this file except in compliance with the License.
006     * You may obtain a copy of the License at
007     * 
008     * http://www.opensource.org/licenses/ecl2.php
009     * 
010     * Unless required by applicable law or agreed to in writing, software
011     * distributed under the License is distributed on an "AS IS" BASIS,
012     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
013     * See the License for the specific language governing permissions and
014     * limitations under the License.
015     */
016    package org.kuali.kfs.module.cab.businessobject;
017    
018    import java.util.ArrayList;
019    import java.util.Collection;
020    import java.util.HashMap;
021    import java.util.LinkedHashMap;
022    import java.util.List;
023    import java.util.Map;
024    import java.util.Properties;
025    
026    import org.apache.commons.lang.StringUtils;
027    import org.apache.log4j.Logger;
028    import org.kuali.kfs.integration.purap.ItemCapitalAsset;
029    import org.kuali.kfs.module.cab.CabConstants;
030    import org.kuali.kfs.module.cab.CabPropertyConstants;
031    import org.kuali.kfs.module.cab.document.service.PurApLineService;
032    import org.kuali.kfs.module.cam.CamsPropertyConstants;
033    import org.kuali.kfs.module.cam.businessobject.AssetGlobalDetail;
034    import org.kuali.kfs.module.cam.businessobject.AssetPaymentAssetDetail;
035    import org.kuali.kfs.module.purap.businessobject.PurchaseOrderItemCapitalAsset;
036    import org.kuali.kfs.sys.KFSConstants;
037    import org.kuali.kfs.sys.context.SpringContext;
038    import org.kuali.rice.kns.bo.PersistableBusinessObjectBase;
039    import org.kuali.rice.kns.service.BusinessObjectService;
040    import org.kuali.rice.kns.service.DataDictionaryService;
041    import org.kuali.rice.kns.util.KualiDecimal;
042    import org.kuali.rice.kns.util.ObjectUtils;
043    import org.kuali.rice.kns.util.TypedArrayList;
044    import org.kuali.rice.kns.util.UrlFactory;
045    
046    /**
047     * @author Kuali Nervous System Team (kualidev@oncourse.iu.edu)
048     */
049    public class PurchasingAccountsPayableItemAsset extends PersistableBusinessObjectBase implements Comparable<PurchasingAccountsPayableItemAsset> {
050        private static final Logger LOG = Logger.getLogger(PurchasingAccountsPayableItemAsset.class);
051    
052        private String documentNumber;
053        private Integer accountsPayableLineItemIdentifier;
054        private Integer capitalAssetBuilderLineNumber;
055        private String accountsPayableLineItemDescription;
056        private KualiDecimal accountsPayableItemQuantity;
057        private String capitalAssetManagementDocumentNumber;
058        private String activityStatusCode;
059    
060        private PurchasingAccountsPayableDocument purchasingAccountsPayableDocument;
061        private List<PurchasingAccountsPayableLineAssetAccount> purchasingAccountsPayableLineAssetAccounts;
062    
063        // non persistent fields
064        private boolean active;
065        private Integer itemLineNumber;
066        private boolean additionalChargeNonTradeInIndicator;
067        private boolean tradeInAllowance;
068        private boolean itemAssignedToTradeInIndicator;
069        private KualiDecimal unitCost;
070        private KualiDecimal totalCost;
071        private String firstFincialObjectCode;
072        private KualiDecimal splitQty;
073        private boolean selectedValue;
074        private String itemTypeCode;
075        private String lockingInformation;
076        // used for Capital Asset Transaction
077        private String capitalAssetTransactionTypeCode;
078        private List<ItemCapitalAsset> purApItemAssets;
079        private Integer capitalAssetSystemIdentifier;
080    
081        private Integer purchaseOrderItemIdentifier;
082        // used to control "create asset" and "apply payment" button display
083        private boolean createAssetIndicator;
084        private boolean applyPaymentIndicator;
085    
086        private String preTagInquiryUrl;
087        private List<Long> approvedAssetNumbers;
088        
089        private Integer paymentRequestIdentifier;
090    
091        public PurchasingAccountsPayableItemAsset() {
092            this.purchasingAccountsPayableLineAssetAccounts = new TypedArrayList(PurchasingAccountsPayableLineAssetAccount.class);
093            this.selectedValue = false;
094            this.createAssetIndicator = false;
095            this.applyPaymentIndicator = false;
096            this.purApItemAssets = new ArrayList<ItemCapitalAsset>();
097        }
098    
099        // constructor used for split
100        public PurchasingAccountsPayableItemAsset(PurchasingAccountsPayableItemAsset initialItemAsset) {
101            this.documentNumber = initialItemAsset.documentNumber;
102            this.accountsPayableLineItemIdentifier = initialItemAsset.getAccountsPayableLineItemIdentifier();
103            this.accountsPayableLineItemDescription = initialItemAsset.getAccountsPayableLineItemDescription();
104            this.itemLineNumber = initialItemAsset.getItemLineNumber();
105            this.firstFincialObjectCode = initialItemAsset.getFirstFincialObjectCode();
106            this.activityStatusCode = initialItemAsset.getActivityStatusCode();
107            this.tradeInAllowance = initialItemAsset.isTradeInAllowance();
108            this.itemAssignedToTradeInIndicator = initialItemAsset.isItemAssignedToTradeInIndicator();
109            this.additionalChargeNonTradeInIndicator = initialItemAsset.isAdditionalChargeNonTradeInIndicator();
110            this.purchasingAccountsPayableLineAssetAccounts = new TypedArrayList(PurchasingAccountsPayableLineAssetAccount.class);
111            this.selectedValue = false;
112            this.createAssetIndicator = initialItemAsset.isCreateAssetIndicator();
113            this.applyPaymentIndicator = initialItemAsset.isApplyPaymentIndicator();
114            this.purchaseOrderItemIdentifier = initialItemAsset.getPurchaseOrderItemIdentifier();
115            this.capitalAssetTransactionTypeCode = initialItemAsset.getCapitalAssetTransactionTypeCode();
116            this.purApItemAssets = new ArrayList<ItemCapitalAsset>(initialItemAsset.getPurApItemAssets());
117            this.capitalAssetSystemIdentifier = initialItemAsset.getCapitalAssetSystemIdentifier();
118            this.purchasingAccountsPayableDocument = initialItemAsset.getPurchasingAccountsPayableDocument();
119            this.lockingInformation = initialItemAsset.getLockingInformation();
120        }
121    
122    
123        /**
124         * Gets the lockingInformation attribute. 
125         * @return Returns the lockingInformation.
126         */
127        public String getLockingInformation() {
128            return lockingInformation;
129        }
130    
131        /**
132         * Sets the lockingInformation attribute value.
133         * @param lockingInformation The lockingInformation to set.
134         */
135        public void setLockingInformation(String lockingInformation) {
136            this.lockingInformation = lockingInformation;
137        }
138    
139        /**
140         * Gets the capitalAssetSystemIdentifier attribute.
141         * 
142         * @return Returns the capitalAssetSystemIdentifier.
143         */
144        public Integer getCapitalAssetSystemIdentifier() {
145            return capitalAssetSystemIdentifier;
146        }
147    
148        /**
149         * Sets the capitalAssetSystemIdentifier attribute value.
150         * 
151         * @param capitalAssetSystemIdentifier The capitalAssetSystemIdentifier to set.
152         */
153        public void setCapitalAssetSystemIdentifier(Integer capitalAssetSystemIdentifier) {
154            this.capitalAssetSystemIdentifier = capitalAssetSystemIdentifier;
155        }
156    
157        /**
158         * Gets the purchaseOrderItemIdentifier attribute.
159         * 
160         * @return Returns the purchaseOrderItemIdentifier.
161         */
162        public Integer getPurchaseOrderItemIdentifier() {
163            return purchaseOrderItemIdentifier;
164        }
165    
166        /**
167         * Sets the purchaseOrderItemIdentifier attribute value.
168         * 
169         * @param purchaseOrderItemIdentifier The purchaseOrderItemIdentifier to set.
170         */
171        public void setPurchaseOrderItemIdentifier(Integer purchaseOrderItemIdentifier) {
172            this.purchaseOrderItemIdentifier = purchaseOrderItemIdentifier;
173        }
174    
175    
176        /**
177         * Gets the capitalAssetNumbers attribute.
178         * 
179         * @return Returns the capitalAssetNumbers.
180         */
181        public List<ItemCapitalAsset> getPurApItemAssets() {
182            return purApItemAssets;
183        }
184    
185        /**
186         * Sets the capitalAssetNumbers attribute value.
187         * 
188         * @param capitalAssetNumbers The capitalAssetNumbers to set.
189         */
190        public void setPurApItemAssets(List<ItemCapitalAsset> capitalAssetNumbers) {
191            this.purApItemAssets = capitalAssetNumbers;
192        }
193    
194        /**
195         * Gets the capitalAssetNumbers attribute.
196         * 
197         * @return Returns the capitalAssetNumbers.
198         */
199        public ItemCapitalAsset getPurApItemAsset(int index) {
200            while (getPurApItemAssets().size() <= index) {
201                getPurApItemAssets().add(new PurchaseOrderItemCapitalAsset());
202            }
203            return (ItemCapitalAsset) getPurApItemAssets().get(index);
204        }
205    
206    
207        /**
208         * Gets the createAssetIndicator attribute.
209         * 
210         * @return Returns the createAssetIndicator.
211         */
212        public boolean isCreateAssetIndicator() {
213            return createAssetIndicator;
214        }
215    
216        /**
217         * Sets the createAssetIndicator attribute value.
218         * 
219         * @param createAssetIndicator The createAssetIndicator to set.
220         */
221        public void setCreateAssetIndicator(boolean createAssetIndicator) {
222            this.createAssetIndicator = createAssetIndicator;
223        }
224    
225        /**
226         * Gets the applyPaymentIndicator attribute.
227         * 
228         * @return Returns the applyPaymentIndicator.
229         */
230        public boolean isApplyPaymentIndicator() {
231            return applyPaymentIndicator;
232        }
233    
234        /**
235         * Sets the applyPaymentIndicator attribute value.
236         * 
237         * @param applyPaymentIndicator The applyPaymentIndicator to set.
238         */
239        public void setApplyPaymentIndicator(boolean applyPaymentIndicator) {
240            this.applyPaymentIndicator = applyPaymentIndicator;
241        }
242    
243        /**
244         * Gets the selectedValue attribute.
245         * 
246         * @return Returns the selectedValue.
247         */
248        public boolean isSelectedValue() {
249            return selectedValue;
250        }
251    
252        /**
253         * Sets the selectedValue attribute value.
254         * 
255         * @param selectedValue The selectedValue to set.
256         */
257        public void setSelectedValue(boolean selectedValue) {
258            this.selectedValue = selectedValue;
259        }
260    
261        /**
262         * Gets the itemTypeCode attribute.
263         * 
264         * @return Returns the itemTypeCode.
265         */
266        public String getItemTypeCode() {
267            return itemTypeCode;
268        }
269    
270        /**
271         * Sets the itemTypeCode attribute value.
272         * 
273         * @param itemTypeCode The itemTypeCode to set.
274         */
275        public void setItemTypeCode(String itemTypeCode) {
276            this.itemTypeCode = itemTypeCode;
277        }
278    
279        /**
280         * Gets the capitalAssetTransactionTypeCode attribute.
281         * 
282         * @return Returns the capitalAssetTransactionTypeCode.
283         */
284        public String getCapitalAssetTransactionTypeCode() {
285            return capitalAssetTransactionTypeCode;
286        }
287    
288        /**
289         * Sets the capitalAssetTransactionTypeCode attribute value.
290         * 
291         * @param capitalAssetTransactionTypeCode The capitalAssetTransactionTypeCode to set.
292         */
293        public void setCapitalAssetTransactionTypeCode(String capitalAssetTransactionTypeCode) {
294            this.capitalAssetTransactionTypeCode = capitalAssetTransactionTypeCode;
295        }
296    
297        /**
298         * Gets the additionalChargeNonTradeInIndicator attribute.
299         * 
300         * @return Returns the additionalChargeNonTradeInIndicator.
301         */
302        public boolean isAdditionalChargeNonTradeInIndicator() {
303            return additionalChargeNonTradeInIndicator;
304        }
305    
306        /**
307         * Sets the additionalChargeNonTradeInIndicator attribute value.
308         * 
309         * @param additionalChargeNonTradeInIndicator The additionalChargeNonTradeInIndicator to set.
310         */
311        public void setAdditionalChargeNonTradeInIndicator(boolean additionalChargeNonTradeInIndicator) {
312            this.additionalChargeNonTradeInIndicator = additionalChargeNonTradeInIndicator;
313        }
314    
315        /**
316         * Gets the tradeInAllowance attribute.
317         * 
318         * @return Returns the tradeInAllowance.
319         */
320        public boolean isTradeInAllowance() {
321            return tradeInAllowance;
322        }
323    
324        /**
325         * Sets the tradeInAllowance attribute value.
326         * 
327         * @param tradeInAllowance The tradeInAllowance to set.
328         */
329        public void setTradeInAllowance(boolean tradeInAllowance) {
330            this.tradeInAllowance = tradeInAllowance;
331        }
332    
333        /**
334         * Gets the splitQty attribute.
335         * 
336         * @return Returns the splitQty.
337         */
338        public KualiDecimal getSplitQty() {
339            return splitQty;
340        }
341    
342        /**
343         * Sets the splitQty attribute value.
344         * 
345         * @param splitQty The splitQty to set.
346         */
347        public void setSplitQty(KualiDecimal splitQty) {
348            this.splitQty = splitQty;
349        }
350    
351    
352        /**
353         * Gets the purchasingAccountsPayableLineAssetAccounts attribute.
354         * 
355         * @return Returns the purchasingAccountsPayableLineAssetAccounts.
356         */
357        public List<PurchasingAccountsPayableLineAssetAccount> getPurchasingAccountsPayableLineAssetAccounts() {
358            return purchasingAccountsPayableLineAssetAccounts;
359        }
360    
361        /**
362         * Sets the purchasingAccountsPayableLineAssetAccounts attribute value.
363         * 
364         * @param purchasingAccountsPayableLineAssetAccounts The purchasingAccountsPayableLineAssetAccounts to set.
365         */
366        public void setPurchasingAccountsPayableLineAssetAccounts(List<PurchasingAccountsPayableLineAssetAccount> purchasingAccountsPayableLineAssetAccounts) {
367            this.purchasingAccountsPayableLineAssetAccounts = purchasingAccountsPayableLineAssetAccounts;
368        }
369    
370        /**
371         * Gets the documentNumber attribute.
372         * 
373         * @return Returns the documentNumber.
374         */
375        public String getDocumentNumber() {
376            return documentNumber;
377        }
378    
379        /**
380         * Sets the documentNumber attribute value.
381         * 
382         * @param documentNumber The documentNumber to set.
383         */
384        public void setDocumentNumber(String documentNumber) {
385            this.documentNumber = documentNumber;
386        }
387    
388        /**
389         * Gets the accountsPayableLineItemIdentifier attribute.
390         * 
391         * @return Returns the accountsPayableLineItemIdentifier.
392         */
393        public Integer getAccountsPayableLineItemIdentifier() {
394            return accountsPayableLineItemIdentifier;
395        }
396    
397        /**
398         * Sets the accountsPayableLineItemIdentifier attribute value.
399         * 
400         * @param accountsPayableLineItemIdentifier The accountsPayableLineItemIdentifier to set.
401         */
402        public void setAccountsPayableLineItemIdentifier(Integer accountsPayableLineItemIdentifier) {
403            this.accountsPayableLineItemIdentifier = accountsPayableLineItemIdentifier;
404        }
405    
406        /**
407         * Gets the accountsPayableLineItemDescription attribute.
408         * 
409         * @return Returns the accountsPayableLineItemDescription.
410         */
411        public String getAccountsPayableLineItemDescription() {
412            return accountsPayableLineItemDescription;
413        }
414    
415        /**
416         * Sets the accountsPayableLineItemDescription attribute value.
417         * 
418         * @param accountsPayableLineItemDescription The accountsPayableLineItemDescription to set.
419         */
420        public void setAccountsPayableLineItemDescription(String accountsPayableLineItemDescription) {
421            this.accountsPayableLineItemDescription = accountsPayableLineItemDescription;
422        }
423    
424        /**
425         * Gets the accountsPayableItemQuantity attribute.
426         * 
427         * @return Returns the accountsPayableItemQuantity.
428         */
429        public KualiDecimal getAccountsPayableItemQuantity() {
430            return accountsPayableItemQuantity;
431        }
432    
433        /**
434         * Sets the accountsPayableItemQuantity attribute value.
435         * 
436         * @param accountsPayableItemQuantity The accountsPayableItemQuantity to set.
437         */
438        public void setAccountsPayableItemQuantity(KualiDecimal accountsPayableItemQuantity) {
439            this.accountsPayableItemQuantity = accountsPayableItemQuantity;
440        }
441    
442        /**
443         * Gets the capitalAssetBuilderLineNumber attribute.
444         * 
445         * @return Returns the capitalAssetBuilderLineNumber
446         */
447        public Integer getCapitalAssetBuilderLineNumber() {
448            return capitalAssetBuilderLineNumber;
449        }
450    
451        /**
452         * Sets the capitalAssetBuilderLineNumber attribute.
453         * 
454         * @param capitalAssetBuilderLineNumber The capitalAssetBuilderLineNumber to set.
455         */
456        public void setCapitalAssetBuilderLineNumber(Integer capitalAssetBuilderLineNumber) {
457            this.capitalAssetBuilderLineNumber = capitalAssetBuilderLineNumber;
458        }
459    
460    
461        /**
462         * Gets the capitalAssetManagementDocumentNumber attribute.
463         * 
464         * @return Returns the capitalAssetManagementDocumentNumber
465         */
466        public String getCapitalAssetManagementDocumentNumber() {
467            return capitalAssetManagementDocumentNumber;
468        }
469    
470        /**
471         * Sets the capitalAssetManagementDocumentNumber attribute.
472         * 
473         * @param capitalAssetManagementDocumentNumber The capitalAssetManagementDocumentNumber to set.
474         */
475        public void setCapitalAssetManagementDocumentNumber(String capitalAssetManagementDocumentNumber) {
476            this.capitalAssetManagementDocumentNumber = capitalAssetManagementDocumentNumber;
477        }
478    
479        public Integer getItemLineNumber() {
480            return itemLineNumber;
481        }
482    
483        public void setItemLineNumber(Integer itemLineNumber) {
484            this.itemLineNumber = itemLineNumber;
485        }
486    
487        /**
488         * @see org.kuali.rice.kns.bo.BusinessObjectBase#toStringMapper()
489         */
490        protected LinkedHashMap toStringMapper() {
491            LinkedHashMap m = new LinkedHashMap();
492            m.put("documentNumber", this.documentNumber);
493            m.put("accountsPayableLineItemIdentifier", this.accountsPayableLineItemIdentifier);
494            m.put("capitalAssetBuilderLineNumber", this.capitalAssetBuilderLineNumber);
495            return m;
496        }
497    
498        /**
499         * Gets the active attribute.
500         * 
501         * @return Returns the active.
502         */
503        public boolean isActive() {
504            return CabConstants.ActivityStatusCode.NEW.equalsIgnoreCase(this.getActivityStatusCode()) || CabConstants.ActivityStatusCode.MODIFIED.equalsIgnoreCase(this.getActivityStatusCode());
505        }
506    
507        /**
508         * Gets the activityStatusCode attribute.
509         * 
510         * @return Returns the activityStatusCode.
511         */
512        public String getActivityStatusCode() {
513            return activityStatusCode;
514        }
515    
516        /**
517         * Sets the activityStatusCode attribute value.
518         * 
519         * @param activityStatusCode The activityStatusCode to set.
520         */
521        public void setActivityStatusCode(String activityStatusCode) {
522            this.activityStatusCode = activityStatusCode;
523        }
524    
525        /**
526         * Gets the purchasingAccountsPayableDocument attribute.
527         * 
528         * @return Returns the purchasingAccountsPayableDocument.
529         */
530        public PurchasingAccountsPayableDocument getPurchasingAccountsPayableDocument() {
531            return purchasingAccountsPayableDocument;
532        }
533    
534        /**
535         * Sets the purchasingAccountsPayableDocument attribute value.
536         * 
537         * @param purchasingAccountsPayableDocument The purchasingAccountsPayableDocument to set.
538         */
539        public void setPurchasingAccountsPayableDocument(PurchasingAccountsPayableDocument purchasingAccountsPayableDocument) {
540            this.purchasingAccountsPayableDocument = purchasingAccountsPayableDocument;
541        }
542    
543        /**
544         * Gets the itemAssignedToTradeInIndicator attribute.
545         * 
546         * @return Returns the itemAssignedToTradeInIndicator.
547         */
548        public boolean isItemAssignedToTradeInIndicator() {
549            return itemAssignedToTradeInIndicator;
550        }
551    
552        /**
553         * Sets the itemAssignedToTradeInIndicator attribute value.
554         * 
555         * @param itemAssignedToTradeInIndicator The itemAssignedToTradeInIndicator to set.
556         */
557        public void setItemAssignedToTradeInIndicator(boolean itemAssignedToTradeInIndicator) {
558            this.itemAssignedToTradeInIndicator = itemAssignedToTradeInIndicator;
559        }
560    
561        /**
562         * Gets the unitCost attribute.
563         * 
564         * @return Returns the unitCost.
565         */
566        public KualiDecimal getUnitCost() {
567            return unitCost;
568        }
569    
570        /**
571         * Sets the unitCost attribute value.
572         * 
573         * @param unitCost The unitCost to set.
574         */
575        public void setUnitCost(KualiDecimal unitCost) {
576            this.unitCost = unitCost;
577        }
578    
579        /**
580         * Gets the totalCost attribute.
581         * 
582         * @return Returns the totalCost.
583         */
584        public KualiDecimal getTotalCost() {
585            return totalCost;
586        }
587    
588        /**
589         * Sets the totalCost attribute value.
590         * 
591         * @param totalCost The totalCost to set.
592         */
593        public void setTotalCost(KualiDecimal totalCost) {
594            this.totalCost = totalCost;
595        }
596    
597        /**
598         * Gets the firstFincialObjectCode attribute.
599         * 
600         * @return Returns the firstFincialObjectCode.
601         */
602        public String getFirstFincialObjectCode() {
603            return firstFincialObjectCode;
604        }
605    
606        /**
607         * Sets the firstFincialObjectCode attribute value.
608         * 
609         * @param firstFincialObjectCode The firstFincialObjectCode to set.
610         */
611        public void setFirstFincialObjectCode(String firstFincialObjectCode) {
612            this.firstFincialObjectCode = firstFincialObjectCode;
613        }
614    
615        public String getPreTagInquiryUrl() {
616            if (StringUtils.isNotBlank(this.preTagInquiryUrl)) {
617                return preTagInquiryUrl;
618            }
619    
620            if (ObjectUtils.isNotNull(this.getPurchasingAccountsPayableDocument())) {
621                Integer purchaseOrderIdentifier = this.getPurchasingAccountsPayableDocument().getPurchaseOrderIdentifier();
622    
623                PurApLineService purApLineService = SpringContext.getBean(PurApLineService.class);
624                if (purApLineService.isPretaggingExisting(purApLineService.getPreTagLineItem(purchaseOrderIdentifier, this.getItemLineNumber()))) {
625                    String baseUrl = KFSConstants.INQUIRY_ACTION;
626                    Properties parameters = new Properties();
627                    parameters.put(KFSConstants.DISPATCH_REQUEST_PARAMETER, KFSConstants.START_METHOD);
628                    parameters.put(KFSConstants.BUSINESS_OBJECT_CLASS_ATTRIBUTE, Pretag.class.getName());
629                    parameters.put(CabPropertyConstants.Pretag.PURCHASE_ORDER_NUMBER, purchaseOrderIdentifier.toString());
630                    parameters.put(CabPropertyConstants.Pretag.ITEM_LINE_NUMBER, this.getItemLineNumber().toString());
631    
632                    this.preTagInquiryUrl = UrlFactory.parameterizeUrl(baseUrl, parameters);
633    
634                    return this.preTagInquiryUrl;
635                }
636            }
637            return "";
638        }
639    
640        /**
641         * @see java.lang.Comparable#compareTo(java.lang.Object)
642         */
643        public int compareTo(PurchasingAccountsPayableItemAsset o) {
644            boolean o1ItemTypeBelowTheLine = this.isAdditionalChargeNonTradeInIndicator() || this.isTradeInAllowance();
645            boolean o2ItemTypeBelowTheLine = o.isAdditionalChargeNonTradeInIndicator() || o.isTradeInAllowance();
646            if (o1ItemTypeBelowTheLine && !o2ItemTypeBelowTheLine) {
647                return 1;
648            }
649            else if (o2ItemTypeBelowTheLine && !o1ItemTypeBelowTheLine) {
650                return -1;
651            }
652            return 0;
653        }
654    
655        /**
656         * Gets the approvedAssetNumbers attribute.
657         * 
658         * @return Returns the approvedAssetNumbers.
659         */
660        public List<Long> getApprovedAssetNumbers() {
661            if (this.approvedAssetNumbers != null && !this.approvedAssetNumbers.isEmpty()) {
662                return this.approvedAssetNumbers;
663            }
664            else {
665                this.approvedAssetNumbers = new ArrayList<Long>();
666                if (!StringUtils.isEmpty(this.getCapitalAssetManagementDocumentNumber())) {
667                    Map<String, String> fieldValues = new HashMap<String, String>();
668                    if (CabConstants.ActivityStatusCode.PROCESSED_IN_CAMS.equalsIgnoreCase(this.getActivityStatusCode())) {
669                        // get asset number from asset global add doc
670                        fieldValues.put(CamsPropertyConstants.AssetGlobalDetail.DOCUMENT_NUMBER, this.getCapitalAssetManagementDocumentNumber());
671                        Collection<AssetGlobalDetail> assetGlobalDetails = SpringContext.getBean(BusinessObjectService.class).findMatching(AssetGlobalDetail.class, fieldValues);
672                        for (AssetGlobalDetail detail : assetGlobalDetails) {
673                            this.approvedAssetNumbers.add(detail.getCapitalAssetNumber());
674                        }
675                        if (assetGlobalDetails.isEmpty()) {
676                            // get asset number from asset payment doc
677                            fieldValues.clear();
678                            fieldValues.put(CamsPropertyConstants.DOCUMENT_NUMBER, this.getCapitalAssetManagementDocumentNumber());
679                            Collection<AssetPaymentAssetDetail> paymentAssetDetails = SpringContext.getBean(BusinessObjectService.class).findMatching(AssetPaymentAssetDetail.class, fieldValues);
680                            for (AssetPaymentAssetDetail detail : paymentAssetDetails) {
681                                this.approvedAssetNumbers.add(detail.getCapitalAssetNumber());
682                            }
683                        }
684                    }
685                }
686                return this.approvedAssetNumbers;
687            }
688        }
689    
690        private DataDictionaryService getDataDictionaryService() {
691            return SpringContext.getBean(DataDictionaryService.class);
692        }
693    
694        public PurchasingAccountsPayableLineAssetAccount getPurchasingAccountsPayableLineAssetAccount(int index) {
695            int size = getPurchasingAccountsPayableLineAssetAccounts().size();
696            while (size <= index || getPurchasingAccountsPayableLineAssetAccounts().get(index) == null) {
697                getPurchasingAccountsPayableLineAssetAccounts().add(size++, new PurchasingAccountsPayableLineAssetAccount());
698            }
699            return (PurchasingAccountsPayableLineAssetAccount) getPurchasingAccountsPayableLineAssetAccounts().get(index);
700    
701        }
702    
703        /**
704         * Gets the paymentRequestIdentifier attribute. 
705         * @return Returns the paymentRequestIdentifier.
706         */
707        public Integer getPaymentRequestIdentifier() {
708            return paymentRequestIdentifier;
709        }
710    
711        /**
712         * Sets the paymentRequestIdentifier attribute value.
713         * @param paymentRequestIdentifier The paymentRequestIdentifier to set.
714         */
715        public void setPaymentRequestIdentifier(Integer paymentRequestIdentifier) {
716            this.paymentRequestIdentifier = paymentRequestIdentifier;
717        }
718        
719        
720    }