001    /*
002     * Copyright 2011 The Kuali Foundation.
003     * 
004     * Licensed under the Educational Community License, Version 2.0 (the "License");
005     * you may not use this file except in compliance with the License.
006     * You may obtain a copy of the License at
007     * 
008     * http://www.opensource.org/licenses/ecl2.php
009     * 
010     * Unless required by applicable law or agreed to in writing, software
011     * distributed under the License is distributed on an "AS IS" BASIS,
012     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
013     * See the License for the specific language governing permissions and
014     * limitations under the License.
015     */
016    package org.kuali.kfs.module.purap.util;
017    
018    import java.util.ArrayList;
019    import java.util.List;
020    
021    import org.kuali.kfs.module.purap.businessobject.PurApItem;
022    import org.kuali.kfs.module.purap.businessobject.PurchaseOrderItem;
023    import org.kuali.rice.kns.util.ObjectUtils;
024    
025    /**
026     * Purchasing Accounts Payable Item Utilities.
027     * This class contains item utilities.
028     */
029    public class PurApItemUtils {
030    
031        /**
032         * Checks if an item is active. It is used mainly when were dealing with generic items (which may be po) And need to
033         * make sure the active rules are applied if it is a poitem
034         * 
035         * @param item the purap item passed in
036         * @return true if item is active
037         */
038        public static boolean checkItemActive(PurApItem item) {
039            boolean active = true;
040            if (item instanceof PurchaseOrderItem) {
041                PurchaseOrderItem poi = (PurchaseOrderItem) item;
042                active = poi.isItemActiveIndicator();
043            }
044            return active;
045        }
046    
047        public static boolean isNonZeroExtended(PurApItem item) {
048            return (ObjectUtils.isNotNull(item) && ObjectUtils.isNotNull(item.getExtendedPrice()) && !item.getExtendedPrice().isZero());
049        }
050    
051        /**
052         * Helper to get aboveTheLineItems only from an item list
053         * 
054         * @param items a list of items including above and below the line
055         * @return below the line items only
056         */
057        public static List<PurApItem> getAboveTheLineOnly(List<PurApItem> items) {
058            List<PurApItem> returnItems = new ArrayList<PurApItem>();
059            for (PurApItem item : items) {
060                if (item.getItemType().isLineItemIndicator()) {
061                    returnItems.add((PurApItem) ObjectUtils.deepCopy(item));
062                }
063            }
064            return returnItems;
065        }
066    
067        /**
068         * Counts the below the line, currently it relies on below the line being at the bottom
069         * 
070         * @return a count of below the line items
071         */
072        public static int countBelowTheLineItems(List<PurApItem> items) {
073            int count = 0;
074            for (int i = items.size() - 1; i > 0; i--) {
075                PurApItem item = items.get(i);
076                // will have to change if we stop putting below the line at bottom
077                if (item.getItemType().isLineItemIndicator()) {
078                    break;
079                }
080                else {
081                    count++;
082                }
083            }
084            return count;
085        }
086    
087    }