← Back to team overview

dhis2-devs team mailing list archive

[Branch ~dhis2-devs-core/dhis2/trunk] Rev 18974: tracker-capture: performance improvement. events are now shared across widgets. this is better in...

 

------------------------------------------------------------
revno: 18974
committer: Abyot Asalefew Gizaw <abyota@xxxxxxxxx>
branch nick: dhis2
timestamp: Wed 2015-04-22 09:22:39 +0200
message:
  tracker-capture: performance improvement. events are now shared across widgets. this is better instead of each widget reading its events
modified:
  dhis-2/dhis-web/dhis-web-apps/src/main/webapp/dhis-web-tracker-capture/components/dashboard/dashboard-controller.js
  dhis-2/dhis-web/dhis-web-apps/src/main/webapp/dhis-web-tracker-capture/components/dataentry/dataentry-controller.js
  dhis-2/dhis-web/dhis-web-apps/src/main/webapp/dhis-web-tracker-capture/components/report/tei-report-controller.js
  dhis-2/dhis-web/dhis-web-apps/src/main/webapp/dhis-web-tracker-capture/scripts/services.js


--
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-web/dhis-web-apps/src/main/webapp/dhis-web-tracker-capture/components/dashboard/dashboard-controller.js'
--- dhis-2/dhis-web/dhis-web-apps/src/main/webapp/dhis-web-tracker-capture/components/dashboard/dashboard-controller.js	2015-03-30 10:40:41 +0000
+++ dhis-2/dhis-web/dhis-web-apps/src/main/webapp/dhis-web-tracker-capture/components/dashboard/dashboard-controller.js	2015-04-22 07:22:39 +0000
@@ -16,6 +16,7 @@
                 OptionSetService,
                 EnrollmentService,
                 ProgramFactory,
+                DHIS2EventFactory,
                 DashboardLayoutService,
                 AttributesFactory,
                 CurrentSelection) {
@@ -198,10 +199,13 @@
                                         }
                                     }                                
                                 });
-
-                                //prepare selected items for broadcast
-                                CurrentSelection.set({tei: $scope.selectedTei, te: $scope.trackedEntity, prs: $scope.programs, pr: $scope.selectedProgram, prNames: $scope.programNames, prStNames: $scope.programStageNames, enrollments: enrollments, selectedEnrollment: selectedEnrollment, optionSets: $scope.optionSets});                            
-                                getDashboardLayout();                    
+                                
+                                DHIS2EventFactory.getEventsByProgram($scope.selectedTeiId, null).then(function(events){                                        
+                                    //prepare selected items for broadcast
+                                    CurrentSelection.setSelectedTeiEvents(events);                                        
+                                    CurrentSelection.set({tei: $scope.selectedTei, te: $scope.trackedEntity, prs: $scope.programs, pr: $scope.selectedProgram, prNames: $scope.programNames, prStNames: $scope.programStageNames, enrollments: enrollments, selectedEnrollment: selectedEnrollment, optionSets: $scope.optionSets});                            
+                                    getDashboardLayout(); 
+                                });                    
                             });
                         });
                     });            

=== modified file 'dhis-2/dhis-web/dhis-web-apps/src/main/webapp/dhis-web-tracker-capture/components/dataentry/dataentry-controller.js'
--- dhis-2/dhis-web/dhis-web-apps/src/main/webapp/dhis-web-tracker-capture/components/dataentry/dataentry-controller.js	2015-04-17 13:14:21 +0000
+++ dhis-2/dhis-web/dhis-web-apps/src/main/webapp/dhis-web-tracker-capture/components/dataentry/dataentry-controller.js	2015-04-22 07:22:39 +0000
@@ -1,9 +1,11 @@
 /* global angular, trackerCapture */
 
 trackerCapture.controller('DataEntryController',
-        function($scope,
+        function($rootScope,
+                $scope,
                 $modal,
                 $filter,
+                $timeout,
                 Paginator,
                 DateUtils,
                 EventUtils,
@@ -88,45 +90,48 @@
     });
     
     $scope.getEvents = function(){
-        DHIS2EventFactory.getEventsByProgram($scope.selectedEntity.trackedEntityInstance, $scope.selectedProgram.id).then(function(events){
-            if(angular.isObject(events)){
-                angular.forEach(events, function(dhis2Event){                    
-                    if(dhis2Event.enrollment === $scope.selectedEnrollment.enrollment && dhis2Event.orgUnit){
-                        if(dhis2Event.notes){
-                            dhis2Event.notes = orderByFilter(dhis2Event.notes, '-storedDate');
-                            angular.forEach(dhis2Event.notes, function(note){
-                                note.storedDate = DateUtils.formatToHrsMins(note.storedDate);
-                            });
-                        }
-                    
-                        var eventStage = $scope.stagesById[dhis2Event.programStage];
-                        if(angular.isObject(eventStage)){
-
-                            dhis2Event.name = eventStage.name; 
-                            dhis2Event.reportDateDescription = eventStage.reportDateDescription;
-                            dhis2Event.dueDate = DateUtils.formatFromApiToUser(dhis2Event.dueDate);
-                            dhis2Event.sortingDate = dhis2Event.dueDate;
-
-                            if(dhis2Event.eventDate){
-                                dhis2Event.eventDate = DateUtils.formatFromApiToUser(dhis2Event.eventDate);
-                                dhis2Event.sortingDate = dhis2Event.eventDate;
-                                dhis2Event.editingNotAllowed = setEventEditing(dhis2Event, eventStage);
-                            }                       
-
-                            dhis2Event.statusColor = EventUtils.getEventStatusColor(dhis2Event);
-                            dhis2Event = processEvent(dhis2Event, eventStage);
-                            $scope.eventsByStage[dhis2Event.programStage].push(dhis2Event);
-                            
-                            if($scope.currentStage && $scope.currentStage.id === dhis2Event.programStage){
-                                $scope.currentEvent = dhis2Event;                                
-                                $scope.showDataEntry($scope.currentEvent, true);
-                            }
-                        }
-                    }
-                });
-            }
-            sortEventsByStage();
-        });          
+        
+        var events = CurrentSelection.getSelectedTeiEvents();
+        events = $filter('filter')(events, {program: $scope.selectedProgram.id});
+        
+        if(angular.isObject(events)){
+            angular.forEach(events, function(dhis2Event){                    
+                if(dhis2Event.enrollment === $scope.selectedEnrollment.enrollment && dhis2Event.orgUnit){
+                    if(dhis2Event.notes){
+                        dhis2Event.notes = orderByFilter(dhis2Event.notes, '-storedDate');
+                        angular.forEach(dhis2Event.notes, function(note){
+                            note.storedDate = DateUtils.formatToHrsMins(note.storedDate);
+                        });
+                    }
+
+                    var eventStage = $scope.stagesById[dhis2Event.programStage];
+                    if(angular.isObject(eventStage)){
+
+                        dhis2Event.name = eventStage.name; 
+                        dhis2Event.reportDateDescription = eventStage.reportDateDescription;
+                        dhis2Event.dueDate = DateUtils.formatFromApiToUser(dhis2Event.dueDate);
+                        dhis2Event.sortingDate = dhis2Event.dueDate;
+
+                        if(dhis2Event.eventDate){
+                            dhis2Event.eventDate = DateUtils.formatFromApiToUser(dhis2Event.eventDate);
+                            dhis2Event.sortingDate = dhis2Event.eventDate;
+                            dhis2Event.editingNotAllowed = setEventEditing(dhis2Event, eventStage);
+                        }                       
+
+                        dhis2Event.statusColor = EventUtils.getEventStatusColor(dhis2Event);
+                        dhis2Event = processEvent(dhis2Event, eventStage);
+                        $scope.eventsByStage[dhis2Event.programStage].push(dhis2Event);
+
+                        if($scope.currentStage && $scope.currentStage.id === dhis2Event.programStage){
+                            $scope.currentEvent = dhis2Event;                                
+                            $scope.showDataEntry($scope.currentEvent, true);
+                        }
+                    }
+                }
+            });
+        }
+        
+        sortEventsByStage(null);                  
     };
     
     var setEventEditing = function(dhis2Event, stage){
@@ -191,7 +196,8 @@
                 }
                 
                 $scope.eventsByStage[newEvent.programStage].push(newEvent);
-                sortEventsByStage();
+                $scope.currentEvent = newEvent;
+                sortEventsByStage('ADD');
                 $scope.showDataEntry(newEvent, false);
             }            
         }, function () {
@@ -302,6 +308,19 @@
         return event;
     };
     
+    function updateCurrentEventInStage(){
+        
+        var index = -1;
+        for(var i=0; i<$scope.eventsByStage[$scope.currentEvent.programStage].length && index === -1; i++){
+            if($scope.eventsByStage[$scope.currentEvent.programStage][i].event === $scope.currentEvent.event){
+                index = i;
+            }
+        }
+        if(index !== -1){
+            $scope.eventsByStage[$scope.currentEvent.programStage].splice(index,1,$scope.currentEvent);
+        }
+        
+    };
     $scope.saveDatavalue = function(prStDe){
 
         //check for input validity
@@ -344,18 +363,12 @@
                                         }
                                     ]
                      };
-            DHIS2EventFactory.updateForSingleValue(ev).then(function(response){
-                var index = -1;
-                for(var i=0; i<$scope.eventsByStage[$scope.currentEvent.programStage].length && index === -1; i++){
-                    if($scope.eventsByStage[$scope.currentEvent.programStage][i].event === $scope.currentEvent.event){
-                        index = i;
-                    }
-                }
-                if(index !== -1){
-                    $scope.eventsByStage[$scope.currentEvent.programStage].splice(index,1,$scope.currentEvent);
-                }
+            DHIS2EventFactory.updateForSingleValue(ev).then(function(response){                
+                updateCurrentEventInStage();
+                sortEventsByStage('UPDATE');
+                
                 $scope.currentElement.saved = true;
-                $scope.currentEventOriginal = angular.copy($scope.currentEvent);
+                $scope.currentEventOriginal = angular.copy($scope.currentEvent);                
             });
             
         }
@@ -383,7 +396,10 @@
                                         }
                                     ]
                      };
-            DHIS2EventFactory.updateForSingleValue(ev).then(function(response){
+            DHIS2EventFactory.updateForSingleValue(ev).then(function(response){                
+                updateCurrentEventInStage();
+                sortEventsByStage('UPDATE');
+                
                 $scope.updateSuccess = true;
             });            
         }        
@@ -421,7 +437,10 @@
             $scope.invalidDate = false;
             $scope.eventDateSaved = true;
             $scope.currentEvent.statusColor = EventUtils.getEventStatusColor($scope.currentEvent);
-            sortEventsByStage();
+            $scope.currentEvent.visited = true;
+            
+            updateCurrentEventInStage();
+            sortEventsByStage('UPDATE');
         });
     };
     
@@ -471,7 +490,9 @@
             $scope.currentEvent.sortingDate = $scope.currentEvent.dueDate;            
             $scope.currentEvent.statusColor = EventUtils.getEventStatusColor($scope.currentEvent);            
             $scope.schedulingEnabled = !$scope.schedulingEnabled;
-            sortEventsByStage();
+            
+            updateCurrentEventInStage();
+            sortEventsByStage('UPDATE');
         });
                       
     };
@@ -506,6 +527,9 @@
             if(type === 'LAT' || type === 'LATLNG'){
                 $scope.longitudeSaved = true;
             }
+            
+            updateCurrentEventInStage();
+            sortEventsByStage('UPDATE');
         });
     };
     
@@ -530,6 +554,9 @@
 
             DHIS2EventFactory.updateForNote(e).then(function(data){
                 $scope.note = ''; 
+                
+                updateCurrentEventInStage();
+                sortEventsByStage('UPDATE');
             });
         }        
     };    
@@ -608,7 +635,8 @@
                 }
                 
                 setStatusColor();
-                sortEventsByStage();
+                updateCurrentEventInStage();
+                sortEventsByStage('UPDATE');
                 
                 setEventEditing($scope.currentEvent, $scope.currentStage);
                 
@@ -663,7 +691,8 @@
                 
                 setStatusColor();
                 setEventEditing($scope.currentEvent, $scope.currentStage);
-                sortEventsByStage();
+                updateCurrentEventInStage();
+                sortEventsByStage('UPDATE');
             });
         });
     };
@@ -703,9 +732,9 @@
                         index = i;
                     }
                 }
-                $scope.eventsByStage[$scope.currentEvent.programStage].splice(index,1);
+                $scope.eventsByStage[$scope.currentEvent.programStage].splice(index,1);                
+                sortEventsByStage('REMOVE');
                 $scope.currentEvent = null;
-                sortEventsByStage();
             });
         });
     };
@@ -734,7 +763,7 @@
         return DateUtils.getDate(d);                
     };
     
-    var sortEventsByStage = function(){
+    var sortEventsByStage = function(operation){
         
         $scope.eventFilteringRequired = false;
         
@@ -757,6 +786,50 @@
                 $scope.eventFilteringRequired = $scope.eventFilteringRequired ? $scope.eventFilteringRequired : periods.length > 1;                
             }
         }
+        
+        if(operation !== null){
+            
+            var evs = CurrentSelection.getSelectedTeiEvents();
+            
+            if( operation ===  'ADD' ){  
+                console.log('the current event is:  ', $scope.currentEvent);
+                var ev = EventUtils.reconstruct($scope.currentEvent, $scope.currentStage, $scope.optionSets);
+                ev.enrollment = $scope.currentEvent.enrollment;
+                ev.visited = $scope.currentEvent.visited;
+                evs.push(ev);
+            }   
+            if( operation === 'UPDATE' ){                
+                var ev = EventUtils.reconstruct($scope.currentEvent, $scope.currentStage, $scope.optionSets);
+                ev.enrollment = $scope.currentEvent.enrollment;
+                ev.visited = $scope.currentEvent.visited;
+                var index = -1;
+                for(var i=0; i<evs.length && index === -1; i++){
+                    if(evs[i].event === $scope.currentEvent.event){
+                        index = i;
+                    }
+                }
+                if(index !== -1){
+                    evs[index] = ev;
+                }            
+            }
+            if( operation === 'REMOVE' ){
+                var index = -1;
+                for(var i=0; i<evs.length && index === -1; i++){
+                    if(evs[i].event === $scope.currentEvent.event){
+                        index = i;
+                    }
+                }
+                if(index !== -1){
+                    evs.splice(index,1);
+                }                        
+            }
+            
+            CurrentSelection.setSelectedTeiEvents( evs );
+            
+            $timeout(function() { 
+                $rootScope.$broadcast('tei-report-widget', {});            
+            }, 100);
+        }        
     };
     
     $scope.showLastEventInStage = function(stageId){

=== modified file 'dhis-2/dhis-web/dhis-web-apps/src/main/webapp/dhis-web-tracker-capture/components/report/tei-report-controller.js'
--- dhis-2/dhis-web/dhis-web-apps/src/main/webapp/dhis-web-tracker-capture/components/report/tei-report-controller.js	2015-03-27 14:31:13 +0000
+++ dhis-2/dhis-web/dhis-web-apps/src/main/webapp/dhis-web-tracker-capture/components/report/tei-report-controller.js	2015-04-22 07:22:39 +0000
@@ -3,14 +3,14 @@
 //conroller for tei report
 trackerCapture.controller('TeiReportController',
         function($scope,
+                $filter,
                 CurrentSelection,
                 SessionStorageService,
                 DateUtils,
                 EventUtils,
                 TEIService,
                 ProgramStageFactory,
-                EnrollmentService,
-                DHIS2EventFactory) {  
+                EnrollmentService) {  
     $scope.showProgramReportDetailsDiv = false;
     $scope.enrollmentsByProgram = [];
 
@@ -36,57 +36,61 @@
         
     });
     
+    $scope.$on('tei-report-widget', function(event, args) {
+        $scope.getEvents();        
+    });
+    
     $scope.getEvents = function(){
         
         $scope.dataFetched = false;
         $scope.dataExists = false;
-        var programId = null;
-        
-        if($scope.selectedProgram){
-            programId = $scope.selectedProgram.id;
-        }
         
         $scope.report = [];
         angular.forEach($scope.programs, function(pr){
             $scope.report[pr.id] = {};
         });
         
-        DHIS2EventFactory.getEventsByProgram($scope.selectedTei.trackedEntityInstance, programId).then(function(eventList){
-            angular.forEach(eventList, function(ev){
-                if(ev.program && $scope.report[ev.program] && ev.orgUnit){       
-                    ev.visited = true;
-                    ev.dueDate = DateUtils.formatFromApiToUser(ev.dueDate);  
-                    ev.sortingDate = ev.dueDate;
-                    ev.name = $scope.programStageNames[ev.programStage].name;
-                    ev.programName = $scope.programNames[ev.program].name;                    
-                    if(!$scope.report[ev.program].enrollments){
-                        $scope.report[ev.program] = {enrollments: {}};
-                    }
-                    ev.statusColor = EventUtils.getEventStatusColor(ev); 
-                    
-                    if(ev.eventDate){
-                        ev.eventDate = DateUtils.format(ev.eventDate);
-                        ev.sortingDate = ev.eventDate;
+        var eventList = CurrentSelection.getSelectedTeiEvents();        
+        if($scope.selectedProgram && $scope.selectedProgram.id){
+            eventList = $filter('filter')(eventList, {program: $scope.selectedProgram.id});
+        }
+        
+        angular.forEach(eventList, function(ev){
+            if(ev.program && $scope.report[ev.program] && ev.orgUnit){       
+                ev.visited = true;
+                ev.dueDate = DateUtils.formatFromApiToUser(ev.dueDate);  
+                ev.sortingDate = ev.dueDate;
+                ev.name = $scope.programStageNames[ev.programStage].name;
+                ev.programName = $scope.programNames[ev.program].name;                    
+                if(!$scope.report[ev.program].enrollments){
+                    $scope.report[ev.program] = {enrollments: {}};
+                }
+                ev.statusColor = EventUtils.getEventStatusColor(ev); 
+
+                if(ev.eventDate){
+                    ev.eventDate = DateUtils.format(ev.eventDate);
+                    ev.sortingDate = ev.eventDate;
+                }
+                else{
+                    ev.visited = false;
+                }                 
+
+                if(ev.enrollment){
+                    if($scope.report[ev.program].enrollments[ev.enrollment]){
+                        $scope.report[ev.program].enrollments[ev.enrollment].push(ev);
                     }
                     else{
-                        ev.visited = false;
-                    }                 
-
-                    if(ev.enrollment){
-                        if($scope.report[ev.program].enrollments[ev.enrollment]){
-                            $scope.report[ev.program].enrollments[ev.enrollment].push(ev);
-                        }
-                        else{
-                            $scope.report[ev.program].enrollments[ev.enrollment]= [ev];
-                        }
-                    }                    
-                    if(!$scope.dataExists){
-                        $scope.dataExists = true;
+                        $scope.report[ev.program].enrollments[ev.enrollment]= [ev];
                     }
-                }                
-            });
-            $scope.dataFetched = true;
+                }                    
+                if(!$scope.dataExists){
+                    $scope.dataExists = true;
+                }
+            }                
         });
+        
+        $scope.dataFetched = true;
+        
     };
     
     $scope.showProgramReportDetails = function(pr){

=== modified file 'dhis-2/dhis-web/dhis-web-apps/src/main/webapp/dhis-web-tracker-capture/scripts/services.js'
--- dhis-2/dhis-web/dhis-web-apps/src/main/webapp/dhis-web-tracker-capture/scripts/services.js	2015-04-17 13:14:21 +0000
+++ dhis-2/dhis-web/dhis-web-apps/src/main/webapp/dhis-web-tracker-capture/scripts/services.js	2015-04-22 07:22:39 +0000
@@ -1161,6 +1161,7 @@
     this.attributesById = null;
     this.ouLevels = null;
     this.sortedTeiIds = [];
+    this.selectedTeiEvents = null;
     
     this.set = function(currentSelection){  
         this.currentSelection = currentSelection;        
@@ -1203,6 +1204,13 @@
     this.getSortedTeiIds = function(){
         return this.sortedTeiIds;
     };
+    
+    this.setSelectedTeiEvents = function(selectedTeiEvents){
+        this.selectedTeiEvents = selectedTeiEvents;
+    };
+    this.getSelectedTeiEvents = function(){
+        return this.selectedTeiEvents;
+    };
 })
 
 .service('TEIGridService', function(OrgUnitService, OptionSetService, DateUtils, $translate, AttributesFactory){