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.ArrayList;
021    import java.util.HashMap;
022    import java.util.LinkedHashMap;
023    import java.util.List;
024    import java.util.Map;
025    
026    import org.apache.commons.lang.StringUtils;
027    import org.apache.commons.lang.builder.EqualsBuilder;
028    import org.apache.log4j.Logger;
029    import org.kuali.kfs.sys.context.SpringContext;
030    import org.kuali.kfs.vnd.VendorPropertyConstants;
031    import org.kuali.rice.kim.bo.Person;
032    import org.kuali.rice.kns.bo.PersistableBusinessObjectBase;
033    import org.kuali.rice.kns.service.LookupService;
034    import org.kuali.rice.kns.util.KualiDecimal;
035    import org.kuali.rice.kns.util.ObjectUtils;
036    import org.kuali.rice.kns.util.TypedArrayList;
037    
038    /**
039     * Contains all data for a specific parent or division Vendor, including a link to the <code>VendorHeader</code>, which only
040     * contains information about the parent company, but can be shared between division Vendors.
041     * 
042     * @see org.kuali.kfs.vnd.businessobject.VendorHeader
043     */
044    public class VendorDetail extends PersistableBusinessObjectBase implements VendorRoutingComparable {
045        private static Logger LOG = Logger.getLogger(VendorDetail.class);
046    
047        private Integer vendorHeaderGeneratedIdentifier;
048        private Integer vendorDetailAssignedIdentifier;
049        private String vendorNumber; // not persisted in the db
050        private boolean vendorParentIndicator;
051        private String vendorName;
052        private String vendorFirstName; // not persisted in the db
053        private String vendorLastName; // not persisted in the db
054        private String vendorStateForLookup; // not persisted in the db
055    
056        private boolean activeIndicator;
057        private String vendorInactiveReasonCode;
058        private String vendorDunsNumber;
059        private String vendorPaymentTermsCode;
060        private String vendorShippingTitleCode;
061        private String vendorShippingPaymentTermsCode;
062        private Boolean vendorConfirmationIndicator;
063        private Boolean vendorPrepaymentIndicator;
064        private Boolean vendorCreditCardIndicator;
065        private KualiDecimal vendorMinimumOrderAmount;
066        private String vendorUrlAddress;
067        private String vendorRemitName;
068        private Boolean vendorRestrictedIndicator;
069        private String vendorRestrictedReasonText;
070        private Date vendorRestrictedDate;
071        private String vendorRestrictedPersonIdentifier;
072        private String vendorSoldToNumber; // not persisted in the db
073        private Integer vendorSoldToGeneratedIdentifier;
074        private Integer vendorSoldToAssignedIdentifier;
075        private String vendorSoldToName;
076        private boolean vendorFirstLastNameIndicator;
077        private boolean taxableIndicator;
078    
079        private List<VendorAddress> vendorAddresses;
080        private List<VendorAlias> vendorAliases;
081        private List<VendorContact> vendorContacts;
082        private List<VendorContract> vendorContracts;
083        private List<VendorCustomerNumber> vendorCustomerNumbers;
084        private List<VendorPhoneNumber> vendorPhoneNumbers;
085        private List<VendorShippingSpecialCondition> vendorShippingSpecialConditions;
086        private List<VendorCommodityCode> vendorCommodities;
087        
088        private VendorHeader vendorHeader;
089        private VendorInactiveReason vendorInactiveReason;
090        private PaymentTermType vendorPaymentTerms;
091        private ShippingTitle vendorShippingTitle;
092        private ShippingPaymentTerms vendorShippingPaymentTerms;
093        private VendorDetail soldToVendorDetail;
094        private Person vendorRestrictedPerson;
095        
096        private String vendorParentName; // not persisted in the db
097        private String defaultAddressLine1; // not persisted in the db
098        private String defaultAddressLine2; // not persisted in the db
099        private String defaultAddressCity; // not persisted in the db
100        private String defaultAddressStateCode; // not persisted in the db
101        private String defaultAddressInternationalProvince; // not persisted in the db
102        private String defaultAddressPostalCode; // not persisted in the db
103        private String defaultAddressCountryCode; // not persisted in the db
104        private String defaultFaxNumber; // not persisted in the db
105        
106        /**
107         * Default constructor.
108         */
109        public VendorDetail() {
110            vendorHeader = new VendorHeader();
111            vendorAddresses = new TypedArrayList(VendorAddress.class);
112            vendorAliases = new TypedArrayList(VendorAlias.class);
113            vendorContacts = new TypedArrayList(VendorContact.class);
114            vendorContracts = new TypedArrayList(VendorContract.class);
115            vendorCustomerNumbers = new TypedArrayList(VendorCustomerNumber.class);
116            vendorPhoneNumbers = new TypedArrayList(VendorPhoneNumber.class);
117            vendorShippingSpecialConditions = new TypedArrayList(VendorShippingSpecialCondition.class);
118            vendorCommodities = new TypedArrayList(VendorCommodityCode.class);
119            vendorParentIndicator = true;
120    
121        }
122    
123        public Integer getVendorHeaderGeneratedIdentifier() {
124            return vendorHeaderGeneratedIdentifier;
125        }
126    
127        public void setVendorHeaderGeneratedIdentifier(Integer vendorHeaderGeneratedIdentifier) {
128            this.vendorHeaderGeneratedIdentifier = vendorHeaderGeneratedIdentifier;
129        }
130    
131        public Integer getVendorDetailAssignedIdentifier() {
132            return vendorDetailAssignedIdentifier;
133        }
134    
135        public void setVendorDetailAssignedIdentifier(Integer vendorDetailAssignedIdentifier) {
136            this.vendorDetailAssignedIdentifier = vendorDetailAssignedIdentifier;
137        }
138    
139        /**
140         * A concatenation of the vendorHeaderGeneratedIdentifier, a dash, and the vendorDetailAssignedIdentifier
141         * 
142         * @return Returns the vendorNumber.
143         */
144        public String getVendorNumber() {
145            String headerId = "";
146            String detailId = "";
147            String vendorNumber = "";
148            if (ObjectUtils.isNotNull(this.vendorHeaderGeneratedIdentifier)) {
149                headerId = this.vendorHeaderGeneratedIdentifier.toString();
150            }
151            if (ObjectUtils.isNotNull(this.vendorDetailAssignedIdentifier)) {
152                detailId = this.vendorDetailAssignedIdentifier.toString();
153            }
154            if (!StringUtils.isEmpty(headerId) && !StringUtils.isEmpty(detailId)) {
155                vendorNumber = headerId + "-" + detailId;
156            }
157    
158            return vendorNumber;
159        }
160    
161        /**
162         * Sets the vendorNumber attribute value.
163         * If vendorNumber is empty, clears header and detail IDs.
164         * If vendorNumber is invalid, leaves header and detail IDs as were.
165         * 
166         * @param vendorNumber The vendorNumber to set.
167         */
168        public void setVendorNumber(String vendorNumber) {
169            this.vendorNumber = vendorNumber;
170    
171            if (StringUtils.isEmpty(vendorNumber)) {
172                vendorHeaderGeneratedIdentifier = null;
173                vendorDetailAssignedIdentifier = null;
174                return;
175            }
176                
177            int dashInd = vendorNumber.indexOf('-');
178            // make sure there's at least one char before and after '-'
179            if (dashInd > 0 && dashInd < vendorNumber.length() - 1) {
180                try {
181                    vendorHeaderGeneratedIdentifier = new Integer(vendorNumber.substring(0, dashInd));
182                    vendorDetailAssignedIdentifier = new Integer(vendorNumber.substring(dashInd + 1));
183                }
184                catch (NumberFormatException e) {
185                    // in case of invalid number format
186                }
187            }
188        }
189    
190        public String getVendorName() {
191            return vendorName;
192        }
193    
194        public void setVendorName(String vendorName) {
195            this.vendorName = vendorName;
196        }
197        
198        public Integer getVendorSoldToGeneratedIdentifier() {
199            return vendorSoldToGeneratedIdentifier;
200        }
201    
202        public void setVendorSoldToGeneratedIdentifier(Integer vendorSoldToGeneratedIdentifier) {
203            this.vendorSoldToGeneratedIdentifier = vendorSoldToGeneratedIdentifier;
204        }
205    
206        public Integer getVendorSoldToAssignedIdentifier() {
207            return vendorSoldToAssignedIdentifier;
208        }
209    
210        public void setVendorSoldToAssignedIdentifier(Integer vendorSoldToAssignedIdentifier) {
211            this.vendorSoldToAssignedIdentifier = vendorSoldToAssignedIdentifier;
212        }
213    
214        /**
215         * Gets the vendorSoldToNumber attribute.
216         * 
217         * @return Returns the vendorSoldToNumber.
218         */
219        public String getVendorSoldToNumber() {
220            String headerId = "";
221            String detailId = "";
222            String vendorSoldToNumber = "";
223    
224            if (this.vendorSoldToGeneratedIdentifier != null) {
225                headerId = this.vendorSoldToGeneratedIdentifier.toString();
226            }
227            if (this.vendorSoldToAssignedIdentifier != null) {
228                detailId = this.vendorSoldToAssignedIdentifier.toString();
229            }
230            if (!StringUtils.isEmpty(headerId) && !StringUtils.isEmpty(detailId)) {
231                vendorSoldToNumber = headerId + "-" + detailId;
232            }
233    
234            return vendorSoldToNumber;
235        }
236    
237        /**
238         * Sets the vendorSoldToNumber attribute value.
239         * If vendorSoldToNumber is empty, clears soldToVendor header and detail IDs.
240         * If vendorSoldToNumber is invalid, leaves soldToVendor header and detail IDs as were.
241         * 
242         * @param vendorSoldToNumber The vendorSoldToNumber to set.
243         */
244        public void setVendorSoldToNumber(String vendorSoldToNumber) {
245            this.vendorSoldToNumber = vendorSoldToNumber;
246            
247            if (StringUtils.isEmpty(vendorSoldToNumber)) {
248                vendorSoldToGeneratedIdentifier = null;
249                vendorSoldToAssignedIdentifier = null;
250                return;
251            }
252                
253            int dashInd = vendorSoldToNumber.indexOf('-');
254            // make sure there's at least one char before and after '-'
255            if (dashInd > 0 && dashInd < vendorSoldToNumber.length() - 1) {
256                try {
257                    vendorSoldToGeneratedIdentifier = new Integer(vendorSoldToNumber.substring(0, dashInd));
258                    vendorSoldToAssignedIdentifier = new Integer(vendorSoldToNumber.substring(dashInd + 1));
259                }
260                catch (NumberFormatException e) {
261                    // in case of invalid number format
262                }
263            }        
264        }
265    
266        /**
267         * Gets the vendorSoldToName attribute.
268         * 
269         * @return Returns the vendorSoldToName
270         */
271        public String getVendorSoldToName() {
272            return this.vendorSoldToName;
273        }
274    
275        public void setVendorSoldToName(String vendorSoldToName) {
276            this.vendorSoldToName = vendorSoldToName;
277        }
278    
279        public String getAltVendorName() {
280            return vendorName;
281        }
282    
283        public void setAltVendorName(String altVendorName) {
284            this.vendorName = altVendorName;
285        }
286    
287        public String getVendorRemitName() {
288            return vendorRemitName;
289        }
290    
291        public void setVendorRemitName(String vendorRemitName) {
292            this.vendorRemitName = vendorRemitName;
293        }
294    
295        public boolean isVendorParentIndicator() {
296            return vendorParentIndicator;
297        }
298    
299        public void setVendorParentIndicator(boolean vendorParentIndicator) {
300            this.vendorParentIndicator = vendorParentIndicator;
301        }
302        
303        public boolean isTaxableIndicator() {
304            return taxableIndicator;
305        }
306    
307        public void setTaxableIndicator(boolean taxableIndicator) {
308            this.taxableIndicator = taxableIndicator;
309        }
310    
311        public boolean isVendorDebarred() {
312            return (ObjectUtils.isNotNull(getVendorHeader().getVendorDebarredIndicator()) && getVendorHeader().getVendorDebarredIndicator());
313        }
314    
315        public boolean isActiveIndicator() {
316            return activeIndicator;
317        }
318    
319        public void setActiveIndicator(boolean activeIndicator) {
320            this.activeIndicator = activeIndicator;
321        }
322    
323        public String getVendorInactiveReasonCode() {
324            return vendorInactiveReasonCode;
325        }
326    
327        public void setVendorInactiveReasonCode(String vendorInactiveReasonCode) {
328            this.vendorInactiveReasonCode = vendorInactiveReasonCode;
329        }
330    
331        public String getVendorPaymentTermsCode() {
332            return vendorPaymentTermsCode;
333        }
334    
335        public void setVendorPaymentTermsCode(String vendorPaymentTermsCode) {
336            this.vendorPaymentTermsCode = vendorPaymentTermsCode;
337        }
338    
339        public String getVendorShippingTitleCode() {
340            return vendorShippingTitleCode;
341        }
342    
343        public void setVendorShippingTitleCode(String vendorShippingTitleCode) {
344            this.vendorShippingTitleCode = vendorShippingTitleCode;
345        }
346    
347        public String getVendorShippingPaymentTermsCode() {
348            return vendorShippingPaymentTermsCode;
349        }
350    
351        public void setVendorShippingPaymentTermsCode(String vendorShippingPaymentTermsCode) {
352            this.vendorShippingPaymentTermsCode = vendorShippingPaymentTermsCode;
353        }
354    
355        public Boolean getVendorConfirmationIndicator() {
356            return vendorConfirmationIndicator;
357        }
358    
359        public void setVendorConfirmationIndicator(Boolean vendorConfirmationIndicator) {
360            this.vendorConfirmationIndicator = vendorConfirmationIndicator;
361        }
362    
363        public Boolean getVendorPrepaymentIndicator() {
364            return vendorPrepaymentIndicator;
365        }
366    
367        public void setVendorPrepaymentIndicator(Boolean vendorPrepaymentIndicator) {
368            this.vendorPrepaymentIndicator = vendorPrepaymentIndicator;
369        }
370    
371        public Boolean getVendorCreditCardIndicator() {
372            return vendorCreditCardIndicator;
373        }
374    
375        public void setVendorCreditCardIndicator(Boolean vendorCreditCardIndicator) {
376            this.vendorCreditCardIndicator = vendorCreditCardIndicator;
377        }
378    
379        public KualiDecimal getVendorMinimumOrderAmount() {
380            return vendorMinimumOrderAmount;
381        }
382    
383        public void setVendorMinimumOrderAmount(KualiDecimal vendorMinimumOrderAmount) {
384            this.vendorMinimumOrderAmount = vendorMinimumOrderAmount;
385        }
386    
387        public String getVendorUrlAddress() {
388            return vendorUrlAddress;
389        }
390    
391        public void setVendorUrlAddress(String vendorUrlAddress) {
392            this.vendorUrlAddress = vendorUrlAddress;
393        }
394    
395        public Boolean getVendorRestrictedIndicator() {
396            return vendorRestrictedIndicator;
397        }
398    
399        public void setVendorRestrictedIndicator(Boolean vendorRestrictedIndicator) {
400            this.vendorRestrictedIndicator = vendorRestrictedIndicator;
401        }
402    
403        public String getVendorRestrictedReasonText() {
404            return vendorRestrictedReasonText;
405        }
406    
407        public void setVendorRestrictedReasonText(String vendorRestrictedReasonText) {
408            this.vendorRestrictedReasonText = vendorRestrictedReasonText;
409        }
410    
411        public Date getVendorRestrictedDate() {
412            return vendorRestrictedDate;
413        }
414    
415        public void setVendorRestrictedDate(Date vendorRestrictedDate) {
416            this.vendorRestrictedDate = vendorRestrictedDate;
417        }
418    
419        public String getVendorRestrictedPersonIdentifier() {
420            return vendorRestrictedPersonIdentifier;
421        }
422    
423        public void setVendorRestrictedPersonIdentifier(String vendorRestrictedPersonIdentifier) {
424            this.vendorRestrictedPersonIdentifier = vendorRestrictedPersonIdentifier;
425        }
426    
427        public String getVendorDunsNumber() {
428            return vendorDunsNumber;
429        }
430    
431        public void setVendorDunsNumber(String vendorDunsNumber) {
432            this.vendorDunsNumber = vendorDunsNumber;
433        }
434    
435        public VendorHeader getVendorHeader() {
436            return vendorHeader;
437        }
438    
439        public void setVendorHeader(VendorHeader vendorHeader) {
440            this.vendorHeader = vendorHeader;
441        }
442    
443        public PaymentTermType getVendorPaymentTerms() {
444            return vendorPaymentTerms;
445        }
446    
447        /**
448         * Sets the vendorPaymentTerms attribute.
449         * 
450         * @param vendorPaymentTerms The vendorPaymentTerms to set.
451         * @deprecated
452         */
453        public void setVendorPaymentTerms(PaymentTermType vendorPaymentTerms) {
454            this.vendorPaymentTerms = vendorPaymentTerms;
455        }
456    
457        public ShippingTitle getVendorShippingTitle() {
458            return vendorShippingTitle;
459        }
460    
461        /**
462         * Sets the vendorShippingTitle attribute.
463         * 
464         * @param vendorShippingTitle The vendorShippingTitle to set.
465         * @deprecated
466         */
467        public void setVendorShippingTitle(ShippingTitle vendorShippingTitle) {
468            this.vendorShippingTitle = vendorShippingTitle;
469        }
470    
471        public ShippingPaymentTerms getVendorShippingPaymentTerms() {
472            return vendorShippingPaymentTerms;
473        }
474    
475        /**
476         * Sets the vendorShippingPaymentTerms attribute.
477         * 
478         * @param vendorShippingPaymentTerms The vendorShippingPaymentTerms to set.
479         * @deprecated
480         */
481        public void setVendorShippingPaymentTerms(ShippingPaymentTerms vendorShippingPaymentTerms) {
482            this.vendorShippingPaymentTerms = vendorShippingPaymentTerms;
483        }
484    
485        public VendorInactiveReason getVendorInactiveReason() {
486            return vendorInactiveReason;
487        }
488    
489        /**
490         * Sets the vendorInactiveReason attribute value.
491         * 
492         * @param vendorInactiveReason The vendorInactiveReason to set.
493         * @deprecated
494         */
495        public void setVendorInactiveReason(VendorInactiveReason vendorInactiveReason) {
496            this.vendorInactiveReason = vendorInactiveReason;
497        }
498    
499        public List<VendorAddress> getVendorAddresses() {
500            return vendorAddresses;
501        }
502    
503        public void setVendorAddresses(List<VendorAddress> vendorAddresses) {
504            this.vendorAddresses = vendorAddresses;
505        }
506    
507        public List<VendorContact> getVendorContacts() {
508            return vendorContacts;
509        }
510    
511        public void setVendorContacts(List<VendorContact> vendorContacts) {
512            this.vendorContacts = vendorContacts;
513        }
514    
515        public List<VendorContract> getVendorContracts() {
516            return vendorContracts;
517        }
518    
519        public void setVendorContracts(List<VendorContract> vendorContracts) {
520            this.vendorContracts = vendorContracts;
521        }
522    
523        public List<VendorCustomerNumber> getVendorCustomerNumbers() {
524            return vendorCustomerNumbers;
525        }
526    
527        public void setVendorCustomerNumbers(List<VendorCustomerNumber> vendorCustomerNumbers) {
528            this.vendorCustomerNumbers = vendorCustomerNumbers;
529        }
530    
531        public List<VendorShippingSpecialCondition> getVendorShippingSpecialConditions() {
532            return vendorShippingSpecialConditions;
533        }
534    
535        public void setVendorShippingSpecialConditions(List<VendorShippingSpecialCondition> vendorShippingSpecialConditions) {
536            this.vendorShippingSpecialConditions = vendorShippingSpecialConditions;
537        }
538    
539        public List<VendorCommodityCode> getVendorCommodities() {
540            return vendorCommodities;
541        }
542    
543        public void setVendorCommodities(List<VendorCommodityCode> vendorCommodities) {
544            this.vendorCommodities = vendorCommodities;
545        }
546    
547        public List<VendorAlias> getVendorAliases() {
548            return vendorAliases;
549        }
550    
551        public void setVendorAliases(List<VendorAlias> vendorAliases) {
552            this.vendorAliases = vendorAliases;
553        }
554    
555        public List<VendorPhoneNumber> getVendorPhoneNumbers() {
556            return vendorPhoneNumbers;
557        }
558    
559        public void setVendorPhoneNumbers(List<VendorPhoneNumber> vendorPhoneNumbers) {
560            this.vendorPhoneNumbers = vendorPhoneNumbers;
561        }
562    
563        public String getVendorFirstName() {
564            return vendorFirstName;
565        }
566    
567        public void setVendorFirstName(String vendorFirstName) {
568            this.vendorFirstName = vendorFirstName;
569        }
570    
571        public String getVendorLastName() {
572            return vendorLastName;
573        }
574    
575        public void setVendorLastName(String vendorLastName) {
576            this.vendorLastName = vendorLastName;
577        }
578    
579        public VendorDetail getSoldToVendorDetail() {
580            return soldToVendorDetail;
581        }
582    
583        public void setSoldToVendorDetail(VendorDetail soldToVendorDetail) {
584            this.soldToVendorDetail = soldToVendorDetail;
585        }
586    
587        public boolean isVendorFirstLastNameIndicator() {
588            return vendorFirstLastNameIndicator;
589        }
590    
591        public void setVendorFirstLastNameIndicator(boolean vendorFirstLastNameIndicator) {
592            this.vendorFirstLastNameIndicator = vendorFirstLastNameIndicator;
593        }
594    
595        public String getVendorStateForLookup() {
596            return vendorStateForLookup;
597        }
598    
599        public void setVendorStateForLookup(String vendorStateForLookup) {
600            this.vendorStateForLookup = vendorStateForLookup;
601        }
602    
603        public Person getVendorRestrictedPerson() {
604            vendorRestrictedPerson = SpringContext.getBean(org.kuali.rice.kim.service.PersonService.class).updatePersonIfNecessary(vendorRestrictedPersonIdentifier, vendorRestrictedPerson);
605            return vendorRestrictedPerson;
606        }
607    
608        /**
609         * Sets the vendorRestrictedPerson attribute.
610         * 
611         * @param vendorRestrictedPerson The vendorRestrictedPerson to set.
612         * @deprecated
613         */
614        public void setVendorRestrictedPerson(Person vendorRestrictedPerson) {
615            this.vendorRestrictedPerson = vendorRestrictedPerson;
616        }
617    
618        public String getDefaultAddressLine1() {
619            return defaultAddressLine1;
620        }
621    
622        public void setDefaultAddressLine1(String defaultAddressLine1) {
623            this.defaultAddressLine1 = defaultAddressLine1;
624        }
625    
626        public String getDefaultAddressCity() {
627            return defaultAddressCity;
628        }
629    
630        public void setDefaultAddressCity(String defaultAddressCity) {
631            this.defaultAddressCity = defaultAddressCity;
632        }
633    
634        public String getDefaultAddressLine2() {
635            return defaultAddressLine2;
636        }
637    
638        public void setDefaultAddressLine2(String defaultAddressLine2) {
639            this.defaultAddressLine2 = defaultAddressLine2;
640        }
641    
642        public String getDefaultAddressPostalCode() {
643            return defaultAddressPostalCode;
644        }
645    
646        public void setDefaultAddressPostalCode(String defaultAddressPostalCode) {
647            this.defaultAddressPostalCode = defaultAddressPostalCode;
648        }
649    
650        public String getDefaultAddressStateCode() {
651            return defaultAddressStateCode;
652        }
653    
654        public void setDefaultAddressStateCode(String defaultAddressStateCode) {
655            this.defaultAddressStateCode = defaultAddressStateCode;
656        }
657    
658        public String getDefaultAddressInternationalProvince() {
659            return defaultAddressInternationalProvince;
660        }
661    
662        public void setDefaultAddressInternationalProvince(String defaultAddressInternationalProvince) {
663            this.defaultAddressInternationalProvince = defaultAddressInternationalProvince;
664        }
665    
666        public String getDefaultAddressCountryCode() {
667            return defaultAddressCountryCode;
668        }
669    
670        public void setDefaultAddressCountryCode(String defaultAddressCountryCode) {
671            this.defaultAddressCountryCode = defaultAddressCountryCode;
672        }
673    
674        public String getDefaultFaxNumber() {
675            return defaultFaxNumber;
676        }
677    
678        public void setDefaultFaxNumber(String defaultFaxNumber) {
679            this.defaultFaxNumber = defaultFaxNumber;
680        }
681    
682        /**
683         * @see org.kuali.kfs.vnd.document.routing.VendorRoutingComparable#isEqualForRouting(java.lang.Object)
684         */
685        public boolean isEqualForRouting(Object toCompare) {
686            LOG.debug("Entering isEqualForRouting.");
687            if ((ObjectUtils.isNull(toCompare)) || !(toCompare instanceof VendorDetail)) {
688                return false;
689            }
690            else {
691                VendorDetail detail = (VendorDetail) toCompare;
692                return new EqualsBuilder().append(
693                        this.getVendorHeaderGeneratedIdentifier(), detail.getVendorHeaderGeneratedIdentifier()).append(
694                        this.getVendorDetailAssignedIdentifier(), detail.getVendorDetailAssignedIdentifier()).append(
695                        this.isVendorParentIndicator(), detail.isVendorParentIndicator()).append(
696                        this.getVendorName(), detail.getVendorName()).append(
697                        this.isActiveIndicator(), detail.isActiveIndicator()).append(
698                        this.getVendorInactiveReasonCode(), detail.getVendorInactiveReasonCode()).append(
699                        this.getVendorDunsNumber(), detail.getVendorDunsNumber()).append(
700                        this.getVendorPaymentTermsCode(), detail.getVendorPaymentTermsCode()).append(
701                        this.getVendorShippingTitleCode(), detail.getVendorShippingTitleCode()).append(
702                        this.getVendorShippingPaymentTermsCode(), detail.getVendorShippingPaymentTermsCode()).append(
703                        this.getVendorConfirmationIndicator(), detail.getVendorConfirmationIndicator()).append(
704                        this.getVendorPrepaymentIndicator(), detail.getVendorPrepaymentIndicator()).append(
705                        this.getVendorCreditCardIndicator(), detail.getVendorCreditCardIndicator()).append(
706                        this.getVendorMinimumOrderAmount(), detail.getVendorMinimumOrderAmount()).append(
707                        this.getVendorUrlAddress(), detail.getVendorUrlAddress()).append(
708                        this.getVendorRemitName(), detail.getVendorRemitName()).append(
709                        this.getVendorRestrictedIndicator(), detail.getVendorRestrictedIndicator()).append(
710                        this.getVendorRestrictedReasonText(), detail.getVendorRestrictedReasonText()).append(
711                        this.getVendorRestrictedDate(), detail.getVendorRestrictedDate()).append(
712                        this.getVendorRestrictedPersonIdentifier(), detail.getVendorRestrictedPersonIdentifier()).append(
713                        this.getVendorSoldToGeneratedIdentifier(), detail.getVendorSoldToGeneratedIdentifier()).append(
714                        this.getVendorSoldToAssignedIdentifier(), detail.getVendorSoldToAssignedIdentifier()).append(
715                        this.getVendorSoldToName(), detail.getVendorSoldToName()).append(
716                        this.isVendorFirstLastNameIndicator(), detail.isVendorFirstLastNameIndicator()).isEquals();
717            }
718        }
719    
720        /**
721         *  The vendor is B2B if they have a contract that has the B2B 
722         *  indicator set to Yes. This method returns true if this vendor
723         *  is a B2B vendor and false otherwise.
724         * 
725         * @return true if this vendor is a B2B vendor and false otherwise.
726         * 
727         */
728        public boolean isB2BVendor() {
729            for (VendorContract contract : this.getVendorContracts()) {
730                if (contract.getVendorB2bIndicator()) {
731                    return true;
732                }
733            }
734            return false;
735        }
736        
737        public VendorDetail getVendorParent() {
738            Map<String, String> tmpValues = new HashMap<String, String>();
739            List<VendorDetail> relatedVendors = new ArrayList<VendorDetail>();
740            tmpValues.put(VendorPropertyConstants.VENDOR_HEADER_GENERATED_ID, getVendorHeaderGeneratedIdentifier().toString());
741            tmpValues.put(VendorPropertyConstants.VENDOR_PARENT_INDICATOR, "Y");
742            VendorDetail parentVendor = (VendorDetail) SpringContext.getBean(LookupService.class).findObjectBySearch(VendorDetail.class, tmpValues);
743            return parentVendor;
744        }
745    
746        public String getVendorParentName() {
747            if (StringUtils.isNotBlank(this.vendorParentName)) {
748                return vendorParentName;
749            }
750            else if (isVendorParentIndicator()) {
751                setVendorParentName(this.getVendorName());
752                return vendorParentName;
753            }
754            else {
755                this.setVendorParentName(getVendorParent().getVendorName());
756                return vendorParentName;
757            }
758        }
759    
760        public void setVendorParentName(String vendorParentName) {
761            this.vendorParentName = vendorParentName;
762        }
763    
764    
765        /**
766         * @see org.kuali.rice.kns.bo.BusinessObjectBase#toStringMapper()
767         */
768        protected LinkedHashMap toStringMapper() {
769            LinkedHashMap m = new LinkedHashMap();
770            if (this.vendorHeaderGeneratedIdentifier != null) {
771                m.put("vendorHeaderGeneratedIdentifier", this.vendorHeaderGeneratedIdentifier.toString());
772            }
773            if (this.vendorDetailAssignedIdentifier != null) {
774                m.put("vendorDetailAssignedIdentifier", this.vendorDetailAssignedIdentifier.toString());
775            }
776    
777            return m;
778        }
779    
780    }
781