[freeside-commits] branch master updated. 7bdfc3beaa2c62b4df7e17effb791d75d6bcb9e4

Jonathan Prykop jonathan at 420.am
Mon Apr 25 14:19:47 PDT 2016


The branch, master has been updated
       via  7bdfc3beaa2c62b4df7e17effb791d75d6bcb9e4 (commit)
       via  c894ab1b3132128b297d7fb556882c1753ef80ec (commit)
      from  09aa2b55432181f5ddc6bac532b17809c530f3a9 (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
commit 7bdfc3beaa2c62b4df7e17effb791d75d6bcb9e4
Merge: c894ab1 09aa2b5
Author: Jonathan Prykop <jonathan at freeside.biz>
Date:   Mon Apr 25 16:19:25 2016 -0500

    Merge branch 'master' of git.freeside.biz:/home/git/freeside


commit c894ab1b3132128b297d7fb556882c1753ef80ec
Author: Jonathan Prykop <jonathan at freeside.biz>
Date:   Mon Apr 25 16:18:10 2016 -0500

    RT#41866: Punctuation prevented package from billing

diff --git a/FS/FS/part_pkg.pm b/FS/FS/part_pkg.pm
index 9ed623f..709e137 100644
--- a/FS/FS/part_pkg.pm
+++ b/FS/FS/part_pkg.pm
@@ -770,6 +770,32 @@ sub check {
   '';
 }
 
+=item check_options
+
+For a passed I<$options> hashref, validates any options that
+have 'validate' subroutines defined (I<$options> values might
+be altered.)  Returns error message, or empty string if valid.
+
+Invoked by L</insert> and L</replace> via the equivalent
+methods in L<FS::option_Common>.
+
+=cut
+
+sub check_options {
+  my ($self,$options) = @_;
+  foreach my $option (keys %$options) {
+    if (exists $plans{ $self->plan }->{fields}->{$option}) {
+      if (exists($plans{$self->plan}->{fields}->{$option}->{'validate'})) {
+        # pass option name for use in error message
+        # pass a reference to the $options value, so it can be cleaned up
+        my $error = &{$plans{$self->plan}->{fields}->{$option}->{'validate'}}($option,\($options->{$option}));
+        return $error if $error;
+      }
+    } # else "option does not exist" error?
+  }
+  return '';
+}
+
 =item check_pkg_svc
 
 Checks pkg_svc records as a whole (for part_svc_link dependencies).
diff --git a/FS/FS/part_pkg/global_Mixin.pm b/FS/FS/part_pkg/global_Mixin.pm
index 9faddf0..31d178d 100644
--- a/FS/FS/part_pkg/global_Mixin.pm
+++ b/FS/FS/part_pkg/global_Mixin.pm
@@ -14,16 +14,35 @@ tie my %a2billing_simultaccess, 'Tie::IxHash', (
   1 => 'Enabled',
 );
 
+# much false laziness with FS::Record::ut_money
+sub validate_moneyn {
+  my ($option, $valref) = @_;
+  if ( $$valref eq '' ) {
+    return '';
+  } elsif ( $$valref =~ /^\s*(\-)?\s*(\d*)(\.\d{1})\s*$/ ) {
+    #handle one decimal place without barfing out
+    $$valref = ( ($1||''). ($2||''). ($3.'0') ) || 0;
+  } elsif ( $$valref =~ /^\s*(\-)?\s*(\d*)(\.\d{2})?\s*$/ ) {
+    $$valref = ( ($1||''). ($2||''). ($3||'') ) || 0;
+  } else {
+    return "Illegal (money) $option: ". $$valref;
+  }
+  return '';
+}
+
+
 %info = (
   'disabled' => 1,
   'fields' => {
     'setup_fee' => { 
       'name' => 'Setup fee for this package',
       'default' => 0,
+      'validate' => \&validate_moneyn,
     },
     'recur_fee' => { 
       'name' => 'Recurring fee for this package',
       'default' => 0,
+      'validate' => \&validate_moneyn,
     },
     'unused_credit_cancel' => {
       'name' => 'Credit the customer for the unused portion of service at '.

-----------------------------------------------------------------------

Summary of changes:
 FS/FS/part_pkg.pm              |   26 ++++++++++++++++++++++++++
 FS/FS/part_pkg/global_Mixin.pm |   19 +++++++++++++++++++
 2 files changed, 45 insertions(+)




More information about the freeside-commits mailing list