Example usage for javax.servlet.http HttpServletRequest getContentType

List of usage examples for javax.servlet.http HttpServletRequest getContentType

Introduction

In this page you can find the example usage for javax.servlet.http HttpServletRequest getContentType.

Prototype

public String getContentType();

Source Link

Document

Returns the MIME type of the body of the request, or null if the type is not known.

Usage

From source file:com.mx.nibble.middleware.web.util.FileUploadOLD.java

public String execute() throws Exception {

    //ActionContext ac = invocation.getInvocationContext();

    HttpServletResponse response = ServletActionContext.getResponse();

    // MultiPartRequestWrapper multipartRequest = ((MultiPartRequestWrapper)ServletActionContext.getRequest());
    HttpServletRequest multipartRequest = ServletActionContext.getRequest();

    List<FileItem> items2 = new ServletFileUpload(new DiskFileItemFactory()).parseRequest(multipartRequest);
    System.out.println("TAMAO ITEMS " + items2.size());
    System.out.println("Check that we have a file upload request");
    boolean isMultipart = ServletFileUpload.isMultipartContent(multipartRequest);
    System.out.println("isMultipart: " + isMultipart);

    String ourTempDirectory = "/opt/erp/import/obras/";

    byte[] cr = { 13 };
    byte[] lf = { 10 };
    String CR = new String(cr);
    String LF = new String(lf);
    String CRLF = CR + LF;//from  w  ww  .  j a va  2  s  .com
    System.out.println("Before a LF=chr(10)" + LF + "Before a CR=chr(13)" + CR + "Before a CRLF" + CRLF);

    //Initialization for chunk management.
    boolean bLastChunk = false;
    int numChunk = 0;

    //CAN BE OVERRIDEN BY THE postURL PARAMETER: if error=true is passed as a parameter on the URL
    boolean generateError = false;
    boolean generateWarning = false;
    boolean sendRequest = false;

    response.setContentType("text/plain");

    java.util.Enumeration<String> headers = multipartRequest.getHeaderNames();
    System.out.println("[parseRequest.jsp]  ------------------------------ ");
    System.out.println("[parseRequest.jsp]  Headers of the received request:");
    while (headers.hasMoreElements()) {
        String header = headers.nextElement();
        System.out.println("[parseRequest.jsp]  " + header + ": " + multipartRequest.getHeader(header));
    }
    System.out.println("[parseRequest.jsp]  ------------------------------ ");

    try {
        System.out.println(" Get URL Parameters.");
        Enumeration paraNames = multipartRequest.getParameterNames();
        System.out.println("[parseRequest.jsp]  ------------------------------ ");
        System.out.println("[parseRequest.jsp]  Parameters: ");
        String pname;
        String pvalue;
        while (paraNames.hasMoreElements()) {
            pname = (String) paraNames.nextElement();
            pvalue = multipartRequest.getParameter(pname);
            System.out.println("[parseRequest.jsp] " + pname + " = " + pvalue);
            if (pname.equals("jufinal")) {
                System.out.println("pname.equals(\"jufinal\")");
                bLastChunk = pvalue.equals("1");
            } else if (pname.equals("jupart")) {
                System.out.println("pname.equals(\"jupart\")");
                numChunk = Integer.parseInt(pvalue);
            }

            //For debug convenience, putting error=true as a URL parameter, will generate an error
            //in this response.
            if (pname.equals("error") && pvalue.equals("true")) {
                generateError = true;
            }

            //For debug convenience, putting warning=true as a URL parameter, will generate a warning
            //in this response.
            if (pname.equals("warning") && pvalue.equals("true")) {
                generateWarning = true;
            }

            //For debug convenience, putting readRequest=true as a URL parameter, will send back the request content
            //into the response of this page.
            if (pname.equals("sendRequest") && pvalue.equals("true")) {
                sendRequest = true;
            }

        }
        System.out.println("[parseRequest.jsp]  ------------------------------ ");

        int ourMaxMemorySize = 10000000;
        int ourMaxRequestSize = 2000000000;

        ///////////////////////////////////////////////////////////////////////////////////////////////////////
        //The code below is directly taken from the jakarta fileupload common classes
        //All informations, and download, available here : http://jakarta.apache.org/commons/fileupload/
        ///////////////////////////////////////////////////////////////////////////////////////////////////////

        // Create a factory for disk-based file items
        DiskFileItemFactory factory = new DiskFileItemFactory();

        // Set factory constraints
        factory.setSizeThreshold(ourMaxMemorySize);
        factory.setRepository(new File(ourTempDirectory));

        // Create a new file upload handler
        ServletFileUpload upload = new ServletFileUpload(factory);

        // Set overall request size constraint
        upload.setSizeMax(ourMaxRequestSize);

        // Parse the request
        if (sendRequest) {
            //For debug only. Should be removed for production systems. 
            System.out.println(
                    "[parseRequest.jsp] ===========================================================================");
            System.out.println("[parseRequest.jsp] Sending the received request content: ");
            InputStream is = multipartRequest.getInputStream();
            int c;
            while ((c = is.read()) >= 0) {
                System.out.write(c);
            } //while
            is.close();
            System.out.println(
                    "[parseRequest.jsp] ===========================================================================");
        } else if (!multipartRequest.getContentType().startsWith("multipart/form-data")) {
            System.out.println("[parseRequest.jsp] No parsing of uploaded file: content type is "
                    + multipartRequest.getContentType());
        } else {
            List /* FileItem */ items = upload.parseRequest(multipartRequest);
            // Process the uploaded items
            Iterator iter = items.iterator();
            FileItem fileItem;
            File fout;
            System.out.println("[parseRequest.jsp]  Let's read the sent data   (" + items.size() + " items)");
            while (iter.hasNext()) {
                fileItem = (FileItem) iter.next();

                if (fileItem.isFormField()) {
                    System.out.println("[parseRequest.jsp] (form field) " + fileItem.getFieldName() + " = "
                            + fileItem.getString());

                    //If we receive the md5sum parameter, we've read finished to read the current file. It's not
                    //a very good (end of file) signal. Will be better in the future ... probably !
                    //Let's put a separator, to make output easier to read.
                    if (fileItem.getFieldName().equals("md5sum[]")) {
                        System.out.println("[parseRequest.jsp]  ------------------------------ ");
                    }
                } else {
                    //Ok, we've got a file. Let's process it.
                    //Again, for all informations of what is exactly a FileItem, please
                    //have a look to http://jakarta.apache.org/commons/fileupload/
                    //
                    System.out.println("[parseRequest.jsp] FieldName: " + fileItem.getFieldName());
                    System.out.println("[parseRequest.jsp] File Name: " + fileItem.getName());
                    System.out.println("[parseRequest.jsp] ContentType: " + fileItem.getContentType());
                    System.out.println("[parseRequest.jsp] Size (Bytes): " + fileItem.getSize());
                    //If we are in chunk mode, we add ".partN" at the end of the file, where N is the chunk number.
                    String uploadedFilename = fileItem.getName() + (numChunk > 0 ? ".part" + numChunk : "");
                    fout = new File(ourTempDirectory + (new File(uploadedFilename)).getName());
                    System.out.println("[parseRequest.jsp] File Out: " + fout.toString());
                    System.out.println(" write the file");
                    fileItem.write(fout);

                    //////////////////////////////////////////////////////////////////////////////////////
                    System.out.println(
                            " Chunk management: if it was the last chunk, let's recover the complete file");
                    System.out.println(" by concatenating all chunk parts.");
                    //
                    if (bLastChunk) {
                        System.out.println(
                                "[parseRequest.jsp]  Last chunk received: let's rebuild the complete file ("
                                        + fileItem.getName() + ")");
                        //First: construct the final filename.
                        FileInputStream fis;
                        FileOutputStream fos = new FileOutputStream(ourTempDirectory + fileItem.getName());
                        int nbBytes;
                        byte[] byteBuff = new byte[1024];
                        String filename;
                        for (int i = 1; i <= numChunk; i += 1) {
                            filename = fileItem.getName() + ".part" + i;
                            System.out.println("[parseRequest.jsp] " + "  Concatenating " + filename);
                            fis = new FileInputStream(ourTempDirectory + filename);
                            while ((nbBytes = fis.read(byteBuff)) >= 0) {
                                //out.println("[parseRequest.jsp] " + "     Nb bytes read: " + nbBytes);
                                fos.write(byteBuff, 0, nbBytes);
                            }
                            fis.close();
                        }
                        fos.close();
                    }

                    // End of chunk management
                    //////////////////////////////////////////////////////////////////////////////////////

                    fileItem.delete();
                }
            } //while
        }

        if (generateWarning) {
            System.out.println("WARNING: just a warning message.\\nOn two lines!");
        }

        System.out.println("[parseRequest.jsp] " + "Let's write a status, to finish the server response :");

        //Let's wait a little, to simulate the server time to manage the file.
        Thread.sleep(500);

        //Do you want to test a successful upload, or the way the applet reacts to an error ?
        if (generateError) {
            System.out.println(
                    "ERROR: this is a test error (forced in /wwwroot/pages/parseRequest.jsp).\\nHere is a second line!");
        } else {
            System.out.println("SUCCESS");
            //out.println("                        <span class=\"cpg_user_message\">Il y eu une erreur lors de l'excution de la requte</span>");
        }

        System.out.println("[parseRequest.jsp] " + "End of server treatment ");

    } catch (Exception e) {
        System.out.println("");
        System.out.println("ERROR: Exception e = " + e.toString());
        System.out.println("");
    }
    return SUCCESS;
}

From source file:com.mx.nibble.middleware.web.util.FileParse.java

public String execute(ActionInvocation invocation) throws Exception {

    Iterator iterator = parameters.entrySet().iterator();
    while (iterator.hasNext()) {
        Map.Entry mapEntry = (Map.Entry) iterator.next();
        System.out.println("The key is: " + mapEntry.getKey() + ",value is :" + mapEntry.getValue());
    }/*from  ww  w  .  j a  v a  2  s .c o  m*/

    ActionContext ac = invocation.getInvocationContext();

    HttpServletRequest request = (HttpServletRequest) ac.get(ServletActionContext.HTTP_REQUEST);

    HttpServletResponse response = (HttpServletResponse) ac.get(ServletActionContext.HTTP_RESPONSE);
    /**
    * This pages gives a sample of java upload management. It needs the commons FileUpload library, which can be found on apache.org.
    *
    * Note:
    * - putting error=true as a parameter on the URL will generate an error. Allows test of upload error management in the applet. 
    * 
    * 
    * 
    * 
    * 
    * 
    */

    // Directory to store all the uploaded files
    String ourTempDirectory = "/opt/erp/import/obras/";

    byte[] cr = { 13 };
    byte[] lf = { 10 };
    String CR = new String(cr);
    String LF = new String(lf);
    String CRLF = CR + LF;
    System.out.println("Before a LF=chr(10)" + LF + "Before a CR=chr(13)" + CR + "Before a CRLF" + CRLF);

    //Initialization for chunk management.
    boolean bLastChunk = false;
    int numChunk = 0;

    //CAN BE OVERRIDEN BY THE postURL PARAMETER: if error=true is passed as a parameter on the URL
    boolean generateError = false;
    boolean generateWarning = false;
    boolean sendRequest = false;

    response.setContentType("text/plain");

    java.util.Enumeration<String> headers = request.getHeaderNames();
    System.out.println("[parseRequest.jsp]  ------------------------------ ");
    System.out.println("[parseRequest.jsp]  Headers of the received request:");
    while (headers.hasMoreElements()) {
        String header = headers.nextElement();
        System.out.println("[parseRequest.jsp]  " + header + ": " + request.getHeader(header));
    }
    System.out.println("[parseRequest.jsp]  ------------------------------ ");

    try {
        // Get URL Parameters.
        Enumeration paraNames = request.getParameterNames();
        System.out.println("[parseRequest.jsp]  ------------------------------ ");
        System.out.println("[parseRequest.jsp]  Parameters: ");
        String pname;
        String pvalue;
        while (paraNames.hasMoreElements()) {
            pname = (String) paraNames.nextElement();
            pvalue = request.getParameter(pname);
            System.out.println("[parseRequest.jsp] " + pname + " = " + pvalue);
            if (pname.equals("jufinal")) {
                bLastChunk = pvalue.equals("1");
            } else if (pname.equals("jupart")) {
                numChunk = Integer.parseInt(pvalue);
            }

            //For debug convenience, putting error=true as a URL parameter, will generate an error
            //in this response.
            if (pname.equals("error") && pvalue.equals("true")) {
                generateError = true;
            }

            //For debug convenience, putting warning=true as a URL parameter, will generate a warning
            //in this response.
            if (pname.equals("warning") && pvalue.equals("true")) {
                generateWarning = true;
            }

            //For debug convenience, putting readRequest=true as a URL parameter, will send back the request content
            //into the response of this page.
            if (pname.equals("sendRequest") && pvalue.equals("true")) {
                sendRequest = true;
            }

        }
        System.out.println("[parseRequest.jsp]  ------------------------------ ");

        int ourMaxMemorySize = 10000000;
        int ourMaxRequestSize = 2000000000;

        ///////////////////////////////////////////////////////////////////////////////////////////////////////
        //The code below is directly taken from the jakarta fileupload common classes
        //All informations, and download, available here : http://jakarta.apache.org/commons/fileupload/
        ///////////////////////////////////////////////////////////////////////////////////////////////////////

        // Create a factory for disk-based file items
        DiskFileItemFactory factory = new DiskFileItemFactory();

        // Set factory constraints
        factory.setSizeThreshold(ourMaxMemorySize);
        factory.setRepository(new File(ourTempDirectory));

        // Create a new file upload handler
        ServletFileUpload upload = new ServletFileUpload(factory);

        // Set overall request size constraint
        upload.setSizeMax(ourMaxRequestSize);

        // Parse the request
        if (sendRequest) {
            //For debug only. Should be removed for production systems. 
            System.out.println(
                    "[parseRequest.jsp] ===========================================================================");
            System.out.println("[parseRequest.jsp] Sending the received request content: ");
            InputStream is = request.getInputStream();
            int c;
            while ((c = is.read()) >= 0) {
                out.write(c);
            } //while
            is.close();
            System.out.println(
                    "[parseRequest.jsp] ===========================================================================");
        } else if (!request.getContentType().startsWith("multipart/form-data")) {
            System.out.println("[parseRequest.jsp] No parsing of uploaded file: content type is "
                    + request.getContentType());
        } else {
            List /* FileItem */ items = upload.parseRequest(request);
            // Process the uploaded items
            Iterator iter = items.iterator();
            FileItem fileItem;
            File fout;
            System.out.println("[parseRequest.jsp]  Let's read the sent data   (" + items.size() + " items)");
            while (iter.hasNext()) {
                fileItem = (FileItem) iter.next();

                if (fileItem.isFormField()) {
                    System.out.println("[parseRequest.jsp] (form field) " + fileItem.getFieldName() + " = "
                            + fileItem.getString());

                    //If we receive the md5sum parameter, we've read finished to read the current file. It's not
                    //a very good (end of file) signal. Will be better in the future ... probably !
                    //Let's put a separator, to make output easier to read.
                    if (fileItem.getFieldName().equals("md5sum[]")) {
                        System.out.println("[parseRequest.jsp]  ------------------------------ ");
                    }
                } else {
                    //Ok, we've got a file. Let's process it.
                    //Again, for all informations of what is exactly a FileItem, please
                    //have a look to http://jakarta.apache.org/commons/fileupload/
                    //
                    System.out.println("[parseRequest.jsp] FieldName: " + fileItem.getFieldName());
                    System.out.println("[parseRequest.jsp] File Name: " + fileItem.getName());
                    System.out.println("[parseRequest.jsp] ContentType: " + fileItem.getContentType());
                    System.out.println("[parseRequest.jsp] Size (Bytes): " + fileItem.getSize());
                    //If we are in chunk mode, we add ".partN" at the end of the file, where N is the chunk number.
                    String uploadedFilename = fileItem.getName() + (numChunk > 0 ? ".part" + numChunk : "");
                    fout = new File(ourTempDirectory + (new File(uploadedFilename)).getName());
                    System.out.println("[parseRequest.jsp] File Out: " + fout.toString());
                    // write the file
                    fileItem.write(fout);

                    //////////////////////////////////////////////////////////////////////////////////////
                    //Chunk management: if it was the last chunk, let's recover the complete file
                    //by concatenating all chunk parts.
                    //
                    if (bLastChunk) {
                        System.out.println(
                                "[parseRequest.jsp]  Last chunk received: let's rebuild the complete file ("
                                        + fileItem.getName() + ")");
                        //First: construct the final filename.
                        FileInputStream fis;
                        FileOutputStream fos = new FileOutputStream(ourTempDirectory + fileItem.getName());
                        int nbBytes;
                        byte[] byteBuff = new byte[1024];
                        String filename;
                        for (int i = 1; i <= numChunk; i += 1) {
                            filename = fileItem.getName() + ".part" + i;
                            System.out.println("[parseRequest.jsp] " + "  Concatenating " + filename);
                            fis = new FileInputStream(ourTempDirectory + filename);
                            while ((nbBytes = fis.read(byteBuff)) >= 0) {
                                //System.out.println("[parseRequest.jsp] " + "     Nb bytes read: " + nbBytes);
                                fos.write(byteBuff, 0, nbBytes);
                            }
                            fis.close();
                        }
                        fos.close();
                    }

                    // End of chunk management
                    //////////////////////////////////////////////////////////////////////////////////////

                    fileItem.delete();
                }
            } //while
        }

        if (generateWarning) {
            System.out.println("WARNING: just a warning message.\\nOn two lines!");
        }

        System.out.println("[parseRequest.jsp] " + "Let's write a status, to finish the server response :");

        //Let's wait a little, to simulate the server time to manage the file.
        Thread.sleep(500);

        //Do you want to test a successful upload, or the way the applet reacts to an error ?
        if (generateError) {
            System.out.println(
                    "ERROR: this is a test error (forced in /wwwroot/pages/parseRequest.jsp).\\nHere is a second line!");
        } else {
            System.out.println("SUCCESS");
            PrintWriter out = ServletActionContext.getResponse().getWriter();
            out.write("SUCCESS");
            //System.out.println("                        <span class=\"cpg_user_message\">Il y eu une erreur lors de l'excution de la requte</span>");
        }

        System.out.println("[parseRequest.jsp] " + "End of server treatment ");

    } catch (Exception e) {
        System.out.println("");
        System.out.println("ERROR: Exception e = " + e.toString());
        System.out.println("");
    }

    return SUCCESS;

}

From source file:org.springframework.extensions.webscripts.servlet.EndPointProxyServlet.java

@Override
protected void service(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {
    String uri = req.getRequestURI().substring(req.getContextPath().length());

    // validate and return the endpoint id from the URI path - stripping the servlet context
    StringTokenizer t = new StringTokenizer(uri, "/");
    String servletName = t.nextToken();
    if (!t.hasMoreTokens()) {
        throw new IllegalArgumentException("Proxy URL did not specify endpoint id.");
    }/*from  w ww. j  a v a 2s.  com*/
    String endpointId = t.nextToken();

    // rebuild rest of the URL for the proxy request
    StringBuilder buf = new StringBuilder(64);
    if (t.hasMoreTokens()) {
        do {
            buf.append('/');
            buf.append(t.nextToken());
        } while (t.hasMoreTokens());
    } else {
        // allow for an empty uri to be passed in
        // this could therefore refer to the root of a service i.e. /webapp/axis
        buf.append('/');
    }

    try {
        // retrieve the endpoint descriptor - do not allow proxy access to unsecure endpoints
        EndpointDescriptor descriptor = this.config.getEndpointDescriptor(endpointId);
        if (descriptor == null || descriptor.getUnsecure()) {
            // throw an exception if endpoint ID is does not exist or invalid
            throw new WebScriptsPlatformException("Invalid EndPoint Id: " + endpointId);
        }

        // special case for some Flash based apps - they might pass in the alf_ticket directly
        // as a parameter as POST requests do not correctly pickup the browser cookies and
        // therefore do not share the same session so we must apply the ticket directly
        String ticket = req.getParameter(PARAM_ALF_TICKET);

        // user id from session NOTE: @see org.alfresco.web.site.UserFactory
        Connector connector;
        String userId = (String) req.getSession().getAttribute(USER_ID);
        if (userId != null) {
            // build an authenticated connector - as we have a userId
            connector = this.connectorService.getConnector(endpointId, userId, req.getSession());
        } else if (ticket != null || descriptor.getIdentity() == IdentityType.NONE
                || descriptor.getIdentity() == IdentityType.DECLARED || descriptor.getExternalAuth()) {
            // the authentication for this endpoint is either not required, declared in config or
            // managed "externally" (i.e. by a servlet filter such as NTLM) - this means we should
            // proceed on the assumption it will be dealt with later
            connector = this.connectorService.getConnector(endpointId, req.getSession());
        } else if (descriptor.getBasicAuth()) {
            // check for HTTP authorisation request (i.e. RSS feeds etc.)
            String authorization = req.getHeader("Authorization");
            if (authorization == null || authorization.length() == 0) {
                res.setStatus(HttpServletResponse.SC_UNAUTHORIZED,
                        "No USER_ID found in session and requested endpoint requires authentication.");
                res.setHeader("WWW-Authenticate", "Basic realm=\"Alfresco\"");

                // no further processing as authentication is required but not provided
                // the browser will now prompt the user for appropriate credentials
                return;
            } else {
                // user has provided authentication details with the request
                String[] authParts = authorization.split(" ");
                if (!authParts[0].equalsIgnoreCase("basic")) {
                    throw new WebScriptsPlatformException(
                            "Authorization '" + authParts[0] + "' not supported.");
                }

                String[] values = new String(Base64.decode(authParts[1])).split(":");
                if (values.length == 2) {
                    if (logger.isDebugEnabled())
                        logger.debug("Authenticating (BASIC HTTP) user " + values[0]);

                    // assume username and password passed as the parts and
                    // build an unauthenticated authentication connector then
                    // apply the supplied credentials to it
                    connector = this.connectorService.getConnector(endpointId, values[0], req.getSession());
                    Credentials credentials = new CredentialsImpl(endpointId);
                    credentials.setProperty(Credentials.CREDENTIAL_USERNAME, values[0]);
                    credentials.setProperty(Credentials.CREDENTIAL_PASSWORD, values[1]);
                    connector.setCredentials(credentials);
                } else {
                    throw new WebScriptsPlatformException("Authorization request did not provide user/pass.");
                }
            }
        } else {
            res.setStatus(HttpServletResponse.SC_UNAUTHORIZED,
                    "No USER_ID found in session and requested endpoint requires authentication.");
            return;
        }

        // build a connector context, stores information about how we will drive the remote client
        ConnectorContext context;
        if (ticket == null) {
            context = new ConnectorContext();
        } else {
            // special case for some Flash apps - see above
            Map<String, String> params = new HashMap<String, String>(1, 1.0f);
            params.put(PARAM_ALF_TICKET, ticket);
            context = new ConnectorContext(params, null);
        }
        context.setContentType(req.getContentType());
        context.setMethod(HttpMethod.valueOf(req.getMethod().toUpperCase()));

        // build proxy URL referencing the endpoint
        String q = req.getQueryString();
        String url = buf.toString() + (q != null && q.length() != 0 ? "?" + q : "");

        if (logger.isDebugEnabled()) {
            logger.debug("EndPointProxyServlet preparing to proxy:");
            logger.debug(" - endpointId: " + endpointId);
            logger.debug(" - userId: " + userId);
            logger.debug(" - connector: " + connector);
            logger.debug(" - method: " + context.getMethod());
            logger.debug(" - url: " + url);
        }

        // call through using our connector to proxy
        Response response = connector.call(url, context, req, res);

        if (logger.isDebugEnabled()) {
            logger.debug("Return code: " + response.getStatus().getCode());
            if (response.getStatus().getCode() == 500) {
                logger.debug("Error detected: " + response.getStatus().getMessage() + "\n"
                        + response.getStatus().getException().toString());
            }
        }
    } catch (Throwable err) {
        // TODO: trap and handle errors!
        throw new WebScriptsPlatformException("Error during endpoint proxy processing: " + err.getMessage(),
                err);
    }
}

From source file:org.sakaiproject.dav.DavServlet.java

/**
 * Process a PUT request for the specified resource.
 * /*  www  . j av  a2s. c om*/
 * @param request
 *        The servlet request we are processing
 * @param response
 *        The servlet response we are creating
 * @exception IOException
 *            if an input/output error occurs
 * @exception ServletException
 *            if a servlet-specified error occurs
 */
@SuppressWarnings("unchecked")
protected void doPut(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

    // Do not allow files which match patterns specified in properties
    if (!isFileNameAllowed(req)) {
        resp.sendError(SakaidavStatus.SC_FORBIDDEN);
        return;
    }

    if (isLocked(req)) {
        resp.sendError(SakaidavStatus.SC_LOCKED);
        return;
    }

    String path = getRelativePathSAKAI(req);

    if (prohibited(path) || (path.toUpperCase().startsWith("/WEB-INF"))
            || (path.toUpperCase().startsWith("/META-INF"))) {
        resp.sendError(SakaidavStatus.SC_FORBIDDEN);
        return;
    }

    // Looking for a Content-Range header
    if (req.getHeader("Content-Range") != null) {
        // No content range header is supported
        resp.sendError(SakaidavStatus.SC_NOT_IMPLEMENTED);
    }

    String name = justName(path);

    // Database max for id field is 255. If we allow longer, odd things happen
    if (path.length() > 254) {
        resp.sendError(SakaidavStatus.SC_FORBIDDEN);
        return;
    }

    if ((name.toUpperCase().startsWith("/WEB-INF")) || (name.toUpperCase().startsWith("/META-INF"))) {
        resp.sendError(SakaidavStatus.SC_FORBIDDEN);
        return;
    }

    // Don't delete the resource and add it again

    // Update the resource

    String contentType = "";
    InputStream inputStream = req.getInputStream();
    contentType = req.getContentType();

    // For MS office, ignore the supplied content type if we can figure out one from file type
    // they send text/xml for doc and docx files
    if (contentType != null) {
        UsageSession session = UsageSessionService.getSession();
        String agent = null;
        if (session != null)
            agent = session.getUserAgent();
        if (agent != null && agent.startsWith("Microsoft Office Core Storage Infrastructure")) {
            String fileContentType = getServletContext().getMimeType(path);
            if (fileContentType != null) {
                contentType = fileContentType;
            }
        }
    }

    if (M_log.isDebugEnabled())
        M_log.debug("  req.contentType() =" + contentType);

    if (contentType == null) {
        contentType = getServletContext().getMimeType(path);
        if (M_log.isDebugEnabled())
            M_log.debug("Lookup contentType =" + contentType);
    }
    if (contentType == null) {
        if (M_log.isDebugEnabled())
            M_log.debug("Unable to determine contentType");
        contentType = ""; // Still cannot figure it out
    }

    try {

        ContentResourceEdit edit;

        boolean newfile = false;
        String resourcePath = adjustId(path);

        // Since editResource doesn't throw IdUnusedException correctly, try first with getResource
        try {
            contentHostingService.getResource(resourcePath);
        } catch (IdUnusedException e) {
            newfile = true;
        }

        if (newfile) {
            edit = contentHostingService.addResource(resourcePath);
            final ResourcePropertiesEdit p = edit.getPropertiesEdit();
            p.addProperty(ResourceProperties.PROP_DISPLAY_NAME, name);

            User user = UserDirectoryService.getCurrentUser();
            final TimeBreakdown timeBreakdown = TimeService.newTime().breakdownLocal();
            p.addProperty(ResourceProperties.PROP_COPYRIGHT, "copyright (c)" + " " + timeBreakdown.getYear()
                    + ", " + user.getDisplayName() + ". All Rights Reserved. ");
        } else {
            edit = contentHostingService.editResource(resourcePath);
            contentType = edit.getContentType();
        }

        edit.setContentType(contentType);
        edit.setContent(inputStream);

        // commit the change
        contentHostingService.commitResource(edit, NotificationService.NOTI_NONE);

    } catch (IdUsedException e) {
        // Should not happen because we deleted above (unless two requests at same time)
        M_log.warn("SAKAIDavServlet.doPut() IdUsedException:" + e.getMessage());

        resp.sendError(HttpServletResponse.SC_CONFLICT);
        return;
    } catch (IdInvalidException e) {
        M_log.warn("SAKAIDavServlet.doPut() IdInvalidException:" + e.getMessage());
        resp.sendError(HttpServletResponse.SC_CONFLICT);
        return;
    } catch (PermissionException e) {
        // Normal
        resp.sendError(SakaidavStatus.SC_FORBIDDEN);
        return;
    } catch (OverQuotaException e) {
        // Normal %%% what's the proper response for over-quota?
        resp.sendError(SakaidavStatus.SC_FORBIDDEN);
        return;
    } catch (InconsistentException e) {
        M_log.warn("SAKAIDavServlet.doPut() InconsistentException:" + e.getMessage());
        resp.sendError(HttpServletResponse.SC_CONFLICT);
        return;
    } catch (ServerOverloadException e) {
        M_log.warn("SAKAIDavServlet.doPut() ServerOverloadException:" + e.getMessage());
        resp.setStatus(SakaidavStatus.SC_SERVICE_UNAVAILABLE);
        return;
    } catch (InUseException e) {
        resp.sendError(SakaidavStatus.SC_FORBIDDEN);
        return;
    } catch (TypeException e) {
        M_log.warn("SAKAIDavServlet.doPut() TypeException:" + e.getMessage());
        resp.sendError(HttpServletResponse.SC_CONFLICT);
        return;
    } catch (IdUnusedException inconsistent) {
        M_log.error(
                "SAKAIDavServlet.doPut() Inconsistently got IdUnusedException after checking resource exists: "
                        + inconsistent.getMessage());
        resp.sendError(HttpServletResponse.SC_FORBIDDEN);
        return;
    }

    resp.setStatus(HttpServletResponse.SC_CREATED);

    // Removing any lock-null resource which would be present
    lockNullResources.remove(path);

}

From source file:org.purl.sword.server.DepositServlet.java

/**
 * Process a post request.//www.j av a  2  s. c  om
 */
protected void doPost(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
    // Create the Deposit request
    Deposit d = new Deposit();
    Date date = new Date();
    log.debug("Starting deposit processing at " + date.toString() + " by " + request.getRemoteAddr());

    // Are there any authentication details?
    String usernamePassword = getUsernamePassword(request);
    if ((usernamePassword != null) && (!usernamePassword.equals(""))) {
        int p = usernamePassword.indexOf(':');
        if (p != -1) {
            d.setUsername(usernamePassword.substring(0, p));
            d.setPassword(usernamePassword.substring(p + 1));
        }
    } else if (authenticateWithBasic()) {
        String s = "Basic realm=\"SWORD\"";
        response.setHeader("WWW-Authenticate", s);
        response.setStatus(401);
        return;
    }

    // Set up some variables
    String filename = null;

    // Do the processing
    try {
        // Write the file to the temp directory
        filename = tempDirectory + "SWORD-" + request.getRemoteAddr() + "-" + counter.addAndGet(1);
        log.debug("Package temporarily stored as: " + filename);
        InputStream inputstream = request.getInputStream();
        OutputStream outputstream = new FileOutputStream(new File(filename));
        try {
            byte[] buf = new byte[1024];
            int len;
            while ((len = inputstream.read(buf)) > 0) {
                outputstream.write(buf, 0, len);
            }
        } finally {
            inputstream.close();
            outputstream.close();
        }

        // Check the size is OK
        File file = new File(filename);
        long fLength = file.length() / 1024;
        if ((maxUploadSize != -1) && (fLength > maxUploadSize)) {
            this.makeErrorDocument(ErrorCodes.MAX_UPLOAD_SIZE_EXCEEDED,
                    HttpServletResponse.SC_REQUEST_ENTITY_TOO_LARGE,
                    "The uploaded file exceeded the maximum file size this server will accept (the file is "
                            + fLength + "kB but the server will only accept files as large as " + maxUploadSize
                            + "kB)",
                    request, response);
            return;
        }

        // Check the MD5 hash
        String receivedMD5 = ChecksumUtils.generateMD5(filename);
        log.debug("Received filechecksum: " + receivedMD5);
        d.setMd5(receivedMD5);
        String md5 = request.getHeader("Content-MD5");
        log.debug("Received file checksum header: " + md5);
        if ((md5 != null) && (!md5.equals(receivedMD5))) {
            // Return an error document
            this.makeErrorDocument(ErrorCodes.ERROR_CHECKSUM_MISMATCH,
                    HttpServletResponse.SC_PRECONDITION_FAILED,
                    "The received MD5 checksum for the deposited file did not match the checksum sent by the deposit client",
                    request, response);
            log.debug("Bad MD5 for file. Aborting with appropriate error message");
            return;
        } else {
            // Set the file to be deposited
            d.setFile(file);

            // Set the X-On-Behalf-Of header
            String onBehalfOf = request.getHeader(HttpHeaders.X_ON_BEHALF_OF.toString());
            if ((onBehalfOf != null) && (onBehalfOf.equals("reject"))) {
                // user name is "reject", so throw a not know error to allow the client to be tested
                throw new SWORDErrorException(ErrorCodes.TARGET_OWNER_UKNOWN, "unknown user \"reject\"");
            } else {
                d.setOnBehalfOf(onBehalfOf);
            }

            // Set the X-Packaging header
            d.setPackaging(request.getHeader(HttpHeaders.X_PACKAGING));

            // Set the X-No-Op header
            String noop = request.getHeader(HttpHeaders.X_NO_OP);
            log.error("X_NO_OP value is " + noop);
            if ((noop != null) && (noop.equals("true"))) {
                d.setNoOp(true);
            } else if ((noop != null) && (noop.equals("false"))) {
                d.setNoOp(false);
            } else if (noop == null) {
                d.setNoOp(false);
            } else {
                throw new SWORDErrorException(ErrorCodes.ERROR_BAD_REQUEST, "Bad no-op");
            }

            // Set the X-Verbose header
            String verbose = request.getHeader(HttpHeaders.X_VERBOSE);
            if ((verbose != null) && (verbose.equals("true"))) {
                d.setVerbose(true);
            } else if ((verbose != null) && (verbose.equals("false"))) {
                d.setVerbose(false);
            } else if (verbose == null) {
                d.setVerbose(false);
            } else {
                throw new SWORDErrorException(ErrorCodes.ERROR_BAD_REQUEST, "Bad verbose");
            }

            // Set the slug
            String slug = request.getHeader(HttpHeaders.SLUG);
            if (slug != null) {
                d.setSlug(slug);
            }

            // Set the content disposition
            d.setContentDisposition(request.getHeader(HttpHeaders.CONTENT_DISPOSITION));

            // Set the IP address
            d.setIPAddress(request.getRemoteAddr());

            // Set the deposit location
            d.setLocation(getUrl(request));

            // Set the content type
            d.setContentType(request.getContentType());

            // Set the content length
            String cl = request.getHeader(HttpHeaders.CONTENT_LENGTH);
            if ((cl != null) && (!cl.equals(""))) {
                d.setContentLength(Integer.parseInt(cl));
            }

            // Get the DepositResponse
            DepositResponse dr = myRepository.doDeposit(d);

            // Echo back the user agent
            if (request.getHeader(HttpHeaders.USER_AGENT.toString()) != null) {
                dr.getEntry().setUserAgent(request.getHeader(HttpHeaders.USER_AGENT.toString()));
            }

            // Echo back the packaging format
            if (request.getHeader(HttpHeaders.X_PACKAGING.toString()) != null) {
                dr.getEntry().setPackaging(request.getHeader(HttpHeaders.X_PACKAGING.toString()));
            }

            // Print out the Deposit Response
            response.setStatus(dr.getHttpResponse());
            if ((dr.getLocation() != null) && (!dr.getLocation().equals(""))) {
                response.setHeader("Location", dr.getLocation());
            }
            response.setContentType("application/atom+xml; charset=UTF-8");
            PrintWriter out = response.getWriter();
            out.write(dr.marshall());
            out.flush();
        }
    } catch (SWORDAuthenticationException sae) {
        // Ask for credentials again
        if (authN.equals("Basic")) {
            String s = "Basic realm=\"SWORD\"";
            response.setHeader("WWW-Authenticate", s);
            response.setStatus(401);
        }
    } catch (SWORDErrorException see) {
        // Get the details and send the right SWORD error document
        log.error(see.toString());
        this.makeErrorDocument(see.getErrorURI(), see.getStatus(), see.getDescription(), request, response);
        return;
    } catch (SWORDException se) {
        response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
        log.error(se.toString());
    } catch (NoSuchAlgorithmException nsae) {
        response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
        log.error(nsae.toString());
    }

    finally {
        // Try deleting the temp file
        if (filename != null) {
            File f = new File(filename);
            if (f != null && !f.delete()) {
                log.error("Unable to delete file: " + filename);
            }
        }
    }
}

From source file:com.mx.nibble.middleware.web.util.FileUpload.java

public void performTask(javax.servlet.http.HttpServletRequest request,
        javax.servlet.http.HttpServletResponse response) {

    /**//from  w w w .jav  a2  s.com
    * This pages gives a sample of java upload management. It needs the commons FileUpload library, which can be found on apache.org.
    *
    * Note:
    * - putting error=true as a parameter on the URL will generate an error. Allows test of upload error management in the applet. 
    * 
    * 
    * 
    * 
    * 
    * 
    */

    logger.debug(" Directory to store all the uploaded files");

    String ourTempDirectory = "/opt/erp/import/obras/";
    try {
        out = response.getWriter();
    } catch (Exception e) {
        e.printStackTrace();
    }

    byte[] cr = { 13 };
    byte[] lf = { 10 };
    String CR = new String(cr);
    String LF = new String(lf);
    String CRLF = CR + LF;
    out.println("Before a LF=chr(10)" + LF + "Before a CR=chr(13)" + CR + "Before a CRLF" + CRLF);

    logger.debug("Initialization for chunk management.");
    boolean bLastChunk = false;
    int numChunk = 0;

    logger.debug(
            "CAN BE OVERRIDEN BY THE postURL PARAMETER: if error=true is passed as a parameter on the URL");
    boolean generateError = false;
    boolean generateWarning = false;
    boolean sendRequest = false;

    response.setContentType("text/plain");

    java.util.Enumeration<String> headers = request.getHeaderNames();
    out.println("[parseRequest.jsp]  ------------------------------ ");
    out.println("[parseRequest.jsp]  Headers of the received request:");
    logger.debug("[parseRequest.jsp]  Headers of the received request:");
    while (headers.hasMoreElements()) {
        String header = headers.nextElement();
        out.println("[parseRequest.jsp]  " + header + ": " + request.getHeader(header));
        logger.debug("[parseRequest.jsp]  " + header + ": " + request.getHeader(header));
    }
    out.println("[parseRequest.jsp]  ------------------------------ ");

    try {
        logger.debug(" Get URL Parameters.");
        Enumeration paraNames = request.getParameterNames();
        out.println("[parseRequest.jsp]  ------------------------------ ");
        out.println("[parseRequest.jsp]  Parameters: ");
        logger.debug("[parseRequest.jsp]  Parameters: ");
        String pname;
        String pvalue;
        while (paraNames.hasMoreElements()) {
            pname = (String) paraNames.nextElement();
            pvalue = request.getParameter(pname);
            out.println("[parseRequest.jsp] " + pname + " = " + pvalue);
            logger.debug("[parseRequest.jsp] " + pname + " = " + pvalue);
            if (pname.equals("jufinal")) {
                bLastChunk = pvalue.equals("1");
            } else if (pname.equals("jupart")) {
                numChunk = Integer.parseInt(pvalue);
            }

            if (pname.equals("error") && pvalue.equals("true")) {
                generateError = true;
                logger.debug(
                        "For debug convenience, putting error=true as a URL parameter, will generate an error in this response.");
            }

            if (pname.equals("warning") && pvalue.equals("true")) {
                generateWarning = true;
                logger.debug(
                        "For debug convenience, putting warning=true as a URL parameter, will generate a warning in this response.");
            }

            if (pname.equals("sendRequest") && pvalue.equals("true")) {
                sendRequest = true;
                logger.debug(
                        "For debug convenience, putting readRequest=true as a URL parameter, will send back the request content into the response of this page.");
            }

        }
        out.println("[parseRequest.jsp]  ------------------------------ ");

        int ourMaxMemorySize = 10000000;
        int ourMaxRequestSize = 2000000000;

        ///////////////////////////////////////////////////////////////////////////////////////////////////////
        //The code below is directly taken from the jakarta fileupload common classes
        //All informations, and download, available here : http://jakarta.apache.org/commons/fileupload/
        ///////////////////////////////////////////////////////////////////////////////////////////////////////

        logger.debug(" Create a factory for disk-based file items");
        DiskFileItemFactory factory = new DiskFileItemFactory();

        logger.debug(" Set factory constraints");
        factory.setSizeThreshold(ourMaxMemorySize);
        logger.debug("ourTempDirectory" + ourTempDirectory);
        factory.setRepository(new File(ourTempDirectory));

        logger.debug(" Create a new file upload handler");
        ServletFileUpload upload = new ServletFileUpload(factory);

        logger.debug(" Set overall request size constraint");
        upload.setSizeMax(ourMaxRequestSize);

        logger.debug(" Parse the request");
        if (sendRequest) {
            logger.debug("For debug only. Should be removed for production systems. ");
            out.println(
                    "[parseRequest.jsp] ===========================================================================");
            out.println("[parseRequest.jsp] Sending the received request content: ");
            logger.debug("[parseRequest.jsp] Sending the received request content: ");
            InputStream is = request.getInputStream();
            int c;
            while ((c = is.read()) >= 0) {
                out.write(c);
            }
            logger.debug("while");
            is.close();
            out.println(
                    "[parseRequest.jsp] ===========================================================================");
        } else if (!request.getContentType().startsWith("multipart/form-data")) {
            out.println("[parseRequest.jsp] No parsing of uploaded file: content type is "
                    + request.getContentType());
        } else {

            List /* FileItem */ items = upload.parseRequest(request);

            logger.debug(" Process the uploaded items" + items.size());

            Iterator iter = items.iterator();
            FileItem fileItem;
            File fout;
            out.println("[parseRequest.jsp]  Let's read the sent data   (" + items.size() + " items)");
            while (iter.hasNext()) {
                fileItem = (FileItem) iter.next();

                if (fileItem.isFormField()) {
                    out.println("[parseRequest.jsp] (form field) " + fileItem.getFieldName() + " = "
                            + fileItem.getString());

                    logger.debug(
                            "If we receive the md5sum parameter, we've read finished to read the current file. It's not");
                    logger.debug(
                            "a very good (end of file) signal. Will be better in the future ... probably !");
                    logger.debug("Let's put a separator, to make output easier to read.");
                    if (fileItem.getFieldName().equals("md5sum[]")) {
                        out.println("[parseRequest.jsp]  ------------------------------ ");
                    }
                } else {
                    logger.debug("Ok, we've got a file. Let's process it.");
                    logger.debug("Again, for all informations of what is exactly a FileItem, please");
                    logger.debug("have a look to http://jakarta.apache.org/commons/fileupload/");

                    out.println("[parseRequest.jsp] FieldName: " + fileItem.getFieldName());
                    out.println("[parseRequest.jsp] File Name: " + fileItem.getName());
                    out.println("[parseRequest.jsp] ContentType: " + fileItem.getContentType());
                    out.println("[parseRequest.jsp] Size (Bytes): " + fileItem.getSize());
                    logger.debug(
                            "If we are in chunk mode, we add .partN at the end of the file, where N is the chunk number.");
                    String uploadedFilename = fileItem.getName() + (numChunk > 0 ? ".part" + numChunk : "");
                    fout = new File(ourTempDirectory + (new File(uploadedFilename)).getName());
                    out.println("[parseRequest.jsp] File Out: " + fout.toString());
                    logger.debug(" write the file");
                    fileItem.write(fout);

                    //
                    logger.debug("Chunk management: if it was the last chunk, let's recover the complete file");
                    logger.debug("by concatenating all chunk parts.");
                    logger.debug("");
                    if (bLastChunk) {
                        out.println("[parseRequest.jsp]  Last chunk received: let's rebuild the complete file ("
                                + fileItem.getName() + ")");
                        logger.debug("First: construct the final filename.");
                        FileInputStream fis;
                        FileOutputStream fos = new FileOutputStream(ourTempDirectory + fileItem.getName());
                        int nbBytes;
                        byte[] byteBuff = new byte[1024];
                        String filename;
                        for (int i = 1; i <= numChunk; i += 1) {
                            filename = fileItem.getName() + ".part" + i;
                            out.println("[parseRequest.jsp] " + "  Concatenating " + filename);
                            fis = new FileInputStream(ourTempDirectory + filename);
                            while ((nbBytes = fis.read(byteBuff)) >= 0) {
                                //out.println("[parseRequest.jsp] " + "     Nb bytes read: " + nbBytes);
                                fos.write(byteBuff, 0, nbBytes);
                            }
                            fis.close();
                        }
                        fos.close();
                    }

                    logger.debug(" End of chunk management");
                    //

                    fileItem.delete();
                }
            }
            logger.debug("while");
        }

        if (generateWarning) {
            out.println("WARNING: just a warning message.\\nOn two lines!");
        }

        out.println("[parseRequest.jsp] " + "Let's write a status, to finish the server response :");

        logger.debug("Let's wait a little, to simulate the server time to manage the file.");
        Thread.sleep(500);

        logger.debug("Do you want to test a successful upload, or the way the applet reacts to an error ?");
        if (generateError) {
            out.println(
                    "ERROR: this is a test error (forced in /wwwroot/pages/parseRequest.jsp).\\nHere is a second line!");
        } else {
            out.println("SUCCESS");
            logger.debug("");
        }

        out.println("[parseRequest.jsp] " + "End of server treatment ");

    } catch (Exception e) {
        out.println("");
        out.println("ERROR: Exception e = " + e.toString());
        out.println("");
    }
}

From source file:nl.nn.adapterframework.http.rest.ApiListenerServlet.java

protected void service(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {

    /**/*  ww w .j av  a  2 s .  c  o  m*/
     * Initiate and populate messageContext
     */
    PipeLineSessionBase messageContext = new PipeLineSessionBase();
    messageContext.put(IPipeLineSession.HTTP_REQUEST_KEY, request);
    messageContext.put(IPipeLineSession.HTTP_RESPONSE_KEY, response);
    messageContext.put(IPipeLineSession.SERVLET_CONTEXT_KEY, getServletContext());
    messageContext.setSecurityHandler(new HttpSecurityHandler(request));

    try {
        String uri = request.getPathInfo();
        String method = request.getMethod().toUpperCase();
        log.trace("ApiListenerServlet dispatching uri [" + uri + "] and method [" + method + "]");

        if (uri == null) {
            response.setStatus(400);
            log.warn("Aborting request with status [400], empty uri");
            return;
        }

        if (uri.startsWith("/"))
            uri = uri.substring(1);
        if (uri.endsWith("/"))
            uri = uri.substring(0, uri.length() - 1);

        ApiDispatchConfig config = dispatcher.findConfigForUri(uri);
        if (config == null) {
            response.setStatus(404);
            log.trace("Aborting request with status [404], no ApiListener configured for [" + uri + "]");
            return;
        }

        /**
         * Handle Cross-Origin Resource Sharing
         * TODO make this work behind loadbalancers/reverse proxies
         * TODO check if request ip/origin header matches allowOrigin property
         */
        String origin = request.getHeader("Origin");
        if (method.equals("OPTIONS") || origin != null) {
            response.setHeader("Access-Control-Allow-Origin", CorsAllowOrigin);
            String headers = request.getHeader("Access-Control-Request-Headers");
            if (headers != null)
                response.setHeader("Access-Control-Allow-Headers", headers);
            response.setHeader("Access-Control-Expose-Headers", CorsExposeHeaders);

            StringBuilder methods = new StringBuilder();
            for (String mtd : config.getMethods()) {
                methods.append(", ").append(mtd);
            }
            response.setHeader("Access-Control-Allow-Methods", methods.toString());

            //Only cut off OPTIONS (aka preflight) requests
            if (method.equals("OPTIONS")) {
                response.setStatus(200);
                log.trace("Aborting preflight request with status [200], method [" + method + "]");
                return;
            }
        }

        /**
         * Get serviceClient
         */
        ApiListener listener = config.getApiListener(method);
        if (listener == null) {
            response.setStatus(405);
            log.trace("Aborting request with status [405], method [" + method + "] not allowed");
            return;
        }

        log.trace("ApiListenerServlet calling service [" + listener.getName() + "]");

        /**
         * Check authentication
         */
        ApiPrincipal userPrincipal = null;

        if (listener.getAuthenticationMethod() != null) {

            String authorizationToken = null;
            Cookie authorizationCookie = null;
            if (listener.getAuthenticationMethod().equals("COOKIE")) {

                Cookie[] cookies = request.getCookies();
                for (Cookie cookie : cookies) {
                    if (cookie.getName().equals("authenticationToken")) {
                        authorizationToken = cookie.getValue();
                        authorizationCookie = cookie;
                        authorizationCookie.setPath("/");
                    }
                }
            } else if (listener.getAuthenticationMethod().equals("HEADER")) {
                authorizationToken = request.getHeader("Authorization");
            }

            if (authorizationToken != null && cache.containsKey(authorizationToken))
                userPrincipal = (ApiPrincipal) cache.get(authorizationToken);

            if (userPrincipal == null || !userPrincipal.isLoggedIn()) {
                cache.remove(authorizationToken);
                if (authorizationCookie != null) {
                    authorizationCookie.setMaxAge(0);
                    response.addCookie(authorizationCookie);
                }

                response.setStatus(401);
                log.trace("Aborting request with status [401], no (valid) credentials supplied");
                return;
            }

            if (authorizationCookie != null) {
                authorizationCookie.setMaxAge(authTTL);
                response.addCookie(authorizationCookie);
            }
            userPrincipal.updateExpiry();
            userPrincipal.setToken(authorizationToken);
            cache.put(authorizationToken, userPrincipal, authTTL);
            messageContext.put("authorizationToken", authorizationToken);
        }
        messageContext.put("remoteAddr", request.getRemoteAddr());
        messageContext.put(IPipeLineSession.API_PRINCIPAL_KEY, userPrincipal);
        messageContext.put("uri", uri);

        /**
         * Evaluate preconditions
         */
        String accept = request.getHeader("Accept");
        if (accept != null && !accept.isEmpty() && !accept.equals("*/*")) {
            if (!listener.getProduces().equals("ANY") && !accept.contains(listener.getContentType())) {
                response.setStatus(406);
                response.getWriter().print("It appears you expected the MediaType [" + accept
                        + "] but I only support the MediaType [" + listener.getContentType() + "] :)");
                log.trace("Aborting request with status [406], client expects [" + accept + "] got ["
                        + listener.getContentType() + "] instead");
                return;
            }
        }

        if (request.getContentType() != null && !listener.isConsumable(request.getContentType())) {
            response.setStatus(415);
            log.trace("Aborting request with status [415], did not match consumes [" + listener.getConsumes()
                    + "] got [" + request.getContentType() + "] instead");
            return;
        }

        String etagCacheKey = ApiCacheManager.buildCacheKey(uri);
        log.debug("Evaluating preconditions for listener[" + listener.getName() + "] etagKey[" + etagCacheKey
                + "]");
        if (cache.containsKey(etagCacheKey)) {
            String cachedEtag = (String) cache.get(etagCacheKey);
            log.debug("found etag value[" + cachedEtag + "] for key[" + etagCacheKey + "]");

            if (method.equals("GET")) {
                String ifNoneMatch = request.getHeader("If-None-Match");
                if (ifNoneMatch != null && ifNoneMatch.equals(cachedEtag)) {
                    response.setStatus(304);
                    log.trace(
                            "Aborting request with status [304], matched if-none-match [" + ifNoneMatch + "]");
                    return;
                }
            } else {
                String ifMatch = request.getHeader("If-Match");
                if (ifMatch != null && !ifMatch.equals(cachedEtag)) {
                    response.setStatus(412);
                    log.trace("Aborting request with status [412], matched if-match [" + ifMatch + "] method ["
                            + method + "]");
                    return;
                }
            }
        }
        messageContext.put("updateEtag", listener.getUpdateEtag());

        /**
         * Check authorization
         */
        //TODO: authentication implementation

        /**
         * Map uriIdentifiers into messageContext 
         */
        String patternSegments[] = listener.getUriPattern().split("/");
        String uriSegments[] = uri.split("/");
        int uriIdentifier = 0;
        for (int i = 0; i < patternSegments.length; i++) {
            String segment = patternSegments[i];
            if (segment.startsWith("{") && segment.endsWith("}")) {
                String name;
                if (segment.equals("*"))
                    name = "uriIdentifier_" + uriIdentifier;
                else
                    name = segment.substring(1, segment.length() - 1);

                uriIdentifier++;
                log.trace("setting uriSegment [" + name + "] to [" + uriSegments[i] + "]");
                messageContext.put(name, uriSegments[i]);
            }
        }

        /**
         * Map queryParameters into messageContext
         */
        Enumeration<?> paramnames = request.getParameterNames();
        while (paramnames.hasMoreElements()) {
            String paramname = (String) paramnames.nextElement();
            String paramvalue = request.getParameter(paramname);

            log.trace("setting queryParameter [" + paramname + "] to [" + paramvalue + "]");
            messageContext.put(paramname, paramvalue);
        }

        /**
         * Map multipart parts into messageContext
         */
        if (ServletFileUpload.isMultipartContent(request)) {
            DiskFileItemFactory diskFileItemFactory = new DiskFileItemFactory();
            ServletFileUpload servletFileUpload = new ServletFileUpload(diskFileItemFactory);
            List<FileItem> items = servletFileUpload.parseRequest(request);
            for (FileItem item : items) {
                if (item.isFormField()) {
                    // Process regular form field (input type="text|radio|checkbox|etc", select, etc).
                    String fieldName = item.getFieldName();
                    String fieldValue = item.getString();
                    log.trace("setting multipart formField [" + fieldName + "] to [" + fieldValue + "]");
                    messageContext.put(fieldName, fieldValue);
                } else {
                    // Process form file field (input type="file").
                    String fieldName = item.getFieldName();
                    String fieldNameName = fieldName + "Name";
                    String fileName = FilenameUtils.getName(item.getName());
                    log.trace("setting multipart formFile [" + fieldNameName + "] to [" + fileName + "]");
                    messageContext.put(fieldNameName, fileName);
                    log.trace(
                            "setting parameter [" + fieldName + "] to input stream of file [" + fileName + "]");
                    messageContext.put(fieldName, item.getInputStream());
                }
            }
        }

        /**
         * Compile Allow header
         */
        StringBuilder methods = new StringBuilder();
        methods.append("OPTIONS, ");
        for (String mtd : config.getMethods()) {
            methods.append(mtd + ", ");
        }
        messageContext.put("allowedMethods", methods.substring(0, methods.length() - 2));

        /**
         * Process the request through the pipeline
         */

        String body = "";
        if (!ServletFileUpload.isMultipartContent(request)) {
            body = Misc.streamToString(request.getInputStream(), "\n", false);
        }
        String result = listener.processRequest(null, body, messageContext);

        /**
         * Calculate an eTag over the processed result and store in cache
         */
        if (messageContext.get("updateEtag", true)) {
            log.debug("calculating etags over processed result");
            String cleanPattern = listener.getCleanPattern();
            if (result != null && method.equals("GET")) {
                String eTag = ApiCacheManager.buildEtag(cleanPattern, result.hashCode());
                log.debug("adding/overwriting etag with key[" + etagCacheKey + "] value[" + eTag + "]");
                cache.put(etagCacheKey, eTag);
                response.addHeader("etag", eTag);
            } else {
                log.debug("removing etag with key[" + etagCacheKey + "]");
                cache.remove(etagCacheKey);

                // Not only remove the eTag for the selected resources but also the collection
                String key = ApiCacheManager.getParentCacheKey(listener, uri);
                if (key != null) {
                    log.debug("removing parent etag with key[" + key + "]");
                    cache.remove(key);
                }
            }
        }

        /**
         * Add headers
         */
        response.addHeader("Allow", (String) messageContext.get("allowedMethods"));

        String contentType = listener.getContentType() + "; charset=utf-8";
        if (listener.getProduces().equals("ANY")) {
            contentType = messageContext.get("contentType", contentType);
        }
        response.setHeader("Content-Type", contentType);

        /**
         * Check if an exitcode has been defined or if a statuscode has been added to the messageContext.
         */
        int statusCode = messageContext.get("exitcode", 0);
        if (statusCode > 0)
            response.setStatus(statusCode);

        /**
         * Finalize the pipeline and write the result to the response
         */
        if (result != null)
            response.getWriter().print(result);
        log.trace("ApiListenerServlet finished with statusCode [" + statusCode + "] result [" + result + "]");
    } catch (Exception e) {
        log.warn("ApiListenerServlet caught exception, will rethrow as ServletException", e);
        try {
            response.flushBuffer();
            response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, e.getMessage());
        } catch (IllegalStateException ex) {
            //We're only informing the end user(s), no need to catch this error...
            response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
        }
    }
}

From source file:org.springframework.extensions.webscripts.servlet.mvc.EndPointProxyController.java

public ModelAndView handleRequestInternal(HttpServletRequest req, HttpServletResponse res) throws Exception {
    // get the portion of the uri beyond the handler mapping (resolved by Spring)
    String uri = (String) req.getAttribute(HandlerMapping.PATH_WITHIN_HANDLER_MAPPING_ATTRIBUTE);

    // handle Flash uploader specific jsession parameter for conforming to servlet spec on later TomCat 6/7 versions
    int jsessionid;
    if ((jsessionid = uri.indexOf(JSESSIONID)) != -1) {
        uri = uri.substring(0, jsessionid);
    }//from   ww w .  j  av  a2s  .  c om

    // validate and return the endpoint id from the URI path
    StringTokenizer t = new StringTokenizer(URLEncoder.encodeUri(uri), "/");
    if (!t.hasMoreTokens()) {
        throw new IllegalArgumentException("Proxy URL did not specify endpoint id.");
    }
    String endpointId = t.nextToken();

    // rebuild rest of the URL for the proxy request
    StringBuilder buf = new StringBuilder(64);
    if (t.hasMoreTokens()) {
        do {
            buf.append('/');
            buf.append(t.nextToken());
        } while (t.hasMoreTokens());
    } else {
        // allow for an empty uri to be passed in
        // this could therefore refer to the root of a service i.e. /webapp/axis
        buf.append('/');
    }

    try {
        // retrieve the endpoint descriptor - do not allow proxy access to unsecure endpoints
        EndpointDescriptor descriptor = getRemoteConfig().getEndpointDescriptor(endpointId);
        if (descriptor == null || descriptor.getUnsecure()) {
            // throw an exception if endpoint ID is does not exist or invalid
            throw new WebScriptsPlatformException("Invalid EndPoint Id: " + endpointId);
        }

        // user id from session NOTE: @see org.springframework.extensions.surf.UserFactory
        Connector connector;
        String userId = null;
        HttpSession session = req.getSession(false);
        if (session != null) {
            userId = (String) session.getAttribute(USER_ID);
        }
        if (userId != null && this.connectorService.getCredentialVault(req.getSession(), userId)
                .hasCredentials(endpointId)) {
            // build an authenticated connector - as we have a userId
            connector = this.connectorService.getConnector(endpointId, userId, req.getSession());
        } else if (descriptor.getIdentity() == IdentityType.NONE
                || descriptor.getIdentity() == IdentityType.DECLARED || descriptor.getExternalAuth()) {
            // the authentication for this endpoint is either not required, declared in config or
            // managed "externally" (i.e. by a servlet filter such as NTLM) - this means we should
            // proceed on the assumption it will be dealt with later
            connector = this.connectorService.getConnector(endpointId, req.getSession());
        } else if (descriptor.getBasicAuth()
                || this.proxyControllerInterceptor.allowHttpBasicAuthentication(descriptor, uri)) {
            // check for HTTP authorisation request (i.e. RSS feeds, direct links etc.)
            String authorization = req.getHeader("Authorization");
            if (authorization == null || authorization.length() == 0) {
                authorizedResponseStatus(res);

                // no further processing as authentication is required but not provided
                // the browser will now prompt the user for appropriate credentials
                return null;
            } else {
                // user has provided authentication details with the request
                String[] authParts = authorization.split(" ");
                // test for a "negotiate" header - we will then suggest "basic" as the auth mechanism
                if (authParts[0].equalsIgnoreCase("negotiate")) {
                    authorizedResponseStatus(res);

                    // no further processing as authentication is required but not provided
                    // the browser will now prompt the user for appropriate credentials
                    return null;
                }
                if (!authParts[0].equalsIgnoreCase("basic")) {
                    throw new WebScriptsPlatformException(
                            "Authorization '" + authParts[0] + "' not supported.");
                }

                String[] values = new String(Base64.decode(authParts[1])).split(":");
                if (values.length == 2) {
                    if (logger.isDebugEnabled())
                        logger.debug("Authenticating (BASIC HTTP) user " + values[0]);

                    // assume username and password passed as the parts and
                    // build an unauthenticated authentication connector then
                    // apply the supplied credentials to it
                    connector = this.connectorService.getConnector(endpointId, values[0], req.getSession());
                    Credentials credentials = new CredentialsImpl(endpointId);
                    credentials.setProperty(Credentials.CREDENTIAL_USERNAME, values[0]);
                    credentials.setProperty(Credentials.CREDENTIAL_PASSWORD, values[1]);
                    connector.setCredentials(credentials);
                } else {
                    authorizedResponseStatus(res);

                    // no further processing as authentication is required but not provided
                    // the browser will now prompt the user for appropriate credentials
                    return null;
                }
            }
        } else {
            res.setStatus(HttpServletResponse.SC_UNAUTHORIZED,
                    "No USER_ID found in session and requested endpoint requires authentication.");

            // no further processing as authentication is required but not provided
            return null;
        }

        // build a connector context, stores information about how we will drive the remote client
        // ensure we don't proxy over any browser to web-tier Authorization headers over to the endpoint
        Map<String, String> headers = new HashMap<String, String>(1, 1.0f);
        headers.put("Authorization", null);
        ConnectorContext context = new ConnectorContext(HttpMethod.valueOf(req.getMethod().toUpperCase()), null,
                headers);
        context.setExceptionOnError(this.proxyControllerInterceptor.exceptionOnError(descriptor, uri));
        context.setContentType(req.getContentType());

        // build proxy URL referencing the endpoint
        final String q = req.getQueryString();
        final String url = buf.toString() + (q != null && q.length() != 0 ? "?" + q : "");

        if (logger.isDebugEnabled()) {
            logger.debug("EndPointProxyController preparing to proxy:");
            logger.debug(" - endpointId: " + endpointId);
            logger.debug(" - userId: " + userId);
            logger.debug(" - connector: " + connector);
            logger.debug(" - method: " + context.getMethod());
            logger.debug(" - url: " + url);
        }

        // call through using our connector to proxy
        Response response = connector.call(url, context, req, res);

        if (logger.isDebugEnabled()) {
            logger.debug("Return code: " + response.getStatus().getCode());
            if (response.getStatus().getCode() == 500) {
                logger.debug("Error detected: " + response.getStatus().getMessage() + "\n"
                        + response.getStatus().getException().toString());
            }
        }
    } catch (Throwable err) {
        // TODO: trap and handle errors!
        throw new WebScriptsPlatformException("Error during endpoint proxy processing: " + err.getMessage(),
                err);
    }

    return null;
}

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.j ava 2  s  . c  o  m
            try {
                HttpSession ses = request.getSession(true);
                JFacturasXML compfactxml = (JFacturasXML) ses.getAttribute("comp_fact_xml");
                Vector archivos = new Vector();
                DiskFileUpload fu = new DiskFileUpload();
                List items = fu.parseRequest(request);
                Iterator iter = items.iterator();
                while (iter.hasNext()) {
                    FileItem item = (FileItem) iter.next();
                    if (item.isFormField())
                        compfactxml.getParametros().put(item.getFieldName(), item.getString());
                    else
                        archivos.addElement(item);
                }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

                                RFC_Emisor = compfactxml.getRFC_Emisor();

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

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

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

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

                                    rec.agregaCFDI(compfactxml);

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

                        } else // sale si no es factura
                            return;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

                        }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

                            }
                        }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

                        } else // sale si no es orden
                            return;

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

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

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

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

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

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

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

                    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

                }
            }

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

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

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

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

                        } else // sale si no es orden
                            return;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

                    }

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

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

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

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

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

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

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

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

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

}

From source file:forseti.ventas.JVenFactDlg.java

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

                        JFacturasXML venfactxml = new JFacturasXML();

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

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

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

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

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

                            rec.agregaCFDI(venfactxml);

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

                        }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

                        String nombre, destino;

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

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

                        JBajarArchivo fd = new JBajarArchivo();

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

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

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

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

                        String nombre, destino;

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

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

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

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

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

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

                        String nombre, destino;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

                        String nombre, destino;

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

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

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

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

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

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

                        String nombre, destino;

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

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

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

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

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

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

                        String nombre, destino;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

                    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

                    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

                }
            }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

}