General scheduling application

Volunteer scheduling schema diagram
digraph g {

node [shape="box", fontname="Helvetica", fontsize="11"] edge [fontname="Helvetica"]

groupings_schedules -> groupings [arrowhead = "crow"] groupings_schedules -> schedules [arrowhead = "crow"]

schedules -> virtual_shifts [arrowhead = "crow"] schedules -> jobs [arrowhead = "crow"] schedules -> actual_shifts [arrowhead = "crow"]

virtual_shifts -> actual_shifts [arrowhead = "crow"]

jobs -> actual_shifts [arrowhead = "crow"] jobs -> virtual_shifts [arrowhead = "crow"]

volunteers -> actual_shifts [arrowhead = "crow"] volunteers -> virtual_shifts [arrowhead = "crow"]

}


 * actual_shifts (representing a single shift on an actual schedule with a defined date)
 * shift_date (date shift will be scheduled)
 * start_time (start time of shift on that date)
 * end_time (end time of shift on that date)
 * job_id
 * volunteer_id


 * groupings (a group of schedules that can be displayed together)
 * name


 * groupings_schedules
 * grouping_id
 * schedule_id


 * jobs (job to be performed during the shift)
 * name
 * schedule_id


 * schedules (for grouping related shifts)
 * name


 * virtual_shifts (representing a shift or shifts on an "ideal" schedule with no actual date yet attached)
 * effective_date (first date this shift can appear on an actual schedule)
 * ineffective_date (last date this shift can appear on an actual schedule)
 * day_of_week (day of week, 0-6 = sun-sat)
 * start_time
 * end_time
 * slot_count (1-N for use in producing multiple actual shifts, default = 1)
 * job_id
 * volunteer_id (null allowed, this volunteer will be assigned to slot #1 when actual shifts are generated)
 * schedule_id


 * volunteers (volunteer specific information could go here -- i.e. first volunteer date, status, reliability index, etc.)
 * contact_id
 * name (until hooked up to main app when name will come from contacts table)