package com.salesmanager.core.model.catalog.product.availability; import java.util.Date; import java.util.HashSet; import java.util.Set; import javax.persistence.CascadeType; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.FetchType; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.JoinColumn; import javax.persistence.ManyToOne; import javax.persistence.OneToMany; import javax.persistence.Table; import javax.persistence.TableGenerator; import javax.persistence.Temporal; import javax.persistence.TemporalType; import javax.persistence.Transient; import javax.validation.constraints.NotNull; import com.salesmanager.core.constants.SchemaConstant; import com.salesmanager.core.model.catalog.product.Product; import com.salesmanager.core.model.catalog.product.price.ProductPrice; import com.salesmanager.core.model.generic.SalesManagerEntity; import com.salesmanager.core.utils.CloneUtils; @Entity @Table(name="PRODUCT_AVAILABILITY", schema=SchemaConstant.SALESMANAGER_SCHEMA) public class ProductAvailability extends SalesManagerEntity<Long, ProductAvailability> { private static final long serialVersionUID = 7449264635180797762L; @Id @Column(name = "PRODUCT_AVAIL_ID", unique=true, nullable=false) @TableGenerator(name = "TABLE_GEN", table = "SM_SEQUENCER", pkColumnName = "SEQ_NAME", valueColumnName = "SEQ_COUNT", pkColumnValue = "PRODUCT_AVAIL_SEQ_NEXT_VAL") @GeneratedValue(strategy = GenerationType.TABLE, generator = "TABLE_GEN") private Long id; @ManyToOne(targetEntity = Product.class) @JoinColumn(name = "PRODUCT_ID", nullable = false) private Product product; @NotNull @Column(name="QUANTITY") private Integer productQuantity = 0; @Temporal(TemporalType.DATE) @Column(name="DATE_AVAILABLE") private Date productDateAvailable; @Column(name="REGION") private String region = SchemaConstant.ALL_REGIONS; @Column(name="REGION_VARIANT") private String regionVariant; @Column(name="STATUS") private boolean productStatus = true; @Column(name="FREE_SHIPPING") private boolean productIsAlwaysFreeShipping; @Column(name="QUANTITY_ORD_MIN") private Integer productQuantityOrderMin = 0; @Column(name="QUANTITY_ORD_MAX") private Integer productQuantityOrderMax = 0; @OneToMany(fetch = FetchType.LAZY, mappedBy="productAvailability", cascade = CascadeType.ALL) private Set<ProductPrice> prices = new HashSet<ProductPrice>(); @Transient public ProductPrice defaultPrice() { for(ProductPrice price : prices) { if(price.isDefaultPrice()) { return price; } } return new ProductPrice(); } public ProductAvailability() { } public Integer getProductQuantity() { return productQuantity; } public void setProductQuantity(Integer productQuantity) { this.productQuantity = productQuantity; } public Date getProductDateAvailable() { return CloneUtils.clone(productDateAvailable); } public void setProductDateAvailable(Date productDateAvailable) { this.productDateAvailable = CloneUtils.clone(productDateAvailable); } public String getRegion() { return region; } public void setRegion(String region) { this.region = region; } public String getRegionVariant() { return regionVariant; } public void setRegionVariant(String regionVariant) { this.regionVariant = regionVariant; } public boolean getProductStatus() { return productStatus; } public void setProductStatus(boolean productStatus) { this.productStatus = productStatus; } public boolean getProductIsAlwaysFreeShipping() { return productIsAlwaysFreeShipping; } public void setProductIsAlwaysFreeShipping(boolean productIsAlwaysFreeShipping) { this.productIsAlwaysFreeShipping = productIsAlwaysFreeShipping; } public Integer getProductQuantityOrderMin() { return productQuantityOrderMin; } public void setProductQuantityOrderMin(Integer productQuantityOrderMin) { this.productQuantityOrderMin = productQuantityOrderMin; } public Integer getProductQuantityOrderMax() { return productQuantityOrderMax; } public void setProductQuantityOrderMax(Integer productQuantityOrderMax) { this.productQuantityOrderMax = productQuantityOrderMax; } @Override public Long getId() { return id; } @Override public void setId(Long id) { this.id = id; } public Product getProduct() { return product; } public void setProduct(Product product) { this.product = product; } public Set<ProductPrice> getPrices() { return prices; } public void setPrices(Set<ProductPrice> prices) { this.prices = prices; } }