void InitializeGroupMembers() { UpdateStage = UpdateStages.Startup; CurrentMembers = new Queue <MemberDescriptor>(); NewMembers = new Queue <MemberDescriptor>(); NewMemberAliases = null; AddedAliases = new List <string>(); DeletedAliases = new List <string>(); }
//------------------------------------------------------------------------------------ /// <summary> /// Once other higher priority background tasks are complete, check to see if it's /// time to kick off a refresh of the product group membership. /// </summary> //------------------------------------------------------------------------------------ void Handle_CommitmentStatusComputationComplete() { ProductGroupItem productGroup = Planner.Instance.CurrentProductGroup; DateTime lastUpdate = productGroup.MembersLastUpdated.Date; if (productGroup != null && lastUpdate < DateTime.Today) { UpdateStage = UpdateStages.DetectingMembersToAddOrDelete; BackgroundTask updateGroupMembersTask = new BackgroundTask(false); updateGroupMembersTask.DoWork += AddOrDeleteGroupMembersTask_DoWork; updateGroupMembersTask.TaskCompleted += AddOrDeleteGroupMembersTask_TaskCompleted; ProductGroupToUpdate = productGroup; updateGroupMembersTask.RunTaskAsync(); } }
void AddOrDeleteGroupMembersTask_TaskCompleted(object TaskArgs, BackgroundTaskResult result) { UpdateStage = UpdateStages.DetectingMembersToAddOrDeleteComplete; }
void Handle_UpdateUI() { if (UpdateStage == UpdateStages.DetectingMembersToAddOrDeleteComplete) { if (NewMembers.Count > 0) { MemberDescriptor newMember = NewMembers.Dequeue(); UserInformation uiMember = newMember.Member; if (!GroupMemberExists(uiMember.Alias)) { GroupMemberItem newMemberItem = ScheduleStore.Instance.CreateStoreItem <GroupMemberItem>(ItemTypeID.GroupMember); newMemberItem.BeginSaveImmediate(); newMemberItem.Alias = uiMember.Alias; newMemberItem.Discipline = newMember.Discipline; newMemberItem.CapacityPerDay = Constants.AvgCapacityPerDay; newMemberItem.InitializeWithUserInformation(uiMember); newMemberItem.SaveImmediate(); } } else { UpdateStage = UpdateStages.AddingMembersComplete; } } else if (UpdateStage == UpdateStages.AddingMembersComplete) { ProductGroupItem productGroup = Planner.Instance.CurrentProductGroup; if (AddedAliases.Count > 0 || DeletedAliases.Count > 0) { if (productGroup != null && NewMemberAliases != null && NewMemberAliases.Count > 0) { productGroup.BeginSaveImmediate(); productGroup.MemberAliases = NewMemberAliases; productGroup.SaveImmediate(); } } productGroup.MembersLastUpdated = DateTime.Today; UpdateStage = UpdateStages.UpdatingProductGroupItemComplete; } else if (UpdateStage == UpdateStages.UpdatingProductGroupItemComplete) { if (CurrentMembers.Count > 0) { MemberDescriptor currentMember = CurrentMembers.Dequeue(); GroupMemberItem memberItem = Planner.Instance.ItemRepository.GetMemberByAlias(currentMember.Member.Alias); if (memberItem != null) { Planner.Instance.WriteToEventLog("Updating GroupMemberItem information: " + memberItem.DisplayName); memberItem.BeginSaveImmediate(); memberItem.InitializeWithUserInformation(currentMember.Member); memberItem.SaveImmediate(); } } else { UpdateStage = UpdateStages.UpdatingGroupMemberInformationComplete; } } else if (UpdateStage == UpdateStages.UpdatingGroupMemberInformationComplete) { Planner.Instance.WriteToEventLog("UpdatingGroupMemberInformationComplete"); UpdateStage = UpdateStages.UpdateCycleComplete; } }