Skip to content
Snippets Groups Projects
Commit 5bf26060 authored by Jorrit Schaap's avatar Jorrit Schaap
Browse files

Task #8887: auto adjust timespans based on task/claim timestamps

parent a7bbdafa
No related branches found
No related tags found
No related merge requests found
...@@ -26,6 +26,9 @@ angular.module('raeApp').factory("dataService", ['$http', '$q', function($http, ...@@ -26,6 +26,9 @@ angular.module('raeApp').factory("dataService", ['$http', '$q', function($http,
self.filteredTasks = []; self.filteredTasks = [];
self.filteredTaskDict = {}; self.filteredTaskDict = {};
self.taskTimes = {};
self.resourceClaimTimes = {};
self.selected_resource; self.selected_resource;
self.initialLoadComplete = false; self.initialLoadComplete = false;
...@@ -61,6 +64,8 @@ angular.module('raeApp').factory("dataService", ['$http', '$q', function($http, ...@@ -61,6 +64,8 @@ angular.module('raeApp').factory("dataService", ['$http', '$q', function($http,
self.filteredTasks = self.tasks; self.filteredTasks = self.tasks;
self.filteredTaskDict = self.taskDict; self.filteredTaskDict = self.taskDict;
self.computeMinMaxTaskTimes();
defer.resolve(); defer.resolve();
}); });
...@@ -73,6 +78,21 @@ angular.module('raeApp').factory("dataService", ['$http', '$q', function($http, ...@@ -73,6 +78,21 @@ angular.module('raeApp').factory("dataService", ['$http', '$q', function($http,
}) })
}; };
self.computeMinMaxTaskTimes = function() {
var starttimes = self.filteredTasks.map(function(t) { return t.starttime;});
var endtimes = self.filteredTasks.map(function(t) { return t.endtime;});
var minStarttime = new Date(Math.min.apply(null, starttimes));
var maxEndtime = new Date(Math.max.apply(null, endtimes));
var fullTimespanInMinutes = (maxEndtime - minStarttime) / (60 * 1000);
self.taskTimes = {
min: minStarttime,
max: maxEndtime,
fullTimespanInMinutes: fullTimespanInMinutes
};
};
self.getResources = function() { self.getResources = function() {
var defer = $q.defer(); var defer = $q.defer();
$http.get('/rest/resources').success(function(result) { $http.get('/rest/resources').success(function(result) {
...@@ -122,12 +142,29 @@ angular.module('raeApp').factory("dataService", ['$http', '$q', function($http, ...@@ -122,12 +142,29 @@ angular.module('raeApp').factory("dataService", ['$http', '$q', function($http,
self.resourceClaims = result.resourceclaims; self.resourceClaims = result.resourceclaims;
self.resourceClaimDict = self.toIdBasedDict(self.resourceClaims); self.resourceClaimDict = self.toIdBasedDict(self.resourceClaims);
self.computeMinMaxResourceClaimTimes();
defer.resolve(); defer.resolve();
}); });
return defer.promise; return defer.promise;
}; };
self.computeMinMaxResourceClaimTimes = function() {
var starttimes = self.resourceClaims.map(function(rc) { return rc.starttime;});
var endtimes = self.resourceClaims.map(function(rc) { return rc.endtime;});
var minStarttime = new Date(Math.min.apply(null, starttimes));
var maxEndtime = new Date(Math.max.apply(null, endtimes));
var fullTimespanInMinutes = (maxEndtime - minStarttime) / (60 * 1000);
self.resourceClaimTimes = {
min: minStarttime,
max: maxEndtime,
fullTimespanInMinutes: fullTimespanInMinutes
};
};
self.getResourceGroups = function() { self.getResourceGroups = function() {
var defer = $q.defer(); var defer = $q.defer();
$http.get('/rest/resourcegroups').success(function(result) { $http.get('/rest/resourcegroups').success(function(result) {
...@@ -309,6 +346,8 @@ angular.module('raeApp').factory("dataService", ['$http', '$q', function($http, ...@@ -309,6 +346,8 @@ angular.module('raeApp').factory("dataService", ['$http', '$q', function($http,
} }
} }
} }
self.computeMinMaxTaskTimes();
} else if(change.objectType == 'resourceClaim') { } else if(change.objectType == 'resourceClaim') {
anyResourceClaims = true; anyResourceClaims = true;
var changedClaim = change.value; var changedClaim = change.value;
...@@ -332,6 +371,8 @@ angular.module('raeApp').factory("dataService", ['$http', '$q', function($http, ...@@ -332,6 +371,8 @@ angular.module('raeApp').factory("dataService", ['$http', '$q', function($http,
} }
} }
} }
self.computeMinMaxResourceClaimTimes();
} else if(change.objectType == 'resourceCapacity') { } else if(change.objectType == 'resourceCapacity') {
if(change.changeType == 'update') { if(change.changeType == 'update') {
var changedCapacity = change.value; var changedCapacity = change.value;
...@@ -377,7 +418,9 @@ dataControllerMod.controller('DataController', ...@@ -377,7 +418,9 @@ dataControllerMod.controller('DataController',
['$scope', 'dataService', ['$scope', 'dataService',
function($scope, dataService) { function($scope, dataService) {
var self = this; var self = this;
self.dataService = dataService; $scope.dataService = dataService;
$scope.$watch('dataService.filteredTasks', dataService.computeMinMaxTaskTimes);
dataService.initialLoad(); dataService.initialLoad();
......
...@@ -60,6 +60,7 @@ ganttProjectControllerMod.controller('GanttProjectController', ['$scope', 'dataS ...@@ -60,6 +60,7 @@ ganttProjectControllerMod.controller('GanttProjectController', ['$scope', 'dataS
} }
}, },
autoExpand: 'both', autoExpand: 'both',
taskOutOfRange: 'truncate',
dependencies: true, dependencies: true,
api: function(api) { api: function(api) {
// API Object is used to control methods and events from angular-gantt. // API Object is used to control methods and events from angular-gantt.
...@@ -114,6 +115,20 @@ ganttProjectControllerMod.controller('GanttProjectController', ['$scope', 'dataS ...@@ -114,6 +115,20 @@ ganttProjectControllerMod.controller('GanttProjectController', ['$scope', 'dataS
var ganntRowsDict = {}; var ganntRowsDict = {};
if(numProjecs > 0 && numTasks > 0 && numTasktypes > 0) { if(numProjecs > 0 && numTasks > 0 && numTasktypes > 0) {
$scope.options.fromDate = $scope.dataService.taskTimes.minStarttime;
$scope.options.toDate = $scope.dataService.taskTimes.maxEndtime;
var fullTimespanInMinutes = $scope.dataService.taskTimes.fullTimespanInMinutes;
if(fullTimespanInMinutes > 14*24*60) {
$scope.options.viewScale = '1 days';
} else if(fullTimespanInMinutes > 7*24*60) {
$scope.options.viewScale = '6 hours';
} else if(fullTimespanInMinutes > 2*24*60) {
$scope.options.viewScale = '3 hours';
} else {
$scope.options.viewScale = '1 hours';
}
for(var i = 0; i < numTasks; i++) { for(var i = 0; i < numTasks; i++) {
var task = tasks[i]; var task = tasks[i];
...@@ -193,6 +208,7 @@ ganttProjectControllerMod.controller('GanttProjectController', ['$scope', 'dataS ...@@ -193,6 +208,7 @@ ganttProjectControllerMod.controller('GanttProjectController', ['$scope', 'dataS
$scope.$watch('dataService.resourceGroupMemberships', updateGanttData); $scope.$watch('dataService.resourceGroupMemberships', updateGanttData);
$scope.$watch('dataService.filteredTaskDict', updateGanttData); $scope.$watch('dataService.filteredTaskDict', updateGanttData);
$scope.$watch('dataService.momProjectsDict', updateGanttData, true); $scope.$watch('dataService.momProjectsDict', updateGanttData, true);
$scope.$watch('dataService.taskTimes', updateGanttData, true);
$scope.$watch('dataService.lofarTime', function() {$scope.options.currentDateValue= $scope.dataService.lofarTime;}); $scope.$watch('dataService.lofarTime', function() {$scope.options.currentDateValue= $scope.dataService.lofarTime;});
} }
]); ]);
...@@ -38,6 +38,7 @@ ganttResourceControllerMod.controller('GanttResourceController', ['$scope', 'dat ...@@ -38,6 +38,7 @@ ganttResourceControllerMod.controller('GanttResourceController', ['$scope', 'dat
sideMode: 'Tree', sideMode: 'Tree',
treeHeaderContent: '<i class="fa fa-align-justify"></i> {{getHeader()}}', treeHeaderContent: '<i class="fa fa-align-justify"></i> {{getHeader()}}',
autoExpand: 'both', autoExpand: 'both',
taskOutOfRange: 'truncate',
api: function(api) { api: function(api) {
// API Object is used to control methods and events from angular-gantt. // API Object is used to control methods and events from angular-gantt.
$scope.api = api; $scope.api = api;
...@@ -103,6 +104,20 @@ ganttResourceControllerMod.controller('GanttResourceController', ['$scope', 'dat ...@@ -103,6 +104,20 @@ ganttResourceControllerMod.controller('GanttResourceController', ['$scope', 'dat
return; return;
} }
$scope.options.fromDate = $scope.dataService.resourceClaimTimes.minStarttime;
$scope.options.toDate = $scope.dataService.resourceClaimTimes.maxEndtime;
var fullTimespanInMinutes = $scope.dataService.resourceClaimTimes.fullTimespanInMinutes;
if(fullTimespanInMinutes > 14*24*60) {
$scope.options.viewScale = '1 days';
} else if(fullTimespanInMinutes > 7*24*60) {
$scope.options.viewScale = '6 hours';
} else if(fullTimespanInMinutes > 2*24*60) {
$scope.options.viewScale = '3 hours';
} else {
$scope.options.viewScale = '1 hours';
}
var editableTaskStatusIds = $scope.dataService.editableTaskStatusIds; var editableTaskStatusIds = $scope.dataService.editableTaskStatusIds;
//dict resourceGroup2GanttRows for fast lookup of ganttrows based on groupId //dict resourceGroup2GanttRows for fast lookup of ganttrows based on groupId
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment