X-Git-Url: http://git.freeside.biz/gitweb/?a=blobdiff_plain;f=httemplate%2Fgraph%2Fcust_bill_pkg.cgi;h=edc339d3aa6473a55f47581d1f48f9509231dbe5;hb=b527719318878e876971e02e4ac3bfb892a68dec;hp=1b31955c45f159374168cabb7565b2f75c0d4c56;hpb=dd0bf7c0db2d97a33bedd324788ca550b54572fc;p=freeside.git diff --git a/httemplate/graph/cust_bill_pkg.cgi b/httemplate/graph/cust_bill_pkg.cgi index 1b31955c4..edc339d3a 100644 --- a/httemplate/graph/cust_bill_pkg.cgi +++ b/httemplate/graph/cust_bill_pkg.cgi @@ -103,7 +103,7 @@ if ( $cgi->param('class_mode') eq 'report' ) { $value_col = 'classnum'; } -my @classnums = grep /^\d+$/, $cgi->param($class_param); +my @classnums = sort {$a <=> $b} grep /^\d+$/, $cgi->param($class_param); my @classnames = map { if ( $_ ) { my $class = qsearchs($class_table, {$value_col=>$_} ); $class->$name_col; @@ -128,22 +128,22 @@ if ( $cgi->param('class_agg_break') eq 'aggregate' or if ( $cgi->param('class_mode') eq 'report' ) { # The new way: # Actually break down all subsets of the (selected) report classes. - my $powerset = sub { - my @set = []; - foreach my $x (@_) { - @set = map { $_, [ @$_, $x ] } @set; + my @subsets = FS::part_pkg_report_option->subsets(@classnums); + my @classnum_space = @classnums; + @classnums = @classnames = (); + while(@subsets) { + my $these = shift @subsets; + # applied topology! + my $not_these = [ @classnum_space ]; + my $i = 0; + foreach (@$these) { + $i++ until $not_these->[$i] == $_; + splice(@$not_these, $i, 1); } - @set; - }; - @classnums = $powerset->(@classnums); - @classnames = $powerset->(@classnames); - # this is pairwise complementary to @classnums, because math - @not_classnums = reverse(@classnums); -warn Dumper(\@classnums, \@classnames, \@not_classnums); - # remove the null set - shift @classnums; - shift @classnames; - shift @not_classnums; + push @classnums, $these; + push @not_classnums, $not_these; + push @classnames, shift @subsets; + } #while subsets } # else it's 'pkg', i.e. part_pkg.classnum, which is singular on pkgpart # and much simpler