[freeside-commits] branch master updated. 0549def83bcba56e53482ea0f33472e18b215649

Ivan ivan at 420.am
Tue Jan 31 18:47:42 PST 2017


The branch, master has been updated
       via  0549def83bcba56e53482ea0f33472e18b215649 (commit)
      from  ed33058882b17e252dba3bd27051daeb0773f02b (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 0549def83bcba56e53482ea0f33472e18b215649
Author: Ivan Kohler <ivan at freeside.biz>
Date:   Tue Jan 31 18:45:44 2017 -0800

    add condition_sql optimization to "Customer does not have uncancelled package of specified definitions, RT#74449

diff --git a/FS/FS/part_event/Condition/hasnt_pkgpart.pm b/FS/FS/part_event/Condition/hasnt_pkgpart.pm
index 421d023..79104eb 100644
--- a/FS/FS/part_event/Condition/hasnt_pkgpart.pm
+++ b/FS/FS/part_event/Condition/hasnt_pkgpart.pm
@@ -22,19 +22,30 @@ sub option_fields {
   );
 }
 
+#false laziness w/has_pkgpart.pm
+
 sub condition {
   my( $self, $object ) = @_;
 
   my $cust_main = $self->cust_main($object);
 
-  #XXX test
   my $unless_pkgpart = $self->option('unless_pkgpart') || {};
   ! grep $unless_pkgpart->{ $_->pkgpart }, $cust_main->ncancelled_pkgs;
 }
 
-#XXX
-#sub condition_sql {
-#
-#}
+sub condition_sql {
+  my( $self, $table ) = @_;
+
+  'NOT '.
+  'ARRAY'. $self->condition_sql_option_option_integer('unless_pkgpart').
+  ' && '. #overlap (have elements in common)
+  'ARRAY( SELECT pkgpart FROM cust_pkg AS has_pkgpart_cust_pkg
+            WHERE has_pkgpart_cust_pkg.custnum = cust_main.custnum
+              AND (    has_pkgpart_cust_pkg.cancel IS NULL
+                    OR has_pkgpart_cust_pkg.cancel = 0
+                  )
+        )
+  ';
+}
 
 1;

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

Summary of changes:
 FS/FS/part_event/Condition/hasnt_pkgpart.pm |   21 ++++++++++++++++-----
 1 file changed, 16 insertions(+), 5 deletions(-)




More information about the freeside-commits mailing list