Enrol members β
Use this flow when a member joins a class. Enrolments are how GCM tracks who is currently in a school, who finished, and who dropped out β and they feed every cohort report and per-member transcript.
TIP
For the auto-completion path (graduating someone closes their enrolment automatically), see Graduations instead.
Two ways to enrol a member β
You can enrol from either side of the relationship:
- From the school detail page β click Enrol student in the header. Quick when you're building a cohort.
- From the global Enrolments tab β click Enrol member in the top right. Quick when you've got a list of names from a sign-up sheet and want to bulk through them.
Both write to the same school_enrolments table; pick whichever flow matches what you have in front of you.
Open the enrolment dialog β
From Schools β Enrolments, click Enrol member.

Fill in the enrolment β
School β
Pick which school they're joining. The dropdown is searchable β type the first few letters to filter. Only active (non-deleted) schools appear.
If the school doesn't exist yet, cancel and go to the Schools tab to add it first. You can't create a school from inside the enrolment dialog.
Member β
Start typing the member's name. The dropdown queries the members table live as you type β both first names and last names β and excludes anyone who's been marked lost (lost_at IS NOT NULL).
WARNING
If you're enroling a visitor who isn't yet a member, you have to add them as a member first. The schools module only enrols people in your members table; there's no free-text-name fallback. This is intentional β your transcript should always point at a real profile.
Date of enrolment β
Defaults to today. Adjust if you're back-filling a roster from an existing class. Any date format the browser's date picker accepts works.
Status β
Three values:
- enrolled (default) β they're currently in the cohort. This is what you'll pick 99% of the time.
- completed β back-fill someone who already finished. Use this when migrating legacy data.
- withdrawn β they signed up but dropped out before finishing.
Click Save. The new row appears in the enrolments table and on the school detail page under Currently enroled.
Duplicate-enrolment check β
If the member already has an active (enrolled) row in the same school, GCM blocks the save and shows "This member is already actively enroled in this school." β no duplicate row is created.
To re-enrol someone for a second cohort of the same class:
- Find their existing enrolment (filter by school + member in the Enrolments tab).
- Either mark it
completed(if they finished the first run) orwithdrawn(if they dropped). - Then create the new enrolment row.
This pattern keeps the transcript clean β every cohort appears as its own row instead of a single row with ambiguous dates.
Filter the enrolments list β
The Enrolments tab has filters along the top:

- Hierarchy β only show enrolments where the member belongs to the selected region / branch / unit.
- School β show only one school's cohort.
- From / To β filter by
date_of_enrolment. Useful for "who joined the spring 2026 cohort?"
Hit Clear to reset everything. The result count shows next to the Enrolments heading so you know how many rows the filter is producing.
Edit an enrolment β
Click the pencil icon on any row. You can change the school, the member, the dates, and the status. Useful for fixing typos and back-filling completion dates.
TIP
Changing the school on an existing enrolment is allowed but rarely what you want β it rewrites history. If a student actually moved cohorts, mark the original row withdrawn and create a new enrolment in the new school. Your reports will read better.
Withdraw vs delete β
Two different actions:
- Withdraw β change the status to
withdrawn. The row stays. The transcript shows the member tried and stopped. - Delete β click the trash icon. The row is soft-deleted (
deleted_atstamped). The transcript loses the entry entirely.
Prefer withdraw. Most churches benefit from knowing who attempted a class even if they didn't finish β it's pastoral information, not just admin clutter.
Status colour coding β
The status badge in the Enrolments table is colour-coded:
- enrolled β blue.
- completed β green.
- withdrawn β red.
The same colours appear on the school detail page so a quick glance at the cohort tells you who's where.
What gets saved β
school_enrolments row:
- school_id + member_id β the FK pair.
- date_of_enrolment β when they joined.
- date_of_completion β set automatically when graduated, or manually when back-filling.
- status β
enrolled,completed,withdrawn. - deleted_at β null until soft-deleted.
Common questions β
Can I enrol multiple members at once? Not from the dialog. The bulk path is the Bulk actions page where you can select members from the member list and enrol them all into a school in one shot.
Can I move a whole cohort between schools? Yes, but use the delete-with-reassign flow on the old school rather than editing each enrolment by hand. The reassign option rewrites every enrolment FK in one batch.
Does enroling someone notify them? Not by default. If you want email/SMS confirmation, hook the enrolment table into a workflow that listens for new rows and sends the message.
Next steps β
- Set objectives β give the cohort a curriculum to work through.
- Record graduations β close the loop.
- School reporting β track cohort progress.