DocumentClientConfig.java

package com.tradecloud.domain.configuration;

import com.tradecloud.common.base.PersistenceBase;
import com.tradecloud.domain.common.Currency;
import com.tradecloud.domain.document.DocumentState;
import com.tradecloud.domain.duties.CustomsDutyCaptureLevel;
import com.tradecloud.domain.invoice.InvoiceQuantitySource;
import com.tradecloud.domain.party.ServiceProvider;
import com.tradecloud.domain.settlement.SettlementDateCalculationType;
import org.hibernate.annotations.Fetch;
import org.hibernate.annotations.FetchMode;
import org.hibernate.annotations.ForeignKey;

import javax.persistence.*;
import javax.validation.constraints.NotNull;
import javax.xml.bind.annotation.*;
import java.util.ArrayList;
import java.util.List;

/**
 * A holder for document client configuration values.
 */
@Entity
@Table(name = "documentclientconfig")
@Access(AccessType.FIELD)
@XmlAccessorType(XmlAccessType.FIELD)
@XmlRootElement(name = "DocumentClientConfig")
public class DocumentClientConfig extends PersistenceBase {

    private static final long serialVersionUID = 1L;

    /**
     * Defines where the quantites on commercial invoice capture are defaulted from.
     * Defaults to {@link InvoiceQuantitySource#PACKING_LIST}.
     */
    @Enumerated(value = EnumType.STRING)
    @XmlAttribute
    @NotNull
    private InvoiceQuantitySource invoiceQuantitySource;

    /**
     * Indicates whether a warning should be raised when there is a matching Document reference for a different Supplier or Service Provider.
     * Defaults to true.
     */
    @XmlAttribute
    private boolean matchingSupplierOrServiceProviderDocRefWarning;

    @XmlAttribute
    private boolean includeCustomsVatOnDocuments;

    @XmlAttribute
    private boolean commInvoiceOutOfToleranceReason;

    /**
     * Indicates whether to block duplicates of Document reference and Supplier or Service Provider.
     * Defaults to true.
     */
    @XmlAttribute
    private boolean blockDuplicateSupplierOrServiceProviderDocRefs;

    @XmlAttribute
    @ForeignKey(name = "fk_serviceProvider")
    @ManyToOne
    private ServiceProvider defaultServiceProvider;

    @XmlAttribute
    @ForeignKey(name = "fk_currency")
    @ManyToOne
    private Currency defaultCurrency;

    @ElementCollection
    @CollectionTable(name = "documentclientconfig_outoftolerancereasons", joinColumns = {@JoinColumn(name = "config_id", unique = false)})
    @Column(name = "reason", unique = true)
    @ForeignKey(name = "fk_documentclientconfig_outoftolerancereasons", inverseName = "fk_ outoftolerancereasons")
    @XmlElementWrapper(name = "outoftolerancereasons")
    @XmlElement(name = "outoftolerancereasons")
    private List<String> outOfToleranceReasons = new ArrayList<>();

    /**
     * The default settlement date calculation type used on the Service Provider invoice creation page.
     */
    @Enumerated(value = EnumType.STRING)
    @XmlAttribute
    @NotNull
    private SettlementDateCalculationType settlementDateCalculationType = SettlementDateCalculationType.USE_SERVICE_PROVIDER_PAYMENT_TERMS;

    @XmlAttribute
    private boolean allowCISignOffWithoutTariff;

    private boolean useIntegratedVat;

    @ElementCollection(fetch = FetchType.EAGER)
    @Column(name = "invoicestatetocomplete")
    @Fetch(FetchMode.SELECT)
    @Enumerated(EnumType.STRING)
    private List<DocumentState> invoiceStateToComplete = new ArrayList<DocumentState>();

    @XmlAttribute
    private long maxInvoiceReferenceLength;

    private boolean nonEditableDocs;

    @Enumerated(value = EnumType.STRING)
    @XmlAttribute
    @NotNull
    private SPICostlineCurrency spiCostlineCurrency;

    @Enumerated(value = EnumType.STRING)
    @XmlAttribute
    @NotNull
    private CustomsDutyCaptureLevel customsDutyCaptureLevel;

    private boolean includeCustomsCostGroup;

    private boolean requireMRNOnSPISignoff;

    private boolean commInvoiceItemSupplierRef;

    private boolean includeClientAccountNumber;

    public InvoiceQuantitySource getInvoiceQuantitySource() {
        return invoiceQuantitySource;
    }

    public void setInvoiceQuantitySource(InvoiceQuantitySource invoiceQuantitySource) {
        this.invoiceQuantitySource = invoiceQuantitySource;
    }

    public boolean isMatchingSupplierOrServiceProviderDocRefWarning() {
        return matchingSupplierOrServiceProviderDocRefWarning;
    }

    public void setMatchingSupplierOrServiceProviderDocRefWarning(boolean matchingSupplierOrServiceProviderDocRefWarning) {
        this.matchingSupplierOrServiceProviderDocRefWarning = matchingSupplierOrServiceProviderDocRefWarning;
    }

    public boolean isBlockDuplicateSupplierOrServiceProviderDocRefs() {
        return blockDuplicateSupplierOrServiceProviderDocRefs;
    }

    public void setBlockDuplicateSupplierOrServiceProviderDocRefs(boolean blockDuplicateSupplierOrServiceProviderDocRefs) {
        this.blockDuplicateSupplierOrServiceProviderDocRefs = blockDuplicateSupplierOrServiceProviderDocRefs;
    }

    public SettlementDateCalculationType getSettlementDateCalculationType() {
        return settlementDateCalculationType;
    }

    public void setSettlementDateCalculationType(SettlementDateCalculationType settlementDateCalculationType) {
        this.settlementDateCalculationType = settlementDateCalculationType;
    }

    public boolean isIncludeCustomsVatOnDocuments() {
        return includeCustomsVatOnDocuments;
    }

    public void setIncludeCustomsVatOnDocuments(boolean includeCustomsVatOnDocuments) {
        this.includeCustomsVatOnDocuments = includeCustomsVatOnDocuments;
    }

    public ServiceProvider getDefaultServiceProvider() {
        return defaultServiceProvider;
    }

    public void setDefaultServiceProvider(ServiceProvider defaultServiceProvider) {
        this.defaultServiceProvider = defaultServiceProvider;
    }

    public boolean isCommInvoiceOutOfToleranceReason() {
        return commInvoiceOutOfToleranceReason;
    }

    public void setCommInvoiceOutOfToleranceReason(boolean commInvoiceOutOfToleranceReason) {
        this.commInvoiceOutOfToleranceReason = commInvoiceOutOfToleranceReason;
    }

    public Currency getDefaultCurrency() {
        return defaultCurrency;
    }

    public void setDefaultCurrency(Currency defaultCurrency) {
        this.defaultCurrency = defaultCurrency;
    }

    public SPICostlineCurrency getSpiCostlineCurrency() {
        return spiCostlineCurrency;
    }

    public void setSpiCostlineCurrency(SPICostlineCurrency spiCostlineCurrency) {
        this.spiCostlineCurrency = spiCostlineCurrency;
    }

    public List<String> getOutOfToleranceReasons() {
        return outOfToleranceReasons;
    }

    public void setOutOfToleranceReasons(List<String> outOfToleranceReasons) {
        this.outOfToleranceReasons = outOfToleranceReasons;
    }

    public boolean isAllowCISignOffWithoutTariff() {
        return allowCISignOffWithoutTariff;
    }

    public void setAllowCISignOffWithoutTariff(boolean allowCISignOffWithoutTariff) {
        this.allowCISignOffWithoutTariff = allowCISignOffWithoutTariff;
    }

    public boolean isUseIntegratedVat() {
        return useIntegratedVat;
    }

    public void setUseIntegratedVat(boolean useIntegratedVat) {
        this.useIntegratedVat = useIntegratedVat;
    }

    public List<DocumentState> getInvoiceStateToComplete() {
        return invoiceStateToComplete;
    }

    public void setInvoiceStateToComplete(List<DocumentState> invoiceStateToComplete) {
        this.invoiceStateToComplete = invoiceStateToComplete;
    }

    public long getMaxInvoiceReferenceLength() {
        return maxInvoiceReferenceLength;
    }

    public void setMaxInvoiceReferenceLength(long maxInvoiceReferenceLength) {
        this.maxInvoiceReferenceLength = maxInvoiceReferenceLength;
    }

    public boolean isNonEditableDocs() {
        return nonEditableDocs;
    }

    public void setNonEditableDocs(boolean nonEditableDocs) {
        this.nonEditableDocs = nonEditableDocs;
    }

    public CustomsDutyCaptureLevel getCustomsDutyCaptureLevel() {
        return customsDutyCaptureLevel;
    }

    public void setCustomsDutyCaptureLevel(CustomsDutyCaptureLevel customsDutyCaptureLevel) {
        this.customsDutyCaptureLevel = customsDutyCaptureLevel;
    }

    public boolean isIncludeCustomsCostGroup() {
        return includeCustomsCostGroup;
    }

    public void setIncludeCustomsCostGroup(boolean includeCustomsCostGroup) {
        this.includeCustomsCostGroup = includeCustomsCostGroup;
    }

    public boolean isRequireMRNOnSPISignoff() {
        return requireMRNOnSPISignoff;
    }

    public void setRequireMRNOnSPISignoff(boolean requireMRNOnSPISignoff) {
        this.requireMRNOnSPISignoff = requireMRNOnSPISignoff;
    }

    public boolean isCommInvoiceItemSupplierRef() {
        return commInvoiceItemSupplierRef;
    }

    public void setCommInvoiceItemSupplierRef(boolean commInvoiceItemSupplierRef) {
        this.commInvoiceItemSupplierRef = commInvoiceItemSupplierRef;
    }

    public boolean isIncludeClientAccountNumber() {
        return includeClientAccountNumber;
    }

    public void setIncludeClientAccountNumber(boolean includeClientAccountNumber) {
        this.includeClientAccountNumber = includeClientAccountNumber;
    }
}