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