package org.dicadeveloper.weplantaforest.receipt;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import org.dicadeveloper.weplantaforest.cart.Cart;
import org.dicadeveloper.weplantaforest.user.User;
import org.dicadeveloper.weplantaforest.views.Views;
import com.fasterxml.jackson.annotation.JsonView;
import lombok.Getter;
import lombok.Setter;
@Entity
@Getter
@Setter
public class Receipt {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@JsonView(Views.ReceiptOverview.class)
@Column(name = "_receiptId")
private Long receiptId;
@Column(name = "_invoiceNumber", unique = true)
@JsonView(Views.ReceiptOverview.class)
private String invoiceNumber;
@OneToMany(fetch = FetchType.LAZY)
@JoinColumn(name = "_receipt__receiptId")
private List<Cart> carts = new ArrayList<Cart>();
@Column(name = "_createdOn")
@JsonView(Views.ReceiptOverview.class)
private final Long createdOn;
@Column(name = "_sentOn")
private Long sentOn;
@ManyToOne(fetch = FetchType.LAZY, targetEntity = User.class)
@JoinColumn(name = "_ownerId")
private User owner;
public Receipt() {
createdOn = System.currentTimeMillis();
}
public String getMaskedInvoiceNumber() {
return invoiceNumber.replace("/", "_");
}
public static String demaskInvoiceNumber(final String invoiceNumber) {
return invoiceNumber.replace("_", "/");
}
public void addCart(final Cart cart) {
if (!carts.contains(cart)) {
carts.add(cart);
}
}
public void removeCart(final Cart cart) {
carts.remove(cart);
}
public void clearCarts() {
carts.clear();
}
public Date getCreatedOnAsDate() {
if (createdOn / 1000000000000000000l >= 1) {
return new Date(createdOn / 1000000l);
}
return new Date(createdOn);
}
public void setSent() {
sentOn = System.nanoTime();
}
public boolean isSent() {
return sentOn == null;
}
}