selectedMonth = now()->month; $this->selectedYear = now()->year; $this->selectedUsers = User::where('planner_id', auth()->id()) ->pluck('id') ->toArray(); } public function render(): Factory|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]; } }