Supplier.java
package com.tradecloud.domain.supplier;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.tradecloud.common.externalreference.ExternalReference;
import com.tradecloud.domain.common.Currency;
import com.tradecloud.domain.dms.DocumentManagementHardCoding;
import com.tradecloud.domain.model.Customs;
import com.tradecloud.domain.model.DMSLinked;
import com.tradecloud.domain.model.payment.ActualPaymentBasis;
import com.tradecloud.domain.model.payment.PaymentMethod;
import com.tradecloud.domain.model.payment.PaymentTerm;
import com.tradecloud.domain.party.base.Address;
import com.tradecloud.domain.party.base.Contact;
import javax.persistence.*;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlID;
import javax.xml.bind.annotation.XmlRootElement;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import static javax.persistence.CascadeType.DETACH;
import static javax.persistence.CascadeType.PERSIST;
@Entity
@Table(name = "supplier")
@Access(AccessType.FIELD)
@XmlAccessorType(XmlAccessType.PROPERTY)
@XmlRootElement(name = "Supplier")
@JsonIgnoreProperties({"hibernateLazyInitializer", "handler"})
public class Supplier extends AbstractSupplier implements Comparable<Supplier>, DMSLinked, Customs {
private static final long serialVersionUID = 1L;
public Supplier() {
super();
}
private String estimatedPaymentBasisPlaceHolder;
@OneToMany(
cascade = {PERSIST, DETACH},
orphanRemoval = false
)
@JoinTable(
name = "supplier_currencies",
joinColumns = @JoinColumn(name = "supplier_id"),
inverseJoinColumns = @JoinColumn(name = "currencies_code")
)
private Set<Currency> allowedCurrencies = new HashSet<>();
private String valueDeterminationNumber;
private String customsCode;
public Set<Currency> getAllowedCurrencies() {
return allowedCurrencies;
}
public void setAllowedCurrencies(Set<Currency> allowedCurrencies) {
if (allowedCurrencies != null) {
this.getAllowedCurrencies().clear();
this.getAllowedCurrencies().addAll(allowedCurrencies);
}
}
@Transient
private List<String> orgUnits = new ArrayList<>();
public Supplier(String name, String reference) {
super(name);
setExternalReference(reference);
}
public Supplier(PaymentTerm paymentTerm, PaymentMethod paymentMethod, ActualPaymentBasis actualPaymentBasis) {
super();
setPaymentTerm(paymentTerm);
setPaymentMethod(paymentMethod);
setActualPaymentBasis(actualPaymentBasis);
}
/**
* Creates a supplier from an Integrated Supplier.
*/
public Supplier(IntegratedSupplier integratedSupplier) {
setCompanyRegistrationNumber(integratedSupplier.getCompanyRegistrationNumber());
setExternalReference(integratedSupplier.getExternalReference());
setSalesTaxRegistrationNumber(integratedSupplier.getSalesTaxRegistrationNumber());
setVatRegistrationNumber(integratedSupplier.getVatRegistrationNumber());
setWarehouseCode(integratedSupplier.getWarehouseCode());
if (integratedSupplier.getPhysicalAddress() != null) {
setPhysicalAddress(new Address(integratedSupplier.getPhysicalAddress()));
}
setPaymentMethod(integratedSupplier.getPaymentMethod());
setPaymentTerm(integratedSupplier.getPaymentTerm());
setSplitPayment(integratedSupplier.getSplitPayment());
setEstimatedPaymentBasis(integratedSupplier.getEstimatedPaymentBasis());
setEstimatedPaymentBasis2(integratedSupplier.getEstimatedPaymentBasis2());
setPaymentBasisPercentage(integratedSupplier.getPaymentBasisPercentage());
setPaymentBasis2Percentage(integratedSupplier.getPaymentBasis2Percentage());
setPaymentTermDays(integratedSupplier.getPaymentTermDays());
setActualPaymentBasis(integratedSupplier.getActualPaymentBasis());
setCurrency(integratedSupplier.getCurrency());
setIncoterm(integratedSupplier.getIncoterm());
setUnitPricePerItem(integratedSupplier.getUnitPricePerItem());
setFreightForwarder(integratedSupplier.getFreightForwarder());
setClearingAgent(integratedSupplier.getClearingAgent());
setTransporter(integratedSupplier.getTransporter());
setAllowPartShipment(integratedSupplier.getAllowPartShipment());
setAllowTransShipment(integratedSupplier.getAllowTransShipment());
setLcToleranceAbove(integratedSupplier.getLcToleranceAbove());
setLcToleranceBelow(integratedSupplier.getLcToleranceBelow());
setName(integratedSupplier.getName());
setPlaceOfExpiry(integratedSupplier.getPlaceOfExpiry());
if (integratedSupplier.getPostalAddress() != null) {
setPostalAddress(new Address(integratedSupplier.getPostalAddress()));
}
if (!integratedSupplier.getContacts().isEmpty()) {
if (integratedSupplier.getContacts().get(0) != null) {
getContacts().add(new Contact(integratedSupplier.getContacts().get(0)));
}
}
setPresentationDays(integratedSupplier.getPresentationDays());
setAdvisingBank(integratedSupplier.getAdvisingBank());
setNominatedBank(integratedSupplier.getNominatedBank());
setIntegrated(Boolean.TRUE); // Will always be true
setActive(integratedSupplier.getActive());
setState(integratedSupplier.getState());
setType(integratedSupplier.getType());
setPlaceOfLoading(integratedSupplier.getPlaceOfLoading());
setEarlySettlementDisc(integratedSupplier.getEarlySettlementDisc());
for (ExternalReference er : integratedSupplier.getExternalReferences()) {
addExternalReference(new ExternalReference(er.getIntegratedSystem(), er.getReferenceValue()));
}
}
@Override
public int compareTo(Supplier supplier) {
if (getName() != null) {
if (getName().compareTo(supplier.getName()) != 0) {
return getName().compareTo(supplier.getName());
}
}
return 0;
}
@XmlID
@Override
public String getName() {
return super.getName();
}
public List<String> getOrgUnits() {
return orgUnits;
}
public void setOrgunits(List<String> orgUnits) {
this.orgUnits = orgUnits;
}
public String getSupplierNameAndRef() {
return getName() + " - " + getExternalReference();
}
public String getEstimatedPaymentBasisPlaceHolder() {
return estimatedPaymentBasisPlaceHolder;
}
public void setEstimatedPaymentBasisPlaceHolder(String estimatedPaymentBasisPlaceHolder) {
this.estimatedPaymentBasisPlaceHolder = estimatedPaymentBasisPlaceHolder;
}
public String getValueDeterminationNumber() {
return valueDeterminationNumber;
}
public void setValueDeterminationNumber(String valueDeterminationNumber) {
this.valueDeterminationNumber = valueDeterminationNumber;
}
@Override
public String getCustomsCode() {
return customsCode;
}
@Override
public void setCustomsCode(String customsCode) {
this.customsCode = customsCode;
}
@Override
public String getDocumentGroupName() {
return DocumentManagementHardCoding.SUPPLIER.name();
}
@Override
public String getDMSKey() {
return new StringBuilder().append(getId()).toString();
}
@Override
public String getReference() {
return externalReference;
}
}