diff options
Diffstat (limited to 'httemplate/graph/elements/monthly.html')
-rw-r--r-- | httemplate/graph/elements/monthly.html | 139 |
1 files changed, 139 insertions, 0 deletions
diff --git a/httemplate/graph/elements/monthly.html b/httemplate/graph/elements/monthly.html new file mode 100644 index 0000000..7b1b98a --- /dev/null +++ b/httemplate/graph/elements/monthly.html @@ -0,0 +1,139 @@ +<%doc> + +Example: + + include('elements/monthly.html', + #required + 'title' => 'Page title', + 'items' => \@items, + 'labels' => \@labels, # or \%labels (keys are items) + + #required? + 'colors' => \@colors, # or \%colors, + + #recommended + 'graph_labels' => \@graph_labels, # or \%graph_labels, + + #optional + 'params' => \@params, # opt, + 'links' => \@links, # or \%link, #opt + 'link_fromparam' => 'param_from', #defaults to 'begin' + 'link_toparam' => 'param_to', #defaults to 'end' + + #optional, pulled from CGI params if not specified + 'start_month' => $smonth, + 'start_year' => $syear, + 'end_month' => $emonth, + 'end_year' => $eyear, + + #optional + 'agentnum' => $agentnum, + 'nototal' => 1, + 'graph_type' => 'LinesPoints', + 'remove_empty' => 1, + 'bottom_total' => 1, + 'sprintf' => '%u', #sprintf format, overrides default %.2f + 'disable_money' => 1, + ); + +</%doc> +<% include('report.html', + 'items' => $data->{'items'}, + 'data' => $data->{'data'}, + 'row_labels' => $data->{'item_labels'}, + 'graph_labels' => $opt{'graph_labels'} || $data->{'item_labels'}, + 'col_labels' => [ map { my $m = $_; $m =~ s/^(\d+)\//$mon[$1-1] / ; $m } + @{$data->{label}} ], + 'axis_labels' => $data->{label}, + 'colors' => $data->{colors}, + 'links' => \@links, + 'bottom_link' => \@bottom_link, + map { $_, $opt{$_} } (qw(title + nototal + graph_type + bottom_total + sprintf + disable_money)), + ) %> +<%init> + +my(%opt) = @_; + +my $conf = new FS::Conf; +my $money_char = $opt{'disable_money'} ? '' : $conf->config('money_char'); + +my $fromparam = $opt{'link_fromparam'} || 'begin'; +my $toparam = $opt{'link_toparam'} || 'end'; + +my @items = @{ $opt{'items'} }; + +foreach my $other (qw( labels graph_labels colors links )) { + if ( ref($opt{$other}) eq 'HASH' ) { + $opt{$other} = [ map $opt{$other}{$_}, @items ]; + } +} + +my @mon = qw(Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec); + +#find first month +$opt{'start_month'} ||= $cgi->param('start_month'); # || $curmon+1; +$opt{'start_year'} ||= $cgi->param('start_year'); # || 1899+$curyear; + +#find last month +$opt{'end_month'} ||= $cgi->param('end_month'); # || $curmon+1; +$opt{'end_year'} ||= $cgi->param('end_year'); # || 1900+$curyear; + +my $report = new FS::Report::Table::Monthly ( + + 'items' => \@items, + 'params' => $opt{'params'}, + 'item_labels' => ( $cgi->param('_type') =~ /^(png)$/ + ? $opt{'graph_labels'} + : $opt{'labels'} + ), + 'colors' => $opt{'colors'}, + 'links' => $opt{'links'}, + + 'start_month' => $opt{'start_month'}, + 'start_year' => $opt{'start_year'}, + 'end_month' => $opt{'end_month'}, + 'end_year' => $opt{'end_year'}, + + 'agentnum' => $opt{'agentnum'}, + 'remove_empty' => $opt{'remove_empty'}, +); +my $data = $report->data; + +my @links; +foreach my $link (@{ $data->{'links'} }) { + my @speriod = @{$data->{'speriod'}}; + my @eperiod = @{$data->{'eperiod'}}; + my ($begin, $end) = ($fromparam, $toparam); + + my @new = ( $link ); + if(ref($link)) { + $begin = $link->{'fromparam'}; + $end = $link->{'toparam'}; + @new = ( $link->{'link'} ); + } + while(@speriod) { + push @new, "$begin=". shift(@speriod).";$end=".shift(@eperiod); + } + if(! $opt{'nototal'}) { + push @new, "$begin=". $data->{'speriod'}[0] . ";$end=". $data->{'eperiod'}[-1]; + } + push @links, \@new; +} + +my @bottom_link; +if($opt{'bottom_link'}) { + my @speriod = (@{$data->{'speriod'}}, $data->{'speriod'}[0]); + my @eperiod = (@{$data->{'eperiod'}}, $data->{'eperiod'}[-1]); + + push @bottom_link, $opt{'bottom_link'}; + while(@speriod) { + push @bottom_link, "$fromparam=". shift(@speriod). ";$toparam=". shift(@eperiod); + } +} + +</%init> |