/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package com.cosmodas.EntCosmos;

import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;
import javax.persistence.Basic;
import javax.persistence.Column;
import javax.persistence.EmbeddedId;
import javax.persistence.Entity;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import javax.xml.bind.annotation.XmlRootElement;

/**
 * @author obper
 */
@Entity
@Table(name = "facturas")
@XmlRootElement
@NamedQueries({
        @NamedQuery(name = "Facturas.findAll", query = "SELECT f FROM Facturas f"),
        @NamedQuery(name = "Facturas.findByFacturaSerie", query = "SELECT f FROM Facturas f WHERE f.facturasPK.facturaSerie = :facturaSerie"),
        @NamedQuery(name = "Facturas.findByFacturaCodigo", query = "SELECT f FROM Facturas f WHERE f.facturasPK.facturaCodigo = :facturaCodigo"),
        @NamedQuery(name = "Facturas.findByFacturaCodigoAndSerie", query = "SELECT f FROM Facturas f WHERE f.facturasPK.facturaCodigo = :facturaCodigo AND f.facturasPK.facturaSerie = :facturaSerie"),
        @NamedQuery(name = "Facturas.findByProgramaCodigo", query = "SELECT f FROM Facturas f WHERE f.programaCodigo = :programaCodigo"),
        @NamedQuery(name = "Facturas.findByFacturaAnulada", query = "SELECT f FROM Facturas f WHERE f.facturaAnulada = :facturaAnulada"),
        @NamedQuery(name = "Facturas.findByDocumentoCodigo", query = "SELECT f FROM Facturas f WHERE f.documentoCodigo = :documentoCodigo"),
        @NamedQuery(name = "Facturas.findByFacturaFecha", query = "SELECT f FROM Facturas f WHERE f.facturaFecha = :facturaFecha"),
        @NamedQuery(name = "Facturas.findByFacturaTotalSinDescuento", query = "SELECT f FROM Facturas f WHERE f.facturaTotalSinDescuento = :facturaTotalSinDescuento"),
        @NamedQuery(name = "Facturas.findByFacturaTotalConDescuento", query = "SELECT f FROM Facturas f WHERE f.facturaTotalConDescuento = :facturaTotalConDescuento"),
        @NamedQuery(name = "Facturas.findByFacturaIva", query = "SELECT f FROM Facturas f WHERE f.facturaIva = :facturaIva"),
        @NamedQuery(name = "Facturas.findByFacturaCredito", query = "SELECT f FROM Facturas f WHERE f.facturaCredito = :facturaCredito"),
        @NamedQuery(name = "Facturas.findByFacturaImpresa", query = "SELECT f FROM Facturas f WHERE f.facturaImpresa = :facturaImpresa"),
        @NamedQuery(name = "Facturas.findByFacturaReparto", query = "SELECT f FROM Facturas f WHERE f.facturaReparto = :facturaReparto"),
        @NamedQuery(name = "Facturas.findByFacturaenvio", query = "SELECT f FROM Facturas f WHERE f.facturaenvio = :facturaenvio"),
        @NamedQuery(name = "Facturas.findByOtrodesc", query = "SELECT f FROM Facturas f WHERE f.otrodesc = :otrodesc")})
public class Facturas implements Serializable {
    private static final long serialVersionUID = 1L;
    @EmbeddedId
    protected FacturasPK facturasPK;
    @Basic(optional = false)
    @NotNull
    @Size(min = 1, max = 3)
    @Column(name = "programa_codigo")
    private String programaCodigo;
    @Basic(optional = false)
    @NotNull
    @Column(name = "factura_anulada")
    private boolean facturaAnulada;
    @Basic(optional = false)
    @NotNull
    @Size(min = 1, max = 2)
    @Column(name = "documento_codigo")
    private String documentoCodigo;
    @Basic(optional = false)
    @NotNull
    @Column(name = "factura_fecha")
    @Temporal(TemporalType.DATE)
    private Date facturaFecha;
    // @Max(value=?)  @Min(value=?)//if you know range of your decimal fields consider using these annotations to enforce field validation
    @Basic(optional = false)
    @NotNull
    @Column(name = "factura_total_sin_descuento")
    private BigDecimal facturaTotalSinDescuento;
    @Basic(optional = false)
    @NotNull
    @Column(name = "factura_total_con_descuento")
    private BigDecimal facturaTotalConDescuento;
    @Basic(optional = false)
    @NotNull
    @Column(name = "factura_iva")
    private BigDecimal facturaIva;
    @Basic(optional = false)
    @NotNull
    @Column(name = "factura_credito")
    private boolean facturaCredito;
    @Basic(optional = false)
    @NotNull
    @Column(name = "factura_impresa")
    private boolean facturaImpresa;
    @Basic(optional = false)
    @NotNull
    @Column(name = "factura_reparto")
    private boolean facturaReparto;
    @Basic(optional = false)
    @NotNull
    @Column(name = "facturaenvio")
    private Character facturaenvio;
    @Basic(optional = false)
    @NotNull
    @Column(name = "otrodesc")
    private BigDecimal otrodesc;
    @JoinColumn(name = "consultor_codigo", referencedColumnName = "consultor_codigo")
    @ManyToOne(optional = false)
    private Consultores consultorCodigo;
    @JoinColumn(name = "sucursal_codigo", referencedColumnName = "sucursal_codigo")
    @ManyToOne(optional = false)
    private Sucursales sucursalCodigo;

    public Facturas() {
    }

    public Facturas(FacturasPK facturasPK) {
        this.facturasPK = facturasPK;
    }

    public Facturas(FacturasPK facturasPK, String programaCodigo, boolean facturaAnulada, String documentoCodigo, Date facturaFecha, BigDecimal facturaTotalSinDescuento, BigDecimal facturaTotalConDescuento, BigDecimal facturaIva, boolean facturaCredito, boolean facturaImpresa, boolean facturaReparto, Character facturaenvio, BigDecimal otrodesc) {
        this.facturasPK = facturasPK;
        this.programaCodigo = programaCodigo;
        this.facturaAnulada = facturaAnulada;
        this.documentoCodigo = documentoCodigo;
        this.facturaFecha = facturaFecha;
        this.facturaTotalSinDescuento = facturaTotalSinDescuento;
        this.facturaTotalConDescuento = facturaTotalConDescuento;
        this.facturaIva = facturaIva;
        this.facturaCredito = facturaCredito;
        this.facturaImpresa = facturaImpresa;
        this.facturaReparto = facturaReparto;
        this.facturaenvio = facturaenvio;
        this.otrodesc = otrodesc;
    }

    public Facturas(String facturaSerie, String facturaCodigo) {
        this.facturasPK = new FacturasPK(facturaSerie, facturaCodigo);
    }

    public FacturasPK getFacturasPK() {
        return facturasPK;
    }

    public void setFacturasPK(FacturasPK facturasPK) {
        this.facturasPK = facturasPK;
    }

    public String getProgramaCodigo() {
        return programaCodigo;
    }

    public void setProgramaCodigo(String programaCodigo) {
        this.programaCodigo = programaCodigo;
    }

    public boolean getFacturaAnulada() {
        return facturaAnulada;
    }

    public void setFacturaAnulada(boolean facturaAnulada) {
        this.facturaAnulada = facturaAnulada;
    }

    public String getDocumentoCodigo() {
        return documentoCodigo;
    }

    public void setDocumentoCodigo(String documentoCodigo) {
        this.documentoCodigo = documentoCodigo;
    }

    public Date getFacturaFecha() {
        return facturaFecha;
    }

    public void setFacturaFecha(Date facturaFecha) {
        this.facturaFecha = facturaFecha;
    }

    public BigDecimal getFacturaTotalSinDescuento() {
        return facturaTotalSinDescuento;
    }

    public void setFacturaTotalSinDescuento(BigDecimal facturaTotalSinDescuento) {
        this.facturaTotalSinDescuento = facturaTotalSinDescuento;
    }

    public BigDecimal getFacturaTotalConDescuento() {
        return facturaTotalConDescuento;
    }

    public void setFacturaTotalConDescuento(BigDecimal facturaTotalConDescuento) {
        this.facturaTotalConDescuento = facturaTotalConDescuento;
    }

    public BigDecimal getFacturaIva() {
        return facturaIva;
    }

    public void setFacturaIva(BigDecimal facturaIva) {
        this.facturaIva = facturaIva;
    }

    public boolean getFacturaCredito() {
        return facturaCredito;
    }

    public void setFacturaCredito(boolean facturaCredito) {
        this.facturaCredito = facturaCredito;
    }

    public boolean getFacturaImpresa() {
        return facturaImpresa;
    }

    public void setFacturaImpresa(boolean facturaImpresa) {
        this.facturaImpresa = facturaImpresa;
    }

    public boolean getFacturaReparto() {
        return facturaReparto;
    }

    public void setFacturaReparto(boolean facturaReparto) {
        this.facturaReparto = facturaReparto;
    }

    public Character getFacturaenvio() {
        return facturaenvio;
    }

    public void setFacturaenvio(Character facturaenvio) {
        this.facturaenvio = facturaenvio;
    }

    public BigDecimal getOtrodesc() {
        return otrodesc;
    }

    public void setOtrodesc(BigDecimal otrodesc) {
        this.otrodesc = otrodesc;
    }

    public Consultores getConsultorCodigo() {
        return consultorCodigo;
    }

    public void setConsultorCodigo(Consultores consultorCodigo) {
        this.consultorCodigo = consultorCodigo;
    }

    public Sucursales getSucursalCodigo() {
        return sucursalCodigo;
    }

    public void setSucursalCodigo(Sucursales sucursalCodigo) {
        this.sucursalCodigo = sucursalCodigo;
    }

    @Override
    public int hashCode() {
        int hash = 0;
        hash += (facturasPK != null ? facturasPK.hashCode() : 0);
        return hash;
    }

    @Override
    public boolean equals(Object object) {
        // TODO: Warning - this method won't work in the case the id fields are not set
        if (!(object instanceof Facturas)) {
            return false;
        }
        Facturas other = (Facturas) object;
        if ((this.facturasPK == null && other.facturasPK != null) || (this.facturasPK != null && !this.facturasPK.equals(other.facturasPK))) {
            return false;
        }
        return true;
    }

    @Override
    public String toString() {
        return "com.cosmodas.dbcon.Facturas[ facturasPK=" + facturasPK + " ]";
    }

}
