From 2dddd8e1742bf2e8ebe9f2d3e560bc78bba95cff Mon Sep 17 00:00:00 2001 From: Jonathan Prykop Date: Thu, 20 Aug 2015 01:42:15 -0500 Subject: [PATCH] RT#14829: automatic payments triggered by bill now show up as Payment by fs_queue --- FS/FS/Schema.pm | 4 ++++ FS/FS/queue.pm | 21 +++++++++++++++++++++ FS/bin/freeside-queued | 5 +++++ httemplate/search/queue.html | 6 ++++++ 4 files changed, 36 insertions(+) diff --git a/FS/FS/Schema.pm b/FS/FS/Schema.pm index 55dc99eca..a799ceebe 100644 --- a/FS/FS/Schema.pm +++ b/FS/FS/Schema.pm @@ -4333,6 +4333,7 @@ sub tables_hashref { 'custnum', 'int', 'NULL', '', '', '', 'secure', 'char', 'NULL', 1, '', '', 'priority', 'int', 'NULL', '', '', '', + 'usernum', 'int', 'NULL', '', '', '', ], 'primary_key' => 'jobnum', 'unique' => [], @@ -4346,6 +4347,9 @@ sub tables_hashref { { columns => [ 'custnum' ], table => 'cust_main', }, + { columns => [ 'usernum' ], + table => 'access_user', + }, ], }, diff --git a/FS/FS/queue.pm b/FS/FS/queue.pm index 1b52ac4fc..f7f09485d 100644 --- a/FS/FS/queue.pm +++ b/FS/FS/queue.pm @@ -97,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 @@ -151,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; @@ -235,6 +241,7 @@ sub check { || $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; @@ -357,6 +364,20 @@ sub update_statustext { #''; } +=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 diff --git a/FS/bin/freeside-queued b/FS/bin/freeside-queued index 7c4cf1b64..398b03d12 100644 --- a/FS/bin/freeside-queued +++ b/FS/bin/freeside-queued @@ -218,8 +218,13 @@ while (1) { # don't put @args in the log, may expose passwords $log->info('starting job ('.$ljob->job.')'); warn 'running "&'. $ljob->job. '('. join(', ', @args). ")\n" if $DEBUG; + # switch user only if a job user is available + my $oldCurrentUser = $FS::CurrentUser::CurrentUser; + my $jobuser = $ljob->access_user; + local $FS::CurrentUser::CurrentUser = $jobuser if $jobuser; local $FS::UID::AutoCommit = 0; # so that we can clean up failures eval $eval; #throw away return value? suppose so + $FS::CurrentUser::CurrentUser = $oldCurrentUser if $jobuser; if ( $@ ) { dbh->rollback; my %hash = $ljob->hash; diff --git a/httemplate/search/queue.html b/httemplate/search/queue.html index 141c535da..22032b13c 100644 --- a/httemplate/search/queue.html +++ b/httemplate/search/queue.html @@ -13,6 +13,7 @@ 'Date', 'Status', 'Account', # unless $hashref->{'svcnum'} + 'Employee', '', # checkbox column ], 'fields' => [ @@ -78,6 +79,11 @@ }, sub { my $queue = shift; + my $access_user = $queue->access_user; + return $access_user ? $access_user->username : ''; + }, + sub { + my $queue = shift; my $jobnum = $queue->jobnum; my $status = $queue->status; my $changable = $dangerous -- 2.11.0