/* Método responsável pelo tratamento do arquivo excel importado, * nesse método é feito tanto o tratamento de integridade dos dados quanto de * validação de acordo com as regras definidas. */ public async Task <Retorno> Insert(MemoryStream arquivo, string nomeArquivo) { using (var package = new ExcelPackage(arquivo)) { var retornoAPI = new Retorno(); // Varre as planilhas de dentor do arquivo. for (int i = 1; i <= package.Workbook.Worksheets.Count; i++) { var totalRows = package.Workbook.Worksheets[i].Dimension?.Rows; var totalCollumns = package.Workbook.Worksheets[i].Dimension?.Columns; // Começa sempre da 2ª linha, isso é nescessário para desconsiderar o cabeçalho da planilha. for (int j = 2; j <= totalRows.Value; j++) { var linhaArquivoExcel = new LinhaArquivoExcel(); // Percorre todas colunas da linha, e faz suas respectivas validações, no que se diz respeito // a integridade dos dados das células. for (int k = 1; k <= totalCollumns.Value; k++) { string celula = package.Workbook.Worksheets[i].Cells[j, k].Value.ToString(); switch (k) { // Coluna: Data Entrega. case 1: if (VerificaData(celula)) { linhaArquivoExcel.DataEntrega = DateTime.Parse(celula); if (linhaArquivoExcel.DataEntrega < DateTime.Now) { retornoAPI.ErrosArquivo.Add(new ErroArquivo(j, k, "O campo data de entrega não pode ser menor ou igual que o dia atual.")); } } else { retornoAPI.ErrosArquivo.Add(new ErroArquivo(j, k, "Na célula da linha referente a data é um tipo inválido ou não foi informado.")); } break; // Coluna: Nome do Produto. case 2: if (!string.IsNullOrEmpty(celula)) { linhaArquivoExcel.NomeProduto = celula; if (linhaArquivoExcel.NomeProduto.Length > 50) { retornoAPI.ErrosArquivo.Add(new ErroArquivo(j, k, "O campo descrição precisa ter o tamanho máximo de 50 caracteres.")); } } else { retornoAPI.ErrosArquivo.Add(new ErroArquivo(j, k, "Na célula da linha referente ao nome do produto não foi informado.")); } break; // Coluna: Quantidade. case 3: if (VerificaInteiro(celula)) { linhaArquivoExcel.Quantidade = Int32.Parse(celula); if (linhaArquivoExcel.Quantidade <= 0) { retornoAPI.ErrosArquivo.Add(new ErroArquivo(j, k, "O campo quantidade tem que ser maior do que zero.")); } } else { retornoAPI.ErrosArquivo.Add(new ErroArquivo(j, k, "Na célula da linha referente a quantidade é um tipo inválido ou não foi informado.")); } break; case 4: // Coluna: Valor Unitário. if (VerificaDecimal(celula)) { linhaArquivoExcel.ValorUnitario = Decimal.Parse(celula); if (linhaArquivoExcel.ValorUnitario <= 0) { retornoAPI.ErrosArquivo.Add(new ErroArquivo(j, k, "O campo valor unitário tem que ser maior do que zero.")); } } else { retornoAPI.ErrosArquivo.Add(new ErroArquivo(j, k, "Na célula da linha referente a valor unitário é um tipo inválido ou não foi informado.")); } break; default: break; } } retornoAPI.LinhaArquivoExcel.Add(linhaArquivoExcel); } } return(await Persiste(retornoAPI, nomeArquivo)); } }
public async Task Insert(LinhaArquivoExcel linhaArquivoExcel) { await _context.LinhaArquivoExcel.AddAsync(linhaArquivoExcel); }