package com.rjconsultores.ventaboletos.entidad;

import java.io.Serializable;
import java.math.BigDecimal;
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.ManyToOne;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import javax.persistence.Transient;

import org.hibernate.Hibernate;

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

@AuditarClasse(nome = "ORGAO_CANCELACION", tela = "auditarClasse.OrgaoCancelacion")
@Entity
@Table(name = "ORGAO_CANCELACION")
@SequenceGenerator(name = "ORGAO_CANCELACION_SEQ", sequenceName = "ORGAO_CANCELACION_SEQ", allocationSize = 1)
public class OrgaoCancelacion implements Serializable,  Auditavel<OrgaoCancelacion> {

	private static final long serialVersionUID = 1L;


	@Id
	@Basic(optional = false)
	@GeneratedValue(strategy = GenerationType.AUTO, generator = "ORGAO_CANCELACION_SEQ")
	@Column(name = "ORGAOCANCELACION_ID")
	private Integer orgaoCancelacionId;
	@JoinColumn(name = "EMPRESA_ID", referencedColumnName = "EMPRESA_ID")
    @ManyToOne
	private Empresa empresa;
	@JoinColumn(name = "ORGAOCONCEDENTE_ID", referencedColumnName = "ORGAOCONCEDENTE_ID")
    @ManyToOne
	private OrgaoConcedente orgao;
	@Column(name = "PORCMULTA")
	private BigDecimal porcmulta;
	@Column(name = "PORCCAMBIO")
	private BigDecimal porccambio;
	@Column(name = "PORCCAMBIOEMBARCADO")
	private BigDecimal porcCambioEmbarcado;
	@Column(name = "ACTIVO")
	private Boolean activo;
	@Column(name = "FECMODIF")
	@Temporal(TemporalType.TIMESTAMP)
	private Date fecmodif;
	@Column(name = "USUARIO_ID")
	private Integer usuarioId;
	@Column(name = "TIEMPOLIMITE")
	private Integer tiempolimite;
	
	@Column(name = "TIEMPOLIMITE_MIN")
	private Integer tiempolimiteMin;
	
	@Column(name = "TIEMPOLIMITECAMBIO")
	private Integer tiempolimiteCambio;
	
	@Column(name = "TIEMPOLIMITECAMBIO_MIN")
	private Integer tiempolimiteCambioMin;
	
	@Column(name = "INDNAOPERMITETRANSFERENCIA")
	private Boolean indnaopermitetransferencia;
	@Column(name = "INDSOLICITADATOSTARJETA")
	private Boolean indSolicitaDatosTarjeta;
	@Column(name = "INDMULTATRANSFERENCIA")
	private Boolean indMultaTransferencia;
	@Column(name = "INDDEVOLUCAOTRANSFERENCIA")
	private Boolean indDevolucaoTransferencia;
	@Column(name = "INDCOBRANCATRANSFERENCIA")
	private Boolean indCobrancaTransferencia;
	@Column(name = "INDORGAOCONCEDENTETRANSF")
	private Boolean indOrgaoconcedentetransf;
	@Column(name = "INDMULTADEVOLUCAOABERTO")
	private Boolean indMultaDevolucaoAberto;
	@Column(name = "INDPERMITEDEVTOTALRIOCARD")
	private Boolean IndPermiteDevolucaoTotalRioCard;
	@Column(name = "PORCCOMISSAOVENDA")
	private BigDecimal porcMultaResolAgerba;
	@Column(name = "QTDE_LIMITE_TRANSF_REAT")
	private Integer qtdeLimiteTransfReat;
	
	@Column(name = "TEMPOLIMITE_APOS_SAIDA_H")
	private Integer tempolimiteAposSaidaH;
	
	@Column(name = "TEMPOLIMITE_APOS_SAIDA_MIN")
	private Integer tempolimiteAposSaidaMin;
	
	@Column(name = "TROCA_MESMO_DIA_ANTES_H")
	private Integer trocaMesmoDiaAntesHora;
	
	@Column(name = "TROCA_MESMO_DIA_ANTES_MIN")
	private Integer trocaMesmoDiaAntesMin;
	
	@Column(name = "TROCA_MESMO_DIA_APOS_H")
	private Integer trocaMesmoDiaAposHora;
	
	@Column(name = "TROCA_MESMO_DIA_APOS_MIN")
	private Integer trocaMesmoDiaAposMin;
	
	@Column(name = "TEMPO_TROCA_POLTRONA_H")
	private Integer tempoTrocaPoltronaH;
	
	@Column(name = "TEMPO_TROCA_POLTRONA_MIN")
	private Integer tempoTrocaPoltronaMin;
	
	@Column(name = "INDBLOQUEIOREMARCADO")
	private Boolean indBloqueioRemarcado;
	
	@Column(name = "INDPERMPAGMULTAPREESTORNO")
	private Boolean indPermPagMultaPreEstorno;
	

	@Column(name = "INDIMPRIMECOMPROVANTETRANS")
	private Boolean indImprimeComprovanteTransferencia;
	
	@Column(name = "TEMPOCANCELNAOPRESENCIALHORA")
	private Integer tempoCancelNaoPresencialHora;
	
	@Column(name = "TEMPOCANCELNAOPRESENCIALMIN")
	private Integer tempoCancelNaoPresencialMin;
	

	@Transient
	@NaoAuditar
	private OrgaoCancelacion orgaoCancelacionClone;

	public Integer getOrgaoCancelacionId() {
		return orgaoCancelacionId;
	}
	public void setOrgaoCancelacionId(Integer orgaoCancelacionId) {
		this.orgaoCancelacionId = orgaoCancelacionId;
	}
	public Empresa getEmpresa() {
		return empresa;
	}
	public void setEmpresa(Empresa empresa) {
		this.empresa = empresa;
	}
	public OrgaoConcedente getOrgao() {
		return orgao;
	}
	public void setOrgao(OrgaoConcedente orgao) {
		this.orgao = orgao;
	}
	public BigDecimal getPorcmulta() {
		return porcmulta;
	}
	public void setPorcmulta(BigDecimal porcmulta) {
		this.porcmulta = porcmulta;
	}
	public BigDecimal getPorccambio() {
		return porccambio;
	}
	public void setPorccambio(BigDecimal porccambio) {
		this.porccambio = porccambio;
	}
	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 Integer getTiempolimite() {
		return tiempolimite;
	}
	public void setTiempolimite(Integer tiempolimite) {
		this.tiempolimite = tiempolimite;
	}
	public Integer getTiempolimiteCambio() {
		return tiempolimiteCambio;
	}
	public void setTiempolimiteCambio(Integer tiempolimiteCambio) {
		this.tiempolimiteCambio = tiempolimiteCambio;
	}
	public Boolean getIndnaopermitetransferencia() {
		return indnaopermitetransferencia;
	}
	public void setIndnaopermitetransferencia(Boolean indnaopermitetransferencia) {
		this.indnaopermitetransferencia = indnaopermitetransferencia;
	}
	/**
	 * @return the porcCambioEmbarcado
	 */
	public BigDecimal getPorcCambioEmbarcado() {
		return porcCambioEmbarcado;
	}
	/**
	 * @param porcCambioEmbarcado the porcCambioEmbarcado to set
	 */
	public void setPorcCambioEmbarcado(BigDecimal porcCambioEmbarcado) {
		this.porcCambioEmbarcado = porcCambioEmbarcado;
	}
	public Boolean getIndSolicitaDatosTarjeta() {
		return indSolicitaDatosTarjeta;
	}
	public void setIndSolicitaDatosTarjeta(Boolean indSolicitaDatosTarjeta) {
		this.indSolicitaDatosTarjeta = indSolicitaDatosTarjeta;
	}

	/**
	 * @return the indMultaTransferencia
	 */
	public Boolean getIndMultaTransferencia() {
		return indMultaTransferencia;
	}

	/**
	 * @param indMultaTransferencia
	 *            the indMultaTransferencia to set
	 */
	public void setIndMultaTransferencia(Boolean indMultaTransferencia) {
		this.indMultaTransferencia = indMultaTransferencia;
	}

	/**
	 * @return the indDevolucaoTransferencia
	 */
	public Boolean getIndDevolucaoTransferencia() {
		return indDevolucaoTransferencia;
	}

	/**
	 * @param indDevolucaoTransferencia
	 *            the indDevolucaoTransferencia to set
	 */
	public void setIndDevolucaoTransferencia(Boolean indDevolucaoTransferencia) {
		this.indDevolucaoTransferencia = indDevolucaoTransferencia;
	}

	/**
	 * @return the indCobrancaTransferencia
	 */
	public Boolean getIndCobrancaTransferencia() {
		return indCobrancaTransferencia;
	}

	/**
	 * @param indCobrancaTransferencia
	 *            the indCobrancaTransferencia to set
	 */
	public void setIndCobrancaTransferencia(Boolean indCobrancaTransferencia) {
		this.indCobrancaTransferencia = indCobrancaTransferencia;
	}

	/**
	 * @return the indOrgaoconcedentetransf
	 */
	public Boolean getIndOrgaoconcedentetransf() {
		return indOrgaoconcedentetransf;
	}

	/**
	 * @param indOrgaoconcedentetransf
	 *            the indOrgaoconcedentetransf to set
	 */
	public void setIndOrgaoconcedentetransf(Boolean indOrgaoconcedentetransf) {
		this.indOrgaoconcedentetransf = indOrgaoconcedentetransf;
	}
	public Boolean getIndMultaDevolucaoAberto() {
		return indMultaDevolucaoAberto;
	}
	public void setIndMultaDevolucaoAberto(Boolean indMultaDevolucaoAberto) {
		this.indMultaDevolucaoAberto = indMultaDevolucaoAberto;
	}
	public Boolean getIndPermiteDevolucaoTotalRioCard() {		
		return IndPermiteDevolucaoTotalRioCard == null ? false : IndPermiteDevolucaoTotalRioCard;
	}
	public void setIndPermiteDevolucaoTotalRioCard(Boolean indPermiteDevolucaoTotalRioCard) {
		IndPermiteDevolucaoTotalRioCard = indPermiteDevolucaoTotalRioCard;
	}
	public BigDecimal getPorcMultaResolAgerba() {
		return porcMultaResolAgerba;
	}
	public void setPorcMultaResolAgerba(BigDecimal porMultaResolAgerba) {
		this.porcMultaResolAgerba = porMultaResolAgerba;
	}

	public Integer getQtdeLimiteTransfReat() {
		return qtdeLimiteTransfReat;
	}
	public void setQtdeLimiteTransfReat(Integer qtdeLimiteTransfReat) {
		this.qtdeLimiteTransfReat = qtdeLimiteTransfReat;
	}
	
	public Integer getTiempolimiteMin() {
		return tiempolimiteMin == null ? 0 : tiempolimiteMin;
	}
	
	public void setTiempolimiteMin(Integer tiempolimiteMin) {
		this.tiempolimiteMin = tiempolimiteMin;
	}
	
	public Integer getTiempolimiteCambioMin() {
		return tiempolimiteCambioMin == null ? 0 : tiempolimiteCambioMin;
	}
	
	public void setTiempolimiteCambioMin(Integer tiempolimiteCambioMin) {
		this.tiempolimiteCambioMin = tiempolimiteCambioMin;
	}
	
	public Integer getTempolimiteAposSaidaH() {
		return tempolimiteAposSaidaH == null ? 0 : tempolimiteAposSaidaH;
	}
	
	public void setTempolimiteAposSaidaH(Integer tempolimiteAposSaidaH) {
		this.tempolimiteAposSaidaH = tempolimiteAposSaidaH;
	}
	
	public Integer getTempolimiteAposSaidaMin() {
		return tempolimiteAposSaidaMin == null ? 0 : tempolimiteAposSaidaMin;
	}
	
	public void setTempolimiteAposSaidaMin(Integer tempolimiteAposSaidaMin) {
		this.tempolimiteAposSaidaMin = tempolimiteAposSaidaMin;
	}

	public Integer getTrocaMesmoDiaAntesHora() {
		return trocaMesmoDiaAntesHora == null ? 0 : trocaMesmoDiaAntesHora;
	}

	public void setTrocaMesmoDiaAntesHora(Integer trocaMesmoDiaAntesHora) {
		this.trocaMesmoDiaAntesHora = trocaMesmoDiaAntesHora;
	}

	public Integer getTrocaMesmoDiaAntesMin() {
		return trocaMesmoDiaAntesMin == null ? 0 : trocaMesmoDiaAntesMin;
	}

	public void setTrocaMesmoDiaAntesMin(Integer trocaMesmoDiaAntesMin) {
		this.trocaMesmoDiaAntesMin = trocaMesmoDiaAntesMin;
	}

	public Integer getTrocaMesmoDiaAposHora() {
		return trocaMesmoDiaAposHora == null ? 0 : trocaMesmoDiaAposHora;
	}

	public void setTrocaMesmoDiaAposHora(Integer trocaMesmoDiaAposHora) {
		this.trocaMesmoDiaAposHora = trocaMesmoDiaAposHora;
	}

	public Integer getTrocaMesmoDiaAposMin() {
		return trocaMesmoDiaAposMin == null ? 0 : trocaMesmoDiaAposMin;
	}

	public void setTrocaMesmoDiaAposMin(Integer trocaMesmoDiaAposMin) {
		this.trocaMesmoDiaAposMin = trocaMesmoDiaAposMin;
	}

	public Integer getTempoTrocaPoltronaH() {
		return tempoTrocaPoltronaH == null ? 0 : tempoTrocaPoltronaH;
	}

	public void setTempoTrocaPoltronaH(Integer tempoTrocaPoltronaH) {
		this.tempoTrocaPoltronaH = tempoTrocaPoltronaH;
	}

	public Integer getTempoTrocaPoltronaMin() {
		return tempoTrocaPoltronaMin == null ? 0 : tempoTrocaPoltronaMin;
	}

	public void setTempoTrocaPoltronaMin(Integer tempoTrocaPoltronaMin) {
		this.tempoTrocaPoltronaMin = tempoTrocaPoltronaMin;
	}
	public Boolean getIndBloqueioRemarcado() {
		return indBloqueioRemarcado;
	}
	
	public void setIndBloqueioRemarcado(Boolean indBloqueioRemarcado) {
		this.indBloqueioRemarcado = indBloqueioRemarcado;
	}
	
	
	public Boolean getIndPermPagMultaPreEstorno() {
		return indPermPagMultaPreEstorno;
	}

	public void setIndPermPagMultaPreEstorno(Boolean indPermPagMultaPreEstorno) {
		this.indPermPagMultaPreEstorno = indPermPagMultaPreEstorno;
	}
	

	
	public Boolean getIndImprimeComprovanteTransferencia() {
		return indImprimeComprovanteTransferencia;
	}
	public void setIndImprimeComprovanteTransferencia(Boolean indImprimeComprovanteTransferencia) {
		this.indImprimeComprovanteTransferencia = indImprimeComprovanteTransferencia;
	}

	@Override
	public void clonar() throws CloneNotSupportedException {
	
		orgaoCancelacionClone = new OrgaoCancelacion();
		orgaoCancelacionClone = (OrgaoCancelacion) this.clone();
		Hibernate.initialize(orgaoCancelacionClone.getOrgao());
		
	}
	@Override
	public OrgaoCancelacion getCloneObject() throws CloneNotSupportedException {
		return orgaoCancelacionClone;
	}
	@Override
	public String getTextoInclusaoExclusao() {
		return String.format("ID [%s]", getOrgaoCancelacionId());	
	}

	public Integer getTempoCancelNaoPresencialHora() {
		return tempoCancelNaoPresencialHora == null ? 0 : tempoCancelNaoPresencialHora;
	}

	public void setTempoCancelNaoPresencialHora(Integer tempoCancelNaoPresencialHora) {
		this.tempoCancelNaoPresencialHora = tempoCancelNaoPresencialHora;
	}

	public Integer getTempoCancelNaoPresencialMin() {
		return tempoCancelNaoPresencialMin  == null ? 0 : tempoCancelNaoPresencialMin;
	}

	public void setTempoCancelNaoPresencialMin(Integer tempoCancelNaoPresencialMin) {
		this.tempoCancelNaoPresencialMin = tempoCancelNaoPresencialMin;
	}
	
}
