Handling Attendance for Extended Care Activities in CiviCRM

2009-12-01 11:30
Written by
lobo - member of the CiviCRM community - view blog guidelines
This is a continuing series of blog posts on deploying CiviCRM at San Francisco School. In the previous blog posts we discussed how to expose relationship information in a profile and how to manage parent teacher conferences. There are also some slides explaining the module from a recent training seminar Our latest project was automating the extended care (classes before and after school) system. The previous process was quite manual and labor intensive (and error prone). The attendance sheet was printed (via a CiviReport) from the students signed in. The students queued up and were signed into the extended care program. Some of the students had to be manually written in (if they were not signed up). At the end of the day, the parents would pick up the child and locate the childs name in the multiple sheets and sign them out. Typically 10-20% of parents would not sign their children out. The business office would then take this piece of paper and then calculate the "activity blocks" (based on time spent in extended care) and enter them in an excel spreadsheet. There were a few exceptions to the rule (children of staff, students who signed up for unlimited extended care and some activities are free)

Extended Care SignIn Sheet

We already had the students who were signed up for specific classes in CiviCRM (as a custom group with multiple records). We used this information to generate a signin sheet. We used the excellent jQuery data table widget to render the list of registered students as a table. This allows the extended care person to sort on various columns very easily. We also used AJAX callbacks to signin a student when a checkbox was marked (and also unsign them when unchecked). Do peruse the PHP Code and html/javascript code to get an idea of whats happening. (yes i know, kinda crappy without a demo, send me email if u wanna help create sample data for a demo site). There are quite a few students that stay for extended care but have not "registered" for extended care. To take care of those students, we added a couple of select elements (student name and class name) along with an AJAX callback to add them. The SignIn page did not have anything in common with any CiviCRM page/form. So we created a new form and injected the menu item into the civicrm menu. SignIn Page To ensure things worked nicely and to catch all the bugs / edge cases, we basically ran both systems for the entire month of november (yes it was painful, but well worth it). We caught a few bugs in the logic which we fixed fairly easily. The last two weeks we had the staff and parents do the computer signin / signout while we maintained the paper records. Based on these observations we made quite a few changes to improve and simplify the flow. The school's web site is hosted on a fairly cheap webhost, and so speed is a bit of an issue. I made a few programming choices based on that. Since the school is fairly small (200 students), I used an html select box for the student and class drop down rather than an ajax auto complete widget. Also all POST transactions were AJAX posts, which is way faster than an HTML post (we need to do more ajax based POST's in CiviCRM Core)

Parent SignOut Page

The new Parent SignOut page is a simple CiviCRM form with an AJAX post. We allow a parent/caregiver to signout multiple children at the same time. You can peruse the PHP Code and html/javascript code to get an idea of whats happening. The form basically populates the signout table for the student on a specific day with the current time. SignIn Page The signout table is another multi-record custom group table which stores information about what student stayed in extended care and the start/end time that they were in the program. This allows staff to use the CiviCRM interface to go in and make changes to a specific record if needed.

Extended Care Activity Report

The final piece of the project included building a simple "report" for the business office so they could see (and export information) on the students and the "activity blocks" that they used (for billing purposes). At some stage we'll build a simple export/import directly into excel to ease this process. We also exposed each student's "extended care" information to the parents on the parent portal. This information is real time, so parents can correct things immediately if needed. As we get more data in the system, we will refactor that code and present the data in a better manner (rather than one big list) Portal Page The next phase of the project will be to link it with the invoicing system and automatically generate invoices along with a link to a CiviContribute page where parents can make a payment.

Impact on Core CiviCRM Development

A few thoughts on how this work can potentially impact core CiviCRM development:
  • We should use more AJAX posts across all of our simple forms and at least on a few of the more complex forms.
  • The SignIn code can be extended (easily?) to serve as a sign-in sheet for event registration
  • We need better systems to help developers migrate custom and profile fields / groups, especially on an incremental basis.
Filed under