details:
    type: courseClassEnrolment
    name: Course Enrolment by Class
    table: gibbonCourseClassPerson
    modes: { update: true, insert: true, export: true }
access:
    module: Timetable Admin
    action: Course Enrolment by Class
primaryKey:
    gibbonCourseClassPersonID
uniqueKeys:
    - [ gibbonCourseClassID, gibbonPersonID ]
table:
    gibbonSchoolYearID:
        name: "School Year"
        desc: "School year name, as set in School Admin. Must already exist."
        args: { filter: schoolyear, required: true, readonly: true, custom: true }
        relationship: { table: gibbonSchoolYear, key: gibbonSchoolYearID, field: name  }
    gibbonCourseID:
        name: "Course"
        desc: "Short Name"
        args: { filter: string, required: true, readonly: true }
        relationship: { table: gibbonCourse, key: gibbonCourseID, field: [ nameShort, gibbonSchoolYearID ]  }
    gibbonCourseClassID:
        name: "Class"
        desc: "Short Name"
        args: { filter: string, required: true }
        relationship: { table: gibbonCourseClass, key: gibbonCourseClassID, field: [ nameShort, gibbonCourseID ]  }
    gibbonPersonID:
        name: "Participant"
        desc: "Username or Email (if unique)"
        args: { filter: nospaces, required: true }
        relationship: { table: gibbonPerson, key: gibbonPersonID, field: username|email  }
    role:
        name: "Role"
        desc: ""
        args: { filter: string, required: true, custom: true }
    reportable:
        name: "Reportable?"
        desc: "Should this class show in reports?"
        args: { filter: yesno, custom: true }
