private DataTable GetRows(string file) { _logger.Info("Start : File converting in Table"); var memberData = _pipeDelimitedReportHelper.ReadWithTextQualifier(file); _logger.Info("End : File converted in Table"); if (memberData == null || memberData.Rows == null || memberData.Rows.Count <= 0) { _logger.Info("Data not available in file(" + file + ")"); return(null); } _logger.Info("Total (" + memberData.Rows.Count + ") records found in file (" + file + ")"); return(memberData); }
public void PollForCustomerEligibilityUpload() { try { if (_settings.StopCustomerEligibilityUpload) { _logger.Info("Customer Eligibility Upload Polling Agent stopped @:" + DateTime.Now); return; } _logger.Info("Entering Customer Eligibility Upload Polling Agent @:" + DateTime.Now); var sftpFileLocation = _settings.CustomerEligibilityUploadSftpPath; var mediaLocation = _mediaRepository.GetCustomerEligibilityUploadFolderLocation(); var archiveFolder = Path.Combine(mediaLocation.PhysicalPath, "Archive", DateTime.Today.ToString("yyyyMMdd")); var failedFolder = Path.Combine(mediaLocation.PhysicalPath, "Failed", DateTime.Today.ToString("yyyyMMdd")); var getFilesFromSftp = DirectoryOperationsHelper.GetFiles(sftpFileLocation, "*.txt").Where(x => x.ToLower().Contains("outtake") && x.ToLower().Contains("eligibility")); if (getFilesFromSftp.IsNullOrEmpty()) { _logger.Info("No files found for parsing."); return; } DirectoryOperationsHelper.CreateDirectoryIfNotExist(archiveFolder); DirectoryOperationsHelper.CreateDirectoryIfNotExist(failedFolder); var timeStamp = DateTime.Now.ToString("yyyyMMddhhmmss"); foreach (var file in getFilesFromSftp) { var fileName = Path.GetFileNameWithoutExtension(file); MoveFile(file, Path.Combine(mediaLocation.PhysicalPath, fileName + "_" + timeStamp + ".txt")); } var filesToParse = DirectoryOperationsHelper.GetFiles(mediaLocation.PhysicalPath, "*.txt"); _logger.Info("Number of files to Parse:" + filesToParse.Count()); foreach (var file in filesToParse) { var fileName = Path.GetFileName(file); try { var patientData = _pipeDelimitedReportHelper.ReadWithTextQualifier(file); var columns = patientData.Columns.Cast <DataColumn>().Select(x => x.ColumnName.ToLower()).ToArray(); var missingColumnNames = _corporateUploadHelper.CheckAllCustomerEligibilityUploadColumnExist(columns); if (!string.IsNullOrEmpty(missingColumnNames)) { _logger.Info("Column Name(" + missingColumnNames + ") missing in file(" + fileName + ")"); MoveFile(file, Path.Combine(failedFolder, fileName)); continue; } var recordsInFile = patientData.Rows.Count; if (recordsInFile == 0) { _logger.Info("No record found in " + fileName); MoveFile(file, Path.Combine(archiveFolder, fileName)); continue; } _logger.Info("Parsing file: " + fileName); _logger.Info("Total number of records in file: " + recordsInFile); var failedRecords = new List <CustomerEligibilityUploadViewModel>(); var parseEligibilityData = ParseEligibilityData(patientData.AsEnumerable(), failedRecords); if (parseEligibilityData.Any()) { foreach (var customerEligibility in parseEligibilityData) { try { _logger.Info("Getting customer for AcesId: " + customerEligibility.AcesId); List <Customer> customers = null; var errorMesage = string.Empty; if (!string.IsNullOrWhiteSpace((customerEligibility.AcesId)) || !string.IsNullOrWhiteSpace(customerEligibility.MemberId)) { if (!string.IsNullOrWhiteSpace(customerEligibility.AcesId)) { customers = _customerRepository.GetCustomersByAcesId(customerEligibility.AcesId); if (customers.IsNullOrEmpty()) { errorMesage = "Customer not found for AcesId: " + customerEligibility.AcesId; _logger.Info(errorMesage); } } else { errorMesage = "AcesId not provided for Member Id: " + customerEligibility.MemberId; _logger.Info(errorMesage); } if (customers.IsNullOrEmpty()) { if (!string.IsNullOrWhiteSpace(customerEligibility.MemberId)) { customers = _customerRepository.GetCustomersByMemberId(customerEligibility.MemberId); if (customers.IsNullOrEmpty()) { errorMesage = errorMesage + ", " + "Customer not found for Member ID: " + customerEligibility.MemberId; _logger.Info(errorMesage); } } else { errorMesage = errorMesage + " , " + "Member Id not provided for AcesId: " + customerEligibility.AcesId; _logger.Info(errorMesage); } } if (customers.IsNullOrEmpty()) { customerEligibility.Error = errorMesage; failedRecords.Add(customerEligibility); _logger.Info("Record not parsed: " + errorMesage); continue; } bool?eligibility = null; if (customerEligibility.Eligibility.ToLower() == CustomerEligibilityYes.ToLower()) { eligibility = true; } else if (customerEligibility.Eligibility.ToLower() == CustomerEligibilityNo.ToLower()) { eligibility = false; } int eligibilityYear = Convert.ToInt32(customerEligibility.EligibilityYear); foreach (var customer in customers) { _customerEligibilityService.Save(customer.CustomerId, eligibilityYear, eligibility, OrgRoleId, _logger); _logger.Info("Customer Eligibility inserted successfully for CustomerID: " + customer.CustomerId); } } else { errorMesage = "Aces Id or Member Id not provided "; customerEligibility.Error = errorMesage; failedRecords.Add(customerEligibility); _logger.Info("Record not parsed " + errorMesage); } } catch (Exception ex) { customerEligibility.Error = "Some error occurred while saving record."; failedRecords.Add(customerEligibility); _logger.Error(string.Format("Error occurred while saving record for AcesId: {0}.\nMessage: {1}\n\tStackTrace: {2}", customerEligibility.AcesId, ex.Message, ex.StackTrace)); } } } CreateFailedUploadFile(fileName, failedFolder, failedRecords); MoveFile(file, Path.Combine(archiveFolder, fileName)); } catch (Exception ex) { _logger.Error(string.Format("Error occurred while processing the {0}.\nMessage: {1}\n\tStackTrace: {2}", file, ex.Message, ex.StackTrace)); MoveFile(file, Path.Combine(failedFolder, fileName)); } } _logger.Info("File parsing completed @ " + DateTime.Now); try { _logger.Info("Copying failed file at SFTP"); var failedFiles = DirectoryOperationsHelper.GetFiles(failedFolder, "*.txt"); if (failedFiles.IsNullOrEmpty()) { _logger.Info("No failed files found to copy at SFTP."); return; } _logger.Info("Creating failed folder at SFTP " + sftpFileLocation); var sftpFailedFolder = Path.Combine(sftpFileLocation, "FailedCustomerRecords", DateTime.Today.ToString("yyyyMMdd")); DirectoryOperationsHelper.CreateDirectoryIfNotExist(sftpFailedFolder); foreach (var file in failedFiles) { var failedFileName = Path.GetFileName(file); try { DirectoryOperationsHelper.Copy(file, Path.Combine(sftpFailedFolder, failedFileName)); } catch (Exception ex) { _logger.Error(string.Format("Copying faield file not succeed for {0}. \nException Message: {1}\n\tStackTrace:{2}", failedFileName, ex.Message, ex.StackTrace)); } } _logger.Info("All failed files copied at " + sftpFailedFolder + " location."); } catch (Exception ex) { _logger.Error(string.Format("Exception occurred during copying failed file at SFTP. \nException Message: {0}\n\tStackTrace:{1}", ex.Message, ex.StackTrace)); return; } } catch (Exception ex) { _logger.Error(string.Format("Exception occurred during execution of servcie. \nException Message: {0}\n\tStackTrace:{1}", ex.Message, ex.StackTrace)); return; } }