public BlockActionResult SaveSpecificAssignmentSchedule(Guid?groupGuid, Guid scheduleGuid, Guid?locationGuid)
        {
            using (var rockContext = new RockContext())
            {
                // Get the group.
                var group = new GroupService(rockContext).GetNoTracking(groupGuid.Value);

                // Get the specific group member assignment.
                GroupMemberAssignmentService groupMemberAssignmentService = new GroupMemberAssignmentService(rockContext);
                var groupMember = GetGroupMemberRecord(rockContext, group.Id, this.CurrentPersonId);

                var schedule = new ScheduleService(rockContext).GetNoTracking(scheduleGuid);

                int?locationId = null;
                if (locationGuid != null)
                {
                    var location = new LocationService(rockContext).GetNoTracking(locationGuid.Value);

                    if (location != null)
                    {
                        locationId = location.Id;
                    }
                }

                var groupMemberAssignment = groupMemberAssignmentService.GetByGroupMemberScheduleAndLocation(groupMember, schedule.Id, locationId);

                if (groupMemberAssignment == null)
                {
                    groupMemberAssignment = new GroupMemberAssignment();
                }

                // In case there is already a group member assignment.
                else
                {
                    return(ActionBadRequest("You are already assigned to this schedule."));
                }

                groupMemberAssignment.GroupMemberId = groupMember.Id;
                groupMemberAssignment.ScheduleId    = schedule.Id;
                groupMemberAssignment.LocationId    = locationId;

                groupMemberAssignmentService.Add(groupMemberAssignment);

                // Add the group member to the service.
                rockContext.SaveChanges();

                return(ActionOk());
            }
        }
        public BlockActionResult DeleteSpecificAssignmentSchedule(Guid groupGuid, Guid scheduleGuid, Guid?locationGuid)
        {
            using (var rockContext = new RockContext())
            {
                var groupMemberAssignmentService = new GroupMemberAssignmentService(rockContext);
                var group       = new GroupService(rockContext).GetNoTracking(groupGuid);
                var groupMember = GetGroupMemberRecord(rockContext, group.Id, CurrentPersonId);

                var schedule = new ScheduleService(rockContext).GetNoTracking(scheduleGuid);

                int?locationId = null;
                if (locationGuid != null)
                {
                    var location = new LocationService(rockContext).GetNoTracking(locationGuid.Value);

                    if (location != null)
                    {
                        locationId = location.Id;
                    }
                }

                var groupMemberAssignment = groupMemberAssignmentService.GetByGroupMemberScheduleAndLocation(groupMember, schedule.Id, locationId);

                if (groupMemberAssignment == null)
                {
                    return(ActionNotFound());
                }

                if (groupMemberAssignmentService.CanDelete(groupMemberAssignment, out var errorMessage))
                {
                    groupMemberAssignmentService.Delete(groupMemberAssignment);
                    rockContext.SaveChanges();
                    return(ActionOk());
                }

                return(ActionBadRequest());
            }
        }