Order.java
package cz.vsb.crm.model;
import jakarta.persistence.CascadeType;
import jakarta.persistence.Column;
import jakarta.persistence.Entity;
import jakarta.persistence.FetchType;
import jakarta.persistence.Index;
import jakarta.persistence.JoinColumn;
import jakarta.persistence.ManyToOne;
import jakarta.persistence.OneToMany;
import jakarta.persistence.Table;
import jakarta.validation.constraints.NotNull;
import lombok.Getter;
import lombok.Setter;
import java.math.BigDecimal;
import java.time.LocalDate;
import java.util.ArrayList;
import java.util.List;
@Getter
@Setter
@Entity
@Table(name = "orders", indexes = {
@Index(name = "idx_order_account", columnList = "account_id"),
@Index(name = "idx_order_lead", columnList = "lead_id"),
@Index(name = "idx_order_created_by", columnList = "created_by"),
@Index(name = "idx_order_date", columnList = "order_date"),
@Index(name = "idx_order_status", columnList = "status")
})
public class Order extends BaseEntity {
@NotNull
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "account_id", nullable = false)
private Account account;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "lead_id")
private Lead lead;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "created_by")
private User createdBy;
@Column(name = "total_amount")
private BigDecimal totalAmount;
@Column(name = "order_date")
private LocalDate orderDate;
private String status = "New";
@Column(name = "order_type")
private String orderType = "Standard";
@OneToMany(mappedBy = "order", cascade = CascadeType.ALL, orphanRemoval = true)
private List<OrderProduct> orderProducts = new ArrayList<>();
public Order() {
this.orderDate = LocalDate.now();
}
}