/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.rjconsultores.ventaboletos.entidad;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;

import javax.persistence.Basic;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.OneToMany;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;

import org.zkoss.util.resource.Labels;

/**
 * 
 * @author Administrador
 */
@Entity
@SequenceGenerator(name = "RESERVACION_CTRL_SEQ", sequenceName = "RESERVACION_CTRL_SEQ", allocationSize = 1)
@Table(name = "RESERVACION_CTRL")
public class ReservacionCtrl implements Serializable {

	private static final long serialVersionUID = 1L;
	@Id
	@Basic(optional = false)
	@GeneratedValue(strategy = GenerationType.AUTO, generator = "RESERVACION_CTRL_SEQ")
	@Column(name = "RESERVACIONCTRL_ID")
	private Integer reservacionctrlId;
	@Column(name = "DESCCONFIG")
	private String descConfig;
	@Column(name = "FECINICIO")
	@Temporal(TemporalType.TIMESTAMP)
	private Date fecinicio;
	@Column(name = "FECFINAL")
	@Temporal(TemporalType.TIMESTAMP)
	private Date fecfinal;
	@Column(name = "TIEMPOLIBERACION")
	@Temporal(TemporalType.TIMESTAMP)
	private Date tiempoliberacion;
	@Column(name = "TIEMPOLIBERACIONINTERNET")
	@Temporal(TemporalType.TIMESTAMP)
	private Date tiempoliberacioninternet;
	@Column(name = "TIEMPOPREVIO")
	@Temporal(TemporalType.TIMESTAMP)
	private Date tiempoprevio;
	@Column(name = "TIEMPOPREVIOINTERNET")
	@Temporal(TemporalType.TIMESTAMP)
	private Date tiempopreviointernet;
	@Column(name = "NUMASIENTOSCORRIDA")
	private Short numasientoscorrida;
	@Column(name = "INDAPLICLUN")
	private Boolean indapliclun;
	@Column(name = "INDAPLICMAR")
	private Boolean indaplicmar;
	@Column(name = "INDAPLICMIE")
	private Boolean indaplicmie;
	@Column(name = "INDAPLICJUE")
	private Boolean indaplicjue;
	@Column(name = "INDAPLICVIE")
	private Boolean indaplicvie;
	@Column(name = "INDAPLICSAB")
	private Boolean indaplicsab;
	@Column(name = "INDAPLICDOM")
	private Boolean indaplicdom;
	@Basic(optional = false)
	@Column(name = "FECMODIF")
	@Temporal(TemporalType.TIMESTAMP)
	private Date fecmodif;
	@Column(name = "ACTIVO")
	private Boolean activo;
	@Column(name = "USUARIO_ID")
	private Integer usuarioId;
	@OneToMany(mappedBy = "reservacionCtrl", cascade = CascadeType.ALL)
	private List<ReservacionCategoria> reservacionCategoriaList;
	@OneToMany(mappedBy = "reservacionCtrl", cascade = CascadeType.ALL)
	private List<ReservacionMercado> reservacionMercadoList;
	@OneToMany(mappedBy = "reservacionCtrl", cascade = CascadeType.ALL)
	private List<ReservacionMarca> reservacionMarcaList;
	@OneToMany(mappedBy = "reservacionCtrl", cascade = CascadeType.ALL)
	private List<ReservacionClase> reservacionClaseList;
	@OneToMany(mappedBy = "reservacionCtrl", cascade = CascadeType.ALL)
	private List<ReservacionPuntoVenta> reservacionPuntoVentaList;
	@Column(name = "TIEMPOLIBERACIONCADUC")
	@Temporal(TemporalType.TIMESTAMP)
	private Date tiempoliberacionCaduc;
	@Column(name = "TIEMPOLIBERACIONINTERNETCADUC")
	@Temporal(TemporalType.TIMESTAMP)
	private Date tiempoliberacioninternetCaduc;
	@Column(name = "INDTIPORESERVA")
	private Boolean indTipoReserva;
	@Column(name = "INDSEMLIBAUTOMATICA")
	private Boolean indSemLiberacaoAutomatica;
	
	@Column(name = "TEMPOCONFIRMACAO")
	@Temporal(TemporalType.TIMESTAMP)
	private Date tempoConfirmacao;

	public ReservacionCtrl() {
	}

	public ReservacionCtrl(Integer reservacionctrlId) {
		this.reservacionctrlId = reservacionctrlId;
	}

	public ReservacionCtrl(Integer reservacionctrlId, Date fecmodif) {
		this.reservacionctrlId = reservacionctrlId;
		this.fecmodif = fecmodif;
	}

	public Integer getReservacionctrlId() {
		return reservacionctrlId;
	}

	public void setReservacionctrlId(Integer reservacionctrlId) {
		this.reservacionctrlId = reservacionctrlId;
	}

	public Date getFecinicio() {
		return fecinicio;
	}

	public void setFecinicio(Date fecinicio) {
		this.fecinicio = fecinicio;
	}

	public Date getFecfinal() {
		return fecfinal;
	}

	public void setFecfinal(Date fecfinal) {
		this.fecfinal = fecfinal;
	}

	public Date getTiempoliberacion() {
		return tiempoliberacion;
	}

	public void setTiempoliberacion(Integer hora, Integer minuto) {
		Calendar c = Calendar.getInstance();
		c.set(Calendar.YEAR, 1970);
		c.set(Calendar.DAY_OF_MONTH, 1);
		c.set(Calendar.MONTH, 0);
		c.set(Calendar.HOUR_OF_DAY, 0);
		c.set(Calendar.MINUTE, 0);
		c.set(Calendar.MILLISECOND, 0);
		c.set(Calendar.SECOND, 0);
		c.set(Calendar.HOUR_OF_DAY, 0);
		c.set(Calendar.MINUTE, 0);
		c.add(Calendar.HOUR_OF_DAY, hora);
		c.add(Calendar.MINUTE, minuto);

		setTiempoliberacion(c.getTime());
	}

	public void setTiempoliberacion(Date tiempoliberacion) {
		this.tiempoliberacion = tiempoliberacion;
	}

	public Date getTiempoliberacioninternet() {
		return tiempoliberacioninternet;
	}

	public void setTiempoliberacioninternet(Integer hora, Integer minuto) {
		Calendar c = Calendar.getInstance();
		c.set(Calendar.YEAR, 1970);
		c.set(Calendar.DAY_OF_MONTH, 1);
		c.set(Calendar.MONTH, 0);
		c.set(Calendar.HOUR_OF_DAY, 0);
		c.set(Calendar.MINUTE, 0);
		c.set(Calendar.MILLISECOND, 0);
		c.set(Calendar.SECOND, 0);
		c.set(Calendar.HOUR_OF_DAY, 0);
		c.set(Calendar.MINUTE, 0);
		c.add(Calendar.HOUR_OF_DAY, hora);
		c.add(Calendar.MINUTE, minuto);

		setTiempoliberacioninternet(c.getTime());
	}

	public void setTiempoliberacioninternet(Date tiempoliberacioninternet) {
		this.tiempoliberacioninternet = tiempoliberacioninternet;
	}

	public Date getTiempoprevio() {
		return tiempoprevio;
	}

	public void setTiempoprevio(Integer hora, Integer minuto) {
		Calendar c = Calendar.getInstance();
		c.set(Calendar.YEAR, 1970);
		c.set(Calendar.DAY_OF_MONTH, 1);
		c.set(Calendar.MONTH, 0);
		c.set(Calendar.HOUR_OF_DAY, 0);
		c.set(Calendar.MINUTE, 0);
		c.set(Calendar.MILLISECOND, 0);
		c.set(Calendar.SECOND, 0);
		c.set(Calendar.HOUR_OF_DAY, 0);
		c.set(Calendar.MINUTE, 0);
		c.add(Calendar.HOUR_OF_DAY, hora);
		c.add(Calendar.MINUTE, minuto);

		setTiempoprevio(c.getTime());
	}

	public void setTiempoprevio(Date tiempoprevio) {
		this.tiempoprevio = tiempoprevio;
	}

	public Date getTiempopreviointernet() {
		return tiempopreviointernet;
	}

	public void setTiempopreviointernet(Integer hora, Integer minuto) {
		Calendar c = Calendar.getInstance();
		c.set(Calendar.YEAR, 1970);
		c.set(Calendar.DAY_OF_MONTH, 1);
		c.set(Calendar.MONTH, 0);
		c.set(Calendar.HOUR_OF_DAY, 0);
		c.set(Calendar.MINUTE, 0);
		c.set(Calendar.MILLISECOND, 0);
		c.set(Calendar.SECOND, 0);
		c.set(Calendar.HOUR_OF_DAY, 0);
		c.set(Calendar.MINUTE, 0);
		c.add(Calendar.HOUR_OF_DAY, hora);
		c.add(Calendar.MINUTE, minuto);

		setTiempopreviointernet(c.getTime());
	}

	public void setTiempopreviointernet(Date tiempopreviointernet) {
		this.tiempopreviointernet = tiempopreviointernet;
	}

	public Short getNumasientoscorrida() {
		return numasientoscorrida;
	}

	public void setNumasientoscorrida(Short numasientoscorrida) {
		this.numasientoscorrida = numasientoscorrida;
	}

	public Boolean getIndaplicdom() {
		return indaplicdom;
	}

	public void setIndaplicdom(Boolean indaplicdom) {
		this.indaplicdom = indaplicdom;
	}

	public Boolean getIndaplicjue() {
		return indaplicjue;
	}

	public void setIndaplicjue(Boolean indaplicjue) {
		this.indaplicjue = indaplicjue;
	}

	public Boolean getIndapliclun() {
		return indapliclun;
	}

	public void setIndapliclun(Boolean indapliclun) {
		this.indapliclun = indapliclun;
	}

	public Boolean getIndaplicmar() {
		return indaplicmar;
	}

	public void setIndaplicmar(Boolean indaplicmar) {
		this.indaplicmar = indaplicmar;
	}

	public Boolean getIndaplicmie() {
		return indaplicmie;
	}

	public void setIndaplicmie(Boolean indaplicmie) {
		this.indaplicmie = indaplicmie;
	}

	public Boolean getIndaplicsab() {
		return indaplicsab;
	}

	public void setIndaplicsab(Boolean indaplicsab) {
		this.indaplicsab = indaplicsab;
	}

	public Boolean getIndaplicvie() {
		return indaplicvie;
	}

	public void setIndaplicvie(Boolean indaplicvie) {
		this.indaplicvie = indaplicvie;
	}

	public Date getFecmodif() {
		return fecmodif;
	}

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

	public Boolean getActivo() {
		return activo;
	}

	public void setActivo(Boolean activo) {
		this.activo = activo;
	}

	public Integer getUsuarioId() {
		return usuarioId;
	}

	public void setUsuarioId(Integer usuarioId) {
		this.usuarioId = usuarioId;
	}

	public List<ReservacionCategoria> getReservacionCategoriaList() {
		List<ReservacionCategoria> rcList = new ArrayList<ReservacionCategoria>();
		if (reservacionCategoriaList != null) {
			for (ReservacionCategoria rc : this.reservacionCategoriaList) {
				if (rc.getActivo() == Boolean.TRUE) {
					rcList.add(rc);
				}
			}
		}

		return rcList;
	}

	public void setReservacionCategoriaList(List<ReservacionCategoria> reservacionCategoriaList) {
		this.reservacionCategoriaList = reservacionCategoriaList;
	}

	public List<ReservacionMercado> getReservacionMercadoList() {
		List<ReservacionMercado> rmList = new ArrayList<ReservacionMercado>();
		for (ReservacionMercado rc : this.reservacionMercadoList) {
			if (rc.getActivo() == Boolean.TRUE) {
				rmList.add(rc);
			}
		}
		return rmList;
	}

	public void setReservacionMercadoList(List<ReservacionMercado> reservacionMercadoList) {
		this.reservacionMercadoList = reservacionMercadoList;
	}

	public List<ReservacionMarca> getReservacionMarcaList() {
		List<ReservacionMarca> rmList = new ArrayList<ReservacionMarca>();
		for (ReservacionMarca rm : this.reservacionMarcaList) {
			if (rm.getActivo() == Boolean.TRUE) {
				rmList.add(rm);
			}
		}
		return rmList;
	}

	public void setReservacionMarcaList(List<ReservacionMarca> reservacionMarcaList) {
		this.reservacionMarcaList = reservacionMarcaList;
	}

	public List<ReservacionClase> getReservacionClaseList() {
		List<ReservacionClase> rcList = new ArrayList<ReservacionClase>();
		for (ReservacionClase rc : this.reservacionClaseList) {
			if (rc.getActivo() == Boolean.TRUE) {
				rcList.add(rc);
			}
		}
		return rcList;
	}

	public void setReservacionClaseList(List<ReservacionClase> reservacionClaseList) {
		this.reservacionClaseList = reservacionClaseList;
	}

	public String getDescConfig() {
		return descConfig;
	}

	public void setDescConfig(String descConfig) {
		this.descConfig = descConfig;
	}

	public Date getTiempoliberacionCaduc() {
		return tiempoliberacionCaduc;
	}

	public void setTiempoliberacionCaduc(Date tiempoliberacionCaduc) {
		this.tiempoliberacionCaduc = tiempoliberacionCaduc;
	}

	public Date getTiempoliberacioninternetCaduc() {
		return tiempoliberacioninternetCaduc;
	}

	public void setTiempoliberacioninternetCaduc(Date tiempoliberacioninternetCaduc) {
		this.tiempoliberacioninternetCaduc = tiempoliberacioninternetCaduc;
	}
	
	public void setTiempoliberacionCaduc(Integer hora, Integer minuto) {
		Calendar c = Calendar.getInstance();
		c.set(Calendar.YEAR, 1970);
		c.set(Calendar.DAY_OF_MONTH, 1);
		c.set(Calendar.MONTH, 0);
		c.set(Calendar.HOUR_OF_DAY, 0);
		c.set(Calendar.MINUTE, 0);
		c.set(Calendar.MILLISECOND, 0);
		c.set(Calendar.SECOND, 0);
		c.set(Calendar.HOUR_OF_DAY, 0);
		c.set(Calendar.MINUTE, 0);
		c.add(Calendar.HOUR_OF_DAY, hora);
		c.add(Calendar.MINUTE, minuto);

		setTiempoliberacionCaduc(c.getTime());
	}
	
	public void setTiempoliberacioninternetCaduc(Integer hora, Integer minuto) {
		Calendar c = Calendar.getInstance();
		c.set(Calendar.YEAR, 1970);
		c.set(Calendar.DAY_OF_MONTH, 1);
		c.set(Calendar.MONTH, 0);
		c.set(Calendar.HOUR_OF_DAY, 0);
		c.set(Calendar.MINUTE, 0);
		c.set(Calendar.MILLISECOND, 0);
		c.set(Calendar.SECOND, 0);
		c.set(Calendar.HOUR_OF_DAY, 0);
		c.set(Calendar.MINUTE, 0);
		c.add(Calendar.HOUR_OF_DAY, hora);
		c.add(Calendar.MINUTE, minuto);
		
		setTiempoliberacioninternetCaduc(c.getTime());
	}

	public List<ReservacionPuntoVenta> getReservacionPuntoVentaList() {
		List<ReservacionPuntoVenta> rpvList = new ArrayList<ReservacionPuntoVenta>();
		for (ReservacionPuntoVenta rpv : this.reservacionPuntoVentaList) {
			if (rpv.getActivo() == Boolean.TRUE) {
				rpvList.add(rpv);
			}
		}
		return rpvList;
	}

	public void setReservacionPuntoVentaList(List<ReservacionPuntoVenta> reservacionPuntoventaList) {
		this.reservacionPuntoVentaList = reservacionPuntoventaList;
	}

	@Override
	public int hashCode() {
		int hash = 0;
		hash += (reservacionctrlId != null ? reservacionctrlId.hashCode() : 0);
		return hash;
	}

	@Override
	public boolean equals(Object object) {
		// TODO: Warning - this method won't work in the case the id fields are not set
		if (!(object instanceof ReservacionCtrl)) {
			return false;
		}
		ReservacionCtrl other = (ReservacionCtrl) object;
		if ((this.reservacionctrlId == null && other.reservacionctrlId != null) || (this.reservacionctrlId != null && !this.reservacionctrlId.equals(other.reservacionctrlId))) {
			return false;
		}
		return true;
	}

	@Override
	public String toString() {
		return "com.rjconsultores.ventaboletos.entidad.ReservacionCtrl[reservacionctrlId=" + reservacionctrlId + "]";
	}

	public Boolean getIndTipoReserva() {
		return indTipoReserva;
	}

	public void setIndTipoReserva(Boolean indTipoReserva) {
		this.indTipoReserva = indTipoReserva;
	}

	public Boolean getIndSemLiberacaoAutomatica() {
		return indSemLiberacaoAutomatica;
	}

	public void setIndSemLiberacaoAutomatica(Boolean indSemLiberacaoAutomatica) {
		this.indSemLiberacaoAutomatica = indSemLiberacaoAutomatica;
	}
	
	public String getDescTipoReserva() {
		if(getIndSemLiberacaoAutomatica() != null && getIndSemLiberacaoAutomatica()) {
			return Labels.getLabel("editarConfiguracionReservacionController.ra3.value");
		} else if(getIndTipoReserva() != null && getIndTipoReserva()) {
			return Labels.getLabel("editarConfiguracionReservacionController.ra2.value");
		} else {
			return Labels.getLabel("editarConfiguracionReservacionController.ra1.value");
		}
	}
	
	public void setTempoConfirmacao(Integer hora, Integer minuto) {
		Calendar c = Calendar.getInstance();
		c.set(Calendar.YEAR, 1970);
		c.set(Calendar.DAY_OF_MONTH, 1);
		c.set(Calendar.MONTH, 0);
		c.set(Calendar.HOUR_OF_DAY, 0);
		c.set(Calendar.MINUTE, 0);
		c.set(Calendar.MILLISECOND, 0);
		c.set(Calendar.SECOND, 0);
		c.set(Calendar.HOUR_OF_DAY, 0);
		c.set(Calendar.MINUTE, 0);
		c.add(Calendar.HOUR_OF_DAY, hora);
		c.add(Calendar.MINUTE, minuto);

		setTempoConfirmacao(c.getTime());
	}

	public Date getTempoConfirmacao() {
		return tempoConfirmacao;
	}

	public void setTempoConfirmacao(Date tempoConfirmacao) {
		this.tempoConfirmacao = tempoConfirmacao;
	}
	
}
