Google Summer of Code 2012 Project
Description
This project aims to create a roster tool for the CERT service. This would involve a web interface where one could view time scheduling of volunteers. Volunteers could be reassigned using drag and drop features on the timetable as per need and requirement. The interface will highlight empty slots which require filling to the user. The client may then choose to fill these slots manually or take advantage of the autofill functionality of the application which will fill the slots for you.
https://google-melange.appspot.com/gsoc/proposal/review/google/gsoc2012/bhaavanmerchant/8005
Blueprint
http://eden.sahanafoundation.org/wiki/BluePrintRoster
Demo
The current instance of the demo is available at http://bhaavan.demo.gsoc.sahanafoundation.org/eden/roster/index. Feedback on this is appreciated.
Student Details
Bhaavan Merchant
bhaavanmerchant [at] gmail [dot[ com
0091-9552435405
Repo: https://github.com/bhaavanmerchant/eden
Mentor Details
Dominic König
dominic [at] nursix [dot[ org
Forked repo: https://github.com/nursix/eden
Summary
The Rostering tool was my first development contribution to Sahana, and open source community in general. For this, initially I established a workflow with git and my developing environment. After this, based on the feedback to my project, I realized the differential from my initial view of things. For this, I spent some significant time in re-assessing my plan and project to move forward. Simultaneously I spent some time reading and getting used to development in web2py. Subsequently I began coding for my project. I had weekly meetings with Dominic, my mentor and discussed my updates and progress. To start with, I began developing the views and worked on javascript for the tool. Once that was done, I set up corresponding models, and controllers for interaction. As I grew comfortable, my coding gained momentum. Towards the end, after numerous bugfixes, breaking of existing code, refactoring of mine already written code, I spent time on improving the eden integration of my tool. I also structured the code according to the PEP8 and Developer's Guidelines.
It has been a good learning experience, and I have gained insight into Sahana development. However, during my project, I tried to code as a web2py application instead of as a part of Sahana framework. I realized this only later, and because of this, I duplicated a lot of functionality by my code, which s3 APIs already handle elegantly. This reduced affected the productivity, and I have then tried to modify my code to make more use of s3. I plan to further improve my Sahana integration after the evaluations. After a break of a couple of weeks post-evaluation, I wish to also implement the tasks mentioned in Future Scope.
Future Scope
Ability for volunteers to raise a change request and admin approval and denial for the same. This feature is already partially implemented, with tables setup. Front end CRUD for this is currently missing.
PDF print of roster. Again, code for this was partially done. It requires styling and populating data improvements to be a presentable pdf.
Ability to shift from weekly view to daily view / other views.
Templating system
Day view
To Do
- Change the label from 'Event' to 'Type' when selecting between
Project/Org/etc ('Event Name' -> 'Name')
- Change the resource name from 'table' to 'roster' (at least for the
user-visible CRUD strings)
- Rename 'Slots' as 'Shifts' (which also keeps consistency with the
use of Shifts elsewhere)
- I don't understand what 'Start' & 'Over' are for here - I guess the
idea was to integrate with other calendars, e.g. a critical one being the reporting of volunteer hours (i.e. feeding into hrm_programme_hours)
- I would hide the fields from the UI until implemented (can keep the
fields in code, perhaps commented out with an @ToDo (I'd also rename 'Over' as 'End' to be consistent with other usages.)
- Does the People list on the left-hand side get filtered for people
already-assigned?
- The 'Roles' menu link is incorrect (points to the same as 'People')
- Like that list, I would have the HRM controllers that you use
available from the Roster module (keep users within your module when accessing these options, which may require moving functions to modules & then calling from the 2 controllers)
- The code could use some style improvements: PEP8 spacing & Eden
comment lines between functions
Meeting Dates
5 June 2012 - Google Hangout
13 June 2012 - Google Hangout
20 June 2012 - Google Hangout (1900 UTC)
27 June 2012 - Google Hangout (1900 UTC)
6 July 2012 - #sahana-meeting (1900 UTC)
11 July 2012 - Google Hangout (1700 UTC)
11 July 2012 - Google Hangout (1900 UTC)
18 July 2012 - Google Hangout (1900 UTC)
1 August 2012 - Google Hangout (1900 UTC)
3 August 2012 - Google Hangout (1800 UTC)
6 August 2012 - Google Hangout (1800 UTC)
8 August 2012 - Google Hangout (1800 UTC)
10 August 2012 - Google Hangout (1800 UTC)
13 August 2012 - Google Hangout (1800 UTC)
15 August 2012 - Google Hangout (1800 UTC)
17 August 2012 - Google Hangout (1800 UTC)
Progress
Finalizing idea
Establishing contact with CERT members for review
Setting up a controller and view for the rostering tool
Building a UI similar to the one in blueprint
Creating a prototype of the rostering tool.
CSS to match the blueprint
Database structure finalized
Database definition done
CERT Review meeting for feedback
s3db for joining tables
Dataflow from model to controller, controller to view and in reverse order established.
Working roster tool
Creating other functions for table managements, slots, shifts etc.
Integrating into eden
Using the CERT template
Shifting to explicit declaration of tables
Changing to table instance specific roles instead of global
CRUD, and UI improvements
Code cleanup for readability, and improvement. Commenting code.
Bug fixes
Functional Roster tool
Project Goals and Timeline
Date | Goal | Measure | Progress |
24th April | Gaining a better understanding of the eden code | Fixing Bugs | done |
27th April | Gaining a better understanding of the CERT code. Creating a skeletal module for implementing the full code. This will be accessible through a REST Uri | Code commit, accessible from demo.sahana.lk | done |
1st May | Modified Proposal in conformation with the feedback received | Interaction with the community to finalize the project Goals, and feedback; Modification of timeline if needed; Finalizing the details; Prioritizing the tasks | done |
17th May | Implementing their demo examples and ensure proper functioning | Comparing all the required jQuery plugins, weighing their individual pros and cons, and choosing the right plugin | done |
4th June | Admin can view admin panel | Admin manageable panel | done |
10th June | Volunteers' list populated from database | Populate the volunteers list with volunteers which can be dragged and dropped to main grid | done |
18th July | Success message on submission of new roster | Storing new data into database | done |
20th July | Fix correct JSON parsing | Complete roster write and read | done |
24th July | Option to search volunteers, and short list volunteers by filters | Scaling of the volunteers list on the side panel | done |
31st July | Making Job roles + and - functional | Working functionality | done |
3rd August | Preliminary Admin panel | basic functionality | done |
7th August | Complete table identification by drop downs on index | Completed Roster frontend | done |
9th August | Profile Improvements | Functional Admin Panel | done |
16th August | Buffer period | Fix bugs | done |
18th August | Improved code structure | Code cleanup and commenting, shifting strings to T() etc., Eden integration | done |
20th August | Project completion | Complete documentation, and submit report | done |