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    
017    package org.kuali.kfs.vnd.businessobject;
018    
019    import java.sql.Date;
020    import java.util.LinkedHashMap;
021    import java.util.List;
022    
023    import org.apache.commons.lang.StringUtils;
024    import org.apache.commons.lang.builder.EqualsBuilder;
025    import org.apache.log4j.Logger;
026    import org.kuali.kfs.sys.context.SpringContext;
027    import org.kuali.kfs.vnd.document.service.VendorService;
028    import org.kuali.rice.kns.bo.Inactivateable;
029    import org.kuali.rice.kns.bo.PersistableBusinessObjectBase;
030    import org.kuali.rice.kns.util.KualiDecimal;
031    import org.kuali.rice.kns.util.ObjectUtils;
032    import org.kuali.rice.kns.util.TypedArrayList;
033    
034    /**
035     * Purchasing Contracts with specific Vendors.
036     */
037    public class VendorContract extends PersistableBusinessObjectBase implements VendorRoutingComparable, Inactivateable {
038        private static Logger LOG = Logger.getLogger(VendorContract.class);
039    
040        private Integer vendorContractGeneratedIdentifier;
041        private Integer vendorHeaderGeneratedIdentifier;
042        private Integer vendorDetailAssignedIdentifier;
043        private String vendorNumber; // not persisted in db, only for lookup page
044        private String vendorContractName;
045        private String vendorContractDescription;
046        private String vendorCampusCode;
047        private Date vendorContractBeginningDate;
048        private Date vendorContractEndDate;
049        private Integer contractManagerCode;
050        private String purchaseOrderCostSourceCode;
051        private String vendorPaymentTermsCode;
052        private String vendorShippingPaymentTermsCode;
053        private String vendorShippingTitleCode;
054        private Date vendorContractExtensionDate;
055        private Boolean vendorB2bIndicator;
056        private KualiDecimal organizationAutomaticPurchaseOrderLimit;
057        private boolean active;
058    
059        private List<VendorContractOrganization> vendorContractOrganizations;
060    
061        private VendorDetail vendorDetail;
062        private CampusParameter vendorCampus;
063        private ContractManager contractManager;
064        private PurchaseOrderCostSource purchaseOrderCostSource;
065        private PaymentTermType vendorPaymentTerms;
066        private ShippingPaymentTerms vendorShippingPaymentTerms;
067        private ShippingTitle vendorShippingTitle;
068    
069        /**
070         * Default constructor.
071         */
072        public VendorContract() {
073            vendorContractOrganizations = new TypedArrayList(VendorContractOrganization.class);
074        }
075    
076        public Integer getVendorContractGeneratedIdentifier() {
077    
078            return vendorContractGeneratedIdentifier;
079        }
080    
081        public void setVendorContractGeneratedIdentifier(Integer vendorContractGeneratedIdentifier) {
082            this.vendorContractGeneratedIdentifier = vendorContractGeneratedIdentifier;
083        }
084    
085        public Integer getVendorHeaderGeneratedIdentifier() {
086    
087            return vendorHeaderGeneratedIdentifier;
088        }
089    
090        public void setVendorHeaderGeneratedIdentifier(Integer vendorHeaderGeneratedIdentifier) {
091            this.vendorHeaderGeneratedIdentifier = vendorHeaderGeneratedIdentifier;
092        }
093    
094        public Integer getVendorDetailAssignedIdentifier() {
095    
096            return vendorDetailAssignedIdentifier;
097        }
098    
099        public void setVendorDetailAssignedIdentifier(Integer vendorDetailAssignedIdentifier) {
100            this.vendorDetailAssignedIdentifier = vendorDetailAssignedIdentifier;
101        }
102    
103        public String getVendorContractName() {
104    
105            return vendorContractName;
106        }
107    
108        public void setVendorContractName(String vendorContractName) {
109            this.vendorContractName = vendorContractName;
110        }
111    
112        public String getVendorContractDescription() {
113    
114            return vendorContractDescription;
115        }
116    
117        public void setVendorContractDescription(String vendorContractDescription) {
118            this.vendorContractDescription = vendorContractDescription;
119        }
120    
121        public String getVendorCampusCode() {
122    
123            return vendorCampusCode;
124        }
125    
126        public void setVendorCampusCode(String vendorCampusCode) {
127            this.vendorCampusCode = vendorCampusCode;
128        }
129    
130        public Date getVendorContractBeginningDate() {
131    
132            return vendorContractBeginningDate;
133        }
134    
135        public void setVendorContractBeginningDate(Date vendorContractBeginningDate) {
136            this.vendorContractBeginningDate = vendorContractBeginningDate;
137        }
138    
139        public Date getVendorContractEndDate() {
140    
141            return vendorContractEndDate;
142        }
143    
144        public void setVendorContractEndDate(Date vendorContractEndDate) {
145            this.vendorContractEndDate = vendorContractEndDate;
146        }
147    
148        public Integer getContractManagerCode() {
149    
150            return contractManagerCode;
151        }
152    
153        public void setContractManagerCode(Integer contractManagerCode) {
154            this.contractManagerCode = contractManagerCode;
155        }
156    
157        public String getPurchaseOrderCostSourceCode() {
158    
159            return purchaseOrderCostSourceCode;
160        }
161    
162        public void setPurchaseOrderCostSourceCode(String purchaseOrderCostSourceCode) {
163            this.purchaseOrderCostSourceCode = purchaseOrderCostSourceCode;
164        }
165    
166        public String getVendorPaymentTermsCode() {
167    
168            return vendorPaymentTermsCode;
169        }
170    
171        public void setVendorPaymentTermsCode(String vendorPaymentTermsCode) {
172            this.vendorPaymentTermsCode = vendorPaymentTermsCode;
173        }
174    
175        public String getVendorShippingPaymentTermsCode() {
176    
177            return vendorShippingPaymentTermsCode;
178        }
179    
180        public void setVendorShippingPaymentTermsCode(String vendorShippingPaymentTermsCode) {
181            this.vendorShippingPaymentTermsCode = vendorShippingPaymentTermsCode;
182        }
183    
184        public String getVendorShippingTitleCode() {
185    
186            return vendorShippingTitleCode;
187        }
188    
189        public void setVendorShippingTitleCode(String vendorShippingTitleCode) {
190            this.vendorShippingTitleCode = vendorShippingTitleCode;
191        }
192    
193        public Date getVendorContractExtensionDate() {
194    
195            return vendorContractExtensionDate;
196        }
197    
198        public void setVendorContractExtensionDate(Date vendorContractExtensionDate) {
199            this.vendorContractExtensionDate = vendorContractExtensionDate;
200        }
201    
202        public Boolean getVendorB2bIndicator() {
203    
204            return vendorB2bIndicator;
205        }
206    
207        public void setVendorB2bIndicator(Boolean vendorB2bIndicator) {
208            this.vendorB2bIndicator = vendorB2bIndicator;
209        }
210    
211        public KualiDecimal getOrganizationAutomaticPurchaseOrderLimit() {
212    
213            return organizationAutomaticPurchaseOrderLimit;
214        }
215    
216        public void setOrganizationAutomaticPurchaseOrderLimit(KualiDecimal organizationAutomaticPurchaseOrderLimit) {
217            this.organizationAutomaticPurchaseOrderLimit = organizationAutomaticPurchaseOrderLimit;
218        }
219    
220        public boolean isActive() {
221    
222            return active;
223        }
224    
225        public void setActive(boolean active) {
226            this.active = active;
227        }
228    
229        public VendorDetail getVendorDetail() {
230    
231            return vendorDetail;
232        }
233    
234        /**
235         * Sets the vendorDetail attribute.
236         * 
237         * @param vendorDetail The vendorDetail to set.
238         * @deprecated
239         */
240        public void setVendorDetail(VendorDetail vendorDetail) {
241            this.vendorDetail = vendorDetail;
242        }
243    
244    
245        public CampusParameter getVendorCampus() {
246            return vendorCampus;
247        }
248    
249        /**
250         * Sets the vendorCampus attribute.
251         * 
252         * @param vendorCampus The vendorCampus to set.
253         * @deprecated
254         */
255        public void setVendorCampus(CampusParameter vendorCampus) {
256            this.vendorCampus = vendorCampus;
257        }
258    
259        public ContractManager getContractManager() {
260    
261            return contractManager;
262        }
263    
264        /**
265         * Sets the contractManager attribute.
266         * 
267         * @param contractManager The contractManager to set.
268         * @deprecated
269         */
270        public void setContractManager(ContractManager contractManager) {
271            this.contractManager = contractManager;
272        }
273    
274        public PurchaseOrderCostSource getPurchaseOrderCostSource() {
275    
276            return purchaseOrderCostSource;
277        }
278    
279        /**
280         * Sets the purchaseOrderCostSource attribute.
281         * 
282         * @param purchaseOrderCostSource The purchaseOrderCostSource to set.
283         * @deprecated
284         */
285        public void setPurchaseOrderCostSource(PurchaseOrderCostSource purchaseOrderCostSource) {
286            this.purchaseOrderCostSource = purchaseOrderCostSource;
287        }
288    
289        public PaymentTermType getVendorPaymentTerms() {
290    
291            return vendorPaymentTerms;
292        }
293    
294        /**
295         * Sets the vendorPaymentTerms attribute.
296         * 
297         * @param vendorPaymentTerms The vendorPaymentTerms to set.
298         * @deprecated
299         */
300        public void setVendorPaymentTerms(PaymentTermType vendorPaymentTerms) {
301            this.vendorPaymentTerms = vendorPaymentTerms;
302        }
303    
304        public ShippingPaymentTerms getVendorShippingPaymentTerms() {
305    
306            return vendorShippingPaymentTerms;
307        }
308    
309        /**
310         * Sets the vendorShippingPaymentTerms attribute.
311         * 
312         * @param vendorShippingPaymentTerms The vendorShippingPaymentTerms to set.
313         * @deprecated
314         */
315        public void setVendorShippingPaymentTerms(ShippingPaymentTerms vendorShippingPaymentTerms) {
316            this.vendorShippingPaymentTerms = vendorShippingPaymentTerms;
317        }
318    
319        public ShippingTitle getVendorShippingTitle() {
320    
321            return vendorShippingTitle;
322        }
323    
324        /**
325         * Sets the vendorShippingTitle attribute.
326         * 
327         * @param vendorShippingTitle The vendorShippingTitle to set.
328         * @deprecated
329         */
330        public void setVendorShippingTitle(ShippingTitle vendorShippingTitle) {
331            this.vendorShippingTitle = vendorShippingTitle;
332        }
333    
334        public List<VendorContractOrganization> getVendorContractOrganizations() {
335    
336            return vendorContractOrganizations;
337        }
338    
339        public void setVendorContractOrganizations(List<VendorContractOrganization> vendorContractOrganizations) {
340            this.vendorContractOrganizations = vendorContractOrganizations;
341        }
342    
343        /**
344         * A concatenation of the vendorHeaderGeneratedIdentifier, a dash, and the vendorDetailAssignedIdentifier
345         * 
346         * @return Returns the vendorNumber.
347         */
348        public String getVendorNumber() {
349            String headerId = "";
350            String detailId = "";
351            String vendorNumber = "";
352            if (ObjectUtils.isNotNull(this.vendorHeaderGeneratedIdentifier)) {
353                headerId = this.vendorHeaderGeneratedIdentifier.toString();
354            }
355            if (ObjectUtils.isNotNull(this.vendorDetailAssignedIdentifier)) {
356                detailId = this.vendorDetailAssignedIdentifier.toString();
357            }
358            if (!StringUtils.isEmpty(headerId) && !StringUtils.isEmpty(detailId)) {
359                vendorNumber = headerId + "-" + detailId;
360            }
361    
362            return vendorNumber;
363        }
364    
365        /**
366         * Sets the vendorNumber attribute value.
367         * 
368         * @param vendorNumber The vendorNumber to set.
369         */
370        public void setVendorNumber(String vendorNumber) {
371            if (!StringUtils.isEmpty(vendorNumber)) {
372                int dashInd = vendorNumber.indexOf("-");
373                if (vendorNumber.length() >= dashInd) {
374                    String vndrHdrGenId = vendorNumber.substring(0, dashInd);
375                    String vndrDetailAssgnedId = vendorNumber.substring(dashInd + 1);
376                    if (!StringUtils.isEmpty(vndrHdrGenId) && !StringUtils.isEmpty(vndrDetailAssgnedId)) {
377                        this.vendorHeaderGeneratedIdentifier = new Integer(vndrHdrGenId);
378                        this.vendorDetailAssignedIdentifier = new Integer(vndrDetailAssgnedId);
379                    }
380                }
381            }
382            else {
383                this.vendorNumber = vendorNumber;
384            }
385        }
386        
387        /**
388         * @see org.kuali.kfs.vnd.document.routing.VendorRoutingComparable#isEqualForRouting(java.lang.Object)
389         */
390        public boolean isEqualForRouting(Object toCompare) {
391            if ((ObjectUtils.isNull(toCompare)) || !(toCompare instanceof VendorContract)) {
392                return false;
393            }
394            else {
395                VendorContract vc = (VendorContract) toCompare;
396                boolean eq = new EqualsBuilder().append(this.getVendorContractGeneratedIdentifier(), vc.getVendorContractGeneratedIdentifier()).append(this.getVendorHeaderGeneratedIdentifier(), vc.getVendorHeaderGeneratedIdentifier()).append(this.getVendorDetailAssignedIdentifier(), vc.getVendorDetailAssignedIdentifier()).append(this.getVendorContractName(), vc.getVendorContractName()).append(this.getVendorContractDescription(), vc.getVendorContractDescription()).append(this.getVendorCampusCode(), vc.getVendorCampusCode()).append(this.getVendorContractBeginningDate(), vc.getVendorContractBeginningDate()).append(this.getVendorContractEndDate(), vc.getVendorContractEndDate()).append(this.getContractManagerCode(), vc.getContractManagerCode()).append(this.getPurchaseOrderCostSourceCode(), vc.getPurchaseOrderCostSourceCode()).append(this.getVendorPaymentTermsCode(), vc.getVendorPaymentTermsCode()).append(this.getVendorShippingPaymentTermsCode(), vc.getVendorShippingPaymentTermsCode()).append(
397                        this.getVendorShippingTitleCode(), vc.getVendorShippingTitleCode()).append(this.getVendorContractExtensionDate(), vc.getVendorContractExtensionDate()).append(this.getVendorB2bIndicator(), vc.getVendorB2bIndicator()).append(this.getOrganizationAutomaticPurchaseOrderLimit(), vc.getOrganizationAutomaticPurchaseOrderLimit()).isEquals();
398                eq &= SpringContext.getBean(VendorService.class).equalMemberLists(this.getVendorContractOrganizations(), vc.getVendorContractOrganizations());
399    
400                return eq;
401            }
402        }
403    
404        /**
405         * @see org.kuali.rice.kns.bo.BusinessObjectBase#toStringMapper()
406         */
407        protected LinkedHashMap toStringMapper() {
408            LinkedHashMap m = new LinkedHashMap();
409            if (this.vendorContractGeneratedIdentifier != null) {
410                m.put("vendorContractGeneratedIdentifier", this.vendorContractGeneratedIdentifier.toString());
411            }
412    
413            return m;
414        }
415    
416    
417    }