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.service.impl;
017    
018    import java.math.BigDecimal;
019    import java.util.Map;
020    
021    import org.kuali.kfs.module.purap.businessobject.ElectronicInvoice;
022    import org.kuali.kfs.module.purap.businessobject.ElectronicInvoiceItem;
023    import org.kuali.kfs.module.purap.businessobject.ElectronicInvoiceItemMapping;
024    import org.kuali.kfs.module.purap.businessobject.ElectronicInvoiceOrder;
025    import org.kuali.kfs.module.purap.businessobject.ElectronicInvoiceRejectItem;
026    import org.kuali.kfs.module.purap.businessobject.PurchaseOrderItem;
027    import org.kuali.kfs.module.purap.document.ElectronicInvoiceRejectDocument;
028    import org.kuali.kfs.module.purap.document.PurchaseOrderDocument;
029    import org.kuali.kfs.module.purap.util.ElectronicInvoiceUtils;
030    import org.kuali.rice.kns.util.KualiDecimal;
031    
032    public class ElectronicInvoiceItemHolder {
033        
034        private ElectronicInvoiceOrderHolder orderHolder;
035        private ElectronicInvoiceRejectItem rejectItem;
036        private ElectronicInvoiceItem invoiceItem;
037        private PurchaseOrderItem poItem;
038        private Map<String,ElectronicInvoiceItemMapping> itemTypeMappings;
039        
040        private boolean isRejectItemHolder;
041        private boolean validateHeader;
042        
043        public ElectronicInvoiceItemHolder(ElectronicInvoiceRejectItem rejectItem,
044                                           Map itemTypeMappings,
045                                           PurchaseOrderItem poItem,
046                                           ElectronicInvoiceOrderHolder orderHolder){
047            
048            if (rejectItem == null){
049                throw new NullPointerException("ElectronicInvoiceRejectItem should not be null");
050            }
051            
052            this.rejectItem = rejectItem;
053            this.poItem = poItem;
054            this.orderHolder = orderHolder;
055            
056            isRejectItemHolder = true;
057        }
058        
059        public ElectronicInvoiceItemHolder(ElectronicInvoiceItem invoiceItem,
060                                            Map itemTypeMappings,
061                                            PurchaseOrderItem poItem,
062                                            ElectronicInvoiceOrderHolder orderHolder){
063            
064            if (invoiceItem == null){
065                throw new NullPointerException("ElectronicInvoiceItem should not be null");
066            }
067            
068            this.invoiceItem = invoiceItem;
069            this.poItem = poItem;
070            this.orderHolder = orderHolder;
071            
072            isRejectItemHolder = false;
073        }
074     
075        public Integer getInvoiceItemLineNumber(){
076            if (isRejectItemHolder()){
077                return rejectItem.getInvoiceReferenceItemLineNumber();
078            }else{
079               return invoiceItem.getReferenceLineNumberInteger();
080            }
081        }
082        
083        public String getInvoiceItemDescription(){
084            if (isRejectItemHolder()){
085                return rejectItem.getInvoiceReferenceItemDescription();
086            }else{
087               return invoiceItem.getReferenceDescription();
088            }
089        }
090        
091        public PurchaseOrderItem getPurchaseOrderItem(){
092            return poItem;
093        }
094            
095        public String getCatalogNumberStripped(){
096            if (isRejectItemHolder()){
097                return ElectronicInvoiceUtils.stripSplChars(rejectItem.getInvoiceItemCatalogNumber());
098            }else{
099                return ElectronicInvoiceUtils.stripSplChars(invoiceItem.getCatalogNumber());
100            }
101        }
102        
103        public BigDecimal getUnitPrice(){
104            if (isRejectItemHolder()){
105                return rejectItem.getInvoiceItemUnitPrice();
106            }else{
107                return invoiceItem.getInvoiceLineUnitCostBigDecimal();
108            }
109        }
110        
111        public String getUnitPriceCurrency(){
112            if (isRejectItemHolder()){
113                return rejectItem.getInvoiceItemUnitPriceCurrencyCode();
114            }else{
115                return invoiceItem.getUnitPriceCurrency();
116            }
117        }
118        
119        public BigDecimal getQuantity(){
120            if (isRejectItemHolder()){
121                return rejectItem.getInvoiceItemQuantity();
122            }else{
123                return invoiceItem.getInvoiceLineQuantityBigDecimal();
124            }
125        }
126        
127        public KualiDecimal getSubTotalAmount(){
128            if (isRejectItemHolder()){
129                return new KualiDecimal(rejectItem.getInvoiceItemSubTotalAmount().setScale(KualiDecimal.SCALE, KualiDecimal.ROUND_BEHAVIOR));
130            }else{
131                return new KualiDecimal(invoiceItem.getInvoiceLineSubTotalAmountBigDecimal());
132            }
133        }
134        
135        public boolean isRejectItemHolder(){
136            return isRejectItemHolder;
137        }
138        
139        public ElectronicInvoiceItemMapping getItemMapping(String invoiceItemTypeCode){
140            if (itemTypeMappings == null){
141                return null;
142            }else{
143                return itemTypeMappings.get(invoiceItemTypeCode);
144            }
145        }
146        
147        public String getItemTypeCode(String invoiceItemTypeCode) {
148            
149            ElectronicInvoiceItemMapping itemMapping = getItemMapping(invoiceItemTypeCode);
150            
151            if (itemMapping != null) {
152                return itemMapping.getItemTypeCode();
153            }
154            else {
155                return null;
156            }
157        }
158    
159        public String getInvoiceItemCatalogNumber(){
160            if (isRejectItemHolder()){
161                return rejectItem.getInvoiceItemCatalogNumber();
162            }else{
163                return invoiceItem.getReferenceItemIDSupplierPartID();
164            }
165        }
166        
167        public String getInvoiceItemUnitOfMeasureCode(){
168            if (isRejectItemHolder()){
169                return rejectItem.getInvoiceItemUnitOfMeasureCode();
170            }else{
171                return invoiceItem.getUnitOfMeasure();
172            }
173        }
174        
175        public boolean isUnitOfMeasureAcceptIndicatorEnabled() {
176            if (isRejectItemHolder()){
177                return rejectItem.isUnitOfMeasureAcceptIndicator();
178            }else{
179                return false;
180            }
181        }
182        
183        public boolean isCatalogNumberAcceptIndicatorEnabled() {
184            if (isRejectItemHolder()){
185                return rejectItem.isCatalogNumberAcceptIndicator();
186            }else{
187                return false;
188            }
189        }
190        
191        public BigDecimal getInvoiceItemUnitPrice(){
192            if (isRejectItemHolder()){
193                return rejectItem.getInvoiceItemUnitPrice();
194            }else{
195                return invoiceItem.getInvoiceLineUnitCostBigDecimal();
196            }
197        }
198        
199        public BigDecimal getInvoiceItemQuantity(){
200            if (isRejectItemHolder()){
201                return rejectItem.getInvoiceItemQuantity();
202            }else{
203                return invoiceItem.getInvoiceLineQuantityBigDecimal();
204            }
205        }
206        
207        public BigDecimal getInvoiceItemSubTotalAmount(){
208            if (isRejectItemHolder()){
209                return rejectItem.getInvoiceItemSubTotalAmount();
210            }else{
211                return invoiceItem.getInvoiceLineSubTotalAmountBigDecimal();
212            }
213        }
214        
215        public BigDecimal getTaxAmount(){
216            if (isRejectItemHolder()){
217                return rejectItem.getInvoiceItemTaxAmount();
218            }else{
219                return invoiceItem.getInvoiceLineTaxAmountBigDecimal();
220            }
221        }
222        
223        public ElectronicInvoiceOrderHolder getInvoiceOrderHolder(){
224            return orderHolder;
225        }
226    }