private void GetFileRowForLog(CustomerPhoneNumberUpdateUploadLog phoneNumberUploadLog, CustomerPhoneNumberUpdateUploadLog model, long uploadId) { phoneNumberUploadLog.CustomerId = model.CustomerId; phoneNumberUploadLog.DOB = model.DOB; phoneNumberUploadLog.FirstName = model.FirstName; phoneNumberUploadLog.LastName = model.LastName; phoneNumberUploadLog.MemberId = model.MemberId; phoneNumberUploadLog.PhoneNumber = model.PhoneNumber; phoneNumberUploadLog.PhoneType = model.PhoneType; phoneNumberUploadLog.UploadId = uploadId; phoneNumberUploadLog.IsSuccessful = false; }
public CustomerPhoneNumberUpdateUploadLog Save(CustomerPhoneNumberUpdateUploadLog domain) { using (var adapter = PersistenceLayer.GetDataAccessAdapter()) { CustomerPhoneNumberUpdateUploadLogEntity entity = Mapper.Map <CustomerPhoneNumberUpdateUploadLog, CustomerPhoneNumberUpdateUploadLogEntity>(domain); if (!adapter.SaveEntity(entity, true)) { throw new PersistenceFailureException(); } return(Mapper.Map <CustomerPhoneNumberUpdateUploadLogEntity, CustomerPhoneNumberUpdateUploadLog>(entity)); } }
private void SaveUploadLogToDb(CustomerPhoneNumberUpdateUploadLog domain, string errorMessage) { if (errorMessage == "") { domain.IsSuccessful = true; domain.ErrorMessage = null; } else { domain.ErrorMessage = errorMessage; } _customerPhoneNumberUpdateUploadLogRepository.Save(domain); }
private CustomerPhoneNumberUpdateUploadLog GetPhoneNumberUpdateLogModel(DataRow row) { var model = new CustomerPhoneNumberUpdateUploadLog { CustomerId = GetRowValue(row, PhoneNumberUpdateUploadLogColumn.CustomerId), FirstName = GetRowValue(row, PhoneNumberUpdateUploadLogColumn.FirstName), LastName = GetRowValue(row, PhoneNumberUpdateUploadLogColumn.LastName), DOB = GetRowValue(row, PhoneNumberUpdateUploadLogColumn.DOB), MemberId = GetRowValue(row, PhoneNumberUpdateUploadLogColumn.MemberId), PhoneNumber = GetRowValue(row, PhoneNumberUpdateUploadLogColumn.PhoneNumber), PhoneType = GetRowValue(row, PhoneNumberUpdateUploadLogColumn.PhoneType) }; return(model); }
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); } } }