Google Summer of Code


I am proud to announce that I have been selected as Google Summer of Code student this year for project Administration Tool for OpenMRS 2.0. Thanks to OpernMRS community for showing your trust on me. Thanks to my mentors Wyclif Luyima and Darius Jazayeri for selecting me.  Now, I will do my best effort to make this project a success and become an active member of OpenMRS community. I am a GSoC’er now ! 🙂


Week 12 (5th Aug – 11th Aug)

Hello all

So, we are here in the last week of GSoC. Its time to clean up code, write documentation, and make a catchy video presentation for our projects.

I am able to finish main features of the module this week. Also, developed Manage global Properties form where we can control global properties and their values.

Cleaning up and organising UI a bit.

Week 11 (29th July – 4th Aug)

Hi all

Its been an amazing experience till now. GSoC really rocks 🙂

Finally, all features of Location Manager finished and app ready. Worked on following things :

1. View location hierarchy. I am currently using the core’s Treenode UI for displaying locations tree structure but still looking for some good UI. I am working on jquery functions to expand and hide locations.

2. Manage attribute types. Create, Edit, Retire and Purge attribute types.

3. Manage Location tags. This was an interesting thing to work on. The API for managing tags is very well developed by OpenMRS developers. Respect _/\_

4. Fixed Git comments on committed code by Wyclif.

5. Wrote In-line validation for all forms.

Getting following issues :

1. Retire location tags not working – The function locationService.retireLocationTag(locTag) works very well, shows success but the retired attribute of that tag still remains 0 (should change to 1 ideally). need to look upon this.

Here are few screenshots of the current work :


Things to do next :

1. Start developing Advanced Settings

2. Clean code and write documentation

Week 10 (21st July – 28th July)

Its the 10th week of GSoC.

I have almost completed Location Manager app for the homepage. Mostly worked on the controllers and service classes. Need to improve UI a bit.

Things which are working good are :

1. Add a new location
2. Attach location tags with a location
3. Edit a location
4. Retire a location
5. View all locations
6. Location form validation and inline errors

Let me show some of the screenshots :

loc saved

view locc

retire loc

Things to do now are :

1. Manage location attribute types

2. Represent location hierarchy in some good UI

Week 9 (13th July – 20th July)

Hi all

So, we have lived 9 weeks of GSoC. Its really been a awesome experience till now, where I have got to learn a lot of lot of things.

This week, I was not able to work much since I am at Bangalore (out of station), for a training. I had informed Wyclif about the same.


Week 8 (7th July – 13th July)


This week I continued developing Location Manager. I have just completed Adding new locations feature. As discussed with mentor, I would now add basic Unit tests for account manager classes.

Next task is to think of some good way of depicting location hierarchy. Then, I would code for managing Location tags.

I missed the first OpenMRS social hour. Eagerly waiting for the second one on 16th July.


Week 7 (30th June – 6th July)


Pardon for being late to post this week. I was out of town this weekend and didn’t have access to internet.

This week I started developing the Location manager. I am focussing on improved Managing location tags right now. There will be many improved featured under location manager in reference application. I went through the source code of managing locations feature in current UI and understood its functioning. Here’s a screenshot of current work.


Tomorrow, I have weekly call with my mentor in which we are going to discuss more on additional features and settings for managing locations.


Week 6 (23rd June – 30th June)

Its the last day of the month and we have lived 6 weeks of GSoC !!

I know this time I am little late to post. Pardon.

So, the week was full of excitement. I have passed the mid-term evaluations. Yayy 😀 . I enjoyed watching midterm presentation videos of my co-gsocers. Its good to see how reference application is evolving and how much hard-work has been done on various cool projects by my colleagues.

Things I have done this week:

  • Wrote jquery script for tabbed user interface for linking multiple user accounts to a person account
  • Had discussions with Wyclif, Mark, Darius and Burke about various aspects of account manager
  • Weekly call with mentor
  • Finalized the UI for multiple user accounts




Here’s a jquery snippet I wrote for controlling tabs :

jq(document).ready(function() {
jq('#tabs').live('click', function() {
 // Get the tab name
 var tabContentname = \$(this).attr("id") + "_tabContent";
// hide all other tabs
 jq("#tabContent div").hide();
 jq("#tabs li").removeClass("current ui-tabs-active ui-state-active");
// show current tab
 jq("#" + tabContentname).show();
 jq(this).parent().addClass("current ui-tabs-active ui-state-active")
jq('#tabs a.remove').live('click', function() {
// Get the tab name
 var tabid = \$(this).parent().find(".tab").attr("id");
// remove tab and related tabContent
 var tabContentname = tabid + "_tabContent";
jq("#" + tabContentname).remove();
// if there is no current tab and if there are still tabs left, show the first one
 if (\$("#tabs li.ui-state-active").length == 0 && \$("#tabs li").length > 0) {
 // find the first tab
 var firsttab = \$("#tabs li:first-child");
 firsttab.addClass("current ui-tabs-active ui-state-active");
// get its link name and show related tabContent
 var firsttabid = \$(firsttab).find("").attr("id");
 \$("#" + firsttabid + "_tabContent").show();
// change the tab's name to its corresponding username
 jq('[id\$=_username]').live('change', function(){ 
 var fieldID =;
 var tabID = fieldID.replace(/_username/,'');


Things I am working on ;

  • Passing data from to AccountDomainWrapper
  • Creating multiple accounts using a sequential approach

Week 5 (16th June – 22nd June)

Greetings 🙂

Hope you guys are enjoying reading my weekly blog posts. I too remain excited to post them.

I must say this week was a one successful and productive week for the project. I was finally able to solve the blocker which hindered me for 4 days. The error “argument type mismatch” seems to be so simple and easily solvable one. But, ask me, it took me to completely reshape the module structure to get over with it. There were many reasons which were causing conflicts. Actually, I started with replicating the Mirebalais Account Manager code and editing it (you would know if you read my previous posts :p ). I replicated most of the classes and thought of using only the required ones but, the unused ones created a mess (specially the Service classes).

Thanks to Wyclif for guiding the right way. I deleted all of the copied classes and started making fresh with my own customized needs. It took no more than 3 days to complete all the services, wrappers and controllers. And bang !, everything started working 😀 Meanwhile, many members from OpenMRS community helped me. I feel lucky to be member of such great community. (Y)

I then proceeded with the work. So, the things I completed this week are:

Attach multiple provider roles to a single provider (person)

  • Provider identifier generator
  • View roles and privileges
  • Set personName of provider as preferred=true
  • Completed
  • Ported module to OpenMRS gihub repo (feels good 🙂 )
  • Weekly Meeting with mentor

Today, I created the midterm presentation video. Watch it here.

The source code can be found at

In tomorrow’s design call i.e. 24th June (Monday), we are going to discuss few designs for some the issues related to user / provider management. I would like you all to attend the call and provide your valuable suggestions.