error('فایل تعطیلات یافت نشد: ' . $path); return self::FAILURE; } /** @var array> $years */ $years = require $path; $onlyYear = $this->option('year') !== null ? (int) $this->option('year') : null; $count = 0; foreach ($years as $jalaliYear => $days) { if ($onlyYear !== null && (int) $jalaliYear !== $onlyYear) { continue; } foreach ($days as $day) { try { $gregorian = (new Jalalian((int) $jalaliYear, (int) $day['month'], (int) $day['day'])) ->toCarbon() ->format('Y-m-d'); } catch (\Throwable $e) { $this->warn("رد شد: {$jalaliYear}/{$day['month']}/{$day['day']} — {$e->getMessage()}"); continue; } Holiday::updateOrCreate( ['date' => $gregorian], ['title' => $day['title']] ); $count++; } $this->info("سال {$jalaliYear}: " . count($days) . ' روز'); } $this->info("جمع: {$count} تعطیل رسمی ثبت/به‌روز شد."); return self::SUCCESS; } /** آخرین سال شمسی پوشش‌داده‌شده در فایل داده */ public static function coveredUntilYear(): int { $path = database_path('data/iranian_official_holidays.php'); if (!is_file($path)) { return 0; } $years = array_keys(require $path); return $years ? (int) max($years) : 0; } }