public ActionResult Resumen(string credito)
        {
            int credit = 0;
            if (credito.Equals("true"))
                credit = 1;
            int IdCliente = int.Parse(Request.Form["IdCliente"]);

            int IdSucursal = int.Parse(Request.Form["IdSucursal"]);

            var carrito = CarritoDeCompras.GetCarrito(this.HttpContext);

            var viewModel = new CarritoDeComprasViewModel
            {
                ElementosCarrito = carrito.GetElementos(),
                TotalCarrito = carrito.GetTotal()
            };

            if (viewModel.ElementosCarrito.Count == 0)
                return RedirectToAction("Error", new { Error = "No hay elementos en el carrito" });

            Cliente ClienteVenta = db.Clientes.Find(IdCliente);
            if (ClienteVenta == null)
                return RedirectToAction("Error", new { Error = "No se Puede Identificar al Cliente" });

            ViewBag.Cliente = ClienteVenta;

            //Creamos La venta
            var venta = new Venta();

            TryUpdateModel(venta);

            try
            {
                venta.IdSucursal = IdSucursal;
                venta.IdCliente = IdCliente;
                venta.FechaVenta = DateTime.Now;
                venta.FechaTipoCambio = DateTime.Now;

                //Guardamos la venta
                db.Ventas.Add(venta);
                db.SaveChanges();

                //Procesamos la venta
                CrearVenta(carrito, venta, IdCliente, credit, IdSucursal);
                //Generamos la factura Electrónica
                List<ProductoVenta> Productos = db.ProductosVenta.Where(pv => pv.VentaId == venta.ID).ToList();

                Sucursal Suc = db.Sucursales.Find(IdSucursal);

                string XML = EnviarWebRequest(ClienteVenta, venta, Productos, Suc);

               }
            catch
            {
                //Invalido
                /*
                 * Vamos a proceder a deshacer la venta, regresando los productos al inventario.
                 * */

                string Err;
                if (venta.CancelarVenta(IdSucursal) == 1)
                {
                     Err = "No se Ha realizado la venta, ocurrio un error. Intentar de nuevo.";
                }
                else
                     Err = "No se Ha realizado la venta, ocurrio un error, pero es posible que parte de la venta este registrada. Intentar de nuevo.";

                return RedirectToAction("Error", new { Error = Err });
            }

            return RedirectToAction("Ok", new { folio = venta.ClaveCFD, idCliente = IdCliente });
        }
        /*
         * Aqui se muestra el total de la venta al usuario y se dala opción para mandar a crtedito si es el cliente sugeto a credito
         * Al aceptar se procesa la venta y se guarda en la base de datos
         */
        public ActionResult Resumen(int IdClient, int IdSucursal)
        {
            var carrito = CarritoDeCompras.GetCarrito(this.HttpContext);
            var viewModel = new CarritoDeComprasViewModel
            {
                ElementosCarrito = carrito.GetElementos(),
                TotalCarrito = carrito.GetTotal()
            };

            Cliente ClienteVenta = db.Clientes.Find(IdClient);

            if (ClienteVenta == null)
                return RedirectToAction("Error", new { Error = "No se Puede Identificar al Cliente" });

            ViewBag.Cliente = ClienteVenta;
            ViewBag.IdSucursal = IdSucursal;
            //Aqui checamos si el cliente es sujeto a credito

            //1.- Ver si tiene abierta una cuenta de credito
            if (ClienteVenta.SugetoCredito(viewModel.TotalCarrito*1.16M))
                ViewBag.SugetoCredito = 1;
            else
                ViewBag.SugetoCredito = 0;

            return View(viewModel);
        }
        //
        // POST: /CarritoDeCompras/
        // Se encarga de setear el cliente como variable de sesion para proseguir con la venta
        // GET: /CarritoDeCompras/Confirmar/
        //        
        public ActionResult Confirmar(int IdCliente, int IdSucursal)
        {
            var carrito = CarritoDeCompras.GetCarrito(this.HttpContext);
            Cliente Cliente = db.Clientes.Find(IdCliente);

            ViewBag.Cliente = Cliente;
            ViewBag.IdSucursal = IdSucursal;

            var viewModel = new CarritoDeComprasViewModel
            {
                ElementosCarrito = carrito.GetElementos(),
                TotalCarrito = carrito.GetTotal(),
                cliente = db.Clientes.Find(IdCliente)
            };

            if (viewModel.ElementosCarrito.Count == 0)
                return RedirectToAction("Error", new { Error = "No hay elementos en el carrito" });

            /*
             * Aqui Verificamos el precio de venta que se maneja para cada producto
             * al cliente al que se le realizará la venta, en caso de no haberle vendido
             * antes esta producto se pondrá por default el precio de lista, en caso contrario
             * se pondrá por default el último precio de venta
             */
            int i;
            for( i = 0; i < viewModel.ElementosCarrito.Count(); i++)
            {

                /*
                 * Lógica del precio:
                 *  Recuperar las ventas que se han hecho al cliente del mismo producto y sacar la más reciente
                 *  Setear el Precio de venta con el ultimo precio dado!
                 */

                //Sacamos todas las ventas que se han hecho
                var items = from prodVen in db.ProductosVenta.Include("Venta")
                            where prodVen.Venta.IdCliente == IdCliente
                            orderby prodVen.Venta.FechaVenta descending
                            select prodVen;

                decimal precioVenta = viewModel.ElementosCarrito[i].Producto.PrecioLista;
                foreach (var item in items)
                {
                    if (item.Venta.IdCliente == IdCliente && item.ProductoId == viewModel.ElementosCarrito[i].ProductoId)
                    {
                        precioVenta = item.PrecioVenta;
                        break;
                    }

                }

                viewModel.ElementosCarrito[i].PrecioVenta = precioVenta;

                viewModel.ElementosCarrito[i].Existencia = viewModel.ElementosCarrito[i].GetCantidad(IdSucursal);
            }

            ViewBag.IdCliente = IdCliente;

            //return RedirectToAction("Resumen", new { IdClient = IdCliente });
            return View(viewModel);
        }
        //
        // GET: /CarritoDeCompras/
        public ActionResult Index()
        {
            var carrito = CarritoDeCompras.GetCarrito(this.HttpContext);
            ViewBag.Clientes = db.Clientes.OrderBy(c => c.NombreCliente).ToList();
            var Sucursales = db.Sucursales.Where(s => s.Usuarios.Any(u => u.Username == HttpContext.User.Identity.Name));
            ViewBag.Sucursales = Sucursales;

                var viewModel = new CarritoDeComprasViewModel
                {
                    ElementosCarrito = carrito.GetElementos(),
                    TotalCarrito = 0
                };

                ViewBag.Elementos = viewModel.ElementosCarrito.Count();

            return View(viewModel);
        }
        public ActionResult Confirmar(int IdClient)
        {
            int IdCliente = IdClient;

            int IdSucursal = int.Parse(Request.Form["IdSucursal"]);

            //int IdCliente = (int) ViewData["IdCliente"];
            var carrito = CarritoDeCompras.GetCarrito(this.HttpContext);
            ViewBag.Cliente = db.Clientes.Find(IdCliente);
            /*Recuperamos el Carrito de compras*/
            var viewModel = new CarritoDeComprasViewModel
            {
                ElementosCarrito = carrito.GetElementos(),
                TotalCarrito = carrito.GetTotal(),
                cliente = db.Clientes.Find(IdCliente)
            };

            if (viewModel.ElementosCarrito.Count == 0)
                return RedirectToAction("Error", new { Error = "No hay elementos en el carrito" });

            /*
             * Actualizamos cantidades y precios y Total del carrito
             */

            int i;
            string campoCantidad;
            string campoPrecio;
            viewModel.TotalCarrito = 0;
            for (i = 0; i < viewModel.ElementosCarrito.Count(); i++)
            {
                int IdP = viewModel.ElementosCarrito[i].ProductoId;
                var ElementoActual = db.Carritos.SingleOrDefault(
                                     c => c.CartId == carrito.IdCarritoDeCompras
                                         && c.ProductoId == IdP);
               campoCantidad = "Cantidad-" + viewModel.ElementosCarrito[i].ProductoId;
               campoPrecio = "Precio-" + viewModel.ElementosCarrito[i].ProductoId;
               if (Request.Form[campoCantidad].Equals(""))
                   return RedirectToAction("Error", new { Error = "No se ingreso información util para la cantidad, deben ser numeros decimales o enteros" });

               if (Request.Form[campoPrecio].Equals(""))
                   return RedirectToAction("Error", new { Error = "No se ingreso información util para los Precios, deben ser numeros decimales o enteros" });

               decimal Prec = decimal.Parse(Request.Form[campoPrecio]);
               viewModel.ElementosCarrito[i].PrecioVenta = (decimal)Prec;

               ElementoActual.PrecioVenta = (decimal)Prec;

                //No podemos vender más de lo que existe en el inventario, entonces regresamos con error
               if (decimal.Parse(Request.Form[campoCantidad]) > viewModel.ElementosCarrito[i].GetCantidad(IdSucursal))
               {
                   string Err = "No se puede vender: " + decimal.Parse(Request.Form[campoCantidad]) + "de " + viewModel.ElementosCarrito[i].Producto.Nombre + ", no hay suficientes en el inventario. Solo tenemos: " + viewModel.ElementosCarrito[i].Existencia;
                   return RedirectToAction("Error", new { Error = Err });
               }
               viewModel.ElementosCarrito[i].Count = decimal.Parse(Request.Form[campoCantidad]);
               ElementoActual.Count = decimal.Parse(Request.Form[campoCantidad]);
               viewModel.TotalCarrito += (viewModel.ElementosCarrito[i].PrecioVenta * viewModel.ElementosCarrito[i].Count);

            }

            try
            {
                db.SaveChanges();
            }
            catch
            {
                    return RedirectToAction("Error", new { Error = "No se pudo actualizar la información de los elementos" });
            }

            return RedirectToAction("Resumen", new { IdClient = IdCliente, IdSucursal = IdSucursal });
        }