Ejemplo n.º 1
0
        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);
        }
Ejemplo n.º 2
0
        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;
            }
        }