[freeside-commits] branch master updated. 719e8f45844d5ebc81f14c25258b4c0b0448910e

Mark Wells mark at 420.am
Wed Apr 30 22:35:41 PDT 2014


The branch, master has been updated
       via  719e8f45844d5ebc81f14c25258b4c0b0448910e (commit)
      from  ab0ab909b5861b9ee60dd3b99d3afca4574bc780 (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 719e8f45844d5ebc81f14c25258b4c0b0448910e
Author: Mark Wells <mark at freeside.biz>
Date:   Wed Apr 30 22:35:37 2014 -0700

    billing event conditions on original package setup date, #25528

diff --git a/FS/FS/part_event/Condition/pkg_age_Common.pm b/FS/FS/part_event/Condition/pkg_age_Common.pm
index 33e49b8..2e0e539 100644
--- a/FS/FS/part_event/Condition/pkg_age_Common.pm
+++ b/FS/FS/part_event/Condition/pkg_age_Common.pm
@@ -13,6 +13,7 @@ tie our %dates, 'Tie::IxHash',
   'expire'       => 'Expiration date',
   'cancel'       => 'Cancellation date',
   'contract_end' => 'Contract end date',
+  'orig_setup'   => 'Original setup date',
 ;
 
 sub eventtable_hashref {
@@ -42,7 +43,16 @@ sub condition {
 
   my $age = $self->pkg_age_age( $cust_pkg, %opt );
 
-  my $pkg_date = $cust_pkg->get( $self->option('field') );
+  my $field = $self->option('field');
+  if ( $field =~ /^orig_(\w+)$/ ) {
+    # then find the package's oldest ancestor and compare to that
+    $field = $1;
+    while ($cust_pkg->change_pkgnum) {
+      $cust_pkg = $cust_pkg->old_cust_pkg;
+    }
+  }
+
+  my $pkg_date = $cust_pkg->get( $field );
 
   $pkg_date && $self->pkg_age_compare( $pkg_date, $age );
 
@@ -64,8 +74,13 @@ sub condition_sql {
   #amazingly, this is actually faster 
   my $sql = '( CASE';
   foreach ( keys %dates ) {
-    $sql .= " WHEN $field = '$_' THEN ".
-            "  (cust_pkg.$_ IS NOT NULL AND cust_pkg.$_ $op $age)";
+    $sql .= " WHEN $field = '$_' THEN ";
+    # don't even try to handle orig_setup in here.  it's not worth it.
+    if ($_ =~ /^orig_/) {
+      $sql .= 'TRUE';
+    } else {
+      $sql .= "  (cust_pkg.$_ IS NOT NULL AND cust_pkg.$_ $op $age)";
+    }
   }
   $sql .= ' END )';
   return $sql;

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

Summary of changes:
 FS/FS/part_event/Condition/pkg_age_Common.pm |   21 ++++++++++++++++++---
 1 files changed, 18 insertions(+), 3 deletions(-)




More information about the freeside-commits mailing list