X-Git-Url: http://git.freeside.biz/gitweb/?p=freeside.git;a=blobdiff_plain;f=FS%2FFS%2Fqueue.pm;h=a0654a13c94ebc55a705c31cb6a88ecba13e26e7;hp=1f2abe3ae4ef3e2b640ca04ce8c1fd0634f64731;hb=3adb46fccf9f631e188ea5383bd147b340477639;hpb=63a268637b2d51a8766412617724b9436439deb6 diff --git a/FS/FS/queue.pm b/FS/FS/queue.pm index 1f2abe3ae..a0654a13c 100644 --- a/FS/FS/queue.pm +++ b/FS/FS/queue.pm @@ -1,7 +1,8 @@ package FS::queue; +use base qw(FS::Record); use strict; -use vars qw( @ISA @EXPORT_OK $DEBUG $conf $jobnums); +use vars qw( @EXPORT_OK $DEBUG $conf $jobnums); use Exporter; use MIME::Base64; use Storable qw( nfreeze thaw ); @@ -11,9 +12,8 @@ use FS::Record qw( qsearch qsearchs dbh ); #use FS::queue; use FS::queue_arg; use FS::queue_depend; -use FS::cust_svc; +use FS::CGI qw(rooturl); -@ISA = qw(FS::Record); @EXPORT_OK = qw( joblisting ); $DEBUG = 0; @@ -66,6 +66,20 @@ Job status (new, locked, or failed) Freeform text status message +=cut + +sub statustext { + my $self = shift; + if ( defined ( $_[0] ) ) { + $self->SUPER::statustext(@_); + } else { + my $value = $self->SUPER::statustext(); + my $rooturl = rooturl(); + $value =~ s/%%%ROOTURL%%%/$rooturl/g; + $value; + } +} + =item _date UNIX timestamp @@ -83,6 +97,10 @@ Optional link to customer (see L). Secure flag, 'Y' indicates that when using encryption, the job needs to be run on a machine with the private key. +=item usernum + +For access_user that created the job + =cut =back @@ -137,6 +155,8 @@ sub insert { $self->custnum( $args{'custnum'} ) if $args{'custnum'}; + $self->usernum($FS::CurrentUser::CurrentUser->usernum) unless $self->usernum; + my $error = $self->SUPER::insert; if ( $error ) { $dbh->rollback if $oldAutoCommit; @@ -178,36 +198,37 @@ deleted as well sub delete { my $self = 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 $reportname = ''; + if ( $self->status =~/^done/ ) { + my $dropstring = rooturl(). '/misc/queued_report\?report='; + if ($self->statustext =~ /.*$dropstring([.\w]+)\>/) { + $reportname = "$FS::UID::cache_dir/cache.$FS::UID::datasrc/report.$1"; + } + } my $oldAutoCommit = $FS::UID::AutoCommit; local $FS::UID::AutoCommit = 0; my $dbh = dbh; - my @del = qsearch( 'queue_arg', { 'jobnum' => $self->jobnum } ); - push @del, qsearch( 'queue_depend', { 'depend_jobnum' => $self->jobnum } ); - - my $error = $self->SUPER::delete; - if ( $error ) { - $dbh->rollback if $oldAutoCommit; - return $error; - } - - foreach my $del ( @del ) { - $error = $del->delete; + foreach my $cust_pay_pending (qsearch('cust_pay_pending',{ jobnum => $self->jobnum })) { + $cust_pay_pending->set('jobnum',''); + my $error = $cust_pay_pending->replace(); if ( $error ) { $dbh->rollback if $oldAutoCommit; return $error; } } + my $error = $self->SUPER::delete; + if ( $error ) { + $dbh->rollback if $oldAutoCommit; + return $error; + } + $dbh->commit or die $dbh->errstr if $oldAutoCommit; + unlink $reportname if $reportname; + ''; } @@ -235,9 +256,10 @@ sub check { $self->ut_numbern('jobnum') || $self->ut_anything('job') || $self->ut_numbern('_date') - || $self->ut_enum('status',['', qw( new locked failed )]) + || $self->ut_enum('status',['', qw( new locked failed done )]) || $self->ut_anything('statustext') || $self->ut_numbern('svcnum') + || $self->ut_foreign_keyn('usernum', 'access_user', 'usernum') ; return $error if $error; @@ -270,25 +292,11 @@ sub args { Returns the FS::cust_svc object associated with this job, if any. -=cut - -sub cust_svc { - my $self = shift; - qsearchs('cust_svc', { 'svcnum' => $self->svcnum } ); -} - =item queue_depend Returns the FS::queue_depend objects associated with this job, if any. (Dependancies that must complete before this job can be run). -=cut - -sub queue_depend { - my $self = shift; - qsearch('queue_depend', { 'jobnum' => $self->jobnum } ); -} - =item depend_insert OTHER_JOBNUM Inserts a dependancy for this job - it will not be run until the other job @@ -352,7 +360,7 @@ If there is an error, returns the error, otherwise returns false. use vars qw($_update_statustext_dbh); sub update_statustext { my( $self, $statustext ) = @_; - return '' if $statustext eq $self->statustext; + return '' if $statustext eq $self->get('statustext'); #avoid rooturl expansion warn "updating statustext for $self to $statustext" if $DEBUG; $_update_statustext_dbh ||= myconnect; @@ -363,7 +371,7 @@ sub update_statustext { $sth->execute($statustext, $self->jobnum) or return $sth->errstr; $_update_statustext_dbh->commit or die $_update_statustext_dbh->errstr; - $self->statustext($statustext); + $self->set('statustext', $statustext); #avoid rooturl expansion ''; #my $new = new FS::queue { $self->hash }; @@ -374,6 +382,21 @@ sub update_statustext { #''; } +# not needed in 4 +#=item access_user +# +#Returns FS::access_user object (if any) associated with this user. +# +#Returns nothing if not found. +# +#=cut +# +#sub access_user { +# my $self = shift; +# my $usernum = $self->usernum || return (); +# return qsearchs('access_user',{ 'usernum' => $usernum }) || (); +#} + =back =head1 SUBROUTINES