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

import com.cosmodas.FacadeCosmos.*;
import com.cosmodas.EntCosmos.Generales;
import com.cosmodas.EntCosmos.Precioprograma;
import com.cosmodas.EntCosmos.Productosucursal;
import com.cosmodas.EntCosmos.Sucursales;
import com.cosmodas.EntCosmos.VCompra;
import com.cosmodas.EntCosmos.VInventa;
import com.cosmodas.EntCosmos.VRemisi;
import com.cosmodas.EntCosmos.VlistAjuste;
import com.cosmodas.EntCosmos.WcUsuarios;
import com.cosmodas.opin.CuerpoInventario;



import java.io.IOException;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import javax.annotation.PostConstruct;
import javax.ejb.EJB;
import javax.faces.application.FacesMessage;
import javax.faces.context.ExternalContext;
import javax.faces.context.FacesContext;
import javax.inject.Named;
import javax.faces.view.ViewScoped;
import javax.inject.Inject;

/**
 *
 * @author obper
 */
@Named(value = "binventarios")
@ViewScoped
public class binventarios implements Serializable {

    @EJB
    PrecioprogramaFacadeLocal ppfl;
    @EJB
    ProductosucursalFacadeLocal psfl;
    @EJB
    TremiEFacadeLocal trefl;
    @EJB
    TcomprasFacadeLocal tcfl;
    @EJB
    TajusteEFacadeLocal tjefl;
    @EJB
    TnabonoFacadeLocal tnafl;
    @EJB
    TventasFacadeLocal tvfl;
    @EJB
    TajusteSFacadeLocal tasfl;
    @EJB
    TremiSFacadeLocal trsfl;
    @EJB
    VInventaFacadeLocal vifl;
    @EJB
    GeneralesFacadeLocal gfl;
    @EJB
    SucursalesFacadeLocal sfl;

    private String programa;
    private boolean porPrograma;

    private boolean premios;
    private boolean discontinuado;
    private int tipoProducto;
    private List<CuerpoInventario> inventario;
    private List<VCompra> compras;
    private List<VRemisi> remisionIn;
    private List<VRemisi> remisionOut;
    private List<VlistAjuste> listAjsIn;
    private List<VlistAjuste> listAjsOut;
    private List<Sucursales> sucursales;

    @Inject
    private Sucursales sucursal;
    @Inject
    private WcUsuarios usuario;
    private ExternalContext exc;

    public boolean isPorPrograma() {
        return porPrograma;
    }

    public void setPorPrograma(boolean porPrograma) {
        this.porPrograma = porPrograma;
    }

    public int getTipoProducto() {
        return tipoProducto;
    }

    public void setTipoProducto(int tipoProducto) {
        this.tipoProducto = tipoProducto;
    }

    public boolean isPremios() {
        return premios;
    }

    public void setPremios(boolean premios) {
        this.premios = premios;
    }

    public List<Sucursales> getSucursales() {
        return sucursales;
    }

    public void setSucursales(List<Sucursales> sucursales) {
        this.sucursales = sucursales;
    }

    public List<VlistAjuste> getListAjsIn() {
        return listAjsIn;
    }

    public void setListAjsIn(List<VlistAjuste> listAjsIn) {
        this.listAjsIn = listAjsIn;
    }

    public List<VlistAjuste> getListAjsOut() {
        return listAjsOut;
    }

    public void setListAjsOut(List<VlistAjuste> listAjsOut) {
        this.listAjsOut = listAjsOut;
    }

    public String getPrograma() {
        return programa;
    }

    public void setPrograma(String programa) {
        this.programa = programa;
    }


    public List<CuerpoInventario> getInventario() {
        return inventario;
    }

    public void setInventario(List<CuerpoInventario> inventario) {
        this.inventario = inventario;
    }

    public List<VCompra> getCompras() {
        return compras;
    }

    public void setCompras(List<VCompra> compras) {
        this.compras = compras;
    }

    public List<VRemisi> getRemisionIn() {
        return remisionIn;
    }

    public void setRemisionIn(List<VRemisi> remisionIn) {
        this.remisionIn = remisionIn;
    }

    public List<VRemisi> getRemisionOut() {
        return remisionOut;
    }

    public void setRemisionOut(List<VRemisi> remisionOut) {
        this.remisionOut = remisionOut;
    }

    public Sucursales getSucursal() {
        return sucursal;
    }

    public void setSucursal(Sucursales sucursal) {
        this.sucursal = sucursal;
    }

    public boolean isDiscontinuado() {
        return discontinuado;
    }

    public void setDiscontinuado(boolean discontinuado) {
        this.discontinuado = discontinuado;
    }

    @PostConstruct
    public void init() {
        Generales g = gfl.findAll().get(0);
        exc = FacesContext.getCurrentInstance().getExternalContext();
        usuario = (WcUsuarios) exc.getSessionMap().get("usuario");
        programa = g.getPrograma();

        porPrograma = true;
        sucursal = (Sucursales) exc.getSessionMap().get("sucursal");
   //     ompp = exc.getSessionMap().get("ompp").toString();
        inventario = new ArrayList<>();
        sucursales = sfl.findAll();
        busqueda();
    }



    public void zonasProductos() {

        System.out.println("perfecto");

    }

    public void fvCompras(String producto) {
        compras = new ArrayList<>();
        compras.addAll(vifl.busquedaCompra(producto, programa));

    }

    public void fvRemi(String producto, String tipo) {

        if (tipo.equals("IN")) {

            remisionIn = new ArrayList<>();
            remisionIn.addAll(vifl.busquedaRemision(producto, programa, sucursal.getSucursalCodigo(), "1"));

        } else {
            remisionOut = new ArrayList<>();
            remisionOut.addAll(vifl.busquedaRemision(producto, programa, sucursal.getSucursalCodigo(), "0"));
        }
    }

    public void fvAjus(String producto, String tipo) {

        listAjsIn = new ArrayList<>();

        listAjsIn.addAll(vifl.busquedaAjuste(programa, sucursal.getSucursalCodigo(), tipo, producto));

    }

    public void busquedaProgramas() {
        busqueda();
        String summary = porPrograma ? "Inventario Por Mes (Programa)" : "Inventario Completo";

        FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(summary));
    }

    public void busquedaDis() {

        if(discontinuado){
            busquedad();
        }else{
            busqueda();
        }

        busquedad();
        String summary = porPrograma ? "Inventario de Discontinados" : "Inventario de Productos";

        FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(summary));
    }

    public void busquedaPremios() {
        busqueda();
        String summary = porPrograma ? "Inventario de Articulos" : "Inventario de Productos";

        FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(summary));
    }

    public void busqueda() {
        this.inventario = new ArrayList<>();

        List<Productosucursal> psl = new ArrayList<>();


        List<VInventa> inventaList = porPrograma ? vifl.pvInventario(programa, sucursal.getSucursalCodigo(), premios) : vifl.pvInventario(sucursal.getSucursalCodigo(), premios) ;

        for (VInventa i : inventaList) {
            CuerpoInventario c = new CuerpoInventario();
            c.setProductoCodigo(i.getProductoCodigo());
            c.setProductoNombre(i.getNombreProducto());
            c.setEntInicial(i.getInicial());
            c.setEntCompras(i.getCompras());
            c.setEntRemision(i.getRemisionEntrante());
            c.setEntAjuste(i.getAjusteEntrada());
            c.setEntAbono(i.getAbonos());
            c.setSalVenta(i.getVenta());
            c.setSalRemision(i.getRemisionSaliente());
            c.setSalAjuste(i.getAjusteSalida());
            c.setExisActual(i.getActual());
            c.setExisSalas(i.getSalasActual());
            c.setExisVentaSalas(i.getSalasVenta());
            inventario.add(c);
        }

        System.out.println("total" + psl.size());

    }

    public void busquedad() {
        this.inventario = new ArrayList<>();

        List<Productosucursal> psl = new ArrayList<>();


        List<VInventa> inventaList =  vifl.pvInventariod(sucursal.getSucursalCodigo(), discontinuado) ;

        for (VInventa i : inventaList) {
            CuerpoInventario c = new CuerpoInventario();
            c.setProductoCodigo(i.getProductoCodigo());
            c.setProductoNombre(i.getNombreProducto());
            c.setEntInicial(i.getInicial());
            c.setEntCompras(i.getCompras());
            c.setEntRemision(i.getRemisionEntrante());
            c.setEntAjuste(i.getAjusteEntrada());
            c.setEntAbono(i.getAbonos());
            c.setSalVenta(i.getVenta());
            c.setSalRemision(i.getRemisionSaliente());
            c.setSalAjuste(i.getAjusteSalida());
            c.setExisActual(i.getActual());
            c.setExisSalas(i.getSalasActual());
            c.setExisVentaSalas(i.getSalasVenta());
            inventario.add(c);
        }

        System.out.println("total" + psl.size());

    }

    public String validaProductosPremios(){

        String rs = "";

        rs = premios ? "PREMIOS" : "PRODUCTOS";

        return rs;
    }

    public binventarios() {
    }

  /*  public void getReportData() throws IOException {
        HSSFWorkbook workbook = new HSSFWorkbook();
        HSSFSheet sheet = workbook.createSheet();
        HSSFRow row = sheet.createRow(0);
        HSSFCell cell = row.createCell(0);
        cell.setCellValue(0.0);

        FacesContext facesContext = FacesContext.getCurrentInstance();
        ExternalContext externalContext = facesContext.getExternalContext();
        externalContext.setResponseContentType("application/vnd.ms-excel");
        externalContext.setResponseHeader("Content-Disposition", "attachment; filename=\"my.xls\"");

        workbook.write(externalContext.getResponseOutputStream());
        facesContext.responseComplete();
    }*/
}
