AcceptedInvalidDocument.java

package com.tradecloud.domain.document.invoice;

import com.tradecloud.authentication.User;
import com.tradecloud.common.base.HibernateUtils;
import com.tradecloud.common.base.PersistenceBase;
import com.tradecloud.domain.document.DocumentType;

import javax.persistence.*;
import java.io.Serializable;
import java.util.Iterator;
import java.util.List;

@Entity
@Table(name = "AcceptedInvalidDocument")
@Access(AccessType.FIELD)
public class AcceptedInvalidDocument extends PersistenceBase implements Serializable {
    @ManyToOne(fetch = FetchType.LAZY)
    private CostsInvoice costsInvoice;
    @ManyToOne(fetch = FetchType.LAZY)
    private User user;
    @ElementCollection
    @CollectionTable(name = "AcceptedInvalidDocument_validationFailures", joinColumns = @JoinColumn(name = "AcceptedInvalidDocument_id"))
    @Column(name = "validation_failure")
    private List<String> validationFailures;
    @ElementCollection
    @CollectionTable(name = "AcceptedInvalidDocument_matchingFailures", joinColumns = @JoinColumn(name = "AcceptedInvalidDocument_id"))
    @Column(name = "matching_failure")
    private List<String> matchingFailures;
    private String acceptReason;

    public AcceptedInvalidDocument() {
    }

    public AcceptedInvalidDocument(CostsInvoice costsInvoice, User user, List<String> validationFailures,
                                   List<String> matchingFailures, String acceptReason) {
        this.costsInvoice = costsInvoice;
        this.user = user;
        this.validationFailures = validationFailures;
        this.matchingFailures = matchingFailures;
        this.acceptReason = acceptReason;
    }

    public CostsInvoice getCostsInvoice() {
        return costsInvoice;
    }

    public void setCostsInvoice(CostsInvoice costsInvoice) {
        this.costsInvoice = costsInvoice;
    }

    public User getUser() {
        return user;
    }

    public void setUser(User user) {
        this.user = user;
    }

    public List<String> getValidationFailures() {
        return validationFailures;
    }

    public void setValidationFailures(List<String> validationFailures) {
        this.validationFailures = validationFailures;
    }

    public List<String> getMatchingFailures() {
        return matchingFailures;
    }

    public void setMatchingFailures(List<String> matchingFailures) {
        this.matchingFailures = matchingFailures;
    }

    public String getAcceptReason() {
        return acceptReason;
    }

    public void setAcceptReason(String acceptReason) {
        this.acceptReason = acceptReason;
    }

    public static String formatErrors(List errors) {
        StringBuffer buffer = new StringBuffer();
        int count = 1;
        for (Iterator iterator = errors.iterator(); iterator.hasNext(); ) {
            buffer.append(count);
            buffer.append(". ");
            buffer.append((String) iterator.next());
            buffer.append(". ");
            count++;
        }
        return buffer.toString();
    }

    public String getOrganisation() {
        if (costsInvoice.getDocumentType() == DocumentType.COMMERCIAL_INVOICE) {
            CommercialInvoice commercialInvoice = (CommercialInvoice) HibernateUtils.getNonProxyObject(costsInvoice);
            return commercialInvoice.getOrganisationalUnit() != null ? commercialInvoice.getOrganisationalUnit().getName() : "";
        } else {
            return "";
        }
    }

    public String getValidationFailuresString() {
        if (!validationFailures.isEmpty()) {
            return formatErrors(validationFailures);
        } else {
            return "";
        }
    }

    public String getMatchingFailuresString() {
        if (!matchingFailures.isEmpty()) {
            return formatErrors(matchingFailures);
        } else {
            return "";
        }
    }

    public String getShipmentReference() {
        return costsInvoice.getShipment().getReference();
    }

    public String getShipmentNumber() {
        return costsInvoice.getShipment().getNumber();
    }

    public String getSupplier() {
        return costsInvoice.getDocumentType() == DocumentType.COMMERCIAL_INVOICE ? costsInvoice.getSupplier().getName() : "";
    }

}