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 }); }