WorkLoadRule.java

package com.tradecloud.domain.workload;

import com.tradecloud.common.base.PersistenceBase;
import com.tradecloud.domain.model.payment.PaymentTerm;
import com.tradecloud.domain.model.ordermanagement.OrderState;
import com.tradecloud.domain.model.shipment.ShippingMode;
import com.tradecloud.domain.party.ServiceProvider;
import com.tradecloud.domain.party.ServiceProviderType;

import javax.persistence.*;
import javax.validation.constraints.NotNull;
import java.io.Serializable;
import java.util.Date;
import java.util.List;
import java.util.Objects;

@Entity
@Table(name = "workload_rule")
@Access(AccessType.FIELD)
public class WorkLoadRule extends PersistenceBase implements Serializable {

    @Column(nullable = false)
    private String name;

    @NotNull
    @ManyToOne(optional = false)
    @JoinColumn(name = "category_id", nullable = false)
    private WorkLoadCategory category;

    @NotNull
    @Enumerated(EnumType.STRING)
    @Column(nullable = false)
    private RuleScope scope; // ORDER or SHIPMENT

    @NotNull
    @Enumerated(EnumType.STRING)
    @Column(nullable = false)
    private AttributeType attribute;

    @Enumerated(EnumType.STRING)
    private ShippingMode modeOfTransport;
    private boolean enableSupplierAutoAllocation;
    @ManyToOne
    private ServiceProvider serviceProvider;
    @Enumerated(EnumType.STRING)
    private ServiceProviderType serviceProviderType;

    @NotNull
    @Enumerated(EnumType.STRING)
    @Column(nullable = false)
    private DateFilter dateFilter;

    @NotNull
    @Enumerated(EnumType.STRING)
    @Column(nullable = false)
    private DateFormulaOperator dateFormulaOperator;


    @Column(nullable = false)
    private int dateFormulaValue;

    @NotNull
    @Enumerated(EnumType.STRING)
    @Column(nullable = false)
    private DateFilter priorityDateFilter;

    @NotNull
    @Enumerated(EnumType.STRING)
    @Column(nullable = false)
    private DateFormulaOperator priorityOperator;

    @Column(nullable = false)
    private short priorityFormulaAdditionalDays;

    private Date lastPriorityDate;

    @ManyToOne
    private PaymentTerm paymentTerm;

    public WorkLoadRule() {
    }

    public WorkLoadRule(AttributeType attributeType) {
        this.attribute=attributeType;
    }

    @ElementCollection(fetch = FetchType.EAGER)
    @CollectionTable(name = "workloadrule_order_states", joinColumns = @JoinColumn(name = "workloadrule_id"))
    @Column(name = "orderState")
    @Enumerated(EnumType.STRING)
    private List<OrderState> orderStates;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public WorkLoadCategory getCategory() {
        return category;
    }

    public void setCategory(WorkLoadCategory category) {
        this.category = category;
    }

    public RuleScope getScope() {
        return scope;
    }

    public void setScope(RuleScope scope) {
        this.scope = scope;
    }

    public AttributeType getAttribute() {
        return attribute;
    }

    public void setAttribute(AttributeType attribute) {
        this.attribute = attribute;
    }

    public ShippingMode getModeOfTransport() {
        return modeOfTransport;
    }

    public void setModeOfTransport(ShippingMode modeOfTransport) {
        this.modeOfTransport = modeOfTransport;
    }

    public boolean isEnableSupplierAutoAllocation() {
        return enableSupplierAutoAllocation;
    }

    public void setEnableSupplierAutoAllocation(boolean enableSupplierAutoAllocation) {
        this.enableSupplierAutoAllocation = enableSupplierAutoAllocation;
    }

    public ServiceProvider getServiceProvider() {
        return serviceProvider;
    }

    public void setServiceProvider(ServiceProvider serviceProvider) {
        this.serviceProvider = serviceProvider;
    }

    public ServiceProviderType getServiceProviderType() {
        return serviceProviderType;
    }

    public void setServiceProviderType(ServiceProviderType serviceProviderType) {
        this.serviceProviderType = serviceProviderType;
    }

    public DateFilter getDateFilter() {
        return dateFilter;
    }

    public void setDateFilter(DateFilter dateFilter) {
        this.dateFilter = dateFilter;
    }

    public DateFormulaOperator getDateFormulaOperator() {
        return dateFormulaOperator;
    }

    public void setDateFormulaOperator(DateFormulaOperator dateFormulaOperator) {
        this.dateFormulaOperator = dateFormulaOperator;
    }

    public int getDateFormulaValue() {
        return dateFormulaValue;
    }

    public void setDateFormulaValue(int dateFormulaValue) {
        this.dateFormulaValue = dateFormulaValue;
    }

    public DateFilter getPriorityDateFilter() {
        return priorityDateFilter;
    }

    public void setPriorityDateFilter(DateFilter priorityDateFilter) {
        this.priorityDateFilter = priorityDateFilter;
    }

    public DateFormulaOperator getPriorityOperator() {
        return priorityOperator;
    }

    public void setPriorityOperator(DateFormulaOperator priorityOperator) {
        this.priorityOperator = priorityOperator;
    }

    public short getPriorityFormulaAdditionalDays() {
        return priorityFormulaAdditionalDays;
    }

    public void setPriorityFormulaAdditionalDays(short priorityFormulaAdditionalDays) {
        this.priorityFormulaAdditionalDays = priorityFormulaAdditionalDays;
    }

    public PaymentTerm getPaymentTerm() {
        return paymentTerm;
    }

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

    public Date getLastPriorityDate() {
        return lastPriorityDate;
    }

    public void setLastPriorityDate(Date lastPriorityDate) {
        this.lastPriorityDate = lastPriorityDate;
    }

    public List<OrderState> getOrderStates() {
        return orderStates;
    }

    public void setOrderStates(List<OrderState> orderStates) {
        this.orderStates = orderStates;
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        if (!super.equals(o)) return false;
        WorkLoadRule that = (WorkLoadRule) o;
        return Objects.equals(name, that.name) && Objects.equals(category, that.category);
    }

    @Override
    public int hashCode() {
        return Objects.hash(super.hashCode(), name, category);
    }

    @Override
    public String toString() {
        return "WorkLoadRule{" +
                "attribute=" + attribute +
                ", name='" + name + '\'' +
                '}';
    }
}