package com.salesmanager.core.model.catalog.product.price; import java.math.BigDecimal; 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.EnumType; import javax.persistence.Enumerated; 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.validation.constraints.Pattern; import org.hibernate.validator.constraints.NotEmpty; import com.salesmanager.core.constants.SchemaConstant; import com.salesmanager.core.model.catalog.product.availability.ProductAvailability; import com.salesmanager.core.model.generic.SalesManagerEntity; import com.salesmanager.core.utils.CloneUtils; @Entity @Table(name = "PRODUCT_PRICE", schema=SchemaConstant.SALESMANAGER_SCHEMA) public class ProductPrice extends SalesManagerEntity<Long, ProductPrice> { private static final long serialVersionUID = -9186473817468772165L; private final static String DEFAULT_PRICE_CODE="base"; @Id @Column(name = "PRODUCT_PRICE_ID") @TableGenerator(name = "TABLE_GEN", table = "SM_SEQUENCER", pkColumnName = "SEQ_NAME", valueColumnName = "SEQ_COUNT", pkColumnValue = "PRODUCT_PRICE_SEQ_NEXT_VAL") @GeneratedValue(strategy = GenerationType.TABLE, generator = "TABLE_GEN") private Long id; @OneToMany(fetch = FetchType.LAZY, mappedBy = "productPrice", cascade = CascadeType.ALL) private Set<ProductPriceDescription> descriptions = new HashSet<ProductPriceDescription>(); @NotEmpty @Pattern(regexp="^[a-zA-Z0-9_]*$") @Column(name = "PRODUCT_PRICE_CODE", nullable=false) private String code = DEFAULT_PRICE_CODE; @Column(name = "PRODUCT_PRICE_AMOUNT", nullable=false) private BigDecimal productPriceAmount = new BigDecimal(0); @Column(name = "PRODUCT_PRICE_TYPE", length=20) @Enumerated(value = EnumType.STRING) private ProductPriceType productPriceType = ProductPriceType.ONE_TIME; @Column(name = "DEFAULT_PRICE") private boolean defaultPrice = false; @Temporal(TemporalType.DATE) @Column(name = "PRODUCT_PRICE_SPECIAL_ST_DATE") private Date productPriceSpecialStartDate; @Temporal(TemporalType.DATE) @Column(name = "PRODUCT_PRICE_SPECIAL_END_DATE") private Date productPriceSpecialEndDate; @Column(name = "PRODUCT_PRICE_SPECIAL_AMOUNT") private BigDecimal productPriceSpecialAmount; @ManyToOne(targetEntity = ProductAvailability.class) @JoinColumn(name = "PRODUCT_AVAIL_ID", nullable = false) private ProductAvailability productAvailability; public ProductPrice() { } @Override public Long getId() { return this.id; } @Override public void setId(Long id) { this.id = id; } public BigDecimal getProductPriceAmount() { return productPriceAmount; } public void setProductPriceAmount(BigDecimal productPriceAmount) { this.productPriceAmount = productPriceAmount; } public Date getProductPriceSpecialStartDate() { return CloneUtils.clone(productPriceSpecialStartDate); } public void setProductPriceSpecialStartDate( Date productPriceSpecialStartDate) { this.productPriceSpecialStartDate = CloneUtils.clone(productPriceSpecialStartDate); } public Date getProductPriceSpecialEndDate() { return CloneUtils.clone(productPriceSpecialEndDate); } public void setProductPriceSpecialEndDate(Date productPriceSpecialEndDate) { this.productPriceSpecialEndDate = CloneUtils.clone(productPriceSpecialEndDate); } public BigDecimal getProductPriceSpecialAmount() { return productPriceSpecialAmount; } public void setProductPriceSpecialAmount( BigDecimal productPriceSpecialAmount) { this.productPriceSpecialAmount = productPriceSpecialAmount; } public Set<ProductPriceDescription> getDescriptions() { return descriptions; } public void setDescriptions(Set<ProductPriceDescription> descriptions) { this.descriptions = descriptions; } public boolean isDefaultPrice() { return defaultPrice; } public void setDefaultPrice(boolean defaultPrice) { this.defaultPrice = defaultPrice; } public void setProductAvailability(ProductAvailability productAvailability) { this.productAvailability = productAvailability; } public ProductAvailability getProductAvailability() { return productAvailability; } public void setCode(String code) { this.code = code; } public String getCode() { return code; } public void setProductPriceType(ProductPriceType productPriceType) { this.productPriceType = productPriceType; } public ProductPriceType getProductPriceType() { return productPriceType; } }