'Cust# | Cust. Status | Name | Company | (bill) Address 1 | (bill) Address 2 | (bill) City | (bill) State | (bill) Zip | (bill) Country | Day phone | Night phone | Mobile phone | Fax number | (service) Address 1 | (service) Address 2 | (service) City | (service) State | (service) Zip | (service) Country | Invoicing email(s) | Payment Type | Current Balance' =>
'custnum | Status | Last, First | Company | (address) | (all phones) | (service address) | Invoicing email(s) | Payment Type | Current Balance',
- 'Cust# | Cust. Status | Name | Company | (bill) Address 1 | (bill) Address 2 | (bill) City | (bill) State | (bill) Zip | (bill) Country | Day phone | Night phone | Mobile phone | Fax number | (service) Address 1 | (service) Address 2 | (service) City | (service) State | (service) Zip | (service) Country | Invoicing email(s) | Payment Type | Current Balance | Agent Cust#' =>
- 'custnum | Status | Last, First | Company | (address) | (all phones) | (service address) | Invoicing email(s) | Payment Type | Current Balance | Agent Cust#',
+ 'Cust# | Agent Cust# | Cust. Status | Name | Company | (bill) Address 1 | (bill) Address 2 | (bill) City | (bill) State | (bill) Zip | (bill) Country | Day phone | Night phone | Mobile phone | Fax number | (service) Address 1 | (service) Address 2 | (service) City | (service) State | (service) Zip | (service) Country | Invoicing email(s) | Payment Type | Current Balance' =>
+ 'custnum | Agent Cust# | Status | Last, First | Company | (address) | (all phones) | (service address) | Invoicing email(s) | Payment Type | Current Balance',
'Cust# | Cust. Status | Name | Company | (bill) Address 1 | (bill) Address 2 | (bill) City | (bill) State | (bill) Zip | (bill) Country | (bill) Latitude | (bill) Longitude | Day phone | Night phone | Mobile phone | Fax number | (service) Address 1 | (service) Address 2 | (service) City | (service) State | (service) Zip | (service) Country | (service) Latitude | (service) Longitude | Invoicing email(s) | Payment Type | Current Balance' =>
'custnum | Status | Last, First | Company | (address+coord) | (all phones) | (service address+coord) | Invoicing email(s) | Payment Type | Current Balance',
'payunique', 'varchar', 'NULL', $char_d, '', '',#separate paybatch "unique" functions from current usage
'closed', 'char', 'NULL', 1, '', '',
'pkgnum', 'int', 'NULL', '', '', '', #desired pkgnum for pkg-balances
+ 'no_auto_apply', 'char', 'NULL', 1, '', '',
# cash/check deposit info fields
'bank', 'varchar', 'NULL', $char_d, '', '',
=item apply_payments_and_credits [ OPTION => VALUE ... ]
Applies unapplied payments and credits to this invoice.
+Payments with the no_auto_apply flag set will not be applied.
A hash of optional arguments may be passed. Currently "manual" is supported.
If true, a payment receipt is sent instead of a statement when
$self->select_for_update; #mutex
- my @payments = grep { $_->unapplied > 0 } $self->cust_main->cust_pay;
+ my @payments = grep { $_->unapplied > 0 }
+ grep { !$_->no_auto_apply }
+ $self->cust_main->cust_pay;
my @credits = grep { $_->credited > 0 } $self->cust_main->cust_credit;
if ( $conf->exists('pkg-balances') ) {
=item apply_payments_and_credits [ OPTION => VALUE ... ]
Applies unapplied payments and credits.
+Payments with the no_auto_apply flag set will not be applied.
In most cases, this new method should be used in place of sequential
apply_payments and apply_credits methods.
Applies (see L<FS::cust_bill_pay>) unapplied payments (see L<FS::cust_pay>)
to outstanding invoice balances in chronological order.
+Payments with the no_auto_apply flag set will not be applied.
#and returns the value of any remaining unapplied payments.
#return 0 unless
- my @payments = $self->unapplied_cust_pay;
+ my @payments = grep { !$_->no_auto_apply } $self->unapplied_cust_pay;
my @invoices = $self->open_cust_bill;
Desired pkgnum when using experimental package balances.
+=item no_auto_apply
+
+Flag to only allow manual application of payment, empty or 'Y'
+
=item bank
The bank where the payment was deposited.
|| $self->ut_textn('paybatch')
|| $self->ut_textn('payunique')
|| $self->ut_enum('closed', [ '', 'Y' ])
+ || $self->ut_flag('no_auto_apply')
|| $self->ut_foreign_keyn('pkgnum', 'cust_pkg', 'pkgnum')
|| $self->ut_textn('bank')
|| $self->ut_alphan('depositor')
<TD ALIGN="right"><% mt('Auto-apply to invoices') |h %></TD>
<TD COLSPAN=2>
<SELECT NAME="apply">
- <OPTION VALUE="yes" SELECTED><% mt('yes') |h %>
- <OPTION><% mt('no') |h %></SELECT>
- </TD>
+ <OPTION VALUE="yes" SELECTED><% mt('yes') |h %></OPTION>
+ <OPTION VALUE=""><% mt('not now') |h %></OPTION>
+ <OPTION VALUE="never"><% mt('never') |h %></OPTION>
+ </SELECT>
+ </TD>
% } elsif ( $link eq 'invnum' ) {
<TD ALIGN="right"><% mt('Apply to') |h %></TD>
<TD COLSPAN=2 BGCOLOR="#ffffff">Invoice #<B><% $linknum %></B> only</TD>
- <INPUT TYPE="hidden" NAME="apply" VALUE="no">
+ <INPUT TYPE="hidden" NAME="apply" VALUE="">
% }
</TR>
--- /dev/null
+<%doc>
+Quick process for toggling no_auto_apply field in cust_pay.
+
+Requires paynum and no_auto_apply ('Y' or '') in cgi.
+
+Requires 'Apply payment' acl.
+</%doc>
+
+% if ($error) {
+
+<P STYLE="color: #FF0000"><% emt($error) %></P>
+
+% } else {
+
+<P STYLE="font-weight: bold;"><% emt($message) %></P>
+<P><% emt('Please wait while the page reloads.') %></P>
+<SCRIPT TYPE="text/javascript">
+window.top.location.reload();
+</SCRIPT>
+
+% }
+
+<%init>
+die "access denied"
+ unless $FS::CurrentUser::CurrentUser->access_right('Apply payment');
+
+my $paynum = $cgi->param('paynum');
+my $noauto = $cgi->param('no_auto_apply');
+
+my $error = '';
+my $message = '';
+my $cust_pay = qsearchs('cust_pay',{ paynum => $paynum });
+if ($cust_pay) {
+ if (($noauto eq 'Y') || (defined($noauto) && (length($noauto) == 0))) {
+ $cust_pay->no_auto_apply($noauto);
+ $error = $cust_pay->replace;
+ $message = $noauto ?
+ q(Payment will not be automatically applied to open invoices, must be applied manually) :
+ q(Payment will be automatically applied to open invoices the next time this customer's payments are processed);
+ } else {
+ $error = 'no_auto_apply not specified';
+ }
+} else {
+ $error .= 'Payment could not be found in database';
+}
+
+
+</%init>
my $new = new FS::cust_pay ( {
$field => $linknum,
_date => $_date,
+ no_auto_apply => ($cgi->param('apply') eq 'never') ? 'Y' : '',
map {
$_, scalar($cgi->param($_));
} qw( paid payby payinfo paybatch
push @footer_align, '';
push @onchange, 'toggle_application_row';
+push @header, 'No Auto Allocate';
+push @fields, 'no_auto_apply';
+push @types, 'checkbox';
+push @align, 'c';
+push @sizes, '0';
+push @colors, '';
+push @footer, '';
+push @footer_align, '';
+push @onchange, '';
+
#push @header, 'Error';
push @header, '';
push @fields, 'error';
'payinfo' => $param->{"payinfo$row"},
'discount_term' => $param->{"discount_term$row"},
'paybatch' => $paybatch,
+ 'no_auto_apply' => exists($param->{"no_auto_apply$row"}) ? 'Y' : '',
}
if $param->{"custnum$row"}
|| $param->{"paid$row"}
my @cust_bill_pay = $cust_pay->cust_bill_pay;
my @cust_pay_refund = $cust_pay->cust_pay_refund;
+my $unapplied = $cust_pay->unapplied;
my ($payby,$payinfo) = translate_payinfo($cust_pay);
my $target = "$payby$payinfo";
$payment = emt("Unapplied Payment by [_1]",$otaker);
$payment =~ s/$otaker/<i>$otaker<\/i>/ if $italicize_otaker;
$payment = '<B><FONT COLOR="#FF0000">'.$payment.'</FONT></B>';
- if ( $opt{'Apply payment'} ) {
- if ( $opt{total_owed} > 0 ) {
- $apply = ' ('.
- include( '/elements/popup_link.html',
- 'label' => emt('apply'),
- 'action' => "${p}edit/cust_bill_pay.cgi?".
- $cust_pay->paynum,
- 'actionlabel' => emt('Apply payment'),
- %cust_bill_pay_width,
- %cust_bill_pay_height,
- ).
- ')';
- }
- if ( $opt{total_unapplied_refunds} > 0 ) {
- $apply.= ' ('.
- include( '/elements/popup_link.html',
- 'label' => emt('apply to refund'),
- 'action' => "${p}edit/cust_pay_refund.cgi?".
- $cust_pay->paynum,
- 'actionlabel' => emt('Apply payment to refund'),
- 'width' => 392,
- ).
- ')';
- }
- }
} elsif ( scalar(@cust_bill_pay) == 1
&& scalar(@cust_pay_refund) == 0
- && $cust_pay->unapplied == 0 ) {
+ && $unapplied == 0 ) {
#applied to one invoice, the usual situation
$desc .= ' '. $cust_bill_pay[0]->applied_to_invoice;
} elsif ( scalar(@cust_bill_pay) == 0
&& scalar(@cust_pay_refund) == 1
- && $cust_pay->unapplied == 0 ) {
+ && $unapplied == 0 ) {
#applied to one refund
$desc .= emt(" refunded on [_1]", time2str($date_format, $cust_pay_refund[0]->_date) );
} else {
die "$app is not a FS::cust_bill_pay or FS::cust_pay_refund";
}
}
- if ( $cust_pay->unapplied > 0 ) {
+ if ( $unapplied > 0 ) {
$desc .= ' '.
'<B><FONT COLOR="#FF0000">'.
- emt("[_1][_2] unapplied", $opt{money_char}, $cust_pay->unapplied).
+ emt("[_1][_2] unapplied", $opt{money_char}, $unapplied).
'</FONT></B>';
- if ( $opt{'Apply payment'} ) {
- if ( $opt{total_owed} > 0 ) {
- $apply = ' ('.
- include( '/elements/popup_link.html',
- 'label' => emt('apply'),
- 'action' => "${p}edit/cust_bill_pay.cgi?".
- $cust_pay->paynum,
- 'actionlabel' => emt('Apply payment'),
- %cust_bill_pay_width,
- %cust_bill_pay_height,
- ).
- ')';
- }
- if ( $opt{total_unapplied_refunds} > 0 ) {
- $apply.= ' ('.
- include( '/elements/popup_link.html',
- 'label' => emt('apply to refund'),
- 'action' => "${p}edit/cust_pay_refund.cgi?".
- $cust_pay->paynum,
- 'actionlabel' => emt('Apply payment to refund'),
- 'width' => 392,
- ).
- ')';
- }
- }
$desc .= '<BR>';
}
}
+if ($unapplied > 0) {
+ if ( $opt{'Apply payment'} ) {
+ if ( $opt{total_owed} > 0 ) {
+ $apply = ' ('.
+ include( '/elements/popup_link.html',
+ 'label' => emt('apply'),
+ 'action' => "${p}edit/cust_bill_pay.cgi?".
+ $cust_pay->paynum,
+ 'actionlabel' => emt('Apply payment'),
+ %cust_bill_pay_width,
+ %cust_bill_pay_height,
+ ).
+ ')';
+ }
+ if ( $opt{total_unapplied_refunds} > 0 ) {
+ $apply.= ' ('.
+ include( '/elements/popup_link.html',
+ 'label' => emt('apply to refund'),
+ 'action' => "${p}edit/cust_pay_refund.cgi?".
+ $cust_pay->paynum,
+ 'actionlabel' => emt('Apply payment to refund'),
+ 'width' => 392,
+ ).
+ ')';
+ }
+ $apply .= ' (auto‑apply: '
+ . ($cust_pay->no_auto_apply ? 'no' : 'yes')
+ . ' | '
+ . include( '/elements/popup_link.html',
+ 'label' => emt($cust_pay->no_auto_apply ? 'yes' : 'no'),
+ 'action' => "${p}edit/process/cust_pay-no_auto_apply.cgi?paynum="
+ . $cust_pay->paynum
+ . '&no_auto_apply='
+ . ($cust_pay->no_auto_apply ? '' : 'Y'),
+ 'actionlabel' => emt('Toggle Auto-Apply'),
+ 'width' => 392,
+ 'height' => 200,
+ )
+ . ')';
+ } else { # end if $opt('Apply payment')
+ $apply .= ' (no auto-apply)' if $cust_pay->no_auto_apply;
+ }
+} # end if $unapplied > 0
+
my $view =
' ('. include('/elements/popup_link.html',
'label' => emt('view receipt'),
},
#freeside
- { Name => 'On Custom Field Transaction',
- Description => 'When a custom field is changed',
- ExecModule => 'CustomFieldTransaction',
- ApplicableTransTypes => 'Any',
- },
- { Name => 'On Custom Field Change',
- Description => 'When a custom field is changed to some value',
- ExecModule => 'CustomFieldChange',
- ApplicableTransTypes => 'Any',
- },
+ #{ Name => 'On Custom Field Transaction',
+ # Description => 'When a custom field is changed',
+ # ExecModule => 'CustomFieldTransaction',
+ # ApplicableTransTypes => 'Any',
+ #},
+ #{ Name => 'On Custom Field Change',
+ # Description => 'When a custom field is changed to some value',
+ # ExecModule => 'CustomFieldChange',
+ # ApplicableTransTypes => 'Any',
+ #},
);
use lib "/opt/rt3/local/lib";
use lib "/opt/rt3/lib";
-use RT -init
+use RT -init;
$| = 1;
use RT::Interface::CLI qw(Init);
Init();
- my $db_name = RT->Config->Get('DatabaseName');
- my $db_type = RT->Config->Get('DatabaseType');
+my $db_name = RT->Config->Get('DatabaseName');
+my $db_type = RT->Config->Get('DatabaseType');
my $dbh = $RT::Handle->dbh;
}
-sub Options {
- my $self = shift;
- return();
-}
-
-sub Rules {
- my $self = shift;
- return () if !$self->ScripObj or !$self->ScripObj->ActionRules;
- return(split "\n", $self->ScripObj->ActionRules);
-}
-
RT::Base->_ImportOverlays();
1;
FinalPriority => $args{'finalpriority'} || 0,
SquelchMailTo => $args{'squelchmailto'},
Type => $args{'type'},
- $self->Rules
);
if ( $args{content} ) {
}
foreach my $value (@values) {
- next unless length($value);
+ next if $ticket->CustomFieldValueIsEmpty(
+ Field => $cf,
+ Value => $value,
+ );
my ( $val, $msg ) = $ticket->AddCustomFieldValue(
Field => $cf,
Value => $value
}
-sub Options {
- my $self = shift;
- my $queues = RT::Queues->new($self->CurrentUser);
- $queues->UnLimit;
- my @names;
- while (my $queue = $queues->Next) {
- push @names, $queue->Id, $queue->Name;
- }
- return (
- {
- 'name' => 'Queue',
- 'label' => 'In queue',
- 'type' => 'select',
- 'options' => \@names
- }
- )
-}
-
RT::Base->_ImportOverlays();
1;
return(undef);
}
-sub Options {
- my $self = shift;
- return();
-}
-
-sub Rules {
- my $self = shift;
- return () if !$self->ScripObj or !$self->ScripObj->ConditionRules;
- # By default, option names and values are on consecutive lines.
- # Override this if you need anything more interesting.
- return(split "\n", $self->ScripObj->ConditionRules);
-}
-
sub DESTROY {
my $self = shift;
+++ /dev/null
-package RT::Condition::CustomFieldChange;
-use base 'RT::Condition';
-use strict;
-
-=head2 IsApplicable
-
-If a custom field has a particular value.
-
-=cut
-
-# Based on Chuck Boeheim's code posted on the RT Wiki 3/13/06
-
-sub IsApplicable {
- my $self = shift;
- my $trans = $self->TransactionObj;
- my $scrip = $self->ScripObj;
- my %Rules = $self->Rules;
- my ($field, $value) = @Rules{'field', 'value'};
- return if !defined($field) or !defined($value);
-
- if ($trans->Type eq 'Create') {
- return 1 if $trans->TicketObj->FirstCustomFieldValue($field) eq $value;
- }
- if ($trans->Type eq 'CustomField') {
- my $cf = RT::CustomField->new($self->CurrentUser);
- $cf->Load($field);
- return 1 if $trans->Field == $cf->Id and $trans->NewValue eq $value;
- }
- return undef;
-}
-
-sub Options {
- my $self = shift;
- my %args = ( 'QueueObj' => undef, @_ );
- my $QueueObj = $args{'QueueObj'};
- my $cfs = $QueueObj->TicketCustomFields();
- my @fieldnames;
- while ( my $cf = $cfs->Next ) {
- push @fieldnames, $cf->Name, $cf->Name;
- }
- return (
- {
- 'name' => 'field',
- 'label' => 'Custom Field',
- 'type' => 'select',
- 'options' => \@fieldnames,
- },
- {
- 'name' => 'value',
- 'label' => 'Value',
- 'type' => 'text',
- },
- );
-}
-1;
-
CustomPrepareCode => undef,
CustomCommitCode => undef,
CustomIsApplicableCode => undef,
- ConditionRules => undef,
- ActionRules => undef,
@_
);
CustomPrepareCode => $args{'CustomPrepareCode'},
CustomCommitCode => $args{'CustomCommitCode'},
CustomIsApplicableCode => $args{'CustomIsApplicableCode'},
- ConditionRules => $args{'ConditionRules'},
- ActionRules => $args{'ActionRules'},
);
return ( $id, $msg ) unless $id;
+++ /dev/null
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC
-%# <sales@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# 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., 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:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license to use, copy, create derivative
-%# works based on those contributions, and sublicense and distribute
-%# those contributions and any derivatives thereof.
-%#
-%# END BPS TAGGED BLOCK }}}
-<& /Elements/ListActions, actions => \@actions &>
-
-<form method="post" action="Scrip.html" id="ModifyScrip" name="ModifyScrip">
-<input type="hidden" class="hidden" name="id" value="<% $id %>" />
-<input type="hidden" class="hidden" name="Queue" value="<% $Queue %>" />
-
-<&| /Widgets/TitleBox, title => loc('Scrip Fields') &>
-<table>
-
-<tr><td class="label"><&|/l&>Description</&>:</td><td class="value">\
-% if ( $immutable ) {
-<% $scrip->Description %> <i>(system scrip)</i>
-<input type="hidden" name="Scrip-<% $id %>-Description" value="<% $scrip->Description %>">
-% } else {
-<input name="Scrip-<% $id %>-Description" \
- size="60" \
- value="<% $ARGS{"Scrip-$id-Description"} || $scrip->Description || '' %>" />
-% }
-</td></tr>
-
-<tr><td class="label"><&|/l&>Condition</&>:</td><td class="value">\
-% if ( $immutable ) {
-<% loc( $scrip->ConditionObj->Name ) %>
-<input type="hidden" name="Scrip-<%$id%>-Condition" value="<% $scrip->ConditionObj->Id %>">
-% } else {
-<& /Admin/Elements/SelectScripCondition,
- Name => "Scrip-$id-ScripCondition",
- Default => $ARGS{"Scrip-$id-ScripCondition"} || $scrip->ConditionObj->Id,
- ScripObj => $scrip,
- Queue => $Queue,
-&>
-% }
-</td></tr>
-
-<& /Admin/Elements/EditScripOptions,
- Name => "Condition",
- Default => $ARGS{"Scrip-$id-ConditionRules"} || $scrip->ConditionRules,
- Queue => $Queue,
- ScripX => $ARGS{"Scrip-$id-ScripCondition"} || $scrip->ConditionObj->Id,
-&>
-
-<tr><td class="label"><&|/l&>Action</&>:</td><td class="value">\
-% if ( $immutable ) {
-<% loc( $scrip->ActionObj->Name ) %>
-<input type="hidden" name="Scrip-<%$id%>-Action" value="<% $scrip->ActionObj->Id %>">
-% } else {
-<& /Admin/Elements/SelectScripAction,
- Name => "Scrip-$id-ScripAction",
- Default => $ARGS{"Scrip-$id-ScripAction"} || $scrip->ActionObj->Id,
- ScripObj => $scrip,
- Queue => $Queue,
-&>
-% }
-</td></tr>
-
-<& /Admin/Elements/EditScripOptions,
- Name => "Action",
- Default => $ARGS{"Scrip-$id-ActionRules"} || $scrip->ActionRules,
- Queue => $Queue,
- ScripX => $ARGS{"Scrip-$id-ScripAction"} || $scrip->ActionObj->Id,
-&>
-
-<tr><td class="label"><&|/l&>Template</&>:</td><td class="value">\
-%# immutable flag doesn't affect this
-<& /Admin/Elements/SelectTemplate,
- Name => "Scrip-$id-Template",
- Default => $ARGS{"Scrip-$id-Template"} || $scrip->TemplateObj->Id,
- Queue => $Queue,
-&>
-</td></tr>
-
-<tr><td class="label"><&|/l&>Stage</&>:</td><td class="value">\
-%# or this
-<& /Admin/Elements/SelectStage,
- Name => "Scrip-$id-Stage",
- Default => $ARGS{"Scrip-$id-Stage"} || $scrip->Stage,
-&></td></tr>
-
-</table>
-</&>
-
-% if ($session{CurrentUser}->HasRight(Object => $RT::System, Right => 'ExecuteCode')) {
-<& /Elements/Submit,
- Label => $SubmitLabel,
- Reset => 1,
-&><br />
-
-<&| /Widgets/TitleBox, title => loc('User Defined conditions and actions') &>
-<table>
-<tr><td colspan="2">
-<i><&|/l&>(Use these fields when you choose 'User Defined' for a condition or action)</&></i>
-</td></tr>
-
-<tr><td class="labeltop"><&|/l&>Custom condition</&>:</td><td class="value">
-% my $code = $ARGS{"Scrip-$id-CustomIsApplicableCode"} || $scrip->CustomIsApplicableCode || '';
-% my $lines = @{[ $code =~ /\n/gs ]} + 3;
-% $lines = $min_lines if $lines < $min_lines;
-<textarea cols="80" rows="<% $lines %>" name="Scrip-<% $id %>-CustomIsApplicableCode"><% $code %></textarea>
-</td></tr>
-
-<tr><td class="labeltop"><&|/l&>Custom action preparation code</&>:</td><td class="value">
-% $code = $ARGS{"Scrip-$id-CustomPrepareCode"} || $scrip->CustomPrepareCode || '';
-% $lines = @{[ $code =~ /\n/gs ]} + 3;
-% $lines = $min_lines if $lines < $min_lines;
-<textarea cols="80" rows="<% $lines %>" name="Scrip-<% $id %>-CustomPrepareCode"><% $code %></textarea>
-</td></tr>
-
-<tr><td class="labeltop"><&|/l&>Custom action cleanup code</&>:</td><td class="value">
-% $code = $ARGS{"Scrip-$id-CustomCommitCode"} || $scrip->CustomCommitCode || '';
-% $lines = @{[ $code =~ /\n/gs ]} + 3;
-% $lines = $min_lines if $lines < $min_lines;
-<textarea cols="80" rows="<% $lines %>" name="Scrip-<% $id || '' %>-CustomCommitCode"><% $code %></textarea>
-</td></tr>
-
-</table>
-</&>
-
-% }
-
-<& /Elements/Submit,
- Label => $SubmitLabel,
- Reset => 1,
-&>
-
-</form>
-<%init>
-
-my (@actions, $SubmitLabel);
-my $scrip = RT::Scrip->new( $session{'CurrentUser'} );
-my $immutable = 0;
-
-if ( $id ) {
- $scrip->Load( $id );
- unless ( $id = $scrip->id ) {
- push @actions, loc("Couldn't load scrip #[_1]", $id);
- }
- $SubmitLabel = loc('Save Changes');
- my $a = $scrip->FirstAttribute('Immutable');
- if ( defined($a) and $a->Content ) {
- $immutable = 1;
- }
-}
-
-unless ( $id ) {
- $id = 'new';
- $SubmitLabel = loc('Create');
-}
-
-my $min_lines = 10;
-
-my ($ok, $msg) = $scrip->CompileCheck;
-push @actions, $msg if !$ok;
-
-</%init>
-
-<%ARGS>
-$id => undef
-$title => undef
-$Queue => 0
-</%ARGS>
-
-<%METHOD Process>
-<%ARGS>
-$id => undef
-$Queue => undef
-</%ARGS>
-<%INIT>
-return ($id) unless $id;
-
-my @rules = ('ConditionRules', 'ActionRules');
-if ( exists($ARGS{"Scrip-$id-ScripCondition"}) ) {
- foreach my $rules (@rules) {
- my $prefix = join('-', 'Scrip', $id, $rules);
- $ARGS{$prefix} = join("\n", map {
- $_ =~ /^$rules-(.*)$/ ?
- ($1, $ARGS{$_}) : ()
- } keys(%ARGS)
- );
- }
-}
-
-my $scrip = RT::Scrip->new( $session{'CurrentUser'} );
-if ( $id eq 'new' ) {
- return $scrip->Create(
- Queue => $Queue,
- ScripAction => $ARGS{"Scrip-new-ScripAction"},
- ScripCondition => $ARGS{"Scrip-new-ScripCondition"},
- Template => $ARGS{"Scrip-new-Template"},
- Description => $ARGS{"Scrip-new-Description"},
- CustomPrepareCode => $ARGS{"Scrip-new-CustomPrepareCode"},
- CustomCommitCode => $ARGS{"Scrip-new-CustomCommitCode"},
- CustomIsApplicableCode => $ARGS{"Scrip-new-CustomIsApplicableCode"},
- Stage => $ARGS{"Scrip-new-Stage"},
- ConditionRules => $ARGS{"Scrip-new-ConditionRules"},
- ActionRules => $ARGS{"Scrip-new-ActionRules"},
- );
-}
-else {
- $scrip->Load( $id );
- return (undef, loc("Couldn't load scrip #[_1]", $id))
- unless $scrip->id;
-
- my @attribs = qw(Queue ScripAction ScripCondition Template Stage
- Description CustomPrepareCode CustomCommitCode CustomIsApplicableCode
- ConditionRules ActionRules);
- my @results = UpdateRecordObject(
- AttributesRef => \@attribs,
- AttributePrefix => 'Scrip-'.$scrip->Id,
- Object => $scrip,
- ARGSRef => \%ARGS
- );
- return ($scrip->id, @results);
-}
-</%INIT>
-</%METHOD>
+++ /dev/null
-% return if !@options;
-<tr><td></td><td><table>
-% my $prefix = $Name.'Rules-';
-% foreach my $o (@options) {
-% my $curr_value = $rules{ $o->{'name'} };
- <tr><td align="right"><% $o->{'label'} %>:</td>
- <td>
-% if ( $o->{'type'} eq 'text' ) {
- <input type="text" name="<% $prefix.$o->{'name'} %>" value="<% $curr_value %>">
-% }
-% elsif ( $o->{'type'} eq 'checkbox' ) {
- <input type="checkbox" name="<% $prefix.$o->{'name'} %>" value="1" <% $curr_value ? 'CHECKED' : '' %>>
-% }
-% elsif ( $o->{'type'} eq 'select' and ref $o->{'options'} ) {
- <select name="<% $prefix.$o->{'name'} %>">
-% my @choices = @{ $o->{'options'} };
-% while (@choices) {
-% my $v = shift @choices;
-% my $l = shift @choices;
- <option value="<% $v %>"<% ($curr_value eq $v) ? ' SELECTED' : ''%>>
- <% $l %></option>
-% }
- </select>
-% } # else $o->{'type'}
-</td></tr>
-% } #foreach $o
-</table></td></tr>
-
-<%INIT>
-my (@options, %rules);
-if ( $ScripX ) {
- my $ScripXObj = "RT::Scrip$Name"->new($session{'CurrentUser'});
- $ScripXObj->Load($ScripX);
- my $QueueObj = RT::Queue->new($session{'CurrentUser'});
- $QueueObj->Load($Queue);
- my $method = "Load$Name";
- my $XObj = $ScripXObj->$method();
- @options = $XObj->Options('QueueObj' => $QueueObj);
- %rules = split("\n", $Default);
-}
-</%INIT>
-
-<%ARGS>
-$Name => undef
-$Default => undef
-$Queue => 0
-$ScripX => undef
-</%ARGS>
%# those contributions and any derivatives thereof.
%#
%# END BPS TAGGED BLOCK }}}
-<select name="<%$Name%>"
-onchange="var idobj = document.getElementsByName('id')[0];
-if (idobj.value=='new') idobj.value = '';
-form.submit()">
+<select name="<%$Name%>">
<option value=""
<% ! defined $Default && qq[ selected="selected"] |n %>
>-</option>
%# those contributions and any derivatives thereof.
%#
%# END BPS TAGGED BLOCK }}}
-<select name="<%$Name%>"
-onchange="var idobj = document.getElementsByName('id')[0];
-if (idobj.value=='new') idobj.value = '';
-form.submit()">
+<select name="<%$Name%>">
<option value=""
<% ! defined $Default && qq[ selected="selected"] %>
>-</option>