package FS::cust_location;
+use base qw( FS::geocode_Mixin FS::Record );
use strict;
-use base qw( FS::geocode_Mixin FS::Record );
+use vars qw( $import );
use Locale::Country;
use FS::UID qw( dbh );
use FS::Record qw( qsearch ); #qsearchs );
use FS::cust_main;
use FS::cust_main_county;
+$import = 0;
+
=head1 NAME
FS::cust_location - Object methods for cust_location records
Geocode
+=item district
+
+Tax district code (optional)
+
=item disabled
Disabled flag; set to 'Y' to disable the location.
Adds this record to the database. If there is an error, returns the error,
otherwise returns false.
+=cut
+
+sub insert {
+ my $self = shift;
+ my $error = $self->SUPER::insert(@_);
+
+ #false laziness with cust_main, will go away eventually
+ my $conf = new FS::Conf;
+ if ( !$error and $conf->config('tax_district_method') ) {
+
+ my $queue = new FS::queue {
+ 'job' => 'FS::geocode_Mixin::process_district_update'
+ };
+ $error = $queue->insert( ref($self), $self->locationnum );
+
+ }
+
+ $error || '';
+}
+
=item delete
Delete this record from the database.
Replaces the OLD_RECORD with this one in the database. If there is an error,
returns the error, otherwise returns false.
+=cut
+
+sub replace {
+ my $self = shift;
+ my $old = shift;
+ $old ||= $self->replace_old;
+ my $error = $self->SUPER::replace($old);
+
+ #false laziness with cust_main, will go away eventually
+ my $conf = new FS::Conf;
+ if ( !$error and $conf->config('tax_district_method')
+ and $self->get('address1') ne $old->get('address1') ) {
+
+ my $queue = new FS::queue {
+ 'job' => 'FS::geocode_Mixin::process_district_update'
+ };
+ $error = $queue->insert( ref($self), $self->locationnum );
+
+ }
+
+ $error || '';
+}
+
+
=item check
Checks all fields to make sure this is a valid location. If there is
|| $self->ut_textn('state')
|| $self->ut_country('country')
|| $self->ut_zip('zip', $self->country)
+ || $self->ut_coordn('latitude')
+ || $self->ut_coordn('longitude')
+ || $self->ut_enum('coord_auto', [ '', 'Y' ])
|| $self->ut_alphan('location_type')
|| $self->ut_textn('location_number')
|| $self->ut_enum('location_kind', [ '', 'R', 'B' ] )
|| $self->ut_alphan('geocode')
+ || $self->ut_alphan('district')
;
return $error if $error;
+ $self->set_coord
+ unless $import || ($self->latitude && $self->longitude);
+
return "No prospect or customer!" unless $self->prospectnum || $self->custnum;
return "Prospect and customer!" if $self->prospectnum && $self->custnum;
'';
}
+=item location_label
+
+Returns the label of the location object, with an optional site ID
+string (based on the cust_location-label_prefix config option).
+
+=cut
+
+sub location_label {
+ my $self = shift;
+ my %opt = @_;
+ my $conf = new FS::Conf;
+ my $prefix = '';
+ my $format = $conf->config('cust_location-label_prefix') || '';
+ if ( $format eq 'CoStAg' ) {
+ my $cust_or_prospect;
+ if ( $self->custnum ) {
+ $cust_or_prospect = FS::cust_main->by_key($self->custnum);
+ }
+ elsif ( $self->prospectnum ) {
+ $cust_or_prospect = FS::prospect_main->by_key($self->prospectnum);
+ }
+ my $agent = $conf->config('cust_main-custnum-display_prefix',
+ $cust_or_prospect->agentnum)
+ || $cust_or_prospect->agent->agent;
+ # else this location is invalid
+ $prefix = uc( join('',
+ $self->country,
+ ($self->state =~ /^(..)/),
+ ($agent =~ /^(..)/),
+ sprintf('%05d', $self->locationnum)
+ ) );
+ }
+ $prefix .= ($opt{join_string} || ': ') if $prefix;
+ $prefix . $self->SUPER::location_label(%opt);
+}
+
+=item county_state_county
+
+Returns a string consisting of just the county, state and country.
+
+=cut
+
+sub county_state_country {
+ my $self = shift;
+ my $label = $self->country;
+ $label = $self->state.", $label" if $self->state;
+ $label = $self->county." County, $label" if $self->county;
+ $label;
+}
+
=back
=head1 BUGS