示例#1
0
        public async Task <List <string> > Handle(CreateImportacoesRequest request, CancellationToken cancellationToken)
        {
            var mensagemsErro = new List <string>();

            if (request.Arquivo == null)
            {
                mensagemsErro.Add("O Arquivo deve ser informado.");
                return(mensagemsErro);
            }

            ExcelPackage.LicenseContext = LicenseContext.NonCommercial;

            var produtos   = new List <Produto>();
            var importacao = new Importacao(Guid.NewGuid(), DateTime.Now);

            using (var package = new ExcelPackage(request.Arquivo.OpenReadStream()))
            {
                foreach (var worksheet in package.Workbook.Worksheets)
                {
                    //loop all rows
                    for (var row = 2; row <= worksheet.Dimension.End.Row; row++)
                    {
                        //loop all columns in a row
                        var produto =
                            GetProdutoByRow(worksheet, row);

                        var erros = produto.Valida(row);

                        if (erros.Count != 0)
                        {
                            mensagemsErro.AddRange(erros);
                        }

                        if (erros.Count != 0)
                        {
                            continue;
                        }

                        produto.Importacao = importacao;
                        importacao.QuantidadeProdutosImportados++;
                        produtos.Add(produto);
                    }
                }
            }

            if (mensagemsErro.Count != 0)
            {
                _domainValidation.AddError("Erros foram encontrados!");
                mensagemsErro.Add("Nenhum produto foi importado, corrija a planilha e tente novamente.");
            }

            importacao.Produtos = produtos;

            _importacaoRepository.Store(importacao);

            await _unityOfWork.SaveChangesIfDomainIsValid();

            return(mensagemsErro);
        }