PHLC Apps
Generalize a scheduler for use of staff, family and other community members to organize around basic staffing, special events (ie. Children’s Country Fair volunteer sheet), and other practicalities where larger amounts of information need to be streamlined for simplicity in use. Think about that large spreadsheet that has been used for the last few country fairs…
Children’s Country Fair CCF Scheduler CCF Volunteer Prairie Hill PHill PRAIRIE HILL
- the title that will be displayed can be anything that makes practical sense
i don’t think it needs to be anything brilliant or catchy. let’s just come
up with something short and practical for the actual app building
ccfvolunteer CCFvol
- [ ] can we link to and/or integrate this application with the currently existing google docs spreadsheet? I think that this will be important for those who are less comfortable with switching to new tools
- [ ] will need a reset action? depends on how i program the actual modifications as people volunteer. maybe there is a new duplicate database? how is this done usually? it’s all new to me, but hella exciting! i never thought database work could be so much fun!
Let’s take a look at the country fair sign up sheet. It’s a rather daunting form to work with. Maybe I am the only one who hates spreadsheets, but I considered it the most cumbersome tool to use when trying to
- See what slots are open and need volunteers, how many are needed, etc
- Sign up for a time
So, thinking in a Rails way, what are the resources to be identified? What do we need the ability to Create, Read, Update and Destroy? Once we figure that out, the rest is easy display modification, based on the updated information. I love it!
Country Fair Sign-up Spreadsheet
Let’s look at the spreadsheet, which will work as a basis for our model. Here are the columns of the spreadsheet.
- Work Area
- Coordinator
- Has painted sign?
- # Tickets for activity
- tickets collected
- # volunteers needed
- Friday setup (4-6)
- Saturday setup (9-11)
- …
Can we simplify this? Some of the columns seem like minor relationships that may not need such a spotlight. Let’s think about it. What I see as the primary purpose and need for this sign up is just that: for people to sign up to help out where needed. Everything else is secondary, right? So, we can narrow it down to the following:
- Work Area (Activity)
- # Volunteers needed (Need)
- total needed (Need:total)
- still needed (calculated as people sign up)
- volunteers names as they sign up?
- this may be secondary as a different view as it might not be
necessary for the main sign up. basically, if you want to sign up,
you first will want to see what’s open. maybe, for those who are
curious who they might be working alongside (where more than one
volunteer is required per station session), there could be a small
attached link with a nice javascript drop-down window or something
like this
- Time slots (Shift)
- Friday setup (4-6pm)
- Saturday setup (9-11am)
- 11am-12pm
- 12-1pm
- 1-2pm
- 2-3pm
- Saturday tear-down (3-5pm)
- Time slots (Shift)
Okay. I think that I will try building a specific application for this purpose first, then modify it or create a more general one in the future.
Activities | |||||||
---|---|---|---|---|---|---|---|
id | title | coordinator | tickets | painted_sign | shifts | ||
1 | Face Painting | Ande | 3 | true | Saturday 11-12, Saturday 11-12, Saturday 12-1, Saturday 12-1 | ||
2 | Signage | older elementary | 0 | false | Saturday 9-11 setup, Saturday 9-11 setup, Saturday 9-11 setup |
Shifts | |||||
---|---|---|---|---|---|
id | activity_id | title | volunteer_id | ||
1 | 1 | Saturday 11-12 | 1 | ||
2 | 1 | Saturday 11-12 | 2 | ||
3 | 1 | Saturday 12-1 | 3 | ||
4 | 1 | Saturday 12-1 | 4 | ||
5 | 2 | Saturday 9-11 setup | 1 | ||
6 | 2 | Saturday 9-11 setup | 2 | ||
7 | 2 | Saturday 9-11 setup | 3 | ||
Volunteers/Users | ||||
---|---|---|---|---|
id | name | |||
1 | Grant Brownyard | [email protected] | ||
2 | Mandie Schadwinkel | [email protected] | ||
3 | Ander Son | [email protected] | ||
4 | Justin Fearing | [email protected] | ||
NB: add_column :users, :name, :string
Activities | |
---|---|
id | integer |
title | string |
vol | integer |
shift_id | integer |
Activities | example | |||
---|---|---|---|---|
id | integer | Activity Object Id | 1 | |
title | string | Name of the Activity | “Water Play” | |
coordinator | string | Name of the person coordinating the activity | “Chris Eigbrett” | |
tickets | integer | Number of tickets needed to participate | 2 | |
painted_sign | boolean | Does the activity have a painted sign? | true | |
shifts | text | Array or collection of Shifts being managed for this activity | [ “Saturday 11-12” => 2, “Saturday 12-1” => 3, … ] | |
An Activity has_many Shifts, each Shift associated with an Activity has a unique number of volunteers needed
rails generate scaffold Activities title:string vol:integer shift_id:integer
It looks like there isn’t a consistent association between an activity and the number of volunteers needed. For example, the activities that are setting things up only need volunteers during some of the shifts. Perhaps some
Each activity has a number of volunteers needed, depending up the shift
How should we / where should we think about placing shifts? I ran into this same logical problem when trying to program a calendar. I can’t quite wrap my mind around the logistics of it.
Shifts | |
---|---|
id | integer |
title | string |
Shifts | example | |||
---|---|---|---|---|
id | integer | record id | 5 | |
title | string | description of the shift day and time | “Saturday 12-1” | |
activity_id | integer | associated activity by record id | 3 | |
vols | integer | number of volunteers needed for this shift (title, activity_id) | 2 |
rails generate scaffold Shifts title:string
Each shift has a number of volunteers needed, depending on the activity
- Design note: shifts selection should be maybe a drop down menu?
Use devise for this part?
Volunteers | |
---|---|
id | integer |
name | string |
A controller’s purpose is to receive specific requests for the application. Routing decides which controller receives which requests.