public async Task <object> GetFileStatus(FileStatusParamDto fileStatusParamDto, int network)
        {
            var saleFile = (await _saleFileRepository.CustomFind(
                                x => x.CurrentMonth == fileStatusParamDto.CurrentMonth &&
                                x.Network.Id == network &&
                                x.CurrentYear == fileStatusParamDto.CurrentYear,
                                x => x.FileStatus));

            if (!saleFile.Any())
            {
                return(null);
            }

            var saleFileObj = saleFile.OrderBy(x => x.Id).Last();

            if (saleFileObj.FileStatus.Id == (int)FileStatusEnum.InProgress)
            {
                var saleFileData = await _saleFileDataRepository.CustomFind(x => x.SaleFile.Id == saleFileObj.Id,
                                                                            x => x.SaleFileSkuStatus);

                return(new { saleFileData, saleFileObj.FileStatus });
            }
            else if (saleFileObj.FileStatus.Id == (int)FileStatusEnum.EndedError)
            {
                var saleFileDataError = await _saleFileDataErrorRepository.CustomFind(x => x.SaleFile.Id == saleFileObj.Id);

                return(new { saleFileDataError, saleFileObj.FileStatus });
            }
            else
            {
                return(new { saleFileObj.FileStatus });
            }
        }
Exemple #2
0
        public async Task <bool> ProcessesHierarchyFile()
        {
            var InProgressFiles = await _hierarchyFileRepository.CustomFind(x => x.FileStatus.Id == (int)FileStatusEnum.InProgress, x => x.FileStatus, x => x.Network);

            if (InProgressFiles.Any())
            {
                _logger.Info($" processamento da hierarquia em progresso - Iniciado ");

                foreach (var file in InProgressFiles)
                {
                    var fileSaleList = await _saleFileRepository.CustomFind(x =>
                                                                            x.CurrentMonth == file.CurrentMonth &&
                                                                            x.CurrentYear == file.CurrentYear &&
                                                                            x.FileStatus.Id != (int)FileStatusEnum.EndedError &&
                                                                            x.Network.Id == file.Network.Id,
                                                                            x => x.FileStatus);

                    if (fileSaleList.Any() && fileSaleList.Where(x => x.FileStatus.Id == (int)FileStatusEnum.ProcessedSales).Count() == fileSaleList.Count())
                    {
                        var dataFileList = await _hierarchyFileDataRepository.CustomFind(x => x.HierarchyFile.Id == file.Id);

                        await _shopUserRepository.ClearRegionManagerShops(dataFileList.GroupBy(x => x.Cpf).Select(x => x.Key).ToList());

                        foreach (var dataFile in dataFileList)
                        {
                            var user   = (await _userRepository.CustomFind(x => x.Cpf.Equals(dataFile.Cpf), x => x.UserStatus)).FirstOrDefault();
                            var shop   = (await _shopRepository.CustomFind(x => x.Cnpj.Equals(dataFile.Cnpj))).FirstOrDefault();
                            var office = string.IsNullOrEmpty(dataFile.Office) ? await _officeRepository.GetById((int)OfficeEnum.RegionManager) : (await _officeRepository.CustomFind(x => x.Description.Replace(" ", "").ToUpper().Equals(dataFile.Office.Replace(" ", "").ToUpper()))).FirstOrDefault();

                            if (user == null)
                            {
                                await CreatePreRegistrationUser(dataFile, office, shop);
                            }
                            else
                            {
                                await UpdateHierarchyUsers(user, dataFile, office, shop);
                            }
                        }

                        file.FileStatus = await _fileStatusRepository.GetById((int)FileStatusEnum.SuccessfullyCompleted);

                        return(await _unitOfWork.CommitAsync());
                    }
                }
            }
            else
            {
                _logger.Info($" processamento da hierarquia em progresso - não possui nenhum arquivo em progresos para processar");
                return(false);
            }

            return(false);
        }
        public async Task ValidateImportedStructure(string pathFrom)
        {
            var ListSaleFileDataError = new List <SaleFileDataError>();
            var ListSaleFileData      = new List <SaleFileData>();

            var pendingFiles = await _saleFileRepository.CustomFind(x => x.FileStatus.Id == (int)FileStatusEnum.Pending, x => x.FileStatus, x => x.Network, x => x.User);

            if (!pendingFiles.Any())
            {
                _logger.Info($"Processamento de arquivo de vendas  - nenhum arquivo pendente encontrado para processar!");
            }

            foreach (var file in pendingFiles)
            {
                _logger.Info($"Processamento de arquivo de vendas com id {file.Id} - iniciando!");

                var path     = Path.Combine(pathFrom, file.FileName);
                var fileInfo = new FileInfo(path);

                if (File.Exists(path))
                {
                    using (var excelPackage = new ExcelPackage(fileInfo))
                    {
                        ListSaleFileDataError = new List <SaleFileDataError>();
                        ListSaleFileData      = new List <SaleFileData>();

                        var saleTab = excelPackage.Workbook.Worksheets[1];

                        var saleTabResult = await ValidateSaleTab(file, saleTab);

                        ListSaleFileDataError.AddRange(saleTabResult.errorList);

                        ListSaleFileData.AddRange(saleTabResult.dataList);

                        if (saleTabResult.errorList.Any())
                        {
                            _logger.Info($"Processamento de arquivo de vendas com id {file.Id} - encontrado erros de validação!");
                            _saleFileDataErrorRepository.SaveMany(ListSaleFileDataError);
                            file.FileStatus = await _fileStatusRepository.GetById((int)FileStatusEnum.EndedError);

                            await _unitOfWork.CommitAsync();
                        }
                        else if (saleTabResult.dataList.Any())
                        {
                            var EntityFile = saleTabResult.dataList.First().SaleFile;

                            if (ListSaleFileDataError.Any())
                            {
                                _logger.Info($"Processamento de arquivo de vendas com id {file.Id} - encontrado erros de validação!");
                                _saleFileDataErrorRepository.SaveMany(ListSaleFileDataError);
                                EntityFile.FileStatus = await _fileStatusRepository.GetById((int)FileStatusEnum.EndedError);

                                await _unitOfWork.CommitAsync();

                                try
                                {
                                    _emailService.SendSaleError(file.User.Email);
                                }
                                catch
                                {
                                    _logger.Warn($"Processamento de arquivo de venda com id {file.Id} - não foi possivel enviar email para o usuario responsavel pelo arquivo");
                                }
                            }
                            else
                            {
                                _saleFileDataRepository.SaveMany(ListSaleFileData);

                                _logger.Info($"Processamento de arquivo de vendas com id {file.Id} - processamento em progresso, existe validacoes de sku pendente!");
                                EntityFile.FileStatus = await _fileStatusRepository.GetById((int)FileStatusEnum.InProgress);

                                await _unitOfWork.CommitAsync();

                                try
                                {
                                    _emailService.SendSaleSuccess($"{(file.CurrentMonth < 10 ? "0" + file.CurrentMonth.ToString() : file.CurrentMonth.ToString())}/{file.CurrentYear}", file.User.Email);
                                    _emailService.SendSKUEnabled(file.Network.Name);
                                }
                                catch
                                {
                                    _logger.Warn($"Processamento de arquivo de venda com id {file.Id} - não foi possivel enviar email para o usuario responsavel pelo arquivo");
                                }
                            }
                        }
                        else
                        {
                            _logger.Info($"Processamento de arquivo de vendas com id {file.Id} - erro!");
                        }
                    }
                }
                else
                {
                    _logger.Warn($"Processamento de arquivo de vendas com id {file.Id} - arquivo não encontrado!");
                }
            }
        }