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.document;
017    
018    import java.sql.Date;
019    import java.util.LinkedHashMap;
020    import java.util.List;
021    
022    import org.kuali.kfs.module.purap.businessobject.Carrier;
023    import org.kuali.kfs.module.purap.businessobject.CorrectionReceivingItem;
024    import org.kuali.kfs.module.purap.businessobject.DeliveryRequiredDateReason;
025    import org.kuali.kfs.module.purap.businessobject.LineItemReceivingItem;
026    import org.kuali.kfs.module.purap.businessobject.ReceivingItem;
027    import org.kuali.kfs.module.purap.document.service.ReceivingService;
028    import org.kuali.kfs.sys.KFSPropertyConstants;
029    import org.kuali.kfs.sys.context.SpringContext;
030    import org.kuali.kfs.vnd.businessobject.CampusParameter;
031    import org.kuali.kfs.vnd.businessobject.VendorDetail;
032    import org.kuali.rice.kew.dto.DocumentRouteStatusChangeDTO;
033    import org.kuali.rice.kns.bo.Country;
034    import org.kuali.rice.kns.util.ObjectUtils;
035    import org.kuali.rice.kns.util.TypedArrayList;
036    
037    /**
038     * @author Kuali Nervous System Team (kualidev@oncourse.iu.edu)
039     */
040    public class CorrectionReceivingDocument extends ReceivingDocumentBase {
041    
042        protected String lineItemReceivingDocumentNumber;
043        //Collections
044        protected List<CorrectionReceivingItem> items;
045        
046        protected LineItemReceivingDocument lineItemReceivingDocument;
047        
048        /**
049         * Default constructor.
050         */
051        public CorrectionReceivingDocument() {
052            super();
053            items = new TypedArrayList(getItemClass());
054        }
055    
056        public void populateCorrectionReceivingFromReceivingLine(LineItemReceivingDocument rlDoc){
057            
058            //populate receiving line document from purchase order
059            this.setPurchaseOrderIdentifier( rlDoc.getPurchaseOrderIdentifier() );
060            this.getDocumentHeader().setDocumentDescription( rlDoc.getDocumentHeader().getDocumentDescription());
061            this.getDocumentHeader().setOrganizationDocumentNumber( rlDoc.getDocumentHeader().getOrganizationDocumentNumber() );
062            this.setAccountsPayablePurchasingDocumentLinkIdentifier( rlDoc.getAccountsPayablePurchasingDocumentLinkIdentifier() );        
063            this.setLineItemReceivingDocumentNumber(rlDoc.getDocumentNumber());
064            
065            //copy receiving line items
066            for (LineItemReceivingItem rli : (List<LineItemReceivingItem>) rlDoc.getItems()) {
067                this.getItems().add(new CorrectionReceivingItem(rli, this));            
068            }
069            
070        }
071        
072        @Override
073        public void doRouteStatusChange(DocumentRouteStatusChangeDTO statusChangeEvent) {
074            
075            if(this.getDocumentHeader().getWorkflowDocument().stateIsProcessed()) {
076                SpringContext.getBean(ReceivingService.class).completeCorrectionReceivingDocument(this);
077            }
078            super.doRouteStatusChange(statusChangeEvent);
079        }
080        
081        /**
082         * Gets the lineItemReceivingDocumentNumber attribute.
083         * 
084         * @return Returns the lineItemReceivingDocumentNumber
085         * 
086         */
087        public String getLineItemReceivingDocumentNumber() { 
088            return lineItemReceivingDocumentNumber;
089        }
090        
091        /**
092         * Sets the lineItemReceivingDocumentNumber attribute.
093         * 
094         * @param lineItemReceivingDocumentNumber The lineItemReceivingDocumentNumber to set.
095         * 
096         */
097        public void setLineItemReceivingDocumentNumber(String lineItemReceivingDocumentNumber) {
098            this.lineItemReceivingDocumentNumber = lineItemReceivingDocumentNumber;
099        }
100    
101        /**
102         * Gets the lineItemReceivingDocument attribute. 
103         * @return Returns the lineItemReceivingDocument.
104         */
105        public LineItemReceivingDocument getLineItemReceivingDocument() {
106            refreshLineReceivingDocument();
107            return lineItemReceivingDocument;
108        }
109    
110        @Override
111        public void processAfterRetrieve() {
112            super.processAfterRetrieve();
113            refreshLineReceivingDocument();
114        }
115        
116        protected void refreshLineReceivingDocument(){
117            if(ObjectUtils.isNull(lineItemReceivingDocument) || lineItemReceivingDocument.getDocumentNumber() == null){
118                this.refreshReferenceObject("lineItemReceivingDocument");
119                if (ObjectUtils.isNull(lineItemReceivingDocument.getDocumentHeader().getDocumentNumber())) {
120                    lineItemReceivingDocument.refreshReferenceObject(KFSPropertyConstants.DOCUMENT_HEADER);
121                }
122            }else{
123                if (ObjectUtils.isNull(lineItemReceivingDocument.getDocumentHeader().getDocumentNumber())) {
124                    lineItemReceivingDocument.refreshReferenceObject(KFSPropertyConstants.DOCUMENT_HEADER);
125                }
126            }
127        }
128        
129        public Integer getPurchaseOrderIdentifier() { 
130            if (ObjectUtils.isNull(super.getPurchaseOrderIdentifier())){
131                refreshLineReceivingDocument();
132                if (ObjectUtils.isNotNull(lineItemReceivingDocument)){
133                    setPurchaseOrderIdentifier(lineItemReceivingDocument.getPurchaseOrderIdentifier());
134                }
135            }
136            return super.getPurchaseOrderIdentifier();
137        }
138        
139        /**
140         * Sets the lineItemReceivingDocument attribute value.
141         * @param lineItemReceivingDocument The lineItemReceivingDocument to set.
142         * @deprecated
143         */
144        public void setLineItemReceivingDocument(LineItemReceivingDocument lineItemReceivingDocument) {
145            this.lineItemReceivingDocument = lineItemReceivingDocument;
146        }
147    
148        /**
149         * @see org.kuali.rice.kns.bo.BusinessObjectBase#toStringMapper()
150         */
151        protected LinkedHashMap toStringMapper() {
152            LinkedHashMap m = new LinkedHashMap();      
153            m.put("documentNumber", this.documentNumber);
154            return m;
155        }
156    
157        public Class getItemClass() {
158            return CorrectionReceivingItem.class;
159        }
160    
161        public List getItems() {
162            return items;
163        }
164    
165        public void setItems(List items) {
166            this.items = items;
167        }
168    
169        public ReceivingItem getItem(int pos) {
170            return (ReceivingItem) items.get(pos);
171        }
172    
173        public void addItem(ReceivingItem item) {
174            getItems().add(item);
175        }
176    
177        public void deleteItem(int lineNum) {
178            if (getItems().remove(lineNum) == null) {
179                // throw error here
180            }
181        }
182    
183        @Override
184        public Integer getAlternateVendorDetailAssignedIdentifier() {
185            return getLineItemReceivingDocument().getAlternateVendorDetailAssignedIdentifier();
186        }
187    
188        @Override
189        public Integer getAlternateVendorHeaderGeneratedIdentifier() {
190            return getLineItemReceivingDocument().getAlternateVendorHeaderGeneratedIdentifier();
191        }
192    
193        @Override
194        public String getAlternateVendorName() {
195            return getLineItemReceivingDocument().getAlternateVendorName();
196        }
197    
198        @Override
199        public String getAlternateVendorNumber() {
200            return getLineItemReceivingDocument().getAlternateVendorNumber();
201        }
202    
203        @Override
204        public Carrier getCarrier() {
205            return getLineItemReceivingDocument().getCarrier();
206        }
207    
208        @Override
209        public String getCarrierCode() {
210            return getLineItemReceivingDocument().getCarrierCode();
211        }
212    
213        @Override
214        public String getDeliveryBuildingCode() {
215            return getLineItemReceivingDocument().getDeliveryBuildingCode();
216        }
217    
218        @Override
219        public String getDeliveryBuildingLine1Address() {
220            return getLineItemReceivingDocument().getDeliveryBuildingLine1Address();
221        }
222    
223        @Override
224        public String getDeliveryBuildingLine2Address() {
225            return getLineItemReceivingDocument().getDeliveryBuildingLine2Address();
226        }
227    
228        @Override
229        public String getDeliveryBuildingName() {
230            return getLineItemReceivingDocument().getDeliveryBuildingName();
231        }
232    
233        @Override
234        public String getDeliveryBuildingRoomNumber() {
235            return getLineItemReceivingDocument().getDeliveryBuildingRoomNumber();
236        }
237    
238        @Override
239        public CampusParameter getDeliveryCampus() {
240            return getLineItemReceivingDocument().getDeliveryCampus();
241        }
242    
243        @Override
244        public String getDeliveryCampusCode() {
245            return getLineItemReceivingDocument().getDeliveryCampusCode();
246        }
247    
248        @Override
249        public String getDeliveryCityName() {
250            return getLineItemReceivingDocument().getDeliveryCityName();
251        }
252    
253        @Override
254        public String getDeliveryCountryCode() {
255            return getLineItemReceivingDocument().getDeliveryCountryCode();
256        }
257    
258        @Override
259        public String getDeliveryInstructionText() {
260            return getLineItemReceivingDocument().getDeliveryInstructionText();
261        }
262    
263        @Override
264        public String getDeliveryPostalCode() {
265            return getLineItemReceivingDocument().getDeliveryPostalCode();
266        }
267    
268        @Override
269        public Date getDeliveryRequiredDate() {
270            return getLineItemReceivingDocument().getDeliveryRequiredDate();
271        }
272    
273        @Override
274        public DeliveryRequiredDateReason getDeliveryRequiredDateReason() {
275            return getLineItemReceivingDocument().getDeliveryRequiredDateReason();
276        }
277    
278        @Override
279        public String getDeliveryRequiredDateReasonCode() {
280            return getLineItemReceivingDocument().getDeliveryRequiredDateReasonCode();
281        }
282    
283        @Override
284        public String getDeliveryStateCode() {
285            return getLineItemReceivingDocument().getDeliveryStateCode();
286        }
287    
288        @Override
289        public String getDeliveryToEmailAddress() {
290            return getLineItemReceivingDocument().getDeliveryToEmailAddress();
291        }
292    
293        @Override
294        public String getDeliveryToName() {
295            return getLineItemReceivingDocument().getDeliveryToName();
296        }
297    
298        @Override
299        public String getDeliveryToPhoneNumber() {
300            return getLineItemReceivingDocument().getDeliveryToPhoneNumber();
301        }
302    
303        @Override
304        public String getShipmentBillOfLadingNumber() {
305            return getLineItemReceivingDocument().getShipmentBillOfLadingNumber();
306        }
307    
308        @Override
309        public String getShipmentPackingSlipNumber() {
310            return getLineItemReceivingDocument().getShipmentPackingSlipNumber();
311        }
312    
313        @Override
314        public Date getShipmentReceivedDate() {
315            return getLineItemReceivingDocument().getShipmentReceivedDate();
316        }
317    
318        @Override
319        public String getShipmentReferenceNumber() {
320            return getLineItemReceivingDocument().getShipmentReferenceNumber();
321        }
322    
323        @Override
324        public Integer getVendorAddressGeneratedIdentifier() {
325            return getLineItemReceivingDocument().getVendorAddressGeneratedIdentifier();
326        }
327    
328        @Override
329        public String getVendorCityName() {
330            return getLineItemReceivingDocument().getVendorCityName();
331        }
332    
333        @Override
334        public Country getVendorCountry() {
335            return getLineItemReceivingDocument().getVendorCountry();
336        }
337    
338        @Override
339        public String getVendorCountryCode() {
340            return getLineItemReceivingDocument().getVendorCountryCode();
341        }
342    
343        @Override
344        public VendorDetail getVendorDetail() {
345            return getLineItemReceivingDocument().getVendorDetail();
346        }
347    
348        @Override
349        public Integer getVendorDetailAssignedIdentifier() {
350            return getLineItemReceivingDocument().getVendorDetailAssignedIdentifier();
351        }
352    
353        @Override
354        public Integer getVendorHeaderGeneratedIdentifier() {
355            return getLineItemReceivingDocument().getVendorHeaderGeneratedIdentifier();
356        }
357    
358        @Override
359        public String getVendorLine1Address() {
360            return getLineItemReceivingDocument().getVendorLine1Address();
361        }
362    
363        @Override
364        public String getVendorLine2Address() {
365            return getLineItemReceivingDocument().getVendorLine2Address();
366        }
367    
368        @Override
369        public String getVendorName() {
370            return getLineItemReceivingDocument().getVendorName();
371        }
372    
373        @Override
374        public String getVendorNumber() {
375            return getLineItemReceivingDocument().getVendorNumber();
376        }
377    
378        @Override
379        public String getVendorPostalCode() {
380            return getLineItemReceivingDocument().getVendorPostalCode();
381        }
382    
383        @Override
384        public String getVendorStateCode() {
385            return getLineItemReceivingDocument().getVendorStateCode();
386        }
387        
388        public List buildListOfDeletionAwareLists() {
389            List managedLists = super.buildListOfDeletionAwareLists();
390            managedLists.add(this.getItems());
391            return managedLists;
392        }
393    
394    }