Exemplo n.º 1
0
        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));
                }
            }
        }