/// <summary> /// Clones this GroupRequirement object to a new GroupRequirement object /// </summary> /// <param name="source">The source.</param> /// <param name="deepCopy">if set to <c>true</c> a deep copy is made. If false, only the basic entity properties are copied.</param> /// <returns></returns> public static GroupRequirement Clone(this GroupRequirement source, bool deepCopy) { if (deepCopy) { return(source.Clone() as GroupRequirement); } else { var target = new GroupRequirement(); target.CopyPropertiesFrom(source); return(target); } }
/// <summary> /// Copies the properties from another GroupRequirement object to this GroupRequirement object /// </summary> /// <param name="target">The target.</param> /// <param name="source">The source.</param> public static void CopyPropertiesFrom(this GroupRequirement target, GroupRequirement source) { target.Id = source.Id; target.ForeignGuid = source.ForeignGuid; target.ForeignKey = source.ForeignKey; target.GroupId = source.GroupId; target.GroupRequirementTypeId = source.GroupRequirementTypeId; target.GroupRoleId = source.GroupRoleId; target.CreatedDateTime = source.CreatedDateTime; target.ModifiedDateTime = source.ModifiedDateTime; target.CreatedByPersonAliasId = source.CreatedByPersonAliasId; target.ModifiedByPersonAliasId = source.ModifiedByPersonAliasId; target.Guid = source.Guid; target.ForeignId = source.ForeignId; }
/// <summary> /// Updates the group member requirement result. /// </summary> /// <param name="rockContext">The rock context.</param> /// <param name="personId">The person identifier.</param> /// <param name="groupId">The group identifier.</param> /// <param name="meetsGroupRequirement">The meets group requirement.</param> public void UpdateGroupMemberRequirementResult(RockContext rockContext, int personId, int groupId, MeetsGroupRequirement meetsGroupRequirement) { GroupRequirement groupRequirement = this; var currentDateTime = RockDateTime.Now; GroupMemberRequirementService groupMemberRequirementService = new GroupMemberRequirementService(rockContext); var groupMemberService = new GroupMemberService(rockContext); var groupMemberQry = groupMemberService.Queryable(true).Where(a => a.PersonId == personId && a.GroupId == groupId); if (groupRequirement.GroupId.HasValue) { groupMemberQry = groupMemberQry.Where(g => g.GroupId == groupRequirement.GroupId); } else if (groupRequirement.GroupTypeId.HasValue) { groupMemberQry = groupMemberQry.Where(g => g.Group.GroupTypeId == groupRequirement.GroupTypeId); } else { // shouldn't happen, but grouprequirement doesn't have a groupId or a GroupTypeId return; } if (this.GroupRoleId != null) { groupMemberQry = groupMemberQry.Where(a => a.GroupRoleId == this.GroupRoleId); } // just in case the same person is in the same group multiple times, get a list of the groupMember records for this person foreach (var groupMemberId in groupMemberQry.Select(a => a.Id)) { var groupMemberRequirement = groupMemberRequirementService.Queryable().Where(a => a.GroupMemberId == groupMemberId && a.GroupRequirementId == groupRequirement.Id).FirstOrDefault(); if (groupMemberRequirement == null) { groupMemberRequirement = new GroupMemberRequirement(); groupMemberRequirement.GroupMemberId = groupMemberId; groupMemberRequirement.GroupRequirementId = groupRequirement.Id; groupMemberRequirementService.Add(groupMemberRequirement); } groupMemberRequirement.LastRequirementCheckDateTime = currentDateTime; if ((meetsGroupRequirement == MeetsGroupRequirement.Meets) || (meetsGroupRequirement == MeetsGroupRequirement.MeetsWithWarning)) { // they meet the requirement so update the Requirement Met Date/Time groupMemberRequirement.RequirementMetDateTime = currentDateTime; groupMemberRequirement.RequirementFailDateTime = null; } else { // they don't meet the requirement so set the Requirement Met Date/Time to null groupMemberRequirement.RequirementMetDateTime = null; groupMemberRequirement.RequirementFailDateTime = currentDateTime; } if (meetsGroupRequirement == MeetsGroupRequirement.MeetsWithWarning) { if (!groupMemberRequirement.RequirementWarningDateTime.HasValue) { // they have a warning for the requirement, and didn't have a warning already groupMemberRequirement.RequirementWarningDateTime = currentDateTime; } } else { // no warning, so set to null groupMemberRequirement.RequirementWarningDateTime = null; } } }