public bool AplicaAcciónDeInventario(AcciónDeInventario acción) { var transacción = _context.Database.BeginTransaction(); try { foreach (AcciónDeInventarioDetalle Tupla in acción.AcciónDeInventarioDetalles) { var respuesta = _inventarioRepository.TraerUnoAsync(a => a.BodegaId == acción.BodegaId && a.ArtículoId == Tupla.ArtículoId); respuesta.Result.Cantidad += Tupla.Cantidad * acción.Signo; _inventarioRepository.Actualizar(respuesta.Result); } _acciónDeInventarioRepository.ActualizaEstado(acción.AcciónDeInventarioId, EstadoAcciónDeInventarioEnum.Aplicada); transacción.Commit(); _context.SaveChanges(); } catch (Exception ex) { _logger.LogError(ex.Message); transacción.Rollback(); return(false); } return(true); }
public void InsertarAcciónDeInventario_NadaRaro_RetornaId_1() { // Arrange var connectionStringBuilder = new SqliteConnectionStringBuilder { DataSource = ":memory:" }; var connection = new SqliteConnection(connectionStringBuilder.ToString()); var options = new DbContextOptionsBuilder <IntegraDbContext>() .UseSqlite(connection) .Options; using (var context = new IntegraDbContext(options)) { context.Database.OpenConnection(); context.Database.EnsureCreated(); } // Incluir artículos using (var context = new IntegraDbContext(options)) { var repositorioArtículos = new ArtículoRepository(context); repositorioArtículos.Adicionar(new Artículo { ArtículoSubTipoId = 1, UnidadId = 11, Código = "LEC001", Nombre = "Leche Entera", EstadoId = EstadoEnum.Activo }); repositorioArtículos.Adicionar(new Artículo { ArtículoSubTipoId = 1, UnidadId = 11, Código = "LEC002", Nombre = "Leche Descremada", EstadoId = EstadoEnum.Activo }); repositorioArtículos.SaveChanges(); } // Incluir inventario using (var context = new IntegraDbContext(options)) { var repositorio = new InventarioRepository(context); repositorio.Adicionar(new Inventario { BodegaId = 1, ArtículoId = 1, UbicaciónId = 1, UnidadId = 1, Cantidad = 100 }); repositorio.Adicionar(new Inventario { BodegaId = 1, ArtículoId = 2, UbicaciónId = 1, UnidadId = 1, Cantidad = 100 }); repositorio.SaveChanges(); } // Incluir acción using (var context = new IntegraDbContext(options)) { var repositorio = new AcciónDeInventarioRepository(context); AcciónDeInventario acción = new AcciónDeInventario(); ulong id = 1; acción.AcciónDeInventarioId = id; acción.ClienteId = 1; acción.BodegaId = 1; acción.VendedorId = 1; acción.Signo = -1; acción.Fecha = System.DateTime.Now; List <AcciónDeInventarioDetalle> detalles = new List <AcciónDeInventarioDetalle>(); detalles.Add(new AcciónDeInventarioDetalle { AcciónDeInventarioId = id, NúmeroDeLinea = 1, ArtículoId = 1, Cantidad = 1, PrecioUnitario = 5 }); detalles.Add(new AcciónDeInventarioDetalle { AcciónDeInventarioId = id, NúmeroDeLinea = 2, ArtículoId = 2, Cantidad = 1, PrecioUnitario = 10 }); acción.CantidadDeLíneas = (ushort)detalles.Count(); acción.Total = 15; acción.AcciónDeInventarioDetalles = detalles; // Act repositorio.Adicionar(acción); repositorio.SaveChanges(); var objeto = repositorio.TraerUnoAsync(o => o.AcciónDeInventarioId == id, new List <string> { "AcciónDeInventarioDetalles" }); // Assert Assert.Equal(id, objeto.Result.AcciónDeInventarioId); Assert.Equal(2, objeto.Result.AcciónDeInventarioDetalles.Count()); } }