← Back to team overview

dhis2-devs team mailing list archive

[Branch ~dhis2-devs-core/dhis2/trunk] Rev 14424: bug fix in event-capture, integration of tracker-capture with portal

 

------------------------------------------------------------
revno: 14424
committer: Abyot Asalefew Gizaw abyota@xxxxxxxxx
branch nick: dhis2
timestamp: Wed 2014-03-26 10:44:22 +0100
message:
  bug fix in event-capture, integration of tracker-capture with portal
added:
  dhis-2/dhis-web/dhis-web-tracker-capture/src/main/webapp/dhis-web-tracker-capture/views/selected.html
modified:
  dhis-2/dhis-services/dhis-service-i18n/src/main/resources/i18n_global.properties
  dhis-2/dhis-web/dhis-web-commons-resources/src/main/webapp/dhis-web-commons/javascripts/angular/ui-bootstrap-tpls-0.10.0.js
  dhis-2/dhis-web/dhis-web-event-capture/src/main/webapp/dhis-web-event-capture/scripts/controllers.js
  dhis-2/dhis-web/dhis-web-event-capture/src/main/webapp/dhis-web-event-capture/scripts/event-capture.js
  dhis-2/dhis-web/dhis-web-portal/pom.xml
  dhis-2/dhis-web/dhis-web-tracker-capture/src/main/webapp/dhis-web-tracker-capture/i18n/en.json
  dhis-2/dhis-web/dhis-web-tracker-capture/src/main/webapp/dhis-web-tracker-capture/index.html
  dhis-2/dhis-web/dhis-web-tracker-capture/src/main/webapp/dhis-web-tracker-capture/scripts/controllers.js
  dhis-2/dhis-web/dhis-web-tracker-capture/src/main/webapp/dhis-web-tracker-capture/scripts/directives.js
  dhis-2/dhis-web/dhis-web-tracker-capture/src/main/webapp/dhis-web-tracker-capture/scripts/tracker-capture.js
  dhis-2/dhis-web/dhis-web-tracker-capture/src/main/webapp/dhis-web-tracker-capture/styles/style.css
  dhis-2/dhis-web/dhis-web-tracker-capture/src/main/webapp/dhis-web-tracker-capture/views/dashboard.html
  dhis-2/dhis-web/dhis-web-tracker-capture/src/main/webapp/dhis-web-tracker-capture/views/dataentry.html
  dhis-2/dhis-web/dhis-web-tracker-capture/src/main/webapp/dhis-web-tracker-capture/views/enrollment.html
  dhis-2/dhis-web/dhis-web-tracker-capture/src/main/webapp/dhis-web-tracker-capture/views/notes.html
  dhis-2/dhis-web/dhis-web-tracker-capture/src/main/webapp/dhis-web-tracker-capture/views/profile.html
  dhis-2/dhis-web/dhis-web-tracker-capture/src/main/webapp/dhis-web-tracker-capture/views/selection.html
  dhis-2/dhis-web/pom.xml


--
lp:dhis2
https://code.launchpad.net/~dhis2-devs-core/dhis2/trunk

Your team DHIS 2 developers is subscribed to branch lp:dhis2.
To unsubscribe from this branch go to https://code.launchpad.net/~dhis2-devs-core/dhis2/trunk/+edit-subscription
=== modified file 'dhis-2/dhis-services/dhis-service-i18n/src/main/resources/i18n_global.properties'
--- dhis-2/dhis-services/dhis-service-i18n/src/main/resources/i18n_global.properties	2014-03-25 21:41:27 +0000
+++ dhis-2/dhis-services/dhis-service-i18n/src/main/resources/i18n_global.properties	2014-03-26 09:44:22 +0000
@@ -53,6 +53,7 @@
 dhis-web-mapping=GIS
 dhis-web-event-capture=Event Capture
 dhis-web-event-reports=Event Reports
+dhis-web-tracker-capture=Tracker Capture
 dhis-web-reporting=Reports
 dhis-web-light=Mobile (Light)
 dhis-web-mobile=Mobile (Smartphone)
@@ -95,7 +96,8 @@
 intro_dhis-web-sms=Send SMS reminders and notifications manually or as scheduled tasks.
 intro_dhis-web-spreadsheet-reporting=Generate and import data based on predefined Excel templates.
 intro_dhis-web-event-reports=Query for events and create aggregated, dimensional analysis of events.
-intro_dhis-web-event-capture=Capture information about, validate and filter events.
+intro_dhis-web-event-capture=Capture information about single events.
+intro_dhis-web-tracker-capture=Capture information about trackable entities.
 
 #-- Intro functions -------------------------------------------------------------#
 

=== modified file 'dhis-2/dhis-web/dhis-web-commons-resources/src/main/webapp/dhis-web-commons/javascripts/angular/ui-bootstrap-tpls-0.10.0.js'
--- dhis-2/dhis-web/dhis-web-commons-resources/src/main/webapp/dhis-web-commons/javascripts/angular/ui-bootstrap-tpls-0.10.0.js	2014-03-17 14:48:42 +0000
+++ dhis-2/dhis-web/dhis-web-commons-resources/src/main/webapp/dhis-web-commons/javascripts/angular/ui-bootstrap-tpls-0.10.0.js	2014-03-26 09:44:22 +0000
@@ -3195,7 +3195,7 @@
           //it might happen that several async queries were in progress if a user were typing fast
           //but we are interested only in responses that correspond to the current view value
           if (inputValue === modelCtrl.$viewValue ) {
-            if (matches.length > 0) {
+            if (matches && matches.length > 0) {
 
               typeaheadCtrl.active = 0;
               typeaheadCtrl.matches.length = 0;

=== modified file 'dhis-2/dhis-web/dhis-web-event-capture/src/main/webapp/dhis-web-event-capture/scripts/controllers.js'
--- dhis-2/dhis-web/dhis-web-event-capture/src/main/webapp/dhis-web-event-capture/scripts/controllers.js	2014-03-19 10:37:49 +0000
+++ dhis-2/dhis-web/dhis-web-event-capture/src/main/webapp/dhis-web-event-capture/scripts/controllers.js	2014-03-26 09:44:22 +0000
@@ -51,7 +51,7 @@
             //apply translation - by now user's profile is fetched from server.
             TranslationService.translate();
             
-            var programs = storage.get('PROGRAMS');            
+            var programs = storage.get('EVENT_PROGRAMS');            
             if( programs ){                
                 $scope.loadPrograms($scope.selectedOrgUnit);     
             }            
@@ -69,9 +69,9 @@
 
             $scope.programs = [];
             
-            var programs = storage.get('PROGRAMS');
+            var programs = storage.get('EVENT_PROGRAMS');
             
-            if( programs ){
+            if( programs && programs != 'undefined' ){
                 for(var i=0; i<programs.length; i++){
                     var program = storage.get(programs[i].id);   
                     if(program.organisationUnits.hasOwnProperty(orgUnit.id)){
@@ -144,13 +144,16 @@
 
                     for(var i=0; i < $scope.dhis2Events.length; i++){  
                         //check if event is empty
-                        if(!angular.isUndefined($scope.dhis2Events[i].dataValues[0].dataElement)){
+                        if(!angular.isUndefined($scope.dhis2Events[i].dataValues)){
                             $scope.dhis2Events[i].dataValues = orderByFilter($scope.dhis2Events[i].dataValues, '-dataElement');
                             angular.forEach($scope.dhis2Events[i].dataValues, function(dataValue){
 
-                                //converting int value to integer for proper sorting.
+                                //converting event.datavalues[i].datavalue.dataelement = value to
+                                //event[dataElement] = value for easier grid display.
                                 var dataElement = $scope.programStageDataElements[dataValue.dataElement].dataElement;
                                 if(angular.isObject(dataElement)){                               
+                                    
+                                    //converting int string value to integer for proper sorting.
                                     if(dataElement.type == 'int'){
                                         if( !isNaN(parseInt(dataValue.value)) ){
                                             dataValue.value = parseInt(dataValue.value);
@@ -160,11 +163,12 @@
                                         }
                                         
                                     }
+                                    
                                     $scope.dhis2Events[i][dataValue.dataElement] = dataValue.value; 
                                 }                                
-                             });  
+                            });  
 
-                             delete $scope.dhis2Events[i].dataValues;
+                            delete $scope.dhis2Events[i].dataValues;
                         }
                         else{//event is empty, remove from grid
                             var index = $scope.dhis2Events.indexOf($scope.dhis2Events[i]);                           

=== modified file 'dhis-2/dhis-web/dhis-web-event-capture/src/main/webapp/dhis-web-event-capture/scripts/event-capture.js'
--- dhis-2/dhis-web/dhis-web-event-capture/src/main/webapp/dhis-web-event-capture/scripts/event-capture.js	2014-03-19 08:22:59 +0000
+++ dhis-2/dhis-web/dhis-web-event-capture/src/main/webapp/dhis-web-event-capture/scripts/event-capture.js	2014-03-26 09:44:22 +0000
@@ -18,9 +18,9 @@
 var i18n_sync_failed = 'Upload to server failed, please try again later';
 var i18n_uploading_data_notification = 'Uploading locally stored data to the server';
 
-var PROGRAMS_METADATA = 'PROGRAMS';
+var PROGRAMS_METADATA = 'EVENT_PROGRAMS';
 
-var EVENT_VALUES = 'EVENTVALUES';
+var EVENT_VALUES = 'EVENT_VALUES';
 
 DAO.store = new dhis2.storage.Store({
     name: 'dhis2',
@@ -168,16 +168,15 @@
 
 function getMetaPrograms()
 {
-    var PROGRAMS_METADATA = 'PROGRAMS';
     var def = $.Deferred();
 
     $.ajax({
-        url: '../api/programs.json',
+        url: '../api/programs',
         type: 'GET',
-        data:'type=3'
-    }).done( function(response) {            
+        data:'type=3&paging=false'
+    }).done( function(response) {             
         localStorage[PROGRAMS_METADATA] = JSON.stringify(response.programs);           
-        def.resolve( response.programs );
+        def.resolve(response.programs);
     });
     
     return def.promise(); 
@@ -298,7 +297,7 @@
     events = JSON.stringify(events);  
     
     $.ajax( {
-        url: '../api/events.json',
+        url: '../api/events',
         type: 'POST',
         data: events,
         contentType: 'application/json',              

=== modified file 'dhis-2/dhis-web/dhis-web-portal/pom.xml'
--- dhis-2/dhis-web/dhis-web-portal/pom.xml	2014-03-19 10:37:49 +0000
+++ dhis-2/dhis-web/dhis-web-portal/pom.xml	2014-03-26 09:44:22 +0000
@@ -198,6 +198,12 @@
     </dependency>
     <dependency>
       <groupId>org.hisp.dhis</groupId>
+      <artifactId>dhis-web-tracker-capture</artifactId>
+      <version>${project.version}</version>
+      <type>war</type>
+    </dependency>
+    <dependency>
+      <groupId>org.hisp.dhis</groupId>
       <artifactId>dhis-web-maintenance-appmanager</artifactId>
       <version>${project.version}</version>
       <type>war</type>

=== modified file 'dhis-2/dhis-web/dhis-web-tracker-capture/src/main/webapp/dhis-web-tracker-capture/i18n/en.json'
--- dhis-2/dhis-web/dhis-web-tracker-capture/src/main/webapp/dhis-web-tracker-capture/i18n/en.json	2013-03-22 16:15:16 +0000
+++ dhis-2/dhis-web/dhis-web-tracker-capture/src/main/webapp/dhis-web-tracker-capture/i18n/en.json	2014-03-26 09:44:22 +0000
@@ -29,6 +29,7 @@
     "entity": "Entity",
     "add_new": "Add new",
     "new_event": "New event",
+    "create_new_event": "Create new event",
     "close_search": "Close search",
     "search_attributes": "Search attributes",
     "search_for_dashboard": "Search for dashboard items",

=== modified file 'dhis-2/dhis-web/dhis-web-tracker-capture/src/main/webapp/dhis-web-tracker-capture/index.html'
--- dhis-2/dhis-web/dhis-web-tracker-capture/src/main/webapp/dhis-web-tracker-capture/index.html	2014-03-17 15:59:31 +0000
+++ dhis-2/dhis-web/dhis-web-tracker-capture/src/main/webapp/dhis-web-tracker-capture/index.html	2014-03-26 09:44:22 +0000
@@ -5,13 +5,15 @@
 
         <meta name="description" content="DHIS 2">
         <meta name="keywords" content="DHIS 2">        
+        <meta name="viewport" content="width=device-width, initial-scale=1.0">
         <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">              
 
         <script type="text/javascript" src="../dhis-web-commons/javascripts/jQuery/jquery.min.js"></script>
         <script type="text/javascript" src="../dhis-web-commons/javascripts/jQuery/ui/jquery-ui-1.9.1.custom.min.js"></script>
         <link rel="stylesheet" type="text/css" href="../dhis-web-commons/javascripts/jQuery/ui/css/redmond/jquery-ui-1.9.1.custom.css">       
 
-        <script type="text/javascript" src="../dhis-web-commons/bootstrap/js/bootstrap.min.js"></script>           
+        <script type="text/javascript" src="../dhis-web-commons/bootstrap/js/bootstrap.min.js"></script>
+        <link rel="stylesheet" type="text/css" href="../dhis-web-commons/bootstrap/css/bootstrap.min.css">
 
         <script type="text/javascript" src="../dhis-web-commons/javascripts/angular/angular.js"></script>
         <script type="text/javascript" src="../dhis-web-commons/javascripts/angular/angular-resource.js"></script>

=== modified file 'dhis-2/dhis-web/dhis-web-tracker-capture/src/main/webapp/dhis-web-tracker-capture/scripts/controllers.js'
--- dhis-2/dhis-web/dhis-web-tracker-capture/src/main/webapp/dhis-web-tracker-capture/scripts/controllers.js	2013-03-22 18:12:52 +0000
+++ dhis-2/dhis-web/dhis-web-tracker-capture/src/main/webapp/dhis-web-tracker-capture/scripts/controllers.js	2014-03-26 09:44:22 +0000
@@ -42,7 +42,7 @@
             TranslationService.translate();
             $scope.attributes = storage.get('ATTRIBUTES');
             
-            var programs = storage.get('PROGRAMS');            
+            var programs = storage.get('TRACKER_PROGRAMS');            
             if( programs ){                
                 $scope.loadPrograms($scope.selectedOrgUnit);     
             }
@@ -60,9 +60,9 @@
 
             $scope.programs = [];
             
-            var programs = storage.get('PROGRAMS');
+            var programs = storage.get('TRACKER_PROGRAMS');
             
-            if( programs ){
+            if( programs && programs != 'undefined'){
                 for(var i=0; i<programs.length; i++){
                     var program = storage.get(programs[i].id);   
                     if(program.organisationUnits.hasOwnProperty(orgUnit.id)){
@@ -236,7 +236,8 @@
     
     //listen for the selected items
     $scope.$on('selectedItems', function(event, args) {        
-        $scope.selectedEntity = args.selectedEntity;                 
+        $scope.selectedEntity = args.selectedEntity;        
+        $scope.trackedEntity = storage.get($scope.selectedEntity.trackedEntity);
     });    
 })
 
@@ -255,7 +256,7 @@
     //programs for enrollment
     $scope.enrollments = [];
     $scope.programs = [];
-    var programs = storage.get('PROGRAMS'); 
+    var programs = storage.get('TRACKER_PROGRAMS'); 
     
     //listen for the selected items
     $scope.$on('selectedItems', function(event, args) {
@@ -305,14 +306,14 @@
             }
         });
         
-        if( isEnrolled && selectedEnrollment ){
+        //if( isEnrolled && selectedEnrollment ){
            
             //broadcast current selections for data entry
             $rootScope.$broadcast('dataentry', {selectedEntity: $scope.selectedEntity, 
                                                 selectedProgramId: prId,
                                                 selectedOrgUnitId: $scope.selectedOrgUnitId,
                                                 selectedEnrollment: selectedEnrollment});
-        }     
+        //}     
         
     };
 })
@@ -428,13 +429,41 @@
         console.log('need to create new event');        
     };
     
-    $scope.showDataEntry = function(event){  
+    $scope.showDataEntry = function(event){
         
         if(event){
-            $scope.currentEvent = event;            
-            $scope.currentStage = storage.get($scope.currentEvent.programStage);            
+            
+            $scope.currentEvent = event;   
+            $scope.currentStage = storage.get($scope.currentEvent.programStage); 
+            
+            angular.forEach($scope.currentStage.programStageDataElements, function(prStDe){                
+                $scope.currentStage.programStageDataElements[prStDe.dataElement.id] = prStDe.dataElement;
+            });
+            
+            angular.forEach($scope.currentEvent.dataValues, function(dataValue){
+                var val = dataValue.value;
+                var de = $scope.currentStage.programStageDataElements[dataValue.dataElement];
+                if( de && de.type == 'int' && val){
+                    val = parseInt(val);
+                }
+        
+                $scope.currentEvent[dataValue.dataElement] = val;
+            });                   
         }     
-    };
+    };    
+})
+
+//Controller for the dashboard menu section
+.controller('DashboardMenuController',
+        function($scope,                
+                storage,
+                TranslationService) {
+
+    TranslationService.translate();
+    
+    $scope.dashboardMenu = {title: 'Menu', isOpen: true};
+    
+    $scope.attributes = storage.get('ATTRIBUTES');
     
 })
 

=== modified file 'dhis-2/dhis-web/dhis-web-tracker-capture/src/main/webapp/dhis-web-tracker-capture/scripts/directives.js'
--- dhis-2/dhis-web/dhis-web-tracker-capture/src/main/webapp/dhis-web-tracker-capture/scripts/directives.js	2013-03-22 16:15:16 +0000
+++ dhis-2/dhis-web/dhis-web-tracker-capture/src/main/webapp/dhis-web-tracker-capture/scripts/directives.js	2014-03-26 09:44:22 +0000
@@ -23,6 +23,49 @@
         restrict: 'A',        
         link: function(scope, element, attrs){  
             
+            //when tree has loaded, get selected orgunit - if there is any - and inform angular           
+            $(function() {                 
+                
+                var adapters = [];
+                var partial_adapters = [];
+
+                if( dhis2.ou.memoryOnly ) {
+                    adapters = [ dhis2.storage.InMemoryAdapter ];
+                    partial_adapters = [ dhis2.storage.InMemoryAdapter ];
+                } else {
+                    adapters = [ dhis2.storage.IndexedDBAdapter, dhis2.storage.DomLocalStorageAdapter, dhis2.storage.InMemoryAdapter ];
+                    partial_adapters = [ dhis2.storage.IndexedDBAdapter, dhis2.storage.DomSessionStorageAdapter, dhis2.storage.InMemoryAdapter ];
+                }
+
+                dhis2.ou.store = new dhis2.storage.Store({
+                    name: OU_STORE_NAME,
+                    objectStores: [
+                        {
+                            name: OU_KEY,
+                            adapters: adapters
+                        },
+                        {
+                            name: OU_PARTIAL_KEY,
+                            adapters: partial_adapters
+                        }
+                    ]
+                });
+
+                dhis2.ou.store.open().done( function() {
+                    selection.load();
+                    $( "#orgUnitTree" ).one( "ouwtLoaded", function() {
+                        var selected = selection.getSelected()[0];
+                        selection.getOrganisationUnit(selected).done(function(data){                            
+                            if( data ){
+                                scope.selectedOrgUnit = {id: selected, name: data[selected].n};                                  
+                                scope.$apply();
+                            }                        
+                        });
+                    } );
+                    
+                });
+            });
+            
             //listen to user selection, and inform angular         
             selection.setListenerFunction( organisationUnitSelected );
             selection.responseReceived();
@@ -35,6 +78,20 @@
     };
 })
 
+.directive('sortable', function() {        
+
+    return {        
+        restrict: 'A',        
+        link: function(scope, element, attrs){
+            element.sortable({
+                connectWith: ".connectedSortable",
+                placeholder: "ui-state-highlight",
+                tolerance: "pointer"
+            }).disableSelection();  
+            //scope.$apply();
+        }  
+    };
+})
 .directive('dhisContextMenu', function(ContextMenuSelectedItem) {
         
     return {        
@@ -140,7 +197,7 @@
     };
 })
 
-.directive('typeaheadOpenOnFocus', function () {
+.directive('typeaheadOpenOnFocus', function ($compile) {
   return {
     require: ['typeahead', 'ngModel'],
     link: function (scope, element, attr, ctrls) {        

=== modified file 'dhis-2/dhis-web/dhis-web-tracker-capture/src/main/webapp/dhis-web-tracker-capture/scripts/tracker-capture.js'
--- dhis-2/dhis-web/dhis-web-tracker-capture/src/main/webapp/dhis-web-tracker-capture/scripts/tracker-capture.js	2014-03-17 15:59:31 +0000
+++ dhis-2/dhis-web/dhis-web-tracker-capture/src/main/webapp/dhis-web-tracker-capture/scripts/tracker-capture.js	2014-03-26 09:44:22 +0000
@@ -1,4 +1,3 @@
-
 dhis2.util.namespace('dhis2.tc');
 
 // whether current user has any organisation units
@@ -18,9 +17,9 @@
 var i18n_sync_failed = 'Upload to server failed, please try again later';
 var i18n_uploading_data_notification = 'Uploading locally stored data to the server';
 
-var PROGRAMS_METADATA = 'PROGRAMS';
+var PROGRAMS_METADATA = 'TRACKER_PROGRAMS';
 
-var EVENT_VALUES = 'EVENTVALUES';
+var TRACKER_VALUES = 'TRACKER_VALUES';
 
 DAO.store = new dhis2.storage.Store({
     name: 'dhis2',
@@ -38,7 +37,6 @@
     };
 })(jQuery);
 
-
 /**
  * Page init. The order of events is:
  *
@@ -61,6 +59,7 @@
         
         promise = promise.then( getUserProfile );
         promise = promise.then( getAttributes );
+        promise = promise.then( getTrackedEntities );
         promise = promise.then( getMetaPrograms );     
         promise = promise.then( getPrograms );      
         promise = promise.then( getProgramStages );        
@@ -168,14 +167,13 @@
 
 function getMetaPrograms()
 {
-    var PROGRAMS_METADATA = 'PROGRAMS';
     var def = $.Deferred();
 
     $.ajax({
-        url: '../api/programs.json',
+        url: '../api/programs',
         type: 'GET',
-        data:'type=1'
-    }).done( function(response) {            
+        data:'type=1&paging=false'
+    }).done( function(response) {        
         localStorage[PROGRAMS_METADATA] = JSON.stringify(response.programs);           
         def.resolve( response.programs );
     });
@@ -275,8 +273,9 @@
     var def = $.Deferred();
 
     $.ajax({
-        url: '../api/trackedEntityAttributes.json?viewClass=detailed&paging=false',
-        type: 'GET'
+        url: '../api/trackedEntityAttributes',
+        type: 'GET',
+        data:'viewClass=detailed&paging=false'
     }).done( function(response) {            
         localStorage['ATTRIBUTES'] = JSON.stringify(response.trackedEntityAttributes);
         def.resolve();
@@ -285,6 +284,24 @@
     return def.promise(); 
 }
 
+function getTrackedEntities()
+{
+    var def = $.Deferred();
+
+    $.ajax({
+        url: '../api/trackedEntities',
+        type: 'GET',
+        data:'viewClass=detailed&paging=false'
+    }).done( function(response) {
+        _.each(_.values(response.trackedEntities), function(te){
+            localStorage[te.id] = JSON.stringify(te);;
+        });        
+        def.resolve();
+    });
+    
+    return def.promise(); 
+}
+
 function uploadLocalData()
 {
     if ( !dhis2.tc.storageManager.hasLocalData() )
@@ -392,7 +409,7 @@
      */
     this.clear = function ()
     {
-        localStorage.removeItem(EVENT_VALUES);        
+        localStorage.removeItem(TRACKER_VALUES);        
     };    
     
     /**
@@ -414,16 +431,16 @@
 
         var events = {};
 
-        if (localStorage[EVENT_VALUES] != null)
+        if (localStorage[TRACKER_VALUES] != null)
         {
-            events = JSON.parse(localStorage[EVENT_VALUES]);
+            events = JSON.parse(localStorage[TRACKER_VALUES]);
         }
 
         events[event.event] = event;
 
         try
         {
-            localStorage[EVENT_VALUES] = JSON.stringify(events);
+            localStorage[TRACKER_VALUES] = JSON.stringify(events);
 
             log('Successfully stored event - locally');
         }
@@ -442,9 +459,9 @@
      */
     this.getEvent = function(id)
     {
-        if (localStorage[EVENT_VALUES] != null)
+        if (localStorage[TRACKER_VALUES] != null)
         {
-            var events = JSON.parse(localStorage[EVENT_VALUES]);
+            var events = JSON.parse(localStorage[TRACKER_VALUES]);
 
             return events[id];
         }
@@ -464,7 +481,7 @@
         if (events != null && events[event.event] != null)
         {
             delete events[event.event];
-            localStorage[EVENT_VALUES] = JSON.stringify(events);
+            localStorage[TRACKER_VALUES] = JSON.stringify(events);
         }
     };
     
@@ -495,7 +512,7 @@
      */
     this.getAllEvents = function()
     {
-        return localStorage[EVENT_VALUES] != null ? JSON.parse( localStorage[EVENT_VALUES] ) : null;
+        return localStorage[TRACKER_VALUES] != null ? JSON.parse( localStorage[TRACKER_VALUES] ) : null;
     };    
 
     /**

=== modified file 'dhis-2/dhis-web/dhis-web-tracker-capture/src/main/webapp/dhis-web-tracker-capture/styles/style.css'
--- dhis-2/dhis-web/dhis-web-tracker-capture/src/main/webapp/dhis-web-tracker-capture/styles/style.css	2013-03-22 16:15:16 +0000
+++ dhis-2/dhis-web/dhis-web-tracker-capture/src/main/webapp/dhis-web-tracker-capture/styles/style.css	2014-03-26 09:44:22 +0000
@@ -1,3 +1,28 @@
+html, body { 
+    height:100%;
+    margin: 0;
+    padding: 0;
+    background-color: white;
+    font-size: 10pt;
+}
+
+h1 {    
+    font-size: 1.8em;
+}
+
+h2 {
+    font-size: 1.4em;    
+}
+
+h3 {
+    font-size: 1em;    
+}
+
+h4 {
+    font-size: 0.8em;
+    font-weight: bold;
+}
+
 /*----------------------------------------------------------------------------*/
 /* Form
 /*----------------------------------------------------------------------------*/
@@ -7,8 +32,7 @@
     width: 130px;
 }
 
-input[type="text"] 
-{
+.fixed-text-width {
     width: 260px;
 }
 
@@ -17,9 +41,9 @@
     width: 240px;
 }
 
-select 
+.fixed-select-width 
 {
-    width: 264px;
+    width: 260px;
 }
 
 textarea 
@@ -38,58 +62,6 @@
     margin-bottom: 10px;
 }
 
-.heading-column 
-{
-    width: 400px;
-}
-
-td.input-column 
-{
-    padding-left: 5px; 
-    padding-right: 1px; 
-}
-
-td.error {
-    padding-left: 1em;
-}
-
-table.information, td.information 
-{
-    border:1px solid #808080; 
-    vertical-align:top;
-    padding:10px;
-}
-
-.text-column 
-{
-    padding-left: 5px;
-    padding-right: 6px;
-    text-align: left;
-}
-
-.errorCell
-{
-    background-color: #FFCFCF
-}
-
-.green-background 
-{
-    position: relative;
-    border: 1px solid #a4d2a3;
-    background-color: #d5efd5;
-    padding-top: 10px;
-    padding-right: 20px;
-    padding-bottom: 5px;
-    padding-left: 20px;
-    margin-bottom: 15px;
-    border-radius: 3px;
-}
-
-.searchInput
-{
-    width: 240px;
-}
-
 /*----------------------------------------------------------------------------*/
 /* Button list
 /*----------------------------------------------------------------------------*/
@@ -147,8 +119,7 @@
 .stage-flow
 {
     height:100px;
-    overflow-x:hidden;
-    overflow-y:hidden;
+    overflow: scroll;
 }
 
 .table-flow
@@ -195,6 +166,11 @@
     border: 2px solid;
 }
 
+.new-event {
+    float: right;
+    cursor: pointer;
+}
+
 .stage-completed {
     background-color: #b9ffb9;
 }
@@ -215,6 +191,10 @@
     color: #b94a48;
 }
 
+.stages-color {
+    display: block;
+}
+
 input.stage-object[type="button"]
 {
     width: 135px;
@@ -334,7 +314,7 @@
 
 
 /* --------------------------------------------------------------
-// App - specific (might change this if Lars is not happy
+// App - specific
 // -------------------------------------------------------------- */
 
 .container-heading {
@@ -342,26 +322,6 @@
     padding: 12px;
 }
 
-.container-1-4 {
-    width: 25%;
-    float: left;
-    margin-top: 1em;
-    margin-bottom: 1em;
-}
-
-.container-1-2 {
-    width: 50%;
-    float: left;
-    margin-top: 1em;
-    margin-bottom: 1em;
-}
-
-.container-1-1 {
-    width: 100%;
-    float: left;
-    margin-top: 1em;
-}
-
 div.paging a.active
 {
     text-decoration: none; 
@@ -410,12 +370,11 @@
 .bordered-div
 {
     border: 1px solid #c2c2c2;
-    border-radius: 10px;
+    border-radius: 5px;
     padding: 5px 10px;
     margin-bottom: 20px;
 }
 
-
 .nav, .pagination, .carousel, .panel-title a { 
     cursor: pointer; 
     text-decoration: none;
@@ -529,484 +488,6 @@
     font-weight: bold;
 }
 
-/*----------------------------------------------------------------------------*/
-/* Bootstrap modal style
-/*----------------------------------------------------------------------------*/
-.modal-open {
-    overflow: hidden
-}
-.modal {
-    position: fixed;
-    top: 0;
-    right: 0;
-    bottom: 0;
-    left: 0;
-    z-index: 1040;
-    display: none;
-    overflow: auto;
-    overflow-y: scroll
-}
-.modal.fade .modal-dialog {
-    -webkit-transform: translate(0,-25%);
-    -ms-transform: translate(0,-25%);
-    transform: translate(0,-25%);
-    -webkit-transition: -webkit-transform .3s ease-out;
-    -moz-transition: -moz-transform .3s ease-out;
-    -o-transition: -o-transform .3s ease-out;
-    transition: transform .3s ease-out
-}
-.modal.in .modal-dialog {
-    -webkit-transform: translate(0,0);
-    -ms-transform: translate(0,0);
-    transform: translate(0,0)
-}
-.modal-dialog {
-    position: relative;
-    z-index: 1050;
-    width: auto;
-    padding: 10px;
-    margin-right: auto;
-    margin-left: auto
-}
-.modal-content {
-    position: relative;
-    background-color: #fff;
-    border: 1px solid #999;
-    border: 1px solid rgba(0,0,0,0.2);
-    border-radius: 6px;
-    outline: 0;
-    -webkit-box-shadow: 0 3px 9px rgba(0,0,0,0.5);
-    box-shadow: 0 3px 9px rgba(0,0,0,0.5);
-    background-clip: padding-box
-}
-.modal-backdrop {
-    position: fixed;
-    top: 0;
-    right: 0;
-    bottom: 0;
-    left: 0;
-    z-index: 1030;
-    background-color: #000
-}
-.modal-backdrop.fade {
-    opacity: 0;
-    filter: alpha(opacity=0)
-}
-.modal-backdrop.in {
-    opacity: .5;
-    filter: alpha(opacity=50)
-}
-.modal-header {
-    min-height: 16.428571429px;
-    padding: 15px;
-    border-bottom: 1px solid #e5e5e5
-}
-.modal-header .close {
-    margin-top: -2px
-}
-.modal-title {
-    margin: 0;
-    line-height: 1.428571429
-}
-.modal-body {
-    position: relative;
-    padding: 20px
-}
-.modal-footer {
-    padding: 19px 20px 20px;
-    margin-top: 15px;
-    text-align: right;
-    border-top: 1px solid #e5e5e5
-}
-.modal-footer:before, .modal-footer:after {
-    display: table;
-    content: " "
-}
-.modal-footer:after {
-    clear: both
-}
-.modal-footer:before, .modal-footer:after {
-    display: table;
-    content: " "
-}
-.modal-footer:after {
-    clear: both
-}
-.modal-footer .btn+ .btn {
-    margin-bottom: 0;
-    margin-left: 5px
-}
-.modal-footer .btn-group .btn+ .btn {
-    margin-left: -1px
-}
-.modal-footer .btn-block+ .btn-block {
-    margin-left: 0
-}
-@media screen and (min-width: 768px) {
-    .modal-dialog {
-        width: 600px;
-        padding-top: 30px;
-        padding-bottom: 30px
-    }
-    .modal-content {
-        -webkit-box-shadow: 0 5px 15px rgba(0,0,0,0.5);
-        box-shadow: 0 5px 15px rgba(0,0,0,0.5)
-    }
-}
-
-.container {
-    padding-right: 15px;
-    padding-left: 15px;
-    margin-right: auto;
-    margin-left: auto
-}
-.container:before, .container:after {
-    display: table;
-    content: " "
-}
-.container:after {
-    clear: both
-}
-.container:before, .container:after {
-    display: table;
-    content: " "
-}
-.container:after {
-    clear: both
-}
-@media (min-width: 768px) {
-    .container {
-        width: 750px
-    }  z-index: 1051;
-}
-@media (min-width: 992px) {
-    .container {
-        width: 970px
-    }
-}
-@media (min-width: 1200px) {
-    .container {
-        width: 1170px
-    }
-}
-.container > .navbar-header, .container > .navbar-collapse {
-    margin-right: -15px;
-    margin-left: -15px
-}
-@media (min-width: 768px) {
-    .container > .navbar-header, .container > .navbar-collapse {
-        margin-right: 0;
-        margin-left: 0
-    }
-}
-
-@media (min-width: 768px) {
-    .navbar > .container .navbar-brand {
-        margin-left: -15px
-    }
-}
-
-.container .jumbotron {
-    border-radius: 6px
-}
-@media screen and (min-width: 768px) {
-    .jumbotron {
-        padding-top: 48px;
-        padding-bottom: 48px
-    }
-    .container .jumbotron {
-        padding-right: 60px;
-        padding-left: 60px
-    }
-    .jumbotron h1 {
-        font-size: 63px
-    }
-}
-
-.dropdown {
-    position: relative
-}
-.dropdown-toggle:focus {
-    outline: 0
-}
-.dropdown-menu {
-    position: absolute;
-    top: 100%;
-    left: 0;
-    z-index: 1000;
-    display: none;
-    float: left;
-    min-width: 160px;
-    padding: 5px 0;
-    margin: 2px 0 0;
-    font-size: 14px;
-    list-style: none;
-    background-color: #fff;
-    border: 1px solid #ccc;
-    border: 1px solid rgba(0,0,0,0.15);
-    border-radius: 4px;
-    -webkit-box-shadow: 0 6px 12px rgba(0,0,0,0.175);
-    box-shadow: 0 6px 12px rgba(0,0,0,0.175);
-    background-clip: padding-box
-}
-.dropdown-menu.pull-right {
-    right: 0;
-    left: auto
-}
-.dropdown-menu .divider {
-    height: 1px;
-    margin: 9px 0;
-    overflow: hidden;
-    background-color: #e5e5e5
-}
-
-.dropdown-menu > li > a {
-    display: block;
-    padding: 3px 20px;
-    clear: both;
-    font-weight: normal;
-    line-height: 1.428571429;
-    color: #333;
-    white-space: nowrap
-}
-.dropdown-menu > li > a:hover, .dropdown-menu > li > a:focus {
-    color: #262626;
-    text-decoration: none;
-    background-color: #f5f5f5
-}
-.dropdown-menu > .active > a, .dropdown-menu > .active > a:hover, .dropdown-menu > .active > a:focus {
-    color: #fff;
-    text-decoration: none;
-    background-color: #428bca;
-    outline: 0
-}
-.dropdown-menu > .disabled > a, .dropdown-menu > .disabled > a:hover, .dropdown-menu > .disabled > a:focus {
-    color: #999
-}
-.dropdown-menu > .disabled > a:hover, .dropdown-menu > .disabled > a:focus {
-    text-decoration: none;
-    cursor: not-allowed;
-    background-color: transparent;
-    background-image: none;
-    filter: progid:DXImageTransform.Microsoft.gradient(enabled=false)
-}
-.open > .dropdown-menu {
-    display: block
-}
-
-/*----------------------------------------------------------------------------*/
-/* Bootstrap panel style
-/*----------------------------------------------------------------------------*/
-
-.panel {
-    font-family: LiberationSansRegular, arial, sans-serif !important;
-    font-size: 9pt !important;
-    margin-bottom: 20px;
-    background-color: #fff;
-    border: 1px solid transparent;
-
-    -webkit-box-shadow: 0 1px 1px rgba(0,0,0,0.05);
-    box-shadow: 0 1px 1px rgba(0,0,0,0.05)
-}
-.panel-body {
-    padding: 10px
-}
-.panel-body:before, .panel-body:after {
-    display: table;
-    content: " "
-}
-.panel-body:after {
-    clear: both
-}
-.panel-body:before, .panel-body:after {
-    display: table;
-    content: " "
-}
-.panel-body:after {
-    clear: both
-}
-.panel > .list-group {
-    margin-bottom: 0
-}
-.panel > .list-group .list-group-item {
-    border-width: 1px 0
-}
-.panel > .list-group .list-group-item:first-child {
-    border-top-right-radius: 0;
-    border-top-left-radius: 0
-}
-.panel > .list-group .list-group-item:last-child {
-    border-bottom: 0
-}
-.panel-heading+ .list-group .list-group-item:first-child {
-    border-top-width: 0
-}
-.panel > .table, .panel > .table-responsive {
-    margin-bottom: 0
-}
-.panel > .panel-body+ .table, .panel > .panel-body+ .table-responsive {
-    border-top: 1px solid #ddd
-}
-.panel > .table-bordered, .panel > .table-responsive > .table-bordered {
-    border: 0
-}
-.panel > .table-bordered > thead > tr > th:first-child, .panel > .table-responsive > .table-bordered > thead > tr > th:first-child, .panel > .table-bordered > tbody > tr > th:first-child, .panel > .table-responsive > .table-bordered > tbody > tr > th:first-child, .panel > .table-bordered > tfoot > tr > th:first-child, .panel > .table-responsive > .table-bordered > tfoot > tr > th:first-child, .panel > .table-bordered > thead > tr > td:first-child, .panel > .table-responsive > .table-bordered > thead > tr > td:first-child, .panel > .table-bordered > tbody > tr > td:first-child, .panel > .table-responsive > .table-bordered > tbody > tr > td:first-child, .panel > .table-bordered > tfoot > tr > td:first-child, .panel > .table-responsive > .table-bordered > tfoot > tr > td:first-child {
-    border-left: 0
-}
-.panel > .table-bordered > thead > tr > th:last-child, .panel > .table-responsive > .table-bordered > thead > tr > th:last-child, .panel > .table-bordered > tbody > tr > th:last-child, .panel > .table-responsive > .table-bordered > tbody > tr > th:last-child, .panel > .table-bordered > tfoot > tr > th:last-child, .panel > .table-responsive > .table-bordered > tfoot > tr > th:last-child, .panel > .table-bordered > thead > tr > td:last-child, .panel > .table-responsive > .table-bordered > thead > tr > td:last-child, .panel > .table-bordered > tbody > tr > td:last-child, .panel > .table-responsive > .table-bordered > tbody > tr > td:last-child, .panel > .table-bordered > tfoot > tr > td:last-child, .panel > .table-responsive > .table-bordered > tfoot > tr > td:last-child {
-    border-right: 0
-}
-.panel > .table-bordered > thead > tr:last-child > th, .panel > .table-responsive > .table-bordered > thead > tr:last-child > th, .panel > .table-bordered > tbody > tr:last-child > th, .panel > .table-responsive > .table-bordered > tbody > tr:last-child > th, .panel > .table-bordered > tfoot > tr:last-child > th, .panel > .table-responsive > .table-bordered > tfoot > tr:last-child > th, .panel > .table-bordered > thead > tr:last-child > td, .panel > .table-responsive > .table-bordered > thead > tr:last-child > td, .panel > .table-bordered > tbody > tr:last-child > td, .panel > .table-responsive > .table-bordered > tbody > tr:last-child > td, .panel > .table-bordered > tfoot > tr:last-child > td, .panel > .table-responsive > .table-bordered > tfoot > tr:last-child > td {
-    border-bottom: 0
-}
-.panel-heading {
-    font-family: LiberationSansRegular, arial, sans-serif !important;
-    font-size: 9pt !important;
-    padding: 5px 10px;
-    border-bottom: 1px solid transparent;
-
-}
-.panel-heading > .dropdown .dropdown-toggle {
-    color: inherit
-}
-.panel-title {
-    margin-top: 0;
-    margin-bottom: 0;
-    font-family: LiberationSansRegular, arial, sans-serif !important;
-    font-size: 9pt !important;
-}
-.panel-title > a {
-    color: #000;
-}
-.panel-footer {
-    padding: 10px 15px;
-    background-color: #f5f5f5;
-    border-top: 1px solid #ddd;
-
-}
-.panel-group .panel {
-    margin-bottom: 0;
-    overflow: hidden;
-
-}
-.panel-group .panel+ .panel {
-    margin-top: 5px
-}
-.panel-group .panel-heading {
-    border-bottom: 0
-}
-.panel-group .panel-heading+ .panel-collapse .panel-body {
-    border-top: 1px solid #ddd
-}
-.panel-group .panel-footer {
-    border-top: 0
-}
-.panel-group .panel-footer+ .panel-collapse .panel-body {
-    border-bottom: 1px solid #ddd
-}
-.panel-default {
-    border-color: #ddd
-}
-.panel-default > .panel-heading {
-    color: #333;
-    background-color: #f5f5f5;
-    border-color: #ddd
-}
-.panel-default > .panel-heading+ .panel-collapse .panel-body {
-    border-top-color: #ddd
-}
-.panel-default > .panel-heading > .dropdown .caret {
-    border-color: #333 transparent
-}
-.panel-default > .panel-footer+ .panel-collapse .panel-body {
-    border-bottom-color: #ddd
-}
-.panel-primary {
-    border-color: #428bca
-}
-.panel-primary > .panel-heading {
-    color: #fff;
-    background-color: #428bca;
-    border-color: #428bca
-}
-.panel-primary > .panel-heading+ .panel-collapse .panel-body {
-    border-top-color: #428bca
-}
-.panel-primary > .panel-heading > .dropdown .caret {
-    border-color: #fff transparent
-}
-.panel-primary > .panel-footer+ .panel-collapse .panel-body {
-    border-bottom-color: #428bca
-}
-.panel-success {
-    border-color: #d6e9c6
-}
-.panel-success > .panel-heading {
-    color: #468847;
-    background-color: #dff0d8;
-    border-color: #d6e9c6
-}
-.panel-success > .panel-heading+ .panel-collapse .panel-body {
-    border-top-color: #d6e9c6
-}
-.panel-success > .panel-heading > .dropdown .caret {
-    border-color: #468847 transparent
-}
-.panel-success > .panel-footer+ .panel-collapse .panel-body {
-    border-bottom-color: #d6e9c6
-}
-.panel-warning {
-    border-color: #faebcc
-}
-.panel-warning > .panel-heading {
-    color: #c09853;
-    background-color: #fcf8e3;
-    border-color: #faebcc
-}
-.panel-warning > .panel-heading+ .panel-collapse .panel-body {
-    border-top-color: #faebcc
-}
-.panel-warning > .panel-heading > .dropdown .caret {
-    border-color: #c09853 transparent
-}
-.panel-warning > .panel-footer+ .panel-collapse .panel-body {
-    border-bottom-color: #faebcc
-}
-.panel-danger {
-    border-color: #ebccd1
-}
-.panel-danger > .panel-heading {
-    color: #b94a48;
-    background-color: #f2dede;
-    border-color: #ebccd1
-}
-.panel-danger > .panel-heading+ .panel-collapse .panel-body {
-    border-top-color: #ebccd1
-}
-.panel-danger > .panel-heading > .dropdown .caret {
-    border-color: #b94a48 transparent
-}
-.panel-danger > .panel-footer+ .panel-collapse .panel-body {
-    border-bottom-color: #ebccd1
-}
-.panel-info {
-    border-color: #bce8f1
-}
-.panel-info > .panel-heading {
-    color: #3a87ad;
-    background-color: #d9edf7;
-    border-color: #bce8f1
-}
-.panel-info > .panel-heading+ .panel-collapse .panel-body {
-    border-top-color: #bce8f1
-}
-.panel-info > .panel-heading > .dropdown .caret {
-    border-color: #3a87ad transparent
-}
-.panel-info > .panel-footer+ .panel-collapse .panel-body {
-    border-bottom-color: #bce8f1
-}
-
 .contextMenuItems .divider {
     height: 1px;
     margin: 5px 0;
@@ -1018,11 +499,17 @@
 /* Tracked entity
 /*----------------------------------------------------------------------------*/
 
+.container-1 {
+    height: 100%; 
+    min-height: 100%;     
+}
+
 .container-1-1 {
     width: 100%;
     float: left;
-    margin-top: 50px;
-    padding: 5px;
+    margin-top: 50px;   
+    height: 100%; 
+    min-height: 100%; 
 }
 
 .container-1-2 {
@@ -1047,73 +534,21 @@
     margin-bottom: 10px;
 }
 
-.dashboard-container {
-    margin-top: 50px;
-    padding-left: 5px;
-    position: relative;
-}
-
 .dashboard-element-container {
     max-height: 250px !important;
-}
-
-.list-element {
-    position: relative;
-    display: block;
-    padding: 10px 15px;
-    margin-bottom: -1px;
-    background-color: #fff;
-    border: 1px solid #ddd;
-    margin-left: -16px;
-    margin-right: -16px;
-}
-
-.list-element:first-child {
-    margin-top: -15px;
-    border-top: none;
-}
-
-.list-element:last-child {
-    margin-bottom: -15px;
-    border-bottom: none;
-}
-
-.list-title 
-{
-    font-size: 12pt;
-    font-weight: normal;
-    color: #606060;
+    height: 250px !important;
+    overflow-x:auto;
+    overflow-y:auto;
+}
+
+.empty-dashboard-container{
+    min-height: 100px;
 }
 
 .horizonal-spacing{
     margin-left: 20px;    
 }
 
-.vertial-spacing{
+.vertial-spacing {
     margin-top: 10px;
-}
-
-/*
-*
-*/
-.panel-heading {
-    padding: 10px 10px;	
-}
-
-.panel-body {
-    padding: 15px
-}
-.panel-body:before, .panel-body:after {
-    display: table;
-    content: " "
-}
-.panel-body:after {
-    clear: both
-}
-.panel-body:before, .panel-body:after {
-    display: table;
-    content: " "
-}
-.panel-body:after {
-    clear: both
 }
\ No newline at end of file

=== modified file 'dhis-2/dhis-web/dhis-web-tracker-capture/src/main/webapp/dhis-web-tracker-capture/views/dashboard.html'
--- dhis-2/dhis-web/dhis-web-tracker-capture/src/main/webapp/dhis-web-tracker-capture/views/dashboard.html	2013-03-22 16:15:16 +0000
+++ dhis-2/dhis-web/dhis-web-tracker-capture/src/main/webapp/dhis-web-tracker-capture/views/dashboard.html	2014-03-26 09:44:22 +0000
@@ -1,56 +1,39 @@
-<link rel="stylesheet" type="text/css" href="../dhis-web-commons/bootstrap/css/bootstrap.min.css">
-
-<div class="container-1-1">
-
-    <div class="col-xs-12">
+<div class="container-1-1">    
+    <div class="col-sm-12">
         <div class="btn-toolbar" role="toolbar">
             <button type="button" class="btn btn-default" ng-click="back()">{{'back'| translate}}</button>
             <span class="horizonal-spacing">
-                <input type="text" placeholder="{{'search_for_dashboard'| translate}}" />
+                <input class="fixed-text-width" type="text" placeholder="{{'search_for_dashboard'| translate}}" />
                 <button type="button" class="btn btn-default" ng-click="searchDashboard()">{{'search'| translate}}</button>
-            </span>
-
-            <!--<button type="button" class="btn btn-default" ng-click="remove()">{{'remove'| translate }} {{selectedProgram.trackedEntity.name|| 'entity' | translate}}</button>-->
-        </div>
-    </div>
-
-    <div class='clearfix separator'></div>
-
-    <div class='col-xs-12'>
-        <div class="row">
-            <div class="col-sm-3 col-md-3"> 
-                <accordion>
-                    <accordion-group is-open="{{selected.isOpen}}">
-                        <accordion-heading>
-                            <span class="list-title">{{selected.title| translate}}</span>
-                        </accordion-heading>
-                        <div class="list-element-container">
-                            <div class="list-element" ng-repeat="selection in selected.selections"> 
-                                {{selection.title| translate}}
-                                <span class="right">
-                                    {{selection.value| translate}}
-                                </span>
-                            </div>
-                        </div>
-                    </accordion-group>
-                </accordion>                
-            </div>
-            <div class="col-sm-3 col-md-3" ng-controller="ProfileController">
-                <div ng-include="'views/profile.html'"></div>                
-            </div>
-            <div class="col-sm-3 col-md-3" ng-controller="EnrollmentController">
-                <div ng-include="'views/enrollment.html'"></div>                
-            </div>
-            <div class="col-sm-3 col-md-3" ng-controller="NotesController">
-                <div ng-include="'views/notes.html'"></div>             
-            </div>
+            </span>            
         </div>
     </div>
 
     <div class='separator'></div>
 
-    <div class="col-xs-12" ng-controller="DataEntryController">
-        <div ng-include="'views/dataentry.html'"></div>
-    </div> 
-
-</div>
\ No newline at end of file
+    <div class="col-sm-12">
+        <div class="row">            
+            <div class="col-sm-6 col-md-8">
+                <div sortable class="row connectedSortable empty-dashboard-container">
+                    <div class="col-sm-12" ng-controller="ProfileController" ng-include="'views/profile.html'"></div>               
+                    <div class="col-sm-12" ng-controller="DataEntryController" ng-include="'views/dataentry.html'"></div>                                        
+                </div>                
+            </div>            
+            <div class="col-sm-6 col-md-4">
+                <div sortable class="row connectedSortable empty-dashboard-container">
+                    <div class="col-sm-12">
+                        <div ng-include="'views/selected.html'"></div>
+                    </div>
+                    <div class="col-sm-12" ng-controller="EnrollmentController">
+                        <div ng-include="'views/enrollment.html'"></div>
+                    </div>
+                    <div class="col-sm-12" ng-controller="NotesController">
+                        <div ng-include="'views/notes.html'"></div>             
+                    </div>
+                </div>
+            </div>
+        </div>
+    </div>
+</div>
+
+

=== modified file 'dhis-2/dhis-web/dhis-web-tracker-capture/src/main/webapp/dhis-web-tracker-capture/views/dataentry.html'
--- dhis-2/dhis-web/dhis-web-tracker-capture/src/main/webapp/dhis-web-tracker-capture/views/dataentry.html	2013-03-22 18:12:52 +0000
+++ dhis-2/dhis-web/dhis-web-tracker-capture/src/main/webapp/dhis-web-tracker-capture/views/dataentry.html	2014-03-26 09:44:22 +0000
@@ -1,108 +1,78 @@
-<accordion>
-    <accordion-group is-open="{{dataEntry.isOpen}}">
-        <accordion-heading>
-            <span class="list-title">{{dataEntry.title| translate}}</span>
-        </accordion-heading>     
-        <div ng-show="dhis2Events">
+<div class="panel panel-default">
+    <div class="panel-heading">
+        {{dataEntry.title| translate}}
+        <span class="new-event" ng-click="createNewEvent()">
+            {{'create_new_event'| translate}}
+        </span>
+    </div>
+    <div class="panel-body">        
+        <div ng-show="dhis2Events">            
             <table class="table-borderless">
                 <tbody>
                     <tr>
-                        <td>
-                            <div class="stage-flow">
-                                <table class="stage-flow">
-                                    <tbody>
-                                        <tr>                                            
-                                            <td class="inline-block" ng-repeat="dhis2Event in dhis2Events">
-                                                <span class="block orgunit-container">{{dhis2Event.orgUnitName}}</span>
-                                                <span class="arrow-container">→</span>
-                                                <span class="stage-container"                                                     
-                                                      ng-class="{'current-stage': currentEvent.programStage == dhis2Event.programStage, '{{dhis2Event.statusColor}}': true}"                                                      
-                                                      ng-click="showDataEntry(dhis2Event)">
-                                                    {{dhis2Event.name}}<br/>
-                                                    {{dhis2Event.eventDate}}                                                    
-                                                </span>                                                
-                                            </td>
-                                        </tr>
-                                    </tbody>
-                                </table>
-                            </div>
-                        </td>
-                        <td class="right">
-                            <input type="button" class="entity-instance-object" value="{{'new_event'| translate}}" ng-click="createNewEvent()">
-                        </td>
+                        <td class="inline-block" ng-repeat="dhis2Event in dhis2Events">
+                            <span class="block orgunit-container">{{dhis2Event.orgUnitName}}</span>
+                            <span class="arrow-container">→</span>
+                            <span class="stage-container"                                                     
+                                  ng-class="{'current-stage': currentEvent.programStage == dhis2Event.programStage, '{{dhis2Event.statusColor}}': true}"                                                      
+                                  ng-click="showDataEntry(dhis2Event)">
+                                {{dhis2Event.name}}<br/>
+                                {{dhis2Event.eventDate}}                                                    
+                            </span>                                                
+                        </td>                        
                     </tr>
                 </tbody>                
             </table>
             <hr>
             <div ng-show="currentEvent">
-                <table class="dhis2-list-table-striped">                    
-                    <thead>                        
-                        <tr>
-                            <th>
-                                {{'data_element'| translate}}                    
-                            </th>
-                            <th>
-                                {{'value'| translate}}                    
-                            </th>         
-                        </tr>                        
-                    </thead>
-                    <tbody id="list">
-                        <tr ng-repeat="prStDe in currentStage.programStageDataElements">
-                            <td class="max-column-width">
-                                {{prStDe.dataElement.name}}                                              
-                            </td>
-                            <td class="max-column-width">
-                                <ng-form name="innerFormAdd">
-                                    <div ng-switch="prStDe.dataElement.type">
-                                        <div ng-switch-when="int">
-                                            <input type="number" 
-                                                   ng-model="currentEvent[prStDe.dataElement.id]" 
-                                                   ng-required={{prStDe.compulsory}} 
-                                                   name="foo" 
-                                                   style="width:98%;"/>
-                                            <span ng-show="outerForm.submitted && innerFormAdd.foo.$invalid" class="red">{{'required'| translate}}</span>
-                                        </div>
-                                        <div ng-switch-when="string">                                        
-                                            <div class="container-fluid">
-                                                <input type="text" 
-                                                       ng-model="currentEvent[prStDe.dataElement.id]" 
-                                                       ng-required={{prStDe.compulsory}} 
-                                                       typeahead="option for option in prStDe.dataElement.optionSet.options | filter:$viewValue | limitTo:20" 
-                                                       typeahead-open-on-focus                                                        
-                                                       name="foo" 
-                                                       style="width:98%;">                                            
-                                                <span ng-show="outerForm.submitted && innerFormAdd.foo.$invalid" class="red">{{'required'| translate}}</span>
-                                            </div>
-                                        </div>
-                                        <div ng-switch-when="bool">
-                                            <select ng-model="currentEvent[prStDe.dataElement.id]" 
-                                                    ng-required={{prStDe.compulsory}} 
-                                                    name="foo" 
-                                                    style="width:98%;">
-                                                <option value="">{{'please_select'| translate}}</option>                        
-                                                <option value="0">{{'no'| translate}}</option>
-                                                <option value="1">{{'yes'| translate}}</option>
-                                            </select>
-                                            <span ng-show="outerForm.submitted && innerFormAdd.foo.$invalid" class="red">{{'required'| translate}}</span>
-                                        </div>
-                                        <div ng-switch-when="date">
-                                            <input type="text" 
-                                                   placeholder="yyyy-mm-dd" 
-                                                   ng-date 
-                                                   ng-model="currentEvent[prStDe.dataElement.id]" 
-                                                   ng-required={{prStDe.compulsory}}  
-                                                   name="foo" 
-                                                   style="width:98%;">
-                                            <span ng-show="outerForm.submitted && innerFormAdd.foo.$invalid" class="red">{{'required'| translate}}</span>
-                                        </div>
-                                    </div>
-                                </ng-form>
-                            </td>
-                        </tr>
-                    </tbody>        
-                </table>
+                <div class="form-group">
+                    <div class="row" ng-repeat="prStDe in currentStage.programStageDataElements">
+                        <div class="col-sm-6">
+                            {{prStDe.dataElement.name}}-{{prStDe.dataElement.type}}
+                        </div>
+                        <div class="col-sm-6">
+                            <div ng-switch="prStDe.dataElement.type">
+                                <div ng-switch-when="int">
+                                    <input type="number"
+                                           class="form-control"
+                                           ng-model="currentEvent[prStDe.dataElement.id]" 
+                                           ng-required={{prStDe.compulsory}} 
+                                           name="foo"/>
+                                </div>
+                                <div ng-switch-when="string">                                        
+                                    <input type="text"
+                                           class="form-control"
+                                           ng-model="currentEvent[prStDe.dataElement.id]" 
+                                           ng-required={{prStDe.compulsory}} 
+                                           typeahead="option for option in prStDe.dataElement.optionSet.options | filter:$viewValue | limitTo:20" 
+                                           typeahead-open-on-focus                                                        
+                                           name="foo"/>
+                                </div>
+                                <div ng-switch-when="bool">
+                                    <select class="form-control"
+                                            ng-model="currentEvent[prStDe.dataElement.id]" 
+                                            ng-required={{prStDe.compulsory}} 
+                                            name="foo">
+                                        <option value="">{{'please_select'| translate}}</option>                        
+                                        <option value="0">{{'no'| translate}}</option>
+                                        <option value="1">{{'yes'| translate}}</option>
+                                    </select>
 
+                                </div>
+                                <div ng-switch-when="date">
+                                    <input type="text" 
+                                           placeholder="yyyy-mm-dd" 
+                                           ng-date 
+                                           class="form-control"
+                                           ng-model="currentEvent[prStDe.dataElement.id]" 
+                                           ng-required={{prStDe.compulsory}}  
+                                           name="foo"/>
+                                </div>
+                            </div>
+                        </div>
+                    </div>
+                </div>
             </div>
         </div>
-    </accordion-group>
-</accordion>
\ No newline at end of file
+    </div>
+</div>
\ No newline at end of file

=== modified file 'dhis-2/dhis-web/dhis-web-tracker-capture/src/main/webapp/dhis-web-tracker-capture/views/enrollment.html'
--- dhis-2/dhis-web/dhis-web-tracker-capture/src/main/webapp/dhis-web-tracker-capture/views/enrollment.html	2014-03-21 07:58:52 +0000
+++ dhis-2/dhis-web/dhis-web-tracker-capture/src/main/webapp/dhis-web-tracker-capture/views/enrollment.html	2014-03-26 09:44:22 +0000
@@ -1,19 +1,38 @@
-<accordion>
+<!--<accordion>
     <accordion-group is-open="{{enrollment.isOpen}}">
         <accordion-heading>
             <span class="list-title">{{enrollment.title| translate}}</span>
         </accordion-heading>                        
-        <div class="list-element-container">
-            <div class="list-element"> 
+        <div>
+            <div> 
                 {{'program'| translate}}
                 <span class="right">
                     <select ng-model="selectedProgram"
+                            class="form-control"
                             ng-options="program as program.name for program in programs | orderBy: 'name'" 
                             ng-change="loadEvents(selectedProgram.id)">
                         <option value="">{{'please_select'| translate}}</option>
                     </select>
                 </span>
-            </div>                            
+            </div>
         </div>                        
     </accordion-group>
-</accordion>                
\ No newline at end of file
+</accordion>   -->             
+<div class="panel panel-default">
+    <div class="panel-heading">{{enrollment.title| translate}}</div>
+    <div class="panel-body dashboard-element-container">
+        <div>
+            <div> 
+                {{'program'| translate}}
+                <span class="right">
+                    <select ng-model="selectedProgram"
+                            class="form-control"
+                            ng-options="program as program.name for program in programs | orderBy: 'name'" 
+                            ng-change="loadEvents(selectedProgram.id)">
+                        <option value="">{{'please_select'| translate}}</option>
+                    </select>
+                </span>
+            </div>
+        </div> 
+    </div>
+</div>
\ No newline at end of file

=== modified file 'dhis-2/dhis-web/dhis-web-tracker-capture/src/main/webapp/dhis-web-tracker-capture/views/notes.html'
--- dhis-2/dhis-web/dhis-web-tracker-capture/src/main/webapp/dhis-web-tracker-capture/views/notes.html	2014-03-19 16:58:56 +0000
+++ dhis-2/dhis-web/dhis-web-tracker-capture/src/main/webapp/dhis-web-tracker-capture/views/notes.html	2014-03-26 09:44:22 +0000
@@ -1,8 +1,6 @@
-<accordion>
-    <accordion-group is-open="{{notes.isOpen}}">
-        <accordion-heading>
-            <span class="list-title">{{notes.title| translate}}</span>
-        </accordion-heading>                        
+<div class="panel panel-default">
+    <div class="panel-heading">{{notes.title| translate}}</div>
+    <div class="panel-body dashboard-element-container">
         This is notes.
-    </accordion-group>
-</accordion>
\ No newline at end of file
+    </div>
+</div>
\ No newline at end of file

=== modified file 'dhis-2/dhis-web/dhis-web-tracker-capture/src/main/webapp/dhis-web-tracker-capture/views/profile.html'
--- dhis-2/dhis-web/dhis-web-tracker-capture/src/main/webapp/dhis-web-tracker-capture/views/profile.html	2014-03-19 16:58:56 +0000
+++ dhis-2/dhis-web/dhis-web-tracker-capture/src/main/webapp/dhis-web-tracker-capture/views/profile.html	2014-03-26 09:44:22 +0000
@@ -1,42 +1,44 @@
-<accordion>
-    <accordion-group is-open="{{profile.isOpen}}">
-        <accordion-heading>
-            <span class="list-title"> {{selectedProgram.trackedEntity.name || 'entity' | translate}} {{profile.title| translate}}</span>
-        </accordion-heading>
-        <div>
-            <div class="list-element" ng-repeat="attribute in selectedEntity.attributes">
-                {{attribute.displayName}}
-                <div class="right">
+<div class="panel panel-default">
+    <div class="panel-heading">{{trackedEntity.name|| 'entity' | translate}} {{profile.title| translate}}</div>
+    <div class="panel-body dashboard-element-container">
+        <div class="form-group">
+            <div class="row" ng-repeat="attribute in selectedEntity.attributes">
+                <div class="col-sm-6">
+                    {{attribute.displayName}}
+                </div>                
+                <div class="col-sm-6">
                     <div ng-switch="attribute.type">
                         <div ng-switch-when="date">
-                            <input type="text" ng-date ng-model="attribute.value" value="attribute.value | date:'yyyy-MM-dd"/>
+                            <input type="text" class="form-control" ng-date ng-model="attribute.value"  value="attribute.value | date:'yyyy-MM-dd"/>
                         </div>
                         <div ng-switch-when="trueOnly">
-                            <input type="checkbox" ng-model="attribute.value" />
+                            <input type="checkbox" class="form-control" ng-model="attribute.value" />
                         </div>
                         <div ng-switch-when="bool">
-                            <select ng-model="attribute.value" />
+                            <select ng-model="attribute.value" class="form-control">
                             <option value="">{{'please_select'| translate}}</option>                        
                             <option value="0">{{'no'| translate}}</option>
                             <option value="1">{{'yes'| translate}}</option>
                             </select>
                         </div>
                         <div ng-switch-when="combo">
-                            <input type="text" 
+                            <input type="text"  
+                                   class="form-control"
                                    ng-model="attribute.value"                                                 
-                                   typeahead="option.name for option in attributes[attribute.attribute].personAttributeOptions | filter:$viewValue | limitTo:20" 
+                                   typeahead="option for option in attributes[attribute.attribute].optionSet.options | filter:$viewValue | limitTo:20" 
                                    typeahead-open-on-focus 
                                    />
                         </div>
                         <div ng-switch-when="number">
-                            <input type="number" ng-model="attribute.value" />
+                            <input type="number" class="form-control" ng-model="attribute.value" />
                         </div>
                         <div ng-switch-default>
-                            <input type="text" ng-model="attribute.value" />                                        
+                            <input type="text"  class="form-control" ng-model="attribute.value" />                                        
                         </div>
                     </div>                                                                                                    
                 </div>
+
             </div>
-        </div>                        
-    </accordion-group>
-</accordion>                
\ No newline at end of file
+        </div>
+    </div>
+</div>
\ No newline at end of file

=== added file 'dhis-2/dhis-web/dhis-web-tracker-capture/src/main/webapp/dhis-web-tracker-capture/views/selected.html'
--- dhis-2/dhis-web/dhis-web-tracker-capture/src/main/webapp/dhis-web-tracker-capture/views/selected.html	1970-01-01 00:00:00 +0000
+++ dhis-2/dhis-web/dhis-web-tracker-capture/src/main/webapp/dhis-web-tracker-capture/views/selected.html	2014-03-26 09:44:22 +0000
@@ -0,0 +1,13 @@
+<div class="panel panel-default">
+    <div class="panel-heading">{{selected.title| translate}}</div>    
+    <div class="panel-body dashboard-element-container">
+        <div class="row" ng-repeat="selection in selected.selections">
+            <div class="col-sm-6">
+                {{selection.title| translate}}
+            </div>
+            <div class="col-sm-6">
+                <input type="text" class="form-control" value="{{selection.value| translate}}" ng-disabled="true"/>                
+            </div>
+        </div>        
+    </div>
+</div>

=== modified file 'dhis-2/dhis-web/dhis-web-tracker-capture/src/main/webapp/dhis-web-tracker-capture/views/selection.html'
--- dhis-2/dhis-web/dhis-web-tracker-capture/src/main/webapp/dhis-web-tracker-capture/views/selection.html	2014-03-19 16:58:56 +0000
+++ dhis-2/dhis-web/dhis-web-tracker-capture/src/main/webapp/dhis-web-tracker-capture/views/selection.html	2014-03-26 09:44:22 +0000
@@ -25,13 +25,14 @@
     <div>
         <table>
             <tr>
-                <td><label>{{'registering_unit'| translate}}</label></td>
-                <td><input type="text" selected-org-unit ng-model="selectedOrgUnit.name" value="{{selectedOrgUnit.name|| 'please_select'| translate}}" disabled=""></td>                           
+                <td>{{'registering_unit'| translate}}</td>
+                <td><input type="text" class="fixed-text-width" selected-org-unit ng-model="selectedOrgUnit.name" value="{{selectedOrgUnit.name|| 'please_select'| translate}}" disabled=""></td>                           
             </tr>
             <tr>
-                <td><label>{{'program'| translate}}<em title="{{'required'| translate}}" class="required">*</em></label></td>
+                <td>{{'program'| translate}}<em title="{{'required'| translate}}" class="required">*</em></td>
                 <td>
-                    <select id="programId" 
+                    <select class="fixed-select-width"
+                            id="programId" 
                             name="programId" 
                             ng-model="selectedProgram" 
                             ng-options="program as program.name for program in programs | orderBy: 'name'" 
@@ -60,7 +61,7 @@
     <!-- selection ends -->   
 
     <!-- search begins -->
-    <div style="width: 30%;">
+    <div style="width: 50%;">
         <accordion>
             <accordion>
                 <accordion-group is-open="{{searchField.isOpen}}">
@@ -68,40 +69,45 @@
                         {{searchField.title| translate}}
                     </accordion-heading>
                     <div>
-                        <div class="list-element" ng-repeat="attribute in attributes">
-                            {{attribute.name}}
-                            <div class="right">
-                                <div ng-switch="attribute.valueType">
-                                    <div ng-switch-when="date">
-                                        <input type="text" ng-date ng-model="attribute.value" />
-                                    </div>
-                                    <div ng-switch-when="trueOnly">
-                                        <input type="checkbox" ng-model="attribute.value" />
-                                    </div>
-                                    <div ng-switch-when="bool">
-                                        <select ng-model="attribute.value" />
-                                        <option value="">{{'please_select'| translate}}</option>                        
-                                        <option value="0">{{'no'| translate}}</option>
-                                        <option value="1">{{'yes'| translate}}</option>
-                                        </select>
-                                    </div>
-                                    <div ng-switch-when="combo">
-                                        <input type="text" 
-                                               ng-model="attribute.value"                                                 
-                                               typeahead="option.name for option in attribute.personAttributeOptions | filter:$viewValue | limitTo:20" 
-                                               typeahead-open-on-focus 
-                                               />
-                                    </div>
-                                    <div ng-switch-when="number">
-                                        <input type="number" ng-model="attribute.value"/>
-                                    </div>
-                                    <div ng-switch-default>
-                                        <input type="text" ng-model="attribute.value" />                                        
-                                    </div>
-                                </div>                                                                                                    
+                        <div class="form-group">
+                            <div class="row" ng-repeat="attribute in attributes">
+                                <div class="col-sm-6">
+                                    {{attribute.name}}
+                                </div>
+                                <div class="col-sm-6">
+                                    <div ng-switch="attribute.valueType">
+                                        <div ng-switch-when="date">
+                                            <input type="text" class="form-control" ng-date ng-model="attribute.value" />
+                                        </div>
+                                        <div ng-switch-when="trueOnly">
+                                            <input type="checkbox" class="form-control" ng-model="attribute.value" />
+                                        </div>
+                                        <div ng-switch-when="bool">
+                                            <select ng-model="attribute.value" class="form-control">
+                                            <option value="">{{'please_select'| translate}}</option>                        
+                                            <option value="0">{{'no'| translate}}</option>
+                                            <option value="1">{{'yes'| translate}}</option>
+                                            </select>
+                                        </div>
+                                        <div ng-switch-when="combo">
+                                            <input type="text" 
+                                                   class="form-control"
+                                                   ng-model="attribute.value"                                                 
+                                                   typeahead="option.name for option in attribute.personAttributeOptions | filter:$viewValue | limitTo:20" 
+                                                   typeahead-open-on-focus 
+                                                   />
+                                        </div>
+                                        <div ng-switch-when="number">
+                                            <input type="number" class="form-control" ng-model="attribute.value"/>
+                                        </div>
+                                        <div ng-switch-default>
+                                            <input type="text" class="form-control" ng-model="attribute.value" />                                        
+                                        </div>
+                                    </div>                                                                                                    
+                                </div>
                             </div>
                         </div>
-                        
+
                         <div class="vertial-spacing">
                             <button ng-click="search()">{{'search'| translate}}</button>
                         </div>
@@ -117,17 +123,17 @@
         <div ng-switch-when=""></div>
         <div ng-switch-default>
             <h2>
-                {{selectedProgram.trackedEntity.name || 'entity' | translate}} {{'list'| translate}}
+                {{selectedProgram.trackedEntity.name|| 'entity' | translate}} {{'list'| translate}}
             </h2>
             <div ng-switch="trackedEntityList.rows.length">
                 <div ng-switch-when="undefined">
                     <p>
-                        {{'empty'| translate}} {{selectedProgram.trackedEntity.name || 'entity' | translate}} {{'list'| translate}}                        
+                        {{'empty'| translate}} {{selectedProgram.trackedEntity.name|| 'entity' | translate}} {{'list'| translate}}                        
                     </p>
                 </div>
                 <div ng-switch-when="0">
                     <p>
-                        {{'empty'| translate}} {{selectedProgram.trackedEntity.name || 'entity' | translate}} {{'list'| translate}}
+                        {{'empty'| translate}} {{selectedProgram.trackedEntity.name|| 'entity' | translate}} {{'list'| translate}}
                     </p>
                 </div>
                 <div ng-switch-default>
@@ -151,36 +157,36 @@
                                     <!-- filter icon begins -->
                                     <span class='pull-right'>
                                         <span ng-show="gridColumn.type !== 'date'">
-                                            <a href ng-click="filterInGrid(gridColumn)" title="{{'filter'| translate}}"><span ng-class="{true: 'filter-without-content', false: 'filter-with-content'} [filterText[gridColumn.id] == undefined || filterText[gridColumn.id] == '']"><i class="fa fa-filter"></i></span></a>
+                                            <a href ng-click="filterInGrid(gridColumn)" title="{{'filter'| translate}}"><span ng-class="{true: 'filter - without - content', false: 'filter - with - content'} [filterText[gridColumn.id] == undefined || filterText[gridColumn.id] == '']"><i class="fa fa-filter"></i></span></a>
                                         </span>
                                         <span ng-show="gridColumn.type === 'date'">
-                                            <a href ng-click="filterInGrid(gridColumn)" title="{{'filter'| translate}}"><span ng-class="{true: 'filter-without-content', false: 'filter-with-content'} [(filterText[gridColumn.id].start == 'undefined' || filterText[gridColumn.id].start == '') && (filterText[gridColumn.id].end == 'undefined' || filterText[gridColumn.id].end == '')]"><i class="fa fa-filter"></i></span></a>
+                                            <a href ng-click="filterInGrid(gridColumn)" title="{{'filter'| translate}}"><span ng-class="{true: 'filter - without - content', false: 'filter - with - content'} [(filterText[gridColumn.id].start == 'undefined' || filterText[gridColumn.id].start == '') && (filterText[gridColumn.id].end == 'undefined' || filterText[gridColumn.id].end == '')]"><i class="fa fa-filter"></i></span></a>
                                         </span>                                                    
                                     </span>
                                     <!-- filter icon ends -->
 
                                     <!-- filter input field begins -->
-                        <div ng-show="gridColumn.showFilter">
-                            <span ng-show="gridColumn.type !== 'date'">
-                                <input type="text" ng-model="filterText[gridColumn.id]" ng-blur="filterInGrid(gridColumn)">
-                            </span>                                                    
-                            <span ng-show="gridColumn.type === 'date'">
-                                <input placeholder="{{'start_date'| translate}}" type="text" ng-model="filterText[gridColumn.id].start" data-ng-date readonly="readonly">
-                                <span ng-hide="filterText[gridColumn.id].start == 'undefined' || filterText[gridColumn.id].start == ''">
-                                    <a href ng-click='removeStartFilterText(gridColumn.id)'><span class='black'><i class="fa fa-trash-o"></i></span></a>                                                        
-                                </span>
-                                <input placeholder="{{'end_date'| translate}}" type="text" ng-model="filterText[gridColumn.id].end" data-ng-date readonly="readonly">
-                                <span ng-hide="filterText[gridColumn.id].end == 'undefined' || filterText[gridColumn.id].end == ''">
-                                    <a href ng-click='removeEndFilterText(gridColumn.id)'><span class='black'><i class="fa fa-trash-o"></i></span></a>                                                        
-                                </span>
-                            </span>
-                        </div>
-                        <!-- filter input field ends -->
-                        </th>                                    
-                        </tr>                        
+                                    <div ng-show="gridColumn.showFilter">
+                                        <span ng-show="gridColumn.type !== 'date'">
+                                            <input type="text" ng-model="filterText[gridColumn.id]" ng-blur="filterInGrid(gridColumn)">
+                                        </span>                                                    
+                                        <span ng-show="gridColumn.type === 'date'">
+                                            <input placeholder="{{'start_date'| translate}}" type="text" ng-model="filterText[gridColumn.id].start" data-ng-date readonly="readonly">
+                                            <span ng-hide="filterText[gridColumn.id].start == 'undefined' || filterText[gridColumn.id].start == ''">
+                                                <a href ng-click='removeStartFilterText(gridColumn.id)'><span class='black'><i class="fa fa-trash-o"></i></span></a>                                                        
+                                            </span>
+                                            <input placeholder="{{'end_date'| translate}}" type="text" ng-model="filterText[gridColumn.id].end" data-ng-date readonly="readonly">
+                                            <span ng-hide="filterText[gridColumn.id].end == 'undefined' || filterText[gridColumn.id].end == ''">
+                                                <a href ng-click='removeEndFilterText(gridColumn.id)'><span class='black'><i class="fa fa-trash-o"></i></span></a>                                                        
+                                            </span>
+                                        </span>
+                                    </div>
+                                    <!-- filter input field ends -->
+                                </th>                                    
+                            </tr>                        
                         </thead>
                         <tbody id="list">
-                            <tr ng-repeat="trackedEntity in trackedEntityList.rows | paginate:rowsPerPage | orderBy:sortHeader:reverse | gridFilter:filterText:currentFilter" 
+                            <tr ng-repeat="trackedEntity in trackedEntityList.rows| paginate:rowsPerPage | orderBy:sortHeader:reverse | gridFilter:filterText:currentFilter" 
                                 ng-click="showDashboard(trackedEntity)">
 
                                 <td class="max-column-width"                                              

=== modified file 'dhis-2/dhis-web/pom.xml'
--- dhis-2/dhis-web/pom.xml	2014-03-19 10:37:49 +0000
+++ dhis-2/dhis-web/pom.xml	2014-03-26 09:44:22 +0000
@@ -27,7 +27,6 @@
     <module>dhis-web-pivot</module>    
     <module>dhis-web-dashboard-integration</module>
     <module>dhis-web-event-reports</module>
-    <module>dhis-web-tracker-capture</module>
     <module>dhis-web-caseentry</module>    
     <module>dhis-web-light</module>
     <module>dhis-web-mobile</module>