Пример #1
0
        public ActionResult Insert([FromForm] IFormFile arquivo)
        {
            InsertExcelResult _InsertExcelResult = _business.Insert(arquivo).Result;

            if (_InsertExcelResult == null)
            {
                return(NotFound());
            }

            return(Ok(_InsertExcelResult));
        }
Пример #2
0
        public async Task <InsertExcelResult> Insert(IFormFile arquivo)
        {
            #region Variáveis
            GetAllImportsResult _GetAllImportsResult = new GetAllImportsResult();
            InsertExcelResult   _InsertExcelResult   = new InsertExcelResult();
            IMPORTACAO_EXCEL    _IMPORTACAO_EXCEL    = new IMPORTACAO_EXCEL();
            List <EXCEL>        oEXCEL = new List <EXCEL>();
            #endregion

            try
            {
                #region Validações do Arquivo
                if (arquivo.Length == 0)
                {
                    _InsertExcelResult.Retorno.Codigo   = 1010;
                    _InsertExcelResult.Retorno.Mensagem = "Arquivo está vazio";
                    return(_InsertExcelResult);
                }

                string fileExtension = Path.GetExtension(arquivo.FileName);

                if (fileExtension != ".xls" && fileExtension != ".xlsx")
                {
                    _InsertExcelResult.Retorno.Codigo   = 1020;
                    _InsertExcelResult.Retorno.Mensagem = "Extensão do arquivo deve ser .xls/.xlsx";
                    return(_InsertExcelResult);
                }
                #endregion

                #region Importação
                Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);

                using (var stream = new MemoryStream())
                {
                    arquivo.CopyTo(stream);
                    stream.Position = 0;

                    using (var reader = ExcelReaderFactory.CreateReader(stream))
                    {
                        long             cont       = 0;
                        List <ExcelList> oExcelList = new List <ExcelList>();

                        while (reader.Read())
                        {
                            if (cont > 0)
                            {
                                #region Validações dos registros

                                //Linha com algum campo nulo
                                if (reader.GetValue(0) == null || reader.GetValue(1) == null || reader.GetValue(2) == null || reader.GetValue(3) == null)
                                {
                                    _InsertExcelResult.Retorno.Codigo   = 1100;
                                    _InsertExcelResult.Retorno.Mensagem = $"Não foi possível importar planilha. Existem campos vazios. Linha {cont}";
                                    return(_InsertExcelResult);
                                }

                                //DataEntrega
                                DateTime.TryParse(reader.GetValue(0).ToString(), out DateTime dataEntrega);

                                if (dataEntrega == default)
                                {
                                    _InsertExcelResult.Retorno.Codigo   = 1110;
                                    _InsertExcelResult.Retorno.Mensagem = $"Não foi possível importar planilha. Campo Data de Entrega está com formato inválido. Linha {cont}";
                                    return(_InsertExcelResult);
                                }

                                if (dataEntrega <= DateTime.Now)
                                {
                                    _InsertExcelResult.Retorno.Codigo   = 1110;
                                    _InsertExcelResult.Retorno.Mensagem = $"Não foi possível importar planilha. Data de Entrega não pode ser menor que a data atual. Linha {cont}";
                                    return(_InsertExcelResult);
                                }

                                //NomeProduto
                                string nomeProduto = reader.GetValue(1).ToString();

                                if (nomeProduto.Length > 50)
                                {
                                    _InsertExcelResult.Retorno.Codigo   = 1120;
                                    _InsertExcelResult.Retorno.Mensagem = $"Não foi possível importar planilha. Nome do Produto excede o tamanho de 50 caracteres. Linha {cont}";
                                    return(_InsertExcelResult);
                                }

                                //Quantidade
                                int.TryParse(reader.GetValue(2).ToString(), out int quantidade);

                                if (quantidade == 0)
                                {
                                    _InsertExcelResult.Retorno.Codigo   = 1130;
                                    _InsertExcelResult.Retorno.Mensagem = $"Não foi possível importar planilha. Quantidade não pode ser zero. Linha {cont}";
                                    return(_InsertExcelResult);
                                }

                                //ValorUnitario
                                decimal.TryParse(reader.GetValue(3).ToString(), out decimal valorUnitario);

                                if (valorUnitario == 0)
                                {
                                    _InsertExcelResult.Retorno.Codigo   = 1130;
                                    _InsertExcelResult.Retorno.Mensagem = $"Não foi possível importar planilha. Valor Unitário não pode ser zero. Linha {cont}";
                                    return(_InsertExcelResult);
                                }
                                #endregion

                                ExcelList _ExcelList = new ExcelList();

                                _ExcelList.DataEntrega   = dataEntrega;
                                _ExcelList.NomeProduto   = nomeProduto;
                                _ExcelList.Quantidade    = quantidade;
                                _ExcelList.ValorUnitario = Math.Round(valorUnitario, 2);

                                oExcelList.Add(_ExcelList);
                            }

                            cont++;
                        }

                        using (var transaction = _unitOfWork.BeginTransaction())
                        {
                            try
                            {
                                _IMPORTACAO_EXCEL.DataImportacao = DateTime.Now;
                                _IMPORTACAO_EXCEL.NomeArquivo    = arquivo.FileName;

                                _unitOfWork.Repository <IMPORTACAO_EXCEL>().Add(_IMPORTACAO_EXCEL);
                                await _unitOfWork.SaveChanges();

                                oEXCEL = _mapper.Map <List <EXCEL> >(oExcelList);
                                oEXCEL.Select(x => { x.Id = _IMPORTACAO_EXCEL.Id; return(x); }).ToList();

                                _unitOfWork.Repository <EXCEL>().AddRange(oEXCEL);
                                await _unitOfWork.SaveChanges();

                                transaction.Commit();
                            }
                            catch (Exception ex)
                            {
                                transaction.Rollback();

                                _InsertExcelResult.Retorno.Codigo   = 1100;
                                _InsertExcelResult.Retorno.Mensagem = $"Insert({arquivo.FileName})): {ex.Message}";
                                return(_InsertExcelResult);
                            }
                        }

                        #region Repassa as informações para o retorno
                        _InsertExcelResult.Id                        = _IMPORTACAO_EXCEL.Id;
                        _InsertExcelResult.NomeArquivo               = arquivo.FileName;
                        _InsertExcelResult.DataImportacao            = DateTime.Now;
                        _InsertExcelResult.TotalRegistros            = cont - 1;
                        _InsertExcelResult.Retorno.Codigo            = 200;
                        _InsertExcelResult.Retorno.Mensagem          = "Excel importado com sucesso";
                        _InsertExcelResult.Retorno.DataProcessamento = DateTime.Now;
                        #endregion
                    }
                }
                #endregion

                return(_InsertExcelResult);
            }
            catch (Exception ex)
            {
                _InsertExcelResult.Retorno.Codigo   = 9999;
                _InsertExcelResult.Retorno.Mensagem = $"Insert({arquivo.FileName})): {ex.Message}";
                return(_InsertExcelResult);
            }
        }