package com.rjconsultores.ventaboletos.entidad;

import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;

import javax.persistence.Basic;
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 javax.persistence.SequenceGenerator;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;

import org.hibernate.annotations.Where;

import com.rjconsultores.ventaboletos.enums.SituacaoVendaPacote;

@Entity
@Table(name = "VENDA_PACOTE")
@SequenceGenerator(name = "VENDA_PACOTE_SEQ", sequenceName = "VENDA_PACOTE_SEQ", allocationSize = 1)
public class VendaPacote implements Serializable {

	private static final long serialVersionUID = 1L;

	@Id
	@Basic(optional = false)
	@GeneratedValue(strategy = GenerationType.AUTO, generator = "VENDA_PACOTE_SEQ")
	@Column(name = "VENDAPACOTE_ID")
	private Long vendapacoteId;
	
	@Temporal(TemporalType.TIMESTAMP)
	@Column(name = "DATAVENDA")
	private Date datavenda;
	
	@Temporal(TemporalType.DATE)
	@Column(name = "DATAPACOTE")
	private Date datapacote;
	
	@Column(name = "NUMOPERACION")
	private String numoperacion;

	@ManyToOne(fetch = FetchType.LAZY)
	@JoinColumn(name = "PACOTE_ID")
	private Pacote pacote;
	
	@OneToMany(fetch = FetchType.LAZY, mappedBy = "vendaPacote")
	@Where(clause = "activo=1")
	private List<EnderecoApanhe> enderecoApanhes;
	
	@Column(name = "INDCANCELADO")
	private Boolean indcancelado;
	
	@Temporal(TemporalType.TIMESTAMP)
	@Column(name = "DATACANCELAMENTO")
	private Date datacancelamento;
	
	@Column(name = "USUARIO_CANCELAMENTO_ID")
	private Integer usuarioCancelamentoId;

	@ManyToOne(fetch = FetchType.LAZY)
	@JoinColumn(name = "USUARIO_ID")
	private Usuario usuario;
	
	@Column(name = "SUBTOTAL")
	private BigDecimal subtotal;
	
	@Column(name = "DESCONTO")
	private BigDecimal desconto;
	
	@Column(name = "TOTAL")
	private BigDecimal total;
	
	@ManyToOne
	@JoinColumn(name = "CLIENTEPACOTE_ID")
	private ClientePacote clientePacote;
	
	@Column(name = "MOTIVOCANCELVENDAPACOTE_ID")
	private Integer motivoCancelVendaPacoteId;
	
	@Column(name = "SITUACAO")
	private SituacaoVendaPacote situacao;
	
	@Column(name = "DATA_CONFIRMACAO_RESERVA")
	private Date dataConfirmacaoReserva;

	@Column(name = "USUARIO_CONFIRMACAO_RESERVA_ID")
	private Long usuarioConfirmacaoReserva;
	
	@Temporal(TemporalType.TIMESTAMP)
	@Column(name = "FECMODIF")
	private Date fecmodif;

	public Long getVendapacoteId() {
		return vendapacoteId;
	}

	public void setVendapacoteId(Long vendapacoteId) {
		this.vendapacoteId = vendapacoteId;
	}

	public Date getDatavenda() {
		return datavenda;
	}

	public void setDatavenda(Date datavenda) {
		this.datavenda = datavenda;
	}

	public Date getDatapacote() {
		return datapacote;
	}

	public void setDatapacote(Date datapacote) {
		this.datapacote = datapacote;
	}

	public Pacote getPacote() {
		return pacote;
	}

	public void setPacote(Pacote pacote) {
		this.pacote = pacote;
	}

	public Boolean getIndcancelado() {
		return indcancelado;
	}

	public void setIndcancelado(Boolean indcancelado) {
		this.indcancelado = indcancelado;
	}

	public Date getDatacancelamento() {
		return datacancelamento;
	}

	public void setDatacancelamento(Date datacancelamento) {
		this.datacancelamento = datacancelamento;
	}

	public Integer getUsuarioCancelamentoId() {
		return usuarioCancelamentoId;
	}

	public void setUsuarioCancelamentoId(Integer usuarioCancelamentoId) {
		this.usuarioCancelamentoId = usuarioCancelamentoId;
	}

	public BigDecimal getSubtotal() {
		return subtotal;
	}

	public void setSubtotal(BigDecimal subtotal) {
		this.subtotal = subtotal;
	}

	public BigDecimal getDesconto() {
		return desconto;
	}

	public void setDesconto(BigDecimal desconto) {
		this.desconto = desconto;
	}

	public BigDecimal getTotal() {
		return total;
	}

	public void setTotal(BigDecimal total) {
		this.total = total;
	}

	public String getNumoperacion() {
		return numoperacion;
	}

	public void setNumoperacion(String numoperacion) {
		this.numoperacion = numoperacion;
	}

	public List<EnderecoApanhe> getEnderecoApanhes() {
		return enderecoApanhes;
	}

	public void setEnderecoApanhes(List<EnderecoApanhe> enderecoApanhes) {
		this.enderecoApanhes = enderecoApanhes;
	}

	public Usuario getUsuario() {
		return usuario;
	}

	public void setUsuario(Usuario usuario) {
		this.usuario = usuario;
	}

	public Date getFecmodif() {
		return fecmodif;
	}

	public void setFecmodif(Date fecmodif) {
		this.fecmodif = fecmodif;
	}

	public ClientePacote getClientePacote() {
		return clientePacote;
	}

	public void setClientePacote(ClientePacote clientePacote) {
		this.clientePacote = clientePacote;
	}

	public Integer getMotivoCancelVendaPacoteId() {
		return motivoCancelVendaPacoteId;
	}

	public void setMotivoCancelVendaPacoteId(Integer motivoCancelVendaPacoteId) {
		this.motivoCancelVendaPacoteId = motivoCancelVendaPacoteId;
	}

	public SituacaoVendaPacote getSituacao() {
		return situacao;
	}

	public void setSituacao(SituacaoVendaPacote situacao) {
		this.situacao = situacao;
	}

	public Date getDataConfirmacaoReserva() {
		return dataConfirmacaoReserva;
	}

	public void setDataConfirmacaoReserva(Date dataConfirmacaoReserva) {
		this.dataConfirmacaoReserva = dataConfirmacaoReserva;
	}

	public Long getUsuarioConfirmacaoReserva() {
		return usuarioConfirmacaoReserva;
	}

	public void setUsuarioConfirmacaoReserva(Long usuarioConfirmacaoReserva) {
		this.usuarioConfirmacaoReserva = usuarioConfirmacaoReserva;
	}

}
