Example usage for org.apache.commons.fileupload DiskFileUpload parseRequest

List of usage examples for org.apache.commons.fileupload DiskFileUpload parseRequest

Introduction

In this page you can find the example usage for org.apache.commons.fileupload DiskFileUpload parseRequest.

Prototype

public List  parseRequest(HttpServletRequest req) throws FileUploadException 

Source Link

Document

Processes an <a href="http://www.ietf.org/rfc/rfc1867.txt">RFC 1867</a> compliant <code>multipart/form-data</code> stream.

Usage

From source file:com.krawler.esp.servlets.AdminServlet.java

public static String editCompanyDetails(Connection conn, HttpServletRequest request, String companyid)
        throws ServiceException, SessionExpiredException {
    String status = "failure";
    // int notificationduration = 0;
    int notificationtype = 0;
    double activity = 0;
    String sd = "";
    String companyEmail = "";
    DiskFileUpload fu = new DiskFileUpload();
    HashMap arrParam = new HashMap();
    FileItem fi1 = null;/*  w  ww .  ja  va2s .  c om*/
    String logouploadmsg = "";

    List fileItems = null;
    try {
        fileItems = fu.parseRequest(request);
    } catch (FileUploadException e) {
        throw ServiceException.FAILURE("Admin.createUser", e);
    }
    for (Iterator k = fileItems.iterator(); k.hasNext();) {
        fi1 = (FileItem) k.next();
        arrParam.put(fi1.getFieldName(), fi1.getString());
    }
    try {
        String ipAddress = AuthHandler.getIPAddress(request);
        int auditMode = 0;
        String loginid = AuthHandler.getUserid(request);
        String params = AuthHandler.getAuthor(conn, loginid) + " (" + AuthHandler.getUserName(request) + ")";
        int editAll = Integer.parseInt(request.getParameter("editAll"));
        // if(editAll >= 1) {
        //                PreparedStatement pstmt = conn.prepareStatement("SELECT subdomain FROM company WHERE companyid=?");
        //                pstmt.setString(1, companyid);
        //                ResultSet rs = pstmt.executeQuery();
        //                String subdomain = "";
        //                if (rs.next()) {
        //                    subdomain = rs.getString("subdomain");
        //                }
        //                boolean domainflag = true;
        //                sd = StringUtil.serverHTMLStripper(arrParam.get("domainname").toString().toLowerCase());
        //                if (!subdomain.equals(arrParam.get("domainname"))) {
        //                    if (SignupHandler.subdomainIsAvailable(conn, sd).equalsIgnoreCase("failure") || StringUtil.isNullOrEmpty(sd)) {
        //                        domainflag = false;
        //                    } else {
        //                        //mailtoAllOnSubdomainChange(conn, subdomain, sd, request); TODO: commented for now. need to implement. - brajesh@090909
        //                    }
        //                }
        //                companyEmail = StringUtil.serverHTMLStripper(arrParam.get("mail").toString().trim());
        //                String companyname = StringUtil.serverHTMLStripper(arrParam.get("companyname").toString());
        //                String address = StringUtil.serverHTMLStripper(arrParam.get("address").toString());
        //                String city = StringUtil.serverHTMLStripper(arrParam.get("city").toString());
        //                String state = StringUtil.serverHTMLStripper(arrParam.get("state").toString());
        //                String country = StringUtil.serverHTMLStripper(arrParam.get("country").toString());
        //                String phone = StringUtil.serverHTMLStripper(arrParam.get("phone").toString());
        //                String fax = StringUtil.serverHTMLStripper(arrParam.get("fax").toString());
        //                String zip = StringUtil.serverHTMLStripper(arrParam.get("zip").toString());
        //                String timezone = StringUtil.serverHTMLStripper(arrParam.get("timezone").toString());
        //                String website = StringUtil.serverHTMLStripper(arrParam.get("website").toString());
        //                String currency = StringUtil.serverHTMLStripper(arrParam.get("currency").toString());
        //  notificationduration = Integer.parseInt(arrParam.get("dur").toString());
        if (arrParam.containsKey("1")) {
            activity = Double.parseDouble("1");
            activity = Math.pow(2, activity);
            notificationtype += activity;
        }
        if (arrParam.containsKey("2")) {
            activity = Double.parseDouble("2");
            activity = Math.pow(2, activity);
            notificationtype += activity;
        }
        //                if (!(StringUtil.isNullOrEmpty(sd)) && !(StringUtil.isNullOrEmpty(companyname)) && !(StringUtil.isNullOrEmpty(country)) && !(StringUtil.isNullOrEmpty(timezone)) && !(StringUtil.isNullOrEmpty(currency))) {
        //                    if (domainflag) {
        DbUtil.executeUpdate(conn, "update company set notificationtype=? where companyid=?;",
                new Object[] { notificationtype, companyid });
        int o_diff = Constants.DEFAULT_PERT_DURATION_DIFF, p_diff = Constants.DEFAULT_PERT_DURATION_DIFF;
        if (arrParam.containsKey("optimisticdiff")) {
            o_diff = Integer.parseInt(arrParam.get("optimisticdiff").toString());
        }
        if (arrParam.containsKey("pessimisticdiff")) {
            p_diff = Integer.parseInt(arrParam.get("pessimisticdiff").toString());
        }

        DbUtil.executeUpdate(conn, "update pertdefaults_company set o_diff=?, p_diff=? where companyid=?",
                new Object[] { o_diff, p_diff, companyid });

        boolean val = false;
        if (arrParam.containsKey("milestonewidget")) {
            if ("on".equals(arrParam.get("milestonewidget").toString()))
                val = true;
        }
        DbUtil.executeUpdate(conn, "UPDATE company SET milestonewidget = ? WHERE companyid = ?",
                new Object[] { val, companyid });
        WidgetStateHandler.updateCustomWidgetSetting(conn, companyid, val);

        val = false;
        if (arrParam.containsKey("checklist")) {
            if ("on".equals(arrParam.get("checklist").toString())) {
                val = true;
                new CheckListManager().calculateAllTasksProgresses(conn, companyid);
            }
        }
        DbUtil.executeUpdate(conn, "UPDATE company SET checklist = ? WHERE companyid = ?",
                new Object[] { val, companyid });
        val = false;
        if (arrParam.containsKey("docaccess")) {
            if ("on".equals(arrParam.get("docaccess").toString())) {
                val = true;
                OpenOfficeServiceResolver resolver = OpenOfficeServiceResolver.get(request.getServletContext());
                DocsConversionHandler.convertDocs(companyid, resolver);
            }
        }
        DbUtil.executeUpdate(conn, "UPDATE company SET docaccess = ? WHERE companyid = ?",
                new Object[] { val, companyid });
        //                        pst = conn.prepareStatement("Select activityid,featureid from activitieslist where activityname=?");
        //                        pst.setString(1, "ChangeCompanyLogo");
        //                        ResultSet rset = pst.executeQuery();
        //                        if (rset.next()) {
        //                            int actid = rset.getInt("activityid");
        //                            int featid = rset.getInt("featureid");
        //                            pst = conn.prepareStatement("SELECT permissions FROM userpermissions WHERE userid = ? and featureid=?");
        //                            pst.setString(1, AuthHandler.getUserid(request));
        //                            pst.setInt(2, featid);
        //                            ResultSet rset1 = pst.executeQuery();
        //                            if (rset1.next()) {
        //                                int perm = rset1.getInt("permissions");
        //                                int num = (int) Math.pow(2, actid);
        //                                if ((perm & num) == num) {
        //                                    res = true;
        //                                }
        //                            }
        //                        }

        //                        if (res && editAll == 1) {
        //                            if (arrParam.get("logo").toString().length() != 0) {
        //                                genericFileUpload uploader = new genericFileUpload();
        //                                uploader.doPostCompay(fileItems, companyid, StorageHandler.GetProfileImgStorePath());
        //                                if (uploader.isUploaded()) {
        //                                    DbUtil.executeUpdate(conn, "UPDATE company set image=? where companyid = ?",
        //                                            new Object[]{ProfileImageServlet.ImgBasePath + companyid + uploader.getCompanyImageExt(), companyid});
        //                                }
        //                                logouploadmsg = uploader.ErrorMsg;
        //
        //                                AuditTrail.insertLog(conn, "331", loginid, "", "", companyid,
        //                                                params, ipAddress, auditMode);
        //                            }
        //                        }
        String holidaysJson = arrParam.get("holidays").toString();
        com.krawler.utils.json.base.JSONObject holidays = new JSONObject(holidaysJson);
        String qry1 = "SELECT holiday,description FROM companyholidays where companyid=?";
        DbResults rs = DbUtil.executeQuery(conn, qry1, companyid);
        List hDays = new ArrayList();
        while (rs.next()) {
            hDays.add(rs.getObject("holiday").toString());
        }
        DbUtil.executeUpdate(conn, "DELETE FROM companyholidays WHERE companyid = ?",
                new Object[] { companyid });
        String qry = "INSERT INTO companyholidays (companyid, holiday, description) VALUES (?,?,?)";
        com.krawler.utils.json.base.JSONArray jarr = holidays.getJSONArray("data");
        for (int k = 0; k < jarr.length(); k++) {
            com.krawler.utils.json.base.JSONObject jobj = jarr.getJSONObject(k);
            DbUtil.executeUpdate(conn, qry,
                    new Object[] { companyid, jobj.getString("day"), jobj.getString("description") });
        }
        if (hDays.size() != jarr.length()) {
            AuditTrail.insertLog(conn, "333", loginid, "", "", companyid, params, ipAddress, auditMode);
        }

        AuditTrail.insertLog(conn, "332", loginid, "", "", companyid, params, ipAddress, auditMode);

        /*
        // notification config options
        String updateqry = "UPDATE notification set notifysum = ? where companyid = ? and nid = ?";
        String insertqry = "INSERT INTO notification (companyid, nid, notifysum) VALUES (?,?,?)";
        qry = "SELECT count(*) as count from notification where companyid = ? and nid = ?";
        String notifyJson = arrParam.get("notifyconf").toString();
        JSONObject notifyJObj = new JSONObject(notifyJson);
        jarr = notifyJObj.getJSONArray("data");
        for (int k = 0; k < jarr.length(); k++) {
        JSONObject jobj = jarr.getJSONObject(k);
        String nid = jobj.getString("nid");
        int type = 1;
        int sum = 0;
        while (true) {
        if (jobj.has(String.valueOf(type))) {
        if (jobj.getBoolean(String.valueOf(type))) {
        sum += Math.pow(2, type);
        }
                
        type++;
        } else {
        break;
        }
        }
        pstmt = conn.prepareStatement(qry);
        pstmt.setString(1, companyid);
        pstmt.setString(2, nid);
        ResultSet notifySet = pstmt.executeQuery();
        if (notifySet.next()) {
        if (notifySet.getInt("count") > 0) {
        DbUtil.executeUpdate(conn, updateqry, new Object[]{sum, companyid, nid});
        } else {
        DbUtil.executeUpdate(conn, insertqry, new Object[]{companyid, nid, sum});
        }
        }
        }
         */
        //                        status = "success" + "," + logouploadmsg;
        //                    } else {
        //                        status = "success" + "," + "Subdomain is already registered.";
        //                    }
        //                }

        //            } else if (arrParam.get("logo").toString().length() != 0) {
        //                status = editCompanyLogo(conn, fileItems, companyid, AuthHandler.getUserid(request));
        //                AuditTrail.insertLog(conn, "331", loginid, "", "", companyid,
        //                        params, ipAddress, auditMode);
        //            }
        status = "success";
    } catch (JSONException ex) {
        Logger.getLogger(AdminServlet.class.getName()).log(Level.SEVERE, null, ex);
    }
    return status;
}

From source file:forseti.nomina.JNomMovDirDlg.java

@SuppressWarnings({ "rawtypes", "unchecked" })
public void doPost(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
    super.doPost(request, response);

    String nom_nomina_dlg = "";
    request.setAttribute("nom_nomina_dlg", nom_nomina_dlg);

    String mensaje = "";
    short idmensaje = -1;
    String usuario = getSesion(request).getID_Usuario();

    if (request.getContentType() != null
            && request.getContentType().toLowerCase().indexOf("multipart/form-data") > -1) {
        if (!getSesion(request).getRegistrado()) {
            irApag("/forsetiweb/errorAtributos.jsp", request, response);
            return;
        } else {//from  ww w.j a va 2 s  .  co m
            try {
                HttpSession ses = request.getSession(true);
                JFacturasXML nomrecxml = (JFacturasXML) ses.getAttribute("nom_rec_xml");
                Vector archivos = new Vector();
                DiskFileUpload fu = new DiskFileUpload();
                List items = fu.parseRequest(request);
                Iterator iter = items.iterator();
                while (iter.hasNext()) {
                    FileItem item = (FileItem) iter.next();
                    if (item.isFormField())
                        nomrecxml.getParametros().put(item.getFieldName(), item.getString());
                    else
                        archivos.addElement(item);
                }

                // revisa por las entidades
                JNominaEntidadesSetIds setids = new JNominaEntidadesSetIds(request, usuario,
                        getSesion(request).getSesion("NOM_NOMINA").getEspecial());
                setids.Open();

                if (setids.getNumRows() < 1) {
                    idmensaje = 3;
                    mensaje += MsjPermisoDenegado(request, "CEF", "NOM_NOMINA");
                    getSesion(request).setID_Mensaje(idmensaje, mensaje);
                    RDP("CEF", getSesion(request).getConBD(), "NA", getSesion(request).getID_Usuario(),
                            "NOM_NOMINA", "NNOM||||", mensaje);
                    irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                    return;
                }

                SubirArchivosCFD(request, response, nomrecxml, archivos);
                return;
            } catch (FileUploadException e) {
                e.printStackTrace();
                return;
            } catch (Exception e) {
                e.printStackTrace();
                return;
            }
        }
    }

    if (request.getParameter("proceso") != null && !request.getParameter("proceso").equals("")) {
        // revisa por las entidades
        JNominaEntidadesSetIds setids = new JNominaEntidadesSetIds(request, usuario,
                getSesion(request).getSesion("NOM_NOMINA").getEspecial());
        setids.Open();

        if (setids.getNumRows() < 1) {
            idmensaje = 3;
            mensaje += MsjPermisoDenegado(request, "CEF", "NOM_NOMINA");
            getSesion(request).setID_Mensaje(idmensaje, mensaje);
            RDP("CEF", getSesion(request).getConBD(), "NA", getSesion(request).getID_Usuario(), "NOM_NOMINA",
                    "NNOM||||", mensaje);
            irApag("/forsetiweb/caja_mensajes.jsp", request, response);
            return;
        }

        request.setAttribute("idmod", "NOM_NOMINA");
        request.setAttribute("fact_xml", "NOMINA");

        // Revisa por intento de intrusion (Salto de permiso de entidad)
        if (!request.getParameter("proceso").equals("AGREGAR_NOMINA") && request.getParameter("id") != null) {
            JNominasModuloSet set = new JNominasModuloSet(request);
            set.m_Where = "ID_Nomina = '" + p(request.getParameter("id")) + "'";
            set.Open();
            if (set.getNumRows() < 1) {
                idmensaje = 3;
                mensaje += MsjPermisoDenegado(request, "CEF", "NOM_NOMINA");
                getSesion(request).setID_Mensaje(idmensaje, mensaje);
                RDP("CEF", getSesion(request).getConBD(), "AL", getSesion(request).getID_Usuario(),
                        "NOM_NOMINA", "NNOM|" + request.getParameter("id") + "|"
                                + setids.getAbsRow(0).getID_Sucursal() + "||",
                        mensaje);
                irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                return;
            }
        }

        if (request.getParameter("proceso").equals("ENLAZAR_RECIBO")) {
            //System.out.println("Enlazar Recibos");
            // Revisa si tiene permisos
            if (!getSesion(request).getPermiso("NOM_NOMINA_CAMBIAR")) {
                idmensaje = 3;
                mensaje += MsjPermisoDenegado(request, "CEF", "NOM_NOMINA_CAMBIAR");
                getSesion(request).setID_Mensaje(idmensaje, mensaje);
                RDP("CEF", getSesion(request).getConBD(), "NA", getSesion(request).getID_Usuario(),
                        "NOM_NOMINA_CAMBIAR", "NNOM||||", mensaje);
                irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                return;
            }

            JNominasModuloSet setnom = new JNominasModuloSet(request);
            setnom.m_Where = "ID_Nomina = '" + p(request.getParameter("id")) + "'";
            setnom.Open();

            if (setids.getAbsRow(0).getCFD()
                    || (setnom.getAbsRow(0).getTipo() != 1 && setnom.getAbsRow(0).getTipo() != 2
                            && setnom.getAbsRow(0).getTipo() != 5 && setnom.getAbsRow(0).getTipo() != 6
                            && setnom.getAbsRow(0).getTipo() != 7 && setnom.getAbsRow(0).getTipo() != 8)) {
                idmensaje = 3;
                mensaje += "ERROR: No se puede enlazar ningun CFDI porque esta entidad de nmina genera sus propios CFDIs, o  porque esta nmina es del tipo especial, la cual no es compatible para sellar.<br>";
                getSesion(request).setID_Mensaje(idmensaje, mensaje);
                irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                return;
            }

            if (request.getParameter("subproceso") == null) // Como el subproceso no es ENVIAR ni ENLAZAR,
            {
                //System.out.println("Subproceso Nulo");
                getSesion(request).setID_Mensaje(idmensaje, mensaje);
                irApag("/forsetiweb/fact_dlg_xmls.jsp", request, response);
                return;
            } else {
                //System.out.println("Subproceso NO Nulo");
                if (request.getParameter("subproceso").equals("ENLAZAR")) {
                    // Se supone que el recibo aun no estar ligado a un recibo existente...
                    JCFDCompSet comprobante = new JCFDCompSet(request, "NOMINA");
                    comprobante.m_Where = "UUID = '" + p(request.getParameter("uuid")) + "'";
                    comprobante.Open();

                    if (comprobante.getNumRows() < 1 || !comprobante.getAbsRow(0).getFSI_Tipo().equals("ENT")
                            || comprobante.getAbsRow(0).getFSI_ID() != Integer
                                    .parseInt(getSesion(request).getSesion("NOM_NOMINA").getEspecial())) {
                        idmensaje = 3;
                        mensaje += "ERROR: No se ha cargado el CFDI del recibo, ste ya esta ligado a otro recibo,  el CFDI se carg en otra entidad<br>";
                        getSesion(request).setID_Mensaje(idmensaje, mensaje);
                        irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                        return;
                    }

                    HttpSession ses = request.getSession(true);
                    JFacturasXML nomrecxml = (JFacturasXML) ses.getAttribute("nom_rec_xml");

                    if (nomrecxml == null) {
                        nomrecxml = new JFacturasXML();
                        ses.setAttribute("nom_rec_xml", nomrecxml);
                    } else {
                        nomrecxml = null;
                        nomrecxml = new JFacturasXML();
                        ses.setAttribute("nom_rec_xml", nomrecxml);
                    }

                    StringBuffer sb_mensaje = new StringBuffer();
                    if (!JForsetiCFD.CargarDocumentoCFDI(request, nomrecxml, sb_mensaje,
                            request.getParameter("uuid"), "N")) {
                        idmensaje = 3;
                        mensaje += sb_mensaje.toString();
                        getSesion(request).setID_Mensaje(idmensaje, mensaje);
                        irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                        return;
                    }

                    if (nomrecxml.getComprobante().getProperty("tipoDeComprobante").equals("ingreso")
                            || nomrecxml.getComprobante().getProperty("tipoDeComprobante").equals("traslado")) {
                        idmensaje = 3;
                        mensaje += "ERROR: El tipo de comprobante fiscal digital CFDI, No corresponde con el tipo de documento a enlazar.<br>";
                        getSesion(request).setID_Mensaje(idmensaje, mensaje);
                        irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                        return;
                    }

                    //Verifica que el RFC del Emisor sea igual al RFC registrado, o que sea rfc generico
                    JBDSSet set = new JBDSSet(request);
                    set.ConCat(true);
                    set.m_Where = "Nombre = 'FSIBD_" + p(getSesion(request).getBDCompania()) + "'";
                    set.Open();
                    if (!nomrecxml.getRFC_Emisor().equalsIgnoreCase(set.getAbsRow(0).getRFC())) {
                        idmensaje = 3;
                        mensaje = "ERROR: El RFC del emisor en el XML no pertenece a la compaia";
                        getSesion(request).setID_Mensaje(idmensaje, mensaje.toString());
                        irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                        return;
                    }

                    if (request.getParameter("idempleado") == null) // Significa que debe agregar un nuevo recibo 
                    {
                        if (setnom.getAbsRow(0).getCerrado()) {
                            idmensaje = 3;
                            mensaje += "ERROR: No se puede enlazar el CFDI a un recibo nuevo porque la nmina ya esta protegida <br>";
                            getSesion(request).setID_Mensaje(idmensaje, mensaje);
                            irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                            return;
                        }
                        //float descuento = Float.parseFloat(nomrecxml.getComprobante().getProperty("descuento"));
                        //float totalImpuestosRetenidos = Float.parseFloat(nomrecxml.getImpuestos().getProperty("totalImpuestosRetenidos"));
                        JMasempSet setemp = new JMasempSet(request);
                        setemp.m_Where = "ID_Compania = '0' and ID_Sucursal = '"
                                + getSesion(request).getSesion("NOM_NOMINA").getEspecial()
                                + "' and ( RFC_Letras || RFC_Fecha || RFC_Homoclave ) ~~* '"
                                + p(nomrecxml.getRFC_Receptor()) + "'";
                        setemp.Open();
                        //System.out.println(setemp.getSQL());
                        if (setemp.getNumRows() == 0) {
                            idmensaje = 1;
                            mensaje = "PRECAUCION: No existe el empleado dado de alta en el sistema, est dado de alta en otra entidad o el RFC del empleado no coincide con el del recibo";
                            getSesion(request).setID_Mensaje(idmensaje, mensaje.toString());
                            irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                            return;
                        }

                        JNomMovDirSes rec = (JNomMovDirSes) ses.getAttribute("nom_nomina_dlg");
                        if (rec == null) {
                            rec = new JNomMovDirSes();
                            ses.setAttribute("nom_nomina_dlg", rec);
                        } else
                            rec.resetear();

                        JProcessSet setRec = new JProcessSet(request);
                        setRec.setSQL("select Recibo from VIEW_NOM_CALCULO_NOMINA_ESP where ID_Nomina = '"
                                + p(request.getParameter("id")) + "' order by Recibo desc limit 1");
                        setRec.Open();

                        if (setRec.getNumRows() > 0)
                            rec.setRecibo(Integer.valueOf(setRec.getAbsRow(0).getSTS("Col1")) + 1);
                        else
                            rec.setRecibo(1);

                        //Llena el recibo
                        rec.setUUID(nomrecxml.getTFD().getProperty("UUID"));
                        rec.setID_Empleado(setemp.getAbsRow(0).getID_Empleado());
                        rec.setNombre(setemp.getAbsRow(0).getNombre() + " "
                                + setemp.getAbsRow(0).getApellido_Paterno() + " "
                                + setemp.getAbsRow(0).getApellido_Materno());

                        JCalculoNominaDetSet dset = new JCalculoNominaDetSet(request);
                        dset.m_Where = "ID_Nomina = '" + p(request.getParameter("id")) + "' and ID_Empleado = '"
                                + p(request.getParameter("idempleado")) + "'";
                        dset.Open();

                        for (int i = 0; i < nomrecxml.getPercepciones().size(); i++) {
                            Properties percepcion = (Properties) nomrecxml.getPercepciones().elementAt(i);
                            int clave;
                            String descripcion;
                            boolean esDeduccion;
                            int idmovimiento;
                            try {
                                idmovimiento = Integer.parseInt(percepcion.getProperty("Clave"));
                            } catch (NumberFormatException e) {
                                idmovimiento = 0;
                            }
                            JMovimientosNomSet cat = new JMovimientosNomSet(request);
                            cat.m_Where = "ID_Movimiento = '" + idmovimiento + "'";
                            //System.out.println(cat.getSQL());
                            cat.Open();
                            if (cat.getNumRows() > 0) {
                                clave = cat.getAbsRow(0).getID_Movimiento();
                                descripcion = cat.getAbsRow(0).getDescripcion();
                                esDeduccion = cat.getAbsRow(0).getDeduccion();
                            } else // Si no existe la clave en el catalogo, enlaza desde catlogo intermediario 
                            {
                                clave = 0;
                                descripcion = percepcion.getProperty("Concepto");
                                esDeduccion = false;
                            }
                            float gravado = Float.parseFloat(percepcion.getProperty("ImporteGravado"));
                            float exento = Float.parseFloat(percepcion.getProperty("ImporteExento"));

                            rec.agregaPartida(clave, descripcion, gravado, exento, 0.00F, esDeduccion);
                        }

                        for (int i = 0; i < nomrecxml.getDeducciones().size(); i++) {
                            Properties deduccion = (Properties) nomrecxml.getDeducciones().elementAt(i);
                            int clave;
                            String descripcion;
                            boolean esDeduccion;

                            JMovimientosNomSet cat = new JMovimientosNomSet(request);
                            cat.m_Where = "ID_Movimiento = '" + p(deduccion.getProperty("Clave")) + "'";
                            //System.out.println(cat.getSQL());
                            cat.Open();
                            if (cat.getNumRows() > 0) {
                                clave = cat.getAbsRow(0).getID_Movimiento();
                                descripcion = cat.getAbsRow(0).getDescripcion();
                                esDeduccion = cat.getAbsRow(0).getDeduccion();
                            } else // Si no existe la clave en el catalogo, enlaza desde catlogo intermediario 
                            {
                                clave = 0;
                                descripcion = deduccion.getProperty("Concepto");
                                esDeduccion = true;
                            }
                            float gravado = Float.parseFloat(deduccion.getProperty("ImporteGravado"));
                            float exento = Float.parseFloat(deduccion.getProperty("ImporteExento"));

                            rec.agregaPartida(clave, descripcion, 0.00F, 0.00F, -(gravado + exento),
                                    esDeduccion);
                        }

                        for (int i = 0; i < nomrecxml.getIncapacidades().size(); i++) {
                            Properties incapacidad = (Properties) nomrecxml.getIncapacidades().elementAt(i);

                            float dias = Float.parseFloat(incapacidad.getProperty("DiasIncapacidad"));
                            int tipo = Integer.parseInt(incapacidad.getProperty("TipoIncapacidad"));
                            if (tipo == 1)
                                rec.setIXA(dias);
                            else if (tipo == 2)
                                rec.setIXE(dias);
                            else
                                rec.setIXM(dias);

                        }

                        for (int i = 0; i < nomrecxml.getHorasExtras().size(); i++) {
                            Properties horasextra = (Properties) nomrecxml.getHorasExtras().elementAt(i);

                            byte dias = Byte.parseByte(horasextra.getProperty("Dias"));
                            String tipo = horasextra.getProperty("TipoHoras");
                            float horas = Float.parseFloat(horasextra.getProperty("HorasExtra"));

                            rec.setDiasHorasExtras(dias);
                            if (tipo.equals("Dobles") || tipo.equals("dobles"))
                                rec.setHE(horas);
                            else // Triples o triples
                                rec.setHT(horas);

                        }

                        rec.establecerResultados();

                        if ((JUtil.redondear(rec.getSumGravado() + rec.getSumExento() + rec.getSumDeduccion(),
                                2)
                                - JUtil.redondear(
                                        Float.parseFloat(nomrecxml.getComprobante().getProperty("total")),
                                        2)) > 0.1
                                || (JUtil.redondear(
                                        rec.getSumGravado() + rec.getSumExento() + rec.getSumDeduccion(), 2)
                                        - JUtil.redondear(
                                                Float.parseFloat(
                                                        nomrecxml.getComprobante().getProperty("total")),
                                                2)) < -0.1) {
                            idmensaje = 3;
                            mensaje = "ERROR: El total en el CFDI no corresponde al Total calculado en el registro a partir de este CFDI. No se puede agregar. DOC: "
                                    + JUtil.redondear(
                                            rec.getSumGravado() + rec.getSumExento() + rec.getSumDeduccion(), 2)
                                    + " XML: "
                                    + JUtil.redondear(
                                            Float.parseFloat(nomrecxml.getComprobante().getProperty("total")),
                                            2);
                            getSesion(request).setID_Mensaje(idmensaje, mensaje.toString());
                            irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                            return;
                        }

                        getSesion(request).setID_Mensaje(idmensaje, mensaje);
                        irApag("/forsetiweb/nomina/nom_nomina_dlg_emp.jsp", request, response);
                        return;

                    } else // Significa que debe Enlazar a un recibo existente
                    {
                        if (setnom.getAbsRow(0).getFormaPago().equals("N")) //Si no est ya pagada la nomina lo rechaza porque no hay poliza para enlazar el cfdi a la contabilidad electronica
                        {
                            idmensaje = 3;
                            mensaje += "ERROR: No se puede enlazar el CFDI a un recibo existente porque la nmina no esta pagada an, lo que significa que no existe una pliza asociada para el enlace a la contabilidad elecrnica <br>";
                            getSesion(request).setID_Mensaje(idmensaje, mensaje);
                            irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                            return;
                        }

                        String[] valoresParam = request.getParameterValues("idempleado");
                        if (valoresParam.length == 1) {
                            JCalculoNominaEspSet cset = new JCalculoNominaEspSet(request);
                            cset.m_Where = "ID_Nomina = '" + p(request.getParameter("id"))
                                    + "' and ID_Empleado = '" + p(request.getParameter("idempleado")) + "'";
                            cset.Open();
                            //System.out.println(setemp.getSQL());

                            if (cset.getAbsRow(0).getID_CFD() != 0) {
                                idmensaje = 1;
                                mensaje += "PRECAUCION: Este recibo ya tiene un CFDI asociado. No puedes asociar otro CFDI al mismo recibo<br>";
                                getSesion(request).setID_Mensaje(idmensaje, mensaje);
                                irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                                return;
                            }

                            JMasempSetCons setemp = new JMasempSetCons(request);
                            setemp.m_Where = "ID_Empleado = '" + p(request.getParameter("idempleado")) + "'";
                            setemp.Open();

                            if (JUtil.redondear(
                                    cset.getAbsRow(0).getGravado() + cset.getAbsRow(0).getExento()
                                            + cset.getAbsRow(0).getDeduccion(),
                                    2) != JUtil.redondear(
                                            Float.parseFloat(nomrecxml.getComprobante().getProperty("total")),
                                            2)
                                    || !(setemp.getAbsRow(0).getRFC_Letras()
                                            + setemp.getAbsRow(0).getRFC_Fecha()
                                            + setemp.getAbsRow(0).getRFC_Homoclave())
                                                    .equals(nomrecxml.getRFC_Receptor())) {
                                idmensaje = 1;
                                mensaje += "PRECAUCION: Los totales o los RFCs del recibo y el CFDI no coinciden. No se puede asociar este CFDI al registro<br>";
                                getSesion(request).setID_Mensaje(idmensaje, mensaje);
                                irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                                return;
                            }

                            // Aqui asocia.
                            Enlazar(request, response);
                            return;
                        } else {
                            idmensaje = 1;
                            mensaje += JUtil.Msj("GLB", "VISTA", "GLB", "SELEC-PROC", 2);
                            getSesion(request).setID_Mensaje(idmensaje, mensaje);
                            irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                            return;
                        }
                    }

                } else if (request.getParameter("subproceso").equals("ENVIAR")) {
                    if (AgregarRecursos(request, response) == -1) {
                        AgregarCambiarEmp(request, response);
                        return;
                    }

                    irApag("/forsetiweb/nomina/nom_nomina_dlg_emp.jsp", request, response);
                    return;
                }
            }
        } else if (request.getParameter("proceso").equals("AGREGAR_NOMINA")) {
            // Revisa si tiene permisos
            if (!getSesion(request).getPermiso("NOM_NOMINA_AGREGAR")) {
                idmensaje = 3;
                mensaje += MsjPermisoDenegado(request, "CEF", "NOM_NOMINA_AGREGAR");
                getSesion(request).setID_Mensaje(idmensaje, mensaje);
                RDP("CEF", getSesion(request).getConBD(), "NA", getSesion(request).getID_Usuario(),
                        "NOM_NOMINA_AGREGAR", "NNOM||||", mensaje);
                irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                return;
            }

            JAdmCompaniasSet setcom = new JAdmCompaniasSet(request);
            setcom.m_Where = "ID_Compania = '0' and ID_Sucursal = '"
                    + getSesion(request).getSesion("NOM_NOMINA").getEspecial() + "'";
            setcom.Open();

            Byte numero_nomina = new Byte(setcom.getAbsRow(0).getNumero());
            Date desde = new Date(setcom.getAbsRow(0).getFecha().getTime());
            Calendar hast = new GregorianCalendar();
            hast.setTime(setcom.getAbsRow(0).getFecha());
            Integer ano = new Integer(JUtil.obtAno(hast));
            Integer tipo_de_nomina = new Integer(-1);

            if (setcom.getAbsRow(0).getPeriodo().equals("sem"))
                hast.add(Calendar.DATE, 6);
            else if (setcom.getAbsRow(0).getPeriodo().equals("qui"))
                hast.add(Calendar.DATE, 14);
            else {
                hast.add(Calendar.MONTH, 1);
                hast.add(Calendar.DATE, -1);
            }
            Date hasta = hast.getTime();

            request.setAttribute("numero_nomina", numero_nomina);
            request.setAttribute("ano", ano);
            request.setAttribute("desde", desde);
            request.setAttribute("hasta", hasta);
            request.setAttribute("tipo_de_nomina", tipo_de_nomina);

            // Solicitud de envio a procesar
            if (request.getParameter("subproceso") != null
                    && request.getParameter("subproceso").equals("ENVIAR")) {
                // Verificacion
                if (VerificarParametros(request, response)) {
                    AgregarCambiarCabecero(request, response);
                    return;
                }
                irApag("/forsetiweb/nomina/nom_nomina_dlg.jsp", request, response);
                return;
            } else // Como el subproceso no es ENVIAR, abre la ventana del proceso de AGREGADO para agregar `por primera vez
            {
                getSesion(request).setID_Mensaje(idmensaje, mensaje);
                irApag("/forsetiweb/nomina/nom_nomina_dlg.jsp", request, response);
                return;
            }
        } else if (request.getParameter("proceso").equals("CAMBIAR_NOMINA")) {
            // Revisa si tiene permisos
            if (!getSesion(request).getPermiso("NOM_NOMINA_CAMBIAR")) {
                idmensaje = 3;
                mensaje += MsjPermisoDenegado(request, "CEF", "NOM_NOMINA_CAMBIAR");
                getSesion(request).setID_Mensaje(idmensaje, mensaje);
                RDP("CEF", getSesion(request).getConBD(), "NA", getSesion(request).getID_Usuario(),
                        "NOM_NOMINA_CAMBIAR", "NNOM||||", mensaje);
                irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                return;
            }

            // Solicitud de envio a procesar
            if (request.getParameter("id") != null) {
                String[] valoresParam = request.getParameterValues("id");
                if (valoresParam.length == 1) {
                    JNominasModuloSet setnom = new JNominasModuloSet(request);
                    setnom.m_Where = "ID_Nomina = '" + p(request.getParameter("id")) + "'";
                    setnom.Open();

                    if (setnom.getAbsRow(0).getCerrado()) {
                        idmensaje = 3;
                        mensaje += "ERROR: No se puede cambiar la n&oacute;mina porque ya esta protegida<br>";
                        getSesion(request).setID_Mensaje(idmensaje, mensaje);
                        irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                        return;
                    }

                    if (setnom.getAbsRow(0).getTipo() != 1 && setnom.getAbsRow(0).getTipo() != 2) {
                        idmensaje = 3;
                        mensaje += "ERROR: No se puede cambiar la nmina porque no es una nmina normal<br>";
                        getSesion(request).setID_Mensaje(idmensaje, mensaje);
                        irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                        return;
                    }
                    Byte numero_nomina = new Byte((byte) setnom.getAbsRow(0).getNumero_Nomina());
                    Integer ano = new Integer(setnom.getAbsRow(0).getAno());
                    Date desde = new Date(setnom.getAbsRow(0).getFecha_Desde().getTime());
                    Date hasta = new Date(setnom.getAbsRow(0).getFecha_Hasta().getTime());
                    Integer tipo_de_nomina = new Integer(setnom.getAbsRow(0).getTipo());

                    request.setAttribute("numero_nomina", numero_nomina);
                    request.setAttribute("ano", ano);
                    request.setAttribute("desde", desde);
                    request.setAttribute("hasta", hasta);
                    request.setAttribute("tipo_de_nomina", tipo_de_nomina);

                    // Solicitud de envio a procesar
                    if (request.getParameter("subproceso") != null
                            && request.getParameter("subproceso").equals("ENVIAR")) {
                        // Verificacion
                        if (VerificarParametros(request, response)) {
                            AgregarCambiarCabecero(request, response);
                            return;
                        }
                        irApag("/forsetiweb/nomina/nom_nomina_dlg.jsp", request, response);
                        return;
                    } else // Como el subproceso no es ENVIAR, abre la ventana del proceso de AGREGADO para agregar `por primera vez
                    {
                        getSesion(request).setID_Mensaje(idmensaje, mensaje);
                        irApag("/forsetiweb/nomina/nom_nomina_dlg.jsp", request, response);
                        return;
                    }
                } else {
                    idmensaje = 1;
                    mensaje += JUtil.Msj("GLB", "VISTA", "GLB", "SELEC-PROC", 2);
                    getSesion(request).setID_Mensaje(idmensaje, mensaje);
                    irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                    return;
                }
            } else {
                idmensaje = 3;
                mensaje += JUtil.Msj("GLB", "VISTA", "GLB", "SELEC-PROC", 1);
                getSesion(request).setID_Mensaje(idmensaje, mensaje);
                irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                return;
            }
        } else if (request.getParameter("proceso").equals("ELIMINAR_NOMINA")) {
            // Revisa si tiene permisos
            if (!getSesion(request).getPermiso("NOM_NOMINA_ELIMINAR")) {
                idmensaje = 3;
                mensaje += MsjPermisoDenegado(request, "CEF", "NOM_NOMINA_ELIMINAR");
                getSesion(request).setID_Mensaje(idmensaje, mensaje);
                RDP("CEF", getSesion(request).getConBD(), "NA", getSesion(request).getID_Usuario(),
                        "NOM_NOMINA_ELIMINAR", "NNOM||||", mensaje);
                irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                return;
            }

            // Solicitud de envio a procesar
            if (request.getParameter("id") != null) {
                String[] valoresParam = request.getParameterValues("id");
                if (valoresParam.length == 1) {
                    JNominasModuloSet setnom = new JNominasModuloSet(request);
                    setnom.m_Where = "ID_Nomina = '" + p(request.getParameter("id")) + "'";
                    setnom.Open();

                    if (setnom.getAbsRow(0).getCerrado()) {
                        idmensaje = 3;
                        mensaje += "ERROR: No se puede eliminar la n&oacute;mina porque ya esta protegida <br>";
                        getSesion(request).setID_Mensaje(idmensaje, mensaje);
                        irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                        return;
                    }

                    JCalculoNominaEspSet cset = new JCalculoNominaEspSet(request);
                    cset.m_Where = "ID_Nomina = '" + p(request.getParameter("id")) + "' and TFD >= 2";
                    cset.Open();
                    if (cset.getNumRows() > 0) {
                        idmensaje = 3;
                        mensaje += "ERROR: No se puede eliminar la nmina porque por lo menos un recibo ya tiene su CFDI enlazado. Primero debes desenlazar el CFDI desde el mdulo de CFDI y CE del centro de control<br>";
                        getSesion(request).setID_Mensaje(idmensaje, mensaje);
                        irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                        return;
                    }

                    Eliminar(request, response);
                    return;
                } else {
                    idmensaje = 1;
                    mensaje += JUtil.Msj("GLB", "VISTA", "GLB", "SELEC-PROC", 2);
                    getSesion(request).setID_Mensaje(idmensaje, mensaje);
                    irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                    return;
                }
            } else {
                idmensaje = 3;
                mensaje += JUtil.Msj("GLB", "VISTA", "GLB", "SELEC-PROC", 1);
                getSesion(request).setID_Mensaje(idmensaje, mensaje);
                irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                return;
            }
        } else if (request.getParameter("proceso").equals("CALCULAR_NOMINA")) {
            // Revisa si tiene permisos
            if (!getSesion(request).getPermiso("NOM_NOMINA_AGREGAR")) {
                idmensaje = 3;
                mensaje += MsjPermisoDenegado(request, "CEF", "NOM_NOMINA_AGREGAR");
                getSesion(request).setID_Mensaje(idmensaje, mensaje);
                RDP("CEF", getSesion(request).getConBD(), "NA", getSesion(request).getID_Usuario(),
                        "NOM_NOMINA_AGREGAR", "NNOM||||", mensaje);
                irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                return;
            }

            // Solicitud de envio a procesar
            if (request.getParameter("id") != null) {
                String[] valoresParam = request.getParameterValues("id");
                if (valoresParam.length == 1) {
                    JNominasModuloSet setnom = new JNominasModuloSet(request);
                    setnom.m_Where = "ID_Nomina = '" + p(request.getParameter("id")) + "'";
                    setnom.Open();

                    if (setnom.getAbsRow(0).getCerrado()) {
                        idmensaje = 3;
                        mensaje += "ERROR: No se puede calcular la n&oacute;mina porque ya est protegida <br>";
                        getSesion(request).setID_Mensaje(idmensaje, mensaje);
                        irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                        return;
                    }

                    if (setnom.getAbsRow(0).getTipo() == 1 || setnom.getAbsRow(0).getTipo() == 2) {
                        if (request.getParameter("subproceso") != null
                                && request.getParameter("subproceso").equals("ENVIAR")) {
                            //Normales
                            Calcular(request, response, 12);
                            return;
                        } else // Como el subproceso no es ENVIAR, abre la ventana del proceso de AGREGADO para agregar `por primera vez
                        {
                            getSesion(request).setID_Mensaje(idmensaje, mensaje);
                            irApag("/forsetiweb/nomina/nom_nomina_dlg_calcular.jsp", request, response);
                            return;
                        }
                    } else if (setnom.getAbsRow(0).getTipo() == 5 || setnom.getAbsRow(0).getTipo() == 6) {
                        //Aguinaldo
                        Calcular(request, response, 56);
                        return;
                    } else {
                        idmensaje = 3;
                        mensaje += "ERROR: No se puede calcular la nmina porque el tipo de nmina no es calculable <br>";
                        getSesion(request).setID_Mensaje(idmensaje, mensaje);
                        irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                        return;
                    }
                } else {
                    idmensaje = 1;
                    mensaje += JUtil.Msj("GLB", "VISTA", "GLB", "SELEC-PROC", 2);
                    getSesion(request).setID_Mensaje(idmensaje, mensaje);
                    irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                    return;
                }
            } else {
                idmensaje = 1;
                mensaje += JUtil.Msj("GLB", "VISTA", "GLB", "SELEC-PROC", 2);
                getSesion(request).setID_Mensaje(idmensaje, mensaje);
                irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                return;
            }
        } else if (request.getParameter("proceso").equals("GENERAR_NOMINA")) {
            // Revisa si tiene permisos
            if (!getSesion(request).getPermiso("NOM_NOMINA_AGREGAR")) {
                idmensaje = 3;
                mensaje += MsjPermisoDenegado(request, "CEF", "NOM_NOMINA_AGREGAR");
                getSesion(request).setID_Mensaje(idmensaje, mensaje);
                RDP("CEF", getSesion(request).getConBD(), "NA", getSesion(request).getID_Usuario(),
                        "NOM_NOMINA_AGREGAR", "NNOM||||", mensaje);
                irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                return;
            }

            // Solicitud de envio a procesar
            if (request.getParameter("id") != null) {
                String[] valoresParam = request.getParameterValues("id");
                if (valoresParam.length == 1) {
                    JNominasModuloSet setnom = new JNominasModuloSet(request);
                    setnom.m_Where = "ID_Nomina = '" + p(request.getParameter("id")) + "'";
                    setnom.Open();

                    if (!setnom.getAbsRow(0).getCerrado() || setnom.getAbsRow(0).getStatus().equals("P")
                            || setnom.getAbsRow(0).getStatus().equals("C")) {
                        idmensaje = 3;
                        mensaje += "ERROR: No se puede generar pago de n&oacute;mina porque no esta protegida, ya esta pagada o esta cancelada <br>";
                        getSesion(request).setID_Mensaje(idmensaje, mensaje);
                        irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                        return;
                    }

                    Generar(request, response);
                    return;

                } else {
                    idmensaje = 1;
                    mensaje += JUtil.Msj("GLB", "VISTA", "GLB", "SELEC-PROC", 2);
                    getSesion(request).setID_Mensaje(idmensaje, mensaje);
                    irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                    return;
                }
            } else {
                idmensaje = 3;
                mensaje += JUtil.Msj("GLB", "VISTA", "GLB", "SELEC-PROC", 1);
                getSesion(request).setID_Mensaje(idmensaje, mensaje);
                irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                return;
            }
        } else if (request.getParameter("proceso").equals("CARGAR_RECIBO")) {
            // Revisa si tiene permisos
            if (!getSesion(request).getPermiso("ADM_CFDI_CARGAR")) {
                idmensaje = 3;
                mensaje += MsjPermisoDenegado(request, "CEF", "ADM_CFDI_CARGAR");
                getSesion(request).setID_Mensaje(idmensaje, mensaje);
                RDP("CEF", getSesion(request).getConBD(), "NA", getSesion(request).getID_Usuario(),
                        "ADM_CFDI_CARGAR", "NNOM||||", mensaje);
                irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                return;
            }

            JNominasModuloSet setnom = new JNominasModuloSet(request);
            setnom.m_Where = "ID_Nomina = '" + p(request.getParameter("id")) + "'";
            setnom.Open();

            if (setids.getAbsRow(0).getCFD()
                    || (setnom.getAbsRow(0).getTipo() != 1 && setnom.getAbsRow(0).getTipo() != 2
                            && setnom.getAbsRow(0).getTipo() != 5 && setnom.getAbsRow(0).getTipo() != 6)) {
                idmensaje = 3;
                mensaje += "ERROR: No se puede cargar ningun CFDI porque esta entidad de nmina genera sus propios CFDIs, o  porque el tipo, no es compatible para sellar.<br>";
                getSesion(request).setID_Mensaje(idmensaje, mensaje);
                irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                return;
            }

            Integer subir_archivos = new Integer(2);
            request.setAttribute("subir_archivos", subir_archivos);

            HttpSession ses = request.getSession(true);
            JFacturasXML rec = (JFacturasXML) ses.getAttribute("nom_rec_xml");

            if (rec == null) {
                rec = new JFacturasXML();
                ses.setAttribute("nom_rec_xml", rec);
            } else {
                rec = null;
                rec = new JFacturasXML();
                ses.setAttribute("nom_rec_xml", rec);
            }

            getSesion(request).setID_Mensaje(idmensaje, mensaje);
            irApag("/forsetiweb/subir_archivos.jsp?verif=/servlet/CEFNomMovDirDlg&archivo_1=xml&archivo_2=pdf&proceso=CARGAR_RECIBO&subproceso=ENVIAR",
                    request, response);
            return;

        } else if (request.getParameter("proceso").equals("SELLAR_NOMINA")) {
            // Revisa si tiene permisos
            if (!getSesion(request).getPermiso("NOM_NOMINA_AGREGAR")) {
                idmensaje = 3;
                mensaje += MsjPermisoDenegado(request, "CEF", "NOM_NOMINA_AGREGAR");
                getSesion(request).setID_Mensaje(idmensaje, mensaje);
                RDP("CEF", getSesion(request).getConBD(), "NA", getSesion(request).getID_Usuario(),
                        "NOM_NOMINA_AGREGAR", "NNOM||||", mensaje);
                irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                return;
            }

            if (request.getParameter("id") != null) {
                String[] valoresParam = request.getParameterValues("id");
                if (valoresParam.length == 1) {
                    if (setids.getAbsRow(0).getCFD() == false) {
                        idmensaje = 1;
                        mensaje += "PRECAUCION: Esta entidad de nmina no est&aacute; establecida como CFDI. No se pueden sellar los registros<br>";
                        getSesion(request).setID_Mensaje(idmensaje, mensaje);
                        irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                        return;
                    }

                    JNominasModuloSet setnom = new JNominasModuloSet(request);
                    setnom.m_Where = "ID_Nomina = '" + p(request.getParameter("id")) + "'";
                    setnom.Open();

                    if (!setnom.getAbsRow(0).getCerrado() || !setnom.getAbsRow(0).getStatus().equals("P")
                            || setnom.getAbsRow(0).getStatus().equals("C")) {
                        idmensaje = 3;
                        mensaje += "ERROR: No se puede sellar esta nmina porque no esta protegida, no esta pagada o est cancelada <br>";
                        getSesion(request).setID_Mensaje(idmensaje, mensaje);
                        irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                        return;
                    }

                    if (setnom.getAbsRow(0).getTipo() == 1 || setnom.getAbsRow(0).getTipo() == 2
                            || setnom.getAbsRow(0).getTipo() == 5 || setnom.getAbsRow(0).getTipo() == 6
                            || setnom.getAbsRow(0).getTipo() == 7 || setnom.getAbsRow(0).getTipo() == 8) {
                        JCalculoNominaEspSet SetMod = new JCalculoNominaEspSet(request);
                        SetMod.m_Where = "ID_Nomina = '" + p(request.getParameter("id")) + "'";
                        SetMod.m_OrderBy = "Recibo ASC";
                        SetMod.Open();

                        for (int i = 0; i < SetMod.getNumRows(); i++) {
                            if (SetMod.getAbsRow(i).getTFD() == 3)
                                continue;

                            StringBuffer sb_mensaje = new StringBuffer(254);
                            idmensaje = generarCFDI(request, response, "NOMINA",
                                    Integer.parseInt(request.getParameter("id")),
                                    SetMod.getAbsRow(i).getID_Empleado(), setids, SetMod.getAbsRow(i).getTFD(),
                                    sb_mensaje);
                            mensaje += SetMod.getAbsRow(i).getID_Empleado() + " " + sb_mensaje.toString()
                                    + "<br>";
                            if (idmensaje == 3)
                                break;
                        }

                        getSesion(request).setID_Mensaje(idmensaje, mensaje);
                        irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                        return;
                    } else {
                        idmensaje = 3;
                        mensaje += "ERROR: No se puede sellar la n&oacute;mina porque se trata de una n&oacute;mina especial. <br>";
                        getSesion(request).setID_Mensaje(idmensaje, mensaje);
                        irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                        return;
                    }

                } else {
                    idmensaje = 1;
                    mensaje += JUtil.Msj("GLB", "VISTA", "GLB", "SELEC-PROC", 2);
                    getSesion(request).setID_Mensaje(idmensaje, mensaje);
                    irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                    return;
                }
            } else {
                idmensaje = 3;
                mensaje += JUtil.Msj("GLB", "VISTA", "GLB", "SELEC-PROC", 1);
                getSesion(request).setID_Mensaje(idmensaje, mensaje);
                irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                return;
            }
        } else if (request.getParameter("proceso").equals("PROTEGER_NOMINA")) {
            // Revisa si tiene permisos
            if (!getSesion(request).getPermiso("NOM_NOMINA_CAMBIAR")) {
                idmensaje = 3;
                mensaje += MsjPermisoDenegado(request, "CEF", "NOM_NOMINA_CAMBIAR");
                getSesion(request).setID_Mensaje(idmensaje, mensaje);
                RDP("CEF", getSesion(request).getConBD(), "NA", getSesion(request).getID_Usuario(),
                        "NOM_NOMINA_CAMBIAR", "NNOM||||", mensaje);
                irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                return;
            }

            // Solicitud de envio a procesar
            if (request.getParameter("id") != null) {
                String[] valoresParam = request.getParameterValues("id");
                if (valoresParam.length == 1) {
                    JNominasModuloSet setnom = new JNominasModuloSet(request);
                    setnom.m_Where = "ID_Nomina = '" + p(request.getParameter("id")) + "'";
                    setnom.Open();
                    if (!setnom.getAbsRow(0).getFormaPago().equals("N")
                            || setnom.getAbsRow(0).getStatus().equals("C")) {
                        idmensaje = 3;
                        mensaje += "ERROR: No se puede desproteger la nmina porque ya esta pagada o esta cancelada.<br>";
                        getSesion(request).setID_Mensaje(idmensaje, mensaje);
                        irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                        return;
                    }

                    Proteger(request, response);
                    return;
                } else {
                    idmensaje = 1;
                    mensaje += JUtil.Msj("GLB", "VISTA", "GLB", "SELEC-PROC", 2);
                    getSesion(request).setID_Mensaje(idmensaje, mensaje);
                    irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                    return;
                }
            } else {
                idmensaje = 3;
                mensaje += JUtil.Msj("GLB", "VISTA", "GLB", "SELEC-PROC", 1);
                getSesion(request).setID_Mensaje(idmensaje, mensaje);
                irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                return;
            }
        } else if (request.getParameter("proceso").equals("CONSULTAR_NOMINA")) {
            // Revisa si tiene permisos
            if (!getSesion(request).getPermiso("NOM_NOMINA")) {
                idmensaje = 3;
                mensaje += MsjPermisoDenegado(request, "CEF", "NOM_NOMINA");
                getSesion(request).setID_Mensaje(idmensaje, mensaje);
                RDP("CEF", getSesion(request).getConBD(), "NA", getSesion(request).getID_Usuario(),
                        "NOM_NOMINA", "NNOM||||", mensaje);
                irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                return;
            }

            // Solicitud de envio a procesar
            if (request.getParameter("id") != null) {
                String[] valoresParam = request.getParameterValues("id");
                if (valoresParam.length == 1) {
                    getSesion(request).setID_Mensaje(idmensaje, mensaje);
                    irApag("/forsetiweb/nomina/nom_nomina_dlg_cons.jsp", request, response);
                    return;
                } else {
                    idmensaje = 1;
                    mensaje += JUtil.Msj("GLB", "VISTA", "GLB", "SELEC-PROC", 2);
                    getSesion(request).setID_Mensaje(idmensaje, mensaje);
                    irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                    return;
                }
            } else {
                idmensaje = 3;
                mensaje += JUtil.Msj("GLB", "VISTA", "GLB", "SELEC-PROC", 1);
                getSesion(request).setID_Mensaje(idmensaje, mensaje);
                irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                return;
            }
        } else if (request.getParameter("proceso").equals("MOVER_NOMINA")) {
            // Revisa si tiene permisos
            if (!getSesion(request).getPermiso("NOM_NOMINA_CAMBIAR")) {
                idmensaje = 3;
                mensaje += MsjPermisoDenegado(request, "CEF", "NOM_NOMINA_CAMBIAR");
                getSesion(request).setID_Mensaje(idmensaje, mensaje);
                RDP("CEF", getSesion(request).getConBD(), "NA", getSesion(request).getID_Usuario(),
                        "NOM_NOMINA_CAMBIAR", "NNOM||||", mensaje);
                irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                return;
            }

            // Solicitud de envio a procesar
            if (request.getParameter("id") != null) {
                String[] valoresParam = request.getParameterValues("id");
                if (valoresParam.length == 1) {
                    getSesion(request).setID_Mensaje(idmensaje, mensaje);
                    irApag("/forsetiweb/nomina/nom_nomina_dlg_cons.jsp", request, response);
                    return;
                } else {
                    idmensaje = 1;
                    mensaje += JUtil.Msj("GLB", "VISTA", "GLB", "SELEC-PROC", 2);
                    getSesion(request).setID_Mensaje(idmensaje, mensaje);
                    irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                    return;
                }
            } else {
                idmensaje = 3;
                mensaje += JUtil.Msj("GLB", "VISTA", "GLB", "SELEC-PROC", 1);
                getSesion(request).setID_Mensaje(idmensaje, mensaje);
                irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                return;
            }
        } else if (request.getParameter("proceso").equals("AGR_EMP")) {
            // Revisa si tiene permisos
            if (!getSesion(request).getPermiso("NOM_NOMINA_CAMBIAR")) {
                idmensaje = 3;
                mensaje += MsjPermisoDenegado(request, "CEF", "NOM_NOMINA_CAMBIAR");
                getSesion(request).setID_Mensaje(idmensaje, mensaje);
                RDP("CEF", getSesion(request).getConBD(), "NA", getSesion(request).getID_Usuario(),
                        "NOM_NOMINA_CAMBIAR", "NNOM||||", mensaje);
                irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                return;
            }
            JNominasModuloSet setnom = new JNominasModuloSet(request);
            setnom.m_Where = "ID_Nomina = '" + p(request.getParameter("id")) + "'";
            setnom.Open();

            if (setnom.getAbsRow(0).getCerrado() || setnom.getAbsRow(0).getStatus().equals("C")) {
                idmensaje = 3;
                mensaje += "ERROR: No se puede agregar el empleado porque la nmina ya est protegida o est cancelada.<br>";
                getSesion(request).setID_Mensaje(idmensaje, mensaje);
                irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                return;
            }

            // Solicitud de envio a procesar
            if (request.getParameter("subproceso") != null
                    && request.getParameter("subproceso").equals("ENVIAR")) {
                if (AgregarCabeceroRecibo(request, response) == -1) {
                    AgregarCambiarEmp(request, response);
                    return;
                }
                irApag("/forsetiweb/nomina/nom_nomina_dlg_emp.jsp", request, response);
                return;
            } else if (request.getParameter("subproceso") != null
                    && request.getParameter("subproceso").equals("AGR_PART")) {
                if (AgregarCabeceroRecibo(request, response) == -1) {
                    if (VerificarParametrosPartida(request, response))
                        AgregarPartida(request, response);
                }
                irApag("/forsetiweb/nomina/nom_nomina_dlg_emp.jsp", request, response);
                return;
            } else if (request.getParameter("subproceso") != null
                    && request.getParameter("subproceso").equals("EDIT_PART")) {
                if (AgregarCabeceroRecibo(request, response) == -1) {
                    if (VerificarParametrosPartida(request, response))
                        EditarPartida(request, response);
                }
                irApag("/forsetiweb/nomina/nom_nomina_dlg_emp.jsp", request, response);
                return;
            } else if (request.getParameter("subproceso") != null
                    && request.getParameter("subproceso").equals("BORR_PART")) {
                if (AgregarCabeceroRecibo(request, response) == -1) {
                    BorrarPartida(request, response);
                }
                irApag("/forsetiweb/nomina/nom_nomina_dlg_emp.jsp", request, response);
                return;
            } else // Como el subproceso no es ENVIAR ni AGR_PART ni EDIT_PART ni BORR_PART, abre la ventana del proceso de AGREGADO para agregar `por primera vez
            {
                HttpSession ses = request.getSession(true);
                JNomMovDirSes rec = (JNomMovDirSes) ses.getAttribute("nom_nomina_dlg");
                if (rec == null) {
                    rec = new JNomMovDirSes();
                    ses.setAttribute("nom_nomina_dlg", rec);
                } else
                    rec.resetear();

                JProcessSet setRec = new JProcessSet(request);
                setRec.setSQL("select Recibo from VIEW_NOM_CALCULO_NOMINA_ESP where ID_Nomina = '"
                        + p(request.getParameter("id")) + "' order by Recibo desc limit 1");
                setRec.Open();

                if (setRec.getNumRows() > 0)
                    rec.setRecibo(Integer.valueOf(setRec.getAbsRow(0).getSTS("Col1")) + 1);
                else
                    rec.setRecibo(1);

                getSesion(request).setID_Mensaje(idmensaje, mensaje);
                irApag("/forsetiweb/nomina/nom_nomina_dlg_emp.jsp", request, response);
                return;
            }
        } else if (request.getParameter("proceso").equals("CAM_EMP")) {
            // Revisa si tiene permisos
            if (!getSesion(request).getPermiso("NOM_NOMINA_CAMBIAR")) {
                idmensaje = 3;
                mensaje += MsjPermisoDenegado(request, "CEF", "NOM_NOMINA_CAMBIAR");
                getSesion(request).setID_Mensaje(idmensaje, mensaje);
                RDP("CEF", getSesion(request).getConBD(), "NA", getSesion(request).getID_Usuario(),
                        "NOM_NOMINA_CAMBIAR", "NNOM||||", mensaje);
                irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                return;
            }

            JNominasModuloSet setnom = new JNominasModuloSet(request);
            setnom.m_Where = "ID_Nomina = '" + p(request.getParameter("id")) + "'";
            setnom.Open();

            if (setnom.getAbsRow(0).getCerrado() || setnom.getAbsRow(0).getStatus().equals("C")) {
                idmensaje = 3;
                mensaje += "ERROR: No se puede cambiar el recibo porque la nmina ya est protegida o est cancelada.<br>";
                getSesion(request).setID_Mensaje(idmensaje, mensaje);
                irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                return;
            }

            if (request.getParameter("idempleado") != null) {
                String[] valoresParam = request.getParameterValues("idempleado");
                if (valoresParam.length == 1) {
                    JCalculoNominaEspSet cset = new JCalculoNominaEspSet(request);
                    cset.m_Where = "ID_Nomina = '" + p(request.getParameter("id")) + "' and ID_Empleado = '"
                            + p(request.getParameter("idempleado")) + "'";
                    cset.Open();
                    if (cset.getAbsRow(0).getTFD() >= 2) {
                        idmensaje = 3;
                        mensaje += "ERROR: No se puede cambiar el recibo porque ya tiene un CFDI enlazado.<br>";
                        getSesion(request).setID_Mensaje(idmensaje, mensaje);
                        irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                        return;
                    }
                    //Solicitud de envio a procesar
                    if (request.getParameter("subproceso") != null
                            && request.getParameter("subproceso").equals("ENVIAR")) {
                        // Verificacion
                        if (AgregarCabeceroRecibo(request, response) == -1) {
                            AgregarCambiarEmp(request, response);
                            return;
                        }
                        irApag("/forsetiweb/nomina/nom_nomina_dlg_emp.jsp", request, response);
                        return;
                    } else if (request.getParameter("subproceso") != null
                            && request.getParameter("subproceso").equals("AGR_PART")) {
                        if (AgregarCabeceroRecibo(request, response) == -1) {
                            if (VerificarParametrosPartida(request, response))
                                AgregarPartida(request, response);
                        }
                        irApag("/forsetiweb/nomina/nom_nomina_dlg_emp.jsp", request, response);
                        return;
                    } else if (request.getParameter("subproceso") != null
                            && request.getParameter("subproceso").equals("EDIT_PART")) {
                        if (AgregarCabeceroRecibo(request, response) == -1) {
                            if (VerificarParametrosPartida(request, response))
                                EditarPartida(request, response);
                        }
                        irApag("/forsetiweb/nomina/nom_nomina_dlg_emp.jsp", request, response);
                        return;
                    } else if (request.getParameter("subproceso") != null
                            && request.getParameter("subproceso").equals("BORR_PART")) {
                        if (AgregarCabeceroRecibo(request, response) == -1) {
                            BorrarPartida(request, response);
                        }
                        irApag("/forsetiweb/nomina/nom_nomina_dlg_emp.jsp", request, response);
                        return;
                    } else // Como el subproceso no es ENVIAR ni AGR_PART ni EDIT_PART ni BORR_PART, abre la ventana del proceso de AGREGADO para agregar `por primera vez
                    {
                        HttpSession ses = request.getSession(true);
                        JNomMovDirSes rec = (JNomMovDirSes) ses.getAttribute("nom_nomina_dlg");
                        if (rec == null) {
                            rec = new JNomMovDirSes();
                            ses.setAttribute("nom_nomina_dlg", rec);
                        } else
                            rec.resetear();

                        //Llena el empleado
                        JCalculoNominaEspSet set = new JCalculoNominaEspSet(request);
                        set.m_Where = "ID_Nomina = '" + p(request.getParameter("id")) + "' and ID_Empleado = '"
                                + p(request.getParameter("idempleado")) + "'";
                        set.Open();

                        rec.setID_Empleado(set.getAbsRow(0).getID_Empleado());
                        rec.setNombre(set.getAbsRow(0).getNombre());
                        rec.setFaltas(set.getAbsRow(0).getFaltas());
                        rec.setHE(set.getAbsRow(0).getHE());
                        rec.setHD(set.getAbsRow(0).getHD());
                        rec.setHT(set.getAbsRow(0).getHT());
                        rec.setIXA(set.getAbsRow(0).getIXA());
                        rec.setIXE(set.getAbsRow(0).getIXE());
                        rec.setIXM(set.getAbsRow(0).getIXM());
                        rec.setRecibo(set.getAbsRow(0).getRecibo());
                        rec.setDiasHorasExtras(set.getAbsRow(0).getDiasHorasExtras());

                        JCalculoNominaDetSet dset = new JCalculoNominaDetSet(request);
                        dset.m_Where = "ID_Nomina = '" + p(request.getParameter("id")) + "' and ID_Empleado = '"
                                + p(request.getParameter("idempleado")) + "'";
                        dset.Open();

                        for (int i = 0; i < dset.getNumRows(); i++) {
                            rec.agregaPartida(dset.getAbsRow(i).getID_Movimiento(),
                                    dset.getAbsRow(i).getDescripcion(), dset.getAbsRow(i).getGravado(),
                                    dset.getAbsRow(i).getExento(), dset.getAbsRow(i).getDeduccion(),
                                    dset.getAbsRow(i).getEsDeduccion());
                        }
                        getSesion(request).setID_Mensaje(idmensaje, mensaje);
                        irApag("/forsetiweb/nomina/nom_nomina_dlg_emp.jsp", request, response);
                        return;
                    }

                } else {
                    idmensaje = 1;
                    mensaje += JUtil.Msj("GLB", "VISTA", "GLB", "SELEC-PROC", 2);
                    getSesion(request).setID_Mensaje(idmensaje, mensaje);
                    irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                    return;
                }
            } else {
                idmensaje = 3;
                mensaje += JUtil.Msj("GLB", "VISTA", "GLB", "SELEC-PROC", 1);
                getSesion(request).setID_Mensaje(idmensaje, mensaje);
                irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                return;
            }

        } else if (request.getParameter("proceso").equals("BORR_EMP")) {
            // Revisa si tiene permisos
            if (!getSesion(request).getPermiso("NOM_NOMINA_CAMBIAR")) {
                idmensaje = 3;
                mensaje += MsjPermisoDenegado(request, "CEF", "NOM_NOMINA_CAMBIAR");
                getSesion(request).setID_Mensaje(idmensaje, mensaje);
                RDP("CEF", getSesion(request).getConBD(), "NA", getSesion(request).getID_Usuario(),
                        "NOM_NOMINA_CAMBIAR", "NNOM||||", mensaje);
                irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                return;
            }

            JNominasModuloSet setnom = new JNominasModuloSet(request);
            setnom.m_Where = "ID_Nomina = '" + p(request.getParameter("id")) + "'";
            setnom.Open();

            if (setnom.getAbsRow(0).getCerrado() || setnom.getAbsRow(0).getStatus().equals("C")) {
                idmensaje = 3;
                mensaje += "ERROR: No se puede borrar el recibo porque la nmina ya est protegida o est cancelada.<br>";
                getSesion(request).setID_Mensaje(idmensaje, mensaje);
                irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                return;
            }

            if (request.getParameter("idempleado") != null) {
                String[] valoresParam = request.getParameterValues("idempleado");
                if (valoresParam.length == 1) {
                    JCalculoNominaEspSet cset = new JCalculoNominaEspSet(request);
                    cset.m_Where = "ID_Nomina = '" + p(request.getParameter("id")) + "' and ID_Empleado = '"
                            + p(request.getParameter("idempleado")) + "'";
                    cset.Open();
                    if (cset.getAbsRow(0).getTFD() >= 2) {
                        idmensaje = 3;
                        mensaje += "ERROR: No se puede eliminar el recibo porque ya tiene un CFDI enlazado.<br>";
                        getSesion(request).setID_Mensaje(idmensaje, mensaje);
                        irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                        return;
                    }

                    EliminarEmp(request, response);
                    return;
                } else {
                    idmensaje = 1;
                    mensaje += JUtil.Msj("GLB", "VISTA", "GLB", "SELEC-PROC", 2);
                    getSesion(request).setID_Mensaje(idmensaje, mensaje);
                    irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                    return;
                }
            } else {
                idmensaje = 3;
                mensaje += JUtil.Msj("GLB", "VISTA", "GLB", "SELEC-PROC", 1);
                getSesion(request).setID_Mensaje(idmensaje, mensaje);
                irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                return;
            }

        } else if (request.getParameter("proceso").equals("IMPRIMIR")) {
            // Revisa si tiene permisos
            if (!getSesion(request).getPermiso("NOM_NOMINA")) {
                idmensaje = 3;
                mensaje += MsjPermisoDenegado(request, "CEF", "NOM_NOMINA");
                getSesion(request).setID_Mensaje(idmensaje, mensaje);
                RDP("CEF", getSesion(request).getConBD(), "NA", getSesion(request).getID_Usuario(),
                        "NOM_NOMINA", "NNOM||||", mensaje);
                irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                return;
            }

            if (request.getParameter("idempleado") != null) {
                String[] valoresParam = request.getParameterValues("idempleado");
                if (valoresParam.length == 1) {
                    //Solicitud de envio a procesar
                    if (request.getParameter("subproceso") != null
                            && request.getParameter("subproceso").equals("IMPRESION")) {
                        // Impresion
                        StringBuffer bsmensaje = new StringBuffer(254);
                        String SQLCab = "select * from view_nomina_recibos_impcab where ID_Nomina = "
                                + request.getParameter("id") + " and ID_Empleado = '"
                                + request.getParameter("idempleado") + "'";
                        String SQLDet = "select * from view_nomina_recibos_impdet where ID_Nomina = "
                                + request.getParameter("id") + " and ID_Empleado = '"
                                + request.getParameter("idempleado")
                                + "' order by esdeduccion asc, id_movimiento asc";

                        idmensaje = Imprimir(SQLCab, SQLDet, request.getParameter("idformato"), bsmensaje,
                                request, response);

                        if (idmensaje != -1) {
                            getSesion(request).setID_Mensaje(idmensaje, bsmensaje.toString());
                            irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                            return;
                        }

                    } else {
                        request.setAttribute("impresion", "CEFNomMovDirDlg");
                        request.setAttribute("tipo_imp", "NOM_NOMINA");
                        request.setAttribute("formato_default", setids.getAbsRow(0).getFmt_Recibo());

                        getSesion(request).setID_Mensaje(idmensaje, mensaje);
                        irApag("/forsetiweb/impresion_dlg.jsp", request, response);
                        return;
                    }

                } else {
                    idmensaje = 1;
                    mensaje += JUtil.Msj("GLB", "VISTA", "GLB", "SELEC-PROC", 2);
                    getSesion(request).setID_Mensaje(idmensaje, mensaje);
                    irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                    return;
                }
            } else {
                idmensaje = 3;
                mensaje += JUtil.Msj("GLB", "VISTA", "GLB", "SELEC-PROC", 1);
                getSesion(request).setID_Mensaje(idmensaje, mensaje);
                irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                return;
            }

        } else if (request.getParameter("proceso").equals("ENVIAR_RECIBO")) {
            // Revisa si tiene permisos
            if (!getSesion(request).getPermiso("NOM_NOMINA")) {
                idmensaje = 3;
                mensaje += MsjPermisoDenegado(request, "CEF", "NOM_NOMINA");
                getSesion(request).setID_Mensaje(idmensaje, mensaje);
                RDP("CEF", getSesion(request).getConBD(), "NA", getSesion(request).getID_Usuario(),
                        "NOM_NOMINA", "NNOM||||", mensaje);
                irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                return;
            }

            if (request.getParameter("idempleado") != null) {
                String[] valoresParam = request.getParameterValues("idempleado");
                if (valoresParam.length == 1) {
                    //Solicitud de envio a procesar
                    JCalculoNominaEspSet SetMod = new JCalculoNominaEspSet(request);
                    SetMod.m_Where = "ID_Nomina = '" + p(request.getParameter("id")) + "' and ID_Empleado = '"
                            + p(request.getParameter("idempleado")) + "'";
                    SetMod.Open();

                    if (SetMod.getAbsRow(0).getTFD() != 3) {
                        idmensaje = 1;
                        mensaje += "PRECAUCION: Este recibo no est&aacute; sellado completamente, no se puede enviar <br>";
                        getSesion(request).setID_Mensaje(idmensaje, mensaje);
                        irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                        return;
                    }

                    JMasempSet set = new JMasempSet(request);
                    set.m_Where = "ID_Empleado = '" + p(request.getParameter("idempleado")) + "'";
                    set.Open();
                    if (set.getAbsRow(0).getSMTP() == 0) // Maneja smtp manual o automtico
                    {
                        idmensaje = 1;
                        mensaje += "PRECAUCION: Este empleado no esta confgurado para recibir sus recibos por correo <br>";
                        getSesion(request).setID_Mensaje(idmensaje, mensaje);
                        irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                        return;

                    }

                    JFsiSMTPClient smtp = new JFsiSMTPClient();
                    smtp.enviarCFDIMPE(request, "NOM", request.getParameter("id"),
                            request.getParameter("idempleado"), set.getAbsRow(0).getNombre(),
                            set.getAbsRow(0).getEMail());
                    if (smtp.getStatusSMTP() == JFsiSMTPClient.ERROR) {
                        idmensaje = 3;
                        mensaje += "ERROR: " + smtp.getError();
                        getSesion(request).setID_Mensaje(idmensaje, mensaje);
                        irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                        return;
                    }

                    getSesion(request).setID_Mensaje((short) 0, "El correo se ha mandado satisfactoriamente");
                    irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                    return;

                } else {
                    idmensaje = 1;
                    mensaje += JUtil.Msj("GLB", "VISTA", "GLB", "SELEC-PROC", 2);
                    getSesion(request).setID_Mensaje(idmensaje, mensaje);
                    irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                    return;
                }
            } else {
                idmensaje = 3;
                mensaje += JUtil.Msj("GLB", "VISTA", "GLB", "SELEC-PROC", 1);
                getSesion(request).setID_Mensaje(idmensaje, mensaje);
                irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                return;
            }

        } else if (request.getParameter("proceso").equals("XML_RECIBO")) {
            // Revisa si tiene permisos
            if (!getSesion(request).getPermiso("NOM_NOMINA")) {
                idmensaje = 3;
                mensaje += MsjPermisoDenegado(request, "CEF", "NOM_NOMINA");
                getSesion(request).setID_Mensaje(idmensaje, mensaje);
                RDP("CEF", getSesion(request).getConBD(), "NA", getSesion(request).getID_Usuario(),
                        "NOM_NOMINA", "NNOM||||", mensaje);
                irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                return;
            }

            if (request.getParameter("idempleado") != null) {
                String[] valoresParam = request.getParameterValues("idempleado");
                if (valoresParam.length == 1) {
                    //Solicitud de envio a procesar
                    JCalculoNominaEspSet SetMod = new JCalculoNominaEspSet(request);
                    SetMod.m_Where = "ID_Nomina = '" + p(request.getParameter("id")) + "' and ID_Empleado = '"
                            + p(request.getParameter("idempleado")) + "'";
                    SetMod.Open();

                    if (SetMod.getAbsRow(0).getTFD() != 3 || SetMod.getAbsRow(0).getID_CFD() == 0) {
                        idmensaje = 1;
                        mensaje += "PRECAUCION: Este recibo no est&aacute; sellado completamente, no hay nada que bajar <br>";
                        getSesion(request).setID_Mensaje(idmensaje, mensaje);
                        irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                        return;
                    }

                    JCFDCompSet cfd = new JCFDCompSet(request, "NOMINA");
                    cfd.m_Where = "ID_CFD = '" + SetMod.getAbsRow(0).getID_CFD() + "'";
                    cfd.Open();

                    String nombre, destino;

                    if (cfd.getNumRows() > 0)
                        nombre = "/usr/local/forseti/emp/" + getSesion(request).getBDCompania() + "/nom/TFDs/"
                                + cfd.getAbsRow(0).getUUID() + ".xml";
                    else // Es CFDI generado internamente
                    {
                        nombre = "/usr/local/forseti/emp/" + getSesion(request).getBDCompania()
                                + "/TFDs/SIGN_NOM-" + request.getParameter("id") + "-"
                                + request.getParameter("idempleado") + ".xml";
                    }

                    destino = "NOM-" + SetMod.getAbsRow(0).getID_Nomina() + "-"
                            + SetMod.getAbsRow(0).getRecibo() + ".xml";

                    JBajarArchivo fd = new JBajarArchivo();

                    fd.doDownload(response, getServletConfig().getServletContext(), nombre, destino);

                    idmensaje = 0;
                    mensaje = "El recibo se bajo satisfactoriamente";
                    return;

                } else {
                    idmensaje = 1;
                    mensaje += JUtil.Msj("GLB", "VISTA", "GLB", "SELEC-PROC", 2);
                    getSesion(request).setID_Mensaje(idmensaje, mensaje);
                    irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                    return;
                }
            } else {
                idmensaje = 3;
                mensaje += JUtil.Msj("GLB", "VISTA", "GLB", "SELEC-PROC", 1);
                getSesion(request).setID_Mensaje(idmensaje, mensaje);
                irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                return;
            }

        } else if (request.getParameter("proceso").equals("PDF_RECIBO")) {
            // Revisa si tiene permisos
            if (!getSesion(request).getPermiso("NOM_NOMINA")) {
                idmensaje = 3;
                mensaje += MsjPermisoDenegado(request, "CEF", "NOM_NOMINA");
                getSesion(request).setID_Mensaje(idmensaje, mensaje);
                RDP("CEF", getSesion(request).getConBD(), "NA", getSesion(request).getID_Usuario(),
                        "NOM_NOMINA", "NNOM||||", mensaje);
                irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                return;
            }

            if (request.getParameter("idempleado") != null) {
                String[] valoresParam = request.getParameterValues("idempleado");
                if (valoresParam.length == 1) {
                    //Solicitud de envio a procesar
                    JCalculoNominaEspSet SetMod = new JCalculoNominaEspSet(request);
                    SetMod.m_Where = "ID_Nomina = '" + p(request.getParameter("id")) + "' and ID_Empleado = '"
                            + p(request.getParameter("idempleado")) + "'";
                    SetMod.Open();

                    if (SetMod.getAbsRow(0).getTFD() != 3 || SetMod.getAbsRow(0).getID_CFD() == 0) {
                        idmensaje = 1;
                        mensaje += "PRECAUCION: Este recibo no est&aacute; sellado completamente, no hay nada que bajar <br>";
                        getSesion(request).setID_Mensaje(idmensaje, mensaje);
                        irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                        return;
                    }

                    JCFDCompSet cfd = new JCFDCompSet(request, "NOMINA");
                    cfd.m_Where = "ID_CFD = '" + SetMod.getAbsRow(0).getID_CFD() + "'";
                    cfd.Open();

                    String nombre, destino;

                    if (cfd.getNumRows() > 0)
                        nombre = "/usr/local/forseti/emp/" + getSesion(request).getBDCompania() + "/nom/PDFs/"
                                + cfd.getAbsRow(0).getUUID() + ".pdf";
                    else
                        nombre = "/usr/local/forseti/emp/" + getSesion(request).getBDCompania() + "/PDFs/NOM-"
                                + request.getParameter("id") + "-" + request.getParameter("idempleado")
                                + ".pdf";

                    destino = "NOM-" + SetMod.getAbsRow(0).getID_Nomina() + "-"
                            + SetMod.getAbsRow(0).getRecibo() + ".pdf";

                    JBajarArchivo fd = new JBajarArchivo();

                    fd.doDownload(response, getServletConfig().getServletContext(), nombre, destino);

                    idmensaje = 0;
                    mensaje = "El recibo se bajo satisfactoriamente";
                    return;

                } else {
                    idmensaje = 1;
                    mensaje += JUtil.Msj("GLB", "VISTA", "GLB", "SELEC-PROC", 2);
                    getSesion(request).setID_Mensaje(idmensaje, mensaje);
                    irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                    return;
                }
            } else {
                idmensaje = 3;
                mensaje += JUtil.Msj("GLB", "VISTA", "GLB", "SELEC-PROC", 1);
                getSesion(request).setID_Mensaje(idmensaje, mensaje);
                irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                return;
            }

        } else {
            idmensaje = 3;
            mensaje += JUtil.Msj("GLB", "VISTA", "GLB", "SELEC-PROC", 3);
            getSesion(request).setID_Mensaje(idmensaje, mensaje);
            irApag("/forsetiweb/caja_mensajes.jsp", request, response);
            return;
        }

    } else // si no se mandan parametros, manda a error
    {
        idmensaje = 3;
        mensaje += JUtil.Msj("GLB", "VISTA", "GLB", "SELEC-PROC", 3);
        getSesion(request).setID_Mensaje(idmensaje, mensaje);
        irApag("/forsetiweb/caja_mensajes.jsp", request, response);
        return;
    }

}

From source file:com.krawler.spring.iphone.iphoneController.java

private String sendMail(HttpServletRequest request, HttpServletResponse response) throws JSONException {
    String result = null;//from ww  w  . j  av  a2  s  .  co m
    try {
        DiskFileUpload fu = new DiskFileUpload();
        java.util.List fileItems = null;
        String imageName = "";

        fileItems = fu.parseRequest(request);

        java.util.HashMap arrParam = new java.util.HashMap();
        java.util.Iterator k = null;
        for (k = fileItems.iterator(); k.hasNext();) {
            FileItem fi1 = (FileItem) k.next();
            arrParam.put(fi1.getFieldName(), fi1.getString());
        }

        String to = request.getParameter("mailto");
        String from = request.getParameter("from");
        String accountid = StringUtil.serverHTMLStripper(
                arrParam.get("from").toString().replaceAll("[^\\w|\\s|'|\\-|\\[|\\]|\\(|\\)]", "").trim());
        String subject = StringUtil.serverHTMLStripper(
                arrParam.get("subject").toString().replaceAll("[^\\w|\\s|'|\\-|\\[|\\]|\\(|\\)]", "").trim());
        String body = arrParam.get("body").toString();//StringUtil.serverHTMLStripper(arrParam.get("body").toString().replaceAll("[^\\w|\\s|'|\\-|\\[|\\]|\\(|\\)]", "").trim());

        String addressFrom1 = URLEncoder.encode(accountid, "ISO-8859-1");
        String fromAccount = URLEncoder.encode(accountid, "ISO-8859-1");
        String sendDescription = URLEncoder.encode(body, "ISO-8859-1");
        String sendSubject = URLEncoder.encode(subject, "ISO-8859-1");
        String sendTo = URLEncoder.encode(to, "ISO-8859-1");
        String subject1 = URLEncoder.encode(subject, "ISO-8859-1");

        String Url = "action=EmailUIAjax&addressFrom1=" + addressFrom1 + "&addressTo1=" + sendTo
                + "&composeType=" + "&emailUIAction=sendEmail&fromAccount=" + fromAccount
                + "&krawler_body_only=true"
                + "&module=Emails&saveToKrawler=1&sendCharset=ISO-8859-1&sendDescription=" + sendDescription
                + "" + "&sendSubject=" + sendSubject + "&sendTo=" + sendTo + "&setEditor=1&subject1=" + subject1
                + "&to_pdf=true";

        RequestDispatcher dispatcher = request
                .getRequestDispatcher("/Common/MailIntegration/mailIntegrate.do?" + Url);
        dispatcher.forward(request, response);

    } catch (Exception ex) {
        logger.warn(ex.getMessage(), ex);
        result = "{\"success\":\"false\",\"error\":\"Error occured while sending mail(" + ex.toString()
                + ")\",\"data\":[]}";
    }
    return result;
}

From source file:forseti.compras.JCompFactDlg.java

@SuppressWarnings({ "unchecked", "rawtypes" })
public void doPost(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
    //request.setAttribute("fsi_modulo",request.getRequestURI());
    super.doPost(request, response);

    String comp_fact_dlg = "";
    request.setAttribute("comp_fact_dlg", comp_fact_dlg);

    String mensaje = "";
    short idmensaje = -1;
    String usuario = getSesion(request).getID_Usuario();

    if (request.getContentType() != null
            && request.getContentType().toLowerCase().indexOf("multipart/form-data") > -1) {
        if (!getSesion(request).getRegistrado()) {
            irApag("/forsetiweb/errorAtributos.jsp", request, response);
            return;
        } else {/*from www.  j  a v a2s. c om*/
            try {
                HttpSession ses = request.getSession(true);
                JFacturasXML compfactxml = (JFacturasXML) ses.getAttribute("comp_fact_xml");
                Vector archivos = new Vector();
                DiskFileUpload fu = new DiskFileUpload();
                List items = fu.parseRequest(request);
                Iterator iter = items.iterator();
                while (iter.hasNext()) {
                    FileItem item = (FileItem) iter.next();
                    if (item.isFormField())
                        compfactxml.getParametros().put(item.getFieldName(), item.getString());
                    else
                        archivos.addElement(item);
                }

                // revisa por las entidades
                JComprasEntidadesSetIdsV2 setids;
                String idmod = compfactxml.getParametros().getProperty("idmod"),
                        idmod4 = compfactxml.getParametros().getProperty("idmod4"),
                        moddes = compfactxml.getParametros().getProperty("moddes");

                request.setAttribute("idmod", idmod);
                request.setAttribute("moddes", moddes);

                setids = new JComprasEntidadesSetIdsV2(request, usuario,
                        getSesion(request).getSesion(idmod).getEspecial(), (idmod.equals("COMP_GAS") ? 2 : 0));
                setids.Open();

                if (setids.getNumRows() < 1) {
                    idmensaje = 3;
                    mensaje += MsjPermisoDenegado(request, "CEF", idmod);
                    getSesion(request).setID_Mensaje(idmensaje, mensaje);
                    RDP("CEF", getSesion(request).getConBD(), "NA", getSesion(request).getID_Usuario(), idmod,
                            idmod4 + "||||", mensaje);
                    irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                    return;
                }

                if (!idmod.equals("COMP_DEV")) // Si no es devolucion
                {
                    if (!getSesion(request).getPermiso(idmod + "_AGREGAR")) {
                        idmensaje = 3;
                        mensaje += MsjPermisoDenegado(request, "CEF", idmod + "_AGREGAR");
                        getSesion(request).setID_Mensaje(idmensaje, mensaje);
                        RDP("CEF", getSesion(request).getConBD(), "NA", getSesion(request).getID_Usuario(),
                                idmod + "_AGREGAR", idmod4 + "||||", mensaje);
                        irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                        return;
                    }
                } else {
                    if (!getSesion(request).getPermiso("COMP_DEV_DEVOLVER")
                            && !getSesion(request).getPermiso("COMP_DEV_REBAJAR")) {
                        idmensaje = 3;
                        mensaje += MsjPermisoDenegado(request, "CEF", "COMP_DEV_DEVOLVER") + " / "
                                + MsjPermisoDenegado(request, "CEF", "COMP_DEV_REBAJAR");
                        getSesion(request).setID_Mensaje(idmensaje, mensaje);
                        RDP("CEF", getSesion(request).getConBD(), "NA", getSesion(request).getID_Usuario(),
                                "COMP_DEV_DEVOLVER", "CDEV||||", mensaje);
                        irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                        return;
                    }
                }
                System.out.println("PROPIEDAD: " + compfactxml.getParametros().getProperty("proceso"));
                if (compfactxml.getParametros().getProperty("proceso").equals("CARGAR_OTROS"))
                    SubirArchivosOTROS(request, response, compfactxml, archivos);
                else
                    SubirArchivosCFD(request, response, compfactxml, archivos);
                return;
            } catch (FileUploadException e) {
                e.printStackTrace();
                return;
            } catch (Exception e) {
                e.printStackTrace();
                return;
            }
        }
    }

    if (request.getParameter("proceso") != null && !request.getParameter("proceso").equals("")) {
        // revisa por las entidades
        JComprasEntidadesSetIdsV2 setids;
        String idmod, idmod4, moddes;

        if (request.getParameter("tipomov").equals("FACTURAS")) {
            idmod = "COMP_FAC";
            idmod4 = "CFAC";
            moddes = "FACTURAS";
        } else if (request.getParameter("tipomov").equals("ORDENES")) {
            idmod = "COMP_ORD";
            idmod4 = "CORD";
            moddes = "ORDENES";
        } else if (request.getParameter("tipomov").equals("RECEPCIONES")) {
            idmod = "COMP_REC";
            idmod4 = "CREC";
            moddes = "RECEPCIONES";
        } else if (request.getParameter("tipomov").equals("GASTOS")) {
            idmod = "COMP_GAS";
            idmod4 = "CGAS";
            moddes = "GASTOS";
        } else {
            idmod = "COMP_DEV";
            idmod4 = "CDEV";
            moddes = "DEVOLUCIONES";
        }
        request.setAttribute("idmod", idmod);
        request.setAttribute("moddes", moddes);
        request.setAttribute("fact_xml", "COMPRAS");

        setids = new JComprasEntidadesSetIdsV2(request, usuario,
                getSesion(request).getSesion(idmod).getEspecial(), (idmod.equals("COMP_GAS") ? 2 : 0));
        setids.Open();

        if (setids.getNumRows() < 1) {
            idmensaje = 3;
            mensaje += MsjPermisoDenegado(request, "CEF", idmod);
            getSesion(request).setID_Mensaje(idmensaje, mensaje);
            RDP("CEF", getSesion(request).getConBD(), "NA", getSesion(request).getID_Usuario(), idmod,
                    idmod4 + "||||", mensaje);
            irApag("/forsetiweb/caja_mensajes.jsp", request, response);
            return;
        }

        // Revisa por intento de intrusion (Salto de permiso de entidad)
        if (!request.getParameter("proceso").equals("AGREGAR_COMPRA") && request.getParameter("ID") != null) {
            boolean intrusion = false;
            if (moddes.equals("FACTURAS")) {
                JComprasFactSet set = new JComprasFactSet(request);
                set.m_Where = "ID_Entidad = '" + setids.getAbsRow(0).getID_Entidad() + "' and ID_Factura = '"
                        + p(request.getParameter("ID")) + "'";
                set.Open();
                if (set.getNumRows() < 1)
                    intrusion = true;
            } else if (moddes.equals("RECEPCIONES")) {
                JComprasRecepSetV2 set = new JComprasRecepSetV2(request);
                set.m_Where = "ID_Entidad = '" + setids.getAbsRow(0).getID_Entidad() + "' and ID_Recepcion = '"
                        + p(request.getParameter("ID")) + "'";
                set.Open();
                if (set.getNumRows() < 1)
                    intrusion = true;
            } else if (moddes.equals("ORDENES")) {
                JComprasOrdenesSet set = new JComprasOrdenesSet(request);
                set.m_Where = "ID_Entidad = '" + setids.getAbsRow(0).getID_Entidad() + "' and ID_Orden = '"
                        + p(request.getParameter("ID")) + "'";
                set.Open();
                if (set.getNumRows() < 1)
                    intrusion = true;
            } else if (moddes.equals("GASTOS")) {
                JComprasGastosSet set = new JComprasGastosSet(request);
                set.m_Where = "ID_Entidad = '" + setids.getAbsRow(0).getID_Entidad() + "' and ID_Gasto = '"
                        + p(request.getParameter("ID")) + "'";
                set.Open();
                if (set.getNumRows() < 1)
                    intrusion = true;
            } else {
                JComprasDevolucionesSet set = new JComprasDevolucionesSet(request);
                set.m_Where = "ID_Entidad = '" + setids.getAbsRow(0).getID_Entidad() + "' and ID_Devolucion = '"
                        + p(request.getParameter("ID")) + "'";
                set.Open();
                if (set.getNumRows() < 1)
                    intrusion = true;
            }

            if (intrusion) {
                idmensaje = 3;
                mensaje += MsjPermisoDenegado(request, "CEF", idmod);
                getSesion(request).setID_Mensaje(idmensaje, mensaje);
                RDP("CEF", getSesion(request).getConBD(), "AL", getSesion(request).getID_Usuario(), idmod,
                        idmod4 + "|" + request.getParameter("ID") + "|" + setids.getAbsRow(0).getID_Entidad()
                                + "||",
                        mensaje);
                irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                return;
            }
        }

        if (request.getParameter("proceso").equals("ENLAZAR_COMPRA")) {
            if (moddes.equals("FACTURAS") || moddes.equals("RECEPCIONES") || moddes.equals("DEVOLUCIONES")
                    || moddes.equals("GASTOS")) {
                // Revisa si tiene permisos
                if (!idmod.equals("COMP_DEV")) // Si no es devolucion
                {
                    if (!getSesion(request).getPermiso(idmod + "_AGREGAR")) {
                        idmensaje = 3;
                        mensaje += MsjPermisoDenegado(request, "CEF", idmod + "_AGREGAR");
                        getSesion(request).setID_Mensaje(idmensaje, mensaje);
                        RDP("CEF", getSesion(request).getConBD(), "NA", getSesion(request).getID_Usuario(),
                                idmod + "_AGREGAR", idmod4 + "||||", mensaje);
                        irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                        return;
                    }
                } else {
                    if (!getSesion(request).getPermiso("COMP_DEV_DEVOLVER")
                            && !getSesion(request).getPermiso("COMP_DEV_REBAJAR")) {
                        idmensaje = 3;
                        mensaje += MsjPermisoDenegado(request, "CEF", "COMP_DEV_DEVOLVER") + " / "
                                + MsjPermisoDenegado(request, "CEF", "COMP_DEV_REBAJAR");
                        getSesion(request).setID_Mensaje(idmensaje, mensaje);
                        RDP("CEF", getSesion(request).getConBD(), "NA", getSesion(request).getID_Usuario(),
                                "COMP_DEV_DEVOLVER", "CDEV||||", mensaje);
                        irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                        return;
                    }
                }

                if (setids.getAbsRow(0).getFija()) {
                    idmensaje = 3;
                    mensaje += "ERROR: No se puede subir ningun CFDI, CBB o Factura Extranjera porque esta entidad de compra o gasto est establecida como Fija<br>";
                    getSesion(request).setID_Mensaje(idmensaje, mensaje);
                    irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                    return;
                }

                if (request.getParameter("subproceso") == null) // Como el subproceso no es ENVIAR ni ENLAZAR,
                {
                    getSesion(request).setID_Mensaje(idmensaje, mensaje);
                    irApag("/forsetiweb/fact_dlg_xmls.jsp", request, response);
                    return;
                } else {
                    if (request.getParameter("subproceso").equals("ENLAZAR")) {
                        // Se supone que la compra aun no estar ligada a una compra existente...
                        ///////////////////////////////////////////////////////////////////////////
                        String[] valoresParamUUID = request.getParameterValues("uuid");
                        String[] valoresParamCBBEXT = request.getParameterValues("cbbext");
                        String tipoEnlace = "";
                        boolean EnlazarCompraExistente = (request.getParameter("ID") == null ? false : true);
                        if (valoresParamUUID == null && valoresParamCBBEXT == null) {
                            idmensaje = 3;
                            mensaje += "ERROR: Se deben seleccionar, ya sea los CFDIs o los CBBs o Facturas Extranjeras que se desean enlazar.<br>";
                            getSesion(request).setID_Mensaje(idmensaje, mensaje);
                            irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                            return;
                        }
                        //Si existen ambos, UUIDs y CBB o EXT, marcar error 
                        if (valoresParamUUID != null && valoresParamCBBEXT != null
                                && valoresParamUUID.length > 0 && valoresParamCBBEXT.length > 0) {
                            idmensaje = 3;
                            mensaje += "ERROR: No se pueden enlazar ambos tipos de documento, CFDIs mas CBB o Facturas Extranjeras, a una misma compra.<br>";
                            getSesion(request).setID_Mensaje(idmensaje, mensaje);
                            irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                            return;
                        }
                        if (valoresParamCBBEXT != null && valoresParamCBBEXT.length > 0
                                && !EnlazarCompraExistente) {
                            idmensaje = 3;
                            mensaje += "ERROR: Los documentos CBB o Facturas extranjeras, deben enlazarse forzosamente a una compra existente.<br>";
                            getSesion(request).setID_Mensaje(idmensaje, mensaje);
                            irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                            return;
                        }
                        float TotalUUIDs = 0F;
                        String UUIDs = "";
                        float TC = 1.0F, TCAnt = 1.0F;
                        String RFC_Emisor = "";
                        HttpSession ses = request.getSession(true);
                        JCompFactSes rec = (JCompFactSes) ses.getAttribute("comp_fact_dlg");
                        if (rec == null) {
                            rec = new JCompFactSes(request, getSesion(request).getSesion(idmod).getEspecial(),
                                    usuario, moddes);
                            ses.setAttribute("comp_fact_dlg", rec);
                        } else
                            rec.resetear(request, getSesion(request).getSesion(idmod).getEspecial(), usuario,
                                    moddes);

                        rec.setReferencia("s/r");
                        if (valoresParamUUID != null) {
                            tipoEnlace = "UUID";
                            for (int u = 0; u < valoresParamUUID.length; u++) {
                                ///////////////////////////// VP INI /////////////////////////////////////////////
                                JCFDCompSet comprobante = new JCFDCompSet(request, "COMPRAS");
                                comprobante.m_Where = "UUID = '" + p(valoresParamUUID[u]) + "'";
                                comprobante.Open();
                                //System.out.println("NUM: " + valoresParamUUID.length + " UUID: " + valoresParamUUID[u]);
                                if (comprobante.getNumRows() < 1
                                        || !comprobante.getAbsRow(0).getFSI_Tipo().equals("ENT")
                                        || comprobante.getAbsRow(0).getFSI_ID() != Integer
                                                .parseInt(getSesion(request).getSesion(idmod).getEspecial())) {
                                    idmensaje = 3;
                                    mensaje += "ERROR: No se ha cargado el CFDI de la compra, este ya esta ligado a otra compra, o el CFDI se cargo en otra entidad<br>";
                                    getSesion(request).setID_Mensaje(idmensaje, mensaje);
                                    irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                                    return;
                                }

                                JFacturasXML compfactxml = new JFacturasXML();
                                StringBuffer sb_mensaje = new StringBuffer();
                                if (!JForsetiCFD.CargarDocumentoCFDI(request, compfactxml, sb_mensaje,
                                        valoresParamUUID[u]/*request.getParameter("uuid")*/, "E")) {
                                    idmensaje = 3;
                                    mensaje += sb_mensaje.toString();
                                    getSesion(request).setID_Mensaje(idmensaje, mensaje);
                                    irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                                    return;
                                }

                                if ((compfactxml.getComprobante().getProperty("tipoDeComprobante")
                                        .equals("ingreso") && moddes.equals("DEVOLUCIONES"))
                                        || (compfactxml.getComprobante().getProperty("tipoDeComprobante")
                                                .equals("egreso") && !moddes.equals("DEVOLUCIONES"))
                                        || compfactxml.getComprobante().getProperty("tipoDeComprobante")
                                                .equals("traslado")) {
                                    idmensaje = 3;
                                    mensaje += "ERROR: El tipo de comprobante fiscal digital CFDI, No corresponde con el tipo de documento a enlazar.<br>";
                                    getSesion(request).setID_Mensaje(idmensaje, mensaje);
                                    irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                                    return;
                                }
                                //Verifica que el RFC del Receptor sea igual al RFC registrado, o que sea rfc generico
                                JBDSSet set = new JBDSSet(request);
                                set.ConCat(true);
                                set.m_Where = "Nombre = 'FSIBD_" + p(getSesion(request).getBDCompania()) + "'";
                                set.Open();
                                if (!compfactxml.getRFC_Receptor()
                                        .equalsIgnoreCase(set.getAbsRow(0).getRFC())) {
                                    idmensaje = 3;
                                    mensaje = "ERROR: El RFC del receptor en el XML no pertenece a la compaia";
                                    getSesion(request).setID_Mensaje(idmensaje, mensaje.toString());
                                    irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                                    return;
                                }

                                RFC_Emisor = compfactxml.getRFC_Emisor();

                                //Verifica los tipos de cambio, Si son mas de un CFDI, no deben tener distintos tipos de cambio
                                if (u == 0) {
                                    try {
                                        TC = Float.parseFloat(
                                                compfactxml.getComprobante().getProperty("TipoCambio"));
                                    } catch (NumberFormatException e) {
                                        TC = 1.0F;
                                    }
                                    try {
                                        TCAnt = Float.parseFloat(
                                                compfactxml.getComprobante().getProperty("TipoCambio"));
                                    } catch (NumberFormatException e) {
                                        TCAnt = 1.0F;
                                    }
                                } else {
                                    try {
                                        TC = Float.parseFloat(
                                                compfactxml.getComprobante().getProperty("TipoCambio"));
                                    } catch (NumberFormatException e) {
                                        TC = 1.0F;
                                    }
                                }
                                if (TC != TCAnt) {
                                    idmensaje = 3;
                                    mensaje = "ERROR: En mltiples enlaces, los tipos de cambio deben coincidir. Los gastos tienen distintos tipos de cambio";
                                    getSesion(request).setID_Mensaje(idmensaje, mensaje.toString());
                                    irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                                    return;
                                }

                                if (request.getParameter("ID") == null) // Significa que debe agregar una nueva compra 
                                {
                                    if (moddes.equals("DEVOLUCIONES") || moddes.equals("ORDENES")) {
                                        idmensaje = 1;
                                        mensaje = "PRECAUCION: Solo se pueden enlazar devoluciones previamente generadas desde compras. Selecciona la devolucin e intenta enlazar de nuevo.";
                                        getSesion(request).setID_Mensaje(idmensaje, mensaje.toString());
                                        irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                                        return;
                                    }

                                    if (valoresParamUUID.length > 1 && !moddes.equals("GASTOS")) {
                                        idmensaje = 1;
                                        mensaje = "PRECAUCION: Solo se pueden enlazar multiples CFDI a un gasto, y no, a una compra";
                                        getSesion(request).setID_Mensaje(idmensaje, mensaje.toString());
                                        irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                                        return;
                                    }

                                    float descuento = Float
                                            .parseFloat(compfactxml.getComprobante().getProperty("descuento"));
                                    if (descuento != 0.0) {
                                        idmensaje = 1;
                                        mensaje = "PRECAUCION: Por el momento, la carga de compras no soportan descuentos implicitos porque en el CFDI no se especifica a que producto(s) o servicio(s) aplica cada descuento, lo que hace imposible determinar un costo verdadero.";
                                        getSesion(request).setID_Mensaje(idmensaje, mensaje.toString());
                                        irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                                        return;
                                    }

                                    rec.agregaCFDI(compfactxml);

                                    if (valoresParamUUID.length == 1) // es un solo CFDI (Siempre en el caso de Compras y Recepciones... y algunas veces en gastos)
                                    {
                                        float tc, iva;
                                        int idmon;
                                        Date fecha = JUtil.estFechaCFDI(
                                                compfactxml.getComprobante().getProperty("fecha"));
                                        rec.setFecha(fecha);
                                        try {
                                            tc = Float.parseFloat(
                                                    compfactxml.getComprobante().getProperty("TipoCambio"));
                                        } catch (NumberFormatException e) {
                                            tc = 1.0F;
                                        }
                                        rec.setTC(tc);
                                        idmon = ((tc == 1) ? 1 : 2); //cambiar por 2 cuando se inserte moneda de dolares automaticamente al instalar empresa... Para ya distribuir
                                        rec.setID_Moneda((byte) idmon);
                                        rec.setTotal(Float
                                                .parseFloat(compfactxml.getComprobante().getProperty("total")));
                                        try {
                                            iva = Float.parseFloat(compfactxml.getImpuestos()
                                                    .getProperty("totalImpuestosTrasladados"));
                                        } catch (NumberFormatException e) {
                                            iva = 0.0F;
                                        }
                                        rec.setIVA(iva);
                                        rec.setSubTotal(Float.parseFloat(
                                                compfactxml.getComprobante().getProperty("subTotal")));
                                        rec.setDescuento(descuento);
                                        rec.setImporte(rec.getSubTotal() - descuento);
                                        rec.setReferencia("s/r");
                                        rec.setFechaEntrega(fecha);
                                        JPublicContMonedasSetV2 setMon = new JPublicContMonedasSetV2(request);
                                        setMon.m_Where = "Clave = '" + idmon + "'";
                                        setMon.Open();
                                        rec.setMoneda(setMon.getAbsRow(0).getMoneda());
                                        rec.setObs("Carga desde Factura Electrnica: "
                                                + compfactxml.getTFD().getProperty("UUID"));

                                        JProveeProveeMasSetV2 setpro = new JProveeProveeMasSetV2(request);
                                        setpro.m_Where = "ID_Tipo = 'PR' and ID_EntidadCompra = '"
                                                + getSesion(request).getSesion(idmod).getEspecial()
                                                + "' and RFC ~~* '" + p(compfactxml.getRFC_Emisor()) + "'";
                                        setpro.Open();

                                        if (setpro.getNumRows() > 0) {
                                            JProveeProveeSetV2 setpro2 = new JProveeProveeSetV2(request);
                                            setpro2.m_Where = "ID_Tipo = 'PR' and Clave = '"
                                                    + setpro.getAbsRow(0).getID_Clave() + "'";
                                            setpro2.Open();

                                            rec.setClave(setpro.getAbsRow(0).getID_Clave());
                                            rec.setNombre(setpro2.getAbsRow(0).getNombre());
                                            rec.setRFC(compfactxml.getRFC_Emisor());
                                            rec.setNumero(setpro2.getAbsRow(0).getNumero());
                                            rec.setColonia(setpro.getAbsRow(0).getColonia());
                                            rec.setCP(setpro.getAbsRow(0).getCP());
                                            rec.setDireccion(setpro.getAbsRow(0).getDireccion());
                                            rec.setPoblacion(setpro.getAbsRow(0).getPoblacion());
                                            rec.setTels(setpro2.getAbsRow(0).getTel());
                                        }
                                    }

                                    for (int i = 0; i < compfactxml.getConceptos().size(); i++) {
                                        Properties concepto = (Properties) compfactxml.getConceptos()
                                                .elementAt(i);
                                        float cantidad = Float.parseFloat(concepto.getProperty("cantidad"));
                                        float precio = Float.parseFloat(concepto.getProperty("valorUnitario"));
                                        String unidad = concepto.getProperty("unidad");
                                        String idprod = "";
                                        String descripcion = concepto.getProperty("descripcion");
                                        String obs = concepto.getProperty("descripcion");
                                        String tipo = (!moddes.equals("GASTOS") ? "P" : "G");
                                        float importe = Float.parseFloat(concepto.getProperty("importe"));
                                        float ivapor = 0.00F, iepspor = 0.00F, ivaretpor = 0.00F,
                                                isrretpor = 0.00F, ivaimp = 0.00F, iepsimp = 0.00F,
                                                ivaretimp = 0.00F, isrretimp = 0.00F;
                                        float totalPart = importe;
                                        // Ahora verifica la existencia del producto en InvServProveeCodigos para la asociacin
                                        JInvsServProveeCodigosSet pcod = new JInvsServProveeCodigosSet(request);
                                        pcod.m_Where = "ID_RFC = '" + p(rec.getRFC())
                                                + "' and ID_Descripcion = '"
                                                + p(concepto.getProperty("descripcion")) + "' and ID_Moneda = '"
                                                + rec.getID_Moneda() + "'";
                                        //System.out.println(pcod.m_Where);
                                        pcod.Open();
                                        if (pcod.getNumRows() > 0) {
                                            JPublicInvServInvCatalogSetV2 cat = new JPublicInvServInvCatalogSetV2(
                                                    request);
                                            if (!moddes.equals("GASTOS"))
                                                cat.m_Where = "Clave = '" + p(pcod.getAbsRow(0).getID_Prod())
                                                        + "' and ID_Tipo = 'P' and SeProduce = '0' and Status = 'V'";
                                            else
                                                cat.m_Where = "Clave = '" + p(pcod.getAbsRow(0).getID_Prod())
                                                        + "' and ID_Tipo = 'G' and Status = 'V'";

                                            //System.out.println(cat.getSQL());
                                            cat.Open();
                                            if (cat.getNumRows() > 0) {
                                                idprod = cat.getAbsRow(0).getClave();
                                                descripcion = cat.getAbsRow(0).getDescripcion();
                                                tipo = cat.getAbsRow(0).getID_Tipo();
                                                //Aqui inicia los impuestos segun lo establecido en la entidad de compra y el catlogo
                                                ivapor = cat.getAbsRow(0).getIVA() ? rec.getIVAPorcentual()
                                                        : 0.0F;
                                                iepspor = cat.getAbsRow(0).getImpIEPS();
                                                ivaretpor = cat.getAbsRow(0).getImpIVARet();
                                                isrretpor = cat.getAbsRow(0).getImpISRRet();
                                                ivaimp = (ivapor != 0.0)
                                                        ? (((importe - descuento) * ivapor) / 100.0F)
                                                        : 0.0F;
                                                iepsimp = (iepspor != 0.0)
                                                        ? (((importe - descuento) * iepspor) / 100.0F)
                                                        : 0.0F;
                                                ivaretimp = (ivaretpor != 0.0)
                                                        ? (((importe - descuento) * ivaretpor) / 100.0F)
                                                        : 0.0F;
                                                isrretimp = (isrretpor != 0.0)
                                                        ? (((importe - descuento) * isrretpor) / 100.0F)
                                                        : 0.0F;

                                            }
                                        }
                                        //System.out.println(descripcion + " " + ivapor + " " + ivaimp + " " + totalPart);
                                        rec.agregaPartida(cantidad, unidad, idprod, idprod, descripcion, precio,
                                                importe, 0.00F, ivapor, iepspor, ivaretpor, isrretpor, 0.00F,
                                                ivaimp, iepsimp, ivaretimp, isrretimp, totalPart, obs, tipo);
                                    }
                                    UUIDs += compfactxml.getTFD().getProperty("UUID");
                                    TotalUUIDs += JUtil.redondear(
                                            Float.parseFloat(compfactxml.getComprobante().getProperty("total")),
                                            2);
                                } ///////////////////////////////////////////////////////////////////////////////////
                                else // Significa que debe Enlazar a una compra existente
                                { //////////////////////////////////////////////////////////////////////////////////
                                    UUIDs += compfactxml.getTFD().getProperty("UUID");
                                    TotalUUIDs += JUtil.redondear(
                                            Float.parseFloat(compfactxml.getComprobante().getProperty("total")),
                                            2);
                                }
                                /////////////////////////////////////// VP END ///////////////////////////////////////////
                            }
                        } else if (valoresParamCBBEXT != null) {
                            tipoEnlace = "CBBEXT";
                            for (int u = 0; u < valoresParamCBBEXT.length; u++) {
                                ///////////////////////////// VP INI /////////////////////////////////////////////
                                JCFDCompOtrSet compotr = new JCFDCompOtrSet(request);
                                compotr.m_Where = "ID_CFD = '" + p(valoresParamCBBEXT[u].substring(7)) + "'";
                                compotr.Open();
                                //System.out.println("NUM: " + valoresParamUUID.length + " UUID: " + valoresParamUUID[u]);
                                if (compotr.getNumRows() < 1
                                        || !compotr.getAbsRow(0).getFSI_Tipo().equals("ENT")
                                        || compotr.getAbsRow(0).getFSI_ID() != Integer
                                                .parseInt(getSesion(request).getSesion(idmod).getEspecial())) {
                                    idmensaje = 3;
                                    mensaje += "ERROR: No se ha cargado el CBB o Factura extranjera de la compra, esta ya esta ligada a otra compra, o el CBB o Factura extranjera se cargo en otra entidad<br>";
                                    getSesion(request).setID_Mensaje(idmensaje, mensaje);
                                    irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                                    return;
                                }

                                //Verifica los tipos de cambio, Si son mas de un CBB o EXT, no deben tener distintos tipos de cambio
                                if (u == 0) {
                                    try {
                                        TC = compotr.getAbsRow(0).getTC();
                                    } catch (NumberFormatException e) {
                                        TC = 1.0F;
                                    }
                                    try {
                                        TCAnt = compotr.getAbsRow(0).getTC();
                                    } catch (NumberFormatException e) {
                                        TCAnt = 1.0F;
                                    }
                                } else {
                                    try {
                                        TC = compotr.getAbsRow(0).getTC();
                                    } catch (NumberFormatException e) {
                                        TC = 1.0F;
                                    }
                                }
                                if (TC != TCAnt) {
                                    idmensaje = 3;
                                    mensaje = "ERROR: En mltiples enlaces, los tipos de cambio deben coincidir. Los gastos tienen distintos tipos de cambio";
                                    getSesion(request).setID_Mensaje(idmensaje, mensaje.toString());
                                    irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                                    return;
                                }

                                UUIDs += compotr.getAbsRow(0).getUUID();
                                TotalUUIDs += JUtil.redondear(compotr.getAbsRow(0).getTotal(), 2);
                            }
                        }

                        if (!EnlazarCompraExistente) {
                            StringBuffer sb_mensaje = new StringBuffer();
                            rec.setUUID(UUIDs);
                            rec.setTotalUUIDs(TotalUUIDs);
                            idmensaje = rec.establecerConcordancia(request, sb_mensaje);
                            rec.establecerResultados();
                            if ((rec.getTotal() - rec.getTotalUUIDs()) > 0.1
                                    || (rec.getTotal() - rec.getTotalUUIDs()) < -0.1) {
                                idmensaje = 3;
                                sb_mensaje.append(
                                        "ERROR: El total en el, o los CFDIs no corresponden al Total calculado en el registro a partir de estos registros. No se puede agregar. DOC: "
                                                + rec.getTotal() + " XML, CBB o EXT: " + rec.getTotalUUIDs());
                            }
                            getSesion(request).setID_Mensaje(idmensaje, sb_mensaje.toString());
                            irApag("/forsetiweb/compras/comp_fact_dlg.jsp", request, response);
                            return;
                        } else {
                            String[] valoresParam = request.getParameterValues("ID");
                            if (valoresParam.length == 1) {
                                if (moddes.equals("RECEPCIONES")) {
                                    JComprasRecepSetV2 SetMod = new JComprasRecepSetV2(request);
                                    SetMod.m_Where = "ID_Recepcion = '" + p(request.getParameter("ID")) + "'";
                                    SetMod.Open();

                                    if (SetMod.getAbsRow(0).getStatus().equals("C")) {
                                        idmensaje = 1;
                                        mensaje += "PRECAUCION: Esta recepcion ya esta cancelada, no se puede enlazar el CFDI, CBB o EXT<br>";
                                        getSesion(request).setID_Mensaje(idmensaje, mensaje);
                                        irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                                        return;
                                    }

                                    if (SetMod.getAbsRow(0).getStatus().equals("F")
                                            || SetMod.getAbsRow(0).getStatus().equals("N")) {
                                        idmensaje = 1;
                                        mensaje += "PRECAUCION: Esta recepcion ya tiene una compra asociada, no se puede enlazar el CFDI, CBB o EXT. Debes enlazarlo a la compra<br>";
                                        getSesion(request).setID_Mensaje(idmensaje, mensaje);
                                        irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                                        return;
                                    }

                                    if (SetMod.getAbsRow(0).getID_CFD() != 0
                                            || SetMod.getAbsRow(0).getTFD() > 1) {
                                        idmensaje = 1;
                                        mensaje += "PRECAUCION: Este documento ya tiene CFDIs, CBBs o EXTs asociados. No puedes asociar al mismo documento<br>";
                                        getSesion(request).setID_Mensaje(idmensaje, mensaje);
                                        irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                                        return;
                                    }

                                    if (JUtil.redondear(SetMod.getAbsRow(0).getTotal(), 1) != JUtil
                                            .redondear(TotalUUIDs, 1)) {
                                        idmensaje = 3;
                                        mensaje = "ERROR: El total en el, o los CFDIs, CBBs o EXTs no corresponden al Total del registro. No se puede enlazar. DOC: "
                                                + JUtil.redondear(SetMod.getAbsRow(0).getTotal(), 2) + " XML: "
                                                + JUtil.redondear(TotalUUIDs, 2);
                                        getSesion(request).setID_Mensaje(idmensaje, mensaje.toString());
                                        irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                                        return;
                                    }

                                    if (SetMod.getAbsRow(0).getID_Proveedor() != 0 && tipoEnlace != "CBBEXT") {
                                        JProveeProveeMasSetV2 setpro = new JProveeProveeMasSetV2(request);
                                        setpro.m_Where = "ID_Tipo = 'PR' and ID_EntidadCompra = '"
                                                + getSesion(request).getSesion(idmod).getEspecial()
                                                + "' and ID_Clave = '" + SetMod.getAbsRow(0).getID_Proveedor()
                                                + "'";
                                        setpro.Open();

                                        if (!setpro.getAbsRow(0).getRFC().equalsIgnoreCase(RFC_Emisor)) {
                                            idmensaje = 3;
                                            mensaje = "ERROR: El RFC del proveedor no corresponde al RFC del emisor en el CFDI. No se puede enlazar. DOC: "
                                                    + setpro.getAbsRow(0).getRFC() + " XML: " + RFC_Emisor;
                                            getSesion(request).setID_Mensaje(idmensaje, mensaje.toString());
                                            irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                                            return;
                                        }
                                    }
                                } else if (moddes.equals("FACTURAS")) {
                                    JComprasFactSet SetMod = new JComprasFactSet(request);
                                    SetMod.m_Where = "ID_Factura = '" + p(request.getParameter("ID")) + "'";
                                    SetMod.Open();

                                    if (SetMod.getAbsRow(0).getStatus().equals("C")) {
                                        idmensaje = 1;
                                        mensaje += "PRECAUCION: Esta compra ya esta cancelada, no se puede enlazar el CFDI, CBB o EXT<br>";
                                        getSesion(request).setID_Mensaje(idmensaje, mensaje);
                                        irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                                        return;
                                    }

                                    if (SetMod.getAbsRow(0).getID_CFD() != 0
                                            || SetMod.getAbsRow(0).getTFD() > 1) {
                                        idmensaje = 1;
                                        mensaje += "PRECAUCION: Este documento ya tiene CFDIs, CBBs o EXTs asociados. No puedes asociar al mismo documento<br>";
                                        getSesion(request).setID_Mensaje(idmensaje, mensaje);
                                        irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                                        return;
                                    }

                                    if (JUtil.redondear(SetMod.getAbsRow(0).getTotal(), 1) != JUtil
                                            .redondear(TotalUUIDs, 1)) {
                                        idmensaje = 3;
                                        mensaje = "ERROR: El total en el, o los CFDIs, CBBs o EXTs no corresponden al Total del registro. No se puede enlazar. DOC: "
                                                + JUtil.redondear(SetMod.getAbsRow(0).getTotal(), 2) + " CE: "
                                                + JUtil.redondear(TotalUUIDs, 2);
                                        getSesion(request).setID_Mensaje(idmensaje, mensaje.toString());
                                        irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                                        return;
                                    }

                                    if (SetMod.getAbsRow(0).getID_Proveedor() != 0 && tipoEnlace != "CBBEXT") {
                                        JProveeProveeMasSetV2 setpro = new JProveeProveeMasSetV2(request);
                                        setpro.m_Where = "ID_Tipo = 'PR' and ID_EntidadCompra = '"
                                                + getSesion(request).getSesion(idmod).getEspecial()
                                                + "' and ID_Clave = '" + SetMod.getAbsRow(0).getID_Proveedor()
                                                + "'";
                                        setpro.Open();

                                        if (!setpro.getAbsRow(0).getRFC().equalsIgnoreCase(RFC_Emisor)) {
                                            idmensaje = 3;
                                            mensaje = "ERROR: El RFC del proveedor no corresponde al RFC del emisor en el CFDI. No se puede enlazar. DOC: "
                                                    + setpro.getAbsRow(0).getRFC() + " CE: " + RFC_Emisor;
                                            getSesion(request).setID_Mensaje(idmensaje, mensaje.toString());
                                            irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                                            return;
                                        }
                                    }
                                } else if (moddes.equals("GASTOS")) {
                                    JComprasGastosSet SetMod = new JComprasGastosSet(request);
                                    SetMod.m_Where = "ID_Gasto = '" + p(request.getParameter("ID")) + "'";
                                    SetMod.Open();

                                    if (SetMod.getAbsRow(0).getStatus().equals("C")) {
                                        idmensaje = 1;
                                        mensaje += "PRECAUCION: Este gasto ya esta cancelado, no se puede enlazar el CFDI, CBB o EXT<br>";
                                        getSesion(request).setID_Mensaje(idmensaje, mensaje);
                                        irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                                        return;
                                    }

                                    if (SetMod.getAbsRow(0).getID_CFD() != 0
                                            || SetMod.getAbsRow(0).getTFD() > 1) {
                                        idmensaje = 1;
                                        mensaje += "PRECAUCION: Este documento ya tiene CFDIs, CBBs o EXTs asociados. No puedes asociar al mismo documento<br>";
                                        getSesion(request).setID_Mensaje(idmensaje, mensaje);
                                        irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                                        return;
                                    }

                                    if (JUtil.redondear(SetMod.getAbsRow(0).getTotal(), 1) != JUtil
                                            .redondear(TotalUUIDs, 1)) {
                                        idmensaje = 3;
                                        mensaje = "ERROR: El total en el, o los CFDIs, CBBs o EXTs no corresponden al Total del registro. No se puede enlazar. DOC: "
                                                + JUtil.redondear(SetMod.getAbsRow(0).getTotal(), 2) + " CE: "
                                                + JUtil.redondear(TotalUUIDs, 2);
                                        getSesion(request).setID_Mensaje(idmensaje, mensaje.toString());
                                        irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                                        return;
                                    }

                                    if (JUtil.redondear(SetMod.getAbsRow(0).getTC(), 1) != JUtil
                                            .redondear(TCAnt, 1)) {
                                        idmensaje = 3;
                                        mensaje = "ERROR: El tipo de cambio del documento no coincide con el o los CFDI, CBB o Facturas extranjeras cargadas. No se puede enlazar. DOC: "
                                                + JUtil.redondear(SetMod.getAbsRow(0).getTC(), 2) + " CE: "
                                                + JUtil.redondear(TCAnt, 2);
                                        getSesion(request).setID_Mensaje(idmensaje, mensaje.toString());
                                        irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                                        return;
                                    }

                                } else if (moddes.equals("DEVOLUCIONES")) {
                                    JComprasDevolucionesSet SetMod = new JComprasDevolucionesSet(request);
                                    SetMod.m_Where = "ID_Devolucion = '" + p(request.getParameter("ID")) + "'";
                                    SetMod.Open();

                                    if (SetMod.getAbsRow(0).getStatus().equals("C")) {
                                        idmensaje = 1;
                                        mensaje += "PRECAUCION: Esta devolucion ya esta cancelada, no se puede enlazar el CFDI, CBB o EXT<br>";
                                        getSesion(request).setID_Mensaje(idmensaje, mensaje);
                                        irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                                        return;
                                    }

                                    if (SetMod.getAbsRow(0).getID_CFD() != 0
                                            || SetMod.getAbsRow(0).getTFD() > 1) {
                                        idmensaje = 1;
                                        mensaje += "PRECAUCION: Este documento ya tiene CFDIs, CBBs o EXTs asociados. No puedes asociar al mismo documento<br>";
                                        getSesion(request).setID_Mensaje(idmensaje, mensaje);
                                        irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                                        return;
                                    }

                                    if (JUtil.redondear(SetMod.getAbsRow(0).getTotal(), 1) != JUtil
                                            .redondear(TotalUUIDs, 1)) {
                                        idmensaje = 3;
                                        mensaje = "ERROR: El total en el, o los CFDIs, CBBs o EXTs no corresponden al Total del registro. No se puede enlazar. DOC: "
                                                + JUtil.redondear(SetMod.getAbsRow(0).getTotal(), 2) + " CE: "
                                                + JUtil.redondear(TotalUUIDs, 2);
                                        getSesion(request).setID_Mensaje(idmensaje, mensaje.toString());
                                        irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                                        return;
                                    }

                                    if (SetMod.getAbsRow(0).getID_Proveedor() != 0 && tipoEnlace != "CBBEXT") {
                                        JProveeProveeMasSetV2 setpro = new JProveeProveeMasSetV2(request);
                                        setpro.m_Where = "ID_Tipo = 'PR' and ID_EntidadCompra = '"
                                                + getSesion(request).getSesion(idmod).getEspecial()
                                                + "' and ID_Clave = '" + SetMod.getAbsRow(0).getID_Proveedor()
                                                + "'";
                                        setpro.Open();

                                        if (!setpro.getAbsRow(0).getRFC().equalsIgnoreCase(RFC_Emisor)) {
                                            idmensaje = 3;
                                            mensaje = "ERROR: El RFC del proveedor no corresponde al RFC del emisor en el CFDI. No se puede enlazar. DOC: "
                                                    + setpro.getAbsRow(0).getRFC() + " XML: " + RFC_Emisor;
                                            getSesion(request).setID_Mensaje(idmensaje, mensaje.toString());
                                            irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                                            return;
                                        }
                                    }
                                } else // sale si no es recepcion, factura gasto o devolucion 
                                    return;

                                // Aqui asocia.
                                Enlazar(request, response, moddes, idmod, idmod4, UUIDs, tipoEnlace);
                                return;
                            } else {
                                idmensaje = 1;
                                mensaje += JUtil.Msj("GLB", "VISTA", "GLB", "SELEC-PROC", 2);
                                getSesion(request).setID_Mensaje(idmensaje, mensaje);
                                irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                                return;
                            }
                        }
                    } else if (request.getParameter("subproceso").equals("AGR_PART")) {
                        if (!moddes.equals("DEVOLUCIONES")) {
                            if (VerificarParametrosPartida(request, response))
                                AgregarPartida(request, response);
                        } else {
                            idmensaje = 1;
                            mensaje += "No se permite agregar partidas en devoluciones";
                            getSesion(request).setID_Mensaje(idmensaje, mensaje);
                        }
                        irApag("/forsetiweb/compras/comp_fact_dlg.jsp", request, response);
                        return;
                    } else if (request.getParameter("subproceso").equals("ACTUALIZAR")
                            || request.getParameter("subproceso").equals("AGR_PROVEE")) {
                        AgregarRecursos(request, response);
                        irApag("/forsetiweb/compras/comp_fact_dlg.jsp", request, response);
                        return;
                    } else if (request.getParameter("subproceso").equals("ENVIAR")) {
                        if (AgregarRecursos(request, response) == -1) {
                            HttpSession ses = request.getSession(true);
                            JCompFactSes rec = (JCompFactSes) ses.getAttribute("comp_fact_dlg");
                            //rec.setReferencia(p(request.getParameter("referencia")));

                            if (moddes.equals("FACTURAS") || moddes.equals("GASTOS")) {
                                if (request.getParameter("forma_pago").equals("contado")) {
                                    request.setAttribute("fsipg_tipo", "compras");
                                    request.setAttribute("fsipg_proc", "retiro");
                                    request.setAttribute("fsipg_total", rec.getTotal());
                                    request.setAttribute("fsipg_ident",
                                            getSesion(request).getSesion(idmod).getEspecial());
                                    if (VerificarParametros(request, response)
                                            && VerificarPagoMult(request, response)) {
                                        Agregar(request, response, moddes, setids, idmod, idmod4);
                                        return;
                                    }
                                } else {
                                    if (VerificarParametros(request, response)) {
                                        request.setAttribute("fsipg_cambio", 0F);
                                        request.setAttribute("fsipg_efectivo", 0F);
                                        request.setAttribute("fsipg_bancos", 0F);
                                        Agregar(request, response, moddes, setids, idmod, idmod4);
                                        return;
                                    }
                                }
                            } else if (moddes.equals("RECEPCIONES")) {
                                if (VerificarParametros(request, response)) {
                                    request.setAttribute("fsipg_cambio", 0F);
                                    request.setAttribute("fsipg_efectivo", 0F);
                                    request.setAttribute("fsipg_bancos", 0F);
                                    Agregar(request, response, moddes, setids, idmod, idmod4);
                                    return;
                                }
                            } else // sale si es devolucion u orden... Las devoluciones no se pueden enlazar desde cero, solo enlaces a devoluciones creadas previamente
                                return;
                        }
                        irApag("/forsetiweb/compras/comp_fact_dlg.jsp", request, response);
                        return;
                    }
                }
            } else // Sale si no es FACTURA, DEVOLUCION O RECEPCION
                return;
        } else if (request.getParameter("proceso").equals("AGREGAR_COMPRA")) {
            // Revisa si tiene permisos
            if (!getSesion(request).getPermiso(idmod + "_AGREGAR")) {
                idmensaje = 3;
                mensaje += MsjPermisoDenegado(request, "CEF", idmod + "_AGREGAR");
                getSesion(request).setID_Mensaje(idmensaje, mensaje);
                RDP("CEF", getSesion(request).getConBD(), "NA", getSesion(request).getID_Usuario(),
                        idmod + "_AGREGAR", idmod4 + "||||", mensaje);
                irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                return;
            }

            if (request.getParameter("subproceso") == null) // Como el subproceso no es ENVIAR ni AGR_PART ni EDIT_PART ni BORR_PART, abre la ventana del proceso de AGREGADO para agregar `por primera vez
            {
                HttpSession ses = request.getSession(true);
                JCompFactSes rec = (JCompFactSes) ses.getAttribute("comp_fact_dlg");

                if (rec == null) {
                    rec = new JCompFactSes(request, getSesion(request).getSesion(idmod).getEspecial(), usuario,
                            moddes);
                    ses.setAttribute("comp_fact_dlg", rec);
                } else
                    rec.resetear(request, getSesion(request).getSesion(idmod).getEspecial(), usuario, moddes);

                getSesion(request).setID_Mensaje(idmensaje, mensaje);
                irApag("/forsetiweb/compras/comp_fact_dlg.jsp", request, response);
                return;
            } else {
                // Solicitud de envio a procesar
                if (request.getParameter("subproceso").equals("ENVIAR")) {
                    if (AgregarCabecero(request, response) == -1) {
                        if (moddes.equals("FACTURAS") || moddes.equals("GASTOS")) {
                            if (request.getParameter("forma_pago").equals("contado")) {
                                HttpSession ses = request.getSession(true);
                                JCompFactSes rec = (JCompFactSes) ses.getAttribute("comp_fact_dlg");
                                request.setAttribute("fsipg_tipo", "compras");
                                request.setAttribute("fsipg_proc", "retiro");
                                request.setAttribute("fsipg_total", rec.getTotal());
                                request.setAttribute("fsipg_ident",
                                        getSesion(request).getSesion(idmod).getEspecial());
                                if (VerificarParametros(request, response)
                                        && VerificarPagoMult(request, response)) {
                                    Agregar(request, response, moddes, setids, idmod, idmod4);
                                    return;
                                }

                            } else {
                                if (VerificarParametros(request, response)) {
                                    // establece los atributos por default para compras de crdito
                                    request.setAttribute("fsipg_cambio", 0F);
                                    request.setAttribute("fsipg_efectivo", 0F);
                                    request.setAttribute("fsipg_bancos", 0F);
                                    Agregar(request, response, moddes, setids, idmod, idmod4);
                                    return;
                                }
                            }
                        } else {
                            if (VerificarParametros(request, response)) {
                                // establece los atributos por default para compras de crdito
                                request.setAttribute("fsipg_cambio", 0F);
                                request.setAttribute("fsipg_efectivo", 0F);
                                request.setAttribute("fsipg_bancos", 0F);
                                Agregar(request, response, moddes, setids, idmod, idmod4);
                                return;
                            }
                        }
                    }

                    irApag("/forsetiweb/compras/comp_fact_dlg.jsp", request, response);
                    return;

                } else if (request.getParameter("subproceso").equals("AGR_PROVEE")) {
                    AgregarCabecero(request, response);
                    irApag("/forsetiweb/compras/comp_fact_dlg.jsp", request, response);
                    return;
                } else if (request.getParameter("subproceso").equals("AGR_PART")) {
                    if (AgregarCabecero(request, response) == -1) {
                        if (VerificarParametrosPartida(request, response))
                            AgregarPartida(request, response);
                    }

                    irApag("/forsetiweb/compras/comp_fact_dlg.jsp", request, response);
                    return;
                } else if (request.getParameter("subproceso").equals("EDIT_PART")) {
                    if (AgregarCabecero(request, response) == -1) {
                        if (VerificarParametrosPartida(request, response))
                            EditarPartida(request, response);
                    }

                    irApag("/forsetiweb/compras/comp_fact_dlg.jsp", request, response);
                    return;
                } else if (request.getParameter("subproceso").equals("BORR_PART")) {
                    if (AgregarCabecero(request, response) == -1) {
                        BorrarPartida(request, response);
                    }

                    irApag("/forsetiweb/compras/comp_fact_dlg.jsp", request, response);
                    return;
                }
            }
        } else if (request.getParameter("proceso").equals("DATOS_IMPORTACION")) {
            // Revisa si tiene permisos
            if (!getSesion(request).getPermiso("COMP_FAC_AGREGAR")) {
                idmensaje = 3;
                mensaje += MsjPermisoDenegado(request, "CEF", "COMP_FAC_AGREGAR");
                getSesion(request).setID_Mensaje(idmensaje, mensaje);
                RDP("CEF", getSesion(request).getConBD(), "NA", getSesion(request).getID_Usuario(),
                        "COMP_FAC_AGREGAR", "CFAC||||", mensaje);
                irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                return;
            }

            if (request.getParameter("subproceso") == null) // Como el subproceso no es ENVIAR ni AGR_PART ni EDIT_PART ni BORR_PART, abre la ventana del proceso de AGREGADO para agregar `por primera vez
            {
                if (request.getParameter("ID") != null) {
                    String[] valoresParam = request.getParameterValues("ID");
                    if (valoresParam.length == 1) {
                        if (moddes.equals("FACTURAS")) {
                            JComprasFactSet SetMod = new JComprasFactSet(request);
                            SetMod.m_Where = "ID_Factura = '" + p(request.getParameter("ID")) + "'";
                            SetMod.Open();

                            if (SetMod.getAbsRow(0).getStatus().equals("C")) {
                                idmensaje = 1;
                                mensaje += "PRECAUCION: Esta compra ya esta cancelada, no se puede gestionar informacin de importacin<br>";
                                getSesion(request).setID_Mensaje(idmensaje, mensaje);
                                irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                                return;
                            }

                            JProveeProveeMasSetV2 pro = new JProveeProveeMasSetV2(request);
                            pro.m_Where = "ID_Clave = '" + SetMod.getAbsRow(0).getID_Proveedor() + "'";
                            pro.Open();

                            if (SetMod.getAbsRow(0).getID_Proveedor() == 0
                                    || SetMod.getAbsRow(0).getMoneda() == 1
                                    || pro.getAbsRow(0).getPais().equals("MEX")
                                    || pro.getAbsRow(0).getPedimento().equals("--")) {
                                idmensaje = 1;
                                mensaje += "PRECAUCION: Este proveedor es nacional, o es un proveedor extranjero con el cual no manejamos importaciones definitivas, o en su defecto, la compra no fue realizada en moneda extranjera. No se puede gestionar informacin de importacin<br>";
                                getSesion(request).setID_Mensaje(idmensaje, mensaje);
                                irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                                return;
                            }

                            JComercioExteriorCabSet ext = new JComercioExteriorCabSet(request, "COMPRA");
                            ext.m_Where = "ID_VC = '" + p(request.getParameter("ID")) + "'";
                            ext.Open();

                        } else // sale si no es factura
                            return;

                        getSesion(request).setID_Mensaje(idmensaje, mensaje);
                        irApag("/forsetiweb/compras/comp_fact_dlg_datimp.jsp", request, response);
                        return;
                    } else {
                        idmensaje = 1;
                        mensaje += JUtil.Msj("GLB", "VISTA", "GLB", "SELEC-PROC", 2);
                        getSesion(request).setID_Mensaje(idmensaje, mensaje);
                        irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                        return;
                    }
                } else {
                    idmensaje = 3;
                    mensaje += JUtil.Msj("GLB", "VISTA", "GLB", "SELEC-PROC", 1);
                    getSesion(request).setID_Mensaje(idmensaje, mensaje);
                    irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                    return;
                }
            } else {
                // Solicitud de envio a procesar
                if (request.getParameter("subproceso").equals("ENVIAR")) {
                    if (VerificarParametrosDatosImportacion(request, response)) {
                        DatosImportacion(request, response);
                        return;
                    }

                    irApag("/forsetiweb/compras/comp_fact_dlg_datimp.jsp", request, response);
                    return;
                }
            }
        } else if (request.getParameter("proceso").equals("CARGAR_COMPRA")) {
            // Revisa si tiene permisos
            if (!getSesion(request).getPermiso("ADM_CFDI_CARGAR")) {
                idmensaje = 3;
                mensaje += MsjPermisoDenegado(request, "CEF", "ADM_CFDI_CARGAR");
                getSesion(request).setID_Mensaje(idmensaje, mensaje);
                RDP("CEF", getSesion(request).getConBD(), "NA", getSesion(request).getID_Usuario(),
                        "ADM_CFDI_CARGAR", idmod4 + "||||", mensaje);
                irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                return;
            }

            if (setids.getAbsRow(0).getFija()) {
                idmensaje = 3;
                mensaje += "ERROR: No se puede subir ningun CFDI porque esta entidad de compra o gasto est establecida como Fija<br>";
                getSesion(request).setID_Mensaje(idmensaje, mensaje);
                irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                return;
            }

            Integer subir_archivos = new Integer(2);
            request.setAttribute("subir_archivos", subir_archivos);

            HttpSession ses = request.getSession(true);
            JFacturasXML rec = (JFacturasXML) ses.getAttribute("comp_fact_xml");

            if (rec == null) {
                rec = new JFacturasXML();
                ses.setAttribute("comp_fact_xml", rec);
            } else {
                rec = null;
                rec = new JFacturasXML();
                ses.setAttribute("comp_fact_xml", rec);
            }

            getSesion(request).setID_Mensaje(idmensaje, mensaje);
            irApag("/forsetiweb/subir_archivos.jsp?verif=/servlet/CEFCompFactDlg&archivo_1=xml&archivo_2=pdf&proceso=CARGAR_COMPRA&subproceso=ENVIAR&moddes="
                    + moddes + "&idmod=" + idmod + "&idmod4=" + idmod4, request, response);
            return;

        } else if (request.getParameter("proceso").equals("CARGAR_OTROS")) {
            // Revisa si tiene permisos
            if (!getSesion(request).getPermiso("ADM_CFDI_CARGAR")) {
                idmensaje = 3;
                mensaje += MsjPermisoDenegado(request, "CEF", "ADM_CFDI_CARGAR");
                getSesion(request).setID_Mensaje(idmensaje, mensaje);
                RDP("CEF", getSesion(request).getConBD(), "NA", getSesion(request).getID_Usuario(),
                        "ADM_CFDI_CARGAR", idmod4 + "||||", mensaje);
                irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                return;
            }

            if (setids.getAbsRow(0).getFija()) {
                idmensaje = 3;
                mensaje += "ERROR: No se puede subir ningun otro Documento porque esta entidad de compra o gasto est establecida como Fija<br>";
                getSesion(request).setID_Mensaje(idmensaje, mensaje);
                irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                return;
            }

            Integer subir_archivos = new Integer(1);
            request.setAttribute("subir_otros", subir_archivos);

            HttpSession ses = request.getSession(true);
            JFacturasXML rec = (JFacturasXML) ses.getAttribute("comp_fact_xml");

            if (rec == null) {
                rec = new JFacturasXML();
                ses.setAttribute("comp_fact_xml", rec);
            } else {
                rec = null;
                rec = new JFacturasXML();
                ses.setAttribute("comp_fact_xml", rec);
            }

            getSesion(request).setID_Mensaje(idmensaje, mensaje);
            irApag("/forsetiweb/compras/subir_otros.jsp?verif=/servlet/CEFCompFactDlg&proceso=CARGAR_OTROS&subproceso=ENVIAR&moddes="
                    + moddes + "&idmod=" + idmod + "&idmod4=" + idmod4, request, response);
            return;

        } else if (request.getParameter("proceso").equals("XML_COMPRA")) {
            // Revisa si tiene permisos
            if (!getSesion(request).getPermiso(idmod)) {
                idmensaje = 3;
                mensaje += MsjPermisoDenegado(request, "CEF", idmod);
                getSesion(request).setID_Mensaje(idmensaje, mensaje);
                RDP("CEF", getSesion(request).getConBD(), "NA", getSesion(request).getID_Usuario(), idmod,
                        idmod4 + "||||", mensaje);
                irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                return;
            }

            if (request.getParameter("ID") != null) {
                String[] valoresParam = request.getParameterValues("ID");
                if (valoresParam.length == 1) {
                    if (moddes.equals("FACTURAS")) {
                        JComprasFactSet SetMod = new JComprasFactSet(request);
                        SetMod.m_Where = "ID_Factura = '" + p(request.getParameter("ID")) + "'";
                        SetMod.Open();

                        if (SetMod.getAbsRow(0).getTFD() != 3 || SetMod.getAbsRow(0).getID_CFD() == 0) {
                            idmensaje = 1;
                            mensaje += "PRECAUCION: Esta compra no tiene un enlace a un CFDI, no hay nada que bajar <br>";
                            getSesion(request).setID_Mensaje(idmensaje, mensaje);
                            irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                            return;
                        }

                        JCFDCompSet cfd = new JCFDCompSet(request, "COMPRAS");
                        cfd.m_Where = "ID_CFD = '" + SetMod.getAbsRow(0).getID_CFD() + "'";
                        cfd.Open();

                        String nombre = "/usr/local/forseti/emp/" + getSesion(request).getBDCompania()
                                + "/comp/TFDs/" + cfd.getAbsRow(0).getUUID() + ".xml";
                        String destino = "FAC-" + SetMod.getAbsRow(0).getID_Entidad() + "-"
                                + SetMod.getAbsRow(0).getNumero() + ".xml";
                        JBajarArchivo fd = new JBajarArchivo();

                        fd.doDownload(response, getServletConfig().getServletContext(), nombre, destino);

                        idmensaje = 0;
                        mensaje = "La compra factura se bajo satisfactoriamente";
                        return;
                    } else if (moddes.equals("GASTOS")) {
                        JComprasGastosSet SetMod = new JComprasGastosSet(request);
                        SetMod.m_Where = "ID_Gasto = '" + p(request.getParameter("ID")) + "'";
                        SetMod.Open();

                        if (SetMod.getAbsRow(0).getTFD() != 3 || SetMod.getAbsRow(0).getStatus().equals("C")) {
                            idmensaje = 1;
                            mensaje += "PRECAUCION: Este gasto no tiene un enlace a un CFDI, no hay nada que bajar <br>";
                            getSesion(request).setID_Mensaje(idmensaje, mensaje);
                            irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                            return;
                        }

                        if (SetMod.getAbsRow(0).getID_CFD() != 0) // Solo tiene un CFDI asociado
                        {
                            JCFDCompSet cfd = new JCFDCompSet(request, "COMPRAS");
                            cfd.m_Where = "ID_CFD = '" + SetMod.getAbsRow(0).getID_CFD() + "'";
                            cfd.Open();

                            String nombre = "/usr/local/forseti/emp/" + getSesion(request).getBDCompania()
                                    + "/comp/TFDs/" + cfd.getAbsRow(0).getUUID() + ".xml";
                            String destino = "GAS-" + SetMod.getAbsRow(0).getID_Entidad() + "-"
                                    + SetMod.getAbsRow(0).getNumero() + ".xml";
                            JBajarArchivo fd = new JBajarArchivo();

                            fd.doDownload(response, getServletConfig().getServletContext(), nombre, destino);
                        } else // Tiene varios CFDI asociados
                        {
                            JCompGastosCFDSet uuids = new JCompGastosCFDSet(request);
                            uuids.m_Where = "ID_Gasto = '" + p(request.getParameter("ID")) + "'";
                            uuids.Open();
                            String nombres[] = new String[uuids.getNumRows()];
                            String destinos[] = new String[uuids.getNumRows()];

                            for (int i = 0; i < uuids.getNumRows(); i++) {
                                JCFDCompSet cfd = new JCFDCompSet(request, "COMPRAS");
                                cfd.m_Where = "ID_CFD = '" + uuids.getAbsRow(0).getID_CFD() + "'";
                                cfd.Open();

                                nombres[i] = "/usr/local/forseti/emp/" + getSesion(request).getBDCompania()
                                        + "/comp/TFDs/" + cfd.getAbsRow(0).getUUID() + ".xml";
                                destinos[i] = "GAS-" + SetMod.getAbsRow(0).getID_Entidad() + "-"
                                        + SetMod.getAbsRow(0).getNumero() + "-" + (i + 1) + ".xml";
                            }

                            JBajarArchivo fd = new JBajarArchivo();
                            fd.doDownloadMultipleFilesInZip(response, getServletConfig().getServletContext(),
                                    ("GAS-" + SetMod.getAbsRow(0).getID_Entidad() + "-"
                                            + SetMod.getAbsRow(0).getNumero() + "-XMLs.zip"),
                                    nombres, destinos);

                        }

                        idmensaje = 0;
                        mensaje = "La compra gasto se bajo satisfactoriamente";
                        return;
                    }
                    /*else if(moddes.equals("RECEPCIONES"))
                     {
                       JComprasRecepSetV2 SetMod = new JComprasRecepSetV2(request);
                       SetMod.m_Where = "ID_Recepcion = '" + p(request.getParameter("ID")) + "'";
                       SetMod.Open();
                             
                       if(SetMod.getAbsRow(0).getTFD() != 3 || SetMod.getAbsRow(0).getID_CFD() == 0)
                       {
                          idmensaje = 1;
                          mensaje += "PRECAUCION: Esta remisin no esta completamente sellada, no hay nada que bajar <br>";
                          getSesion(request).setID_Mensaje(idmensaje, mensaje);
                          irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                          return;
                         } 
                               
                       JCFDCompSet cfd = new JCFDCompSet(request,"COMPRAS");
                       cfd.m_Where = "ID_CFD = '" + SetMod.getAbsRow(0).getID_CFD() + "'";
                       cfd.Open();
                               
                       String nombre = "/usr/local/forseti/emp/" + getSesion(request).getBDCompania() + "/comp/TFDs/" + cfd.getAbsRow(0).getUUID() + ".xml";
                       String destino = "REC-" + SetMod.getAbsRow(0).getID_Entidad() + "-" + SetMod.getAbsRow(0).getNumero() + ".xml";
                       JBajarArchivo fd = new JBajarArchivo();
                               
                       fd.doDownload(response, getServletConfig().getServletContext(), nombre, destino);
                               
                       idmensaje = 0;
                       mensaje = "La recepcin se bajo satisfactoriamente";
                       return;
                     }*/
                    else if (moddes.equals("DEVOLUCIONES")) {
                        JComprasDevolucionesSet SetMod = new JComprasDevolucionesSet(request);
                        SetMod.m_Where = "ID_Devolucion = '" + p(request.getParameter("ID")) + "'";
                        SetMod.Open();

                        if (SetMod.getAbsRow(0).getTFD() != 3 || SetMod.getAbsRow(0).getID_CFD() == 0) {
                            idmensaje = 1;
                            mensaje += "PRECAUCION: Esta devolucin no tiene un enlace a un CFDI, no hay nada que bajar <br>";
                            getSesion(request).setID_Mensaje(idmensaje, mensaje);
                            irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                            return;
                        }

                        JCFDCompSet cfd = new JCFDCompSet(request, "COMPRAS");
                        cfd.m_Where = "ID_CFD = '" + SetMod.getAbsRow(0).getID_CFD() + "'";
                        cfd.Open();

                        String nombre = "/usr/local/forseti/emp/" + getSesion(request).getBDCompania()
                                + "/comp/TFDs/" + cfd.getAbsRow(0).getUUID() + ".xml";
                        String destino = "DSC-" + SetMod.getAbsRow(0).getID_Entidad() + "-"
                                + SetMod.getAbsRow(0).getNumero() + ".xml";
                        JBajarArchivo fd = new JBajarArchivo();

                        fd.doDownload(response, getServletConfig().getServletContext(), nombre, destino);

                        idmensaje = 0;
                        mensaje = "La devolucion se bajo satisfactoriamente";
                        return;
                    }
                } else {
                    idmensaje = 1;
                    mensaje += JUtil.Msj("GLB", "VISTA", "GLB", "SELEC-PROC", 2); //"PRECAUCION: Solo se permite consultar una pliza a la vez <br>";
                    getSesion(request).setID_Mensaje(idmensaje, mensaje);
                    irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                    return;
                }
            } else {
                idmensaje = 3;
                mensaje += JUtil.Msj("GLB", "VISTA", "GLB", "SELEC-PROC", 1); //"PRECAUCION: Solo se permite consultar una pliza a la vez <br>";
                getSesion(request).setID_Mensaje(idmensaje, mensaje);
                irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                return;
            }

        } else if (request.getParameter("proceso").equals("PDF_COMPRA")) {
            // Revisa si tiene permisos
            if (!getSesion(request).getPermiso(idmod)) {
                idmensaje = 3;
                mensaje += MsjPermisoDenegado(request, "CEF", idmod);
                getSesion(request).setID_Mensaje(idmensaje, mensaje);
                RDP("CEF", getSesion(request).getConBD(), "NA", getSesion(request).getID_Usuario(), idmod,
                        idmod4 + "||||", mensaje);
                irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                return;
            }

            if (request.getParameter("ID") != null) {
                String[] valoresParam = request.getParameterValues("ID");
                if (valoresParam.length == 1) {
                    if (moddes.equals("FACTURAS")) {
                        JComprasFactSet SetMod = new JComprasFactSet(request);
                        SetMod.m_Where = "ID_Factura = '" + p(request.getParameter("ID")) + "'";
                        SetMod.Open();

                        if (SetMod.getAbsRow(0).getTFD() < 3 || SetMod.getAbsRow(0).getID_CFD() == 0) {
                            idmensaje = 1;
                            mensaje += "PRECAUCION: Esta compra no tiene una asociacin de CFDI, CBB o EXT, no hay nada que bajar <br>";
                            getSesion(request).setID_Mensaje(idmensaje, mensaje);
                            irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                            return;
                        }

                        if (SetMod.getAbsRow(0).getTFD() == 3) //es factura electronica CFDI
                        {
                            JCFDCompSet cfd = new JCFDCompSet(request, "COMPRAS");
                            cfd.m_Where = "ID_CFD = '" + SetMod.getAbsRow(0).getID_CFD() + "'";
                            cfd.Open();

                            String nombre = "/usr/local/forseti/emp/" + getSesion(request).getBDCompania()
                                    + "/comp/PDFs/" + cfd.getAbsRow(0).getUUID() + ".pdf";
                            String destino = "FAC-" + SetMod.getAbsRow(0).getID_Entidad() + "-"
                                    + SetMod.getAbsRow(0).getNumero() + ".pdf";
                            JBajarArchivo fd = new JBajarArchivo();

                            fd.doDownload(response, getServletConfig().getServletContext(), nombre, destino);
                        } else if (SetMod.getAbsRow(0).getTFD() == 4 || SetMod.getAbsRow(0).getTFD() == 5) //es CBB o EXT
                        {
                            JCFDCompOtrSet cfd = new JCFDCompOtrSet(request);
                            cfd.m_Where = "ID_CFD = '" + SetMod.getAbsRow(0).getID_CFD() + "'";
                            cfd.Open();

                            String nombre = "/usr/local/forseti/emp/" + getSesion(request).getBDCompania()
                                    + "/comp/OTRs/" + cfd.getAbsRow(0).getUUID() + ".pdf";
                            String destino = "FAC-" + SetMod.getAbsRow(0).getID_Entidad() + "-"
                                    + SetMod.getAbsRow(0).getNumero() + ".pdf";
                            JBajarArchivo fd = new JBajarArchivo();

                            fd.doDownload(response, getServletConfig().getServletContext(), nombre, destino);
                        }
                        idmensaje = 0;
                        mensaje = "La compra gasto se bajo satisfactoriamente";
                        return;
                    } else if (moddes.equals("GASTOS")) {
                        JComprasGastosSet SetMod = new JComprasGastosSet(request);
                        SetMod.m_Where = "ID_Gasto = '" + p(request.getParameter("ID")) + "'";
                        SetMod.Open();

                        if (SetMod.getAbsRow(0).getTFD() < 3 || SetMod.getAbsRow(0).getStatus().equals("C")) {
                            idmensaje = 1;
                            mensaje += "PRECAUCION: Este gasto no tiene ninguna asociacin de CFDIs, CBBs o EXTs, no hay nada que bajar <br>";
                            getSesion(request).setID_Mensaje(idmensaje, mensaje);
                            irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                            return;
                        }

                        if (SetMod.getAbsRow(0).getTFD() == 3) {
                            if (SetMod.getAbsRow(0).getID_CFD() != 0) // Solo tiene un CFDI asociado
                            {
                                JCFDCompSet cfd = new JCFDCompSet(request, "COMPRAS");
                                cfd.m_Where = "ID_CFD = '" + SetMod.getAbsRow(0).getID_CFD() + "'";
                                cfd.Open();

                                String nombre = "/usr/local/forseti/emp/" + getSesion(request).getBDCompania()
                                        + "/comp/PDFs/" + cfd.getAbsRow(0).getUUID() + ".pdf";
                                String destino = "GAS-" + SetMod.getAbsRow(0).getID_Entidad() + "-"
                                        + SetMod.getAbsRow(0).getNumero() + ".pdf";
                                JBajarArchivo fd = new JBajarArchivo();

                                fd.doDownload(response, getServletConfig().getServletContext(), nombre,
                                        destino);
                            } else // Tiene varios CFDI asociados
                            {
                                JCompGastosCFDSet uuids = new JCompGastosCFDSet(request);
                                uuids.m_Where = "ID_Gasto = '" + p(request.getParameter("ID")) + "'";
                                uuids.Open();
                                String nombres[] = new String[uuids.getNumRows()];
                                String destinos[] = new String[uuids.getNumRows()];

                                for (int i = 0; i < uuids.getNumRows(); i++) {
                                    JCFDCompSet cfd = new JCFDCompSet(request, "COMPRAS");
                                    cfd.m_Where = "ID_CFD = '" + uuids.getAbsRow(0).getID_CFD() + "'";
                                    cfd.Open();

                                    nombres[i] = "/usr/local/forseti/emp/" + getSesion(request).getBDCompania()
                                            + "/comp/PDFs/" + cfd.getAbsRow(0).getUUID() + ".pdf";
                                    destinos[i] = "GAS-" + SetMod.getAbsRow(0).getID_Entidad() + "-"
                                            + SetMod.getAbsRow(0).getNumero() + "-" + (i + 1) + ".pdf";
                                }

                                JBajarArchivo fd = new JBajarArchivo();
                                fd.doDownloadMultipleFilesInZip(response,
                                        getServletConfig().getServletContext(),
                                        ("GAS-" + SetMod.getAbsRow(0).getID_Entidad() + "-"
                                                + SetMod.getAbsRow(0).getNumero() + "-PDFs.zip"),
                                        nombres, destinos);

                            }
                        } else if (SetMod.getAbsRow(0).getTFD() == 4 || SetMod.getAbsRow(0).getTFD() == 5
                                || SetMod.getAbsRow(0).getTFD() == 6) {
                            if (SetMod.getAbsRow(0).getID_CFD() != 0) // Solo tiene un CBB o EXT asociado
                            {
                                JCFDCompOtrSet cfd = new JCFDCompOtrSet(request);
                                cfd.m_Where = "ID_CFD = '" + SetMod.getAbsRow(0).getID_CFD() + "'";
                                cfd.Open();

                                String nombre = "/usr/local/forseti/emp/" + getSesion(request).getBDCompania()
                                        + "/comp/OTRs/" + cfd.getAbsRow(0).getUUID() + ".pdf";
                                String destino = "GAS-" + SetMod.getAbsRow(0).getID_Entidad() + "-"
                                        + SetMod.getAbsRow(0).getNumero() + ".pdf";
                                JBajarArchivo fd = new JBajarArchivo();

                                fd.doDownload(response, getServletConfig().getServletContext(), nombre,
                                        destino);
                            } else // Tiene varios CBB o Ext ASociados
                            {
                                JCompGastosCFDSet uuids = new JCompGastosCFDSet(request);
                                uuids.m_Where = "ID_Gasto = '" + p(request.getParameter("ID")) + "'";
                                uuids.Open();
                                String nombres[] = new String[uuids.getNumRows()];
                                String destinos[] = new String[uuids.getNumRows()];

                                for (int i = 0; i < uuids.getNumRows(); i++) {
                                    JCFDCompOtrSet cfd = new JCFDCompOtrSet(request);
                                    cfd.m_Where = "ID_CFD = '" + uuids.getAbsRow(0).getID_CFD() + "'";
                                    cfd.Open();

                                    nombres[i] = "/usr/local/forseti/emp/" + getSesion(request).getBDCompania()
                                            + "/comp/OTRs/" + cfd.getAbsRow(0).getUUID() + ".pdf";
                                    destinos[i] = "GAS-" + SetMod.getAbsRow(0).getID_Entidad() + "-"
                                            + SetMod.getAbsRow(0).getNumero() + "-" + (i + 1) + ".pdf";
                                }

                                JBajarArchivo fd = new JBajarArchivo();
                                fd.doDownloadMultipleFilesInZip(response,
                                        getServletConfig().getServletContext(),
                                        ("GAS-" + SetMod.getAbsRow(0).getID_Entidad() + "-"
                                                + SetMod.getAbsRow(0).getNumero() + "-PDFs.zip"),
                                        nombres, destinos);

                            }
                        }

                        idmensaje = 0;
                        mensaje = "La compra gasto se bajo satisfactoriamente";
                        return;

                    } else if (moddes.equals("RECEPCIONES")) {
                        JComprasRecepSetV2 SetMod = new JComprasRecepSetV2(request);
                        SetMod.m_Where = "ID_Recepcion = '" + p(request.getParameter("ID")) + "'";
                        SetMod.Open();

                        if (SetMod.getAbsRow(0).getTFD() != 3 || SetMod.getAbsRow(0).getID_CFD() == 0) {
                            idmensaje = 1;
                            mensaje += "PRECAUCION: Esta remisi&oacute;n no est&aacute; completamente sellada, no hay nada que bajar <br>";
                            getSesion(request).setID_Mensaje(idmensaje, mensaje);
                            irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                            return;
                        }

                        JCFDCompSet cfd = new JCFDCompSet(request, "COMPRAS");
                        cfd.m_Where = "ID_CFD = '" + SetMod.getAbsRow(0).getID_CFD() + "'";
                        cfd.Open();

                        String nombre = "/usr/local/forseti/emp/" + getSesion(request).getBDCompania()
                                + "/comp/PDFs/" + cfd.getAbsRow(0).getUUID() + ".pdf";
                        String destino = "REC-" + SetMod.getAbsRow(0).getID_Entidad() + "-"
                                + SetMod.getAbsRow(0).getNumero() + ".pdf";
                        JBajarArchivo fd = new JBajarArchivo();

                        fd.doDownload(response, getServletConfig().getServletContext(), nombre, destino);

                        idmensaje = 0;
                        mensaje = "La remisi&oacute;n se bajo satisfactoriamente";
                        return;
                    } else if (moddes.equals("DEVOLUCIONES")) {
                        JComprasDevolucionesSet SetMod = new JComprasDevolucionesSet(request);
                        SetMod.m_Where = "ID_Devolucion = '" + p(request.getParameter("ID")) + "'";
                        SetMod.Open();

                        if (SetMod.getAbsRow(0).getTFD() != 3 || SetMod.getAbsRow(0).getID_CFD() == 0) {
                            idmensaje = 1;
                            mensaje += "PRECAUCION: Esta devolucion no est&aacute; completamente sellada, no hay nada que bajar <br>";
                            getSesion(request).setID_Mensaje(idmensaje, mensaje);
                            irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                            return;
                        }

                        JCFDCompSet cfd = new JCFDCompSet(request, "COMPRAS");
                        cfd.m_Where = "ID_CFD = '" + SetMod.getAbsRow(0).getID_CFD() + "'";
                        cfd.Open();

                        String nombre = "/usr/local/forseti/emp/" + getSesion(request).getBDCompania()
                                + "/comp/PDFs/" + cfd.getAbsRow(0).getUUID() + ".pdf";
                        String destino = "DSC-" + SetMod.getAbsRow(0).getID_Entidad() + "-"
                                + SetMod.getAbsRow(0).getNumero() + ".pdf";
                        JBajarArchivo fd = new JBajarArchivo();

                        fd.doDownload(response, getServletConfig().getServletContext(), nombre, destino);

                        idmensaje = 0;
                        mensaje = "La devolucion se bajo satisfactoriamente";
                        return;
                    }
                } else {
                    idmensaje = 1;
                    mensaje += JUtil.Msj("GLB", "VISTA", "GLB", "SELEC-PROC", 2); //"PRECAUCION: Solo se permite consultar una pliza a la vez <br>";
                    getSesion(request).setID_Mensaje(idmensaje, mensaje);
                    irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                    return;
                }
            } else {
                idmensaje = 3;
                mensaje += JUtil.Msj("GLB", "VISTA", "GLB", "SELEC-PROC", 1); //"PRECAUCION: Solo se permite consultar una pliza a la vez <br>";
                getSesion(request).setID_Mensaje(idmensaje, mensaje);
                irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                return;
            }

        } else if (request.getParameter("proceso").equals("CAMBIAR_COMPRA")) {
            // Revisa si tiene permisos
            if (!getSesion(request).getPermiso(idmod + "_CAMBIAR")) {
                idmensaje = 3;
                mensaje += MsjPermisoDenegado(request, "CEF", idmod + "_CAMBIAR");
                getSesion(request).setID_Mensaje(idmensaje, mensaje);
                RDP("CEF", getSesion(request).getConBD(), "NA", getSesion(request).getID_Usuario(),
                        idmod + "_CAMBIAR", idmod4 + "||||", mensaje);
                irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                return;
            }

            if (request.getParameter("subproceso") == null) // Como el subproceso no es ENVIAR ni AGR_PART ni EDIT_PART ni BORR_PART, abre la ventana del proceso de AGREGADO para agregar `por primera vez
            {
                if (request.getParameter("ID") != null) {
                    String[] valoresParam = request.getParameterValues("ID");
                    if (valoresParam.length == 1) {
                        if (moddes.equals("ORDENES")) {
                            JComprasOrdenesSet SetMod = new JComprasOrdenesSet(request);
                            SetMod.m_Where = "ID_Orden = '" + p(request.getParameter("ID")) + "'";
                            SetMod.Open();

                            if (SetMod.getAbsRow(0).getStatus().equals("C")) {
                                idmensaje = 1;
                                mensaje += "PRECAUCION: Este pedido ya esta cancelado, no se puede cambiar <br>";
                                getSesion(request).setID_Mensaje(idmensaje, mensaje);
                                irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                                return;
                            }

                            if (SetMod.getAbsRow(0).getStatus().equals("F")
                                    || SetMod.getAbsRow(0).getStatus().equals("N")) {
                                idmensaje = 1;
                                mensaje += "PRECAUCION: Este pedido ya tiene una factura asociada, no se puede cambiar <br>";
                                getSesion(request).setID_Mensaje(idmensaje, mensaje);
                                irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                                return;
                            }

                        } else // sale si no es orden
                            return;

                        HttpSession ses = request.getSession(true);
                        JCompFactSes rec = (JCompFactSes) ses.getAttribute("comp_fact_dlg");
                        if (rec == null) {
                            rec = new JCompFactSes(request, getSesion(request).getSesion(idmod).getEspecial(),
                                    usuario, moddes);
                            ses.setAttribute("comp_fact_dlg", rec);
                        } else {
                            rec.resetear(request, getSesion(request).getSesion(idmod).getEspecial(), usuario,
                                    moddes);
                        }

                        // Llena el pedido o cotizacion
                        if (moddes.equals("ORDENES")) {
                            JComprasOrdenesSet SetMod = new JComprasOrdenesSet(request);
                            SetMod.m_Where = "ID_Orden = '" + p(request.getParameter("ID")) + "'";
                            SetMod.Open();

                            // checa si se permite la 
                            rec.setFactNum(SetMod.getAbsRow(0).getNumero());
                            rec.setClave((int) SetMod.getAbsRow(0).getID_Proveedor());
                            rec.setFecha(SetMod.getAbsRow(0).getFecha());
                            rec.setNombre(SetMod.getAbsRow(0).getProveedor());
                            rec.setID_Moneda(SetMod.getAbsRow(0).getMoneda());
                            rec.setTC(SetMod.getAbsRow(0).getTC());
                            rec.setTotal(SetMod.getAbsRow(0).getTotal());
                            rec.setReferencia(SetMod.getAbsRow(0).getReferencia());
                            rec.setFechaEntrega(SetMod.getAbsRow(0).getFecha());
                        }

                        JComprasFactSetCab SetCab = new JComprasFactSetCab(request,
                                request.getParameter("tipomov"));
                        JComprasFactSetDet SetDet = new JComprasFactSetDet(request,
                                request.getParameter("tipomov"));
                        SetCab.m_Where = "ID_Factura = '" + p(request.getParameter("ID")) + "'";
                        SetDet.m_Where = "ID_Factura = '" + p(request.getParameter("ID")) + "'";
                        SetCab.Open();
                        SetDet.Open();

                        rec.setMoneda(SetCab.getAbsRow(0).getMoneda());
                        rec.setNumero((int) SetCab.getAbsRow(0).getNumero());
                        rec.setColonia(SetCab.getAbsRow(0).getColonia());
                        if (SetCab.getAbsRow(0).getCondicion() == 0)
                            rec.setForma_Pago("contado");
                        else if (SetCab.getAbsRow(0).getCondicion() == 1)
                            rec.setForma_Pago("credito");
                        else
                            rec.setForma_Pago("ninguno");
                        rec.setCP(SetCab.getAbsRow(0).getCP());
                        rec.setDescuento(SetCab.getAbsRow(0).getDescuento());
                        rec.setDireccion(SetCab.getAbsRow(0).getDireccion());
                        rec.setImporte(SetCab.getAbsRow(0).getImporte());
                        rec.setIVA(SetCab.getAbsRow(0).getIVA());
                        rec.setIEPS(SetCab.getAbsRow(0).getIEPS());
                        rec.setIVARet(SetCab.getAbsRow(0).getIVARet());
                        rec.setISRRet(SetCab.getAbsRow(0).getISRRet());
                        rec.setObs(SetCab.getAbsRow(0).getObs());
                        rec.setPoblacion(SetCab.getAbsRow(0).getPoblacion());
                        rec.setRFC(SetCab.getAbsRow(0).getRFC());
                        rec.setSubTotal(SetCab.getAbsRow(0).getSubTotal());
                        rec.setTels(SetCab.getAbsRow(0).getTel());
                        rec.setID_Bodega(SetCab.getAbsRow(0).getID_Bodega());
                        rec.setBodegaDesc(SetCab.getAbsRow(0).getNombre());

                        for (int i = 0; i < SetDet.getNumRows(); i++) {
                            rec.agregaPartida(SetDet.getAbsRow(i).getCantidad(),
                                    SetDet.getAbsRow(i).getID_UnidadSalida(), SetDet.getAbsRow(i).getID_Prod(),
                                    SetDet.getAbsRow(i).getID_Prod(), SetDet.getAbsRow(i).getDescripcion(),
                                    SetDet.getAbsRow(i).getPrecio(), SetDet.getAbsRow(i).getImporte(),
                                    SetDet.getAbsRow(i).getDescuento(), SetDet.getAbsRow(i).getIVA(),
                                    SetDet.getAbsRow(i).getIEPS(), SetDet.getAbsRow(i).getIVARet(),
                                    SetDet.getAbsRow(i).getISRRet(), SetDet.getAbsRow(i).getImporteDesc(),
                                    SetDet.getAbsRow(i).getImporteIVA(), SetDet.getAbsRow(i).getImporteIEPS(),
                                    SetDet.getAbsRow(i).getImporteIVARet(),
                                    SetDet.getAbsRow(i).getImporteISRRet(), SetDet.getAbsRow(i).getTotalPart(),
                                    SetDet.getAbsRow(i).getObs(), SetDet.getAbsRow(i).getID_Tipo());
                        }

                        getSesion(request).setID_Mensaje(idmensaje, mensaje);
                        irApag("/forsetiweb/compras/comp_fact_dlg.jsp", request, response);
                        return;
                    } else {
                        idmensaje = 1;
                        mensaje += JUtil.Msj("GLB", "VISTA", "GLB", "SELEC-PROC", 2);
                        getSesion(request).setID_Mensaje(idmensaje, mensaje);
                        irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                        return;
                    }
                } else {
                    idmensaje = 3;
                    mensaje += JUtil.Msj("GLB", "VISTA", "GLB", "SELEC-PROC", 1);
                    getSesion(request).setID_Mensaje(idmensaje, mensaje);
                    irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                    return;
                }
            } else {
                // Solicitud de envio a procesar
                if (request.getParameter("subproceso").equals("ENVIAR")) {
                    if (AgregarCabecero(request, response) == -1) {
                        if (VerificarParametros(request, response)) {
                            // establece los atributos por default para compras de crdito
                            request.setAttribute("fsipg_cambio", 0F);
                            request.setAttribute("fsipg_efectivo", 0F);
                            request.setAttribute("fsipg_bancos", 0F);
                            Cambiar(request, response, moddes, idmod, idmod4);
                            return;
                        }

                    }

                    irApag("/forsetiweb/compras/comp_fact_dlg.jsp", request, response);
                    return;
                } else if (request.getParameter("subproceso").equals("AGR_CLIENT")) {
                    AgregarCabecero(request, response);
                    irApag("/forsetiweb/compras/comp_fact_dlg.jsp", request, response);
                    return;
                } else if (request.getParameter("subproceso").equals("AGR_PART")) {
                    if (AgregarCabecero(request, response) == -1) {
                        if (VerificarParametrosPartida(request, response))
                            AgregarPartida(request, response);
                    }

                    irApag("/forsetiweb/compras/comp_fact_dlg.jsp", request, response);
                    return;
                } else if (request.getParameter("subproceso").equals("EDIT_PART")) {
                    if (AgregarCabecero(request, response) == -1) {
                        if (VerificarParametrosPartida(request, response))
                            EditarPartida(request, response);
                    }

                    irApag("/forsetiweb/compras/comp_fact_dlg.jsp", request, response);
                    return;
                } else if (request.getParameter("subproceso").equals("BORR_PART")) {
                    if (AgregarCabecero(request, response) == -1) {
                        BorrarPartida(request, response);
                    }

                    irApag("/forsetiweb/compras/comp_fact_dlg.jsp", request, response);
                    return;
                }
            }

        } else if (request.getParameter("proceso").equals("CONSULTAR_COMPRA")) {
            // Revisa si tiene permisos
            if (!getSesion(request).getPermiso(idmod)) {
                idmensaje = 3;
                mensaje += MsjPermisoDenegado(request, "CEF", idmod);
                getSesion(request).setID_Mensaje(idmensaje, mensaje);
                RDP("CEF", getSesion(request).getConBD(), "NA", getSesion(request).getID_Usuario(), idmod,
                        idmod4 + "||||", mensaje);
                irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                return;
            }

            if (request.getParameter("ID") != null) {
                String[] valoresParam = request.getParameterValues("ID");
                if (valoresParam.length == 1) {

                    HttpSession ses = request.getSession(true);
                    JCompFactSes rec = (JCompFactSes) ses.getAttribute("comp_fact_dlg");
                    if (rec == null) {
                        rec = new JCompFactSes(request, getSesion(request).getSesion(idmod).getEspecial(),
                                usuario, moddes);
                        ses.setAttribute("comp_fact_dlg", rec);
                    } else
                        rec.resetear(request, getSesion(request).getSesion(idmod).getEspecial(), usuario,
                                moddes);

                    // Llena la factura
                    if (moddes.equals("FACTURAS")) {
                        JComprasFactSet SetMod = new JComprasFactSet(request);
                        SetMod.m_Where = "ID_Factura = '" + p(request.getParameter("ID")) + "'";
                        SetMod.Open();
                        rec.setFactNum(SetMod.getAbsRow(0).getNumero());
                        rec.setClave((int) SetMod.getAbsRow(0).getID_Proveedor());
                        rec.setFecha(SetMod.getAbsRow(0).getFecha());
                        rec.setNombre(SetMod.getAbsRow(0).getProveedor());
                        rec.setID_Moneda(SetMod.getAbsRow(0).getMoneda());
                        rec.setTC(SetMod.getAbsRow(0).getTC());
                        rec.setTotal(SetMod.getAbsRow(0).getTotal());
                        rec.setReferencia(SetMod.getAbsRow(0).getReferencia());
                        rec.setFechaEntrega(SetMod.getAbsRow(0).getFecha());

                    } else if (moddes.equals("GASTOS")) {
                        JComprasGastosSet SetMod = new JComprasGastosSet(request);
                        SetMod.m_Where = "ID_Gasto = '" + p(request.getParameter("ID")) + "'";
                        SetMod.Open();
                        rec.setFactNum(SetMod.getAbsRow(0).getNumero());
                        rec.setClave((int) SetMod.getAbsRow(0).getID_Proveedor());
                        rec.setFecha(SetMod.getAbsRow(0).getFecha());
                        rec.setNombre(SetMod.getAbsRow(0).getProveedor());
                        rec.setID_Moneda(SetMod.getAbsRow(0).getMoneda());
                        rec.setTC(SetMod.getAbsRow(0).getTC());
                        rec.setTotal(SetMod.getAbsRow(0).getTotal());
                        rec.setReferencia(SetMod.getAbsRow(0).getReferencia());
                        rec.setFechaEntrega(SetMod.getAbsRow(0).getFecha());
                    } else if (moddes.equals("ORDENES")) {
                        JComprasOrdenesSet SetMod = new JComprasOrdenesSet(request);
                        SetMod.m_Where = "ID_Orden = '" + p(request.getParameter("ID")) + "'";
                        SetMod.Open();
                        rec.setFactNum(SetMod.getAbsRow(0).getNumero());
                        rec.setClave((int) SetMod.getAbsRow(0).getID_Proveedor());
                        rec.setFecha(SetMod.getAbsRow(0).getFecha());
                        rec.setNombre(SetMod.getAbsRow(0).getProveedor());
                        rec.setID_Moneda(SetMod.getAbsRow(0).getMoneda());
                        rec.setTC(SetMod.getAbsRow(0).getTC());
                        rec.setTotal(SetMod.getAbsRow(0).getTotal());
                        rec.setReferencia(SetMod.getAbsRow(0).getReferencia());
                        rec.setFechaEntrega(SetMod.getAbsRow(0).getFecha());
                    } else if (moddes.equals("RECEPCIONES")) {
                        JComprasRecepSetV2 SetMod = new JComprasRecepSetV2(request);
                        SetMod.m_Where = "ID_Recepcion = '" + p(request.getParameter("ID")) + "'";
                        SetMod.Open();
                        rec.setFactNum(SetMod.getAbsRow(0).getNumero());
                        rec.setClave((int) SetMod.getAbsRow(0).getID_Proveedor());
                        rec.setFecha(SetMod.getAbsRow(0).getFecha());
                        rec.setNombre(SetMod.getAbsRow(0).getProveedor());
                        rec.setID_Moneda(SetMod.getAbsRow(0).getMoneda());
                        rec.setTC(SetMod.getAbsRow(0).getTC());
                        rec.setTotal(SetMod.getAbsRow(0).getTotal());
                        rec.setReferencia(SetMod.getAbsRow(0).getReferencia());
                        rec.setFechaEntrega(SetMod.getAbsRow(0).getFecha());
                    } else if (moddes.equals("DEVOLUCIONES")) {
                        JComprasDevolucionesSet SetMod = new JComprasDevolucionesSet(request);
                        SetMod.m_Where = "ID_Devolucion = '" + p(request.getParameter("ID")) + "'";
                        SetMod.Open();
                        rec.setFactNum(SetMod.getAbsRow(0).getNumero());
                        rec.setClave((int) SetMod.getAbsRow(0).getID_Proveedor());
                        rec.setFecha(SetMod.getAbsRow(0).getFecha());
                        rec.setNombre(SetMod.getAbsRow(0).getProveedor());
                        rec.setID_Moneda(SetMod.getAbsRow(0).getMoneda());
                        rec.setTC(SetMod.getAbsRow(0).getTC());
                        rec.setTotal(SetMod.getAbsRow(0).getTotal());
                        rec.setReferencia(SetMod.getAbsRow(0).getReferencia());
                        rec.setFechaEntrega(SetMod.getAbsRow(0).getFecha());
                    }

                    JComprasFactSetCab SetCab = new JComprasFactSetCab(request, moddes);
                    JComprasFactSetDet SetDet = new JComprasFactSetDet(request, moddes);
                    SetCab.m_Where = "ID_Factura = '" + p(request.getParameter("ID")) + "'";
                    SetDet.m_Where = "ID_Factura = '" + p(request.getParameter("ID")) + "'";
                    SetCab.Open();
                    SetDet.Open();

                    rec.setMoneda(SetCab.getAbsRow(0).getMoneda());
                    rec.setNumero((int) SetCab.getAbsRow(0).getNumero());
                    rec.setColonia(SetCab.getAbsRow(0).getColonia());
                    if (SetCab.getAbsRow(0).getCondicion() == 0)
                        rec.setForma_Pago("contado");
                    else if (SetCab.getAbsRow(0).getCondicion() == 1)
                        rec.setForma_Pago("credito");
                    else
                        rec.setForma_Pago("ninguno");
                    rec.setCP(SetCab.getAbsRow(0).getCP());
                    rec.setDescuento(SetCab.getAbsRow(0).getDescuento());
                    rec.setDireccion(SetCab.getAbsRow(0).getDireccion());
                    rec.setImporte(SetCab.getAbsRow(0).getImporte());
                    rec.setIVA(SetCab.getAbsRow(0).getIVA());
                    rec.setIEPS(SetCab.getAbsRow(0).getIEPS());
                    rec.setIVARet(SetCab.getAbsRow(0).getIVARet());
                    rec.setISRRet(SetCab.getAbsRow(0).getISRRet());
                    rec.setObs(SetCab.getAbsRow(0).getObs());
                    rec.setPoblacion(SetCab.getAbsRow(0).getPoblacion());
                    rec.setRFC(SetCab.getAbsRow(0).getRFC());
                    rec.setSubTotal(SetCab.getAbsRow(0).getSubTotal());
                    rec.setTels(SetCab.getAbsRow(0).getTel());
                    rec.setID_Bodega(SetCab.getAbsRow(0).getID_Bodega());
                    rec.setBodegaDesc(SetCab.getAbsRow(0).getNombre());

                    for (int i = 0; i < SetDet.getNumRows(); i++) {
                        rec.agregaPartida(SetDet.getAbsRow(i).getCantidad(),
                                SetDet.getAbsRow(i).getID_UnidadSalida(), SetDet.getAbsRow(i).getID_Prod(),
                                SetDet.getAbsRow(i).getID_Prod(), SetDet.getAbsRow(i).getDescripcion(),
                                SetDet.getAbsRow(i).getPrecio(), SetDet.getAbsRow(i).getImporte(),
                                SetDet.getAbsRow(i).getDescuento(), SetDet.getAbsRow(i).getIVA(),
                                SetDet.getAbsRow(i).getIEPS(), SetDet.getAbsRow(i).getIVARet(),
                                SetDet.getAbsRow(i).getISRRet(), SetDet.getAbsRow(i).getImporteDesc(),
                                SetDet.getAbsRow(i).getImporteIVA(), SetDet.getAbsRow(i).getImporteIEPS(),
                                SetDet.getAbsRow(i).getImporteIVARet(), SetDet.getAbsRow(i).getImporteISRRet(),
                                SetDet.getAbsRow(i).getTotalPart(), SetDet.getAbsRow(i).getObs(),
                                SetDet.getAbsRow(i).getID_Tipo());
                    }

                    RDP("CEF", getSesion(request).getConBD(), "OK", getSesion(request).getID_Usuario(), idmod,
                            idmod4 + "|" + request.getParameter("ID") + "|"
                                    + getSesion(request).getSesion(idmod).getEspecial() + "||",
                            "");
                    getSesion(request).setID_Mensaje(idmensaje, mensaje);
                    irApag("/forsetiweb/compras/comp_fact_dlg.jsp", request, response);
                    return;
                } else {
                    idmensaje = 1;
                    mensaje += JUtil.Msj("GLB", "VISTA", "GLB", "SELEC-PROC", 2);
                    getSesion(request).setID_Mensaje(idmensaje, mensaje);
                    irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                    return;
                }
            } else {
                idmensaje = 3;
                mensaje += JUtil.Msj("GLB", "VISTA", "GLB", "SELEC-PROC", 1);
                getSesion(request).setID_Mensaje(idmensaje, mensaje);
                irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                return;
            }

        } else if (request.getParameter("proceso").equals("CANCELAR_COMPRA")) {
            // Revisa si tiene permisos
            if (!getSesion(request).getPermiso(idmod + "_CANCELAR")) {
                idmensaje = 3;
                mensaje += MsjPermisoDenegado(request, "CEF", idmod + "_CANCELAR");
                getSesion(request).setID_Mensaje(idmensaje, mensaje);
                RDP("CEF", getSesion(request).getConBD(), "NA", getSesion(request).getID_Usuario(),
                        idmod + "_CANCELAR", idmod4 + "||||", mensaje);
                irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                return;
            }

            if (request.getParameter("ID") != null) {
                String[] valoresParam = request.getParameterValues("ID");
                if (valoresParam.length == 1) {
                    if (moddes.equals("ORDENES")) {
                        JComprasOrdenesSet SetMod = new JComprasOrdenesSet(request);
                        SetMod.m_Where = "ID_Orden = '" + p(request.getParameter("ID")) + "'";
                        SetMod.Open();

                        if (SetMod.getAbsRow(0).getStatus().equals("C")) {
                            idmensaje = 1;
                            mensaje += "PRECAUCION: Esta orden ya est cancelada <br>";
                            getSesion(request).setID_Mensaje(idmensaje, mensaje);
                            irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                            return;
                        } else if (SetMod.getAbsRow(0).getStatus().equals("F")) {
                            idmensaje = 1;
                            mensaje += "PRECAUCION: Esta orden ya tiene una factura o recepcin asociada, no se puede cancelar. Primero debes cancelar la factura o recepcin para poder cancelar la orden de compra <br>";
                            getSesion(request).setID_Mensaje(idmensaje, mensaje);
                            irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                            return;
                        } else {
                            CancelarFactura(request, response, "ORDENES", idmod, idmod4);
                            return;
                        }
                    } else if (moddes.equals("RECEPCIONES")) {
                        JComprasRecepSetV2 SetMod = new JComprasRecepSetV2(request);
                        SetMod.m_Where = "ID_Recepcion = '" + p(request.getParameter("ID")) + "'";
                        SetMod.Open();

                        if (SetMod.getAbsRow(0).getStatus().equals("C")) {
                            idmensaje = 1;
                            mensaje += "PRECAUCION: Esta recepcin ya esta cancelada <br>";
                            getSesion(request).setID_Mensaje(idmensaje, mensaje);
                            irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                            return;
                        } else if (SetMod.getAbsRow(0).getID_Factura() != 0) {
                            idmensaje = 1;
                            mensaje += "PRECAUCION: Esta recepcin ya tiene una factura asociada. No se puede cancelar, primero cancela la factura para poder cancelar la recepcin <br>";
                            getSesion(request).setID_Mensaje(idmensaje, mensaje);
                            irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                            return;
                        } else if (!setids.getAbsRow(0).getFijaCost() && setids.getAbsRow(0).getAuditarAlm()
                                && !SetMod.getAbsRow(0).getStatus().equals("R")) {
                            idmensaje = 1;
                            mensaje += "PRECAUCION: Esta recepcin necesita estar revertida desde el m&oacute;dulo del almac&eacute;n para poder cancelarla <br>";
                            getSesion(request).setID_Mensaje(idmensaje, mensaje);
                            irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                            return;
                        } else {
                            CancelarFactura(request, response, "RECEPCIONES", idmod, idmod4);
                            return;
                        }
                    }
                    if (moddes.equals("FACTURAS")) {
                        JComprasFactSet SetMod = new JComprasFactSet(request);
                        SetMod.m_Where = "ID_Factura = '" + p(request.getParameter("ID")) + "'";
                        SetMod.Open();
                        JComprasRecepSetV2 SetRec = new JComprasRecepSetV2(request);
                        SetRec.m_Where = "ID_Factura = '" + p(request.getParameter("ID")) + "'";
                        SetRec.Open();
                        JComprasDevolucionesSet SetDev = new JComprasDevolucionesSet(request);
                        SetDev.m_Where = "ID_Factura = '" + p(request.getParameter("ID")) + "'";
                        SetDev.Open();

                        if (SetDev.getNumRows() > 0) {
                            for (int i = 0; i < SetDev.getNumRows(); i++) {
                                if (!SetDev.getAbsRow(i).getStatus().equals("C")) {
                                    idmensaje = 1;
                                    mensaje += "PRECAUCION: Esta factura tiene devoluciones asociadas sin cancelar. Primero debes cancelar las devoluciones asociadas para poder cancelar la factura <br>";
                                    getSesion(request).setID_Mensaje(idmensaje, mensaje);
                                    irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                                    return;
                                }
                            }
                        }

                        if (SetMod.getAbsRow(0).getStatus().equals("C")) {
                            idmensaje = 1;
                            mensaje += "PRECAUCION: Esta factura ya est cancelada <br>";
                            getSesion(request).setID_Mensaje(idmensaje, mensaje);
                            irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                            return;
                        } else if (SetRec.getNumRows() == 0 && SetMod.getAbsRow(0).getID_PolCost() != -1
                                && !setids.getAbsRow(0).getFijaCost() && setids.getAbsRow(0).getAuditarAlm()
                                && !SetMod.getAbsRow(0).getStatus().equals("R")) {
                            idmensaje = 1;
                            mensaje += "PRECAUCION: Esta factura necesita estar revertida desde el mdulo del almacn para poder cancelarla <br>";
                            getSesion(request).setID_Mensaje(idmensaje, mensaje);
                            irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                            return;
                        } else {
                            CancelarFactura(request, response, "FACTURAS", idmod, idmod4);
                            return;
                        }
                    } else if (moddes.equals("DEVOLUCIONES")) {
                        JComprasDevolucionesSet SetMod = new JComprasDevolucionesSet(request);
                        SetMod.m_Where = "ID_Devolucion = '" + p(request.getParameter("ID")) + "'";
                        SetMod.Open();

                        if (SetMod.getAbsRow(0).getStatus().equals("C")) {
                            idmensaje = 1;
                            mensaje += "PRECAUCION: Esta devoluci&oacute;n ya est&aacute; cancelada <br>";
                            getSesion(request).setID_Mensaje(idmensaje, mensaje);
                            irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                            return;
                        } else if (SetMod.getAbsRow(0).getDevReb().equals("DEV")
                                && !setids.getAbsRow(0).getFijaCost() && setids.getAbsRow(0).getAuditarAlm()
                                && !SetMod.getAbsRow(0).getStatus().equals("R")) {
                            idmensaje = 1;
                            mensaje += "PRECAUCION: Esta devoluci&oacute;n necesita estar revertida desde el mdulo del almacn para poder cancelarla <br>";
                            getSesion(request).setID_Mensaje(idmensaje, mensaje);
                            irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                            return;
                        } else {
                            CancelarFactura(request, response, "DEVOLUCIONES", idmod, idmod4);
                            return;
                        }
                    } else if (moddes.equals("GASTOS")) {
                        JComprasGastosSet SetMod = new JComprasGastosSet(request);
                        SetMod.m_Where = "ID_Gasto = '" + p(request.getParameter("ID")) + "'";
                        SetMod.Open();

                        if (SetMod.getAbsRow(0).getStatus().equals("C")) {
                            idmensaje = 1;
                            mensaje += "PRECAUCION: Esta factura ya est cancelada <br>";
                            getSesion(request).setID_Mensaje(idmensaje, mensaje);
                            irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                            return;
                        } else {
                            CancelarFactura(request, response, "GASTOS", idmod, idmod4);
                            return;
                        }
                    }

                } else {
                    idmensaje = 1;
                    mensaje += JUtil.Msj("GLB", "VISTA", "GLB", "SELEC-PROC", 2);
                    getSesion(request).setID_Mensaje(idmensaje, mensaje);
                    irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                    return;
                }
            } else {
                idmensaje = 3;
                mensaje += JUtil.Msj("GLB", "VISTA", "GLB", "SELEC-PROC", 1);
                getSesion(request).setID_Mensaje(idmensaje, mensaje);
                irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                return;
            }

        } else if (request.getParameter("proceso").equals("FACTURAR_COMPRA")) {
            // Revisa si tiene permisos
            if (!getSesion(request).getPermiso("COMP_FAC_AGREGAR")) {
                idmensaje = 3;
                mensaje += MsjPermisoDenegado(request, "CEF", "COMP_FAC_AGREGAR");
                getSesion(request).setID_Mensaje(idmensaje, mensaje);
                RDP("CEF", getSesion(request).getConBD(), "NA", getSesion(request).getID_Usuario(),
                        "COMP_FAC_AGREGAR", "CFAC||||", mensaje);
                irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                return;
            }

            if (request.getParameter("subproceso") == null) // Como el subproceso no es ENVIAR, abre la ventana del proceso de FACTURADO por primera vez
            {
                if (request.getParameter("ID") != null) {
                    String[] valoresParam = request.getParameterValues("ID");
                    if (valoresParam.length == 1) {
                        if (moddes.equals("ORDENES")) {
                            JComprasOrdenesSet SetMod = new JComprasOrdenesSet(request);
                            SetMod.m_Where = "ID_Orden = '" + p(request.getParameter("ID")) + "'";
                            SetMod.Open();

                            if (SetMod.getAbsRow(0).getStatus().equals("C")) {
                                idmensaje = 1;
                                mensaje += "PRECAUCION: Este pedido ya esta cancelado, no se puede facturar <br>";
                                getSesion(request).setID_Mensaje(idmensaje, mensaje);
                                irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                                return;
                            }

                            if (SetMod.getAbsRow(0).getStatus().equals("F")
                                    || SetMod.getAbsRow(0).getStatus().equals("N")) {
                                idmensaje = 1;
                                mensaje += "PRECAUCION: Este pedido ya tiene una remisi&oacute;n o factura asociada, no se puede facturar <br>";
                                getSesion(request).setID_Mensaje(idmensaje, mensaje);
                                irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                                return;
                            }

                        } else if (moddes.equals("RECEPCIONES")) {
                            JComprasRecepSetV2 SetMod = new JComprasRecepSetV2(request);
                            SetMod.m_Where = "ID_Recepcion = '" + p(request.getParameter("ID")) + "'";
                            SetMod.Open();

                            if (SetMod.getAbsRow(0).getStatus().equals("C")) {
                                idmensaje = 1;
                                mensaje += "PRECAUCION: Esta remisi&oacute;n ya esta cancelada, no se puede facturar <br>";
                                getSesion(request).setID_Mensaje(idmensaje, mensaje);
                                irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                                return;
                            }

                            if (SetMod.getAbsRow(0).getStatus().equals("F")
                                    || SetMod.getAbsRow(0).getStatus().equals("R")
                                    || SetMod.getAbsRow(0).getFactura() != 0) {
                                idmensaje = 1;
                                mensaje += "PRECAUCION: Esta remisi&oacute;n ya tiene una factura asociada o est&aacute; revertida, no se puede facturar <br>";
                                getSesion(request).setID_Mensaje(idmensaje, mensaje);
                                irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                                return;
                            }

                        } else // sale si no es orden o recepcion
                            return;

                        HttpSession ses = request.getSession(true);
                        JCompFactSes rec = (JCompFactSes) ses.getAttribute("comp_fact_dlg");
                        if (rec == null) {
                            rec = new JCompFactSes(request, getSesion(request).getSesion(idmod).getEspecial(),
                                    usuario, "FACTURAS");
                            ses.setAttribute("comp_fact_dlg", rec);
                        } else {
                            rec.resetear(request, getSesion(request).getSesion(idmod).getEspecial(), usuario,
                                    "FACTURAS");
                        }

                        // Llena la factura
                        if (moddes.equals("ORDENES")) {
                            JComprasOrdenesSet SetMod = new JComprasOrdenesSet(request);
                            SetMod.m_Where = "ID_Orden = '" + p(request.getParameter("ID")) + "'";
                            SetMod.Open();

                            //rec.setFactNum(SetMod.getAbsRow(0).getNumero());
                            rec.setClave((int) SetMod.getAbsRow(0).getID_Proveedor());
                            rec.setFecha(SetMod.getAbsRow(0).getFecha());
                            rec.setNombre(SetMod.getAbsRow(0).getProveedor());
                            rec.setID_Moneda(SetMod.getAbsRow(0).getMoneda());
                            rec.setTC(SetMod.getAbsRow(0).getTC());
                            rec.setTotal(SetMod.getAbsRow(0).getTotal());
                            rec.setReferencia(SetMod.getAbsRow(0).getReferencia());
                            rec.setFechaEntrega(SetMod.getAbsRow(0).getFecha());
                        } else if (moddes.equals("RECEPCIONES")) {
                            JComprasRecepSetV2 SetMod = new JComprasRecepSetV2(request);
                            SetMod.m_Where = "ID_Recepcion = '" + p(request.getParameter("ID")) + "'";
                            SetMod.Open();

                            //rec.setFactNum(SetMod.getAbsRow(0).getNumero());
                            rec.setClave((int) SetMod.getAbsRow(0).getID_Proveedor());
                            rec.setFecha(SetMod.getAbsRow(0).getFecha());
                            rec.setNombre(SetMod.getAbsRow(0).getProveedor());
                            rec.setID_Moneda(SetMod.getAbsRow(0).getMoneda());
                            rec.setTC(SetMod.getAbsRow(0).getTC());
                            rec.setTotal(SetMod.getAbsRow(0).getTotal());
                            rec.setReferencia(SetMod.getAbsRow(0).getReferencia());
                            rec.setFechaEntrega(SetMod.getAbsRow(0).getFecha());

                            if (SetMod.getAbsRow(0).getID_CFD() != 0) {
                                JCFDCompSet cfd = new JCFDCompSet(request, "COMPRAS");
                                cfd.m_Where = "ID_CFD = '" + SetMod.getAbsRow(0).getID_CFD() + "'";
                                cfd.Open();

                                rec.setUUID(cfd.getAbsRow(0).getUUID());
                            }
                        }
                        JComprasFactSetCab SetCab = new JComprasFactSetCab(request,
                                request.getParameter("tipomov"));
                        JComprasFactSetDet SetDet = new JComprasFactSetDet(request,
                                request.getParameter("tipomov"));
                        SetCab.m_Where = "ID_Factura = '" + p(request.getParameter("ID")) + "'";
                        SetDet.m_Where = "ID_Factura = '" + p(request.getParameter("ID")) + "'";
                        SetCab.Open();
                        SetDet.Open();

                        rec.setMoneda(SetCab.getAbsRow(0).getMoneda());
                        rec.setNumero((int) SetCab.getAbsRow(0).getNumero());
                        rec.setColonia(SetCab.getAbsRow(0).getColonia());
                        if (SetCab.getAbsRow(0).getCondicion() == 0)
                            rec.setForma_Pago("contado");
                        else if (SetCab.getAbsRow(0).getCondicion() == 1)
                            rec.setForma_Pago("credito");
                        else
                            rec.setForma_Pago("ninguno");
                        rec.setCP(SetCab.getAbsRow(0).getCP());
                        rec.setDescuento(SetCab.getAbsRow(0).getDescuento());
                        rec.setDireccion(SetCab.getAbsRow(0).getDireccion());
                        rec.setImporte(SetCab.getAbsRow(0).getImporte());
                        rec.setIVA(SetCab.getAbsRow(0).getIVA());
                        rec.setIEPS(SetCab.getAbsRow(0).getIEPS());
                        rec.setIVARet(SetCab.getAbsRow(0).getIVARet());
                        rec.setISRRet(SetCab.getAbsRow(0).getISRRet());
                        rec.setObs(SetCab.getAbsRow(0).getObs());
                        rec.setPoblacion(SetCab.getAbsRow(0).getPoblacion());
                        rec.setRFC(SetCab.getAbsRow(0).getRFC());
                        rec.setSubTotal(SetCab.getAbsRow(0).getSubTotal());
                        rec.setTels(SetCab.getAbsRow(0).getTel());
                        rec.setID_Bodega(SetCab.getAbsRow(0).getID_Bodega());
                        rec.setBodegaDesc(SetCab.getAbsRow(0).getNombre());

                        for (int i = 0; i < SetDet.getNumRows(); i++) {
                            rec.agregaPartida(SetDet.getAbsRow(i).getCantidad(),
                                    SetDet.getAbsRow(i).getID_UnidadSalida(), SetDet.getAbsRow(i).getID_Prod(),
                                    SetDet.getAbsRow(i).getID_Prod(), SetDet.getAbsRow(i).getDescripcion(),
                                    SetDet.getAbsRow(i).getPrecio(), SetDet.getAbsRow(i).getImporte(),
                                    SetDet.getAbsRow(i).getDescuento(), SetDet.getAbsRow(i).getIVA(),
                                    SetDet.getAbsRow(i).getIEPS(), SetDet.getAbsRow(i).getIVARet(),
                                    SetDet.getAbsRow(i).getISRRet(), SetDet.getAbsRow(i).getImporteDesc(),
                                    SetDet.getAbsRow(i).getImporteIVA(), SetDet.getAbsRow(i).getImporteIEPS(),
                                    SetDet.getAbsRow(i).getImporteIVARet(),
                                    SetDet.getAbsRow(i).getImporteISRRet(), SetDet.getAbsRow(i).getTotalPart(),
                                    SetDet.getAbsRow(i).getObs(), SetDet.getAbsRow(i).getID_Tipo());
                        }

                        getSesion(request).setID_Mensaje(idmensaje, mensaje);
                        irApag("/forsetiweb/compras/comp_fact_dlg_generar.jsp", request, response);
                        return;
                    } else {
                        idmensaje = 1;
                        mensaje += JUtil.Msj("GLB", "VISTA", "GLB", "SELEC-PROC", 2);
                        getSesion(request).setID_Mensaje(idmensaje, mensaje);
                        irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                        return;
                    }
                } else {
                    idmensaje = 3;
                    mensaje += JUtil.Msj("GLB", "VISTA", "GLB", "SELEC-PROC", 1);
                    getSesion(request).setID_Mensaje(idmensaje, mensaje);
                    irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                    return;
                }
            } else {
                // Solicitud de envio a procesar
                if (request.getParameter("subproceso").equals("ENVIAR")) {
                    if (moddes.equals("ORDENES") || moddes.equals("RECEPCIONES")) {
                        if (request.getParameter("fecha") == null || request.getParameter("referencia") == null
                                || request.getParameter("fecha").equals("")) {
                            idmensaje = 1;
                            mensaje += "PRECAUCION: Se debe enviar la fecha y referencia de la factura <br>";
                            getSesion(request).setID_Mensaje(idmensaje, mensaje);
                            irApag("/forsetiweb/compras/comp_fact_dlg_generar.jsp", request, response);
                            return;
                        } else if (request.getParameter("forma_pago").equals("contado")) {
                            HttpSession ses = request.getSession(true);
                            JCompFactSes rec = (JCompFactSes) ses.getAttribute("comp_fact_dlg");

                            request.setAttribute("fsipg_tipo", "compras");
                            request.setAttribute("fsipg_proc", "retiro");
                            request.setAttribute("fsipg_total", rec.getTotal());
                            request.setAttribute("fsipg_ident",
                                    getSesion(request).getSesion(idmod).getEspecial());

                            if (VerificarParametros(request, response)
                                    && VerificarPagoMult(request, response)) {
                                AgregarDesde(request, response, "CFAC", "COMP_FAC", request.getParameter("ID"),
                                        idmod4, idmod, setids);
                                return;
                            }
                            irApag("/forsetiweb/compras/comp_fact_dlg_generar.jsp", request, response);
                            return;
                        } else {
                            if (VerificarParametros(request, response)) {
                                // establece los atributos por default para compras de crdito
                                request.setAttribute("fsipg_cambio", 0F);
                                request.setAttribute("fsipg_efectivo", 0F);
                                request.setAttribute("fsipg_bancos", 0F);
                                AgregarDesde(request, response, "CFAC", "COMP_FACT", request.getParameter("ID"),
                                        idmod4, idmod, setids);
                                return;
                            }
                            irApag("/forsetiweb/compras/comp_fact_dlg_generar.jsp", request, response);
                            return;
                        }
                    }

                }
            }

        } else if (request.getParameter("proceso").equals("RECIBIR_COMPRA")) {
            // Revisa si tiene permisos
            if (!getSesion(request).getPermiso("COMP_REC_AGREGAR")) {
                idmensaje = 3;
                mensaje += MsjPermisoDenegado(request, "CEF", "COMP_REC_AGREGAR");
                getSesion(request).setID_Mensaje(idmensaje, mensaje);
                RDP("CEF", getSesion(request).getConBD(), "NA", getSesion(request).getID_Usuario(),
                        "COMP_REC_AGREGAR", "CREC||||", mensaje);
                irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                return;
            }

            if (request.getParameter("subproceso") == null) // Como el subproceso no es ENVIAR, abre la ventana del proceso de FACTURADO por primera vez
            {
                if (request.getParameter("ID") != null) {
                    String[] valoresParam = request.getParameterValues("ID");
                    if (valoresParam.length == 1) {
                        if (moddes.equals("ORDENES")) {
                            JComprasOrdenesSet SetMod = new JComprasOrdenesSet(request);
                            SetMod.m_Where = "ID_Orden = '" + p(request.getParameter("ID")) + "'";
                            SetMod.Open();

                            if (SetMod.getAbsRow(0).getStatus().equals("C")) {
                                idmensaje = 1;
                                mensaje += "PRECAUCION: Este pedido ya esta cancelado, no se puede remisionar <br>";
                                getSesion(request).setID_Mensaje(idmensaje, mensaje);
                                irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                                return;
                            }

                            if (SetMod.getAbsRow(0).getStatus().equals("F")
                                    || SetMod.getAbsRow(0).getStatus().equals("N")) {
                                idmensaje = 1;
                                mensaje += "PRECAUCION: Este pedido ya tiene una factura o remisi&oacute;n asociada, no se puede a remisionar <br>";
                                getSesion(request).setID_Mensaje(idmensaje, mensaje);
                                irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                                return;
                            }

                        } else // sale si no es orden
                            return;

                        HttpSession ses = request.getSession(true);
                        JCompFactSes rec = (JCompFactSes) ses.getAttribute("comp_fact_dlg");
                        if (rec == null) {
                            rec = new JCompFactSes(request, getSesion(request).getSesion(idmod).getEspecial(),
                                    usuario, "RECEPCIONES");
                            ses.setAttribute("comp_fact_dlg", rec);
                        } else {
                            rec.resetear(request, getSesion(request).getSesion(idmod).getEspecial(), usuario,
                                    "RECEPCIONES");
                        }

                        // Llena la factura
                        if (moddes.equals("ORDENES")) {
                            JComprasOrdenesSet SetMod = new JComprasOrdenesSet(request);
                            SetMod.m_Where = "ID_Orden = '" + p(request.getParameter("ID")) + "'";
                            SetMod.Open();

                            //rec.setFactNum(SetMod.getAbsRow(0).getNumero());
                            rec.setClave((int) SetMod.getAbsRow(0).getID_Proveedor());
                            rec.setFecha(SetMod.getAbsRow(0).getFecha());
                            rec.setNombre(SetMod.getAbsRow(0).getProveedor());
                            rec.setID_Moneda(SetMod.getAbsRow(0).getMoneda());
                            rec.setTC(SetMod.getAbsRow(0).getTC());
                            rec.setTotal(SetMod.getAbsRow(0).getTotal());
                            rec.setReferencia(SetMod.getAbsRow(0).getReferencia());
                            rec.setFechaEntrega(SetMod.getAbsRow(0).getFecha());
                        }

                        JComprasFactSetCab SetCab = new JComprasFactSetCab(request,
                                request.getParameter("tipomov"));
                        JComprasFactSetDet SetDet = new JComprasFactSetDet(request,
                                request.getParameter("tipomov"));
                        SetCab.m_Where = "ID_Factura = '" + p(request.getParameter("ID")) + "'";
                        SetDet.m_Where = "ID_Factura = '" + p(request.getParameter("ID")) + "'";
                        SetCab.Open();
                        SetDet.Open();

                        rec.setMoneda(SetCab.getAbsRow(0).getMoneda());
                        rec.setNumero((int) SetCab.getAbsRow(0).getNumero());
                        rec.setColonia(SetCab.getAbsRow(0).getColonia());
                        if (SetCab.getAbsRow(0).getCondicion() == 0)
                            rec.setForma_Pago("contado");
                        else if (SetCab.getAbsRow(0).getCondicion() == 1)
                            rec.setForma_Pago("credito");
                        else
                            rec.setForma_Pago("ninguno");
                        rec.setCP(SetCab.getAbsRow(0).getCP());
                        rec.setDescuento(SetCab.getAbsRow(0).getDescuento());
                        rec.setDireccion(SetCab.getAbsRow(0).getDireccion());
                        rec.setImporte(SetCab.getAbsRow(0).getImporte());
                        rec.setIVA(SetCab.getAbsRow(0).getIVA());
                        rec.setIEPS(SetCab.getAbsRow(0).getIEPS());
                        rec.setIVARet(SetCab.getAbsRow(0).getIVARet());
                        rec.setISRRet(SetCab.getAbsRow(0).getISRRet());
                        rec.setObs(SetCab.getAbsRow(0).getObs());
                        rec.setPoblacion(SetCab.getAbsRow(0).getPoblacion());
                        rec.setRFC(SetCab.getAbsRow(0).getRFC());
                        rec.setSubTotal(SetCab.getAbsRow(0).getSubTotal());
                        rec.setTels(SetCab.getAbsRow(0).getTel());
                        rec.setID_Bodega(SetCab.getAbsRow(0).getID_Bodega());
                        rec.setBodegaDesc(SetCab.getAbsRow(0).getNombre());

                        for (int i = 0; i < SetDet.getNumRows(); i++) {
                            rec.agregaPartida(SetDet.getAbsRow(i).getCantidad(),
                                    SetDet.getAbsRow(i).getID_UnidadSalida(), SetDet.getAbsRow(i).getID_Prod(),
                                    SetDet.getAbsRow(i).getID_Prod(), SetDet.getAbsRow(i).getDescripcion(),
                                    SetDet.getAbsRow(i).getPrecio(), SetDet.getAbsRow(i).getImporte(),
                                    SetDet.getAbsRow(i).getDescuento(), SetDet.getAbsRow(i).getIVA(),
                                    SetDet.getAbsRow(i).getIEPS(), SetDet.getAbsRow(i).getIVARet(),
                                    SetDet.getAbsRow(i).getISRRet(), SetDet.getAbsRow(i).getImporteDesc(),
                                    SetDet.getAbsRow(i).getImporteIVA(), SetDet.getAbsRow(i).getImporteIEPS(),
                                    SetDet.getAbsRow(i).getImporteIVARet(),
                                    SetDet.getAbsRow(i).getImporteISRRet(), SetDet.getAbsRow(i).getTotalPart(),
                                    SetDet.getAbsRow(i).getObs(), SetDet.getAbsRow(i).getID_Tipo());
                        }

                        getSesion(request).setID_Mensaje(idmensaje, mensaje);
                        irApag("/forsetiweb/compras/comp_fact_dlg_generar.jsp", request, response);
                        return;
                    } else {
                        idmensaje = 1;
                        mensaje += JUtil.Msj("GLB", "VISTA", "GLB", "SELEC-PROC", 2);
                        getSesion(request).setID_Mensaje(idmensaje, mensaje);
                        irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                        return;
                    }
                } else {
                    idmensaje = 3;
                    mensaje += JUtil.Msj("GLB", "VISTA", "GLB", "SELEC-PROC", 1);
                    getSesion(request).setID_Mensaje(idmensaje, mensaje);
                    irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                    return;
                }
            } else {
                // Solicitud de envio a procesar
                if (request.getParameter("subproceso").equals("ENVIAR")) {
                    if (moddes.equals("ORDENES")) {
                        if (request.getParameter("fecha") == null || request.getParameter("referencia") == null
                                || request.getParameter("fecha").equals("")) {
                            idmensaje = 1;
                            mensaje += "PRECAUCION: Se debe enviar la fecha y referencia de la remisi&oacute;n <br>";
                            getSesion(request).setID_Mensaje(idmensaje, mensaje);
                            irApag("/forsetiweb/compras/comp_fact_dlg_generar.jsp", request, response);
                            return;
                        } else {
                            if (VerificarParametros(request, response)) {
                                AgregarDesde(request, response, "CREC", "COMP_REC", request.getParameter("ID"),
                                        idmod4, idmod, setids);
                                return;
                            }
                            irApag("/forsetiweb/compras/comp_fact_dlg_generar.jsp", request, response);
                            return;
                        }
                    }
                }
            }

        } else if (request.getParameter("proceso").equals("IMPRIMIR")) {
            // Revisa si tiene permisos
            if (!getSesion(request).getPermiso(idmod)) {
                idmensaje = 3;
                mensaje += MsjPermisoDenegado(request, "CEF", idmod);
                getSesion(request).setID_Mensaje(idmensaje, mensaje);
                RDP("CEF", getSesion(request).getConBD(), "NA", getSesion(request).getID_Usuario(), idmod,
                        idmod4 + "||||", mensaje);
                irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                return;
            }

            if (request.getParameter("ID") != null) {
                String[] valoresParam = request.getParameterValues("ID");
                if (valoresParam.length == 1) {
                    if (request.getParameter("subproceso") != null
                            && request.getParameter("subproceso").equals("IMPRESION")) {
                        StringBuffer bsmensaje = new StringBuffer(254);
                        String SQLCab = "select * from ";
                        String SQLDet = "select * from ";
                        if (moddes.equals("FACTURAS")) {
                            SQLCab += "view_compras_facturas_impcab where ID_Factura = ";
                            SQLDet += "view_compras_facturas_impdet where ID_Factura = ";
                        } else if (moddes.equals("ORDENES")) {
                            SQLCab += "view_compras_ordenes_impcab where ID_Orden = ";
                            SQLDet += "view_compras_ordenes_impdet where ID_Orden = ";
                        } else if (moddes.equals("RECEPCIONES")) {
                            SQLCab += "view_compras_recepciones_impcab where ID_Recepcion = ";
                            SQLDet += "view_compras_recepciones_impdet where ID_Recepcion = ";
                        } else if (moddes.equals("GASTOS")) {
                            SQLCab += "view_compras_gastos_impcab where ID_Gasto = ";
                            SQLDet += "view_compras_gastos_impdet where ID_Gasto = ";
                        } else // DEVOLUCIONES
                        {
                            SQLCab += "view_compras_devoluciones_impcab where ID_Devolucion = ";
                            SQLDet += "view_compras_devoluciones_impdet where ID_Devolucion = ";
                        }

                        SQLCab += request.getParameter("ID");
                        SQLDet += request.getParameter("ID");

                        idmensaje = Imprimir(SQLCab, SQLDet, request.getParameter("idformato"), bsmensaje,
                                request, response);

                        if (idmensaje != -1) {
                            getSesion(request).setID_Mensaje(idmensaje, bsmensaje.toString());
                            irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                            return;
                        }
                    } else // significa que debe llamar a la ventana de formatos de impresion
                    {
                        if (moddes.equals("FACTURAS")) {
                            request.setAttribute("impresion", "CEFCompFactDlg");
                            request.setAttribute("tipo_imp", "COMP_FAC");
                            request.setAttribute("formato_default", setids.getAbsRow(0).getFormato());
                        } else if (moddes.equals("ORDENES")) {
                            request.setAttribute("impresion", "CEFCompFactDlg");
                            request.setAttribute("tipo_imp", "COMP_ORD");
                            request.setAttribute("formato_default", setids.getAbsRow(0).getFmt_Orden());
                        } else if (moddes.equals("RECEPCIONES")) {
                            request.setAttribute("impresion", "CEFCompFactDlg");
                            request.setAttribute("tipo_imp", "COMP_REC");
                            request.setAttribute("formato_default", setids.getAbsRow(0).getFmt_Recepcion());
                        } else if (moddes.equals("GASTOS")) {
                            request.setAttribute("impresion", "CEFCompFactDlg");
                            request.setAttribute("tipo_imp", "COMP_GAS");
                        } else // DEVOLUCIONES
                        {
                            request.setAttribute("impresion", "CEFCompFactDlg");
                            request.setAttribute("tipo_imp", "COMP_DEV");
                            request.setAttribute("formato_default", setids.getAbsRow(0).getFmt_Devolucion());
                        }

                        getSesion(request).setID_Mensaje(idmensaje, mensaje);
                        irApag("/forsetiweb/impresion_dlg.jsp", request, response);
                        return;
                    }
                } else {
                    idmensaje = 1;
                    mensaje += JUtil.Msj("GLB", "VISTA", "GLB", "SELEC-PROC", 2);
                    getSesion(request).setID_Mensaje(idmensaje, mensaje);
                    irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                    return;
                }
            } else {
                idmensaje = 3;
                mensaje += JUtil.Msj("GLB", "VISTA", "GLB", "SELEC-PROC", 1);
                getSesion(request).setID_Mensaje(idmensaje, mensaje);
                irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                return;
            }
        } else if (request.getParameter("proceso").equals("DEVOLVER_COMPRA")
                || request.getParameter("proceso").equals("REBAJAR_COMPRA")) {
            // Revisa si tiene permisos
            if (request.getParameter("proceso").equals("DEVOLVER_COMPRA")
                    && !getSesion(request).getPermiso("COMP_DEV_DEVOLVER")) {
                idmensaje = 3;
                mensaje += MsjPermisoDenegado(request, "CEF", "COMP_DEV_DEVOLVER");
                getSesion(request).setID_Mensaje(idmensaje, mensaje);
                RDP("CEF", getSesion(request).getConBD(), "NA", getSesion(request).getID_Usuario(),
                        "COMP_DEV_DEVOLVER", "CDEV||||", mensaje);
                irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                return;
            }
            if (request.getParameter("proceso").equals("REBAJAR_COMPRA")
                    && !getSesion(request).getPermiso("COMP_DEV_REBAJAR")) {
                idmensaje = 3;
                mensaje += MsjPermisoDenegado(request, "CEF", "COMP_DEV_REBAJAR");
                getSesion(request).setID_Mensaje(idmensaje, mensaje);
                RDP("CEF", getSesion(request).getConBD(), "NA", getSesion(request).getID_Usuario(),
                        "COMP_DEV_REBAJAR", "CDEV||||", mensaje);
                irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                return;
            }

            if (request.getParameter("subproceso") == null) // Como el subproceso no es ENVIAR ni EDIT_PART ni BORR_PART, abre la ventana del proceso de AGREGADO para agregar `por primera vez
            {
                if (request.getParameter("ID") != null) {
                    String[] valoresParam = request.getParameterValues("ID");
                    if (valoresParam.length == 1) {
                        JComprasFactSet SetMod = new JComprasFactSet(request);
                        SetMod.m_Where = "ID_Factura = '" + p(request.getParameter("ID")) + "'";
                        SetMod.Open();

                        if (SetMod.getAbsRow(0).getStatus().equals("C")) {
                            idmensaje = 1;
                            mensaje += "PRECAUCION: Esta factura ya esta cancelada, no se puede generar la devolucin <br>";
                            getSesion(request).setID_Mensaje(idmensaje, mensaje);
                            irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                            return;
                        }

                        if (request.getParameter("proceso").equals("DEVOLVER_COMPRA")) {
                            if (SetMod.getAbsRow(0).getID_PolCost() == -1
                                    || (!SetMod.getAbsRow(0).getStatus().equals("E")
                                            && setids.getAbsRow(0).getAuditarAlm())) {
                                idmensaje = 1;
                                mensaje += "PRECAUCION: Esta factura debe estar guardada, revertida, o ser factura sin movimiento al almacn. Solo se pueden devolver las facturas emitidas con movimientos al almacn <br>";
                                getSesion(request).setID_Mensaje(idmensaje, mensaje);
                                irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                                return;
                            }
                        } else // Rebajar venta
                        {
                            if (SetMod.getAbsRow(0).getID_PolCost() != -1
                                    && !SetMod.getAbsRow(0).getStatus().equals("E")
                                    && setids.getAbsRow(0).getAuditarAlm()) {
                                idmensaje = 1;
                                mensaje += "PRECAUCION: Esta factura debe estar guardada o revertida. Solo se pueden rebajar las facturas emitidas <br>";
                                getSesion(request).setID_Mensaje(idmensaje, mensaje);
                                irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                                return;
                            }
                        }

                        HttpSession ses = request.getSession(true);
                        JCompFactSes rec = (JCompDevSes) ses.getAttribute("comp_dev_dlg");
                        if (rec == null) {
                            rec = new JCompDevSes(request,
                                    getSesion(request).getSesion("COMP_FAC").getEspecial(), usuario,
                                    "DEVOLUCIONES");
                            ses.setAttribute("comp_dev_dlg", rec);
                        } else
                            rec.resetear(request, getSesion(request).getSesion("COMP_FAC").getEspecial(),
                                    usuario, "DEVOLUCIONES");

                        rec.setClave((int) SetMod.getAbsRow(0).getID_Proveedor());
                        rec.setNombre(SetMod.getAbsRow(0).getProveedor());
                        rec.setID_Moneda(SetMod.getAbsRow(0).getMoneda());
                        rec.setTC(SetMod.getAbsRow(0).getTC());
                        rec.setTotal(SetMod.getAbsRow(0).getTotal());
                        rec.setReferencia(SetMod.getAbsRow(0).getReferencia());
                        rec.setID_Factura(SetMod.getAbsRow(0).getID_Factura());
                        if (request.getParameter("proceso").equals("DEVOLVER_COMPRA"))
                            rec.setDevReb("DEV");
                        else
                            rec.setDevReb("REB");
                        JComprasFactSetCab SetCab = new JComprasFactSetCab(request, "FACTURAS");
                        JComprasFactSetDet SetDet = new JComprasFactSetDet(request, "FACTURAS"/*"AGR_DEVOL"*/);
                        SetCab.m_Where = "ID_Factura = '" + p(request.getParameter("ID")) + "'";
                        SetDet.m_Where = "ID_Factura = '" + p(request.getParameter("ID")) + "'";
                        SetCab.Open();
                        SetDet.Open();

                        rec.setMoneda(SetCab.getAbsRow(0).getMoneda());
                        rec.setNumero((int) SetCab.getAbsRow(0).getNumero());
                        rec.setColonia(SetCab.getAbsRow(0).getColonia());
                        if (SetCab.getAbsRow(0).getCondicion() == 0)
                            rec.setForma_Pago("contado");
                        else if (SetCab.getAbsRow(0).getCondicion() == 1)
                            rec.setForma_Pago("credito");
                        else
                            rec.setForma_Pago("ninguno");
                        rec.setCP(SetCab.getAbsRow(0).getCP());
                        rec.setDescuento(SetCab.getAbsRow(0).getDescuento());
                        rec.setDireccion(SetCab.getAbsRow(0).getDireccion());
                        rec.setImporte(SetCab.getAbsRow(0).getImporte());
                        rec.setIVA(SetCab.getAbsRow(0).getIVA());
                        rec.setIEPS(SetCab.getAbsRow(0).getIEPS());
                        rec.setIVARet(SetCab.getAbsRow(0).getIVARet());
                        rec.setISRRet(SetCab.getAbsRow(0).getISRRet());
                        rec.setObs(SetCab.getAbsRow(0).getObs());
                        rec.setPoblacion(SetCab.getAbsRow(0).getPoblacion());
                        rec.setRFC(SetCab.getAbsRow(0).getRFC());
                        rec.setSubTotal(SetCab.getAbsRow(0).getSubTotal());
                        rec.setTels(SetCab.getAbsRow(0).getTel());
                        rec.setID_Bodega(SetCab.getAbsRow(0).getID_Bodega());
                        rec.setBodegaDesc(SetCab.getAbsRow(0).getNombre());

                        for (int i = 0; i < SetDet.getNumRows(); i++) {
                            rec.agregaPartida(SetDet.getAbsRow(i).getCantidad(),
                                    SetDet.getAbsRow(i).getID_UnidadSalida(), SetDet.getAbsRow(i).getID_Prod(),
                                    SetDet.getAbsRow(i).getID_Prod(), SetDet.getAbsRow(i).getDescripcion(),
                                    SetDet.getAbsRow(i).getPrecio(), SetDet.getAbsRow(i).getImporte(),
                                    SetDet.getAbsRow(i).getDescuento(), SetDet.getAbsRow(i).getIVA(),
                                    SetDet.getAbsRow(i).getIEPS(), SetDet.getAbsRow(i).getIVARet(),
                                    SetDet.getAbsRow(i).getISRRet(), SetDet.getAbsRow(i).getImporteDesc(),
                                    SetDet.getAbsRow(i).getImporteIVA(), SetDet.getAbsRow(i).getImporteIEPS(),
                                    SetDet.getAbsRow(i).getImporteIVARet(),
                                    SetDet.getAbsRow(i).getImporteISRRet(), SetDet.getAbsRow(i).getTotalPart(),
                                    SetDet.getAbsRow(i).getObs(), SetDet.getAbsRow(i).getID_Tipo());
                        }

                        getSesion(request).setID_Mensaje(idmensaje, mensaje);
                        irApag("/forsetiweb/compras/comp_fact_dlg.jsp", request, response);
                        return;
                    } else {
                        idmensaje = 1;
                        mensaje += JUtil.Msj("GLB", "VISTA", "GLB", "SELEC-PROC", 2);
                        getSesion(request).setID_Mensaje(idmensaje, mensaje);
                        irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                        return;
                    }
                } else {
                    idmensaje = 3;
                    mensaje += JUtil.Msj("GLB", "VISTA", "GLB", "SELEC-PROC", 1);
                    getSesion(request).setID_Mensaje(idmensaje, mensaje);
                    irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                    return;
                }
            } else {
                // Solicitud de envio a procesar
                if (request.getParameter("subproceso").equals("ENVIAR")) {
                    if (AgregarCabeceroDev(request, response) == -1) {
                        HttpSession ses = request.getSession(true);
                        JCompFactSes rec = (JCompDevSes) ses.getAttribute("comp_dev_dlg");

                        if (rec.getForma_Pago().equals("contado")) {
                            request.setAttribute("fsipg_tipo", "compras");
                            request.setAttribute("fsipg_proc", "deposito");
                            request.setAttribute("fsipg_total", rec.getTotal());
                            request.setAttribute("fsipg_ident",
                                    getSesion(request).getSesion("COMP_FAC").getEspecial());
                            request.setAttribute("fsipg_id_concepto", 0);
                            request.setAttribute("fsipg_desc_concepto", "");
                            if (VerificarParametrosDev(request, response)
                                    && VerificarPagoMult(request, response)) {
                                AgregarDev(request, response, setids);
                                return;
                            }
                        } else if (rec.getForma_Pago().equals("credito")) {
                            request.setAttribute("fsipg_tipo", "compras");
                            if (VerificarParametrosDev(request, response)
                                    && VerificarSaldo(request, response)) {
                                AgregarDev(request, response, setids);
                                return;
                            }
                        } else //if(rec.getForma_Pago().equals("ninguno"))
                        {
                            request.setAttribute("fsipg_tipo", "compras");
                            if (VerificarParametrosDev(request, response)) {
                                AgregarDev(request, response, setids);
                                return;
                            }
                        }

                    }

                    irApag("/forsetiweb/compras/comp_fact_dlg.jsp", request, response);
                    return;

                } else if (request.getParameter("subproceso").equals("EDIT_PART")) {
                    if (AgregarCabeceroDev(request, response) == -1) {
                        if (VerificarParametrosPartidaDev(request, response))
                            EditarPartidaDev(request, response);
                    }

                    irApag("/forsetiweb/compras/comp_fact_dlg.jsp", request, response);
                    return;
                } else if (request.getParameter("subproceso").equals("BORR_PART")) {
                    if (AgregarCabeceroDev(request, response) == -1) {
                        BorrarPartidaDev(request, response);
                    }

                    irApag("/forsetiweb/compras/comp_fact_dlg.jsp", request, response);
                    return;
                }

                idmensaje = 1;
                mensaje += "PRECAUCION: No se pueden agregar partidas a una devolucion o rebaja. Intenta editar o borrar lo que no desees devolver o rebajar";
                getSesion(request).setID_Mensaje(idmensaje, mensaje);
                irApag("/forsetiweb/compras/comp_fact_dlg.jsp", request, response);
                return;
            }
        } else if (request.getParameter("proceso").equals("RASTREAR_MOVIMIENTO")) {
            // Revisa si tiene permisos
            if (!getSesion(request).getPermiso(idmod + "_CONSULTAR")) {
                idmensaje = 3;
                mensaje += MsjPermisoDenegado(request, "CEF", idmod + "_CONSULTAR");
                getSesion(request).setID_Mensaje(idmensaje, mensaje);
                RDP("CEF", getSesion(request).getConBD(), "NA", getSesion(request).getID_Usuario(),
                        idmod + "_CONSULTAR", idmod4 + "||||", mensaje);
                irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                return;
            }

            if (request.getParameter("ID") != null) {
                String[] valoresParam = request.getParameterValues("ID");
                if (valoresParam.length == 1) {
                    JRastreo rastreo = new JRastreo(request,
                            getSesion(request).getSesion(idmod)
                                    .generarTitulo(JUtil.Msj("CEF", idmod, "VISTA", "CONSULTAR_COMPRA", 3)),
                            idmod4, request.getParameter("ID"));
                    String rastreo_imp = "true";
                    request.setAttribute("rastreo_imp", rastreo_imp);
                    // Ahora pone los atributos para el jsp
                    request.setAttribute("rastreo", rastreo);
                    RDP("CEF", getSesion(request).getConBD(), "OK", getSesion(request).getID_Usuario(),
                            idmod + "_CONSULTAR", idmod4 + "|" + request.getParameter("ID") + "|"
                                    + getSesion(request).getSesion(idmod).getEspecial() + "||",
                            "");
                    irApag("/forsetiweb/rastreo_imp.jsp", request, response);
                    return;

                } else {
                    idmensaje = 1;
                    mensaje += JUtil.Msj("GLB", "VISTA", "GLB", "SELEC-PROC", 2); //"PRECAUCION: Solo se permite consultar una pliza a la vez <br>";
                    getSesion(request).setID_Mensaje(idmensaje, mensaje);
                    irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                    return;
                }
            } else {
                idmensaje = 3;
                mensaje += JUtil.Msj("GLB", "VISTA", "GLB", "SELEC-PROC", 1); //" ERROR: Se debe enviar el identificador de la pliza que se quiere consultar<br>";
                getSesion(request).setID_Mensaje(idmensaje, mensaje);
                irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                return;
            }

        } else {
            idmensaje = 3;
            mensaje += JUtil.Msj("GLB", "VISTA", "GLB", "SELEC-PROC", 3);
            getSesion(request).setID_Mensaje(idmensaje, mensaje);
            irApag("/forsetiweb/caja_mensajes.jsp", request, response);
            return;
        }

    } else // si no se mandan parametros, manda a error
    {
        idmensaje = 3;
        mensaje += JUtil.Msj("GLB", "VISTA", "GLB", "SELEC-PROC", 3);
        getSesion(request).setID_Mensaje(idmensaje, mensaje);
        irApag("/forsetiweb/caja_mensajes.jsp", request, response);
        return;
    }

}

From source file:forseti.ventas.JVenFactDlg.java

@SuppressWarnings({ "unchecked", "rawtypes" })
public void doPost(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
    super.doPost(request, response);

    String ven_fact_dlg = "";
    request.setAttribute("ven_fact_dlg", ven_fact_dlg);

    String mensaje = "";
    short idmensaje = -1;
    String usuario = getSesion(request).getID_Usuario();

    if (request.getContentType() != null
            && request.getContentType().toLowerCase().indexOf("multipart/form-data") > -1) {
        if (!getSesion(request).getRegistrado()) {
            irApag("/forsetiweb/errorAtributos.jsp", request, response);
            return;
        } else {/* w  w  w. j  a  v  a  2  s. co  m*/
            try {
                HttpSession ses = request.getSession(true);
                JFacturasXML venfactxml = (JFacturasXML) ses.getAttribute("ven_fact_xml");
                Vector archivos = new Vector();
                DiskFileUpload fu = new DiskFileUpload();
                List items = fu.parseRequest(request);
                Iterator iter = items.iterator();
                while (iter.hasNext()) {
                    FileItem item = (FileItem) iter.next();
                    if (item.isFormField())
                        venfactxml.getParametros().put(item.getFieldName(), item.getString());
                    else
                        archivos.addElement(item);
                }

                // revisa por las entidades
                JVentasEntidadesSetIdsV2 setids;
                String idmod = venfactxml.getParametros().getProperty("idmod"),
                        idmod4 = venfactxml.getParametros().getProperty("idmod4"),
                        moddes = venfactxml.getParametros().getProperty("moddes");

                request.setAttribute("idmod", idmod);
                request.setAttribute("moddes", moddes);

                setids = new JVentasEntidadesSetIdsV2(request, usuario,
                        getSesion(request).getSesion(idmod).getEspecial());
                setids.Open();

                if (setids.getNumRows() < 1) {
                    idmensaje = 3;
                    mensaje += MsjPermisoDenegado(request, "CEF", idmod);
                    getSesion(request).setID_Mensaje(idmensaje, mensaje);
                    RDP("CEF", getSesion(request).getConBD(), "NA", getSesion(request).getID_Usuario(), idmod,
                            idmod4 + "||||", mensaje);
                    irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                    return;
                }

                if (!idmod.equals("VEN_DEV")) // Si no es devolucion
                {
                    if (!getSesion(request).getPermiso(idmod + "_AGREGAR")) {
                        idmensaje = 3;
                        mensaje += MsjPermisoDenegado(request, "CEF", idmod + "_AGREGAR");
                        getSesion(request).setID_Mensaje(idmensaje, mensaje);
                        RDP("CEF", getSesion(request).getConBD(), "NA", getSesion(request).getID_Usuario(),
                                idmod + "_AGREGAR", idmod4 + "||||", mensaje);
                        irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                        return;
                    }
                } else {
                    if (!getSesion(request).getPermiso("VEN_DEV_DEVOLVER")
                            && !getSesion(request).getPermiso("VEN_DEV_REBAJAR")) {
                        idmensaje = 3;
                        mensaje += MsjPermisoDenegado(request, "CEF", "VEN_DEV_DEVOLVER") + " / "
                                + MsjPermisoDenegado(request, "CEF", "VEN_DEV_REBAJAR");
                        getSesion(request).setID_Mensaje(idmensaje, mensaje);
                        RDP("CEF", getSesion(request).getConBD(), "NA", getSesion(request).getID_Usuario(),
                                "VEN_DEV_DEVOLVER", "VDEV||||", mensaje);
                        irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                        return;
                    }
                }

                SubirArchivosCFD(request, response, venfactxml, archivos);
                return;
            } catch (FileUploadException e) {
                e.printStackTrace();
                return;
            } catch (Exception e) {
                e.printStackTrace();
                return;
            }
        }
    }

    if (request.getParameter("proceso") != null && !request.getParameter("proceso").equals("")) {
        // revisa por las entidades
        JVentasEntidadesSetIdsV2 setids;
        String idmod, idmod4, moddes;

        if (request.getParameter("tipomov").equals("FACTURAS")) {
            idmod = "VEN_FAC";
            idmod4 = "VFAC";
            moddes = "FACTURAS";
        } else if (request.getParameter("tipomov").equals("PEDIDOS")) {
            idmod = "VEN_PED";
            idmod4 = "VPED";
            moddes = "PEDIDOS";
        } else if (request.getParameter("tipomov").equals("REMISIONES")) {
            idmod = "VEN_REM";
            idmod4 = "VREM";
            moddes = "REMISIONES";
        } else if (request.getParameter("tipomov").equals("COTIZACIONES")) {
            idmod = "VEN_COT";
            idmod4 = "VCOT";
            moddes = "COTIZACIONES";
        } else {
            idmod = "VEN_DEV";
            idmod4 = "VDEV";
            moddes = "DEVOLUCIONES";
        }
        request.setAttribute("idmod", idmod);
        request.setAttribute("moddes", moddes);
        request.setAttribute("fact_xml", "VENTAS");

        setids = new JVentasEntidadesSetIdsV2(request, usuario,
                getSesion(request).getSesion(idmod).getEspecial());
        setids.Open();

        if (setids.getNumRows() < 1) {
            idmensaje = 3;
            mensaje += MsjPermisoDenegado(request, "CEF", idmod);
            getSesion(request).setID_Mensaje(idmensaje, mensaje);
            RDP("CEF", getSesion(request).getConBD(), "NA", getSesion(request).getID_Usuario(), idmod,
                    idmod4 + "||||", mensaje);
            irApag("/forsetiweb/caja_mensajes.jsp", request, response);
            return;
        }

        // Revisa por intento de intrusion (Salto de permiso de entidad)
        if (!request.getParameter("proceso").equals("AGREGAR_VENTA") && request.getParameter("ID") != null) {
            boolean intrusion = false;
            if (moddes.equals("FACTURAS")) {
                JVentasFactSetV2 set = new JVentasFactSetV2(request);
                set.m_Where = "ID_Entidad = '" + setids.getAbsRow(0).getID_Entidad() + "' and ID_Factura = '"
                        + p(request.getParameter("ID")) + "'";
                set.Open();
                if (set.getNumRows() < 1)
                    intrusion = true;
            } else if (moddes.equals("REMISIONES")) {
                JVentasRemisionesSet set = new JVentasRemisionesSet(request);
                set.m_Where = "ID_Entidad = '" + setids.getAbsRow(0).getID_Entidad() + "' and ID_Remision = '"
                        + p(request.getParameter("ID")) + "'";
                set.Open();
                if (set.getNumRows() < 1)
                    intrusion = true;
            } else if (moddes.equals("PEDIDOS")) {
                JVentasPedidosSet set = new JVentasPedidosSet(request);
                set.m_Where = "ID_Entidad = '" + setids.getAbsRow(0).getID_Entidad() + "' and ID_Pedido = '"
                        + p(request.getParameter("ID")) + "'";
                set.Open();
                if (set.getNumRows() < 1)
                    intrusion = true;
            } else if (moddes.equals("COTIZACIONES")) {
                JVentasCotizacionesSet set = new JVentasCotizacionesSet(request);
                set.m_Where = "ID_Entidad = '" + setids.getAbsRow(0).getID_Entidad() + "' and ID_Cotizacion = '"
                        + p(request.getParameter("ID")) + "'";
                set.Open();
                if (set.getNumRows() < 1)
                    intrusion = true;
            } else {
                JVentasDevolucionesSet set = new JVentasDevolucionesSet(request);
                set.m_Where = "ID_Entidad = '" + setids.getAbsRow(0).getID_Entidad() + "' and ID_Devolucion = '"
                        + p(request.getParameter("ID")) + "'";
                set.Open();
                if (set.getNumRows() < 1)
                    intrusion = true;
            }

            if (intrusion) {
                idmensaje = 3;
                mensaje += MsjPermisoDenegado(request, "CEF", idmod);
                getSesion(request).setID_Mensaje(idmensaje, mensaje);
                RDP("CEF", getSesion(request).getConBD(), "AL", getSesion(request).getID_Usuario(), idmod,
                        idmod4 + "|" + request.getParameter("ID") + "|" + setids.getAbsRow(0).getID_Entidad()
                                + "||",
                        mensaje);
                irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                return;
            }
        }

        if (request.getParameter("proceso").equals("ENLAZAR_VENTA")) {
            if (moddes.equals("FACTURAS") || moddes.equals("REMISIONES") || moddes.equals("DEVOLUCIONES")) {
                // Revisa si tiene permisos
                if (!idmod.equals("VEN_DEV")) // Si no es devolucion
                {
                    if (!getSesion(request).getPermiso(idmod + "_AGREGAR")) {
                        idmensaje = 3;
                        mensaje += MsjPermisoDenegado(request, "CEF", idmod + "_AGREGAR");
                        getSesion(request).setID_Mensaje(idmensaje, mensaje);
                        RDP("CEF", getSesion(request).getConBD(), "NA", getSesion(request).getID_Usuario(),
                                idmod + "_AGREGAR", idmod4 + "||||", mensaje);
                        irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                        return;
                    }
                } else {
                    if (!getSesion(request).getPermiso("VEN_DEV_DEVOLVER")
                            && !getSesion(request).getPermiso("VEN_DEV_REBAJAR")) {
                        idmensaje = 3;
                        mensaje += MsjPermisoDenegado(request, "CEF", "VEN_DEV_DEVOLVER") + " / "
                                + MsjPermisoDenegado(request, "CEF", "VEN_DEV_REBAJAR");
                        getSesion(request).setID_Mensaje(idmensaje, mensaje);
                        RDP("CEF", getSesion(request).getConBD(), "NA", getSesion(request).getID_Usuario(),
                                "VEN_DEV_DEVOLVER", "VDEV||||", mensaje);
                        irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                        return;
                    }
                }

                if (setids.getAbsRow(0).getCFD() || setids.getAbsRow(0).getFija()) {
                    idmensaje = 3;
                    mensaje += "ERROR: No se puede enlazar ningun CFDI porque esta entidad de venta est establecida como Fija o genera sus propios CFDIs<br>";
                    getSesion(request).setID_Mensaje(idmensaje, mensaje);
                    irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                    return;
                }

                if (request.getParameter("subproceso") == null) // Como el subproceso no es ENVIAR ni ENLAZAR,
                {
                    getSesion(request).setID_Mensaje(idmensaje, mensaje);
                    irApag("/forsetiweb/fact_dlg_xmls.jsp", request, response);
                    return;
                } else {
                    if (request.getParameter("subproceso").equals("ENLAZAR")) {
                        // Se supone que la compra aun no estar ligada a una compra existente...
                        HttpSession ses = request.getSession(true);
                        JVenFactSes rec = (JVenFactSes) ses.getAttribute("ven_fact_dlg");
                        if (rec == null) {
                            rec = new JVenFactSes(request, getSesion(request).getSesion(idmod).getEspecial(),
                                    usuario, moddes);
                            ses.setAttribute("ven_fact_dlg", rec);
                        } else
                            rec.resetear(request, getSesion(request).getSesion(idmod).getEspecial(), usuario,
                                    moddes);

                        JCFDCompSet comprobante = new JCFDCompSet(request, "VENTAS");
                        comprobante.m_Where = "UUID = '" + p(request.getParameter("uuid")) + "'";
                        comprobante.Open();

                        if (comprobante.getNumRows() < 1
                                || !comprobante.getAbsRow(0).getFSI_Tipo().equals("ENT")
                                || comprobante.getAbsRow(0).getFSI_ID() != Integer
                                        .parseInt(getSesion(request).getSesion(idmod).getEspecial())) {
                            idmensaje = 3;
                            mensaje += "ERROR: No se ha cargado el CFDI de la venta, este ya esta ligado a otra venta, o el CFDI se carg en otra entidad<br>";
                            getSesion(request).setID_Mensaje(idmensaje, mensaje);
                            irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                            return;
                        }

                        JFacturasXML venfactxml = new JFacturasXML();

                        StringBuffer sb_mensaje = new StringBuffer();
                        if (!JForsetiCFD.CargarDocumentoCFDI(request, venfactxml, sb_mensaje,
                                request.getParameter("uuid"), "I")) {
                            idmensaje = 3;
                            mensaje += sb_mensaje.toString();
                            getSesion(request).setID_Mensaje(idmensaje, mensaje);
                            irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                            return;
                        }

                        if ((venfactxml.getComprobante().getProperty("tipoDeComprobante").equals("ingreso")
                                && moddes.equals("DEVOLUCIONES"))
                                || (venfactxml.getComprobante().getProperty("tipoDeComprobante")
                                        .equals("egreso") && !moddes.equals("DEVOLUCIONES"))
                                || venfactxml.getComprobante().getProperty("tipoDeComprobante")
                                        .equals("traslado")) {
                            idmensaje = 3;
                            mensaje += "ERROR: El tipo de comprobante fiscal digital CFDI, No corresponde con el tipo de documento a enlazar.<br>";
                            getSesion(request).setID_Mensaje(idmensaje, mensaje);
                            irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                            return;
                        }

                        //Verifica que el RFC del Emisor sea igual al RFC registrado, o que sea rfc generico
                        JBDSSet set = new JBDSSet(request);
                        set.ConCat(true);
                        set.m_Where = "Nombre = 'FSIBD_" + p(getSesion(request).getBDCompania()) + "'";
                        set.Open();
                        if (!venfactxml.getRFC_Emisor().equalsIgnoreCase(set.getAbsRow(0).getRFC())) {
                            idmensaje = 3;
                            mensaje = "ERROR: El RFC del emisor en el XML no pertenece a la compaia";
                            getSesion(request).setID_Mensaje(idmensaje, mensaje.toString());
                            irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                            return;
                        }

                        if (request.getParameter("ID") == null) // Significa que debe agregar una nueva venta 
                        {
                            if (moddes.equals("DEVOLUCIONES") || moddes.equals("PEDIDOS")
                                    || moddes.equals("COTIZACIONES")) {
                                idmensaje = 1;
                                mensaje = "PRECAUCION: Solo se pueden enlazar devoluciones previamente generadas desde facturas. Selecciona una devolucin e intenta enlazar de nuevo.";
                                getSesion(request).setID_Mensaje(idmensaje, mensaje.toString());
                                irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                                return;
                            }

                            float descuento = Float
                                    .parseFloat(venfactxml.getComprobante().getProperty("descuento"));
                            if (descuento != 0.0) {
                                idmensaje = 1;
                                mensaje = "PRECAUCION: Por el momento, la carga de ventas no soportan descuentos implicitos porque en el CFDI no se especifica a que producto(s) o servicio(s) aplica cada descuento, lo que hace imposible determinar un costo verdadero.";
                                getSesion(request).setID_Mensaje(idmensaje, mensaje.toString());
                                irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                                return;
                            }

                            rec.agregaCFDI(venfactxml);

                            Date fecha = JUtil.estFechaCFDI(venfactxml.getComprobante().getProperty("fecha"));
                            rec.setFecha(fecha);
                            float tc;
                            try {
                                tc = Float.parseFloat(venfactxml.getComprobante().getProperty("TipoCambio"));
                            } catch (NumberFormatException e) {
                                tc = 1.0F;
                            }
                            rec.setTC(tc);
                            int idmon = ((tc == 1) ? 1 : 2); //cambiar por 2 cuando se inserte moneda de dolares automaticamente al instalar empresa... Para ya distribuir
                            rec.setID_Moneda((byte) idmon);
                            rec.setTotal(Float.parseFloat(venfactxml.getComprobante().getProperty("total")));
                            float iva;
                            try {
                                iva = Float.parseFloat(
                                        venfactxml.getImpuestos().getProperty("totalImpuestosTrasladados"));
                            } catch (NumberFormatException e) {
                                iva = 0.0F;
                            }
                            rec.setIVA(iva);
                            rec.setSubTotal(
                                    Float.parseFloat(venfactxml.getComprobante().getProperty("subTotal")));
                            rec.setDescuento(descuento);
                            rec.setImporte(rec.getSubTotal() - descuento);
                            rec.setReferencia("s/r");
                            rec.setFechaEntrega(fecha);
                            JPublicContMonedasSetV2 setMon = new JPublicContMonedasSetV2(request);
                            setMon.m_Where = "Clave = '" + idmon + "'";
                            setMon.Open();
                            rec.setMoneda(setMon.getAbsRow(0).getMoneda());
                            rec.setObs("Carga desde Factura Electrnica: "
                                    + venfactxml.getTFD().getProperty("UUID"));
                            rec.setID_Bodega(setids.getAbsRow(0).getID_Bodega());
                            rec.setBodegaDesc(setids.getAbsRow(0).getBodega());

                            JClientClientMasSetV2 setcli = new JClientClientMasSetV2(request);
                            setcli.m_Where = "ID_Tipo = 'CL' and ID_EntidadVenta = '"
                                    + getSesion(request).getSesion(idmod).getEspecial() + "' and RFC ~~* '"
                                    + p(venfactxml.getRFC_Receptor()) + "'";
                            setcli.Open();

                            if (setcli.getNumRows() > 0) {
                                JClientClientSetV2 setcli2 = new JClientClientSetV2(request);
                                setcli2.m_Where = "ID_Tipo = 'CL' and Clave = '"
                                        + setcli.getAbsRow(0).getID_Clave() + "'";
                                setcli2.Open();

                                rec.setClave(setcli.getAbsRow(0).getID_Clave());
                                rec.setNombre(setcli2.getAbsRow(0).getNombre());
                                rec.setRFC(venfactxml.getRFC_Emisor());
                                rec.setNumero(setcli2.getAbsRow(0).getNumero());
                                rec.setColonia(setcli.getAbsRow(0).getColonia());
                                rec.setCP(setcli.getAbsRow(0).getCP());
                                rec.setDireccion(setcli.getAbsRow(0).getDireccion());
                                rec.setPoblacion(setcli.getAbsRow(0).getPoblacion());
                                rec.setTels(setcli2.getAbsRow(0).getTel());
                                rec.setID_Vendedor(setcli.getAbsRow(0).getID_Vendedor());
                                rec.setVendedorNombre(setcli.getAbsRow(0).getVendedorNombre());
                            }

                            for (int i = 0; i < venfactxml.getConceptos().size(); i++) {
                                Properties concepto = (Properties) venfactxml.getConceptos().elementAt(i);
                                float cantidad = Float.parseFloat(concepto.getProperty("cantidad"));
                                float precio = Float.parseFloat(concepto.getProperty("valorUnitario"));
                                String unidad = concepto.getProperty("unidad");
                                String idprod = "";
                                String descripcion = concepto.getProperty("descripcion");
                                String obs = concepto.getProperty("descripcion");
                                String tipo = "";
                                float importe = Float.parseFloat(concepto.getProperty("importe"));
                                float ivapor = 0.00F, iepspor = 0.00F, ivaretpor = 0.00F, isrretpor = 0.00F,
                                        ivaimp = 0.00F, iepsimp = 0.00F, ivaretimp = 0.00F, isrretimp = 0.00F;
                                float totalPart = importe;

                                JPublicInvServInvCatalogSetV2 cat = new JPublicInvServInvCatalogSetV2(request);
                                cat.m_Where = "(Clave = '" + p(concepto.getProperty("noIdentificacion"))
                                        + "' or Codigo = '" + p(concepto.getProperty("noIdentificacion"))
                                        + "') and NoSeVende = '0' and Status = 'V'";
                                //System.out.println(cat.getSQL());
                                cat.Open();
                                if (cat.getNumRows() > 0) {
                                    idprod = cat.getAbsRow(0).getClave();
                                    descripcion = cat.getAbsRow(0).getDescripcion();
                                    tipo = cat.getAbsRow(0).getID_Tipo();
                                }
                                //System.out.println(descripcion + " " + ivapor + " " + ivaimp + " " + totalPart);
                                rec.agregaPartida(cantidad, unidad, idprod, idprod, descripcion, precio,
                                        importe, 0.00F, ivapor, iepspor, ivaretpor, isrretpor, 0.00F, ivaimp,
                                        iepsimp, ivaretimp, isrretimp, totalPart, obs, tipo);
                            }

                            rec.setUUID(venfactxml.getTFD().getProperty("UUID"));
                            rec.setTotalUUIDs(JUtil.redondear(
                                    Float.parseFloat(venfactxml.getComprobante().getProperty("total")), 2));
                            idmensaje = rec.establecerConcordancia(request, sb_mensaje);
                            rec.establecerResultados();
                            if ((rec.getTotal() - rec.getTotalUUIDs()) > 0.1
                                    || (rec.getTotal() - rec.getTotalUUIDs()) < -0.1) {
                                idmensaje = 3;
                                sb_mensaje.append(
                                        "ERROR: El total en el o los CFDI no corresponden al Total calculado en el registro a partir de estos CFDI. No se puede agregar. DOC: "
                                                + rec.getTotal() + " XML: " + rec.getTotalUUIDs());
                            }

                            getSesion(request).setID_Mensaje(idmensaje, sb_mensaje.toString());
                            irApag("/forsetiweb/ventas/ven_fact_dlg.jsp", request, response);
                            return;
                        } else // Significa que debe Enlazar a una compra existente
                        {
                            ////////////////////////////////////////////////
                            String[] valoresParam = request.getParameterValues("ID");
                            if (valoresParam.length == 1) {
                                if (moddes.equals("REMISIONES")) {
                                    JVentasRemisionesSet SetMod = new JVentasRemisionesSet(request);
                                    SetMod.m_Where = "ID_Remision = '" + p(request.getParameter("ID")) + "'";
                                    SetMod.Open();

                                    if (SetMod.getAbsRow(0).getStatus().equals("C")) {
                                        idmensaje = 1;
                                        mensaje += "PRECAUCION: Esta remisin ya esta cancelada, no se puede enlazar el CFDI<br>";
                                        getSesion(request).setID_Mensaje(idmensaje, mensaje);
                                        irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                                        return;
                                    }

                                    if (SetMod.getAbsRow(0).getStatus().equals("F")
                                            || SetMod.getAbsRow(0).getStatus().equals("N")) {
                                        idmensaje = 1;
                                        mensaje += "PRECAUCION: Esta remisin ya tiene una factura asociada, no se puede enlazar el CFDI. Debes enlazarlo a la factura<br>";
                                        getSesion(request).setID_Mensaje(idmensaje, mensaje);
                                        irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                                        return;
                                    }

                                    if (SetMod.getAbsRow(0).getID_CFD() != 0) {
                                        idmensaje = 1;
                                        mensaje += "PRECAUCION: Esta remisin ya tiene un CFDI asociado. No puedes asociar otro CFDI a la misma remisin<br>";
                                        getSesion(request).setID_Mensaje(idmensaje, mensaje);
                                        irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                                        return;
                                    }

                                    JClientClientMasSetV2 setcli = new JClientClientMasSetV2(request);
                                    setcli.m_Where = "ID_Tipo = 'CL' and ID_EntidadVenta = '"
                                            + getSesion(request).getSesion(idmod).getEspecial()
                                            + "' and ID_Clave = '" + SetMod.getAbsRow(0).getID_Cliente() + "'";
                                    setcli.Open();

                                    if (SetMod.getAbsRow(0).getTotal() != Float
                                            .parseFloat(venfactxml.getComprobante().getProperty("total"))
                                            || !setcli.getAbsRow(0).getRFC()
                                                    .equals(venfactxml.getRFC_Receptor())) {
                                        idmensaje = 1;
                                        mensaje += "PRECAUCION: Los totales o los RFCs de la remisin y el CFDI no coinciden. No se puede asociar este CFDI al registro<br>";
                                        getSesion(request).setID_Mensaje(idmensaje, mensaje);
                                        irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                                        return;
                                    }

                                } else if (moddes.equals("FACTURAS")) {
                                    JVentasFactSetV2 SetMod = new JVentasFactSetV2(request);
                                    SetMod.m_Where = "ID_Factura = '" + p(request.getParameter("ID")) + "'";
                                    SetMod.Open();

                                    if (SetMod.getAbsRow(0).getStatus().equals("C")) {
                                        idmensaje = 1;
                                        mensaje += "PRECAUCION: Esta factura ya esta cancelada, no se puede enlazar el CFDI<br>";
                                        getSesion(request).setID_Mensaje(idmensaje, mensaje);
                                        irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                                        return;
                                    }

                                    if (SetMod.getAbsRow(0).getID_CFD() != 0) {
                                        idmensaje = 1;
                                        mensaje += "PRECAUCION: Esta factura ya tiene un CFDI asociado. No puedes asociar otro CFDI a la misma factura<br>";
                                        getSesion(request).setID_Mensaje(idmensaje, mensaje);
                                        irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                                        return;
                                    }

                                    JClientClientMasSetV2 setcli = new JClientClientMasSetV2(request);
                                    setcli.m_Where = "ID_Tipo = 'CL' and ID_EntidadVenta = '"
                                            + getSesion(request).getSesion(idmod).getEspecial()
                                            + "' and ID_Clave = '" + SetMod.getAbsRow(0).getID_Cliente() + "'";
                                    setcli.Open();

                                    if (SetMod.getAbsRow(0).getTotal() != Float
                                            .parseFloat(venfactxml.getComprobante().getProperty("total"))
                                            || !setcli.getAbsRow(0).getRFC()
                                                    .equals(venfactxml.getRFC_Receptor())) {
                                        idmensaje = 1;
                                        mensaje += "PRECAUCION: Los totales o los RFCs de la factura y el CFDI no coinciden. No se puede asociar este CFDI al registro<br>";
                                        getSesion(request).setID_Mensaje(idmensaje, mensaje);
                                        irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                                        return;
                                    }

                                } else if (moddes.equals("DEVOLUCIONES")) {
                                    JVentasDevolucionesSet SetMod = new JVentasDevolucionesSet(request);
                                    SetMod.m_Where = "ID_Devolucion = '" + p(request.getParameter("ID")) + "'";
                                    SetMod.Open();

                                    if (SetMod.getAbsRow(0).getStatus().equals("C")) {
                                        idmensaje = 1;
                                        mensaje += "PRECAUCION: Esta devolucion ya esta cancelada, no se puede enlazar el CFDI<br>";
                                        getSesion(request).setID_Mensaje(idmensaje, mensaje);
                                        irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                                        return;
                                    }

                                    if (SetMod.getAbsRow(0).getID_CFD() != 0) {
                                        idmensaje = 1;
                                        mensaje += "PRECAUCION: Esta devolucion ya tiene un CFDI asociado. No puedes asociar otro CFDI a la misma compra<br>";
                                        getSesion(request).setID_Mensaje(idmensaje, mensaje);
                                        irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                                        return;
                                    }

                                    JClientClientMasSetV2 setcli = new JClientClientMasSetV2(request);
                                    setcli.m_Where = "ID_Tipo = 'CL' and ID_EntidadVenta = '"
                                            + getSesion(request).getSesion(idmod).getEspecial()
                                            + "' and ID_Clave = '" + SetMod.getAbsRow(0).getID_Cliente() + "'";
                                    setcli.Open();

                                    if (SetMod.getAbsRow(0).getTotal() != Float
                                            .parseFloat(venfactxml.getComprobante().getProperty("total"))
                                            || !setcli.getAbsRow(0).getRFC()
                                                    .equals(venfactxml.getRFC_Receptor())) {
                                        idmensaje = 1;
                                        mensaje += "PRECAUCION: Los totales o los RFCs de la devolucion y el CFDI no coinciden. No se puede asociar este CFDI al registro<br>";
                                        getSesion(request).setID_Mensaje(idmensaje, mensaje);
                                        irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                                        return;
                                    }

                                } else // sale si no es recepcion, factura gasto o devolucion 
                                    return;

                                // Aqui asocia.
                                Enlazar(request, response, moddes, idmod, idmod4);
                                return;
                            } else {
                                idmensaje = 1;
                                mensaje += JUtil.Msj("GLB", "VISTA", "GLB", "SELEC-PROC", 2);
                                getSesion(request).setID_Mensaje(idmensaje, mensaje);
                                irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                                return;
                            }

                        }

                    } else if (request.getParameter("subproceso").equals("ENVIAR")) {
                        if (AgregarRecursos(request, response) == -1) {
                            HttpSession ses = request.getSession(true);
                            JVenFactSes rec = (JVenFactSes) ses.getAttribute("ven_fact_dlg");
                            rec.setReferencia(p(request.getParameter("referencia")));

                            if (moddes.equals("FACTURAS")) {
                                if (request.getParameter("forma_pago").equals("contado")) {
                                    request.setAttribute("fsipg_tipo", "ventas");
                                    request.setAttribute("fsipg_proc", "deposito");
                                    request.setAttribute("fsipg_total", rec.getTotal());
                                    request.setAttribute("fsipg_ident",
                                            getSesion(request).getSesion(idmod).getEspecial());
                                    if (VerificarParametros(request, response)
                                            && VerificarPagoMult(request, response)) {
                                        Agregar(request, response, moddes, setids, idmod, idmod4);
                                        return;
                                    }
                                } else {
                                    if (VerificarParametros(request, response)) {
                                        request.setAttribute("fsipg_cambio", 0F);
                                        request.setAttribute("fsipg_efectivo", 0F);
                                        request.setAttribute("fsipg_bancos", 0F);
                                        Agregar(request, response, moddes, setids, idmod, idmod4);
                                        return;
                                    }
                                }
                            } else if (moddes.equals("REMISIONES")) {
                                if (VerificarParametros(request, response)) {
                                    request.setAttribute("fsipg_cambio", 0F);
                                    request.setAttribute("fsipg_efectivo", 0F);
                                    request.setAttribute("fsipg_bancos", 0F);
                                    Agregar(request, response, moddes, setids, idmod, idmod4);
                                    return;
                                }
                            } else // sale si es devolucion u orden... Las devoluciones no se pueden enlazar desde cero, solo enlaces a devoluciones creadas previamente
                                return;
                        }
                        irApag("/forsetiweb/ventas/ven_fact_dlg.jsp", request, response);
                        return;
                    }
                }
            } else // Sale si no es FACTURA, DEVOLUCION O REMISION
                return;
        } else if (request.getParameter("proceso").equals("AGREGAR_VENTA")) {
            // Revisa si tiene permisos
            if (!getSesion(request).getPermiso(idmod + "_AGREGAR")) {
                idmensaje = 3;
                mensaje += MsjPermisoDenegado(request, "CEF", idmod + "_AGREGAR");
                getSesion(request).setID_Mensaje(idmensaje, mensaje);
                RDP("CEF", getSesion(request).getConBD(), "NA", getSesion(request).getID_Usuario(),
                        idmod + "_AGREGAR", idmod4 + "||||", mensaje);
                irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                return;
            }

            if (request.getParameter("subproceso") == null) // Como el subproceso no es ENVIAR ni AGR_PART ni EDIT_PART ni BORR_PART, abre la ventana del proceso de AGREGADO para agregar `por primera vez
            {
                HttpSession ses = request.getSession(true);
                JVenFactSes rec = (JVenFactSes) ses.getAttribute("ven_fact_dlg");

                if (rec == null) {
                    rec = new JVenFactSes(request, getSesion(request).getSesion(idmod).getEspecial(), usuario,
                            moddes);
                    ses.setAttribute("ven_fact_dlg", rec);
                } else
                    rec.resetear(request, getSesion(request).getSesion(idmod).getEspecial(), usuario, moddes);

                getSesion(request).setID_Mensaje(idmensaje, mensaje);
                irApag("/forsetiweb/ventas/ven_fact_dlg.jsp", request, response);
                return;
            } else {
                // Solicitud de envio a procesar
                if (request.getParameter("subproceso").equals("ENVIAR")) {
                    if (AgregarCabecero(request, response) == -1) {
                        if (moddes.equals("FACTURAS")) {
                            HttpSession ses = request.getSession(true);
                            JVenFactSes rec = (JVenFactSes) ses.getAttribute("ven_fact_dlg");

                            if (request.getParameter("forma_pago").equals("contado")) {
                                request.setAttribute("fsipg_tipo", "ventas");
                                request.setAttribute("fsipg_proc", "deposito");
                                request.setAttribute("fsipg_total", rec.getTotal());
                                request.setAttribute("fsipg_ident",
                                        getSesion(request).getSesion(idmod).getEspecial());
                                if (VerificarParametros(request, response)
                                        && VerificarPagoMult(request, response)) {
                                    Agregar(request, response, moddes, setids, idmod, idmod4);
                                    return;
                                }

                            } else {
                                if (VerificarParametros(request, response)) {
                                    // establece los atributos por default para ventas de crdito
                                    request.setAttribute("fsipg_cambio", 0F);
                                    request.setAttribute("fsipg_efectivo", 0F);
                                    request.setAttribute("fsipg_bancos", 0F);
                                    Agregar(request, response, moddes, setids, idmod, idmod4);
                                    return;
                                }
                            }
                        } else {
                            if (VerificarParametros(request, response)) {
                                // establece los atributos por default para ventas de crdito
                                request.setAttribute("fsipg_cambio", 0F);
                                request.setAttribute("fsipg_efectivo", 0F);
                                request.setAttribute("fsipg_bancos", 0F);
                                Agregar(request, response, moddes, setids, idmod, idmod4);
                                return;
                            }
                        }
                    }

                    irApag("/forsetiweb/ventas/ven_fact_dlg.jsp", request, response);
                    return;

                } else if (request.getParameter("subproceso").equals("AGR_CLIENT")) {
                    AgregarCabecero(request, response);
                    irApag("/forsetiweb/ventas/ven_fact_dlg.jsp", request, response);
                    return;
                } else if (request.getParameter("subproceso").equals("AGR_PART")) {
                    if (AgregarCabecero(request, response) == -1) {
                        if (VerificarParametrosPartida(request, response))
                            AgregarPartida(request, response);
                    }

                    irApag("/forsetiweb/ventas/ven_fact_dlg.jsp", request, response);
                    return;
                } else if (request.getParameter("subproceso").equals("EDIT_PART")) {
                    if (AgregarCabecero(request, response) == -1) {
                        if (VerificarParametrosPartida(request, response))
                            EditarPartida(request, response);
                    }

                    irApag("/forsetiweb/ventas/ven_fact_dlg.jsp", request, response);
                    return;
                } else if (request.getParameter("subproceso").equals("BORR_PART")) {
                    if (AgregarCabecero(request, response) == -1) {
                        BorrarPartida(request, response);
                    }

                    irApag("/forsetiweb/ventas/ven_fact_dlg.jsp", request, response);
                    return;
                }
            }
        } else if (request.getParameter("proceso").equals("DATOS_EXPORTACION")) {
            // Revisa si tiene permisos
            if (!getSesion(request).getPermiso("VEN_FAC_AGREGAR")) {
                idmensaje = 3;
                mensaje += MsjPermisoDenegado(request, "CEF", "VEN_FAC_AGREGAR");
                getSesion(request).setID_Mensaje(idmensaje, mensaje);
                RDP("CEF", getSesion(request).getConBD(), "NA", getSesion(request).getID_Usuario(),
                        "VEN_FAC_AGREGAR", "VFAC||||", mensaje);
                irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                return;
            }

            if (request.getParameter("subproceso") == null) // Como el subproceso no es ENVIAR ni AGR_PART ni EDIT_PART ni BORR_PART, abre la ventana del proceso de AGREGADO para agregar `por primera vez
            {
                if (request.getParameter("ID") != null) {
                    String[] valoresParam = request.getParameterValues("ID");
                    if (valoresParam.length == 1) {
                        if (moddes.equals("FACTURAS")) {
                            JVentasFactSetV2 SetMod = new JVentasFactSetV2(request);
                            SetMod.m_Where = "ID_Factura = '" + p(request.getParameter("ID")) + "'";
                            SetMod.Open();

                            if (SetMod.getAbsRow(0).getStatus().equals("C")) {
                                idmensaje = 1;
                                mensaje += "PRECAUCION: Esta venta ya esta cancelada, no se puede gestionar informacin de exportacin<br>";
                                getSesion(request).setID_Mensaje(idmensaje, mensaje);
                                irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                                return;
                            }

                            if (setids.getAbsRow(0).getCFD() && SetMod.getAbsRow(0).getTFD() >= 2) {
                                idmensaje = 1;
                                mensaje += "PRECAUCION: Esta venta ya esta sellada. No se puede gestionar informacin de exportacin porque ya est gestionada en el complemento de la factura electrnica generada por forseti<br>";
                                getSesion(request).setID_Mensaje(idmensaje, mensaje);
                                irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                                return;
                            }

                            JClientClientMasSetV2 cli = new JClientClientMasSetV2(request);
                            cli.m_Where = "ID_Clave = '" + SetMod.getAbsRow(0).getID_Cliente() + "'";
                            cli.Open();

                            if (SetMod.getAbsRow(0).getID_Cliente() == 0 || SetMod.getAbsRow(0).getMoneda() == 1
                                    || cli.getAbsRow(0).getPais().equals("MEX")
                                    || cli.getAbsRow(0).getPedimento().equals("--")) {
                                idmensaje = 1;
                                mensaje += "PRECAUCION: Este cliente es nacional, o es un cliente extranjero con el cual no manejamos exportaciones definitivas, o en su defecto, la venta no fue realizada en moneda extranjera. No se puede gestionar informacin de exportacin<br>";
                                getSesion(request).setID_Mensaje(idmensaje, mensaje);
                                irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                                return;
                            }
                        } else // sale si no es factura
                            return;

                        getSesion(request).setID_Mensaje(idmensaje, mensaje);
                        irApag("/forsetiweb/ventas/ven_fact_dlg_datexp.jsp", request, response);
                        return;
                    } else {
                        idmensaje = 1;
                        mensaje += JUtil.Msj("GLB", "VISTA", "GLB", "SELEC-PROC", 2);
                        getSesion(request).setID_Mensaje(idmensaje, mensaje);
                        irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                        return;
                    }
                } else {
                    idmensaje = 3;
                    mensaje += JUtil.Msj("GLB", "VISTA", "GLB", "SELEC-PROC", 1);
                    getSesion(request).setID_Mensaje(idmensaje, mensaje);
                    irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                    return;
                }
            } else {
                // Solicitud de envio a procesar
                if (request.getParameter("subproceso").equals("ENVIAR")) {
                    if (VerificarParametrosDatosExportacion(request, response)) {
                        DatosExportacion(request, response);
                        return;
                    }

                    irApag("/forsetiweb/ventas/ven_fact_dlg_datexp.jsp", request, response);
                    return;
                }
            }
        } else if (request.getParameter("proceso").equals("CARGAR_VENTA")) {
            // Revisa si tiene permisos
            if (!getSesion(request).getPermiso("ADM_CFDI_CARGAR")) {
                idmensaje = 3;
                mensaje += MsjPermisoDenegado(request, "CEF", "ADM_CFDI_CARGAR");
                getSesion(request).setID_Mensaje(idmensaje, mensaje);
                RDP("CEF", getSesion(request).getConBD(), "NA", getSesion(request).getID_Usuario(),
                        "ADM_CFDI_CARGAR", idmod4 + "||||", mensaje);
                irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                return;
            }

            if (setids.getAbsRow(0).getCFD() || setids.getAbsRow(0).getFija()) {
                idmensaje = 3;
                mensaje += "ERROR: No se puede cargar ningun CFDI porque esta entidad de venta est establecida como Fija o genera sus propios CFDIs<br>";
                getSesion(request).setID_Mensaje(idmensaje, mensaje);
                irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                return;
            }

            Integer subir_archivos = new Integer(2);
            request.setAttribute("subir_archivos", subir_archivos);

            HttpSession ses = request.getSession(true);
            JFacturasXML rec = (JFacturasXML) ses.getAttribute("ven_fact_xml");

            if (rec == null) {
                rec = new JFacturasXML();
                ses.setAttribute("ven_fact_xml", rec);
            } else {
                rec = null;
                rec = new JFacturasXML();
                ses.setAttribute("ven_fact_xml", rec);
            }

            getSesion(request).setID_Mensaje(idmensaje, mensaje);
            irApag("/forsetiweb/subir_archivos.jsp?verif=/servlet/CEFVenFactDlg&archivo_1=xml&archivo_2=pdf&proceso=CARGAR_VENTA&subproceso=ENVIAR&moddes="
                    + moddes + "&idmod=" + idmod + "&idmod4=" + idmod4, request, response);
            return;

        } else if (request.getParameter("proceso").equals("SELLAR_VENTA")) {
            // Revisa si tiene permisos

            if (!idmod.equals("VEN_DEV")) // Si no es devolucion
            {
                if (!getSesion(request).getPermiso(idmod + "_AGREGAR")) {
                    idmensaje = 3;
                    mensaje += MsjPermisoDenegado(request, "CEF", idmod + "_AGREGAR");
                    getSesion(request).setID_Mensaje(idmensaje, mensaje);
                    RDP("CEF", getSesion(request).getConBD(), "NA", getSesion(request).getID_Usuario(),
                            idmod + "_AGREGAR", idmod4 + "||||", mensaje);
                    irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                    return;
                }
            } else {
                if (!getSesion(request).getPermiso("VEN_DEV_DEVOLVER")
                        && !getSesion(request).getPermiso("VEN_DEV_REBAJAR")) {
                    idmensaje = 3;
                    mensaje += MsjPermisoDenegado(request, "CEF", "VEN_DEV_DEVOLVER") + " / "
                            + MsjPermisoDenegado(request, "CEF", "VEN_DEV_REBAJAR");
                    getSesion(request).setID_Mensaje(idmensaje, mensaje);
                    RDP("CEF", getSesion(request).getConBD(), "NA", getSesion(request).getID_Usuario(),
                            "VEN_DEV_DEVOLVER", "VDEV||||", mensaje);
                    irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                    return;
                }
            }

            if (request.getParameter("ID") != null) {
                String[] valoresParam = request.getParameterValues("ID");
                if (valoresParam.length == 1) {
                    if (setids.getAbsRow(0).getCFD() == false) {
                        idmensaje = 1;
                        mensaje += "PRECAUCION: Esta entidad de venta no est&aacute; establecida como CFDI. No se puede sellar el registro<br>";
                        getSesion(request).setID_Mensaje(idmensaje, mensaje);
                        irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                        return;
                    }

                    if (moddes.equals("FACTURAS")) {
                        JVentasFactSetV2 SetMod = new JVentasFactSetV2(request);
                        SetMod.m_Where = "ID_Factura = '" + p(request.getParameter("ID")) + "'";
                        SetMod.Open();

                        if (SetMod.getAbsRow(0).getTFD() == 3 || SetMod.getAbsRow(0).getStatus().equals("C")) {
                            idmensaje = 1;
                            mensaje += "PRECAUCION: Este registro ya est sellado o cancelado <br>";
                            getSesion(request).setID_Mensaje(idmensaje, mensaje);
                            irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                            return;
                        }

                        StringBuffer sb_mensaje = new StringBuffer(254);
                        idmensaje = generarCFDI(request, response, "FACTURAS",
                                Integer.parseInt(request.getParameter("ID")),
                                Long.toString(SetMod.getAbsRow(0).getID_Cliente()), setids,
                                SetMod.getAbsRow(0).getTFD(), sb_mensaje);
                        mensaje = sb_mensaje.toString();

                        getSesion(request).setID_Mensaje(idmensaje, mensaje);
                        irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                        return;
                    } else if (moddes.equals("REMISIONES")) {
                        JVentasRemisionesSet SetMod = new JVentasRemisionesSet(request);
                        SetMod.m_Where = "ID_Remision = '" + p(request.getParameter("ID")) + "'";
                        SetMod.Open();

                        if (SetMod.getAbsRow(0).getTFD() == 3 || SetMod.getAbsRow(0).getStatus().equals("C")) {
                            idmensaje = 1;
                            mensaje += "PRECAUCION: Esta remisi&oacute;n ya est&aacute; sellada o cancelada<br>";
                            getSesion(request).setID_Mensaje(idmensaje, mensaje);
                            irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                            return;
                        }

                        StringBuffer sb_mensaje = new StringBuffer(254);
                        idmensaje = generarCFDI(request, response, "REMISIONES",
                                Integer.parseInt(request.getParameter("ID")),
                                Long.toString(SetMod.getAbsRow(0).getID_Cliente()), setids,
                                SetMod.getAbsRow(0).getTFD(), sb_mensaje);
                        mensaje = sb_mensaje.toString();

                        getSesion(request).setID_Mensaje(idmensaje, mensaje);
                        irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                        return;
                    } else if (moddes.equals("DEVOLUCIONES")) {
                        JVentasDevolucionesSet SetMod = new JVentasDevolucionesSet(request);
                        SetMod.m_Where = "ID_Devolucion = '" + p(request.getParameter("ID")) + "'";
                        SetMod.Open();

                        if (SetMod.getAbsRow(0).getTFD() == 3 || SetMod.getAbsRow(0).getStatus().equals("C")) {
                            idmensaje = 1;
                            mensaje += "PRECAUCION: Este registro ya esta sellado o cancelada<br>";
                            getSesion(request).setID_Mensaje(idmensaje, mensaje);
                            irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                            return;
                        }

                        StringBuffer sb_mensaje = new StringBuffer(254);
                        idmensaje = generarCFDI(request, response, "DEVOLUCIONES",
                                Integer.parseInt(request.getParameter("ID")),
                                Long.toString(SetMod.getAbsRow(0).getID_Cliente()), setids,
                                SetMod.getAbsRow(0).getTFD(), sb_mensaje);
                        mensaje = sb_mensaje.toString();

                        getSesion(request).setID_Mensaje(idmensaje, mensaje);
                        irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                        return;
                    } else
                        return;
                } else {
                    idmensaje = 1;
                    mensaje += JUtil.Msj("GLB", "VISTA", "GLB", "SELEC-PROC", 2); //"PRECAUCION: Solo se permite consultar una pliza a la vez <br>";
                    getSesion(request).setID_Mensaje(idmensaje, mensaje);
                    irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                    return;
                }
            } else {
                idmensaje = 3;
                mensaje += JUtil.Msj("GLB", "VISTA", "GLB", "SELEC-PROC", 1); //"PRECAUCION: Solo se permite consultar una pliza a la vez <br>";
                getSesion(request).setID_Mensaje(idmensaje, mensaje);
                irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                return;
            }
        } else if (request.getParameter("proceso").equals("XML_VENTA")) {
            // Revisa si tiene permisos
            if (!getSesion(request).getPermiso(idmod)) {
                idmensaje = 3;
                mensaje += MsjPermisoDenegado(request, "CEF", idmod);
                getSesion(request).setID_Mensaje(idmensaje, mensaje);
                RDP("CEF", getSesion(request).getConBD(), "NA", getSesion(request).getID_Usuario(), idmod,
                        idmod4 + "||||", mensaje);
                irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                return;
            }

            if (request.getParameter("ID") != null) {
                String[] valoresParam = request.getParameterValues("ID");
                if (valoresParam.length == 1) {
                    if (moddes.equals("FACTURAS")) {
                        JVentasFactSetV2 SetMod = new JVentasFactSetV2(request);
                        SetMod.m_Where = "ID_Factura = '" + p(request.getParameter("ID")) + "'";
                        SetMod.Open();

                        if (SetMod.getAbsRow(0).getTFD() != 3 || SetMod.getAbsRow(0).getID_CFD() == 0) {
                            idmensaje = 1;
                            mensaje += "PRECAUCION: Esta factura no est&aacute; completamente sellada, no hay nada que bajar <br>";
                            getSesion(request).setID_Mensaje(idmensaje, mensaje);
                            irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                            return;
                        }

                        JCFDCompSet cfd = new JCFDCompSet(request, "VENTAS");
                        cfd.m_Where = "ID_CFD = '" + SetMod.getAbsRow(0).getID_CFD() + "'";
                        cfd.Open();

                        String nombre, destino;

                        if (cfd.getNumRows() > 0)
                            nombre = "/usr/local/forseti/emp/" + getSesion(request).getBDCompania()
                                    + "/ven/TFDs/" + cfd.getAbsRow(0).getUUID() + ".xml";
                        else // Es CFDI generado internamente
                        {
                            if (SetMod.getAbsRow(0).getStatus().equals("C"))
                                nombre = "/usr/local/forseti/emp/" + getSesion(request).getBDCompania()
                                        + "/TFDs/CANCEL_FAC-" + request.getParameter("ID") + ".xml";
                            else
                                nombre = "/usr/local/forseti/emp/" + getSesion(request).getBDCompania()
                                        + "/TFDs/SIGN_FAC-" + request.getParameter("ID") + ".xml";
                        }

                        destino = "FAC-" + SetMod.getAbsRow(0).getID_Entidad() + "-"
                                + SetMod.getAbsRow(0).getNumero() + ".xml";

                        JBajarArchivo fd = new JBajarArchivo();

                        fd.doDownload(response, getServletConfig().getServletContext(), nombre, destino);

                        idmensaje = 0;
                        mensaje = "La factura se bajo satisfactoriamente";
                        return;
                    } else if (moddes.equals("REMISIONES")) {
                        JVentasRemisionesSet SetMod = new JVentasRemisionesSet(request);
                        SetMod.m_Where = "ID_Remision = '" + p(request.getParameter("ID")) + "'";
                        SetMod.Open();

                        if (SetMod.getAbsRow(0).getTFD() != 3 || SetMod.getAbsRow(0).getID_CFD() == 0) {
                            idmensaje = 1;
                            mensaje += "PRECAUCION: Esta remisi&oacute;n no est&aacute; completamente sellada, no hay nada que bajar <br>";
                            getSesion(request).setID_Mensaje(idmensaje, mensaje);
                            irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                            return;
                        }

                        JCFDCompSet cfd = new JCFDCompSet(request, "VENTAS");
                        cfd.m_Where = "ID_CFD = '" + SetMod.getAbsRow(0).getID_CFD() + "'";
                        cfd.Open();

                        String nombre, destino;

                        if (cfd.getNumRows() > 0)
                            nombre = "/usr/local/forseti/emp/" + getSesion(request).getBDCompania()
                                    + "/ven/TFDs/" + cfd.getAbsRow(0).getUUID() + ".xml";
                        else {
                            if (SetMod.getAbsRow(0).getStatus().equals("C"))
                                nombre = "/usr/local/forseti/emp/" + getSesion(request).getBDCompania()
                                        + "/TFDs/CANCEL_REM-" + request.getParameter("ID") + ".xml";
                            else
                                nombre = "/usr/local/forseti/emp/" + getSesion(request).getBDCompania()
                                        + "/TFDs/SIGN_REM-" + request.getParameter("ID") + ".xml";
                        }

                        destino = "REM-" + SetMod.getAbsRow(0).getID_Entidad() + "-"
                                + SetMod.getAbsRow(0).getNumero() + ".xml";
                        JBajarArchivo fd = new JBajarArchivo();

                        fd.doDownload(response, getServletConfig().getServletContext(), nombre, destino);

                        idmensaje = 0;
                        mensaje = "La remisi&oacute;n se bajo satisfactoriamente";
                        return;
                    } else if (moddes.equals("DEVOLUCIONES")) {
                        JVentasDevolucionesSet SetMod = new JVentasDevolucionesSet(request);
                        SetMod.m_Where = "ID_Devolucion = '" + p(request.getParameter("ID")) + "'";
                        SetMod.Open();

                        if (SetMod.getAbsRow(0).getTFD() != 3 || SetMod.getAbsRow(0).getID_CFD() == 0) {
                            idmensaje = 1;
                            mensaje += "PRECAUCION: Esta dev no est&aacute; completamente sellada, no hay nada que bajar <br>";
                            getSesion(request).setID_Mensaje(idmensaje, mensaje);
                            irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                            return;
                        }

                        JCFDCompSet cfd = new JCFDCompSet(request, "VENTAS");
                        cfd.m_Where = "ID_CFD = '" + SetMod.getAbsRow(0).getID_CFD() + "'";
                        cfd.Open();

                        String nombre, destino;

                        if (cfd.getNumRows() > 0)
                            nombre = "/usr/local/forseti/emp/" + getSesion(request).getBDCompania()
                                    + "/ven/TFDs/" + cfd.getAbsRow(0).getUUID() + ".xml";
                        else {
                            if (SetMod.getAbsRow(0).getStatus().equals("C"))
                                nombre = "/usr/local/forseti/emp/" + getSesion(request).getBDCompania()
                                        + "/TFDs/CANCEL_DSV-" + request.getParameter("ID") + ".xml";
                            else
                                nombre = "/usr/local/forseti/emp/" + getSesion(request).getBDCompania()
                                        + "/TFDs/SIGN_DSV-" + request.getParameter("ID") + ".xml";
                        }

                        destino = "DSV-" + SetMod.getAbsRow(0).getID_Entidad() + "-"
                                + SetMod.getAbsRow(0).getNumero() + ".xml";
                        JBajarArchivo fd = new JBajarArchivo();

                        fd.doDownload(response, getServletConfig().getServletContext(), nombre, destino);

                        idmensaje = 0;
                        mensaje = "La devolucion se bajo satisfactoriamente";
                        return;
                    }
                } else {
                    idmensaje = 1;
                    mensaje += JUtil.Msj("GLB", "VISTA", "GLB", "SELEC-PROC", 2); //"PRECAUCION: Solo se permite consultar una pliza a la vez <br>";
                    getSesion(request).setID_Mensaje(idmensaje, mensaje);
                    irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                    return;
                }
            } else {
                idmensaje = 3;
                mensaje += JUtil.Msj("GLB", "VISTA", "GLB", "SELEC-PROC", 1); //"PRECAUCION: Solo se permite consultar una pliza a la vez <br>";
                getSesion(request).setID_Mensaje(idmensaje, mensaje);
                irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                return;
            }

        } else if (request.getParameter("proceso").equals("ENVIAR_VENTA")) {
            // Revisa si tiene permisos
            if (!getSesion(request).getPermiso(idmod)) {
                idmensaje = 3;
                mensaje += MsjPermisoDenegado(request, "CEF", idmod);
                getSesion(request).setID_Mensaje(idmensaje, mensaje);
                RDP("CEF", getSesion(request).getConBD(), "NA", getSesion(request).getID_Usuario(), idmod,
                        idmod4 + "||||", mensaje);
                irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                return;
            }

            if (request.getParameter("ID") != null) {
                String[] valoresParam = request.getParameterValues("ID");
                if (valoresParam.length == 1) {
                    if (moddes.equals("FACTURAS")) {
                        JVentasFactSetV2 SetMod = new JVentasFactSetV2(request);
                        SetMod.m_Where = "ID_Factura = '" + p(request.getParameter("ID")) + "'";
                        SetMod.Open();

                        if (SetMod.getAbsRow(0).getTFD() != 3 || SetMod.getAbsRow(0).getID_Cliente() == 0) {
                            idmensaje = 1;
                            mensaje += "PRECAUCION: Esta factura no est&aacute; completamente sellada, o es de mostrador. No hay nada que enviar <br>";
                            getSesion(request).setID_Mensaje(idmensaje, mensaje);
                            irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                            return;
                        }

                        JClientClientSetV2 set = new JClientClientSetV2(request);
                        set.m_Where = "Clave = '" + SetMod.getAbsRow(0).getID_Cliente() + "'";
                        set.Open();
                        if (set.getAbsRow(0).getSMTP() == 0) // Maneja smtp manual o automtico
                        {
                            idmensaje = 1;
                            mensaje += "PRECAUCION: Este cliente no esta confgurado para recibir sus cfdi por correo <br>";
                            getSesion(request).setID_Mensaje(idmensaje, mensaje);
                            irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                            return;
                        }

                        JFsiSMTPClient smtp = new JFsiSMTPClient();
                        smtp.enviarCFDIMPE(request, "FAC", request.getParameter("ID"), "",
                                set.getAbsRow(0).getNombre(), set.getAbsRow(0).getEMail());
                        if (smtp.getStatusSMTP() == JFsiSMTPClient.ERROR) {
                            idmensaje = 3;
                            mensaje += "ERROR: " + smtp.getError();
                            getSesion(request).setID_Mensaje(idmensaje, mensaje);
                            irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                            return;
                        }

                        getSesion(request).setID_Mensaje((short) 0,
                                "El correo se ha mandado satisfactoriamente");
                        irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                        return;
                    } else if (moddes.equals("REMISIONES")) {
                        JVentasRemisionesSet SetMod = new JVentasRemisionesSet(request);
                        SetMod.m_Where = "ID_Remision = '" + p(request.getParameter("ID")) + "'";
                        SetMod.Open();

                        if (SetMod.getAbsRow(0).getTFD() != 3 || SetMod.getAbsRow(0).getID_Cliente() == 0) {
                            idmensaje = 1;
                            mensaje += "PRECAUCION: Esta remision no est&aacute; completamente sellada, o es de mostrador. No hay nada que enviar <br>";
                            getSesion(request).setID_Mensaje(idmensaje, mensaje);
                            irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                            return;
                        }

                        JClientClientSetV2 set = new JClientClientSetV2(request);
                        set.m_Where = "Clave = '" + SetMod.getAbsRow(0).getID_Cliente() + "'";
                        set.Open();
                        if (set.getAbsRow(0).getSMTP() == 0) // Maneja smtp manual o automtico
                        {
                            idmensaje = 1;
                            mensaje += "PRECAUCION: Este cliente no esta confgurado para recibir sus cfdi por correo <br>";
                            getSesion(request).setID_Mensaje(idmensaje, mensaje);
                            irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                            return;
                        }

                        JFsiSMTPClient smtp = new JFsiSMTPClient();
                        smtp.enviarCFDIMPE(request, "REM", request.getParameter("ID"), "",
                                set.getAbsRow(0).getNombre(), set.getAbsRow(0).getEMail());
                        if (smtp.getStatusSMTP() == JFsiSMTPClient.ERROR) {
                            idmensaje = 3;
                            mensaje += "ERROR: " + smtp.getError();
                            getSesion(request).setID_Mensaje(idmensaje, mensaje);
                            irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                            return;
                        }

                        getSesion(request).setID_Mensaje((short) 0,
                                "El correo se ha mandado satisfactoriamente");
                        irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                        return;
                    } else if (moddes.equals("DEVOLUCIONES")) {
                        JVentasDevolucionesSet SetMod = new JVentasDevolucionesSet(request);
                        SetMod.m_Where = "ID_Devolucion = '" + p(request.getParameter("ID")) + "'";
                        SetMod.Open();

                        if (SetMod.getAbsRow(0).getTFD() != 3 || SetMod.getAbsRow(0).getID_Cliente() == 0) {
                            idmensaje = 1;
                            mensaje += "PRECAUCION: Esta devolucion/rebaja no est&aacute; completamente sellada, o es de mostrador. No hay nada que enviar <br>";
                            getSesion(request).setID_Mensaje(idmensaje, mensaje);
                            irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                            return;
                        }

                        JClientClientSetV2 set = new JClientClientSetV2(request);
                        set.m_Where = "Clave = '" + SetMod.getAbsRow(0).getID_Cliente() + "'";
                        set.Open();
                        if (set.getAbsRow(0).getSMTP() == 0) // Maneja smtp manual o automtico
                        {
                            idmensaje = 1;
                            mensaje += "PRECAUCION: Este cliente no esta confgurado para recibir sus cfdi por correo <br>";
                            getSesion(request).setID_Mensaje(idmensaje, mensaje);
                            irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                            return;
                        }

                        JFsiSMTPClient smtp = new JFsiSMTPClient();
                        smtp.enviarCFDIMPE(request, "DSV", request.getParameter("ID"), "",
                                set.getAbsRow(0).getNombre(), set.getAbsRow(0).getEMail());
                        if (smtp.getStatusSMTP() == JFsiSMTPClient.ERROR) {
                            idmensaje = 3;
                            mensaje += "ERROR: " + smtp.getError();
                            getSesion(request).setID_Mensaje(idmensaje, mensaje);
                            irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                            return;
                        }

                        getSesion(request).setID_Mensaje((short) 0,
                                "El correo se ha mandado satisfactoriamente");
                        irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                        return;
                    }
                } else {
                    idmensaje = 1;
                    mensaje += JUtil.Msj("GLB", "VISTA", "GLB", "SELEC-PROC", 2); //"PRECAUCION: Solo se permite consultar una pliza a la vez <br>";
                    getSesion(request).setID_Mensaje(idmensaje, mensaje);
                    irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                    return;
                }
            } else {
                idmensaje = 3;
                mensaje += JUtil.Msj("GLB", "VISTA", "GLB", "SELEC-PROC", 1); //"PRECAUCION: Solo se permite consultar una pliza a la vez <br>";
                getSesion(request).setID_Mensaje(idmensaje, mensaje);
                irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                return;
            }

        } else if (request.getParameter("proceso").equals("PDF_VENTA")) {
            // Revisa si tiene permisos
            if (!getSesion(request).getPermiso(idmod)) {
                idmensaje = 3;
                mensaje += MsjPermisoDenegado(request, "CEF", idmod);
                getSesion(request).setID_Mensaje(idmensaje, mensaje);
                RDP("CEF", getSesion(request).getConBD(), "NA", getSesion(request).getID_Usuario(), idmod,
                        idmod4 + "||||", mensaje);
                irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                return;
            }

            if (request.getParameter("ID") != null) {
                String[] valoresParam = request.getParameterValues("ID");
                if (valoresParam.length == 1) {
                    if (moddes.equals("FACTURAS")) {
                        JVentasFactSetV2 SetMod = new JVentasFactSetV2(request);
                        SetMod.m_Where = "ID_Factura = '" + p(request.getParameter("ID")) + "'";
                        SetMod.Open();

                        if (SetMod.getAbsRow(0).getTFD() != 3 || SetMod.getAbsRow(0).getID_CFD() == 0) {
                            idmensaje = 1;
                            mensaje += "PRECAUCION: Esta factura no esta completamente sellada, no hay nada que bajar <br>";
                            getSesion(request).setID_Mensaje(idmensaje, mensaje);
                            irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                            return;
                        }

                        JCFDCompSet cfd = new JCFDCompSet(request, "VENTAS");
                        cfd.m_Where = "ID_CFD = '" + SetMod.getAbsRow(0).getID_CFD() + "'";
                        cfd.Open();

                        String nombre, destino;

                        if (cfd.getNumRows() > 0)
                            nombre = "/usr/local/forseti/emp/" + getSesion(request).getBDCompania()
                                    + "/ven/PDFs/" + cfd.getAbsRow(0).getUUID() + ".pdf";
                        else
                            nombre = "/usr/local/forseti/emp/" + getSesion(request).getBDCompania()
                                    + "/PDFs/FAC-" + request.getParameter("ID") + ".pdf";

                        destino = "FAC-" + SetMod.getAbsRow(0).getID_Entidad() + "-"
                                + SetMod.getAbsRow(0).getNumero() + ".pdf";
                        JBajarArchivo fd = new JBajarArchivo();

                        fd.doDownload(response, getServletConfig().getServletContext(), nombre, destino);

                        idmensaje = 0;
                        mensaje = "La factura se bajo satisfactoriamente";
                        return;
                    } else if (moddes.equals("REMISIONES")) {
                        JVentasRemisionesSet SetMod = new JVentasRemisionesSet(request);
                        SetMod.m_Where = "ID_Remision = '" + p(request.getParameter("ID")) + "'";
                        SetMod.Open();

                        if (SetMod.getAbsRow(0).getTFD() != 3 || SetMod.getAbsRow(0).getID_CFD() == 0) {
                            idmensaje = 1;
                            mensaje += "PRECAUCION: Esta remisi&oacute;n no est&aacute; completamente sellada, no hay nada que bajar <br>";
                            getSesion(request).setID_Mensaje(idmensaje, mensaje);
                            irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                            return;
                        }

                        JCFDCompSet cfd = new JCFDCompSet(request, "VENTAS");
                        cfd.m_Where = "ID_CFD = '" + SetMod.getAbsRow(0).getID_CFD() + "'";
                        cfd.Open();

                        String nombre, destino;

                        if (cfd.getNumRows() > 0)
                            nombre = "/usr/local/forseti/emp/" + getSesion(request).getBDCompania()
                                    + "/ven/PDFs/" + cfd.getAbsRow(0).getUUID() + ".pdf";
                        else
                            nombre = "/usr/local/forseti/emp/" + getSesion(request).getBDCompania()
                                    + "/PDFs/REM-" + request.getParameter("ID") + ".pdf";

                        destino = "REM-" + SetMod.getAbsRow(0).getID_Entidad() + "-"
                                + SetMod.getAbsRow(0).getNumero() + ".pdf";
                        JBajarArchivo fd = new JBajarArchivo();

                        fd.doDownload(response, getServletConfig().getServletContext(), nombre, destino);

                        idmensaje = 0;
                        mensaje = "La remisi&oacute;n se bajo satisfactoriamente";
                        return;
                    } else if (moddes.equals("DEVOLUCIONES")) {
                        JVentasDevolucionesSet SetMod = new JVentasDevolucionesSet(request);
                        SetMod.m_Where = "ID_Devolucion = '" + p(request.getParameter("ID")) + "'";
                        SetMod.Open();

                        if (SetMod.getAbsRow(0).getTFD() != 3 || SetMod.getAbsRow(0).getID_CFD() == 0) {
                            idmensaje = 1;
                            mensaje += "PRECAUCION: Esta devolucion no esta completamente sellada, no hay nada que bajar <br>";
                            getSesion(request).setID_Mensaje(idmensaje, mensaje);
                            irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                            return;
                        }

                        JCFDCompSet cfd = new JCFDCompSet(request, "VENTAS");
                        cfd.m_Where = "ID_CFD = '" + SetMod.getAbsRow(0).getID_CFD() + "'";
                        cfd.Open();

                        String nombre, destino;

                        if (cfd.getNumRows() > 0)
                            nombre = "/usr/local/forseti/emp/" + getSesion(request).getBDCompania()
                                    + "/ven/PDFs/" + cfd.getAbsRow(0).getUUID() + ".pdf";
                        else
                            nombre = "/usr/local/forseti/emp/" + getSesion(request).getBDCompania()
                                    + "/PDFs/DSV-" + request.getParameter("ID") + ".pdf";

                        destino = "DSV-" + SetMod.getAbsRow(0).getID_Entidad() + "-"
                                + SetMod.getAbsRow(0).getNumero() + ".pdf";
                        JBajarArchivo fd = new JBajarArchivo();

                        fd.doDownload(response, getServletConfig().getServletContext(), nombre, destino);

                        idmensaje = 0;
                        mensaje = "La devolucion se bajo satisfactoriamente";
                        return;
                    }
                } else {
                    idmensaje = 1;
                    mensaje += JUtil.Msj("GLB", "VISTA", "GLB", "SELEC-PROC", 2); //"PRECAUCION: Solo se permite consultar una pliza a la vez <br>";
                    getSesion(request).setID_Mensaje(idmensaje, mensaje);
                    irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                    return;
                }
            } else {
                idmensaje = 3;
                mensaje += JUtil.Msj("GLB", "VISTA", "GLB", "SELEC-PROC", 1); //"PRECAUCION: Solo se permite consultar una pliza a la vez <br>";
                getSesion(request).setID_Mensaje(idmensaje, mensaje);
                irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                return;
            }

        } else if (request.getParameter("proceso").equals("CAMBIAR_VENTA")) {
            // Revisa si tiene permisos
            if (!getSesion(request).getPermiso(idmod + "_CAMBIAR")) {
                idmensaje = 3;
                mensaje += MsjPermisoDenegado(request, "CEF", idmod + "_CAMBIAR");
                getSesion(request).setID_Mensaje(idmensaje, mensaje);
                RDP("CEF", getSesion(request).getConBD(), "NA", getSesion(request).getID_Usuario(),
                        idmod + "_CAMBIAR", idmod4 + "||||", mensaje);
                irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                return;
            }

            if (request.getParameter("subproceso") == null) // Como el subproceso no es ENVIAR ni AGR_PART ni EDIT_PART ni BORR_PART, abre la ventana del proceso de AGREGADO para agregar `por primera vez
            {
                if (request.getParameter("ID") != null) {
                    String[] valoresParam = request.getParameterValues("ID");
                    if (valoresParam.length == 1) {
                        if (moddes.equals("PEDIDOS")) {
                            JVentasPedidosSet SetMod = new JVentasPedidosSet(request);
                            SetMod.m_Where = "ID_Pedido = '" + p(request.getParameter("ID")) + "'";
                            SetMod.Open();

                            if (SetMod.getAbsRow(0).getStatus().equals("C")) {
                                idmensaje = 1;
                                mensaje += "PRECAUCION: Este pedido ya esta cancelado, no se puede cambiar <br>";
                                getSesion(request).setID_Mensaje(idmensaje, mensaje);
                                irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                                return;
                            }

                            if (SetMod.getAbsRow(0).getStatus().equals("F")
                                    || SetMod.getAbsRow(0).getStatus().equals("N")) {
                                idmensaje = 1;
                                mensaje += "PRECAUCION: Este pedido ya tiene una factura asociada, no se puede cambiar <br>";
                                getSesion(request).setID_Mensaje(idmensaje, mensaje);
                                irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                                return;
                            }

                        } else if (moddes.equals("COTIZACIONES")) {
                            JVentasCotizacionesSet SetMod = new JVentasCotizacionesSet(request);
                            SetMod.m_Where = "ID_Cotizacion = '" + p(request.getParameter("ID")) + "'";
                            SetMod.Open();

                            if (SetMod.getAbsRow(0).getStatus().equals("C")) {
                                idmensaje = 1;
                                mensaje += "PRECAUCION: Esta cotizaci&oacute;n ya esta cancelada, no se puede cambiar <br>";
                                getSesion(request).setID_Mensaje(idmensaje, mensaje);
                                irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                                return;
                            }

                            if (SetMod.getAbsRow(0).getStatus().equals("F")
                                    || SetMod.getAbsRow(0).getStatus().equals("N")) {
                                idmensaje = 1;
                                mensaje += "PRECAUCION: Esta cotizaci&oacute;n ya tiene un pedido, remisi&oacute;n o factura asociada, no se puede cambiar <br>";
                                getSesion(request).setID_Mensaje(idmensaje, mensaje);
                                irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                                return;
                            }

                        } else // sale si no es ni pedido ni cotizacion porque seria factura o remision ( se estaria violando la seguridad )
                            return;

                        HttpSession ses = request.getSession(true);
                        JVenFactSes rec = (JVenFactSes) ses.getAttribute("ven_fact_dlg");
                        if (rec == null) {
                            rec = new JVenFactSes(request, getSesion(request).getSesion(idmod).getEspecial(),
                                    usuario, moddes);
                            ses.setAttribute("ven_fact_dlg", rec);
                        } else {
                            rec.resetear(request, getSesion(request).getSesion(idmod).getEspecial(), usuario,
                                    moddes);
                        }

                        // Llena el pedido o cotizacion
                        if (moddes.equals("PEDIDOS")) {
                            JVentasPedidosSet SetMod = new JVentasPedidosSet(request);
                            SetMod.m_Where = "ID_Pedido = '" + p(request.getParameter("ID")) + "'";
                            SetMod.Open();

                            // checa si se permite la 
                            rec.setFactNum(SetMod.getAbsRow(0).getNumero());
                            rec.setClave((int) SetMod.getAbsRow(0).getID_Cliente());
                            rec.setFecha(SetMod.getAbsRow(0).getFecha());
                            rec.setNombre(SetMod.getAbsRow(0).getCliente());
                            rec.setID_Moneda(SetMod.getAbsRow(0).getMoneda());
                            rec.setTC(SetMod.getAbsRow(0).getTC());
                            rec.setTotal(SetMod.getAbsRow(0).getTotal());
                            rec.setReferencia(SetMod.getAbsRow(0).getReferencia());
                            rec.setFechaEntrega(SetMod.getAbsRow(0).getFecha());
                            rec.setID_Vendedor(SetMod.getAbsRow(0).getID_Vendedor());
                            rec.setVendedorNombre(SetMod.getAbsRow(0).getVendedorNombre());
                        } else if (moddes.equals("COTIZACIONES")) {
                            JVentasCotizacionesSet SetMod = new JVentasCotizacionesSet(request);
                            SetMod.m_Where = "ID_Cotizacion = '" + p(request.getParameter("ID")) + "'";
                            SetMod.Open();

                            // checa si se permite la 
                            rec.setFactNum(SetMod.getAbsRow(0).getNumero());
                            rec.setClave((int) SetMod.getAbsRow(0).getID_Cliente());
                            rec.setFecha(SetMod.getAbsRow(0).getFecha());
                            rec.setNombre(SetMod.getAbsRow(0).getCliente());
                            rec.setID_Moneda(SetMod.getAbsRow(0).getMoneda());
                            rec.setTC(SetMod.getAbsRow(0).getTC());
                            rec.setTotal(SetMod.getAbsRow(0).getTotal());
                            rec.setReferencia(SetMod.getAbsRow(0).getReferencia());
                            rec.setFechaEntrega(SetMod.getAbsRow(0).getFecha());
                            rec.setID_Vendedor(SetMod.getAbsRow(0).getID_Vendedor());
                            rec.setVendedorNombre(SetMod.getAbsRow(0).getVendedorNombre());
                        }
                        JVentasFactSetCabV2 SetCab = new JVentasFactSetCabV2(request,
                                request.getParameter("tipomov"));
                        JVentasFactSetDetV2 SetDet = new JVentasFactSetDetV2(request,
                                request.getParameter("tipomov"));
                        SetCab.m_Where = "ID_Factura = '" + p(request.getParameter("ID")) + "'";
                        SetDet.m_Where = "ID_Factura = '" + p(request.getParameter("ID")) + "'";
                        SetCab.Open();
                        SetDet.Open();

                        rec.setMoneda(SetCab.getAbsRow(0).getMoneda());
                        rec.setNumero((int) SetCab.getAbsRow(0).getNumero());
                        rec.setColonia(SetCab.getAbsRow(0).getColonia());
                        if (SetCab.getAbsRow(0).getCondicion() == 0)
                            rec.setForma_Pago("contado");
                        else if (SetCab.getAbsRow(0).getCondicion() == 1)
                            rec.setForma_Pago("credito");
                        else
                            rec.setForma_Pago("ninguno");
                        rec.setCP(SetCab.getAbsRow(0).getCP());
                        rec.setDescuento(SetCab.getAbsRow(0).getDescuento());
                        rec.setDireccion(SetCab.getAbsRow(0).getDireccion());
                        rec.setImporte(SetCab.getAbsRow(0).getImporte());
                        rec.setIVA(SetCab.getAbsRow(0).getIVA());
                        rec.setIEPS(SetCab.getAbsRow(0).getIEPS());
                        rec.setIVARet(SetCab.getAbsRow(0).getIVARet());
                        rec.setISRRet(SetCab.getAbsRow(0).getISRRet());
                        rec.setObs(SetCab.getAbsRow(0).getObs());
                        rec.setPoblacion(SetCab.getAbsRow(0).getPoblacion());
                        rec.setRFC(SetCab.getAbsRow(0).getRFC());
                        rec.setSubTotal(SetCab.getAbsRow(0).getSubTotal());
                        rec.setTels(SetCab.getAbsRow(0).getTel());
                        rec.setID_Bodega(SetCab.getAbsRow(0).getID_Bodega());
                        rec.setBodegaDesc(SetCab.getAbsRow(0).getNombre());

                        for (int i = 0; i < SetDet.getNumRows(); i++) {
                            rec.agregaPartida(SetDet.getAbsRow(i).getCantidad(),
                                    SetDet.getAbsRow(i).getID_UnidadSalida(), SetDet.getAbsRow(i).getID_Prod(),
                                    SetDet.getAbsRow(i).getID_Prod(), SetDet.getAbsRow(i).getDescripcion(),
                                    SetDet.getAbsRow(i).getPrecio(), SetDet.getAbsRow(i).getImporte(),
                                    SetDet.getAbsRow(i).getDescuento(), SetDet.getAbsRow(i).getIVA(),
                                    SetDet.getAbsRow(i).getIEPS(), SetDet.getAbsRow(i).getIVARet(),
                                    SetDet.getAbsRow(i).getISRRet(), SetDet.getAbsRow(i).getImporteDesc(),
                                    SetDet.getAbsRow(i).getImporteIVA(), SetDet.getAbsRow(i).getImporteIEPS(),
                                    SetDet.getAbsRow(i).getImporteIVARet(),
                                    SetDet.getAbsRow(i).getImporteISRRet(), SetDet.getAbsRow(i).getTotalPart(),
                                    SetDet.getAbsRow(i).getObs(), SetDet.getAbsRow(i).getID_Tipo());
                        }

                        getSesion(request).setID_Mensaje(idmensaje, mensaje);
                        irApag("/forsetiweb/ventas/ven_fact_dlg.jsp", request, response);
                        return;
                    } else {
                        idmensaje = 1;
                        mensaje += JUtil.Msj("GLB", "VISTA", "GLB", "SELEC-PROC", 2);
                        getSesion(request).setID_Mensaje(idmensaje, mensaje);
                        irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                        return;
                    }
                } else {
                    idmensaje = 3;
                    mensaje += JUtil.Msj("GLB", "VISTA", "GLB", "SELEC-PROC", 1);
                    getSesion(request).setID_Mensaje(idmensaje, mensaje);
                    irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                    return;
                }
            } else {
                // Solicitud de envio a procesar
                if (request.getParameter("subproceso").equals("ENVIAR")) {
                    if (AgregarCabecero(request, response) == -1) {
                        if (VerificarParametros(request, response)) {
                            // establece los atributos por default para ventas de crdito
                            request.setAttribute("fsipg_cambio", 0F);
                            request.setAttribute("fsipg_efectivo", 0F);
                            request.setAttribute("fsipg_bancos", 0F);
                            Cambiar(request, response, moddes, idmod, idmod4);
                            return;
                        }

                    }

                    irApag("/forsetiweb/ventas/ven_fact_dlg.jsp", request, response);
                    return;
                } else if (request.getParameter("subproceso").equals("AGR_CLIENT")) {
                    AgregarCabecero(request, response);
                    irApag("/forsetiweb/ventas/ven_fact_dlg.jsp", request, response);
                    return;
                } else if (request.getParameter("subproceso").equals("AGR_PART")) {
                    if (AgregarCabecero(request, response) == -1) {
                        if (VerificarParametrosPartida(request, response))
                            AgregarPartida(request, response);
                    }

                    irApag("/forsetiweb/ventas/ven_fact_dlg.jsp", request, response);
                    return;
                } else if (request.getParameter("subproceso").equals("EDIT_PART")) {
                    if (AgregarCabecero(request, response) == -1) {
                        if (VerificarParametrosPartida(request, response))
                            EditarPartida(request, response);
                    }

                    irApag("/forsetiweb/ventas/ven_fact_dlg.jsp", request, response);
                    return;
                } else if (request.getParameter("subproceso").equals("BORR_PART")) {
                    if (AgregarCabecero(request, response) == -1) {
                        BorrarPartida(request, response);
                    }

                    irApag("/forsetiweb/ventas/ven_fact_dlg.jsp", request, response);
                    return;
                }
            }

        } else if (request.getParameter("proceso").equals("CONSULTAR_VENTA")) {
            // Revisa si tiene permisos
            if (!getSesion(request).getPermiso(idmod)) {
                idmensaje = 3;
                mensaje += MsjPermisoDenegado(request, "CEF", idmod);
                getSesion(request).setID_Mensaje(idmensaje, mensaje);
                RDP("CEF", getSesion(request).getConBD(), "NA", getSesion(request).getID_Usuario(), idmod,
                        idmod4 + "||||", mensaje);
                irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                return;
            }

            if (request.getParameter("ID") != null) {
                String[] valoresParam = request.getParameterValues("ID");
                if (valoresParam.length == 1) {

                    HttpSession ses = request.getSession(true);
                    JVenFactSes rec = (JVenFactSes) ses.getAttribute("ven_fact_dlg");
                    if (rec == null) {
                        rec = new JVenFactSes(request, getSesion(request).getSesion(idmod).getEspecial(),
                                usuario, moddes);
                        ses.setAttribute("ven_fact_dlg", rec);
                    } else
                        rec.resetear(request, getSesion(request).getSesion(idmod).getEspecial(), usuario,
                                moddes);

                    // Llena la factura
                    if (moddes.equals("FACTURAS")) {
                        JVentasFactSetV2 SetMod = new JVentasFactSetV2(request);
                        SetMod.m_Where = "ID_Factura = '" + p(request.getParameter("ID")) + "'";
                        SetMod.Open();
                        rec.setFactNum(SetMod.getAbsRow(0).getNumero());
                        rec.setClave((int) SetMod.getAbsRow(0).getID_Cliente());
                        rec.setFecha(SetMod.getAbsRow(0).getFecha());
                        rec.setNombre(SetMod.getAbsRow(0).getCliente());
                        rec.setID_Moneda(SetMod.getAbsRow(0).getMoneda());
                        rec.setTC(SetMod.getAbsRow(0).getTC());
                        rec.setTotal(SetMod.getAbsRow(0).getTotal());
                        rec.setReferencia(SetMod.getAbsRow(0).getReferencia());
                        rec.setFechaEntrega(SetMod.getAbsRow(0).getFecha());
                        rec.setID_Vendedor(SetMod.getAbsRow(0).getID_Vendedor());
                        rec.setVendedorNombre(SetMod.getAbsRow(0).getVendedorNombre());
                    } else if (moddes.equals("PEDIDOS")) {
                        JVentasPedidosSet SetMod = new JVentasPedidosSet(request);
                        SetMod.m_Where = "ID_Pedido = '" + p(request.getParameter("ID")) + "'";
                        SetMod.Open();
                        rec.setFactNum(SetMod.getAbsRow(0).getNumero());
                        rec.setClave((int) SetMod.getAbsRow(0).getID_Cliente());
                        rec.setFecha(SetMod.getAbsRow(0).getFecha());
                        rec.setNombre(SetMod.getAbsRow(0).getCliente());
                        rec.setID_Moneda(SetMod.getAbsRow(0).getMoneda());
                        rec.setTC(SetMod.getAbsRow(0).getTC());
                        rec.setTotal(SetMod.getAbsRow(0).getTotal());
                        rec.setReferencia(SetMod.getAbsRow(0).getReferencia());
                        rec.setFechaEntrega(SetMod.getAbsRow(0).getFecha());
                        rec.setID_Vendedor(SetMod.getAbsRow(0).getID_Vendedor());
                        rec.setVendedorNombre(SetMod.getAbsRow(0).getVendedorNombre());
                    } else if (moddes.equals("REMISIONES")) {
                        JVentasRemisionesSet SetMod = new JVentasRemisionesSet(request);
                        SetMod.m_Where = "ID_Remision = '" + p(request.getParameter("ID")) + "'";
                        SetMod.Open();
                        rec.setFactNum(SetMod.getAbsRow(0).getNumero());
                        rec.setClave((int) SetMod.getAbsRow(0).getID_Cliente());
                        rec.setFecha(SetMod.getAbsRow(0).getFecha());
                        rec.setNombre(SetMod.getAbsRow(0).getCliente());
                        rec.setID_Moneda(SetMod.getAbsRow(0).getMoneda());
                        rec.setTC(SetMod.getAbsRow(0).getTC());
                        rec.setTotal(SetMod.getAbsRow(0).getTotal());
                        rec.setReferencia(SetMod.getAbsRow(0).getReferencia());
                        rec.setFechaEntrega(SetMod.getAbsRow(0).getFecha());
                        rec.setID_Vendedor(SetMod.getAbsRow(0).getID_Vendedor());
                        rec.setVendedorNombre(SetMod.getAbsRow(0).getVendedorNombre());
                    } else if (moddes.equals("COTIZACIONES")) {
                        JVentasCotizacionesSet SetMod = new JVentasCotizacionesSet(request);
                        SetMod.m_Where = "ID_Cotizacion = '" + p(request.getParameter("ID")) + "'";
                        SetMod.Open();
                        rec.setFactNum(SetMod.getAbsRow(0).getNumero());
                        rec.setClave((int) SetMod.getAbsRow(0).getID_Cliente());
                        rec.setFecha(SetMod.getAbsRow(0).getFecha());
                        rec.setNombre(SetMod.getAbsRow(0).getCliente());
                        rec.setID_Moneda(SetMod.getAbsRow(0).getMoneda());
                        rec.setTC(SetMod.getAbsRow(0).getTC());
                        rec.setTotal(SetMod.getAbsRow(0).getTotal());
                        rec.setReferencia(SetMod.getAbsRow(0).getReferencia());
                        rec.setFechaEntrega(SetMod.getAbsRow(0).getFecha());
                        rec.setID_Vendedor(SetMod.getAbsRow(0).getID_Vendedor());
                        rec.setVendedorNombre(SetMod.getAbsRow(0).getVendedorNombre());
                    } else if (moddes.equals("DEVOLUCIONES")) {
                        JVentasDevolucionesSet SetMod = new JVentasDevolucionesSet(request);
                        SetMod.m_Where = "ID_Devolucion = '" + p(request.getParameter("ID")) + "'";
                        SetMod.Open();
                        rec.setFactNum(SetMod.getAbsRow(0).getNumero());
                        rec.setClave((int) SetMod.getAbsRow(0).getID_Cliente());
                        rec.setFecha(SetMod.getAbsRow(0).getFecha());
                        rec.setNombre(SetMod.getAbsRow(0).getCliente());
                        rec.setID_Moneda(SetMod.getAbsRow(0).getMoneda());
                        rec.setTC(SetMod.getAbsRow(0).getTC());
                        rec.setTotal(SetMod.getAbsRow(0).getTotal());
                        rec.setReferencia(SetMod.getAbsRow(0).getReferencia());
                        rec.setFechaEntrega(SetMod.getAbsRow(0).getFecha());
                        rec.setID_Vendedor(SetMod.getAbsRow(0).getID_Vendedor());
                        rec.setVendedorNombre(SetMod.getAbsRow(0).getVendedorNombre());
                    }

                    JVentasFactSetCabV2 SetCab = new JVentasFactSetCabV2(request, moddes);
                    JVentasFactSetDetV2 SetDet = new JVentasFactSetDetV2(request, moddes);
                    SetCab.m_Where = "ID_Factura = '" + p(request.getParameter("ID")) + "'";
                    SetDet.m_Where = "ID_Factura = '" + p(request.getParameter("ID")) + "'";
                    SetCab.Open();
                    SetDet.Open();

                    rec.setMoneda(SetCab.getAbsRow(0).getMoneda());
                    rec.setNumero((int) SetCab.getAbsRow(0).getNumero());
                    rec.setColonia(SetCab.getAbsRow(0).getColonia());
                    if (SetCab.getAbsRow(0).getCondicion() == 0)
                        rec.setForma_Pago("contado");
                    else if (SetCab.getAbsRow(0).getCondicion() == 1)
                        rec.setForma_Pago("credito");
                    else
                        rec.setForma_Pago("ninguno");
                    rec.setCP(SetCab.getAbsRow(0).getCP());
                    rec.setDescuento(SetCab.getAbsRow(0).getDescuento());
                    rec.setDireccion(SetCab.getAbsRow(0).getDireccion());
                    rec.setImporte(SetCab.getAbsRow(0).getImporte());
                    rec.setIVA(SetCab.getAbsRow(0).getIVA());
                    rec.setIEPS(SetCab.getAbsRow(0).getIEPS());
                    rec.setIVARet(SetCab.getAbsRow(0).getIVARet());
                    rec.setISRRet(SetCab.getAbsRow(0).getISRRet());
                    rec.setObs(SetCab.getAbsRow(0).getObs());
                    rec.setPoblacion(SetCab.getAbsRow(0).getPoblacion());
                    rec.setRFC(SetCab.getAbsRow(0).getRFC());
                    rec.setSubTotal(SetCab.getAbsRow(0).getSubTotal());
                    rec.setTels(SetCab.getAbsRow(0).getTel());
                    rec.setID_Bodega(SetCab.getAbsRow(0).getID_Bodega());
                    rec.setBodegaDesc(SetCab.getAbsRow(0).getNombre());

                    for (int i = 0; i < SetDet.getNumRows(); i++) {
                        rec.agregaPartida(SetDet.getAbsRow(i).getCantidad(),
                                SetDet.getAbsRow(i).getID_UnidadSalida(), SetDet.getAbsRow(i).getID_Prod(),
                                SetDet.getAbsRow(i).getID_Prod(), SetDet.getAbsRow(i).getDescripcion(),
                                SetDet.getAbsRow(i).getPrecio(), SetDet.getAbsRow(i).getImporte(),
                                SetDet.getAbsRow(i).getDescuento(), SetDet.getAbsRow(i).getIVA(),
                                SetDet.getAbsRow(i).getIEPS(), SetDet.getAbsRow(i).getIVARet(),
                                SetDet.getAbsRow(i).getISRRet(), SetDet.getAbsRow(i).getImporteDesc(),
                                SetDet.getAbsRow(i).getImporteIVA(), SetDet.getAbsRow(i).getImporteIEPS(),
                                SetDet.getAbsRow(i).getImporteIVARet(), SetDet.getAbsRow(i).getImporteISRRet(),
                                SetDet.getAbsRow(i).getTotalPart(), SetDet.getAbsRow(i).getObs(),
                                SetDet.getAbsRow(i).getID_Tipo());
                    }

                    RDP("CEF", getSesion(request).getConBD(), "OK", getSesion(request).getID_Usuario(), idmod,
                            idmod4 + "|" + request.getParameter("ID") + "|"
                                    + getSesion(request).getSesion(idmod).getEspecial() + "||",
                            "");
                    getSesion(request).setID_Mensaje(idmensaje, mensaje);
                    irApag("/forsetiweb/ventas/ven_fact_dlg.jsp", request, response);
                    return;
                } else {
                    idmensaje = 1;
                    mensaje += JUtil.Msj("GLB", "VISTA", "GLB", "SELEC-PROC", 2);
                    getSesion(request).setID_Mensaje(idmensaje, mensaje);
                    irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                    return;
                }
            } else {
                idmensaje = 3;
                mensaje += JUtil.Msj("GLB", "VISTA", "GLB", "SELEC-PROC", 1);
                getSesion(request).setID_Mensaje(idmensaje, mensaje);
                irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                return;
            }

        } else if (request.getParameter("proceso").equals("CANCELAR_VENTA")) {
            // Revisa si tiene permisos
            if (!getSesion(request).getPermiso(idmod + "_CANCELAR")) {
                idmensaje = 3;
                mensaje += MsjPermisoDenegado(request, "CEF", idmod + "_CANCELAR");
                getSesion(request).setID_Mensaje(idmensaje, mensaje);
                RDP("CEF", getSesion(request).getConBD(), "NA", getSesion(request).getID_Usuario(),
                        idmod + "_CANCELAR", idmod4 + "||||", mensaje);
                irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                return;
            }

            if (request.getParameter("ID") != null) {
                String[] valoresParam = request.getParameterValues("ID");
                if (valoresParam.length == 1) {
                    if (moddes.equals("COTIZACIONES")) {
                        JVentasCotizacionesSet SetMod = new JVentasCotizacionesSet(request);
                        SetMod.m_Where = "ID_Cotizacion = '" + p(request.getParameter("ID")) + "'";
                        SetMod.Open();

                        if (SetMod.getAbsRow(0).getStatus().equals("C")) {
                            idmensaje = 1;
                            mensaje += "PRECAUCION: Esta cotizaci&oacute;n ya est&aacute; cancelada <br>";
                            getSesion(request).setID_Mensaje(idmensaje, mensaje);
                            irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                            return;
                        } else if (SetMod.getAbsRow(0).getStatus().equals("F")) {
                            idmensaje = 1;
                            mensaje += "PRECAUCION: Esta cotizaci&oacute;n ya tiene un pedido, remisi&oacute;n o factura asociada, no se puede cancelar. Primero debes cancelar el pedido, remisi&oacute;n o factura para poder cancelar la cotizaci&oacute;n <br>";
                            getSesion(request).setID_Mensaje(idmensaje, mensaje);
                            irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                            return;
                        } else {
                            CancelarFactura(request, response, "COTIZACIONES", idmod, idmod4,
                                    new StringBuffer());
                            return;
                        }
                    } else if (moddes.equals("PEDIDOS")) {
                        JVentasPedidosSet SetMod = new JVentasPedidosSet(request);
                        SetMod.m_Where = "ID_Pedido = '" + p(request.getParameter("ID")) + "'";
                        SetMod.Open();

                        if (SetMod.getAbsRow(0).getStatus().equals("C")) {
                            idmensaje = 1;
                            mensaje += "PRECAUCION: Este pedido ya est cancelado <br>";
                            getSesion(request).setID_Mensaje(idmensaje, mensaje);
                            irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                            return;
                        } else if (SetMod.getAbsRow(0).getStatus().equals("F")) {
                            idmensaje = 1;
                            mensaje += "PRECAUCION: Este pedido ya tiene una factura o remisin asociada, no se puede cancelar. Primero debes cancelar la factura o remision para poder cancelar el pedido <br>";
                            getSesion(request).setID_Mensaje(idmensaje, mensaje);
                            irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                            return;
                        } else {
                            CancelarFactura(request, response, "PEDIDOS", idmod, idmod4, new StringBuffer());
                            return;
                        }
                    } else if (moddes.equals("REMISIONES")) {
                        JVentasRemisionesSet SetMod = new JVentasRemisionesSet(request);
                        SetMod.m_Where = "ID_Remision = '" + p(request.getParameter("ID")) + "'";
                        SetMod.Open();

                        if (SetMod.getAbsRow(0).getStatus().equals("C")) {
                            idmensaje = 1;
                            mensaje += "PRECAUCION: Esta remisi&oacute;n ya esta cancelada <br>";
                            getSesion(request).setID_Mensaje(idmensaje, mensaje);
                            irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                            return;
                        } else if (SetMod.getAbsRow(0).getID_Factura() != 0) {
                            idmensaje = 1;
                            mensaje += "PRECAUCION: Esta remisi&oacute;n ya tiene una factura asociada. No se puede cancelar, primero cancela la factura para poder cancelar la remisin <br>";
                            getSesion(request).setID_Mensaje(idmensaje, mensaje);
                            irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                            return;
                        } else if (!setids.getAbsRow(0).getFijaCost() && setids.getAbsRow(0).getAuditarAlm()
                                && !SetMod.getAbsRow(0).getStatus().equals("R")) {
                            idmensaje = 1;
                            mensaje += "PRECAUCION: Esta remisi&oacute;n necesita estar revertida desde el m&oacute;dulo del almac&eacute;n para poder cancelarla <br>";
                            getSesion(request).setID_Mensaje(idmensaje, mensaje);
                            irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                            return;
                        } else {
                            StringBuffer sb_mensaje = new StringBuffer();
                            int idms = cancelarCFDI(request, response, "REMISIONES",
                                    Integer.parseInt(request.getParameter("ID")), SetMod.getAbsRow(0).getTFD(),
                                    sb_mensaje);
                            if (idms == JForsetiCFD.ERROR) // quiere decir algun tipo de error de cfd
                            {
                                idmensaje = 3;
                                mensaje += sb_mensaje.toString();
                                getSesion(request).setID_Mensaje(idmensaje, mensaje);
                                irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                                return;
                            } else {
                                CancelarFactura(request, response, "REMISIONES", idmod, idmod4, sb_mensaje);
                                return;
                            }

                        }
                    }
                    if (moddes.equals("FACTURAS")) {
                        JVentasFactSetV2 SetMod = new JVentasFactSetV2(request);
                        SetMod.m_Where = "ID_Factura = '" + p(request.getParameter("ID")) + "'";
                        SetMod.Open();
                        JVentasRemisionesSet SetRem = new JVentasRemisionesSet(request);
                        SetRem.m_Where = "ID_Factura = '" + p(request.getParameter("ID")) + "'";
                        SetRem.Open();
                        JVentasDevolucionesSet SetDev = new JVentasDevolucionesSet(request);
                        SetDev.m_Where = "ID_Factura = '" + p(request.getParameter("ID")) + "'";
                        SetDev.Open();

                        if (SetDev.getNumRows() > 0) {
                            for (int i = 0; i < SetDev.getNumRows(); i++) {
                                if (!SetDev.getAbsRow(i).getStatus().equals("C")) {
                                    idmensaje = 1;
                                    mensaje += "PRECAUCION: Esta factura tiene devoluciones asociadas sin cancelar. Primero debes cancelar las devoluciones asociadas para poder cancelar la factura <br>";
                                    getSesion(request).setID_Mensaje(idmensaje, mensaje);
                                    irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                                    return;
                                }
                            }
                        }
                        if (SetMod.getAbsRow(0).getStatus().equals("C")) {
                            idmensaje = 1;
                            mensaje += "PRECAUCION: Esta factura ya est cancelada <br>";
                            getSesion(request).setID_Mensaje(idmensaje, mensaje);
                            irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                            return;
                        } else if (SetRem.getNumRows() == 0 && SetMod.getAbsRow(0).getID_PolCost() != -1
                                && !setids.getAbsRow(0).getFijaCost() && setids.getAbsRow(0).getAuditarAlm()
                                && !SetMod.getAbsRow(0).getStatus().equals("R")) {
                            idmensaje = 1;
                            mensaje += "PRECAUCION: Esta factura necesita estar revertida desde el mdulo del almacn para poder cancelarla <br>";
                            getSesion(request).setID_Mensaje(idmensaje, mensaje);
                            irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                            return;
                        } else {
                            StringBuffer sb_mensaje = new StringBuffer();
                            int idms = cancelarCFDI(request, response, "FACTURAS",
                                    Integer.parseInt(request.getParameter("ID")), SetMod.getAbsRow(0).getTFD(),
                                    sb_mensaje);
                            if (idms == JForsetiCFD.ERROR) // quiere decir algun tipo de error de cfd
                            {
                                idmensaje = 3;
                                mensaje += sb_mensaje.toString();
                                getSesion(request).setID_Mensaje(idmensaje, mensaje);
                                irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                                return;
                            } else {
                                CancelarFactura(request, response, "FACTURAS", idmod, idmod4, sb_mensaje);
                                return;
                            }
                        }
                    } else if (moddes.equals("DEVOLUCIONES")) {
                        JVentasDevolucionesSet SetMod = new JVentasDevolucionesSet(request);
                        SetMod.m_Where = "ID_Devolucion = '" + p(request.getParameter("ID")) + "'";
                        SetMod.Open();

                        if (SetMod.getAbsRow(0).getStatus().equals("C")) {
                            idmensaje = 1;
                            mensaje += "PRECAUCION: Esta devoluci&oacute;n ya est&aacute; cancelada <br>";
                            getSesion(request).setID_Mensaje(idmensaje, mensaje);
                            irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                            return;
                        } else if (SetMod.getAbsRow(0).getDevReb().equals("DEV")
                                && !setids.getAbsRow(0).getFijaCost() && setids.getAbsRow(0).getAuditarAlm()
                                && !SetMod.getAbsRow(0).getStatus().equals("R")) {
                            idmensaje = 1;
                            mensaje += "PRECAUCION: Esta devoluci&oacute;n necesita estar revertida desde el mdulo del almacn para poder cancelarla <br>";
                            getSesion(request).setID_Mensaje(idmensaje, mensaje);
                            irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                            return;
                        } else {
                            StringBuffer sb_mensaje = new StringBuffer();
                            int idms = cancelarCFDI(request, response, "DEVOLUCIONES",
                                    Integer.parseInt(request.getParameter("ID")), SetMod.getAbsRow(0).getTFD(),
                                    sb_mensaje);
                            if (idms == JForsetiCFD.ERROR) // quiere decir algun tipo de error de cfd
                            {
                                idmensaje = 3;
                                mensaje += sb_mensaje.toString();
                                getSesion(request).setID_Mensaje(idmensaje, mensaje);
                                irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                                return;
                            } else {
                                CancelarFactura(request, response, "DEVOLUCIONES", idmod, idmod4, sb_mensaje);
                                return;
                            }
                        }

                    }

                } else {
                    idmensaje = 1;
                    mensaje += JUtil.Msj("GLB", "VISTA", "GLB", "SELEC-PROC", 2);
                    getSesion(request).setID_Mensaje(idmensaje, mensaje);
                    irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                    return;
                }
            } else {
                idmensaje = 3;
                mensaje += JUtil.Msj("GLB", "VISTA", "GLB", "SELEC-PROC", 1);
                getSesion(request).setID_Mensaje(idmensaje, mensaje);
                irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                return;
            }

        } else if (request.getParameter("proceso").equals("FACTURAR_VENTA")) {
            // Revisa si tiene permisos
            if (!getSesion(request).getPermiso("VEN_FAC_AGREGAR")) {
                idmensaje = 3;
                mensaje += MsjPermisoDenegado(request, "CEF", "VEN_FAC_AGREGAR");
                getSesion(request).setID_Mensaje(idmensaje, mensaje);
                RDP("CEF", getSesion(request).getConBD(), "NA", getSesion(request).getID_Usuario(),
                        "VEN_FAC_AGREGAR", "VFAC||||", mensaje);
                irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                return;
            }

            if (request.getParameter("subproceso") == null) // Como el subproceso no es ENVIAR, abre la ventana del proceso de FACTURADO por primera vez
            {
                if (request.getParameter("ID") != null) {
                    String[] valoresParam = request.getParameterValues("ID");
                    if (valoresParam.length == 1) {
                        if (moddes.equals("PEDIDOS")) {
                            JVentasPedidosSet SetMod = new JVentasPedidosSet(request);
                            SetMod.m_Where = "ID_Pedido = '" + p(request.getParameter("ID")) + "'";
                            SetMod.Open();

                            if (SetMod.getAbsRow(0).getStatus().equals("C")) {
                                idmensaje = 1;
                                mensaje += "PRECAUCION: Este pedido ya esta cancelado, no se puede facturar <br>";
                                getSesion(request).setID_Mensaje(idmensaje, mensaje);
                                irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                                return;
                            }

                            if (SetMod.getAbsRow(0).getStatus().equals("F")
                                    || SetMod.getAbsRow(0).getStatus().equals("N")) {
                                idmensaje = 1;
                                mensaje += "PRECAUCION: Este pedido ya tiene una remisi&oacute;n o factura asociada, no se puede facturar <br>";
                                getSesion(request).setID_Mensaje(idmensaje, mensaje);
                                irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                                return;
                            }

                        } else if (moddes.equals("REMISIONES")) {
                            JVentasRemisionesSet SetMod = new JVentasRemisionesSet(request);
                            SetMod.m_Where = "ID_Remision = '" + p(request.getParameter("ID")) + "'";
                            SetMod.Open();

                            if (SetMod.getAbsRow(0).getStatus().equals("C")) {
                                idmensaje = 1;
                                mensaje += "PRECAUCION: Esta remisi&oacute;n ya esta cancelada, no se puede facturar <br>";
                                getSesion(request).setID_Mensaje(idmensaje, mensaje);
                                irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                                return;
                            }

                            if (SetMod.getAbsRow(0).getStatus().equals("F")
                                    || SetMod.getAbsRow(0).getStatus().equals("R")
                                    || SetMod.getAbsRow(0).getFactura() != 0) {
                                idmensaje = 1;
                                mensaje += "PRECAUCION: Esta remisi&oacute;n ya tiene una factura asociada o est&aacute; revertida, no se puede facturar <br>";
                                getSesion(request).setID_Mensaje(idmensaje, mensaje);
                                irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                                return;
                            }

                        } else if (request.getParameter("tipomov").equals("COTIZACIONES")) {
                            JVentasCotizacionesSet SetMod = new JVentasCotizacionesSet(request);
                            SetMod.m_Where = "ID_Cotizacion = '" + p(request.getParameter("ID")) + "'";
                            SetMod.Open();

                            if (SetMod.getAbsRow(0).getStatus().equals("C")) {
                                idmensaje = 1;
                                mensaje += "PRECAUCION: Esta cotizaci&oacute;n ya esta cancelada, no se puede facturar <br>";
                                getSesion(request).setID_Mensaje(idmensaje, mensaje);
                                irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                                return;
                            }

                            if (SetMod.getAbsRow(0).getStatus().equals("F")
                                    || SetMod.getAbsRow(0).getStatus().equals("N")) {
                                idmensaje = 1;
                                mensaje += "PRECAUCION: Esta cotizaci&oacute;n ya tiene un pedido, remisi&oacute;n o factura asociada, no se puede facturar <br>";
                                getSesion(request).setID_Mensaje(idmensaje, mensaje);
                                irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                                return;
                            }

                        } else // sale si no es ni pedido ni cotizacion porque seria factura ( se estaria violando la seguridad )
                            return;

                        HttpSession ses = request.getSession(true);
                        JVenFactSes rec = (JVenFactSes) ses.getAttribute("ven_fact_dlg");
                        if (rec == null) {
                            rec = new JVenFactSes(request, getSesion(request).getSesion(idmod).getEspecial(),
                                    usuario, "FACTURAS");
                            ses.setAttribute("ven_fact_dlg", rec);
                        } else {
                            rec.resetear(request, getSesion(request).getSesion(idmod).getEspecial(), usuario,
                                    "FACTURAS");
                        }

                        // Llena la factura
                        if (moddes.equals("PEDIDOS")) {
                            JVentasPedidosSet SetMod = new JVentasPedidosSet(request);
                            SetMod.m_Where = "ID_Pedido = '" + p(request.getParameter("ID")) + "'";
                            SetMod.Open();

                            //rec.setFactNum(SetMod.getAbsRow(0).getNumero());
                            rec.setClave((int) SetMod.getAbsRow(0).getID_Cliente());
                            rec.setFecha(SetMod.getAbsRow(0).getFecha());
                            rec.setNombre(SetMod.getAbsRow(0).getCliente());
                            rec.setID_Moneda(SetMod.getAbsRow(0).getMoneda());
                            rec.setTC(SetMod.getAbsRow(0).getTC());
                            rec.setTotal(SetMod.getAbsRow(0).getTotal());
                            rec.setReferencia(SetMod.getAbsRow(0).getReferencia());
                            rec.setFechaEntrega(SetMod.getAbsRow(0).getFecha());
                            rec.setID_Vendedor(SetMod.getAbsRow(0).getID_Vendedor());
                            rec.setVendedorNombre(SetMod.getAbsRow(0).getVendedorNombre());
                        } else if (moddes.equals("REMISIONES")) {
                            JVentasRemisionesSet SetMod = new JVentasRemisionesSet(request);
                            SetMod.m_Where = "ID_Remision = '" + p(request.getParameter("ID")) + "'";
                            SetMod.Open();

                            //rec.setFactNum(SetMod.getAbsRow(0).getNumero());
                            rec.setClave((int) SetMod.getAbsRow(0).getID_Cliente());
                            rec.setFecha(SetMod.getAbsRow(0).getFecha());
                            rec.setNombre(SetMod.getAbsRow(0).getCliente());
                            rec.setID_Moneda(SetMod.getAbsRow(0).getMoneda());
                            rec.setTC(SetMod.getAbsRow(0).getTC());
                            rec.setTotal(SetMod.getAbsRow(0).getTotal());
                            rec.setReferencia(SetMod.getAbsRow(0).getReferencia());
                            rec.setFechaEntrega(SetMod.getAbsRow(0).getFecha());
                            rec.setID_Vendedor(SetMod.getAbsRow(0).getID_Vendedor());
                            rec.setVendedorNombre(SetMod.getAbsRow(0).getVendedorNombre());
                        } else if (moddes.equals("COTIZACIONES")) {
                            JVentasCotizacionesSet SetMod = new JVentasCotizacionesSet(request);
                            SetMod.m_Where = "ID_Cotizacion = '" + p(request.getParameter("ID")) + "'";
                            SetMod.Open();

                            //rec.setFactNum(SetMod.getAbsRow(0).getNumero());
                            rec.setClave((int) SetMod.getAbsRow(0).getID_Cliente());
                            rec.setFecha(SetMod.getAbsRow(0).getFecha());
                            rec.setNombre(SetMod.getAbsRow(0).getCliente());
                            rec.setID_Moneda(SetMod.getAbsRow(0).getMoneda());
                            rec.setTC(SetMod.getAbsRow(0).getTC());
                            rec.setTotal(SetMod.getAbsRow(0).getTotal());
                            rec.setReferencia(SetMod.getAbsRow(0).getReferencia());
                            rec.setFechaEntrega(SetMod.getAbsRow(0).getFecha());
                            rec.setID_Vendedor(SetMod.getAbsRow(0).getID_Vendedor());
                            rec.setVendedorNombre(SetMod.getAbsRow(0).getVendedorNombre());
                        }
                        JVentasFactSetCabV2 SetCab = new JVentasFactSetCabV2(request,
                                request.getParameter("tipomov"));
                        JVentasFactSetDetV2 SetDet = new JVentasFactSetDetV2(request,
                                request.getParameter("tipomov"));
                        SetCab.m_Where = "ID_Factura = '" + p(request.getParameter("ID")) + "'";
                        SetDet.m_Where = "ID_Factura = '" + p(request.getParameter("ID")) + "'";
                        SetCab.Open();
                        SetDet.Open();

                        rec.setMoneda(SetCab.getAbsRow(0).getMoneda());
                        rec.setNumero((int) SetCab.getAbsRow(0).getNumero());
                        rec.setColonia(SetCab.getAbsRow(0).getColonia());
                        if (SetCab.getAbsRow(0).getCondicion() == 0)
                            rec.setForma_Pago("contado");
                        else if (SetCab.getAbsRow(0).getCondicion() == 1)
                            rec.setForma_Pago("credito");
                        else
                            rec.setForma_Pago("ninguno");
                        rec.setCP(SetCab.getAbsRow(0).getCP());
                        rec.setDescuento(SetCab.getAbsRow(0).getDescuento());
                        rec.setDireccion(SetCab.getAbsRow(0).getDireccion());
                        rec.setImporte(SetCab.getAbsRow(0).getImporte());
                        rec.setIVA(SetCab.getAbsRow(0).getIVA());
                        rec.setIEPS(SetCab.getAbsRow(0).getIEPS());
                        rec.setIVARet(SetCab.getAbsRow(0).getIVARet());
                        rec.setISRRet(SetCab.getAbsRow(0).getISRRet());
                        rec.setPoblacion(SetCab.getAbsRow(0).getPoblacion());
                        rec.setRFC(SetCab.getAbsRow(0).getRFC());
                        rec.setSubTotal(SetCab.getAbsRow(0).getSubTotal());
                        rec.setTels(SetCab.getAbsRow(0).getTel());
                        rec.setID_Bodega(SetCab.getAbsRow(0).getID_Bodega());
                        rec.setBodegaDesc(SetCab.getAbsRow(0).getNombre());

                        for (int i = 0; i < SetDet.getNumRows(); i++) {
                            rec.agregaPartida(SetDet.getAbsRow(i).getCantidad(),
                                    SetDet.getAbsRow(i).getID_UnidadSalida(), SetDet.getAbsRow(i).getID_Prod(),
                                    SetDet.getAbsRow(i).getID_Prod(), SetDet.getAbsRow(i).getDescripcion(),
                                    SetDet.getAbsRow(i).getPrecio(), SetDet.getAbsRow(i).getImporte(),
                                    SetDet.getAbsRow(i).getDescuento(), SetDet.getAbsRow(i).getIVA(),
                                    SetDet.getAbsRow(i).getIEPS(), SetDet.getAbsRow(i).getIVARet(),
                                    SetDet.getAbsRow(i).getISRRet(), SetDet.getAbsRow(i).getImporteDesc(),
                                    SetDet.getAbsRow(i).getImporteIVA(), SetDet.getAbsRow(i).getImporteIEPS(),
                                    SetDet.getAbsRow(i).getImporteIVARet(),
                                    SetDet.getAbsRow(i).getImporteISRRet(), SetDet.getAbsRow(i).getTotalPart(),
                                    SetDet.getAbsRow(i).getObs(), SetDet.getAbsRow(i).getID_Tipo());
                        }

                        getSesion(request).setID_Mensaje(idmensaje, mensaje);
                        irApag("/forsetiweb/ventas/ven_fact_dlg_generar.jsp", request, response);
                        return;
                    } else {
                        idmensaje = 1;
                        mensaje += JUtil.Msj("GLB", "VISTA", "GLB", "SELEC-PROC", 2);
                        getSesion(request).setID_Mensaje(idmensaje, mensaje);
                        irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                        return;
                    }
                } else {
                    idmensaje = 3;
                    mensaje += JUtil.Msj("GLB", "VISTA", "GLB", "SELEC-PROC", 1);
                    getSesion(request).setID_Mensaje(idmensaje, mensaje);
                    irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                    return;
                }
            } else {
                // Solicitud de envio a procesar
                if (request.getParameter("subproceso").equals("ENVIAR")) {
                    if (moddes.equals("PEDIDOS") || moddes.equals("COTIZACIONES")
                            || moddes.equals("REMISIONES")) {
                        HttpSession ses = request.getSession(true);
                        JVenFactSes rec = (JVenFactSes) ses.getAttribute("ven_fact_dlg");

                        if (request.getParameter("fecha") == null || request.getParameter("referencia") == null
                                || request.getParameter("fecha").equals("")) {
                            idmensaje = 1;
                            mensaje += "PRECAUCION: Se debe enviar la fecha y referencia de la factura <br>";
                            getSesion(request).setID_Mensaje(idmensaje, mensaje);
                            irApag("/forsetiweb/ventas/ven_fact_dlg_generar.jsp", request, response);
                            return;
                        } else if (request.getParameter("forma_pago").equals("contado")) {
                            request.setAttribute("fsipg_tipo", "ventas");
                            request.setAttribute("fsipg_proc", "deposito");
                            request.setAttribute("fsipg_total", rec.getTotal());
                            request.setAttribute("fsipg_ident",
                                    getSesion(request).getSesion(idmod).getEspecial());

                            if (VerificarParametros(request, response)
                                    && VerificarPagoMult(request, response)) {
                                AgregarDesde(request, response, "VFAC", "VEN_FAC", request.getParameter("ID"),
                                        idmod4, idmod, setids);
                                return;
                            }
                            irApag("/forsetiweb/ventas/ven_fact_dlg_generar.jsp", request, response);
                            return;
                        } else {
                            if (VerificarParametros(request, response)) {
                                // establece los atributos por default para ventas de crdito
                                request.setAttribute("fsipg_cambio", 0F);
                                request.setAttribute("fsipg_efectivo", 0F);
                                request.setAttribute("fsipg_bancos", 0F);
                                AgregarDesde(request, response, "VFAC", "VEN_FACT", request.getParameter("ID"),
                                        idmod4, idmod, setids);
                                return;
                            }
                            irApag("/forsetiweb/ventas/ven_fact_dlg_generar.jsp", request, response);
                            return;
                        }
                    }

                }
            }

        } else if (request.getParameter("proceso").equals("REMISIONAR_VENTA")) {
            // Revisa si tiene permisos
            if (!getSesion(request).getPermiso("VEN_REM_AGREGAR")) {
                idmensaje = 3;
                mensaje += MsjPermisoDenegado(request, "CEF", "VEN_REM_AGREGAR");
                getSesion(request).setID_Mensaje(idmensaje, mensaje);
                RDP("CEF", getSesion(request).getConBD(), "NA", getSesion(request).getID_Usuario(),
                        "VEN_REM_AGREGAR", "VREM||||", mensaje);
                irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                return;
            }

            if (request.getParameter("subproceso") == null) // Como el subproceso no es ENVIAR, abre la ventana del proceso de FACTURADO por primera vez
            {
                if (request.getParameter("ID") != null) {
                    String[] valoresParam = request.getParameterValues("ID");
                    if (valoresParam.length == 1) {
                        if (moddes.equals("PEDIDOS")) {
                            JVentasPedidosSet SetMod = new JVentasPedidosSet(request);
                            SetMod.m_Where = "ID_Pedido = '" + p(request.getParameter("ID")) + "'";
                            SetMod.Open();

                            if (SetMod.getAbsRow(0).getStatus().equals("C")) {
                                idmensaje = 1;
                                mensaje += "PRECAUCION: Este pedido ya esta cancelado, no se puede remisionar <br>";
                                getSesion(request).setID_Mensaje(idmensaje, mensaje);
                                irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                                return;
                            }

                            if (SetMod.getAbsRow(0).getStatus().equals("F")
                                    || SetMod.getAbsRow(0).getStatus().equals("N")) {
                                idmensaje = 1;
                                mensaje += "PRECAUCION: Este pedido ya tiene una factura o remisi&oacute;n asociada, no se puede a remisionar <br>";
                                getSesion(request).setID_Mensaje(idmensaje, mensaje);
                                irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                                return;
                            }

                        } else if (moddes.equals("COTIZACIONES")) {
                            JVentasCotizacionesSet SetMod = new JVentasCotizacionesSet(request);
                            SetMod.m_Where = "ID_Cotizacion = '" + p(request.getParameter("ID")) + "'";
                            SetMod.Open();

                            if (SetMod.getAbsRow(0).getStatus().equals("C")) {
                                idmensaje = 1;
                                mensaje += "PRECAUCION: Esta cotizaci&oacute;n ya esta cancelada, no se puede remisionar <br>";
                                getSesion(request).setID_Mensaje(idmensaje, mensaje);
                                irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                                return;
                            }

                            if (SetMod.getAbsRow(0).getStatus().equals("F")
                                    || SetMod.getAbsRow(0).getStatus().equals("N")) {
                                idmensaje = 1;
                                mensaje += "PRECAUCION: Esta cotizaci&oacute;n ya tiene un pedido, remisi&oacute;n o factura asociada, no se puede remisionar <br>";
                                getSesion(request).setID_Mensaje(idmensaje, mensaje);
                                irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                                return;
                            }

                        } else // sale si no es ni pedido ni cotizacion porque seria factura ( se estaria violando la seguridad )
                            return;

                        HttpSession ses = request.getSession(true);
                        JVenFactSes rec = (JVenFactSes) ses.getAttribute("ven_fact_dlg");
                        if (rec == null) {
                            rec = new JVenFactSes(request, getSesion(request).getSesion(idmod).getEspecial(),
                                    usuario, "REMISIONES");
                            ses.setAttribute("ven_fact_dlg", rec);
                        } else {
                            rec.resetear(request, getSesion(request).getSesion(idmod).getEspecial(), usuario,
                                    "REMISIONES");
                        }

                        // Llena la factura
                        if (moddes.equals("PEDIDOS")) {
                            JVentasPedidosSet SetMod = new JVentasPedidosSet(request);
                            SetMod.m_Where = "ID_Pedido = '" + p(request.getParameter("ID")) + "'";
                            SetMod.Open();

                            //rec.setFactNum(SetMod.getAbsRow(0).getNumero());
                            rec.setClave((int) SetMod.getAbsRow(0).getID_Cliente());
                            rec.setFecha(SetMod.getAbsRow(0).getFecha());
                            rec.setNombre(SetMod.getAbsRow(0).getCliente());
                            rec.setID_Moneda(SetMod.getAbsRow(0).getMoneda());
                            rec.setTC(SetMod.getAbsRow(0).getTC());
                            rec.setTotal(SetMod.getAbsRow(0).getTotal());
                            rec.setReferencia(SetMod.getAbsRow(0).getReferencia());
                            rec.setFechaEntrega(SetMod.getAbsRow(0).getFecha());
                            rec.setID_Vendedor(SetMod.getAbsRow(0).getID_Vendedor());
                            rec.setVendedorNombre(SetMod.getAbsRow(0).getVendedorNombre());
                        } else if (request.getParameter("tipomov").equals("COTIZACIONES")) {
                            JVentasCotizacionesSet SetMod = new JVentasCotizacionesSet(request);
                            SetMod.m_Where = "ID_Cotizacion = '" + p(request.getParameter("ID")) + "'";
                            SetMod.Open();

                            //rec.setFactNum(SetMod.getAbsRow(0).getNumero());
                            rec.setClave((int) SetMod.getAbsRow(0).getID_Cliente());
                            rec.setFecha(SetMod.getAbsRow(0).getFecha());
                            rec.setNombre(SetMod.getAbsRow(0).getCliente());
                            rec.setID_Moneda(SetMod.getAbsRow(0).getMoneda());
                            rec.setTC(SetMod.getAbsRow(0).getTC());
                            rec.setTotal(SetMod.getAbsRow(0).getTotal());
                            rec.setReferencia(SetMod.getAbsRow(0).getReferencia());
                            rec.setFechaEntrega(SetMod.getAbsRow(0).getFecha());
                            rec.setID_Vendedor(SetMod.getAbsRow(0).getID_Vendedor());
                            rec.setVendedorNombre(SetMod.getAbsRow(0).getVendedorNombre());
                        }
                        JVentasFactSetCabV2 SetCab = new JVentasFactSetCabV2(request,
                                request.getParameter("tipomov"));
                        JVentasFactSetDetV2 SetDet = new JVentasFactSetDetV2(request,
                                request.getParameter("tipomov"));
                        SetCab.m_Where = "ID_Factura = '" + p(request.getParameter("ID")) + "'";
                        SetDet.m_Where = "ID_Factura = '" + p(request.getParameter("ID")) + "'";
                        SetCab.Open();
                        SetDet.Open();

                        rec.setMoneda(SetCab.getAbsRow(0).getMoneda());
                        rec.setNumero((int) SetCab.getAbsRow(0).getNumero());
                        rec.setColonia(SetCab.getAbsRow(0).getColonia());
                        if (SetCab.getAbsRow(0).getCondicion() == 0)
                            rec.setForma_Pago("contado");
                        else if (SetCab.getAbsRow(0).getCondicion() == 1)
                            rec.setForma_Pago("credito");
                        else
                            rec.setForma_Pago("ninguno");
                        rec.setCP(SetCab.getAbsRow(0).getCP());
                        rec.setDescuento(SetCab.getAbsRow(0).getDescuento());
                        rec.setDireccion(SetCab.getAbsRow(0).getDireccion());
                        rec.setImporte(SetCab.getAbsRow(0).getImporte());
                        rec.setIVA(SetCab.getAbsRow(0).getIVA());
                        rec.setIEPS(SetCab.getAbsRow(0).getIEPS());
                        rec.setIVARet(SetCab.getAbsRow(0).getIVARet());
                        rec.setISRRet(SetCab.getAbsRow(0).getISRRet());
                        rec.setObs(SetCab.getAbsRow(0).getObs());
                        rec.setPoblacion(SetCab.getAbsRow(0).getPoblacion());
                        rec.setRFC(SetCab.getAbsRow(0).getRFC());
                        rec.setSubTotal(SetCab.getAbsRow(0).getSubTotal());
                        rec.setTels(SetCab.getAbsRow(0).getTel());
                        rec.setID_Bodega(SetCab.getAbsRow(0).getID_Bodega());
                        rec.setBodegaDesc(SetCab.getAbsRow(0).getNombre());

                        for (int i = 0; i < SetDet.getNumRows(); i++) {
                            rec.agregaPartida(SetDet.getAbsRow(i).getCantidad(),
                                    SetDet.getAbsRow(i).getID_UnidadSalida(), SetDet.getAbsRow(i).getID_Prod(),
                                    SetDet.getAbsRow(i).getID_Prod(), SetDet.getAbsRow(i).getDescripcion(),
                                    SetDet.getAbsRow(i).getPrecio(), SetDet.getAbsRow(i).getImporte(),
                                    SetDet.getAbsRow(i).getDescuento(), SetDet.getAbsRow(i).getIVA(),
                                    SetDet.getAbsRow(i).getIEPS(), SetDet.getAbsRow(i).getIVARet(),
                                    SetDet.getAbsRow(i).getISRRet(), SetDet.getAbsRow(i).getImporteDesc(),
                                    SetDet.getAbsRow(i).getImporteIVA(), SetDet.getAbsRow(i).getImporteIEPS(),
                                    SetDet.getAbsRow(i).getImporteIVARet(),
                                    SetDet.getAbsRow(i).getImporteISRRet(), SetDet.getAbsRow(i).getTotalPart(),
                                    SetDet.getAbsRow(i).getObs(), SetDet.getAbsRow(i).getID_Tipo());
                        }

                        getSesion(request).setID_Mensaje(idmensaje, mensaje);
                        irApag("/forsetiweb/ventas/ven_fact_dlg_generar.jsp", request, response);
                        return;
                    } else {
                        idmensaje = 1;
                        mensaje += JUtil.Msj("GLB", "VISTA", "GLB", "SELEC-PROC", 2);
                        getSesion(request).setID_Mensaje(idmensaje, mensaje);
                        irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                        return;
                    }
                } else {
                    idmensaje = 3;
                    mensaje += JUtil.Msj("GLB", "VISTA", "GLB", "SELEC-PROC", 1);
                    getSesion(request).setID_Mensaje(idmensaje, mensaje);
                    irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                    return;
                }
            } else {
                // Solicitud de envio a procesar
                if (request.getParameter("subproceso").equals("ENVIAR")) {
                    if (moddes.equals("PEDIDOS") || moddes.equals("COTIZACIONES")) {
                        if (request.getParameter("fecha") == null || request.getParameter("referencia") == null
                                || request.getParameter("fecha").equals("")) {
                            idmensaje = 1;
                            mensaje += "PRECAUCION: Se debe enviar la fecha y referencia de la remisi&oacute;n <br>";
                            getSesion(request).setID_Mensaje(idmensaje, mensaje);
                            irApag("/forsetiweb/ventas/ven_fact_dlg_generar.jsp", request, response);
                            return;
                        } else {
                            if (VerificarParametros(request, response)) {
                                AgregarDesde(request, response, "VREM", "VEN_REM", request.getParameter("ID"),
                                        idmod4, idmod, setids);
                                return;
                            }
                            irApag("/forsetiweb/ventas/ven_fact_dlg_generar.jsp", request, response);
                            return;
                        }
                    }
                }
            }

        } else if (request.getParameter("proceso").equals("PEDIR_VENTA")) {
            // Revisa si tiene permisos
            if (!getSesion(request).getPermiso("VEN_PED_AGREGAR")) {
                idmensaje = 3;
                mensaje += MsjPermisoDenegado(request, "CEF", "VEN_PED_AGREGAR");
                getSesion(request).setID_Mensaje(idmensaje, mensaje);
                RDP("CEF", getSesion(request).getConBD(), "NA", getSesion(request).getID_Usuario(),
                        "VEN_PED_AGREGAR", "VPED||||", mensaje);
                irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                return;
            }

            if (request.getParameter("subproceso") == null) // Como el subproceso no es ENVIAR, abre la ventana del proceso de FACTURADO por primera vez
            {
                if (request.getParameter("ID") != null) {
                    String[] valoresParam = request.getParameterValues("ID");
                    if (valoresParam.length == 1) {
                        if (moddes.equals("COTIZACIONES")) {
                            JVentasCotizacionesSet SetMod = new JVentasCotizacionesSet(request);
                            SetMod.m_Where = "ID_Cotizacion = '" + p(request.getParameter("ID")) + "'";
                            SetMod.Open();

                            if (SetMod.getAbsRow(0).getStatus().equals("C")) {
                                idmensaje = 1;
                                mensaje += "PRECAUCION: Esta cotizaci&oacute;n ya esta cancelada, no se puede pedir <br>";
                                getSesion(request).setID_Mensaje(idmensaje, mensaje);
                                irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                                return;
                            }

                            if (SetMod.getAbsRow(0).getStatus().equals("F")
                                    || SetMod.getAbsRow(0).getStatus().equals("N")) {
                                idmensaje = 1;
                                mensaje += "PRECAUCION: Esta cotizaci&oacute;n ya tiene un pedido, remisi&oacute;n o factura asociada, no se puede pedir <br>";
                                getSesion(request).setID_Mensaje(idmensaje, mensaje);
                                irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                                return;
                            }

                        } else // sale si no es cotizacion porque seria ( se estaria violando la seguridad )
                            return;

                        HttpSession ses = request.getSession(true);
                        JVenFactSes rec = (JVenFactSes) ses.getAttribute("ven_fact_dlg");
                        if (rec == null) {
                            rec = new JVenFactSes(request, getSesion(request).getSesion(idmod).getEspecial(),
                                    usuario, "PEDIDOS");
                            ses.setAttribute("ven_fact_dlg", rec);
                        } else {
                            rec.resetear(request, getSesion(request).getSesion(idmod).getEspecial(), usuario,
                                    "PEDIDOS");
                        }

                        // Llena el pedido
                        JVentasCotizacionesSet SetMod = new JVentasCotizacionesSet(request);
                        SetMod.m_Where = "ID_Cotizacion = '" + p(request.getParameter("ID")) + "'";
                        SetMod.Open();

                        //rec.setFactNum(SetMod.getAbsRow(0).getNumero());
                        rec.setClave((int) SetMod.getAbsRow(0).getID_Cliente());
                        rec.setFecha(SetMod.getAbsRow(0).getFecha());
                        rec.setNombre(SetMod.getAbsRow(0).getCliente());
                        rec.setID_Moneda(SetMod.getAbsRow(0).getMoneda());
                        rec.setTC(SetMod.getAbsRow(0).getTC());
                        rec.setTotal(SetMod.getAbsRow(0).getTotal());
                        rec.setReferencia(SetMod.getAbsRow(0).getReferencia());
                        rec.setFechaEntrega(SetMod.getAbsRow(0).getFecha());
                        rec.setID_Vendedor(SetMod.getAbsRow(0).getID_Vendedor());
                        rec.setVendedorNombre(SetMod.getAbsRow(0).getVendedorNombre());

                        JVentasFactSetCabV2 SetCab = new JVentasFactSetCabV2(request, moddes);
                        JVentasFactSetDetV2 SetDet = new JVentasFactSetDetV2(request, moddes);
                        SetCab.m_Where = "ID_Factura = '" + p(request.getParameter("ID")) + "'";
                        SetDet.m_Where = "ID_Factura = '" + p(request.getParameter("ID")) + "'";
                        SetCab.Open();
                        SetDet.Open();

                        rec.setMoneda(SetCab.getAbsRow(0).getMoneda());
                        rec.setNumero((int) SetCab.getAbsRow(0).getNumero());
                        rec.setColonia(SetCab.getAbsRow(0).getColonia());
                        if (SetCab.getAbsRow(0).getCondicion() == 0)
                            rec.setForma_Pago("contado");
                        else if (SetCab.getAbsRow(0).getCondicion() == 1)
                            rec.setForma_Pago("credito");
                        else
                            rec.setForma_Pago("ninguno");
                        rec.setCP(SetCab.getAbsRow(0).getCP());
                        rec.setDescuento(SetCab.getAbsRow(0).getDescuento());
                        rec.setDireccion(SetCab.getAbsRow(0).getDireccion());
                        rec.setImporte(SetCab.getAbsRow(0).getImporte());
                        rec.setIVA(SetCab.getAbsRow(0).getIVA());
                        rec.setIEPS(SetCab.getAbsRow(0).getIEPS());
                        rec.setIVARet(SetCab.getAbsRow(0).getIVARet());
                        rec.setISRRet(SetCab.getAbsRow(0).getISRRet());
                        rec.setObs(SetCab.getAbsRow(0).getObs());
                        rec.setPoblacion(SetCab.getAbsRow(0).getPoblacion());
                        rec.setRFC(SetCab.getAbsRow(0).getRFC());
                        rec.setSubTotal(SetCab.getAbsRow(0).getSubTotal());
                        rec.setTels(SetCab.getAbsRow(0).getTel());
                        rec.setID_Bodega(SetCab.getAbsRow(0).getID_Bodega());
                        rec.setBodegaDesc(SetCab.getAbsRow(0).getNombre());

                        for (int i = 0; i < SetDet.getNumRows(); i++) {
                            rec.agregaPartida(SetDet.getAbsRow(i).getCantidad(),
                                    SetDet.getAbsRow(i).getID_UnidadSalida(), SetDet.getAbsRow(i).getID_Prod(),
                                    SetDet.getAbsRow(i).getID_Prod(), SetDet.getAbsRow(i).getDescripcion(),
                                    SetDet.getAbsRow(i).getPrecio(), SetDet.getAbsRow(i).getImporte(),
                                    SetDet.getAbsRow(i).getDescuento(), SetDet.getAbsRow(i).getIVA(),
                                    SetDet.getAbsRow(i).getIEPS(), SetDet.getAbsRow(i).getIVARet(),
                                    SetDet.getAbsRow(i).getISRRet(), SetDet.getAbsRow(i).getImporteDesc(),
                                    SetDet.getAbsRow(i).getImporteIVA(), SetDet.getAbsRow(i).getImporteIEPS(),
                                    SetDet.getAbsRow(i).getImporteIVARet(),
                                    SetDet.getAbsRow(i).getImporteISRRet(), SetDet.getAbsRow(i).getTotalPart(),
                                    SetDet.getAbsRow(i).getObs(), SetDet.getAbsRow(i).getID_Tipo());
                        }

                        getSesion(request).setID_Mensaje(idmensaje, mensaje);
                        irApag("/forsetiweb/ventas/ven_fact_dlg_generar.jsp", request, response);
                        return;
                    } else {
                        idmensaje = 1;
                        mensaje += JUtil.Msj("GLB", "VISTA", "GLB", "SELEC-PROC", 2);
                        getSesion(request).setID_Mensaje(idmensaje, mensaje);
                        irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                        return;
                    }
                } else {
                    idmensaje = 3;
                    mensaje += JUtil.Msj("GLB", "VISTA", "GLB", "SELEC-PROC", 1);
                    getSesion(request).setID_Mensaje(idmensaje, mensaje);
                    irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                    return;
                }
            } else {
                // Solicitud de envio a procesar
                if (request.getParameter("subproceso").equals("ENVIAR")) {
                    if (request.getParameter("tipomov").equals("COTIZACIONES")) {
                        if (request.getParameter("fecha") == null || request.getParameter("referencia") == null
                                || request.getParameter("fecha").equals("")) {
                            idmensaje = 1;
                            mensaje += "PRECAUCION: Se debe enviar la fecha y referencia del pedido <br>";
                            getSesion(request).setID_Mensaje(idmensaje, mensaje);
                            irApag("/forsetiweb/ventas/ven_fact_dlg_generar.jsp", request, response);
                            return;
                        } else {
                            if (VerificarParametros(request, response)) {
                                AgregarDesde(request, response, "VPED", "VEN_PED", request.getParameter("ID"),
                                        idmod4, idmod, setids);
                                return;
                            }
                            irApag("/forsetiweb/ventas/ven_fact_dlg_generar.jsp", request, response);
                            return;
                        }
                    }
                }
            }
        } else if (request.getParameter("proceso").equals("IMPRIMIR")) {
            // Revisa si tiene permisos
            if (!getSesion(request).getPermiso(idmod)) {
                idmensaje = 3;
                mensaje += MsjPermisoDenegado(request, "CEF", idmod);
                getSesion(request).setID_Mensaje(idmensaje, mensaje);
                RDP("CEF", getSesion(request).getConBD(), "NA", getSesion(request).getID_Usuario(), idmod,
                        idmod4 + "||||", mensaje);
                irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                return;
            }

            if (request.getParameter("ID") != null) {
                String[] valoresParam = request.getParameterValues("ID");
                if (valoresParam.length == 1) {
                    if (request.getParameter("subproceso") != null
                            && request.getParameter("subproceso").equals("IMPRESION")) {
                        StringBuffer bsmensaje = new StringBuffer(254);
                        String SQLCab = "select * from ";
                        String SQLDet = "select * from ";
                        if (moddes.equals("FACTURAS")) {
                            SQLCab += "view_ventas_facturas_impcab where ID_Factura = ";
                            SQLDet += "view_ventas_facturas_impdet where ID_Factura = ";
                        } else if (moddes.equals("PEDIDOS")) {
                            SQLCab += "view_ventas_pedidos_impcab where ID_Pedido = ";
                            SQLDet += "view_ventas_pedidos_impdet where ID_Pedido = ";
                        } else if (moddes.equals("REMISIONES")) {
                            SQLCab += "view_ventas_remisiones_impcab where ID_Remision = ";
                            SQLDet += "view_ventas_remisiones_impdet where ID_Remision = ";
                        } else if (moddes.equals("COTIZACIONES")) {
                            SQLCab += "view_ventas_cotizaciones_impcab where ID_Cotizacion = ";
                            SQLDet += "view_ventas_cotizaciones_impdet where ID_Cotizacion = ";
                        } else //Devoluciones
                        {
                            SQLCab += "view_ventas_devoluciones_impcab where ID_Devolucion = ";
                            SQLDet += "view_ventas_devoluciones_impdet where ID_Devolucion = ";
                        }
                        SQLCab += request.getParameter("ID");
                        SQLDet += request.getParameter("ID");

                        idmensaje = Imprimir(SQLCab, SQLDet, request.getParameter("idformato"), bsmensaje,
                                request, response);

                        if (idmensaje != -1) {
                            getSesion(request).setID_Mensaje(idmensaje, bsmensaje.toString());
                            irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                            return;
                        }
                    } else // significa que debe llamar a la ventana de formatos de impresion
                    {
                        if (moddes.equals("FACTURAS")) {
                            request.setAttribute("impresion", "CEFVenFactDlg");
                            request.setAttribute("tipo_imp", "VEN_FAC");
                            request.setAttribute("formato_default", setids.getAbsRow(0).getFormato());
                        } else if (moddes.equals("PEDIDOS")) {
                            request.setAttribute("impresion", "CEFVenFactDlg");
                            request.setAttribute("tipo_imp", "VEN_PED");
                            request.setAttribute("formato_default", setids.getAbsRow(0).getFmt_Pedido());
                        } else if (moddes.equals("REMISIONES")) {
                            request.setAttribute("impresion", "CEFVenFactDlg");
                            request.setAttribute("tipo_imp", "VEN_REM");
                            request.setAttribute("formato_default", setids.getAbsRow(0).getFmt_Remision());
                        } else if (moddes.equals("COTIZACIONES")) {
                            request.setAttribute("impresion", "CEFVenFactDlg");
                            request.setAttribute("tipo_imp", "VEN_COT");
                            request.setAttribute("formato_default", setids.getAbsRow(0).getFmt_Cotizacion());
                        } else //DEVOLUCIONES
                        {
                            request.setAttribute("impresion", "CEFVenFactDlg");
                            request.setAttribute("tipo_imp", "VEN_DEV");
                            request.setAttribute("formato_default", setids.getAbsRow(0).getFmt_Devolucion());
                        }

                        getSesion(request).setID_Mensaje(idmensaje, mensaje);
                        irApag("/forsetiweb/impresion_dlg.jsp", request, response);
                        return;
                    }
                } else {
                    idmensaje = 1;
                    mensaje += JUtil.Msj("GLB", "VISTA", "GLB", "SELEC-PROC", 2);
                    getSesion(request).setID_Mensaje(idmensaje, mensaje);
                    irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                    return;
                }
            } else {
                idmensaje = 3;
                mensaje += JUtil.Msj("GLB", "VISTA", "GLB", "SELEC-PROC", 1);
                getSesion(request).setID_Mensaje(idmensaje, mensaje);
                irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                return;
            }
        } else if (request.getParameter("proceso").equals("DEVOLVER_VENTA")
                || request.getParameter("proceso").equals("REBAJAR_VENTA")) {
            // Revisa si tiene permisos
            if (request.getParameter("proceso").equals("DEVOLVER_VENTA")
                    && !getSesion(request).getPermiso("VEN_DEV_DEVOLVER")) {
                idmensaje = 3;
                mensaje += MsjPermisoDenegado(request, "CEF", "VEN_DEV_DEVOLVER");
                getSesion(request).setID_Mensaje(idmensaje, mensaje);
                RDP("CEF", getSesion(request).getConBD(), "NA", getSesion(request).getID_Usuario(),
                        "VEN_DEV_DEVOLVER", "VDEV||||", mensaje);
                irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                return;
            }
            if (request.getParameter("proceso").equals("REBAJAR_VENTA")
                    && !getSesion(request).getPermiso("VEN_DEV_REBAJAR")) {
                idmensaje = 3;
                mensaje += MsjPermisoDenegado(request, "CEF", "VEN_DEV_REBAJAR");
                getSesion(request).setID_Mensaje(idmensaje, mensaje);
                RDP("CEF", getSesion(request).getConBD(), "NA", getSesion(request).getID_Usuario(),
                        "VEN_DEV_REBAJAR", "VDEV||||", mensaje);
                irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                return;
            }

            if (request.getParameter("subproceso") == null) // Como el subproceso no es ENVIAR ni EDIT_PART ni BORR_PART, abre la ventana del proceso de AGREGADO para agregar `por primera vez
            {
                if (request.getParameter("ID") != null) {
                    String[] valoresParam = request.getParameterValues("ID");
                    if (valoresParam.length == 1) {
                        JVentasFactSetV2 SetMod = new JVentasFactSetV2(request);
                        SetMod.m_Where = "ID_Factura = '" + p(request.getParameter("ID")) + "'";
                        SetMod.Open();

                        if (SetMod.getAbsRow(0).getStatus().equals("C")) {
                            idmensaje = 1;
                            mensaje += "PRECAUCION: Esta factura ya esta cancelada, no se puede generar la devolucin <br>";
                            getSesion(request).setID_Mensaje(idmensaje, mensaje);
                            irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                            return;
                        }

                        if (request.getParameter("proceso").equals("DEVOLVER_VENTA")) {
                            if (SetMod.getAbsRow(0).getID_PolCost() == -1
                                    || (!SetMod.getAbsRow(0).getStatus().equals("E")
                                            && setids.getAbsRow(0).getAuditarAlm())) {
                                idmensaje = 1;
                                mensaje += "PRECAUCION: Esta factura debe estar guardada, revertida, o ser factura sin movimiento al almacn. Solo se pueden devolver las facturas emitidas con movimientos al almacn <br>";
                                getSesion(request).setID_Mensaje(idmensaje, mensaje);
                                irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                                return;
                            }
                            //SetRem.getNumRows() == 0 && SetMod.getAbsRow(0).getID_PolCost() != -1 && !setids.getAbsRow(0).getFijaCost() && setids.getAbsRow(0).getAuditarAlm() && !SetMod.getAbsRow(0).getStatus().equals("R") )
                        } else // Rebajar venta
                        {
                            if (SetMod.getAbsRow(0).getID_PolCost() != -1
                                    && !SetMod.getAbsRow(0).getStatus().equals("E")
                                    && setids.getAbsRow(0).getAuditarAlm()) {
                                idmensaje = 1;
                                mensaje += "PRECAUCION: Esta factura debe estar guardada o revertida. Solo se pueden rebajar las facturas emitidas <br>";
                                getSesion(request).setID_Mensaje(idmensaje, mensaje);
                                irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                                return;
                            }
                        }

                        HttpSession ses = request.getSession(true);
                        JVenFactSes rec = (JVenDevSes) ses.getAttribute("ven_dev_dlg");
                        if (rec == null) {
                            rec = new JVenDevSes(request, getSesion(request).getSesion("VEN_FAC").getEspecial(),
                                    usuario, "DEVOLUCIONES");
                            ses.setAttribute("ven_dev_dlg", rec);
                        } else
                            rec.resetear(request, getSesion(request).getSesion("VEN_FAC").getEspecial(),
                                    usuario, "DEVOLUCIONES");

                        rec.setClave((int) SetMod.getAbsRow(0).getID_Cliente());
                        rec.setNombre(SetMod.getAbsRow(0).getCliente());
                        rec.setID_Moneda(SetMod.getAbsRow(0).getMoneda());
                        rec.setTC(SetMod.getAbsRow(0).getTC());
                        rec.setTotal(SetMod.getAbsRow(0).getTotal());
                        rec.setReferencia(SetMod.getAbsRow(0).getReferencia());
                        rec.setID_Vendedor(SetMod.getAbsRow(0).getID_Vendedor());
                        rec.setVendedorNombre(SetMod.getAbsRow(0).getVendedorNombre());
                        rec.setID_Factura(SetMod.getAbsRow(0).getID_Factura());
                        if (request.getParameter("proceso").equals("DEVOLVER_VENTA"))
                            rec.setDevReb("DEV");
                        else
                            rec.setDevReb("REB");
                        JVentasFactSetCabV2 SetCab = new JVentasFactSetCabV2(request, "FACTURAS");
                        JVentasFactSetDetV2 SetDet = new JVentasFactSetDetV2(request,
                                "FACTURAS"/*"AGR_DEVOL"*/);
                        SetCab.m_Where = "ID_Factura = '" + p(request.getParameter("ID")) + "'";
                        SetDet.m_Where = "ID_Factura = '" + p(request.getParameter("ID")) + "'";
                        SetCab.Open();
                        SetDet.Open();

                        rec.setMoneda(SetCab.getAbsRow(0).getMoneda());
                        rec.setNumero((int) SetCab.getAbsRow(0).getNumero());
                        rec.setColonia(SetCab.getAbsRow(0).getColonia());
                        if (SetCab.getAbsRow(0).getCondicion() == 0)
                            rec.setForma_Pago("contado");
                        else if (SetCab.getAbsRow(0).getCondicion() == 1)
                            rec.setForma_Pago("credito");
                        else
                            rec.setForma_Pago("ninguno");
                        rec.setCP(SetCab.getAbsRow(0).getCP());
                        rec.setDescuento(SetCab.getAbsRow(0).getDescuento());
                        rec.setDireccion(SetCab.getAbsRow(0).getDireccion());
                        rec.setImporte(SetCab.getAbsRow(0).getImporte());
                        rec.setIVA(SetCab.getAbsRow(0).getIVA());
                        rec.setIEPS(SetCab.getAbsRow(0).getIEPS());
                        rec.setIVARet(SetCab.getAbsRow(0).getIVARet());
                        rec.setISRRet(SetCab.getAbsRow(0).getISRRet());
                        rec.setObs(SetCab.getAbsRow(0).getObs());
                        rec.setPoblacion(SetCab.getAbsRow(0).getPoblacion());
                        rec.setRFC(SetCab.getAbsRow(0).getRFC());
                        rec.setSubTotal(SetCab.getAbsRow(0).getSubTotal());
                        rec.setTels(SetCab.getAbsRow(0).getTel());
                        rec.setID_Bodega(SetCab.getAbsRow(0).getID_Bodega());
                        rec.setBodegaDesc(SetCab.getAbsRow(0).getNombre());

                        for (int i = 0; i < SetDet.getNumRows(); i++) {
                            rec.agregaPartida(SetDet.getAbsRow(i).getCantidad(),
                                    SetDet.getAbsRow(i).getID_UnidadSalida(), SetDet.getAbsRow(i).getID_Prod(),
                                    SetDet.getAbsRow(i).getID_Prod(), SetDet.getAbsRow(i).getDescripcion(),
                                    SetDet.getAbsRow(i).getPrecio(), SetDet.getAbsRow(i).getImporte(),
                                    SetDet.getAbsRow(i).getDescuento(), SetDet.getAbsRow(i).getIVA(),
                                    SetDet.getAbsRow(i).getIEPS(), SetDet.getAbsRow(i).getIVARet(),
                                    SetDet.getAbsRow(i).getISRRet(), SetDet.getAbsRow(i).getImporteDesc(),
                                    SetDet.getAbsRow(i).getImporteIVA(), SetDet.getAbsRow(i).getImporteIEPS(),
                                    SetDet.getAbsRow(i).getImporteIVARet(),
                                    SetDet.getAbsRow(i).getImporteISRRet(), SetDet.getAbsRow(i).getTotalPart(),
                                    SetDet.getAbsRow(i).getObs(), SetDet.getAbsRow(i).getID_Tipo());
                        }

                        getSesion(request).setID_Mensaje(idmensaje, mensaje);
                        irApag("/forsetiweb/ventas/ven_fact_dlg.jsp", request, response);
                        return;
                    } else {
                        idmensaje = 1;
                        mensaje += JUtil.Msj("GLB", "VISTA", "GLB", "SELEC-PROC", 2);
                        getSesion(request).setID_Mensaje(idmensaje, mensaje);
                        irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                        return;
                    }
                } else {
                    idmensaje = 3;
                    mensaje += JUtil.Msj("GLB", "VISTA", "GLB", "SELEC-PROC", 1);
                    getSesion(request).setID_Mensaje(idmensaje, mensaje);
                    irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                    return;
                }
            } else {
                // Solicitud de envio a procesar
                if (request.getParameter("subproceso").equals("ENVIAR")) {
                    if (AgregarCabeceroDev(request, response) == -1) {
                        HttpSession ses = request.getSession(true);
                        JVenFactSes rec = (JVenDevSes) ses.getAttribute("ven_dev_dlg");

                        if (rec.getForma_Pago().equals("contado")) {
                            request.setAttribute("fsipg_tipo", "ventas");
                            request.setAttribute("fsipg_total", rec.getTotal());
                            request.setAttribute("fsipg_proc", "retiro");
                            request.setAttribute("fsipg_ident",
                                    getSesion(request).getSesion("VEN_FAC").getEspecial());
                            request.setAttribute("fsipg_id_concepto", 0);
                            request.setAttribute("fsipg_desc_concepto", "");
                            if (VerificarParametrosDev(request, response)
                                    && VerificarPagoMult(request, response)) {
                                AgregarDev(request, response, setids);
                                return;
                            }
                        } else if (rec.getForma_Pago().equals("credito")) {
                            request.setAttribute("fsipg_tipo", "ventas");
                            if (VerificarParametrosDev(request, response)
                                    && VerificarSaldo(request, response)) {
                                AgregarDev(request, response, setids);
                                return;
                            }
                        } else //Ningun pago
                        {
                            request.setAttribute("fsipg_tipo", "ventas");
                            if (VerificarParametrosDev(request, response)) {
                                AgregarDev(request, response, setids);
                                return;
                            }
                        }
                    }

                    irApag("/forsetiweb/ventas/ven_fact_dlg.jsp", request, response);
                    return;

                } else if (request.getParameter("subproceso").equals("EDIT_PART")) {
                    if (AgregarCabeceroDev(request, response) == -1) {
                        if (VerificarParametrosPartidaDev(request, response))
                            EditarPartidaDev(request, response);
                    }

                    irApag("/forsetiweb/ventas/ven_fact_dlg.jsp", request, response);
                    return;
                } else if (request.getParameter("subproceso").equals("BORR_PART")) {
                    if (AgregarCabeceroDev(request, response) == -1) {
                        BorrarPartidaDev(request, response);
                    }

                    irApag("/forsetiweb/ventas/ven_fact_dlg.jsp", request, response);
                    return;
                }

                idmensaje = 1;
                mensaje += "PRECAUCION: No se pueden agregar partidas a una devolucion o rebaja. Intenta editar o borrar lo que no desees devolver o rebajar";
                getSesion(request).setID_Mensaje(idmensaje, mensaje);
                irApag("/forsetiweb/ventas/ven_fact_dlg.jsp", request, response);
                return;
            }
        } else if (request.getParameter("proceso").equals("RASTREAR_MOVIMIENTO")) {
            // Revisa si tiene permisos
            if (!getSesion(request).getPermiso(idmod + "_CONSULTAR")) {
                idmensaje = 3;
                mensaje += MsjPermisoDenegado(request, "CEF", idmod + "_CONSULTAR");
                getSesion(request).setID_Mensaje(idmensaje, mensaje);
                RDP("CEF", getSesion(request).getConBD(), "NA", getSesion(request).getID_Usuario(),
                        idmod + "_CONSULTAR", idmod4 + "||||", mensaje);
                irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                return;
            }

            if (request.getParameter("ID") != null) {
                String[] valoresParam = request.getParameterValues("ID");
                if (valoresParam.length == 1) {
                    JRastreo rastreo = new JRastreo(request,
                            getSesion(request).getSesion(idmod)
                                    .generarTitulo(JUtil.Msj("CEF", idmod, "VISTA", "CONSULTAR_VENTA", 3)),
                            idmod4, request.getParameter("ID"));
                    String rastreo_imp = "true";
                    request.setAttribute("rastreo_imp", rastreo_imp);
                    // Ahora pone los atributos para el jsp
                    request.setAttribute("rastreo", rastreo);
                    RDP("CEF", getSesion(request).getConBD(), "OK", getSesion(request).getID_Usuario(),
                            idmod + "_CONSULTAR", idmod4 + "|" + request.getParameter("ID") + "|"
                                    + getSesion(request).getSesion(idmod).getEspecial() + "||",
                            "");
                    irApag("/forsetiweb/rastreo_imp.jsp", request, response);
                    return;

                } else {
                    idmensaje = 1;
                    mensaje += JUtil.Msj("GLB", "VISTA", "GLB", "SELEC-PROC", 2); //"PRECAUCION: Solo se permite consultar una pliza a la vez <br>";
                    getSesion(request).setID_Mensaje(idmensaje, mensaje);
                    irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                    return;
                }
            } else {
                idmensaje = 3;
                mensaje += JUtil.Msj("GLB", "VISTA", "GLB", "SELEC-PROC", 1); //" ERROR: Se debe enviar el identificador de la pliza que se quiere consultar<br>";
                getSesion(request).setID_Mensaje(idmensaje, mensaje);
                irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                return;
            }

        } else {
            idmensaje = 3;
            mensaje += JUtil.Msj("GLB", "VISTA", "GLB", "SELEC-PROC", 3);
            getSesion(request).setID_Mensaje(idmensaje, mensaje);
            irApag("/forsetiweb/caja_mensajes.jsp", request, response);
            return;
        }

    } else // si no se mandan parametros, manda a error
    {
        idmensaje = 3;
        mensaje += JUtil.Msj("GLB", "VISTA", "GLB", "SELEC-PROC", 3);
        getSesion(request).setID_Mensaje(idmensaje, mensaje);
        irApag("/forsetiweb/caja_mensajes.jsp", request, response);
        return;
    }

}

From source file:nextapp.echo2.webcontainer.filetransfer.JakartaCommonsFileUploadProvider.java

/**
 * @see nextapp.echo2.webcontainer.filetransfer.MultipartUploadSPI#updateComponent(nextapp.echo2.webrender.Connection,
 *      nextapp.echo2.app.filetransfer.UploadSelect)
 */// w  w w .ja  v a 2 s.c  o  m
public void updateComponent(Connection conn, UploadSelect uploadSelect) throws IOException, ServletException {

    DiskFileUpload handler = null;
    HttpServletRequest request = null;
    List items = null;
    Iterator it = null;
    FileItem item = null;
    boolean searching = true;
    InputStream in = null;
    int size = 0;
    String contentType = null;
    String name = null;

    try {
        handler = new DiskFileUpload();
        handler.setSizeMax(getFileUploadSizeLimit());
        handler.setSizeThreshold(getMemoryCacheThreshold());
        handler.setRepositoryPath(getDiskCacheLocation().getCanonicalPath());

        request = conn.getRequest();
        items = handler.parseRequest(request);

        searching = true;
        it = items.iterator();
        while (it.hasNext() && searching) {
            item = (FileItem) it.next();
            if (UploadFormService.FILE_PARAMETER_NAME.equals(item.getFieldName())) {
                in = item.getInputStream();
                size = (int) item.getSize();
                contentType = item.getContentType();
                name = item.getName();

                File tempFile = writeTempFile(in, uploadSelect);
                UploadEvent uploadEvent = new UploadEvent(tempFile, size, contentType, name);
                UploadSelectPeer.activateUploadSelect(uploadSelect, uploadEvent);

                searching = false;
            }
        }
    } catch (FileUploadException e) {
        throw new IOException(e.getMessage());
    }
}

From source file:oe.product.fck.common.SimpleUploaderServlet.java

/**
 * Manage the Upload requests.<br>
 *
 * The servlet accepts commands sent in the following format:<br>
 * simpleUploader?Type=ResourceType<br><br>
 * It store the file (renaming it in case a file with the same name exists) and then return an HTML file
 * with a javascript command in it.//from w  w  w.j  a  v a 2  s .com
 *
 */
public void doPost(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {

    if (debug)
        System.out.println("--- BEGIN DOPOST ---");

    response.setContentType("text/html; charset=UTF-8");
    response.setHeader("Cache-Control", "no-cache");
    PrintWriter out = response.getWriter();

    String typeStr = request.getParameter("Type");

    String currentPath = baseDir + typeStr;
    String currentDirPath = getServletContext().getRealPath(currentPath);
    currentPath = request.getContextPath() + currentPath;

    if (debug)
        System.out.println(currentDirPath);

    String retVal = "0";
    String newName = "";
    String fileUrl = "";
    String errorMessage = "";
    String $fileName = "";
    String fileName = "";
    if (enabled) {
        DiskFileUpload upload = new DiskFileUpload();
        try {
            List items = upload.parseRequest(request);

            Map fields = new HashMap();

            Iterator iter = items.iterator();
            while (iter.hasNext()) {
                FileItem item = (FileItem) iter.next();
                if (item.isFormField())
                    fields.put(item.getFieldName(), item.getString());
                else
                    fields.put(item.getFieldName(), item);
            }
            FileItem uplFile = (FileItem) fields.get("NewFile");
            String fileNameLong = uplFile.getName();
            fileNameLong = fileNameLong.replace('\\', '/');
            String[] pathParts = fileNameLong.split("/");
            fileName = pathParts[pathParts.length - 1];
            String nameWithoutExt = getNameWithoutExtension(fileName);
            fileName = new String(fileName.getBytes("GBK"), "UTF-8");
            String ext = getExtension(fileName);
            $fileName = UUID.randomUUID().toString() + "." + ext;
            fileUrl = currentPath + "/" + $fileName;
            File pathToSave = new File(currentDirPath, $fileName);

            if (extIsAllowed(typeStr, ext)) {
                int counter = 1;
                while (pathToSave.exists()) {
                    fileName = fileName + "(" + counter + ")" + "." + ext;
                    newName = fileName;
                    fileUrl = currentPath + "/" + $fileName + "(" + counter + ")" + "." + ext;
                    retVal = "201";
                    pathToSave = new File(currentDirPath, newName);
                    counter++;
                }
                uplFile.write(pathToSave);
            } else {
                retVal = "202";
                errorMessage = "";
                if (debug)
                    System.out.println("Invalid file type: " + ext);
            }
        } catch (Exception ex) {
            if (debug)
                ex.printStackTrace();
            retVal = "203";
        }
    } else {
        retVal = "1";
        errorMessage = "This file uploader is disabled. Please check the WEB-INF/web.xml file";
    }

    out.println("<script type=\"text/javascript\">");
    out.println("window.parent.OnUploadCompleted(" + retVal + ",'" + fileUrl + "','" + fileName + "','"
            + errorMessage + "');");
    out.println("</script>");
    out.flush();
    out.close();

    if (debug)
        System.out.println("--- END DOPOST ---");

}

From source file:org.apache.catalina.manager.HTMLManagerServlet.java

/**
 * Process a POST request for the specified resource.
 *
 * @param request The servlet request we are processing
 * @param response The servlet response we are creating
 *
 * @exception IOException if an input/output error occurs
 * @exception ServletException if a servlet-specified error occurs
 *///w  w  w  .  ja v a 2 s.c o  m
public void doPost(HttpServletRequest request, HttpServletResponse response)
        throws IOException, ServletException {

    // Identify the request parameters that we need
    String command = request.getPathInfo();

    if (command == null || !command.equals("/upload")) {
        doGet(request, response);
        return;
    }

    // Prepare our output writer to generate the response message
    response.setContentType("text/html; charset=" + Constants.CHARSET);

    String message = "";

    // Create a new file upload handler
    DiskFileUpload upload = new DiskFileUpload();

    // Get the tempdir
    File tempdir = (File) getServletContext().getAttribute("javax.servlet.context.tempdir");
    // Set upload parameters
    upload.setSizeMax(-1);
    upload.setRepositoryPath(tempdir.getCanonicalPath());

    // Parse the request
    String basename = null;
    File appBaseDir = null;
    String war = null;
    FileItem warUpload = null;
    try {
        List items = upload.parseRequest(request);

        // Process the uploaded fields
        Iterator iter = items.iterator();
        while (iter.hasNext()) {
            FileItem item = (FileItem) iter.next();

            if (!item.isFormField()) {
                if (item.getFieldName().equals("deployWar") && warUpload == null) {
                    warUpload = item;
                } else {
                    item.delete();
                }
            }
        }
        while (true) {
            if (warUpload == null) {
                message = sm.getString("htmlManagerServlet.deployUploadNoFile");
                break;
            }
            war = warUpload.getName();
            if (!war.toLowerCase().endsWith(".war")) {
                message = sm.getString("htmlManagerServlet.deployUploadNotWar", war);
                break;
            }
            // Get the filename if uploaded name includes a path
            if (war.lastIndexOf('\\') >= 0) {
                war = war.substring(war.lastIndexOf('\\') + 1);
            }
            if (war.lastIndexOf('/') >= 0) {
                war = war.substring(war.lastIndexOf('/') + 1);
            }
            // Identify the appBase of the owning Host of this Context
            // (if any)
            String appBase = null;
            appBase = ((Host) context.getParent()).getAppBase();
            appBaseDir = new File(appBase);
            if (!appBaseDir.isAbsolute()) {
                appBaseDir = new File(System.getProperty("catalina.base"), appBase);
            }
            basename = war.substring(0, war.indexOf(".war"));
            File file = new File(appBaseDir, war);
            if (file.exists()) {
                message = sm.getString("htmlManagerServlet.deployUploadWarExists", war);
                break;
            }
            warUpload.write(file);
            try {
                URL url = file.toURL();
                war = url.toString();
                war = "jar:" + war + "!/";
            } catch (MalformedURLException e) {
                file.delete();
                throw e;
            }
            break;
        }
    } catch (Exception e) {
        message = sm.getString("htmlManagerServlet.deployUploadFail", e.getMessage());
        log(message, e);
    } finally {
        if (warUpload != null) {
            warUpload.delete();
        }
        warUpload = null;
    }

    // Extract the nested context deployment file (if any)
    File localWar = new File(appBaseDir, basename + ".war");
    File localXml = new File(configBase, basename + ".xml");
    try {
        extractXml(localWar, localXml);
    } catch (IOException e) {
        log("managerServlet.extract[" + localWar + "]", e);
        return;
    }
    String config = null;
    try {
        if (localXml.exists()) {
            URL url = localXml.toURL();
            config = url.toString();
        }
    } catch (MalformedURLException e) {
        throw e;
    }

    // If there were no errors, deploy the WAR
    if (message.length() == 0) {
        message = deployInternal(config, null, war);
    }

    list(request, response, message);
}

From source file:org.apache.catalina.servlets.HTMLManagerServlet.java

/**
 * Process a POST request for the specified resource.
 *
 * @param request The servlet request we are processing
 * @param response The servlet response we are creating
 *
 * @exception IOException if an input/output error occurs
 * @exception ServletException if a servlet-specified error occurs
 *//*from w w  w.j  a va2 s  . co m*/
public void doPost(HttpServletRequest request, HttpServletResponse response)
        throws IOException, ServletException {

    // Identify the request parameters that we need
    String command = request.getPathInfo();

    if (command == null || !command.equals("/upload")) {
        doGet(request, response);
        return;
    }

    // Prepare our output writer to generate the response message
    Locale locale = Locale.getDefault();
    String charset = context.getCharsetMapper().getCharset(locale);
    response.setLocale(locale);
    response.setContentType("text/html; charset=" + charset);

    String message = "";

    // Create a new file upload handler
    DiskFileUpload upload = new DiskFileUpload();

    // Get the tempdir
    File tempdir = (File) getServletContext().getAttribute("javax.servlet.context.tempdir");
    // Set upload parameters
    upload.setSizeMax(-1);
    upload.setRepositoryPath(tempdir.getCanonicalPath());

    // Parse the request
    String war = null;
    FileItem warUpload = null;
    try {
        List items = upload.parseRequest(request);

        // Process the uploaded fields
        Iterator iter = items.iterator();
        while (iter.hasNext()) {
            FileItem item = (FileItem) iter.next();

            if (!item.isFormField()) {
                if (item.getFieldName().equals("installWar") && warUpload == null) {
                    warUpload = item;
                } else {
                    item.delete();
                }
            }
        }
        while (true) {
            if (warUpload == null) {
                message = sm.getString("htmlManagerServlet.installUploadNoFile");
                break;
            }
            war = warUpload.getName();
            if (!war.toLowerCase().endsWith(".war")) {
                message = sm.getString("htmlManagerServlet.installUploadNotWar", war);
                break;
            }
            // Get the filename if uploaded name includes a path
            if (war.lastIndexOf('\\') >= 0) {
                war = war.substring(war.lastIndexOf('\\') + 1);
            }
            if (war.lastIndexOf('/') >= 0) {
                war = war.substring(war.lastIndexOf('/') + 1);
            }
            // Identify the appBase of the owning Host of this Context
            // (if any)
            String appBase = null;
            File appBaseDir = null;
            appBase = ((Host) context.getParent()).getAppBase();
            appBaseDir = new File(appBase);
            if (!appBaseDir.isAbsolute()) {
                appBaseDir = new File(System.getProperty("catalina.base"), appBase);
            }
            File file = new File(appBaseDir, war);
            if (file.exists()) {
                message = sm.getString("htmlManagerServlet.installUploadWarExists", war);
                break;
            }
            warUpload.write(file);
            try {
                URL url = file.toURL();
                war = url.toString();
                war = "jar:" + war + "!/";
            } catch (MalformedURLException e) {
                file.delete();
                throw e;
            }
            break;
        }
    } catch (Exception e) {
        message = sm.getString("htmlManagerServlet.installUploadFail", e.getMessage());
        log(message, e);
    } finally {
        if (warUpload != null) {
            warUpload.delete();
        }
        warUpload = null;
    }

    // If there were no errors, install the WAR
    if (message.length() == 0) {
        message = install(null, null, war);
    }

    list(request, response, message);
}

From source file:org.apache.struts.upload.CommonsMultipartRequestHandler.java

/**
 * <p> Parses the input stream and partitions the parsed items into a set
 * of form fields and a set of file items. In the process, the parsed
 * items are translated from Commons FileUpload <code>FileItem</code>
 * instances to Struts <code>FormFile</code> instances. </p>
 *
 * @param request The multipart request to be processed.
 * @throws ServletException if an unrecoverable error occurs.
 */// w  w w .  j  av a  2 s. c  o m
public void handleRequest(HttpServletRequest request) throws ServletException {
    // Get the app config for the current request.
    ModuleConfig ac = (ModuleConfig) request.getAttribute(Globals.MODULE_KEY);

    // Create and configure a DIskFileUpload instance.
    DiskFileUpload upload = new DiskFileUpload();

    // The following line is to support an "EncodingFilter"
    // see http://issues.apache.org/bugzilla/show_bug.cgi?id=23255
    upload.setHeaderEncoding(request.getCharacterEncoding());

    // Set the maximum size before a FileUploadException will be thrown.
    upload.setSizeMax(getSizeMax(ac));

    // Set the maximum size that will be stored in memory.
    upload.setSizeThreshold((int) getSizeThreshold(ac));

    // Set the the location for saving data on disk.
    upload.setRepositoryPath(getRepositoryPath(ac));

    // Create the hash tables to be populated.
    elementsText = new Hashtable();
    elementsFile = new Hashtable();
    elementsAll = new Hashtable();

    // Parse the request into file items.
    List items = null;

    try {
        items = upload.parseRequest(request);
    } catch (DiskFileUpload.SizeLimitExceededException e) {
        // Special handling for uploads that are too big.
        request.setAttribute(MultipartRequestHandler.ATTRIBUTE_MAX_LENGTH_EXCEEDED, Boolean.TRUE);

        return;
    } catch (FileUploadException e) {
        log.error("Failed to parse multipart request", e);
        throw new ServletException(e);
    }

    // Partition the items into form fields and files.
    Iterator iter = items.iterator();

    while (iter.hasNext()) {
        FileItem item = (FileItem) iter.next();

        if (item.isFormField()) {
            addTextParameter(request, item);
        } else {
            addFileParameter(item);
        }
    }
}