/*
 * 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.ProcesoDePedidos;
import com.cosmodas.EntCosmos.VProcesodepedidos;

import java.util.ArrayList;
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 ProcesoDePedidosFacade extends AbstractFacade<ProcesoDePedidos> implements ProcesoDePedidosFacadeLocal {

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

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

    public ProcesoDePedidosFacade() {
        super(ProcesoDePedidos.class);
    }

    @Override
    public void nuevoProcesoDePedido(String territorioCodigo, String numeroPedido, boolean libera) {

        em.createNativeQuery("{call ingresa_proceso_de_pedido(?,?,?,?)}")
                .setParameter(1, territorioCodigo)
                .setParameter(2, numeroPedido)
                .setParameter(3, new Date())
                .setParameter(4, libera).executeUpdate();

    }

    @Override
    public void nuevoProcesoDePedidoCab(String territorioCodigo, String numeroPedido, boolean libera) {

        em.createNativeQuery("{call ingresa_proceso_de_pedido_cab(?,?,?,?)}")
                .setParameter(1, territorioCodigo)
                .setParameter(2, numeroPedido)
                .setParameter(3, new Date())
                .setParameter(4, libera).executeUpdate();

    }

    @Override
    public List<VProcesodepedidos> ObtenerProcesoPedidos(String territorio, int tipoCredito, String sucursal) {
        List<VProcesodepedidos> lsR = new ArrayList<>();
        try {
            lsR = em.createNativeQuery("{CALL prProceso_de_pedidos(?,?,?)}",
                    VProcesodepedidos.class)
                    .setParameter(1, territorio)
                    .setParameter(2, tipoCredito)
                    .setParameter(3, sucursal).getResultList();
        } catch (Exception e) {
        }

        return lsR;

    }

    @Override
    public List<VProcesodepedidos> ObtenerProcesoPedidosDes(String territorio, int tipoCredito, String sucursal) {
        List<VProcesodepedidos> lsR = new ArrayList<>();
        try {
            lsR = em.createNativeQuery("{CALL prProceso_de_pedidos_des(?,?,?)}",
                    VProcesodepedidos.class)
                    .setParameter(1, territorio)
                    .setParameter(2, tipoCredito)
                    .setParameter(3, sucursal).getResultList();
        } catch (Exception e) {
        }

        return lsR;

    }


    @Override
    public List<VProcesodepedidos> ObtenerProcesoPedidosRep(String territorio, String programa) {
        List<VProcesodepedidos> lsR = new ArrayList<>();
        try {
            lsR = em.createNativeQuery("{CALL prProceso_de_pedidos_reporte(?,?)}",
                    VProcesodepedidos.class)
                    .setParameter(1, territorio)
                    .setParameter(2, programa).getResultList();
        } catch (Exception e) {
        }

        return lsR;

    }

    @Override
    public void cambiaDeSucursal(String numeroPedido, String sucursalDestino, String territorio, int tipoReparto) {
        Query q = em.createNativeQuery("update pedidos p set p.sucursald = ?, p.pedido_reparto = ? where numero_pedido = ? and territorio = ?;");
        q.setParameter(1, sucursalDestino);
        q.setParameter(2, tipoReparto);
        q.setParameter(3, numeroPedido);
        q.setParameter(4, territorio);
        q.executeUpdate();

    }

    @Override
    public List<VProcesodepedidos> ObtenerProcesoPedidosSuper(String territorio, int tipoCredito, String sucursal) {
        List<VProcesodepedidos> lsR = new ArrayList<>();
        try {
            lsR = em.createNativeQuery("{CALL prProceso_de_pedidosSuper(?,?,?)}",
                    VProcesodepedidos.class)
                    .setParameter(1, territorio)
                    .setParameter(2, tipoCredito)
                    .setParameter(3, sucursal).getResultList();
        } catch (Exception e) {
        }

        return lsR;

    }


    @Override
    public void liberarPedidos(String numeroPed, String terr) {

        Query q = em.createNativeQuery("update proceso_de_pedidos p set p.liberado = 1 where p.numero_pedido = ? and p.territorio = ?;");
        q.setParameter(1, numeroPed);
        q.setParameter(2, terr);
        q.executeUpdate();

    }


}
