X-Git-Url: http://git.freeside.biz/gitweb/?a=blobdiff_plain;f=FS%2FFS%2FReport%2FTable%2FDaily.pm;h=66739379da0b1625aaf32c81023f5c7f161b78a9;hb=8dfb2c715ff2de2553bcf3744a2b4d742314a2cb;hp=5bbd6e4e758a7316d3ce04f37e4ed6ba2c846ae1;hpb=fb4ab1073f0d15d660c6cdc4e07afebf68ef3924;p=freeside.git diff --git a/FS/FS/Report/Table/Daily.pm b/FS/FS/Report/Table/Daily.pm index 5bbd6e4e7..66739379d 100644 --- a/FS/FS/Report/Table/Daily.pm +++ b/FS/FS/Report/Table/Daily.pm @@ -1,11 +1,9 @@ package FS::Report::Table::Daily; use strict; -use vars qw( @ISA ); -use FS::Report::Table; -use Time::Local qw( timelocal ); - -@ISA = qw( FS::Report::Table ); +use base 'FS::Report::Table'; +use DateTime; +use FS::Conf; =head1 NAME @@ -25,6 +23,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 @@ -47,31 +46,51 @@ sub data { my $sday = $self->{'start_day'}; my $smonth = $self->{'start_month'}; - my $syear = $self->{'start_year'}; + my $syear = $self->{'start_year'} + 1900; # temporary kludge my $eday = $self->{'end_day'}; my $emonth = $self->{'end_month'}; - my $eyear = $self->{'end_year'}; + my $eyear = $self->{'end_year'} + 1900; 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); + #these need to get generalized, sheesh + my %data = ( + # rows (time intervals) + speriod => [], # start timestamps + eperiod => [], # end timestamps + label => [], # date labels + data => [], # arrayrefs of column values + + # columns (observables + query parameters) + items => $self->{'items'}, + item_labels => $self->{'item_labels'} || $self->{'items'}, + colors => $self->{'colors'}, # no default? + links => $self->{'links'} || [], + ); - warn "daily range $sdate $edate\n"; + my $sdate = DateTime->new( + day => $sday, + month => $smonth, + year => $syear, + time_zone => 'local' + ); + my $edate = DateTime->new( + day => $eday, + month => $emonth, + year => $eyear, + time_zone => 'local' + )->add(days => 1); # include all of the end day + + my $conf = FS::Conf->new; + my $date_format = $conf->config('date_format') || '%d/%m/%Y'; - # 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}}, $sdate->strftime($date_format); - my $speriod = $sdate; - $sdate += 86400; - my $eperiod = $sdate; + my $speriod = $sdate->epoch; + $sdate->add(days => 1); + my $eperiod = $sdate->epoch;; push @{$data{speriod}}, $speriod; push @{$data{eperiod}}, $eperiod; @@ -82,12 +101,12 @@ 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; } } - #these need to get generalized, sheesh $data{'items'} = $self->{'items'}; $data{'item_labels'} = $self->{'item_labels'} || $self->{'items'}; $data{'colors'} = $self->{'colors'};