[freeside-commits] branch master updated. 376c002c0e68282aa4365e69581bd1e8b2b0d0b6
Mark Wells
mark at 420.am
Sat May 25 22:27:45 PDT 2013
The branch, master has been updated
via 376c002c0e68282aa4365e69581bd1e8b2b0d0b6 (commit)
from b1125e2124009bffe9946e7b31d4ba1beb58f83e (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 376c002c0e68282aa4365e69581bd1e8b2b0d0b6
Author: Mark Wells <mark at freeside.biz>
Date: Sat May 25 22:27:25 2013 -0700
E911 fee summary, #23056
diff --git a/httemplate/search/e911.html b/httemplate/search/e911.html
new file mode 100644
index 0000000..6a9dd0a
--- /dev/null
+++ b/httemplate/search/e911.html
@@ -0,0 +1,106 @@
+% if ( $row ) {
+%# pretty minimal report
+<& /elements/header.html, 'E911 Fee Report' &>
+<& /elements/table-grid.html &>
+<STYLE TYPE="text/css">
+table.grid TD:first-child { font-weight: normal }
+table.grid TD { font-weight: bold;
+ text-align: right;
+ padding: 1px 2px }
+</STYLE>
+ <TR><TH COLSPAN=2><% $legend %></TH></TR>
+ <TR>
+ <TD>E911 access lines:</TD>
+ <TD><% $row->{quantity} || 0 %></TD>
+ </TR>
+ <TR>
+ <TD>Total fees collected: </TD>
+ <TD><% $money_char.sprintf('%.2f', $row->{paid_amount}) %></TD>
+ </TR>
+ <TR>
+ <TD>Administrative fee (1%): </TD>
+ <TD><% $money_char.sprintf('%.2f', $row->{paid_amount} * $admin_fee) %></TD>
+ </TR>
+ <TR>
+ <TD>Amount due: </TD>
+ <TD><% $money_char.sprintf('%.2f', $row->{paid_amount} * (1-$admin_fee) ) %>
+ </TD>
+ </TR>
+</TABLE>
+<& /elements/footer.html &>
+% } else { # no data
+% $cgi->param('error' => 'No paid E911 fees found.');
+<& /elements/errorpage.html &>
+% }
+<%init>
+
+die "access denied"
+ unless $FS::CurrentUser::CurrentUser->access_right('Financial reports');
+
+my $money_char = FS::Conf->new->config('money_char') || '$';
+
+my($begin, $end) = FS::UI::Web::parse_beginning_ending($cgi);
+
+$cgi->param('e911pkgpart') =~ /^(\d+)$/;
+my $pkgpart = $1 or die 'bad e911pkgpart';
+
+$cgi->param('agentnum') =~ /^(\d*)$/;
+my $agentnum = $1;
+
+# This has the potential to become as nightmarish as the old tax report.
+# If we end up doing multiple rows for some reason (date intervals,
+# package classes, etc.), do NOT simply loop through this and do a
+# bazillion scalar_sql queries. Use a properly grouped aggregate query.
+
+my $select = 'SELECT cust_bill_pkg.billpkgnum, cust_bill_pkg.quantity, '.
+'SUM(cust_bill_pay_pkg.amount) AS paid_amount';
+
+my $from = 'FROM cust_pkg
+ JOIN cust_bill_pkg USING (pkgnum)
+ JOIN cust_bill USING (invnum)
+ JOIN cust_bill_pay_pkg USING (billpkgnum)
+ JOIN cust_bill_pay USING (billpaynum)
+';
+# going by payment application date here, which should be
+# max(invoice date, payment date)
+my $where = "WHERE cust_pkg.pkgpart = $pkgpart
+AND cust_bill_pay._date >= $begin AND cust_bill_pay._date < $end";
+
+if ( $agentnum ) {
+ $from .= ' JOIN cust_main ON (cust_pkg.custnum = cust_main.custnum)';
+ $where .= "\n AND cust_main.agentnum = $agentnum";
+}
+
+my $subquery = "$select $from $where
+GROUP BY cust_bill_pkg.billpkgnum, cust_bill_pkg.quantity";
+# This has one row for each E911 line item that has any payments applied.
+# Fields are the billpkgnum of the item (currently unused), the number of
+# E911 charges, and the total amount paid (always > 0).
+
+# now sum those rows.
+my $sql = "SELECT SUM(quantity) AS quantity, SUM(paid_amount) AS paid_amount
+FROM ($subquery) AS paid_fees"; # no grouping
+
+my $sth = dbh->prepare($sql);
+$sth->execute;
+my $row = $sth->fetchrow_hashref;
+
+my $admin_fee = 0.01; # 1% admin fee, allowed in Texas
+
+$end = '' if $end == 4294967295;
+my $legend = '';
+if ( $agentnum ) {
+ $legend = FS::agent->by_key($agentnum)->agent . ', ';
+}
+if ( $begin and $end ) {
+ $legend .= time2str('%h %o %Y', $begin) . '—' .
+ time2str('%h %o %Y', $end);
+} elsif ( $begin ) {
+ $legend .= time2str('after %h %o %Y', $begin);
+} elsif ( $end ) {
+ $legend .= time2str('before %h %o %Y', $end);
+} else {
+ $legend .= 'any time';
+}
+$legend = ucfirst($legend);
+</%init>
diff --git a/httemplate/search/report_e911.html b/httemplate/search/report_e911.html
new file mode 100644
index 0000000..fd96860
--- /dev/null
+++ b/httemplate/search/report_e911.html
@@ -0,0 +1,41 @@
+<& /elements/header.html, 'E911 Fee Report' &>
+
+<FORM ACTION="e911.html" METHOD="GET">
+
+<TABLE BGCOLOR="#cccccc" CELLSPACING=0>
+
+ <& /elements/tr-select-agent.html,
+ curr_value => scalar( $cgi->param('agentnum') ),
+ disable_empty => 0,
+ &>
+
+ <& /elements/tr-input-beginning_ending.html &>
+
+ <& /elements/tr-select-part_pkg.html,
+ field => 'e911pkgpart',
+ label => 'E911 package',
+ curr_value => $e911pkgpart,
+ disable_empty => 1,
+ &>
+
+</TABLE>
+
+<BR>
+<INPUT TYPE="submit" VALUE="<% mt('Get Report') |h %>">
+
+</FORM>
+
+<& /elements/footer.html &>
+<%init>
+
+die "access denied"
+ unless $FS::CurrentUser::CurrentUser->access_right('Financial reports');
+
+my $e911pkgpart;
+# make an educated guess
+my $e911_pkg = qsearchs('part_pkg',
+ { 'pkg' => { op=>'LIKE', value=>'%E911%' },
+ 'disabled' => '', } );
+$e911pkgpart = $e911_pkg->pkgpart if $e911_pkg;
+
+</%init>
-----------------------------------------------------------------------
Summary of changes:
httemplate/search/e911.html | 106 ++++++++++++++++++++++++++++++++++++
httemplate/search/report_e911.html | 41 ++++++++++++++
2 files changed, 147 insertions(+), 0 deletions(-)
create mode 100644 httemplate/search/e911.html
create mode 100644 httemplate/search/report_e911.html
More information about the freeside-commits
mailing list