@@ -4,43 +4,41 @@ angular.module('adf.widget.redmine')
4
4
. factory ( 'chartDataService' , function ( $q , redmineService ) {
5
5
6
6
function getChartData ( config ) {
7
+ config . numberPoints = 50 ;
7
8
return redmineService . getIssuesForChart ( config ) . then ( function ( issues ) {
8
9
//if (vm.config.timespan && vm.config.timespan.fromDateTime && vm.config.timespan.toDateTime)
9
10
var from = new Date ( config . timespan . fromDateTime ) ;
10
11
var to = new Date ( config . timespan . toDateTime ) ;
11
12
return calculateOpenIssuesPerDay ( from , to , issues , config ) ;
12
- } ) ;
13
+ } )
13
14
}
14
15
15
16
function calculateOpenIssuesPerDay ( from , to , issues , config ) {
16
17
var timeDiff = Math . abs ( from . getTime ( ) - to . getTime ( ) ) ;
17
18
var diffDays = Math . ceil ( timeDiff / ( 1000 * 3600 * 24 ) ) ;
19
+ var pointThinningRate = diffDays / config . numberPoints ;
18
20
var numberAllIssues = issues . length ;
19
21
var idealIssuesPerDay = numberAllIssues / diffDays ;
20
22
var idealData = [ ] ;
21
- // order issues by creation date
22
- var openIssues = [ ] ; // inv: ordered by "closed_on"
23
- var dates = [ ] ; // x-values
24
- var values = [ ] ; // y-values
23
+ var openIssues = [ ] ;
24
+ var values = [ ] ;
25
25
while ( from . getTime ( ) <= to . getTime ( ) ) {
26
26
moveNewOpenIssues ( issues , openIssues , from ) ;
27
27
removeNewClosedIssues ( openIssues , from ) ;
28
28
var value = { x : from . toISOString ( ) , y :openIssues . length } ;
29
29
values . push ( value ) ;
30
30
if ( config . showIdeal ) {
31
- var idealValue = numberAllIssues - idealData . length * idealIssuesPerDay ;
31
+ var idealValue = Math . round ( ( numberAllIssues - idealData . length * idealIssuesPerDay * pointThinningRate ) * 100 ) / 100 ;
32
32
var ideal = { x : from . toISOString ( ) , y :idealValue } ;
33
33
idealData . push ( ideal ) ;
34
34
}
35
- from . setDate ( from . getDate ( ) + 1 ) ; // next day
35
+ from . setDate ( from . getDate ( ) + pointThinningRate ) ;
36
36
}
37
37
var valueSets = [ values ] ;
38
38
if ( config . showIdeal ) {
39
39
valueSets . push ( idealData ) ;
40
40
}
41
- return {
42
- values : valueSets
43
- }
41
+ return valueSets ;
44
42
}
45
43
46
44
function moveNewOpenIssues ( allIssues , openIssues , date ) {
@@ -51,6 +49,7 @@ angular.module('adf.widget.redmine')
51
49
allIssues . splice ( i , 1 ) ;
52
50
i -- ;
53
51
} else {
52
+ // we can stop here, cause the issues are ordered by creation date
54
53
break ;
55
54
}
56
55
}
@@ -63,8 +62,6 @@ angular.module('adf.widget.redmine')
63
62
if ( closeDate . getTime ( ) <= date . getTime ( ) ) {
64
63
openIssues . splice ( i , 1 ) ;
65
64
i -- ;
66
- } else {
67
- //break;
68
65
}
69
66
}
70
67
}
0 commit comments