PackingListItem.java
package com.tradecloud.domain.container;
import com.tradecloud.common.base.PersistenceBase;
import com.tradecloud.domain.common.Currency;
import com.tradecloud.domain.item.AdditionalItem;
import com.tradecloud.domain.item.AdditionalLineItemType;
import lombok.Getter;
import lombok.Setter;
import org.apache.commons.lang.builder.EqualsBuilder;
import org.apache.commons.lang.builder.HashCodeBuilder;
import org.hibernate.annotations.ForeignKey;
import javax.persistence.*;
import javax.validation.constraints.NotNull;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlRootElement;
import java.math.BigDecimal;
import java.util.Date;
@Entity
@Getter
@Setter
@Table(name = "packinglistitem")
@NamedQueries({@NamedQuery(name = "packingListItem.findByOrderReferenceAndItemReferenceAndOrganisation",
query = """
from PackingListItem pli
where pli.packingListOrder.orderReference = :orderReference
and pli.reference = :itemReference
and organisationalUnit=:organisationalUnit
and (
pli.lineNumber = :lineNumber
or pli.lineNumber is null
)
""")})
@Access(AccessType.FIELD)
@XmlAccessorType(XmlAccessType.FIELD)
@XmlRootElement(name = "PackingListLineItem")
public class PackingListItem extends PersistenceBase implements AdditionalItem, Comparable<PackingListItem> {
private static final long serialVersionUID = 1L;
/**
* The bidirectional link back to the parent {@link PackingListOrder}.
*/
@ManyToOne(optional = false)
@ForeignKey(name = "fk_packinglistorder")
private PackingListOrder packingListOrder;
@NotNull
@XmlAttribute(required = true)
private String reference;
@NotNull
@XmlAttribute(required = true)
private String supplierItemReference;
@NotNull
@XmlAttribute(required = true)
private String description;
@XmlAttribute
private BigDecimal originalUnitQuantity;
@XmlAttribute
private BigDecimal unitQuantity;
private BigDecimal unitPrice;
private BigDecimal supplyCost;
@XmlAttribute
private BigDecimal numPackages;
@XmlAttribute
private BigDecimal unitsPerPackage;
@XmlAttribute
private BigDecimal unitVolume;
private BigDecimal initialUnitVolume;
@XmlAttribute
private BigDecimal totalVolume = BigDecimal.ZERO;
@XmlAttribute
private BigDecimal unitWeight;
private BigDecimal initialUnitWeight;
@XmlAttribute
private BigDecimal totalWeight = BigDecimal.ZERO;
@Basic(optional = false)
private String tariffHeading;
@Basic(optional = false)
private String barcode;
private Integer lineNumber;
/**
* If this is true we know the original line item was added at actual level, otherwise it was an estimate level line item.
*/
@Basic(optional = false)
private boolean additional;
@ManyToOne
@NotNull(message = "Currency is a required field")
protected Currency currency;
@XmlAttribute
@Temporal(TemporalType.TIMESTAMP)
private Date addedToOrderDate;
@NotNull(message = "organisationalUnit is a required field")
private String organisationalUnit;
private boolean overriddenVolume;
private boolean overriddenWeight;
private boolean overrideTotalVolume;
private boolean overrideTotalWeight;
public PackingListOrder getPackingListOrder() {
return packingListOrder;
}
public void setPackingListOrder(PackingListOrder packingListOrder) {
this.packingListOrder = packingListOrder;
}
public String getReference() {
return reference;
}
public void setReference(String reference) {
this.reference = reference;
}
public String getSupplierItemReference() {
return supplierItemReference;
}
public void setSupplierItemReference(String supplierItemReference) {
this.supplierItemReference = supplierItemReference;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
public BigDecimal getOriginalUnitQuantity() {
return originalUnitQuantity;
}
public void setOriginalUnitQuantity(BigDecimal originalUnitQuantity) {
this.originalUnitQuantity = originalUnitQuantity;
}
public BigDecimal getUnitQuantity() {
return unitQuantity;
}
public void setUnitQuantity(BigDecimal unitQuantity) {
this.unitQuantity = unitQuantity;
}
public BigDecimal getNumPackages() {
return numPackages;
}
public void setNumPackages(BigDecimal numPackages) {
this.numPackages = numPackages;
}
public BigDecimal getUnitsPerPackage() {
return unitsPerPackage;
}
public void setUnitsPerPackage(BigDecimal unitsPerPackage) {
this.unitsPerPackage = unitsPerPackage;
}
public BigDecimal getUnitVolume() {
return unitVolume;
}
public void setUnitVolume(BigDecimal unitVolume) {
this.unitVolume = unitVolume;
}
public BigDecimal getTotalVolume() {
return totalVolume;
}
public void setTotalVolume(BigDecimal totalVolume) {
this.totalVolume = totalVolume;
}
public BigDecimal getUnitWeight() {
return unitWeight;
}
public void setUnitWeight(BigDecimal unitWeight) {
this.unitWeight = unitWeight;
}
public BigDecimal getTotalWeight() {
return totalWeight;
}
public void setTotalWeight(BigDecimal totalWeight) {
this.totalWeight = totalWeight;
}
public boolean isAdditional() {
return additional;
}
public void setAdditional(boolean additional) {
this.additional = additional;
}
public String getTariffHeading() {
return tariffHeading;
}
public void setTariffHeading(String tariffHeading) {
this.tariffHeading = tariffHeading;
}
public String getBarcode() {
return barcode;
}
public void setBarcode(String barcode) {
this.barcode = barcode;
}
@Override
public boolean isSample() {
return additional && AdditionalLineItemType.SAMPLE.getName().equals(reference);
}
@Override
public boolean isSparePart() {
return additional && AdditionalLineItemType.SPARE_PART.getName().equals(reference);
}
public BigDecimal getUnitPrice() {
return unitPrice;
}
public void setUnitPrice(BigDecimal unitPrice) {
this.unitPrice = unitPrice;
}
public BigDecimal getSupplyCost() {
return supplyCost;
}
public void setSupplyCost(BigDecimal supplyCost) {
this.supplyCost = supplyCost;
}
public Currency getCurrency() {
return currency;
}
public void setCurrency(Currency currency) {
this.currency = currency;
}
public Date getAddedToOrderDate() {
return addedToOrderDate;
}
public void setAddedToOrderDate(Date addedToOrderDate) {
this.addedToOrderDate = addedToOrderDate;
}
@Override
public boolean equals(Object obj) {
if (obj == null) {
return false;
}
if (this == null) {
return true;
}
if (!(obj instanceof PackingListItem)) {
return false;
}
PackingListItem other = (PackingListItem) obj;
return new EqualsBuilder().append(packingListOrder, other.packingListOrder).append(reference, other.reference)
.append(organisationalUnit, other.organisationalUnit).append(lineNumber, other.lineNumber)
.isEquals();
}
@Override
public int hashCode() {
return new HashCodeBuilder().append(packingListOrder).append(reference).append(organisationalUnit).toHashCode();
}
@Override
public String toString() {
return "PackingListItem{" +
"packingListOrder=" + packingListOrder +
", reference='" + reference + '\'' +
", supplierItemReference='" + supplierItemReference + '\'' +
", description='" + description + '\'' +
", originalUnitQuantity=" + originalUnitQuantity +
", unitQuantity=" + unitQuantity +
", unitPrice=" + unitPrice +
", supplyCost=" + supplyCost +
", numPackages=" + numPackages +
", unitsPerPackage=" + unitsPerPackage +
", unitVolume=" + unitVolume +
", totalVolume=" + totalVolume +
", unitWeight=" + unitWeight +
", totalWeight=" + totalWeight +
", tariffHeading='" + tariffHeading + '\'' +
", barcode='" + barcode + '\'' +
", additional=" + additional +
", currency=" + currency +
", organisationalUnit=" + organisationalUnit +
'}';
}
@Override
public int compareTo(PackingListItem o) {
return this.getReference().compareTo(o.getReference()) + (this.getOrganisationalUnit() != null ?
this.getOrganisationalUnit().compareTo(o.getOrganisationalUnit()) : 0);
}
public String getOrganisationalUnit() {
return organisationalUnit;
}
public void setOrganisationalUnit(String organisationalUnit) {
this.organisationalUnit = organisationalUnit;
}
public boolean isOverriddenVolume() {
return overriddenVolume;
}
public void setOverriddenVolume(boolean overriddenVolume) {
this.overriddenVolume = overriddenVolume;
}
public boolean isOverriddenWeight() {
return overriddenWeight;
}
public void setOverriddenWeight(boolean overriddenWeight) {
this.overriddenWeight = overriddenWeight;
}
public BigDecimal getInitialUnitVolume() {
return initialUnitVolume;
}
public void setInitialUnitVolume(BigDecimal initialUnitVolume) {
this.initialUnitVolume = initialUnitVolume;
}
public BigDecimal getInitialUnitWeight() {
return initialUnitWeight;
}
public void setInitialUnitWeight(BigDecimal initialUnitWeight) {
this.initialUnitWeight = initialUnitWeight;
}
public boolean isOverrideTotalVolume() {
return overrideTotalVolume;
}
public void setOverrideTotalVolume(boolean overrideTotalVolume) {
this.overrideTotalVolume = overrideTotalVolume;
}
public boolean isOverrideTotalWeight() {
return overrideTotalWeight;
}
public void setOverrideTotalWeight(boolean overrideTotalWeight) {
this.overrideTotalWeight = overrideTotalWeight;
}
public boolean equals(String reference, Integer lineNumber) {
return this.reference.equalsIgnoreCase(reference) &&
(this.lineNumber != null ? this.lineNumber.equals(lineNumber) : true);
}
}