package io.oasp.gastronomy.restaurant.salesmanagement.dataaccess.api; import java.util.ArrayList; import java.util.List; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.FetchType; import javax.persistence.JoinColumn; import javax.persistence.JoinTable; import javax.persistence.ManyToMany; import javax.persistence.Table; import javax.persistence.Transient; import io.oasp.gastronomy.restaurant.general.common.api.datatype.Money; import io.oasp.gastronomy.restaurant.general.dataaccess.api.ApplicationPersistenceEntity; import io.oasp.gastronomy.restaurant.salesmanagement.common.api.Bill; import io.oasp.gastronomy.restaurant.salesmanagement.common.api.OrderPosition; /** * {@link ApplicationPersistenceEntity Entity} that represents the {@link Bill} related to one or multiple * {@link OrderPosition order positions}. * */ @Entity @Table(name = "Bill") public class BillEntity extends ApplicationPersistenceEntity implements Bill { private static final long serialVersionUID = 1L; private boolean payed; private List<OrderPositionEntity> orderPositions; private Money total; private Money tip; /** * The constructor. */ public BillEntity() { super(); } /** * @return the {@link List} of {@link OrderPositionEntity} objects associated with this {@link BillEntity}. */ @ManyToMany(fetch = FetchType.EAGER) @Column(name = "orderPositionsId") @JoinTable(name = "BillOrderPosition", joinColumns = { @JoinColumn(name = "billId") }, inverseJoinColumns = @JoinColumn(name = "orderPositionsId") ) public List<OrderPositionEntity> getOrderPositions() { return this.orderPositions; } @Override @Transient public List<Long> getOrderPositionIds() { if (this.orderPositions == null) { return null; } List<Long> result = new ArrayList<>(this.orderPositions.size()); for (OrderPositionEntity position : this.orderPositions) { result.add(position.getId()); } return result; } @Override public void setOrderPositionIds(List<Long> ids) { if (ids == null) { this.orderPositions = null; } else { List<OrderPositionEntity> list = new ArrayList<>(ids.size()); for (Long id : ids) { OrderPositionEntity position = new OrderPositionEntity(); position.setId(id); list.add(position); } this.orderPositions = list; } } /** * Sets the field 'orderPositions'. * * @param orderPositions New value for orderPositions */ public void setOrderPositions(List<OrderPositionEntity> orderPositions) { this.orderPositions = orderPositions; } @Override public Money getTotal() { return this.total; } @Override public void setTotal(Money total) { this.total = total; } @Override public Money getTip() { return this.tip; } @Override public void setTip(Money tip) { this.tip = tip; } @Override public boolean isPayed() { return this.payed; } @Override public void setPayed(boolean payed) { this.payed = payed; } }