DeclarationInvoice.java

package com.tradecloud.domain.document.invoice;

import com.tradecloud.domain.configuration.SPICostlineCurrency;
import com.tradecloud.domain.costing.CostableCostDefinition;
import com.tradecloud.domain.costing.clean.ActualCostSummary;
import com.tradecloud.domain.costing.clean.Costed;
import com.tradecloud.domain.costing.clean.CostingVisitor;
import com.tradecloud.domain.document.DocumentType;
import com.tradecloud.domain.settlement.PlannedSettlement;
import com.tradecloud.domain.shipment.clearing.CustomsDeclaration;
import com.tradecloud.domain.supplier.Creditor;
import org.apache.commons.collections4.keyvalue.MultiKey;

import javax.persistence.*;
import javax.validation.constraints.NotNull;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlRootElement;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
import java.util.Set;

@Entity
@NamedQueries({
        @NamedQuery(name = "declarationInvoice.byReference",
                query = "from DeclarationInvoice spi where spi.reference = :reference and spi.state != 'DELETED'")})
@Access(AccessType.FIELD)
@XmlAccessorType(XmlAccessType.FIELD)
@XmlRootElement(name = "declarationInvoice")
public class DeclarationInvoice extends CostsInvoice {

    @OneToOne(fetch = FetchType.LAZY)
    @NotNull
    private CommercialInvoice commercialInvoice;

    @ManyToOne(fetch = FetchType.LAZY, cascade = CascadeType.DETACH)
    private CustomsDeclaration customsDeclaration;

    @NotNull(message = "quantity is required")
    @XmlAttribute
    private BigDecimal quantity;

    private transient ActualCostSummary actualCostSummary;

    @Override
    public BigDecimal getWeightedAverageForwardRateOfExchange() {
        return null;
    }

    @Override
    public BigDecimal getWeightedAverageSpotRateOfExchange() {
        return null;
    }

    @Override
    public String getType() {
        return null;
    }

    @Override
    public void accept(CostingVisitor costingVisitor) {
        for (ActualConsignment actualConsignment : getActualConsignments()) {
            actualConsignment.accept(costingVisitor);
        }
        costingVisitor.visit(this);
    }

    @Override
    public void acceptVisitParentFirst(CostingVisitor costingVisitor) {
        costingVisitor.visit(this);
        for (ActualConsignment actualConsignment : getActualConsignments()) {
            actualConsignment.acceptVisitParentFirst(costingVisitor);
        }
    }

    @Override
    public List getCostedChildren() {
        return new ArrayList<Costed>(getActualConsignments());
    }

    @Override
    public DocumentType getDocumentType() {
        return DocumentType.CUSTOM_DECLARATION_INVOICE;
    }

    @Override
    public Creditor getCreditor() {
        return null;
    }

    @Override
    public Object getTraversalKey() {
        return new MultiKey(DeclarationInvoice.class, reference);
    }

    @Override
    public Set<PlannedSettlement> getPlannedSettlements() {
        return null;
    }

    @Override
    public void setPlannedSettlements(Set<PlannedSettlement> plannedSettlements) {

    }

    public CommercialInvoice getCommercialInvoice() {
        return commercialInvoice;
    }

    public void setCommercialInvoice(CommercialInvoice commercialInvoice) {
        this.commercialInvoice = commercialInvoice;
    }

    public CustomsDeclaration getCustomsDeclaration() {
        return customsDeclaration;
    }

    public void setCustomsDeclaration(CustomsDeclaration customsDeclaration) {
        this.customsDeclaration = customsDeclaration;
    }

    public BigDecimal getQuantity() {
        return quantity;
    }

    public void setQuantity(BigDecimal quantity) {
        this.quantity = quantity;
    }

    public ActualCostSummary getActualCostSummary() {
        return actualCostSummary;
    }

    public void setActualCostSummary(ActualCostSummary actualCostSummary) {
        this.actualCostSummary = actualCostSummary;
    }

    @Override
    public SPICostlineCurrency getSpiCostlineCurrency() {
        return SPICostlineCurrency.MIXED_CURRENCIES;
    }

    @Override
    public CostableCostDefinition getCostableCostDefinition() {
        return shipment.getClearingCostableCostDefinition();
    }

    @Override
    public void setCostableCostDefinition(CostableCostDefinition costableCostDefinition) {
        this.shipment.setClearingCostableCostDefinition(costableCostDefinition);
    }
}