Schedule Management
The Schedule Management system is the core of the application, allowing administrators to create, manage, and publish duty rosters.
Overview
Schedules are generated from defined Schedule Types (e.g., "Sunday Service", "Midweek Bible Study"). Each schedule consists of a series of dates, and each date has specific slots to be filled by members.
Features
Schedule Types & Templates
Schedules are not free-form; they follow a strict structure defined by Schedule Types and Template Slots.
- Schedule Type: Defines the recurrence (e.g., every Sunday) and the overall scope.
- Template Slots: Define the roles needed for that schedule type (e.g., "Preacher", "Usher", "Announcements").
- Can be linked to a Responsibility (limiting selection to qualified members).
- Can be a Text Field (for free text, e.g., "Bible Reading" passage).
Schedule Lifecycle
A schedule goes through a strict lifecycle:
- Draft: The initial state. Assignments and notes can be edited freely.
- Published: The schedule is live.
- Notifications are sent on publish.
- Editing is locked to prevent accidental changes.
- Members can see their assignments in the portal.
- Archived: Old schedules for historical reference (NOT YET IMPLEMENTED).
Special Events
Specific dates within a schedule can be marked as Special Events (e.g., "Good Friday", "Christmas Service").
- Toggle: Mark a date as special via the star icon in the notes column.
- Label: specific custom label (e.g., "Combined Service").
- Visual: Highlighted in the schedule grid.
Assignment History
All changes to assignments are tracked using django-simple-history. You can view the full audit trail of who changed what and when by clicking "View History" on the schedule detail page.
Workflows
Creating a Schedule
- Navigate to Schedules > Create New.
- Select the Schedule Type (e.g., "Q1 2026 Preaching").
- Choose the Date Range.
- The system automatically generates all dates and empty slots based on the template.
Managing Assignments
- Member Slots: Click a cell to select a member. The list is filtered by the slot's required responsibility.
- Text Slots: Click to type freely (e.g., for sermon titles or readings).
- Notes: Add notes to a specific date (e.g., "Communion Service").
- Special Events: Toggle a date as a special event using the star icon.
Editing Schedule Properties
Even after creation, you can modify the schedule's structure (while in Draft mode):
- Rename: Click the schedule title in the header to rename it in place.
- Resize Dates: Click the date range in the header to change the start and end dates.
- Extending: New dates will be automatically generated with empty slots.
- Shrinking: Dates outside the new range will be permanently deleted along with their assignments.
Publishing
Irreversible Action
Publishing a schedule triggers notifications to all assigned members. Ensure the roster is final before publishing.
- Review the Draft schedule.
- Click Publish Schedule in the top right.
- Confirm the action.
- Status changes to
Published. - Edit controls are disabled.
- Notifications are queued.
- Status changes to
Formatting
- Unpublish: If a mistake is made, an admin can Unpublish the schedule to revert it to Draft status. (Note: This does not retract sent notifications).
Technical Details
Models
Schedule: The parent container (Clusterable).ScheduleDate: A specific date (Child).Assignment: A slot on a date (Child).ScheduleType&ScheduleTemplateSlot: The blueprint.
Protection Logic
The views enforce "Published Protection". Most edit endpoints (update_assignment, update_date_note) verify schedule.status != PUBLISHED before processing changes. The UI also reflects this by hiding edit controls.