public string Handle(SalidaProductoRequest request)
        {
            var producto = _productoRepository.FindFirstOrDefault(p => p.Codigo == request.Codigo);

            if (producto == null)
            {
                return("No existe el producto");
            }
            if (request.Tipo == "Compuesto")
            {
                return(RegistrarSalidaProductoCompuesto(request, producto));
            }

            var response = "";

            response = producto.RegistrarSalidaProducto(request.Cantidad);
            try
            {
                _productoRepository.Update(producto);
            }
            catch (Exception e)
            {
                return("no se pudo guardar");
            }
            _unitOfWork.Commit();
            return(response);
        }
Ejemplo n.º 2
0
        public string PostRegistrarSalida(SalidaProductoRequest request)
        {
            var service  = new RegistrarSalidaProductoService(_unitOfWork, _productoRepository);
            var response = service.Handle(request);

            return(response);
        }
Ejemplo n.º 3
0
        public SalidaProductoResponse PostSalidaProducto(SalidaProductoRequest request)
        {
            var service  = new SalidaProductoService(_unitOfWork, _productoRepository);
            var response = service.Ejecutar(request);

            return(response);
        }
        private string RegistrarSalidaProductoCompuesto(SalidaProductoRequest request, Producto producto)
        {
            ProductoCompuesto productoCompuesto;

            try
            {
                productoCompuesto = (ProductoCompuesto)producto;
            }
            catch (Exception e)
            {
                return("No es un producto Compuesto");
            }
            var productosEnInventario = new List <Producto>();

            foreach (var p in productoCompuesto.Ingredientes)
            {
                var auxProductos = _productoRepository.FindBy(c => c.Codigo == p.Codigo);
                foreach (var s in auxProductos)
                {
                    Console.WriteLine($"nombre {s.Nombre} foregn {s.ProductoCompuestoId}");
                }

                Producto auxProducto;
                if (p.GetType() == typeof(ProductoCompuesto))
                {
                    auxProducto = auxProductos.FirstOrDefault();
                }
                else
                {
                    auxProducto = auxProductos.FirstOrDefault(x => x.ProductoCompuestoId == null);
                }
                if (auxProducto == null)
                {
                    return("No se encontro el producto");
                }
                productosEnInventario.Add(auxProducto);
            }
            productoCompuesto.ProductosEnInventario = productosEnInventario;
            var response = productoCompuesto.RegistrarSalidaProducto(request.Cantidad);

            if (response.Contains("Error"))
            {
                return(response);
            }
            try
            {
                foreach (var p in productoCompuesto.ProductosEnInventario)
                {
                    _productoRepository.Update(p);
                }
            }
            catch (Exception e)
            {
                return("no se puede actualizar");
            }

            _unitOfWork.Commit();
            return($"se registro la salida de {productoCompuesto.Cantidad} {productoCompuesto.Nombre}");
        }
        public void NoPuedoRegistrarLaSalidaDeProductoSimpleSiLaCantidadExcedeLaDisponible()
        {
            var gaseosaInv = new ProductoSimple("sadad", "gaseosa", 5, 100, 200);

            _productoRepository.Add(gaseosaInv);
            _dbContext.SaveChanges();
            var request   = new SalidaProductoRequest("Simple", gaseosaInv.Codigo, 6);
            var resultado = _registrarSalidaProductoService.Handle(request);

            Assert.AreEqual("Error gaseosa: La cantidad de la salida no puede ser mayor a la disponible", resultado);
        }
        public void PuedoRegistrarLaSalidaDeProductoSimple()
        {
            var gaseosaInv = new ProductoSimple("sadad", "gaseosa", 5, 100, 200);

            _productoRepository.Add(gaseosaInv);
            _dbContext.SaveChanges();
            var request   = new SalidaProductoRequest("Simple", gaseosaInv.Codigo, 1);
            var resultado = _registrarSalidaProductoService.Handle(request);

            Assert.AreEqual("La nueva cantidad del producto gaseosa es 4", resultado);
        }
        public void NoPuedoRegistrarLaSalidaDeProductoCompuestoSiNoHayProductosParaHacerlo()
        {
            var ensalada = ProductoCompuestoMother.CrearProducto();

            _productoRepository.Add(ensalada);
            _productoRepository.AddRange(ensalada.ProductosEnInventario);
            _dbContext.SaveChanges();
            var request   = new SalidaProductoRequest("Simple", ensalada.Codigo, 6);
            var resultado = _registrarSalidaProductoService.Handle(request);

            Assert.AreEqual("Error tomate: La cantidad de la salida no puede ser mayor a la disponible", resultado);
        }
        public void PuedoRegistrarLaSalidaDeProductoCompuesto()
        {
            var ensaladaConG = ProductoCompuestoMother.CrearProductoCompuestoComplejo();

            _productoRepository.Add(ensaladaConG);
            _productoRepository.AddRange(ensaladaConG.ProductosEnInventario);
            _dbContext.SaveChanges();
            var request   = new SalidaProductoRequest("Compuesto", ensaladaConG.Codigo, 1);
            var resultado = _registrarSalidaProductoService.Handle(request);

            Assert.AreEqual("se registro la salida de 1 Ensalada Con Gaseosa", resultado);
        }
        public void PuedoRegistrarLaSalidaDeProducto()
        {
            var ensalada   = ProductoCompuestoMother.CrearProducto();
            var gaseosa    = new ProductoSimple("sadad", "gaseosa", 1, 100, 200);
            var gaseosaInv = new ProductoSimple("sadad", "gaseosa", 5, 100, 200);
            var ing        = new List <Producto>();

            ing.Add(ensalada);
            ing.Add(gaseosa);
            var ensaladaConG = new ProductoCompuesto("dasd", "ensaladaconG", 1, 2, ing, ensalada.ProductosEnInventario);

            _productoRepository.Add(ensaladaConG);
            _productoRepository.AddRange(ensalada.ProductosEnInventario);
            _productoRepository.Add(gaseosaInv);
            _dbContext.SaveChanges();
            var request   = new SalidaProductoRequest("Compuesto", ensaladaConG.Codigo, 1);
            var resultado = _registrarSalidaProductoService.Handle(request);

            Assert.AreEqual("se registro la salida de 1 ensaladaconG", resultado);
        }
Ejemplo n.º 10
0
        public SalidaProductoResponse Ejecutar(SalidaProductoRequest request)
        {
            try
            {
                var prod = ProductoRepository.FindFirstOrDefault(prd => prd.Codigo == request.Codigo);

                if (prod == null)
                {
                    return(new SalidaProductoResponse(1, "No se encuentra el producto"));
                }
                if (prod is ProductoCompuesto)
                {
                    prod = ProductoRepository.FindFirstOrDefaultIncluded(prd => prd.Codigo == request.Codigo);
                }
                var respuesta = prod.RegistrarSalida(request.Cantidad);
                UnitOfWork.Commit();
                return(new SalidaProductoResponse(0, respuesta));
            }
            catch (Exception e)
            {
                return(new SalidaProductoResponse(1, "Error " + e));
            }
        }