package com.cosmodas.requisiscion;

import com.cosmodas.EntCosmos.*;
import com.cosmodas.FacadeCosmos.*;
import net.sf.jasperreports.engine.*;
import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource;
import org.apache.commons.io.FileUtils;
import org.primefaces.PrimeFaces;
import org.primefaces.component.datatable.DataTable;
import org.primefaces.event.CellEditEvent;

import javax.annotation.PostConstruct;
import javax.ejb.EJB;
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.ServletContext;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.awt.event.ActionEvent;
import java.io.File;
import java.io.IOException;
import java.io.Serializable;
import java.text.SimpleDateFormat;
import java.util.*;

@ManagedBean
@ViewScoped
public class bprocesoRequisicionBodega implements Serializable {


    @EJB
    VproductosRequisicionFacadeLocal vprfl;
    @EJB
    WcRequisicionProductoFacadeLocal wcrfl;
    @EJB
    WcDetalleRequisicionProductoFacadeLocal wcdrfl;
    @EJB
    GeneralesFacadeLocal genfl;
    @EJB
    SucursalesFacadeLocal sfl;
    @EJB
    GeneralesFacadeLocal gfl;
    @EJB
    ProductosFacadeLocal pfl;
    @EJB
    WcUsuariosFacadeLocal wcufl;
    @EJB
    VprecioProgramaFFacadeLocal vppfl;


    private List<WcRequisicionProducto> requisicionProductosSala;
    private List<WcRequisicionProducto> listaRequsiciones;
    private String[] salaSelectc;
    private ExternalContext exc;
    private HttpSession session;
    private JasperPrint jasperPrint;
    private String alarmaPedidos;
    private String sucursalCodigo;
    private String programaCodigo;
    private String archiNuevoPdf;
    private List<CuerpoRequisicionData> detalleRequSelect;
    //-----------variables de remision---------------------
    private boolean nuevoPedido;
    private Integer cantidad;
    private String observaciones;
    private String salaEmite;
    private String numeroPedido;
    private String productoCodigo;
    private String nombreProducto;
    private String usuarioCodigo;
    private CuerpoRequisicionData pedido;
    private Integer existenciaActual;
    private Integer ventas;
    private String correoEnviar;
    private String numeroRequsicion;
    private String cantidadString;
    private List<CuerpoRequisicionData> detallePedido;
    private boolean disableDeTomaProdut;
    private boolean validaListaOfertas;
    private String observacion;
    private List<VproductosRequisicion> productos;
    private String numeroRemision;

    @Inject
    private WcUsuarios usuario;
    @Inject
    private VproductosRequisicion producto;

    //--------------------------------------------------

    @Inject
    private WcUsuarios user;
    @Inject
    private Sucursales sucursal;
    @Inject
    private WcRequisicionProducto requisicionProducto;
    @Inject
    private WcRequisicionProducto requiscion;
    @Inject
    private WcRequisicionProducto requiscionSelect;
    @Inject
    private Generales general;

    //---------get&set remision---------------


    public String getNumeroRemision() {
        return numeroRemision;
    }

    public void setNumeroRemision(String numeroRemision) {
        this.numeroRemision = numeroRemision;
    }

    public WcUsuarios getUsuario() {
        return usuario;
    }

    public void setUsuario(WcUsuarios usuario) {
        this.usuario = usuario;
    }

    public VproductosRequisicion getProducto() {
        return producto;
    }

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

    public boolean isNuevoPedido() {
        return nuevoPedido;
    }

    public void setNuevoPedido(boolean nuevoPedido) {
        this.nuevoPedido = nuevoPedido;
    }

    public Integer getCantidad() {
        return cantidad;
    }

    public void setCantidad(Integer cantidad) {
        this.cantidad = cantidad;
    }

    public String getObservaciones() {
        return observaciones;
    }

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

    public String getSalaEmite() {
        return salaEmite;
    }

    public void setSalaEmite(String salaEmite) {
        this.salaEmite = salaEmite;
    }

    public String getNumeroPedido() {
        return numeroPedido;
    }

    public void setNumeroPedido(String numeroPedido) {
        this.numeroPedido = numeroPedido;
    }

    public String getProductoCodigo() {
        return productoCodigo;
    }

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

    public String getNombreProducto() {
        return nombreProducto;
    }

    public void setNombreProducto(String nombreProducto) {
        this.nombreProducto = nombreProducto;
    }

    public String getUsuarioCodigo() {
        return usuarioCodigo;
    }

    public void setUsuarioCodigo(String usuarioCodigo) {
        this.usuarioCodigo = usuarioCodigo;
    }

    public CuerpoRequisicionData getPedido() {
        return pedido;
    }

    public void setPedido(CuerpoRequisicionData pedido) {
        this.pedido = pedido;
    }

    public Integer getExistenciaActual() {
        return existenciaActual;
    }

    public void setExistenciaActual(Integer existenciaActual) {
        this.existenciaActual = existenciaActual;
    }

    public Integer getVentas() {
        return ventas;
    }

    public void setVentas(Integer ventas) {
        this.ventas = ventas;
    }

    public String getCorreoEnviar() {
        return correoEnviar;
    }

    public void setCorreoEnviar(String correoEnviar) {
        this.correoEnviar = correoEnviar;
    }

    public String getNumeroRequsicion() {
        return numeroRequsicion;
    }

    public void setNumeroRequsicion(String numeroRequsicion) {
        this.numeroRequsicion = numeroRequsicion;
    }

    public String getCantidadString() {
        return cantidadString;
    }

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

    public List<CuerpoRequisicionData> getDetallePedido() {
        return detallePedido;
    }

    public void setDetallePedido(List<CuerpoRequisicionData> detallePedido) {
        this.detallePedido = detallePedido;
    }

    public boolean isDisableDeTomaProdut() {
        return disableDeTomaProdut;
    }

    public void setDisableDeTomaProdut(boolean disableDeTomaProdut) {
        this.disableDeTomaProdut = disableDeTomaProdut;
    }

    public boolean isValidaListaOfertas() {
        return validaListaOfertas;
    }

    public void setValidaListaOfertas(boolean validaListaOfertas) {
        this.validaListaOfertas = validaListaOfertas;
    }

    public String getObservacion() {
        return observacion;
    }

    public void setObservacion(String observacion) {
        this.observacion = observacion;
    }

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

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

    public Generales getGeneral() {
        return general;
    }

    public void setGeneral(Generales general) {
        this.general = general;
    }


    //----------------------------------------


    public List<CuerpoRequisicionData> getDetalleRequSelect() {
        return detalleRequSelect;
    }

    public void setDetalleRequSelect(List<CuerpoRequisicionData> detalleRequSelect) {
        this.detalleRequSelect = detalleRequSelect;
    }


    public String getArchiNuevoPdf() {
        return archiNuevoPdf;
    }

    public void setArchiNuevoPdf(String archiNuevoPdf) {
        this.archiNuevoPdf = archiNuevoPdf;
    }

    public List<WcRequisicionProducto> getRequisicionProductosSala() {
        return requisicionProductosSala;
    }

    public void setRequisicionProductosSala(List<WcRequisicionProducto> requisicionProductosSala) {
        this.requisicionProductosSala = requisicionProductosSala;
    }

    public List<WcRequisicionProducto> getListaRequsiciones() {
        return listaRequsiciones;
    }

    public void setListaRequsiciones(List<WcRequisicionProducto> listaRequsiciones) {
        this.listaRequsiciones = listaRequsiciones;
    }

    public String[] getSalaSelectc() {
        return salaSelectc;
    }

    public void setSalaSelectc(String[] salaSelectc) {
        this.salaSelectc = salaSelectc;
    }

    public ExternalContext getExc() {
        return exc;
    }

    public void setExc(ExternalContext exc) {
        this.exc = exc;
    }

    public HttpSession getSession() {
        return session;
    }

    public void setSession(HttpSession session) {
        this.session = session;
    }

    public JasperPrint getJasperPrint() {
        return jasperPrint;
    }

    public void setJasperPrint(JasperPrint jasperPrint) {
        this.jasperPrint = jasperPrint;
    }

    public String getAlarmaPedidos() {
        return alarmaPedidos;
    }

    public void setAlarmaPedidos(String alarmaPedidos) {
        this.alarmaPedidos = alarmaPedidos;
    }

    public String getSucursalCodigo() {
        return sucursalCodigo;
    }

    public void setSucursalCodigo(String sucursalCodigo) {
        this.sucursalCodigo = sucursalCodigo;
    }

    public WcUsuarios getUser() {
        return user;
    }

    public void setUser(WcUsuarios user) {
        this.user = user;
    }

    public Sucursales getSucursal() {
        return sucursal;
    }

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

    public WcRequisicionProducto getRequisicionProducto() {
        return requisicionProducto;
    }

    public void setRequisicionProducto(WcRequisicionProducto requisicionProducto) {
        this.requisicionProducto = requisicionProducto;
    }

    public WcRequisicionProducto getRequiscion() {
        return requiscion;
    }

    public void setRequiscion(WcRequisicionProducto requiscion) {
        this.requiscion = requiscion;
    }

    public WcRequisicionProducto getRequiscionSelect() {
        return requiscionSelect;
    }

    public void setRequiscionSelect(WcRequisicionProducto requiscionSelect) {
     this.requiscionSelect = requiscionSelect;

    }



    public String getProgramaCodigo() {
        return programaCodigo;
    }

    public void setProgramaCodigo(String programaCodigo) {
        this.programaCodigo = programaCodigo;
    }

    public String obternerNombreSucursal(String sucursalCodigoIn) {
        String rs = "NO";

        try {
            rs = sfl.find(sucursalCodigoIn).getSalaNombreCorto();
        }catch (Exception e){

        }

        return rs;
    }

    public void obtenerRequisiciones() {

        int sucusalesSelecionadas = salaSelectc.length;
        List<WcRequisicionProducto> requisicionesElgidas = new ArrayList<>();


        for (int i = 0; i < sucusalesSelecionadas; i++) {

            requisicionesElgidas.addAll(wcrfl.obternerNoDespachadas(salaSelectc[i], programaCodigo));
        }

        listaRequsiciones = requisicionesElgidas;
    }



    @PostConstruct
    public void init() {
        this.listaRequsiciones = new ArrayList<>();
        this.sucursalCodigo = sucursal.getSucursalCodigo();
        this.general = gfl.findAll().get(0);
        this.listaRequsiciones = new ArrayList<>();
        exc = FacesContext.getCurrentInstance().getExternalContext();
        this.sucursal = (Sucursales) exc.getSessionMap().get("sucursal");
        this.usuario = (WcUsuarios) exc.getSessionMap().get("usuario");
        this.programaCodigo = general.getPrograma();
        this.numeroRemision = "";
       // listaRequsiciones.addAll(wcrfl.obternerDespachadasTodasSalas());
        salaSelectc = new String[]{"01", "02", "03", "04", "05", "06", "07", "08", "11"};
        obtenerRequisiciones();

    }

    public void obtenerRequi(WcRequisicionProducto req) throws IOException, JRException {

      /*  if (!p.getInicioFacturacionB()) {
            vprofl.actualizaImpreso(p);
        }*/

        CreaPDF(req);

        ServletContext ctx = (ServletContext) FacesContext.getCurrentInstance()
                .getExternalContext().getContext();
        String realPath = ctx.getRealPath("/");

        System.out.println("direccion = " + realPath);

        File source = new File("/opt/requisiciones/req-" + req.getIdReq() + ".pdf");
        File dest = new File(realPath + "/apps/pdf/req-" + req.getIdReq() + ".pdf");
        archiNuevoPdf = "./pdf/req-" + req.getIdReq() + ".pdf";
        FileUtils.copyFile(source, dest, false);

        req.setLeidaB(true);
        req.setLeidaF(new Date());
        wcrfl.edit(req);

    }

   /* public void anulaPedido(VProcesodepedidos pedido) {
        FacesContext.getCurrentInstance().addMessage(null, new FacesMessage("anulado"));
        vprofl.actualizaAnula(pedido);

    }*/

    public void CreaPDF(WcRequisicionProducto req) throws JRException, IOException {

        fillReport(req);

        JasperExportManager.exportReportToPdfFile(jasperPrint, "/opt/requisiciones/req-" + req.getIdReq() + ".pdf");
        HttpServletResponse httpServletResponse
                = (HttpServletResponse) FacesContext.getCurrentInstance().getExternalContext().getResponse();
    }



    public void fillReport(WcRequisicionProducto reqs) throws JRException {

        List<CuerpoRequisicion> rqs = new ArrayList<>();

        for (WcDetalleRequisicionProducto aio : reqs.getWcDetalleRequisicionProductoList()){

            CuerpoRequisicion out = new CuerpoRequisicion();
            out.setCantidad(aio.getCantidadPedida().toString());
            out.setProductoCodigo(aio.getWcDetalleRequisicionProductoPK().getProductoCodigo());
            out.setProductoNombre(pfl.findProducto(aio.getWcDetalleRequisicionProductoPK().getProductoCodigo()).getProductoNombre());

            if(aio.getCantidadEnviada() == 0){
                rqs.add(out);
            }


        }


        try {

            SimpleDateFormat format = new SimpleDateFormat("dd/MM/yyyy");
            JRBeanCollectionDataSource beanCollectionDataSource = new JRBeanCollectionDataSource(rqs);
            String reportPath = "/opt/reportesJasper/Requisicion.jrxml";
            JasperReport jasperReport = JasperCompileManager.compileReport(reportPath);
            Map parametros = new HashMap();
            parametros.put("fecha", format.format(reqs.getIngresada()));
            parametros.put("encargado", wcufl.find(reqs.getUserRequiere()).getNombreEmpleado());
            parametros.put("sala", obternerNombreSucursal(reqs.getSalaOrigen()));
            jasperPrint = JasperFillManager.fillReport(jasperReport, parametros, beanCollectionDataSource);
        } catch (JRException e) {
            System.out.println("aqui" + e);

        }

    }

   //--------------remision--------------


    public void nuevoPedidoButton() {

        if (!nuevoPedido) {
            nuevoPedido = true;
        }
        FacesContext.getCurrentInstance().addMessage(null, new FacesMessage("Iniciando nuevo pedido"));

    }

    public void obtenerProducto() {
        if (productoCodigo.length() == 0 || productoCodigo == null) {
        } else if (productoCodigo.length() == 5) {
            producto = vprfl.busquedaPorCodigo(sucursal.getSucursalCodigo(), programaCodigo, productoCodigo);
            // productos.add(producto);
            ventas = Integer.parseInt(producto.getVendidos().toString());
            existenciaActual = producto.getActual();

        } else if (productoCodigo.length() != 5) {

            FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_ERROR, "Codigo de producto Incorrecto", "ingrese codigo correto");
            PrimeFaces.current().dialog().closeDynamic(message);

        }
    }

    public void createNew() {
        //nuevoProducto();
        if (detallePedido.isEmpty()) {
            detallePedido.add(pedido);
        } else if (validaExistenciaPedido()) {
            FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_INFO, "DUPLICADO", "El producto Ya esta en la Factura");
            PrimeFaces.current().dialog().closeDynamic(message);
        } else {
            detallePedido.add(pedido);
            pedido = new CuerpoRequisicionData();
        }
        this.producto = new VproductosRequisicion();
    }

    public boolean validaExistenciaPedido() {

        for (CuerpoRequisicionData i : detallePedido) {

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

            if (out) {
                return true;
            }

        }
        return false;
    }

    public List<VproductosRequisicion> complete(String query) {

        List<VproductosRequisicion> q = new ArrayList<>();
        List<VproductosRequisicion> rs = new ArrayList<>();
        try {
            q = vprfl.busquedaPorNombre(sucursal.getSucursalCodigo(), programaCodigo, "%" + query + "%");
        } catch (Exception e) {
        }

        productos = q;
        return q;
    }

    public void obtenerDatosRemision(WcRequisicionProducto input){


        requiscionSelect = input;
        List<CuerpoRequisicionData> dremision = new ArrayList<>();


        for (WcDetalleRequisicionProducto drp : input.getWcDetalleRequisicionProductoList()){

            CuerpoRequisicionData c = new CuerpoRequisicionData();
            VproductosRequisicion cpd = new VproductosRequisicion();
            cpd =vprfl.busquedaPorCodigo(input.getSalaOrigen() , input.getProgramaRequisicion() , drp.getWcDetalleRequisicionProductoPK().getProductoCodigo());

            c.setExistencias(cpd.getActual());
            c.setProductoCodigo(drp.getWcDetalleRequisicionProductoPK().getProductoCodigo());
            c.setCantidadPedida(drp.getCantidadPedida());
            c.setProductoNombre(cpd.getProducto());
            if (drp.getCantidadPedida() < 0){
                c.setCantidadEnviada(drp.getCantidadPedida());
            }else{
                c.setCantidadEnviada(drp.getCantidadEnviada());
            }



            dremision.add(c);
        }

        numeroRemision =  wcrfl.obtenerNuevoRemision();
        setNumeroRemision(numeroRemision);
        detallePedido = new ArrayList<>();
        detallePedido.addAll(dremision);

    }

    public void nuevoProducto() {
        Integer cantidad1 = Integer.valueOf(cantidadString);

        CuerpoRequisicionData cue = new CuerpoRequisicionData();
        VproductosRequisicion pof = vprfl.busquedaPorCodigo(sucursal.getSucursalCodigo(), programaCodigo, productoCodigo);

        setProducto(pof);

        cue.setCantidadEnviada(cantidad1);
        cue.setProductoNombre(pof.getProducto());
        cue.setExistencias(existenciaActual);
        cue.setCantidadPedida(0);
        cue.setProductoCodigo(pof.getProductoCodigo());
        this.pedido = cue;

        setPedido(cue);
    }

    public void borrar() {
        this.producto = new VproductosRequisicion();
        this.productoCodigo = new String();
        this.cantidadString = new String();
        this.ventas = 0;
        this.existenciaActual = 0;
        pedido = new CuerpoRequisicionData();
    }

    public void mensajeInfo(String titulo, String detalle){
        nuevoMensajeGrowl(FacesMessage.SEVERITY_INFO, titulo, detalle);
    }

    public void mensajeAlerta(String titulo, String detalle) {
        nuevoMensajeGrowl(FacesMessage.SEVERITY_WARN,  titulo, detalle);
    }

    public void mensajeError(String titulo, String detalle) {
        nuevoMensajeGrowl(FacesMessage.SEVERITY_ERROR,  titulo, detalle);
    }

     public void guardarRemision(){

        try{
            NotaRemision nrc = new NotaRemision();

            nrc.setNotareCodigo(numeroRemision);
            nrc.setNotareEnvio('F');
            nrc.setProgramaCodigo(requiscionSelect.getProgramaRequisicion());
            nrc.setSucursalEntranteCodigo(requiscionSelect.getSalaOrigen());
            nrc.setObserva(observaciones);
            nrc.setSucursalSalienteCodigo(sucursal.getSucursalCodigo());
            nrc.setNotareFecha(new Date());
            wcrfl.guardarRemision(nrc);



            for(CuerpoRequisicionData cs : detallePedido){

                if(cs.getCantidadEnviada() > 0){


                    wcrfl.insertarDetalleRemision(nrc.getNotareCodigo(), cs.getCantidadEnviada(), cs.getProductoCodigo(), "PRODUCTO");


                    WcDetalleRequisicionProductoPK wdrp = new WcDetalleRequisicionProductoPK();
                    wdrp.setIdReq(requiscionSelect.getIdReq());
                    wdrp.setProductoCodigo(cs.getProductoCodigo());
                    try{
                        WcDetalleRequisicionProducto detNew= wcdrfl.find(wdrp);

                        if(detNew == null){
                            WcDetalleRequisicionProducto   wdr = new WcDetalleRequisicionProducto();
                            wdr.setCantidadEnviada(cs.getCantidadEnviada());
                            wdr.setCantidadPedida(0);
                            wdr.setTipoProducto(0);
                            wdr.setWcDetalleRequisicionProductoPK(wdrp);
                            wcdrfl.create(wdr);
                        }

                    }catch (Exception e){
                        WcDetalleRequisicionProducto   wdr = new WcDetalleRequisicionProducto();
                        wdr.setCantidadEnviada(cs.getCantidadEnviada());
                        wdr.setCantidadPedida(0);
                        wdr.setTipoProducto(0);
                        wdr.setWcDetalleRequisicionProductoPK(wdrp);
                        wcdrfl.create(wdr);
                    }
                }


            }

            requiscionSelect.setNumeroRemision(nrc.getNotareCodigo());
            requiscionSelect.setFechaRemision(nrc.getNotareFecha());
            requiscionSelect.setUserRemite(usuario.getUsuarioCodigo());
            requiscionSelect.setDespachadaB(true);
            requiscionSelect.setDespachadaF(new Date());

            wcrfl.edit(requiscionSelect);

            mensajeInfo("Remision Guardada", "Remision "+nrc.getNotareCodigo()+" ha sido Guardada");


        }catch (Exception e){
            mensajeError("Remision Sin Guardar", "No se pudo Guardar La Remision");
        }
        PrimeFaces.current().executeScript("PF('wrequeis').hide();");

    }

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

    }

    public void soloActulu() {

        System.out.println(observaciones);
    }

    public void seteaVariables2() {

        try {

            if (producto.getProductoCodigo() != null) {
                productoCodigo = producto.getProductoCodigo();
                ventas = Integer.parseInt(producto.getVendidos().toString());
                existenciaActual = producto.getActual();
            }
            // this.productoSelect = producto;
        } catch (Exception e) {

        }
        System.out.println("hola");
    }

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


    //crearRemision



    public void obtenerRemision(WcRequisicionProducto req) throws IOException, JRException {

      /*  if (!p.getInicioFacturacionB()) {
            vprofl.actualizaImpreso(p);
        }*/

        CreaRemisionPDF(req);

        ServletContext ctx = (ServletContext) FacesContext.getCurrentInstance()
                .getExternalContext().getContext();
        String realPath = ctx.getRealPath("/");

        System.out.println("direccion = " + realPath);

        File source = new File("/opt/requisiciones/rem-" + req.getNumeroRemision() + ".pdf");
        File dest = new File(realPath + "/apps/pdf/rem-" + req.getNumeroRemision() + ".pdf");
        archiNuevoPdf = "./pdf/rem-" + req.getNumeroRemision() + ".pdf";
        FileUtils.copyFile(source, dest, false);

    }


    public void CreaRemisionPDF(WcRequisicionProducto req) throws JRException, IOException {

        fillReportRemision(req);

        JasperExportManager.exportReportToPdfFile(jasperPrint, "/opt/requisiciones/rem-" + req.getNumeroRemision() + ".pdf");
        HttpServletResponse httpServletResponse
                = (HttpServletResponse) FacesContext.getCurrentInstance().getExternalContext().getResponse();
    }


    public void fillReportRemision(WcRequisicionProducto reqs) throws JRException {

        List<DetalleRemision> detRem = new ArrayList<>();
        List<CuerpoRemicionData> rqs = new ArrayList<>();

        detRem = genfl.detalleRemisions(reqs.getNumeroRemision());


        for (DetalleRemision aio : detRem){

            VprecioProgramaF pro = new VprecioProgramaF();
            pro = vppfl.obtenerProductoCodigo (aio.getDetalleRemisionPK().getProductoCodigo(),reqs.getProgramaRequisicion());

            CuerpoRemicionData out = new CuerpoRemicionData();
            out.setCantidad(aio.getNotareCantidad());
            out.setProductoCodigo(aio.getDetalleRemisionPK().getProductoCodigo());
            out.setProductoNombre(pro.getProductoNombre());
            out.setPrecio(pro.getPrecioProgramaSinDescuento().toString());
            out.setTipo(pro.getProductoCodigo());

            rqs.add(out);
        }


        try {

            SimpleDateFormat format = new SimpleDateFormat("dd/MM/yyyy");
            JRBeanCollectionDataSource beanCollectionDataSource = new JRBeanCollectionDataSource(rqs);
            String reportPath = "/opt/reportesJasper/Remision.jrxml";
            JasperReport jasperReport = JasperCompileManager.compileReport(reportPath);
            Map parametros = new HashMap();
            parametros.put("fecha", format.format(reqs.getIngresada()));
            parametros.put("encargado", wcufl.find(reqs.getUserRequiere()).getNombreEmpleado());
            parametros.put("salaEntrada", obternerNombreSucursal(reqs.getSalaOrigen()));
            parametros.put("salaSalida", obternerNombreSucursal(sucursal.getSucursalCodigo()));
            parametros.put("notaRemisionCodigo", reqs.getNumeroRemision());
            jasperPrint = JasperFillManager.fillReport(jasperReport, parametros, beanCollectionDataSource);
        } catch (JRException e) {
            System.out.println("aqui" + e);

        }

    }

    public void onCellEdit(CellEditEvent event) {
        try {
            Object id = event.getRowIndex();
            Object oldValue = event.getOldValue();
            Object newValue = event.getNewValue();
            int newInt = Integer.parseInt(newValue.toString());




            if (!newValue.equals(oldValue)) {
                DataTable s = (DataTable) event.getSource();
                CuerpoRequisicionData cps = (CuerpoRequisicionData) s.getRowData();


                WcDetalleRequisicionProductoPK wdppk = new WcDetalleRequisicionProductoPK();
                wdppk.setProductoCodigo(cps.getProductoCodigo());
                wdppk.setIdReq(requiscionSelect.getIdReq());

                WcDetalleRequisicionProducto d = wcdrfl.find(wdppk);
                d.setCantidadEnviada(newInt);
                wcdrfl.edit(d);
                mensajeInfo("Editado", "producto Editado");
               // dao.update(d);

            } else {
            }

        } catch (Exception e) {
         mensajeError("No se pudo Agregar", "Error Al Agregar");
            System.err.println(e.toString());;
        }
        System.out.println("hecho cambiado");
    }

    //-----------------------------------


    public bprocesoRequisicionBodega() {

    }
}
