/*
 * 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.math.BigDecimal;
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.EnumType;
import javax.persistence.Enumerated;
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.hibernate.Hibernate;
import org.springframework.transaction.annotation.Transactional;

import com.rjconsultores.ventaboletos.enums.HorarioLiberacaoVendaPassagem;
import com.rjconsultores.ventaboletos.enums.TipoPassagemCores;

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

/**
 * 
 * @author Administrador
 */
@Entity
@AuditarClasse(nome = "CategoriaDescuento", tela = "auditarClasse.CategoriaDescuento")
@SequenceGenerator(name = "CATEGORIA_DESCUENTO_SEQ", sequenceName = "CATEGORIA_DESCUENTO_SEQ", allocationSize = 1)
@Table(name = "CATEGORIA_DESCUENTO")
public class CategoriaDescuento implements Serializable, Auditavel<CategoriaDescuento> {

	private static final long serialVersionUID = 1L;
	@Id
	@Basic(optional = false)
	@GeneratedValue(strategy = GenerationType.AUTO, generator = "CATEGORIA_DESCUENTO_SEQ")
	@Column(name = "CATEGORIADESCUENTO_ID")
	private Integer categoriadescuentoId;
	@AuditarAtributo(nome = "Qtd Autorizada")
	@Column(name = "CANTAUTORIZADA")
	private Integer cantautorizada;
	@Column(name = "DESCUENTOPORC")
	private BigDecimal descuentoporc;
	@Column(name = "DESCUENTOIMPORTE")
	private BigDecimal descuentoimporte;
	@Column(name = "ACTIVO")
	private Boolean activo;
	@AuditarAtributo(nome = "Ult.Modif")
	@Basic(optional = false)
	@Column(name = "FECMODIF")
	@Temporal(TemporalType.TIMESTAMP)
	private Date fecmodif;
	@Column(name = "USUARIO_ID")
	private Integer usuarioId;
	@JoinColumn(name = "CATEGORIACTRL_ID", referencedColumnName = "CATEGORIACTRL_ID")
	@ManyToOne(cascade = CascadeType.ALL)
	private CategoriaCtrl categoriaCtrl;
	@JoinColumn(name = "CATEGORIA_ID", referencedColumnName = "CATEGORIA_ID")
	@ManyToOne
	private Categoria categoria;
	@NaoAuditar
	@OneToMany(mappedBy = "categoriaDescuento", cascade = CascadeType.ALL, fetch=FetchType.EAGER)
	private List<CategoriaPeriodo> categoriaPeriodoList;
	@Column(name = "INDIMPRIMEBOLETO")
	private Boolean indImprimeBoleto;
	@Column(name = "INDCUOTA")
	private Boolean indCuota;
	@Column(name = "INDCUOTATRAMO")
	private Boolean indCuotaTramo;
	@Column(name = "INDCUOTANUNCALIBERAR")
	private Boolean indCuotaNuncaLiberar;
	@Column(name = "TIEMPOCUOTA")
	@Temporal(TemporalType.TIMESTAMP)
	private Date tiempoCuota;
	@Column(name = "INDAPLICAFERIADO")
	private String indAplicaFeriado;
	@Column(name = "INDIMPORTEOUTROS")
	private Boolean indImporteOutros;
	@Column(name = "INDIMPORTESEGURO")
	private Boolean indImporteSeguro;
	@Column(name = "INDIMPORTETXEMBARQUE")
	private Boolean indImporteTxEmbarque;
	@Column(name = "INDIMPORTEPEDAGIO")
	private Boolean indImportePedagio;
	@Column(name = "TIEMPOACTIVAR")
	private Integer tiempoActivar;
	@Column(name = "TIEMPODESACTIVAR")
	private Integer tiempoDesactivar;
	@Column(name = "INDVENTAABIERTO")
	private Boolean indVentaAbierto;
	@Column(name = "INDVENTASOLAMENTERESERVA")
	private Boolean indVentaSolamenteReserva;
	@Column(name = "INDLIBERACIONSOLAMENTEENVASADO")
	private Boolean indLiberacionSolamenteEnvasado;
	@Column(name = "ASIENTOSRESERVADOS")
	private String asientosReservados;
	
	@Column(name = "INDEXIGENOMBPASAJERO")
	private Boolean indexigenombpasajero;
	@Column(name = "INDEXIGEDOCPASAJERO")
	private Boolean indexigedocpasajero;
	@Column(name = "INDEXIGETELEFONOPASAJERO")
	private Boolean indexigetelefonopasajero;
	@Column(name = "INDEXIGEFECNACIMIENTOPASAJERO")
	private Boolean indexigefecnacimientopasajero;
	@Column(name = "INDEXIGEDOC2PASSAGEIRO")
	private Boolean indExigeDoc2Passageiro;
	@Column(name = "INDEXIGEENDERECOPASSAGEIRO")
	private Boolean indExigeEnderecoPassageiro;
	@Column(name = "INDEXIGEEMAILPASSAGEIRO")
	private Boolean indExigeEmailPassageiro;	
	
	@Column(name = "INDSEGUNDA")
	private Boolean indSegunda;
	@Column(name = "INDTERCA")
	private Boolean indTerca;
	@Column(name = "INDQUARTA")
	private Boolean indQuarta;
	@Column(name = "INDQUINTA")
	private Boolean indQuinta;
	@Column(name = "INDSEXTA")
	private Boolean indSexta;
	@Column(name = "INDSABADO")
	private Boolean indSabado;
	@Column(name = "INDDOMINGO")
	private Boolean indDomingo;
	
	@Enumerated(EnumType.ORDINAL)
	@Column(name = "HORARIOLIBERACAOVENDAPESSAGEM")
	private HorarioLiberacaoVendaPassagem horarioLiberacaoVendaPassagem;
	
	@Column(name = "TIPODESCCOMPPRECO")
	private Integer tipodesccomppreco;
	
	@Column(name = "DESCCOMPPRECO")
	private BigDecimal desccomppreco;
	
	@Enumerated(EnumType.STRING)
	@Column(name = "CORPOLTRONA")
	private TipoPassagemCores corpoltrona;
	
	@Column(name = "INDNAOPERMITEVDAMESMODOCVIAGEM")
	private Boolean indnaopermitevdamesmodocviagem;
	
	@Column(name = "INDNAOPERMITEVENDADUASGRAT")
	private Boolean indNaoPermiteVendaDuasGrat;
	
	@Column(name = "CANTMAXVENDASMES")
	private Integer cantMaxVendaMes;
	
	@Column(name = "INDNAOAPLICATARIFAMINIMA")
	private Boolean indnaoaplicatarifaminima;
	
	@Column(name = "INDTIPOOCUPACAO")
	private boolean indtipoocupacao;
	
	@Column(name = "INDEMITESOMENTECUPOMEMBARQUE")
	private Boolean indEmiteSomenteCupomEmbarque;
	
	@Column(name = "QTDE_VIAS_CUPOM_EMBARQUE")
	private Integer qtdeViasCupomEmbarque;
	
	@Column(name = "INDVENDAANTECIPADAPORKM")
	private Boolean indVendaAntecipadaPorKM;
	
	@Column(name = "KMVENDAANTECIPADA")
	private Integer kmVendaAntecipada;
	
	@Column(name = "TEMPOLIBERACAOATEKM")
	private Date tempoLiberacaoAteKM;
	
	@Column(name = "TEMPOLIBERACAODEPOISKM")
	private Date tempoLiberacaoDepoisKM;
	
	@Column(name = "QTDE_LIMITE_NAO_EMBARQUE")
	private Integer qtdeLimiteNaoEmbarque;
	
	@Column(name = "INDCLIENTEPCD")
	private Boolean indClientePcd;
	
	@Column(name = "INDCHECKINAUTOMATICO")
	private Boolean indCheckinAutomatico;

	//Comportamento geral
	@Column(name = "INDPERMITETROCA")
	private Boolean indPermiteTroca;
	
	@Column(name = "INDPERMITETRANSFERENCIA")
	private Boolean indPermiteTransferencia;
	
	@Column(name = "INDPERMITECANCELAR")
	private Boolean indPermiteCancelar;
	
	@Column(name = "INDPERMITEDEVOLVER")
	private Boolean indPermiteDevolver;
	
	@Column(name = "INDPERMITECANCELAREMERGENCIAL")
	private Boolean indPermiteCancelarEmergencial;
	
	@Column(name = "INDPERMITETROCATITULARIDADE")
	private Boolean indPermiteTrocaTitularidade;

	@Column(name = "INDPERMITEREATIVAR")
	private Boolean indPermiteReativar;
	
	//Comportamento em Aberto
	@Column(name = "INDCANCELAEMABERTO")
	private Boolean indCancelaEmAberto;
	
	@Column(name = "INDDEVOLVEEMABERTO")
	private Boolean indDevolveEmAberto;
	
	@Column(name = "INDCANCELAEMERGENCIALAEMABERTO")
	private Boolean indCancelaEmergencialEmAberto;
	
	@Column(name = "INDTROCAEMABERTO")
	private Boolean indTrocaEmAberto;

	@Column(name = "INDTROCATITULARIDADEEMABERTO")
	private Boolean indTrocaTitularidadeEmAberto;
	
	@JoinColumn(name = "CATEGORIAINTERAGE_ID", referencedColumnName = "CATEGORIA_ID")
	@ManyToOne(cascade = CascadeType.ALL)
	private Categoria categoriaInterage;
	
	@Column(name = "INDEXIGENUMFIDELIDADE")
	private Boolean indExigeNumFidelidade;
	
	@JoinColumn(name = "TIPOOCUPACION_ID")
	@ManyToOne(cascade = CascadeType.ALL)
	private TipoOcupacion tipoOcupacion;
	
	@Transient
	@NaoAuditar
	private CategoriaDescuento categoriaDescuentoClone;

	@Column(name = "INDIMPORTESEGUROOPCIONAL")
	private Boolean indImporteSeguroOpcional;
	
	@Column(name = "TIPOIDENTIFICACIONDOC2")
	private Integer tipoIdentificacionDoc2;
	
	@Column(name = "CUSTOMIZARODAPECUPOMEMBARQUE")
    @NaoAuditar
	private String customizaRodapeCumpomEmbarque;
	
	@Column(name = "TIPOIDENTIFICACIONDOC1")
	private Integer tipoIdentificacionDoc1;
	
	public enum DisponibilidadeFeriado {
		// Declaração dos enum
		GERARSEMPRE("SEMPRE", "S"),

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

		GERARQUANDONAOFERIADO("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 DisponibilidadeFeriado(String descricao, String valor) {
			this.descricao = descricao;
			this.valor = valor;
		}
	}
	
	public enum TipoDescontoComponentePreco {
		
		DESCONTO_COMPONENTE_PRECO_PERC(1),
		DESCONTO_COMPONENTE_PRECO_VALOR(2);
		
		public final Integer valor;
		
		public Integer getValor() {
			return valor;
		}
		
		private TipoDescontoComponentePreco(Integer valor) {
			this.valor = valor;
		}
		
	}

	public CategoriaDescuento() {
		this.indSegunda = true;
		this.indTerca = true;
		this.indQuarta = true;
		this.indQuinta = true;
		this.indSexta = true;
		this.indSabado = true;
		this.indDomingo = true;
		
	}

	public CategoriaDescuento(Integer categoriadescuentoId) {
		this.categoriadescuentoId = categoriadescuentoId;
		
		this.indSegunda = true;
		this.indTerca = true;
		this.indQuarta = true;
		this.indQuinta = true;
		this.indSexta = true;
		this.indSabado = true;
		this.indDomingo = true;
	}

	public CategoriaDescuento(Integer categoriadescuentoId, Date fecmodif) {
		this.categoriadescuentoId = categoriadescuentoId;
		this.fecmodif = fecmodif;
		
		this.indSegunda = true;
		this.indTerca = true;
		this.indQuarta = true;
		this.indQuinta = true;
		this.indSexta = true;
		this.indSabado = true;
		this.indDomingo = true;
	}

	public Integer getCategoriadescuentoId() {
		return categoriadescuentoId;
	}

	public void setCategoriadescuentoId(Integer categoriadescuentoId) {
		this.categoriadescuentoId = categoriadescuentoId;
	}

	public Integer getCantautorizada() {
		return cantautorizada;
	}

	public void setCantautorizada(Integer cantautorizada) {
		this.cantautorizada = cantautorizada;
	}

	public BigDecimal getDescuentoporc() {
		return descuentoporc;
	}

	public void setDescuentoporc(BigDecimal descuentoporc) {
		this.descuentoporc = descuentoporc;
	}

	public BigDecimal getDescuentoimporte() {
		return descuentoimporte;
	}

	public void setDescuentoimporte(BigDecimal descuentoimporte) {
		this.descuentoimporte = descuentoimporte;
	}

	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 CategoriaCtrl getCategoriaCtrl() {
		return categoriaCtrl;
	}

	public void setCategoriaCtrl(CategoriaCtrl categoriaCtrl) {
		this.categoriaCtrl = categoriaCtrl;
	}

	public Categoria getCategoria() {
		return categoria;
	}

	public void setCategoria(Categoria categoria) {
		this.categoria = categoria;
	}

	@Transactional
	public List<CategoriaPeriodo> getCategoriaPeriodoList() {
		List<CategoriaPeriodo> tmp = new ArrayList<CategoriaPeriodo>();
//		Hibernate.initialize(categoriaPeriodoList);
		if (categoriaPeriodoList != null) {
			for (CategoriaPeriodo cp : this.categoriaPeriodoList) {
				if (cp.getActivo()) {
					tmp.add(cp);
				}
			}
		}

		return tmp;
	}

	public void setCategoriaPeriodoList(List<CategoriaPeriodo> categoriaPeriodoList) {
		this.categoriaPeriodoList = categoriaPeriodoList;
	}

	public Boolean getIndImprimeBoleto() {
		return indImprimeBoleto;
	}

	public void setIndImprimeBoleto(Boolean indImprimeBoleto) {
		this.indImprimeBoleto = indImprimeBoleto;
	}

	@Override
	public boolean equals(Object obj) {
		if (obj == null) {
			return false;
		}
		if (getClass() != obj.getClass()) {
			return false;
		}
		final CategoriaDescuento other = (CategoriaDescuento) obj;
		if (this.categoriaCtrl != other.categoriaCtrl && (this.categoriaCtrl == null || !this.categoriaCtrl.equals(other.categoriaCtrl))) {
			return false;
		}
		if (this.categoria != other.categoria && (this.categoria == null || !this.categoria.equals(other.categoria))) {
			return false;
		}
		return true;
	}

	@Override
	public int hashCode() {
		int hash = 7;
		hash = 53 * hash + (this.categoriaCtrl != null ? this.categoriaCtrl.hashCode() : 0);
		hash = 53 * hash + (this.categoria != null ? this.categoria.hashCode() : 0);
		return hash;
	}

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

	public Boolean getIndCuota() {
		return indCuota;
	}

	public void setIndCuota(Boolean indCuota) {
		this.indCuota = indCuota;
	}

	public Boolean getIndCuotaTramo() {
		return indCuotaTramo;
	}

	public void setIndCuotaTramo(Boolean indCuotaTramo) {
		this.indCuotaTramo = indCuotaTramo;
	}

	public Boolean getIndCuotaNuncaLiberar() {
		return indCuotaNuncaLiberar;
	}

	public void setIndCuotaNuncaLiberar(Boolean indCuotaNuncaLiberar) {
		this.indCuotaNuncaLiberar = indCuotaNuncaLiberar;
	}

	public Date getTiempoCuota() {
		return tiempoCuota;
	}

	public void setTiempoCuota(Date tiempoCuota) {
		this.tiempoCuota = tiempoCuota;
	}

	public String getIndAplicaFeriado() {
		return indAplicaFeriado;
	}

	public void setIndAplicaFeriado(String indAplicaFeriado) {
		this.indAplicaFeriado = indAplicaFeriado;
	}

	public Boolean getIndImporteOutros() {
		return indImporteOutros;
	}

	public void setIndImporteOutros(Boolean indImporteOutros) {
		this.indImporteOutros = indImporteOutros;
	}

	public Boolean getIndImporteSeguro() {
		return indImporteSeguro;
	}

	public void setIndImporteSeguro(Boolean indImporteSeguro) {
		this.indImporteSeguro = indImporteSeguro;
	}

	public Boolean getIndImporteTxEmbarque() {
		return indImporteTxEmbarque;
	}

	public void setIndImporteTxEmbarque(Boolean indImporteTxEmbarque) {
		this.indImporteTxEmbarque = indImporteTxEmbarque;
	}

	public Boolean getIndImportePedagio() {
		return indImportePedagio;
	}

	public void setIndImportePedagio(Boolean indImportePedagio) {
		this.indImportePedagio = indImportePedagio;
	}

	public Integer getTiempoActivar() {
		return tiempoActivar;
	}

	public void setTiempoActivar(Integer hora, Integer minuto) {
		setTiempoDesactivar(null);
		hora = (hora == null) ? 0 : hora;
		minuto = (minuto == null) ? 0 : minuto;

		int totalMinutos = (hora * 60) + minuto;
		setTiempoActivar((totalMinutos == 0) ? null : totalMinutos);
	}

	public void setTiempoActivar(Integer tiempoActivar) {
		this.tiempoActivar = tiempoActivar;
	}

	public Integer getTiempoDesactivar() {
		return tiempoDesactivar;
	}

	public void setTiempoDesactivar(Integer hora, Integer minuto) {
		setTiempoActivar(null);
		hora = (hora == null) ? 0 : hora;
		minuto = (minuto == null) ? 0 : minuto;

		int totalMinutos = (hora * 60) + minuto;
		setTiempoDesactivar((totalMinutos == 0) ? null : totalMinutos);
	}

	public void setTiempoDesactivar(Integer tiempoDesactivar) {
		this.tiempoDesactivar = tiempoDesactivar;
	}

	public Boolean getIndVentaAbierto() {
		return indVentaAbierto;
	}

	public void setIndVentaAbierto(Boolean indVentaAbierto) {
		this.indVentaAbierto = indVentaAbierto;
	}

	public Boolean getIndVentaSolamenteReserva() {
		return indVentaSolamenteReserva;
	}

	public void setIndVentaSolamenteReserva(Boolean indVentaSolamenteReserva) {
		this.indVentaSolamenteReserva = indVentaSolamenteReserva;
	}

	public Boolean getIndLiberacionSolamenteEnvasado() {
		return indLiberacionSolamenteEnvasado;
	}

	public void setIndLiberacionSolamenteEnvasado(Boolean indLiberacionSolamenteEnvasado) {
		this.indLiberacionSolamenteEnvasado = indLiberacionSolamenteEnvasado;
	}

	public String getAsientosReservados() {
		return asientosReservados;
	}

	public void setAsientosReservados(String asientosReservados) {
		this.asientosReservados = asientosReservados;
	}

	public Boolean getIndexigenombpasajero() {
		return indexigenombpasajero;
	}

	public void setIndexigenombpasajero(Boolean indexigenombpasajero) {
		this.indexigenombpasajero = indexigenombpasajero;
	}

	public Boolean getIndexigedocpasajero() {
		return indexigedocpasajero;
	}

	public void setIndexigedocpasajero(Boolean indexigedocpasajero) {
		this.indexigedocpasajero = indexigedocpasajero;
	}

	public Boolean getIndexigetelefonopasajero() {
		return indexigetelefonopasajero;
	}

	public void setIndexigetelefonopasajero(Boolean indexigetelefonopasajero) {
		this.indexigetelefonopasajero = indexigetelefonopasajero;
	}

	public Boolean getIndexigefecnacimientopasajero() {
		return indexigefecnacimientopasajero;
	}

	public void setIndexigefecnacimientopasajero(Boolean indexigefecnacimientopasajero) {
		this.indexigefecnacimientopasajero = indexigefecnacimientopasajero;
	}		
	
	public Boolean getIndExigeDoc2Passageiro() {
		return indExigeDoc2Passageiro;
	}

	public void setIndExigeDoc2Passageiro(Boolean indExigeDoc2Passageiro) {
		this.indExigeDoc2Passageiro = indExigeDoc2Passageiro;
	}

	@Transactional
	public String getExigeCamposPasajeroVenta() {
		
		StringBuilder sCampos = new StringBuilder();
		
		if(getIndexigenombpasajero() != null && getIndexigenombpasajero()) {
			sCampos.append("NO");
		}
		
		if(getIndexigedocpasajero() != null && getIndexigedocpasajero()) {
			if(sCampos.length() > 0) {
				sCampos.append(",");
			}
			sCampos.append("DO");
		}
		if(getIndexigetelefonopasajero() != null && getIndexigetelefonopasajero()) {
			if(sCampos.length() > 0) {
				sCampos.append(",");
			}
			sCampos.append("TL");
		}
		if(getIndexigefecnacimientopasajero() != null && getIndexigefecnacimientopasajero()) {
			if(sCampos.length() > 0) {
				sCampos.append(",");
			}
			sCampos.append("DT");
		}		
		if(getIndExigeDoc2Passageiro() != null && getIndExigeDoc2Passageiro()) {
			if(sCampos.length() > 0) {
				sCampos.append(",");
			}
			sCampos.append("DOC2");
		}		
		return sCampos.toString();
	}

	public HorarioLiberacaoVendaPassagem getHorarioLiberacaoVendaPassagem() {
		return horarioLiberacaoVendaPassagem;
	}

	public void setHorarioLiberacaoVendaPassagem(HorarioLiberacaoVendaPassagem horarioLiberacaoVendaPassagem) {
		this.horarioLiberacaoVendaPassagem = horarioLiberacaoVendaPassagem;
	}

	public Integer getTipodesccomppreco() {
		return tipodesccomppreco;
	}

	public void setTipodesccomppreco(Integer tipodesccomppreco) {
		this.tipodesccomppreco = tipodesccomppreco;
	}

	public BigDecimal getDesccomppreco() {
		return desccomppreco;
	}

	public void setDesccomppreco(BigDecimal desccomppreco) {
		this.desccomppreco = desccomppreco;
	}

	public Boolean getIndSegunda() {
		return indSegunda;
	}

	public void setIndSegunda(Boolean indSegunda) {
		this.indSegunda = indSegunda;
	}

	public Boolean getIndTerca() {
		return indTerca;
	}

	public void setIndTerca(Boolean indTerca) {
		this.indTerca = indTerca;
	}

	public Boolean getIndQuarta() {
		return indQuarta;
	}

	public void setIndQuarta(Boolean indQuarta) {
		this.indQuarta = indQuarta;
	}

	public Boolean getIndQuinta() {
		return indQuinta;
	}

	public void setIndQuinta(Boolean indQuinta) {
		this.indQuinta = indQuinta;
	}

	public Boolean getIndSexta() {
		return indSexta;
	}

	public void setIndSexta(Boolean indSexta) {
		this.indSexta = indSexta;
	}

	public Boolean getIndSabado() {
		return indSabado;
	}

	public void setIndSabado(Boolean indSabado) {
		this.indSabado = indSabado;
	}

	public Boolean getIndDomingo() {
		return indDomingo;
	}

	public void setIndDomingo(Boolean indDomingo) {
		this.indDomingo = indDomingo;
	}

	public TipoPassagemCores getCorpoltrona() {
		return corpoltrona;
	}

	public void setCorpoltrona(TipoPassagemCores corpoltrona) {
		this.corpoltrona = corpoltrona;
	}

	public Boolean getIndnaopermitevdamesmodocviagem() {
		return indnaopermitevdamesmodocviagem;
	}

	public void setIndnaopermitevdamesmodocviagem(Boolean indnaopermitevdamesmodocviagem) {
		this.indnaopermitevdamesmodocviagem = indnaopermitevdamesmodocviagem;
	}

	public Boolean getIndnaoaplicatarifaminima() {
		return indnaoaplicatarifaminima != null ? indnaoaplicatarifaminima : Boolean.FALSE;
	}

	public void setIndnaoaplicatarifaminima(Boolean indnaoaplicatarifaminima) {
		this.indnaoaplicatarifaminima = indnaoaplicatarifaminima;
	}

	public Boolean getIndExigeEnderecoPassageiro() {
		return indExigeEnderecoPassageiro;
	}

	public void setIndExigeEnderecoPassageiro(Boolean indExigeEnderecoPassageiro) {
		this.indExigeEnderecoPassageiro = indExigeEnderecoPassageiro;
	}

	public Boolean getIndExigeEmailPassageiro() {
		return indExigeEmailPassageiro;
	}

	public void setIndExigeEmailPassageiro(Boolean indExigeEmailPassageiro) {
		this.indExigeEmailPassageiro = indExigeEmailPassageiro;
	}
	
	public boolean getIndtipoocupacao() {
		return indtipoocupacao;
	}

	public void setIndtipoocupacao(boolean indtipoocupacao) {
		this.indtipoocupacao = indtipoocupacao;
	}

	public Boolean getIndNaoPermiteVendaDuasGrat() {
		return indNaoPermiteVendaDuasGrat == null ? false : indNaoPermiteVendaDuasGrat;
	}

	public void setIndNaoPermiteVendaDuasGrat(Boolean indNaoPermiteVendaDuasGrat) {
		this.indNaoPermiteVendaDuasGrat = indNaoPermiteVendaDuasGrat;
	}

	public Boolean getIndEmiteSomenteCupomEmbarque() {
		return BooleanUtils.toBoolean(indEmiteSomenteCupomEmbarque);
	}

	public void setIndEmiteSomenteCupomEmbarque(Boolean indEmiteSomenteCupomEmbarque) {
		this.indEmiteSomenteCupomEmbarque = indEmiteSomenteCupomEmbarque;
	}

	public Integer getQtdeViasCupomEmbarque() {
		return qtdeViasCupomEmbarque;
	}

	public void setQtdeViasCupomEmbarque(Integer qtdeViasCupomEmbarque) {
		this.qtdeViasCupomEmbarque = qtdeViasCupomEmbarque;
	}

	public Boolean isIndVendaAntecipadaPorKM() {
		return indVendaAntecipadaPorKM;
	}

	public void setIndVendaAntecipadaPorKM(Boolean indVendaAntecipadaPorKM) {
		this.indVendaAntecipadaPorKM = indVendaAntecipadaPorKM;
	}

	public Integer getKmVendaAntecipada() {
		return kmVendaAntecipada;
	}

	public void setKmVendaAntecipada(Integer kmVendaAntecipada) {
		this.kmVendaAntecipada = kmVendaAntecipada;
	}

	public Date getTempoLiberacaoAteKM() {
		return tempoLiberacaoAteKM;
	}

	public void setTempoLiberacaoAteKM(Date tempoLiberacaoAteKM) {
		this.tempoLiberacaoAteKM = tempoLiberacaoAteKM;
	}

	public Date getTempoLiberacaoDepoisKM() {
		return tempoLiberacaoDepoisKM;
	}

	public void setTempoLiberacaoDepoisKM(Date tempoLiberacaoDepoisKM) {
		this.tempoLiberacaoDepoisKM = tempoLiberacaoDepoisKM;
	}

	public Boolean getIndVendaAntecipadaPorKM() {
		return BooleanUtils.toBoolean(indVendaAntecipadaPorKM);
	}

	public Integer getQtdeLimiteNaoEmbarque() {
		return qtdeLimiteNaoEmbarque;
	}

	public void setQtdeLimiteNaoEmbarque(Integer qtdeLimiteNaoEmbarque) {
		this.qtdeLimiteNaoEmbarque = qtdeLimiteNaoEmbarque;
	}

	public Boolean getIndClientePcd() {
		return BooleanUtils.toBoolean(indClientePcd);
	}

	public void setIndClientePcd(Boolean indClientePcd) {
		this.indClientePcd = indClientePcd;
	}

	public Boolean getIndCancelaEmAberto() {
		return indCancelaEmAberto == null ? true : indCancelaEmAberto;
	}

	public void setIndCancelaEmAberto(Boolean indCancelaEmAberto) {
		this.indCancelaEmAberto = indCancelaEmAberto;
	}

	public Boolean getIndDevolveEmAberto() {
		return indDevolveEmAberto == null ? true : indDevolveEmAberto ;
	}

	public void setIndDevolveEmAberto(Boolean indDevolveEmAberto) {
		this.indDevolveEmAberto = indDevolveEmAberto;
	}

	public Boolean getIndCancelaEmergencialEmAberto() {
		return indCancelaEmergencialEmAberto  == null ? true : indCancelaEmergencialEmAberto;
	}

	public void setIndCancelaEmergencialEmAberto(Boolean indCancelaEmergencialEmAberto) {
		this.indCancelaEmergencialEmAberto = indCancelaEmergencialEmAberto;
	}

	public Boolean getIndTrocaEmAberto() {
		return indTrocaEmAberto  == null ? true : indTrocaEmAberto;
	}

	public void setIndTrocaEmAberto(Boolean indTrocaEmAberto) {
		this.indTrocaEmAberto = indTrocaEmAberto;
	}

	public Boolean getIndTrocaTitularidadeEmAberto() {
		return indTrocaTitularidadeEmAberto  == null ? true : indTrocaTitularidadeEmAberto;
	}

	public void setIndTrocaTitularidadeEmAberto(Boolean indTrocaTitularidadeEmAberto) {
		this.indTrocaTitularidadeEmAberto = indTrocaTitularidadeEmAberto;
	}

	public Boolean getIndPermiteCancelar() {
		return indPermiteCancelar == null ? true : indPermiteCancelar;
	}

	public void setIndPermiteCancelar(Boolean indPermiteCancelar) {
		this.indPermiteCancelar = indPermiteCancelar;
	}

	public Boolean getIndPermiteDevolver() {
		return indPermiteDevolver  == null ? true : indPermiteDevolver;
	}

	public void setIndPermiteDevolver(Boolean indPermiteDevolver) {
		this.indPermiteDevolver = indPermiteDevolver;
	}

	public Boolean getIndPermiteCancelarEmergencial() {
		return indPermiteCancelarEmergencial == null ? true : indPermiteCancelarEmergencial ;
	}

	public void setIndPermiteCancelarEmergencial(Boolean indPermiteCancelarEmergencial) {
		this.indPermiteCancelarEmergencial = indPermiteCancelarEmergencial;
	}

	public Boolean getIndPermiteTrocaTitularidade() {
		return indPermiteTrocaTitularidade == null ? true : indPermiteTrocaTitularidade;
	}

	public void setIndPermiteTrocaTitularidade(Boolean indPermiteTrocaTitularidade) {
		this.indPermiteTrocaTitularidade = indPermiteTrocaTitularidade;
	}

	public Boolean getIndPermiteReativar() {
		return indPermiteReativar == null ? true : indPermiteReativar;
	}

	public void setIndPermiteReativar(Boolean indPermiteReativar) {
		this.indPermiteReativar = indPermiteReativar;
	}
	
	public Boolean getIndCheckinAutomatico() {
		return indCheckinAutomatico;
	}

	public void setIndCheckinAutomatico(Boolean indCheckinAutomatico) {
		this.indCheckinAutomatico = indCheckinAutomatico;
	}

	public Boolean getIndPermiteTroca() {
		return indPermiteTroca == null ? true : indPermiteTroca;
	}

	public void setIndPermiteTroca(Boolean indPermiteTroca) {
		this.indPermiteTroca = indPermiteTroca;
	}

	public Boolean getIndPermiteTransferencia() {
		return indPermiteTransferencia == null ? true : indPermiteTransferencia;
	}

	public void setIndPermiteTransferencia(Boolean indPermiteTransferencia) {
		this.indPermiteTransferencia = indPermiteTransferencia;
	}
	
	public Categoria getCategoriaInterage() {
		return categoriaInterage;
	}

	public void setCategoriaInterage(Categoria categoriaInterage) {
		this.categoriaInterage = categoriaInterage;
	}

	public Boolean getIndExigeNumFidelidade() {
		return indExigeNumFidelidade == null ? false : indExigeNumFidelidade;
	}

	public void setIndExigeNumFidelidade(Boolean indExigeNumFidelidade) {
		this.indExigeNumFidelidade = indExigeNumFidelidade;
	}

	public TipoOcupacion getTipoOcupacion() {
		return tipoOcupacion;
	}

	public void setTipoOcupacion(TipoOcupacion tipoOcupacion) {
		this.tipoOcupacion = tipoOcupacion;
	}
	

	public Integer getCantMaxVendaMes() {
		return cantMaxVendaMes;
	}

	public void setCantMaxVendaMes(Integer cantMaxVendaMes) {
		this.cantMaxVendaMes = cantMaxVendaMes;
	}
	
	public Integer getTipoIdentificacionDoc2() {
		return tipoIdentificacionDoc2;
	}

	public void setTipoIdentificacionDoc2(Integer tipoIdentificacionDoc2) {
		this.tipoIdentificacionDoc2 = tipoIdentificacionDoc2;
	}

	@Override
	public void clonar() throws CloneNotSupportedException {
		categoriaDescuentoClone = new CategoriaDescuento();
		categoriaDescuentoClone = (CategoriaDescuento) this.clone();
		
		if(this.getCategoriaPeriodoList() != null) {
			List<CategoriaPeriodo> lsClones = new ArrayList<CategoriaPeriodo>();
			for (CategoriaPeriodo categoriaPeriodo : this.getCategoriaPeriodoList()) {
				if(BooleanUtils.isTrue(categoriaPeriodo.getActivo())) {
					categoriaPeriodo.clonar();
					lsClones.add(categoriaPeriodo.getCloneObject());
				}
			}
			categoriaDescuentoClone.setCategoriaPeriodoList(lsClones);
		}
	}

	@Override
	public CategoriaDescuento getCloneObject() throws CloneNotSupportedException {
		return categoriaDescuentoClone;
	}

	@Override
	public String getTextoInclusaoExclusao() {
		return String.format("ID [%s]", getCategoriadescuentoId());
	}

	public Boolean getIndImporteSeguroOpcional() {
		return indImporteSeguroOpcional == null ? true : indImporteSeguroOpcional;
	}

	public void setIndImporteSeguroOpcional(Boolean indImporteSeguroOpcional) {
		this.indImporteSeguroOpcional = indImporteSeguroOpcional;
	}

	public String getCustomizaRodapeCumpomEmbarque() {
		return customizaRodapeCumpomEmbarque;
	}

	public void setCustomizaRodapeCumpomEmbarque(String customizaRodapeCumpomEmbarque) {
		this.customizaRodapeCumpomEmbarque = customizaRodapeCumpomEmbarque;
	}

	public Integer getTipoIdentificacionDoc1() {
		return tipoIdentificacionDoc1;
	}

	public void setTipoIdentificacionDoc1(Integer tipoIdentificacionDoc1) {
		this.tipoIdentificacionDoc1 = tipoIdentificacionDoc1;
	}
	
}
