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

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

Introduction

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

Prototype

public DiskFileUpload() 

Source Link

Document

Constructs an instance of this class which uses the default factory to create FileItem instances.

Usage

From source file:com.baobao121.baby.common.SimpleUploaderServlet.java

/**
 * Manage the Upload requests.<br>
 * //from   ww  w . j  av  a  2 s  .co m
 * 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.
 * 
 */
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 currentPath = "";
    String currentDirPath = "";
    String typeStr = request.getParameter("Type");
    UserCommonInfo info = null;
    info = (UserCommonInfo) request.getSession().getAttribute(SystemConstant.USER_COMMON_INFO);
    if (info == null) {
        info = (UserCommonInfo) request.getSession().getAttribute(SystemConstant.ADMIN_INFO);
    }
    currentPath = baseDir + "images/";
    currentDirPath = getServletContext().getRealPath(currentPath);
    if (!(new File(currentDirPath).isDirectory())) {
        new File(currentDirPath).mkdir();
    }
    if (info.getObjectTableName() == null || info.getObjectTableName().equals("")) {
        currentPath += "admin/";
    } else {
        if (info.getObjectTableName().equals(SystemConstant.BABY_INFO_TABLE_NAME)) {
            currentPath += "babyInfo/";
        }
        if (info.getObjectTableName().equals(SystemConstant.KG_TEACHER_INFO_TABLE_NAME)) {
            currentPath += "teacherInfo/";
        }
    }
    currentDirPath = getServletContext().getRealPath(currentPath);
    if (!(new File(currentDirPath).isDirectory())) {
        new File(currentDirPath).mkdir();
    }
    currentPath += info.getId();
    currentDirPath = getServletContext().getRealPath(currentPath);
    if (!(new File(currentDirPath).isDirectory())) {
        new File(currentDirPath).mkdir();
    }
    if (debug)
        System.out.println(currentDirPath);

    String retVal = "0";
    String newName = "";
    String fileUrl = "";
    String errorMessage = "";

    if (enabled) {
        DiskFileUpload upload = new DiskFileUpload();
        try {
            upload.setHeaderEncoding("utf-8");
            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();
            InputStream is = uplFile.getInputStream();
            fileNameLong = fileNameLong.replace('\\', '/');
            String[] pathParts = fileNameLong.split("/");
            String fileName = pathParts[pathParts.length - 1];
            Calendar calendar = Calendar.getInstance();
            String nameWithoutExt = String.valueOf(calendar.getTimeInMillis());
            ;
            String ext = getExtension(fileName);
            fileName = nameWithoutExt + "." + ext;
            fileUrl = currentPath + "/" + fileName;
            if (extIsAllowed(typeStr, ext)) {
                FileOutputStream desc = new FileOutputStream(currentDirPath + "/" + fileName);
                changeDimension(is, desc, 450, 1000);
                if (info.getObjectTableName() != null && !info.getObjectTableName().equals("")) {
                    Photo photo = new Photo();
                    photo.setPhotoName(fileName);
                    PhotoAlbum album = babyAlbumDao.getMAlbumByUser(info.getId(), info.getObjectTableName());
                    if (album.getId() != null) {
                        Long albumId = album.getId();
                        photo.setPhotoAlbumId(albumId);
                        photo.setPhotoLink(fileUrl);
                        photo.setDescription("");
                        photo.setReadCount(0L);
                        photo.setCommentCount(0L);
                        photo.setReadPopedom("1");
                        photo.setCreateTime(DateUtil.getCurrentDateTimestamp());
                        photo.setModifyTime(DateUtil.getCurrentDateTimestamp());
                        babyPhotoDao.save(photo);
                        babyAlbumDao.updateAlbumCount(albumId);
                    }
                }
            } else {
                retVal = "202";
                errorMessage = "";
                if (debug)
                    System.out.println("?: " + ext);
            }
        } catch (Exception ex) {
            if (debug)
                ex.printStackTrace();
            retVal = "203";
        }
    } else {
        retVal = "1";
        errorMessage = "??";
    }

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

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

}

From source file:easyJ.http.upload.CommonsMultipartRequestHandler.java

/**
 * 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.
 * //www.  j a v a 2s.  co m
 * @param request
 *                The multipart request to be processed.
 * @throws ServletException
 *                 if an unrecoverable error occurs.
 */
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();
    // Set the maximum size before a FileUploadException will be thrown.
    upload.setSizeMax((int) 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) {
        EasyJLog.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);
        }
    }
}

From source file:cn.itcast.fredck.FCKeditor.connector.ConnectorServlet.java

/**
 * Manage the Post requests (FileUpload).<br>
 *
 * The servlet accepts commands sent in the following format:<br>
 * connector?Command=FileUpload&Type=ResourceType&CurrentFolder=FolderPath<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 ww  w  . ja v  a 2s .  c  o  m
 *
 */
@Override
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 commandStr = request.getParameter("Command");
    String typeStr = request.getParameter("Type");
    String currentFolderStr = request.getParameter("CurrentFolder");

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

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

    String retVal = "0";
    String newName = "";

    if (!commandStr.equals("FileUpload"))
        retVal = "203";
    else {
        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("/");
            String fileName = pathParts[pathParts.length - 1];

            String nameWithoutExt = getNameWithoutExtension(fileName);
            String ext = getExtension(fileName);
            File pathToSave = new File(currentDirPath, fileName);
            int counter = 1;
            while (pathToSave.exists()) {
                newName = nameWithoutExt + "(" + counter + ")" + "." + ext;
                retVal = "201";
                pathToSave = new File(currentDirPath, newName);
                counter++;
            }
            uplFile.write(pathToSave);
        } catch (Exception ex) {
            retVal = "203";
        }

    }

    out.println("<script type=\"text/javascript\">");
    out.println("window.parent.frames['frmUpload'].OnUploadCompleted(" + retVal + ",'" + newName + "');");
    out.println("</script>");
    out.flush();
    out.close();

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

}

From source file:com.krawler.spring.mailIntegration.mailIntegrationController.java

public ModelAndView mailIntegrate(HttpServletRequest request, HttpServletResponse response)
        throws ServletException {
    KwlReturnObject kmsg = null;/*from w w w .  j  a  v  a  2s  .com*/
    JSONObject obj = new JSONObject();
    String url = storageHandlerImpl.GetSOAPServerUrl();
    String res = "";
    boolean isFormSubmit = false;
    boolean isDefaultModelView = true;
    ModelAndView mav = null;
    try {
        if (!StringUtil.isNullOrEmpty(request.getParameter("action"))
                && request.getParameter("action").equals("getoutboundconfid")) {
            String str = "";
            url += "getOutboundConfiId.php";
            URL u = new URL(url);
            URLConnection uc = u.openConnection();
            uc.setDoOutput(true);
            uc.setUseCaches(false);
            uc.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");

            PrintWriter pw = new PrintWriter(uc.getOutputStream());
            pw.println(str);
            pw.close();
            BufferedReader in = new BufferedReader(new InputStreamReader(uc.getInputStream()));
            String line = "";

            while ((line = in.readLine()) != null) {
                res += line;
            }
            in.close();
        } else if (!StringUtil.isNullOrEmpty(request.getParameter("emailUIAction"))
                && request.getParameter("emailUIAction").equals("uploadAttachment")) {
            isDefaultModelView = false;
            url += "krawlermails.php";

            String pass = "";
            String currUser = sessionHandlerImplObj.getUserName(request) + "_";
            String userid = sessionHandlerImplObj.getUserid(request);

            String jsonStr = profileHandlerDAOObj.getUser_hash(userid);
            JSONObject currUserAuthInfo = new JSONObject(jsonStr);
            if (currUserAuthInfo.has("userhash")) {
                currUser += currUserAuthInfo.getString("subdomain");
                pass = currUserAuthInfo.getString("userhash");
            }

            Enumeration en = request.getParameterNames();
            String str = "username=" + currUser + "&user_hash=" + pass;
            while (en.hasMoreElements()) {
                String paramName = (String) en.nextElement();
                String paramValue = request.getParameter(paramName);
                str = str + "&" + paramName + "=" + URLEncoder.encode(paramValue);
            }

            List fileItems = null;
            HashMap<String, String> arrParam = new HashMap<String, String>();
            ArrayList<FileItem> fi = new ArrayList<FileItem>();
            //                if (request.getParameter("email_attachment") != null) {
            DiskFileUpload fu = new DiskFileUpload();
            fileItems = fu.parseRequest(request);
            //                    crmDocumentDAOObj.parseRequest(fileItems, arrParam, fi, fileUpload);
            FileItem fi1 = null;
            for (Iterator k = fileItems.iterator(); k.hasNext();) {
                fi1 = (FileItem) k.next();
                if (fi1.isFormField()) {
                    arrParam.put(fi1.getFieldName(), fi1.getString("UTF-8"));
                } else {
                    if (fi1.getSize() != 0) {
                        fi.add(fi1);
                    }
                }
            }
            //                }
            long sizeinmb = 10; // 10 MB
            long maxsize = sizeinmb * 1024 * 1024;
            if (fi.size() > 0) {
                for (int cnt = 0; cnt < fi.size(); cnt++) {

                    if (fi.get(cnt).getSize() <= maxsize) {
                        try {
                            byte[] filecontent = fi.get(cnt).get();

                            URL u = new URL(url + "?" + str);
                            URLConnection uc = u.openConnection();
                            uc.setDoOutput(true);
                            uc.setUseCaches(false);
                            uc.setRequestProperty("Content-Type",
                                    "multipart/form-data; boundary=---------------------------4664151417711");
                            uc.setRequestProperty("Content-length", "" + filecontent.length);
                            uc.setRequestProperty("Cookie", "");

                            OutputStream outstream = uc.getOutputStream();

                            String newline = "\r\n";
                            String b1 = "";
                            b1 += "-----------------------------4664151417711" + newline;
                            b1 += "Content-Disposition: form-data; name=\"email_attachment\"; filename=\""
                                    + fi.get(cnt).getName() + "\"" + newline;
                            b1 += "Content-Type: text" + newline;
                            b1 += newline;

                            String b2 = "";
                            b2 += newline + "-----------------------------4664151417711--" + newline;

                            String b3 = "";
                            b3 += "-----------------------------4664151417711" + newline;
                            b3 += "Content-Disposition: form-data; name=\"addval\";" + newline;
                            b3 += newline;

                            String b4 = "";
                            b4 += newline + "-----------------------------4664151417711--" + newline;

                            outstream.write(b1.getBytes());
                            outstream.write(b1.getBytes());
                            outstream.write(b1.getBytes());
                            outstream.write(fi.get(cnt).get());
                            outstream.write(b4.getBytes());
                            PrintWriter pw = new PrintWriter(outstream);
                            pw.println(str);
                            pw.close();
                            outstream.flush();

                            BufferedReader in = new BufferedReader(new InputStreamReader(uc.getInputStream()));
                            String line = "";

                            while ((line = in.readLine()) != null) {
                                res += line;
                            }
                            in.close();
                        } catch (Exception e) {
                            throw ServiceException.FAILURE(e.getMessage(), e);
                        }
                    } else {
                        JSONObject jerrtemp = new JSONObject();
                        jerrtemp.put("Success", "Fail");
                        jerrtemp.put("errmsg", "Attachment size should be upto " + sizeinmb + "mb");
                        res = jerrtemp.toString();
                    }
                }
            } else {
                JSONObject jerrtemp = new JSONObject();
                jerrtemp.put("Success", "Fail");
                jerrtemp.put("errmsg", "Attachment file size should be greater than zero");
                res = jerrtemp.toString();
            }

        } else {

            url += "krawlermails.php";

            String pass = "";
            String currUser = sessionHandlerImplObj.getUserName(request) + "_";
            String userid = sessionHandlerImplObj.getUserid(request);

            String jsonStr = profileHandlerDAOObj.getUser_hash(userid);
            JSONObject currUserAuthInfo = new JSONObject(jsonStr);
            if (currUserAuthInfo.has("userhash")) {
                currUser += currUserAuthInfo.getString("subdomain");
                pass = currUserAuthInfo.getString("userhash");
            }

            Enumeration en = request.getParameterNames();
            String str = "username=" + currUser + "&user_hash=" + pass;
            while (en.hasMoreElements()) {
                String paramName = (String) en.nextElement();
                String paramValue = request.getParameter(paramName);
                str = str + "&" + paramName + "=" + URLEncoder.encode(paramValue);
            }

            URL u = new URL(url);
            URLConnection uc = u.openConnection();
            uc.setDoOutput(true);
            uc.setUseCaches(false);
            uc.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");

            PrintWriter pw = new PrintWriter(uc.getOutputStream());
            pw.println(str);
            pw.close();

            if ((!StringUtil.isNullOrEmpty(request.getParameter("emailUIAction"))
                    && request.getParameter("emailUIAction").equals("getMessageListXML"))
                    || (!StringUtil.isNullOrEmpty(request.getParameter("emailUIAction")) && request
                            .getParameter("emailUIAction").equals("getMessageListKrawlerFoldersXML"))) {
                //response.setContentType("text/xml;charset=UTF-8");
                isFormSubmit = true;
                int totalCnt = 0;
                int unreadCnt = 0;
                JSONObject jobj = new JSONObject();
                JSONArray jarr = new JSONArray();
                DocumentBuilderFactory docBuilderFactory = DocumentBuilderFactory.newInstance();
                DocumentBuilder docBuilder = docBuilderFactory.newDocumentBuilder();
                Document doc = docBuilder.parse(uc.getInputStream());

                NodeList cntentity = doc.getElementsByTagName("TotalCount");
                Node cntNode = cntentity.item(0);
                if (cntNode.getNodeType() == Node.ELEMENT_NODE) {
                    Element firstPersonElement = (Element) cntNode;
                    totalCnt = Integer.parseInt(firstPersonElement.getChildNodes().item(0).getNodeValue());
                }

                cntentity = doc.getElementsByTagName("UnreadCount");
                cntNode = cntentity.item(0);
                if (cntNode.getNodeType() == Node.ELEMENT_NODE) {
                    Element firstPersonElement = (Element) cntNode;
                    unreadCnt = Integer.parseInt(firstPersonElement.getChildNodes().item(0).getNodeValue());
                }
                String dateFormatId = sessionHandlerImpl.getDateFormatID(request);
                String timeFormatId = sessionHandlerImpl.getUserTimeFormat(request);
                String timeZoneDiff = sessionHandlerImpl.getTimeZoneDifference(request);
                SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

                // check for Mail server protocol
                boolean isYahoo = false;

                if (request.getParameter("mbox").equals("INBOX")) {
                    u = new URL(url);
                    uc = u.openConnection();
                    uc.setDoOutput(true);
                    uc.setUseCaches(false);
                    uc.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
                    str = "username=" + currUser + "&user_hash=" + pass
                            + "&action=EmailUIAjax&emailUIAction=getIeAccount&ieId="
                            + request.getParameter("ieId") + "&module=Emails&to_pdf=true";
                    pw = new PrintWriter(uc.getOutputStream());
                    pw.println(str);
                    pw.close();
                    BufferedReader in = new BufferedReader(new InputStreamReader(uc.getInputStream()));
                    String line = "";
                    while ((line = in.readLine()) != null) {
                        res += line;
                    }
                    in.close();

                    JSONObject ieIDInfo = new JSONObject(res);
                    if (ieIDInfo.getString("server_url").equals("pop.mail.yahoo.com"))
                        isYahoo = true;
                }
                sdf.setTimeZone(TimeZone.getTimeZone("GMT+00:00"));
                DateFormat userdft = null;
                if (!isYahoo)
                    userdft = KwlCommonTablesDAOObj.getUserDateFormatter(dateFormatId, timeFormatId,
                            timeZoneDiff);
                else
                    userdft = KwlCommonTablesDAOObj.getOnlyDateFormatter(dateFormatId, timeFormatId);

                NodeList entity = doc.getElementsByTagName("Emails");
                NodeList email = ((Element) entity.item(0)).getElementsByTagName("Email");
                for (int i = 0; i < email.getLength(); i++) {
                    JSONObject tmpObj = new JSONObject();
                    Node rowElement = email.item(i);
                    if (rowElement.getNodeType() == Node.ELEMENT_NODE) {
                        NodeList childNodes = rowElement.getChildNodes();
                        for (int j = 0; j < childNodes.getLength(); j++) {
                            Node node = childNodes.item(j);
                            if (node.getNodeType() == Node.ELEMENT_NODE) {
                                Element firstPersonElement = (Element) node;
                                if (firstPersonElement != null) {
                                    NodeList textFNList = firstPersonElement.getChildNodes();
                                    if (textFNList.item(0) != null) {
                                        if (request.getSession().getAttribute("iPhoneCRM") != null) {
                                            String body = ((Node) textFNList.item(0)).getNodeValue().trim();
                                            if (body.contains("&lt;"))
                                                body = body.replace("&lt;", "<");
                                            if (body.contains("&gt;"))
                                                body = body.replace("&gt;", ">");
                                            tmpObj.put(node.getNodeName(), body);
                                        } else {
                                            String value = ((Node) textFNList.item(0)).getNodeValue().trim();
                                            if (node.getNodeName().equals("date")) {
                                                value = userdft.format(sdf.parse(value));
                                            }
                                            tmpObj.put(node.getNodeName(), value);
                                        }
                                    }
                                }
                            }
                        }
                    }
                    jarr.put(tmpObj);
                }
                jobj.put("data", jarr);
                jobj.put("totalCount", totalCnt);
                jobj.put("unreadCount", unreadCnt);
                res = jobj.toString();
            } else {
                BufferedReader in = new BufferedReader(new InputStreamReader(uc.getInputStream()));
                String line = "";

                while ((line = in.readLine()) != null) {
                    res += line;
                }
                in.close();
                if ((!StringUtil.isNullOrEmpty(request.getParameter("emailUIAction"))
                        && request.getParameter("emailUIAction").equals("fillComposeCache"))) {
                    isFormSubmit = true;
                } else if (!StringUtil.isNullOrEmpty(request.getParameter("emailUIAction"))
                        && request.getParameter("emailUIAction").equals("refreshKrawlerFolders")) {
                    if (res.equals("Not a valid entry method")) {
                        ArrayList filter_names = new ArrayList();
                        ArrayList filter_params = new ArrayList();
                        filter_names.add("u.userID");
                        filter_params.add(userid);
                        HashMap<String, Object> requestParams = new HashMap<String, Object>();
                        KwlReturnObject kwlobject = profileHandlerDAOObj.getUserDetails(requestParams,
                                filter_names, filter_params);
                        List li = kwlobject.getEntityList();
                        if (li.size() >= 0) {
                            if (li.iterator().hasNext()) {
                                User user = (User) li.iterator().next();
                                String returnStr = addUserEntryForEmails(
                                        user.getCompany().getCreator().getUserID(), user, user.getUserLogin(),
                                        user.getUserLogin().getPassword(), false);
                                JSONObject emailresult = new JSONObject(returnStr);
                                if (Boolean.parseBoolean(emailresult.getString("success"))) {
                                    pw = new PrintWriter(uc.getOutputStream());
                                    pw.println(str);
                                    pw.close();
                                    in = new BufferedReader(new InputStreamReader(uc.getInputStream()));
                                    line = "";
                                    while ((line = in.readLine()) != null) {
                                        res += line;
                                    }
                                    in.close();
                                }
                            }
                        }
                    }
                } else if (res.equals("bool(false)")) {
                    res = "false";
                }
            }
        }
        if (!isFormSubmit) {
            JSONObject resjobj = new JSONObject();
            resjobj.put("valid", true);
            resjobj.put("data", res);
            res = resjobj.toString();
        }
        if (isDefaultModelView)
            mav = new ModelAndView("jsonView-ex", "model", res);
        else
            mav = new ModelAndView("jsonView", "model", res);
    } catch (SessionExpiredException e) {
        mav = new ModelAndView("jsonView-ex", "model", "{'valid':false}");
        System.out.println(e.getMessage());
    } catch (Exception e) {
        mav = new ModelAndView("jsonView-ex", "model",
                "{'valid':true,data:{success:false,errmsg:'" + e.getMessage() + "'}}");
        System.out.println(e.getMessage());
    }
    return mav;
}

From source file:com.fredck.FCKeditor.connector.ConnectorServlet.java

/**
 * Manage the Post requests (FileUpload).<br>
 * /*from  w  ww.j  av a 2  s  .c o m*/
 * The servlet accepts commands sent in the following format:<br>
 * connector?Command=FileUpload&Type=ResourceType&CurrentFolder=FolderPath<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.
 * 
 */
public void doPost(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
    System.out.println("ConnectorServlet.doPost");
    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 commandStr = request.getParameter("Command");
    String typeStr = request.getParameter("Type");
    String currentFolderStr = request.getParameter("CurrentFolder");

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

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

    String retVal = "0";
    String newName = "";

    if (!commandStr.equals("FileUpload"))
        retVal = "203";
    else {
        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("/");
            String fileName = pathParts[pathParts.length - 1];

            String nameWithoutExt = getNameWithoutExtension(fileName);
            String ext = getExtension(fileName);
            File pathToSave = new File(currentDirPath, fileName);
            int counter = 1;
            while (pathToSave.exists()) {
                newName = nameWithoutExt + "(" + counter + ")" + "." + ext;
                retVal = "201";
                pathToSave = new File(currentDirPath, newName);
                counter++;
            }
            uplFile.write(pathToSave);
        } catch (Exception ex) {
            retVal = "203";
        }

    }
    System.out.println("1111111111111111111111");
    out.println("<script type=\"text/javascript\">");
    out.println("window.parent.frames['frmUpload'].OnUploadCompleted(" + retVal + ",'" + newName + "');");
    out.println("</script>");
    out.flush();
    out.close();

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

}

From source file:com.baobao121.baby.common.ConnectorServlet.java

/**
 * Manage the Post requests (FileUpload).<br>
 * //from   ww w. jav a  2s .  co m
 * The servlet accepts commands sent in the following format:<br>
 * connector?Command=FileUpload&Type=ResourceType&CurrentFolder=FolderPath<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.
 * 
 */
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 commandStr = request.getParameter("Command");
    String typeStr = request.getParameter("Type");
    String currentFolderStr = request.getParameter("CurrentFolder");

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

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

    String retVal = "0";
    String newName = "";

    if (!commandStr.equals("FileUpload"))
        retVal = "203";
    else {
        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("/");
            String fileName = pathParts[pathParts.length - 1];

            String nameWithoutExt = getNameWithoutExtension(fileName);
            String ext = getExtension(fileName);
            File pathToSave = new File(currentDirPath, fileName);
            int counter = 1;
            while (pathToSave.exists()) {
                newName = nameWithoutExt + "(" + counter + ")" + "." + ext;
                retVal = "201";
                pathToSave = new File(currentDirPath, newName);
                counter++;
            }
            uplFile.write(pathToSave);
        } catch (Exception ex) {
            retVal = "203";
        }

    }

    out.println("<script type=\"text/javascript\">");
    out.println("window.parent.frames['frmUpload'].OnUploadCompleted(" + retVal + ",'" + newName + "');");
    out.println("</script>");
    out.flush();
    out.close();

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

}

From source file:com.rapidsist.portal.cliente.editor.ConnectorServlet.java

/**
 * Manage the Post requests (FileUpload).<br>
 *
 * The servlet accepts commands sent in the following format:<br>
 * connector?Command=FileUpload&Type=ResourceType&CurrentFolder=FolderPath<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  a2 s .co m*/
 *
 */
public void doPost(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {

    System.out.println("PASO POR EL METODO doPost DEL SERVLET ConnectorServlet");
    response.setContentType("text/html; charset=UTF-8");
    response.setHeader("Cache-Control", "no-cache");
    PrintWriter out = response.getWriter();

    String commandStr = request.getParameter("Command");
    String typeStr = request.getParameter("Type");
    String currentFolderStr = request.getParameter("CurrentFolder");

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

    String retVal = "0";
    String newName = "";

    if (!commandStr.equals("FileUpload"))
        retVal = "203";
    else {
        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("/");
            String fileName = pathParts[pathParts.length - 1];

            String nameWithoutExt = getNameWithoutExtension(fileName);
            String ext = getExtension(fileName);
            File pathToSave = new File(currentDirPath, fileName);
            int counter = 1;
            while (pathToSave.exists()) {
                newName = nameWithoutExt + "(" + counter + ")" + "." + ext;
                retVal = "201";
                pathToSave = new File(currentDirPath, newName);
                counter++;
            }
            uplFile.write(pathToSave);
        } catch (Exception ex) {
            retVal = "203";
        }

    }

    out.println("<script type=\"text/javascript\">");
    out.println("window.parent.frames['frmUpload'].OnUploadCompleted(" + retVal + ",'" + newName + "');");
    out.println("</script>");
    out.flush();
    out.close();

}

From source file:com.sun.faban.harness.webclient.Uploader.java

/**
 * Responsible for uploading the runs.// w  w  w. j  a v a 2  s.co  m
 * @param request
 * @param response
 * @return String
 * @throws java.io.IOException
 * @throws javax.servlet.ServletException
 * @throws java.lang.ClassNotFoundException
 */
public String uploadRuns(HttpServletRequest request, HttpServletResponse response)
        throws IOException, ServletException, ClassNotFoundException {
    // 3. Upload the run
    HashSet<String> duplicateSet = new HashSet<String>();
    HashSet<String> replaceSet = new HashSet<String>();
    String host = null;
    String key = null;
    boolean origin = false; // Whether the upload is to the original
    // run requestor. If so, key is needed.
    DiskFileUpload fu = new DiskFileUpload();
    // No maximum size
    fu.setSizeMax(-1);
    // maximum size that will be stored in memory
    fu.setSizeThreshold(4096);
    // the location for saving data that is larger than
    // getSizeThreshold()
    fu.setRepositoryPath(Config.TMP_DIR);

    List fileItems = null;
    try {
        fileItems = fu.parseRequest(request);
    } catch (FileUploadException e) {
        throw new ServletException(e);
    }
    // assume we know there are two files. The first file is a small
    // text file, the second is unknown and is written to a file on
    // the server
    for (Iterator i = fileItems.iterator(); i.hasNext();) {
        FileItem item = (FileItem) i.next();
        String fieldName = item.getFieldName();
        if (item.isFormField()) {
            if ("host".equals(fieldName)) {
                host = item.getString();
            } else if ("replace".equals(fieldName)) {
                replaceSet.add(item.getString());
            } else if ("key".equals(fieldName)) {
                key = item.getString();
            } else if ("origin".equals(fieldName)) {
                String value = item.getString();
                origin = Boolean.parseBoolean(value);
            }
            continue;
        }

        if (host == null) {
            logger.warning("Host not received on upload request!");
            response.sendError(HttpServletResponse.SC_FORBIDDEN);
            break;
        }

        // The host, origin, key info must be here before we receive
        // any file.
        if (origin) {
            if (Config.daemonMode != Config.DaemonModes.POLLEE) {
                logger.warning("Origin upload requested. Not pollee!");
                response.sendError(HttpServletResponse.SC_FORBIDDEN);
                break;
            }
            if (key == null) {
                logger.warning("Origin upload requested. No key!");
                response.sendError(HttpServletResponse.SC_FORBIDDEN);
                break;
            }
            if (!RunRetriever.authenticate(host, key)) {
                logger.warning("Origin upload requested. " + "Host/key mismatch: " + host + '/' + key + "!");
                response.sendError(HttpServletResponse.SC_FORBIDDEN);
                break;
            }
        }

        if (!"jarfile".equals(fieldName)) // ignore
            continue;

        String fileName = item.getName();

        if (fileName == null) // We don't process files without names
            continue;

        // Now, this name may have a path attached, dependent on the
        // source browser. We need to cover all possible clients...
        char[] pathSeparators = { '/', '\\' };
        // Well, if there is another separator we did not account for,
        // just add it above.

        for (int j = 0; j < pathSeparators.length; j++) {
            int idx = fileName.lastIndexOf(pathSeparators[j]);
            if (idx != -1) {
                fileName = fileName.substring(idx + 1);
                break;
            }
        }

        // Ignore all non-jarfiles.
        if (!fileName.toLowerCase().endsWith(".jar"))
            continue;
        File uploadFile = new File(Config.TMP_DIR, host + '.' + fileName);
        try {
            item.write(uploadFile);
        } catch (Exception e) {
            throw new ServletException(e);
        }
        int runIdx = fileName.lastIndexOf(".");
        String runName = host + '.' + fileName.substring(0, runIdx);
        File runTmp = unjarTmp(uploadFile);
        //Check if archived recently
        if (checkIfArchived(runName) && !(replaceSet.contains(fileName.substring(0, runIdx)))) {
            //Now check if timestamps are same
            //Get the timestamp of run being uploaded at this point
            //ts is timestamp of run being uploaded
            String ts = getRunIdTimestamp(runName, Config.TMP_DIR);
            l1: while (true) {
                //reposTs is timestamp of run being compared in the
                //repository
                String reposTs = getRunIdTimestamp(runName, Config.OUT_DIR);
                if (reposTs.equals(ts)) {
                    duplicateSet.add(fileName.substring(0, runIdx));
                } else {
                    runName = getNextRunId(runName);
                    if (checkIfArchived(runName))
                        continue l1;
                    File newRunNameFile = new File(Config.OUT_DIR, runName);
                    if (newRunNameFile.exists()) {
                        recursiveDelete(newRunNameFile);
                    }
                    if (recursiveCopy(runTmp, newRunNameFile)) {
                        newRunNameFile.setLastModified(runTmp.lastModified());
                        uploadTags(runName);
                        uploadFile.delete();
                        recursiveDelete(runTmp);
                    } else {
                        logger.warning("Origin upload requested. " + "Copy error!");
                        response.sendError(HttpServletResponse.SC_NOT_ACCEPTABLE);
                        break;
                    }
                    response.setStatus(HttpServletResponse.SC_CREATED);
                }
                break;
            }
        } else {
            //File runTmp = unjarTmp(uploadFile);

            String runId = null;

            if (origin) {
                // Change origin file to know where this run came from.
                File metaInf = new File(runTmp, "META-INF");
                File originFile = new File(metaInf, "origin");
                if (!originFile.exists()) {
                    logger.warning("Origin upload requested. " + "Origin file does not exist!");
                    response.sendError(HttpServletResponse.SC_NOT_ACCEPTABLE, "Origin file does not exist!");
                    break;
                }

                RunId origRun;
                try {
                    origRun = new RunId(readStringFromFile(originFile).trim());
                } catch (IndexOutOfBoundsException e) {
                    response.sendError(HttpServletResponse.SC_NOT_ACCEPTABLE,
                            "Origin file error. " + e.getMessage());
                    break;
                }

                runId = origRun.getBenchName() + '.' + origRun.getRunSeq();
                String localHost = origRun.getHostName();
                if (!localHost.equals(Config.FABAN_HOST)) {
                    logger.warning("Origin upload requested. Origin " + "host" + localHost
                            + " does not match this host " + Config.FABAN_HOST + '!');
                    response.sendError(HttpServletResponse.SC_FORBIDDEN);
                    break;
                }
                writeStringToFile(runTmp.getName(), originFile);
            } else {
                runId = runTmp.getName();
            }
            File newRunFile = new File(Config.OUT_DIR, runId);
            if (newRunFile.exists()) {
                recursiveDelete(newRunFile);
            }
            if (recursiveCopy(runTmp, newRunFile)) {
                newRunFile.setLastModified(runTmp.lastModified());
                uploadFile.delete();
                uploadTags(runId);
                recursiveDelete(runTmp);
            } else {
                logger.warning("Origin upload requested. Copy error!");
                response.sendError(HttpServletResponse.SC_NOT_ACCEPTABLE);
                break;
            }
        }
        response.setStatus(HttpServletResponse.SC_CREATED);
        //break;
    }
    request.setAttribute("duplicates", duplicateSet);
    return "/duplicates.jsp";
}

From source file:crds.pub.FCKeditor.connector.ConnectorServlet.java

/**
 * Manage the Post requests (FileUpload).<br>
 *
 * The servlet accepts commands sent in the following format:<br>
 * connector?Command=FileUpload&Type=ResourceType&CurrentFolder=FolderPath<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.// w ww .j a  v  a 2s.co  m
 *
 */
@SuppressWarnings({ "unchecked" })
public void doPost(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {

    FormUserOperation formUser = Constant.getFormUserOperation(request);
    String fck_task_id = (String) request.getSession().getAttribute("fck_task_id");
    if (fck_task_id == null) {
        fck_task_id = "temp_task_id";
    }

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

    String commandStr = request.getParameter("Command");
    String typeStr = request.getParameter("Type");
    String currentFolderStr = request.getParameter("CurrentFolder");

    String currentPath = baseDir + formUser.getCompany_code() + currentFolderStr + fck_task_id
            + currentFolderStr + typeStr + currentFolderStr;
    String currentDirPath = getServletContext().getRealPath(currentPath);

    String retVal = "0";
    String newName = "";

    if (!commandStr.equals("FileUpload"))
        retVal = "203";
    else {
        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("/");
            String fileName = pathParts[pathParts.length - 1];

            String nameWithoutExt = getNameWithoutExtension(fileName);
            String ext = getExtension(fileName);
            File pathToSave = new File(currentDirPath, fileName);
            int counter = 1;
            while (pathToSave.exists()) {
                newName = nameWithoutExt + "(" + counter + ")" + "." + ext;
                retVal = "201";
                pathToSave = new File(currentDirPath, newName);
                counter++;
            }
            uplFile.write(pathToSave);
        } catch (Exception ex) {
            retVal = "203";
        }

    }

    out.println("<script type=\"text/javascript\">");
    out.println("window.parent.frames['frmUpload'].OnUploadCompleted(" + retVal + ",'" + newName + "');");
    out.println("</script>");
    out.flush();
    out.close();

}

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   w  ww.ja  va  2  s  .  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;
    }

}