package com.rjconsultores.ventaboletos.entidad;

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

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;

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

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;

	@SequenceGenerator(name = "OCD_SEQ", sequenceName = "OCD_SEQ", allocationSize = 1)
	@Id
	@GeneratedValue(strategy = GenerationType.AUTO, generator = "OCD_SEQ")
	@Column(name = "OCD_ID", unique = true, nullable = false, precision = 15, scale = 0)
	private Long ocdId;
	
	@JoinColumn(name = "BOLETO_ID")
	@ManyToOne(fetch = FetchType.LAZY)
	private Boleto boleto;
	
	@JoinColumn(name = "PUNTOVENTA_ID")
	@ManyToOne
	private PuntoVenta puntoVenta;
	
	@Column(name = "NUMTARJETA",length=16)
	private String numtarjeta;
	@Column(name = "NUMAUTORIZACION",length=15)
	private String numautorizacion;
	@Column(name = "NSU",length=6)
	private String nsu;
	
	@Column(name = "NUMOPERACION", length = 36)
	private String numoperacion;
	
	@Temporal(TemporalType.DATE)
	@Column(name = "FECPAGAR", length = 7)
	private Date fecpagar;
	@Column(name = "VALOR_PAGAR", precision = 7, scale = 2)
	private BigDecimal valorPagar;
	@Column(name = "SALDO_PAGAR", precision = 7, scale = 2)
	private BigDecimal saldoPagar;
	@Column(name = "VALOR_TARJETA", precision = 7, scale = 2)
	private BigDecimal valorTarjeta;
	@Column(name = "PENALIZACION", precision = 7, scale = 2)
	private BigDecimal penalizacion;
	
	@Column(name = "USUARIOINC_ID", precision = 7, scale = 0)
	private Integer usuarioIncId;
	@Temporal(TemporalType.DATE)
	@Column(name = "FECINC", length = 7)
	private Date fecinc;
	
	@Column(name = "INDPAGO", precision = 1, scale = 0)
	private Boolean indpago;
	@Column(name = "USUARIOPAGO_ID", precision = 7, scale = 0)
	private Integer usuarioPagoId;
	@Temporal(TemporalType.DATE)
	@Column(name = "FECPAGO", length = 7)
	private Date fecpago;	
	@JoinColumn(name = "PUNTOVENTAPAGO_ID")
	@ManyToOne
	private PuntoVenta puntoVentaPago;
	
	@Temporal(TemporalType.DATE)
	@Column(name = "FECMODIF", length = 7)
	private Date fecmodif;
	@Column(name = "USUARIO_ID", precision = 7, scale = 0)
	private Integer usuarioId;
	@Column(name = "ACTIVO", precision = 1, scale = 0)
	private Boolean activo;
	
	@OneToMany(mappedBy = "ocd")
	private List<OCDDatosPagamento> ocdDatosPagamentos;
	
	public OCD(){
		
	}
	
	public OCD(Long ocdId, Boleto boleto, PuntoVenta puntoVenta,
			String numoperacion, Date fecpagar, BigDecimal valorPagar,
			BigDecimal penalizacion, Integer usuarioIncId, Date fecinc,
			Boolean indpago, Integer usuarioPagoId, Date fecpago,
			PuntoVenta puntoVentaPago, Date fecmodif, Integer usuarioId,
			Boolean activo) {
		super();
		this.ocdId = ocdId;
		this.boleto = boleto;
		this.puntoVenta = puntoVenta;
		this.numoperacion = numoperacion;
		this.fecpagar = fecpagar;
		this.valorPagar = valorPagar;
		this.penalizacion = penalizacion;
		this.usuarioIncId = usuarioIncId;
		this.fecinc = fecinc;
		this.indpago = indpago;
		this.usuarioPagoId = usuarioPagoId;
		this.fecpago = fecpago;
		this.puntoVentaPago = puntoVentaPago;
		this.fecmodif = fecmodif;
		this.usuarioId = usuarioId;
		this.activo = activo;
	}

	
	public OCD(Long ocdId, Boleto boleto, PuntoVenta puntoVenta,
			String numoperacion, Date fecpagar, BigDecimal valorPagar,
			BigDecimal penalizacion, Integer usuarioIncId) {
		super();
		this.ocdId = ocdId;
		this.boleto = boleto;
		this.puntoVenta = puntoVenta;
		this.numoperacion = numoperacion;
		this.fecpagar = fecpagar;
		this.valorPagar = valorPagar;
		this.penalizacion = penalizacion;
		this.usuarioIncId = usuarioIncId;
		
		this.fecinc = new Date();
		this.indpago = Boolean.FALSE;
		
		this.fecmodif = new Date();
		this.usuarioId = usuarioIncId;
		this.activo = Boolean.TRUE;
	}
	
	public Long getOcdId() {
		return ocdId;
	}
	public void setOcdId(Long ocdId) {
		this.ocdId = ocdId;
	}
	
	public String getNumoperacion() {
		return numoperacion;
	}
	public void setNumoperacion(String numoperacion) {
		this.numoperacion = numoperacion;
	}
	
	public Date getFecpagar() {
		return fecpagar;
	}
	public void setFecpagar(Date fecpagar) {
		this.fecpagar = fecpagar;
	}
	
	public BigDecimal getValorPagar() {
		return valorPagar;
	}
	public void setValorPagar(BigDecimal valorPagar) {
		this.valorPagar = valorPagar;
	}
	
	public BigDecimal getPenalizacion() {
		return penalizacion;
	}
	public void setPenalizacion(BigDecimal penalizacion) {
		this.penalizacion = penalizacion;
	}
	
	public Integer getUsuarioIncId() {
		return usuarioIncId;
	}
	public void setUsuarioIncId(Integer usuarioIncId) {
		this.usuarioIncId = usuarioIncId;
	}
	
	public Date getFecinc() {
		return fecinc;
	}
	public void setFecinc(Date fecinc) {
		this.fecinc = fecinc;
	}
	
	public Boolean getIndpago() {
		return indpago;
	}
	public void setIndpago(Boolean indpago) {
		this.indpago = indpago;
	}
	
	public Integer getUsuarioPagoId() {
		return usuarioPagoId;
	}
	public void setUsuarioPagoId(Integer usuarioPagoId) {
		this.usuarioPagoId = usuarioPagoId;
	}
	
	public Date getFecpago() {
		return fecpago;
	}
	public void setFecpago(Date fecpago) {
		this.fecpago = fecpago;
	}
	
	public PuntoVenta getPuntoVenta() {
		return puntoVenta;
	}

	public void setPuntoVenta(PuntoVenta puntoVenta) {
		this.puntoVenta = puntoVenta;
	}

	public PuntoVenta getPuntoVentaPago() {
		return puntoVentaPago;
	}

	public void setPuntoVentaPago(PuntoVenta puntoVentaPago) {
		this.puntoVentaPago = puntoVentaPago;
	}
	
	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 String getNumtarjeta() {
		return numtarjeta;
	}

	public void setNumtarjeta(String numtarjeta) {
		this.numtarjeta = numtarjeta;
	}
	public String getNumautorizacion() {
		return numautorizacion;
	}

	public void setNumautorizacion(String numautorizacion) {
		this.numautorizacion = numautorizacion;
	}
	
	public String getNsu() {
		return nsu;
	}

	public void setNsu(String nsu) {
		this.nsu = nsu;
	}

	public List<OCDDatosPagamento> getOcdDatosPagamentos() {
		return ocdDatosPagamentos;
	}

	public void setOcdDatosPagamentos(List<OCDDatosPagamento> ocdDatosPagamentos) {
		this.ocdDatosPagamentos = ocdDatosPagamentos;
	}

	public BigDecimal getSaldoPagar() {
		return saldoPagar;
	}

	public void setSaldoPagar(BigDecimal saldoPagar) {
		this.saldoPagar = saldoPagar;
	}

	public Boleto getBoleto() {
		return boleto;
	}

	public void setBoleto(Boleto boleto) {
		this.boleto = boleto;
	}

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

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

	public BigDecimal getValorTarjeta() {
		return valorTarjeta;
	}

	public void setValorTarjeta(BigDecimal valorTarjeta) {
		this.valorTarjeta = valorTarjeta;
	}
	
}
