示例#1
0
        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());
            }
        }