diff options
23 files changed, 149 insertions, 497 deletions
diff --git a/FS/FS/ConfDefaults.pm b/FS/FS/ConfDefaults.pm index 5b8399af5..b24a300f9 100644 --- a/FS/FS/ConfDefaults.pm +++ b/FS/FS/ConfDefaults.pm @@ -71,8 +71,8 @@ sub cust_fields_avail { ( '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', diff --git a/FS/FS/Schema.pm b/FS/FS/Schema.pm index 24ca85821..eb5f1d3b2 100644 --- a/FS/FS/Schema.pm +++ b/FS/FS/Schema.pm @@ -2431,6 +2431,7 @@ sub tables_hashref { '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, '', '', diff --git a/FS/FS/cust_bill.pm b/FS/FS/cust_bill.pm index db909309f..5052ed130 100644 --- a/FS/FS/cust_bill.pm +++ b/FS/FS/cust_bill.pm @@ -888,6 +888,7 @@ sub hide { =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 @@ -914,7 +915,9 @@ sub apply_payments_and_credits { $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') ) { diff --git a/FS/FS/cust_main/Billing.pm b/FS/FS/cust_main/Billing.pm index 87be4e68d..df7e17f81 100644 --- a/FS/FS/cust_main/Billing.pm +++ b/FS/FS/cust_main/Billing.pm @@ -2177,6 +2177,7 @@ sub due_cust_event { =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. @@ -2319,6 +2320,7 @@ sub apply_credits { 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. @@ -2348,7 +2350,7 @@ sub apply_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; diff --git a/FS/FS/cust_pay.pm b/FS/FS/cust_pay.pm index 8b4c98ad6..d135599a3 100644 --- a/FS/FS/cust_pay.pm +++ b/FS/FS/cust_pay.pm @@ -116,6 +116,10 @@ books closed flag, empty or `Y' 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. @@ -539,6 +543,7 @@ sub check { || $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') diff --git a/httemplate/edit/cust_pay.cgi b/httemplate/edit/cust_pay.cgi index 888335fbb..5d74365e7 100755 --- a/httemplate/edit/cust_pay.cgi +++ b/httemplate/edit/cust_pay.cgi @@ -87,15 +87,17 @@ <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> diff --git a/httemplate/edit/process/cust_pay-no_auto_apply.cgi b/httemplate/edit/process/cust_pay-no_auto_apply.cgi new file mode 100644 index 000000000..ccbd2d7b5 --- /dev/null +++ b/httemplate/edit/process/cust_pay-no_auto_apply.cgi @@ -0,0 +1,48 @@ +<%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> diff --git a/httemplate/edit/process/cust_pay.cgi b/httemplate/edit/process/cust_pay.cgi index a002fa181..56d3f2ff1 100755 --- a/httemplate/edit/process/cust_pay.cgi +++ b/httemplate/edit/process/cust_pay.cgi @@ -50,6 +50,7 @@ else { 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 diff --git a/httemplate/misc/batch-cust_pay.html b/httemplate/misc/batch-cust_pay.html index 3b0ebc112..9f2540cc7 100644 --- a/httemplate/misc/batch-cust_pay.html +++ b/httemplate/misc/batch-cust_pay.html @@ -461,6 +461,16 @@ push @footer, ''; 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'; diff --git a/httemplate/misc/process/batch-cust_pay.cgi b/httemplate/misc/process/batch-cust_pay.cgi index bb4b9733c..ff7886239 100644 --- a/httemplate/misc/process/batch-cust_pay.cgi +++ b/httemplate/misc/process/batch-cust_pay.cgi @@ -40,6 +40,7 @@ foreach my $row ( map /^custnum(\d+)$/, keys %$param ) { '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"} diff --git a/httemplate/view/cust_main/payment_history/payment.html b/httemplate/view/cust_main/payment_history/payment.html index 4ec9271ef..bf88a6607 100644 --- a/httemplate/view/cust_main/payment_history/payment.html +++ b/httemplate/view/cust_main/payment_history/payment.html @@ -9,6 +9,7 @@ my $date_format = $opt{'date_format'} || '%m/%d/%Y'; 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"; @@ -50,39 +51,14 @@ if ( scalar(@cust_bill_pay) == 0 $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 { @@ -101,40 +77,59 @@ if ( scalar(@cust_bill_pay) == 0 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'), diff --git a/rt/etc/initialdata b/rt/etc/initialdata index 9b2af3744..96255b5ed 100644 --- a/rt/etc/initialdata +++ b/rt/etc/initialdata @@ -247,16 +247,16 @@ }, #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', + #}, ); diff --git a/rt/etc/upgrade/4.0-customfield-checkbox-extension b/rt/etc/upgrade/4.0-customfield-checkbox-extension index dc8904e43..a83ac3e14 100755 --- a/rt/etc/upgrade/4.0-customfield-checkbox-extension +++ b/rt/etc/upgrade/4.0-customfield-checkbox-extension @@ -53,7 +53,7 @@ use warnings; use lib "/opt/rt3/local/lib"; use lib "/opt/rt3/lib"; -use RT -init +use RT -init; $| = 1; diff --git a/rt/etc/upgrade/upgrade-articles b/rt/etc/upgrade/upgrade-articles index 6ff4a2a13..a3852dfb3 100755 --- a/rt/etc/upgrade/upgrade-articles +++ b/rt/etc/upgrade/upgrade-articles @@ -56,8 +56,8 @@ use lib "/opt/rt3/lib"; 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; diff --git a/rt/lib/RT/Action.pm b/rt/lib/RT/Action.pm index 1740b1d66..5c295cb8b 100755 --- a/rt/lib/RT/Action.pm +++ b/rt/lib/RT/Action.pm @@ -172,17 +172,6 @@ sub Prepare { } -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; diff --git a/rt/lib/RT/Action/CreateTickets.pm b/rt/lib/RT/Action/CreateTickets.pm index 03bc21255..d19f152d0 100644 --- a/rt/lib/RT/Action/CreateTickets.pm +++ b/rt/lib/RT/Action/CreateTickets.pm @@ -733,7 +733,6 @@ sub ParseLines { FinalPriority => $args{'finalpriority'} || 0, SquelchMailTo => $args{'squelchmailto'}, Type => $args{'type'}, - $self->Rules ); if ( $args{content} ) { @@ -1140,7 +1139,10 @@ sub UpdateCustomFields { } 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 @@ -1214,24 +1216,6 @@ sub PostProcess { } -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; diff --git a/rt/lib/RT/Condition.pm b/rt/lib/RT/Condition.pm index bd495db76..69aaf8664 100755 --- a/rt/lib/RT/Condition.pm +++ b/rt/lib/RT/Condition.pm @@ -193,19 +193,6 @@ sub IsApplicable { 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; diff --git a/rt/lib/RT/Condition/CustomFieldChange.pm b/rt/lib/RT/Condition/CustomFieldChange.pm deleted file mode 100644 index b9228a50f..000000000 --- a/rt/lib/RT/Condition/CustomFieldChange.pm +++ /dev/null @@ -1,56 +0,0 @@ -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; - diff --git a/rt/lib/RT/Scrip.pm b/rt/lib/RT/Scrip.pm index eedd4060f..5bd86e0d7 100755 --- a/rt/lib/RT/Scrip.pm +++ b/rt/lib/RT/Scrip.pm @@ -113,8 +113,6 @@ sub Create { CustomPrepareCode => undef, CustomCommitCode => undef, CustomIsApplicableCode => undef, - ConditionRules => undef, - ActionRules => undef, @_ ); @@ -198,8 +196,6 @@ sub Create { CustomPrepareCode => $args{'CustomPrepareCode'}, CustomCommitCode => $args{'CustomCommitCode'}, CustomIsApplicableCode => $args{'CustomIsApplicableCode'}, - ConditionRules => $args{'ConditionRules'}, - ActionRules => $args{'ActionRules'}, ); return ( $id, $msg ) unless $id; diff --git a/rt/share/html/Admin/Elements/EditScrip b/rt/share/html/Admin/Elements/EditScrip deleted file mode 100755 index defe09b01..000000000 --- a/rt/share/html/Admin/Elements/EditScrip +++ /dev/null @@ -1,262 +0,0 @@ -%# 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> diff --git a/rt/share/html/Admin/Elements/EditScripOptions b/rt/share/html/Admin/Elements/EditScripOptions deleted file mode 100644 index 264ca3a20..000000000 --- a/rt/share/html/Admin/Elements/EditScripOptions +++ /dev/null @@ -1,48 +0,0 @@ -% 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> diff --git a/rt/share/html/Admin/Elements/SelectScripAction b/rt/share/html/Admin/Elements/SelectScripAction index 88c2f2035..395a1a353 100755 --- a/rt/share/html/Admin/Elements/SelectScripAction +++ b/rt/share/html/Admin/Elements/SelectScripAction @@ -45,10 +45,7 @@ %# 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> diff --git a/rt/share/html/Admin/Elements/SelectScripCondition b/rt/share/html/Admin/Elements/SelectScripCondition index ae663c764..2cc5bc9c7 100755 --- a/rt/share/html/Admin/Elements/SelectScripCondition +++ b/rt/share/html/Admin/Elements/SelectScripCondition @@ -45,10 +45,7 @@ %# 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> |