ExportConfig.java

package com.tradecloud.domain.export;

import com.tradecloud.common.base.PersistenceBase;
import com.tradecloud.domain.agent.Agent;
import com.tradecloud.domain.common.Incoterm;
import com.tradecloud.domain.common.IncotermYear;
import com.tradecloud.domain.model.organisationalunit.OrganisationalUnit;
import com.tradecloud.domain.model.payment.PaymentTerm;
import com.tradecloud.domain.model.shipment.ShippingMode;
import com.tradecloud.domain.party.Bank;
import com.tradecloud.domain.party.ServiceProvider;
import com.tradecloud.domain.place.Country;
import com.tradecloud.domain.place.NamedPlace;
import com.tradecloud.domain.place.PlaceOfCustom;
import org.hibernate.annotations.ForeignKey;
import org.springframework.stereotype.Component;

import javax.persistence.*;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Pattern;
import javax.xml.bind.annotation.*;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

@Entity
@Component(value = "ExportConfig")
@Table(name = "exportconfig")
@Access(AccessType.FIELD)
@XmlAccessorType(XmlAccessType.FIELD)
@XmlRootElement(name = "ExportConfig")
public class ExportConfig extends PersistenceBase {

    private static final Long serialVersionUID = 1L;

    @ManyToOne
    @ForeignKey(name = "exportconfig_exporter_fk")
    @XmlElement(name = "DefaultExporter")
    private OrganisationalUnit exporter;

    @ManyToOne
    @ForeignKey(name = "exportconfig_exportconfigconsignee_fk")
    @XmlElement(name = "DefaultConsignee")
    private ExportParty exportconfigconsignee;

    @ManyToOne
    @ForeignKey(name = "exportconfig_agent_fk")
    @XmlElement(name = "DefaultAgent")
    private Agent agent;

    @ManyToOne
    @ForeignKey(name = "exportconfig_countryofdestination_fk")
    @XmlElement(name = "DefaultCountryOfDestination")
    private Country countryOfDestination;

    @ManyToOne
    @ForeignKey(name = "exportconfig_countryofexport_fk")
    @XmlElement(name = "DefaultCountryOfExport")
    private Country countryOfExport;

    @ManyToOne
    @ForeignKey(name = "exportconfig_cityofexport_fk")
    @XmlElement(name = "DefaultCityOfExport")
    private NamedPlace cityOfExport;

    private String shipmentCargoSummary;

    @ManyToOne
    @ForeignKey(name = "exportconfig_shipper_fk")
    @XmlElement(name = "DefaultShipper")
    private OrganisationalUnit shipper;

    @Enumerated(value = EnumType.STRING)
    private ShippingMode modeOfTransport;

    @ManyToOne
    @XmlElement(name = "dutyDrawbackIncoterm")
    private Incoterm dutyDrawbackIncoterm;

    @ManyToOne
    @ForeignKey(name = "placeofcustomsentry_fk")
    private PlaceOfCustom placeOfCustomsEntry;
    private String customsProcedureCategory;
    private String ciTransportConfig;
    private String cargoStatus;

    @ManyToOne
    @ForeignKey(name = "receivingbank_id")
    private Bank receivingBank;

    @ManyToOne
    @ForeignKey(name = "exportconfig_paymentterm_fk")
    @XmlElement(name = "DefaultPaymentTerm")
    private PaymentTerm paymentterm;
    @Column(name = "currency_code")
    private String currency;
    @ManyToOne
    @ForeignKey(name = "exportconfig_incotermyear_fk")
    @XmlElement(name = "DeafultIncoTermYear")
    private IncotermYear incotermyear;

    /**
     * Defaults to "SS".
     */
    @XmlAttribute
    @Pattern(regexp = "\\S+", message = "Spaces are not allowed")
    private String seaShipmentPrefix;

    /**
     * Defaults to "/01".
     */
    @XmlAttribute
    @Pattern(regexp = "\\S+", message = "Spaces are not allowed")
    private String seaShipmentSuffix;

    /**
     * Defaults to "AS".
     */
    @XmlAttribute
    @Pattern(regexp = "\\S+", message = "Spaces are not allowed")
    private String airShipmentPrefix;

    /**
     * Defaults to "/01".
     */
    @XmlAttribute
    @Pattern(regexp = "\\S+", message = "Spaces are not allowed")
    private String airShipmentSuffix;

    /**
     * Defaults to "LS".
     */
    @XmlAttribute
    @Pattern(regexp = "\\S+", message = "Spaces are not allowed")
    private String landShipmentPrefix;

    /**
     * Defaults to "/01".
     */
    @XmlAttribute
    @Pattern(regexp = "\\S+", message = "Spaces are not allowed")
    private String landShipmentSuffix;

    private Integer shipmentNumberLength;
    private String extendedCustomsProcedureDefaultRequested;
    private String extendedCustomsProcedureDefaultPrevious;
    private Double insurancePercentage;
    @ManyToOne
    @ForeignKey(name = "exportconfig_transporter_fk")
    @XmlElement(name = "DefaultTransporter")
    private ServiceProvider transporter;
    private boolean sarsIntegration;
    private boolean useShipmentNumberOnCI;
    @Column(name = "com_invoice_footer_text")
    private String comInvoiceFooterText;
    private boolean displayCustomCode;
    private boolean useInsurancePercentage;
    private boolean useInvoiceDateOnCI;
    private boolean requireTemplateDescription;
    private boolean freightAmountRequired;

    @OneToMany
    private Set<AsycudaCountryConfig> asycudaConfig;

    @ElementCollection
    @CollectionTable(name = "exportconfig_packinginstructions", joinColumns = {@JoinColumn(name = "config_id", unique = false)})
    @Column(name = "instruction", unique = true)
    @ForeignKey(name = "fk_exportconfig_packinginstructions", inverseName = "fk_packinginstructions")
    @XmlElementWrapper(name = "PackingInstructions")
    @XmlElement(name = "PackingInstruction")
    private Set<String> exportPackingInstructions = new HashSet<String>();

    @OneToMany(cascade = CascadeType.ALL)
    private List<TermsAndConditionsConfig> termsAndConditionsConfigList;

    /**
     * Defaults to true.
     */
    @XmlAttribute
    @NotNull
    private boolean showItemsUnitsOnCI;

    private boolean createInvoiceOnOrderSignOff;

    private boolean allowOverrideCurrencyExchangeRate;

    private boolean useProductLibraryForMissingFields;

    private boolean updateExportPartyName;

    private boolean requirePrincipleConsignee;

    public ExportConfig() {
    }

    public Set<AsycudaCountryConfig> getAsycudaConfig() {
        return asycudaConfig;
    }

    public void setAsycudaConfig(Set<AsycudaCountryConfig> asycudaConfig) {
        this.asycudaConfig = asycudaConfig;
    }

    public AsycudaCountryConfig getAsycudaCountryConfig(Country country, PlaceOfCustom placeofcustomsExit) {
        if (asycudaConfig != null) {
            for (AsycudaCountryConfig asycudaCountryConfig : asycudaConfig) {
                if (asycudaCountryConfig.getCountry().equals(country) && placeofcustomsExit != null
                        && asycudaCountryConfig.getPlaceOfCustomExit() != null
                        && asycudaCountryConfig.getPlaceOfCustomExit().equals(placeofcustomsExit)) {
                    return asycudaCountryConfig;
                }
            }

            for (AsycudaCountryConfig asycudaCountryConfig : asycudaConfig) {
                if (asycudaCountryConfig.getCountry().getCode().equals(country.getCode())) {
                    return asycudaCountryConfig;
                }
            }
        }

        return null;
    }

    public OrganisationalUnit getExporter() {
        return exporter;
    }

    public void setExporter(OrganisationalUnit exporter) {
        this.exporter = exporter;
    }

    public ExportParty getExportconfigconsignee() {
        return exportconfigconsignee;
    }

    public void setExportconfigconsignee(ExportParty exportconfigconsignee) {
        this.exportconfigconsignee = exportconfigconsignee;
    }

    public Agent getAgent() {
        return agent;
    }

    public void setAgent(Agent agent) {
        this.agent = agent;
    }

    public Country getCountryOfDestination() {
        return countryOfDestination;
    }

    public void setCountryOfDestination(Country countryOfDestination) {
        this.countryOfDestination = countryOfDestination;
    }

    public Country getCountryOfExport() {
        return countryOfExport;
    }

    public void setCountryOfExport(Country countryOfExport) {
        this.countryOfExport = countryOfExport;
    }

    public NamedPlace getCityOfExport() {
        return cityOfExport;
    }

    public void setCityOfExport(NamedPlace cityOfExport) {
        this.cityOfExport = cityOfExport;
    }

    public String getShipmentCargoSummary() {
        return shipmentCargoSummary;
    }

    public void setShipmentCargoSummary(String shipmentCargoSummary) {
        this.shipmentCargoSummary = shipmentCargoSummary;
    }

    public OrganisationalUnit getShipper() {
        return shipper;
    }

    public void setShipper(OrganisationalUnit shipper) {
        this.shipper = shipper;
    }

    public ShippingMode getModeOfTransport() {
        return modeOfTransport;
    }

    public void setModeOfTransport(ShippingMode modeOfTransport) {
        this.modeOfTransport = modeOfTransport;
    }

    public PlaceOfCustom getPlaceOfCustomsEntry() {
        return placeOfCustomsEntry;
    }

    public void setPlaceOfCustomsEntry(PlaceOfCustom placeOfCustomsEntry) {
        this.placeOfCustomsEntry = placeOfCustomsEntry;
    }

    public String getCustomsProcedureCategory() {
        return customsProcedureCategory;
    }

    public void setCustomsProcedureCategory(String customsProcedureCategory) {
        this.customsProcedureCategory = customsProcedureCategory;
    }

    public String getCiTransportConfig() {
        return ciTransportConfig;
    }

    public void setCiTransportConfig(String ciTransportConfig) {
        this.ciTransportConfig = ciTransportConfig;
    }

    public String getCargoStatus() {
        return cargoStatus;
    }

    public void setCargoStatus(String cargoStatus) {
        this.cargoStatus = cargoStatus;
    }

    public Bank getReceivingBank() {
        return receivingBank;
    }

    public void setReceivingBank(Bank receivingBank) {
        this.receivingBank = receivingBank;
    }

    public PaymentTerm getPaymentterm() {
        return paymentterm;
    }

    public void setPaymentterm(PaymentTerm paymentterm) {
        this.paymentterm = paymentterm;
    }

    public String getCurrency() {
        return currency;
    }

    public void setCurrency(String currency) {
        this.currency = currency;
    }

    public IncotermYear getIncotermyear() {
        return incotermyear;
    }

    public void setIncotermyear(IncotermYear incotermyear) {
        this.incotermyear = incotermyear;
    }

    public String getLandShipmentPrefix() {
        return landShipmentPrefix;
    }

    public void setLandShipmentPrefix(String landShipmentPrefix) {
        this.landShipmentPrefix = landShipmentPrefix;
    }

    public String getLandShipmentSuffix() {
        return landShipmentSuffix;
    }

    public void setLandShipmentSuffix(String landShipmentSuffix) {
        this.landShipmentSuffix = landShipmentSuffix;
    }

    public Integer getShipmentNumberLength() {
        return shipmentNumberLength;
    }

    public void setShipmentNumberLength(Integer shipmentNumberLength) {
        this.shipmentNumberLength = shipmentNumberLength;
    }

    public String getExtendedCustomsProcedureDefaultRequested() {
        return extendedCustomsProcedureDefaultRequested;
    }

    public void setExtendedCustomsProcedureDefaultRequested(String extendedCustomsProcedureDefaultRequested) {
        this.extendedCustomsProcedureDefaultRequested = extendedCustomsProcedureDefaultRequested;
    }

    public String getExtendedCustomsProcedureDefaultPrevious() {
        return extendedCustomsProcedureDefaultPrevious;
    }

    public void setExtendedCustomsProcedureDefaultPrevious(String extendedCustomsProcedureDefaultPrevious) {
        this.extendedCustomsProcedureDefaultPrevious = extendedCustomsProcedureDefaultPrevious;
    }

    public Double getInsurancePercentage() {
        return insurancePercentage;
    }

    public void setInsurancePercentage(Double insurancePercentage) {
        this.insurancePercentage = insurancePercentage;
    }

    public ServiceProvider getTransporter() {
        return transporter;
    }

    public void setTransporter(ServiceProvider transporter) {
        this.transporter = transporter;
    }

    public boolean isSarsIntegration() {
        return sarsIntegration;
    }

    public void setSarsIntegration(boolean sarsIntegration) {
        this.sarsIntegration = sarsIntegration;
    }

    public boolean isUseShipmentNumberOnCI() {
        return useShipmentNumberOnCI;
    }

    public void setUseShipmentNumberOnCI(boolean useShipmentNumberOnCI) {
        this.useShipmentNumberOnCI = useShipmentNumberOnCI;
    }

    public Set<String> getExportPackingInstructions() {
        return exportPackingInstructions;
    }

    public void setExportPackingInstructions(Set<String> exportPackingInstructions) {
        this.exportPackingInstructions = exportPackingInstructions;
    }

    public String getComInvoiceFooterText() {
        return comInvoiceFooterText;
    }

    public void setComInvoiceFooterText(String comInvoiceFooterText) {
        this.comInvoiceFooterText = comInvoiceFooterText;
    }

    public boolean isDisplayCustomCode() {
        return displayCustomCode;
    }

    public void setDisplayCustomCode(boolean displayCustomCode) {
        this.displayCustomCode = displayCustomCode;
    }

    public boolean isUseInsurancePercentage() {
        return useInsurancePercentage;
    }

    public void setUseInsurancePercentage(boolean useInsurancePercentage) {
        this.useInsurancePercentage = useInsurancePercentage;
    }

    public boolean isUseInvoiceDateOnCI() {
        return useInvoiceDateOnCI;
    }

    public void setUseInvoiceDateOnCI(boolean useInvoiceDateOnCI) {
        this.useInvoiceDateOnCI = useInvoiceDateOnCI;
    }

    public boolean isShowItemsUnitsOnCI() {
        return showItemsUnitsOnCI;
    }

    public void setShowItemsUnitsOnCI(boolean showItemsUnitsOnCI) {
        this.showItemsUnitsOnCI = showItemsUnitsOnCI;
    }

    public List<TermsAndConditionsConfig> getTermsAndConditionsConfigList() {
        return termsAndConditionsConfigList;
    }

    public void setTermsAndConditionsConfigList(List<TermsAndConditionsConfig> termsAndConditionsConfigList) {
        this.termsAndConditionsConfigList = termsAndConditionsConfigList;
    }

    public boolean isCreateInvoiceOnOrderSignOff() {
        return createInvoiceOnOrderSignOff;
    }

    public void setCreateInvoiceOnOrderSignOff(boolean createInvoiceOnOrderSignOff) {
        this.createInvoiceOnOrderSignOff = createInvoiceOnOrderSignOff;
    }

    public boolean isAllowOverrideCurrencyExchangeRate() {
        return allowOverrideCurrencyExchangeRate;
    }

    public void setAllowOverrideCurrencyExchangeRate(boolean allowOverrideCurrencyExchangeRate) {
        this.allowOverrideCurrencyExchangeRate = allowOverrideCurrencyExchangeRate;
    }

    public boolean isUseProductLibraryForMissingFields() {
        return useProductLibraryForMissingFields;
    }

    public void setUseProductLibraryForMissingFields(boolean useProductLibraryForMissingFields) {
        this.useProductLibraryForMissingFields = useProductLibraryForMissingFields;
    }

    public boolean isUpdateExportPartyName() {
        return updateExportPartyName;
    }

    public void setUpdateExportPartyName(boolean updateExportPartyName) {
        this.updateExportPartyName = updateExportPartyName;
    }

    public boolean isRequirePrincipleConsignee() {
        return requirePrincipleConsignee;
    }

    public void setRequirePrincipleConsignee(boolean requirePrincipleConsignee) {
        this.requirePrincipleConsignee = requirePrincipleConsignee;
    }

    public Incoterm getDutyDrawbackIncoterm() {
        return dutyDrawbackIncoterm;
    }

    public void setDutyDrawbackIncoterm(Incoterm dutyDrawbackIncoterm) {
        this.dutyDrawbackIncoterm = dutyDrawbackIncoterm;
    }

    public boolean isRequireTemplateDescription() {
        return requireTemplateDescription;
    }

    public void setRequireTemplateDescription(boolean requireTemplateDescription) {
        this.requireTemplateDescription = requireTemplateDescription;
    }

    public boolean isFreightAmountRequired() {
        return freightAmountRequired;
    }

    public void setFreightAmountRequired(boolean freightAmountRequired) {
        this.freightAmountRequired = freightAmountRequired;
    }

    public String getSeaShipmentPrefix() {
        return seaShipmentPrefix;
    }

    public void setSeaShipmentPrefix(String seaShipmentPrefix) {
        this.seaShipmentPrefix = seaShipmentPrefix;
    }

    public String getSeaShipmentSuffix() {
        return seaShipmentSuffix;
    }

    public void setSeaShipmentSuffix(String seaShipmentSuffix) {
        this.seaShipmentSuffix = seaShipmentSuffix;
    }

    public String getAirShipmentPrefix() {
        return airShipmentPrefix;
    }

    public void setAirShipmentPrefix(String airShipmentPrefix) {
        this.airShipmentPrefix = airShipmentPrefix;
    }

    public String getAirShipmentSuffix() {
        return airShipmentSuffix;
    }

    public void setAirShipmentSuffix(String airShipmentSuffix) {
        this.airShipmentSuffix = airShipmentSuffix;
    }
}