[freeside-commits] branch master updated. bc60fbd27b5ca8d41b9dae134ccc7f493c2742db

Mark Wells mark at 420.am
Mon Oct 24 11:50:35 PDT 2016


The branch, master has been updated
       via  bc60fbd27b5ca8d41b9dae134ccc7f493c2742db (commit)
      from  139958c5a4254052b525243d25a23d266d2c0c5b (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
commit bc60fbd27b5ca8d41b9dae134ccc7f493c2742db
Author: Mark Wells <mark at freeside.biz>
Date:   Mon Oct 24 11:50:07 2016 -0700

    more detailed view of invoice taxes

diff --git a/httemplate/view/cust_bill.cgi b/httemplate/view/cust_bill.cgi
index 6d52776..c7238e6 100755
--- a/httemplate/view/cust_bill.cgi
+++ b/httemplate/view/cust_bill.cgi
@@ -132,12 +132,6 @@ function areyousure(href, message) {
   <A HREF="<% $p %>view/cust_bill-pdf.cgi?<% $link %>"><% mt('View typeset invoice PDF') |h %></A>
 
 %   $br++;
-% } 
-
-% if ( $cust_bill->num_cust_event ) {
-<% $br ? '|' : '' %>
-<A HREF="<%$p%>search/cust_event.html?invnum=<% $cust_bill->invnum %>"><% mt('View invoice events') |h %></A> 
-%   $br++;
 % }
 
 % my @modes = grep {! $_->disabled} 
@@ -164,6 +158,25 @@ function change_invoice_mode(obj) {
   obj.form.submit();
 }
 </SCRIPT>
+</FORM>
+% }
+
+% if ( $cust_bill->num_cust_event ) {
+<% $br ? '|' : '' %>
+<A HREF="<%$p%>search/cust_event.html?invnum=<% $cust_bill->invnum %>"><% mt('View invoice events') |h %></A> 
+%   $br++;
+% }
+% if ( $cust_bill->tax > 0 ) { # inefficient
+<% $br ? '|' : '' %>
+<& /elements/popup_link.html,
+  'action'      => 'cust_bill_tax_matrix.html?' . $cust_bill->invnum,
+  'label'       => mt('View tax details'),
+  'actionlabel' => mt('Tax details'),
+  'width'       => 1050,
+  'height'      => 500,
+  'title'       => emt('Tax details'),
+&>
+%   $br++;
 % }
 
 <BR><BR>
diff --git a/httemplate/view/cust_bill_tax_matrix.html b/httemplate/view/cust_bill_tax_matrix.html
new file mode 100644
index 0000000..d581bf2
--- /dev/null
+++ b/httemplate/view/cust_bill_tax_matrix.html
@@ -0,0 +1,119 @@
+<%init>
+my $curuser = $FS::CurrentUser::CurrentUser;
+die "access denied"
+  unless $curuser->access_right('View invoices');
+
+my ($invnum) = $cgi->keywords;
+my $agentnums = $curuser->agentnums_href;
+my $cust_bill = FS::cust_bill->by_key($invnum)
+             || FS::cust_bill_void->by_key($invnum);
+
+if (!$cust_bill or !$agentnums->{ $cust_bill->cust_main->agentnum }) {
+  die "invalid invnum $invnum";
+}
+
+my %column_of; # taxname => @tax_amounts column index
+my @tax_amounts; # array of arrays
+my @sale_amounts; # just an array
+my @taxable_descs; # taxable item row headings
+my @itemdescs; # column headings
+my %taxname_of; # billpkgnum => taxname
+
+my $lineitem_table = 'cust_bill_pkg';
+if ($cust_bill->isa('FS::cust_bill_void')) {
+  $lineitem_table .= '_void';
+}
+
+my (@tax, @nontax);
+foreach (qsearch({
+  'table' => $lineitem_table,
+  'hashref' => { 'invnum' => $invnum },
+  'order_by' => 'ORDER BY itemdesc, billpkgnum', # save on sorting the columns later
+}) ) {
+  if ( $_->pkgnum or $_->feepart ) {
+    push @nontax, $_;
+  } else {
+    push @tax, $_;
+  }
+}
+my $col = 0;
+foreach (@tax) {
+  $taxname_of{$_->billpkgnum} = $_->itemdesc;
+  push @itemdescs, $_->itemdesc;
+  $column_of{$_->itemdesc} = $col++;
+}
+
+foreach my $sale (@nontax) {
+  my $this_row = [];
+  foreach my $link_table (qw(
+    cust_bill_pkg_tax_location cust_bill_pkg_tax_rate_location
+  )) {
+    $link_table .= '_void' if $cust_bill->isa('FS::cust_pkg_void');
+    foreach my $link (qsearch({
+      'table' => $link_table,
+      'hashref' => { 'taxable_billpkgnum' => $sale->billpkgnum }
+    })) {
+      # find the itemdesc on this tax
+      my $taxname = $taxname_of{ $link->billpkgnum };
+      # and accumulate in the column it belongs in
+      ($this_row->[ $column_of{ $taxname } ] ||= 0)
+        += $link->amount;
+    }
+  } # foreach $link_table
+  # create a row if we added any taxes
+  if ( @$this_row ) {
+    push @tax_amounts, $this_row;
+    push @sale_amounts, $sale->setup + $sale->recur;
+    push @taxable_descs, $sale->desc;
+  }
+}
+
+</%init>
+<& /elements/header-popup.html &>
+<style>
+  table.grid {
+    border-spacing: 0px;
+  }
+  table.grid thead {
+    background-color: #cccccc;
+    font-size: 12px;
+  }
+  table.grid tbody tr:nth-child(even) {
+    background-color: #eeeeee;
+  }
+  table.grid tbody tr:nth-child(odd) {
+    background-color: #ffffff;
+  }
+  table.grid tbody th {
+    text-align: left;
+    font-size: 12px;
+  }
+  table.grid tbody td {
+    padding-right: 1em;
+    text-align: right;
+  }
+</style>
+<table class="grid">
+  <thead>
+    <tr>
+      <th></th>
+      <th><% emt('Charge') %></th>
+% for (my $col = 0; $col < scalar(@itemdescs); $col++) {
+      <th><% emt($itemdescs[$col]) %></th>
+% }
+    </tr>
+  </thead>
+  <tbody>
+% for (my $row = 0; $row < scalar(@taxable_descs); $row++) {
+%   my $this_row = $tax_amounts[$row];
+    <tr>
+      <th><% emt($taxable_descs[$row]) %></th>
+      <td><% sprintf('%.2f', $sale_amounts[$row]) %></td>
+%   for (my $col = 0; $col < scalar(@itemdescs); $col++) {
+      <td><% $this_row->[$col] ? sprintf('%.2f', $this_row->[$col]) : '' %></td>
+%   }
+    </tr>
+% }
+  </tbody>
+</table>
+<& /elements/footer.html &>

-----------------------------------------------------------------------

Summary of changes:
 httemplate/view/cust_bill.cgi             |   25 ++++--
 httemplate/view/cust_bill_tax_matrix.html |  119 +++++++++++++++++++++++++++++
 2 files changed, 138 insertions(+), 6 deletions(-)
 create mode 100644 httemplate/view/cust_bill_tax_matrix.html




More information about the freeside-commits mailing list