[Rt-commit] rt branch, 4.6/jschart, repushed
? sunnavy
sunnavy at bestpractical.com
Thu Jun 13 15:32:27 EDT 2019
The branch 4.6/jschart was deleted and repushed:
was eea1c5910a2d32063d57ba0d9a6593040fe49cba
now 5c7a3b5bf4da574ca9d977d9e7d53758fb106420
1: d85a7aab0 = 1: b70293b5e Add Chart.js 2.8.0 dependency
2: fc83058c5 = 2: 967b700b2 Add chartjs-plugin-colorschemes.min.js 0.03 dependency
3: aa5b37711 ! 3: 10f7cf364 Initial js chart support
@@ -173,6 +173,7 @@
+
+<canvas id="search-chart" width="<% $Width %>" height="<% $Height %>"></canvas>
+<script type="text/javascript">
++var data_labels = <% JSON( \@data_labels ) |n %>;
+var ctx = document.getElementById('search-chart').getContext('2d');
+var searchChart = new Chart(ctx, {
+ type: <% $ChartStyle =~ /\bbar\b/ ? 'bar' : 'pie' |n,j %>,
@@ -200,6 +201,19 @@
+ legend: {
+ display: <% @data == 2 ? 'false' : 'true' %>
+ },
++ tooltips: {
++ callbacks: {
++ label: function(tooltipItem, data) {
++ var label = data.datasets[tooltipItem.datasetIndex].label || '';
++
++ if (label) {
++ label += ': ';
++ }
++ label += data_labels[tooltipItem.datasetIndex][tooltipItem.index];
++ return label;
++ }
++ }
++ },
+ scales: {
+ xAxes: [{
+ scaleLabel: {
@@ -222,9 +236,14 @@
+ ticks: {
+ beginAtZero: true,
+ callback: function(value, index, values) {
-+ if (Math.floor(value) === value) {
-+ return value;
-+ }
++% my $info = $report->ColumnInfo($columns{'Functions'}[0]);
++% if ( $info->{META} && ($info->{META}{Display}//'') eq 'DurationAsString' ) {
++ return;
++% } else {
++ if (Math.floor(value) === value) {
++ return value;
++ }
++% }
+ }
+ }
+ }]
@@ -259,14 +278,18 @@
+}
+
+my @data = ([],[]);
++my @data_labels;
+while ( my $entry = $report->Next ) {
+ push @{ $data[0] }, [ map $entry->LabelValue( $_ ), @{ $columns{'Groups'} } ];
+
+ my @values;
++ my @label_values;
+ foreach my $column ( @{ $columns{'Functions'} } ) {
+ my $v = $entry->RawValue( $column );
++ my $label_v = $entry->LabelValue( $column );
+ unless ( ref $v ) {
+ push @values, $v;
++ push @label_values, $label_v;
+ next;
+ }
+
@@ -274,10 +297,13 @@
+ $report->ColumnInfo( $column )->{'META'}{'SubValues'}
+ )->( $report );
+ push @values, map $v->{$_}, @subs;
++ push @label_values, map $label_v->{$_}, @subs;
+ }
+
+ my $i = 0;
++ my $j = 0;
+ push @{ $data[++$i] }, $_ foreach @values;
++ push @{ $data_labels[$j++] }, $_ foreach @label_values;
+}
+
+$ChartStyle =~ s/\bpie\b/bar/ if @data > 2;
4: 10bf39d82 ! 4: f67715ebb Use different colors for bars if the chart only contains a single dataset
@@ -8,9 +8,10 @@
--- a/share/html/Search/JSChart
+++ b/share/html/Search/JSChart
@@
-
<canvas id="search-chart" width="<% $Width %>" height="<% $Height %>"></canvas>
<script type="text/javascript">
+ var data_labels = <% JSON( \@data_labels ) |n %>;
++
+% if ( $#data == 1 ) {
+var backgroundColor = Chart.colorschemes[<% $scheme_parts[0] |n,j %>][<% $scheme_parts[1] |n,j %>];
+if ( backgroundColor && backgroundColor.length ) {
5: 67c894dcf = 5: ea6ab6cc4 Set y-axis label only for bar charts
6: aa5951852 ! 6: fe85dafee Redirect to ticket search result page via click on each bar/pie
@@ -50,14 +50,14 @@
if ( $Cache and my $data = delete $session{'charts_cache'}{ $Cache } ) {
%columns = %{ $data->{'columns'} };
@@
- }
my @data = ([],[]);
+ my @data_labels;
+my @group_by_values;
while ( my $entry = $report->Next ) {
push @{ $data[0] }, [ map $entry->LabelValue( $_ ), @{ $columns{'Groups'} } ];
+ push @group_by_values, [ map $entry->RawValue( $_ ), @{ $columns{'Groups'} } ];
my @values;
- foreach my $column ( @{ $columns{'Functions'} } ) {
+ my @label_values;
7: eea1c5910 ! 7: 48098f16e Support group by durations like "Created-Resolved" for charts
@@ -57,6 +57,9 @@
+ # Need to do the groupby/calculation at Perl level
+ $self->{_query} = $args{'Query'};
+ }
++ else {
++ delete $self->{_query};
++ }
+
return %res;
}
@@ -189,25 +192,25 @@
+ if ( $field->{NAME} =~ /^id/ && $field->{FUNCTION} eq 'COUNT' ) {
+ $info{$key}{ $field->{NAME} }++;
+ }
++ elsif ( $field->{NAME} =~ /^postfunction/ ) {
++ if ( $field->{MAP} ) {
++ my ($meta_type) = $field->{INFO}[1] =~ /^(\w+)All$/;
++ for my $item ( values %{ $field->{MAP} } ) {
++ push @fields,
++ {
++ NAME => $item->{NAME},
++ FIELD => $item->{FIELD},
++ INFO => [
++ '', $meta_type,
++ $item->{FUNCTION} =~ /^(\w+)/ ? $1 : '',
++ @{ $field->{INFO} }[ 2 .. $#{ $field->{INFO} } ],
++ ],
++ };
++ }
++ }
++ }
+ elsif ( $field->{INFO}[1] eq 'Time' ) {
-+ if ( $field->{NAME} =~ /^postfunction/ ) {
-+ if ( $field->{MAP} ) {
-+ my ($meta_type) = $field->{INFO}[1] =~ /^(\w+)All$/;
-+ for my $item ( values %{ $field->{MAP} } ) {
-+ push @fields,
-+ {
-+ NAME => $item->{NAME},
-+ FIELD => $item->{FIELD},
-+ INFO => [
-+ '', $meta_type,
-+ $item->{FUNCTION} =~ /^(\w+)/ ? $1 : '',
-+ @{ $field->{INFO} }[ 2 .. $#{ $field->{INFO} } ],
-+ ],
-+ };
-+ }
-+ }
-+ }
-+ elsif ( $field->{NAME} =~ /^(TimeWorked|TimeEstimated|TimeLeft)$/ ) {
++ if ( $field->{NAME} =~ /^(TimeWorked|TimeEstimated|TimeLeft)$/ ) {
+ my $method = $1;
+
+ if ( $field->{INFO}[2] eq 'SUM' ) {
@@ -246,10 +249,10 @@
+ my $end_method = $end . 'Obj';
+ next unless $ticket->$end_method->Unix > 0 && $ticket->$start_method->Unix > 0;
+ my $value = $ticket->$end_method->Unix - $ticket->$start_method->Unix;
-+ if ( $field->{INFO}[2] eq 'SUM' ) {
++ if ( $type eq 'SUM' ) {
+ $info{$key}{ lc $field->{NAME} } += $value;
+ }
-+ elsif ( $field->{INFO}[2] eq 'AVG' ) {
++ elsif ( $type eq 'AVG' ) {
+ $info{$key}{ lc $field->{NAME} }{total} += $value;
+ $info{$key}{ lc $field->{NAME} }{count}++;
+ $info{$key}{ lc $field->{NAME} }{calculate} = sub {
@@ -257,18 +260,18 @@
+ return sprintf '%.0f', $item->{total} / $item->{count};
+ };
+ }
-+ elsif ( $field->{INFO}[2] eq 'MAX' ) {
++ elsif ( $type eq 'MAX' ) {
+ $info{$key}{ lc $field->{NAME} } = $value
+ unless $info{$key}{ lc $field->{NAME} }
+ && $info{$key}{ lc $field->{NAME} } > $value;
+ }
-+ elsif ( $field->{INFO}[2] eq 'MIN' ) {
++ elsif ( $type eq 'MIN' ) {
+ $info{$key}{ lc $field->{NAME} } = $value
+ unless $info{$key}{ lc $field->{NAME} }
+ && $info{$key}{ lc $field->{NAME} } < $value;
+ }
+ else {
-+ RT->Logger->error("Unsupported type $field->{INFO}[2]");
++ RT->Logger->error("Unsupported type $type");
+ }
+ }
+ else {
@@ -359,3 +362,4 @@
RT::Base->_ImportOverlays();
1;
+
--: ------- > 8: 2defd29ee Rename durations like "Created-Started" to "Created to Started" for charts
--: ------- > 9: 8c92acc4e Add business hours support for charts
--: ------- > 10: 7cafd9330 Add custom date ranges support for charts
--: ------- > 11: 5c7a3b5bf Use hour as the max unit of business time
More information about the rt-commit
mailing list