package models; import com.avaje.ebean.Expr; import javax.persistence.*; import java.util.Date; import java.util.List; @Entity @Table( name = "POS_FORECAST", uniqueConstraints = {@UniqueConstraint(columnNames={"order_id", "termin"})} ) public class ForecastModel extends AuditedModel { public static Finder<Long, ForecastModel> find = new Finder<>(ForecastModel.class); @Id @GeneratedValue(strategy = GenerationType.IDENTITY) public Long id; public String comment; public String confidence; public String forecastedBy; public Date forecastedAt; public Date producedAt; public Date failedAt; public String failureReason; public String termin; public boolean invoiced = false; @ManyToOne @JoinColumn(name = "order_id") public OrderModel order; public ForecastModel() { } public static ForecastModel findByMetrefAndTermin(String metref, String termin) { return find .where() .and(Expr.ieq("order.met_ref", metref), Expr.eq("termin", termin)) .findUnique(); } public static ForecastModel findLastForecastForMetref(String met_ref) { List<ForecastModel> forecasts = find.where() .and(Expr.eq("order.met_ref", met_ref), Expr.isNotNull("producedAt")) .orderBy("forecastedAt desc").findList(); if ( forecasts == null || forecasts.size() == 0) return null; else { return forecasts.get(0); } } public static List<ForecastModel> findByMetrefAndDateRange(String metref, Date start, Date end) { return find .where() .ieq("order.met_ref", metref) .ge("producedAt", start) // >= .le("producedAt", end) // <= .findList(); } public ForecastModel(String comment, String confidence, String forecastedBy, Date forecastedAt, Date producedAt, String termin, OrderModel order) { this.comment = comment; this.confidence = confidence; this.forecastedBy = forecastedBy; this.forecastedAt = forecastedAt; this.producedAt = producedAt; this.termin = termin; this.order = order; this.invoiced = false; } }