internal async Task <int> Guardar(Modelo.Mercaderia mercaderia)
        {
            if (mercaderia.Id == 0)
            {
                _context.Entry(mercaderia.Proveedor).State = EntityState.Unchanged;
                mercaderia.MercaderiaItems.ToList().ForEach(x => _context.Entry(x.Producto).State = EntityState.Unchanged);

                _context.Mercaderia.Add(mercaderia);
            }
            else
            {
                Modelo.Mercaderia mercaderaDB = await _context.Mercaderia
                                                .Include(x => x.MercaderiaItems.Select(y => y.Producto))
                                                .FirstOrDefaultAsync(x => x.Id == mercaderia.Id);

                mercaderaDB.Fecha = mercaderia.Fecha;
                mercaderaDB.FechaActualizacion   = mercaderia.FechaActualizacion;
                mercaderaDB.UsuarioActualizacion = mercaderia.UsuarioActualizacion;
                mercaderaDB.FechaRecepcion       = mercaderia.FechaRecepcion;
                mercaderaDB.Estado = mercaderia.Estado;

                mercaderaDB.MercaderiaItems.ToList().ForEach(mercaderiaItemDB =>
                {
                    Modelo.MercaderiaItem mercaderiaItemLocal = mercaderia.MercaderiaItems.FirstOrDefault(x => x.Producto.Id == mercaderiaItemDB.Producto.Id);
                    if (mercaderiaItemLocal != null)
                    {
                        mercaderiaItemDB.ModificarCantidad(mercaderiaItemLocal.Cantidad);
                    }
                    else
                    {
                        _context.MercaderiaItem.Remove(mercaderiaItemDB);
                    }
                });

                mercaderia.MercaderiaItems.Where(x => x.Id == 0).ToList().ForEach(mercaderiaItemLocal =>
                {
                    if (!mercaderaDB.MercaderiaItems.Any(x => x.Producto.Id == mercaderiaItemLocal.Producto.Id))
                    {
                        _context.Entry(mercaderiaItemLocal.Producto).State = EntityState.Unchanged;
                        mercaderaDB.MercaderiaItems.Add(mercaderiaItemLocal);
                    }
                });
            }

            return(await _context.SaveChangesAsync());
        }
Example #2
0
        public void AgregarProducto(Producto producto, int cantidad)
        {
            if (Estado != MercaderiaEstado.Nuevo && Estado != MercaderiaEstado.Guardada)
            {
                throw new NegocioException($"La mercadería se encuentra en estado {Estado} no se puede modificar los productos.");
            }

            MercaderiaItem mercaderia = MercaderiaItems.FirstOrDefault(x => x.Producto.Codigo == producto.Codigo);

            if (mercaderia == null)
            {
                MercaderiaItems.Add(new MercaderiaItem(producto, cantidad));
            }
            else
            {
                mercaderia.ModificarCantidad(mercaderia.Cantidad + cantidad);
            }
        }