*/ #[Validate('array')] public array $attachments = []; /** * Store a new helpdesk ticket. * * @param TicketService $tickets * @return mixed */ public function save(TicketService $tickets): mixed { $this->validate([ 'attachments.*' => 'file|max:' . config('helpdesk.max_upload_kb') . '|mimes:' . implode(',', config('helpdesk.allowed_mimes')), ]); $ticket = $tickets->create(Auth::user(), [ 'company_id' => $this->company_id, 'subject' => $this->subject, 'body' => $this->body, 'priority_id' => $this->priority_id, 'category_id' => $this->category_id, 'project_id' => $this->project_id, 'team_id' => $this->team_id, 'due_at' => $this->due_at, ], $this->attachments); session()->flash('success', 'Ticket ' . $ticket->reference . ' has been created.'); return $this->redirectRoute('helpdesk.tickets.show', $ticket, navigate: true); } /** @return View */ public function render(): View { return view('helpdesk::livewire.ticket-create', [ 'priorities' => Priority::query()->orderBy('sort_order')->get(), 'categories' => Category::query()->orderBy('name')->get(), 'companies' => Schema::hasTable('companies') ? DB::table('companies')->select(['id', 'name'])->orderBy('name')->get() : collect(), 'teams' => Team::query()->whereNull('archived_at')->orderBy('name')->get(), 'projects' => Project::query()->whereNull('archived_at')->orderBy('title')->get(), ])->layout('layouts.app'); } }