<% include( '/elements/header.html', 'Developer Documentation' ) %> <& /elements/menubar.html, 'Freeside Perl Modules' => $fsurl.'docs/library/FS.html', 'Complete Index' => $fsurl.'docs/library/index.html', &>

FS::cust_location

NAME

FS::cust_location - Object methods for cust_location records

SYNOPSIS

  use FS::cust_location;

  $record = new FS::cust_location \%hash;
  $record = new FS::cust_location { 'column' => 'value' };

  $error = $record->insert;

  $error = $new_record->replace($old_record);

  $error = $record->delete;

  $error = $record->check;

DESCRIPTION

An FS::cust_location object represents a customer (or prospect) location. FS::cust_location inherits from FS::Record. The following fields are currently supported:

locationnum

primary key

custnum

Customer (see FS::cust_main).

prospectnum

Prospect (see FS::prospect_main).

locationname

Optional location name.

address1

Address line one (required)

address2

Address line two (optional)

city

City (if cust_main-no_city_in_address config is set when inserting, this will be forced blank)

county

County (optional, see FS::cust_main_county)

state

State (see FS::cust_main_county)

zip

Zip

country

Country (see FS::cust_main_county)

geocode

Geocode

latitude
longitude
coord_auto

Flag indicating whether coordinates were obtained automatically or manually entered

addr_clean

Flag indicating whether address has been normalized

censustract
censusyear
district

Tax district code (optional)

incorporated

Incorporated city flag: set to 'Y' if the address is in the legal borders of an incorporated city.

disabled

Disabled flag; set to 'Y' to disable the location.

METHODS

new HASHREF

Creates a new location. To add the location to the database, see "insert".

Note that this stores the hash reference, not a distinct copy of the hash it points to. You can ask the object for a copy with the hash method.

find_or_insert

Finds an existing location matching the customer and address values in this location, if one exists, and sets the contents of this location equal to that one (including its locationnum).

If an existing location is not found, this one will be inserted. (This is a change from the "new_or_existing" method that this replaces.)

The following fields are considered "essential" and must match: custnum, address1, address2, city, county, state, zip, country, location_number, location_type, location_kind. Disabled locations will be found only if this location is set to disabled.

All other fields are considered "non-essential" and will be ignored in finding a matching location. If the existing location doesn't match in these fields, it will be updated in-place to match.

Returns an error string if inserting or updating a location failed.

It is unfortunately hard to determine if this created a new location or not.

insert

Adds this record to the database. If there is an error, returns the error, otherwise returns false.

delete

Delete this record from the database.

replace OLD_RECORD

Replaces the OLD_RECORD with this one in the database. If there is an error, returns the error, otherwise returns false.

check

Checks all fields to make sure this is a valid location. If there is an error, returns the error, otherwise returns false. Called by the insert and replace methods.

country_full

Returns this location's full country name

line

Synonym for location_label

has_ship_address

Returns false since cust_location objects do not have a separate shipping address.

location_hash

Returns a list of key/value pairs, with the following keys: address1, address2, city, county, state, zip, country, geocode, location_type, location_number, location_kind.

disable_if_unused

Sets the "disabled" flag on the location if it is no longer in use as a prospect location, package location, or a customer's billing or default service address.

move_to

Takes a new FS::cust_location object. Moves all packages that use the existing location to the new one, then sets the "disabled" flag on the old location. Returns nothing on success, an error message on error.

alternize

Attempts to parse data for location_type and location_number from address1 and address2.

dealternize

Moves data from location_type and location_number to the end of address1.

location_label

Returns the label of the location object.

Options:

cust_main

Customer object (see FS::cust_main)

prospect_main

Prospect object (see FS::prospect_main)

join_string

String used to join location elements

no_prefix

Don't label the default service location as "Default service location". May become the default at some point.

label_prefix

Returns the optional site ID string (based on the cust_location-label_prefix config option), "Default service location", or the empty string.

Options:

cust_main

Customer object (see FS::cust_main)

prospect_main

Prospect object (see FS::prospect_main)

county_state_country

Returns a string consisting of just the county, state and country.

SUBROUTINES

process_censustract_update LOCATIONNUM

Queueable function to update the census tract to the current year (as set in the 'census_year' configuration variable) and retrieve the new tract code.

process_set_coord

Queueable function to find and fill in coordinates for all locations that lack them. Because this uses the Google Maps API, it's internally rate limited and must run in a single process.

process_standardize [ LOCATIONNUMS ]

Performs address standardization on locations with unclean addresses, using whatever method you have configured. If the standardize_* method returns a clean address match, the location will be updated. This is always an in-place update (because the physical location is the same, and is just being referred to by a more accurate name).

Disabled locations will be skipped, as nobody cares.

If any LOCATIONNUMS are provided, only those locations will be updated.

BUGS

SEE ALSO

FS::cust_main_county, FS::cust_pkg, FS::Record, schema.html from the base documentation.

POD ERRORS

Hey! The above document had some coding errors, which are explained below:

Around line 998:

You forgot a '=back' before '=head1'

<% include ('/elements/footer.html' ) %>