Difference between revisions of "General scheduling application"

From FreekiWiki
Jump to navigation Jump to search
Line 9: Line 9:
 
groupings_schedules -> schedules [arrowhead = "crow"]
 
groupings_schedules -> schedules [arrowhead = "crow"]
  
schedules_volunteers -> volunteers [arrowhead = "crow"]
+
schedules_people -> people [arrowhead = "crow"]
schedules_volunteers -> schedules [arrowhead = "crow"]
+
schedules_people -> schedules [arrowhead = "crow"]
  
 
schedules -> default_shifts [arrowhead = "crow"]
 
schedules -> default_shifts [arrowhead = "crow"]
Line 22: Line 22:
  
 
default_shifts -> default_assignments [arrowhead = "crow"]
 
default_shifts -> default_assignments [arrowhead = "crow"]
volunteers -> default_assignments [arrowhead = "crow"]
+
people -> default_assignments [arrowhead = "crow"]
  
 
actual_shifts -> assignments [arrowhead = "crow"]
 
actual_shifts -> assignments [arrowhead = "crow"]
volunteers -> assignments [arrowhead = "crow"]
+
people -> assignments [arrowhead = "crow"]
  
volunteers -> attendance [arrowhead = "crow"]
+
people -> attendance [arrowhead = "crow"]
 
assignments -> attendance [arrowhead = "none"]
 
assignments -> attendance [arrowhead = "none"]
  
Line 49: Line 49:
 
:* ''self-explanatory''
 
:* ''self-explanatory''
 
:eligibility_type
 
:eligibility_type
:* ''Who can fill shifts on this schedule? Either a LIMITED list of volunteers, or ANY volunteer''
+
:* ''Who can fill shifts on this schedule? Either a LIMITED list of people, or ANY person''
 
:shift_type
 
:shift_type
 
:* ''Can the shift be split up into chunks? Either RIGID (one person per shift), or SPLITTABLE (multiple people with non-overlapping, consecutive times can fill this shift)''
 
:* ''Can the shift be split up into chunks? Either RIGID (one person per shift), or SPLITTABLE (multiple people with non-overlapping, consecutive times can fill this shift)''
  
;schedules_volunteers
+
;schedules_people
:* ''if the schedule eligibility type indicates that a limited list of volunteers can takes shifts, then a record linking the volunteer to the schedule needs to be here in order for the volunteer to be appear in the selection widget''
+
:* ''if the schedule eligibility type indicates that a limited list of people can takes shifts, then a record linking the person to the schedule needs to be here in order for the person to be appear in the selection widget''
 
:schedule_id
 
:schedule_id
:volunteers_id
+
:person_id
  
;volunteers ???
+
;people ???
:* ''volunteer specific information could go here -- i.e. first volunteer date, status, reliability index, etc.''
+
:* ''person specific information could go here -- i.e. first person date, status, reliability index, etc.''
:* ''if there's no specific volunteer info to track, we could just use the contacts table from the main database.''
+
:* ''if there's no specific person info to track, we could just use the contacts table from the main database.''
 
:contact_id
 
:contact_id
 
:name
 
:name
Line 71: Line 71:
 
:schedule_id
 
:schedule_id
  
;virtual_shifts
+
;default_shifts
 
:* ''representing a shift or shifts on an "ideal" schedule with no actual date yet attached''
 
:* ''representing a shift or shifts on an "ideal" schedule with no actual date yet attached''
 
:effective_date
 
:effective_date
Line 84: Line 84:
 
:* ''1-N for use in producing multiple actual shifts, default = 1''
 
:* ''1-N for use in producing multiple actual shifts, default = 1''
 
:job_id
 
:job_id
:volunteer_id
+
:person_id
:* ''null allowed, this volunteer will be assigned to slot #1 when actual shifts are generated''
+
:* ''null allowed, this person will be assigned to slot #1 when actual shifts are generated''
 
:schedule_id
 
:schedule_id
  
 
;actual_shifts
 
;actual_shifts
 
:* ''representing a single shift on an actual schedule with a defined date''
 
:* ''representing a single shift on an actual schedule with a defined date''
:virtual_shift_id
+
:default_shift_id
 
:job_id
 
:job_id
  
Line 99: Line 99:
 
:ends_at
 
:ends_at
 
:* ''end date and time of shift on shift date''
 
:* ''end date and time of shift on shift date''
:volunteer_id
+
:person_id
  
 
;attendance
 
;attendance
 
:* ''for tracking who actually shows up for shifts and who does not, etc.''
 
:* ''for tracking who actually shows up for shifts and who does not, etc.''
 
:assignment_id
 
:assignment_id
:volunteer_id
+
:person_id
 
:status
 
:status
 
:* ''NO CALL NO SHOW, CANCELED, TARDY, and ATTENDED would be useful statuses''
 
:* ''NO CALL NO SHOW, CANCELED, TARDY, and ATTENDED would be useful statuses''
Line 132: Line 132:
 
:grouping = "Volunteer Interns", schedule = "Front Desk Interns"
 
:grouping = "Volunteer Interns", schedule = "Front Desk Interns"
  
;schedules_volunteers
+
;schedules_people
:schedule =  "Adoption Teachers" volunteer = "Joe"
+
:schedule =  "Adoption Teachers" person = "Joe"
:schedule =  "Adoption Teachers" volunteer = "Mary"
+
:schedule =  "Adoption Teachers" person = "Mary"
:schedule =  "Prebuild Interns" volunteer = "Fred"
+
:schedule =  "Prebuild Interns" person = "Fred"
:schedule =  "Prebuild Interns" volunteer = "Poindexter"
+
:schedule =  "Prebuild Interns" person = "Poindexter"
:schedule =  "Front Desk Interns" volunteer = "Flip"
+
:schedule =  "Front Desk Interns" person = "Flip"
:schedule =  "Front Desk Interns" volunteer = "Bozo"
+
:schedule =  "Front Desk Interns" person = "Bozo"
  
;volunteers
+
;people
 
:name = "Joe"
 
:name = "Joe"
 
:name = "Mary"
 
:name = "Mary"
Line 148: Line 148:
 
:name = "Bozo"
 
:name = "Bozo"
  
;virtual_shifts
+
;default_shifts
 
:SAMPLE RECORD A
 
:SAMPLE RECORD A
 
:effective_date = 2009-08-01
 
:effective_date = 2009-08-01
Line 157: Line 157:
 
:slot_count = 7
 
:slot_count = 7
 
:job => "System Evaluation"
 
:job => "System Evaluation"
:volunteer_id = NULL
+
:person_id = NULL
 
:schedule => "Prebuild"
 
:schedule => "Prebuild"
  
 
;actual_shifts
 
;actual_shifts
 
:SAMPLE RECORD B
 
:SAMPLE RECORD B
:virtual_shift => SAMPLE RECORD A
+
:default_shift => SAMPLE RECORD A
 
:job => System Evaluation
 
:job => System Evaluation
 
:
 
:
Line 170: Line 170:
 
:actual_shift => SAMPLE RECORD B
 
:actual_shift => SAMPLE RECORD B
 
:starts_at = 11:30
 
:starts_at = 11:30
:ends_at = 15:00 (volunteer needs to leave early)
+
:ends_at = 15:00 (person needs to leave early)
:volunteer => Doogie (Doogie doesn't have a schedules_volunteers record, but does exist in the volunteers table)
+
:person => Doogie (Doogie doesn't have a schedules_people record, but does exist in the people table)
  
 
;attendance
 
;attendance
 
:assignment => SAMPLE RECORD C
 
:assignment => SAMPLE RECORD C
:volunteer => Doogie
+
:person => Doogie
 
:status = TARDY
 
:status = TARDY
  
Line 185: Line 185:
 
: select begin and end date
 
: select begin and end date
 
: loop through dates, checking for day of week
 
: loop through dates, checking for day of week
: find virtual shifts that fit
+
: find default shifts that fit
 
: for X = 1 to slot_count, generate an actual shift
 
: for X = 1 to slot_count, generate an actual shift
  
Line 202: Line 202:
  
 
; take attendance
 
; take attendance
: when volunteer checks in at front desk, staff person can set a status by selecting an option for that assignment
+
: when person checks in at front desk, staff person can set a status by selecting an option for that assignment
 
: this inserts a record into the attendance table and sets the status
 
: this inserts a record into the attendance table and sets the status
  
 
[[Category:FGdb]]
 
[[Category:FGdb]]

Revision as of 07:19, 18 June 2009

Diagram

This is a graph with borders and nodes. Maybe there is an Imagemap used so the nodes may be linking to some Pages.

Schema notes

groupings
  • a group of schedules that can be displayed together
name
  • self-explanatory
groupings_schedules
grouping_id
schedule_id
schedules
  • for grouping related shifts
name
  • self-explanatory
eligibility_type
  • Who can fill shifts on this schedule? Either a LIMITED list of people, or ANY person
shift_type
  • Can the shift be split up into chunks? Either RIGID (one person per shift), or SPLITTABLE (multiple people with non-overlapping, consecutive times can fill this shift)
schedules_people
  • if the schedule eligibility type indicates that a limited list of people can takes shifts, then a record linking the person to the schedule needs to be here in order for the person to be appear in the selection widget
schedule_id
person_id
people ???
  • person specific information could go here -- i.e. first person date, status, reliability index, etc.
  • if there's no specific person info to track, we could just use the contacts table from the main database.
contact_id
name
  • until hooked up to main app when name will come from contacts table
jobs
  • job to be performed during the shift
name
  • self-explanatory
schedule_id
default_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
person_id
  • null allowed, this person will be assigned to slot #1 when actual shifts are generated
schedule_id
actual_shifts
  • representing a single shift on an actual schedule with a defined date
default_shift_id
job_id
assignments
  • representing the filled part of an actual shift -- that is, someone has signed up for that actual shift
starts_at
  • start date and time of shift on shift date
ends_at
  • end date and time of shift on shift date
person_id
attendance
  • for tracking who actually shows up for shifts and who does not, etc.
assignment_id
person_id
status
  • NO CALL NO SHOW, CANCELED, TARDY, and ATTENDED would be useful statuses

Sample data values

groupings
name = "Adoption View"
name = "Prebuild View"
name = "Volunteer Interns"
name = "Adoption Classes"
schedules
type = "limited", name = "Adoption Teachers"
type = "all", name = "Adoption Class Students"
type = "limited", name = "Prebuild Interns"
type = "limited", name = "Front Desk Interns"
type = "all", name = "Prebuild"
groupings_schedules
grouping = "Adoption View", schedule = "Adoption Teachers"
grouping = "Adoption View", schedule = "Adoption Class Students"
grouping = "Prebuild View", schedule = "Prebuild Interns"
grouping = "Prebuild View", schedule = "Prebuild"
grouping = "Volunteer Interns", schedule = "Adoption Teachers"
grouping = "Volunteer Interns", schedule = "Prebuild Interns"
grouping = "Volunteer Interns", schedule = "Front Desk Interns"
schedules_people
schedule = "Adoption Teachers" person = "Joe"
schedule = "Adoption Teachers" person = "Mary"
schedule = "Prebuild Interns" person = "Fred"
schedule = "Prebuild Interns" person = "Poindexter"
schedule = "Front Desk Interns" person = "Flip"
schedule = "Front Desk Interns" person = "Bozo"
people
name = "Joe"
name = "Mary"
name = "Fred"
name = "Poindexter"
name = "Flip"
name = "Bozo"
default_shifts
SAMPLE RECORD A
effective_date = 2009-08-01
ineffective_date = NULL (never)
day_of_week = 2 (Tuesday)
start_time = 11:30
end_time = 15:30
slot_count = 7
job => "System Evaluation"
person_id = NULL
schedule => "Prebuild"
actual_shifts
SAMPLE RECORD B
default_shift => SAMPLE RECORD A
job => System Evaluation
assignments
SAMPLE RECORD C
actual_shift => SAMPLE RECORD B
starts_at = 11:30
ends_at = 15:00 (person needs to leave early)
person => Doogie (Doogie doesn't have a schedules_people record, but does exist in the people table)
attendance
assignment => SAMPLE RECORD C
person => Doogie
status = TARDY


Functionality

Basic add, delete, update, list for each table
Generate actual shifts
select begin and end date
loop through dates, checking for day of week
find default shifts that fit
for X = 1 to slot_count, generate an actual shift
display schedules
display schedule groupings
select from list of defined schedules or groupings of schedules
select start and end dates
find all shifts that match
display in a manner similar to current schedule, with links for filling shifts, editing shifts, etc.
fill actual shifts
copy actual shifts
edit actual shifts
take attendance
when person checks in at front desk, staff person can set a status by selecting an option for that assignment
this inserts a record into the attendance table and sets the status