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) {
case RecurringInvoice::FREQUENCY_DAILY:
$next_run = Carbon::parse($this->scheduler->next_run)->startOfDay()->addDay();
$next_run = now()->startOfDay()->addDay();
break;
case RecurringInvoice::FREQUENCY_WEEKLY:
$next_run = Carbon::parse($this->scheduler->next_run)->startOfDay()->addWeek();
$next_run = now()->startOfDay()->addWeek();
break;
case RecurringInvoice::FREQUENCY_TWO_WEEKS:
$next_run = Carbon::parse($this->scheduler->next_run)->startOfDay()->addWeeks(2);
$next_run = now()->startOfDay()->addWeeks(2);
break;
case RecurringInvoice::FREQUENCY_FOUR_WEEKS:
$next_run = Carbon::parse($this->scheduler->next_run)->startOfDay()->addWeeks(4);
$next_run = now()->startOfDay()->addWeeks(4);
break;
case RecurringInvoice::FREQUENCY_MONTHLY:
$next_run = Carbon::parse($this->scheduler->next_run)->startOfDay()->addMonthNoOverflow();
$next_run = now()->startOfDay()->addMonthNoOverflow();
break;
case RecurringInvoice::FREQUENCY_TWO_MONTHS:
$next_run = Carbon::parse($this->scheduler->next_run)->startOfDay()->addMonthsNoOverflow(2);
$next_run = now()->startOfDay()->addMonthsNoOverflow(2);
break;
case RecurringInvoice::FREQUENCY_THREE_MONTHS:
$next_run = Carbon::parse($this->scheduler->next_run)->startOfDay()->addMonthsNoOverflow(3);
$next_run = now()->startOfDay()->addMonthsNoOverflow(3);
break;
case RecurringInvoice::FREQUENCY_FOUR_MONTHS:
$next_run = Carbon::parse($this->scheduler->next_run)->startOfDay()->addMonthsNoOverflow(4);
$next_run = now()->startOfDay()->addMonthsNoOverflow(4);
break;
case RecurringInvoice::FREQUENCY_SIX_MONTHS:
$next_run = Carbon::parse($this->scheduler->next_run)->startOfDay()->addMonthsNoOverflow(6);
$next_run = now()->startOfDay()->addMonthsNoOverflow(6);
break;
case RecurringInvoice::FREQUENCY_ANNUALLY:
$next_run = Carbon::parse($this->scheduler->next_run)->startOfDay()->addYear();
$next_run = now()->startOfDay()->addYear();
break;
case RecurringInvoice::FREQUENCY_TWO_YEARS:
$next_run = Carbon::parse($this->scheduler->next_run)->startOfDay()->addYears(2);
$next_run = now()->startOfDay()->addYears(2);
break;
case RecurringInvoice::FREQUENCY_THREE_YEARS:
$next_run = Carbon::parse($this->scheduler->next_run)->startOfDay()->addYears(3);
$next_run = now()->startOfDay()->addYears(3);
break;
default:
$next_run = null;

View File

@ -32,7 +32,7 @@ class SchedulerFactory extends Factory
'frequency_id' => RecurringInvoice::FREQUENCY_MONTHLY,
'next_run' => 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 = [
'name' => 'A test statement scheduler',
'frequency_id' => RecurringInvoice::FREQUENCY_MONTHLY,
'next_run' => "2023-01-01",
'next_run' => now()->format('Y-m-d'),
'template' => 'client_statement',
'parameters' => [
'date_range' => 'previous_month',
@ -251,7 +251,7 @@ class SchedulerTest extends TestCase
$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'));
}