selectedMonth = now()->month; $this->selectedYear = now()->year; $this->selectedUsers = User::where('planner_id', auth()->id()) ->pluck('id') ->toArray(); } public function render(): \Illuminate\Contracts\View\Factory|\Illuminate\Contracts\View\View { $users = User::where('planner_id', auth()->id()) ->orderBy('name') ->get(); $years = range(now()->year - self::YEARS_IN_PAST, now()->year + self::YEARS_IN_FUTURE); return view('livewire.schedule.schedule-generator', [ 'users' => $users, 'months' => $this->getMonthNames(), 'years' => $years ]); } public function generate(): void { $this->validate([ 'selectedUsers' => 'required|array|min:1', 'selectedMonth' => 'required|integer|min:1|max:12', 'selectedYear' => 'required|integer|min:' . (now()->year - self::YEARS_IN_PAST) . '|max:' . (now()->year + self::YEARS_IN_FUTURE), ]); $this->isGenerating = true; try { $action = new GenerateScheduleForMonthAction(); $action->execute( auth()->user(), $this->selectedMonth, $this->selectedYear, $this->selectedUsers, $this->clearExisting ); $this->isGenerating = false; $this->dispatch('schedule-generated'); session()->flash('success', 'Schedule generated successfully for ' . $this->getSelectedMonthName() . ' ' . $this->selectedYear); } catch (\Exception $e) { $this->isGenerating = false; Log::error('Schedule generation failed', ['exception' => $e]); session()->flash('error', 'Unable to generate schedule. Please try again.'); } } public function regenerateForDate($date): void { try { $action = new RegenerateScheduleForDateForUsersAction(); $action->execute( auth()->user(), Carbon::parse($date), $this->selectedUsers ); $this->dispatch('schedule-generated'); session()->flash('success', 'Schedule regenerated for ' . Carbon::parse($date)->format('M d, Y')); } catch (\Exception $e) { Log::error('Schedule regeneration failed', ['exception' => $e, 'date' => $date]); session()->flash('error', 'Unable to regenerate schedule. Please try again.'); } } public function clearMonth(): void { try { $action = new ClearScheduleForMonthAction(); $action->execute( auth()->user(), $this->selectedMonth, $this->selectedYear, $this->selectedUsers ); $this->dispatch('schedule-generated'); session()->flash('success', 'Schedule cleared for ' . $this->getSelectedMonthName() . ' ' . $this->selectedYear); } catch (\Exception $e) { Log::error('Clear month failed', ['exception' => $e]); session()->flash('error', 'Unable to clear schedule. Please try again.'); } } public function toggleAdvancedOptions() { $this->showAdvancedOptions = !$this->showAdvancedOptions; } private function getMonthNames(): array { return [ 1 => 'January', 2 => 'February', 3 => 'March', 4 => 'April', 5 => 'May', 6 => 'June', 7 => 'July', 8 => 'August', 9 => 'September', 10 => 'October', 11 => 'November', 12 => 'December' ]; } private function getSelectedMonthName(): string { return $this->getMonthNames()[$this->selectedMonth]; } }