X-Git-Url: http://git.freeside.biz/gitweb/?a=blobdiff_plain;f=FS%2FFS%2Fcust_pkg.pm;h=203a26901b23168ac0f2bd3220324391ae3287d7;hb=a04f7d97cd3e57ee9061fba5f737d6d77c782c13;hp=52148aaf1b47463547728dfa35f1d291f63fb93c;hpb=389d926e17989db22affd78a4b0c6820fa152c9e;p=freeside.git diff --git a/FS/FS/cust_pkg.pm b/FS/FS/cust_pkg.pm index 52148aaf1..203a26901 100644 --- a/FS/FS/cust_pkg.pm +++ b/FS/FS/cust_pkg.pm @@ -14,7 +14,6 @@ use FS::cust_svc; use FS::part_pkg; use FS::cust_main; use FS::cust_location; -use FS::type_pkgs; use FS::pkg_svc; use FS::cust_bill_pkg; use FS::cust_pkg_detail; @@ -440,7 +439,9 @@ replace methods. sub check { my $self = shift; - $self->locationnum('') if $self->locationnum == 0 || $self->locationnum == -1; + $self->locationnum('') + if defined($self->locationnum) && length($self->locationnum) + && ( $self->locationnum == 0 || $self->locationnum == -1 ); my $error = $self->ut_numbern('pkgnum') @@ -931,7 +932,7 @@ sub unsuspend { $hash{'bill'} = ( $hash{'bill'} || $hash{'setup'} ) + $inactive if ( $opt{'adjust_next_bill'} - || $conf->config('unsuspend-always_adjust_next_bill_date') ) + || $conf->exists('unsuspend-always_adjust_next_bill_date') ) && $inactive > 0 && ( $hash{'bill'} || $hash{'setup'} ); $hash{'susp'} = ''; @@ -2358,16 +2359,18 @@ substitute for the placeholders in that fragment. sub location_sql { my($class, %opt) = @_; my $ornull = $opt{'ornull'}; + my $nec = $opt{'noempty_county'}; my $conf = new FS::Conf; # '?' placeholders in _location_sql_where my @bill_param; if ( $ornull ) { - @bill_param = qw( county county county state state state country ); + @bill_param = qw( county county state state state country ); } else { - @bill_param = qw( county county state state country ); + @bill_param = qw( county state state country ); } + unshift @bill_param, 'county' unless $nec; my $main_where; my @main_param; @@ -2375,10 +2378,10 @@ sub location_sql { $main_where = "( ( ( ship_last IS NULL OR ship_last = '' ) - AND ". _location_sql_where('cust_main', '', $ornull ). " + AND ". _location_sql_where('cust_main', '', $ornull, $nec ). " ) OR ( ship_last IS NOT NULL AND ship_last != '' - AND ". _location_sql_where('cust_main', 'ship_', $ornull). " + AND ". _location_sql_where('cust_main', 'ship_', $ornull, $nec ). " ) )"; # AND payby != 'COMP' @@ -2396,10 +2399,17 @@ sub location_sql { my @param; if ( $conf->exists('tax-pkg_address') ) { + my $loc_where = _location_sql_where( 'cust_location', + '', #prefix + $ornull, + $nec, + ); + $where = " ( - ( cust_pkg.locationnum IS NULL AND $main_where ) - OR ( cust_pkg.locationnum IS NOT NULL AND ". _location_sql_where('cust_location', '', $ornull). " ) - )"; + ( cust_pkg.locationnum IS NULL AND $main_where ) + OR ( cust_pkg.locationnum IS NOT NULL AND $loc_where ) + ) + "; @param = ( @main_param, @bill_param ); } else { @@ -2413,15 +2423,19 @@ sub location_sql { } -#subroutine, helper for able +#subroutine, helper for location_sql sub _location_sql_where { - my $table = shift; - my $prefix = @_ ? shift : ''; - my $ornull = @_ ? shift : ''; - $ornull = $ornull ? ' OR ? IS NULL ' : ''; + my $table = shift; + my $prefix = @_ ? shift : ''; + my $ornull = @_ ? shift : ''; + my $no_empty_county = @_ ? shift : ''; + + $ornull = $ornull ? ' OR ? IS NULL ' : ''; + my $or_empty_county = $no_empty_county ? '' : " OR ? = '' "; + " - ( $table.${prefix}county = ? OR ? = '' $ornull ) - AND ( $table.${prefix}state = ? OR ? = '' $ornull ) + ( $table.${prefix}county = ? $or_empty_county $ornull ) + AND ( $table.${prefix}state = ? OR ? = '' $ornull ) AND $table.${prefix}country = ? "; }