add a tab to grouped search containing all rows, #25944
authorMark Wells <mark@freeside.biz>
Tue, 7 Jul 2015 21:48:14 +0000 (14:48 -0700)
committerMark Wells <mark@freeside.biz>
Tue, 7 Jul 2015 21:49:08 +0000 (14:49 -0700)
httemplate/search/elements/cust_pay_or_refund.html
httemplate/search/elements/grouped-search/core
httemplate/search/elements/grouped-search/html
httemplate/search/elements/grouped-search/html-print

index ce513ab..5808e5f 100755 (executable)
@@ -57,13 +57,14 @@ Examples:
 
                 'group_column'   => 'payby',
                 'group_label'    => 'payby_name',
-                'subtotal'       => { 'paid' => 'sum(paid)' },
+                'subtotal'       => { $opt{name_verb} => "sum($amount_field)" },
                 'subtotal_row'   => [ 'Subtotal',
-                                      sub { sprintf($money, $_[0]->paid) },
+                                      sub { sprintf($money, $_[0]->$amount_field) },
                                     ],
                 'total_row'      => [ '<B>Total</B>',
-                                      sub { sprintf("<B>$money</B>", $_[0]->paid) },
+                                      sub { sprintf("<B>$money</B>", $_[0]->$amount_field) },
                                     ],
+                'show_combined'  => 1,
 &>
 <%init>
 
@@ -181,7 +182,7 @@ push @fields, 'payby_payinfo_pretty',
               sub { sprintf($money, shift->$amount_field() ) },
 ;
 push @link_onclicks, $sub_receipt, '';
-push @sort_fields, '', $amount_field;
+push @sort_fields, 'paysort', $amount_field;
 
 if ( $unapplied ) {
   push @header, emt('Unapplied');
@@ -243,6 +244,7 @@ if ( $cgi->param('magic') ) {
   my @search = ();
   my @select = (
     "$table.*",
+    "( $table.payby || ' ' || coalesce($table.paymask, $table.payinfo) ) AS paysort",
     FS::UI::Web::cust_sql_fields(),
     'cust_main.custnum AS cust_main_custnum',
   );
index fe47fb7..ffa8cee 100644 (file)
@@ -130,6 +130,15 @@ for my $i (0 .. scalar(@groups) - 1) {
   push @queries, $detail_query;
 }
 
+if ( $opt{show_combined} ) {
+  # set up group 0 as a combined view
+  unshift @groups, $totals;
+  unshift @group_labels, 'All ' . PL($opt{name_singular}) .
+                         ' (' . $totals->num_rows . ')';
+  unshift @group_footers, []; # the total footer will suffice
+  unshift @queries, $base_query->clone;
+}
+
 my @total_footer;
 if ($opt{'total_row'}) {
   for( my $col = 0;
index aff17ce..df1471a 100644 (file)
@@ -71,6 +71,23 @@ for (my $i = 0; $i < $group_info->{num}; $i++) {
   push @menubar, $group_info->{group_labels}[$i], ";group=$i";
 }
 
+# not enabled yet; if we need this at some point, enable it on a per-report
+# basis and then disable it for search/cust_pay.html, because it's redundant
+# to see "Check   Check #130108", "Credit card   Card #401...", etc.
+
+## if this is the combined view, add a column for the group key
+#if ( $curr_group == 0 and $opt{'show_combined'} ) {
+#  unshift @{$opt{'header'}}, '';
+#  unshift @{$opt{'fields'}}, $opt{group_label};
+#  unshift @{$opt{'sort_fields'}}, $opt{group_column} if $opt{'sort_fields'};
+#  $opt{'align'} = 'c'.$opt{'align'};
+#  foreach (qw(header2 links link_onclicks color size style cell_style xls_format)) {
+#    if ( $opt{$_} ) {
+#      unshift @{$opt{$_}}, '';
+#    }
+#  }
+#}
+
 </%init>
 
 <& /elements/header.html, $opt{title} &>
@@ -93,6 +110,7 @@ for (my $i = 0; $i < $group_info->{num}; $i++) {
 <A HREF="<% $cgi->self_url %>"><% emt('as Excel spreadsheet') %></A><BR>
 % $cgi->param('type', 'html-print');
 <A HREF="<% $cgi->self_url %>"><% emt('as printable copy') %></A><BR>
+% $cgi->delete('type');
 </P>
 
 <% $pager %>
index c4c3b1e..6d9521b 100644 (file)
@@ -5,7 +5,9 @@ The "printable" view (all groups on one page).
 <%init>
 my %opt = @_;
 
-my $group_info = $m->comp('core', %opt);
+my $group_info = $m->comp('core', %opt,
+  'show_combined' => 0
+);
 my $ncols = scalar(@{ $opt{header} });
 
 my $total_footer = $group_info->{total_footer} || [];