%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>