From 6b2ca2dfb2da4178c08e21138b0ca3d24fc6d468 Mon Sep 17 00:00:00 2001 From: David Bomba Date: Wed, 18 Jan 2023 10:39:01 +1100 Subject: [PATCH] Always ensure next_run is calculated from the time the scheduler was last run, not when the scheduler was restarted. --- app/Services/Scheduler/SchedulerService.php | 24 ++++++++++----------- database/factories/SchedulerFactory.php | 2 +- tests/Feature/Scheduler/SchedulerTest.php | 4 ++-- 3 files changed, 15 insertions(+), 15 deletions(-) diff --git a/app/Services/Scheduler/SchedulerService.php b/app/Services/Scheduler/SchedulerService.php index 6d92c15f395e..88319d784b91 100644 --- a/app/Services/Scheduler/SchedulerService.php +++ b/app/Services/Scheduler/SchedulerService.php @@ -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; diff --git a/database/factories/SchedulerFactory.php b/database/factories/SchedulerFactory.php index e60a53211da3..8b839c5e6b2e 100644 --- a/database/factories/SchedulerFactory.php +++ b/database/factories/SchedulerFactory.php @@ -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', ]; } } diff --git a/tests/Feature/Scheduler/SchedulerTest.php b/tests/Feature/Scheduler/SchedulerTest.php index ea7b648ba380..43495179e2dd 100644 --- a/tests/Feature/Scheduler/SchedulerTest.php +++ b/tests/Feature/Scheduler/SchedulerTest.php @@ -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')); }