package com.rjconsultores.ventaboletos.entidad;

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

import javax.persistence.CascadeType;
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.OneToMany;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;

import org.hibernate.annotations.LazyCollection;
import org.hibernate.annotations.LazyCollectionOption;

import com.rjconsultores.ventaboletos.utilerias.UsuarioLogado;

@Entity
@Table(name = "OCD_PARAM")
public class OCDParam implements java.io.Serializable {

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	private Long ocdparamId;
	private BigDecimal penalizacion;
	private Integer diasPagar;
	private PuntoVenta puntoventa;
	private Empresa empresa;
	private Estado estado;
	private Boolean activo;
	private Date fecmodif;
	private Integer usuarioId;
	private Boolean indOCDDefault;
	private Boolean indOCDTroca;
	private Boolean indOCDTransferencia;
	private Boolean indPenalizacionOCD;
	private Boolean indOcdDinheiro;
	private Boolean indtotalbilhete;
	private Boolean indsempregerarapagar;
	private Boolean indOCDPorFormadePagamento;
	private BigDecimal tiempoLimitePenalizacion;
	private List<OCDPtoVtaParam> listOCDPtoVtaParam;
	private Boolean indEstornoPix;

	public OCDParam(Long ocdparamId, BigDecimal penalizacion, Integer diasPagar, PuntoVenta puntoventa, Empresa empresa,
			Estado estado, Boolean activo, Date fecmodif, Integer usuarioId) {
		super();
		this.ocdparamId = ocdparamId;
		this.penalizacion = penalizacion;
		this.diasPagar = diasPagar;
		this.puntoventa = puntoventa;
		this.empresa = empresa;
		this.estado = estado;
		this.activo = activo;
		this.fecmodif = fecmodif;
		this.usuarioId = usuarioId;
	}

	public OCDParam() {
		/* ... */}

	@SequenceGenerator(name = "OCD_PARAM_SEQ", sequenceName = "OCD_PARAM_SEQ", allocationSize = 1)
	@Id
	@GeneratedValue(strategy = GenerationType.AUTO, generator = "OCD_PARAM_SEQ")
	@Column(name = "OCDPARAM_ID", unique = true, nullable = false, precision = 15, scale = 0)
	public Long getOcdparamId() {
		return ocdparamId;
	}

	public void setOcdparamId(Long ocdparamId) {
		this.ocdparamId = ocdparamId;
	}

	@Column(name = "PENALIZACION", length = 10)
	public BigDecimal getPenalizacion() {
		return penalizacion;
	}

	public void setPenalizacion(BigDecimal penalizacion) {
		this.penalizacion = penalizacion;
	}

	@Column(name = "DIAS_PAGAR", length = 10)
	public Integer getDiasPagar() {
		return diasPagar;
	}

	public void setDiasPagar(Integer diasPagar) {
		this.diasPagar = diasPagar;
	}

	@JoinColumn(name = "PUNTOVENTA_ID")
	@ManyToOne
	public PuntoVenta getPuntoventa() {
		return puntoventa;
	}

	public void setPuntoventa(PuntoVenta puntoventa) {
		this.puntoventa = puntoventa;
	}

	@JoinColumn(name = "EMPRESA_ID")
	@ManyToOne
	public Empresa getEmpresa() {
		return empresa;
	}

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

	@JoinColumn(name = "ESTADO_ID")
	@ManyToOne
	public Estado getEstado() {
		return estado;
	}

	public void setEstado(Estado estado) {
		this.estado = estado;
	}

	@Column(name = "ACTIVO", precision = 1, scale = 0)
	public Boolean getActivo() {
		return activo;
	}

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

	@Temporal(TemporalType.DATE)
	@Column(name = "FECMODIF", length = 7)
	public Date getFecmodif() {
		return fecmodif;
	}

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

	@Column(name = "USUARIO_ID", precision = 7, scale = 0)
	public Integer getUsuarioId() {
		return usuarioId;
	}

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

	@Column(name = "INDOCDDEFAULT")
	public Boolean getIndOCDDefault() {
		return indOCDDefault;
	}

	public void setIndOCDDefault(Boolean indOCDDefault) {
		this.indOCDDefault = indOCDDefault;
	}

	@Column(name = "INDOCDTROCA")
	public Boolean getIndOCDTroca() {
		return indOCDTroca;
	}

	public void setIndOCDTroca(Boolean indOCDTroca) {
		this.indOCDTroca = indOCDTroca;
	}

	public Boolean getIndPenalizacionOCD() {
		return indPenalizacionOCD;
	}

	public void setIndPenalizacionOCD(Boolean indPenalizacionOCD) {
		this.indPenalizacionOCD = indPenalizacionOCD;
	}

	/**
	 * @return the indOcdDinheiro
	 */
	@Column(name = "INDOCDDINHEIRO")
	public Boolean getIndOcdDinheiro() {
		return indOcdDinheiro;
	}

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

	@Column(name = "INDOCDTRANSFERENCIA")
	public Boolean getIndOCDTransferencia() {
		return indOCDTransferencia;
	}

	public void setIndOCDTransferencia(Boolean indOCDTransferencia) {
		this.indOCDTransferencia = indOCDTransferencia;
	}

	@Column(name = "INDTOTALBILHETE")
	public Boolean getIndtotalbilhete() {
		return indtotalbilhete;
	}

	public void setIndtotalbilhete(Boolean indtotalbilhete) {
		this.indtotalbilhete = indtotalbilhete;
	}

	@Column(name = "TIEMPOLIMITEPENALIZACION")
	public BigDecimal getTiempoLimitePenalizacion() {
		return tiempoLimitePenalizacion;
	}

	public void setTiempoLimitePenalizacion(BigDecimal tiempoLimitePenalizacion) {
		this.tiempoLimitePenalizacion = tiempoLimitePenalizacion;
	}

	@Column(name = "INDOCDFORMAPAGAMENTO")
	public Boolean getIndOCDPorFormadePagamento() {
		return indOCDPorFormadePagamento;
	}

	public void setIndOCDPorFormadePagamento(Boolean indOCDPorFormadePagamento) {
		this.indOCDPorFormadePagamento = indOCDPorFormadePagamento;
	}

	public OCDPtoVtaParam addOCDPtoVtaParam(OCDPtoVtaParam ocdPtoVtaParam) {
		OCDPtoVtaParam ocd = new OCDPtoVtaParam();
		ocd.setPuntoventa(ocdPtoVtaParam.getPuntoventa());
		ocd.setOcdParam(ocdPtoVtaParam.getOcdParam());
		ocd.setActivo(Boolean.TRUE);
		ocd.setFecmodif(Calendar.getInstance().getTime());
		ocd.setUsuarioId(UsuarioLogado.getUsuarioLogado().getUsuarioId());
		this.listOCDPtoVtaParam.add(ocd);
		return ocd;
	}

	public void removePtovtaOCDParam(OCDPtoVtaParam ocdPtoVtaParam) {
		this.listOCDPtoVtaParam.remove(ocdPtoVtaParam);

	}

	/**
	 * @return the listOCDPtoVtaParam
	 * 
	 */
	@OneToMany(cascade = CascadeType.ALL, mappedBy = "ocdParam")
	@LazyCollection(LazyCollectionOption.FALSE)
	public List<OCDPtoVtaParam> getListOCDPtoVtaParam() {
		return listOCDPtoVtaParam;
	}

	/**
	 * @param listOCDPtoVtaParam the listOCDPtoVtaParam to set
	 */
	public void setListOCDPtoVtaParam(List<OCDPtoVtaParam> listOCDPtoVtaParam) {
		this.listOCDPtoVtaParam = listOCDPtoVtaParam;
	}

	@Column(name = "INDSEMPREGERARAPAGAR")
	public Boolean getIndsempregerarapagar() {
		return indsempregerarapagar;
	}

	public void setIndsempregerarapagar(Boolean indsempregerarapagar) {
		this.indsempregerarapagar = indsempregerarapagar;
	}

	public Boolean getIndEstornoPix() {
		return indEstornoPix == null ? false : indEstornoPix;
	}

	public void setIndEstornoPix(Boolean indEstornoPix) {
		this.indEstornoPix = indEstornoPix;
	}

}