package com.rjconsultores.ventaboletos.entidad;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.Collections;
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.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import javax.persistence.Transient;

import org.apache.commons.lang.BooleanUtils;
import org.apache.commons.lang.StringUtils;

import br.com.rjconsultores.auditador.annotations.AuditarAtributo;
import br.com.rjconsultores.auditador.annotations.AuditarClasse;
import br.com.rjconsultores.auditador.annotations.AuditarEntidade;
import br.com.rjconsultores.auditador.annotations.AuditarID;
import br.com.rjconsultores.auditador.annotations.AuditarLista;
import br.com.rjconsultores.auditador.annotations.NaoAuditar;
import br.com.rjconsultores.auditador.interfaces.Auditavel;

/**
 * 
 * @author Rafius
 */
@Entity
@SequenceGenerator(name = "ESQUEMA_CORRIDA_SEQ", sequenceName = "ESQUEMA_CORRIDA_SEQ", allocationSize = 1)
@Table(name = "ESQUEMA_CORRIDA")
@AuditarClasse(nome = "ESQUEMA_CORRIDA", tela = "auditarClasse.EsquemaCorrida")
public class EsquemaCorrida implements Serializable, Auditavel<EsquemaCorrida> {

	private static final long serialVersionUID = 1L;
	@Id
	@Basic(optional = false)
	@Column(name = "ESQUEMACORRIDA_ID")
	@GeneratedValue(strategy = GenerationType.AUTO, generator = "ESQUEMA_CORRIDA_SEQ")
	@AuditarID
	private Integer esquemacorridaId;
	
	@Column(name = "HORASALIDA")
	@Temporal(TemporalType.TIME)
	@AuditarAtributo(pattern = "HH:mm")
	private Date horasalida;
	
	@Column(name = "HORAINI_NAO_IMP_BPE")
	@Temporal(TemporalType.TIME)
	@AuditarAtributo(pattern = "HH:mm")
	private Date horaIniNaoImpBPE;
	
	@Column(name = "HORAFIM_NAO_IMP_BPE")
	@Temporal(TemporalType.TIME)
	@AuditarAtributo(pattern = "HH:mm")
	private Date horaFimNaoImpBPE;
	
	@Column(name = "INDPISOEXTRA")
	private Boolean pisoExtra;
	
	@Column(name = "INDLUNES")
	private Boolean indlunes;
	
	@Column(name = "INDMARTES")
	private Boolean indmartes;
	
	@Column(name = "INDMIERCOLES")
	private Boolean indmiercoles;
	
	@Column(name = "INDJUEVES")
	private Boolean indjueves;
	
	@Column(name = "INDVIERNES")
	private Boolean indviernes;
	
	@Column(name = "INDSABADO")
	private Boolean indsabado;
	
	@Column(name = "INDDOMINGO")
	private Boolean inddomingo;
	
	@Column(name = "CANTPARADOS")
	private Integer cantparados;
	
	@Column(name = "ACTIVO")
	@NaoAuditar
	private Boolean activo;
	
	@Column(name = "FECMODIF")
	@Temporal(TemporalType.TIMESTAMP)
	@NaoAuditar
	private Date fecmodif;
	
	@Column(name = "USUARIO_ID")
	@NaoAuditar
	private Integer usuarioId;
	
	@Column(name = "DIAGRAMAAUTOBUS_ID")
	private Integer diagramaAutobusId;
	
	@Column(name = "STATUSCORRIDA")
	private String statusCorrida;
	
	@JoinColumn(name = "RUTA_ID", referencedColumnName = "RUTA_ID")
	@ManyToOne
	private Ruta ruta;
	
	@JoinColumn(name = "ROLOPERATIVO_ID", referencedColumnName = "ROLOPERATIVO_ID")
	@ManyToOne(cascade = CascadeType.ALL, fetch = FetchType.LAZY)
	private RolOperativo rolOperativo;
	
	@JoinColumn(name = "MARCA_ID", referencedColumnName = "MARCA_ID")
	@ManyToOne
	private Marca marca;
	
	@JoinColumn(name = "ESQUEMAOPERACIONAL_ID", referencedColumnName = "ESQUEMAOPERACIONAL_ID")
	@ManyToOne(cascade = CascadeType.ALL, fetch = FetchType.EAGER)
	@AuditarEntidade
	private EsquemaOperacional esquemaOperacional;
	
	@JoinColumn(name = "EMPRESACORRIDA_ID", referencedColumnName = "EMPRESA_ID")
	@ManyToOne
	private Empresa empresa;
	
	@JoinColumn(name = "EMPRESAINGRESO_ID", referencedColumnName = "EMPRESA_ID")
	@ManyToOne
	private Empresa empresa1;
	
	@JoinColumn(name = "CLASESERVICIO_ID", referencedColumnName = "CLASESERVICIO_ID")
	@ManyToOne(cascade = CascadeType.ALL, fetch = FetchType.LAZY)
	private ClaseServicio claseServicio;
	
	@OneToMany(cascade = CascadeType.ALL)
	@JoinColumn(name = "ESQUEMACORRIDA_ID", referencedColumnName = "ESQUEMACORRIDA_ID")
	@AuditarLista(auditarEntidades = true, nome = "Localidade")
	private List<EsquemaTramo> esquemaTramoList;
	
	@OneToMany(cascade = CascadeType.PERSIST, fetch = FetchType.LAZY)
	@JoinColumn(name = "ESQUEMACORRIDA_ID", referencedColumnName = "ESQUEMACORRIDA_ID")
	@AuditarLista(auditarEntidades = true, nome = "Cotas")
	private List<EsquemaAsiento> esquemaAsientoList;
	
	@Column(name = "tipocorrida")
	private String tipocorrida;
	
	@JoinColumn(name = "ESQUEMAREBOTE_ID", referencedColumnName = "ESQUEMACORRIDA_ID")
	@ManyToOne(cascade = CascadeType.ALL, fetch = FetchType.LAZY)
	private EsquemaCorrida esquemaCorridaRebote;
	
	@JoinColumn(name = "DIVISION_ID", referencedColumnName = "DIVISION_ID")
	@ManyToOne(cascade = CascadeType.ALL, fetch = FetchType.LAZY)
	private Division division;
	
	@Column(name = "NUMCORRIDA")
	private Integer numCorrida;
	
	@Column(name = "NUMCORRIDAPISOEXTRA")
	private Integer numCorridaPisoExtra;
	
	@Column(name = "NUMCORRIDAPISOEXTRA2")
	private Integer numCorridaPisoExtra2;
	
	@Column(name = "INDGENERAFERIADO")
	private String indGeneraFeriado;
	
	@Column(name = "CANTDIASGENERACION")
	private Integer cantDiasGeneracion;
	
	@Column(name = "ESQUEMAAGRUPACION_ID")
	private Integer esquemaAgrupacionId;
	
	@Column(name = "INFOCORRIDA")
	private String infoCorrida;
	
	@Column(name = "INDCORRIDAEXTRA")
	private Boolean indCorridaExtra;
	
	@Column(name = "INDDIASIMDIANAO")
	private Boolean indDiaSimDiaNao;
	
	@JoinColumn(name = "AUTOBUS_ID", referencedColumnName = "AUTOBUS_ID")
	@ManyToOne(cascade = CascadeType.ALL, fetch = FetchType.LAZY)
	private Autobus autoBus;
	
	@OneToMany(mappedBy = "esquemaCorrida", cascade = CascadeType.ALL, fetch = FetchType.LAZY)
	@AuditarLista(auditarEntidades = true, nome = "Embarque/Desembarque")
	private List<EsquemaCorridaEmbarqueDesembarque> lsEsquemaCorridaEmbarqueDesembarque;
	
	@OneToMany(mappedBy = "esquemaCorrida", cascade = CascadeType.ALL, fetch = FetchType.LAZY)
	@AuditarLista(auditarEntidades = true, nome = "Info Tramo>")
	private List<EsquemaCorridaInfo> lsEsquemaCorridaInfo;
	
	@Transient
	@NaoAuditar
	private EsquemaCorrida esquemaCorridaClone;
	
	@Column(name = "ISFLEXBUS")
	private Boolean isFlexBus;
	
	@Column(name = "OCUPACAO_MINIMA")
	private Integer ocupacaoMinima;
	
	@Column(name = "HORAS_CONFIRMACAO")
	private Integer horasParaConfirmacao;
	
	@Column(name = "MINUTOS_CONFIRMACAO")
	private Integer minutosParaConfirmacao;
	
	@Column(name = "ISAUTOMACAOHORARIOEXTRA")
	private Boolean isAutomacaoHorarioExtra;
	
	@Column(name = "TAXA_OCUPACAO")
	private Integer taxaOcupacao;
	
	@Column(name = "HORAS_AUTOMACAO_HE_DE")
	private Integer horasAutomacaoHEDe;
	
	@Column(name = "MINUTOS_AUTOMACAO_HE_DE")
	private Integer minutosAutomacaoHEDe;
	
	@Column(name = "HORAS_AUTOMACAO_HE_ATE")
	private Integer horasAutomacaoHEAte;
	
	@Column(name = "MINUTOS_AUTOMACAO_HE_ATE")
	private Integer minutosAutomacaoHEAte;
	
	@JoinColumn(name = "ROLOPERATIVO_SERVICOEXTRA_ID", referencedColumnName = "ROLOPERATIVO_ID")
	@ManyToOne(cascade = CascadeType.ALL, fetch = FetchType.LAZY)
	private RolOperativo rolOperativoServicoExtra;
	
	@Column(name = "NUMCORRIDA_SERVICOEXTRA")
	private Integer numCorridaServicoExtra;
	
	@Column(name = "BLOQUEIAINTERNET_HE")
	private Boolean blolqueiaInternetHE;
	
	@Column(name = "PLATAFORMASERVICOEXTRA")
	private String plataformaServicoExtra;
	
	@Column(name = "HORASALIDA_EXTRA")
	@Temporal(TemporalType.TIME)
	@AuditarAtributo(pattern = "HH:mm")
	private Date horasalidaExtra;
	
	@Column(name = "INDBLOQUEIAWEBAPOSSAIDA")
	private Boolean indBloqueiaWebAposSaida;
	
	@Column(name = "INDNAOIMPRIMEBPE")
	private String indNaoImprimeBpe;
	
	@Column(name = "INDCORRIDADESATIVADA")
	private Boolean indCorridaDesativada;
	
	public enum GerarFeriado {
		// Declaração dos enum
		GERARSEMPRE("GERAR SEMPRE", "S"),

		GERARQUANDOFERIADO("GERAR SÓ QUANDO FOR FERIADO", "F"),

		GERARQUANDONAOFERIADO("GERAR QUANDO NÂO FOR FERIADO", "N");

		// Definição das constantes
		public final String valor;
		public final String descricao;

		public String valor() {
			return this.valor;
		}

		public String descricao() {
			return this.descricao;
		}

		private GerarFeriado(String descricao, String valor) {
			this.descricao = descricao;
			this.valor = valor;
		}
	}

	public String getTipocorrida() {
		return tipocorrida;
	}

	public void setTipocorrida(String tipocorrida) {
		this.tipocorrida = tipocorrida;
	}

	public EsquemaCorrida() {
	}

	public EsquemaCorrida(Integer esquemacorridaId) {
		this.esquemacorridaId = esquemacorridaId;
	}

	public Integer getEsquemacorridaId() {
		return esquemacorridaId;
	}

	public void setEsquemacorridaId(Integer esquemacorridaId) {
		this.esquemacorridaId = esquemacorridaId;
	}

	public Date getHorasalida() {
		return horasalida;
	}

	public void setHorasalida(Date horasalida) {
		this.horasalida = horasalida;
	}

	public Integer getCantparados() {
		return cantparados;
	}

	public void setCantparados(Integer cantparados) {
		this.cantparados = cantparados;
	}

	public Boolean getInddomingo() {
		return inddomingo;
	}

	public void setInddomingo(Boolean inddomingo) {
		this.inddomingo = inddomingo;
	}

	public Boolean getIndjueves() {
		return indjueves;
	}

	public void setIndjueves(Boolean indjueves) {
		this.indjueves = indjueves;
	}

	public Boolean getIndlunes() {
		return indlunes;
	}

	public void setIndlunes(Boolean indlunes) {
		this.indlunes = indlunes;
	}

	public Boolean getIndmartes() {
		return indmartes;
	}

	public void setIndmartes(Boolean indmartes) {
		this.indmartes = indmartes;
	}

	public Boolean getIndmiercoles() {
		return indmiercoles;
	}

	public void setIndmiercoles(Boolean indmiercoles) {
		this.indmiercoles = indmiercoles;
	}

	public Boolean getIndsabado() {
		return indsabado;
	}

	public void setIndsabado(Boolean indsabado) {
		this.indsabado = indsabado;
	}

	public Boolean getIndviernes() {
		return indviernes;
	}

	public void setIndviernes(Boolean indviernes) {
		this.indviernes = indviernes;
	}

	public Date getFecmodif() {
		return fecmodif;
	}

	public Boolean getActivo() {
		return activo;
	}

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

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

	public Integer getUsuarioId() {
		return usuarioId;
	}

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

	public Ruta getRuta() {
		return ruta;
	}

	public void setRuta(Ruta ruta) {
		this.ruta = ruta;
	}

	public RolOperativo getRolOperativo() {
		return rolOperativo;
	}

	public void setRolOperativo(RolOperativo rolOperativo) {
		this.rolOperativo = rolOperativo;
	}

	public Marca getMarca() {
		return marca;
	}

	public void setMarca(Marca marca) {
		this.marca = marca;
	}

	public EsquemaOperacional getEsquemaOperacional() {
		return esquemaOperacional;
	}

	public void setEsquemaOperacional(EsquemaOperacional esquemaOperacional) {
		this.esquemaOperacional = esquemaOperacional;
	}

	public Empresa getEmpresa() {
		return empresa;
	}

	public void setEmpresa(Empresa empresa) {
		this.empresa = empresa;
	}

	public Empresa getEmpresa1() {
		return empresa1;
	}

	public void setEmpresa1(Empresa empresa1) {
		this.empresa1 = empresa1;
	}

	public ClaseServicio getClaseServicio() {
		return claseServicio;
	}

	public void setClaseServicio(ClaseServicio claseServicio) {
		this.claseServicio = claseServicio;
	}

	public String getStatusCorrida() {
		return statusCorrida;
	}

	public void setStatusCorrida(String statusCorrida) {
		this.statusCorrida = statusCorrida;
	}

	public Integer getDiagramaAutobusId() {
		return diagramaAutobusId;
	}

	public void setDiagramaAutobusId(Integer diagramaAutobusId) {
		this.diagramaAutobusId = diagramaAutobusId;
	}

	public Division getDivision() {
		return division;
	}

	public void setDivision(Division division) {
		this.division = division;
	}

	public Boolean getPisoExtra() {
		return pisoExtra;
	}

	public void setPisoExtra(Boolean pisoExtra) {
		this.pisoExtra = pisoExtra;
	}

	public List<EsquemaTramo> getEsquemaTramoList() {
		if (this.esquemaTramoList != null) {
			List<EsquemaTramo> esquemaList = new ArrayList<EsquemaTramo>();

			for (EsquemaTramo ec : this.esquemaTramoList) {
				if (ec.getActivo()) {
					esquemaList.add(ec);
				}
			}
			return esquemaList;
		}
		return null;

	}

	public void setEsquemaTramoList(List<EsquemaTramo> esquemaTramoList) {
		this.esquemaTramoList = esquemaTramoList;
	}

	public void clearEsquemaAsiento(){
		if (esquemaAsientoList !=null){
			while(!esquemaAsientoList.isEmpty()) { 
				esquemaAsientoList.remove(0); 
			}		
		}
	}
	
	public List<EsquemaAsiento> getEsquemaAsientoList() {
		if (esquemaAsientoList == null){
			return Collections.emptyList();
		}
		
		List<EsquemaAsiento> esquemaList = new ArrayList<EsquemaAsiento>();
		for (EsquemaAsiento ec : this.esquemaAsientoList) {
			if (ec.getActivo()) {
				esquemaList.add(ec);
			}
		}
		return esquemaList;
	}

	public void setEsquemaAsientoList(List<EsquemaAsiento> esquemaAsientoList) {
		this.esquemaAsientoList = esquemaAsientoList;
	}

	public EsquemaCorrida getEsquemaCorridaRebote() {
		return esquemaCorridaRebote;
	}

	public void setEsquemaCorridaRebote(EsquemaCorrida esquemaCorridaRebote) {
		this.esquemaCorridaRebote = esquemaCorridaRebote;
	}


	public Integer getNumCorrida() {
		return numCorrida;
	}

	public void setNumCorrida(Integer numCorrida) {
		this.numCorrida = numCorrida;
	}

	public Integer getNumCorridaPisoExtra() {
		return numCorridaPisoExtra;
	}

	public void setNumCorridaPisoExtra(Integer numCorridaPisoExtra) {
		this.numCorridaPisoExtra = numCorridaPisoExtra;
	}

	public String getIndGeneraFeriado() {
		return indGeneraFeriado;
	}

	public void setIndGeneraFeriado(String indGeneraFeriado) {
		this.indGeneraFeriado = indGeneraFeriado;
	}

	public Integer getCantDiasGeneracion() {
		return cantDiasGeneracion;
	}

	public void setCantDiasGeneracion(Integer cantDiasGeracion) {
		this.cantDiasGeneracion = cantDiasGeracion;
	}

	public Integer getEsquemaAgrupacionId() {
		return esquemaAgrupacionId;
	}

	public void setEsquemaAgrupacionId(Integer esquemaAgrupacionId) {
		this.esquemaAgrupacionId = esquemaAgrupacionId;
	}

	public String getInfoCorrida() {
		return infoCorrida;
	}

	public void setInfoCorrida(String infoCorrida) {
		this.infoCorrida = infoCorrida;
	}
	
	public Boolean getIndCorridaExtra() {
		return indCorridaExtra;
	}

	public void setIndCorridaExtra(Boolean indCorridaExtra) {
		this.indCorridaExtra = indCorridaExtra;
	}
	
	public Boolean getIndDiaSimDiaNao() {
		return indDiaSimDiaNao;
	}

	public void setIndDiaSimDiaNao(Boolean indDiaSimDiaNao) {
		this.indDiaSimDiaNao = indDiaSimDiaNao;
	}

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

	@Override
	public String toString() {
		return this.getNumCorrida() + (StringUtils.isNotEmpty(this.getInfoCorrida()) ? " - " + this.getInfoCorrida() : "") + " - "+esquemacorridaId;
	}

	public Autobus getAutoBus() {
		return autoBus;
	}

	public void setAutoBus(Autobus autoBus) {
		this.autoBus = autoBus;
	}

	public List<EsquemaCorridaEmbarqueDesembarque> getLsEsquemaCorridaEmbarqueDesembarque() {
		return lsEsquemaCorridaEmbarqueDesembarque;
	}

	public void setLsEsquemaCorridaEmbarqueDesembarque(List<EsquemaCorridaEmbarqueDesembarque> lsEsquemaCorridaEmbarqueDesembarque) {
		this.lsEsquemaCorridaEmbarqueDesembarque = lsEsquemaCorridaEmbarqueDesembarque;
	}

	@Override
	public void clonar() throws CloneNotSupportedException {
		esquemaCorridaClone = new EsquemaCorrida();
		esquemaCorridaClone = (EsquemaCorrida) this.clone();
		
		if(this.getAutoBus() != null) {
			this.getAutoBus().clonar();
			esquemaCorridaClone.setAutoBus(this.getAutoBus().getCloneObject());
		}
		
		if(this.getClaseServicio() != null) {
			this.getClaseServicio().clonar();
			esquemaCorridaClone.setClaseServicio(this.getClaseServicio().getCloneObject());
		}
		
		if(this.getDivision() != null) {
			this.getDivision().clonar();
			esquemaCorridaClone.setDivision(this.getDivision().getCloneObject());
		}
		
		if(this.getEmpresa() != null) {
			this.getEmpresa().clonar();
			esquemaCorridaClone.setEmpresa(this.getEmpresa().getCloneObject());
		}
		
		if(this.getEmpresa1() != null) {
			this.getEmpresa1().clonar();
			esquemaCorridaClone.setEmpresa1(this.getEmpresa1().getCloneObject());
		}
		
		if(this.getMarca() != null) {
			this.getMarca().clonar();
			esquemaCorridaClone.setMarca(this.getMarca().getCloneObject());
		}
		
		if(this.getEsquemaCorridaRebote() != null) {
			this.getEsquemaCorridaRebote().clonar();
			esquemaCorridaClone.setEsquemaCorridaRebote(this.getEsquemaCorridaRebote().getCloneObject());
		}
		
		if(this.getEsquemaOperacional() != null) {
			this.getEsquemaOperacional().clonar();
			esquemaCorridaClone.setEsquemaOperacional(this.getEsquemaOperacional().getCloneObject());
		}
		
		if(this.getRolOperativo() != null) {
			this.getRolOperativo().clonar();
			esquemaCorridaClone.setRolOperativo(this.getRolOperativo().getCloneObject());
		}
		
		if(this.getRuta() != null) {
			this.getRuta().clonar();
			esquemaCorridaClone.setRuta(this.getRuta().getCloneObject());
		}

		if(this.getEsquemaAsientoList() != null) {
			List<EsquemaAsiento> lsClones = new ArrayList<EsquemaAsiento>();
			for (EsquemaAsiento esquemaAsiento : this.getEsquemaAsientoList()) {
				if(BooleanUtils.isTrue(esquemaAsiento.getActivo())) {
					esquemaAsiento.clonar();
					lsClones.add(esquemaAsiento.getCloneObject());
				}
			}
			esquemaCorridaClone.setEsquemaAsientoList(lsClones);
		}
		
		if(this.getEsquemaTramoList() != null) {
			List<EsquemaTramo> lsClones = new ArrayList<EsquemaTramo>(); 
			for (EsquemaTramo esquemaTramo : this.getEsquemaTramoList()) {
				if(BooleanUtils.isTrue(esquemaTramo.getActivo())) {
					esquemaTramo.clonar();
					lsClones.add(esquemaTramo.getCloneObject());
				}
			}
			esquemaCorridaClone.setEsquemaTramoList(lsClones);
		}

		if(this.getLsEsquemaCorridaEmbarqueDesembarque() != null) {
			List<EsquemaCorridaEmbarqueDesembarque> lsClones = new ArrayList<EsquemaCorridaEmbarqueDesembarque>();
			for (EsquemaCorridaEmbarqueDesembarque esquemaCorridaEmbarqueDesembarque : this.getLsEsquemaCorridaEmbarqueDesembarque()) {
				if(BooleanUtils.isTrue(esquemaCorridaEmbarqueDesembarque.getActivo())) {
					esquemaCorridaEmbarqueDesembarque.clonar();
					lsClones.add(esquemaCorridaEmbarqueDesembarque.getCloneObject());
				}
			}
			esquemaCorridaClone.setLsEsquemaCorridaEmbarqueDesembarque(lsClones);
		}
		
		if(this.getLsEsquemaCorridaInfo() != null) {
			List<EsquemaCorridaInfo> lsClones = new ArrayList<EsquemaCorridaInfo>();
			for (EsquemaCorridaInfo esquemaCorridaInfo : this.getLsEsquemaCorridaInfo()) {
				if(BooleanUtils.isTrue(esquemaCorridaInfo.getActivo())) {
					esquemaCorridaInfo.clonar();
					lsClones.add(esquemaCorridaInfo.getCloneObject());
				}
			}
			esquemaCorridaClone.setLsEsquemaCorridaInfo(lsClones);
		}

	}

	@Override
	public EsquemaCorrida getCloneObject() throws CloneNotSupportedException {
		return esquemaCorridaClone;
	}

	@Override
	public String getTextoInclusaoExclusao() {
		return String.format("ID [%s] - Número serviço [%s]", getEsquemacorridaId(), getNumCorrida());
	}

	public Integer getNumCorridaPisoExtra2() {
		return numCorridaPisoExtra2;
	}

	public void setNumCorridaPisoExtra2(Integer numCorridaPisoExtra2) {
		this.numCorridaPisoExtra2 = numCorridaPisoExtra2;
	}

	public Boolean getIsFlexBus() {
		return isFlexBus == null ? false : isFlexBus;
	}

	public void setIsFlexBus(Boolean isFlexBus) {
		this.isFlexBus = isFlexBus;
	}

	public Integer getHorasParaConfirmacao() {
		return horasParaConfirmacao == null ? 0 : horasParaConfirmacao;
	}

	public void setHorasParaConfirmacao(Integer horasParaConfirmacao) {
		this.horasParaConfirmacao = horasParaConfirmacao;
	}

	public Integer getMinutosParaConfirmacao() {
		return minutosParaConfirmacao == null ? 0 : minutosParaConfirmacao;
	}

	public void setMinutosParaConfirmacao(Integer minutosParaConfirmacao) {
		this.minutosParaConfirmacao = minutosParaConfirmacao;
	}

	public Integer getOcupacaoMinima() {
		return ocupacaoMinima == null ? 0 : ocupacaoMinima;
	}

	public void setOcupacaoMinima(Integer ocupacaoMinima) {
		this.ocupacaoMinima = ocupacaoMinima;
	}

	public Boolean getIsAutomacaoHorarioExtra() {
		return isAutomacaoHorarioExtra == null ? false : isAutomacaoHorarioExtra;
	}

	public void setIsAutomacaoHorarioExtra(Boolean isAutomacaoHorarioExtra) {
		this.isAutomacaoHorarioExtra = isAutomacaoHorarioExtra;
	}

	public Integer getTaxaOcupacao() {
		return taxaOcupacao;
	}

	public void setTaxaOcupacao(Integer taxaOcupacao) {
		this.taxaOcupacao = taxaOcupacao;
	}

	public Integer getHorasAutomacaoHEDe() {
		return horasAutomacaoHEDe;
	}

	public void setHorasAutomacaoHEDe(Integer horasAutomacaoHEDe) {
		this.horasAutomacaoHEDe = horasAutomacaoHEDe;
	}

	public Integer getMinutosAutomacaoHEDe() {
		return minutosAutomacaoHEDe;
	}

	public void setMinutosAutomacaoHEDe(Integer minutosAutomacaoHEDe) {
		this.minutosAutomacaoHEDe = minutosAutomacaoHEDe;
	}

	public Integer getHorasAutomacaoHEAte() {
		return horasAutomacaoHEAte;
	}

	public void setHorasAutomacaoHEAte(Integer horasAutomacaoHEAte) {
		this.horasAutomacaoHEAte = horasAutomacaoHEAte;
	}

	public Integer getMinutosAutomacaoHEAte() {
		return minutosAutomacaoHEAte;
	}

	public void setMinutosAutomacaoHEAte(Integer minutosAutomacaoHEAte) {
		this.minutosAutomacaoHEAte = minutosAutomacaoHEAte;
	}

	public RolOperativo getRolOperativoServicoExtra() {
		return rolOperativoServicoExtra;
	}

	public void setRolOperativoServicoExtra(RolOperativo rolOperativoServicoExtra) {
		this.rolOperativoServicoExtra = rolOperativoServicoExtra;
	}

	public Integer getNumCorridaServicoExtra() {
		return numCorridaServicoExtra;
	}

	public void setNumCorridaServicoExtra(Integer numCorridaServicoExtra) {
		this.numCorridaServicoExtra = numCorridaServicoExtra;
	}

	public Boolean getBlolqueiaInternetHE() {
		return blolqueiaInternetHE;
	}

	public void setBlolqueiaInternetHE(Boolean blolqueiaInternetHE) {
		this.blolqueiaInternetHE = blolqueiaInternetHE;
	}

	public String getPlataformaServicoExtra() {
		return plataformaServicoExtra;
	}

	public void setPlataformaServicoExtra(String plataformaServicoExtra) {
		this.plataformaServicoExtra = plataformaServicoExtra;
	}

	public Date getHorasalidaExtra() {
		return horasalidaExtra;
	}

	public void setHorasalidaExtra(Date horasalidaExtra) {
		this.horasalidaExtra = horasalidaExtra;
	}

	public Boolean getIndBloqueiaWebAposSaida() {
		return indBloqueiaWebAposSaida == null ? false : indBloqueiaWebAposSaida;
	}

	public void setIndBloqueiaWebAposSaida(Boolean indBloqueiaWebAposSaida) {
		this.indBloqueiaWebAposSaida = indBloqueiaWebAposSaida;
	}

	public Date getHoraIniNaoImpBPE() {
		return horaIniNaoImpBPE;
	}

	public void setHoraIniNaoImpBPE(Date horaIniNaoImpBPE) {
		this.horaIniNaoImpBPE = horaIniNaoImpBPE;
	}

	public Date getHoraFimNaoImpBPE() {
		return horaFimNaoImpBPE;
	}

	public void setHoraFimNaoImpBPE(Date horaFimNaoImpBPE) {
		this.horaFimNaoImpBPE = horaFimNaoImpBPE;
	}

	public String getIndNaoImprimeBpe() {
		return indNaoImprimeBpe;
	}

	public void setIndNaoImprimeBpe(String indNaoImprimeBpe) {
		this.indNaoImprimeBpe = indNaoImprimeBpe;
	}

	public List<EsquemaCorridaInfo> getLsEsquemaCorridaInfo() {
		return lsEsquemaCorridaInfo;
	}

	public void setLsEsquemaCorridaInfo(List<EsquemaCorridaInfo> lsEsquemaCorridaInfo) {
		this.lsEsquemaCorridaInfo = lsEsquemaCorridaInfo;
	}

	public Boolean getIndCorridaDesativada() {
		return indCorridaDesativada == null ? false : indCorridaDesativada;
	}

	public void setIndCorridaDesativada(Boolean indCorridaDesativada) {
		this.indCorridaDesativada = indCorridaDesativada;
	}

}

