+ push @{$data{label}}, "$smonth/$syear"; # sprintf?
+
+ my $speriod = timelocal(0,0,0,1,$smonth-1,$syear);
+ push @{$data{speriod}}, $speriod;
+ if ( ++$smonth == 13 ) { $syear++; $smonth=1; }
+ my $eperiod = timelocal(0,0,0,1,$smonth-1,$syear);
+ push @{$data{eperiod}}, $eperiod;
+
+ my $col = 0;
+ my @items = @{$self->{'items'}};
+ my $i;
+
+ for ( $i = 0; $i < scalar(@items); $i++ ) {
+ my $item = $items[$i];
+ my @param = $self->{'params'} ? @{ $self->{'params'}[$col] }: ();
+ push @param, 'project', $projecting;
+ push @param, 'refnum' => $refnum if $refnum;
+
+ if ( $self->{'cross_params'} ) {
+ my @xdata;
+ foreach my $xparam (@{ $self->{'cross_params'} }) {
+ # @$xparam is a list of additional params to merge into the list
+ my $value = $self->$item($speriod, $eperiod, $agentnum,
+ @param,
+ @$xparam);
+ push @xdata, $value;
+ }
+ push @{$data{data}->[$col++]}, \@xdata;
+ } else {
+ 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'};
+ $data{'links'} = $self->{'links'} || [];
+
+ if ( !$self->{'cross_params'} and $self->{'remove_empty'} ) {
+
+ my $col = 0;
+ #these need to get generalized, sheesh
+ #(though we now return a list of item indices that are present in the
+ #output, so the front-end code could do this)
+ my @newitems = ();
+ my @newlabels = ();
+ my @newdata = ();
+ my @newcolors = ();
+ my @newlinks = ();
+ my @indices = ();
+ foreach my $item ( @{$self->{'items'}} ) {
+
+ if ( grep { $_ != 0 } @{$data{'data'}->[$col]} ) {
+ push @newitems, $data{'items'}->[$col];
+ push @newlabels, $data{'item_labels'}->[$col];
+ push @newdata, $data{'data'}->[$col];
+ push @newcolors, $data{'colors'}->[$col];
+ push @newlinks, $data{'links'}->[$col];
+ push @indices, $col;
+ }
+
+ $col++;
+ }
+
+ $data{'items'} = \@newitems;
+ $data{'item_labels'} = \@newlabels;
+ $data{'data'} = \@newdata;
+ $data{'colors'} = \@newcolors;
+ $data{'links'} = \@newlinks;
+ $data{'indices'} = \@indices;
+
+ }
+ # clean up after ourselves
+ #dbh->rollback;
+ # leave in until development is finished, for diagnostics
+ dbh->commit;
+
+ \%data;