Beispiel #1
0
 public void SetEmailPreference(EmailPreference preference)
 {
     if (this.EmailPreference != preference.ToFriendlyString())
     {
         this.EmailPreference = preference.ToFriendlyString();
     }
 }
Beispiel #2
0
        public void sortMailingListTest()
        {
            //Arrange
            string[] lines = new string[2];
            lines[0] = "5bc49355-94e3-4dc7-a79f-0da4306760f3|true|true|true";
            lines[1] = "482b077d-a8c4-4385-9e6a-3e8fe0c88b8b|true|false|false";

            EmailPreference myPreference = new EmailPreference();

            myPreference.UserID               = System.Guid.Parse("5bc49355-94e3-4dc7-a79f-0da4306760f3");
            myPreference.IsUnsubscribed       = true;
            myPreference.AllowMarketingEmails = true;
            myPreference.AllowMarketingSMS    = true;

            EmailPreference mySecondPreference = new EmailPreference();

            mySecondPreference.UserID               = System.Guid.Parse("482b077d-a8c4-4385-9e6a-3e8fe0c88b8b");
            mySecondPreference.IsUnsubscribed       = true;
            mySecondPreference.AllowMarketingEmails = false;
            mySecondPreference.AllowMarketingSMS    = false;

            List <EmailPreference> mailingList = new List <EmailPreference>();

            mailingList.Add(myPreference);
            mailingList.Add(mySecondPreference);

            //Act
            List <EmailPreference> sortedList = MailPreferenceHelper.sortMailingList(mailingList);

            //Assert
            Assert.That(sortedList.IndexOf(mySecondPreference).Equals(0));
        }
Beispiel #3
0
        /// <summary>
        /// Executes the specified context.
        /// </summary>
        /// <param name="context">The context.</param>
        public virtual void Execute(IJobExecutionContext context)
        {
            var rockContext   = new RockContext();
            var personService = new PersonService(rockContext);

            var duplicateEmails = personService.Queryable()
                                  .GroupBy(p => p.Email)
                                  .Where(p => p.Count() >= 2)
                                  .Select(p => p.Key)
                                  .ToList();

            var duplicateEmailPeople = personService.Queryable().Where(p => duplicateEmails.Contains(p.Email)).ToList();

            foreach (var duplicateEmail in duplicateEmails)
            {
                var             people        = duplicateEmailPeople.Where(p => p.Email == duplicateEmail);
                EmailPreference maxPreference = people.Max(p => p.EmailPreference);

                if (people.Any(p => p.EmailPreference != maxPreference))
                {
                    foreach (var person in people.ToList())
                    {
                        person.EmailPreference = maxPreference;
                    }
                }
            }

            rockContext.SaveChanges();
        }
Beispiel #4
0
 public async Task <IActionResult> Preferences(string id, [Bind("LocalUserID,CaseCreation,CaseAssignment,GroupAssignment,CommentCreation,AttachmentCreation,CaseProcessed,CasesCreatedByUser,CasesAssignedToUser,CasesAssignedToUsersGroups")] EmailPreference pref)
 {
     //pref.LocalUserID = User.Identity.Name;
     if (id != pref.LocalUserID)
     {
         return(NotFound());
     }
     if (ModelState.IsValid)
     {
         try
         {
             _context.Update(pref);
             await _context.SaveChangesAsync();
         }
         catch (DbUpdateConcurrencyException)
         {
             if (!EmailPreferenceExists(pref.LocalUserID))
             {
                 return(NotFound());
             }
             else
             {
                 throw;
             }
         }
         return(RedirectToAction("Details", "LocalUsers", new { id = User.Identity.Name }));
     }
     return(View(pref));
 }
        public async Task <IActionResult> Create([Bind("LocalUserID,FirstName,LastName,EmailID")] LocalUser localUser)
        {
            if (ModelState.IsValid)
            {
                _context.Add(localUser);
                EmailPreference e_pref = new EmailPreference
                {
                    LocalUserID                = localUser.LocalUserID,
                    CaseCreation               = true,
                    CaseAssignment             = true,
                    GroupAssignment            = true,
                    CommentCreation            = true,
                    AttachmentCreation         = true,
                    CaseProcessed              = true,
                    CasesCreatedByUser         = true,
                    CasesAssignedToUser        = false,
                    CasesAssignedToUsersGroups = false
                };
                _context.Add(e_pref);
                await _context.SaveChangesAsync();

                return(RedirectToAction(nameof(Index)));
            }
            return(View(localUser));
        }
Beispiel #6
0
        public static string ToFriendlyString(this EmailPreference me)
        {
            switch (me)
            {
            case EmailPreference.GMAIL:
                return("gmail");

            default:
                return("");
            }
        }
Beispiel #7
0
 public async Task UpdateEmailPreferenceAsync(int accountId, EmailPreference emailPreference)
 {
     await _sqlService
     .ExecuteAsync
     (
         _dickinsonBrosDB.ConnectionString,
         UPDATE_EMAIL_PREFERENCES,
         new
     {
         AccountId       = accountId,
         EmailPreference = emailPreference
     },
         commandType : CommandType.StoredProcedure
     );
 }
Beispiel #8
0
        /// <summary>
        /// Allows for the creation of a mailing list
        /// </summary>
        /// <param name="lines"></param>
        /// <returns></returns>
        public static List <EmailPreference> createMailingList(string[] lines)
        {
            var mailingList = new List <EmailPreference>();

            for (int j = 1; j < lines.Length; j++)
            {
                var col = lines[j].Split('|');
                for (int i = 0; i < col.Length; i += 4)
                {
                    var record = new EmailPreference
                    {
                        UserID               = System.Guid.Parse(col[i]),
                        IsUnsubscribed       = bool.Parse(col[i + 1]),
                        AllowMarketingEmails = bool.Parse(col[i + 2]),
                        AllowMarketingSMS    = bool.Parse(col[i + 3])
                    };
                    mailingList.Add(record);
                }
            }

            return(mailingList);
        }
        /// <summary>
        /// Handles the Click event of the btnSubmit control.
        /// </summary>
        /// <param name="sender">The source of the event.</param>
        /// <param name="e">The <see cref="EventArgs"/> instance containing the event data.</param>
        protected void btnSubmit_Click(object sender, EventArgs e)
        {
            var rockContext = new RockContext();

            nbUnsubscribeSuccessMessage.Visible     = false;
            nbEmailPreferenceSuccessMessage.Visible = false;

            if (rbUnsubscribe.Checked && rbUnsubscribe.Visible)
            {
                bool unsubscribed = UnsubscribeFromLists();

                if (unsubscribed)
                {
                    Guid?workflowGuid = GetAttributeValue(AttributeKey.UnsubscribeWorkflow).AsGuidOrNull();
                    WorkflowTypeCache workflowType = null;
                    var workflowService            = new WorkflowService(rockContext);

                    if (workflowGuid != null)
                    {
                        workflowType = WorkflowTypeCache.Get(workflowGuid.Value);
                    }

                    // Start workflow for this person
                    if (workflowType != null)
                    {
                        Dictionary <string, string> attributes = new Dictionary <string, string>();
                        if (cblUnsubscribeFromLists.SelectedValuesAsInt.Any())
                        {
                            attributes.Add("CommunicationListIds", cblUnsubscribeFromLists.SelectedValues.ToList().AsDelimited(","));
                            StartWorkflow(workflowService, workflowType, attributes, string.Format("{0}", _person.FullName), _person);
                        }
                    }
                }
                return;
            }

            if (rbUpdateEmailAddress.Checked)
            {
                // Though the chance for empty email address is very minimal as client side validation is in place.
                if (string.IsNullOrEmpty(tbEmail.Text))
                {
                    nbEmailPreferenceSuccessMessage.NotificationBoxType = NotificationBoxType.Danger;
                    nbEmailPreferenceSuccessMessage.Text = "Email is required.";
                }
                else
                {
                    UpdateEmail();
                }
                return;
            }

            if (_person != null)
            {
                var personService = new PersonService(rockContext);
                var person        = personService.Get(_person.Id);
                if (person != null)
                {
                    EmailPreference emailPreference = EmailPreference.EmailAllowed;
                    if (rbEmailPreferenceNoMassEmails.Checked)
                    {
                        emailPreference = EmailPreference.NoMassEmails;
                    }
                    if (rbEmailPreferenceDoNotEmail.Checked || rbNotInvolved.Checked)
                    {
                        emailPreference = EmailPreference.DoNotEmail;
                    }

                    person.EmailPreference = emailPreference;

                    if (rbNotInvolved.Checked)
                    {
                        var inactiveReasonDefinedValue  = DefinedValueCache.Get(ddlInactiveReason.SelectedValue.AsInteger());
                        var selfInactivatedDefinedValue = DefinedValueCache.Get(Rock.SystemGuid.DefinedValue.PERSON_REVIEW_REASON_SELF_INACTIVATED);

                        // If the inactive reason note is the same as the current review reason note, update it also.
                        string inactiveReasonNote = (person.InactiveReasonNote ?? string.Empty) == (person.ReviewReasonNote ?? string.Empty)
                            ? tbInactiveNote.Text
                            : person.InactiveReasonNote;

                        // See if inactivating just one person or the whole family
                        if (!cbInactFamily.Checked)
                        {
                            personService.InactivatePerson(person, inactiveReasonDefinedValue, inactiveReasonNote, selfInactivatedDefinedValue, tbInactiveNote.Text);
                        }
                        else
                        {
                            // Update each person
                            var inactivatePersonList = personService.GetFamilyMembers(_person.Id, true).Select(m => m.Person);
                            foreach (var inactivatePerson in inactivatePersonList)
                            {
                                personService.InactivatePerson(inactivatePerson, inactiveReasonDefinedValue, inactiveReasonNote, selfInactivatedDefinedValue, tbInactiveNote.Text);
                            }
                        }
                    }
                    else
                    {
                        var newRecordStatus = DefinedValueCache.Get(Rock.SystemGuid.DefinedValue.PERSON_RECORD_STATUS_ACTIVE);
                        if (newRecordStatus != null)
                        {
                            person.RecordStatusValueId = newRecordStatus.Id;
                        }

                        person.RecordStatusReasonValueId = null;
                    }

                    rockContext.SaveChanges();

                    nbEmailPreferenceSuccessMessage.Visible = true;
                }
            }
        }
        /// <summary>
        /// Handles the Click event of the btnSubmit control.
        /// </summary>
        /// <param name="sender">The source of the event.</param>
        /// <param name="e">The <see cref="EventArgs"/> instance containing the event data.</param>
        protected void btnSubmit_Click(object sender, EventArgs e)
        {
            nbUnsubscribeSuccessMessage.Visible     = false;
            nbEmailPreferenceSuccessMessage.Visible = false;

            if (rbUnsubscribe.Checked && rbUnsubscribe.Visible)
            {
                UnsubscribeFromLists();
                return;
            }

            if (rbUpdateEmailAddress.Checked)
            {
                // Though the chance for empty email address is very minimal as client side validation is in place.
                if (string.IsNullOrEmpty(tbEmail.Text))
                {
                    nbEmailPreferenceSuccessMessage.NotificationBoxType = NotificationBoxType.Danger;
                    nbEmailPreferenceSuccessMessage.Text = "Email is required.";
                }
                else
                {
                    UpdateEmail();
                }
                return;
            }

            if (_person != null)
            {
                var rockContext = new RockContext();
                var service     = new PersonService(rockContext);
                var person      = service.Get(_person.Id);
                if (person != null)
                {
                    EmailPreference emailPreference = EmailPreference.EmailAllowed;
                    if (rbEmailPreferenceNoMassEmails.Checked)
                    {
                        emailPreference = EmailPreference.NoMassEmails;
                    }
                    if (rbEmailPreferenceDoNotEmail.Checked || rbNotInvolved.Checked)
                    {
                        emailPreference = EmailPreference.DoNotEmail;
                    }

                    person.EmailPreference = emailPreference;

                    if (rbNotInvolved.Checked)
                    {
                        var newRecordStatus = DefinedValueCache.Get(Rock.SystemGuid.DefinedValue.PERSON_RECORD_STATUS_INACTIVE);
                        if (newRecordStatus != null)
                        {
                            person.RecordStatusValueId = newRecordStatus.Id;
                        }

                        var newInactiveReason = DefinedValueCache.Get(ddlInactiveReason.SelectedValue.AsInteger());
                        if (newInactiveReason != null)
                        {
                            person.RecordStatusReasonValueId = newInactiveReason.Id;
                        }

                        var newReviewReason = DefinedValueCache.Get(Rock.SystemGuid.DefinedValue.PERSON_REVIEW_REASON_SELF_INACTIVATED);
                        if (newReviewReason != null)
                        {
                            person.ReviewReasonValueId = newReviewReason.Id;
                        }

                        // If the inactive reason note is the same as the current review reason note, update it also.
                        if ((person.InactiveReasonNote ?? string.Empty) == (person.ReviewReasonNote ?? string.Empty))
                        {
                            person.InactiveReasonNote = tbInactiveNote.Text;
                        }

                        person.ReviewReasonNote = tbInactiveNote.Text;
                    }
                    else
                    {
                        var newRecordStatus = DefinedValueCache.Get(Rock.SystemGuid.DefinedValue.PERSON_RECORD_STATUS_ACTIVE);
                        if (newRecordStatus != null)
                        {
                            person.RecordStatusValueId = newRecordStatus.Id;
                        }

                        person.RecordStatusReasonValueId = null;
                    }

                    rockContext.SaveChanges();

                    nbEmailPreferenceSuccessMessage.Visible = true;
                    return;
                }
            }
        }
Beispiel #11
0
        /// <summary>
        /// Handles the Click event of the btnSubmit control.
        /// </summary>
        /// <param name="sender">The source of the event.</param>
        /// <param name="e">The <see cref="EventArgs"/> instance containing the event data.</param>
        protected void btnSubmit_Click(object sender, EventArgs e)
        {
            if (_person != null)
            {
                var changes = new List <string>();

                var rockContext = new RockContext();
                var service     = new PersonService(rockContext);
                var person      = service.Get(_person.Id);
                if (person != null)
                {
                    EmailPreference emailPreference = EmailPreference.EmailAllowed;

                    switch (rblEmailPreference.SelectedValue)
                    {
                    case "1":
                    {
                        emailPreference = EmailPreference.NoMassEmails;
                        break;
                    }

                    case "2":
                    case "3":
                    {
                        emailPreference = EmailPreference.DoNotEmail;
                        break;
                    }
                    }

                    History.EvaluateChange(changes, "Email Preference", person.EmailPreference, emailPreference);
                    person.EmailPreference = emailPreference;

                    if (rblEmailPreference.SelectedValue == "3")
                    {
                        var newRecordStatus = DefinedValueCache.Read(Rock.SystemGuid.DefinedValue.PERSON_RECORD_STATUS_INACTIVE);
                        if (newRecordStatus != null)
                        {
                            History.EvaluateChange(changes, "Record Status", DefinedValueCache.GetName(person.RecordStatusValueId), newRecordStatus.Value);
                            person.RecordStatusValueId = newRecordStatus.Id;
                        }

                        var newInactiveReason = DefinedValueCache.Read(ddlInactiveReason.SelectedValue.AsInteger());
                        if (newInactiveReason != null)
                        {
                            History.EvaluateChange(changes, "Record Status Reason", DefinedValueCache.GetName(person.RecordStatusReasonValueId), newInactiveReason.Value);
                            person.RecordStatusReasonValueId = newInactiveReason.Id;
                        }

                        var newReviewReason = DefinedValueCache.Read(Rock.SystemGuid.DefinedValue.PERSON_REVIEW_REASON_SELF_INACTIVATED);
                        if (newReviewReason != null)
                        {
                            History.EvaluateChange(changes, "Review Reason", DefinedValueCache.GetName(person.ReviewReasonValueId), newReviewReason.Value);
                            person.ReviewReasonValueId = newReviewReason.Id;
                        }

                        // If the inactive reason note is the same as the current review reason note, update it also.
                        if ((person.InactiveReasonNote ?? string.Empty) == (person.ReviewReasonNote ?? string.Empty))
                        {
                            History.EvaluateChange(changes, "Inactive Reason Note", person.InactiveReasonNote, tbInactiveNote.Text);
                            person.InactiveReasonNote = tbInactiveNote.Text;
                        }

                        History.EvaluateChange(changes, "Review Reason Note", person.ReviewReasonNote, tbInactiveNote.Text);
                        person.ReviewReasonNote = tbInactiveNote.Text;
                    }
                    else
                    {
                        var newRecordStatus = DefinedValueCache.Read(Rock.SystemGuid.DefinedValue.PERSON_RECORD_STATUS_ACTIVE);
                        if (newRecordStatus != null)
                        {
                            History.EvaluateChange(changes, "Record Status", DefinedValueCache.GetName(person.RecordStatusValueId), newRecordStatus.Value);
                            person.RecordStatusValueId = newRecordStatus.Id;
                        }

                        History.EvaluateChange(changes, "Record Status Reason", DefinedValueCache.GetName(person.RecordStatusReasonValueId), string.Empty);
                        person.RecordStatusReasonValueId = null;
                    }

                    HistoryService.AddChanges(
                        rockContext,
                        typeof(Person),
                        Rock.SystemGuid.Category.HISTORY_PERSON_DEMOGRAPHIC_CHANGES.AsGuid(),
                        person.Id,
                        changes,
                        CurrentPersonAliasId);

                    rockContext.SaveChanges();

                    nbMessage.Visible = true;
                    return;
                }
            }
        }
 public async Task UpdateEmailPreferenceAsync(int accountId, EmailPreference emailPreference)
 {
     await _accountDBService.UpdateEmailPreferenceAsync(accountId, emailPreference);
 }
        public async Task <UpdateEmailPreferenceWithTokenResult> UpdateEmailPreferenceWithTokenAsync(string emailPreferenceToken, EmailPreference emailPreference)
        {
            var updateEmailPreferenceWithTokenResult = await _accountDBService.UpdateEmailPreferenceWithTokenAsync(emailPreferenceToken, emailPreference);

            if (!updateEmailPreferenceWithTokenResult.VaildToken)
            {
                return(UpdateEmailPreferenceWithTokenResult.InvaildToken);
            }

            return(UpdateEmailPreferenceWithTokenResult.Successful);
        }
Beispiel #14
0
 public async Task <UpdateEmailPreferenceWithTokenDBResult> UpdateEmailPreferenceWithTokenAsync(string emailPreferenceToken, EmailPreference emailPreference)
 {
     return(await _sqlService
            .QueryFirstAsync <UpdateEmailPreferenceWithTokenDBResult>
            (
                _dickinsonBrosDB.ConnectionString,
                UPDATE_EMAIL_PREFERENCES_WITH_TOKEN,
                new
     {
         emailPreferenceToken,
         emailPreference
     },
                commandType : CommandType.StoredProcedure
            ));
 }
Beispiel #15
0
        public async Task <IActionResult> Index()
        {
            var ADemail = User.Identity.Name;
            //Console.WriteLine(ADemail);
            var LocalUserEmail = _context.LocalUser
                                 .FromSqlRaw("SELECT * FROM dbo.LocalUser where LocalUserID={0}", ADemail)
                                 .ToList();
            var c = LocalUserEmail.Count;

            if (c == 0)
            {
                //Console.WriteLine("Creating Local User");
                Graph::GraphServiceClient graphClient = GetGraphServiceClient(new[] { Constants.ScopeUserRead });
                var me = await graphClient.Me.Request().GetAsync() as Microsoft.Graph.User;

                var properties = me.GetType().GetProperties();
                IDictionary <string, string> LocalUserAttributes = new Dictionary <string, string>();

                foreach (var child in properties)
                {
                    object value = child.GetValue(me);
                    string stringRepresentation;
                    if (value is string)
                    {
                        stringRepresentation = value?.ToString();
                    }
                    else
                    {
                        stringRepresentation = "";
                    }

                    if (child.Name == "OnPremisesSamAccountName")
                    {
                        LocalUserAttributes.Add("NetID", stringRepresentation);
                    }
                    else
                    if (child.Name == "GivenName")
                    {
                        LocalUserAttributes.Add("FirstName", stringRepresentation);
                    }
                    else
                    if (child.Name == "Surname")
                    {
                        LocalUserAttributes.Add("LastName", stringRepresentation);
                    }
                    else
                    if (child.Name == "Mail")
                    {
                        LocalUserAttributes.Add("EmailID", stringRepresentation);
                    }
                }
                //ViewData["Me"] = me;
                var CreateUser = new LocalUser {
                    LocalUserID = LocalUserAttributes["EmailID"],
                    FirstName   = LocalUserAttributes["FirstName"],
                    LastName    = LocalUserAttributes["LastName"],
                    EmailID     = LocalUserAttributes["NetID"]
                };
                _context.Add(CreateUser);
                EmailPreference e_pref = new EmailPreference
                {
                    LocalUserID                = CreateUser.LocalUserID,
                    CaseCreation               = true,
                    CaseAssignment             = true,
                    GroupAssignment            = true,
                    CommentCreation            = true,
                    AttachmentCreation         = true,
                    CaseProcessed              = true,
                    CasesCreatedByUser         = true,
                    CasesAssignedToUser        = false,
                    CasesAssignedToUsersGroups = false
                };
                _context.Add(e_pref);
                await _context.SaveChangesAsync();

                /*
                 * Console.WriteLine("Created");
                 * Console.WriteLine(LocalUserAttributes["NetID"]);
                 * Console.WriteLine(LocalUserAttributes["FirstName"]);
                 * Console.WriteLine(LocalUserAttributes["LastName"]);
                 * Console.WriteLine(LocalUserAttributes["EmailID"]);
                 */
            }
            else
            {
                //Console.WriteLine("User Already Exists!");
            }
            // Populate or Check validity of User's group membership

            var UsersLGroups = _context.UserGroup
                               .Where(m => m.LocalUserID == ADemail)
                               .ToList();
            HashSet <string> UsersLocalGroups = new HashSet <string>();

            foreach (var g in UsersLGroups)
            {
                UsersLocalGroups.Add(g.LocalGroupID);
            }
            HashSet <string> UsersRetrievedGroups = new HashSet <string>();

            foreach (var claim in User.Claims)
            {
                if (claim.Type == "groups")
                {
                    UsersRetrievedGroups.Add(claim.Value);
                }
            }
            HashSet <string> AllLocalGroups = new HashSet <string>();
            var AllGroups = _context.LocalGroup.ToList();

            foreach (var g in AllGroups)
            {
                AllLocalGroups.Add(g.LocalGroupID);
            }
            HashSet <string> GroupsToBeAdded   = new HashSet <string>();
            HashSet <string> GroupsToBeRemoved = new HashSet <string>();

            // Check for every groups that is associated with our application (Resolve)
            foreach (var group in AllLocalGroups)
            {
                if (UsersRetrievedGroups.Contains(group))
                {
                    if (UsersLocalGroups.Contains(group))
                    {
                    }
                    else
                    {
                        GroupsToBeAdded.Add(group);
                    }
                }
                else
                {
                    if (UsersLocalGroups.Contains(group))
                    {
                        GroupsToBeRemoved.Add(group);
                    }
                    else
                    {
                    }
                }
            }

            foreach (var g in GroupsToBeAdded)
            {
                var test = new UserGroup {
                    LocalGroupID = g, LocalUserID = ADemail
                };
                _context.Add(test);
            }
            foreach (var g in GroupsToBeRemoved)
            {
                var test = _context.UserGroup.Single(b => b.LocalUserID == ADemail && b.LocalGroupID == g);
                _context.Remove(test);
            }
            await _context.SaveChangesAsync();

            // Cases created by the User(or on behalf of user), assigned to the User, and assigned to the groups to which the User belongs to
            var UCases = await _context.LocalUser
                         // Created by the User
                         .Include(s => s.Cases.Where(p => p.Processed == 0))
                         .ThenInclude(w => w.CaseType)
                         // Including Approvers
                         .Include(s => s.Cases.Where(p => p.Processed == 0))
                         .ThenInclude(w => w.Approvers)
                         .ThenInclude(w => w.LocalUser)
                         // Created on behalf of the User
                         .Include(s => s.OnBehalves.Where(p => p.Case.Processed == 0))
                         .ThenInclude(s => s.Case)
                         .ThenInclude(s => s.CaseType)
                         // Including Approvers
                         .Include(s => s.OnBehalves.Where(p => p.Case.Processed == 0))
                         .ThenInclude(s => s.Case)
                         .ThenInclude(s => s.Approvers)
                         .ThenInclude(w => w.LocalUser)
                         // Assigned to the User
                         .Include(q => q.CasesforApproval.Where(p => p.Case.Processed == 0 && p.Approved == 0))
                         .ThenInclude(q => q.Case)
                         .ThenInclude(q => q.CaseType)
                         // Including Case Creator
                         .Include(q => q.CasesforApproval.Where(p => p.Case.Processed == 0 && p.Approved == 0))
                         .ThenInclude(q => q.Case)
                         .ThenInclude(q => q.LocalUser)
                         // Including Approvers
                         .Include(q => q.CasesforApproval.Where(p => p.Case.Processed == 0 && p.Approved == 0))
                         .ThenInclude(q => q.Case)
                         .ThenInclude(q => q.Approvers)
                         .ThenInclude(w => w.LocalUser)
                         // Assigned to the Groups to which the user belongs to
                         .Include(e => e.UserGroups)
                         .ThenInclude(e => e.LocalGroup)
                         .ThenInclude(e => e.GroupCases.Where(p => p.Case.Processed == 0))
                         .ThenInclude(e => e.Case)
                         .ThenInclude(e => e.CaseType)
                         // Including Case Creator
                         .Include(e => e.UserGroups)
                         .ThenInclude(e => e.LocalGroup)
                         .ThenInclude(e => e.GroupCases.Where(p => p.Case.Processed == 0))
                         .ThenInclude(e => e.Case)
                         .ThenInclude(e => e.LocalUser)
                         // Including Approvers
                         .Include(e => e.UserGroups)
                         .ThenInclude(e => e.LocalGroup)
                         .ThenInclude(e => e.GroupCases.Where(p => p.Case.Processed == 0))
                         .ThenInclude(e => e.Case)
                         .ThenInclude(e => e.Approvers)
                         .ThenInclude(w => w.LocalUser)
                         .Include(e => e.EmailPreference)
                         .FirstOrDefaultAsync(m => m.LocalUserID == ADemail);

            int group_case_count = 0;

            foreach (var item in UCases.UserGroups)
            {
                foreach (var item2 in item.LocalGroup.GroupCases)
                {
                    group_case_count += 1;
                }
            }
            ViewData["group_case_count"] = group_case_count;
            return(View(UCases));
        }
        public int Save(EmailPreference _object)
        {
            int _returnValue = base.Save <EmailPreference>("spAddEditEmailPreference", _object);

            return(_returnValue);
        }