/*
 * 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.Date;

import javax.persistence.Basic;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinColumns;
import javax.persistence.ManyToOne;
import javax.persistence.OneToOne;
import javax.persistence.Table;
import javax.persistence.SequenceGenerator;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;

import com.rjconsultores.ventaboletos.utilerias.DateUtil;
import org.hibernate.annotations.NotFound;
import org.hibernate.annotations.NotFoundAction;

/**
 * 
 * @author Rafius
 */
@Entity
@SequenceGenerator(name = "CORRIDA_TRAMO_SEQ", sequenceName = "CORRIDA_TRAMO_SEQ", allocationSize = 1)
@Table(name = "CORRIDA_TRAMO")
public class CorridaTramo implements Serializable, Comparable<CorridaTramo> {

	private static final long serialVersionUID = 1L;
	@Id
	@Basic(optional = false)
	@Column(name = "CORRIDATRAMO_ID")
	@GeneratedValue(strategy = GenerationType.AUTO, generator = "CORRIDA_TRAMO_SEQ")
	private Integer corridatramoId;
	@OneToOne
	@NotFound(action = NotFoundAction.IGNORE)
	@JoinColumns({
			@JoinColumn(name = "CORRIDA_ID", referencedColumnName = "CORRIDA_ID"),
			@JoinColumn(name = "FECCORRIDA", referencedColumnName = "FECCORRIDA") })
	private Corrida corrida;
	@Column(name = "NUMSECUENCIA")
	private Short numsecuencia;
	@Column(name = "FECHORSALIDA")
	@Temporal(TemporalType.TIMESTAMP)
	private Date fechorsalida;
	@Column(name = "FECHORLLEGADA")
	@Temporal(TemporalType.TIMESTAMP)
	private Date fechorllegada;
	@Column(name = "FECHORTARJETAVIAJE")
	@Temporal(TemporalType.TIMESTAMP)
	private Date fechortarjetaviaje;
	@Column(name = "USUARIOTARJETAVIAJE_ID")
	private Integer usuariotarjetaviajeId;
	@Column(name = "NUMSECORIGEN")
	private Short numsecorigen;
	@Column(name = "NUMSECDESTINO")
	private Short numsecdestino;
	@Column(name = "ACTIVO")
	private Integer activo;
	@Column(name = "FECMODIF")
	@Temporal(TemporalType.TIMESTAMP)
	private Date fecmodif;
	@Column(name = "USUARIO_ID")
	private Integer usuarioId;
	@JoinColumn(name = "TRAMO_ID", referencedColumnName = "TRAMO_ID")
	@ManyToOne
	private Tramo tramo;
	@JoinColumn(name = "ORIGEN_ID", referencedColumnName = "PARADA_ID")
	@ManyToOne
	private Parada origem;
	@JoinColumn(name = "DESTINO_ID", referencedColumnName = "PARADA_ID")
	@ManyToOne
	private Parada destino;
	@JoinColumn(name = "NODO_ID", referencedColumnName = "NODO_ID")
	@ManyToOne
	private Nodo nodo;
	@JoinColumn(name = "CONDUCTOR1_ID", referencedColumnName = "CONDUCTOR_ID")
	@ManyToOne
	private Conductor conductor;
	@JoinColumn(name = "CONDUCTOR2_ID", referencedColumnName = "CONDUCTOR_ID")
	@ManyToOne
	private Conductor conductor1;
	@JoinColumn(name = "AUTOBUS_ID", referencedColumnName = "AUTOBUS_ID")
	@ManyToOne
	private Autobus autobus;
	@Column(name = "fechorsalidaoriginal")
	@Temporal(javax.persistence.TemporalType.TIMESTAMP)
	private Date fechorSalidaOriginal;
	@Column(name = "TIEMPOESTANCIA")
	@Temporal(javax.persistence.TemporalType.TIMESTAMP)
	private Date tiempoEstancia;
	@Column(name = "INDMANTTARJETA")
	private Boolean indmanttarjeta;
	@Column(name = "FOLIOTARJETAVIAJE")
	private String folioTarjeta;
	@Column(name = "PLATAFORMA")
	private String plataforma;
	@Column(name = "TIPO_PASSAGEM")
	private String tipoPassagem;

	@Column(name = "FECHORSALIDAH")
	@Temporal(TemporalType.TIMESTAMP)
	private Date fechorsalidaH;
	@Column(name = "FECHORLLEGADAH")
	@Temporal(TemporalType.TIMESTAMP)
	private Date fechorllegadaH;

	@Column(name = "fechorsalidaoriginalh")
	@Temporal(javax.persistence.TemporalType.TIMESTAMP)
	private Date fechorSalidaOriginalH;
	
	public CorridaTramo(CorridaTramo corridaTramo) {

		this.numsecuencia =  corridaTramo.getNumsecuencia();

		this.fechorsalida = corridaTramo.getFechorsalida();

		this.fechorllegada = corridaTramo.getFechorllegada();

		this.fechortarjetaviaje =corridaTramo.getFechortarjetaviaje();
		
		this.usuariotarjetaviajeId = corridaTramo.getUsuariotarjetaviajeId();
		
		this.numsecorigen = corridaTramo.getNumsecorigen();
		
		this.numsecdestino = corridaTramo.getNumsecdestino();
		
		this.activo = corridaTramo.getActivo();
		
		this.fecmodif = corridaTramo.getFecmodif();
		
		this.usuarioId = corridaTramo.getUsuarioId();
		
		this.tramo = corridaTramo.getTramo();
		
		this.origem = corridaTramo.getOrigem();
		
		this.destino = corridaTramo.getDestino();
		
		this.nodo = corridaTramo.getNodo();
		
		this.conductor = corridaTramo.getConductor();
		
		this.conductor1 =corridaTramo.getConductor1();
		
		this.autobus = corridaTramo.getAutobus();

		this.fechorSalidaOriginal = corridaTramo.getFechorSalidaOriginal();
		
		this.tiempoEstancia = corridaTramo.getTiempoEstancia();
		
		this.indmanttarjeta = corridaTramo.getIndmanttarjeta();
		
		this.folioTarjeta = corridaTramo.getFolioTarjeta();
		
		this.plataforma = corridaTramo.getPlataforma();
		
		this.tipoPassagem = corridaTramo.getTipoPassagem();
		
		this.fechorsalidaH = corridaTramo.getFechorsalidaH();
		
		this.fechorllegadaH = corridaTramo.getFechorllegadaH();

		 this.fechorSalidaOriginalH = corridaTramo.getFechorSalidaOriginalH();
	}
	
	
	public Boolean getIndmanttarjeta() {
		return indmanttarjeta;
	}

	public void setIndmanttarjeta(Boolean indmanttarjeta) {
		this.indmanttarjeta = indmanttarjeta;
	}

	public Date getTiempoEstancia() {
		return tiempoEstancia;
	}

	public void setTiempoEstancia(Date tiempoEstancia) {
		this.tiempoEstancia = tiempoEstancia;
	}

	public CorridaTramo() {
	}

	public CorridaTramo(Integer corridatramoId) {
		this.corridatramoId = corridatramoId;
	}

	public Date getFechorSalidaOriginal() {
		return fechorSalidaOriginal;
	}

	public void setFechorSalidaOriginal(Date fechorSalidaOriginal) {
		if (fechorSalidaOriginal != null) {
			fechorSalidaOriginal = DateUtil.normalizar(fechorSalidaOriginal);
		}
		this.fechorSalidaOriginal = fechorSalidaOriginal;
	}

	public Integer getCorridatramoId() {
		return corridatramoId;
	}

	public void setCorridatramoId(Integer corridatramoId) {
		this.corridatramoId = corridatramoId;
	}

	public Corrida getCorrida() {
		return corrida;
	}

	public void setCorrida(Corrida corrida) {
		this.corrida = corrida;
	}

	public Short getNumsecuencia() {
		return numsecuencia;
	}

	public void setNumsecuencia(Short numsecuencia) {
		this.numsecuencia = numsecuencia;
	}

	public Date getFechorsalida() {
		return fechorsalida;
	}

	public void setFechorsalida(Date fechorsalida) {
		if (fechorsalida != null) {
			fechorsalida = DateUtil.normalizar(fechorsalida);
		}
		this.fechorsalida = fechorsalida;
	}

	public Date getFechorllegada() {
		return fechorllegada;
	}

	public void setFechorllegada(Date fechorllegada) {
		if (fechorllegada != null) {
			fechorllegada = DateUtil.normalizar(fechorllegada);
		}
		this.fechorllegada = fechorllegada;
	}

	public Date getFechortarjetaviaje() {
		return fechortarjetaviaje;
	}

	public void setFechortarjetaviaje(Date fechortarjetaviaje) {
		this.fechortarjetaviaje = fechortarjetaviaje;
	}

	public Integer getUsuariotarjetaviajeId() {
		return usuariotarjetaviajeId;
	}

	public void setUsuariotarjetaviajeId(Integer usuariotarjetaviajeId) {
		this.usuariotarjetaviajeId = usuariotarjetaviajeId;
	}

	public Short getNumsecorigen() {
		return numsecorigen;
	}

	public void setNumsecorigen(Short numsecorigen) {
		this.numsecorigen = numsecorigen;
	}

	public Short getNumsecdestino() {
		return numsecdestino;
	}

	public void setNumsecdestino(Short numsecdestino) {
		this.numsecdestino = numsecdestino;
	}

	public Integer getActivo() {
		return activo;
	}

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

	public com.rjconsultores.ventaboletos.entidad.Parada getDestino() {
		return destino;
	}

	public void setDestino(com.rjconsultores.ventaboletos.entidad.Parada destino) {
		this.destino = destino;
	}

	public com.rjconsultores.ventaboletos.entidad.Parada getOrigem() {
		return origem;
	}

	public void setOrigem(com.rjconsultores.ventaboletos.entidad.Parada origem) {
		this.origem = origem;
	}

	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 Tramo getTramo() {
		return tramo;
	}

	public void setTramo(Tramo tramo) {
		this.tramo = tramo;
	}

	public Nodo getNodo() {
		return nodo;
	}

	public void setNodo(Nodo nodo) {
		this.nodo = nodo;
	}

	public Conductor getConductor() {
		return conductor;
	}

	public void setConductor(Conductor conductor) {
		this.conductor = conductor;
	}

	public Conductor getConductor1() {
		return conductor1;
	}

	public void setConductor1(Conductor conductor1) {
		this.conductor1 = conductor1;
	}

	public Autobus getAutobus() {
		return autobus;
	}

	public void setAutobus(Autobus autobus) {
		this.autobus = autobus;
	}

	public String getFolioTarjeta() {
		return folioTarjeta;
	}

	public void setFolioTarjeta(String folioTarjeta) {
		this.folioTarjeta = folioTarjeta;
	}

	public String getPlataforma() {
		return plataforma;
	}

	public void setPlataforma(String plataforma) {
		this.plataforma = plataforma;
	}

	public Date getFechorsalidaH() {
		return fechorsalidaH;
	}

	public void setFechorsalidaH(Date fechorsalidaH) {
		this.fechorsalidaH = fechorsalidaH;
	}

	public Date getFechorllegadaH() {
		return fechorllegadaH;
	}

	public void setFechorllegadaH(Date fechorllegadaH) {
		this.fechorllegadaH = fechorllegadaH;
	}

	public Date getFechorSalidaOriginalH() {
		return fechorSalidaOriginalH;
	}

	public void setFechorSalidaOriginalH(Date fechorSalidaOriginalH) {
		this.fechorSalidaOriginalH = fechorSalidaOriginalH;
	}

	public String getTipoPassagem() {
		return tipoPassagem;
	}

	public void setTipoPassagem(String tipoPassagem) {
		this.tipoPassagem = tipoPassagem;
	}

	@Override
	public int hashCode() {
		int hash = 0;
		hash += (corridatramoId != null ? corridatramoId.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 CorridaTramo)) {
			return false;
		}
		CorridaTramo other = (CorridaTramo) object;
		if ((this.corridatramoId == null && other.corridatramoId != null) || (this.corridatramoId != null && !this.corridatramoId.equals(other.corridatramoId))) {
			return false;
		}
		return true;
	}

	@Override
	public String toString() {
		return "com.rjconsultores.ventaboletos.entidad.test.CorridaTramo[corridatramoId=" + corridatramoId + "]";
	}
	
	@Override
	public int compareTo(CorridaTramo corridaTramo) {
        return this.numsecuencia.compareTo(corridaTramo.getNumsecuencia());
    }
}
