InternalProvisionsRateSearch.java

package com.tradecloud.dto.rate;

import com.tradecloud.domain.item.ItemCategory;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;

import com.tradecloud.domain.container.ContainerType;
import com.tradecloud.domain.model.organisationalunit.OrganisationalUnit;
import com.tradecloud.domain.model.payment.PaymentMethod;
import com.tradecloud.domain.model.payment.PaymentTerm;
import com.tradecloud.domain.party.Employee;
import com.tradecloud.domain.place.FinalDestination;
import com.tradecloud.domain.place.PlaceOfDischarge;
import com.tradecloud.domain.supplier.OrganisationalUnitSupplier;
import com.tradecloud.domain.supplier.Supplier;

@Component
@Scope("view")
public class InternalProvisionsRateSearch extends RateSearch {

    private static final long serialVersionUID = 1L;

    private OrganisationalUnit organisationalUnit;
    private Employee buyer;
    private Supplier supplier;
    private PaymentMethod paymentMethod;
    private PaymentTerm paymentTerm;
    private ContainerType containerType;
    private PlaceOfDischarge placeOfDischarge;
    private FinalDestination finalDestination;
    private ItemCategory itemCategory;

    //not used in search, used to set supplier
    private OrganisationalUnitSupplier organisationalUnitSupplier;
    private OrganisationalUnit company;

    public InternalProvisionsRateSearch() {
        super();
    }

    public InternalProvisionsRateSearch(InternalProvisionsRateSearch internalProvisionsRateSearch) {
        super(internalProvisionsRateSearch);
        this.organisationalUnit = internalProvisionsRateSearch.organisationalUnit;
        this.buyer = internalProvisionsRateSearch.buyer;
        this.supplier = internalProvisionsRateSearch.supplier;
        this.paymentMethod = internalProvisionsRateSearch.paymentMethod;
        this.paymentTerm = internalProvisionsRateSearch.paymentTerm;
        this.containerType = internalProvisionsRateSearch.containerType;
        this.placeOfDischarge = internalProvisionsRateSearch.placeOfDischarge;
        this.finalDestination = internalProvisionsRateSearch.finalDestination;
        this.organisationalUnitSupplier = internalProvisionsRateSearch.organisationalUnitSupplier;
        this.itemCategory = internalProvisionsRateSearch.itemCategory;
        this.company = internalProvisionsRateSearch.company;
    }

    public Employee getBuyer() {
        return buyer;
    }

    public void setBuyer(Employee buyer) {
        this.buyer = buyer;
    }

    public Supplier getSupplier() {
        return supplier;
    }

    public void setSupplier(Supplier supplier) {
        this.supplier = supplier;
    }

    public OrganisationalUnit getOrganisationalUnit() {
        return organisationalUnit;
    }

    public void setOrganisationalUnit(OrganisationalUnit organisationalUnit) {
        this.organisationalUnit = organisationalUnit;
    }

    public ContainerType getContainerType() {
        return containerType;
    }

    public void setContainerType(ContainerType containerType) {
        this.containerType = containerType;
    }

    public FinalDestination getFinalDestination() {
        return finalDestination;
    }

    public void setFinalDestination(FinalDestination finalDestination) {
        this.finalDestination = finalDestination;
    }

    public PaymentMethod getPaymentMethod() {
        return paymentMethod;
    }

    public void setPaymentMethod(PaymentMethod paymentMethod) {
        this.paymentMethod = paymentMethod;
    }

    public PaymentTerm getPaymentTerm() {
        return paymentTerm;
    }

    public void setPaymentTerm(PaymentTerm paymentTerm) {
        this.paymentTerm = paymentTerm;
    }

    public PlaceOfDischarge getPlaceOfDischarge() {
        return placeOfDischarge;
    }

    public void setPlaceOfDischarge(PlaceOfDischarge placeOfDischarge) {
        this.placeOfDischarge = placeOfDischarge;
    }

    public OrganisationalUnitSupplier getOrganisationalUnitSupplier() {
        return organisationalUnitSupplier;
    }

    public OrganisationalUnit getCompany() {
        return company;
    }

    public void setCompany(OrganisationalUnit company) {
        this.company = company;
    }

    public void setOrganisationalUnitSupplier(OrganisationalUnitSupplier organisationalUnitSupplier) {
        this.organisationalUnitSupplier = organisationalUnitSupplier;
        if (organisationalUnitSupplier != null)
            supplier = organisationalUnitSupplier.getSupplier();
    }

    public ItemCategory getItemCategory() {
        return itemCategory;
    }

    public void setItemCategory(ItemCategory itemCategory) {
        this.itemCategory = itemCategory;
    }

    @Override
    public String toString() {
        return """
                Cost line '%s'. Business unit '%s'. Company '%s'. Buyer '%s'. Supplier '%s'. %s. Item category '%s'
                """.formatted(
                costLine,
                organisationalUnit != null ? organisationalUnit.getName() : "null",
                company != null ? company.getName() : "null",
                buyer != null ? buyer.getFullName() : "null",
                supplier != null ? supplier.getName() : "null",
                costingType,
                itemCategory != null ? itemCategory.getName() : "null"
        );
    }

    @Override
    public void reset() {
        super.reset();
        organisationalUnit = null;
        buyer = null;
        supplier = null;
        paymentTerm = null;
        paymentMethod = null;
        containerType = null;
        placeOfDischarge = null;
        finalDestination = null;
        organisationalUnitSupplier = null;
        itemCategory = null;
        company = null;
    }

    @Override
    public int hashCode() {
        return generate(getBuyer(), getContainerType(), getCostingType(),
                getCostLine(), getCurrency(), getEffectiveDateLower(), getEffectiveDateUpper(), getFinalDestination(), getOrganisationalUnit(),
                getPaymentMethod(), getPaymentTerm(), getPlaceOfDischarge(), getPriorityConfig(), getSupplier(), getItemCategory(),
                getSearchMetaParams(), getRateUnit(), isCostCompareOnly(), getCompany());
    }
}