1 package FS::Report::Table::Monthly;
6 use Time::Local qw( timelocal );
8 @ISA = qw( FS::Report::Table );
12 FS::Report::Table::Monthly - Tables of report data, indexed monthly
16 use FS::Report::Table::Monthly;
18 my $report = new FS::Report::Table::Monthly (
19 'items' => [ 'invoiced', 'netsales', 'credits', 'receipts', ],
26 'params' => [ [ 'paramsfor', 'item_one' ], [ 'item', 'two' ] ], # ...
27 'remove_empty' => 1, #collapse empty rows, default 0
28 'item_labels' => [ ], #useful with remove_empty
31 my $data = $report->data;
39 Returns a hashref of data (!! describe)
46 my $smonth = $self->{'start_month'};
47 my $syear = $self->{'start_year'};
48 my $emonth = $self->{'end_month'};
49 my $eyear = $self->{'end_year'};
50 my $agentnum = $self->{'agentnum'};
54 while ( $syear < $eyear || ( $syear == $eyear && $smonth < $emonth+1 ) ) {
56 if ( $self->{'doublemonths'} ) {
57 my($firstLabel,$secondLabel) = @{$self->{'doublemonths'}};
58 push @{$data{label}}, "$smonth/$syear $firstLabel";
59 push @{$data{label}}, "$smonth/$syear $secondLabel";
62 push @{$data{label}}, "$smonth/$syear";
65 my $speriod = timelocal(0,0,0,1,$smonth-1,$syear);
66 push @{$data{speriod}}, $speriod;
67 if ( ++$smonth == 13 ) { $syear++; $smonth=1; }
68 my $eperiod = timelocal(0,0,0,1,$smonth-1,$syear);
69 push @{$data{eperiod}}, $eperiod;
72 my @items = @{$self->{'items'}};
74 for ( $i = 0; $i < scalar(@items); $i++ ) {
75 if ( $self->{'doublemonths'} ) {
76 my $item = $items[$i];
77 my @param = $self->{'params'} ? @{ $self->{'params'}[$i] }: ();
78 my $value = $self->$item($speriod, $eperiod, $agentnum, @param);
79 push @{$data{data}->[$col]}, $value;
81 @param = $self->{'params'} ? @{ $self->{'params'}[++$i] }: ();
82 $value = $self->$item($speriod, $eperiod, $agentnum, @param);
83 push @{$data{data}->[$col++]}, $value;
86 my $item = $items[$i];
87 my @param = $self->{'params'} ? @{ $self->{'params'}[$col] }: ();
88 my $value = $self->$item($speriod, $eperiod, $agentnum, @param);
89 push @{$data{data}->[$col++]}, $value;
95 #these need to get generalized, sheesh
96 $data{'items'} = $self->{'items'};
97 $data{'item_labels'} = $self->{'item_labels'} || $self->{'items'};
98 $data{'colors'} = $self->{'colors'};
99 $data{'links'} = $self->{'links'} || [];
101 if ( $self->{'remove_empty'} ) {
104 #these need to get generalized, sheesh
110 foreach my $item ( @{$self->{'items'}} ) {
112 if ( grep { $_ != 0 } @{$data{'data'}->[$col]} ) {
113 push @newitems, $data{'items'}->[$col];
114 push @newlabels, $data{'item_labels'}->[$col];
115 push @newdata, $data{'data'}->[$col];
116 push @newcolors, $data{'colors'}->[$col];
117 push @newlinks, $data{'links'}->[$col];
123 $data{'items'} = \@newitems;
124 $data{'item_labels'} = \@newlabels;
125 $data{'data'} = \@newdata;
126 $data{'colors'} = \@newcolors;
127 $data{'links'} = \@newlinks;