Example #1
0
 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));
     }
 }
Example #3
0
 private void SaveUploadLogToDb(CustomerPhoneNumberUpdateUploadLog domain, string errorMessage)
 {
     if (errorMessage == "")
     {
         domain.IsSuccessful = true;
         domain.ErrorMessage = null;
     }
     else
     {
         domain.ErrorMessage = errorMessage;
     }
     _customerPhoneNumberUpdateUploadLogRepository.Save(domain);
 }
Example #4
0
        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);
        }
Example #5
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);
                }
            }
        }