X-Git-Url: http://git.freeside.biz/gitweb/?a=blobdiff_plain;f=FS%2FFS%2Fsvc_Common.pm;h=5c6e16b826b1ddf74ce3b1e59eb844b4cccfdc46;hb=7d1cf3b75da3ba9aab3667cdc0125e25bbc76438;hp=e0f1e33385280d9d5130fce496ab96cc102124ec;hpb=696b790c88984203912b46c9e4b103c2925833c1;p=freeside.git diff --git a/FS/FS/svc_Common.pm b/FS/FS/svc_Common.pm index e0f1e3338..5c6e16b82 100644 --- a/FS/FS/svc_Common.pm +++ b/FS/FS/svc_Common.pm @@ -330,6 +330,8 @@ sub preinsert_hook_first { ''; } sub _check_duplcate { ''; } sub preinsert_hook { ''; } sub table_dupcheck_fields { (); } +sub predelete_hook { ''; } +sub predelete_hook_first { ''; } =item delete [ , OPTION => VALUE ... ] @@ -356,9 +358,11 @@ sub delete { local $FS::UID::AutoCommit = 0; my $dbh = dbh; - my $error = $self->SUPER::delete + my $error = $self->predelete_hook_first + || $self->SUPER::delete || $self->export('delete', @$export_args) || $self->return_inventory + || $self->predelete_hook || $self->cust_svc->delete ; if ( $error ) { @@ -371,11 +375,54 @@ sub delete { ''; } +=item expire DATE + +Currently this will only run expire exports if any are attached + +=cut + +sub expire { + my($self,$date) = (shift,shift); + + return 'Expire date must be specified' unless $date; + + 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 $export_args = [$date]; + my $error = $self->export('expire', @$export_args); + if ( $error ) { + $dbh->rollback if $oldAutoCommit; + return $error; + } + + $dbh->commit or die $dbh->errstr if $oldAutoCommit; + + ''; +} + =item replace [ OLD_RECORD ] [ HASHREF | OPTION => VALUE ] Replaces OLD_RECORD with this one. If there is an error, returns the error, otherwise returns false. +Currently available options are: I and I. + +If I is set (to a scalar jobnum or an array reference of +jobnums), all provisioning jobs will have a dependancy on the supplied +jobnum(s) (they will not run until the specific job(s) complete(s)). + +If I is set to an array reference, the referenced list will be +passed to export commands. + =cut sub replace { @@ -390,6 +437,13 @@ sub replace { ? shift : { @_ }; + my @jobnums = (); + local $FS::queue::jobnums = \@jobnums; + warn "[$me] replace: set \$FS::queue::jobnums to $FS::queue::jobnums\n" + if $DEBUG; + my $depend_jobnums = $options->{'depend_jobnum'} || []; + $depend_jobnums = [ $depend_jobnums ] unless ref($depend_jobnums); + local $SIG{HUP} = 'IGNORE'; local $SIG{INT} = 'IGNORE'; local $SIG{QUIT} = 'IGNORE'; @@ -435,6 +489,9 @@ sub replace { #new-style exports! unless ( $noexport_hack ) { + warn "[$me] replace: \$FS::queue::jobnums is $FS::queue::jobnums\n" + if $DEBUG; + my $export_args = $options->{'export_args'} || []; #not quite false laziness, but same pattern as FS::svc_acct::replace and @@ -483,6 +540,21 @@ sub replace { } } + foreach my $depend_jobnum ( @$depend_jobnums ) { + warn "[$me] inserting dependancies on supplied job $depend_jobnum\n" + if $DEBUG; + foreach my $jobnum ( @jobnums ) { + my $queue = qsearchs('queue', { 'jobnum' => $jobnum } ); + warn "[$me] inserting dependancy for job $jobnum on $depend_jobnum\n" + if $DEBUG; + my $error = $queue->depend_insert($depend_jobnum); + if ( $error ) { + $dbh->rollback if $oldAutoCommit; + return "error queuing job dependancy: $error"; + } + } + } + } $dbh->commit or die $dbh->errstr if $oldAutoCommit;