diff options
author | Mark Wells <mark@freeside.biz> | 2014-04-30 22:35:23 -0700 |
---|---|---|
committer | Mark Wells <mark@freeside.biz> | 2014-04-30 22:35:23 -0700 |
commit | 472f6aedda5898e6e0ab2b78a492d8e8e5c7cf93 (patch) | |
tree | 7e222e10a8f36fe2caff02f04ecdaf49d1fcbbda | |
parent | f064b8593fa93cd8c55618c63d6bba4a0c542cbf (diff) |
billing event conditions on original package setup date, #25528
-rw-r--r-- | FS/FS/part_event/Condition/pkg_age_Common.pm | 21 |
1 files 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; |