public string PostPreventa(string cliente, int vendedor, [FromBody] ListaPreventas listaPreventas) { var preventa = new Preventa() { CodigoCliente = cliente.Trim(), VendedorId = vendedor, Fecha = DateTime.Today, }; db.Preventas.Add(preventa); db.SaveChanges(); var pedidos = listaPreventas.Listado; //array con productos foreach (PreventaDetalle pedido in pedidos) { var preventaDetalle = new PreventaDetalle() { PreventaId = preventa.Id, VendedorId = vendedor, CodigoProducto = pedido.CodigoProducto, Cantidad = pedido.Cantidad, Precio = pedido.Precio, }; var producto = db.Productos.Find(preventaDetalle.CodigoProducto); producto.Existencia = producto.Existencia - int.Parse(preventaDetalle.Cantidad.ToString()); db.Entry(producto).State = System.Data.Entity.EntityState.Modified; db.PreventaDetalles.Add(preventaDetalle); } db.SaveChanges(); return(preventa.Id.ToString()); }
public ActionResult Details(string rutas) { List <Preventa> pedidos = new List <Preventa>(); var nombreRutas = new List <string>(); var listaRutas = rutas.Split(','); for (int i = 0; i < listaRutas.Length - 1; i++) { var rt = int.Parse(listaRutas[i]); nombreRutas.Add(db.Rutas.Find(rt).Nombre); pedidos.AddRange(db.Preventas.Where(p => p.Cliente.Ruta == rt).ToList()); } var lista = new List <PreventaDetalle>(); foreach (var pedido in pedidos) { foreach (var producto in pedido.PreventaDetalles) { lista.Add(producto); } } var listaFinal = lista.GroupBy(p => p.CodigoProducto) .Select(group => new { CodigoProducto = group.Key, Cantidad = group.Sum(p => p.Cantidad), Nombre = ObtenerNombreProducto(group.Key), Total = group.Sum(p => p.Cantidad * p.Precio) }) .OrderBy(x => x.CodigoProducto); ViewBag.Total = 0; var ls = new List <PreventaDetalle>(); foreach (var line in listaFinal) { var p = new PreventaDetalle() { CodigoProducto = line.CodigoProducto, Cantidad = line.Cantidad, Producto = new Producto() { Codigo = line.CodigoProducto.Value, Nombre = line.Nombre }, Precio = line.Total, }; ViewBag.Total += line.Total; ls.Add(p); } ViewBag.Rutas = rutas; ViewBag.NombreRutas = nombreRutas; return(View(ls)); }