/// <summary>
        ///     Populates the group roles.
        /// </summary>
        /// <param name="checkboxList"></param>
        /// <param name="groupTypeGuid"></param>
        private void PopulateRelationshipTypesSelector(RockCheckBoxList checkboxList, Guid?groupTypeGuid)
        {
            bool showSelector = false;

            checkboxList.Items.Clear();

            var groupType = GroupTypeCache.Read(groupTypeGuid.GetValueOrDefault());

            if (groupType != null)
            {
                var selectableRoles = new GroupTypeRoleService(new RockContext()).GetByGroupTypeId(groupType.Id);

                // Exclude the Owner Role from the list of selectable Roles because a Person cannot be related to themselves.
                var ownerGuid = GroupRole.GROUPROLE_KNOWN_RELATIONSHIPS_OWNER.AsGuid();

                selectableRoles = selectableRoles.Where(x => x.Guid != ownerGuid);

                checkboxList.Items.Clear();

                foreach (var item in selectableRoles)
                {
                    checkboxList.Items.Add(new ListItem(item.Name, item.Guid.ToString()));
                }

                showSelector = checkboxList.Items.Count > 0;
            }

            checkboxList.Visible = showSelector;
        }
        /// <summary>
        /// Display Person Attribute on the Basis of Role
        /// </summary>
        /// <param name="selectedId">The id of the selected group identifier.</param>
        private void DisplayPersonAttributeOnRoleType(int?selectedId)
        {
            GroupTypeRoleService groupTypeRoleService = new GroupTypeRoleService(new RockContext());
            List <Guid>          attributeGuidList    = new List <Guid>();
            var adultGuid     = Rock.SystemGuid.GroupRole.GROUPROLE_FAMILY_MEMBER_ADULT.AsGuid();
            var groupTypeGuid = Rock.SystemGuid.GroupType.GROUPTYPE_FAMILY.AsGuid();

            if (selectedId.HasValue)
            {
                if (groupTypeRoleService.Queryable().Where(gr =>
                                                           gr.GroupType.Guid == groupTypeGuid &&
                                                           gr.Guid == adultGuid &&
                                                           gr.Id == selectedId).Any())
                {
                    attributeGuidList      = GetAttributeValue("PersonAttributes(adults)").SplitDelimitedValues().AsGuidList();
                    ddlGradePicker.Visible = false;
                    tbEmail.Required       = GetAttributeValue("RequireAdultEmailAddress").AsBoolean();
                    _IsEditRecordAdult     = true;
                    BindPhoneNumbers();
                }
                else
                {
                    attributeGuidList      = GetAttributeValue("PersonAttributes(children)").SplitDelimitedValues().AsGuidList();
                    ddlGradePicker.Visible = true;
                    tbEmail.Required       = false;
                    _IsEditRecordAdult     = false;
                    BindPhoneNumbers();
                }
            }
        }
        /// <summary>
        /// Formats the selection.
        /// </summary>
        /// <param name="entityType">Type of the entity.</param>
        /// <param name="selection">The selection.</param>
        /// <returns></returns>
        public override string FormatSelection(Type entityType, string selection)
        {
            string result = "Group Member";

            string[] selectionValues = selection.Split('|');
            if (selectionValues.Length >= 2)
            {
                var rockContext = new RockContext();
                var group       = new GroupService(rockContext).Get(selectionValues[0].AsGuid());

                var groupTypeRoleGuidList = selectionValues[1].Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries).Select(a => a.AsGuid()).ToList();

                var groupTypeRoles = new GroupTypeRoleService(rockContext).Queryable().Where(a => groupTypeRoleGuidList.Contains(a.Guid)).ToList();

                if (group != null)
                {
                    result = string.Format("Not in group: {0}", group.Name);
                    if (groupTypeRoles.Count() > 0)
                    {
                        result += string.Format(", with role(s): {0}", groupTypeRoles.Select(a => a.Name).ToList().AsDelimited(","));
                    }
                }
            }

            return(result);
        }
        /// <summary>
        /// Binds the contact list grid.
        /// </summary>
        /// <param name="business">The business.</param>
        private void BindContactListGrid(Person business)
        {
            // Load up that contact list.
            var rockContext           = new RockContext();
            var personService         = new PersonService(rockContext);
            int?businessContactRoleId = new GroupTypeRoleService(rockContext).Queryable()
                                        .Where(r =>
                                               r.Guid.Equals(new Guid(Rock.SystemGuid.GroupRole.GROUPROLE_KNOWN_RELATIONSHIPS_BUSINESS_CONTACT)))
                                        .Select(r => r.Id)
                                        .FirstOrDefault();

            // I want a list of people that are connected to this business/person by the business contact relationship
            List <GroupMember> contactList = new List <GroupMember>();

            if (business.GivingGroup != null)
            {
                contactList = business.GivingGroup.Members.Where(g => g.GroupRoleId == businessContactRoleId).ToList();
                List <Person> personList = new List <Person>();
                foreach (var contact in contactList)
                {
                    personList.Add(contact.Person);
                }

                gContactList.DataSource = personList;
                gContactList.DataBind();
            }
            else
            {
                gContactList.Visible = false;
            }
        }
Example #5
0
        private List <Group> LoadGroups(Guid?groupGuid)
        {
            var groupRole = new GroupTypeRoleService(_rockContext).Get(GetAttributeValue("GroupRole").AsGuid());

            if (groupRole == null)
            {
                return(new List <Group>());
            }
            var groupService            = new GroupService(_rockContext);
            IQueryable <Group> groupQry = groupService.Queryable("GroupLocations.Location");

            //Sort by group parent if option set
            if (groupGuid != null)
            {
                var availableGroupIds = (List <int>)GetCacheItem(groupGuid.ToString());

                if (availableGroupIds == null || !availableGroupIds.Any())
                {
                    availableGroupIds = GetChildGroups(groupGuid ?? new Guid(), groupService).Select(g => g.Id).ToList();
                    AddCacheItem(groupGuid.ToString(), availableGroupIds);
                }

                groupQry = groupQry.Where(g => g.GroupTypeId == _groupType.Id && availableGroupIds.Contains(g.Id));
            }
            else
            {
                //else just get the available groups of type
                groupQry = groupQry.Where(g => g.IsActive && g.GroupTypeId == _groupType.Id);
            }

            return(groupQry.Where(g => g.Members.Where(gm => gm.GroupRoleId == groupRole.Id && gm.PersonId == _person.Id).Any()).ToList());
        }
        protected void rblRole_SelectedIndexChanged(object sender, EventArgs e)
        {
            GroupTypeRoleService groupTypeRoleService = new GroupTypeRoleService(new RockContext());
            List <Guid>          attributeGuidList    = new List <Guid>();
            var adultGuid     = Rock.SystemGuid.GroupRole.GROUPROLE_FAMILY_MEMBER_ADULT.AsGuid();
            var groupTypeGuid = Rock.SystemGuid.GroupType.GROUPTYPE_FAMILY.AsGuid();
            var selectedId    = rblRole.SelectedValueAsId();

            if (selectedId.HasValue)
            {
                if (groupTypeRoleService.Queryable().Where(gr =>
                                                           gr.GroupType.Guid == groupTypeGuid &&
                                                           gr.Guid == adultGuid &&
                                                           gr.Id == selectedId).Any())
                {
                    ddlGradePicker.Visible = false;
                    tbEmail.Required       = true;
                }
                else
                {
                    ddlGradePicker.Visible = true;
                    tbEmail.Required       = false;
                }
            }
        }
        /// <summary>
        /// Adds the person as group member.
        /// </summary>
        /// <param name="person">The person.</param>
        /// <param name="rockContext">The rock context.</param>
        private void AddPersonAsGroupMember(Person person, RockContext rockContext)
        {
            GroupMemberService groupMemberService = new GroupMemberService(rockContext);
            GroupTypeRole      role = new GroupTypeRoleService(rockContext).Get(_group.GroupType.DefaultGroupRoleId ?? 0);

            var groupMember = new GroupMember {
                Id = 0
            };

            groupMember.GroupId = _group.Id;

            // check to see if the person is already a member of the group/role
            var existingGroupMember = groupMemberService.GetByGroupIdAndPersonIdAndGroupRoleId(_group.Id, person.Id, _group.GroupType.DefaultGroupRoleId ?? 0);

            if (existingGroupMember != null)
            {
                return;
            }

            groupMember.PersonId          = person.Id;
            groupMember.GroupRoleId       = role.Id;
            groupMember.GroupMemberStatus = GroupMemberStatus.Active;

            if (groupMember.Id.Equals(0))
            {
                groupMemberService.Add(groupMember);
            }

            rockContext.SaveChanges();
        }
Example #8
0
        /// <summary>
        /// Gets the edit value as the IEntity.Id
        /// </summary>
        /// <param name="control">The control.</param>
        /// <param name="configurationValues">The configuration values.</param>
        /// <returns></returns>
        public int?GetEditValueAsEntityId(Control control, Dictionary <string, ConfigurationValue> configurationValues)
        {
            Guid guid = GetEditValue(control, configurationValues).AsGuid();
            var  item = new GroupTypeRoleService(new RockContext()).Get(guid);

            return(item != null ? item.Id : (int?)null);
        }
Example #9
0
        private Group CreateTestGroup(RockContext rockContext, ElevatedSecurityLevel elevatedSecurityLevel)
        {
            var groupGuid     = Guid.NewGuid();
            var groupTypeGuid = Guid.NewGuid();

            var group = new Group
            {
                Name                  = $"Test Group {groupGuid}",
                IsSecurityRole        = true,
                Guid                  = groupGuid,
                ElevatedSecurityLevel = elevatedSecurityLevel,
                GroupType             = new GroupType
                {
                    Name = $"Test Group Type {groupTypeGuid}",
                    Guid = groupTypeGuid,
                },
            };

            var groupService = new GroupService(rockContext);

            groupService.Add(group);
            rockContext.SaveChanges();

            var groupTypeRole = new GroupTypeRole
            {
                Name        = "Test Role",
                GroupTypeId = group.GroupTypeId
            };
            var groupTypeRoleService = new GroupTypeRoleService(rockContext);

            groupTypeRoleService.Add(groupTypeRole);
            rockContext.SaveChanges();

            return(group);
        }
        /// <summary>
        /// Handles the SaveClick event of the mdAddContact control.
        /// </summary>
        /// <param name="sender">The source of the event.</param>
        /// <param name="e">The <see cref="EventArgs"/> instance containing the event data.</param>
        private void mdAddContact_SaveClick(object sender, EventArgs e)
        {
            var rockContext   = new RockContext();
            var personService = new PersonService(rockContext);
            var business      = personService.Get(int.Parse(hfBusinessId.Value));
            var contactId     = (int)ppContact.PersonId;

            if (contactId > 0)
            {
                int?businessContactRoleId = new GroupTypeRoleService(rockContext).Queryable()
                                            .Where(r =>
                                                   r.Guid.Equals(new Guid(Rock.SystemGuid.GroupRole.GROUPROLE_KNOWN_RELATIONSHIPS_BUSINESS_CONTACT)))
                                            .Select(r => r.Id)
                                            .FirstOrDefault();
                var groupMember = business.GivingGroup.Members.Where(role => role.GroupRoleId == businessContactRoleId).FirstOrDefault();
                if (groupMember == null)
                {
                    groupMember = new GroupMember();
                    business.GivingGroup.Members.Add(groupMember);
                }

                groupMember.Person            = personService.Get((int)ppContact.PersonId);
                groupMember.GroupRoleId       = (int)businessContactRoleId;
                groupMember.GroupMemberStatus = GroupMemberStatus.Active;

                rockContext.SaveChanges();
            }

            mdAddContact.Hide();
            hfModalOpen.Value = string.Empty;
            BindContactListGrid(business);
        }
Example #11
0
        /// <summary>
        /// Sets the edit value from IEntity.Id value
        /// </summary>
        /// <param name="control">The control.</param>
        /// <param name="configurationValues">The configuration values.</param>
        /// <param name="id">The identifier.</param>
        public void SetEditValueFromEntityId(Control control, Dictionary <string, ConfigurationValue> configurationValues, int?id)
        {
            var    item      = new GroupTypeRoleService(new RockContext()).Get(id ?? 0);
            string guidValue = item != null?item.Guid.ToString() : string.Empty;

            SetEditValue(control, configurationValues, guidValue);
        }
Example #12
0
        /// <summary>
        /// Raises the <see cref="E:System.Web.UI.Control.Init" /> event.
        /// </summary>
        /// <param name="e">An <see cref="T:System.EventArgs" /> object that contains the event data.</param>
        protected override void OnInit(EventArgs e)
        {
            base.OnInit(e);

            var campusi = new CampusService().Queryable().OrderBy(a => a.Name).ToList();

            cpCampus.Campuses = campusi;
            cpCampus.Visible  = campusi.Any();

            var childRole = new GroupTypeRoleService().Get(new Guid(Rock.SystemGuid.GroupRole.GROUPROLE_FAMILY_MEMBER_CHILD));

            if (childRole != null)
            {
                _childRoleId = childRole.Id;
            }

            bool.TryParse(GetAttributeValue("Gender"), out _requireGender);
            bool.TryParse(GetAttributeValue("Grade"), out _requireGrade);

            bool showNickName = false;

            nfmMembers.ShowNickName = bool.TryParse(GetAttributeValue("NickName"), out showNickName) && showNickName;

            lTitle.Text = ("Add Family").FormatAsHtmlTitle();
        }
Example #13
0
        /// <summary>
        /// Raises the <see cref="E:System.Web.UI.Control.Init" /> event.
        /// </summary>
        /// <param name="e">An <see cref="T:System.EventArgs" /> object that contains the event data.</param>
        protected override void OnInit(EventArgs e)
        {
            base.OnInit(e);

            // this event gets fired after block settings are updated. it's nice to repaint the screen if these settings would alter it
            this.BlockUpdated += Block_BlockUpdated;
            this.AddConfigurationUpdateTrigger(upnlContent);

            canCheckInOnly = GetAttributeValue("CanCheckInOnly").AsBoolean();
            ownerRoleGuid  = GetAttributeValue("GroupType/RoleFilter").AsGuidOrNull() ?? Guid.Empty;

            // The 'owner' of the group is determined by built-in KnownRelationshipsOwner role or the role that is marked as IsLeader for the group
            var ownerRole = new GroupTypeRoleService(new RockContext()).Get(ownerRoleGuid);

            if (ownerRole != null)
            {
                ownerRole.LoadAttributes();
                IsInverseRelationshipsOwner = ownerRole.Attributes.ContainsKey("InverseRelationship") &&
                                              (ownerRole.Guid.Equals(Rock.SystemGuid.GroupRole.GROUPROLE_KNOWN_RELATIONSHIPS_OWNER.AsGuid()) || ownerRole.IsLeader);
            }
            else
            {
                IsInverseRelationshipsOwner = false;
            }
        }
Example #14
0
        /// <summary>
        /// Formats the selection.
        /// </summary>
        /// <param name="entityType">Type of the entity.</param>
        /// <param name="selection">The selection.</param>
        /// <returns></returns>
        public override string FormatSelection(Type entityType, string selection)
        {
            string result = "Group Member";

            string[] selectionValues = selection.Split('|');
            if (selectionValues.Length >= 2)
            {
                var groupType = Rock.Web.Cache.GroupTypeCache.Read(selectionValues[0].AsInteger() ?? 0);

                var groupTypeRoleIdList = selectionValues[1].Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries).Select(a => a.AsInteger()).ToList();

                var groupTypeRoles = new GroupTypeRoleService().Queryable().Where(a => groupTypeRoleIdList.Contains(a.Id)).ToList();

                if (groupType != null)
                {
                    result = string.Format("In group of group type: {0}", groupType.Name);
                    if (groupTypeRoles.Count() > 0)
                    {
                        result += string.Format(", with role(s): {0}", groupTypeRoles.Select(a => a.Name).ToList().AsDelimited(","));
                    }
                }
            }

            return(result);
        }
        /// <summary>
        /// Gets the people a person is related to
        /// </summary>
        /// <param name="context"></param>
        /// <param name="input"></param>
        /// <param name="relationshipTypeName">The relationship name you're search for</param>
        /// <returns></returns>
        public static List <Person> Relationship(DotLiquid.Context context, object input, string relationshipTypeName)
        {
            Person person      = null;
            var    rockContext = new RockContext();

            if (input is int)
            {
                person = new PersonService(rockContext).Get(( int )input);
            }
            else if (input is Person)
            {
                person = ( Person )input;
            }

            if (person != null)
            {
                var relationshipType = new GroupTypeRoleService(rockContext).GetByGroupTypeId(GroupTypeCache.Read(Rock.SystemGuid.GroupType.GROUPTYPE_KNOWN_RELATIONSHIPS.AsGuid()).Id).FirstOrDefault(r => relationshipTypeName == r.Name);
                if (relationshipType != null)
                {
                    var relatedPersons = new GroupMemberService(rockContext).GetKnownRelationship(person.Id, relationshipType.Id);
                    return(relatedPersons.Select(p => p.Person).ToList());
                }
            }

            return(new List <Person>());
        }
Example #16
0
        /// <summary>
        /// Gets the recipient person identifier expression.
        /// </summary>
        /// <param name="dbContext">The database context.</param>
        /// <param name="entityIdProperty">The entity identifier property.</param>
        /// <param name="selection">The selection.</param>
        /// <returns></returns>
        public Expression GetRecipientPersonIdExpression(System.Data.Entity.DbContext dbContext, MemberExpression entityIdProperty, string selection)
        {
            var rockContext = dbContext as RockContext;

            if (rockContext != null)
            {
                var qryGroupService = new GroupService(rockContext).Queryable();

                Expression <Func <Rock.Model.GroupMember, bool> > memberWhereGroupType  = a => 1 == 1;
                Expression <Func <Rock.Model.GroupMember, bool> > memberWhereGroupRoles = a => 1 == 1;
                Expression <Func <Rock.Model.GroupMember, bool> > memberWhereStatus     = a => 1 == 1;

                string[] selectionValues = selection.Split('|');
                if (selectionValues.Length >= 3)
                {
                    GroupMemberService groupMemberService = new GroupMemberService(rockContext);
                    int?groupTypeId = null;

                    Guid groupTypeGuid = selectionValues[1].AsGuid();

                    var groupType = GroupTypeCache.Get(groupTypeGuid);
                    if (groupType != null)
                    {
                        groupTypeId = groupType.Id;
                    }

                    if (groupTypeId.HasValue)
                    {
                        memberWhereGroupType = xx => xx.Group.GroupTypeId == groupTypeId;
                    }

                    var        groupRoleGuids = selectionValues[2].Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries).Select(n => n.AsGuid()).ToList();
                    List <int> groupRoleIds   = null;
                    if (groupRoleGuids.Count() > 0)
                    {
                        groupRoleIds          = new GroupTypeRoleService(rockContext).Queryable().Where(a => groupRoleGuids.Contains(a.Guid)).Select(a => a.Id).ToList();
                        memberWhereGroupRoles = xx => groupRoleIds.Contains(xx.GroupRoleId);
                    }

                    GroupMemberStatus?groupMemberStatus = selectionValues[3].ConvertToEnumOrNull <GroupMemberStatus>();

                    if (groupMemberStatus.HasValue)
                    {
                        memberWhereStatus = xx => xx.GroupMemberStatus == groupMemberStatus.Value;
                    }
                }

                var memberListQuery = qryGroupService.Select(p => p.Members.AsQueryable()
                                                             .Where(memberWhereGroupType)
                                                             .Where(memberWhereGroupRoles)
                                                             .Where(memberWhereStatus)
                                                             .Select(m => m.PersonId));

                var selectChildrenExpression = SelectExpressionExtractor.Extract(memberListQuery, entityIdProperty, "p");

                return(selectChildrenExpression);
            }

            return(null);
        }
        /// <summary>
        /// Returns a person's consolidator if they have one
        /// </summary>
        /// <param name="followUp"></param>
        /// <param name="rockContext"></param>
        /// <returns></returns>
        public static Person GetConsolidator(this Person followUp, RockContext rockContext)
        {
            var groupMemberService = new GroupMemberService(rockContext);
            var consolidatedBy     = new GroupTypeRoleService(rockContext).Get(SystemGuid.GroupTypeRole.CONSOLIDATED_BY.AsGuid());

            return(groupMemberService.GetKnownRelationship(followUp.Id, consolidatedBy.Id).FirstOrDefault()?.Person);
        }
Example #18
0
        /// <summary>
        /// Gets the expression.
        /// </summary>
        /// <param name="context">The context.</param>
        /// <param name="entityIdProperty">The entity identifier property.</param>
        /// <param name="selection">The selection.</param>
        /// <returns></returns>
        public override Expression GetExpression(RockContext context, MemberExpression entityIdProperty, string selection)
        {
            var qryGroupService = new GroupService(context).Queryable();

            Expression <Func <Rock.Model.GroupMember, bool> > memberWhereGroupType  = a => 1 == 1;
            Expression <Func <Rock.Model.GroupMember, bool> > memberWhereGroupRoles = a => 1 == 1;
            Expression <Func <Rock.Model.GroupMember, bool> > memberWhereStatus     = a => 1 == 1;

            string[] selectionValues = selection.Split('|');
            if (selectionValues.Length >= 3)
            {
                GroupMemberService groupMemberService = new GroupMemberService(context);
                int?groupTypeId = null;

                Guid groupTypeGuid = selectionValues[1].AsGuid();

                var groupType = GroupTypeCache.Get(groupTypeGuid);
                if (groupType != null)
                {
                    groupTypeId = groupType.Id;
                }

                if (groupTypeId.HasValue)
                {
                    memberWhereGroupType = xx => xx.Group.GroupTypeId == groupTypeId;
                }

                var        groupRoleGuids = selectionValues[2].Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries).Select(n => n.AsGuid()).ToList();
                List <int> groupRoleIds   = null;
                if (groupRoleGuids.Count() > 0)
                {
                    groupRoleIds          = new GroupTypeRoleService(context).Queryable().Where(a => groupRoleGuids.Contains(a.Guid)).Select(a => a.Id).ToList();
                    memberWhereGroupRoles = xx => groupRoleIds.Contains(xx.GroupRoleId);
                }

                GroupMemberStatus?groupMemberStatus = selectionValues[3].ConvertToEnumOrNull <GroupMemberStatus>();

                if (groupMemberStatus.HasValue)
                {
                    memberWhereStatus = xx => xx.GroupMemberStatus == groupMemberStatus.Value;
                }
            }

            var memberListQuery = qryGroupService.Select(p => p.Members.AsQueryable()
                                                         .Where(memberWhereGroupType)
                                                         .Where(memberWhereGroupRoles)
                                                         .Where(memberWhereStatus)
                                                         .Select(m => new MemberInfo
            {
                NickName      = m.Person.NickName,
                LastName      = m.Person.LastName,
                SuffixValueId = m.Person.SuffixValueId,
                PersonId      = m.PersonId,
                GroupMemberId = m.Id
            }).OrderBy(a => a.LastName).ThenBy(a => a.NickName));

            var selectChildrenExpression = SelectExpressionExtractor.Extract(memberListQuery, entityIdProperty, "p");

            return(selectChildrenExpression);
        }
        public static bool HasConsolidator(this Person person)
        {
            var rockContext        = new RockContext();
            var groupMemberService = new GroupMemberService(rockContext);
            var consolidatedBy     = new GroupTypeRoleService(rockContext).Get(SystemGuid.GroupTypeRole.CONSOLIDATED_BY.AsGuid());

            return(groupMemberService.GetKnownRelationship(person.Id, consolidatedBy.Id) != null);
        }
Example #20
0
        /// <summary>
        /// Gets the expression.
        /// </summary>
        /// <param name="entityType">Type of the entity.</param>
        /// <param name="serviceInstance">The service instance.</param>
        /// <param name="parameterExpression">The parameter expression.</param>
        /// <param name="selection">The selection.</param>
        /// <returns></returns>
        public override Expression GetExpression(Type entityType, IService serviceInstance, ParameterExpression parameterExpression, string selection)
        {
            string[] selectionValues = selection.Split('|');
            if (selectionValues.Length >= 2)
            {
                GroupMemberService groupMemberService = new GroupMemberService((RockContext)serviceInstance.Context);
                int groupTypeId = 0;

                Guid groupTypeGuid = selectionValues[0].AsGuid();
                var  groupType     = GroupTypeCache.Get(groupTypeGuid);
                if (groupType != null)
                {
                    groupTypeId = groupType.Id;
                }

                var groupMemberServiceQry = groupMemberService.Queryable().Where(xx => xx.Group.GroupTypeId == groupTypeId && xx.Group.IsArchived != true);

                bool?groupStatus = null;
                if (selectionValues.Length >= 4)
                {
                    groupStatus = selectionValues[3].AsBooleanOrNull();
                }

                if (groupStatus.HasValue)
                {
                    groupMemberServiceQry = groupMemberServiceQry.Where(xx => xx.Group.IsActive == groupStatus.Value);
                }

                var groupRoleGuids = selectionValues[1].Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries).Select(n => n.AsGuid()).ToList();
                if (groupRoleGuids.Count() > 0)
                {
                    var groupRoleIds = new GroupTypeRoleService((RockContext)serviceInstance.Context).Queryable().Where(a => groupRoleGuids.Contains(a.Guid)).Select(a => a.Id).ToList();
                    groupMemberServiceQry = groupMemberServiceQry.Where(xx => groupRoleIds.Contains(xx.GroupRoleId));
                }

                GroupMemberStatus?groupMemberStatus = null;
                if (selectionValues.Length >= 3)
                {
                    groupMemberStatus = selectionValues[2].ConvertToEnumOrNull <GroupMemberStatus>();
                }

                if (groupMemberStatus.HasValue)
                {
                    groupMemberServiceQry = groupMemberServiceQry.Where(xx => xx.GroupMemberStatus == groupMemberStatus.Value);
                }

                var qry = new PersonService((RockContext)serviceInstance.Context).Queryable()
                          .Where(p => groupMemberServiceQry.Any(xx => xx.PersonId == p.Id));

                Expression extractedFilterExpression = FilterExpressionExtractor.Extract <Rock.Model.Person>(qry, parameterExpression, "p");

                return(extractedFilterExpression);
            }

            return(null);
        }
Example #21
0
        /// <summary>
        /// Binds the grid.
        /// </summary>
        private void BindGrid()
        {
            var rockContext               = new RockContext();
            var recordTypeValueId         = DefinedValueCache.Read(Rock.SystemGuid.DefinedValue.PERSON_RECORD_TYPE_BUSINESS.AsGuid()).Id;
            var activeRecordStatusValueId = DefinedValueCache.Read(Rock.SystemGuid.DefinedValue.PERSON_RECORD_STATUS_ACTIVE.AsGuid()).Id;
            int?businessRoleId            = new GroupTypeRoleService(rockContext).Queryable()
                                            .Where(r =>
                                                   r.Guid.Equals(new Guid(Rock.SystemGuid.GroupRole.GROUPROLE_KNOWN_RELATIONSHIPS_BUSINESS)))
                                            .Select(r => r.Id)
                                            .FirstOrDefault();
            var queryable = new PersonService(rockContext).Queryable()
                            .Where(q => q.RecordTypeValueId == recordTypeValueId && q.RecordStatusValueId == activeRecordStatusValueId);

            // Business Name Filter
            var businessName = gfBusinessFilter.GetUserPreference("Business Name");

            if (!string.IsNullOrWhiteSpace(businessName))
            {
                queryable = queryable.Where(a => a.FirstName.Contains(businessName));
            }

            // Owner Filter
            int ownerId = 0;

            if (int.TryParse(gfBusinessFilter.GetUserPreference("Owner"), out ownerId) && ownerId != 0)
            {
                var members = queryable.SelectMany(a => a.Members).ToList();
                foreach (var member in members)
                {
                    if (member.GroupRoleId == businessRoleId)
                    {
                        var groupMemberService = new GroupMemberService(rockContext);
                        var owner = groupMemberService.GetInverseRelationship(member, false, CurrentPersonAlias);
                        if (owner.PersonId != ownerId)
                        {
                            queryable = queryable.Where(a => a.Id != member.PersonId);
                        }
                    }
                }
            }

            SortProperty sortProperty = gBusinessList.SortProperty;

            if (sortProperty != null)
            {
                gBusinessList.DataSource = queryable.Sort(sortProperty).ToList();
            }
            else
            {
                gBusinessList.DataSource = queryable.OrderBy(q => q.FirstName).ToList();
            }

            gBusinessList.DataBind();
        }
        /// <summary>
        /// Gets a persons followups
        /// </summary>
        /// <param name="consolidator"></param>
        /// <param name="rockContext"></param>
        /// <returns></returns>
        public static IQueryable <Person> GetFollowUps(this Person consolidator, RockContext rockContext)
        {
            var groupMemberService = new GroupMemberService(rockContext);
            var consolidatedBy     = new GroupTypeRoleService(rockContext).Get(SystemGuid.GroupTypeRole.CONSOLIDATOR.AsGuid());

            if (consolidatedBy != null)
            {
                return(groupMemberService.GetKnownRelationship(consolidator.Id, consolidatedBy.Id).Select(gm => gm.Person));
            }
            return(null);
        }
Example #23
0
        /// <summary>
        /// Returns the field's current value(s)
        /// </summary>
        /// <param name="parentControl">The parent control.</param>
        /// <param name="value">Information about the value</param>
        /// <param name="configurationValues">The configuration values.</param>
        /// <param name="condensed">Flag indicating if the value should be condensed (i.e. for use in a grid column)</param>
        /// <returns></returns>
        public override string FormatValue(Control parentControl, string value, Dictionary <string, ConfigurationValue> configurationValues, bool condensed)
        {
            string formattedValue = string.Empty;

            Guid?groupTypeGuid     = null;
            Guid?groupGuid         = null;
            Guid?groupTypeRoleGuid = null;

            string[] parts = (value ?? string.Empty).Split(new char[] { '|' }, StringSplitOptions.RemoveEmptyEntries);
            if (parts.Length > 0)
            {
                groupTypeGuid = parts[0].AsGuidOrNull();
                if (parts.Length > 1)
                {
                    groupGuid = parts[1].AsGuidOrNull();
                }

                if (parts.Length > 2)
                {
                    groupTypeRoleGuid = parts[2].AsGuidOrNull();
                }
            }

            using (var rockContext = new RockContext())
            {
                if (groupGuid.HasValue)
                {
                    var group = new GroupService(rockContext).GetNoTracking(groupGuid.Value);
                    if (group != null)
                    {
                        formattedValue = "Group: " + group.Name;
                    }
                }
                else if (groupTypeGuid.HasValue)
                {
                    var groupType = new GroupTypeService(rockContext).GetNoTracking(groupTypeGuid.Value);
                    if (groupType != null)
                    {
                        formattedValue = "Group type: " + groupType.Name;
                    }
                }

                if (groupTypeRoleGuid.HasValue)
                {
                    var groupTypeRole = new GroupTypeRoleService(rockContext).GetNoTracking(groupTypeRoleGuid.Value);
                    if (groupTypeRole != null)
                    {
                        formattedValue += string.IsNullOrEmpty(formattedValue) ? string.Empty : ", " + "Role: " + groupTypeRole.Name;
                    }
                }
            }

            return(base.FormatValue(parentControl, formattedValue, null, condensed));
        }
        public static void RemoveConsolidator(this Person person, Person newConsolidator)
        {
            var rockContext        = new RockContext();
            var groupMemberService = new GroupMemberService(rockContext);

            if (!person.HasConsolidator())
            {
                throw new Exception(person.FullName + " doesn't have a consolidator");
            }
            var consolidatedBy = new GroupTypeRoleService(rockContext).Get(SystemGuid.GroupTypeRole.CONSOLIDATED_BY.AsGuid());

            groupMemberService.DeleteKnownRelationship(person.Id, newConsolidator.Id, consolidatedBy.Id);
            rockContext.SaveChanges();
        }
        /// <summary>
        /// Gets the follow ups for the line below a leader or coordinator
        /// </summary>
        /// <param name="personService"></param>
        /// <param name="currentPerson"></param>
        /// <param name="rockContext"></param>
        /// <param name="showAllIfStaff">If a staff member, should they see all people</param>
        /// <returns></returns>
        public static IQueryable <Person> GetPeopleInLineFollowUps(PersonService personService, Person currentPerson, RockContext rockContext, bool showAllIfStaff)
        {
            if (currentPerson == null)
            {
                return(new List <Person>().AsQueryable());
            }

            if (showAllIfStaff && CheckIsStaff(currentPerson, rockContext))
            {
                return(personService.Queryable());
            }
            var cellGroupsIdsInLine      = GetCellGroupIdsInLine(currentPerson, rockContext);
            var recordStatusIsActiveGuid = Rock.SystemGuid.DefinedValue.PERSON_RECORD_STATUS_ACTIVE.AsGuid();
            var groupMemberService       = new GroupMemberService(rockContext);

            // Get person Ids from line
            var linePersonIds =
                groupMemberService.Queryable()
                .Where(gm => cellGroupsIdsInLine.Contains(gm.GroupId) && gm.Person.RecordStatusValue.Guid == recordStatusIsActiveGuid)
                .Select(gm => gm.PersonId).ToList();

            // Get people's follow ups
            int consolidatorGroupTypeRoleId = new GroupTypeRoleService(rockContext).Get(SystemGuid.GroupTypeRole.CONSOLIDATOR.AsGuid()).Id;
            var followUpIds = new List <int>();

            foreach (int personId in linePersonIds)
            {
                followUpIds.AddRange(groupMemberService.GetKnownRelationship(personId, consolidatorGroupTypeRoleId).Where(gm => gm.Person.RecordStatusValue.Guid == recordStatusIsActiveGuid).Select(gm => gm.PersonId));
            }

            //Remove people who are in a group as a coordinator or leader
            var cellGroupType = GroupTypeCache.Read(SystemGuid.GroupType.CELL_GROUP.AsGuid());
            var consolidatorCoordinatorGuid = SystemGuid.GroupTypeRole.CONSOLIDATION_COORDINATOR.AsGuid();
            var idsToRemove =
                groupMemberService.Queryable()
                .Where(
                    gm =>
                    followUpIds.Any(fId => gm.PersonId == fId) &&
                    gm.Group.GroupTypeId == cellGroupType.Id &&
                    (gm.GroupRole.Guid == consolidatorCoordinatorGuid || gm.GroupRole.IsLeader))
                .Select(gm => gm.PersonId)
                .ToList();

            foreach (int idToRemove in idsToRemove)
            {
                followUpIds.Remove(idToRemove);
            }
            return(personService.GetByIds(followUpIds).Distinct());
        }
Example #26
0
        /// <summary>
        /// Formats the selection.
        /// </summary>
        /// <param name="entityType">Type of the entity.</param>
        /// <param name="selection">The selection.</param>
        /// <returns></returns>
        public override string FormatSelection(Type entityType, string selection)
        {
            string result = "Group Member";

            string[] selectionValues = selection.Split('|');
            if (selectionValues.Length >= 2)
            {
                var rockContext = new RockContext();
                var group       = new GroupService(rockContext).Get(selectionValues[0].AsGuid());

                var groupTypeRoleGuidList = selectionValues[1].Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries).Select(a => a.AsGuid()).ToList();

                var groupTypeRoles = new GroupTypeRoleService(rockContext).Queryable().Where(a => groupTypeRoleGuidList.Contains(a.Guid)).ToList();

                bool includeChildGroups = false;
                if (selectionValues.Length >= 3)
                {
                    includeChildGroups = selectionValues[2].AsBooleanOrNull() ?? false;
                }

                GroupMemberStatus?groupMemberStatus = GroupMemberStatus.Active;
                if (selectionValues.Length >= 4)
                {
                    groupMemberStatus = selectionValues[3].ConvertToEnumOrNull <GroupMemberStatus>();
                }

                if (group != null)
                {
                    result = string.Format("In group: {0}", group.Name);
                    if (includeChildGroups)
                    {
                        result += " or child groups";
                    }

                    if (groupTypeRoles.Count() > 0)
                    {
                        result += string.Format(", with role(s): {0}", groupTypeRoles.Select(a => string.Format("{0} ({1})", a.Name, a.GroupType.Name)).ToList().AsDelimited(","));
                    }

                    if (groupMemberStatus.HasValue)
                    {
                        result += string.Format(", with member status: {0}", groupMemberStatus.ConvertToString());
                    }
                }
            }

            return(result);
        }
Example #27
0
        /// <summary>
        /// Formats the selection.
        /// </summary>
        /// <param name="entityType">Type of the entity.</param>
        /// <param name="selection">The selection.</param>
        /// <returns></returns>
        public override string FormatSelection(Type entityType, string selection)
        {
            string result = "Group Member";

            string[] selectionValues = selection.Split('|');
            if (selectionValues.Length >= 2)
            {
                var groupType = GroupTypeCache.Get(selectionValues[0].AsGuid());

                var groupTypeRoleGuidList = selectionValues[1].Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries).Select(a => a.AsGuid()).ToList();

                var groupTypeRoles = new GroupTypeRoleService(new RockContext()).Queryable().Where(a => groupTypeRoleGuidList.Contains(a.Guid)).ToList();

                bool?groupStatus = null;
                if (selectionValues.Length >= 4)
                {
                    groupStatus = selectionValues[3].AsBooleanOrNull();
                }

                GroupMemberStatus?groupMemberStatus = null;
                if (selectionValues.Length >= 3)
                {
                    groupMemberStatus = selectionValues[2].ConvertToEnumOrNull <GroupMemberStatus>();
                }

                if (groupType != null)
                {
                    result = string.Format("In group of group type: {0}", groupType.Name);
                    if (groupTypeRoles.Count() > 0)
                    {
                        result += string.Format(", with role(s): {0}", groupTypeRoles.Select(a => a.Name).ToList().AsDelimited(","));
                    }

                    if (groupStatus.HasValue)
                    {
                        result += string.Format(", with group status: {0}", groupStatus.Value ? "Active" : "Inactive");
                    }

                    if (groupMemberStatus.HasValue)
                    {
                        result += string.Format(", with member status: {0}", groupMemberStatus.ConvertToString());
                    }
                }
            }

            return(result);
        }
Example #28
0
        /// <summary>
        /// Reads new values entered by the user for the field ( as Guid )
        /// </summary>
        /// <param name="control">Parent control that controls were added to in the CreateEditControl() method</param>
        /// <param name="configurationValues">The configuration values.</param>
        /// <returns></returns>
        public override string GetEditValue(System.Web.UI.Control control, Dictionary <string, ConfigurationValue> configurationValues)
        {
            GroupAndRolePicker groupAndRolePicker = control as GroupAndRolePicker;

            if (groupAndRolePicker != null)
            {
                var rockContext = new RockContext();

                Guid?groupTypeGuid     = null;
                Guid?groupGuid         = null;
                Guid?groupTypeRoleGuid = null;
                if (groupAndRolePicker.GroupTypeId.HasValue)
                {
                    var groupType = new GroupTypeService(rockContext).GetNoTracking(groupAndRolePicker.GroupTypeId.Value);
                    if (groupType != null)
                    {
                        groupTypeGuid = groupType.Guid;
                    }
                }

                if (groupAndRolePicker.GroupId.HasValue)
                {
                    var group = new GroupService(rockContext).Get(groupAndRolePicker.GroupId.Value);
                    if (group != null)
                    {
                        groupGuid = group.Guid;
                    }
                }

                if (groupAndRolePicker.GroupRoleId.HasValue)
                {
                    var groupTypeRole = new GroupTypeRoleService(rockContext).Get(groupAndRolePicker.GroupRoleId.Value);
                    if (groupTypeRole != null)
                    {
                        groupTypeRoleGuid = groupTypeRole.Guid;
                    }
                }

                if (groupTypeGuid.HasValue || groupGuid.HasValue || groupTypeRoleGuid.HasValue)
                {
                    return(string.Format("{0}|{1}|{2}", groupTypeGuid, groupGuid, groupTypeRoleGuid));
                }
            }

            return(null);
        }
Example #29
0
        /// <summary>
        /// Returns the field's current value(s)
        /// </summary>
        /// <param name="parentControl">The parent control.</param>
        /// <param name="value">Information about the value</param>
        /// <param name="configurationValues">The configuration values.</param>
        /// <param name="condensed">Flag indicating if the value should be condensed (i.e. for use in a grid column)</param>
        /// <returns></returns>
        public override string FormatValue(Control parentControl, string value, Dictionary <string, ConfigurationValue> configurationValues, bool condensed)
        {
            string formattedValue = string.Empty;

            Guid guid = Guid.Empty;

            if (Guid.TryParse(value, out guid))
            {
                var groupRole = new GroupTypeRoleService(new RockContext()).Get(guid);
                if (groupRole != null)
                {
                    formattedValue = groupRole.Name;
                }
            }

            return(base.FormatValue(parentControl, formattedValue, null, condensed));
        }
        /// <summary>
        /// Sets the relationships between a business and it's owner.
        /// </summary>
        /// <param name="business">The business.</param>
        private void SetRelationships(Person business)
        {
            var rockContext        = new RockContext();
            var personService      = new PersonService(rockContext);
            var groupMemberService = new GroupMemberService(rockContext);
            int?businessRoleId     = new GroupTypeRoleService(rockContext).Queryable()
                                     .Where(r =>
                                            r.Guid.Equals(new Guid(Rock.SystemGuid.GroupRole.GROUPROLE_KNOWN_RELATIONSHIPS_BUSINESS)))
                                     .Select(r => r.Id)
                                     .FirstOrDefault();
            int?principleRoleId = new GroupTypeRoleService(rockContext).Queryable()
                                  .Where(r =>
                                         r.Guid.Equals(new Guid(Rock.SystemGuid.GroupRole.GROUPROLE_KNOWN_RELATIONSHIPS_PRINCIPLE)))
                                  .Select(r => r.Id)
                                  .FirstOrDefault();

            // get the known relationship group from the owner
            // add the business as a group member of that group using group role of GROUPROLE_KNOWN_RELATIONSHIPS_BUSINESS
            var owner = personService.Get((int)ppOwner.PersonId);
            var knownRelationshipGroup = groupMemberService.Queryable()
                                         .Where(g =>
                                                g.GroupRole.Guid.Equals(new Guid(Rock.SystemGuid.GroupRole.GROUPROLE_KNOWN_RELATIONSHIPS_OWNER)) &&
                                                g.PersonId == owner.Id)
                                         .Select(g => g.Group).FirstOrDefault();
            var groupMember = new GroupMember();

            groupMember.PersonId    = int.Parse(hfBusinessId.Value);
            groupMember.GroupRoleId = (int)businessRoleId;
            knownRelationshipGroup.Members.Add(groupMember);
            rockContext.SaveChanges();

            // get the known relationship group from the business
            // add the owner as a group member of that group using group role of GROUPROLE_KNOWN_RELATIONSHIPS_PRINCIPLE
            var businessKnownRelationshipGroup = groupMemberService.Queryable()
                                                 .Where(g =>
                                                        g.GroupRole.Guid.Equals(new Guid(Rock.SystemGuid.GroupRole.GROUPROLE_KNOWN_RELATIONSHIPS_OWNER)) &&
                                                        g.PersonId == business.Id)
                                                 .Select(g => g.Group).FirstOrDefault();
            var businessGroupMember = new GroupMember();

            businessGroupMember.PersonId    = owner.Id;
            businessGroupMember.GroupRoleId = (int)principleRoleId;
            businessKnownRelationshipGroup.Members.Add(businessGroupMember);
            rockContext.SaveChanges();
        }