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.builder.EqualsBuilder;
024    import org.apache.log4j.Logger;
025    import org.kuali.rice.kns.bo.PersistableBusinessObjectBase;
026    import org.kuali.rice.kns.util.TypedArrayList;
027    
028    /**
029     * Contains information specific to a parent Vendor, which may be shared by its division Vendors if it has any. Contained by a
030     * <code>VendorDetail</code>.
031     * 
032     * @see org.kuali.kfs.vnd.businessobject.VendorDetail
033     */
034    public class VendorHeader extends PersistableBusinessObjectBase {
035        private static Logger LOG = Logger.getLogger(VendorHeader.class);
036    
037        private Integer vendorHeaderGeneratedIdentifier;
038        private String vendorTypeCode;
039        private String vendorTaxNumber;
040        private String vendorTaxTypeCode;
041        private String vendorOwnershipCode;
042        private String vendorOwnershipCategoryCode;
043        private Date vendorFederalWithholdingTaxBeginningDate;
044        private Date vendorFederalWithholdingTaxEndDate;
045        private Boolean vendorW9ReceivedIndicator;
046        private Boolean vendorW8BenReceivedIndicator;
047        private Boolean vendorDebarredIndicator;
048        private Boolean vendorForeignIndicator;
049    
050        private VendorType vendorType;
051        private OwnershipType vendorOwnership;
052        private OwnershipCategory vendorOwnershipCategory;
053        private List<VendorSupplierDiversity> vendorSupplierDiversities;
054        private List<VendorTaxChange> vendorTaxChanges;
055    
056        /**
057         * Default constructor.
058         */
059        public VendorHeader() {
060            vendorSupplierDiversities = new TypedArrayList(VendorSupplierDiversity.class);
061        }
062    
063        public Integer getVendorHeaderGeneratedIdentifier() {
064    
065            return vendorHeaderGeneratedIdentifier;
066        }
067    
068        public void setVendorHeaderGeneratedIdentifier(Integer vendorHeaderGeneratedIdentifier) {
069            this.vendorHeaderGeneratedIdentifier = vendorHeaderGeneratedIdentifier;
070        }
071    
072        public String getVendorTypeCode() {
073    
074            return vendorTypeCode;
075        }
076    
077        public void setVendorTypeCode(String vendorTypeCode) {
078            this.vendorTypeCode = vendorTypeCode;
079        }
080    
081        public String getVendorTaxNumber() {
082    
083            return vendorTaxNumber;
084        }
085    
086        public void setVendorTaxNumber(String vendorTaxNumber) {
087            this.vendorTaxNumber = vendorTaxNumber;
088        }
089    
090        public String getVendorTaxTypeCode() {
091    
092            return vendorTaxTypeCode;
093        }
094    
095        public void setVendorTaxTypeCode(String vendorTaxTypeCode) {
096            this.vendorTaxTypeCode = vendorTaxTypeCode;
097        }
098    
099        public String getVendorOwnershipCode() {
100    
101            return vendorOwnershipCode;
102        }
103    
104        public void setVendorOwnershipCode(String vendorOwnershipCode) {
105            this.vendorOwnershipCode = vendorOwnershipCode;
106        }
107    
108        public String getVendorOwnershipCategoryCode() {
109    
110            return vendorOwnershipCategoryCode;
111        }
112    
113        public void setVendorOwnershipCategoryCode(String vendorOwnershipCategoryCode) {
114            this.vendorOwnershipCategoryCode = vendorOwnershipCategoryCode;
115        }
116    
117        public Date getVendorFederalWithholdingTaxBeginningDate() {
118    
119            return vendorFederalWithholdingTaxBeginningDate;
120        }
121    
122        public void setVendorFederalWithholdingTaxBeginningDate(Date vendorFederalWithholdingTaxBeginningDate) {
123            this.vendorFederalWithholdingTaxBeginningDate = vendorFederalWithholdingTaxBeginningDate;
124        }
125    
126        public Date getVendorFederalWithholdingTaxEndDate() {
127    
128            return vendorFederalWithholdingTaxEndDate;
129        }
130    
131        public void setVendorFederalWithholdingTaxEndDate(Date vendorFederalWithholdingTaxEndDate) {
132            this.vendorFederalWithholdingTaxEndDate = vendorFederalWithholdingTaxEndDate;
133        }
134    
135        public Boolean getVendorW9ReceivedIndicator() {
136    
137            return vendorW9ReceivedIndicator;
138        }
139    
140        public void setVendorW9ReceivedIndicator(Boolean vendorW9ReceivedIndicator) {
141            this.vendorW9ReceivedIndicator = vendorW9ReceivedIndicator;
142        }
143    
144        public Boolean getVendorW8BenReceivedIndicator() {
145    
146            return vendorW8BenReceivedIndicator;
147        }
148    
149        public void setVendorW8BenReceivedIndicator(Boolean vendorW8BenReceivedIndicator) {
150            this.vendorW8BenReceivedIndicator = vendorW8BenReceivedIndicator;
151        }
152    
153        public VendorType getVendorType() {
154            // refresh because proxy doesn't work properly and vendor type sometimes is null
155            if (vendorType == null)
156                this.refreshReferenceObject("vendorType");
157            return vendorType;
158        }
159    
160        /**
161         * Sets the vendorType attribute.
162         * 
163         * @param vendorType The vendorType to set.
164         * @deprecated
165         */
166        public void setVendorType(VendorType vendorType) {
167            this.vendorType = vendorType;
168        }
169    
170        public OwnershipType getVendorOwnership() {
171    
172            return vendorOwnership;
173        }
174    
175        /**
176         * Sets the vendorOwnership attribute.
177         * 
178         * @param vendorOwnership The vendorOwnership to set.
179         * @deprecated
180         */
181        public void setVendorOwnership(OwnershipType vendorOwnership) {
182            this.vendorOwnership = vendorOwnership;
183        }
184    
185        public OwnershipCategory getVendorOwnershipCategory() {
186    
187            return vendorOwnershipCategory;
188        }
189    
190        /**
191         * Sets the vendorOwnershipCategory attribute.
192         * 
193         * @param vendorOwnershipCategory The vendorOwnershipCategory to set.
194         * @deprecated
195         */
196        public void setVendorOwnershipCategory(OwnershipCategory vendorOwnershipCategory) {
197            this.vendorOwnershipCategory = vendorOwnershipCategory;
198        }
199    
200        public Boolean getVendorDebarredIndicator() {
201    
202            return vendorDebarredIndicator;
203        }
204    
205        /**
206         * Sets the vendorDebarredIndicator attribute value.
207         * 
208         * @param vendorDebarredIndicator The vendorDebarredIndicator to set.
209         */
210        public void setVendorDebarredIndicator(Boolean vendorDebarredIndicator) {
211            this.vendorDebarredIndicator = vendorDebarredIndicator;
212        }
213    
214        public Boolean getVendorForeignIndicator() {
215    
216            return vendorForeignIndicator;
217        }
218    
219        /**
220         * Sets the vendorForeignIndicator attribute value.
221         * 
222         * @param vendorForeignIndicator The vendorForeignIndicator to set.
223         */
224        public void setVendorForeignIndicator(Boolean vendorForeignIndicator) {
225            this.vendorForeignIndicator = vendorForeignIndicator;
226        }
227    
228        public List<VendorSupplierDiversity> getVendorSupplierDiversities() {
229    
230            return vendorSupplierDiversities;
231        }
232    
233        public void setVendorSupplierDiversities(List<VendorSupplierDiversity> vendorSupplierDiversities) {
234            this.vendorSupplierDiversities = vendorSupplierDiversities;
235        }
236    
237        /**
238         * Used by the Spring Framework to correctly retrieve the vendor supplier diversities as a single
239         * attribute. The vendorSupplierDiversities is a collection of diversities, and without this method, 
240         * there was no way to get a single attribute for it.
241         * 
242         * @return the vendor supplier diversities as a single attribute
243         */
244        public String getVendorSupplierDiversitiesAsString() {
245            StringBuilder sb = new StringBuilder("vendorSupplierDiversities=[");
246    
247            boolean first = true;
248            for (VendorSupplierDiversity vsd : vendorSupplierDiversities) {
249                if (!first) {
250                    sb.append(", ");
251                } else {
252                    first = false;
253                }
254                sb.append(vsd.getVendorSupplierDiversityCode().toString());
255            }
256            sb.append(']');
257    
258            return sb.toString();
259        }
260    
261        public List<VendorTaxChange> getVendorTaxChanges() {
262    
263            return vendorTaxChanges;
264        }
265    
266        public void setVendorTaxChanges(List<VendorTaxChange> vendorTaxChanges) {
267            this.vendorTaxChanges = vendorTaxChanges;
268        }
269    
270        /**
271         * This method is a predicate to test equality of all the persisted attributes of an instance of this class, including member
272         * collections. This is used to determine whether to route
273         * 
274         * @param vh Another VendorHeader object
275         * @return True if all non-derived attributes of the given object are equal to this one's
276         */
277        public boolean isEqualForRouting(Object toCompare) {
278            LOG.debug("Entering isEqualForRouting.");
279            if (!(toCompare instanceof VendorHeader)) {
280                return false;
281            }
282            else {
283                VendorHeader vh = (VendorHeader) toCompare;
284                return new EqualsBuilder().append(this.getVendorTypeCode(), vh.getVendorTypeCode()).append(this.getVendorTaxNumber(), vh.getVendorTaxNumber()).append(this.getVendorOwnershipCode(), vh.getVendorOwnershipCode()).append(this.getVendorOwnershipCategoryCode(), vh.getVendorOwnershipCategoryCode()).append(this.getVendorFederalWithholdingTaxBeginningDate(), vh.getVendorFederalWithholdingTaxBeginningDate()).append(this.getVendorFederalWithholdingTaxEndDate(), vh.getVendorFederalWithholdingTaxEndDate()).append(this.getVendorW9ReceivedIndicator(), vh.getVendorW9ReceivedIndicator()).append(this.getVendorW8BenReceivedIndicator(), vh.getVendorW8BenReceivedIndicator()).append(this.getVendorDebarredIndicator(), vh.getVendorDebarredIndicator()).append(this.getVendorForeignIndicator(), vh.getVendorForeignIndicator()).isEquals();
285            }
286        }
287    
288        /**
289         * @see org.kuali.rice.kns.bo.BusinessObjectBase#toStringMapper()
290         */
291        protected LinkedHashMap<String, String> toStringMapper() {
292            LinkedHashMap<String, String> m = new LinkedHashMap<String, String>();
293            if (this.vendorHeaderGeneratedIdentifier != null) {
294                m.put("vendorHeaderGeneratedIdentifier", this.vendorHeaderGeneratedIdentifier.toString());
295            }
296            return m;
297        }
298    }