dhis2-devs team mailing list archive
-
dhis2-devs team
-
Mailing list archive
-
Message #37105
[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){