communigate (phase 2): rules: show conditions/actions on rule browse, fix rule edit...
authorivan <ivan>
Fri, 30 Apr 2010 02:32:39 +0000 (02:32 +0000)
committerivan <ivan>
Fri, 30 Apr 2010 02:32:39 +0000 (02:32 +0000)
FS/FS/Mason.pm
FS/FS/Schema.pm
FS/FS/cgp_rule_action.pm
FS/FS/cgp_rule_condition.pm
httemplate/browse/cgp_rule.html
httemplate/edit/cgp_rule.html
httemplate/elements/select-cgp_rule_action.html
httemplate/elements/select-cgp_rule_condition.html

index 41c472d..9ac9f67 100644 (file)
@@ -235,6 +235,8 @@ if ( -e $addl_handler_use_file ) {
   use FS::cust_bill_pkg_discount;
   use FS::svc_mailinglist;
   use FS::cgp_rule;
+  use FS::cgp_rule_condition;
+  use FS::cgp_rule_action;
   # Sammath Naur
 
   if ( $FS::Mason::addl_handler_use ) {
index dcd618d..07e5b30 100644 (file)
@@ -1801,11 +1801,11 @@ sub tables_hashref {
 
     'cgp_rule_condition' => {
       'columns' => [
-        'ruleconditionnum',  'serial', '',      '', '', '',
-        'condition',        'varchar', '', $char_d, '', '',
-        'op',               'varchar', '', $char_d, '', '',
-        'params',           'varchar', '',     255, '', '',
-        'rulenum',              'int', '',      '', '', '',
+        'ruleconditionnum',  'serial',     '',      '', '', '',
+        'condition',        'varchar',     '', $char_d, '', '',
+        'op',               'varchar', 'NULL', $char_d, '', '',
+        'params',           'varchar', 'NULL',     255, '', '',
+        'rulenum',              'int',     '',      '', '', '',
       ],
       'primary_key' => 'ruleconditionnum',
       'unique'      => [],
@@ -1814,10 +1814,10 @@ sub tables_hashref {
 
     'cgp_rule_action' => {
        'columns' => [
-        'ruleactionnum',  'serial', '',      '', '', '',
-        'action',        'varchar', '', $char_d, '', '',
-        'params',        'varchar', '',     255, '', '',
-        'rulenum',           'int', '',      '', '', '',
+        'ruleactionnum',  'serial',     '',      '', '', '',
+        'action',        'varchar',     '', $char_d, '', '',
+        'params',        'varchar', 'NULL',     255, '', '',
+        'rulenum',           'int',     '',      '', '', '',
       ],
       'primary_key' => 'ruleactionnum',
       'unique'      => [],
index 6dfd424..170ab58 100644 (file)
@@ -111,7 +111,7 @@ sub check {
   my $error = 
     $self->ut_numbern('ruleactionnum')
     || $self->ut_text('action')
-    || $self->ut_text('params')
+    || $self->ut_textn('params')
     || $self->ut_foreign_key('rulenum', 'cgp_rule', 'rulenum')
   ;
   return $error if $error;
index f91b3e6..cfb6710 100644 (file)
@@ -115,8 +115,8 @@ sub check {
   my $error = 
     $self->ut_numbern('ruleconditionnum')
     || $self->ut_text('condition')
-    || $self->ut_text('op')
-    || $self->ut_text('params')
+    || $self->ut_textn('op')
+    || $self->ut_textn('params')
     || $self->ut_foreign_key('rulenum', 'cgp_rule', 'rulenum')
   ;
   return $error if $error;
index 3bf4d69..ea11d62 100644 (file)
@@ -7,13 +7,15 @@
                                   'order_by' => 'ORDER BY priority DESC',
                                 },
              'count_query'   => $count_query,
-             'header'        => [ 'Priority', 'Name', '' ],
+             'header'        => [ 'Priority', 'Name', 'Conditions', 'Actions', '' ],
              'fields'        => [ sub { shift->priority || 'Inactive'; },
                                   'name',
+                                  $condition_sub,
+                                  $action_sub,
                                   sub { 'Delete'; },
                                 ],
              #'align'
-             'links'         => [ $edit_sub, $edit_sub, $del_sub ],
+             'links'         => [ $edit_sub, $edit_sub, '', '', $del_sub ],
           )
 %>
 <%init>
@@ -40,6 +42,40 @@ my $html_init =
   qq(<A HREF="$view">View this $svc_label</A><BR><BR>).
   qq!<A HREF="${p}edit/cgp_rule.html?svcnum=$svcnum">Add new rule</A><BR><BR>!;
 
+my $condition_sub = sub {
+  my $cgp_rule = shift;
+
+  [ map {
+          [
+            { data  => $_->condition,
+              #align =>
+            },
+            { data  => $_->op,
+              align => 'center',
+            },
+            { data  => $_->params,
+              #align =>
+            },
+          ];
+        }
+        $cgp_rule->cgp_rule_condition
+  ];
+};
+
+my $action_sub = sub {
+  my $cgp_rule = shift;
+
+  [ map {
+          [
+            { data => $_->action },
+            #{ data => '<pre>'.$_->params.'</pre>' }, #gets very big.. limit to
+            { data => $_->params },                   # some actions?
+          ];
+        }
+        $cgp_rule->cgp_rule_action
+  ];
+};
+
 my $edit_sub = [ $p.'edit/cgp_rule.html?', 'rulenum' ];
 my $del_sub = [ $p.'misc/delete-cgp_rule.html?', 'rulenum' ]; #XXX javascript areyousure or something
 
index adf993f..d9c19a1 100644 (file)
@@ -23,8 +23,7 @@
                              'type'      => 'select-cgp_rule_condition',
                              'o2m_table' => 'cgp_rule_condition',
                              'm2_label'  => 'Condition',
-                             #XXX m2_error_callback
-                             'm2_error_callback' => sub {},
+                             'm2_error_callback' => $m2_error_callback_cond,
                            },
                            { 'type'      => 'tablebreak-tr-title',
                              'value'     => 'Actions',
@@ -33,8 +32,7 @@
                              'type'      => 'select-cgp_rule_action',
                              'o2m_table' => 'cgp_rule_action',
                              'm2_label'  => 'Action',
-                             #XXX m2_error_callback
-                             'm2_error_callback' => sub {},
+                             'm2_error_callback' => $m2_error_callback_action,
                            },
                          ],
              'new_callback' => sub { my( $cgi, $cgp_rule ) = @_;
 
 my %opt = @_;
 
-#my $svcnum #huh XXX
 #my $viewall_url = $p. "browse/$table.html?svcnum=$svcnum";
 
+my $m2_error_callback_cond = sub {
+  my($cgi, $object) = @_;
+
+  my @fields = qw( condition op params );
+  my @gfields = ( '', map "_$_", @fields );
+
+  map {
+        if ( /^ruleconditionnum(\d+)$/ ) {
+          my $num = $1;
+          if ( grep $cgi->param("ruleconditionnum$num$_"), @gfields ) {
+            my $x = new FS::cgp_rule_condition {
+              'ruleconditionnum' => $cgi->param("ruleconditionnum$num"),
+              map { $_ => scalar($cgi->param("ruleconditionnum${num}_$_")) } @fields,
+            };
+            $x;
+          } else {
+            ();
+          }
+        } else {
+          ();
+        }
+      }
+      $cgi->param;
+};
+
+my $m2_error_callback_action = sub {
+  my($cgi, $object) = @_;
+
+  my @fields = qw( action params );
+  my @gfields = ( '', map "_$_", @fields );
+
+  map {
+        if ( /^ruleactionnum(\d+)$/ ) {
+          my $num = $1;
+          if ( grep $cgi->param("ruleactionnum$num$_"), @gfields ) {
+            my $x = new FS::cgp_rule_condition {
+              'ruleactionnum' => $cgi->param("ruleactionnum$num"),
+              map { $_ => scalar($cgi->param("ruleactionnum${num}_$_")) } @fields,
+            };
+            $x;
+          } else {
+            ();
+          }
+        } else {
+          ();
+        }
+      }
+      $cgi->param;
+
+};
+
 </%init>
index 9ac9306..7cefdc4 100644 (file)
@@ -6,8 +6,7 @@
                   'field'      => $name.'_action',
                   'id'         => $id.'_action',
                   'options'    => \@actions,
-                  'curr_value' => scalar($cgi->param($name.'_action'))
-                                  || $cgp_rule_action->action,
+                  'curr_value' => $action,
                   'labels'     => { '' => 'Select Action' },
                   'onchange'   => $name.'_changed',
                   'style'      => 'vertical-align:top',
@@ -108,7 +107,10 @@ if ( $curr_value ) {
   $cgp_rule_action = new FS::cgp_rule_action {};
 }
 
-my $disabled = $noparam{$curr_value} ? 'DISABLED' : '';
+my $action = scalar($cgi->param($name.'_action'))
+             || $cgp_rule_action->action;
+
+my $disabled = $noparam{$action} ? 'DISABLED' : '';
 my $style = $disabled ? 'STYLE="visibility:hidden"' : '';
 
 </%init>
index 0c305d9..622cbe8 100644 (file)
@@ -6,8 +6,7 @@
                 'field'      => $name.'_condition',
                 'id'         => $id.'_condition',
                 'options'    => \@conditions,
-                'curr_value' => scalar($cgi->param($name.'_condition'))
-                                  || $cgp_rule_condition->condition,
+                'curr_value' => $condition,
                 'labels'     => { '' => 'Select Condition' },
                 'onchange'   => $name.'_changed',
             )
@@ -190,7 +189,10 @@ if ( $curr_value ) {
   $cgp_rule_condition = new FS::cgp_rule_condition {};
 }
 
-my @op = &$cond2op($curr_value);
+my $condition = scalar($cgi->param($name.'_condition'))
+                || $cgp_rule_condition->condition;
+
+my @op = &$cond2op($condition);
 
 my $disabled = scalar(@op) ? '' : 1;
 my $style = $disabled ? 'visibility:hidden' : '';