Merge branch 'master' of git.freeside.biz:/home/git/freeside
authorIvan Kohler <ivan@freeside.biz>
Tue, 14 Jul 2015 05:24:39 +0000 (22:24 -0700)
committerIvan Kohler <ivan@freeside.biz>
Tue, 14 Jul 2015 05:24:39 +0000 (22:24 -0700)
23 files changed:
FS/FS/ConfDefaults.pm
FS/FS/Schema.pm
FS/FS/cust_bill.pm
FS/FS/cust_main/Billing.pm
FS/FS/cust_pay.pm
httemplate/edit/cust_pay.cgi
httemplate/edit/process/cust_pay-no_auto_apply.cgi [new file with mode: 0644]
httemplate/edit/process/cust_pay.cgi
httemplate/misc/batch-cust_pay.html
httemplate/misc/process/batch-cust_pay.cgi
httemplate/view/cust_main/payment_history/payment.html
rt/etc/initialdata
rt/etc/upgrade/4.0-customfield-checkbox-extension
rt/etc/upgrade/upgrade-articles
rt/lib/RT/Action.pm
rt/lib/RT/Action/CreateTickets.pm
rt/lib/RT/Condition.pm
rt/lib/RT/Condition/CustomFieldChange.pm [deleted file]
rt/lib/RT/Scrip.pm
rt/share/html/Admin/Elements/EditScrip [deleted file]
rt/share/html/Admin/Elements/EditScripOptions [deleted file]
rt/share/html/Admin/Elements/SelectScripAction
rt/share/html/Admin/Elements/SelectScripCondition

index 5b8399a..b24a300 100644 (file)
@@ -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',
index 24ca858..eb5f1d3 100644 (file)
@@ -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, '', '',
index db90930..5052ed1 100644 (file)
@@ -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') ) {
index 87be4e6..df7e17f 100644 (file)
@@ -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;
 
index 8b4c98a..d135599 100644 (file)
@@ -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')
index 888335f..5d74365 100755 (executable)
   <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 (file)
index 0000000..ccbd2d7
--- /dev/null
@@ -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>
index a002fa1..56d3f2f 100755 (executable)
@@ -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
index 3b0ebc1..9f2540c 100644 (file)
@@ -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';
index bb4b973..ff78862 100644 (file)
@@ -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"}
index 4ec9271..bf88a66 100644 (file)
@@ -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 .= '&nbsp;&nbsp;'.
              '<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&#8209;apply:&nbsp;'
+           .  ($cust_pay->no_auto_apply ? 'no' : 'yes')
+           .  '&nbsp;|&nbsp;'
+           .  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'),
index 9b2af37..96255b5 100644 (file)
     },
 
     #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',
+    #},
 
 );
 
index dc8904e..a83ac3e 100755 (executable)
@@ -53,7 +53,7 @@ use warnings;
 use lib "/opt/rt3/local/lib";
 use lib "/opt/rt3/lib";
 
-use RT -init
+use RT -init;
 
 $| = 1;
 
index 6ff4a2a..a3852df 100755 (executable)
@@ -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;
 
index 1740b1d..5c295cb 100755 (executable)
@@ -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;
index 03bc212..d19f152 100644 (file)
@@ -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;
index bd495db..69aaf86 100755 (executable)
@@ -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 (file)
index b9228a5..0000000
+++ /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;
-
index eedd406..5bd86e0 100755 (executable)
@@ -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 (executable)
index defe09b..0000000
+++ /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 (file)
index 264ca3a..0000000
+++ /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>
index 88c2f20..395a1a3 100755 (executable)
 %# 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>
index ae663c7..2cc5bc9 100755 (executable)
 %# 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>