X-Git-Url: http://git.freeside.biz/gitweb/?a=blobdiff_plain;f=FS%2FFS%2Fcust_location.pm;h=a863e5df7dae380ef340a60cc43aec64e86b3ff5;hb=bd989c6f5d2270ac7f9f4e5be19adcb84d65c378;hp=51fcba35b34a5c1bb3d3c283532c68b547b5d98b;hpb=4b2a48f5247303f07a00b42eb3091145be1150e2;p=freeside.git diff --git a/FS/FS/cust_location.pm b/FS/FS/cust_location.pm index 51fcba35b..a863e5df7 100644 --- a/FS/FS/cust_location.pm +++ b/FS/FS/cust_location.pm @@ -12,6 +12,7 @@ use FS::Conf; use FS::prospect_main; use FS::cust_main; use FS::cust_main_county; +use FS::part_export; use FS::GeocodeCache; $import = 0; @@ -93,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. @@ -205,19 +211,49 @@ sub insert { $self->set('censusyear' => $conf->config('census_year') || 2012); } + my $oldAutoCommit = $FS::UID::AutoCommit; + local $FS::UID::AutoCommit = 0; + my $dbh = dbh; + my $error = $self->SUPER::insert(@_); + if ( $error ) { + $dbh->rollback if $oldAutoCommit; + return $error; + } #false laziness with cust_main, will go away eventually - if ( !$import and !$error and $conf->config('tax_district_method') ) { + if ( !$import 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 ); + if ( $error ) { + $dbh->rollback if $oldAutoCommit; + return $error; + } + + } + + # cust_location exports + #my $export_args = $options{'export_args'} || []; + my @part_export = + map qsearch( 'part_export', {exportnum=>$_} ), + $conf->config('cust_location-exports'); #, $agentnum + + foreach my $part_export ( @part_export ) { + my $error = $part_export->export_insert($self); #, @$export_args); + if ( $error ) { + $dbh->rollback if $oldAutoCommit; + return "exporting to ". $part_export->exporttype. + " (transaction rolled back): $error"; + } } - $error || ''; + + $dbh->commit or die $dbh->errstr if $oldAutoCommit; + ''; } =item delete @@ -242,7 +278,35 @@ sub replace { } } - $self->SUPER::replace($old); + my $oldAutoCommit = $FS::UID::AutoCommit; + local $FS::UID::AutoCommit = 0; + my $dbh = dbh; + + my $error = $self->SUPER::replace($old); + if ( $error ) { + $dbh->rollback if $oldAutoCommit; + return $error; + } + + # cust_location exports + #my $export_args = $options{'export_args'} || []; + + my @part_export = + map qsearch( 'part_export', {exportnum=>$_} ), + $conf->config('cust_location-exports'); #, $agentnum + + foreach my $part_export ( @part_export ) { + my $error = $part_export->export_replace($self, $old); #, @$export_args); + if ( $error ) { + $dbh->rollback if $oldAutoCommit; + return "exporting to ". $part_export->exporttype. + " (transaction rolled back): $error"; + } + } + + + $dbh->commit or die $dbh->errstr if $oldAutoCommit; + ''; } @@ -263,6 +327,7 @@ sub check { $self->ut_numbern('locationnum') || $self->ut_foreign_keyn('prospectnum', 'prospect_main', 'prospectnum') || $self->ut_foreign_keyn('custnum', 'cust_main', 'custnum') + || $self->ut_textn('locationname') || $self->ut_text('address1') || $self->ut_textn('address2') || $self->ut_text('city') @@ -280,6 +345,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 '' ) { @@ -379,8 +445,8 @@ sub disable_if_unused { my $self = shift; my $locationnum = $self->locationnum; - return '' if FS::cust_main->count('bill_locationnum = '.$locationnum) - or FS::cust_main->count('ship_locationnum = '.$locationnum) + return '' if FS::cust_main->count('bill_locationnum = '.$locationnum.' OR + ship_locationnum = '.$locationnum) or FS::contact->count( 'locationnum = '.$locationnum) or FS::cust_pkg->count('cancel IS NULL AND locationnum = '.$locationnum) @@ -545,14 +611,61 @@ sub dealternize { =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). +Returns the label of the location object. + +Options: + +=over 4 + +=item cust_main + +Customer object (see L) + +=item prospect_main + +Prospect object (see L) + +=item join_string + +String used to join location elements + +=back =cut sub location_label { my( $self, %opt ) = @_; + my $prefix = $self->label_prefix; + $prefix .= ($opt{join_string} || ': ') if $prefix; + + $prefix . $self->SUPER::location_label(%opt); +} + +=item 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: + +=over 4 + +=item cust_main + +Customer object (see L) + +=item prospect_main + +Prospect object (see L) + +=back + +=cut + +sub label_prefix { + my( $self, %opt ) = @_; + my $cust_or_prospect = $opt{cust_main} || $opt{prospect_main}; unless ( $cust_or_prospect ) { if ( $self->custnum ) { @@ -574,14 +687,16 @@ sub location_label { ($agent =~ /^(..)/), sprintf('%05d', $self->locationnum) ) ); - } - elsif ( ( $opt{'cust_main'} || $self->custnum ) + + } elsif ( $label_prefix eq '_location' && $self->locationname ) { + $prefix = $self->locationname; + + } elsif ( ( $opt{'cust_main'} || $self->custnum ) && $self->locationnum == $cust_or_prospect->ship_locationnum ) { $prefix = 'Default service location'; } - $prefix .= ($opt{join_string} || ': ') if $prefix; - $prefix . $self->SUPER::location_label(%opt); + $prefix; } =item county_state_county