diff options
Diffstat (limited to 'FS/FS/cust_location.pm')
-rw-r--r-- | FS/FS/cust_location.pm | 278 |
1 files changed, 0 insertions, 278 deletions
diff --git a/FS/FS/cust_location.pm b/FS/FS/cust_location.pm deleted file mode 100644 index 60c0181..0000000 --- a/FS/FS/cust_location.pm +++ /dev/null @@ -1,278 +0,0 @@ -package FS::cust_location; - -use strict; -use base qw( FS::geocode_Mixin FS::Record ); -use Locale::Country; -use FS::UID qw( dbh ); -use FS::Record qw( qsearch ); #qsearchs ); -use FS::prospect_main; -use FS::cust_main; -use FS::cust_main_county; - -=head1 NAME - -FS::cust_location - Object methods for cust_location records - -=head1 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; - -=head1 DESCRIPTION - -An FS::cust_location object represents a customer location. FS::cust_location -inherits from FS::Record. The following fields are currently supported: - -=over 4 - -=item locationnum - -primary key - -=item custnum - -custnum - -=item address1 - -Address line one (required) - -=item address2 - -Address line two (optional) - -=item city - -City - -=item county - -County (optional, see L<FS::cust_main_county>) - -=item state - -State (see L<FS::cust_main_county>) - -=item zip - -Zip - -=item country - -Country (see L<FS::cust_main_county>) - -=item geocode - -Geocode - -=item disabled - -Disabled flag; set to 'Y' to disable the location. - -=back - -=head1 METHODS - -=over 4 - -=item new HASHREF - -Creates a new location. To add the location to the database, see L<"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 I<hash> method. - -=cut - -sub table { 'cust_location'; } - -=item insert - -Adds this record to the database. If there is an error, returns the error, -otherwise returns false. - -=item delete - -Delete this record from the database. - -=item replace OLD_RECORD - -Replaces the OLD_RECORD with this one in the database. If there is an error, -returns the error, otherwise returns false. - -=item 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. - -=cut - -#some false laziness w/cust_main, but since it should eventually lose these -#fields anyway... -sub check { - my $self = shift; - - my $error = - $self->ut_numbern('locationnum') - || $self->ut_foreign_keyn('prospectnum', 'prospect_main', 'prospectnum') - || $self->ut_foreign_keyn('custnum', 'cust_main', 'custnum') - || $self->ut_text('address1') - || $self->ut_textn('address2') - || $self->ut_text('city') - || $self->ut_textn('county') - || $self->ut_textn('state') - || $self->ut_country('country') - || $self->ut_zip('zip', $self->country) - || $self->ut_alphan('geocode') - ; - return $error if $error; - - return "No prospect or customer!" unless $self->prospectnum || $self->custnum; - return "Prospect and customer!" if $self->prospectnum && $self->custnum; - - unless ( qsearch('cust_main_county', { - 'country' => $self->country, - 'state' => '', - } ) ) { - return "Unknown state/county/country: ". - $self->state. "/". $self->county. "/". $self->country - unless qsearch('cust_main_county',{ - 'state' => $self->state, - 'county' => $self->county, - 'country' => $self->country, - } ); - } - - $self->SUPER::check; -} - -=item country_full - -Returns this locations's full country name - -=cut - -sub country_full { - my $self = shift; - code2country($self->country); -} - -=item line - -Synonym for location_label - -=cut - -sub line { - my $self = shift; - $self->location_label; -} - -=item has_ship_address - -Returns false since cust_location objects do not have a separate shipping -address. - -=cut - -sub has_ship_address { - ''; -} - -=item location_hash - -Returns a list of key/value pairs, with the following keys: address1, address2, -city, county, state, zip, country, geocode. - -=cut - -=item move_to HASHREF - -Takes a hashref with one or more cust_location fields. Creates a duplicate -of the existing location with all fields set to the values in the hashref. -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. - -=cut - -sub move_to { - my $old = shift; - my $hashref = shift; - - local $SIG{HUP} = 'IGNORE'; - local $SIG{INT} = 'IGNORE'; - local $SIG{QUIT} = 'IGNORE'; - local $SIG{TERM} = 'IGNORE'; - local $SIG{TSTP} = 'IGNORE'; - local $SIG{PIPE} = 'IGNORE'; - - my $oldAutoCommit = $FS::UID::AutoCommit; - local $FS::UID::AutoCommit = 0; - my $dbh = dbh; - my $error = ''; - - my $new = FS::cust_location->new({ - $old->location_hash, - 'custnum' => $old->custnum, - 'prospectnum' => $old->prospectnum, - %$hashref - }); - $error = $new->insert; - if ( $error ) { - $dbh->rollback if $oldAutoCommit; - return "Error creating location: $error"; - } - - my @pkgs = qsearch('cust_pkg', { - 'locationnum' => $old->locationnum, - 'cancel' => '' - }); - foreach my $cust_pkg (@pkgs) { - $error = $cust_pkg->change( - 'locationnum' => $new->locationnum, - 'keep_dates' => 1 - ); - if ( $error and not ref($error) ) { - $dbh->rollback if $oldAutoCommit; - return "Error moving pkgnum ".$cust_pkg->pkgnum.": $error"; - } - } - - $old->disabled('Y'); - $error = $old->replace; - if ( $error ) { - $dbh->rollback if $oldAutoCommit; - return "Error disabling old location: $error"; - } - - $dbh->commit if $oldAutoCommit; - return; -} - -=back - -=head1 BUGS - -Not yet used for cust_main billing and shipping addresses. - -=head1 SEE ALSO - -L<FS::cust_main_county>, L<FS::cust_pkg>, L<FS::Record>, -schema.html from the base documentation. - -=cut - -1; - |