/*
 * 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 java.util.List;
import javax.persistence.Basic;
import javax.persistence.CascadeType;
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.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.OneToMany;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import javax.validation.constraints.Size;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlTransient;

/**
 * @author informatica
 */
@Entity
@Table(name = "proceso_pedidos")
@XmlRootElement
@NamedQueries({
        @NamedQuery(name = "ProcesoPedidos.findAll", query = "SELECT p FROM ProcesoPedidos p ORDER BY p.idpp DESC")
        , @NamedQuery(name = "ProcesoPedidos.findByIdpp", query = "SELECT p FROM ProcesoPedidos p WHERE p.idpp = :idpp")
        , @NamedQuery(name = "ProcesoPedidos.findByTerritorio", query = "SELECT p FROM ProcesoPedidos p WHERE p.territorio = :territorio")
        , @NamedQuery(name = "ProcesoPedidos.findByProgramaCodigo", query = "SELECT p FROM ProcesoPedidos p WHERE p.programaCodigo = :programaCodigo")
        , @NamedQuery(name = "ProcesoPedidos.findByRutaReparto", query = "SELECT p FROM ProcesoPedidos p WHERE p.rutaReparto = :rutaReparto")
        , @NamedQuery(name = "ProcesoPedidos.findByIngresoPedido", query = "SELECT p FROM ProcesoPedidos p WHERE p.ingresoPedido = :ingresoPedido")
        , @NamedQuery(name = "ProcesoPedidos.findByAprobado", query = "SELECT p FROM ProcesoPedidos p WHERE p.aprobado = :aprobado")
        , @NamedQuery(name = "ProcesoPedidos.findByTiempoAprobado", query = "SELECT p FROM ProcesoPedidos p WHERE p.tiempoAprobado = :tiempoAprobado")
        , @NamedQuery(name = "ProcesoPedidos.findByInicioSacado", query = "SELECT p FROM ProcesoPedidos p WHERE p.inicioSacado = :inicioSacado")
        , @NamedQuery(name = "ProcesoPedidos.findByInicioSacadoB", query = "SELECT p FROM ProcesoPedidos p WHERE p.inicioSacadoB = :inicioSacadoB")
        , @NamedQuery(name = "ProcesoPedidos.findByFinSacado", query = "SELECT p FROM ProcesoPedidos p WHERE p.finSacado = :finSacado")
        , @NamedQuery(name = "ProcesoPedidos.findByFinSacadoB", query = "SELECT p FROM ProcesoPedidos p WHERE p.finSacadoB = :finSacadoB")
        , @NamedQuery(name = "ProcesoPedidos.findByInicioFacturacion", query = "SELECT p FROM ProcesoPedidos p WHERE p.inicioFacturacion = :inicioFacturacion")
        , @NamedQuery(name = "ProcesoPedidos.findByDespachado", query = "SELECT p FROM ProcesoPedidos p WHERE p.despachado = :despachado")
        , @NamedQuery(name = "ProcesoPedidos.findByCredito", query = "SELECT p FROM ProcesoPedidos p WHERE p.despachadoB = :despachadoB")
        , @NamedQuery(name = "ProcesoPedidos.findByTotalConDescuento", query = "SELECT p FROM ProcesoPedidos p WHERE p.totalConDescuento = :totalConDescuento")
        , @NamedQuery(name = "ProcesoPedidos.findByTotalSinDescuento", query = "SELECT p FROM ProcesoPedidos p WHERE p.totalSinDescuento = :totalSinDescuento")
        , @NamedQuery(name = "ProcesoPedidos.findByRepartoB", query = "SELECT p FROM ProcesoPedidos p WHERE p.repartoB = :repartoB")
        , @NamedQuery(name = "ProcesoPedidos.findByCodigoReparto", query = "SELECT p FROM ProcesoPedidos p WHERE p.codigoReparto = :codigoReparto")
//----------------------------------------------------------personalizadas--------------------------------------------------------------------
        //---updates---
        , @NamedQuery(name = "ProcesoPedidos.UpdateAprobacion", query = "UPDATE  ProcesoPedidos p SET p.aprobado= :aprobado, p.tiempoAprobado = :tiempoAprobado, p.numeracionDiaria = :numeracionDiaria WHERE p.idpp= :idpp")
        , @NamedQuery(name = "ProcesoPedidos.UpdateDespacho", query = "UPDATE  ProcesoPedidos p SET p.despachadoB = :despachadoB, p.despachado = :despachado WHERE p.idpp = :idpp")
        , @NamedQuery(name = "ProcesoPedidos.UpdateDespachoImp", query = "UPDATE  ProcesoPedidos p SET p.inicioSacadoB = :inicioSacadoB, p.inicioSacado = :inicioSacado WHERE p.idpp = :idpp")
        //--querys---
        , @NamedQuery(name = "ProcesoPedidos.findAllDesReport", query = "SELECT p FROM ProcesoPedidos p WHERE p.repartoB = false AND p.anulado = false ORDER BY p.idpp,p.aprobado DESC")
        , @NamedQuery(name = "ProcesoPedidos.findAllDesReportPrep", query = "SELECT p FROM ProcesoPedidos p WHERE p.repartoB = false AND p.despachadoB = false AND p.anulado = false ORDER BY p.idpp,p.aprobado DESC")
        , @NamedQuery(name = "ProcesoPedidos.findAllDesReportFact", query = "SELECT p FROM ProcesoPedidos p WHERE p.repartoB = false AND p.despachadoB = true AND p.anulado = false ORDER BY p.idpp,p.aprobado DESC")
        , @NamedQuery(name = "ProcesoPedidos.findAllRepReportSupall", query = "SELECT p FROM ProcesoPedidos p WHERE p.repartoB = true AND p.territorio = :territorio AND p.anulado = false ORDER BY p.idpp,p.aprobado DESC")
        , @NamedQuery(name = "ProcesoPedidos.findAllRepReportSupPrep", query = "SELECT p FROM ProcesoPedidos p WHERE p.repartoB = true AND p.territorio = :territorio AND p.despachadoB = true AND p.anulado = false ORDER BY p.idpp,p.aprobado DESC")
        , @NamedQuery(name = "ProcesoPedidos.findAllRepReportSupFact", query = "SELECT p FROM ProcesoPedidos p WHERE p.repartoB = true AND p.territorio = :territorio AND p.despachadoB = false AND p.anulado = false ORDER BY p.idpp,p.aprobado DESC")
        , @NamedQuery(name = "ProcesoPedidos.codigoFechaDesc", query = "SELECT p FROM ProcesoPedidos p WHERE p.consultorCodigo = :consultorCodigo AND p.fechaPedido = :fechaPedido ORDER BY p.idpp,p.aprobado DESC")
        , @NamedQuery(name = "ProcesoPedidos.FechaDesc", query = "SELECT p FROM ProcesoPedidos p WHERE p.fechaPedido = :fechaPedido ORDER BY p.idpp DESC")
        , @NamedQuery(name = "ProcesoPedidos.findByAprobadoCreDes", query = "SELECT p FROM ProcesoPedidos p WHERE p.aprobado < 2 AND p.despachadoB = false AND p.anulado = false AND p.repartoB = false ORDER BY p.idpp,p.aprobado DESC")
        , @NamedQuery(name = "ProcesoPedidos.findByAprobadoDesDes", query = "SELECT p FROM ProcesoPedidos p WHERE p.aprobado > 1 AND p.despachadoB = false AND p.anulado = false AND p.repartoB = false ORDER BY p.idpp,p.aprobado DESC")
        , @NamedQuery(name = "ProcesoPedidos.findByAprobadoCreRep", query = "SELECT p FROM ProcesoPedidos p WHERE p.aprobado < 2 AND p.despachadoB = false AND p.anulado = false AND p.repartoB = true AND p.territorio = :territorio ORDER BY p.idpp,p.aprobado DESC")
        , @NamedQuery(name = "ProcesoPedidos.findByAprobadoDesRep", query = "SELECT p FROM ProcesoPedidos p WHERE p.aprobado > 1 AND p.despachadoB = false AND p.anulado = false AND p.repartoB = true AND p.territorio = :territorio ORDER BY p.idpp,p.aprobado DESC")
})

public class ProcesoPedidos implements Serializable {

    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Basic(optional = false)
    @Column(name = "idpp")
    private Integer idpp;
    @Size(max = 2)
    @Column(name = "territorio")
    private String territorio;
    @Size(max = 3)
    @Column(name = "programa_codigo")
    private String programaCodigo;
    @Size(max = 45)
    @Column(name = "ruta_reparto")
    private String rutaReparto;
    @Column(name = "ingreso_pedido")
    @Temporal(TemporalType.TIMESTAMP)
    private Date ingresoPedido;
    @Column(name = "aprobado")
    private Integer aprobado;
    @Column(name = "tiempo_aprobado")
    @Temporal(TemporalType.TIMESTAMP)
    private Date tiempoAprobado;
    @Column(name = "inicio_sacado")
    @Temporal(TemporalType.TIMESTAMP)
    private Date inicioSacado;
    @Column(name = "inicio_sacado_b")
    private Boolean inicioSacadoB;
    @Column(name = "fin_sacado")
    @Temporal(TemporalType.TIMESTAMP)
    private Date finSacado;
    @Column(name = "fin_sacado_b")
    private Boolean finSacadoB;
    @Column(name = "inicio_facturacion")
    @Temporal(TemporalType.TIMESTAMP)
    private Date inicioFacturacion;
    @Column(name = "despachado")
    @Temporal(TemporalType.TIMESTAMP)
    private Date despachado;
    @Column(name = "despachado_b")
    private Boolean despachadoB;
    @Column(name = "observacion")
    private String observacion;
    @Size(max = 3)
    @Column(name = "usuario_sello")
    private String usuarioSello;
    @Column(name = "anulado")
    private Boolean anulado;
    @Column(name = "numeracion_diaria")
    private Integer numeracionDiaria;
    @Column(name = "fecha_pedido")
    @Temporal(TemporalType.DATE)
    private Date fechaPedido;
    @Column(name = "reparto_b")
    private Boolean repartoB;
    @Size(max = 4)
    @Column(name = "codigo_reparto")
    private String codigoReparto;

    // @Max(value=?)  @Min(value=?)//if you know range of your decimal fields consider using these annotations to enforce field validation
    @Column(name = "total_con_descuento")
    private BigDecimal totalConDescuento;
    @Column(name = "total_sin_descuento")
    private BigDecimal totalSinDescuento;
    @JoinColumn(name = "consultor_codigo", referencedColumnName = "consultor_codigo", updatable = false)
    @ManyToOne
    private Consultores consultorCodigo;
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "procesoPedidos", fetch = FetchType.EAGER)
    private List<DetalleProcesoPedido> detalleProcesoPedidoList;

    public Boolean getRepartoB() {
        return repartoB;
    }

    public void setRepartoB(Boolean repartoB) {
        this.repartoB = repartoB;
    }

    public String getCodigoReparto() {
        return codigoReparto;
    }

    public void setCodigoReparto(String codigoReparto) {
        this.codigoReparto = codigoReparto;
    }

    public Date getFechaPedido() {
        return fechaPedido;
    }

    public void setFechaPedido(Date fechaPedido) {
        this.fechaPedido = fechaPedido;
    }

    public ProcesoPedidos() {
    }

    public ProcesoPedidos(Integer idpp) {
        this.idpp = idpp;
    }

    public Integer getIdpp() {
        return idpp;
    }

    public void setIdpp(Integer idpp) {
        this.idpp = idpp;
    }

    public String getTerritorio() {
        return territorio;
    }

    public void setTerritorio(String territorio) {
        this.territorio = territorio;
    }

    public String getProgramaCodigo() {
        return programaCodigo;
    }

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

    public String getRutaReparto() {
        return rutaReparto;
    }

    public void setRutaReparto(String rutaReparto) {
        this.rutaReparto = rutaReparto;
    }

    public Date getIngresoPedido() {
        return ingresoPedido;
    }

    public void setIngresoPedido(Date ingresoPedido) {
        this.ingresoPedido = ingresoPedido;
    }

    public Integer getAprobado() {
        return aprobado;
    }

    public void setAprobado(Integer aprobado) {
        this.aprobado = aprobado;
    }

    public Date getTiempoAprobado() {
        return tiempoAprobado;
    }

    public void setTiempoAprobado(Date tiempoAprobado) {
        this.tiempoAprobado = tiempoAprobado;
    }

    public Date getInicioSacado() {
        return inicioSacado;
    }

    public void setInicioSacado(Date inicioSacado) {
        this.inicioSacado = inicioSacado;
    }

    public Boolean getInicioSacadoB() {
        return inicioSacadoB;
    }

    public void setInicioSacadoB(Boolean inicioSacadoB) {
        this.inicioSacadoB = inicioSacadoB;
    }

    public Date getFinSacado() {
        return finSacado;
    }

    public void setFinSacado(Date finSacado) {
        this.finSacado = finSacado;
    }

    public Boolean getFinSacadoB() {
        return finSacadoB;
    }

    public void setFinSacadoB(Boolean finSacadoB) {
        this.finSacadoB = finSacadoB;
    }

    public Date getInicioFacturacion() {
        return inicioFacturacion;
    }

    public void setInicioFacturacion(Date inicioFacturacion) {
        this.inicioFacturacion = inicioFacturacion;
    }

    public Date getDespachado() {
        return despachado;
    }

    public void setDespachado(Date despachado) {
        this.despachado = despachado;
    }

    public Boolean getDespachadoB() {
        return despachadoB;
    }

    public void setDespachadoB(Boolean despachadoB) {
        this.despachadoB = despachadoB;
    }

    public BigDecimal getTotalConDescuento() {
        return totalConDescuento;
    }

    public void setTotalConDescuento(BigDecimal totalConDescuento) {
        this.totalConDescuento = totalConDescuento;
    }

    public BigDecimal getTotalSinDescuento() {
        return totalSinDescuento;
    }

    public void setTotalSinDescuento(BigDecimal totalSinDescuento) {
        this.totalSinDescuento = totalSinDescuento;
    }

    public Consultores getConsultorCodigo() {
        return consultorCodigo;
    }

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

    public String getObservacion() {
        return observacion;
    }

    public void setObservacion(String observacion) {
        this.observacion = observacion;
    }

    public String getUsuarioSello() {
        return usuarioSello;
    }

    public void setUsuarioSello(String usuarioSello) {
        this.usuarioSello = usuarioSello;
    }

    public Boolean getAnulado() {
        return anulado;
    }

    public void setAnulado(Boolean anulado) {
        this.anulado = anulado;
    }

    public Integer getNumeracionDiaria() {
        return numeracionDiaria;
    }

    public void setNumeracionDiaria(Integer numeracionDiaria) {
        this.numeracionDiaria = numeracionDiaria;
    }

    @XmlTransient
    public List<DetalleProcesoPedido> getDetalleProcesoPedidoList() {
        return detalleProcesoPedidoList;
    }

    public void setDetalleProcesoPedidoList(List<DetalleProcesoPedido> detalleProcesoPedidoList) {
        this.detalleProcesoPedidoList = detalleProcesoPedidoList;
    }

    @Override
    public int hashCode() {
        int hash = 0;
        hash += (idpp != null ? idpp.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 ProcesoPedidos)) {
            return false;
        }
        ProcesoPedidos other = (ProcesoPedidos) object;
        if ((this.idpp == null && other.idpp != null) || (this.idpp != null && !this.idpp.equals(other.idpp))) {
            return false;
        }
        return true;
    }

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

}
