public ActionResult AddLine(string id)
        {
            #region User identification
            IIdentity context = HttpContext.User.Identity;
            bool admin = false;
            bool customerCreator = false;
            bool purchaseOrderCreator = false;
            int companyId = 0;
            string userName = "";
            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('|');

                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]);
                userName = ci.Name;
                appConnData = GetAppConnData(companyId);
            }
            #endregion

            string realId = HexSerialization.HexToString(id);
            OQUT OQUT = BizQuotation.GetSingle(int.Parse(realId));

            BusinessPartner customer = backEnd.GetBusinessPartner(OQUT.cardCode, appConnData);

            ViewBag.serie = backEnd.GetDocumentSeriesSingle(OQUT.series, appConnData).seriesName;
            ViewBag.cardCode = OQUT.cardCode;
            ViewBag.cardName = customer.cardName;
            ViewBag.docDate = OQUT.docDate.ToString("yyyy-MM-dd");
            ViewBag.docDueDate = OQUT.docDueDate.ToString("yyyy-MM-dd");
            ViewBag.taxDate = OQUT.taxDate.ToString("yyyy-MM-dd");
            ViewBag.uCssComentarios = OQUT.uCssComentarios;
            ViewBag.listNum = customer.listNum;
            ViewBag.orderId = realId;
            ViewBag.id = id;
            return View();
        }
        public CustomerViewModel(AppConnData appConnData)
        {
            WSSAPClient backEnd = new WSSAPClient();
            bpGroups = backEnd.GetAllBusinessPratnerGroup(CardType.Customer, appConnData);
            currencies = backEnd.GetCurrencyList(appConnData);

            salesPersons = backEnd.GetSalesPersonList(appConnData);
            paymentTerms = backEnd.GetPaymentTermList(appConnData);
            tributaryRegs = backEnd.GetUdoGenericKeyValueList("@BPCO_RT", appConnData);
            docTypes = backEnd.GetUdoGenericKeyValueList("@BPCO_TD", appConnData);
            magneticMediaCities = backEnd.GetUdoGenericKeyValueList("@BPCO_MU", appConnData);
            personTypes = backEnd.GetUserDefinedFieldValuesList("OCRD", "4", appConnData);
            ivaClasses = backEnd.GetUserDefinedFieldValuesList("OCRD", "111", appConnData);
            partnerSegments = backEnd.GetUserDefinedFieldValuesList("OCRD", "125", appConnData);
            dunningTerms = backEnd.GetDunninTermList(appConnData);

            invoiceDays = new Dictionary<string, string>();

            for (int i = 1; i < 31; i++)
                invoiceDays.Add(i.ToString(), i.ToString());
        }
        public ActionResult Create(OQUT quotation)
        {
            #region User identification
            IIdentity context = HttpContext.User.Identity;
            string userId = "";
            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('|');

                userId = 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

            quotation.uOrkUsuarioWeb = userId;
            quotation.idCompania = companyId;
            quotation.slpCode = slpCode;
            int orderNum = BizQuotation.Add(quotation);
            return RedirectToAction("AddLine", new { id = HexSerialization.StringToHex(orderNum.ToString()) });
        }
        public JsonResult AsyncSeriesList()
        {
            #region User identification
            IIdentity context = HttpContext.User.Identity;
            bool admin = false;
            bool customerCreator = false;
            bool purchaseOrderCreator = false;
            int companyId = 0;
            string userName = "";
            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('|');

                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]);
                userName = ci.Name;
                appConnData = GetAppConnData(companyId);
            }
            #endregion

            List<DocumentSeries> docSeries = backEnd.GetDocumentSeriesList(SapDocumentType.SalesOrder, appConnData);
            return Json(docSeries, JsonRequestBehavior.AllowGet);
        }
        public JsonResult AsyncItemsList()
        {
            #region User identification
            IIdentity context = HttpContext.User.Identity;
            bool admin = false;
            bool customerCreator = false;
            bool purchaseOrderCreator = false;
            int companyId = 0;
            string userName = "";
            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('|');

                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]);
                userName = ci.Name;
                appConnData = GetAppConnData(companyId);
            }
            #endregion

            List<GenericItem> items = backEnd.GetItems(appConnData);
            var data = from c in items select new[] { c.ItemCode, c.ItemName, string.Empty };

            return Json(new
            {
                data = data
            }, JsonRequestBehavior.AllowGet);
        }
        public JsonResult AsyncGeoReport(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 = "";
            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]);
                userName = ci.Name;
                appConnData = GetAppConnData(companyId);
            }
            #endregion

            string[] parameters = id.Split('|');

            DateTime from = DateTime.Parse(parameters[0]), to = DateTime.Parse(parameters[1]);
            int slpCode = int.Parse(parameters[2]);

            List<ORDR> ordrs = BizSalesOrderDraft.GetList(from, to, slpCode, companyId).ToList();

            return Json(ordrs, JsonRequestBehavior.AllowGet);
        }
        public FileResult AsyncAuthReportXls(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 = "";
            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]);
                userName = ci.Name;
                appConnData = GetAppConnData(companyId);
            }
            #endregion

            string[] parms = id.Split('|');
            DateTime from = DateTime.Parse(parms[0]);
            DateTime to = DateTime.Parse(parms[1]);

            MemoryStream stream = new MemoryStream(); // cleaned up automatically by MVC
            List<AuthReport> items = BizSalesOrderDraft.GetAuthReport(companyId, from, to).OrderBy(x => x.docDate).ToList();
            List<vmAuthReport> reportData = new List<vmAuthReport>();

            foreach (AuthReport item in items)
            {
                vmAuthReport line = new vmAuthReport()
                {
                    cardName = string.Format("{0} - {1}", item.cardCode, item.cardName),
                    authComments = item.authComments,
                    authDate = item.authDate != null ? ((DateTime)item.authDate).ToString("yyyy-MM-dd") : "",
                    authUser = item.authUser,
                    docDate = item.docDate.ToString("yyyy-MM-dd"),
                    draftComments = item.draftComments,
                    status = item.status,
                    totalDoc = item.totalDoc
                };

                if (item.docEntry != null)
                    line.docNum = backEnd.GetOrderNum((int)item.docEntry, appConnData).ToString();
                else
                    line.docNum = "";

                reportData.Add(line);
            }

            var serialicer = new XmlSerializer(typeof(List<vmAuthReport>));

            serialicer.Serialize(stream, reportData);
            stream.Position = 0;

            //ExportHelper.GetWinnersAsExcelMemoryStream(stream, winnerList, drawingId);

            string suggestedFilename = string.Format("Solicitudes_{0}_{1}.xls", id.Split('|')[0], id.Split('|')[1]);
            return File(stream, "application/vnd.ms-excel", suggestedFilename);

            //return File(stream, "application/vnd.ms-excel", "Pedidos.xls");
        }
        public JsonResult AsyncAuthorizationList(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 = "";
            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]);
                userName = ci.Name;
                appConnData = GetAppConnData(companyId);
            }
            #endregion

            string[] parms = id.Split('|');
            DateTime from = DateTime.Parse(parms[0]);
            DateTime to = DateTime.Parse(parms[1]);

            List<AuthorizationStatus> items = backEnd.GetAuthorizationStatusList(from, to, appConnData);

            var data =
                from c in items
                select new[] { "Pedido", c.createDate.ToString("yyyy-MM-dd"), c.createTime.ToString(), c.currStepName, c.docNum.ToString(), c.isDraft, c.ownerName, c.remarks };

            return Json(new
            {
                data = data
            }, JsonRequestBehavior.AllowGet);
        }
        public ActionResult Approve(string id, ORDR approvedOrder)
        {
            #region User identification
            IIdentity context = HttpContext.User.Identity;
            string userId = "";
            bool admin = false;
            bool customerCreator = false;
            bool purchaseOrderCreator = false;
            bool orderApprover = false;
            int companyId = 0;
            string userName = "";
            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('|');
                userId = 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]);
                userName = ci.Name;
                appConnData = GetAppConnData(companyId);
                orderApprover = int.Parse(userRole[7]) == 1 ? true : false;
            }
            #endregion

            string realId = HexSerialization.HexToString(id);
            ORDR ordr = BizSalesOrderDraft.GetSingle(int.Parse(realId));
            ordr.authStatus = true;
            ordr.authUser = userId;

            var myTimeZone = TimeZoneInfo.FindSystemTimeZoneById("SA Pacific Standard Time");
            ordr.authDate = TimeZoneInfo.ConvertTimeFromUtc(DateTime.UtcNow, myTimeZone);

            ordr.authComments = approvedOrder.authComments;

            BizSalesOrderDraft.Update(ordr);

            return RedirectToAction("Finish", new { id = id });
        }
        public ActionResult Create(ORDR order)
        {
            #region User identification
            IIdentity context = HttpContext.User.Identity;
            string userId = "";
            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('|');

                userId = 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

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

            if (!string.IsNullOrEmpty(defaulSeries))
            {
                List<DocumentSeries> docSeries = backEnd.GetDocumentSeriesList(SapDocumentType.SalesOrder, appConnData);
                int serie = docSeries.Where(x => x.seriesName == defaulSeries).Select(x => x.series).FirstOrDefault();

                if (serie != null)
                    order.series = serie;

            }

            order.uOrkUsuarioWeb = userId;
            order.idCompania = companyId;
            order.slpCode = slpCode;
            order.uLatitud = !string.IsNullOrEmpty(order.uLatitud) ? order.uLatitud : "4.690449";
            order.uLongitud = !string.IsNullOrEmpty(order.uLongitud) ? order.uLongitud : "-74.0515331";

            var myTimeZone = TimeZoneInfo.FindSystemTimeZoneById("SA Pacific Standard Time");
            order.docDate = order.docDate.AddHours(TimeZoneInfo.ConvertTimeFromUtc(DateTime.UtcNow, myTimeZone).Hour).AddMinutes(TimeZoneInfo.ConvertTimeFromUtc(DateTime.UtcNow, myTimeZone).Minute);

            int orderNum = BizSalesOrderDraft.Add(order);

            return RedirectToAction("AddLine", new { id = HexSerialization.StringToHex(orderNum.ToString()) });
        }
        public ActionResult Create()
        {
            #region User identification
            IIdentity context = HttpContext.User.Identity;
            string userId = "";
            bool admin = false;
            bool customerCreator = false;
            bool purchaseOrderCreator = false;
            int companyId = 0;
            string userName = "";
            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('|');
                userId = 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]);
                userName = ci.Name;
                appConnData = GetAppConnData(companyId);
            }
            #endregion

            List<CompanyParameter> companyParameters = BizCompanyParameter.GetList(companyId).ToList();
            string defaulSeries = companyParameters.Where(x => x.idParameter.Equals(8)).Select(x => x.value).FirstOrDefault();
            string ShowOnlyCustomerGroupNum = companyParameters.Where(x => x.idParameter.Equals(9)).Select(x => x.value).FirstOrDefault();

            ViewBag.defaulSeries = string.IsNullOrEmpty(defaulSeries) ? "" : defaulSeries;
            ViewBag.ShowOnlyCustomerGroupNum = string.IsNullOrEmpty(ShowOnlyCustomerGroupNum) ? "No" : ShowOnlyCustomerGroupNum;

            return View();
        }
        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 AuthorizationReport()
        {
            #region User identification
            IIdentity context = HttpContext.User.Identity;
            string userId = "";
            bool admin = false;
            bool customerCreator = false;
            bool purchaseOrderCreator = false;
            bool orderApprover = false;
            int companyId = 0;
            string userName = "";
            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('|');
                userId = 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]);
                userName = ci.Name;
                appConnData = GetAppConnData(companyId);
                orderApprover = int.Parse(userRole[7]) == 1 ? true : false;
            }
            #endregion

            List<ORDR> orders = new List<ORDR>();

            if (orderApprover)
            {
                orders = BizSalesOrderDraft.GetPendingList(companyId).ToList();
            }
            else
            {
                orders = BizSalesOrderDraft.GetPendingList(userId, companyId).ToList();
            }

            List<ORDRViewModel> listOrders = new List<ORDRViewModel>();

            //List<string> customers = orders.Select(x => x.cardCode).Distinct().ToList();
            //List<GenericBusinessPartner> customerList = backEnd.GetBusinessPartnersByIds(CardType.Customer, customers, appConnData);

            foreach (ORDR item in orders)
            {
                ORDRViewModel order = new ORDRViewModel()
                {
                    id = HexSerialization.StringToHex(item.id.ToString()),
                    cardCode = item.cardCode,
                    cardName = !string.IsNullOrEmpty(item.cardName) ? item.cardName : "",
                    docDate = item.docDate,
                    //comment = item.draftDM.Equals(true) ? "Dias de mora": "Sobrecupo"
                };
                if (item.draftDM == null)
                    item.draftDM = false;

                if (item.draftLC == null)
                    item.draftLC = false;

                if (item.draftPB == null)
                    item.draftPB = false;

                if ((bool)item.draftDM)
                    order.comment = "Dias de mora";

                if ((bool)item.draftLC)
                    if (string.IsNullOrEmpty(order.comment))
                        order.comment = "Sobrecupo";
                    else
                        order.comment += "-Sobrecupo";

                if ((bool)item.draftPB)
                    if (string.IsNullOrEmpty(order.comment))
                        order.comment = "Saldo a favor";
                    else
                        order.comment += "-Saldo a favor";

                order.status = item.authStatus;

                listOrders.Add(order);
            }

            ViewBag.orderApprover = orderApprover;

            return View(listOrders);
        }
        public JsonResult AsyncSupervisorDashboard(string id)
        {
            #region User identification
            IIdentity context = HttpContext.User.Identity;
            int companyId = 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('|');
                companyId = int.Parse(userRole[4]);
                appConnData = GetAppConnData(companyId);
            }
            #endregion

            string[] parameters = id.Split('|');

            IList<SalesResume> salesResume = BizSalesOrderDraft.GetSalesResumeList(DateTime.Parse(parameters[0]), DateTime.Parse(parameters[1]), companyId);

            var data =
                from c in salesResume
                select new[] { c.userName, c.salesCount.ToString(), c.salesValue.ToString("N", CultureInfo.CreateSpecificCulture("es-CO")) };

            return Json(new
            {
                data = data
            }, JsonRequestBehavior.AllowGet);
        }
        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();
        }
        public ActionResult AddLine(string id)
        {
            #region User identification
            IIdentity context = HttpContext.User.Identity;
            bool admin = false;
            bool customerCreator = false;
            bool purchaseOrderCreator = false;
            int companyId = 0;
            string userName = "";
            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('|');

                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]);
                userName = ci.Name;
                appConnData = GetAppConnData(companyId);
            }
            #endregion

            #region Company Parameters
            Company company = BizCompany.GetSingle(companyId);

            string realId = HexSerialization.HexToString(id);
            ORDR ordr = BizSalesOrderDraft.GetSingle(int.Parse(realId));

            BusinessPartner customer = backEnd.GetBusinessPartner(ordr.cardCode, appConnData);

            ViewBag.cardCode = ordr.cardCode;
            ViewBag.cardName = customer.cardName;
            ViewBag.docDate = ordr.docDate.ToString("yyyy-MM-dd");
            ViewBag.docDueDate = ordr.docDueDate.ToString("yyyy-MM-dd");
            ViewBag.taxDate = ordr.taxDate.ToString("yyyy-MM-dd");
            ViewBag.uCssComentarios = ordr.uCssComentarios;
            ViewBag.listNum = customer.listNum;
            ViewBag.orderId = realId;
            ViewBag.id = id;
            ViewBag.editaPrecio = company.editaPrecio;

            List<CompanyParameter> companyParameters = BizCompanyParameter.GetList(companyId).ToList();
            string AuthProcessMethod = companyParameters.Where(x => x.idParameter.Equals(1)).Select(x => x.value).FirstOrDefault();
            string EnabledAuthProcess = companyParameters.Where(x => x.idParameter.Equals(2)).Select(x => x.value).FirstOrDefault();
            string defaulSeries = companyParameters.Where(x => x.idParameter.Equals(8)).Select(x => x.value).FirstOrDefault();
            string ShowOnlyItemWarehouse = companyParameters.Where(x => x.idParameter.Equals(10)).Select(x => x.value).FirstOrDefault();
            string ShowOnlyItemTaxcode = companyParameters.Where(x => x.idParameter.Equals(11)).Select(x => x.value).FirstOrDefault();
            string ShowOcrCode = companyParameters.Where(x => x.idParameter.Equals(12)).Select(x => x.value).FirstOrDefault();
            string showEnvaseDevolutivo = companyParameters.Where(x => x.idParameter.Equals(14)).Select(x => x.value).FirstOrDefault();
            string MaxDelayDaysAuthorization = companyParameters.Where(x => x.idParameter.Equals(16)).Select(x => x.value).FirstOrDefault();
            string MaxOverdraftAuthorization = companyParameters.Where(x => x.idParameter.Equals(17)).Select(x => x.value).FirstOrDefault();
            string AuthOverdraftMode = companyParameters.Where(x => x.idParameter.Equals(18)).Select(x => x.value).FirstOrDefault();

            ViewBag.defaulSeries = string.IsNullOrEmpty(defaulSeries) ? "" : defaulSeries;

            if (ShowOnlyItemWarehouse == "Si")
                ViewBag.ShowOnlyItemWarehouse = true;
            else
                ViewBag.ShowOnlyItemWarehouse = false;

            if (ShowOnlyItemTaxcode == "Si")
                ViewBag.ShowOnlyItemTaxcode = true;
            else
                ViewBag.ShowOnlyItemTaxcode = false;

            if (ShowOcrCode == "Si")
                ViewBag.ShowOcrCode = true;
            else
                ViewBag.ShowOcrCode = false;

            if (showEnvaseDevolutivo == "Si")
                ViewBag.showEnvaseDevolutivo = true;
            else
                ViewBag.showEnvaseDevolutivo = false;
            #endregion

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

            decimal totalOrder = 0;
            decimal totalIva = 0;

            foreach (RDR1 item in items)
            {
                totalOrder += item.quantity * item.price;
                totalIva += ((item.quantity * item.price) * (item.taxRate == null ? 0 : (decimal)item.taxRate)) / 100;
            }

            #region Validate Credit Rules
            //bool creditStatus = backEnd.GetBusinessPartnerCreditStatus(ordr.cardCode, appConnData);

            ViewBag.EnabledAuthProcess = EnabledAuthProcess;
            ViewBag.delayCredits = false;
            ViewBag.overStepCreditLine = false;
            ViewBag.positiveBalance = false;

            if (EnabledAuthProcess == "Si")
            {
                List<PaymentAge> paymetsAges = backEnd.GetPaymentAgeList(ordr.cardCode, appConnData);

                #region Days delay credit
                if (AuthProcessMethod == "DM") // dias de mora
                {
                    #region delay days validation (QCA)
                    int delayDays = 0;

                    if (int.TryParse(MaxDelayDaysAuthorization, out delayDays))
                    {
                        if (paymetsAges.Where(x => x.pendingToPay > 0 && x.pendingTime > delayDays).Count() > 0)
                            ViewBag.delayCredits = true;
                    }
                    #endregion
                }
                else if (AuthProcessMethod == "FP") // formas de pago del cliente
                {
                    #region delay days from payment terms validation (Colorisa)
                    if (customer.groupNum != -1)
                    {
                        List<PaymentTerm> paymentTermList = backEnd.GetPaymentTermList(appConnData);
                        PaymentTerm customerPaymentTerm = paymentTermList.Where(x => x.groupNum == customer.groupNum).FirstOrDefault();
                        //int oldestOpenInvoice = backEnd.GetOldestOpenInvoice(ordr.cardCode, appConnData);

                        double oldestOpenInvoice = paymetsAges.Where(x => x.pendingToPay > 0).Max(x => x.pendingTime);
                        string strDocDate = paymetsAges.Where(x => x.pendingTime == oldestOpenInvoice).Select(x => x.docDate).First();

                        DateTime docDate = DateTime.Parse(strDocDate);

                        string[] DelayDaysAuthorization = MaxDelayDaysAuthorization.Split('|');
                        int DelayDaysForAuthorization = 0;

                        foreach (string item in DelayDaysAuthorization)
                        {
                            string[] authParam = item.Split('-');

                            if (authParam.Length == 2)
                                if (customerPaymentTerm.extraDays > 0)
                                {
                                    if (customerPaymentTerm.extraDays == int.Parse(authParam[0]))
                                        DelayDaysForAuthorization = int.Parse(authParam[1]);
                                }
                                else if (customerPaymentTerm.extraMonth > 0)
                                    if (customerPaymentTerm.extraMonth * 30 == int.Parse(authParam[0]))
                                        DelayDaysForAuthorization = int.Parse(authParam[1]);
                        }

                        if (DelayDaysForAuthorization > 0)
                        {
                            if (oldestOpenInvoice > 0)
                                if (docDate.AddDays((double)DelayDaysForAuthorization) < docDate.AddDays(oldestOpenInvoice))
                                    ViewBag.delayCredits = true;
                        }
                    }

                    #endregion

                }

                #endregion

                #region Positive balance
                if (paymetsAges.Where(x => x.pendingToPay < 0).Count() > 0)
                    ViewBag.positiveBalance = true;
                #endregion

                #region Overstep credits
                if (MaxOverdraftAuthorization != null)
                {
                    double balance = (double)customer.balance;
                    double dNotesBal = (double)customer.dNotesBal;
                    double ordersBal = (double)customer.ordersBal;
                    double avalaible = (double)customer.creditLine - (balance + dNotesBal + ordersBal);
                    double maxOverdraftRate = double.Parse(MaxOverdraftAuthorization);
                    totalOrder = totalOrder + totalIva;

                    if (AuthOverdraftMode == "Si")// overdraft by %
                    {
                        if ((double)totalOrder >= (avalaible + (avalaible * (maxOverdraftRate / 100))))
                            ViewBag.overStepCreditLine = true;
                    }
                    else // overdarft by value
                    {
                        if ((double)totalOrder >= (avalaible + maxOverdraftRate))
                            ViewBag.overStepCreditLine = true;
                    }
                }
                #endregion
            }
            #endregion

            return View();
        }
        public ActionResult Approve(string id)
        {
            #region User identification
            IIdentity context = HttpContext.User.Identity;
            string userId = "";
            bool admin = false;
            bool customerCreator = false;
            bool purchaseOrderCreator = false;
            bool orderApprover = false;
            int companyId = 0;
            string userName = "";
            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('|');
                userId = 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]);
                userName = ci.Name;
                appConnData = GetAppConnData(companyId);
                orderApprover = int.Parse(userRole[7]) == 1 ? true : false;
            }
            #endregion

            string realId = HexSerialization.HexToString(id);
            ORDR ordr = BizSalesOrderDraft.GetSingle(int.Parse(realId));

            return View(ordr);
        }
        public ActionResult Delete(int 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 = "";
            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]);
                userName = ci.Name;
                appConnData = GetAppConnData(companyId);
            }
            #endregion

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

                if (batchMarketingTransactions == "No")
                {
                    backEnd.CancelOrder(id, appConnData);
                    ViewBag.colorMensaje = "success";
                    ViewBag.mensaje = "Cancelación de pedidos";
                    ViewBag.docEntry = string.Format("el pedido fue cancelado");
                }
                else
                {
                    BizProcessQueue.Add(new ProcessQueue()
                    {
                        actionType = "C",
                        idTarget = id,
                        addedToQueue = DateTime.Now,
                        idCompany = companyId
                    });

                    ViewBag.colorMensaje = "success";
                    ViewBag.mensaje = "Registro guardado";
                    ViewBag.docEntry = "Su solicitud de cancalación ha sido guardada y en breve será procesada.";
                }

            }
            catch (FaultException<DataAccessFault> ex)
            {
                ViewBag.colorMensaje = "danger";
                ViewBag.mensaje = "Cancelación de pedidos";
                ViewBag.docEntry = string.Format(" No se pudo cancelar el pedido. Codigo {0} error:{1} {2}", ex.Code, ex.Detail.Description, ex.Message);
            }

            return View();
        }
        public JsonResult AsyncAddressList(string id)
        {
            #region User identification
            IIdentity context = HttpContext.User.Identity;
            bool admin = false;
            bool customerCreator = false;
            bool purchaseOrderCreator = false;
            int companyId = 0;
            string userName = "";
            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('|');

                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]);
                userName = ci.Name;
                appConnData = GetAppConnData(companyId);
            }
            #endregion

            string[] par = id.Split('|');

            List<BusinessPartnerAddress> addresses = backEnd.GetAddressList(par[0], par[1] == "S" ? AddressType.ShipTo : AddressType.BillTo, appConnData);

            return Json(addresses, JsonRequestBehavior.AllowGet);
        }
        public ActionResult Details(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 = "";
            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]);
                userName = ci.Name;
                appConnData = GetAppConnData(companyId);
            }
            #endregion

            LightMarketingDocument order = backEnd.GetSingleOrder(id, appConnData);

            double total = 0;
            foreach (LightMarketingDocumentLine item in order.lines)
                total += item.quantity * item.price;

            CultureInfo culture = new CultureInfo("es-co");
            ViewBag.total = total.ToString("N", culture);
            return View(order);
        }
        public JsonResult AsyncAuthReport(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 = "";
            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]);
                userName = ci.Name;
                appConnData = GetAppConnData(companyId);
            }
            #endregion

            string[] parms = id.Split('|');
            DateTime from = DateTime.Parse(parms[0]);
            DateTime to = DateTime.Parse(parms[1]);

            List<AuthReport> items = BizSalesOrderDraft.GetAuthReport(companyId, from, to).OrderBy(x => x.docDate).ToList();

            foreach (AuthReport item in items)
            {
                if (item.docEntry != null)
                    item.docNum = backEnd.GetOrderNum((int)item.docEntry, appConnData).ToString();
                else
                    item.docNum = "";
            }

            var data =
                from c in items
                select new[] { string.Format("{0} - {1}", c.cardCode, c.cardName), c.docNum, c.docDate.ToString("yyyy-MM-dd hh:mm"), c.totalDoc.ToString("N", CultureInfo.CreateSpecificCulture("es-CO")),
                    c.draftComments, c.status, c.authUser, c.authDate != null ? ((DateTime)c.authDate).ToString("yyyy-MM-dd hh:mm") : "", c.authComments };

            return Json(new
            {
                data = data
            }, 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 JsonResult AsyncCustomersList()
        {
            #region User identification
            IIdentity context = HttpContext.User.Identity;
            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('|');

                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

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

            List<GenericBusinessPartner> customers = new List<GenericBusinessPartner>();

            if (ShowOnlyAsociateCustomers == "Si")
                customers = backEnd.GetBusinessPartnersBySalesPerson(CardType.Customer, slpCode.ToString(), appConnData);
            else
                customers = backEnd.GetBusinessPartners(CardType.Customer, appConnData);

            var data = from c in customers select new[] { c.cardCode, c.cardName, string.Empty };
            return Json(new
            {
                data = data
            }, JsonRequestBehavior.AllowGet);
        }
        public ActionResult Index()
        {
            #region User identification
            IIdentity context = HttpContext.User.Identity;
            string userId = "";
            bool admin = false;
            bool customerCreator = false;
            bool purchaseOrderCreator = false;
            int companyId = 0;
            string userName = "";
            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('|');
                userId = 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]);
                userName = ci.Name;
                appConnData = GetAppConnData(companyId);
            }
            #endregion

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

            List<ORDR> orders = BizSalesOrderDraft.GetPendingList(userId, companyId, int.Parse(MaxOlderOrderDays))
                //.Where(x => x.draftDM.Equals(false) && x.draftLC.Equals(false))
                .ToList();

            List<ORDRViewModel> listOrders = new List<ORDRViewModel>();
            List<ProcessQueue> pendingByProcess = BizProcessQueue.GetList(companyId, int.Parse(MaxOlderOrderDays)).ToList();
            vmOrderQueue model = new vmOrderQueue();

            foreach (ORDR item in orders)
            {
                if (batchMarketingTransactions == "Si")
                {
                    if (pendingByProcess.Where(x => x.actionType == "A" && x.idTarget.Equals(item.id)).Count() == 0)
                    {
                        ORDRViewModel order = new ORDRViewModel()
                        {
                            id = HexSerialization.StringToHex(item.id.ToString()),
                            cardCode = item.cardCode,
                            cardName = !string.IsNullOrEmpty(item.cardName) ? item.cardName : "",
                            docDate = item.docDate,
                            comment = item.docEntry == null ? "No finalizada" : "Enviada a SAP correctamente",
                            editable = item.docEntry == null ? true : false,
                        };

                        listOrders.Add(order);
                        //model.openOrders.Add(order);
                    }
                    else
                    {
                        ProcessQueue orderProcess = pendingByProcess.Where(x => x.actionType == "A" && x.idTarget.Equals(item.id)).FirstOrDefault();
                        ORDRViewModel order = new ORDRViewModel()
                        {
                            id = HexSerialization.StringToHex(item.id.ToString()),
                            cardCode = item.cardCode,
                            cardName = !string.IsNullOrEmpty(item.cardName) ? item.cardName : "",
                            docDate = item.docDate,
                            editable = false
                        };

                        if (orderProcess.processed == null)
                            order.comment = "En cola";
                        else
                        {
                            if (orderProcess.logMessage.Substring(0, 5) == "Error")
                                order.redo = true;
                            else
                                order.redo = false;

                            order.comment = string.Format("{0}", orderProcess.logMessage);
                        }
                        listOrders.Add(order);
                    }
                }
                else
                {
                    ORDRViewModel order = new ORDRViewModel()
                    {
                        id = HexSerialization.StringToHex(item.id.ToString()),
                        cardCode = item.cardCode,
                        cardName = !string.IsNullOrEmpty(item.cardName) ? item.cardName : "",
                        docDate = item.docDate,
                        comment = item.docEntry == null ? "No finalizada" : "Enviada a SAP correctamente",
                        editable = item.docEntry == null ? true : false
                    };

                    listOrders.Add(order);
                }

            }

            return View(listOrders.OrderByDescending(x => x.docDate).ToList());
        }
        public JsonResult AsyncGetItemPrice(string id)
        {
            #region User identification
            IIdentity context = HttpContext.User.Identity;
            bool admin = false;
            bool customerCreator = false;
            bool purchaseOrderCreator = false;
            int companyId = 0;
            string userName = "";
            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('|');

                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]);
                userName = ci.Name;
                appConnData = GetAppConnData(companyId);
            }
            #endregion

            double price = backEnd.GetItemPrice(id.Split('|')[0], int.Parse(id.Split('|')[1]), appConnData);
            return Json(price.ToString(), JsonRequestBehavior.AllowGet);
        }
        public ActionResult TryAgain(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();

            ProcessQueue process = BizProcessQueue.GetSingle(realId);

            process.processed = null;
            process.logMessage = null;
            process.sucess = null;

            BizProcessQueue.Update(process);

            return RedirectToAction("index");
        }
        public JsonResult AsyncSearchOrders(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 slpCode = "";
            string userName = "";
            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 = userRole[5];
                userName = ci.Name;
                appConnData = GetAppConnData(companyId);
            }
            #endregion

            string[] parameters = id.Split('|');

            DateTime from = DateTime.Parse(parameters[0]), to = DateTime.Parse(parameters[1]);
            string cardCode = parameters[2];

            List<LightMarketingDocument> ordrs = new List<LightMarketingDocument>();

            if (string.IsNullOrEmpty(cardCode))
                ordrs = backEnd.ListSaleOrdersFiltered(from, to, 'S', slpCode, appConnData);
            else
                ordrs = backEnd.ListSaleOrders(from, to, cardCode, appConnData);

            var data = from c in ordrs select new[] { c.docNum.ToString(), c.cardName, c.docDate.ToString("yyyy-MM-dd"), c.docDueDate.ToString("yyyy-MM-dd"), c.docStatus };

            return Json(new
            {
                data = data
            }, JsonRequestBehavior.AllowGet);
        }
        public ActionResult ViewOrder(string id)
        {
            #region User identification
            IIdentity context = HttpContext.User.Identity;
            string userId = "";
            bool admin = false;
            bool customerCreator = false;
            bool purchaseOrderCreator = false;
            bool orderApprover = false;
            int companyId = 0;
            string userName = "";
            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('|');
                userId = 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]);
                userName = ci.Name;
                appConnData = GetAppConnData(companyId);
                orderApprover = int.Parse(userRole[7]) == 1 ? true : false;
            }
            #endregion

            string realId = HexSerialization.HexToString(id);

            #region Order header
            ORDR ordr = BizSalesOrderDraft.GetSingle(int.Parse(realId));

            BusinessPartner customer = backEnd.GetBusinessPartner(ordr.cardCode, appConnData);

            ViewBag.cardCode = ordr.cardCode;
            ViewBag.cardName = customer.cardName;
            ViewBag.docDate = ordr.docDate.ToString("yyyy-MM-dd");
            ViewBag.docDueDate = ordr.docDueDate.ToString("yyyy-MM-dd");
            ViewBag.taxDate = ordr.taxDate.ToString("yyyy-MM-dd");
            ViewBag.uCssComentarios = ordr.uCssComentarios;
            ViewBag.listNum = customer.listNum;
            ViewBag.orderId = realId;
            ViewBag.id = id;
            ViewBag.enabled = ordr.authStatus == null ? true : ((bool)ordr.authStatus ? false : true);
            ViewBag.orderApprover = orderApprover;
            ViewBag.draftComments = ordr.draftComments;
            ViewBag.authComments = ordr.authComments;
            #endregion

            #region order detail
            List<RDR1> items = BizSalesOrderDraft.GetLinesList(int.Parse(realId)).ToList();

            decimal totalOrder = 0;
            decimal totalIva = 0;

            foreach (RDR1 item in items)
            {
                totalOrder += item.quantity * item.price;
                totalIva += ((item.quantity * item.price) * (item.taxRate == null ? 0 : (decimal)item.taxRate)) / 100;
            }

            ViewBag.totalOrder = totalOrder;
            ViewBag.totalIva = totalIva;
            ViewBag.total = totalIva + totalOrder;
            ViewBag.id = id;
            #endregion

            return View(items);
        }
        public ActionResult AddLine(string id, RDR1 line)
        {
            #region User identification
            IIdentity context = HttpContext.User.Identity;
            bool admin = false;
            bool customerCreator = false;
            bool purchaseOrderCreator = false;
            int companyId = 0;
            string userName = "";
            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('|');

                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]);
                userName = ci.Name;
                appConnData = GetAppConnData(companyId);
            }
            #endregion

            List<CompanyParameter> companyParameters = BizCompanyParameter.GetList(companyId).ToList();

            try
            {
                string realId = HexSerialization.HexToString(id);
                line.orderId = int.Parse(realId);

                #region parameters management
                string EnabledAuthProcess = companyParameters.Where(x => x.idParameter.Equals(2)).Select(x => x.value).FirstOrDefault();
                string ShowOnlyItemWarehouse = companyParameters.Where(x => x.idParameter.Equals(10)).Select(x => x.value).FirstOrDefault();
                string ShowOnlyItemTaxcode = companyParameters.Where(x => x.idParameter.Equals(11)).Select(x => x.value).FirstOrDefault();
                string ShowOcrCode = companyParameters.Where(x => x.idParameter.Equals(12)).Select(x => x.value).FirstOrDefault();
                string DefaultOcrCode = companyParameters.Where(x => x.idParameter.Equals(13)).Select(x => x.value).FirstOrDefault();
                string showEnvaseDevolutivo = companyParameters.Where(x => x.idParameter.Equals(14)).Select(x => x.value).FirstOrDefault();
                string UseOnlyItemEnvaseDevolutivo = companyParameters.Where(x => x.idParameter.Equals(15)).Select(x => x.value).FirstOrDefault();

                if (line.quantity == 0)
                    throw new Exception("La cantidad no puede ser cero");

                Item item = backEnd.GetItem(line.itemCode, appConnData);

                if (ShowOnlyItemWarehouse == "Si")
                {
                    if (!string.IsNullOrEmpty(item.DefaultWarehouse))
                        line.whsCode = item.DefaultWarehouse;
                    else
                        throw new Exception("No se puede pedir el articulo porque no tiene asociada una bodega");

                }

                if (ShowOnlyItemTaxcode == "Si")
                {
                    if (!string.IsNullOrEmpty(item.TaxCodeAR))
                    {
                        SalesTaxCode tax = backEnd.GetSingleTaxCode(item.TaxCodeAR, appConnData);

                        line.taxCode = item.TaxCodeAR;
                        line.taxRate = (decimal)tax.rate;
                    }
                    else
                        throw new Exception("No se puede pedir el articulo porque no tiene codigo de impuestos");
                }

                if (ShowOcrCode == "No")
                {
                    if (!string.IsNullOrEmpty(DefaultOcrCode))
                    {
                        List<SapDistributionRule> sapDistributionRulesList = backEnd.GetDistributionRulesList(appConnData);

                        string ocrCode = sapDistributionRulesList.Where(x => x.prcName == DefaultOcrCode).Select(x => x.prcCode).FirstOrDefault();

                        if (!string.IsNullOrEmpty(ocrCode))
                            line.ocrCode = ocrCode;
                        else
                            throw new Exception("No se puede pedir el articulo porque no se ha parametrizado una norma de reparto");
                    }
                    else
                        throw new Exception("No se puede pedir el articulo porque no se ha parametrizado una norma de reparto");
                }

                if (!string.IsNullOrEmpty(UseOnlyItemEnvaseDevolutivo))
                {
                    if (UseOnlyItemEnvaseDevolutivo == "Si")
                        line.uCssEnvaseDevol = item.userDefinedFields[0].value;
                    else
                        if (showEnvaseDevolutivo == "No")
                            line.uCssEnvaseDevol = "NO";
                }

                #endregion

                BizSalesOrderDraft.AddLine(line);
                ViewBag.orderId = id;
            }
            #region Exception management
            catch (DbUpdateException e)
            {
                #region Model management
                Company company = BizCompany.GetSingle(companyId);

                string realId = HexSerialization.HexToString(id);
                ORDR ordr = BizSalesOrderDraft.GetSingle(int.Parse(realId));

                BusinessPartner customer = backEnd.GetBusinessPartner(ordr.cardCode, appConnData);

                ViewBag.serie = backEnd.GetDocumentSeriesSingle(ordr.series, appConnData).seriesName;
                ViewBag.cardCode = ordr.cardCode;
                ViewBag.cardName = customer.cardName;
                ViewBag.docDate = ordr.docDate.ToString("yyyy-MM-dd");
                ViewBag.docDueDate = ordr.docDueDate.ToString("yyyy-MM-dd");
                ViewBag.taxDate = ordr.taxDate.ToString("yyyy-MM-dd");
                ViewBag.uCssComentarios = ordr.uCssComentarios;
                ViewBag.listNum = customer.listNum;
                ViewBag.orderId = realId;
                ViewBag.id = id;
                ViewBag.editaPrecio = company.editaPrecio;

                string defaulSeries = companyParameters.Where(x => x.idParameter.Equals(8)).Select(x => x.value).FirstOrDefault();

                ViewBag.defaulSeries = string.IsNullOrEmpty(defaulSeries) ? "" : defaulSeries;
                #endregion

                SqlException s = e.InnerException.InnerException as SqlException;
                if (s != null && s.Number == 2627)
                {
                    ViewBag.message = string.Format("Este pedido ya tiene registrado este Item en la bodega seleccionada.");
                }
                else
                {
                    ViewBag.message = string.Format("Se presentó un error al intentar añadir el item al pedido. - {0}", s.Message);
                }

                return View(line);
            }

            catch (SqlException ex)
            {
                #region Model management
                Company company = BizCompany.GetSingle(companyId);

                string realId = HexSerialization.HexToString(id);
                ORDR ordr = BizSalesOrderDraft.GetSingle(int.Parse(realId));

                BusinessPartner customer = backEnd.GetBusinessPartner(ordr.cardCode, appConnData);

                ViewBag.serie = backEnd.GetDocumentSeriesSingle(ordr.series, appConnData).seriesName;
                ViewBag.cardCode = ordr.cardCode;
                ViewBag.cardName = customer.cardName;
                ViewBag.docDate = ordr.docDate.ToString("yyyy-MM-dd");
                ViewBag.docDueDate = ordr.docDueDate.ToString("yyyy-MM-dd");
                ViewBag.taxDate = ordr.taxDate.ToString("yyyy-MM-dd");
                ViewBag.uCssComentarios = ordr.uCssComentarios;
                ViewBag.listNum = customer.listNum;
                ViewBag.orderId = realId;
                ViewBag.id = id;
                ViewBag.editaPrecio = company.editaPrecio;

                string defaulSeries = companyParameters.Where(x => x.idParameter.Equals(8)).Select(x => x.value).FirstOrDefault();

                ViewBag.defaulSeries = string.IsNullOrEmpty(defaulSeries) ? "" : defaulSeries;
                #endregion

                if (ex.Number == 2627)
                {
                    ViewBag.message = string.Format("Este pedido ya tiene registrado este Item en la bodega seleccionada.");
                }
                else
                {
                    ViewBag.message = string.Format("Se presentó un error al intentar añadir el item al pedido. - {0}", ex.Message);
                }

                return View(line);
            }
            catch (Exception ex)
            {
                #region Model management
                Company company = BizCompany.GetSingle(companyId);

                string realId = HexSerialization.HexToString(id);
                ORDR ordr = BizSalesOrderDraft.GetSingle(int.Parse(realId));

                BusinessPartner customer = backEnd.GetBusinessPartner(ordr.cardCode, appConnData);

                ViewBag.serie = backEnd.GetDocumentSeriesSingle(ordr.series, appConnData).seriesName;
                ViewBag.cardCode = ordr.cardCode;
                ViewBag.cardName = customer.cardName;
                ViewBag.docDate = ordr.docDate.ToString("yyyy-MM-dd");
                ViewBag.docDueDate = ordr.docDueDate.ToString("yyyy-MM-dd");
                ViewBag.taxDate = ordr.taxDate.ToString("yyyy-MM-dd");
                ViewBag.uCssComentarios = ordr.uCssComentarios;
                ViewBag.listNum = customer.listNum;
                ViewBag.orderId = realId;
                ViewBag.id = id;
                ViewBag.editaPrecio = company.editaPrecio;

                string defaulSeries = companyParameters.Where(x => x.idParameter.Equals(8)).Select(x => x.value).FirstOrDefault();

                ViewBag.defaulSeries = string.IsNullOrEmpty(defaulSeries) ? "" : defaulSeries;
                #endregion

                ViewBag.message = string.Format("Se presentó un error al intentar añadir el item al pedido. - {0}", ex.Message);
                return View(line);
            }
            #endregion

            return RedirectToAction("AddLine", new { id = id });
        }
        public JsonResult AsyncListPricesList(string id)
        {
            #region User identification
            IIdentity context = HttpContext.User.Identity;
            bool admin = false;
            bool customerCreator = false;
            bool purchaseOrderCreator = false;
            int companyId = 0;
            string userName = "";
            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('|');

                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]);
                userName = ci.Name;
                appConnData = GetAppConnData(companyId);
            }
            #endregion

            string[] param = id.Split('|');
            DateTime from = DateTime.Parse(param[0]);
            DateTime to = DateTime.Parse(param[1]);
            string cardCode = param[2];

            List<ItemPrice> prices = backEnd.GetBusinessPartnerLastPricesList(cardCode, from, to, appConnData);

            var data = from c in prices select new[] { c.docDate, c.itemCode, c.itemName, c.quantity.ToString(), c.price.ToString() };
            return Json(new
            {
                data = data
            }, JsonRequestBehavior.AllowGet);
        }