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 }); } }
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!"); } } }