/**
*
*/
package com.salesmanager.core.model.shoppingcart;
import java.util.HashSet;
import java.util.Set;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Embedded;
import javax.persistence.Entity;
import javax.persistence.EntityListeners;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Index;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.Table;
import javax.persistence.TableGenerator;
import javax.persistence.Transient;
import com.salesmanager.core.constants.SchemaConstant;
import com.salesmanager.core.model.common.audit.AuditListener;
import com.salesmanager.core.model.common.audit.AuditSection;
import com.salesmanager.core.model.common.audit.Auditable;
import com.salesmanager.core.model.generic.SalesManagerEntity;
import com.salesmanager.core.model.merchant.MerchantStore;
/**
* <p>Shopping cart is responsible for storing and carrying
* shopping cart information.Shopping Cart consists of {@link ShoppingCartItem}
* which represents individual lines items associated with the shopping cart</p>
* @author Umesh Awasthi
* version 2.0
*
*/
@Entity
@EntityListeners(value = AuditListener.class)
@Table(name = "SHOPPING_CART", schema=SchemaConstant.SALESMANAGER_SCHEMA, indexes= { @Index(name = "SHP_CART_CODE_IDX", columnList = "SHP_CART_CODE"), @Index(name = "SHP_CART_CUSTOMER_IDX", columnList = "CUSTOMER_ID")})
public class ShoppingCart extends SalesManagerEntity<Long, ShoppingCart> implements Auditable{
private static final long serialVersionUID = 1L;
@Embedded
private AuditSection auditSection = new AuditSection();
@Id
@Column(name = "SHP_CART_ID", unique=true, nullable=false)
@TableGenerator(name = "TABLE_GEN", table = "SM_SEQUENCER", pkColumnName = "SEQ_NAME", valueColumnName = "SEQ_COUNT", pkColumnValue = "SHP_CRT_SEQ_NEXT_VAL")
@GeneratedValue(strategy = GenerationType.TABLE, generator = "TABLE_GEN")
private Long id;
/**
* Will be used to fetch shopping cart model from the controller
* this is a unique code that should be attributed from the client (UI)
*
*/
@Column(name = "SHP_CART_CODE", unique=true, nullable=false)
private String shoppingCartCode;
@OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL, mappedBy = "shoppingCart")
private Set<ShoppingCartItem> lineItems = new HashSet<ShoppingCartItem>();
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name="MERCHANT_ID", nullable=false)
private MerchantStore merchantStore;
@Column(name = "CUSTOMER_ID", nullable = true)
private Long customerId;
@Transient
private boolean obsolete = false;//when all items are obsolete
@Override
public AuditSection getAuditSection() {
return auditSection;
}
@Override
public void setAuditSection(AuditSection audit) {
this.auditSection = audit;
}
@Override
public Long getId() {
return id;
}
@Override
public void setId(Long id) {
this.id = id;
}
public boolean isObsolete() {
return obsolete;
}
public void setObsolete(boolean obsolete) {
this.obsolete = obsolete;
}
public Set<ShoppingCartItem> getLineItems() {
return lineItems;
}
public void setLineItems(Set<ShoppingCartItem> lineItems) {
this.lineItems = lineItems;
}
public String getShoppingCartCode()
{
return shoppingCartCode;
}
public void setShoppingCartCode( String shoppingCartCode )
{
this.shoppingCartCode = shoppingCartCode;
}
public void setCustomerId(Long customerId) {
this.customerId = customerId;
}
public Long getCustomerId() {
return customerId;
}
public void setMerchantStore(MerchantStore merchantStore) {
this.merchantStore = merchantStore;
}
public MerchantStore getMerchantStore() {
return merchantStore;
}
}