summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorivan <ivan>2010-04-30 02:32:39 +0000
committerivan <ivan>2010-04-30 02:32:39 +0000
commit6873aec01740ea7c70a5e20a3f3bce6e76bca410 (patch)
tree64298627d0396ab78310ce9f5059665a5f8c1bdd
parent2ac302e18d723563692cdbbd74f3e9e5331a3014 (diff)
communigate (phase 2): rules: show conditions/actions on rule browse, fix rule edit for conditions and actions without op/param, fix rule edit stickiness on errors. RT#7514
-rw-r--r--FS/FS/Mason.pm2
-rw-r--r--FS/FS/Schema.pm18
-rw-r--r--FS/FS/cgp_rule_action.pm2
-rw-r--r--FS/FS/cgp_rule_condition.pm4
-rw-r--r--httemplate/browse/cgp_rule.html40
-rw-r--r--httemplate/edit/cgp_rule.html58
-rw-r--r--httemplate/elements/select-cgp_rule_action.html8
-rw-r--r--httemplate/elements/select-cgp_rule_condition.html8
8 files changed, 115 insertions, 25 deletions
diff --git a/FS/FS/Mason.pm b/FS/FS/Mason.pm
index 41c472d..9ac9f67 100644
--- a/FS/FS/Mason.pm
+++ b/FS/FS/Mason.pm
@@ -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 ) {
diff --git a/FS/FS/Schema.pm b/FS/FS/Schema.pm
index dcd618d..07e5b30 100644
--- a/FS/FS/Schema.pm
+++ b/FS/FS/Schema.pm
@@ -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' => [],
diff --git a/FS/FS/cgp_rule_action.pm b/FS/FS/cgp_rule_action.pm
index 6dfd424..170ab58 100644
--- a/FS/FS/cgp_rule_action.pm
+++ b/FS/FS/cgp_rule_action.pm
@@ -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;
diff --git a/FS/FS/cgp_rule_condition.pm b/FS/FS/cgp_rule_condition.pm
index f91b3e6..cfb6710 100644
--- a/FS/FS/cgp_rule_condition.pm
+++ b/FS/FS/cgp_rule_condition.pm
@@ -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;
diff --git a/httemplate/browse/cgp_rule.html b/httemplate/browse/cgp_rule.html
index 3bf4d69..ea11d62 100644
--- a/httemplate/browse/cgp_rule.html
+++ b/httemplate/browse/cgp_rule.html
@@ -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
diff --git a/httemplate/edit/cgp_rule.html b/httemplate/edit/cgp_rule.html
index adf993f..d9c19a1 100644
--- a/httemplate/edit/cgp_rule.html
+++ b/httemplate/edit/cgp_rule.html
@@ -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 ) = @_;
@@ -48,7 +46,57 @@
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>
diff --git a/httemplate/elements/select-cgp_rule_action.html b/httemplate/elements/select-cgp_rule_action.html
index 9ac9306..7cefdc4 100644
--- a/httemplate/elements/select-cgp_rule_action.html
+++ b/httemplate/elements/select-cgp_rule_action.html
@@ -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>
diff --git a/httemplate/elements/select-cgp_rule_condition.html b/httemplate/elements/select-cgp_rule_condition.html
index 0c305d9..622cbe8 100644
--- a/httemplate/elements/select-cgp_rule_condition.html
+++ b/httemplate/elements/select-cgp_rule_condition.html
@@ -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' : '';