/*
 * 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.FacadeCosmos;

import com.cosmodas.EntCosmos.Pedidos;
import com.cosmodas.EntCosmos.Sucursales;
import com.cosmodas.EntCosmos.VProcesodepedidos;

import java.util.Date;
import java.util.List;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;

/**
 * @author obper
 */
@Stateless
public class VProcesodepedidosFacade extends AbstractFacade<VProcesodepedidos> implements VProcesodepedidosFacadeLocal {

    @PersistenceContext(unitName = "wcosmodasPersistent")
    private EntityManager em;

    @Override
    protected EntityManager getEntityManager() {
        return em;
    }

    public VProcesodepedidosFacade() {
        super(VProcesodepedidos.class);
    }

    @Override
    public void actualizaLeepedido(VProcesodepedidos pedido) {

        Query q = em.createNamedQuery("ProcesoDePedidos.acutalizaLee");
        // q.setParameter("leePedidoB", true);
        q.setParameter("leePedido", new Date());
        q.setParameter("numeroPedido", pedido.getNumeroPedido());
        q.setParameter("territorio", pedido.getTerritorio());

        q.executeUpdate();
    }

    @Override
    public void actualizaImpreso(VProcesodepedidos pedido) {

        Query q = em.createNamedQuery("ProcesoDePedidos.acutalizaImpreso");
        q.setParameter("inicioFacturacion", new Date());
        q.setParameter("numeroPedido", pedido.getNumeroPedido());
        q.setParameter("territorio", pedido.getTerritorio());

        q.executeUpdate();
    }

    @Override
    public void actualizaFacturado(Pedidos pedido) {

        Query q = em.createNamedQuery("ProcesoDePedidos.acutalizaFacturado");
        // q.setParameter("leePedidoB", true);
        q.setParameter("despachado", new Date());
        q.setParameter("numeroPedido", pedido.getPedidosPK().getNumeroPedido());
        q.setParameter("territorio", pedido.getPedidosPK().getTerritorio());

        q.executeUpdate();
    }

    @Override
    public void actualizaAnula(VProcesodepedidos pedido) {
        Query q = em.createNamedQuery("ProcesoDePedidos.acutalizaAnulado");

        q.setParameter("numeroPedido", pedido.getNumeroPedido());
        q.setParameter("territorio", pedido.getTerritorio());
        q.executeUpdate();

        Query q2 = em.createNamedQuery("Pedidos.anulapedido");
        q2.setParameter("numeroPedido", pedido.getNumeroPedido());
        q2.setParameter("territorio", pedido.getTerritorio());
        q2.executeUpdate();
    }

    @Override
    public void actualizaAprobacion(VProcesodepedidos pedido, int Prueba, String usuario, int numeroPedido) {

        Query q = em.createNamedQuery("ProcesoDePedidos.acutalizaAprobado");
        q.setParameter("aprobado", Prueba);
        q.setParameter("tiempoAprobado", new Date());
        q.setParameter("numeroPedido", pedido.getNumeroPedido());
        q.setParameter("territorio", pedido.getTerritorio());
        q.setParameter("usuarioApruebaPed", usuario);
        q.setParameter("numeracionDiaria", numeroPedido);
        q.executeUpdate();

    }

    public void cambioSala(VProcesodepedidos p , Sucursales s){

        Query q = em.createNativeQuery("update pedidos set sucursal = ? where numero_pedido =  ? and territorio = ?");
        q.setParameter(1, s.getSucursalCodigo());
        q.setParameter(2, p.getNumeroPedido());
        q.setParameter(3, p.getTerritorio());

    }


    @Override
    public Integer obtenerCorrelativoDespacho(int tipoPedido, String sucursalDespacho) {
        StringBuilder sql = new StringBuilder("SELECT correlativo_proceso_de_pedido(?,?)");
        Query query = em.createNativeQuery(sql.toString());
        query.setParameter(1, tipoPedido);
        query.setParameter(2, sucursalDespacho);
        List<Integer> result = query.getResultList();
        return result.get(0);
    }

    @Override
    public VProcesodepedidos busquedaPedido(String consultorCodigo) {
        VProcesodepedidos rs = new VProcesodepedidos();

        Query q = em.createNamedQuery("VProcesodepedidos.findByConsultorCodigoMAx");
        q.setParameter("consultorCodigo", consultorCodigo);

        if (!q.getResultList().isEmpty()) {
            rs = (VProcesodepedidos) q.getResultList().get(0);
        }

        return rs;
    }

    @Override
    public VProcesodepedidos busquedaPedidoCodigo(Pedidos p) {
        VProcesodepedidos rs = new VProcesodepedidos();

        Query q = em.createNamedQuery("VProcesodepedidos.findByNumeroPedido&terr");
        q.setParameter("numeroPedido", p.getPedidosPK().getNumeroPedido());
        q.setParameter("territorio", p.getPedidosPK().getTerritorio());

        if (!q.getResultList().isEmpty()) {
            rs = (VProcesodepedidos) q.getResultList().get(0);
        }

        return rs;
    }

}
