[freeside-commits] branch FREESIDE_4_BRANCH updated. 4d837f280cca71782f268eb3ee2ed346e72a5a4f
Mark Wells
mark at 420.am
Mon Oct 24 11:50:33 PDT 2016
The branch, FREESIDE_4_BRANCH has been updated
via 4d837f280cca71782f268eb3ee2ed346e72a5a4f (commit)
from 1f14781a6e42c8584bd2c1c8cd43e1149e01f872 (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 4d837f280cca71782f268eb3ee2ed346e72a5a4f
Author: Mark Wells <mark at freeside.biz>
Date: Mon Oct 24 11:49:52 2016 -0700
add a 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