diff --git a/Modules/Helpdesk/app/Livewire/TicketIndex.php b/Modules/Helpdesk/app/Livewire/TicketIndex.php deleted file mode 100644 index 5a511261..00000000 --- a/Modules/Helpdesk/app/Livewire/TicketIndex.php +++ /dev/null @@ -1,160 +0,0 @@ -resetPage(); - } - } - - /** - * Open the delete confirmation modal for the selected visible ticket. - */ - public function askToDeleteTicket(int $ticketId): void - { - $ticket = Ticket::query() - ->visibleTo(Auth::user()) - ->findOrFail($ticketId); - - $this->pendingDeleteTicketId = $ticket->id; - $this->pendingDeleteTicketReference = $ticket->reference; - $this->pendingDeleteTicketSubject = $ticket->subject; - $this->deleteModalOpen = true; - } - - /** - * Close the delete confirmation modal without deleting anything. - */ - public function cancelTicketDelete(): void - { - $this->resetDeleteModal(); - } - - /** - * Delete the selected ticket after explicit modal confirmation. - */ - public function confirmTicketDelete(): void - { - if ($this->pendingDeleteTicketId === null) { - $this->resetDeleteModal(); - - return; - } - - $ticket = Ticket::query() - ->visibleTo(Auth::user()) - ->findOrFail($this->pendingDeleteTicketId); - - $this->authorize('delete', $ticket); - - $reference = $ticket->reference; - - $ticket->delete(); - - $this->resetDeleteModal(); - $this->resetPage(); - - $this->dispatch( - 'wms:toast', - type: 'success', - title: 'Ticket deleted', - message: "Ticket {$reference} was deleted successfully.", - ); - } - - /** - * Render the ticket list. - */ - public function render(): View - { - return view('helpdesk::livewire.ticket-index', [ - 'tickets' => $this->tickets(), - 'statuses' => Status::query()->orderBy('sort_order')->get(), - 'priorities' => Priority::query()->orderBy('sort_order')->get(), - ])->layout('layouts.app'); - } - - /** - * Reset delete modal state. - */ - private function resetDeleteModal(): void - { - $this->deleteModalOpen = false; - $this->pendingDeleteTicketId = null; - $this->pendingDeleteTicketReference = null; - $this->pendingDeleteTicketSubject = null; - } - - /** - * Build paginated ticket results. - * - * @return LengthAwarePaginator - */ - private function tickets(): LengthAwarePaginator - { - $user = Auth::user(); - $search = trim($this->search); - - return Ticket::query() - ->with(['owner', 'agent', 'status', 'priority', 'category', 'project', 'team']) - ->withCount('attachments') - ->visibleTo($user) - ->when($this->scope === 'open', static fn (Builder $query): Builder => $query->whereNull('completed_at')) - ->when($this->scope === 'closed', static fn (Builder $query): Builder => $query->whereNotNull('completed_at')) - ->when($this->status !== '', fn (Builder $query): Builder => $query->where('status_id', (int) $this->status)) - ->when($this->priority !== '', fn (Builder $query): Builder => $query->where('priority_id', (int) $this->priority)) - ->when($search !== '', static function (Builder $query) use ($search): Builder { - return $query->where(static function (Builder $subQuery) use ($search): void { - $subQuery->where('reference', 'like', '%'.$search.'%') - ->orWhere('subject', 'like', '%'.$search.'%') - ->orWhere('body', 'like', '%'.$search.'%'); - }); - }) - ->latest('last_activity_at') - ->paginate(15); - } -}