AreaInputTag: kleines Icon neben Input zum Umschalten auf Textarea
[kivitendo-erp.git] / SL / DB / Manager / BackgroundJob.pm
index 178f9d3..6212f94 100644 (file)
@@ -2,21 +2,42 @@ package SL::DB::Manager::BackgroundJob;
 
 use strict;
 
-use SL::DB::Helpers::Manager;
-use base qw(SL::DB::Helpers::Manager);
+use SL::DB::Helper::Manager;
+use base qw(SL::DB::Helper::Manager);
+
+use SL::DB::Helper::Paginated;
+use SL::DB::Helper::Sorted;
 
 sub object_class { 'SL::DB::BackgroundJob' }
 
 __PACKAGE__->make_manager_methods;
 
+sub _sort_spec {
+  return ( default => [ 'next_run_at', 1 ],
+           columns => { SIMPLE => 'ALL' } );
+}
+
 sub cleanup {
   my $class = shift;
   $class->delete_all(where => [ and => [ type => 'once', last_run_at => { lt => DateTime->now_local->subtract(days => '1') } ] ]);
 }
 
 sub get_all_need_to_run {
-  my $class = shift;
-  return $class->get_all(where => [ and => [ active => 1, next_run_at => { le => DateTime->now_local } ] ]);
+  my $class         = shift;
+
+  my $now           = DateTime->now_local;
+  my @interval_args = (and => [ type        => 'interval',
+                                active      => 1,
+                                next_run_at => { le => $now } ]);
+  my @once_args     = (and => [ type        => 'once',
+                                active      => 1,
+                                last_run_at => undef,
+                                or          => [ cron_spec   => undef,
+                                                 cron_spec   => '',
+                                                 next_run_at => undef,
+                                                 next_run_at => { le => $now } ] ]);
+
+  return $class->get_all(query => [ or => [ @interval_args, @once_args ] ]);
 }
 
 1;