コード例 #1
0
        public void RegisterUser(UserInfoModel user)
        {
            if (!_phoneNumberHelper.IsValidMobileNumber(user.PhoneNumber))
            {
                throw new ArgumentOutOfRangeException($"{user.PhoneNumber} is invalid.");
            }
            var existingUser = Fit2WorkDb.Users
                               .Include("Client")
                               .FirstOrDefault(u => u.ClientId == user.ClientId &&
                                               u.PhoneNumber.Equals(user.PhoneNumber));

            if (existingUser == null)
            {
                throw new ArgumentNullException(
                          $"Failed to find user for client ({user.ClientId}) and phone number ({user.PhoneNumber}).");
            }
            if (existingUser.Client.IsDeleted)
            {
                throw new ArgumentException($"Failed to find active client ({existingUser.ClientId}) for user.");
            }
            user.ClientId       = existingUser.ClientId;
            user.Id             = existingUser.Id;
            user.FirstName      = existingUser.FirstName;
            user.LastName       = existingUser.LastName;
            user.RegisteredDate = existingUser.RegisteredDate = DateTime.UtcNow;
            Fit2WorkDb.SaveChanges();
        }
コード例 #2
0
 public void CreateClient(ClientModel newClient)
 {
     newClient.IsDeleted   = false;
     newClient.CreatedDate = DateTime.UtcNow;
     Fit2WorkDb.Clients.Add(newClient);
     Fit2WorkDb.SaveChanges();
 }
コード例 #3
0
        public void MarkSmsSent(int id)
        {
            var user = Fit2WorkDb.Users.SingleOrDefault(u => u.Id == id);

            user.SmsSentDate = DateTime.UtcNow;
            Fit2WorkDb.SaveChanges();
        }
コード例 #4
0
        public IList <MessageResult> SendMessageToClientUsers(
            ClientModel client,
            List <UserInfoModel> userList,
            Action <string> progress)
        {
            var results     = new List <MessageResult>();
            var messageText = PopulatePlaceHoldersForClient(
                _resourceProvider.UserMessageText, client);

            var downloadMessageText = PopulatePlaceHoldersForDownloadLinks(_resourceProvider.DownloadMessageText);

            progress.Invoke($"Sending SMS :: {messageText} and {downloadMessageText}");
            foreach (var user in userList)
            {
                try {
                    var result = _smsProvider.SendSMS(
                        user.PhoneNumber, messageText);
                    progress.Invoke($"{(result.IsOk ? "SUCCESS" : "FAILED")} :: SMS to {user.PhoneNumber}. " +
                                    $"{(result.Exception == null ? string.Empty : result.Exception.Message)}");

                    _smsProvider.SendSMS(user.PhoneNumber, downloadMessageText);

                    if (result.IsOk)
                    {
                        var dbUser = Fit2WorkDb.Users.SingleOrDefault(u => u.Id == user.Id);
                        dbUser.SmsSentDate = DateTime.UtcNow;
                        Fit2WorkDb.SaveChanges();
                    }
                } catch (Exception ex) {
                    progress.Invoke($"Failed to send SMS to {user.PhoneNumber} : {ex.Message}");
                }
            }
            progress.Invoke($"Sending SMS complete!");
            return(results);
        }
コード例 #5
0
 public ActionResult Edit([Bind(Include = "Id,CultureCode,EmailHeader,EmailFooter," +
                                          "PrimaryEmailSubject,PrimaryEmailBody," +
                                          "SecondaryEmailSubject,SecondaryEmailBody," +
                                          "UserMessageText,UserPrimaryMessageText,UserSecondaryMessageText,DownloadMessageText")]
                          ResourceModel resourceModel)
 {
     if (ModelState.IsValid)
     {
         var resources = Fit2WorkDb.Resources
                         .SingleOrDefault(r => r.Id == resourceModel.Id);
         resources.EmailHeader              = resourceModel.EmailHeader;
         resources.EmailFooter              = resourceModel.EmailFooter;
         resources.PrimaryEmailSubject      = resourceModel.PrimaryEmailSubject;
         resources.PrimaryEmailBody         = resourceModel.PrimaryEmailBody;
         resources.SecondaryEmailSubject    = resourceModel.SecondaryEmailSubject;
         resources.SecondaryEmailBody       = resourceModel.SecondaryEmailBody;
         resources.UserMessageText          = resourceModel.UserMessageText;
         resources.UserPrimaryMessageText   = resourceModel.UserPrimaryMessageText;
         resources.UserSecondaryMessageText = resourceModel.UserSecondaryMessageText;
         resources.DownloadMessageText      = resourceModel.DownloadMessageText;
         Fit2WorkDb.SaveChanges();
         return(RedirectToAction("Index"));
     }
     return(View(resourceModel));
 }
コード例 #6
0
 protected override void Dispose(bool disposing)
 {
     if (disposing)
     {
         Fit2WorkDb.Dispose();
     }
     base.Dispose(disposing);
 }
コード例 #7
0
        public ActionResult DeleteConfirmed(int id)
        {
            ResourceModel resourceModel = Fit2WorkDb.Resources.Find(id);

            Fit2WorkDb.Resources.Remove(resourceModel);
            Fit2WorkDb.SaveChanges();
            return(RedirectToAction("Index"));
        }
コード例 #8
0
        public void SubmitReminderSettings(ReminderSettingsReceiver user)
        {
            UserInfoModel existingUser = Fit2WorkDb.Users.Find(user.UserId);

            existingUser.ReminderSettings            = user.ReminderSettings;
            existingUser.ReminderSettingsUpdatedDate = DateTime.Now;

            Fit2WorkDb.SaveChanges();
        }
コード例 #9
0
 public BaseController()
 {
     Fit2WorkDb       = new Fit2WorkDb();
     ClientService    = new ClientService(Fit2WorkDb);
     UserService      = new UserService(Fit2WorkDb);
     MessageService   = new MessageService(Fit2WorkDb);
     LoggingService   = new LoggingService(Fit2WorkDb);
     ResourceProvider = new ResourceProvider(Fit2WorkDb);
 }
コード例 #10
0
        public ActionResult Create([Bind(Include = "Id,CultureCode,Name,Url")] ResourceUrlModel resourceUrlModel)
        {
            if (ModelState.IsValid)
            {
                Fit2WorkDb.ResourceUrls.Add(resourceUrlModel);
                Fit2WorkDb.SaveChanges();
                return(RedirectToAction("Index"));
            }

            return(View(resourceUrlModel));
        }
コード例 #11
0
        public void DeactivateClient(int clientId)
        {
            var client = Fit2WorkDb.Clients.FirstOrDefault(c => c.Id == clientId);

            if (client == null)
            {
                throw new ApplicationException($"Client ({clientId}) not found.");
            }
            client.IsDeleted = true;
            Fit2WorkDb.SaveChanges();
        }
コード例 #12
0
 public ActionResult Edit([Bind(Include = "Id,CultureCode,Name,Url")] ResourceUrlModel resourceUrlModel)
 {
     if (ModelState.IsValid)
     {
         var resourceUrl = Fit2WorkDb.ResourceUrls
                           .SingleOrDefault(r => r.Id == resourceUrlModel.Id);
         resourceUrl.Name = resourceUrlModel.Name;
         resourceUrl.Url  = resourceUrlModel.Url;
         Fit2WorkDb.SaveChanges();
         return(RedirectToAction("Index"));
     }
     return(View(resourceUrlModel));
 }
コード例 #13
0
        public ActionResult Create([Bind(Include = "Id,CultureCode,EmailHeader,EmailFooter," +
                                                   "PrimaryEmailSubject,PrimaryEmailBody," +
                                                   "SecondaryEmailSubject,SecondaryEmailBody," +
                                                   "UserMessageText,UserPrimaryMessageText,UserSecondaryMessageText")]
                                   ResourceModel resourceModel)
        {
            if (ModelState.IsValid)
            {
                Fit2WorkDb.Resources.Add(resourceModel);
                Fit2WorkDb.SaveChanges();
                return(RedirectToAction("Index"));
            }

            return(View(resourceModel));
        }
コード例 #14
0
        /// <summary>
        /// Createa a new user and returns a string for logging
        /// </summary>
        /// <param name="user"></param>
        /// <param name="saveChangesImmediatly"></param>
        /// <returns></returns>
        public string CreateUser(UserInfoModel user, bool saveChangesImmediatly = true)
        {
            if (!_phoneNumberHelper.IsValidMobileNumber(user.PhoneNumber))
            {
                return($"INVALID, {user.FirstName}, {user.LastName}, {user.PhoneNumber}");
            }

            // Check for existing user (using phone number) as users may be uploaded several times
            var existingUser = Fit2WorkDb.Users
                               .FirstOrDefault(u => u.ClientId == user.ClientId &&
                                               u.PhoneNumber.Equals(user.PhoneNumber));

            if (existingUser != null)
            {
                // Found an existing user - update and save
                user.Id = existingUser.Id;
                existingUser.FirstName   = user.FirstName;
                existingUser.LastName    = user.LastName;
                existingUser.UpdatedDate = user.UpdatedDate = DateTime.UtcNow;
            }
            else
            {
                // Create user for the first time
                user.CreatedDate = DateTime.UtcNow;
                Fit2WorkDb.Users.Add(user);
            }

            if (saveChangesImmediatly)
            {
                Fit2WorkDb.SaveChanges();
            }

            var createdUpdated = existingUser == null ? "CREATED" : "UPDATED";

            return($"{createdUpdated}, {user.FirstName}, {user.LastName}, {user.PhoneNumber}");
        }
コード例 #15
0
        public void UpdateClient(int id, ClientModel client)
        {
            var existingClient = GetClientById(id);

            if (existingClient == null)
            {
                throw new ApplicationException($"Unable to find client ({id})");
            }
            // Check code is unique for the client
            if (Fit2WorkDb.Clients.Any(c =>
                                       c.Id != id &&
                                       c.MemberCode.ToLower().Equals(client.MemberCode.ToLower())))
            {
                throw new ApplicationException(
                          $"Client code ({client.MemberCode}) is not unique.");
            }
            existingClient.Name                  = client.Name;
            existingClient.MemberCode            = client.MemberCode;
            existingClient.PrimaryEmailAddress   = client.PrimaryEmailAddress;
            existingClient.SecondaryEmailAddress = client.SecondaryEmailAddress;
            existingClient.IsDeleted             = client.IsDeleted;
            existingClient.UpdatedDate           = DateTime.UtcNow;
            Fit2WorkDb.SaveChanges();
        }
コード例 #16
0
 private void CreateUserQuestionnaire(UserQuestionnaireModel questionnaire)
 {
     questionnaire.User = Fit2WorkDb.Users.Include("Client")
                          .FirstOrDefault(u => u.Id == questionnaire.UserId);
     if (questionnaire.User == null)
     {
         throw new ApplicationException(
                   $"Failed to find user ({questionnaire.User.Id}) for questionnaire.");
     }
     if (questionnaire.User.Client == null)
     {
         throw new ApplicationException(
                   $"Failed to find client for user ({questionnaire.User.Id}) for questionnaire.");
     }
     questionnaire.Client = questionnaire.User.Client;
     if (questionnaire.User.Client.IsDeleted)
     {
         throw new ApplicationException(
                   $"Failed to find active client ({questionnaire.User.Client.Id}) for questionnaire.");
     }
     questionnaire.CreatedDate = DateTime.UtcNow;
     Fit2WorkDb.UserQuestionnaires.Add(questionnaire);
     Fit2WorkDb.SaveChanges();
 }
コード例 #17
0
        /// <summary>
        /// Import users a given file where client is provided in the file.
        /// Expecting CSV with MemberCode, FirstName, LastName, PhoneNumber.
        /// </summary>
        public void ImportUsers(string file, Action <string> progress)
        {
            // NOTE:  This logs progress for the call method to handle
            // but also internally logs to Fit2WorkDb for ease of viewing by non-dev staff
            var importLog = new StringBuilder();

            importLog.AppendLine($"Importing file :: {file}...");
            var isValid = true; // assume all is good

            try {
                ClientModel client = null;

                using (var reader = _fileSystemService.GetCSVReaderFromPath(file)) {
                    bool first     = true;
                    int  rowNumber = 1;
                    while (!reader.EndOfStream)
                    {
                        var userRow = reader.ReadLine().Split(',');

                        // Ignore header row
                        if (first)
                        {
                            first = false;
                            continue;
                        }

                        if (client == null)
                        {
                            var fileMemberCode = userRow[0];
                            client = Fit2WorkDb.Clients
                                     .FirstOrDefault(c =>
                                                     c.MemberCode.ToUpper().Equals(fileMemberCode.ToUpper()));
                            if (client == null)
                            {
                                throw new ApplicationException(
                                          $"Failed to find client for member code {fileMemberCode}.");
                            }
                        }

                        var user = new UserInfoModel {
                            ClientId    = client.Id,
                            FirstName   = userRow[1],
                            LastName    = userRow[2],
                            PhoneNumber = userRow[3],
                            CreatedDate = DateTime.UtcNow
                        };

                        var logResult = $"Row [{rowNumber}], {CreateUser(user, false)}";

                        if (logResult.Contains("INVALID"))
                        {
                            isValid = false;
                        }

                        importLog.AppendLine(logResult);
                        rowNumber++;
                    }
                }
                Fit2WorkDb.SaveChanges();
            } catch (Exception ex) {
                importLog.AppendLine($"IMPORT FAILED :: {ex}");
                _loggingService.LogError(
                    new ApplicationException($"Import failed for file {file}", ex));
                throw ex;
            } finally {
                if (!isValid)
                {
                    importLog.AppendLine("Import had issues. File contains invalid users");
                }

                importLog.AppendLine($"Import completed!");
                var importLogAsString = importLog.ToString();
                _loggingService.LogMessage($"Import completed for file '{file}'", importLog.ToString());
                progress.Invoke(importLog.ToString());
            }
        }