details:
    type: markbookColumns
    name: Markbook Columns
    table: gibbonMarkbookColumn
    modes: { update: true, insert: true, export: true }
access:
    module: Markbook
    action: Edit Markbook_everything
primaryKey:
    gibbonMarkbookColumnID
uniqueKeys:
    - [ gibbonCourseClassID, name ]
table:
    gibbonSchoolYearID: 
        name: "School Year"
        desc: "School year name, as set in School Admin. Must already exist."
        args: { filter: schoolyear, required: true, custom: true, readonly: true }
        relationship: { table: gibbonSchoolYear, key: gibbonSchoolYearID, field: name  }
    gibbonCourseID: 
        name: "Course"
        desc: "Short Name"
        args: { filter: string, required: true, custom: true, readonly: true }
        relationship: { table: gibbonCourse, key: gibbonCourseID, field: [ nameShort, gibbonSchoolYearID ]  }
    gibbonCourseClassID: 
        name: "Class"
        desc: "Short Name"
        args: { filter: string, required: true, custom: true }
        relationship: { table: gibbonCourseClass, key: gibbonCourseClassID, field: [ nameShort, gibbonCourseID ]  }
    gibbonUnitID: 
        name: "Unit"
        desc: "Name"
        args: { filter: string, custom: true }
        relationship: { table: gibbonUnit, key: gibbonUnitID, field: [ name, gibbonCourseID ]  }
    gibbonPlannerEntryID: 
        name: "Lesson"
        desc: "Name"
        args: { filter: string, custom: true }
        relationship: { table: gibbonPlannerEntry, key: gibbonPlannerEntryID, field: [ name, gibbonCourseClassID ]  }
    name: 
        name: "Name"
        desc: ""
        args: { filter: string, required: true }
    description: 
        name: "Description"
        desc: ""
        args: { filter: string, required: true }
    type: 
        name: "Type"
        desc: ""
        args: { filter: string, required: true, custom: true }
    date: 
        name: "Date Added"
        desc: ""
        args: {filter: date, custom: true }
    gibbonSchoolYearTermID: 
        name: "Term Added"
        desc: ""
        args: {filter: string, custom: true }
        relationship: { table: gibbonSchoolYearTerm, key: gibbonSchoolYearTermID, field: [ gibbonSchoolYearTerm.nameShort, gibbonSchoolYearID ]  }
    attainment: 
        name: "Assess Attainment?"
        desc: ""
        args: { filter: yesno, required: true, custom: true }
    gibbonScaleIDAttainment: 
        name: "Attainment Scale"
        desc: "Short Name"
        args: { filter: string, custom: true }
        relationship: { table: gibbonScale, key: gibbonScaleID, field: nameShort  }
    attainmentRaw: 
        name: "Total Mark"
        desc: ""
        args: { filter: yesno, custom: true }
    attainmentRawMax: 
        name: "Attainment Total Mark"
        desc: ""
        args: { filter: string, custom: true }
    attainmentWeighting: 
        name: "Attainment Weighting"
        desc: ""
        args: { filter: numeric, custom: true }
    gibbonRubricIDAttainment: 
        name: "Attainment Rubric"
        desc: "Name"
        args: { filter: string, custom: true }
        relationship: { table: gibbonRubric, key: gibbonRubricID, field: name  }
    effort: 
        name: "Assess Effort?"
        desc: ""
        args: { filter: yesno, required: true, custom: true }
    gibbonScaleIDEffort: 
        name: "Effort Scale"
        desc: "Short Name"
        args: { filter: string, custom: true }
        relationship: { table: gibbonScale, key: gibbonScaleID, field: nameShort  }
    gibbonRubricIDEffort: 
        name: "Effort Rubric"
        desc: "Name"
        args: { filter: string, custom: true }
        relationship: { table: gibbonRubric, key: gibbonRubricID, field: name  }
    comment: 
        name: "Include Comment?"
        desc: ""
        args: { filter: yesno, required: true, custom: true }
    uploadedResponse: 
        name: "Include Uploaded Response?"
        desc: ""
        args: { filter: yesno, required: true, custom: true }
    viewableStudents: 
        name: "Viewable to Students"
        desc: ""
        args: { filter: yesno, required: true, custom: true }
    viewableParents: 
        name: "Viewable to Parents"
        desc: ""
        args: { filter: yesno, required: true, custom: true }
    completeDate: 
        name: "Go Live Date"
        desc: "Column is hidden until date is reached."
        args: {filter: date, custom: true }
    complete: 
        name: "Completed?"
        desc: ""
        args: { filter: yesno, custom: true }
    columnColor: 
        name: "Column Color"
        desc: "Hex code with leading #"
        args: { filter: color, custom: true }
    sequenceNumber: 
        name: "Sequence Number"
        desc: ""
        args: { filter: numeric }
