public void SynchroniseUserChangesWithGroups( DelegateUser delegateAccountWithOldDetails, AccountDetailsData newDelegateDetails, CentreAnswersData newCentreAnswers ) { var changedLinkedFields = LinkedFieldHelper.GetLinkedFieldChanges( delegateAccountWithOldDetails.GetCentreAnswersData(), newCentreAnswers, jobGroupsDataService, centreCustomPromptsService ); var allSynchronisedGroupsAtCentre = GetSynchronisedGroupsForCentre(delegateAccountWithOldDetails.CentreId).ToList(); foreach (var changedAnswer in changedLinkedFields) { var groupToRemoveDelegateFrom = allSynchronisedGroupsAtCentre.SingleOrDefault( g => g.LinkedToField == changedAnswer.LinkedFieldNumber && GroupLabelMatchesAnswer(g.GroupLabel, changedAnswer.OldValue, changedAnswer.LinkedFieldName) ); var groupToAddDelegateTo = allSynchronisedGroupsAtCentre.SingleOrDefault( g => g.LinkedToField == changedAnswer.LinkedFieldNumber && GroupLabelMatchesAnswer(g.GroupLabel, changedAnswer.NewValue, changedAnswer.LinkedFieldName) ); using var transaction = new TransactionScope(); if (groupToRemoveDelegateFrom != null) { RemoveDelegateFromGroup(delegateAccountWithOldDetails.Id, groupToRemoveDelegateFrom.GroupId); } if (groupToAddDelegateTo != null) { groupsDataService.AddDelegateToGroup( delegateAccountWithOldDetails.Id, groupToAddDelegateTo.GroupId, clockService.UtcNow, 1 ); EnrolDelegateOnGroupCourses( delegateAccountWithOldDetails, newDelegateDetails, groupToAddDelegateTo.GroupId ); } transaction.Complete(); } }