diff options
author | ivan <ivan> | 2008-07-08 02:03:07 +0000 |
---|---|---|
committer | ivan <ivan> | 2008-07-08 02:03:07 +0000 |
commit | 4a621a8ef69cb404a419bab97bc17f18ca5f959b (patch) | |
tree | 2539f882c7704eaea75784a130eb286c30d1a11c /FS | |
parent | dc54bf85943272b539324bbc52c82cc80434ba34 (diff) |
fix line-item reports on taxclass-less regions
Diffstat (limited to 'FS')
-rw-r--r-- | FS/FS/cust_main_county.pm | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/FS/FS/cust_main_county.pm b/FS/FS/cust_main_county.pm index 17f346071..22c91e82f 100644 --- a/FS/FS/cust_main_county.pm +++ b/FS/FS/cust_main_county.pm @@ -151,6 +151,47 @@ sub recurtax { return ''; } +=item sql_taxclass_sameregion + +Returns an SQL WHERE fragment or the empty string to search for entries +with different tax classes. + +=cut + +#hmm, description above could be better... + +sub sql_taxclass_sameregion { + my $self = shift; + + my $same_query = 'SELECT taxclass FROM cust_main_county '. + ' WHERE taxnum != ? AND country = ?'; + my @same_param = ( 'taxnum', 'country' ); + foreach my $opt_field (qw( state county )) { + if ( $self->$opt_field() ) { + $same_query .= " AND $opt_field = ?"; + push @same_param, $opt_field; + } else { + $same_query .= " AND $opt_field IS NULL"; + } + } + + my @taxclasses = $self->_list_sql( \@same_param, $same_query ); + + return '' unless scalar(@taxclasses); + + '( taxclass IS NULL OR ( '. #only if !$self->taxclass ?? + join(' AND ', map { 'taxclass != '.dbh->quote($_) } @taxclasses ). + ' ) ) '; +} + +sub _list_sql { + my( $self, $param, $sql ) = @_; + my $sth = dbh->prepare($sql) or die dbh->errstr; + $sth->execute( map $self->$_(), @$param ) + or die "Unexpected error executing statement $sql: ". $sth->errstr; + map $_->[0], @{ $sth->fetchall_arrayref }; +} + =back =head1 SUBROUTINES |