RT# 81249 - added ability to validate price plan option fields
authorChristopher Burger <burgerc@freeside.biz>
Wed, 9 Jan 2019 17:28:19 +0000 (12:28 -0500)
committerChristopher Burger <burgerc@freeside.biz>
Thu, 10 Jan 2019 01:21:54 +0000 (20:21 -0500)
Conflicts:
httemplate/edit/part_pkg.cgi

FS/FS/part_pkg.pm
FS/FS/part_pkg/voip_cdr.pm
FS/FS/part_pkg/voip_inbound.pm
httemplate/edit/elements/edit.html
httemplate/edit/part_pkg.cgi
httemplate/elements/freeside.css

index cad7614..78f5dc0 100644 (file)
@@ -583,6 +583,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
index 342f272..3a63159 100644 (file)
@@ -173,9 +173,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: ',
index 6af6dc3..22ca796 100644 (file)
@@ -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: ',
index a919c03..1755a65 100644 (file)
@@ -784,6 +784,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>
index c6a442b..aa3d5ac 100755 (executable)
@@ -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);
                          hide_supp_pkgs()"',
 
            )
 %>
+
 <%init>
 
 my $curuser = $FS::CurrentUser::CurrentUser;
@@ -773,6 +775,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 ) = @_;
 
index 1e5d1e8..dde2b06 100644 (file)
@@ -317,3 +317,7 @@ td.label {
   color: #ff0000;
 }
 
+.error {
+  font-size: large;
+  color: #ff0000;
+}