PackingListOrder.java
package com.tradecloud.domain.container;
import com.tradecloud.common.base.PersistenceBase;
import org.apache.commons.lang.builder.EqualsBuilder;
import org.apache.commons.lang.builder.HashCodeBuilder;
import org.hibernate.annotations.Fetch;
import org.hibernate.annotations.FetchMode;
import org.hibernate.annotations.ForeignKey;
import org.hibernate.annotations.Formula;
import javax.persistence.*;
import javax.validation.constraints.NotNull;
import javax.xml.bind.annotation.*;
import java.math.BigDecimal;
import java.util.LinkedHashSet;
import java.util.Set;
@Entity
@Table(name = "packinglistorder")
@Access(AccessType.FIELD)
@NamedQueries({
@NamedQuery(name = "packingListOrder.findByIdWithItems", query = "from PackingListOrder plo left join fetch plo.items where plo.id=:id"),
@NamedQuery(name = "packingListOrder.findOrdersByReference", query = "from PackingListOrder plo where plo.orderReference = :orderReference"),
@NamedQuery(name = "packingListOrder.findOrdersByPackingListContainer", query = "from PackingListOrder plo " +
"where packingListContainer.id = :packingListContainerId"),
@NamedQuery(name = "packingListOrder.findByOrderAndPackingListContainer",
query = "from PackingListOrder where packingListContainer.id = :packingListContainerId and orderReference = "
+ "(select orderReference from Order where id = :orderId)")})
@XmlAccessorType(XmlAccessType.FIELD)
@XmlRootElement(name = "PackingListOrder")
public class PackingListOrder extends PersistenceBase {
private static final long serialVersionUID = 1L;
private BigDecimal noOfCartons;
/**
* This is the reference from {@code Order}. We add it at this level for convenience so a full load of the order is not required.
*/
@NotNull
@XmlAttribute(required = true)
private String orderReference;
@XmlAttribute
private String shippingReference;
/**
* The bidirectional link back to the parent {@link PackingListContainer}.
*/
@ManyToOne(optional = false)
@XmlIDREF
@ForeignKey(name = "fk_packinglistcontainer")
private PackingListContainer packingListContainer;
@XmlElementWrapper(name = "PackingListItems")
@XmlElement(name = "PackingListItem")
@ForeignKey(name = "fk_packinglistorder")
@OneToMany(cascade = CascadeType.ALL, mappedBy = "packingListOrder", orphanRemoval = true, fetch = FetchType.LAZY)
@Fetch(FetchMode.SUBSELECT)
@OrderBy("addedToOrderDate")
private Set<PackingListItem> items = new LinkedHashSet<PackingListItem>();
@Basic
@Column(precision = 27, scale = 20)
private BigDecimal orderProportion;
//order id
private Long originalOrderId;
private boolean overriddenVolume;
private boolean overriddenWeight;
@Basic(fetch = FetchType.LAZY)
@Formula(value = "(SELECT sum(i.sellPriceExclusiveAmount*pli.unitquantity) " +
"FROM lineitem i left join orders o on o.id = i.order_id join consignment c on (c.id=o.consignment_id) " +
"join shipment s on (s.id=c.shipment_id) join packinglist p on (p.shipmentid=s.id) " +
"join packinglistcontainer plc on (plc.packinglist_id=p.id) join packinglistorder plo on(plo.packinglistcontainer_id=plc.id) " +
"join packinglistitem pli on (pli.packinglistorder_id=plo.id) join organisationalunit u on (u.id=i.organisationalunit_id) " +
"WHERE plo.id=id and plo.originalorderid=o.id and i.code=pli.reference and u.code=pli.organisationalunit)")
private BigDecimal retailValueOfOrder;
public void addItem(PackingListItem item) {
item.setPackingListOrder(this);
items.add(item);
}
public PackingListOrder() {
}
public String getOrderReference() {
return orderReference;
}
public void setOrderReference(String orderReference) {
this.orderReference = orderReference;
}
public PackingListContainer getPackingListContainer() {
return packingListContainer;
}
public void setPackingListContainer(PackingListContainer packingListContainer) {
this.packingListContainer = packingListContainer;
}
public Set<PackingListItem> getItems() {
return items;
}
public void setItems(Set<PackingListItem> items) {
this.items = items;
}
public BigDecimal getOrderProportion() {
return orderProportion;
}
public void setOrderProportion(BigDecimal orderProportion) {
this.orderProportion = orderProportion;
}
@Override
public boolean equals(Object obj) {
if (obj == null) {
return false;
}
if (this == obj) {
return true;
}
if (!(obj instanceof PackingListOrder)) {
return false;
}
PackingListOrder other = (PackingListOrder) obj;
return new EqualsBuilder().append(packingListContainer, other.packingListContainer).append(orderReference, other.orderReference).isEquals();
}
@Override
public int hashCode() {
return new HashCodeBuilder().append(packingListContainer).append(orderReference).toHashCode();
}
public Long getOriginalOrderId() {
return originalOrderId;
}
public void setOriginalOrderId(Long originalOrderId) {
this.originalOrderId = originalOrderId;
}
public Long getKey() {
if (getId() == null) {
return originalOrderId + PackingListOrder.class.hashCode();
}
return this.getId() + PackingListOrder.class.hashCode();
}
public String getShippingReference() {
return shippingReference;
}
public void setShippingReference(String shippingReference) {
this.shippingReference = shippingReference;
}
public BigDecimal getNoOfCartons() {
return noOfCartons;
}
public void setNoOfCartons(BigDecimal noOfCartons) {
this.noOfCartons = noOfCartons;
}
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 getRetailValueOfOrder() {
return retailValueOfOrder;
}
}