X-Git-Url: http://git.freeside.biz/gitweb/?a=blobdiff_plain;f=FS%2FFS%2Fpart_event%2FCondition%2Fpkg_age_Common.pm;h=2e0e539ff07fddbdce277274f84cac0385995867;hb=d5988a9f7a3617de33da3058f2e9f1151b24420e;hp=726b01d70b6c54109216dfe82758911c6de0702b;hpb=d29b455cf176358089f98e2970beaab88195bc62;p=freeside.git diff --git a/FS/FS/part_event/Condition/pkg_age_Common.pm b/FS/FS/part_event/Condition/pkg_age_Common.pm index 726b01d70..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,14 +43,23 @@ 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 ); } sub pkg_age_age { - my( $self, $cust_pkg, %opt ); + my( $self, $cust_pkg, %opt ) = @_; $self->option_age_from('age', $opt{'time'} ); } @@ -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;