[freeside-commits] branch FREESIDE_4_BRANCH updated. a0492f2b5d28bf1012d0b47c25d20891d58c4ca6

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


The branch, FREESIDE_4_BRANCH has been updated
       via  a0492f2b5d28bf1012d0b47c25d20891d58c4ca6 (commit)
       via  19bdea6731d4edb5fe419a9db657d0ce790376d4 (commit)
       via  0034719b176cf6b7508364b136825a878fc1d75e (commit)
      from  6383208b0f004ddcb26c74788595dce6673863f8 (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 a0492f2b5d28bf1012d0b47c25d20891d58c4ca6
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 19bdea6731d4edb5fe419a9db657d0ce790376d4
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 0034719b176cf6b7508364b136825a878fc1d75e
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