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     * Created on Feb 13, 2006
018     *
019     */
020    package org.kuali.kfs.module.purap.businessobject;
021    
022    import java.util.ArrayList;
023    import java.util.Date;
024    import java.util.Iterator;
025    import java.util.List;
026    
027    import org.apache.commons.lang.StringUtils;
028    import org.apache.commons.lang.builder.ToStringBuilder;
029    import org.kuali.kfs.module.purap.util.ElectronicInvoiceUtils;
030    import org.kuali.kfs.module.purap.util.cxml.CxmlExtrinsic;
031    import org.kuali.rice.kns.util.DateUtils;
032    
033    public class ElectronicInvoiceDetailRequestHeader {
034      private static org.apache.log4j.Logger LOG = org.apache.log4j.Logger.getLogger(ElectronicInvoiceDetailRequestHeader.class);
035      
036      private String invoiceId;
037      private String purpose = "standard";
038      private String operation = "new";
039      private String invoiceDateString;
040      private java.util.Date invoiceDate;
041    
042      private boolean isInformationOnly;
043      private boolean isHeaderInvoiceIndicator;
044      private boolean isTaxInLine;
045      private boolean isSpecialHandlingInLine;
046      private boolean isShippingInLine;
047      private boolean isDiscountInLine;
048      private String shippingDateString;
049      private java.util.Date shippingDate;
050      private String invoiceCustomerNumber;
051      
052      private List invoicePartnerContacts = new ArrayList();
053      private List invoiceShippingContacts = new ArrayList();  // holds the ship to address information
054      private List extrinsics = new ArrayList(); 
055      
056      /**
057       * Newly Added
058       */
059      private boolean isAccountingInLine;
060      private String idReferenceCreator;
061      private String idReferenceDescription;
062      private String idReferenceDomain;
063      private String idReferenceIdentifier; 
064      private int payInNumberOfDays;
065      private String percentageRate;
066      
067      public ElectronicInvoiceDetailRequestHeader() {
068        super();
069      }
070    
071      /**
072       * @param invoiceId
073       * @param purpose
074       * @param operation
075       * @throws ParseException
076       */
077      public ElectronicInvoiceDetailRequestHeader(String invoiceId,String invoiceDate,String purpose,String operation) {
078        super();
079        this.invoiceId = invoiceId;
080        this.purpose = purpose;
081        this.operation = operation;
082        this.setInvoiceDateString(invoiceDate);
083      }
084    
085      /**
086       * This method returns the first ElectronicInvoicePostalAddress associated with the ElectronicInvoiceContact
087       * that has a roleID matching the given roleID.  If the addressName is given then
088       * the ElectronicInvoicePostalAddress returned must match that... otherwise the first 
089       * ElectronicInvoicePostalAddress found is returned
090       * 
091       * @param roleID Valid 'Contact' tag attribute value for 'roleID'
092       * @param addressName Valid 'PostalAddress' tag attribute value for 'name'
093       * @return ElectronicInvoicePostalAddress relating to given info
094       */
095      public ElectronicInvoicePostalAddress getCxmlPostalAddressByRoleID(String roleID,String addressName) {
096        if (roleID != null) {
097          ElectronicInvoiceContact contact = this.getCxmlContactByRoleID(roleID);
098          if (contact != null) {
099            for (Iterator iterator = contact.getPostalAddresses().iterator(); iterator.hasNext();) {
100              ElectronicInvoicePostalAddress cpa = (ElectronicInvoicePostalAddress) iterator.next();
101              if (addressName == null) {
102                return cpa;
103              } else {
104                if (addressName.equalsIgnoreCase(cpa.getName())) {
105                  return cpa;
106                }
107              }
108            }
109          }
110        }
111        return null;
112      }
113      
114      /**
115       * This method returns the first ElectronicInvoiceContact associated with the given 
116       * roleID.
117       * 
118       * @param roleID Valid 'Contact' tag attribute value for 'roleID'
119       * @return ElectronicInvoiceContact relating to given info
120       */
121      public ElectronicInvoiceContact getCxmlContactByRoleID(String roleID) {
122        if (roleID != null) {
123          for (Iterator iter = this.invoicePartnerContacts.iterator(); iter.hasNext();) {
124            ElectronicInvoiceContact contact = (ElectronicInvoiceContact) iter.next();
125            if (roleID.equalsIgnoreCase(contact.getRole())) {
126              return contact;
127            }
128          }
129          for (Iterator shipIter = this.invoiceShippingContacts.iterator(); shipIter.hasNext();) {
130            ElectronicInvoiceContact shipContact = (ElectronicInvoiceContact) shipIter.next();
131            if (roleID.equalsIgnoreCase(shipContact.getRole())) {
132              return shipContact;
133            }
134          }
135        }
136        return null;
137      }
138    
139      /**
140       * @return Returns the invoiceDateString.
141       */
142      public String getInvoiceDateString() {
143        return invoiceDateString;
144      }
145      /**
146       * @param invoiceDateString The invoiceDateString to set.
147       */
148      public void setInvoiceDateString(String invoiceDateString) {
149          this.invoiceDateString = invoiceDateString;
150          setInvoiceDate(ElectronicInvoiceUtils.getDate(invoiceDateString));
151      }
152    
153      /**
154       * @return Returns the shippingDateString.
155       */
156      public String getShippingDateString() {
157        return shippingDateString;
158      }
159      /**
160       * @param shippingDateString The shippingDateString to set.
161       */
162      public void setShippingDateString(String shippingDateString) {
163        this.shippingDateString = shippingDateString;
164    //    if ( (shippingDateString != null) && (!("".equals(shippingDateString))) ) {
165    //      SimpleDateFormat sdf = new SimpleDateFormat(PurapConstants.ElectronicInvoice.CXML_DATE_FORMAT, Locale.US);
166    //      try {
167    //        this.shippingDate = sdf.parse(shippingDateString);
168    //      } catch (ParseException e) {
169    //        // setting shipping date to null to identify problem
170    //        LOG.error("setShippingDateString() SimpleDateFormat parser error attempting to set invalid date string " + shippingDateString + " in ShippingDate field... setting date to null");
171    //        this.shippingDate = null;
172    //      }
173    //    } else {
174    //      this.shippingDate = null;
175    //    }
176        setShippingDate(ElectronicInvoiceUtils.getDate(shippingDateString));
177      }
178    
179      /**
180       * @return Returns the extrinsics.
181       */
182      public List getExtrinsics() {
183        return extrinsics;
184      }
185      /**
186       * @param extrinsics The extrinsics to set.
187       */
188      public void setExtrinsics(List extrinsics) {
189        this.extrinsics = extrinsics;
190      }
191      /**
192       * @return Returns the invoiceCustomerNumber.
193       */
194      public String getInvoiceCustomerNumber() {
195        return invoiceCustomerNumber;
196      }
197      /**
198       * @param invoiceCustomerNumber The invoiceCustomerNumber to set.
199       */
200      public void setInvoiceCustomerNumber(String invoiceCustomerNumber) {
201        this.invoiceCustomerNumber = invoiceCustomerNumber;
202      }
203      /**
204       * @return Returns the invoiceDate.
205       */
206      public java.sql.Date getInvoiceDate() {
207          if (invoiceDate != null){
208              return DateUtils.convertToSqlDate(invoiceDate);
209          }else{
210              return null;
211          }
212      }
213      /**
214       * @param invoiceDate The invoiceDate to set.
215       */
216      public void setInvoiceDate(Date invoiceDate) {
217        this.invoiceDate = invoiceDate;
218      }
219      /**
220       * @return Returns the invoiceId.
221       */
222      public String getInvoiceId() {
223        return invoiceId;
224      }
225      
226      /**
227       * @param invoiceId The invoiceId to set.
228       */
229      public void setInvoiceId(String invoiceId) {
230        this.invoiceId = invoiceId;
231      }
232      /**
233       * @return Returns the invoicePartnerContacts.
234       */
235      public List getInvoicePartnerContacts() {
236        return invoicePartnerContacts;
237      }
238      /**
239       * @param invoicePartnerContacts The invoicePartnerContacts to set.
240       */
241      public void setInvoicePartnerContacts(List invoicePartnerContacts) {
242        this.invoicePartnerContacts = invoicePartnerContacts;
243      }
244      /**
245       * @return Returns the invoiceShippingContacts.
246       */
247      public List getInvoiceShippingContacts() {
248        return invoiceShippingContacts;
249      }
250      /**
251       * @param invoiceShippingContacts The invoiceShippingContacts to set.
252       */
253      public void setInvoiceShippingContacts(List invoiceShippingContacts) {
254        this.invoiceShippingContacts = invoiceShippingContacts;
255      }
256      
257      /**
258       * @return Returns the isDiscountInLine.
259       */
260      public boolean isDiscountInLine() {
261        return isDiscountInLine;
262      }
263      /**
264       * @param isDiscountInLine The isDiscountInLine to set.
265       */
266      public void setDiscountInfoProvidedIndicator(String isDiscountInLine) {
267        this.isDiscountInLine = StringUtils.equalsIgnoreCase(StringUtils.defaultString(isDiscountInLine),"yes");;
268      }
269      /**
270       * @return Returns the isHeaderInvoiceIndicator.
271       */
272      public boolean isHeaderInvoiceIndicator() {
273        return isHeaderInvoiceIndicator;
274      }
275      /**
276       * @param isHeaderInvoiceIndicator The isHeaderInvoiceIndicator to set.
277       */
278      public void setHeaderInvoiceInd(String isHeaderInvoiceIndicator) {
279        this.isHeaderInvoiceIndicator = StringUtils.equalsIgnoreCase(StringUtils.defaultString(isHeaderInvoiceIndicator),"yes");
280      }
281      /**
282       * @return Returns the isInformationOnly.
283       */
284      public boolean isInformationOnly() {
285        return isInformationOnly;
286      }
287      /**
288       * @param isInformationOnly The isInformationOnly to set.
289       */
290      public void setbuyerInformationOnlyIndicator(String informationOnly) {
291          /**
292           * It's not possible to have the param as boolean type since yes is not a allowed boolean value in xsd (Allowed ones - true/false/1/0)
293           */
294        this.isInformationOnly = StringUtils.equalsIgnoreCase(StringUtils.defaultString(informationOnly),"yes");
295      }
296      /**
297       * @return Returns the isShippingInLine.
298       */
299      public boolean isShippingInLine() {
300        return isShippingInLine;
301      }
302      /**
303       * @param isShippingInLine The isShippingInLine to set.
304       */
305      public void setShippingInfoProvidedIndicator(String isShippingInLine) {
306        this.isShippingInLine = StringUtils.equalsIgnoreCase(StringUtils.defaultString(isShippingInLine),"yes");
307      }
308      /**
309       * @return Returns the isSpecialHandlingInLine.
310       */
311      public boolean isSpecialHandlingInLine() {
312        return isSpecialHandlingInLine;
313      }
314      /**
315       * @param isSpecialHandlingInLine The isSpecialHandlingInLine to set.
316       */
317      public void setSpecialHandlingInfoProvidedIndicator(String isSpecialHandlingInLine) {
318        this.isSpecialHandlingInLine = StringUtils.equalsIgnoreCase(StringUtils.defaultString(isSpecialHandlingInLine),"yes");
319      }
320      /**
321       * @return Returns the isTaxInLine.
322       */
323      public boolean isTaxInLine() {
324        return isTaxInLine;
325      }
326      /**
327       * @param isTaxInLine The isTaxInLine to set.
328       */
329      public void setTaxInfoProvidedIndicator(String isTaxInLine) {
330        this.isTaxInLine = StringUtils.equalsIgnoreCase(StringUtils.defaultString(isTaxInLine),"yes");
331      }
332      /**
333       * @return Returns the operation.
334       */
335      public String getOperation() {
336        return operation;
337      }
338      /**
339       * @param operation The operation to set.
340       */
341      public void setOperation(String operation) {
342        this.operation = operation;
343      }
344      /**
345       * @return Returns the purpose.
346       */
347      public String getPurpose() {
348        return purpose;
349      }
350      /**
351       * @param purpose The purpose to set.
352       */
353      public void setPurpose(String purpose) {
354        this.purpose = purpose;
355      }
356      /**
357       * @return Returns the shippingDate.
358       */
359      public Date getShippingDate() {
360        return shippingDate;
361      }
362      /**
363       * @param shippingDate The shippingDate to set.
364       */
365      public void setShippingDate(Date shippingDate) {
366        this.shippingDate = shippingDate;
367      }
368      
369      public boolean isAccountingInLine() {
370          return isAccountingInLine;
371      }
372    
373      public void setAccountingInfoProvidedIndicator(String isAccountingInLine) {
374          this.isAccountingInLine = StringUtils.equalsIgnoreCase(StringUtils.defaultString(isAccountingInLine),"yes");;
375      }
376      
377      public String getIdReferenceCreator() {
378          return idReferenceCreator;
379      }
380    
381      public void setIdReferenceCreator(String idReferenceCreator) {
382          this.idReferenceCreator = idReferenceCreator;
383      }
384    
385      public String getIdReferenceDescription() {
386          return idReferenceDescription;
387      }
388    
389      public void setIdReferenceDescription(String idReferenceDescription) {
390          this.idReferenceDescription = idReferenceDescription;
391      }
392    
393      public String getIdReferenceDomain() {
394          return idReferenceDomain;
395      }
396    
397      public void setIdReferenceDomain(String idReferenceDomain) {
398          this.idReferenceDomain = idReferenceDomain;
399      }
400    
401      public String getIdReferenceIdentifier() {
402          return idReferenceIdentifier;
403      }
404    
405      public void setIdReferenceIdentifier(String idReferenceIdentifier) {
406          this.idReferenceIdentifier = idReferenceIdentifier;
407      }
408      
409      public void addInvoicePartnerContact(ElectronicInvoiceContact electronicInvoiceContact){
410          if (electronicInvoiceContact != null){
411              invoicePartnerContacts.add(electronicInvoiceContact);
412          }
413      }
414      
415      public ElectronicInvoiceContact[] getInvoicePartnerContactsAsArray(){
416          if (invoicePartnerContacts.size() > 0){
417              ElectronicInvoiceContact[] tempContacts = new ElectronicInvoiceContact[invoicePartnerContacts.size()];
418              invoicePartnerContacts.toArray(tempContacts);
419              return tempContacts;
420          }
421          return null;
422      }
423      
424      public void addInvoiceShippingContacts(ElectronicInvoiceContact electronicInvoiceContact){
425          invoiceShippingContacts.add(electronicInvoiceContact);
426      }
427      
428      public ElectronicInvoiceContact[] getInvoiceShippingContactsAsArray(){
429          if (invoiceShippingContacts.size() > 0){
430              ElectronicInvoiceContact[] tempContacts = new ElectronicInvoiceContact[invoiceShippingContacts.size()];
431              invoiceShippingContacts.toArray(tempContacts);
432              return tempContacts;
433          }
434          return null;
435      }
436      
437      public void addExtrinsic(CxmlExtrinsic extrinsic) {
438          this.extrinsics.add(extrinsic);
439      }
440      
441      public CxmlExtrinsic[] getExtrinsicAsArray() {
442          if (extrinsics.size() > 0){
443              CxmlExtrinsic[] extrinsics = new CxmlExtrinsic[this.extrinsics.size()];
444              this.extrinsics.toArray(extrinsics);
445              return extrinsics;
446          }
447          return null;
448      }
449      
450      public int getPayInNumberOfDays() {
451          return payInNumberOfDays;
452      }
453    
454      public void setPayInNumberOfDays(int payInNumberOfDays) {
455          this.payInNumberOfDays = payInNumberOfDays;
456      }
457      
458      public String getPercentageRate() {
459          return percentageRate;
460      }
461    
462      public void setPercentageRate(String percentageRate) {
463          this.percentageRate = percentageRate;
464      }
465      
466      public String toString(){
467          
468          ToStringBuilder toString = new ToStringBuilder(this);
469          
470          toString.append("invoiceID",getInvoiceId());
471          toString.append("purpose",getPurpose());
472          toString.append("operation",getOperation());
473          toString.append("invoiceDate",getInvoiceDateString());
474          
475          toString.append("isInformationOnly",isInformationOnly());
476          toString.append("isHeaderInvoiceIndicator",isHeaderInvoiceIndicator());
477          toString.append("isTaxInLine",isTaxInLine());
478          toString.append("isSpecialHandlingInLine",isSpecialHandlingInLine());
479          toString.append("isShippingInLine",isShippingInLine());
480          toString.append("isDiscountInLine",isDiscountInLine());
481          toString.append("isAccountingInLine",isAccountingInLine());
482          
483          toString.append("idReferenceCreator",getIdReferenceCreator());
484          toString.append("idReferenceDescription",getIdReferenceDescription());
485          toString.append("idReferenceDomain",getIdReferenceDomain());
486          toString.append("idReferenceIdentifier",getIdReferenceIdentifier());
487          
488          
489          toString.append("shippingDate",getShippingDateString());
490          toString.append("invoiceCustomerNumber",getInvoiceCustomerNumber());
491          toString.append("payInNumberOfDays",getPayInNumberOfDays());
492          toString.append("percentageRate",getPercentageRate());
493          
494          toString.append("invoicePartnerContacts",getInvoicePartnerContacts());
495          toString.append("invoiceShippingContacts",getInvoiceShippingContacts());
496          toString.append("extrinsics",getExtrinsics());
497          
498          return toString.toString();
499      }
500    
501    
502    
503    }
504