[freeside-commits] branch FREESIDE_3_BRANCH updated. 5a1c7ce42856c68811fca96c7597efebdab48434

Ivan Kohler ivan at freeside.biz
Thu Sep 13 13:10:56 PDT 2018


The branch, FREESIDE_3_BRANCH has been updated
       via  5a1c7ce42856c68811fca96c7597efebdab48434 (commit)
       via  cced221275ae4924d3eb6e56f5746adebdc3fe61 (commit)
       via  e57a68b492b2f3f78969333d7b3a8af9fa9b1b12 (commit)
      from  d7b4beaeb975c55f5203aef275c7c01853fa51f2 (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 5a1c7ce42856c68811fca96c7597efebdab48434
Author: Ivan Kohler <ivan at freeside.biz>
Date:   Thu Sep 13 13:02:25 2018 -0700

    Optimize "Customer has a referring customer" condition, RT#74452

diff --git a/FS/FS/part_event/Condition.pm b/FS/FS/part_event/Condition.pm
index d1d519683..9900acaa9 100644
--- a/FS/FS/part_event/Condition.pm
+++ b/FS/FS/part_event/Condition.pm
@@ -533,6 +533,22 @@ sub condition_sql_option_integer {
        " AS $integer )";
 }
 
+=item condition_sql_option_money OPTION
+
+As I<condition_sql_option>, but cast the option value to DECIMAL so that
+comparison to other monetary values is type-correct.
+
+=cut
+
+sub condition_sql_option_money {
+  my ($class, $option ) = @_;
+
+  'CAST(
+         COALESCE('. $class->condition_sql_option($option).
+                " ,'0') ".
+       " AS DECIMAL(10,2) )";
+}
+
 =head1 NEW CONDITION CLASSES
 
 A module should be added in FS/FS/part_event/Condition/ which implements the
diff --git a/FS/FS/part_event/Condition/has_referral_custnum.pm b/FS/FS/part_event/Condition/has_referral_custnum.pm
index 007ce4548..a56e3faec 100644
--- a/FS/FS/part_event/Condition/has_referral_custnum.pm
+++ b/FS/FS/part_event/Condition/has_referral_custnum.pm
@@ -60,19 +60,20 @@ sub condition {
 sub condition_sql {
   my( $class, $table, %opt ) = @_;
 
+  my $active_sql = FS::cust_main->active_sql;
+  $active_sql =~ s/cust_main.custnum/cust_main.referral_custnum/;
+
+  my $under = $class->condition_sql_option_money('balance');
+
   my $age = $class->condition_sql_option_age_from('age', $opt{'time'});
-  my $balance_sql      = FS::cust_main->balance_sql( $age );
-  my $balance_date_sql = FS::cust_main->balance_date_sql;
-  my $active_sql       = FS::cust_main->active_sql;
-  $balance_sql      =~ s/cust_main.custnum/cust_main.referral_custnum/;
+  my $balance_date_sql = FS::cust_main->balance_date_sql($age);
   $balance_date_sql =~ s/cust_main.custnum/cust_main.referral_custnum/;
-  $active_sql       =~ s/cust_main.custnum/cust_main.referral_custnum/;
-
-  my $sql = "cust_main.referral_custnum IS NOT NULL".
-    " AND (".$class->condition_sql_option('active')." IS NULL OR $active_sql)".
-    " AND ($balance_date_sql <= $balance_sql)";
+  my $bal_sql = "$balance_date_sql <= $under";
 
-  return $sql;
+  "cust_main.referral_custnum IS NOT NULL
+    AND (". $class->condition_sql_option('active').    " IS NULL OR $active_sql)
+    AND (". $class->condition_sql_option('check_bal'). " IS NULL OR $bal_sql   )
+  ";
 }
 
 1;

commit cced221275ae4924d3eb6e56f5746adebdc3fe61
Author: Nick Logan <nick at freeside.biz>
Date:   Fri Nov 3 17:46:29 2017 +0000

    RT# 74452 - address code format change request
    
     - Wrap at col 80 for new code
     - Use the more familiar destructive search-and-replace instead of
       the non-destructive inline search and replace (s///r) from 5.14.
     - Explicitly return.

diff --git a/FS/FS/part_event/Condition/has_referral_custnum.pm b/FS/FS/part_event/Condition/has_referral_custnum.pm
index 564c6524b..007ce4548 100644
--- a/FS/FS/part_event/Condition/has_referral_custnum.pm
+++ b/FS/FS/part_event/Condition/has_referral_custnum.pm
@@ -1,6 +1,5 @@
 package FS::part_event::Condition::has_referral_custnum;
 
-use v5.14;
 use strict;
 use FS::cust_main;
 
@@ -61,14 +60,19 @@ sub condition {
 sub condition_sql {
   my( $class, $table, %opt ) = @_;
 
-  my $age              = $class->condition_sql_option_age_from('age', $opt{'time'});
-  my $balance_sql      = FS::cust_main->balance_sql( $age ) =~ s/cust_main.custnum/cust_main.referral_custnum/r;
-  my $balance_date_sql = FS::cust_main->balance_date_sql    =~ s/cust_main.custnum/cust_main.referral_custnum/r;
-  my $active_sql       = FS::cust_main->active_sql          =~ s/cust_main.custnum/cust_main.referral_custnum/r;
+  my $age = $class->condition_sql_option_age_from('age', $opt{'time'});
+  my $balance_sql      = FS::cust_main->balance_sql( $age );
+  my $balance_date_sql = FS::cust_main->balance_date_sql;
+  my $active_sql       = FS::cust_main->active_sql;
+  $balance_sql      =~ s/cust_main.custnum/cust_main.referral_custnum/;
+  $balance_date_sql =~ s/cust_main.custnum/cust_main.referral_custnum/;
+  $active_sql       =~ s/cust_main.custnum/cust_main.referral_custnum/;
 
   my $sql = "cust_main.referral_custnum IS NOT NULL".
-    " AND ( ". $class->condition_sql_option('active') . " IS NULL OR $active_sql )".
-    " AND ( $balance_date_sql <= $balance_sql )";
+    " AND (".$class->condition_sql_option('active')." IS NULL OR $active_sql)".
+    " AND ($balance_date_sql <= $balance_sql)";
+
+  return $sql;
 }
 
 1;

commit e57a68b492b2f3f78969333d7b3a8af9fa9b1b12
Author: Nick Logan <nick at freeside.biz>
Date:   Wed Nov 1 15:56:29 2017 +0000

    RT# 74452 Optimize referral billing event condition

diff --git a/FS/FS/part_event/Condition/has_referral_custnum.pm b/FS/FS/part_event/Condition/has_referral_custnum.pm
index f8a2b82ee..564c6524b 100644
--- a/FS/FS/part_event/Condition/has_referral_custnum.pm
+++ b/FS/FS/part_event/Condition/has_referral_custnum.pm
@@ -1,5 +1,6 @@
 package FS::part_event::Condition::has_referral_custnum;
 
+use v5.14;
 use strict;
 use FS::cust_main;
 
@@ -57,16 +58,17 @@ sub condition {
 
 }
 
-#this is incomplete wrt checking referring customer balances, but that's okay.
-# false positives are acceptable here, its just an optimizaiton
 sub condition_sql {
-  my( $class, $table ) = @_;
+  my( $class, $table, %opt ) = @_;
 
-  my $sql = FS::cust_main->active_sql;
-  $sql =~ s/cust_main.custnum/cust_main.referral_custnum/;
-  $sql = 'cust_main.referral_custnum IS NOT NULL AND ('.
-          $class->condition_sql_option('active') . ' IS NULL OR '.$sql.')';
-  return $sql;
+  my $age              = $class->condition_sql_option_age_from('age', $opt{'time'});
+  my $balance_sql      = FS::cust_main->balance_sql( $age ) =~ s/cust_main.custnum/cust_main.referral_custnum/r;
+  my $balance_date_sql = FS::cust_main->balance_date_sql    =~ s/cust_main.custnum/cust_main.referral_custnum/r;
+  my $active_sql       = FS::cust_main->active_sql          =~ s/cust_main.custnum/cust_main.referral_custnum/r;
+
+  my $sql = "cust_main.referral_custnum IS NOT NULL".
+    " AND ( ". $class->condition_sql_option('active') . " IS NULL OR $active_sql )".
+    " AND ( $balance_date_sql <= $balance_sql )";
 }
 
 1;

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

Summary of changes:
 FS/FS/part_event/Condition.pm                      | 16 +++++++++++++++
 FS/FS/part_event/Condition/has_referral_custnum.pm | 23 ++++++++++++++--------
 2 files changed, 31 insertions(+), 8 deletions(-)




More information about the freeside-commits mailing list