public JsonResult batchCreate()
        {
            string res = "Error";
            List<MarketingDocument> documents = new List<MarketingDocument>();

            try
            {
                //Find document pending to process
                List<ProcessQueue> queue = BizProcessQueue.GetList(false).ToList();
                List<int> companies = queue.Select(x => x.idCompany).Distinct().ToList();

                List<MarketingDocument> resultTransaction = new List<MarketingDocument>();

                if (companies.Count() > 0)
                {
                    foreach (int company in companies)
                    {
                        AppConnData appConnData = new AppConnData();

                        List<ProcessQueue> items = queue.Where(x => x.idCompany.Equals(company)).ToList();
                        List<int> orderIds = items.Select(x => x.idTarget).ToList();
                        IList<ORDR> orders = BizSalesOrderDraft.GetList(orderIds);
                        IList<RDR1> orderLines = BizSalesOrderDraft.GetLinesList(orderIds);

                        if (items.Count() > 0)
                        {
                            appConnData = GetAppConnData(company);

                            #region Queue Process
                            foreach (ProcessQueue item in items)
                            {
                                if (item.actionType == "A")
                                {
                                    #region Add Sales Order
                                    ORDR ordr = orders.Where(x => x.id.Equals(item.idTarget)).FirstOrDefault();

                                    if (ordr != null)
                                    {
                                        IList<RDR1> lines = orderLines.Where(x => x.orderId.Equals(ordr.id)).ToList();

                                        MarketingDocument document = new MarketingDocument()
                                        {
                                            cardCode = ordr.cardCode,
                                            serie = ordr.series,
                                            docDate = ordr.docDate,
                                            docDueDate = ordr.docDueDate,
                                            taxDate = ordr.taxDate,
                                            shipToCode = ordr.shipToCode,
                                            payToCode = ordr.payToCode,
                                            groupNum = ordr.groupNum,
                                            slpCode = ordr.slpCode,
                                            lines = new List<MarketingDocumentLine>(),
                                            userDefinedFields = new List<UserDefinedField>(),
                                            actionType = ActionType.Add,
                                            idQueue = item.id
                                        };

                                        document.userDefinedFields.Add(new UserDefinedField()
                                        {
                                            name = "U_CSS_COMENTARIOS",
                                            type = UdfType.Text,
                                            value = ordr.uCssComentarios
                                        });

                                        document.userDefinedFields.Add(new UserDefinedField()
                                        {
                                            name = "U_orkWebDocument",
                                            type = UdfType.Text,
                                            value = ordr.id.ToString()
                                        });

                                        foreach (RDR1 line in lines)
                                        {

                                            MarketingDocumentLine docLine = new MarketingDocumentLine()
                                            {
                                                itemCode = line.itemCode,
                                                quantity = (double)line.quantity,
                                                whsCode = line.whsCode,
                                                taxCode = line.taxCode,
                                                ocrCode = line.ocrCode,
                                                price = (double)line.price,
                                                batchNumbers = new List<BatchNumber>(),
                                                serialNumbers = new List<SerialNumber>(),
                                                userDefinedFields = new List<UserDefinedField>()
                                            };

                                            docLine.userDefinedFields.Add(new UserDefinedField()
                                            {
                                                name = "U_CSS_ENVASEDEVOL",
                                                type = UdfType.Alphanumeric,
                                                value = line.uCssEnvaseDevol
                                            });

                                            document.lines.Add(docLine);
                                        }
                                        //backEnd.ProcessBatchTransaction()
                                        documents.Add(document);
                                    }
                                    else
                                    {
                                        BizProcessQueue.Remove(item);
                                    }

                                    #endregion
                                }
                                if (item.actionType == "C")
                                {
                                    #region Add Sales order Cancellation
                                    MarketingDocument document = new MarketingDocument()
                                    {
                                        docEntry = item.idTarget,
                                        actionType = ActionType.Cancel,
                                        idQueue = item.id
                                    };

                                    documents.Add(document);
                                    #endregion
                                }
                            }
                            #endregion

                            resultTransaction = backEnd.ProcessBatchTransaction(documents, appConnData);

                            #region QueueUpdate
                            foreach (ProcessQueue item in items)
                            {
                                MarketingDocument trans = resultTransaction.Where(x => x.idQueue.Equals(item.id)).FirstOrDefault();

                                if (trans != null)
                                {
                                    item.processed = DateTime.Now;
                                    item.logMessage = trans.transactionInformation;

                                    if (trans.transactionInformation.Substring(0, 5).ToLower() == "error")
                                    {
                                        item.sucess = false;
                                        item.logMessage = trans.transactionInformation;
                                    }
                                    else
                                    {
                                        if (item.actionType == "A")
                                        {
                                            ORDR order = orders.Where(x => x.id.Equals(item.idTarget)).FirstOrDefault();
                                            string docNum = backEnd.GetOrderNum(trans.docEntry, appConnData).ToString();
                                            order.docEntry = trans.docEntry;
                                            BizSalesOrderDraft.Update(order);

                                            trans.transactionInformation = string.Format("{0}. Doc num = {1}", trans.transactionInformation, docNum);
                                        }

                                        item.sucess = true;
                                        item.logMessage = trans.transactionInformation;
                                    }

                                    BizProcessQueue.Update(item);
                                }
                            }
                            #endregion

                            res = string.Format("Se procesaron {0} transacciones", items.Count().ToString());
                        }
                    }
                }
                else
                    res = "No hay informacion para procesar";
            }
            catch (FaultException<DataAccessFault> ex)
            {
                res = string.Format("Error - Codigo {0} mensaje:{1} {2}", ex.Code, ex.Detail.Description, ex.Message);
            }
            catch (Exception ex)
            {
                res = string.Format("Error - mensaje: {0}", ex.Message);
            }

            return Json(res, JsonRequestBehavior.AllowGet);
        }
        public ActionResult Finish(string id)
        {
            #region User identification
            IIdentity context = HttpContext.User.Identity;
            int user = 0;
            bool admin = false;
            bool customerCreator = false;
            bool purchaseOrderCreator = false;
            int companyId = 0;
            string userName = "";
            int slpCode = 0;
            AppConnData appConnData = new AppConnData();

            if (context.IsAuthenticated)
            {

                System.Web.Security.FormsIdentity ci = (System.Web.Security.FormsIdentity)HttpContext.User.Identity;
                string[] userRole = ci.Ticket.UserData.Split('|');
                user = int.Parse(userRole[0]);
                admin = int.Parse(userRole[1]) == 1 ? true : false;
                customerCreator = int.Parse(userRole[2]) == 1 ? true : false;
                purchaseOrderCreator = int.Parse(userRole[3]) == 1 ? true : false;
                companyId = int.Parse(userRole[4]);
                slpCode = int.Parse(userRole[5]);
                userName = ci.Name;
                appConnData = GetAppConnData(companyId);
            }
            #endregion

            string realId = HexSerialization.HexToString(id);

            List<CompanyParameter> companyParameters = BizCompanyParameter.GetList(companyId).ToList();
            string batchMarketingTransactions = companyParameters.Where(x => x.idParameter.Equals(5)).Select(x => x.value).FirstOrDefault();

            if (batchMarketingTransactions == "No")
            {
                #region Live transaction
                try
                {
                    ORDR ordr = BizSalesOrderDraft.GetSingle(int.Parse(realId));

                    if (ordr.docEntry != null)
                        throw new Exception("Este pedido ya fué registrado en SAP");

                    List<RDR1> lines = BizSalesOrderDraft.GetLinesList(int.Parse(realId)).ToList();

                    MarketingDocument document = new MarketingDocument()
                    {
                        cardCode = ordr.cardCode,
                        serie = ordr.series,
                        docDate = ordr.docDate,
                        docDueDate = ordr.docDueDate,
                        taxDate = ordr.taxDate,
                        shipToCode = ordr.shipToCode,
                        payToCode = ordr.payToCode,
                        groupNum = ordr.groupNum,
                        lines = new List<MarketingDocumentLine>(),
                        userDefinedFields = new List<UserDefinedField>()
                    };

                    if (slpCode > 0)
                        document.slpCode = slpCode;

                    document.userDefinedFields.Add(new UserDefinedField()
                    {
                        name = "U_CSS_COMENTARIOS",
                        type = UdfType.Text,
                        value = ordr.uCssComentarios
                    });

                    document.userDefinedFields.Add(new UserDefinedField()
                    {
                        name = "U_orkWebDocument",
                        type = UdfType.Text,
                        value = ordr.id.ToString()
                    });

                    foreach (RDR1 item in lines)
                    {

                        MarketingDocumentLine line = new MarketingDocumentLine()
                        {
                            itemCode = item.itemCode,
                            quantity = (double)item.quantity,
                            whsCode = item.whsCode,
                            taxCode = item.taxCode,
                            ocrCode = item.ocrCode,
                            price = (double)item.price,
                            batchNumbers = new List<BatchNumber>(),
                            serialNumbers = new List<SerialNumber>(),
                            userDefinedFields = new List<UserDefinedField>()
                        };

                        line.userDefinedFields.Add(new UserDefinedField()
                        {
                            name = "U_CSS_ENVASEDEVOL",
                            type = UdfType.Alphanumeric,
                            value = item.uCssEnvaseDevol
                        });

                        document.lines.Add(line);
                    }

                    if (userName.ToLower() != "root")
                    {
                        WebUserCompany wuc = BizWebUserCompany.GetSingle(user, companyId);
                        if (wuc.slpCode != 0)
                            document.slpCode = wuc.slpCode;
                    }

                    document = backEnd.AddSalesOrder(document, appConnData);
                    document.docNum = backEnd.GetOrderNum(document.docEntry, appConnData);
                    ViewBag.colorMensaje = "success";
                    ViewBag.mensaje = "Orden de venta creada con éxito";
                    ViewBag.docEntry = string.Format("Se creó la orden no {0}. Numero interno de documento {1}", document.docNum, document.docEntry);

                    ordr.docEntry = document.docEntry;
                    BizSalesOrderDraft.Update(ordr);
                }
                catch (FaultException<DataAccessFault> ex)
                {
                    ViewBag.colorMensaje = "danger";
                    ViewBag.mensaje = "No se pudo crear la Orden de venta";
                    ViewBag.docEntry = string.Format("Codigo {0} error:{1} {2}", ex.Code, ex.Detail.Description, ex.Message);
                }

                catch (Exception ex)
                {
                    ViewBag.colorMensaje = "danger";
                    ViewBag.mensaje = "Atención:";
                    ViewBag.docEntry = string.Format(" - {0}", ex.Message);
                }
                #endregion
            }
            else if (batchMarketingTransactions == "Si")
            {
                #region Queue Transaction
                BizProcessQueue.Add(new ProcessQueue()
                {
                    actionType = "A",
                    idTarget = int.Parse(realId),
                    addedToQueue = DateTime.Now,
                    idCompany = companyId
                });

                ViewBag.colorMensaje = "success";
                ViewBag.mensaje = "Registro guardado";
                ViewBag.docEntry = "Su pedido ha sido guardado y en breve será procesado.";
                #endregion
            }

            return View();
        }
        public ActionResult Finish(string id)
        {
            try
            {
                #region User identification
                IIdentity context = HttpContext.User.Identity;
                int user = 0;
                bool admin = false;
                bool customerCreator = false;
                bool purchaseOrderCreator = false;
                int companyId = 0;
                string userName = "";
                int slpCode = 0;
                AppConnData appConnData = new AppConnData();

                if (context.IsAuthenticated)
                {

                    System.Web.Security.FormsIdentity ci = (System.Web.Security.FormsIdentity)HttpContext.User.Identity;
                    string[] userRole = ci.Ticket.UserData.Split('|');
                    user = int.Parse(userRole[0]);
                    admin = int.Parse(userRole[1]) == 1 ? true : false;
                    customerCreator = int.Parse(userRole[2]) == 1 ? true : false;
                    purchaseOrderCreator = int.Parse(userRole[3]) == 1 ? true : false;
                    companyId = int.Parse(userRole[4]);
                    slpCode = int.Parse(userRole[5]);
                    userName = ci.Name;
                    appConnData = GetAppConnData(companyId);
                }
                #endregion

                string realId = HexSerialization.HexToString(id);
                OQUT OQUT = BizQuotation.GetSingle(int.Parse(realId));
                List<QUT1> lines = BizQuotation.GetLinesList(int.Parse(realId)).ToList();

                MarketingDocument document = new MarketingDocument()
                {
                    cardCode = OQUT.cardCode,
                    serie = OQUT.series,
                    docDate = OQUT.docDate,
                    docDueDate = OQUT.docDueDate,
                    taxDate = OQUT.taxDate,
                    shipToCode = OQUT.shipToCode,
                    payToCode = OQUT.payToCode,
                    lines = new List<MarketingDocumentLine>(),
                    userDefinedFields = new List<UserDefinedField>()
                };

                if (slpCode > 0)
                    document.slpCode = slpCode;

                document.userDefinedFields.Add(new UserDefinedField()
                {
                    name = "U_CSS_COMENTARIOS",
                    type = UdfType.Text,
                    value = OQUT.uCssComentarios
                });

                foreach (QUT1 item in lines)
                {

                    MarketingDocumentLine line = new MarketingDocumentLine()
                    {
                        itemCode = item.itemCode,
                        quantity = (double)item.quantity,
                        whsCode = item.whsCode,
                        taxCode = item.taxCode,
                        ocrCode = item.ocrCode,
                        price = (double)item.price,
                        batchNumbers = new List<BatchNumber>(),
                        serialNumbers = new List<SerialNumber>(),
                        userDefinedFields = new List<UserDefinedField>()
                    };

                    line.userDefinedFields.Add(new UserDefinedField()
                    {
                        name = "U_CSS_ENVASEDEVOL",
                        type = UdfType.Alphanumeric,
                        value = item.uCssEnvaseDevol
                    });

                    document.lines.Add(line);
                }

                if (userName.ToLower() != "root")
                {
                    WebUserCompany wuc = BizWebUserCompany.GetSingle(user, companyId);
                    if (wuc.slpCode != 0)
                        document.slpCode = wuc.slpCode;
                }

                document = backEnd.AddQuotation(document, appConnData);
                ViewBag.colorMensaje = "success";
                ViewBag.mensaje = "Cotización creada con éxito";
                ViewBag.docEntry = string.Format("Se creó la cotización no {0}", document.docEntry);

                OQUT.docEntry = document.docEntry;
                BizQuotation.Update(OQUT);
            }
            catch (FaultException<DataAccessFault> ex)
            {
                ViewBag.colorMensaje = "danger";
                ViewBag.mensaje = "No se pudo crear la Cotización";
                ViewBag.docEntry = string.Format("Codigo {0} error:{1} {2}", ex.Code, ex.Detail.Description, ex.Message);
            }
            return View();
        }