/*
 * 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.DetalleRemision;
import com.cosmodas.EntCosmos.Generales;
import com.cosmodas.EntCosmos.StatusProductos;

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

/**
 * @author obper
 */
@Stateless
public class GeneralesFacade extends AbstractFacade<Generales> implements GeneralesFacadeLocal {
    @PersistenceContext(unitName = "wcosmodasPersistent")
    private EntityManager em;

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

    public GeneralesFacade() {
        super(Generales.class);
    }

    @Override
    public Generales ParametrosGenerales() {
        return (Generales) em.createNamedQuery("Generales.findAll").getResultList().get(0);
    }

    @Override
    public List<StatusProductos> obtnerPredictivo(String sucursalCodigo, String programaCodigo, Integer cantidad) {
        return em.createNativeQuery("{call predictivo_bodega(?,?,?)}",
                StatusProductos.class)
                .setParameter(1, sucursalCodigo)
                .setParameter(2, programaCodigo)
                .setParameter(3, cantidad).getResultList();

    }

    @Override
    public Integer obtenerFacturados(String productCodigo, String programaCodigo, String sucursalCodigo) {

        StringBuilder sql = new StringBuilder("SELECT obtener_info_productos(?,?,?,?)");
        Query q = em.createNativeQuery(sql.toString());
        q.setParameter(1, productCodigo);
        q.setParameter(2, sucursalCodigo);
        q.setParameter(3, programaCodigo);
        q.setParameter(4, 'F');
        List<Integer> result = q.getResultList();

        Integer rs = result.get(0);
        return rs;
    }

    @Override
    public Integer obtenerdetPedidos(String productCodigo, String programaCodigo, String sucursalCodigo) {

        StringBuilder sql = new StringBuilder("SELECT obtener_info_productos(?,?,?,?)");
        Query q = em.createNativeQuery(sql.toString());
        q.setParameter(1, productCodigo);
        q.setParameter(2, sucursalCodigo);
        q.setParameter(3, programaCodigo);
        q.setParameter(4, 'P');
        List<Integer> result = q.getResultList();

        Integer rs = result.get(0);
        return rs;
    }

    @Override
    public List<DetalleRemision> detalleRemisions(String codigoRemn){
        List<DetalleRemision> rs = new ArrayList<>();
        Query q = em.createNamedQuery("DetalleRemision.findByNotareCodigo");
        q.setParameter("notareCodigo", codigoRemn);

        rs = q.getResultList();

        return rs;
    }

}
