Skip to content

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:

  1. Draft: The initial state. Assignments and notes can be edited freely.
  2. 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.
  3. 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

  1. Navigate to Schedules > Create New.
  2. Select the Schedule Type (e.g., "Q1 2026 Preaching").
  3. Choose the Date Range.
  4. 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.

  1. Review the Draft schedule.
  2. Click Publish Schedule in the top right.
  3. Confirm the action.
    • Status changes to Published.
    • Edit controls are disabled.
    • Notifications are queued.

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.