public ActionResult Create(VentaEditViewModel ventaVm) { if (!ModelState.IsValid) { ventaVm.Clientes = CombosHelper.GetClientes(); List <DetalleVentaTmp> detallesTmp = _dbContext .DetalleVentasTmp.Include(dvt => dvt.Producto) .ToList(); ventaVm.DetallesVenta = Mapper .Map <List <DetalleVentaTmp>, List <DetalleVentaListViewModel> >(detallesTmp); //return View(ventaVm); return(View("Create2", ventaVm)); } var cantidadItems = _dbContext.DetalleVentasTmp.Count(dvt => dvt.Cantidad > 0); if (cantidadItems == 0) { ModelState.AddModelError(string.Empty, "Debe contener al menos un item o items con cantidades superiores a 0"); ventaVm.Clientes = CombosHelper.GetClientes(); List <DetalleVentaTmp> detallesTmp = _dbContext .DetalleVentasTmp.Include(dvt => dvt.Producto) .ToList(); ventaVm.DetallesVenta = Mapper .Map <List <DetalleVentaTmp>, List <DetalleVentaListViewModel> >(detallesTmp); //return View(ventaVm); return(View("Create2", ventaVm)); } LimpiarListaDeItemsTemporales(); Venta venta = Mapper.Map <VentaEditViewModel, Venta>(ventaVm); using (var tran = _dbContext.Database.BeginTransaction()) { try { venta.EstadoId = CombosHelper.GetEstado("Facturado"); _dbContext.Ventas.Add(venta); _dbContext.SaveChanges(); var detalles = _dbContext.DetalleVentasTmp.ToList(); foreach (var detalleVentaTmp in detalles) { //Creo el detalle venta DetalleVenta detalle = Mapper .Map <DetalleVentaTmp, DetalleVenta>(detalleVentaTmp); detalle.VentaId = venta.VentaId; //le asigno el nro de venta _dbContext.DetalleVentas.Add(detalle); //guardo el detalle //Busco el producto para modificar su stock var productoInDb = _dbContext .Productos.SingleOrDefault(p => p.ProductoId == detalle.ProductoId); productoInDb.UnidadesEnExistencia -= detalle.Cantidad; _dbContext.Entry(productoInDb).State = EntityState.Modified; //cambio el estado de la entidad _dbContext.DetalleVentasTmp.Remove(detalleVentaTmp); //borro el detalle temporal } _dbContext.SaveChanges(); tran.Commit(); //TempData["Msg"] = "Venta guardada"; //return RedirectToAction("Index"); ViewBag.VentaId = venta.VentaId; return(View("SuccessfullySave")); } catch (Exception e) { ModelState.AddModelError(string.Empty, "Error al intentar guardar la venta"); //return View(ventaVm); return(View("Create2", ventaVm)); } } }