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

import java.awt.event.ActionEvent;
import java.io.IOException;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.*;
import javax.annotation.PostConstruct;
import javax.ejb.EJB;
import javax.enterprise.context.SessionScoped;
import javax.faces.application.FacesMessage;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.context.ExternalContext;
import javax.faces.context.FacesContext;
import javax.inject.Inject;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;

import com.cosmodas.pedidos.CuerpoPedido;
import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JasperExportManager;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.engine.JasperPrintManager;
import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource;
import org.primefaces.PrimeFaces;

/**
 * @author obper
 */
@ManagedBean
@ViewScoped
public class bAjuste implements Serializable {


    @EJB
    daoAjustesLocal daoA;
    @EJB
    daoAutoAjusteLocal daoD;
    @EJB
    SucursalesFacadeLocal sfl;
    @EJB
    ProgramasFacadeLocal pfl;
    @EJB
    ProductosFacadeLocal pdfl;
    @EJB
    GeneralesFacadeLocal gfl;

    private String ajusteCodigo;
    private String programa;
    private Date fechaReq = new Date();
    private boolean entradas = true;
    private boolean salidas = true;
    private boolean updateInvetario = true;
    private ExternalContext exc;
    private List<VAutoAjuste> ur;
    private List<Sucursales> listaSucursales;
    private List<Productos> productos;
    private Productos producto;
    private String cantidadString;
    private String productoCodigo;
    private CuerpoAjusteWork ajuste;
    private boolean tipoAJusteb;
    private boolean nuevoAjusteManual;
    private boolean guardarAjusteb;
    private Double precioProdu;
    private List<CuerpoAjusteWork> detalleAjusteWork;
    private Generales generales;
    private String observaciones;
    private String ajusteCodigoBusqueda;
    private boolean editarAjusteB;

    private String guardarAjusteIcon;

    JasperPrint jasperPrint;

    public String getGuardarAjusteIcon() {
        return guardarAjusteIcon;
    }

    public void setGuardarAjusteIcon(String guardarAjusteIcon) {
        this.guardarAjusteIcon = guardarAjusteIcon;
    }

    @Inject
    private Sucursales sucursal;
    @Inject
    private Programas program;

    public boolean isEditarAjusteB() {
        return editarAjusteB;
    }

    public void setEditarAjusteB(boolean editarAjusteB) {
        this.editarAjusteB = editarAjusteB;
    }

    public String getAjusteCodigoBusqueda() {
        return ajusteCodigoBusqueda;
    }

    public void setAjusteCodigoBusqueda(String ajusteCodigoBusqueda) {
        this.ajusteCodigoBusqueda = ajusteCodigoBusqueda;
    }

    public List<CuerpoAjusteWork> getDetalleAjusteWork() {
        return detalleAjusteWork;
    }

    public void setDetalleAjusteWork(List<CuerpoAjusteWork> detalleAjusteWork) {
        this.detalleAjusteWork = detalleAjusteWork;
    }

    public Double getPrecioProdu() {
        return precioProdu;
    }

    public void setPrecioProdu(Double precioProdu) {
        this.precioProdu = precioProdu;
    }

    public boolean isGuardarAjusteb() {
        return guardarAjusteb;
    }

    public void setGuardarAjusteb(boolean guardarAjuste) {
        this.guardarAjusteb = guardarAjuste;
    }

    public boolean isNuevoAjusteManual() {
        return nuevoAjusteManual;
    }

    public void setNuevoAjusteManual(boolean nuevoAjusteManual) {
        this.nuevoAjusteManual = nuevoAjusteManual;
    }

    public boolean isTipoAJusteb() {
        return tipoAJusteb;
    }

    public void setTipoAJusteb(boolean tipoAJusteb) {
        this.tipoAJusteb = tipoAJusteb;
    }

    public String getObservaciones() {
        return observaciones;
    }

    public void setObservaciones(String observaciones) {
        this.observaciones = observaciones;
    }

    public List<Sucursales> getListaSucursales() {
        return listaSucursales;
    }

    public void setListaSucursales(List<Sucursales> listaSucursales) {
        this.listaSucursales = listaSucursales;
    }


    public Sucursales getSucursal() {
        return sucursal;
    }

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

    public String getAjusteCodigo() {
        return ajusteCodigo;
    }

    public void setAjusteCodigo(String ajusteCodigo) {
        this.ajusteCodigo = ajusteCodigo;
    }

    public String getPrograma() {
        return programa;
    }

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

    public List<Productos> getProductos() {
        return productos;
    }

    public CuerpoAjusteWork getAjuste() {
        return ajuste;
    }

    public void setAjuste(CuerpoAjusteWork ajuste) {
        this.ajuste = ajuste;
    }

    public String getCantidadString() {
        return cantidadString;
    }

    public void setCantidadString(String cantidadString) {
        this.cantidadString = cantidadString;
    }

    public void setProductos(List<Productos> productos) {
        this.productos = productos;
    }

    public boolean isEntradas() {
        return entradas;
    }

    public void setEntradas(boolean entradas) {
        this.entradas = entradas;
    }

    public boolean isSalidas() {
        return salidas;
    }

    public void setSalidas(boolean salidas) {
        this.salidas = salidas;
    }

    public boolean isUpdateInvetario() {
        return updateInvetario;
    }

    public void setUpdateInvetario(boolean updateInvetario) {
        this.updateInvetario = updateInvetario;
    }

    public Productos getProducto() {
        return producto;
    }

    public void setProducto(Productos producto) {
        this.producto = producto;
    }

    public String getProductoCodigo() {
        return productoCodigo;
    }

    public void setProductoCodigo(String productoCodigo) {
        this.productoCodigo = productoCodigo;
    }

    public List<VAutoAjuste> getUr() {
        return ur;
    }

    public void setUr(List<VAutoAjuste> ur) {
        this.ur = ur;
    }

    public Date getFechaReq() {
        return fechaReq;
    }

    public void setFechaReq(Date fechaReq) {
        this.fechaReq = fechaReq;
    }

    public void salidasB() {
        Ajuste a = new Ajuste();


        a.setAjusteCodigo(getAjusteCodigo());
        a.setAjusteFecha(fechaReq);
        a.setProgramaCodigo(getPrograma());
        a.setAjusteObservacion("AJUSTE POR CIERRE MENSUAL");
        a.setAjusteInventario("SALIDA");
        a.setSucursalCodigo(sucursal);
        a.setAjusteEnvio("F");
        daoA.IngresarAjusteCabecera(a);

        DetalleAjustePK detpk = new DetalleAjustePK();
        DetalleAjuste det = new DetalleAjuste();
        List<VAutoAjuste> detAj = new ArrayList<VAutoAjuste>();
        detAj = daoA.salida(sucursal.getSucursalCodigo());
        //ArrayList<DetalleAjuste> e = new ArrayList<>();

        for (VAutoAjuste deta : detAj) {
            detpk.setAjusteCodigo(ajusteCodigo);
            detpk.setProductoCodigo(deta.getProductoCodigo());
            det.setDetalleAjustePK(detpk);
            det.setDetalleAjusteCantidad(deta.getDetalleAjusteCantidad());
            det.setDetalleAjustePrecio(deta.getDetalleAjustePrecio());
            det.setDetalleAjusteTipo(deta.getDetalleAjusteTipo());
            System.out.println(det);
            daoA.addDetalleAjuste(det);

        }
        addMessage("Ajuste de salida Ingresado", "Ajuste " + getAjusteCodigo());
    }

    public List<Productos> complete(String query) {

        List<Productos> q = new ArrayList<>();
        // List<Productos> rs = new ArrayList<>();

        q.addAll(pdfl.porNombre(query));

        productos = q;
        return q;
    }

    public void seteaVariables2() {

        try {

            if (producto.getProductoCodigo() != null) {
                obtenerProducto(producto.getProductoCodigo());
            }
            // this.productoSelect = producto;
        } catch (Exception e) {

        }

    }

    public void obtenerProducto(String productoSel) {

        producto = pdfl.porCodigo(productoSel);
        this.productoCodigo = producto.getProductoCodigo();

    }

    public void obtenerProducto() {

        producto = pdfl.porCodigo(productoCodigo);
        this.productoCodigo = producto.getProductoCodigo();

    }


    public void nuevoProducto() {
        // Integer cantidad = getCantidad();
        obtenerProducto(productoCodigo);

        CuerpoAjusteWork cue = new CuerpoAjusteWork();

        cue.setProductoCodigo(producto.getProductoCodigo());
        cue.setPrecio(precioProdu);
        cue.setProductoNombre(producto.getProductoNombre());
        cue.setCantidad(Integer.valueOf(cantidadString));

        this.ajuste = cue;

        setAjuste(cue);
    }


    public void createNew() {
        //nuevoProducto();
        if (detalleAjusteWork.isEmpty()) {
            detalleAjusteWork.add(ajuste);
        } else if (validaExistenciaPedido()) {
            FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_INFO, "DUPLICADO", "El producto Ya esta en el Ajuste");
            PrimeFaces.current().dialog().showMessageDynamic(message);
        } else {
            detalleAjusteWork.add(ajuste);
            ajuste = new CuerpoAjusteWork();
            Collections.reverse(detalleAjusteWork);

        }
        this.producto = new Productos();
    }

    public boolean validaExistenciaPedido() {

        for (CuerpoAjusteWork i : detalleAjusteWork) {

            boolean out = i.getProductoCodigo().equals(producto.getProductoCodigo());

            if (out) {
                return true;
            }

        }
        return false;
    }

    public void tipoAjusteEntr() {

        String entradaInfo = tipoAJusteb ? "Ajuste de Entrada" : "Ajuste de Salida";

        showWarn(entradaInfo, "Tipo de Ajuste Cambiado");

    }


    public void guardarAjusteAutomatico(){

        if(tipoAJusteb){
            entradasB();
            addMessage("Ajuste de Entrada Ingresado", "Ajuste " + getAjusteCodigo());
        }else{
            salidasB();
            addMessage("Ajuste de SAlida Ingresado", "Ajuste " + getAjusteCodigo());
        }


    }

    public void facturaFinAnio() {

        Facturas fac = new Facturas();
        Cargos var = new Cargos();

        //  DetalleFactura fac = new DetalleFactura();
        Ajuste a = new Ajuste();

        a.setAjusteCodigo(getAjusteCodigo());
        a.setAjusteFecha(fechaReq);
        a.setProgramaCodigo(getPrograma());
        a.setAjusteObservacion("AJUSTE POR CIERRE MENSUAL");
        a.setAjusteInventario("SALIDA");
        a.setSucursalCodigo(sucursal);
        a.setAjusteEnvio("F");
        daoA.IngresarAjusteCabecera(a);

        DetalleAjustePK detpk = new DetalleAjustePK();
        DetalleAjuste det = new DetalleAjuste();
        List<VAutoAjuste> detAj = new ArrayList<VAutoAjuste>();
        detAj = daoA.salida(sucursal.getSucursalCodigo());
        //ArrayList<DetalleAjuste> e = new ArrayList<>();

        for (VAutoAjuste deta : detAj) {
            detpk.setAjusteCodigo(ajusteCodigo);
            detpk.setProductoCodigo(deta.getProductoCodigo());
            det.setDetalleAjustePK(detpk);
            det.setDetalleAjusteCantidad(deta.getDetalleAjusteCantidad());
            det.setDetalleAjustePrecio(deta.getDetalleAjustePrecio());
            det.setDetalleAjusteTipo(deta.getDetalleAjusteTipo());
            System.out.println(det);
            daoA.addDetalleAjuste(det);

        }
        addMessage("Ajuste de salida Ingresado", "Ajuste " + getAjusteCodigo());
    }

    public void buscarAjuste() {

        Ajuste ab = new Ajuste();
        detalleAjusteWork = new ArrayList<>();
        List<DetalleAjuste> dab = new ArrayList<>();
        ab = daoA.busquedaAjuste(ajusteCodigoBusqueda);
        dab = daoA.busquedaAjusteDetalles(ajusteCodigoBusqueda);
        List<CuerpoAjusteWork> listaBusqueda = new ArrayList<>();

        //cabecera Ajustes
        ajusteCodigo = ab.getAjusteCodigo();
        programa = ab.getProgramaCodigo();
        sucursal = ab.getSucursalCodigo();
        tipoAJusteb = ab.getAjusteInventario().equals("ENTRADA");
        observaciones = ab.getAjusteObservacion();
        fechaReq = ab.getAjusteFecha();
        //detalle ajustes

        for (DetalleAjuste i : dab) {
            CuerpoAjusteWork cuew = new CuerpoAjusteWork();
            cuew.setCantidad(i.getDetalleAjusteCantidad());
            cuew.setPrecio(i.getDetalleAjustePrecio().doubleValue());
            cuew.setProductoNombre(pdfl.porCodigo(i.getDetalleAjustePK().getProductoCodigo()).getProductoNombre());
            cuew.setProductoCodigo(i.getDetalleAjustePK().getProductoCodigo());

            listaBusqueda.add(cuew);
        }

        detalleAjusteWork.addAll(listaBusqueda);
        nuevoAjusteManual = false;
        editarAjusteB = true;
        guardarAjusteIcon = "fa fa-edit";
    }

    public  void guardarEditarAjuste(){
        if(editarAjusteB){
            editarAjuste();
        }else {guardarAjuste();}

    }

    public void entradasB() {
        Ajuste a = new Ajuste();

        a.setAjusteCodigo(getAjusteCodigo());
        a.setAjusteFecha(fechaReq);
        a.setProgramaCodigo(getPrograma());
        a.setAjusteObservacion("AJUSTE POR CIERRE MENSUAL");
        a.setAjusteInventario("ENTRADA");
        a.setSucursalCodigo(sucursal);
        a.setAjusteEnvio("F");
        daoA.IngresarAjusteCabecera(a);

        DetalleAjustePK detpk = new DetalleAjustePK();
        DetalleAjuste det = new DetalleAjuste();
        List<VAutoAjuste> detAj = new ArrayList<VAutoAjuste>();
        detAj = daoA.entrada(sucursal.getSucursalCodigo());
        // ArrayList<DetalleAjuste> e = new ArrayList<>();

        for (VAutoAjuste deta : detAj) {
            detpk.setAjusteCodigo(ajusteCodigo);
            detpk.setProductoCodigo(deta.getProductoCodigo());
            det.setDetalleAjustePK(detpk);
            det.setDetalleAjusteCantidad(deta.getDetalleAjusteCantidad());
            det.setDetalleAjustePrecio(deta.getDetalleAjustePrecio());
            det.setDetalleAjusteTipo(deta.getDetalleAjusteTipo());
            System.out.println(det);
            daoA.addDetalleAjuste(det);

        }
        addMessage("Ajuste de Entrada Ingresado", "Ajuste " + a.getAjusteCodigo());
    }


    public void guardarAjuste() {
        if (ajusteCodigo.length() == 5) {
            try {
                Ajuste a = new Ajuste();
                List<DetalleAjuste> dal = new ArrayList<>();
                String TipoAjusteDesc = tipoAJusteb ? "ENTRADA" : "SALIDA";

                a.setAjusteCodigo(getAjusteCodigo());
                a.setAjusteFecha(fechaReq);
                a.setProgramaCodigo(getPrograma());
                a.setAjusteObservacion(observaciones);
                a.setAjusteInventario(TipoAjusteDesc);
                a.setSucursalCodigo(sucursal);
                a.setAjusteEnvio("F");




                for (CuerpoAjusteWork cuk : detalleAjusteWork) {

                    DetalleAjustePK detpk = new DetalleAjustePK();
                    DetalleAjuste det = new DetalleAjuste();
                    detpk.setAjusteCodigo(ajusteCodigo);
                    detpk.setProductoCodigo(cuk.getProductoCodigo());
                    det.setDetalleAjustePK(detpk);
                    det.setDetalleAjusteCantidad(cuk.getCantidad());
                    det.setDetalleAjustePrecio(new BigDecimal(cuk.getPrecio()));
                    det.setDetalleAjusteTipo("PRODUCTO");
                    dal.add(det);
                    //daoA.addDetalleAjuste(det);
                }

                a.setDetalleAjusteCollection(dal);
                daoA.IngresarAjusteCabecera(a);
                ajusteInventarioAjusteManual(a);

                refresh();
                showInfo("Ajuste Guardado", "Ajuste " + ajusteCodigo + " Guardado");

            } catch (Exception e) {
                showError("Error de Ajuste", "Numero Ajuste Incorrecto");
            }

        } else {
            showError("Error de Ajuste", "Numero Ajuste Incorrecto");
        }
    }


    public void editarAjuste() {
        if (ajusteCodigo.length() == 5) {
            try {
                Ajuste a = new Ajuste();
                List<DetalleAjuste> dal = new ArrayList<>();
                String TipoAjusteDesc = tipoAJusteb ? "ENTRADA" : "SALIDA";

                a.setAjusteCodigo(getAjusteCodigo());
                a.setAjusteFecha(fechaReq);
                a.setProgramaCodigo(getPrograma());
                a.setAjusteObservacion(observaciones);
                a.setAjusteInventario(TipoAjusteDesc);
                a.setSucursalCodigo(sucursal);
                a.setAjusteEnvio("F");




                for (CuerpoAjusteWork cuk : detalleAjusteWork) {
                    DetalleAjustePK detpk = new DetalleAjustePK();
                    DetalleAjuste det = new DetalleAjuste();
                    detpk.setAjusteCodigo(ajusteCodigo);
                    detpk.setProductoCodigo(cuk.getProductoCodigo());
                    det.setDetalleAjustePK(detpk);
                    det.setDetalleAjusteCantidad(cuk.getCantidad());
                    det.setDetalleAjustePrecio(new BigDecimal(cuk.getPrecio()));
                    det.setDetalleAjusteTipo("PRODUCTO");

                    dal.add(det);
                }

                a.setDetalleAjusteCollection(dal);
                daoA.EditarAjuste(a);

                //ajusteInventarioAjusteManual(detalleAjusteWork);

                refresh();
                showInfo("Ajuste Modificado", "Ajuste " + ajusteCodigo + " Modificado");

            } catch (Exception e) {
                showError("Error de Ajuste", "Numero Ajuste Incorrecto");
            }

        } else {
            showError("Error de Ajuste", "Numero Ajuste Incorrecto");
        }
    }

    public void refresh() throws IOException {
        ExternalContext context = FacesContext.getCurrentInstance().getExternalContext();
        context.redirect("Ajustes.jsf");

    }


    public void ajusteInventarioAjusteManual(Ajuste ajusteIn) {

        ProductosucursalPK pk = new ProductosucursalPK();
        Productosucursal pr = new Productosucursal();

        for (DetalleAjuste i : ajusteIn.getDetalleAjusteCollection()) {
            pk.setSucursalCodigo(sucursal.getSucursalCodigo());
            pk.setProductoCodigo(i.getDetalleAjustePK().getProductoCodigo());
            pr = daoA.Obpro(pk);


            if (ajusteIn.getAjusteInventario().equals("ENTRADA")){
                System.out.println("an existencia actual " + pr.getProductoSucursalExistenciaActual());
                pr.setProductoSucursalExistenciaActual(pr.getProductoSucursalExistenciaActual() + i.getDetalleAjusteCantidad());
                System.out.println("nueva existencia actual " + pr.getProductoSucursalExistenciaActual());
                daoA.updateSucursal(pr);
            }else if (ajusteIn.getAjusteInventario().equals("SALIDA")){
                System.out.println("an existencia actual " + pr.getProductoSucursalExistenciaActual());
                pr.setProductoSucursalExistenciaActual(pr.getProductoSucursalExistenciaActual() - i.getDetalleAjusteCantidad());
                System.out.println("nueva existencia actual " + pr.getProductoSucursalExistenciaActual());
                daoA.updateSucursal(pr);
            }


        }

        addMessage("Inventario Modificado", "Nueva existencias actuales modificadas");
    }

    public void ajusteInventario() {

        ProductosucursalPK pk = new ProductosucursalPK();
        Productosucursal pr = new Productosucursal();

        List<VDiferencias> df = new ArrayList<VDiferencias>();
        df = daoA.getDiferencias(sucursal.getSucursalCodigo());

        for (VDiferencias i : df) {
            pk.setSucursalCodigo(sucursal.getSucursalCodigo());
            pk.setProductoCodigo(i.getProductoCodigo());
            pr = daoA.Obpro(pk);
            System.out.println("an existencia actual " + pr.getProductoSucursalExistenciaActual());
            pr.setProductoSucursalExistenciaActual((int) i.getNuevaExistenciaActual());
            System.out.println("nueva existencia actual " + pr.getProductoSucursalExistenciaActual());
            daoA.updateSucursal(pr);
        }

        addMessage("Inventario Modificado", "Nueva existencias actuales modificadas");
    }


    public void existenciaFisica() {

        ProductosucursalPK pk = new ProductosucursalPK();
        Productosucursal pr = new Productosucursal();

        List<ZonasVsActual> df = new ArrayList<ZonasVsActual>();
        df = daoA.ListZonasVsActual(sucursal.getSucursalCodigo());
        System.out.println("es " + df);

        for (ZonasVsActual i : df) {
            pk.setSucursalCodigo(sucursal.getSucursalCodigo());
            pk.setProductoCodigo(i.getProductoCodigo());
            pr = daoA.Obpro(pk);
            System.out.println("tricoder antes " + pr.getProductoSucursalFisica());
            pr.setProductoSucursalFisica(i.getUnidades().intValue());
            System.out.println("tricoder despues " + pr.getProductoSucursalFisica());
            daoA.updateSucursal(pr);
        }

        addMessage("Inventario Modificado", "Campos de Existencia Fisica Actualizada");
    }

    public void addMessage(String summary, String detalle) {
        FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_INFO, summary, detalle);
        FacesContext.getCurrentInstance().addMessage(null, message);
    }

    public void fillReport() throws JRException {
        JRBeanCollectionDataSource beanCollectionDataSource
                = new JRBeanCollectionDataSource(daoA.getDiferencias("10"));

        String reportPath = FacesContext.getCurrentInstance().getExternalContext().getRealPath("/reportes/dif.jasper");
        jasperPrint = JasperFillManager.fillReport(reportPath, new HashMap(), beanCollectionDataSource);
    }

    public void PDF(ActionEvent actionEvent) throws JRException, IOException {
        fillReport();
        HttpServletResponse httpServletResponse
                = (HttpServletResponse) FacesContext.getCurrentInstance().getExternalContext().getResponse();
        ServletOutputStream servletOutputStream = httpServletResponse.getOutputStream();

        JasperExportManager.exportReportToPdfStream(jasperPrint, servletOutputStream);
    }

    public void printReport(ActionEvent actionEvent) throws JRException, IOException {
        try {
            fillReport();
            JasperPrintManager.printReport(jasperPrint, false);
            FacesContext.getCurrentInstance().addMessage("messages", new FacesMessage("Impresion enviada"));
        } catch (Exception e) {
            FacesContext.getCurrentInstance().addMessage("messages", new FacesMessage("Error en la impresion!!"));
        }
    }

    public void borrar() {
        this.producto = new Productos();
        this.productoCodigo = new String();
        this.cantidadString = new String();
        ajuste = new CuerpoAjusteWork();
    }

    //mi ejemplo   
    public void pdf(ActionEvent actionEvent) throws JRException, IOException {
        JRBeanCollectionDataSource beanCollectionDataSource = new JRBeanCollectionDataSource(daoA.getDiferencias("01"));
        String reportPath = FacesContext.getCurrentInstance().getExternalContext().getRealPath("/reportes/dif.jasper");
        JasperPrint jasperPrint2 = JasperFillManager.fillReport(reportPath, new HashMap(), beanCollectionDataSource);

        HttpServletResponse httpServletResponse = (HttpServletResponse) FacesContext.getCurrentInstance().getExternalContext().getResponse();
        httpServletResponse.addHeader("Content-disposition", "attachment; filename=report.pdf");

        ServletOutputStream servletOutputStream = httpServletResponse.getOutputStream();
        JasperExportManager.exportReportToPdfStream(jasperPrint2, servletOutputStream);
        FacesContext.getCurrentInstance().responseComplete();

    }

    public void obtenerSucursales() {
        ur = daoD.All(sucursal.getSucursalCodigo());
    }

    public bAjuste() {
    }

    public String obtenerProductoNombre(String productoCodigo) {
        String rs = "";

        try {
            rs = pdfl.findProducto(productoCodigo).getProductoNombre();
        } catch (Exception e) {
            rs = "error con nombre";
        }

        return rs;
    }

    public String validaCantidadNeg(Integer resultado) {

        String rs = "";

        rs = resultado < 0 ? resultado.toString() : "";

        return rs;
    }

    public String validaCantidadPos(Integer resultado) {
        String rs = "";

        rs = resultado > 0 ? resultado.toString() : "";

        return rs;

    }

    public String validaCantidadColor(Integer resultado) {
        String rs = "";

        rs = resultado > 0 ? "#3e7f5b" : "#bc1f63";

        return rs;

    }

    @PostConstruct
    public void init() {
        this.exc = FacesContext.getCurrentInstance().getExternalContext();
        this.ur = daoD.All(sucursal.getSucursalCodigo());
        this.sucursal = (Sucursales) exc.getSessionMap().get("sucursal");
        this.listaSucursales = sfl.sucursalesActivas();
        this.nuevoAjusteManual = true;
        this.producto = new Productos();
        this.precioProdu = 0.00;
        this.productos = new ArrayList<>();
        this.detalleAjusteWork = new ArrayList<>();
        this.generales = gfl.findAll().get(0);
        this.programa = generales.getPrograma();
        this.guardarAjusteIcon = "fa fa-save";
    }

    public void nuevoAjusteIni() {

        nuevoAjusteManual = false;
        showInfo("Nuevo Ajuste", "iniciando nuevo ajuste");

    }

    public void addMessage(FacesMessage.Severity severity, String summary, String detail) {
        FacesContext.getCurrentInstance().
                addMessage(null, new FacesMessage(severity, summary, detail));
    }

    public void showInfo(String cabecera, String detalle) {
        addMessage(FacesMessage.SEVERITY_INFO, cabecera, detalle);
    }

    public void showWarn(String cabecera, String detalle) {
        addMessage(FacesMessage.SEVERITY_WARN, cabecera, detalle);
    }

    public void showError(String cabecera, String detalle) {
        addMessage(FacesMessage.SEVERITY_ERROR, cabecera, detalle);
    }

    public void soloActulu() {
        System.out.println(observaciones + "yes");
    }
}
