package com.salesmanager.core.model.order; import java.math.BigDecimal; import java.util.Date; import java.util.LinkedHashSet; import java.util.Locale; import java.util.Set; import javax.persistence.CascadeType; import javax.persistence.Column; import javax.persistence.Embedded; import javax.persistence.Entity; import javax.persistence.EnumType; import javax.persistence.Enumerated; 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.Valid; import org.hibernate.annotations.OrderBy; import org.hibernate.annotations.Type; import com.salesmanager.core.constants.SchemaConstant; import com.salesmanager.core.model.common.Billing; import com.salesmanager.core.model.common.Delivery; import com.salesmanager.core.model.generic.SalesManagerEntity; import com.salesmanager.core.model.merchant.MerchantStore; import com.salesmanager.core.model.order.orderproduct.OrderProduct; import com.salesmanager.core.model.order.orderstatus.OrderStatus; import com.salesmanager.core.model.order.orderstatus.OrderStatusHistory; import com.salesmanager.core.model.order.payment.CreditCard; import com.salesmanager.core.model.payments.PaymentType; import com.salesmanager.core.model.reference.currency.Currency; import com.salesmanager.core.utils.CloneUtils; @Entity @Table (name="ORDERS", schema = SchemaConstant.SALESMANAGER_SCHEMA) public class Order extends SalesManagerEntity<Long, Order> { /** * */ private static final long serialVersionUID = 1L; @Id @Column (name ="ORDER_ID" , unique=true , nullable=false ) @TableGenerator(name = "TABLE_GEN", table = "SM_SEQUENCER", pkColumnName = "SEQ_NAME", valueColumnName = "SEQ_COUNT", pkColumnValue = "ORDER_ID_SEQ_NEXT_VAL") @GeneratedValue(strategy = GenerationType.TABLE, generator = "TABLE_GEN") private Long id; @Column (name ="ORDER_STATUS") @Enumerated(value = EnumType.STRING) private OrderStatus status; @Temporal(TemporalType.TIMESTAMP) @Column (name ="LAST_MODIFIED") private Date lastModified; //the customer object can be detached. An order can exist and the customer deleted @Column (name ="CUSTOMER_ID") private Long customerId; @Temporal(TemporalType.DATE) @Column (name ="DATE_PURCHASED") private Date datePurchased; //used for an order payable on multiple installment @Temporal(TemporalType.TIMESTAMP) @Column (name ="ORDER_DATE_FINISHED") private Date orderDateFinished; //What was the exchange rate @Column (name ="CURRENCY_VALUE") private BigDecimal currencyValue = new BigDecimal(1);//default 1-1 @Column (name ="ORDER_TOTAL") private BigDecimal total; @Column (name ="IP_ADDRESS") private String ipAddress; @Column (name ="CHANNEL") @Enumerated(value = EnumType.STRING) private OrderChannel channel; @Column (name ="ORDER_TYPE") @Enumerated(value = EnumType.STRING) private OrderType orderType = OrderType.ORDER; @Column (name ="PAYMENT_TYPE") @Enumerated(value = EnumType.STRING) private PaymentType paymentType; @Column (name ="PAYMENT_MODULE_CODE") private String paymentModuleCode; @Column (name ="SHIPPING_MODULE_CODE") private String shippingModuleCode; @Column(name = "CUSTOMER_AGREED") private Boolean customerAgreement = false; @Column(name = "CONFIRMED_ADDRESS") private Boolean confirmedAddress = false; @Embedded private Delivery delivery = null; @Valid @Embedded private Billing billing = null; @Embedded private CreditCard creditCard = null; @ManyToOne(targetEntity = Currency.class) @JoinColumn(name = "CURRENCY_ID") private Currency currency; @Type(type="locale") @Column (name ="LOCALE") private Locale locale; @ManyToOne(targetEntity = MerchantStore.class) @JoinColumn(name="MERCHANTID") private MerchantStore merchant; //@OneToMany(mappedBy = "order") //private Set<OrderAccount> orderAccounts = new HashSet<OrderAccount>(); @OneToMany(mappedBy = "order", cascade = CascadeType.ALL) private Set<OrderProduct> orderProducts = new LinkedHashSet<OrderProduct>(); @OneToMany(mappedBy = "order", cascade = CascadeType.ALL) @OrderBy(clause = "sort_order asc") private Set<OrderTotal> orderTotal = new LinkedHashSet<OrderTotal>(); @OneToMany(mappedBy = "order", cascade = CascadeType.ALL) @OrderBy(clause = "ORDER_STATUS_HISTORY_ID asc") private Set<OrderStatusHistory> orderHistory = new LinkedHashSet<OrderStatusHistory>(); public Order() { } @Column (name ="CUSTOMER_EMAIL_ADDRESS", length=50, nullable=false) private String customerEmailAddress; @Override public Long getId() { return id; } @Override public void setId(Long id) { this.id = id; } public OrderStatus getStatus() { return status; } public void setStatus(OrderStatus status) { this.status = status; } public Date getLastModified() { return CloneUtils.clone(lastModified); } public void setLastModified(Date lastModified) { this.lastModified = CloneUtils.clone(lastModified); } public Date getDatePurchased() { return CloneUtils.clone(datePurchased); } public void setDatePurchased(Date datePurchased) { this.datePurchased = CloneUtils.clone(datePurchased); } public Date getOrderDateFinished() { return CloneUtils.clone(orderDateFinished); } public void setOrderDateFinished(Date orderDateFinished) { this.orderDateFinished = CloneUtils.clone(orderDateFinished); } public BigDecimal getCurrencyValue() { return currencyValue; } public void setCurrencyValue(BigDecimal currencyValue) { this.currencyValue = currencyValue; } public BigDecimal getTotal() { return total; } public void setTotal(BigDecimal total) { this.total = total; } public String getIpAddress() { return ipAddress; } public void setIpAddress(String ipAddress) { this.ipAddress = ipAddress; } public String getPaymentModuleCode() { return paymentModuleCode; } public void setPaymentModuleCode(String paymentModuleCode) { this.paymentModuleCode = paymentModuleCode; } public String getShippingModuleCode() { return shippingModuleCode; } public void setShippingModuleCode(String shippingModuleCode) { this.shippingModuleCode = shippingModuleCode; } public Currency getCurrency() { return currency; } public void setCurrency(Currency currency) { this.currency = currency; } public MerchantStore getMerchant() { return merchant; } public void setMerchant(MerchantStore merchant) { this.merchant = merchant; } public Set<OrderProduct> getOrderProducts() { return orderProducts; } public void setOrderProducts(Set<OrderProduct> orderProducts) { this.orderProducts = orderProducts; } public Set<OrderTotal> getOrderTotal() { return orderTotal; } public void setOrderTotal(Set<OrderTotal> orderTotal) { this.orderTotal = orderTotal; } public Set<OrderStatusHistory> getOrderHistory() { return orderHistory; } public void setOrderHistory(Set<OrderStatusHistory> orderHistory) { this.orderHistory = orderHistory; } public void setDelivery(Delivery delivery) { this.delivery = delivery; } public Delivery getDelivery() { return delivery; } public void setBilling(Billing billing) { this.billing = billing; } public Billing getBilling() { return billing; } public Long getCustomerId() { return customerId; } public void setCustomerId(Long customerId) { this.customerId = customerId; } public String getCustomerEmailAddress() { return customerEmailAddress; } public void setCustomerEmailAddress(String customerEmailAddress) { this.customerEmailAddress = customerEmailAddress; } public void setChannel(OrderChannel channel) { this.channel = channel; } public OrderChannel getChannel() { return channel; } public void setCreditCard(CreditCard creditCard) { this.creditCard = creditCard; } public CreditCard getCreditCard() { return creditCard; } public void setPaymentType(PaymentType paymentType) { this.paymentType = paymentType; } public PaymentType getPaymentType() { return paymentType; } public OrderType getOrderType() { return orderType; } public void setOrderType(OrderType orderType) { this.orderType = orderType; } public Locale getLocale() { return locale; } public void setLocale(Locale locale) { this.locale = locale; } public Boolean getCustomerAgreement() { return customerAgreement; } public void setCustomerAgreement(Boolean customerAgreement) { this.customerAgreement = customerAgreement; } public Boolean getConfirmedAddress() { return confirmedAddress; } public void setConfirmedAddress(Boolean confirmedAddress) { this.confirmedAddress = confirmedAddress; } }