better error handling when a package change fails, RT#78504
[freeside.git] / FS / FS / Cron / bill.pm
index 807d5cf..caedcd3 100644 (file)
@@ -123,7 +123,7 @@ sub bill {
             'priority' => 99, #don't get in the way of provisioning jobs
           };
           my $error = $queue->insert( 'custnum'=>$custnum, %args );
-
+          die $error if $error;
         }
 
       } else {
@@ -132,7 +132,12 @@ sub bill {
         if ( $disable_bill ) {
           $cust_main->collect( %args, 'debug' => $debug );
         } else {
-          $cust_main->bill_and_collect( %args, 'debug' => $debug );
+          my $error = $cust_main->bill_and_collect( %args, 'fatal' => 'return',
+                                                           'debug' => $debug, );
+          if ( $error ) {
+            $log->error($error);
+            warn $error; #die $error;
+          }
         }
 
       }
@@ -210,6 +215,8 @@ sub bill_where {
   my $conf = new FS::Conf;
   my $billtime = $conf->exists('next-bill-ignore-time') ? day_end($time) : $time;
 
+  # corresponds to perl checks in FS::cust_main::Billing sub bill
+  #  ("bill setup" and "bill recurring fee")
   # select * from cust_main where
   my $where_pkg = <<"END";
     EXISTS(
@@ -218,7 +225,7 @@ sub bill_where {
           AND ( cancel IS NULL OR cancel = 0 )
           AND (    ( ( cust_pkg.setup IS NULL OR cust_pkg.setup =  0 )
                      AND ( start_date IS NULL OR start_date = 0
-                           OR ( start_date IS NOT NULL AND start_date <= $^T )
+                           OR ( start_date IS NOT NULL AND start_date <= $billtime )
                          )
                    )
                 OR ( freq != '0' AND ( bill IS NULL OR bill  <= $billtime ) )
@@ -234,7 +241,8 @@ END
     my $eventtable = $_;
 
     # joins and where clauses to test event conditions
-    my $join  = FS::part_event_condition->join_conditions_sql(  $eventtable );
+    my $join  = FS::part_event_condition->join_conditions_sql(  $eventtable,
+                                                                'time'=>$time );
     my $where = FS::part_event_condition->where_conditions_sql( $eventtable,
                                                                 'time'=>$time,
                                                               );