From 719e8f45844d5ebc81f14c25258b4c0b0448910e Mon Sep 17 00:00:00 2001 From: Mark Wells Date: Wed, 30 Apr 2014 22:35:37 -0700 Subject: [PATCH] billing event conditions on original package setup date, #25528 --- FS/FS/part_event/Condition/pkg_age_Common.pm | 21 ++++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/FS/FS/part_event/Condition/pkg_age_Common.pm b/FS/FS/part_event/Condition/pkg_age_Common.pm index 33e49b8a6..2e0e539ff 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; -- 2.11.0