. */ declare(strict_types=1); namespace FireflyIII\Support\Cronjobs; use Carbon\Carbon; use FireflyIII\Exceptions\FireflyException; use FireflyIII\Jobs\CreateRecurringTransactions; use FireflyIII\Models\Configuration; use Log; /** * Class RecurringCronjob */ class RecurringCronjob extends AbstractCronjob { /** * @return bool * @throws FireflyException */ public function fire(): bool { /** @var Configuration $config */ $config = app('fireflyconfig')->get('last_rt_job', 0); $lastTime = (int)$config->data; $diff = time() - $lastTime; $diffForHumans = Carbon::now()->diffForHumans(Carbon::createFromTimestamp($lastTime), true); if (0 === $lastTime) { Log::info('Recurring transactions cronjob has never fired before.'); } // less than half a day ago: if ($lastTime > 0 && $diff <= 43200) { Log::info(sprintf('It has been %s since the recurring transactions cronjob has fired. It will not fire now.', $diffForHumans)); return false; } if ($lastTime > 0 && $diff > 43200) { Log::info(sprintf('It has been %s since the recurring transactions cronjob has fired. It will fire now!', $diffForHumans)); } try { $this->fireRecurring(); } catch (FireflyException $e) { Log::error($e->getMessage()); Log::error($e->getTraceAsString()); throw new FireflyException(sprintf('Could not run recurring transaction cron job: %s', $e->getMessage())); } return true; } /** * * @throws FireflyException */ private function fireRecurring(): void { $job = new CreateRecurringTransactions(new Carbon); $job->handle(); app('fireflyconfig')->set('last_rt_job', time()); } }