You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
94 lines
2.5 KiB
Java
94 lines
2.5 KiB
Java
package at.procon.ted.model.entity;
|
|
|
|
import at.procon.dip.architecture.SchemaNames;
|
|
import jakarta.persistence.*;
|
|
import lombok.*;
|
|
import org.hibernate.annotations.JdbcTypeCode;
|
|
import org.hibernate.type.SqlTypes;
|
|
|
|
import java.math.BigDecimal;
|
|
import java.time.OffsetDateTime;
|
|
import java.util.UUID;
|
|
|
|
/**
|
|
* JPA Entity representing a lot within a procurement notice.
|
|
* A procurement document can have multiple lots.
|
|
*
|
|
* @author Martin.Schweitzer@procon.co.at and claude.ai
|
|
*/
|
|
@Entity
|
|
@Table(schema = SchemaNames.TED, name = "procurement_lot", indexes = {
|
|
@Index(name = "idx_lot_document", columnList = "document_id")
|
|
}, uniqueConstraints = {
|
|
@UniqueConstraint(columnNames = {"document_id", "lot_id"})
|
|
})
|
|
@Getter
|
|
@Setter
|
|
@NoArgsConstructor
|
|
@AllArgsConstructor
|
|
@Builder
|
|
public class ProcurementLot {
|
|
|
|
@Id
|
|
@GeneratedValue(strategy = GenerationType.UUID)
|
|
private UUID id;
|
|
|
|
@ManyToOne(fetch = FetchType.LAZY)
|
|
@JoinColumn(name = "document_id", nullable = false)
|
|
private ProcurementDocument document;
|
|
|
|
/**
|
|
* Lot identifier from the XML (e.g., "LOT-0001").
|
|
*/
|
|
@Column(name = "lot_id", nullable = false, length = 50)
|
|
private String lotId;
|
|
|
|
/**
|
|
* Buyer's internal reference for this lot.
|
|
*/
|
|
@Column(name = "internal_id", columnDefinition = "TEXT")
|
|
private String internalId;
|
|
|
|
@Column(name = "title", columnDefinition = "TEXT")
|
|
private String title;
|
|
|
|
@Column(name = "description", columnDefinition = "TEXT")
|
|
private String description;
|
|
|
|
@Column(name = "cpv_codes", columnDefinition = "VARCHAR(100)[]")
|
|
@JdbcTypeCode(SqlTypes.ARRAY)
|
|
private String[] cpvCodes;
|
|
|
|
@Column(name = "nuts_codes", columnDefinition = "VARCHAR(20)[]")
|
|
@JdbcTypeCode(SqlTypes.ARRAY)
|
|
private String[] nutsCodes;
|
|
|
|
@Column(name = "estimated_value", precision = 20, scale = 2)
|
|
private BigDecimal estimatedValue;
|
|
|
|
@Column(name = "estimated_value_currency", length = 3)
|
|
private String estimatedValueCurrency;
|
|
|
|
@Column(name = "duration_value")
|
|
private Double durationValue;
|
|
|
|
@Column(name = "duration_unit", length = 20)
|
|
private String durationUnit;
|
|
|
|
@Column(name = "submission_deadline")
|
|
private OffsetDateTime submissionDeadline;
|
|
|
|
@Column(name = "eu_funded")
|
|
@Builder.Default
|
|
private Boolean euFunded = false;
|
|
|
|
@Column(name = "created_at", nullable = false, updatable = false)
|
|
@Builder.Default
|
|
private OffsetDateTime createdAt = OffsetDateTime.now();
|
|
|
|
@PrePersist
|
|
protected void onCreate() {
|
|
createdAt = OffsetDateTime.now();
|
|
}
|
|
}
|