TransporterContainer.java
package com.tradecloud.domain.transporter;
import com.tradecloud.common.base.PersistenceBase;
import com.tradecloud.domain.container.ShipmentContainer;
import com.tradecloud.domain.model.organisationalunit.OrganisationalUnit;
import com.tradecloud.domain.model.organisationalunit.OrganisationalUnitTier;
import com.tradecloud.domain.party.ServiceProvider;
import org.apache.commons.lang3.builder.ToStringBuilder;
import javax.persistence.*;
import javax.validation.constraints.NotNull;
import java.io.Serializable;
import java.util.Objects;
@Entity
@Table(name = "transporter_container")
@Access(AccessType.FIELD)
public class TransporterContainer extends PersistenceBase implements Serializable {
private static final long serialVersionUID = 1L;
public static final String SHIPMENT_REFERENCE = "Shipment Reference";
public static final String CONTAINER_REFERENCE = "Container Reference";
@ManyToOne
@NotNull(message = "Transporter is required")
private ServiceProvider transporter;
@ManyToOne
@NotNull(message = "shipmentContainer is required")
private ShipmentContainer shipmentContainer;
private boolean documentUploaded;
private boolean invoiced;
private boolean datesSubmitted;
@Embedded
private InvoiceSplit invoiceSplit;
@ManyToOne
@JoinColumn(name = "transportercosting_id")
private TransporterCosting transporterCosting;
public TransporterContainer() {
}
public TransporterContainer(ShipmentContainer container) {
this.shipmentContainer = container;
invoiceSplit = new InvoiceSplit();
}
public ServiceProvider getTransporter() {
return transporter;
}
public void setTransporter(ServiceProvider transporter) {
this.transporter = transporter;
}
public ShipmentContainer getShipmentContainer() {
return shipmentContainer;
}
public void setShipmentContainer(ShipmentContainer shipmentContainer) {
this.shipmentContainer = shipmentContainer;
}
public boolean isDocumentUploaded() {
return documentUploaded;
}
public void setDocumentUploaded(boolean documentUploaded) {
this.documentUploaded = documentUploaded;
}
public boolean isInvoiced() {
return invoiced;
}
public void setInvoiced(boolean invoiced) {
this.invoiced = invoiced;
}
public boolean isDatesSubmitted() {
return datesSubmitted;
}
public void setDatesSubmitted(boolean datesSubmitted) {
this.datesSubmitted = datesSubmitted;
}
public InvoiceSplit getInvoiceSplit() {
return invoiceSplit;
}
public void setInvoiceSplit(InvoiceSplit invoiceSplit) {
this.invoiceSplit = invoiceSplit;
}
public TransporterCosting getTransporterCosting() {
return transporterCosting;
}
public void setTransporterCosting(TransporterCosting transporterCosting) {
this.transporterCosting = transporterCosting;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (!(o instanceof TransporterContainer that)) return false;
return Objects.equals(getShipmentContainer().getId(), that.getShipmentContainer().getId());
}
@Override
public int hashCode() {
return Objects.hash(getShipmentContainer().getId());
}
@Override
public String toString() {
return new ToStringBuilder(this)
.append("id", id)
.toString();
}
public OrganisationalUnit getBusinessOrHoldingComOrgUnit() {
return findRelevantOrganisationalUnit(this.shipmentContainer.getShipment().getOrganisationalUnit());
}
private OrganisationalUnit findRelevantOrganisationalUnit(OrganisationalUnit organisationalUnit) {
if (isBusinessOrHoldingUnit(organisationalUnit) || organisationalUnit.getParent() == null) {
return organisationalUnit;
}
return findRelevantOrganisationalUnit(organisationalUnit.getParent());
}
private boolean isBusinessOrHoldingUnit(OrganisationalUnit organisationalUnit) {
OrganisationalUnitTier tier = organisationalUnit.getTier();
return tier != null && (tier.getCode().equals("BUSINESS_UNIT") || tier.getCode().equals("HoldingCompany"));
}
}