[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