Пример #1
0
        /* 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);
 }