CommercialCreditNote.java

package com.tradecloud.domain.document;

import com.tradecloud.domain.document.invoice.BaseCommercialInvoice;
import com.tradecloud.domain.document.invoice.CommercialInvoice;
import com.tradecloud.domain.document.invoice.UnitPricePerItem;
import com.tradecloud.domain.model.organisationalunit.OrganisationalUnit;
import com.tradecloud.domain.settlement.PlannedSettlement;
import com.tradecloud.domain.supplier.OrganisationalUnitSupplier;
import org.apache.commons.collections4.keyvalue.MultiKey;
import org.springframework.stereotype.Component;

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.XmlRootElement;
import java.math.BigDecimal;
import java.util.List;
import java.util.Set;

@Entity
@Component(value = "commercialcreditnote")
@Table(name = "commercialcreditnote")
@NamedQueries({
        @NamedQuery(name = "commercialCreditNote.byShipment", query = "from CommercialCreditNote where shipment.id = :id"),
        @NamedQuery(name = "commercialCreditNote.byReference", query = "from CommercialCreditNote where reference = :reference"),
        @NamedQuery(name = "commercialCreditNote.byReferenceAndSupplier",
                query = "from CommercialCreditNote where reference = :reference and supplier = :supplier")})
@Access(AccessType.FIELD)
@XmlAccessorType(XmlAccessType.FIELD)
@XmlRootElement(name = "CommercialCreditNote")
public class CommercialCreditNote extends BaseCommercialInvoice {

    private static final long serialVersionUID = 1L;

    public CommercialCreditNote() {
    }

    public CommercialCreditNote(OrganisationalUnit organisationalUnit, OrganisationalUnitSupplier supplier, BigDecimal quantity,
                                UnitPricePerItem unitPricePerItem, Set<PlannedSettlement> plannedSettlements) {
        super(organisationalUnit, supplier, quantity, unitPricePerItem);
    }

    @OneToOne(cascade = {CascadeType.ALL})
    @NotNull
    private CommercialInvoice commercialInvoice;

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

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

    @Override
    public BigDecimal getWeightedAverageForwardRateOfExchange() {
        return commercialInvoice.getWeightedAverageForwardRateOfExchange();
    }

    @Override
    public BigDecimal getWeightedAverageSpotRateOfExchange() {
        return commercialInvoice.getWeightedAverageSpotRateOfExchange();
    }

    public CommercialInvoice getCommercialInvoice() {
        return commercialInvoice;
    }

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

    @Override
    public PaymentState getPaymentState() {
        return PaymentState.UNSETTLED;
    }

    @Override
    public boolean isSupplierInvoice() {
        return true;
    }

    @Override
    public List<PlannedSettlement> getPlannedSettlementList() {
        return commercialInvoice.getPlannedSettlementList();
    }

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

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

    @Transient
    public String getType() {
        return "CCN";
    }
}