/*
 * 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.Date;
import java.util.List;

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

import org.hibernate.annotations.Where;

/**
 * 
 * @author Administrador
 */
@Entity
@Table(name = "ESTACION")
@SequenceGenerator(name = "ESTACION_SEQ", sequenceName = "ESTACION_SEQ", allocationSize = 1)
public class Estacion implements Serializable {

	public final static String CONEXION_SANTANDER = "S";
	public final static String CONEXION_BANORTE = "B";
	public final static String CONEXION_SW_MANUAL = "M";
	public final static String CONEXION_SW_PINPAD = "E";

	private static final long serialVersionUID = 1L;
	@Id
	@Basic(optional = false)
	@GeneratedValue(strategy = GenerationType.AUTO, generator = "ESTACION_SEQ")
	@Column(name = "ESTACION_ID")
	private Integer estacionId;
	@Column(name = "NUMCAJA")
	private Long numcaja;
	@Column(name = "NUMPORTAPINPAD")
	private Integer numPortaPinpad;
	@Column(name = "INDLIBERCARD")
	private Boolean utilizaCartaoLibercard;
	@Column(name = "DESCESTACION")
	private String descestacion;
	@Column(name = "DESCMAC")
	private String descmac;
	@Column(name = "INDCONEXIONBANCARIA")
	private String conexionBancaria;
	@Column(name = "ACTIVO")
	private Boolean activo;
	@Column(name = "INDIMPRESIONPINPAD")
	private Boolean pinPadImpresoraPropia;
	@Column(name = "INDPAUSARIMPRESORA")
	private Boolean pausarImpressora;
	@Column(name = "INDTERMINALMULTIPLO")
	private Boolean terminalMultiplo;
	@Column(name = "FECMODIF")
	@Temporal(TemporalType.TIMESTAMP)
	private Date fecmodif;
	@Column(name = "USUARIO_ID")
	private Integer usuarioId;
	@OneToOne
	@JoinColumn(name = "PUNTOVENTA_ID")
	private PuntoVenta puntoVenta;
	@OneToOne
	@JoinColumn(name = "USUARIOBANCARIO_ID")
	private UsuarioBancario usuarioBancario;
	@Column(name = "NOMEIMPRESSORA")
	private String nomeImpressora;
	@Column(name = "NOMEARQUIVOLAYOUT")
	private String nomeArquivoLayout;
	@Column(name = "NOMEIMPRESSORARELATORIO")
	private String nomeImpressoraRelatorio;
	@Column(name = "NOMBIMPRESORASEGURO")
	private String nombImpresoraSeguro;
	@Column(name = "NOMBIMPRESORABPE")
	private String nomeImpressoraBPe;
	@Column(name = "INDSTOCKCENTRAL")
	private Boolean indStockCentral;
	@Column(name = "INDVOUCHER")
	private Boolean indVoucher;
	@Column(name = "TIPOIMPRESSORARELATORIO")
	private Integer tipoImpressoraRelatorio;
	@Column(name = "INDMAPAVIAGEMIMPTERMICA")
	private Boolean indMapaViagemImpTermica;
	@Column(name = "IMEI")
	private String imei;
	@Column(name = "INDEXIBEQRCODEPINPAD")
	private Boolean indExibeQrcodePinpad;
	
	@OneToMany(mappedBy = "estacion", cascade = CascadeType.ALL, fetch = FetchType.EAGER)
	@Where(clause="activo=1")
	private List<EstacionSitef> estacionSitefList;

	@OneToMany(mappedBy = "estacion", cascade = CascadeType.ALL)
	@Where(clause="activo=1")
	private List<EstacionRioCard> estacionRioCardList;
	
	@OneToMany(mappedBy = "estacion", cascade = CascadeType.ALL)
	@Where(clause="activo=1")
	private List<EstacionImpresora> lsEstacionImpresora;
	
	@OneToMany(mappedBy = "estacion", cascade = CascadeType.ALL)
	@Where(clause="activo=1")
	private List<AbastoBoleto> abastoBoletoList;
	
	@OneToMany(mappedBy = "estacion", cascade = CascadeType.ALL)
	@Where(clause="activo=1")
	private List<RequisicionBoleto> requisicionBoletoList;
	
	@OneToMany(mappedBy = "estacion", cascade = CascadeType.ALL)
	@Where(clause="activo=1")
	private List<FolioPreimpreso> folioPreimpresoList;

	public Estacion() {
		super();
	}

	public Estacion(Integer estacionId) {
		this();
		this.estacionId = estacionId;
	}

	public Estacion(Integer estacionId, String descestacion) {
		this();
		this.estacionId = estacionId;
		this.descestacion = descestacion;
	}

	public Integer getEstacionId() {
		return estacionId;
	}

	public void setEstacionId(Integer estacionId) {
		this.estacionId = estacionId;
	}

	public Long getNumcaja() {
		return numcaja;
	}

	public void setNumcaja(Long numcaja) {
		this.numcaja = numcaja;
	}

	public String getDescestacion() {
		return descestacion;
	}

	public void setDescestacion(String descestacion) {
		this.descestacion = descestacion;
	}

	public String getDescmac() {
		return descmac;
	}

	public void setDescmac(String descmac) {
		this.descmac = descmac;
	}

	public Boolean getActivo() {
		return activo;
	}

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

	public Date getFecmodif() {
		return fecmodif;
	}

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

	public Integer getUsuarioId() {
		return usuarioId;
	}

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

	public PuntoVenta getPuntoVenta() {
		return puntoVenta;
	}

	public void setPuntoVenta(PuntoVenta puntoVenta) {
		this.puntoVenta = puntoVenta;
	}

	public UsuarioBancario getUsuarioBancario() {
		return usuarioBancario;
	}

	public void setUsuarioBancario(UsuarioBancario usuarioBancario) {
		this.usuarioBancario = usuarioBancario;
	}

	public String getConexionBancaria() {
		return conexionBancaria;
	}

	public void setConexionBancaria(String conexionBancaria) {
		this.conexionBancaria = conexionBancaria;
	}

	public Boolean getPinPadImpresoraPropia() {
		return pinPadImpresoraPropia;
	}

	public void setPinPadImpresoraPropia(Boolean pinPadImpresoraPropia) {
		this.pinPadImpresoraPropia = pinPadImpresoraPropia;
	}

	public Boolean getPausarImpressora() {
		return pausarImpressora;
	}

	public void setPausarImpressora(Boolean pausarImpressora) {
		this.pausarImpressora = pausarImpressora;
	}

	public String getNomeImpressora() {
		return nomeImpressora;
	}

	public void setNomeImpressora(String nomeImpressora) {
		this.nomeImpressora = nomeImpressora;
	}

	public String getNomeArquivoLayout() {
		return nomeArquivoLayout;
	}

	public void setNomeArquivoLayout(String nomeArquivoLayout) {
		this.nomeArquivoLayout = nomeArquivoLayout;
	}

	public String getNomeImpressoraRelatorio() {
		return nomeImpressoraRelatorio;
	}

	public void setNomeImpressoraRelatorio(String nomeImpressoraRelatorio) {
		this.nomeImpressoraRelatorio = nomeImpressoraRelatorio;
	}

	public List<EstacionSitef> getEstacionSitefList() {
		List<EstacionSitef> tmp = new ArrayList<EstacionSitef>();

		if (estacionSitefList != null) {
			for (EstacionSitef es : estacionSitefList) {
				if (es.getActivo()) {
					tmp.add(es);
				}
			}
		}

		return tmp;
	}

	public void setEstacionSitefList(List<EstacionSitef> estacionSitefList) {
		this.estacionSitefList = estacionSitefList;
	}
	
	public List<EstacionRioCard> getEstacionRioCardList() {
		List<EstacionRioCard> tmp = new ArrayList<EstacionRioCard>();

		if (estacionRioCardList != null) {
			for (EstacionRioCard es : estacionRioCardList) {
				if (es.getActivo()) {
					tmp.add(es);
				}
			}
		}

		return tmp;
	}
	
	public void setEstacionRioCardList(List<EstacionRioCard> estacionRioCardList) {
		this.estacionRioCardList = estacionRioCardList;
	}

	public List<EstacionImpresora> getLsEstacionImpresora() {
		List<EstacionImpresora> tmp = new ArrayList<EstacionImpresora>();

		if (lsEstacionImpresora != null) {
			for (EstacionImpresora es : lsEstacionImpresora) {
				if (es.getActivo()) {
					tmp.add(es);
				}
			}
		}

		return tmp;
	}

	public void setLsEstacionImpresora(List<EstacionImpresora> lsEstacionImpresora) {
		this.lsEstacionImpresora = lsEstacionImpresora;
	}

	public List<AbastoBoleto> getAbastoBoletoList() {
		return abastoBoletoList;
	}

	public void setAbastoBoletoList(List<AbastoBoleto> abastoBoletoList) {
		this.abastoBoletoList = abastoBoletoList;
	}

	public List<RequisicionBoleto> getRequisicionBoletoList() {
		return requisicionBoletoList;
	}

	public void setRequisicionBoletoList(List<RequisicionBoleto> requisicionBoletoList) {
		this.requisicionBoletoList = requisicionBoletoList;
	}

	public List<FolioPreimpreso> getFolioPreimpresoList() {
		return folioPreimpresoList;
	}

	public void setFolioPreimpresoList(List<FolioPreimpreso> folioPreimpresoList) {
		this.folioPreimpresoList = folioPreimpresoList;
	}
	
	public String getNombImpresoraSeguro() {
		return nombImpresoraSeguro;
	}

	public void setNombImpresoraSeguro(String nombImpresoraSeguro) {
		this.nombImpresoraSeguro = nombImpresoraSeguro;
	}
	public Integer getNumPortaPinpad() {
		return numPortaPinpad;
	}

	public void setNumPortaPinpad(Integer numPortaPinpad) {
		this.numPortaPinpad = numPortaPinpad;
	}

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

	@Override
	public boolean equals(Object object) {
		if (!(object instanceof Estacion)) {
			return false;
		}
		Estacion other = (Estacion) object;
		if ((this.estacionId == null && other.estacionId != null) || (this.estacionId != null && !this.estacionId.equals(other.estacionId))) {
			return false;
		}
		return true;
	}

	@Override
	public String toString() {
		return (numcaja != null) ? String.format("%d - %s", numcaja, descestacion) : descestacion;
	}

	/**
	 * @return the terminalMultiplo
	 */
	public Boolean getTerminalMultiplo() {
		return terminalMultiplo;
	}

	/**
	 * @param terminalMultiplo the terminalMultiplo to set
	 */
	public void setTerminalMultiplo(Boolean terminalMultiplo) {
		this.terminalMultiplo = terminalMultiplo;
	}
	public Boolean getUtilizaCartaoLibercard() {
		return utilizaCartaoLibercard;
	}

	public void setUtilizaCartaoLibercard(Boolean utilizaCartaoLibercard) {
		this.utilizaCartaoLibercard = utilizaCartaoLibercard;
	}

	public Boolean getIndStockCentral() {
		return indStockCentral;
	}

	public void setIndStockCentral(Boolean indStockCentral) {
		this.indStockCentral = indStockCentral;
	}

	public String getNomeImpressoraBPe() {
		return nomeImpressoraBPe;
	}

	public void setNomeImpressoraBPe(String nomeImpressoraBPe) {
		this.nomeImpressoraBPe = nomeImpressoraBPe;
	}

	public Boolean getIndVoucher() {
		return indVoucher;
	}

	public void setIndVoucher(Boolean indVoucher) {
		this.indVoucher = indVoucher;
	}

	public Integer getTipoImpressoraRelatorio() {
		return tipoImpressoraRelatorio;
	}

	public void setTipoImpressoraRelatorio(Integer tipoImpressoraRelatorio) {
		this.tipoImpressoraRelatorio = tipoImpressoraRelatorio;
	}

	public Boolean getIndMapaViagemImpTermica() {
		return indMapaViagemImpTermica;
	}

	public void setIndMapaViagemImpTermica(Boolean indMapaViagemImpTermica) {
		this.indMapaViagemImpTermica = indMapaViagemImpTermica;
	}

	public String getImei() {
		return imei;
	}

	public void setImei(String imei) {
		this.imei = imei;
	}

	public Boolean getIndExibeQrcodePinpad() {
		return indExibeQrcodePinpad;
	}

	public void setIndExibeQrcodePinpad(Boolean indExibeQrcodePinpad) {
		this.indExibeQrcodePinpad = indExibeQrcodePinpad;
	}
}
