detail links on new 477 report, #30360
[freeside.git] / FS / FS / Report / Table / Daily.pm
index 5bbd6e4..c181064 100644 (file)
@@ -3,7 +3,9 @@ package FS::Report::Table::Daily;
 use strict;
 use vars qw( @ISA );
 use FS::Report::Table;
-use Time::Local qw( timelocal );
+use FS::Conf;
+use Time::Local qw( timelocal timelocal_nocheck ); # eventually replace with DateTime
+use Date::Format qw( time2str );
 
 @ISA = qw( FS::Report::Table );
 
@@ -25,6 +27,7 @@ FS::Report::Table::Daily - Tables of report data, indexed daily
     'end_day'     => 27,
     #opt
     'agentnum'    => 54
+    'cust_classnum' => [ 1,2,4 ],
     'params'      => [ [ 'paramsfor', 'item_one' ], [ 'item', 'two' ] ], # ...
     'remove_empty' => 1, #collapse empty rows, default 0
     'item_labels' => [ ], #useful with remove_empty
@@ -52,25 +55,29 @@ sub data {
   my $emonth = $self->{'end_month'};
   my $eyear = $self->{'end_year'};
   my $agentnum = $self->{'agentnum'};
+  my $cust_classnum = $self->{'cust_classnum'} || [];
+  $cust_classnum = [ $cust_classnum ] if !ref($cust_classnum);
 
   my %data;
 
   my $sdate = timelocal(0,0,0,$sday,$smonth-1,$syear);
   my $edate = timelocal(0,0,0,$eday,$emonth-1,$eyear);
 
-  warn "daily range $sdate $edate\n";
+  my $conf = FS::Conf->new;
+  my $date_format = $conf->config('date_format') || '%d/%m/%Y';
+
+  #warn "daily range $sdate $edate\n";
 
   # XXX: use date_format config for the labels since we have day in the labels now?
-  # XXX: leap seconds / DST 
   while ( $sdate < $edate ) {
-    my($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime($sdate);
-    $mon++;
-    $year += 1900;
-    warn "label=$mday/$mon/$year\n";
-    push @{$data{label}}, "$mday/$mon/$year";
+    push @{$data{label}}, time2str($date_format, $sdate);
 
     my $speriod = $sdate;
-    $sdate += 86400;
+
+    #ala part_pkg->add_freq, to deal with local DST.  DateTime also a good idea
+    my ($mday,$mon,$year) = (localtime($sdate) )[3,4,5];
+    $sdate = timelocal_nocheck(0,0,0,$mday+1,$mon,$year);
+
     my $eperiod = $sdate;
 
     push @{$data{speriod}}, $speriod;
@@ -82,6 +89,7 @@ sub data {
     for ( $i = 0; $i < scalar(@items); $i++ ) {
          my $item = $items[$i];
          my @param = $self->{'params'} ? @{ $self->{'params'}[$col] }: ();
+          push @param, 'cust_classnum' => $cust_classnum if @$cust_classnum;
          my $value = $self->$item($speriod, $eperiod, $agentnum, @param);
          push @{$data{data}->[$col++]}, $value;
     }