/// <summary>
/// Adds the related person to the selected person's known relationships with a role of 'Can check in' which
/// is typically configured to allow check-in. If an inverse relationship is configured for 'Can check in'
/// (i.e. 'Allow check in by'), that relationship will also be created.
/// </summary>
/// <param name="personId">A <see cref="System.Int32"/> representing the Id of the Person.</param>
/// <param name="relatedPersonId">A <see cref="System.Int32"/> representing the Id of the related Person.</param>
/// <param name="currentPersonId">A <see cref="System.Int32"/> representing the Id of the Person who is logged in.</param>
public static void CreateCheckinRelationship(int personId, int relatedPersonId, int?currentPersonId)
{
using (new UnitOfWorkScope())
{
var groupMemberService = new GroupMemberService();
var knownRelationshipGroup = groupMemberService.Queryable()
.Where(m =>
m.PersonId == personId &&
m.GroupRole.Guid.Equals(new Guid(SystemGuid.GroupRole.GROUPROLE_KNOWN_RELATIONSHIPS_OWNER)))
.Select(m => m.Group)
.FirstOrDefault();
if (knownRelationshipGroup != null)
{
int?canCheckInRoleId = new GroupTypeRoleService().Queryable()
.Where(r =>
r.Guid.Equals(new Guid(SystemGuid.GroupRole.GROUPROLE_KNOWN_RELATIONSHIPS_CAN_CHECK_IN)))
.Select(r => r.Id)
.FirstOrDefault();
if (canCheckInRoleId.HasValue)
{
var canCheckInMember = groupMemberService.Queryable()
.FirstOrDefault(m =>
m.GroupId == knownRelationshipGroup.Id &&
m.PersonId == relatedPersonId &&
m.GroupRoleId == canCheckInRoleId.Value);
if (canCheckInMember == null)
{
canCheckInMember = new GroupMember();
canCheckInMember.GroupId = knownRelationshipGroup.Id;
canCheckInMember.PersonId = relatedPersonId;
canCheckInMember.GroupRoleId = canCheckInRoleId.Value;
groupMemberService.Add(canCheckInMember, currentPersonId);
groupMemberService.Save(canCheckInMember, currentPersonId);
}
var inverseGroupMember = groupMemberService.GetInverseRelationship(canCheckInMember, true, currentPersonId);
if (inverseGroupMember != null)
{
groupMemberService.Save(inverseGroupMember, currentPersonId);
}
}
}
}
}