diff options
| author | ivan <ivan> | 2011-04-11 07:02:50 +0000 | 
|---|---|---|
| committer | ivan <ivan> | 2011-04-11 07:02:50 +0000 | 
| commit | 1bb612df42aec08974f67ff333a5e0d2a2fc3ba3 (patch) | |
| tree | 9889dea71d9186ceb81bb6dc138c8cf6db59a4da | |
| parent | 3baa02c55101a3ad6c18d294c67a009e33ae6930 (diff) | |
slight refactor onvendor tax report: add tax_rate_location->location_sql, RT#12320
| -rw-r--r-- | FS/FS/tax_rate_location.pm | 31 | ||||
| -rw-r--r-- | httemplate/search/cust_bill_pkg.cgi | 21 | ||||
| -rwxr-xr-x | 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; | 
