Always ensure next_run is calculated from the time the scheduler was last run, not when the scheduler was restarted.

This commit is contained in:
David Bomba 2023-01-18 10:39:01 +11:00
parent 368006f63f
commit 6b2ca2dfb2
3 changed files with 15 additions and 15 deletions

View File

@ -119,40 +119,40 @@ class SchedulerService
switch ($this->scheduler->frequency_id) { switch ($this->scheduler->frequency_id) {
case RecurringInvoice::FREQUENCY_DAILY: case RecurringInvoice::FREQUENCY_DAILY:
$next_run = Carbon::parse($this->scheduler->next_run)->startOfDay()->addDay(); $next_run = now()->startOfDay()->addDay();
break; break;
case RecurringInvoice::FREQUENCY_WEEKLY: case RecurringInvoice::FREQUENCY_WEEKLY:
$next_run = Carbon::parse($this->scheduler->next_run)->startOfDay()->addWeek(); $next_run = now()->startOfDay()->addWeek();
break; break;
case RecurringInvoice::FREQUENCY_TWO_WEEKS: case RecurringInvoice::FREQUENCY_TWO_WEEKS:
$next_run = Carbon::parse($this->scheduler->next_run)->startOfDay()->addWeeks(2); $next_run = now()->startOfDay()->addWeeks(2);
break; break;
case RecurringInvoice::FREQUENCY_FOUR_WEEKS: case RecurringInvoice::FREQUENCY_FOUR_WEEKS:
$next_run = Carbon::parse($this->scheduler->next_run)->startOfDay()->addWeeks(4); $next_run = now()->startOfDay()->addWeeks(4);
break; break;
case RecurringInvoice::FREQUENCY_MONTHLY: case RecurringInvoice::FREQUENCY_MONTHLY:
$next_run = Carbon::parse($this->scheduler->next_run)->startOfDay()->addMonthNoOverflow(); $next_run = now()->startOfDay()->addMonthNoOverflow();
break; break;
case RecurringInvoice::FREQUENCY_TWO_MONTHS: case RecurringInvoice::FREQUENCY_TWO_MONTHS:
$next_run = Carbon::parse($this->scheduler->next_run)->startOfDay()->addMonthsNoOverflow(2); $next_run = now()->startOfDay()->addMonthsNoOverflow(2);
break; break;
case RecurringInvoice::FREQUENCY_THREE_MONTHS: case RecurringInvoice::FREQUENCY_THREE_MONTHS:
$next_run = Carbon::parse($this->scheduler->next_run)->startOfDay()->addMonthsNoOverflow(3); $next_run = now()->startOfDay()->addMonthsNoOverflow(3);
break; break;
case RecurringInvoice::FREQUENCY_FOUR_MONTHS: case RecurringInvoice::FREQUENCY_FOUR_MONTHS:
$next_run = Carbon::parse($this->scheduler->next_run)->startOfDay()->addMonthsNoOverflow(4); $next_run = now()->startOfDay()->addMonthsNoOverflow(4);
break; break;
case RecurringInvoice::FREQUENCY_SIX_MONTHS: case RecurringInvoice::FREQUENCY_SIX_MONTHS:
$next_run = Carbon::parse($this->scheduler->next_run)->startOfDay()->addMonthsNoOverflow(6); $next_run = now()->startOfDay()->addMonthsNoOverflow(6);
break; break;
case RecurringInvoice::FREQUENCY_ANNUALLY: case RecurringInvoice::FREQUENCY_ANNUALLY:
$next_run = Carbon::parse($this->scheduler->next_run)->startOfDay()->addYear(); $next_run = now()->startOfDay()->addYear();
break; break;
case RecurringInvoice::FREQUENCY_TWO_YEARS: case RecurringInvoice::FREQUENCY_TWO_YEARS:
$next_run = Carbon::parse($this->scheduler->next_run)->startOfDay()->addYears(2); $next_run = now()->startOfDay()->addYears(2);
break; break;
case RecurringInvoice::FREQUENCY_THREE_YEARS: case RecurringInvoice::FREQUENCY_THREE_YEARS:
$next_run = Carbon::parse($this->scheduler->next_run)->startOfDay()->addYears(3); $next_run = now()->startOfDay()->addYears(3);
break; break;
default: default:
$next_run = null; $next_run = null;

View File

@ -32,7 +32,7 @@ class SchedulerFactory extends Factory
'frequency_id' => RecurringInvoice::FREQUENCY_MONTHLY, 'frequency_id' => RecurringInvoice::FREQUENCY_MONTHLY,
'next_run' => now()->addSeconds(rand(86400,8640000)), 'next_run' => now()->addSeconds(rand(86400,8640000)),
'next_run_client' => now()->addSeconds(rand(86400,8640000)), 'next_run_client' => now()->addSeconds(rand(86400,8640000)),
'template' => 'statement_task', 'template' => 'client_statement',
]; ];
} }
} }

View File

@ -229,7 +229,7 @@ class SchedulerTest extends TestCase
$data = [ $data = [
'name' => 'A test statement scheduler', 'name' => 'A test statement scheduler',
'frequency_id' => RecurringInvoice::FREQUENCY_MONTHLY, 'frequency_id' => RecurringInvoice::FREQUENCY_MONTHLY,
'next_run' => "2023-01-01", 'next_run' => now()->format('Y-m-d'),
'template' => 'client_statement', 'template' => 'client_statement',
'parameters' => [ 'parameters' => [
'date_range' => 'previous_month', 'date_range' => 'previous_month',
@ -251,7 +251,7 @@ class SchedulerTest extends TestCase
$scheduler->fresh(); $scheduler->fresh();
$this->assertEquals("2023-02-01", $scheduler->next_run->format('Y-m-d')); $this->assertEquals(now()->addMonth()->format('Y-m-d'), $scheduler->next_run->format('Y-m-d'));
} }