public void PollForDiagnosisReportParsing()
        {
            var outboundUploads = _outboundUploadRepository.GetAllUploadedFilesByType((long)OutboundUploadType.DiagnosisReport);

            if (outboundUploads == null || !outboundUploads.Any())
            {
                _logger.Info("No new files uploaded.");
                return;
            }

            var accountIds = _accountIds.Split(',');

            foreach (var accountId in accountIds)
            {
                var account = _corporateAccountRepository.GetById(Convert.ToInt32(accountId));

                var fileLocation         = _mediaRepository.GetOutboundUploadMediaFileLocation(account.FolderName, "DiagnosisReport");
                var archivedFileLocation = _mediaRepository.GetOutboundUploadMediaFileLocation(account.FolderName, "DiagnosisReportArchived");

                foreach (var outboundUpload in outboundUploads)
                {
                    try
                    {
                        outboundUpload.StatusId       = (long)OutboundUploadStatus.Parsing;
                        outboundUpload.ParseStartTime = DateTime.Now;
                        _outboundUploadRepository.Save(outboundUpload);

                        var file = _fileRepository.GetById(outboundUpload.FileId);

                        if (!System.IO.File.Exists(fileLocation.PhysicalPath + file.Path))
                        {
                            _logger.Info("File not found : " + fileLocation.PhysicalPath + file.Path);
                            continue;
                        }

                        _logger.Info("Importing File : " + file.Path);

                        var dataTable = _csvReader.CsvToDataTable(fileLocation.PhysicalPath + file.Path, true);

                        if (dataTable == null || dataTable.Rows.IsNullOrEmpty())
                        {
                            _logger.Info("No rows found.");
                            outboundUpload.ParseEndTime = DateTime.Now;
                            outboundUpload.StatusId     = (long)OutboundUploadStatus.Parsed;
                            _outboundUploadRepository.Save(outboundUpload);
                            continue;
                        }

                        var successRows = 0;

                        foreach (DataRow row in dataTable.Rows)
                        {
                            var model = GetPatientDiagnosisModel(row);
                            try
                            {
                                var customerId    = Convert.ToInt64(model.CustomerId);
                                var eventId       = Convert.ToInt64(model.EventId);
                                var eventCustomer = _eventCustomerRepository.Get(eventId, customerId);

                                if (eventCustomer == null)
                                {
                                    _logger.Info("No EventCustomer found for CustomerId : " + model.CustomerId + " and EventId : " + model.EventId);
                                    continue;
                                }

                                var eventCustomerDiagnosis = _diagnosisReportFactory.Create(model, eventCustomer.Id);
                                _eventCustomerDiagnosisRepository.Save(eventCustomerDiagnosis);

                                successRows++;
                            }
                            catch (Exception ex)
                            {
                                _logger.Error(string.Format("While Parsing Diagnosis Report for CustomerId : {0} and EventId : {1} and Icd Code : {2}", model.CustomerId, model.EventId, model.Icd));
                                _logger.Error("Message: " + ex.Message);
                                _logger.Error("Stack Tracke: " + ex.StackTrace);
                            }
                        }

                        outboundUpload.SuccessUploadCount = successRows;
                        outboundUpload.FailedUploadCount  = dataTable.Rows.Count - successRows;
                        outboundUpload.ParseEndTime       = DateTime.Now;
                        outboundUpload.StatusId           = successRows > 0 ? (long)OutboundUploadStatus.Parsed : (long)OutboundUploadStatus.ParseFailed;
                        _outboundUploadRepository.Save(outboundUpload);

                        if (successRows > 1)
                        {
                            System.IO.File.Move(fileLocation.PhysicalPath + file.Path, archivedFileLocation.PhysicalPath + file.Path);
                            ((IFileRepository)_fileRepository).MarkasArchived(file.Id);
                        }
                    }
                    catch (Exception ex)
                    {
                        _logger.Error("While Parsing File.");
                        _logger.Error("Message: " + ex.Message);
                        _logger.Error("Stack Tracke: " + ex.StackTrace);

                        outboundUpload.StatusId = (long)OutboundUploadStatus.ParseFailed;
                        _outboundUploadRepository.Save(outboundUpload);
                    }
                }
            }
        }
        public JsonResult MassAssignment(MassAgentAssignmentEditModel data)
        {
            var model             = new MassAgentAssignmentViewModel();
            var healthPlanId      = data.HealthPlanId;
            var callQueueCategory = data.CallQueueCategory;
            var criteriaId        = data.CriteriaId;
            var callQueue         = new CallQueue();

            if (healthPlanId == null || (healthPlanId.HasValue && healthPlanId.Value == 0))
            {
                return(Json(model.ErrorMessage = "Select healthplan first", JsonRequestBehavior.AllowGet));
            }
            if (!(callQueueCategory == HealthPlanCallQueueCategory.FillEventsHealthPlan ||
                  callQueueCategory == HealthPlanCallQueueCategory.MailRound ||
                  callQueueCategory == HealthPlanCallQueueCategory.LanguageBarrier ||
                  callQueueCategory == HealthPlanCallQueueCategory.AppointmentConfirmation))
            {
                return(Json(model.ErrorMessage = "Select call queue first", JsonRequestBehavior.AllowGet));
            }

            if (Request != null && Request.Files != null && Request.Files.Count > 0 && data.MassAssignmentFile != null)
            {
                HttpPostedFileBase file   = Request.Files[0];
                var uploadDateTime        = DateTime.Now;
                var fileUploadName        = @"MassAgentAssignment_" + uploadDateTime.ToString("yyyyMMddHHmmss") + "_" + _sessionContext.UserSession.CurrentOrganizationRole.OrganizationRoleUserId + ".csv";
                var tempMediaFileLocation = _mediaRepository.GetTempMediaFileLocation();
                var tempPhysicalPath      = tempMediaFileLocation.PhysicalPath;
                var tempFullpath          = tempPhysicalPath + fileUploadName;

                var logFileName = "Failure_" + fileUploadName;
                var logFilePath = tempPhysicalPath + logFileName;

                var fileExtension = file.FileName.Split('.');
                if ((fileExtension.Length >= 2 && fileExtension[fileExtension.Length - 1].ToLower() != "csv") || fileExtension.Length < 2)
                {
                    return(Json(model.ErrorMessage = "File format is not CSV", JsonRequestBehavior.AllowGet));
                }

                try
                {
                    file.SaveAs(tempFullpath);          //save in Temp
                    model.UploadedCsvFileName = fileUploadName;
                }
                catch (Exception)
                {
                    return(Json(model.ErrorMessage = "Internal error occurred", JsonRequestBehavior.AllowGet));
                }

                var massAssignmentTable = _csvReader.ReadWithTextQualifier(tempFullpath);

                if (massAssignmentTable.Rows.Count == 0)
                {
                    return(Json(model.ErrorMessage = "File contains no data", JsonRequestBehavior.AllowGet));
                }

                var columns            = massAssignmentTable.Columns.Cast <DataColumn>().Select(x => x.ColumnName).ToArray();
                var missingColumnNames = CheckAllColumnExist(columns);
                if (!string.IsNullOrEmpty(missingColumnNames))
                {
                    var customString = missingColumnNames
                                       .Replace(MassAgentAssignmentColumns.AgentName, "Agent name")
                                       .Replace(MassAgentAssignmentColumns.EmailId, "Email id")
                                       .Replace(MassAgentAssignmentColumns.StartDate, "Start date")
                                       .Replace(MassAgentAssignmentColumns.EndDate, "End date");

                    return(Json(model.ErrorMessage = "Missing Column Name(s):" + customString, JsonRequestBehavior.AllowGet));
                }

                //parsing HealthPlanId and CallQueueCategory
                if (healthPlanId == null || string.IsNullOrEmpty(callQueueCategory))
                {
                    return(Json(model.ErrorMessage = "Please select healthplan/call queue first", JsonRequestBehavior.AllowGet));
                }

                callQueue = _callQueueRepository.GetCallQueueByCategory(data.CallQueueCategory);

                if (callQueue == null)
                {
                    return(Json(model.ErrorMessage = "Invalid call queue selected", JsonRequestBehavior.AllowGet));
                }

                var       agentDataCollection = new List <CallQueueAssignmentEditModel>();
                DataTable table = _csvReader.CsvToDataTable(tempMediaFileLocation.PhysicalPath + fileUploadName, true);
                if (table.Rows.Count <= 0)
                {
                    return(Json(model.ErrorMessage = "File contains no data", JsonRequestBehavior.AllowGet));
                }

                var failedToParseRecords = new StringBuilder();
                failedToParseRecords.Append(MassAgentAssignmentColumns.AgentName + "," +
                                            MassAgentAssignmentColumns.EmailId + "," +
                                            MassAgentAssignmentColumns.StartDate + "," +
                                            MassAgentAssignmentColumns.EndDate + "," +
                                            "Error Message" + Environment.NewLine);

                foreach (DataRow row in table.Rows)
                {
                    var agentData = new CallQueueAssignmentEditModel();
                    var rowData   = GetMassAssignmentCsvRow(row);
                    var errorRow  = rowData.AgentName + "," +
                                    rowData.EmailId + "," +
                                    rowData.StartDate + "," +
                                    rowData.EndDate;

                    //Email Id
                    if (string.IsNullOrEmpty(rowData.EmailId))
                    {
                        failedToParseRecords.Append(errorRow + "," + "No Email Provided" + Environment.NewLine);
                        continue;
                    }
                    //StartDate empty
                    if (string.IsNullOrEmpty(rowData.StartDate))
                    {
                        failedToParseRecords.Append(errorRow + "," + "Start date not provided" + Environment.NewLine);
                        continue;
                    }
                    //Start Date Convert
                    try
                    {
                        var startDate = Convert.ToDateTime(rowData.StartDate);

                        if (!(startDate >= DateTime.Today))
                        {
                            failedToParseRecords.Append(errorRow + "," + "Start date must be greater than or equal to current date" + Environment.NewLine);
                            continue;
                        }

                        agentData.StartDate = startDate;
                    }
                    catch (Exception)
                    {
                        failedToParseRecords.Append(errorRow + "," + "Start date invalid format" + Environment.NewLine);
                        continue;
                    }
                    //EndDate
                    if (!string.IsNullOrEmpty(rowData.EndDate))
                    {
                        try
                        {
                            var endDate = Convert.ToDateTime(rowData.EndDate);

                            if (!(endDate >= agentData.StartDate))
                            {
                                failedToParseRecords.Append(errorRow + "," + "End date should be greater than or equal to start date." + Environment.NewLine);
                                continue;
                            }
                            agentData.EndDate = endDate;
                        }
                        catch (Exception)
                        {
                            failedToParseRecords.Append(errorRow + "," + "End date invalid format" + Environment.NewLine);
                            continue;
                        }
                    }
                    else
                    {
                        agentData.EndDate = null;
                    }

                    var oruId = _userRepository.SearchUserByEmailAndRole(rowData.EmailId);
                    if (oruId == null)
                    {
                        failedToParseRecords.Append(errorRow + "," + "Agent not found in our records" + Environment.NewLine);
                        continue;
                    }

                    if (!data.AssignmentsfromUi.IsNullOrEmpty())
                    {
                        if (data.AssignmentsfromUi.Any(x => x.AssignedOrgRoleUserId == oruId))
                        {
                            failedToParseRecords.Append(errorRow + "," + "Agent already added manually" + Environment.NewLine);
                            continue;
                        }
                    }

                    if (agentDataCollection.Any(x => x.AssignedOrgRoleUserId == oruId))
                    {
                        failedToParseRecords.Append(errorRow + "," + "Failed, as record is already present in CSV" + Environment.NewLine);
                        continue;
                    }

                    agentData.AssignedOrgRoleUserId = oruId.Value;
                    agentData.Name = rowData.AgentName;

                    if (criteriaId == null)
                    {
                        criteriaId = 0;
                    }

                    if (callQueueCategory == HealthPlanCallQueueCategory.FillEventsHealthPlan)
                    {
                        agentData.IsExistInOtherCriteria = _healthPlanCallQueueCriteriaRepository.CheckHealthPlanAssignment(healthPlanId.Value,
                                                                                                                            callQueueCategory, criteriaId.Value, agentData.AssignedOrgRoleUserId, agentData.StartDate.Value, agentData.EndDate);

                        if (agentData.IsExistInOtherCriteria)
                        {
                            failedToParseRecords.Append(errorRow + "," + "Start date is overlapping with already assigned date for same health plan and same call queue." + Environment.NewLine);
                            continue;
                        }
                    }
                    else
                    {
                        agentData.IsExistInOtherCriteria = false;
                    }
                    agentData.IsEdited = true;
                    agentDataCollection.Add(agentData);
                }

                if (agentDataCollection.Count < table.Rows.Count) //Some records have failed
                {
                    System.IO.File.AppendAllText(logFilePath, failedToParseRecords.ToString());
                    model.IsRecordsFailed = true;
                    model.LogFileName     = logFileName;
                }
                else
                {
                    model.LogFileName = null;
                }

                model.SuccessAssignments = agentDataCollection;
                model.ErrorMessage       = "";
                return(Json(model, JsonRequestBehavior.AllowGet));
            }
            else
            {
                return(Json(model.ErrorMessage = "No file has been uploaded. Please upload a csv file.", JsonRequestBehavior.AllowGet));
            }
        }
Example #3
0
        public void Parse()
        {
            try
            {
                _logger.Info("Running Loinc Crosswalk");

                if (!DirectoryOperationsHelper.CreateDirectoryIfNotExist(_settings.LoincCrosswalkPath))
                {
                    _logger.Info(string.Format("Folder could not be created. Please check path: {0} ", _settings.LoincCrosswalkPath));
                    return;
                }

                var loincMediaLocation = _mediaRepository.GetLoincMediaLocation();
                var archiveLocation    = _mediaRepository.GetLoincArchiveMediaLocation();

                var loincCrosswalkfiles = DirectoryOperationsHelper.GetFiles(_settings.LoincCrosswalkPath, "*.csv");
                if (loincCrosswalkfiles.IsNullOrEmpty())
                {
                    _logger.Info(string.Format("No csv file found at following location {0}", _settings.LoincCrosswalkPath));
                }
                else
                {
                    UploadLoincFiles(loincCrosswalkfiles, loincMediaLocation.PhysicalPath, (long)OutboundUploadType.LoincCrosswalk);
                }

                var uploadedFiles = _outboundUploadRepository.GetAllUploadedFilesByType((long)OutboundUploadType.LoincCrosswalk);
                if (uploadedFiles.IsNullOrEmpty())
                {
                    _logger.Info("No new files uploaded for Loinc Crosswalk.");
                    return;
                }

                foreach (var uploadedFile in uploadedFiles)
                {
                    try
                    {
                        var file = GetFile(uploadedFile.FileId);

                        if (!System.IO.File.Exists(loincMediaLocation.PhysicalPath + file.Path))
                        {
                            _logger.Info("File not found : " + loincMediaLocation.PhysicalPath + file.Path);
                            continue;
                        }

                        uploadedFile.StatusId       = (long)OutboundUploadStatus.Parsing;
                        uploadedFile.ParseStartTime = DateTime.Now;
                        _outboundUploadRepository.Save(uploadedFile);

                        _logger.Info("Importing File : " + file.Path);

                        var dataTable = _csvReader.CsvToDataTable(loincMediaLocation.PhysicalPath + file.Path, true, ",");

                        var csvStringBuilder = new StringBuilder();
                        csvStringBuilder.Append(LogHeader + Environment.NewLine);

                        long totalRows = 0, successRows = 0;

                        if (dataTable.Rows.Count == 0)
                        {
                            _logger.Info("No records found for file : " + loincMediaLocation.PhysicalPath + file.Path);
                            continue;
                        }
                        foreach (DataRow row in dataTable.Rows)
                        {
                            totalRows++;
                            var model    = GetLoincCrosswalk(row);
                            var errorRow = model.LoincNumber + "," + model.Component + "," + model.System + "," + model.MethodType + "," + model.VersionLastChanged + "," + model.DefinitionDescription + "," + model.Formula + model.Species
                                           + model.ExampleAnswers + "," + model.SurveyQuestionText + "," + model.SurveyQuestionSource + "," + model.UnitsRequired + "," + model.SubmittedUnits + "," + model.CdiscCommonTests + "," + model.Hl7FieldSubfieldId
                                           + model.ExternalCopyrightNotice + model.ExampleUnits + model.LongCommonName;

                            try
                            {
                                if (!model.IsEmpty())
                                {
                                    model.Year        = DateTime.Today.Year;
                                    model.DateCreated = DateTime.Now;
                                    model.UploadId    = uploadedFile.Id;
                                }
                                _loincCrosswalkRepository.Save(model);
                                successRows++;
                            }
                            catch (Exception ex)
                            {
                                _logger.Error(string.Format("Some Error Occurred Message: {0} \n stack Trace: {1}", ex.Message, ex.StackTrace));
                                csvStringBuilder.Append(errorRow + "," + ex.Message + Environment.NewLine);
                            }
                        }

                        if (successRows < totalRows)
                        {
                            var logFileName = file.Path + "_Log.csv";

                            var logFile = SaveLogFile(_settings.LoincCrosswalkPath + logFileName, csvStringBuilder);
                            uploadedFile.LogFileId = logFile.Id;
                        }

                        uploadedFile.SuccessUploadCount = successRows;
                        uploadedFile.FailedUploadCount  = totalRows - successRows;
                        uploadedFile.ParseEndTime       = DateTime.Now;
                        uploadedFile.StatusId           = successRows > 0 ? (long)OutboundUploadStatus.Parsed : (long)OutboundUploadStatus.ParseFailed;
                        _outboundUploadRepository.Save(uploadedFile);

                        if (successRows > 1)
                        {
                            System.IO.File.Move(loincMediaLocation.PhysicalPath + file.Path, archiveLocation.PhysicalPath + file.Path);
                            ((IFileRepository)_fileRepository).MarkasArchived(file.Id);
                        }
                    }
                    catch (Exception ex)
                    {
                        uploadedFile.StatusId = (long)OutboundUploadStatus.ParseFailed;
                        _outboundUploadRepository.Save(uploadedFile);
                        _logger.Error(string.Format("while Parsing File"));
                        _logger.Error("Ex Message" + ex.Message);
                        _logger.Error("Ex Stack Trace " + ex.StackTrace);
                    }
                }
            }
            catch (Exception ex)
            {
                _logger.Error("Error while Parsing Loinc Crosswalk Files.");
                _logger.Error(ex);
            }
        }
Example #4
0
        public void PollForPhoneNumberUpdate()
        {
            _logger.Info("Starting Customer Phone Number Update Service : DateTime :" + DateTime.Now);
            var uploadedFilesInfo = _customerPhoneNumberUpdateUploadRepository.GetUploadedFilesInfo();

            var phoneNumberUpdateFilesLocation = _mediaRepository.GetCustomerPhoneNumberUploadLocation();

            if (uploadedFilesInfo.IsNullOrEmpty())
            {
                _logger.Info("No new Files Uploaded");
                return;
            }

            foreach (var uploadFileInfo in uploadedFilesInfo)    //parsing all Uploaded Status Files
            {
                var failedRecords = new StringBuilder();
                failedRecords.Append(LogHeader + Environment.NewLine);
                var successCount = 0L;

                try
                {
                    var fileInfo = GetFile(uploadFileInfo.FileId);
                    if (!System.IO.File.Exists(phoneNumberUpdateFilesLocation.PhysicalPath + fileInfo.Path))
                    {
                        uploadFileInfo.StatusId = (long)PhoneNumberUploadStatus.FileNotFound;
                        _customerPhoneNumberUpdateUploadRepository.Save(uploadFileInfo);

                        _logger.Info("File not found : " + phoneNumberUpdateFilesLocation.PhysicalPath + fileInfo.Path);
                        continue;
                    }
                    _logger.Info("Importing File : " + fileInfo.Path);

                    uploadFileInfo.StatusId       = (long)PhoneNumberUploadStatus.Parsing;
                    uploadFileInfo.ParseStartTime = DateTime.Now;
                    _customerPhoneNumberUpdateUploadRepository.Save(uploadFileInfo);

                    DataTable table = _csvReader.CsvToDataTable(phoneNumberUpdateFilesLocation.PhysicalPath + fileInfo.Path, true);

                    if (table.Rows.Count <= 0)
                    {
                        _logger.Info("No rows found in File : " + fileInfo.Path + " having FileId :" + uploadFileInfo.FileId);
                        uploadFileInfo.ParseEndTime = DateTime.Now;

                        uploadFileInfo.StatusId = (long)PhoneNumberUploadStatus.ParseFailed;
                        _customerPhoneNumberUpdateUploadRepository.Save(uploadFileInfo);
                        continue;
                    }

                    foreach (DataRow row in table.Rows)         //Parsing Records in File
                    {
                        var errorRow             = "";
                        var phoneNumberUploadLog = new CustomerPhoneNumberUpdateUploadLog();
                        try
                        {
                            var  customerId           = 0L;
                            var  phoneNumber          = "";
                            var  phoneNumberType      = "";
                            var  phoneNumberDomain    = new PhoneNumber();
                            var  customer             = new Customer();
                            bool isCustomerIdProvided = false;

                            var model = GetPhoneNumberUpdateLogModel(row);
                            errorRow = model.CustomerId + "," +
                                       model.FirstName + "," +
                                       model.LastName + "," +
                                       model.DOB + "," +
                                       model.MemberId + "," +
                                       model.PhoneNumber + "," +
                                       model.PhoneType;

                            GetFileRowForLog(phoneNumberUploadLog, model, uploadFileInfo.Id);

                            #region CustomerId
                            try                 //CustomerId
                            {
                                if (!string.IsNullOrEmpty(model.CustomerId))
                                {
                                    Int64.TryParse(model.CustomerId, out customerId);
                                    if (customerId == 0)
                                    {
                                        const string errorMessage = "Invalid Customer Id";
                                        SaveUploadLogToDb(phoneNumberUploadLog, errorMessage);

                                        failedRecords.Append(errorRow + "," + errorMessage + Environment.NewLine);
                                        continue;
                                    }
                                    isCustomerIdProvided = true;
                                }
                            }
                            catch (Exception ex)
                            {
                                const string errorMessage = "Error importing CustomerId";
                                SaveUploadLogToDb(phoneNumberUploadLog, errorMessage + " Exception Message: " + ex.Message);

                                _logger.Error(errorMessage);
                                _logger.Error("Message: " + ex.Message + "\nStack Trace; " + ex.StackTrace);
                                failedRecords.Append(errorRow + "," + "CustomerId Invalid" + Environment.NewLine);
                                continue;
                            }
                            #endregion

                            if (!isCustomerIdProvided)
                            {
                                if (string.IsNullOrEmpty(model.FirstName) || string.IsNullOrEmpty(model.LastName) ||
                                    string.IsNullOrEmpty(model.DOB) || string.IsNullOrEmpty(model.MemberId))
                                {
                                    const string errorMessage = "Incomplete customer data.";
                                    SaveUploadLogToDb(phoneNumberUploadLog, errorMessage);

                                    failedRecords.Append(errorRow + "," + errorMessage + Environment.NewLine);
                                    continue;
                                }
                            }

                            #region PhoneNumber
                            try                 //PhoneNumber
                            {
                                phoneNumber = ToNumber(model.PhoneNumber);
                                if (string.IsNullOrEmpty(phoneNumber))
                                {
                                    const string errorMessage = "Invalid phone number";
                                    SaveUploadLogToDb(phoneNumberUploadLog, errorMessage);

                                    failedRecords.Append(errorRow + "," + errorMessage + Environment.NewLine);
                                    continue;
                                }
                            }
                            catch (Exception ex)
                            {
                                const string errorMessage = "Error importing PhoneNumber";
                                SaveUploadLogToDb(phoneNumberUploadLog, errorMessage + " Exception Message: " + ex.Message);

                                failedRecords.Append(errorRow + "," + "Invalid Phone Number" + Environment.NewLine);

                                _logger.Error(errorMessage);
                                _logger.Error("Message: " + ex.Message + "\nStack Trace; " + ex.StackTrace);
                                continue;
                            }

                            #endregion

                            #region PhoneNumberType
                            try                 //Phone Type (requirement was for only Home and Cell phone numbers)
                            {
                                phoneNumberType = model.PhoneType;
                                if (string.IsNullOrEmpty(phoneNumberType))
                                {
                                    const string errorMessage = "Phone type should be Home or Cell";
                                    SaveUploadLogToDb(phoneNumberUploadLog, errorMessage);

                                    failedRecords.Append(errorRow + "," + errorMessage + Environment.NewLine);
                                    continue;
                                }

                                if (phoneNumberType.ToLower() != _phoneTypeHome.ToLower() && phoneNumberType.ToLower() != _phoneTypeCell.ToLower())
                                {
                                    const string errorMessage = "Phone type should be Home or Cell";
                                    SaveUploadLogToDb(phoneNumberUploadLog, errorMessage);

                                    failedRecords.Append(errorRow + "," + errorMessage + Environment.NewLine);
                                    continue;
                                }
                            }
                            catch (Exception ex)
                            {
                                const string errorMessage = "Error importing PhoneType";
                                SaveUploadLogToDb(phoneNumberUploadLog, errorMessage + " Exception Message: " + ex.Message);

                                failedRecords.Append(errorRow + "," + "Phone type should be Home or Cell" + Environment.NewLine);

                                _logger.Error(errorMessage);
                                _logger.Error("Message: " + ex.Message + "\nStack Trace; " + ex.StackTrace);
                                continue;
                            }

                            #endregion

                            #region CreatePhoneNumber
                            // Creating Phone Number
                            try
                            {
                                var phoneNumberTypeEnumValue = (phoneNumberType.ToLower() == _phoneTypeHome.ToLower()) ? PhoneNumberType.Home : PhoneNumberType.Mobile;
                                phoneNumberDomain = _phoneNumberFactory.CreatePhoneNumber(phoneNumber, phoneNumberTypeEnumValue);

                                if (phoneNumberDomain.PhoneNumberType == PhoneNumberType.Unknown)
                                {
                                    const string errorMessage = "Phone number not valid";
                                    SaveUploadLogToDb(phoneNumberUploadLog, errorMessage);

                                    failedRecords.Append(errorRow + "," + errorMessage + Environment.NewLine);
                                    continue;
                                }
                            }
                            catch (Exception ex)
                            {
                                const string errorMessage = "Error while Creating PhoneNumberDomain";
                                SaveUploadLogToDb(phoneNumberUploadLog, errorMessage + " Exception Message: " + ex.Message);

                                failedRecords.Append(errorRow + "," + "Phone number not valid" + Environment.NewLine);

                                _logger.Error(errorMessage);
                                _logger.Error("Message: " + ex.Message + "\nStack Trace; " + ex.StackTrace);
                                continue;
                            }

                            #endregion

                            #region Get Customer
                            try
                            {
                                var dob = new DateTime();
                                if (isCustomerIdProvided)
                                {
                                    customer = _customerRepository.GetCustomer(customerId);
                                }
                                else
                                {
                                    try
                                    {
                                        dob = Convert.ToDateTime(model.DOB);
                                    }
                                    catch (Exception ex)
                                    {
                                        const string errorMessage = "Invalid date format";
                                        SaveUploadLogToDb(phoneNumberUploadLog, errorMessage + " Exception Message: " + ex.Message);

                                        failedRecords.Append(errorRow + "," + errorMessage + Environment.NewLine);
                                        continue;
                                    }

                                    try
                                    {
                                        customer = _customerRepository.GetCustomerForPhoneNumberUpdate(model.FirstName, model.LastName, dob, model.MemberId);
                                    }
                                    catch (Exception ex)
                                    {
                                        const string errorMessage = "No record present for this data.";
                                        SaveUploadLogToDb(phoneNumberUploadLog, errorMessage + " Exception Message: " + ex.Message);

                                        failedRecords.Append(errorRow + "," + errorMessage + Environment.NewLine);
                                        continue;
                                    }
                                }
                            }
                            catch (Exception ex)
                            {
                                const string errorMessage = "No record present for this CustomerId";
                                SaveUploadLogToDb(phoneNumberUploadLog, errorMessage + " Exception Message: " + ex.Message);

                                failedRecords.Append(errorRow + "," + errorMessage + Environment.NewLine);
                                continue;
                            }
                            #endregion

                            #region Saving Data
                            try
                            {
                                var shouldSaveNotes = customer.IsIncorrectPhoneNumber;
                                if (phoneNumberType.ToLower() == _phoneTypeHome.ToLower())
                                {
                                    customer.HomePhoneNumber = phoneNumberDomain;
                                }
                                else
                                {
                                    customer.MobilePhoneNumber = phoneNumberDomain;
                                }
                                customer.IsIncorrectPhoneNumber         = false;
                                customer.IncorrectPhoneNumberMarkedDate = null;

                                //saves CustomerProfile and Creates History and Updates CallQueueCustomer
                                _customerService.SaveCustomer(customer, uploadFileInfo.UploadedByOrgRoleUserId);

                                if (shouldSaveNotes)
                                {
                                    _customerNotesService.SavePhoneNumberUpdatedMessage(customer.CustomerId, uploadFileInfo.UploadedByOrgRoleUserId);
                                }

                                SaveUploadLogToDb(phoneNumberUploadLog, "");        //Log Success
                                successCount++;
                            }
                            catch (Exception ex)
                            {
                                const string errorMessage = "Error while saving Details";
                                SaveUploadLogToDb(phoneNumberUploadLog, errorMessage + " Exception Message: " + ex.Message);

                                failedRecords.Append(errorRow + "," + "Save Failed" + Environment.NewLine);

                                _logger.Error(errorMessage);
                                _logger.Error("Message: " + ex.Message + "\nStack Trace; " + ex.StackTrace);
                                continue;
                            }
                            #endregion
                        }
                        catch (Exception ex)
                        {
                            const string errorMessage = "Some Error Occurred";
                            SaveUploadLogToDb(phoneNumberUploadLog, errorMessage + " Exception Message: " + ex.Message);

                            failedRecords.Append(errorRow + "," + "Save Failed" + Environment.NewLine);

                            _logger.Error(errorMessage);
                            _logger.Error("Message: " + ex.Message + "\nStack Trace; " + ex.StackTrace);
                            continue;
                        }
                    }

                    if (successCount < table.Rows.Count)
                    {
                        var logFileName = "FailRecords_" + fileInfo.Path;
                        var logFile     = SaveLogFile(phoneNumberUpdateFilesLocation.PhysicalPath + logFileName, failedRecords);
                        uploadFileInfo.LogFileId = logFile.Id;
                    }

                    uploadFileInfo.SuccessUploadCount = successCount;
                    uploadFileInfo.FailedUploadCount  = table.Rows.Count - successCount;
                    uploadFileInfo.ParseEndTime       = DateTime.Now;
                    uploadFileInfo.StatusId           = successCount > 0 ? (long)PhoneNumberUploadStatus.Parsed : (long)PhoneNumberUploadStatus.ParseFailed;
                    _customerPhoneNumberUpdateUploadRepository.Save(uploadFileInfo);
                }
                catch (Exception ex)
                {
                    uploadFileInfo.StatusId = (long)PhoneNumberUploadStatus.ParseFailed;
                    _customerPhoneNumberUpdateUploadRepository.Save(uploadFileInfo);
                    _logger.Error("Parse Failed while parsing File , FileId:" + uploadFileInfo.FileId);
                    _logger.Error("Ex Message" + ex.Message);
                    _logger.Error("Ex Stack Trace " + ex.StackTrace);
                }
            }
        }