= Google Summer of Code 2012 Project = [[TranslatedPages]] = 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||