コード例 #1
0
        public async Task <IActionResult> Update([FromForm] UpdateProductViewModel viewModel)
        {
            try
            {
                using var reader = ExcelReaderFactory.CreateReader(viewModel.File.OpenReadStream());

                var configuration = new ExcelDataSetConfiguration()
                {
                    ConfigureDataTable = (it) => new ExcelDataTableConfiguration()
                    {
                        UseHeaderRow = true
                    }
                };

                using var workbook = reader.AsDataSet(configuration);

                var tasks = new List <Task <Result> >();

                foreach (DataTable sheet in workbook.Tables)
                {
                    foreach (DataRow row in sheet.Rows)
                    {
                        var productCode = row.GetValue <string>("codigo");
                        var gridCode    = row.GetValue <string>("codigo sku");
                        var price       = row.GetValue <decimal?>("preço");
                        var quantity    = row.GetValue <int?>("estoque");

                        var updatePriceAndQuantityViewModel = new UpdateProductPriceAndQuantityViewModel
                        {
                            Price    = price,
                            Quantity = quantity
                        };

                        tasks.Add(_productApplication.Update(productCode, gridCode, updatePriceAndQuantityViewModel));
                    }
                }

                var result = await Task.WhenAll(tasks);

                _uow.Commit();

                return(Ok(result));
            }
            catch (Exception)
            {
                _uow.Rollback();

                return(StatusCode(StatusCodes.Status500InternalServerError));
            }
        }
コード例 #2
0
        public async Task <Result> Update(string productCode, string gridCode, UpdateProductPriceAndQuantityViewModel viewModel)
        {
            if (string.IsNullOrEmpty(productCode))
            {
                return(Result.Fail("Product code must be informed"));
            }

            var maybeProduct = await _productRepository.FindOne(productCode);

            if (maybeProduct.HasNoValue)
            {
                return(Result.Fail($"Product with {productCode} does not exist"));
            }

            var product = maybeProduct.Value;

            if (!product.HasGrid)
            {
                UpdatePrice(product, viewModel.Price);
                UpdateQuantity(product, viewModel.Quantity);

                return(await _productRepository.Save(productCode, product));
            }

            if (string.IsNullOrEmpty(gridCode))
            {
                return(Result.Fail("Grid code must be informed"));
            }

            var maybeGrid = await _productRepository.FindOne(productCode, gridCode);

            if (maybeGrid.HasNoValue)
            {
                return(Result.Fail($"Grid with {gridCode} does not exist"));
            }

            var grid = maybeGrid.Value;

            UpdatePrice(grid, viewModel.Price);
            UpdateQuantity(grid, viewModel.Quantity);

            return(await _productRepository.Save(productCode, gridCode, grid));
        }