X-Git-Url: http://git.freeside.biz/gitweb/?a=blobdiff_plain;f=FS%2FFS%2Fcust_location.pm;h=7f4aa9a79faf729dbd0a74ae0a4b15c42cec234b;hb=80c2d997c5c983344c530ecbb46f94f1c299b35f;hp=66fd7a0770c512a8ab898bca1829a71bb23bfb05;hpb=5556814b7ff65b0a4837390be9331e1841189427;p=freeside.git diff --git a/FS/FS/cust_location.pm b/FS/FS/cust_location.pm index 66fd7a077..7f4aa9a79 100644 --- a/FS/FS/cust_location.pm +++ b/FS/FS/cust_location.pm @@ -68,7 +68,7 @@ Address line two (optional) =item city -City +City (if cust_main-no_city_in_address config is set when inserting, this will be forced blank) =item county @@ -94,6 +94,11 @@ Geocode Tax district code (optional) +=item incorporated + +Incorporated city flag: set to 'Y' if the address is in the legal borders +of an incorporated city. + =item disabled Disabled flag; set to 'Y' to disable the location. @@ -147,6 +152,12 @@ sub find_or_insert { my @essential = (qw(custnum address1 address2 city county state zip country location_number location_type location_kind disabled)); + if ($conf->exists('cust_main-no_city_in_address')) { + warn "Warning: passed city to find_or_insert when cust_main-no_city_in_address is configured, ignoring it" + if $self->get('city'); + $self->set('city',''); + } + # I don't think this is necessary #if ( !$self->coord_auto and $self->latitude and $self->longitude ) { # push @essential, qw(latitude longitude); @@ -202,6 +213,12 @@ otherwise returns false. sub insert { my $self = shift; + if ($conf->exists('cust_main-no_city_in_address')) { + warn "Warning: passed city to insert when cust_main-no_city_in_address is configured, ignoring it" + if $self->get('city'); + $self->set('city',''); + } + if ( $self->censustract ) { $self->set('censusyear' => $conf->config('census_year') || 2012); } @@ -266,6 +283,10 @@ sub replace { my $self = shift; my $old = shift; $old ||= $self->replace_old; + + warn "Warning: passed city to replace when cust_main-no_city_in_address is configured" + if $conf->exists('cust_main-no_city_in_address') && $self->get('city'); + # the following fields are immutable foreach (qw(address1 address2 city state zip country)) { if ( $self->$_ ne $old->$_ ) { @@ -322,10 +343,12 @@ sub check { $self->ut_numbern('locationnum') || $self->ut_foreign_keyn('prospectnum', 'prospect_main', 'prospectnum') || $self->ut_foreign_keyn('custnum', 'cust_main', 'custnum') - || $self->ut_alphan('locationname') + || $self->ut_textn('locationname') || $self->ut_text('address1') || $self->ut_textn('address2') - || $self->ut_text('city') + || ($conf->exists('cust_main-no_city_in_address') + ? $self->ut_textn('city') + : $self->ut_text('city')) || $self->ut_textn('county') || $self->ut_textn('state') || $self->ut_country('country') @@ -340,6 +363,7 @@ sub check { || $self->ut_alphan('geocode') || $self->ut_alphan('district') || $self->ut_numbern('censusyear') + || $self->ut_flag('incorporated') ; return $error if $error; if ( $self->censustract ne '' ) { @@ -709,58 +733,6 @@ sub county_state_country { =back -=head1 CLASS METHODS - -=item in_county_sql OPTIONS - -Returns an SQL expression to test membership in a cust_main_county -geographic area. By default, this requires district, city, county, -state, and country to match exactly. Pass "ornull => 1" to allow -partial matches where some fields are NULL in the cust_main_county -record but not in the location. - -Pass "param => 1" to receive a parameterized expression (rather than -one that requires a join to cust_main_county) and a list of parameter -names in order. - -=cut - -sub in_county_sql { - # replaces FS::cust_pkg::location_sql - my ($class, %opt) = @_; - my $ornull = $opt{ornull} ? ' OR ? IS NULL' : ''; - my $x = $ornull ? 3 : 2; - my @fields = (('district') x 3, - ('city') x 3, - ('county') x $x, - ('state') x $x, - 'country'); - - my $text = (driver_name =~ /^mysql/i) ? 'char' : 'text'; - - my @where = ( - "cust_location.district = ? OR ? = '' OR CAST(? AS $text) IS NULL", - "cust_location.city = ? OR ? = '' OR CAST(? AS $text) IS NULL", - "cust_location.county = ? OR (? = '' AND cust_location.county IS NULL) $ornull", - "cust_location.state = ? OR (? = '' AND cust_location.state IS NULL ) $ornull", - "cust_location.country = ?" - ); - my $sql = join(' AND ', map "($_)\n", @where); - if ( $opt{param} ) { - return $sql, @fields; - } - else { - # do the substitution here - foreach (@fields) { - $sql =~ s/\?/cust_main_county.$_/; - $sql =~ s/cust_main_county.$_ = ''/cust_main_county.$_ IS NULL/; - } - return $sql; - } -} - -=back - =head2 SUBROUTINES =over 4