package com.oreillyauto.fco.model; import java.math.BigDecimal; import java.util.Date; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.EntityListeners; import javax.persistence.Enumerated; import javax.persistence.EnumType; import javax.persistence.GeneratedValue; import javax.persistence.Id; import javax.persistence.ManyToOne; import javax.persistence.NamedQueries; import javax.persistence.NamedQuery; import javax.persistence.Table; import javax.persistence.Version; import lombok.Data; import lombok.EqualsAndHashCode; @Entity @EntityListeners({TimestampedEntityListener.class}) @Table(name="worksheet_details") @Data @EqualsAndHashCode(of="id", callSuper=false) /* * HQL named queries documented at http://docs.jboss.org/hibernate/core/3.3/reference/en/html/queryhql.html */ @NamedQueries({ @NamedQuery(name="WorksheetDetail.byHeaderObject", query="FROM WorksheetDetail WHERE worksheetHeader.id=:id"), @NamedQuery(name="WorksheetDetail.byHeaderId", query="FROM WorksheetDetail WHERE worksheetHeader.id=:id"), @NamedQuery(name="WorksheetDetail.byDetailType", query="FROM WorksheetDetail WHERE worksheetHeader.id=:id AND itemType=:itemType"), @NamedQuery(name="WorksheetDetail.count", query="SELECT COUNT(*) FROM WorksheetDetail") }) public class WorksheetDetail extends AbstractModel implements TimestampedModel { @Id @GeneratedValue @Column(name = "detail_id") private Long id; @ManyToOne(optional=false) private WorksheetHeader worksheetHeader; // Make this optional = false; force us to have a WorksheetVehicle record // even if it doesn't point to a ShopVehicle record @ManyToOne(optional=false) private WorksheetVehicle worksheetVehicle; @ManyToOne(optional=true) private WorksheetJob worksheetJob; @Column(name="item_sequence", nullable=false) private Integer itemSequence; @Enumerated(EnumType.STRING) @Column(name="item_type", nullable=false) private WorksheetDetailType itemType; @Column(name="item_origin", length=255, nullable=true) private String itemOrigin; @Column(name="item_description", length=255, nullable=true) private String itemDescription; @Column(name="line", length=255, nullable=true) private String line; @Column(name="item", length=255, nullable=true) private String item; @Column(name="item_quantity", nullable=false) private Integer itemQuantity; @Column(name="item_cost", nullable=false) private BigDecimal itemCost; @Column(name="list_price", nullable=true) private BigDecimal listPrice; @Column(name="customer_price", nullable=true) private BigDecimal customerPrice; @Column(name="override_customer_price", nullable=false, columnDefinition="TINYINT") private Boolean overrideCustomerPrice; @Column(name="core_charge", nullable=true) private BigDecimal coreCharge; @Column(name="warranty_description", length=255, nullable=true) private String warrantyDescription; @Column(name="brand_code", length=3, nullable=true) private String brandCode; @Column(name="part_type_id", length=5, nullable=true) private String partTypeId; @Column(name="created_by_userid", nullable=false) private Long createdByUserId; @Column(name="created_datetime", nullable=false) private Date createDateTime; @Column(name="modified_by_userid", nullable=false) private Long modifiedByUserId; @Version @Column(name="modified_datetime", nullable=false) private Date modifiedDateTime; public String getAvailabilityData() { //this is TBD; return null; } public BigDecimal getExtendedCost() { BigDecimal temp = new BigDecimal(itemQuantity); temp = temp.multiply(itemCost); return temp; } public BigDecimal getExtendedPrice() { BigDecimal temp = new BigDecimal(itemQuantity); temp = temp.multiply(customerPrice); return temp; } /**\ * Return a guaranteed non-null vehicle ID for sorting purposes (use in Comparator()) * Modify this method to change the sort order of the vehicles for a worksheet * @return 0 if there is no shop vehicle, otherwise ShopVehicle.id field */ public Long getVehicleSort() { return (worksheetVehicle.getShopVehicle()==null?0:worksheetVehicle.getShopVehicle().getId()); } public WorksheetDetail initDefaultValues(){ modifiedByUserId = 0L; return this; } }