/*
* 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 Aug 25, 2004
*
*/
package org.kuali.kfs.module.purap.businessobject;
import java.math.BigDecimal;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import org.apache.commons.lang.StringUtils;
import org.apache.commons.lang.builder.ToStringBuilder;
import org.kuali.kfs.module.purap.PurapConstants;
import org.kuali.kfs.module.purap.document.ElectronicInvoiceRejectDocument;
import org.kuali.kfs.module.purap.util.PurApDateFormatUtils;
import org.kuali.kfs.module.purap.util.cxml.CxmlExtrinsic;
public class ElectronicInvoiceItem {
private static org.apache.log4j.Logger LOG = org.apache.log4j.Logger.getLogger(ElectronicInvoiceItem.class);
// this class is equiped to hold InvoiceDetailItem values as well as a few rudimentary
// InvoiceDetailServiceItem values
private String catalogNumber;
private String invoiceLineNumber;
private String quantity;
private String unitOfMeasure;
// UnitPrice is deprecated for InvoiceDetailServiceItem tags
private String unitPrice; // has money xml node
private String unitPriceCurrency;
private String subTotalAmount; // has money xml node
private String subTotalAmountCurrency;
private String invoiceLineSpecialHandlingAmount; // has money xml node
private String invoiceLineSpecialHandlingAmountCurrency;
private String invoiceLineShippingAmount; // has money xml node
private String invoiceLineShippingAmountCurrency;
private String taxAmount; // has money xml node (not all tax fields are stored as tax should never occur)
private String taxAmountCurrency;
private String taxDescription;
// invoiceLineGrossAmount should = subtotalAmount + taxAmount + invoiceLineSpecialHandlingAmount + invoiceLineShippingAmount
private String invoiceLineGrossAmount; // subtotal + taxes + shipping + special handling
private String invoiceLineGrossAmountCurrency;
private String invoiceLineDiscountAmount; // has money xml node
private String invoiceLineDiscountAmountCurrency;
private String invoiceLineDiscountPercentageRate;
// invoiceLineNetAmount should = invoiceLineGrossAmount - invoiceLineDiscountAmount
private String invoiceLineNetAmount; // has money xml node
private String invoiceLineNetAmountCurrency;
private String shippingDateString;
private Date shippingDate;
private List invoiceShippingContacts = new ArrayList();
private List comments = new ArrayList();
private List extrinsic = new ArrayList();
// following fields describe PO information
private String referenceLineNumber; // only match available for InvoiceDetailServiceItem values
private String referenceSerialNumber; // attribute of <InvoiceDetailItemReference> deprecated to be <SerialNumber> inside it
private List<String> referenceSerialNumbers = new ArrayList<String>(); // used only if above String field is null
private String referenceItemIDSupplierPartID;
private String referenceItemIDSupplierPartAuxID;
private String referenceDescription;
private String referenceManufacturerPartID;
private String referenceManufacturerName;
private String referenceCountryCode;
private String referenceCountryName;
private ElectronicInvoiceRejectDocument electronicInvoiceRejectDocument;
public ElectronicInvoiceItem() {
}
public Integer getReferenceLineNumberInteger() {
if (this.referenceLineNumber != null) {
return new Integer(Integer.parseInt(referenceLineNumber));
}
return null;
}
public String getInvoiceLineShippingDescription() {
return "";
}
public BigDecimal getInvoiceLineQuantityBigDecimal() {
if (StringUtils.isNotEmpty(quantity)) {
return new BigDecimal(this.quantity);
} else {
return null;
}
}
public BigDecimal getInvoiceLineUnitCostBigDecimal() {
BigDecimal unitprice = BigDecimal.ZERO;
if (StringUtils.isNotEmpty(unitPrice)) {
try {
unitprice = new BigDecimal(this.unitPrice);
} catch(NumberFormatException nfe) {
LOG.info("invalid unit price" + this.unitPrice) ;
}
}
return unitprice;
}
public BigDecimal getInvoiceLineSubTotalAmountBigDecimal() {
BigDecimal subTotalAmount = BigDecimal.ZERO;
if (StringUtils.isNotEmpty(this.subTotalAmount)) {
try {
subTotalAmount = new BigDecimal(this.subTotalAmount);
}
catch (NumberFormatException nfe) {
LOG.info("invalid sub Total Amount " + this.subTotalAmount) ;
}
}
return subTotalAmount;
}
public BigDecimal getInvoiceLineTaxAmountBigDecimal() {
if (StringUtils.isNotEmpty(taxAmount)) {
return new BigDecimal(this.taxAmount);
} else {
return BigDecimal.ZERO;
}
}
public BigDecimal getInvoiceLineSpecialHandlingAmountBigDecimal() {
if (StringUtils.isNotEmpty(invoiceLineSpecialHandlingAmount)) {
return new BigDecimal(this.invoiceLineSpecialHandlingAmount);
} else {
return BigDecimal.ZERO;
}
}
public BigDecimal getInvoiceLineShippingAmountBigDecimal() {
if (StringUtils.isNotEmpty(invoiceLineShippingAmount)) {
return new BigDecimal(this.invoiceLineShippingAmount);
} else {
return BigDecimal.ZERO;
}
}
public BigDecimal getInvoiceLineGrossAmountBigDecimal() {
if (StringUtils.isNotEmpty(invoiceLineGrossAmount)) {
return new BigDecimal(this.invoiceLineGrossAmount);
} else {
return BigDecimal.ZERO;
}
}
public BigDecimal getInvoiceLineDiscountAmountBigDecimal() {
if (StringUtils.isNotEmpty(invoiceLineDiscountAmount)) {
return new BigDecimal(this.invoiceLineDiscountAmount);
} else {
return BigDecimal.ZERO;
}
}
public BigDecimal getInvoiceLineNetAmountBigDecimal() {
if (StringUtils.isNotEmpty(invoiceLineNetAmount)) {
return new BigDecimal(this.invoiceLineNetAmount);
} else {
return BigDecimal.ZERO;
}
}
/**
* @return Returns the shippingDateString.
*/
public String getShippingDateString() {
return shippingDateString;
}
/**
* @param shippingDateString The shippingDateString to set.
*/
public void setShippingDateString(String shippingDateString) {
this.shippingDateString = shippingDateString;
if ( (shippingDateString != null) && (!("".equals(shippingDateString))) ) {
SimpleDateFormat sdf = PurApDateFormatUtils.getSimpleDateFormat(PurapConstants.NamedDateFormats.CXML_DATE_FORMAT);
try {
this.shippingDate = sdf.parse(shippingDateString);
} catch (ParseException e) {
// setting shipping date to null to identify problem
LOG.error("setShippingDateString() SimpleDateFormat parser error attempting to set invalid date string " + shippingDateString + " in ShippingDate field... setting date to null");
this.shippingDate = null;
}
} else {
this.shippingDate = null;
}
}
/**
* @return Returns the catalogNumber.
*/
public String getCatalogNumber() {
return catalogNumber;
}
/**
* @param catalogNumber The catalogNumber to set.
*/
public void setCatalogNumber(String catalogNumber) {
this.catalogNumber = catalogNumber;
}
/**
* @return Returns the comments.
*/
public List getComments() {
return comments;
}
/**
* @param comments The comments to set.
*/
public void setComments(List comments) {
this.comments = comments;
}
/**
* @return Returns the extrinsic.
*/
public List getExtrinsic() {
return extrinsic;
}
/**
* @param extrinsic The extrinsic to set.
*/
public void setExtrinsic(List extrinsic) {
this.extrinsic = extrinsic;
}
/**
* @return Returns the invoiceLineDiscountAmount.
*/
public String getInvoiceLineDiscountAmount() {
return invoiceLineDiscountAmount;
}
/**
* @param invoiceLineDiscountAmount The invoiceLineDiscountAmount to set.
*/
public void setInvoiceLineDiscountAmount(String invoiceLineDiscountAmount) {
this.invoiceLineDiscountAmount = invoiceLineDiscountAmount;
}
/**
* @return Returns the invoiceLineDiscountAmountCurrency.
*/
public String getInvoiceLineDiscountAmountCurrency() {
return invoiceLineDiscountAmountCurrency;
}
/**
* @param invoiceLineDiscountAmountCurrency The invoiceLineDiscountAmountCurrency to set.
*/
public void setInvoiceLineDiscountAmountCurrency(String invoiceLineDiscountAmountCurrency) {
this.invoiceLineDiscountAmountCurrency = invoiceLineDiscountAmountCurrency;
}
/**
* @return Returns the invoiceLineGrossAmount.
*/
public String getInvoiceLineGrossAmount() {
return invoiceLineGrossAmount;
}
/**
* @param invoiceLineGrossAmount The invoiceLineGrossAmount to set.
*/
public void setInvoiceLineGrossAmount(String invoiceLineGrossAmount) {
this.invoiceLineGrossAmount = invoiceLineGrossAmount;
}
/**
* @return Returns the invoiceLineGrossAmountCurrency.
*/
public String getInvoiceLineGrossAmountCurrency() {
return invoiceLineGrossAmountCurrency;
}
/**
* @param invoiceLineGrossAmountCurrency The invoiceLineGrossAmountCurrency to set.
*/
public void setInvoiceLineGrossAmountCurrency(String invoiceLineGrossAmountCurrency) {
this.invoiceLineGrossAmountCurrency = invoiceLineGrossAmountCurrency;
}
/**
* @return Returns the invoiceLineNetAmount.
*/
public String getInvoiceLineNetAmount() {
return invoiceLineNetAmount;
}
/**
* @param invoiceLineNetAmount The invoiceLineNetAmount to set.
*/
public void setInvoiceLineNetAmount(String invoiceLineNetAmount) {
this.invoiceLineNetAmount = invoiceLineNetAmount;
}
/**
* @return Returns the invoiceLineNetAmountCurrency.
*/
public String getInvoiceLineNetAmountCurrency() {
return invoiceLineNetAmountCurrency;
}
/**
* @param invoiceLineNetAmountCurrency The invoiceLineNetAmountCurrency to set.
*/
public void setInvoiceLineNetAmountCurrency(String invoiceLineNetAmountCurrency) {
this.invoiceLineNetAmountCurrency = invoiceLineNetAmountCurrency;
}
/**
* @return Returns the invoiceLineNumber.
*/
public String getInvoiceLineNumber() {
return invoiceLineNumber;
}
/**
* @param invoiceLineNumber The invoiceLineNumber to set.
*/
public void setInvoiceLineNumber(String invoiceLineNumber) {
this.invoiceLineNumber = invoiceLineNumber;
}
/**
* @return Returns the invoiceLineShippingAmount.
*/
public String getInvoiceLineShippingAmount() {
return invoiceLineShippingAmount;
}
/**
* @param invoiceLineShippingAmount The invoiceLineShippingAmount to set.
*/
public void setInvoiceLineShippingAmount(String invoiceLineShippingAmount) {
this.invoiceLineShippingAmount = invoiceLineShippingAmount;
}
/**
* @return Returns the invoiceLineShippingAmountCurrency.
*/
public String getInvoiceLineShippingAmountCurrency() {
return invoiceLineShippingAmountCurrency;
}
/**
* @param invoiceLineShippingAmountCurrency The invoiceLineShippingAmountCurrency to set.
*/
public void setInvoiceLineShippingAmountCurrency(String invoiceLineShippingAmountCurrency) {
this.invoiceLineShippingAmountCurrency = invoiceLineShippingAmountCurrency;
}
/**
* @return Returns the invoiceLineSpecialHandlingAmount.
*/
public String getInvoiceLineSpecialHandlingAmount() {
return invoiceLineSpecialHandlingAmount;
}
/**
* @param invoiceLineSpecialHandlingAmount The invoiceLineSpecialHandlingAmount to set.
*/
public void setInvoiceLineSpecialHandlingAmount(String invoiceLineSpecialHandlingAmount) {
this.invoiceLineSpecialHandlingAmount = invoiceLineSpecialHandlingAmount;
}
/**
* @return Returns the invoiceLineSpecialHandlingAmountCurrency.
*/
public String getInvoiceLineSpecialHandlingAmountCurrency() {
return invoiceLineSpecialHandlingAmountCurrency;
}
/**
* @param invoiceLineSpecialHandlingAmountCurrency The invoiceLineSpecialHandlingAmountCurrency to set.
*/
public void setInvoiceLineSpecialHandlingAmountCurrency(
String invoiceLineSpecialHandlingAmountCurrency) {
this.invoiceLineSpecialHandlingAmountCurrency = invoiceLineSpecialHandlingAmountCurrency;
}
/**
* @return Returns the invoiceShippingContacts.
*/
public List getInvoiceShippingContacts() {
return invoiceShippingContacts;
}
/**
* @param invoiceShippingContacts The invoiceShippingContacts to set.
*/
public void setInvoiceShippingContacts(List invoiceShippingContacts) {
this.invoiceShippingContacts = invoiceShippingContacts;
}
public void addInvoiceShippingContacts(ElectronicInvoiceContact contact) {
invoiceShippingContacts.add(contact);
}
/**
* @return Returns the quantity.
*/
public String getQuantity() {
return quantity;
}
/**
* @param quantity The quantity to set.
*/
public void setQuantity(String quantity) {
this.quantity = quantity;
}
/**
* @return Returns the referenceCountryCode.
*/
public String getReferenceCountryCode() {
return referenceCountryCode;
}
/**
* @param referenceCountryCode The referenceCountryCode to set.
*/
public void setReferenceCountryCode(String referenceCountryCode) {
this.referenceCountryCode = referenceCountryCode;
}
/**
* @return Returns the referenceCountryName.
*/
public String getReferenceCountryName() {
return referenceCountryName;
}
/**
* @param referenceCountryName The referenceCountryName to set.
*/
public void setReferenceCountryName(String referenceCountryName) {
this.referenceCountryName = referenceCountryName;
}
/**
* @return Returns the referenceDescription.
*/
public String getReferenceDescription() {
return referenceDescription;
}
/**
* @param referenceDescription The referenceDescription to set.
*/
public void setReferenceDescription(String referenceDescription) {
this.referenceDescription = referenceDescription;
}
/**
* @return Returns the referenceItemIDSupplierPartAuxID.
*/
public String getReferenceItemIDSupplierPartAuxID() {
return referenceItemIDSupplierPartAuxID;
}
/**
* @param referenceItemIDSupplierPartAuxID The referenceItemIDSupplierPartAuxID to set.
*/
public void setReferenceItemIDSupplierPartAuxID(String referenceItemIDSupplierPartAuxID) {
this.referenceItemIDSupplierPartAuxID = referenceItemIDSupplierPartAuxID;
}
/**
* @return Returns the referenceItemIDSupplierPartID.
*/
public String getReferenceItemIDSupplierPartID() {
return referenceItemIDSupplierPartID;
}
/**
* @param referenceItemIDSupplierPartID The referenceItemIDSupplierPartID to set.
*/
public void setReferenceItemIDSupplierPartID(String referenceItemIDSupplierPartID) {
this.referenceItemIDSupplierPartID = referenceItemIDSupplierPartID;
}
/**
* @return Returns the referenceLineNumber.
*/
public String getReferenceLineNumber() {
return referenceLineNumber;
}
/**
* @param referenceLineNumber The referenceLineNumber to set.
*/
public void setReferenceLineNumber(String referenceLineNumber) {
this.referenceLineNumber = referenceLineNumber;
}
/**
* @return Returns the referenceManufacturerName.
*/
public String getReferenceManufacturerName() {
return referenceManufacturerName;
}
/**
* @param referenceManufacturerName The referenceManufacturerName to set.
*/
public void setReferenceManufacturerName(String referenceManufacturerName) {
this.referenceManufacturerName = referenceManufacturerName;
}
/**
* @return Returns the referenceManufacturerPartID.
*/
public String getReferenceManufacturerPartID() {
return referenceManufacturerPartID;
}
/**
* @param referenceManufacturerPartID The referenceManufacturerPartID to set.
*/
public void setReferenceManufacturerPartID(String referenceManufacturerPartID) {
this.referenceManufacturerPartID = referenceManufacturerPartID;
}
/**
* @return Returns the referenceSerialNumber.
*/
public String getReferenceSerialNumber() {
return referenceSerialNumber;
}
/**
* @param referenceSerialNumber The referenceSerialNumber to set.
*/
public void setReferenceSerialNumber(String referenceSerialNumber) {
this.referenceSerialNumber = referenceSerialNumber;
}
/**
* @return Returns the referenceSerialNumbers.
*/
public List getReferenceSerialNumbers() {
return referenceSerialNumbers;
}
/**
* @param referenceSerialNumbers The referenceSerialNumbers to set.
*/
public void setReferenceSerialNumbers(List referenceSerialNumbers) {
this.referenceSerialNumbers = referenceSerialNumbers;
}
/**
* @return Returns the shippingDate.
*/
public Date getShippingDate() {
return shippingDate;
}
/**
* @param shippingDate The shippingDate to set.
*/
public void setShippingDate(Date shippingDate) {
this.shippingDate = shippingDate;
}
/**
* @return Returns the subtotalAmount.
*/
public String getSubTotalAmount() {
return subTotalAmount;
}
/**
* @param subtotalAmount The subtotalAmount to set.
*/
public void setSubTotalAmount(String subTotalAmount) {
this.subTotalAmount = subTotalAmount;
}
/**
* @return Returns the subtotalAmountCurrency.
*/
public String getSubTotalAmountCurrency() {
return subTotalAmountCurrency;
}
/**
* @param subtotalAmountCurrency The subtotalAmountCurrency to set.
*/
public void setSubTotalAmountCurrency(String subTotalAmountCurrency) {
this.subTotalAmountCurrency = subTotalAmountCurrency;
}
/**
* @return Returns the taxAmount.
*/
public String getTaxAmount() {
return taxAmount;
}
/**
* @param taxAmount The taxAmount to set.
*/
public void setTaxAmount(String taxAmount) {
this.taxAmount = taxAmount;
}
/**
* @return Returns the taxAmountCurrency.
*/
public String getTaxAmountCurrency() {
return taxAmountCurrency;
}
/**
* @param taxAmountCurrency The taxAmountCurrency to set.
*/
public void setTaxAmountCurrency(String taxAmountCurrency) {
this.taxAmountCurrency = taxAmountCurrency;
}
/**
* @return Returns the taxDescription.
*/
public String getTaxDescription() {
return taxDescription;
}
/**
* @param taxDescription The taxDescription to set.
*/
public void setTaxDescription(String taxDescription) {
this.taxDescription = taxDescription;
}
/**
* @return Returns the unitOfMeasure.
*/
public String getUnitOfMeasure() {
return unitOfMeasure;
}
/**
* @param unitOfMeasure The unitOfMeasure to set.
*/
public void setUnitOfMeasure(String unitOfMeasure) {
this.unitOfMeasure = unitOfMeasure;
}
/**
* @return Returns the unitPrice.
*/
public String getUnitPrice() {
return unitPrice;
}
/**
* @param unitPrice The unitPrice to set.
*/
public void setUnitPrice(String unitPrice) {
this.unitPrice = unitPrice;
}
/**
* @return Returns the unitPriceCurrency.
*/
public String getUnitPriceCurrency() {
return unitPriceCurrency;
}
/**
* @param unitPriceCurrency The unitPriceCurrency to set.
*/
public void setUnitPriceCurrency(String unitPriceCurrency) {
this.unitPriceCurrency = unitPriceCurrency;
}
public ElectronicInvoiceRejectDocument getElectronicInvoiceRejectDocument() {
return electronicInvoiceRejectDocument;
}
public void setElectronicInvoiceRejectDocument(ElectronicInvoiceRejectDocument electronicInvoiceRejectDocument) {
this.electronicInvoiceRejectDocument = electronicInvoiceRejectDocument;
}
public void addReferenceSerialNumber(String referenceSerialNumber) {
this.referenceSerialNumbers.add(referenceSerialNumber);
}
public String[] getReferenceSerialNumbersAsArray() {
if (referenceSerialNumbers.size() > 0){
String[] serialNumbers = new String[referenceSerialNumbers.size()];
referenceSerialNumbers.toArray(serialNumbers);
return serialNumbers;
}
return null;
}
public void addExtrinsic(CxmlExtrinsic extrinsic) {
this.extrinsic.add(extrinsic);
}
public CxmlExtrinsic[] getExtrinsicAsArray() {
if (extrinsic.size() > 0){
CxmlExtrinsic[] extrinsics = new CxmlExtrinsic[extrinsic.size()];
extrinsic.toArray(extrinsics);
return extrinsics;
}
return null;
}
public void addComments(String comment){
this.comments.add(comment);
}
public String getInvoiceLineDiscountPercentageRate() {
return invoiceLineDiscountPercentageRate;
}
public void setInvoiceLineDiscountPercentageRate(String invoiceLineDiscountPercentageRate) {
this.invoiceLineDiscountPercentageRate = invoiceLineDiscountPercentageRate;
}
public String toString(){
ToStringBuilder toString = new ToStringBuilder(this);
toString.append("invoiceLineNumber",getInvoiceLineNumber());
toString.append("quantity",getQuantity());
toString.append("catalogNumber",getCatalogNumber());
toString.append("unitOfMeasure",getUnitOfMeasure());
toString.append("unitPrice",getUnitPrice());
toString.append("unitPriceCurrency",getUnitPriceCurrency());
toString.append("subTotalAmount",getSubTotalAmount());
toString.append("subTotalAmountCurrency",getSubTotalAmountCurrency());
toString.append("invoiceLineSpecialHandlingAmount",getInvoiceLineSpecialHandlingAmount());
toString.append("invoiceLineSpecialHandlingAmountCurrency",getInvoiceLineSpecialHandlingAmountCurrency());
toString.append("invoiceLineShippingAmount",getInvoiceLineShippingAmount());
toString.append("invoiceLineShippingAmountCurrency",getInvoiceLineShippingAmountCurrency());
toString.append("taxAmount",getTaxAmount());
toString.append("taxAmountCurrency",getTaxAmountCurrency());
toString.append("taxDescription",getTaxDescription());
toString.append("invoiceLineGrossAmount",getInvoiceLineGrossAmount());
toString.append("invoiceLineGrossAmountCurrency",getInvoiceLineGrossAmountCurrency());
toString.append("invoiceLineDiscountAmount",getInvoiceLineDiscountAmount());
toString.append("invoiceLineDiscountAmountCurrency",getInvoiceLineDiscountAmountCurrency());
toString.append("invoiceLineNetAmount",getInvoiceLineNetAmount());
toString.append("invoiceLineNetAmountCurrency",getInvoiceLineNetAmountCurrency());
toString.append("shippingDateString",getShippingDateString());
toString.append("referenceLineNumber",getReferenceLineNumber());
toString.append("referenceSerialNumber",getReferenceSerialNumber());
toString.append("referenceSerialNumbersList",getReferenceSerialNumbers());
toString.append("referenceItemIDSupplierPartID",getReferenceItemIDSupplierPartID());
toString.append("referenceItemIDSupplierPartAuxID",getReferenceItemIDSupplierPartAuxID());
toString.append("referenceDescription",getReferenceDescription());
toString.append("referenceManufacturerPartID",getReferenceManufacturerPartID());
toString.append("referenceManufacturerName",getReferenceManufacturerName());
toString.append("referenceCountryCode",getReferenceCountryCode());
toString.append("referenceCountryName",getReferenceCountryName());
toString.append("invoiceShippingContacts",getInvoiceShippingContacts());
toString.append("comments",getComments());
toString.append("extrinsic",getExtrinsic());
return toString.toString();
}
}