package com.rjconsultores.ventaboletos.vo.comissao;

import java.math.BigDecimal;
import java.util.Date;
import java.util.List;

import org.apache.commons.lang.StringUtils;

import com.rjconsultores.ventaboletos.constantes.Constantes;
import com.rjconsultores.ventaboletos.constantes.DescricaoTipoVenta;
import com.rjconsultores.ventaboletos.entidad.Conferencia;
import com.rjconsultores.ventaboletos.enums.IndStatusBoleto;
import com.rjconsultores.ventaboletos.enums.comissao.StatusLogConferencia;
import com.rjconsultores.ventaboletos.utilerias.DateUtil;

public class BoletoComissao {

	private Long boletoId;
	private Long boletoOriginalId;
	private Integer empresaId;
	private Integer puntoVentaId;
	private String datavenda;
	private Integer tipoVenta;
	private String indstatusboleto;
	private Integer motivoCancelacionId;
	private Integer motivoCancelacionOriginal1;
	private Integer motivoCancelacionOriginal2;
	private String descmotivocancelacion;
	private BigDecimal valorbase;
	private BigDecimal valorpagado;
	private BigDecimal valorTabela;
	private BigDecimal seguro;
	private BigDecimal pedagio;
	private BigDecimal embarque;
	private BigDecimal excessoBagagem;
	private BigDecimal seguroOpcional;
	private BigDecimal seguroOutros;
	private Boolean ptoVtaOrigem;
	private String numAsiento;
	private String numAsientoVinculado;
	private String numFolioSistema;
	private String numSeriePreimpresa;
	private String numFolioPreImpreso;
	private String uf;
	private String desccategoria;
	private String nombpasajero;
	private Integer status;
	private String numoperacion;
	private Integer tipoVentaOriginal1;
	private Integer tipoVentaOriginal2;
	private Integer ocdId;
	private BigDecimal valorPagarOcd;
	private BigDecimal valorTarjetaOcd;

	private Integer estadoId;
	private Integer formapagoId;
	private String descpago;
	private Boolean indconferenciafisicacomissao;
	private BigDecimal importeFp;

	private List<FormapagoVO> formapagos;
	private BigDecimal icmsBase;
	private String nombusuario;
	private Integer comempformapagoId;
	private Integer comempcategoriaId;
	private Long logconferenciaId;

	private boolean exigeConferenciaDevolvido;
	private Boolean indcarboletosdevolvidosconf;

	private boolean exigeConferenciaAba;

	private boolean conferido;

	private Date feccorrida;

	private Integer corridaId;
	
	private Boolean indCancelacion;

	private Boolean indreimpresion;
	
	private Integer tipoventaAnteriorId;
	
	private Long cajaId;
	
	private Long transacaoOriginalId;
	
	private Conferencia conferencia;
	
	private Date feccorte;
	
	private Long transacaoId;
	
	private Boolean conferidoEntrega;
	
	private Integer ptovtaventaId;
	
	private Integer usuarioId;
	
	private Integer turnoId;

	public Integer getEmpresaId() {
		return empresaId;
	}

	public void setEmpresaId(Integer empresaId) {
		this.empresaId = empresaId;
	}

	public Integer getPuntoVentaId() {
		return puntoVentaId;
	}

	public void setPuntoVentaId(Integer puntoVentaId) {
		this.puntoVentaId = puntoVentaId;
	}

	public String getDatavenda() {
		return datavenda;
	}

	public void setDatavenda(String datavenda) {
		this.datavenda = datavenda;
	}

	public Integer getTipoVenta() {
		return tipoVenta;
	}

	public void setTipoVenta(Integer tipoVenta) {
		this.tipoVenta = tipoVenta;
	}

	public Integer getMotivoCancelacionId() {
		return motivoCancelacionId;
	}

	public void setMotivoCancelacionId(Integer motivoCancelacionId) {
		this.motivoCancelacionId = motivoCancelacionId;
	}

	public BigDecimal getValorpagado() {
		return valorpagado;
	}

	public void setValorpagado(BigDecimal valorpagado) {
		this.valorpagado = valorpagado;
	}

	public BigDecimal getSeguro() {
		return seguro;
	}

	public void setSeguro(BigDecimal seguro) {
		this.seguro = seguro;
	}

	public BigDecimal getPedagio() {
		return pedagio;
	}

	public void setPedagio(BigDecimal pedagio) {
		this.pedagio = pedagio;
	}

	public BigDecimal getEmbarque() {
		return embarque;
	}

	public void setEmbarque(BigDecimal embarque) {
		this.embarque = embarque;
	}

	public BigDecimal getExcessoBagagem() {
		return excessoBagagem;
	}

	public void setExcessoBagagem(BigDecimal excessoBagagem) {
		this.excessoBagagem = excessoBagagem;
	}

	public BigDecimal getSeguroOpcional() {
		return seguroOpcional;
	}

	public void setSeguroOpcional(BigDecimal seguroOpcional) {
		this.seguroOpcional = seguroOpcional;
	}

	public BigDecimal getSeguroOutros() {
		return seguroOutros;
	}

	public void setSeguroOutros(BigDecimal seguroOutros) {
		this.seguroOutros = seguroOutros;
	}

	public void setPtoVtaOrigem(Boolean ptoVtaOrigem) {
		this.ptoVtaOrigem = ptoVtaOrigem;
	}

	public String getIndstatusboleto() {
		return indstatusboleto;
	}

	public void setIndstatusboleto(String indstatusboleto) {
		this.indstatusboleto = indstatusboleto;
	}

	public Long getBoletoId() {
		return boletoId;
	}

	public void setBoletoId(Long boletoId) {
		this.boletoId = boletoId;
	}

	public void setBoletoOriginalId(Long boletoOriginalId) {
		this.boletoOriginalId = boletoOriginalId;
	}

	public Long getBoletoOriginalId() {
		return boletoOriginalId;
	}

	public String getNumAsiento() {
		return numAsiento;
	}

	public void setNumAsiento(String numAsiento) {
		this.numAsiento = numAsiento;
	}

	public String getNumFolioSistema() {
		return numFolioSistema;
	}

	public void setNumFolioSistema(String numFolioSistema) {
		this.numFolioSistema = numFolioSistema;
	}

	public String getNumSeriePreimpresa() {
		return numSeriePreimpresa;
	}

	public void setNumSeriePreimpresa(String numSeriePreimpresa) {
		this.numSeriePreimpresa = numSeriePreimpresa;
	}

	public String getNumFolioPreImpreso() {
		return numFolioPreImpreso;
	}

	public void setNumFolioPreImpreso(String numFolioPreImpreso) {
		this.numFolioPreImpreso = numFolioPreImpreso;
	}

	public String getUf() {
		return uf;
	}

	public void setUf(String uf) {
		this.uf = uf;
	}

	public String getDesccategoria() {
		return desccategoria;
	}

	public void setDesccategoria(String desccategoria) {
		this.desccategoria = desccategoria;
	}

	public Boolean getPtoVtaOrigem() {
		return ptoVtaOrigem;
	}

	public Integer getStatus() {
		return status;
	}

	public void setStatus(Integer status) {
		this.status = status;
	}

	public String getStatusDescricao() {
		StatusLogConferencia statusLogConferencia = StatusLogConferencia.getStatusLogConferencia(status);
		if (statusLogConferencia != null) {
			return statusLogConferencia.toString();
		}
		return "";
	}

	public String getDescFormapagos() {
		StringBuilder sFormapagos = new StringBuilder();
		for (FormapagoVO formapago : formapagos) {
			if (sFormapagos.length() > 0) {
				sFormapagos.append(", ");
			}
			sFormapagos.append(formapago.getDescpago());
		}

		return sFormapagos.toString();
	}

	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result + ((getCajaId() == null) ? 0 : getCajaId().hashCode());
		return result;
	}

	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		BoletoComissao other = (BoletoComissao) obj;
		if (getCajaId() == null) {
			if (other.getCajaId() != null)
				return false;
		} else if (!getCajaId().equals(other.getCajaId()))
			return false;
		return true;
	}

	public Integer getFormapagoId() {
		return formapagoId;
	}

	public void setFormapagoId(Integer formapagoId) {
		this.formapagoId = formapagoId;
	}

	public String getDescpago() {
		return descpago;
	}

	public void setDescpago(String descpago) {
		this.descpago = descpago;
	}

	public Boolean getIndconferenciafisicacomissao() {
		return indconferenciafisicacomissao;
	}

	public void setIndconferenciafisicacomissao(Boolean indconferenciafisicacomissao) {
		this.indconferenciafisicacomissao = indconferenciafisicacomissao;
	}

	public List<FormapagoVO> getFormapagos() {
		return formapagos;
	}

	public void setFormapagos(List<FormapagoVO> formapagos) {
		this.formapagos = formapagos;
	}

	public BigDecimal getIcmsBase() {
		return icmsBase;
	}

	public void setIcmsBase(BigDecimal icmsBase) {
		this.icmsBase = icmsBase;
	}

	public String getDescmotivocancelacion() {
		return descmotivocancelacion;
	}

	public void setDescmotivocancelacion(String descmotivocancelacion) {
		this.descmotivocancelacion = descmotivocancelacion;
	}

	public Integer getEstadoId() {
		return estadoId;
	}

	public void setEstadoId(Integer estadoId) {
		this.estadoId = estadoId;
	}

	public String getNumAsientoVinculado() {
		return numAsientoVinculado;
	}

	public void setNumAsientoVinculado(String numAsientoVinculado) {
		this.numAsientoVinculado = numAsientoVinculado;
	}

	public BigDecimal getTotal() {
		BigDecimal total = BigDecimal.ZERO;
		for (FormapagoVO formapagoVO : formapagos) {
			total = total.add(formapagoVO.getImporte());
		}
		return total;
	}
	
	public String getDescTipoVenta() {
		return DescricaoTipoVenta.getDescricaoTipoVenta(getTipoVenta());
	}

	public String getSituacaoBilhete() {
		if (isOcd()) {
			return "OCD";
		}
		
		if(isMotivocancelacionAgrupamento()) {
			return getDescmotivocancelacion();
		}

		if(isStatusVendido()) {
			return IndStatusBoleto.getIndStatusBoleto(getIndstatusboleto()).getValue();
		} 
		
		if ((isStatusCancelado()) && (isMotivocancelacionDevolvido() || isMotivocancelacionCancelado())
				&& StringUtils.isNotBlank(getDescmotivocancelacion())) {
			return getDescmotivocancelacion();
		} 
		
		if (isStatusCancelado()) {
			if (isMotivocancelacionTrocado() || (isMotivocancelacionGeracaoOcd() && isFormapagoTrocaPassagem())) {
				return "TROCADO";
			} else if (isMotivocancelacionTransferido()) {
				return "TRANSFERIDO";
			}
		}
		
		if (isStatusTroca()) {
			if (isVendaBilheteTroca(getTipoVenta()) || isVendaGap(getTipoVenta())) {
				return "B. DA TROCA";
			} else if (isVendaBilheteTransferencia(getTipoVenta()) || isVendaGap(getTipoVenta())) {
				return "B. DA TRANSFERENCIA";
			} else if (isVendaBilheteConfirmaAberto(getTipoVenta())) {
				return "CONFIRMAÇÃO ABERTO";
			} else if (isVendaBilheteCheckin(getTipoVenta())) {
				return "CHECKIN";
			}
		}

		IndStatusBoleto indStatusBoleto = IndStatusBoleto.getIndStatusBoleto(getIndstatusboleto());
		return indStatusBoleto != null ? indStatusBoleto.getValue() : "";
	}

	public boolean isFormapagoTrocaPassagem() {
		boolean fpTrocapassagem = false;
		for (FormapagoVO formapagoVO : formapagos) {
			fpTrocapassagem = formapagoVO.getFormapagoId().equals(Constantes.FORMA_PAGO_TROCA_PASSAGEM.intValue());
		}
		return fpTrocapassagem;
	}

	public boolean isOcd() {
		return isMotivocancelacionGeracaoOcd() && isStatusCancelado() && !isFormapagoTrocaPassagem();
	}

	public String getNombusuario() {
		return nombusuario;
	}

	public void setNombusuario(String nombusuario) {
		this.nombusuario = nombusuario;
	}

	public BigDecimal getImporteFp() {
		return importeFp;
	}

	public void setImporteFp(BigDecimal importeFp) {
		this.importeFp = importeFp;
	}

	public Integer getComempformapagoId() {
		return comempformapagoId;
	}

	public void setComempformapagoId(Integer comempformapagoId) {
		this.comempformapagoId = comempformapagoId;
	}

	public Integer getComempcategoriaId() {
		return comempcategoriaId;
	}

	public void setComempcategoriaId(Integer comempcategoriaId) {
		this.comempcategoriaId = comempcategoriaId;
	}

	public boolean isExigeConferencia() {
		return getComempcategoriaId() != null || getComempformapagoId() != null;
	}

	public boolean isExigeConferenciaBoletoDevolvido() {
		return exigeConferenciaDevolvido;
	}

	public boolean isConferido() {
		return conferido;
	}

	public void setConferido(boolean conferido) {
		this.conferido = conferido;
	}

	public Long getLogconferenciaId() {
		return logconferenciaId;
	}

	public void setLogconferenciaId(Long logconferenciaId) {
		this.logconferenciaId = logconferenciaId;
	}

	public String getNumoperacion() {
		return numoperacion;
	}

	public void setNumoperacion(String numoperacion) {
		this.numoperacion = numoperacion;
	}

	public Integer getTipoVentaOriginal() {
		return tipoVenta;
	}

	public Integer getTipoVentaOriginal1() {
		return tipoVentaOriginal1;
	}

	public void setTipoVentaOriginal1(Integer tipoVentaOriginal1) {
		this.tipoVentaOriginal1 = tipoVentaOriginal1;
	}

	public Integer getTipoVentaOriginal2() {
		return tipoVentaOriginal2;
	}

	public void setTipoVentaOriginal2(Integer tipoVentaOriginal2) {
		this.tipoVentaOriginal2 = tipoVentaOriginal2;
	}

	public Integer getOcdId() {
		return ocdId;
	}

	public void setOcdId(Integer ocdId) {
		this.ocdId = ocdId;
	}

/*	private boolean isBoletoOriginal() {
		return boletoOriginalId == null
				&& getMotivoCancelacionOriginal() != null
				&& getMotivoCancelacionOriginal() == Constantes.MVO_CANCEL_BOLETO_AGRUPAMENTO.intValue();
	}*/

	public Integer getMotivoCancelacionOriginal() {
		return motivoCancelacionOriginal2 != null ? motivoCancelacionOriginal2 : motivoCancelacionOriginal1;
	}

	public Integer getMotivoCancelacionOriginal1() {
		return motivoCancelacionOriginal1;
	}

	public void setMotivoCancelacionOriginal1(Integer motivoCancelacionOriginal1) {
		this.motivoCancelacionOriginal1 = motivoCancelacionOriginal1;
	}

	public Integer getMotivoCancelacionOriginal2() {
		return motivoCancelacionOriginal2;
	}

	public void setMotivoCancelacionOriginal2(Integer motivoCancelacionOriginal2) {
		this.motivoCancelacionOriginal2 = motivoCancelacionOriginal2;
	}

	public boolean isVendaManual(Integer tipoVenta) {
		return tipoVenta != null && tipoVenta == Constantes.TPV_MANUAL.intValue();
	}

	public boolean isVendaGap(Integer tipoVenta) {
		return tipoVenta != null && (tipoVenta == Constantes.TPV_BOLETO_REMOTO.intValue()
				|| tipoVenta == Constantes.TPV_CALL_CENTER.intValue()
				|| tipoVenta == Constantes.TPV_POR_INTERNET.intValue());
	}

	public boolean isVendaBilheteNormal(Integer tipoVenta) {
		return tipoVenta != null && tipoVenta == Constantes.TPV_DIRECTO_NORMAL.intValue();
	}

	public boolean isVendaBilheteTroca(Integer tipoVenta) {
		return tipoVenta != null && tipoVenta == Constantes.TPV_TRANSFERENCIAS.intValue();
	}

	public boolean isVendaBilheteTransferencia(Integer tipoVenta) {
		return tipoVenta != null && tipoVenta == Constantes.TPV_CAMBIO_VIAJE.intValue();
	}

	public boolean isVendaBilheteManual(Integer tipoVenta) {
		return tipoVenta != null && tipoVenta == Constantes.TPV_MANUAL.intValue();
	}
	
	public boolean isVendaBilheteAbertoManual(Integer tipoVenta) {
		return tipoVenta != null && tipoVenta == Constantes.TPV_VENDA_BOLETO_ABERTO_MANUAL.intValue();
	}

	public boolean isVendaBilheteAberto(Integer tipoVenta) {
		return tipoVenta != null && tipoVenta == Constantes.TPV_BOLETO_ABIERTO.intValue();
	}

	public boolean isVendaBilheteConfirmaAberto(Integer tipoVenta) {
		return tipoVenta != null && tipoVenta == Constantes.TPV_CONFIRMA_ABIERTO.intValue();
	}

	public boolean isVendaBilheteCheckin(Integer tipoVenta) {
		return tipoVenta != null && tipoVenta == Constantes.TPV_CHECKIN_VIAGEM.intValue();
	}

	public boolean isSemMotivocancelacion() {
		return getMotivoCancelacionId() == null;
	}

	public boolean isMotivocancelacionAgrupamento() {
		return !isSemMotivocancelacion() && getMotivoCancelacionId() == Constantes.MVO_CANCEL_BOLETO_AGRUPAMENTO.intValue();
	}

	public boolean isMotivocancelacionCancelado() {
		return !isSemMotivocancelacion() && getMotivoCancelacionId() == Constantes.MVO_CANCEL_CANCELACION.intValue();
	}

	public boolean isMotivocancelacionDevolvido() {
		return !isSemMotivocancelacion() && (getMotivoCancelacionId() == Constantes.MVO_CANCEL_DEVOLUCAO.intValue()
				|| getMotivoCancelacionId() == Constantes.MVO_CANCEL_DEVOLUCAO_CONTIGENCIA_50.intValue()
				|| getMotivoCancelacionId() == Constantes.MVO_CANCEL_DEVOLUCAO_CONTIGENCIA_100.intValue());
	}

	public boolean isMotivocancelacionEntregaGap() {
		return !isSemMotivocancelacion()
				&& getMotivoCancelacionId() == Constantes.MVO_CANCEL_BOLETO_ENTREGADO.intValue();
	}

	public boolean isMotivocancelacionTransferido() {
		return !isSemMotivocancelacion()
				&& getMotivoCancelacionId() == Constantes.MVO_CANCEL_TRANSFERENCIA.intValue();
	}

	public boolean isMotivocancelacionTrocado() {
		return !isSemMotivocancelacion()
				&& getMotivoCancelacionId() == Constantes.MVO_CANCEL_TROCA.intValue();
	}

	public boolean isMotivocancelacionCheckin() {
		return !isSemMotivocancelacion()
				&& getMotivoCancelacionId() == Constantes.MVO_CANCEL_CHECKIN.intValue();
	}

	public boolean isMotivocancelacionGeracaoOcd() {
		return !isSemMotivocancelacion()
				&& getMotivoCancelacionId() == Constantes.MVO_CANCEL_GERACAO_OCD.intValue();
	}

	public boolean isMotivocancelacionQuitacaoOcd() {
		return !isSemMotivocancelacion()
				&& getMotivoCancelacionId() == Constantes.MVO_CANCEL_QUITACAO_OCD.intValue();
	}
	
	/** ABA BILHETE MANUAL */
	public boolean isBilhetesManualVendido() {
		return (isVendaBilheteManual(getTipoVenta()) && isStatusVendido() && isSemMotivocancelacion()) || // Venda sem alteracao
			   (isVendaBilheteManual(getTipoVenta()) && isStatusVendido() && isMotivocancelacionTransferido()); // Venda transferida;
	}
	
	/** ABA BILHETE MANUAL */
	public boolean isBilhetesAbertoManualVendido() {
		return (isVendaBilheteAbertoManual(getTipoVenta()) && isStatusVendido() && isSemMotivocancelacion()) || // Venda sem alteracao
			   (isVendaBilheteAbertoManual(getTipoVenta()) && isStatusVendido() && isMotivocancelacionTransferido()); // Venda transferida;
	}

	public boolean isStatusVendido() {
		return IndStatusBoleto.V.equals(getIndstatusboletoEnum());
	}

	public boolean isStatusCancelado() {
		return IndStatusBoleto.C.equals(getIndstatusboletoEnum());
	}

	public boolean isStatusEntregue() {
		return IndStatusBoleto.E.equals(getIndstatusboletoEnum());
	}

	public boolean isStatusTroca() {
		return IndStatusBoleto.T.equals(getIndstatusboletoEnum());
	}

	public boolean isStatusExtraviado() {
		return IndStatusBoleto.X.equals(getIndstatusboletoEnum());
	}

	public boolean isStatusMarcado() {
		return IndStatusBoleto.M.equals(getIndstatusboletoEnum());
	}

	public String getNombpasajero() {
		return nombpasajero;
	}

	public void setNombpasajero(String nombpasajero) {
		this.nombpasajero = nombpasajero;
	}
	
	public boolean isBilheteEntregaConferidoVenda() {
		return isStatusEntregue() && this.getLogconferenciaId() != null;
	}

	public IndStatusBoleto getIndstatusboletoEnum() {
		return IndStatusBoleto.getIndStatusBoleto(getIndstatusboleto());
	}

	public Boolean getIndcarboletosdevolvidosconf() {
		return indcarboletosdevolvidosconf;
	}

	public void setIndcarboletosdevolvidosconf(Boolean indcarboletosdevolvidosconf) {
		this.indcarboletosdevolvidosconf = indcarboletosdevolvidosconf;
	}

	public boolean getExigeConferenciaDevolvido() {
		return exigeConferenciaDevolvido;
	}

	public void setExigeConferenciaDevolvido(boolean exigeConferenciaDevolvido) {
		this.exigeConferenciaDevolvido = exigeConferenciaDevolvido;
	}

	public boolean isExigeConferenciaAba() {
		return exigeConferenciaAba;
	}

	public void setExigeConferenciaAba(boolean exigeConferenciaAba) {
		this.exigeConferenciaAba = exigeConferenciaAba;
	}

	public Date getFeccorrida() {
		return feccorrida;
	}

	public void setFeccorrida(Date feccorrida) {
		this.feccorrida = feccorrida;
	}

	public Integer getCorridaId() {
		return corridaId;
	}

	public void setCorridaId(Integer corridaId) {
		this.corridaId = corridaId;
	}

	public BigDecimal getValorTabela() {
		return valorTabela;
	}

	public void setValorTabela(BigDecimal valorTabela) {
		this.valorTabela = valorTabela;
	}

	public String getFeccorridaServico() {
		StringBuilder str = new StringBuilder();
		if (getFeccorrida() != null) {
			str.append(DateUtil.getStringDate(getFeccorrida(), "dd/MM"));
		}
		if (getCorridaId() != null) {
			if (str.length() > 0) {
				str.append(" - ");
			}
			str.append(getCorridaId());
		}

		return str.toString();
	}

	public boolean isBilheteGap() {
		return isAbaGapVendido() || isAbaGapCancelado() || isAbaGapDevolvido();
	}

	public boolean isTotalizarFormapago() {
		boolean totalizar = isTotalizarTipovenda();
		if(totalizar) {
			totalizar = !isOcd();
		}
		if(totalizar) {
			totalizar = !getIndreimpresion();
		}
		if(totalizar) {
			totalizar = !(isStatusTroca() && isVendaBilheteTransferencia(getTipoVenta()));
		}
		if(totalizar) {
			totalizar = !isVendaBilheteConfirmaAberto(getTipoVenta());
		}
		return totalizar;
	}

	public boolean isTotalizarTipovenda() {
		return isAbaBilheteManual() ||
			   isAbaBilheteVendido() ||
			   isAbaBilheteCancelado() || 
			   isAbaBilheteDevolvido() || 
			   isAbaGapVendido() ||
			   isAbaGapCancelado() || 
			   isAbaGapDevolvido();
	}

	public String getOrderExigeConferencia() {
		if (isExigeConferenciaAba() || isExigeConferencia() || isExigeConferenciaBoletoDevolvido()) {
			if (!isConferido()) {
				return "A";
			} else if (isConferido()) {
				return "B";
			}
		}
		return "C";
	}
	
	public Date getOrderDataMovimento(){
		return conferencia.getDatamovimento();
	}
	
	/** Define bilhete na aba de venda manual */
	public boolean isAbaBilheteManual() {
		return isBilhetesManualVendido() ||
				isBilhetesAbertoManualVendido();
	}
	
	/** Define bilhete na aba de venda normal */
	public boolean isAbaBilheteVendido() {
		if(isVendaManual(getTipoVenta()) || isVendaBilheteAbertoManual(getTipoVenta())) {
			return false;
		}
		
		if(isStatusCancelado()) {
			return false;
		}
		
		if(isVendaGap(getTipoVenta()) && !isStatusEntregue()) {
			return false;
		}
				
		return isStatusVendido() || isStatusTroca() || isStatusEntregue() || isVendaBilheteTransferencia(getTipoVenta());
	}
	public boolean isQuitacaoOCD() {
		if(getMotivoCancelacionId() != null){
			if(getMotivoCancelacionId() == Constantes.MVO_CANCEL_QUITACAO_OCD.intValue()){
				return true;
			}
		}
		return false;
	}
	
	/** Define bilhete na aba de venda cancelada */
	public boolean isAbaBilheteCancelado() {
		if(isVendaManual(getTipoVenta()) && isStatusCancelado()) {
			return isMotivocancelacionCancelado();
		}
		
		
		if(isVendaManual(getTipoVenta()) || isVendaBilheteAbertoManual(getTipoVenta())) {
			return false;
		}
		
		if(!isStatusCancelado()) {
			return false;
		}
		
		if(isVendaGap(getTipoVenta()) && isNotNumFolioPreImpressoGerado()) {
			return false;
		}
		
		return isMotivocancelacionCancelado();
	}
	
	/** Define bilhete na aba de venda devolvida */
	public boolean isAbaBilheteDevolvido() {
		
		if(isVendaManual(getTipoVenta()) || isVendaBilheteAbertoManual(getTipoVenta())) {
			if(isMotivocancelacionDevolvido() || isMotivocancelacionGeracaoOcd() || isMotivocancelacionTrocado()) {
				return true;
			}
			return false;
		}
		
		if(!isStatusCancelado()) {
			return false;
		}
		
		if(isVendaGap(getTipoVenta()) && isNotNumFolioPreImpressoGerado()) {
			return false;
		}
		
		return isMotivocancelacionDevolvido() || isMotivocancelacionGeracaoOcd() || isMotivocancelacionTrocado() || isMotivocancelacionTransferido();
	}
	
	/** Define bilhete na aba de gap */
	public boolean isAbaGapVendido() {
		if(isStatusCancelado()) {
			return false;
		}

		if((!isVendaGap(getTipoVenta()) && !isVendaBilheteTransferencia(getTipoVenta()))) {
			return false;
		}
		
		return (isStatusVendido() || isStatusTroca()) && isNotNumFolioPreImpressoGerado();
	}
	
	/** Define bilhete na aba de gap cancelada */
	public boolean isAbaGapCancelado() {
		if(!isStatusCancelado()) {
			return false;
		}

		if(!isVendaGap(getTipoVenta())) {
			return false;
		}
		
		return isMotivocancelacionCancelado() && isNotNumFolioPreImpressoGerado();
	}
	
	/** Define bilhete na aba de gap devolvida */
	public boolean isAbaGapDevolvido() {
		if(!isStatusCancelado()) {
			return false;
		}

		if(!isVendaGap(getTipoVenta())) {
			return false;
		}
		
		return (isMotivocancelacionDevolvido() || isMotivocancelacionGeracaoOcd() || isMotivocancelacionTrocado()) && isNotNumFolioPreImpressoGerado();
	}

	public BigDecimal getValorPagarOcd() {
		return valorPagarOcd;
	}

	public void setValorPagarOcd(BigDecimal valorPagarOcd) {
		this.valorPagarOcd = valorPagarOcd;
	}

	public BigDecimal getValorTarjetaOcd() {
		return valorTarjetaOcd;
	}

	public void setValorTarjetaOcd(BigDecimal valorTarjetaOcd) {
		this.valorTarjetaOcd = valorTarjetaOcd;
	}

	public Boolean getIndCancelacion() {
		return indCancelacion;
	}

	public void setIndCancelacion(Boolean indCancelacion) {
		this.indCancelacion = indCancelacion;
	}

	public Integer getTipoventaAnteriorId() {
		return tipoventaAnteriorId;
	}

	public void setTipoventaAnteriorId(Integer tipoventaAnteriorId) {
		this.tipoventaAnteriorId = tipoventaAnteriorId;
	}
	
	private boolean isNotNumFolioPreImpressoGerado() {
		return StringUtils.isBlank(getNumFolioPreImpreso());
	}
	
	public Boolean getIndreimpresion() {
		return indreimpresion != null ? indreimpresion : false;
	}

	public void setIndreimpresion(Boolean indreimpresion) {
		this.indreimpresion = indreimpresion;
	}
	
	@Override
	public String toString() {
		return "BoletoComissao [boletoId=" + boletoId + ", tipoVenta=" + tipoVenta + ", indstatusboleto=" + indstatusboleto + ", motivoCancelacionId=" + motivoCancelacionId + ", descmotivocancelacion=" + descmotivocancelacion + ", tipoVentaOriginal1=" + tipoVentaOriginal1 + ", tipoVentaOriginal2=" + tipoVentaOriginal2 + ", indCancelacion=" + indCancelacion + ", indreimpresion=" + indreimpresion + ", nombpasajero=" + nombpasajero + ", total=" + getTotal() + "]";
	}

	public boolean isNotSomarBilhete() {
		if(getIndreimpresion()) {
			return true;
		}
		
		return false;
	}

	public Long getCajaId() {
		return cajaId;
	}

	public void setCajaId(Long cajaId) {
		this.cajaId = cajaId;
	}
	
	public Long getTransacaoOriginalId() {
		return transacaoOriginalId;
	}

	public void setTransacaoOriginalId(Long transacaoOriginalId) {
		this.transacaoOriginalId = transacaoOriginalId;
	}

	public Conferencia getConferencia() {
		return conferencia;
	}

	public void setConferencia(Conferencia conferencia) {
		this.conferencia = conferencia;
	}

	public Date getFeccorte() {
		return feccorte;
	}

	public void setFeccorte(Date feccorte) {
		this.feccorte = feccorte;
	}

	public BigDecimal getValorbase() {
		return valorbase;
	}

	public void setValorbase(BigDecimal valorbase) {
		this.valorbase = valorbase;
	}

	public Long getTransacaoId() {
		return transacaoId;
	}

	public void setTransacaoId(Long transacaoId) {
		this.transacaoId = transacaoId;
	}

	public Boolean getConferidoEntrega() {
		return conferidoEntrega;
	}

	public void setConferidoEntrega(Boolean conferidoEntrega) {
		this.conferidoEntrega = conferidoEntrega;
	}
	
	/**
	 * Retorna TRUE se o motivo de cancelamento for uma geração de OCD e a forma de pagamento for geração de OCD
	 * @return
	 */
	public boolean isDiferencaTrocaGeracaoOcd() {
		return isMotivocancelacionGeracaoOcd() &&
			   getFormapagoId() != null && getFormapagoId() == Constantes.FORMA_PAGO_GERACAO_OCD.intValue();
	}

	public Integer getPtovtaventaId() {
		return ptovtaventaId;
	}

	public void setPtovtaventaId(Integer ptovtaventaId) {
		this.ptovtaventaId = ptovtaventaId;
	}

	public Integer getUsuarioId() {
		return usuarioId;
	}

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

	public Integer getTurnoId() {
		return turnoId;
	}

	public void setTurnoId(Integer turnoId) {
		this.turnoId = turnoId;
	}

}
