summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristopher Burger <burgerc@freeside.biz>2019-01-09 12:28:19 -0500
committerChristopher Burger <burgerc@freeside.biz>2019-01-10 09:34:00 -0500
commitae6359efac06d899093f799052ef8d472effbe98 (patch)
treeff60be7c8a2e324ed67847629cb8dc1f00fd3412
parentb944b927f03a8b7d8c8978e6adb1ae0251d1295f (diff)
RT# 81249 - added ability to validate price plan option fields
-rw-r--r--FS/FS/part_pkg.pm8
-rw-r--r--FS/FS/part_pkg/voip_cdr.pm4
-rw-r--r--FS/FS/part_pkg/voip_inbound.pm4
-rw-r--r--httemplate/edit/elements/edit.html12
-rwxr-xr-xhttemplate/edit/part_pkg.cgi10
5 files changed, 38 insertions, 0 deletions
diff --git a/FS/FS/part_pkg.pm b/FS/FS/part_pkg.pm
index c088205..1895404 100644
--- a/FS/FS/part_pkg.pm
+++ b/FS/FS/part_pkg.pm
@@ -693,6 +693,14 @@ sub replace {
'';
}
+sub validate_number {
+ my ($option, $valref) = @_;
+ $$valref = 0 unless $$valref;
+ return "Invalid $option"
+ unless ($$valref) = ($$valref =~ /^\s*(\d+)\s*$/);
+ return '';
+}
+
=item check
Checks all fields to make sure this is a valid package definition. If
diff --git a/FS/FS/part_pkg/voip_cdr.pm b/FS/FS/part_pkg/voip_cdr.pm
index 49e43e9..715d5c0 100644
--- a/FS/FS/part_pkg/voip_cdr.pm
+++ b/FS/FS/part_pkg/voip_cdr.pm
@@ -166,9 +166,13 @@ tie my %accountcode_tollfree_field, 'Tie::IxHash',
},
'use_cdrtypenum' => { 'name' => 'Only charge for CDRs where the CDR Type is set to this cdrtypenum: ',
+ 'validate' => \&FS::part_pkg::validate_number,
+ 'js_validate' => 'digits',
},
'ignore_cdrtypenum' => { 'name' => 'Do not charge for CDRs where the CDR Type is set to this cdrtypenum: ',
+ 'validate' => \&FS::part_pkg::validate_number,
+ 'js_validate' => 'digits',
},
'use_calltypenum' => { 'name' => 'Only charge for CDRs where the CDR Call Type is set to this calltypenum: ',
diff --git a/FS/FS/part_pkg/voip_inbound.pm b/FS/FS/part_pkg/voip_inbound.pm
index 1cfa31b..45a7428 100644
--- a/FS/FS/part_pkg/voip_inbound.pm
+++ b/FS/FS/part_pkg/voip_inbound.pm
@@ -64,9 +64,13 @@ tie my %granularity, 'Tie::IxHash', FS::rate_detail::granularities();
},
'use_cdrtypenum' => { 'name' => 'Only charge for CDRs where the CDR Type is set to this cdrtypenum: ',
+ 'validate' => \&FS::part_pkg::validate_number,
+ 'js_validate' => 'digits',
},
'ignore_cdrtypenum' => { 'name' => 'Do not charge for CDRs where the CDR Type is set to this cdrtypenum: ',
+ 'validate' => \&FS::part_pkg::validate_number,
+ 'js_validate' => 'digits',
},
'use_calltypenum' => { 'name' => 'Only charge for CDRs where the CDR Call Type is set to this cdrtypenum: ',
diff --git a/httemplate/edit/elements/edit.html b/httemplate/edit/elements/edit.html
index 1d9930a..819b8bd 100644
--- a/httemplate/edit/elements/edit.html
+++ b/httemplate/edit/elements/edit.html
@@ -820,6 +820,18 @@ Example:
: $opt{'html_bottom'}
%>
+% ## set extra field values for validation. ie price plan fields
+% my $extra_fields_to_validate = $opt{'extra_fields_validate'};
+% my %validate_error_messages = (
+% 'digits' => 'Please only enter numbers here.',
+% 'email' => 'Please enter a valid email here.',
+% );
+% foreach my $extra_fields (keys %$extra_fields_to_validate) {
+% my $validate_type = $extra_fields_to_validate->{$extra_fields};
+% $js_form_validate->{edit_topform}->{validate_fields}{$extra_fields} = $validate_type.': true';
+% $js_form_validate->{edit_topform}->{error_message}{$extra_fields} = $validate_error_messages{$validate_type};
+% }
+
% unless ($opt{'embed'}) {
<BR>
diff --git a/httemplate/edit/part_pkg.cgi b/httemplate/edit/part_pkg.cgi
index 5038207..8257fa2 100755
--- a/httemplate/edit/part_pkg.cgi
+++ b/httemplate/edit/part_pkg.cgi
@@ -12,6 +12,7 @@
include('/elements/init_calendar.html').
$javascript,
'html_bottom' => $html_bottom,
+ 'extra_fields_validate' => $validate_priceplan_fields,
'body_etc' =>
'onLoad="agent_changed(document.edit_topform.agentnum);
aux_planchanged(document.edit_topform.plan);
@@ -909,6 +910,15 @@ tie my %plan_labels, 'Tie::IxHash',
map { $_ => ( $plans{$_}->{'shortname'} || $plans{$_}->{'name'} ) }
keys %plans;
+my $validate_priceplan_fields = {};
+foreach my $priceplan (keys %plans) {
+ my $plan_fields = $plans{$priceplan}->{fields};
+ foreach my $price_plan_field (keys %$plan_fields) {
+ $validate_priceplan_fields->{$priceplan."__".$price_plan_field} = $plan_fields->{$price_plan_field}->{"js_validate"}
+ if exists $plan_fields->{$price_plan_field}->{"js_validate"};
+ }
+}
+
my $html_bottom = sub {
my( $object ) = @_;