add contract_end to Package age condition, RT#23171
[freeside.git] / FS / FS / part_event / Condition / pkg_age.pm
index 8b3b4c9..24a73e2 100644 (file)
@@ -23,16 +23,18 @@ sub option_fields {
                },
     'field' => { 'label'   => 'Compare date',
                  'type'    => 'select',
-                 'options' =>
-                   [qw( setup last_bill bill adjourn susp expire cancel )],
+                 'options' => [qw(
+                   setup last_bill bill adjourn susp expire cancel contract_end
+                 )],
                  'labels'  => {
-                   'setup'     => 'Setup date',
-                   'last_bill' => 'Last bill date',
-                   'bill'      => 'Next bill date',
-                   'adjourn'   => 'Adjournment date',
-                   'susp'      => 'Suspension date',
-                   'expire'    => 'Expiration date',
-                   'cancel'    => 'Cancellation date',
+                   'setup'        => 'Setup date',
+                   'last_bill'    => 'Last bill date',
+                   'bill'         => 'Next bill date',
+                   'adjourn'      => 'Adjournment date',
+                   'susp'         => 'Suspension date',
+                   'expire'       => 'Expiration date',
+                   'cancel'       => 'Cancellation date',
+                   'contract_end' => 'Contract end date',
                  },
                },
   );
@@ -49,10 +51,18 @@ sub condition {
 
 }
 
-#XXX write me for efficiency
-#sub condition_sql {
-#
-#}
+sub condition_sql {
+  my( $class, $table, %opt ) = @_;
+  my $age   = $class->condition_sql_option_age_from('age', $opt{'time'});
+  my $field = $class->condition_sql_option('field');
+#amazingly, this is actually faster 
+  my $sql = '( CASE';
+  foreach( qw(setup last_bill bill adjourn susp expire cancel) ) {
+    $sql .= " WHEN $field = '$_' THEN (cust_pkg.$_ IS NOT NULL AND cust_pkg.$_ <= $age)";
+  }
+  $sql .= ' END )';
+  return $sql;
+}
 
 1;