From 1bb612df42aec08974f67ff333a5e0d2a2fc3ba3 Mon Sep 17 00:00:00 2001 From: ivan Date: Mon, 11 Apr 2011 07:02:50 +0000 Subject: [PATCH] slight refactor onvendor tax report: add tax_rate_location->location_sql, RT#12320 --- FS/FS/tax_rate_location.pm | 31 +++++++++++++++++++++++++++++++ httemplate/search/cust_bill_pkg.cgi | 21 ++++----------------- httemplate/search/report_newtax.cgi | 23 ++++++++++++----------- 3 files changed, 47 insertions(+), 28 deletions(-) diff --git a/FS/FS/tax_rate_location.pm b/FS/FS/tax_rate_location.pm index 218ed977b..1a6c47dcf 100644 --- a/FS/FS/tax_rate_location.pm +++ b/FS/FS/tax_rate_location.pm @@ -151,6 +151,37 @@ sub check { =back +=head1 CLASS METHODS + +=item location_sql KEY => VALUE, ... + +Returns an SQL fragment identifying matching tax_rate_location / +cust_bill_pkg_tax_rate_location records. + +Parameters are county, state, city and locationtaxid + +=cut + +sub location_sql { + my($class, %param) = @_; + + my %pn = ( + 'city' => 'tax_rate_location.city', + 'county' => 'tax_rate_location.county', + 'state' => 'tax_rate_location.state', + 'locationtaxid' => 'cust_bill_pkg_tax_rate_location.locationtaxid', + ); + + my %ph = map { $pn{$_} => dbh->quote($param{$_}) } keys %pn; + + join( ' AND ', + map { "( $_ = $ph{$_} OR $ph{$_} = '' AND $_ IS NULL)" } keys %ph + ); + +} + +=back + =head1 SUBROUTINES =over 4 diff --git a/httemplate/search/cust_bill_pkg.cgi b/httemplate/search/cust_bill_pkg.cgi index 0db4b35da..ed0c8d497 100644 --- a/httemplate/search/cust_bill_pkg.cgi +++ b/httemplate/search/cust_bill_pkg.cgi @@ -321,23 +321,10 @@ if ( $cgi->param('out') ) { } elsif ( scalar( grep( /locationtaxid/, $cgi->param ) ) ) { - # this should really be shoved out to FS::cust_pkg->location_sql or something - # along with the code in report_newtax.cgi - - my %pn = ( - 'county' => 'tax_rate_location.county', - 'state' => 'tax_rate_location.state', - 'city' => 'tax_rate_location.city', - 'locationtaxid' => 'cust_bill_pkg_tax_rate_location.locationtaxid', - ); - - my %ph = map { ( $pn{$_} => dbh->quote( $cgi->param($_) || '' ) ) } - qw( city county state locationtaxid ); - - push @where, - join( ' AND ', map { "( $_ = $ph{$_} OR $ph{$_} = '' AND $_ IS NULL)" } - keys %ph - ); + push @where, FS::tax_rate_location->location_sql( + map { $_ => (scalar($cgi->param($_)) || '') } + qw( city county state locationtaxid ) + ); } elsif ( $cgi->param('unearned_now') =~ /^(\d+)$/ ) { diff --git a/httemplate/search/report_newtax.cgi b/httemplate/search/report_newtax.cgi index 559d89ded..f185c7fd9 100755 --- a/httemplate/search/report_newtax.cgi +++ b/httemplate/search/report_newtax.cgi @@ -89,12 +89,9 @@ if ( $cgi->param('agentnum') =~ /^(\d+)$/ ) { $where .= ' AND cust_main.agentnum = '. $agent->agentnum; } -# my ( $location_sql, @location_param ) = FS::cust_pkg->location_sql; -# $where .= " AND $location_sql"; -#my @taxparam = ( 'itemdesc', @location_param ); -# now something along the lines of geocode matching ? -#$where .= FS::cust_pkg->_location_sql_where('cust_tax_location');; -my @taxparam = ( 'itemdesc', 'tax_rate_location.state', 'tax_rate_location.county', 'tax_rate_location.city', 'cust_bill_pkg_tax_rate_location.locationtaxid' ); +#my @taxparam = ( 'itemdesc', 'tax_rate_location.state', 'tax_rate_location.county', 'tax_rate_location.city', 'cust_bill_pkg_tax_rate_location.locationtaxid' ); +my @taxparams = qw( city county state locationtaxid ); +my @params = ('itemdesc', @taxparams); my $select = 'DISTINCT itemdesc,locationtaxid,tax_rate_location.state,tax_rate_location.county,tax_rate_location.city'; @@ -110,7 +107,7 @@ foreach my $t (qsearch({ table => 'cust_bill_pkg', }) ) { - my @params = map { my $f = $_; $f =~ s/.*\.//; $f } @taxparam; + #my @params = map { my $f = $_; $f =~ s/.*\.//; $f } @taxparam; my $label = join('~', map { $t->$_ } @params); $label = 'Tax'. $label if $label =~ /^~/; unless ( exists( $taxes{$label} ) ) { @@ -121,23 +118,27 @@ foreach my $t (qsearch({ table => 'cust_bill_pkg', join(';', map { "$_=". uri_escape($t->$_) } @params); my $taxwhere = "FROM cust_bill_pkg $addl_from $where AND payby != 'COMP' ". - "AND ". join( ' AND ', map { "( $_ = ? OR ? = '' AND $_ IS NULL)" } @taxparam ); + "AND ". FS::tax_rate_location->location_sql( map { $_ => $t->$_ } + @taxparams + ); my $sql = "SELECT SUM(amount) $taxwhere AND cust_bill_pkg.pkgnum = 0"; - my $x = scalar_sql($t, [ map { $_, $_ } @params ], $sql ); + my $x = scalar_sql($t, [], $sql ); $tax += $x; $taxes{$label}->{'tax'} += $x; my $creditfrom = " JOIN cust_credit_bill_pkg USING (billpkgnum,billpkgtaxratelocationnum) "; my $creditwhere = "FROM cust_bill_pkg $addl_from $creditfrom $where ". "AND payby != 'COMP' ". - "AND ". join( ' AND ', map { "( $_ = ? OR ? = '' AND $_ IS NULL)" } @taxparam ); + "AND ". FS::tax_rate_location->location_sql( map { $_ => $t->$_ } + @taxparams + ); $sql = "SELECT SUM(cust_credit_bill_pkg.amount) ". " $creditwhere AND cust_bill_pkg.pkgnum = 0"; - my $y = scalar_sql($t, [ map { $_, $_ } @params ], $sql ); + my $y = scalar_sql($t, [], $sql ); $credit += $y; $taxes{$label}->{'credit'} += $y; -- 2.11.0