ProductSearch.java
package com.tradecloud.dto.product;
import com.tradecloud.domain.base.utils.ObjectUtil;
import com.tradecloud.domain.common.Currency;
import com.tradecloud.domain.common.ProductProperty;
import com.tradecloud.domain.dto.base.SearchBase;
import com.tradecloud.domain.item.*;
import com.tradecloud.domain.model.ordermanagement.OrderType;
import com.tradecloud.domain.model.ordermanagement.ProductSearchOrderByType;
import com.tradecloud.domain.model.ordermanagement.ProductState;
import com.tradecloud.domain.model.organisationalunit.OrganisationalUnit;
import com.tradecloud.domain.place.Country;
import com.tradecloud.domain.search.OrgUnitFilter;
import com.tradecloud.domain.supplier.OrganisationalUnitSupplier;
import com.tradecloud.domain.supplier.Supplier;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;
import java.io.Serializable;
import java.util.*;
@Component
@Scope("view")
public class ProductSearch extends SearchBase implements Serializable, OrgUnitFilter {
private static final long serialVersionUID = 1L;
public static String BOTH_IMPORT_AND_EXPORT ="ImportAndExport";
public static String IMPORT ="Import";
public static String EXPORT ="Export";
private ProductCategory productCategory;
private ProductSubCategory productSubCategory;
private String code;
private String description;
private String supplierReference;
private String tariffStatus;
private ProductState state;
private boolean isTariffed;
private Currency currency;
private List<Currency> currencyList;
private OrganisationalUnitSupplier supplier;
private List<OrganisationalUnitSupplier> suppliers;
private OrganisationalUnit organisationalUnit;
private List<OrganisationalUnit> organisationalUnits;
private Country countryOfOrigin;
private List<Country> countryOfOriginList;
private Date fromDate;
private Date toDate;
private String schedule1Part1;
private String schedule1Part2A;
private String schedule1Part2B;
private String schedule2Part1;
private String schedule2Part2;
private String schedule1Part3E;
private String schedule1Part7;
private Supplier elcSupplier;
private List<Long> productIdList;
private String productFlag;
private String styleReference;
private String complete = "";
private boolean isStyleUser;
private boolean liteSearch;
private boolean unique;
private List<Product.Type> types;
private String notes;
private String schedule3Part1;
private String schedule4Part1;
private boolean exactMatch;
private List<ProductProperty> productPropertyList;
private String sadc;
private HomologationStatus homologationStatus;
private List<HomologationStatus> homologationStatuses;
private List<HomologationStatus> exludeHomologationStatuses;
public String getStyleReference() {
return styleReference;
}
public void setStyleReference(String styleReference) {
this.styleReference = styleReference;
}
private String styleDescription;
public String getStyleDescription() {
return styleDescription;
}
public void setStyleDescription(String styleDescription) {
this.styleDescription = styleDescription;
}
public String getProductFlag() {
return productFlag;
}
public void setProductFlag(String productFlag) {
this.productFlag = productFlag;
}
public ProductCategory getProductCategory() {
return productCategory;
}
public void setProductCategory(ProductCategory productCategory) {
this.productCategory = productCategory;
}
public ProductSubCategory getProductSubCategory() {
return productSubCategory;
}
public void setProductSubCategory(ProductSubCategory productSubCategory) {
this.productSubCategory = productSubCategory;
}
public String getNotes() {
return notes;
}
public void setNotes(String notes) {
this.notes = notes;
}
// Need to set a default search by
// Use SearchMetaParams instead
@Deprecated
private ProductSearchOrderByType orderBy = ProductSearchOrderByType.CODE;
public ProductSearch() {
}
public ProductSearch(Product product) {
this.code = product.getCode();
this.description = product.getDescription();
this.supplierReference = product.getSupplierReference();
this.fromDate = product.getCreated();
this.currency = product.getCurrency();
this.supplier = product.getSupplier();
this.organisationalUnit = product.getOrganisationalUnit();
this.countryOfOrigin = product.getCountryOfOrigin();
this.productCategory = product.getProductCategory();
this.productSubCategory = product.getProductSubCategory();
product.getSchedule1Part1A().getTariffHeading().getTariffHeading();
}
public static ProductSearch uniqueSearch(AbstractItem product) {
ProductSearch ps = new ProductSearch();
ps.code = product.getCode() != null ? product.getCode().trim() : null;
ps.supplier = product.getSupplier();
ps.organisationalUnit = product.getOrganisationalUnit();
ps.countryOfOrigin = product.getCountryOfOrigin();
return ps;
}
/**
* FDH 200, an import product is unique using code, supplier and org unit. COO is not relevant.
*
* @param product
* @return
*/
public static ProductSearch uniqueExportSearch(AbstractItem product) {
ProductSearch ps = getProductSearch(product);
ps.organisationalUnit = product.getOrganisationalUnit();
return ps;
}
public static ProductSearch getProductSearch(ItemInterface product) {
ProductSearch ps = new ProductSearch();
ps.code = product.getCode() != null ? product.getCode().trim() : null;
ps.supplier = product.getSupplier();
ps.productFlag = "Export";
return ps;
}
public static ProductSearch uniqueSearch(AbstractItem product, OrderType orderType) {
ProductSearch ps = new ProductSearch();
ps.code = product.getCode() != null ? product.getCode().trim() : null;
ps.supplier = product.getSupplier();
ps.organisationalUnit = product.getOrganisationalUnit();
ps.countryOfOrigin = product.getCountryOfOrigin();
if (OrderType.SALES_ORDER.equals(orderType)) {
ps.setProductFlag("Export");
} else {
ps.setProductFlag("Import");
}
return ps;
}
public static ProductSearch uniqueSearch(Product product) {
ProductSearch ps = new ProductSearch();
ps.code = product.getCode() != null ? product.getCode().trim() : null;
ps.supplier = product.getSupplier();
ps.organisationalUnit = product.getOrganisationalUnit();
ps.countryOfOrigin = product.getCountryOfOrigin();
ps.setTypes(Arrays.asList(product.getType()));
if (product.isExportProduct()) {
ps.setProductFlag("Export");
} else {
ps.setProductFlag("Import");
}
ps.setUnique(true);
return ps;
}
public static ProductSearch uniqueSearchSupplierReference(AbstractItem product) {
ProductSearch ps = new ProductSearch();
// ps.code = product.getSupplierReference();
ps.supplierReference = product.getSupplierReference();
ps.supplier = product.getSupplier();
ps.organisationalUnit = product.getOrganisationalUnit();
ps.countryOfOrigin = product.getCountryOfOrigin();
return ps;
}
public static ProductSearch uniqueSearchSupplierReferenceExport(AbstractItem product) {
ProductSearch ps = new ProductSearch();
// ps.code = product.getSupplierReference();
ps.supplierReference = product.getSupplierReference();
ps.supplier = product.getSupplier();
ps.organisationalUnit = product.getOrganisationalUnit();
return ps;
}
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
public String getSupplierReference() {
return supplierReference;
}
public void setSupplierReference(String supplierReference) {
this.supplierReference = supplierReference;
}
public Currency getCurrency() {
return currency;
}
public void setCurrency(Currency currency) {
this.currency = currency;
}
public OrganisationalUnitSupplier getSupplier() {
return supplier;
}
public void setSupplier(OrganisationalUnitSupplier supplier) {
this.supplier = supplier;
}
public OrganisationalUnit getOrganisationalUnit() {
return organisationalUnit;
}
public void setOrganisationalUnit(OrganisationalUnit organisationalUnit) {
this.organisationalUnit = organisationalUnit;
}
public List<OrganisationalUnit> getOrganisationalUnits() {
return organisationalUnits;
}
public void setOrganisationalUnits(List<OrganisationalUnit> organisationalUnits) {
this.organisationalUnits = organisationalUnits;
}
public Country getCountryOfOrigin() {
return countryOfOrigin;
}
public void setCountryOfOrigin(Country countryOfOrigin) {
this.countryOfOrigin = countryOfOrigin;
}
@Override
public String toString() {
StringBuilder sb = new StringBuilder();
sb.append("code=").append(code).append(",description=").append(description).append(",supplierReference=").append(supplierReference)
.append(",currency=").append(currency).append(",supplier=").append(supplier != null ? supplier.getName() : null)
.append(",organisationalUnit=").append(organisationalUnit != null ? organisationalUnit.getCode() : null).append(",countryOfOrigin=")
.append(countryOfOrigin != null ? countryOfOrigin.getCode() : null);
if (organisationalUnits != null) {
sb.append(",organisationalUnits=");
for (OrganisationalUnit organisationalUnit : organisationalUnits) {
sb.append(organisationalUnit.getName());
}
}
return sb.toString();
}
public Date getFromDate() {
return fromDate;
}
public void setFromDate(Date fromDate) {
this.fromDate = fromDate;
}
public Date getToDate() {
return toDate;
}
public void setToDate(Date toDate) {
this.toDate = toDate;
}
public ProductSearchOrderByType getOrderBy() {
return orderBy;
}
public void setOrderBy(ProductSearchOrderByType orderBy) {
this.orderBy = orderBy;
}
public boolean isTariffed() {
return isTariffed;
}
public void setTariffed(boolean tariffed) {
isTariffed = tariffed;
}
public ProductState getState() {
return state;
}
public void setState(ProductState tariffStatus) {
this.state = tariffStatus;
}
public String getTariffStatus() {
return tariffStatus;
}
public void setTariffStatus(String tariffStatus) {
this.tariffStatus = tariffStatus;
}
public String getSchedule2Part2() {
return schedule2Part2;
}
public void setSchedule2Part2(String schedule2Part2) {
this.schedule2Part2 = schedule2Part2;
}
public String getSchedule1Part1() {
return schedule1Part1;
}
public void setSchedule1Part1(String schedule1Part1) {
this.schedule1Part1 = schedule1Part1;
}
public String getSchedule1Part2A() {
return schedule1Part2A;
}
public void setSchedule1Part2A(String schedule1Part2A) {
this.schedule1Part2A = schedule1Part2A;
}
public String getSchedule1Part2B() {
return schedule1Part2B;
}
public void setSchedule1Part2B(String schedule1Part2B) {
this.schedule1Part2B = schedule1Part2B;
}
public String getSchedule2Part1() {
return schedule2Part1;
}
public void setSchedule2Part1(String schedule2Part1) {
this.schedule2Part1 = schedule2Part1;
}
@Override
public String getTableName() {
return "Product";
}
public Supplier getElcSupplier() {
return elcSupplier;
}
public void setElcSupplier(Supplier elcSupplier) {
this.elcSupplier = elcSupplier;
}
public void addProduct(Long productId) {
if (null == productIdList) {
productIdList = new ArrayList<Long>();
}
productIdList.add(productId);
}
public List<Long> getProductIdList() {
return productIdList;
}
public void setProductIdList(List<Long> productIdList) {
this.productIdList = productIdList;
}
public String getComplete() {
return complete;
}
public void setComplete(String complete) {
this.complete = complete;
}
public boolean isStyleUser() {
return isStyleUser;
}
public void setStyleUser(boolean styleUser) {
isStyleUser = styleUser;
}
public String getSchedule1Part3E() {
return schedule1Part3E;
}
public void setSchedule1Part3E(String schedule1Part3E) {
this.schedule1Part3E = schedule1Part3E;
}
public String getSchedule1Part7() {
return schedule1Part7;
}
public void setSchedule1Part7(String schedule1Part7) {
this.schedule1Part7 = schedule1Part7;
}
public boolean isLiteSearch() {
return liteSearch;
}
public void setLiteSearch(boolean liteSearch) {
this.liteSearch = liteSearch;
}
public boolean isUnique() {
return unique;
}
public void setUnique(boolean unique) {
this.unique = unique;
}
public List<Currency> getCurrencyList() {
return currencyList;
}
public void setCurrencyList(List<Currency> currencyList) {
this.currencyList = currencyList;
}
public List<OrganisationalUnitSupplier> getSuppliers() {
return suppliers;
}
public void setSuppliers(List<OrganisationalUnitSupplier> suppliers) {
this.suppliers = suppliers;
}
public List<Country> getCountryOfOriginList() {
return countryOfOriginList;
}
public void setCountryOfOriginList(List<Country> countryOfOriginList) {
this.countryOfOriginList = countryOfOriginList;
}
public List<Product.Type> getTypes() {
if (types == null) {
types = new ArrayList<>();
}
return types;
}
public void setTypes(List<Product.Type> types) {
this.types = types;
}
@Override
public boolean noSelectedOrgUnit() {
return ObjectUtil.allNull(organisationalUnit, organisationalUnits);
}
public String getSchedule3Part1() {
return schedule3Part1;
}
public void setSchedule3Part1(String schedule3Part1) {
this.schedule3Part1 = schedule3Part1;
}
public String getSchedule4Part1() {
return schedule4Part1;
}
public void setSchedule4Part1(String schedule4Part1) {
this.schedule4Part1 = schedule4Part1;
}
public boolean isExactMatch() {
return exactMatch;
}
public void setExactMatch(boolean exactMatch) {
this.exactMatch = exactMatch;
}
public List<ProductProperty> getProductPropertyList() {
return productPropertyList;
}
public void setProductPropertyList(List<ProductProperty> productPropertyList) {
this.productPropertyList = productPropertyList;
}
public String getSadc() {
return sadc;
}
public void setSadc(String sadc) {
this.sadc = sadc;
}
public void setOrganisationalUnits2(List<OrganisationalUnit> organisationalUnits) {
setOrganisationalUnits(organisationalUnits);
}
public Collection<OrganisationalUnit> getOrganisationalUnits2() {
return getOrganisationalUnits();
}
public void setOrganisationalUnit2(OrganisationalUnit organisationalUnit) {
setOrganisationalUnit(organisationalUnit);
}
public HomologationStatus getHomologationStatus() {
return homologationStatus;
}
public void setHomologationStatus(HomologationStatus homologationStatus) {
this.homologationStatus = homologationStatus;
}
public List<HomologationStatus> getHomologationStatuses() {
return homologationStatuses;
}
public void setHomologationStatuses(List<HomologationStatus> homologationStatuses) {
this.homologationStatuses = homologationStatuses;
}
public List<HomologationStatus> getExludeHomologationStatuses() {
return exludeHomologationStatuses;
}
public void setExludeHomologationStatuses(List<HomologationStatus> exludeHomologationStatuses) {
this.exludeHomologationStatuses = exludeHomologationStatuses;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (!(o instanceof ProductSearch that)) return false;
return Objects.equals(getCode(), that.getCode()) && Objects.equals(getOrganisationalUnit(), that.getOrganisationalUnit())
&& Objects.equals(getCountryOfOrigin(), that.getCountryOfOrigin())
&& Objects.equals(getProductFlag(), that.getProductFlag())
&& Objects.equals(getSupplier(), that.getSupplier());
}
@Override
public int hashCode() {
return Objects.hash(getCode(), getOrganisationalUnit(), getCountryOfOrigin(), getProductFlag(),getSupplier());
}
}