org.kuali.kfs.module.purap.businessobject.ElectronicInvoiceOrder.java Source code

Java tutorial

Introduction

Here is the source code for org.kuali.kfs.module.purap.businessobject.ElectronicInvoiceOrder.java

Source

/*
 * The Kuali Financial System, a comprehensive financial management system for higher education.
 * 
 * Copyright 2005-2014 The Kuali Foundation
 * 
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU Affero General Public License as
 * published by the Free Software Foundation, either version 3 of the
 * License, or (at your option) any later version.
 * 
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU Affero General Public License for more details.
 * 
 * You should have received a copy of the GNU Affero General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */
/*
 * Created on Feb 13, 2006
 *
 */
package org.kuali.kfs.module.purap.businessobject;

import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.Date;
import java.util.Iterator;
import java.util.List;

import org.apache.commons.lang.builder.ToStringBuilder;
import org.kuali.kfs.module.purap.PurapConstants;
import org.kuali.kfs.module.purap.util.ElectronicInvoiceUtils;

public class ElectronicInvoiceOrder {
    private static org.apache.log4j.Logger LOG = org.apache.log4j.Logger.getLogger(ElectronicInvoiceOrder.class);

    public static boolean INVOICE_ORDER_REJECTED = true;
    public static boolean INVOICE_ORDER_NOT_REJECTED = false;

    // the following fields come from the <InvoiceDetailOrderInfo> tag
    private String orderReferenceOrderID;
    private String orderReferenceDocumentRefPayloadID;
    private String orderReferenceDocumentRef;
    private String masterAgreementReferenceID;
    private Date masterAgreementReferenceDate;
    private String masterAgreementReferenceDateString;
    private String masterAgreementIDInfoID;
    private Date masterAgreementIDInfoDate;
    private String masterAgreementIDInfoDateString;
    private String orderIDInfoID;
    private Date orderIDInfoDate;
    private String orderIDInfoDateString;
    private String supplierOrderInfoID;

    private String invoicePurchaseOrderID;
    private String orderReferenceOrderDateString;
    private Integer purchaseOrderID = null;
    private String purchaseOrderCampusCode;

    private boolean rejected = INVOICE_ORDER_NOT_REJECTED;
    private List orderRejectReasons = new ArrayList();

    private List invoiceItems = new ArrayList();

    public ElectronicInvoiceOrder() {
        super();
    }

    public ElectronicInvoiceItem getElectronicInvoiceItemByPOLineNumber(Integer poLineNumber) {
        for (Iterator iter = this.invoiceItems.iterator(); iter.hasNext();) {
            ElectronicInvoiceItem eii = (ElectronicInvoiceItem) iter.next();
            if ((poLineNumber.compareTo(eii.getReferenceLineNumberInteger())) == 0) {
                return eii;
            }
        }
        return null;
    }

    /**
     * This method takes in a roleID string and an addressName (constants from mapping file)
     * and returns a valid ElectronicInvoicePostalAddress or null if not found.  If the addressName string
     * is null then the roleID is used to find the first available
     * 
     * @param roleID Cxml role id attribute value
     * @param addressName Cxml name attribute of postaladdress tag
     * @return CxmlPostal Address relating to given parameters
     */
    public ElectronicInvoicePostalAddress getCxmlPostalAddressByRoleID(String roleID, String addressName) {
        if (roleID != null) {
            ElectronicInvoiceContact contact = this.getCxmlContactByRoleID(roleID);
            if (contact != null) {
                for (Iterator iterator = contact.getPostalAddresses().iterator(); iterator.hasNext();) {
                    ElectronicInvoicePostalAddress cpa = (ElectronicInvoicePostalAddress) iterator.next();
                    if (addressName == null) {
                        return cpa;
                    } else {
                        if (addressName.equalsIgnoreCase(cpa.getName())) {
                            return cpa;
                        }
                    }
                }
            }
        }
        return null;
    }

    public ElectronicInvoiceContact getCxmlContactByRoleID(String roleID) {
        if (roleID != null) {
            for (Iterator itemIter = this.invoiceItems.iterator(); itemIter.hasNext();) {
                ElectronicInvoiceItem eii = (ElectronicInvoiceItem) itemIter.next();
                for (Iterator iter = eii.getInvoiceShippingContacts().iterator(); iter.hasNext();) {
                    ElectronicInvoiceContact contact = (ElectronicInvoiceContact) iter.next();
                    if (roleID.equalsIgnoreCase(contact.getRole())) {
                        return contact;
                    }
                }
            }
        }
        return null;
    }

    /**
     * This method returns the first shipping date found in the list of items.  This 
     * is called if shipping information is in line. Since system only allows for one 
     * shipping date per invoice-order we take the first date we find
     * 
     * @return  Date defining first shipping date found or null if none are found
     */
    public Date getInvoiceShippingDate() {
        for (Iterator iter = this.invoiceItems.iterator(); iter.hasNext();) {
            ElectronicInvoiceItem eii = (ElectronicInvoiceItem) iter.next();
            Date testDate = eii.getShippingDate();
            if (testDate != null) {
                return testDate;
            }
        }
        return null;
    }

    /**
     * This method returns the first shipping date string found in the list of items.  This 
     * is called if shipping information is in line. Since system only allows for one shipping 
     * date per invoice-order we take the first date string we find
     * 
     * @return  Date defining first shipping date found or null if none are found
     */
    public String getInvoiceShippingDateString() {
        for (Iterator iter = this.invoiceItems.iterator(); iter.hasNext();) {
            ElectronicInvoiceItem eii = (ElectronicInvoiceItem) iter.next();
            String testDateString = eii.getShippingDateString();
            if ((testDateString != null) && (!("".equals(testDateString)))) {
                return testDateString;
            }
        }
        return null;
    }

    public String getInvoiceTaxDescription() {
        BigDecimal total = BigDecimal.ZERO;
        for (Iterator iter = this.invoiceItems.iterator(); iter.hasNext();) {
            ElectronicInvoiceItem eii = (ElectronicInvoiceItem) iter.next();
            BigDecimal taxAmount = eii.getInvoiceLineTaxAmountBigDecimal();
            if ((taxAmount != null) && (BigDecimal.ZERO.compareTo(taxAmount) != 0)) {
                return eii.getTaxDescription();
            }
        }
        return null;
    }

    public String getInvoiceShippingDescription() {
        BigDecimal total = BigDecimal.ZERO;
        for (Iterator iter = this.invoiceItems.iterator(); iter.hasNext();) {
            ElectronicInvoiceItem eii = (ElectronicInvoiceItem) iter.next();
            BigDecimal shippingAmount = eii.getInvoiceLineShippingAmountBigDecimal();
            if ((shippingAmount != null) && (BigDecimal.ZERO.compareTo(shippingAmount) != 0)) {
                return PurapConstants.ElectronicInvoice.DEFAULT_SHIPPING_DESCRIPTION;
            }
        }
        return null;
    }

    public String getInvoiceSpecialHandlingDescription() {
        BigDecimal total = BigDecimal.ZERO;
        for (Iterator iter = this.invoiceItems.iterator(); iter.hasNext();) {
            ElectronicInvoiceItem eii = (ElectronicInvoiceItem) iter.next();
            BigDecimal specialHandlingAmount = eii.getInvoiceLineSpecialHandlingAmountBigDecimal();
            if ((specialHandlingAmount != null) && (BigDecimal.ZERO.compareTo(specialHandlingAmount) != 0)) {
                return PurapConstants.ElectronicInvoice.DEFAULT_SPECIAL_HANDLING_DESCRIPTION;
            }
        }
        return null;
    }

    public BigDecimal getInvoiceSubTotalAmount() {
        BigDecimal total = BigDecimal.ZERO;
        for (Iterator iter = this.invoiceItems.iterator(); iter.hasNext();) {
            ElectronicInvoiceItem eii = (ElectronicInvoiceItem) iter.next();
            total = total.add(eii.getInvoiceLineSubTotalAmountBigDecimal());
        }
        return total;
    }

    public BigDecimal getInvoiceTaxAmount() {
        BigDecimal total = BigDecimal.ZERO;
        for (Iterator iter = this.invoiceItems.iterator(); iter.hasNext();) {
            ElectronicInvoiceItem eii = (ElectronicInvoiceItem) iter.next();
            total = total.add(eii.getInvoiceLineTaxAmountBigDecimal());
        }
        return total;
    }

    public BigDecimal getInvoiceSpecialHandlingAmount() {
        BigDecimal total = BigDecimal.ZERO;
        for (Iterator iter = this.invoiceItems.iterator(); iter.hasNext();) {
            ElectronicInvoiceItem eii = (ElectronicInvoiceItem) iter.next();
            total = total.add(eii.getInvoiceLineSpecialHandlingAmountBigDecimal());
        }
        return total;
    }

    public BigDecimal getInvoiceShippingAmount() {
        BigDecimal total = BigDecimal.ZERO;
        for (Iterator iter = this.invoiceItems.iterator(); iter.hasNext();) {
            ElectronicInvoiceItem eii = (ElectronicInvoiceItem) iter.next();
            total = total.add(eii.getInvoiceLineShippingAmountBigDecimal());
        }
        return total;
    }

    public BigDecimal getInvoiceGrossAmount() {
        BigDecimal total = BigDecimal.ZERO;
        for (Iterator iter = this.invoiceItems.iterator(); iter.hasNext();) {
            ElectronicInvoiceItem eii = (ElectronicInvoiceItem) iter.next();
            total = total.add(eii.getInvoiceLineGrossAmountBigDecimal());
        }
        return total;
    }

    public BigDecimal getInvoiceDiscountAmount() {
        BigDecimal total = BigDecimal.ZERO;
        for (Iterator iter = this.invoiceItems.iterator(); iter.hasNext();) {
            ElectronicInvoiceItem eii = (ElectronicInvoiceItem) iter.next();
            total = total.add(eii.getInvoiceLineDiscountAmountBigDecimal());
        }
        return total;
    }

    public BigDecimal getInvoiceNetAmount() {
        BigDecimal total = BigDecimal.ZERO;
        for (Iterator iter = this.invoiceItems.iterator(); iter.hasNext();) {
            ElectronicInvoiceItem eii = (ElectronicInvoiceItem) iter.next();
            total = total.add(eii.getInvoiceLineNetAmountBigDecimal());
        }
        return total;
    }

    public void addRejectReasonToList(ElectronicInvoiceRejectReason reason) {
        this.orderRejectReasons.add(reason);
    }

    /**
     * Altered for special circumstances
     * 
     * @param masterAgreementIDInfoDateString The masterAgreementIDInfoDateString to set.
     */
    public void setMasterAgreementIDInfoDateString(String masterAgreementIDInfoDateString) {
        this.masterAgreementIDInfoDateString = masterAgreementIDInfoDateString;
        /*if ( (masterAgreementIDInfoDateString != null) && (!("".equals(masterAgreementIDInfoDateString))) ) {
          SimpleDateFormat sdf = new SimpleDateFormat(PurapConstants.ElectronicInvoice.CXML_DATE_FORMAT, Locale.US);
          try {
            this.masterAgreementIDInfoDate = sdf.parse(masterAgreementIDInfoDateString);
          } catch (ParseException e) {
            // setting invoice date to null to identify problem
            LOG.error("setInvoiceDateString() SimpleDateFormat parser error attempting to set invalid date string " + masterAgreementIDInfoDateString + " in masterAgreementIDInfoDate field... setting date to null");
            this.masterAgreementIDInfoDate = null;
          }
        } else {
          this.masterAgreementIDInfoDate = null;
        }*/
        setMasterAgreementIDInfoDate(ElectronicInvoiceUtils.getDate(masterAgreementIDInfoDateString));
    }

    /**
     * Altered for special circumstances
     * 
     * @param masterAgreementReferenceDateString The masterAgreementReferenceDateString to set.
     */
    public void setMasterAgreementReferenceDateString(String masterAgreementReferenceDateString) {
        this.masterAgreementReferenceDateString = masterAgreementReferenceDateString;
        /*if ( (masterAgreementReferenceDateString != null) && (!("".equals(masterAgreementReferenceDateString))) ) {
          SimpleDateFormat sdf = new SimpleDateFormat(PurapConstants.ElectronicInvoice.CXML_DATE_FORMAT, Locale.US);
          try {
            this.masterAgreementReferenceDate = sdf.parse(masterAgreementReferenceDateString);
          } catch (ParseException e) {
            // setting invoice date to null to identify problem
            LOG.error("setInvoiceDateString() SimpleDateFormat parser error attempting to set invalid date string " + masterAgreementReferenceDateString + " in masterAgreementReferenceDate field... setting date to null");
            this.masterAgreementReferenceDate = null;
          }
        } else {
          this.masterAgreementIDInfoDate = null;
        }*/
        setMasterAgreementIDInfoDate(ElectronicInvoiceUtils.getDate(masterAgreementReferenceDateString));
    }

    /**
     * Altered for special circumstances
     * 
     * @param orderIDInfoDateString The orderIDInfoDateString to set.
     */
    public void setOrderIDInfoDateString(String orderIDInfoDateString) {
        this.orderIDInfoDateString = orderIDInfoDateString;
        /*if ( (orderIDInfoDateString != null) && (!("".equals(orderIDInfoDateString))) ) {
          SimpleDateFormat sdf = new SimpleDateFormat(PurapConstants.ElectronicInvoice.CXML_DATE_FORMAT, Locale.US);
          try {
            this.orderIDInfoDate = sdf.parse(orderIDInfoDateString);
          } catch (ParseException e) {
            // setting invoice date to null to identify problem
            LOG.error("setInvoiceDateString() SimpleDateFormat parser error attempting to set invalid date string " + orderIDInfoDateString + " in orderIDInfoDate field... setting date to null");
            this.orderIDInfoDate = null;
          }
        } else {
          this.orderIDInfoDate = null;
        }*/
        setOrderIDInfoDate(ElectronicInvoiceUtils.getDate(orderIDInfoDateString));
    }

    /**
     * @return Returns the invoiceItems.
     */
    public List<ElectronicInvoiceItem> getInvoiceItems() {
        return invoiceItems;
    }

    /**
     * @param invoiceItems The invoiceItems to set.
     */
    public void setInvoiceItems(List<ElectronicInvoiceItem> invoiceItems) {
        this.invoiceItems = invoiceItems;
    }

    /**
     * @return Returns the invoicePurchaseOrderID.
     */
    public String getInvoicePurchaseOrderID() {
        return invoicePurchaseOrderID;
    }

    /**
     * @param invoicePurchaseOrderID The invoicePurchaseOrderID to set.
     */
    public void setInvoicePurchaseOrderID(String invoicePurchaseOrderID) {
        this.invoicePurchaseOrderID = invoicePurchaseOrderID;
    }

    /**
     * @return Returns the masterAgreementIDInfoDate.
     */
    public Date getMasterAgreementIDInfoDate() {
        return masterAgreementIDInfoDate;
    }

    /**
     * @param masterAgreementIDInfoDate The masterAgreementIDInfoDate to set.
     */
    public void setMasterAgreementIDInfoDate(Date masterAgreementIDInfoDate) {
        this.masterAgreementIDInfoDate = masterAgreementIDInfoDate;
    }

    /**
     * @return Returns the masterAgreementIDInfoID.
     */
    public String getMasterAgreementIDInfoID() {
        return masterAgreementIDInfoID;
    }

    /**
     * @param masterAgreementIDInfoID The masterAgreementIDInfoID to set.
     */
    public void setMasterAgreementIDInfoID(String masterAgreementIDInfoID) {
        this.masterAgreementIDInfoID = masterAgreementIDInfoID;
    }

    /**
     * @return Returns the masterAgreementReferenceDate.
     */
    public Date getMasterAgreementReferenceDate() {
        return masterAgreementReferenceDate;
    }

    /**
     * @param masterAgreementReferenceDate The masterAgreementReferenceDate to set.
     */
    public void setMasterAgreementReferenceDate(Date masterAgreementReferenceDate) {
        this.masterAgreementReferenceDate = masterAgreementReferenceDate;
    }

    /**
     * @return Returns the masterAgreementReferenceID.
     */
    public String getMasterAgreementReferenceID() {
        return masterAgreementReferenceID;
    }

    /**
     * @param masterAgreementReferenceID The masterAgreementReferenceID to set.
     */
    public void setMasterAgreementReferenceID(String masterAgreementReferenceID) {
        this.masterAgreementReferenceID = masterAgreementReferenceID;
    }

    /**
     * @return Returns the orderIDInfoDate.
     */
    public Date getOrderIDInfoDate() {
        return orderIDInfoDate;
    }

    /**
     * @param orderIDInfoDate The orderIDInfoDate to set.
     */
    public void setOrderIDInfoDate(Date orderIDInfoDate) {
        this.orderIDInfoDate = orderIDInfoDate;
    }

    /**
     * @return Returns the orderIDInfoID.
     */
    public String getOrderIDInfoID() {
        return orderIDInfoID;
    }

    /**
     * @param orderIDInfoID The orderIDInfoID to set.
     */
    public void setOrderIDInfoID(String orderIDInfoID) {
        this.orderIDInfoID = orderIDInfoID;
    }

    /**
     * @return Returns the orderReferenceDocumentRef.
     */
    public String getOrderReferenceDocumentRef() {
        return orderReferenceDocumentRef;
    }

    /**
     * @param orderReferenceDocumentRef The orderReferenceDocumentRef to set.
     */
    public void setOrderReferenceDocumentRef(String orderReferenceDocumentRef) {
        this.orderReferenceDocumentRef = orderReferenceDocumentRef;
    }

    /**
     * @return Returns the orderReferenceDocumentRefPayloadID.
     */
    public String getOrderReferenceDocumentRefPayloadID() {
        return orderReferenceDocumentRefPayloadID;
    }

    /**
     * @param orderReferenceDocumentRefPayloadID The orderReferenceDocumentRefPayloadID to set.
     */
    public void setOrderReferenceDocumentRefPayloadID(String orderReferenceDocumentRefPayloadID) {
        this.orderReferenceDocumentRefPayloadID = orderReferenceDocumentRefPayloadID;
    }

    /**
     * @return Returns the orderReferenceOrderID.
     */
    public String getOrderReferenceOrderID() {
        return orderReferenceOrderID;
    }

    /**
     * @param orderReferenceOrderID The orderReferenceOrderID to set.
     */
    public void setOrderReferenceOrderID(String orderReferenceOrderID) {
        this.orderReferenceOrderID = orderReferenceOrderID;
    }

    /**
     * @return Returns the orderRejectReasons.
     */
    public List<ElectronicInvoiceRejectReason> getOrderRejectReasons() {
        return orderRejectReasons;
    }

    /**
     * @param orderRejectReasons The orderRejectReasons to set.
     */
    public void setOrderRejectReasons(List<ElectronicInvoiceRejectReason> orderRejectReasons) {
        this.orderRejectReasons = orderRejectReasons;
    }

    /**
     * @return Returns the purchaseOrderCampusCode.
     */
    public String getPurchaseOrderCampusCode() {
        return purchaseOrderCampusCode;
    }

    /**
     * @param purchaseOrderCampusCode The purchaseOrderCampusCode to set.
     */
    public void setPurchaseOrderCampusCode(String purchaseOrderCampusCode) {
        this.purchaseOrderCampusCode = purchaseOrderCampusCode;
    }

    /**
     * @return Returns the purchaseOrderID.
     */
    public Integer getPurchaseOrderID() {
        return purchaseOrderID;
    }

    /**
     * @param purchaseOrderID The purchaseOrderID to set.
     */
    public void setPurchaseOrderID(Integer purchaseOrderID) {
        this.purchaseOrderID = purchaseOrderID;
    }

    /**
     * @return Returns the rejected.
     */
    public boolean isRejected() {
        return rejected;
    }

    /**
     * @param rejected The rejected to set.
     */
    public void setRejected(boolean rejected) {
        this.rejected = rejected;
    }

    /**
     * @return Returns the supplierOrderInfoID.
     */
    public String getSupplierOrderInfoID() {
        return supplierOrderInfoID;
    }

    /**
     * @param supplierOrderInfoID The supplierOrderInfoID to set.
     */
    public void setSupplierOrderInfoID(String supplierOrderInfoID) {
        this.supplierOrderInfoID = supplierOrderInfoID;
    }

    /**
     * @return Returns the masterAgreementIDInfoDateString.
     */
    public String getMasterAgreementIDInfoDateString() {
        return masterAgreementIDInfoDateString;
    }

    /**
     * @return Returns the masterAgreementReferenceDateString.
     */
    public String getMasterAgreementReferenceDateString() {
        return masterAgreementReferenceDateString;
    }

    /**
     * @return Returns the orderIDInfoDateString.
     */
    public String getOrderIDInfoDateString() {
        return orderIDInfoDateString;
    }

    public void addInvoiceItem(ElectronicInvoiceItem electronicInvoiceItem) {
        invoiceItems.add(electronicInvoiceItem);
        /**
         * TODO: This is not the right place for sorting... Have to move this to getter method with some flag to avoid
         * this sorting whenever the getter is called
         */
        Collections.sort(invoiceItems, new Comparator() {
            public int compare(Object o1, Object o2) {
                return (((ElectronicInvoiceItem) o1).getReferenceLineNumberInteger())
                        .compareTo(((ElectronicInvoiceItem) o2).getReferenceLineNumberInteger());
            }
        });
    }

    public ElectronicInvoiceItem[] getInvoiceItemsAsArray() {
        if (invoiceItems.size() > 0) {
            ElectronicInvoiceItem[] tempItems = new ElectronicInvoiceItem[invoiceItems.size()];
            invoiceItems.toArray(tempItems);
            return tempItems;
        }
        return null;
    }

    public String getOrderReferenceOrderDateString() {
        return orderReferenceOrderDateString;
    }

    public void setOrderReferenceOrderDateString(String orderReferenceOrderDateString) {
        this.orderReferenceOrderDateString = orderReferenceOrderDateString;
    }

    public String toString() {

        ToStringBuilder toString = new ToStringBuilder(this);

        toString.append("orderReferenceOrderID", getOrderReferenceOrderID());
        toString.append("orderReferenceOrderDate", getOrderReferenceOrderDateString());
        toString.append("orderReferenceDocumentRefPayloadID", getOrderReferenceDocumentRefPayloadID());
        toString.append("orderReferenceDocumentRef", getOrderReferenceDocumentRef());
        toString.append("masterAgreementReferenceID", getMasterAgreementReferenceID());
        toString.append("masterAgreementReferenceDateString", getMasterAgreementReferenceDateString());
        toString.append("masterAgreementIDInfoID", getMasterAgreementIDInfoID());
        toString.append("masterAgreementIDInfoDateString", getMasterAgreementIDInfoDateString());
        toString.append("orderIDInfoID", getOrderIDInfoID());
        toString.append("orderIDInfoDateString", getOrderIDInfoDateString());
        toString.append("supplierOrderInfoID", getSupplierOrderInfoID());
        toString.append("invoiceItems", getInvoiceItems());

        return toString.toString();

    }

}