public void Setup(){
			
			List<User> userList = new List<User> ();
			User user1 = new User();

			user1.ExercisesDirty = false;

			//user1.ExercisesDirty = false;

			user1.MultipleExerciseGroups = true;
			user1.FirstName = "Clay";
			user1.LastName = "Martin";
			user1.GymID = 8;
			user1.PhoneNumber = "502-417-1595";
			user1.ProfileID = 1;
			user1.ServerTemplateID = 1;
			user1.TemplateID = 1;

			User user2 = new User();

			user2.ExercisesDirty = false;

			//user2.ExercisesDirty = false;

			user2.MultipleExerciseGroups = false;
			user2.FirstName = "Sarah";
			user2.LastName = "Wallin";
			user2.GymID = 8;
			user2.PhoneNumber = "502-417-1595";
			user2.ProfileID = 2;
			user2.ServerTemplateID = 2;
			user2.TemplateID = 2;

			userList.Add (user1);
			userList.Add (user2);

			WorkoutTemplate user1WorkoutTemplate = new WorkoutTemplate ();
			user1WorkoutTemplate.Id = 1;
			WorkoutTemplate user2WorkoutTemplate = new WorkoutTemplate ();
			user2WorkoutTemplate.Id = 2;
			user2WorkoutTemplate.TemplateName = "Actual Template Name";

			mockWorkoutTemplate = new Mock<IWorkoutTemplate> ();

			mockWorkoutTemplate.Setup (m => m.GetWorkoutTemplateByID (user1.GymID,user1.TemplateID)).ReturnsAsync(user1WorkoutTemplate);
			mockWorkoutTemplate.Setup (m => m.GetWorkoutTemplateByID (user2.GymID,user2.TemplateID)).ReturnsAsync(user2WorkoutTemplate);

			mockUser = new Mock<IUser> ();

			mockUser.Setup (m => m.GetAllUsersWithExerciseMappings (user1.GymID)).ReturnsAsync(userList);

			mockUser.Setup (m => m.GetUserByID (user1.ProfileID)).ReturnsAsync(user1);
			mockUser.Setup (m => m.GetUserByID (user2.ProfileID)).ReturnsAsync(user2);

			memberTemplateViewModel = new MemberTemplateViewModel  (mockWorkoutTemplate.Object, user1.GymID, mockUser.Object);
		}
		public MemberTemplatesListPage ()
		{
            _viewModel = new MemberTemplateViewModel(Manager.Instance.WorkoutTemplate, App.WorkoutCreatorContext.StaffMember.GymID, Manager.Instance.User);
            var syncDataWithServerTask = _viewModel.SyncTemplateDataWithServer();
			InitializeComponent ();
            this.BindingContext = _viewModel;
            Action<Task> assignSourceAction = (actionAssignSourceActionResult) =>
                {
                    Device.BeginInvokeOnMainThread(() =>
                    {
                        listView.ItemsSource = _viewModel.SimpleMemberTemplateGroups;
                    });

                };
            syncDataWithServerTask.ContinueWith(assignSourceAction);

			listView.ItemTemplate = new DataTemplate(typeof(CustomViewCellMemberTemplate));
			listView.ItemTemplate.SetBinding(CustomViewCellMemberTemplate.SimpleTemplateProperty, "TemplateViewModelProperty"); 
			listView.ItemTemplate.SetBinding (CustomViewCellMemberTemplate.IsDirtyProperty, "IsDirty");

			listView.IsGroupingEnabled = true;
			listView.GroupDisplayBinding = new Binding ("Key");
			listView.GroupShortNameBinding = new Binding("Key");
			listView.GroupHeaderTemplate = new DataTemplate(typeof(MemberListHeaderCell));

            ToolbarItem syncItem = new ToolbarItem
            {
                Text = "Sync",
                Order = ToolbarItemOrder.Primary
            };

            syncItem.Clicked += syncItem_Clicked;

            ToolbarItems.Add(syncItem);


            _viewModel.DataSyncEvent += _viewModel_DataSyncEvent;

		}
		public async Task<ObservableCollection<MemberTemplateViewModel>> GetAllSimpleMemberTemplates ()
		{
			ObservableCollection<MemberTemplateViewModel> templateList = new ObservableCollection<MemberTemplateViewModel> ();
			List<User> userList = await UserDAL.GetAllUsersWithExerciseMappings (this.GymID);
			foreach (User userMapping in userList) {

				List<UserExerciseGroup> userExerciseGroupList = await UserExerciseGroupDAL.GetExerciseGroupsByProfileIDNotDeleted (userMapping.ProfileID);

				MemberTemplateViewModel memberTemplateViewModel = new MemberTemplateViewModel (WorkoutTemplate, this.GymID, User);

				TemplateViewModel templateViewModel = new TemplateViewModel ();

				User user = await UserDAL.GetUserByID (userMapping.ProfileID);

				//Process even if there are no exercise groups assigned to the member
				if (userExerciseGroupList == null || userExerciseGroupList.Count == 0) {
					
					templateViewModel.TemplateName = "No Workouts";
					templateViewModel.TemplateDescription = "No workouts assigned";

					//When a member is assigned a template, will be assigned a server template id from the server. If this id = 0, template assignment has not been made on the server
					templateViewModel.ServerUserExerciseGroupID = 0;
					templateViewModel.LocalUserExerciseGroupID = 0;
					templateViewModel.ProfileID = userMapping.ProfileID;
					templateViewModel.HasMultipleWorkouts = false;
					memberTemplateViewModel.TemplateName = "No Workouts";

				} else {
					if (userExerciseGroupList.Count == 1) {
						
						UserExerciseGroup onlyExerciseGroup = userExerciseGroupList [0];

						templateViewModel.TemplateName = onlyExerciseGroup.TemplateName;
						templateViewModel.TemplateDescription = onlyExerciseGroup.TemplateDescription;
						if (templateViewModel.TemplateDescription == null) {
							templateViewModel.TemplateDescription = "";
						}
						templateViewModel.Id = onlyExerciseGroup.Id;
					
						//ServerExerciseGroupID must be assigned to the exercise group in order for the local client to be in sync with the server
						if (onlyExerciseGroup.UserWorkoutGroupID != 0) {
							templateViewModel.ServerUserExerciseGroupID = onlyExerciseGroup.UserWorkoutGroupID;
						} else {
							memberTemplateViewModel.IsDirty = true;
						}
						templateViewModel.LocalUserExerciseGroupID = onlyExerciseGroup.Id;
						templateViewModel.HasMultipleWorkouts = false;
						if (onlyExerciseGroup.ExerisesDirty || onlyExerciseGroup.UserWorkoutGroupID == 0) {
							memberTemplateViewModel.IsDirty = true;
						}

					} else {
						templateViewModel.TemplateName = "Multiple Workouts";
						templateViewModel.TemplateDescription = "Multiple Workouts Assigned";
						templateViewModel.Id = 0;
						templateViewModel.ServerUserExerciseGroupID = 0;
						templateViewModel.LocalUserExerciseGroupID = 0;
						templateViewModel.HasMultipleWorkouts = true;
						//If there are multiple userExerciseGroups assigned to the user, we need to evaluate and decide if any of them are dirty
						foreach (var userExerciseGroup in userExerciseGroupList) {
							if (userExerciseGroup.ExerisesDirty || userExerciseGroup.UserWorkoutGroupID == 0) {
								memberTemplateViewModel.IsDirty = true;
								break;
							}
						}
					}
				}

				memberTemplateViewModel.Id = userMapping.Id;
				memberTemplateViewModel.MemberName = Utility.FirstLetterToUpper (user.FName) + " " + user.LName;
				memberTemplateViewModel.MemberPhoneNumber = user.PhoneNumber;
				memberTemplateViewModel.TemplateName = templateViewModel.TemplateName;

				//Try to assign profileid to templateViewModel if it hasn't been assigned already
				if (templateViewModel.ProfileID == 0) {
					if (userMapping.ProfileID != 0) {
						templateViewModel.ProfileID = userMapping.ProfileID;
					}
				}

				memberTemplateViewModel.TemplateViewModelProperty = templateViewModel;

				templateList.Add (memberTemplateViewModel);
			}
			return templateList;
		}