Merge branch 'master' of git.freeside.biz:/home/git/freeside
[freeside.git] / httemplate / graph / elements / monthly.html
index 7b1b98a..1a94281 100644 (file)
@@ -19,15 +19,25 @@ Example:
     'links'           => \@links,      # or \%link, #opt
     'link_fromparam'  => 'param_from', #defaults to 'begin'
     'link_toparam'    => 'param_to',   #defaults to 'end'
+    'daily'           => 1, # omit for monthly granularity
+    'no_graph'        => \@no_graph, # items to leave off the graph (subtotals)
 
     #optional, pulled from CGI params if not specified
     'start_month'     => $smonth,
     'start_year'      => $syear,
     'end_month'       => $emonth,
     'end_year'        => $eyear,
+    '12mo'            => 0,
+
+    #optional, pulled from CGI params if not specified, 
+    #only if 'daily' option is given
+    'start_day'       => $sday,
+    'end_day'         => $eday,
 
     #optional
     'agentnum'        => $agentnum,
+    'refnum'          => $refnum,
+    'cust_classnum'   => \@classnums,
     'nototal'         => 1,
     'graph_type'      => 'LinesPoints',
     'remove_empty'    => 1,
@@ -41,23 +51,26 @@ Example:
             '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}} ],
+            'graph_labels'  => \@graph_labels,
+            'col_labels'    => $col_labels,
             'axis_labels'   => $data->{label},
-            'colors'        => $data->{colors},
+            'colors'        => \@colors,
             'links'         => \@links,
+            'no_graph'      => \@no_graph,
             'bottom_link'   => \@bottom_link,
-            map { $_, $opt{$_} } (qw(title 
-                                    nototal 
-                                    graph_type 
-                                    bottom_total 
-                                    sprintf 
-                                    disable_money)),
+            'transpose'     => $opt{'daily'},
+            map { $_, $opt{$_} } (qw(title
+                                    nototal
+                                    graph_type
+                                    bottom_total
+                                    sprintf
+                                    disable_money
+                                    chart_options)),
           ) %>
 <%init>
 
 my(%opt) = @_;
+$opt{'debug'} ||= $cgi->param('debug');
 
 my $conf = new FS::Conf;
 my $money_char = $opt{'disable_money'} ? '' : $conf->config('money_char');
@@ -83,27 +96,69 @@ $opt{'start_year'}  ||= $cgi->param('start_year'); # || 1899+$curyear;
 $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 (
+$opt{'12mo'} ||= $cgi->param('12mo') ? 1 : 0;
 
-  'items'        => \@items,
-  'params'       => $opt{'params'},
-  'item_labels'  => ( $cgi->param('_type') =~ /^(png)$/
-                        ? $opt{'graph_labels'}
-                        : $opt{'labels'}
-                    ),
-  'colors'       => $opt{'colors'},
-  'links'        => $opt{'links'},
+$opt{'projection'} ||= $cgi->param('projection') ? 1 : 0;
 
-  'start_month'  => $opt{'start_month'},
-  'start_year'   => $opt{'start_year'},
-  'end_month'    => $opt{'end_month'},
-  'end_year'     => $opt{'end_year'},
+if ( $opt{'daily'} ) { # daily granularity
+    $opt{'start_day'} ||= $cgi->param('start_day');
+    $opt{'end_day'} ||= $cgi->param('end_day');
+}
 
-  'agentnum'     => $opt{'agentnum'},
-  'remove_empty' => $opt{'remove_empty'},
+my %reportopts = (
+      'items'        => \@items,
+      'params'       => $opt{'params'},
+      'item_labels'  => ( $cgi->param('_type') =~ /^(png)$/ 
+                            ? $opt{'graph_labels'}
+                            : $opt{'labels'}
+                        ),
+      'colors'       => $opt{'colors'},
+      'links'        => $opt{'links'},
+
+      'start_day'    => $opt{'start_day'},
+      'start_month'  => $opt{'start_month'},
+      'start_year'   => $opt{'start_year'},
+      'end_day'      => $opt{'end_day'},
+      'end_month'    => $opt{'end_month'},
+      'end_year'     => $opt{'end_year'},
+      '12mo'         => $opt{'12mo'},
+      'projection'   => $opt{'projection'},
+      'agentnum'     => $opt{'agentnum'},
+      'refnum'       => $opt{'refnum'},
+      'cust_classnum'=> $opt{'cust_classnum'},
+      'remove_empty' => $opt{'remove_empty'},
+      'doublemonths' => $opt{'doublemonths'},
+      'normalize'    => $opt{'normalize'},
 );
+
+warn Dumper({ 'REPORTOPTS' => \%reportopts }) if $opt{'debug'};
+
+my $report;
+$report = new FS::Report::Table::Daily(%reportopts) if $opt{'daily'};
+$report = new FS::Report::Table::Monthly(%reportopts) unless $opt{'daily'};
 my $data = $report->data;
 
+warn Dumper({'DATA' => $data}) if $opt{'debug'};
+
+if ( $data->{'error'} ) {
+  die $data->{'error'}; # could be smarter
+}
+
+my $col_labels = [ map { my $m = $_; $m =~ s/^(\d+)\//$mon[$1-1] / ; $m }
+                             @{$data->{label}} ];
+$col_labels = $data->{label} if $opt{'daily'};
+
+my @colors;
+my @graph_labels;
+my @no_graph;
+#if ( $opt{'remove_empty'} ) { # no, always do this
+  # then filter out per-item things for collapsed rows
+foreach my $i (@{ $data->{'indices'} }) {
+  push @colors,       $opt{'colors'}[$i];
+  push @graph_labels, $opt{'graph_labels'}[$i];
+  push @no_graph,     $opt{'no_graph'}[$i];
+}
+
 my @links;
 foreach my $link (@{ $data->{'links'} }) {
   my @speriod = @{$data->{'speriod'}};