-# {{{ BEGIN BPS TAGGED BLOCK
+# BEGIN BPS TAGGED BLOCK {{{
#
# COPYRIGHT:
-#
-# This software is Copyright (c) 1996-2004 Best Practical Solutions, LLC
+#
+# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
# <jesse@bestpractical.com>
#
# (Except where explicitly superseded by other copyright notices)
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
-# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+# 02110-1301 or visit their web page on the internet at
+# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
#
#
# CONTRIBUTION SUBMISSION POLICY:
# works based on those contributions, and sublicense and distribute
# those contributions and any derivatives thereof.
#
-# }}} END BPS TAGGED BLOCK
+# END BPS TAGGED BLOCK }}}
+
=head1 NAME
RT::Scrips - a collection of RT Scrip objects
=head1 METHODS
-=begin testing
-ok (require RT::Scrips);
+=cut
-=end testing
-=cut
+package RT::Scrips;
use strict;
no warnings qw(redefine);
=head2 Apply
-Run through the relevant scrips.
+Run through the relevant scrips. Scrips will run in order based on
+description. (Most common use case is to prepend a number to the description,
+forcing the scrips to run in ascending alphanumerical order.)
=cut
foreach my $scrip (@{$self->Prepared}) {
+ $RT::Logger->debug(
+ "Committing scrip #". $scrip->id
+ ." on txn #". $self->{'TransactionObj'}->id
+ ." of ticket #". $self->{'TicketObj'}->id
+ );
$scrip->Commit( TicketObj => $self->{'TicketObj'},
TransactionObj => $self->{'TransactionObj'} );
# {{{ sup _SetupSourceObjects
+
=head2 _SetupSourceObjects { TicketObj , Ticket, Transaction, TransactionObj }
Setup a ticket and transaction for this Scrip collection to work with as it runs through the
else {
$self->{'TicketObj'} = RT::Ticket->new( $self->CurrentUser );
$self->{'TicketObj'}->Load( $args{'Ticket'} )
- || $RT::Logger->err("$self couldn't load ticket $args{'Ticket'}\n");
+ || $RT::Logger->err("$self couldn't load ticket $args{'Ticket'}");
}
if ( ( $self->{'TransactionObj'} = $args{'TransactionObj'} ) ) {
else {
$self->{'TransactionObj'} = RT::Transaction->new( $self->CurrentUser );
$self->{'TransactionObj'}->Load( $args{'Transaction'} )
- || $RT::Logger->err( "$self couldn't load transaction $args{'Transaction'}\n");
+ || $RT::Logger->err( "$self couldn't load transaction $args{'Transaction'}");
}
}
=head2 _FindScrips
-Find only the apropriate scrips for whatever we're doing now
+Find only the apropriate scrips for whatever we're doing now. Order them
+by their description. (Most common use case is to prepend a number to the
+description, forcing the scrips to display and run in ascending alphanumerical
+order.)
=cut
$self->LimitToQueue( $self->{'TicketObj'}->QueueObj->Id )
; #Limit it to $Ticket->QueueObj->Id
- $self->LimitToGlobal()
- unless $self->{'TicketObj'}->QueueObj->Disabled; # or to "global"
+ $self->LimitToGlobal();
+ # or to "global"
$self->Limit( FIELD => "Stage", VALUE => $args{'Stage'} );
);
#We only want things where the scrip applies to this sort of transaction
- $self->Limit(
- ALIAS => $ConditionsAlias,
- FIELD => 'ApplicableTransTypes',
- OPERATOR => 'LIKE',
- VALUE => $args{'Type'},
- ENTRYAGGREGATOR => 'OR',
- )
- if $args{'Type'};
+ # TransactionBatch stage can define list of transaction
+ foreach( split /\s*,\s*/, ($args{'Type'} || '') ) {
+ $self->Limit(
+ ALIAS => $ConditionsAlias,
+ FIELD => 'ApplicableTransTypes',
+ OPERATOR => 'LIKE',
+ VALUE => $_,
+ ENTRYAGGREGATOR => 'OR',
+ )
+ }
# Or where the scrip applies to any transaction
$self->Limit(
ENTRYAGGREGATOR => 'OR',
);
- $RT::Logger->debug("Found ".$self->Count. " scrips");
+ # Promise some kind of ordering
+ $self->OrderBy( FIELD => 'Description' );
+
+ # we call Count below, but later we always do search
+ # so just do search and get count from results
+ $self->_DoSearch if $self->{'must_redo_search'};
+
+ $RT::Logger->debug(
+ "Found ". $self->Count ." scrips for $args{'Stage'} stage"
+ ." with applicable type(s) $args{'Type'}"
+ );
}
# }}}