diff --git a/Modules/Helpdesk/Livewire/TicketCreate.php b/Modules/Helpdesk/Livewire/TicketCreate.php index df3065d3..5f1f0f75 100644 --- a/Modules/Helpdesk/Livewire/TicketCreate.php +++ b/Modules/Helpdesk/Livewire/TicketCreate.php @@ -16,7 +16,6 @@ use Modules\Helpdesk\Models\Category; use Modules\Helpdesk\Models\Priority; use Modules\Helpdesk\Models\Product; use Modules\Helpdesk\Models\Project; -use Modules\Helpdesk\Models\Status; use Modules\Helpdesk\Models\Team; use Modules\Helpdesk\Models\Tag; use Modules\Helpdesk\Services\TicketService; @@ -34,9 +33,6 @@ final class TicketCreate extends Component #[Validate('required|string|min:10')] public string $body = ''; - #[Validate('nullable|integer|exists:helpdesk_statuses,id')] - public ?int $status_id = null; - #[Validate('required|integer|exists:helpdesk_priorities,id')] public ?int $priority_id = null; @@ -88,7 +84,6 @@ final class TicketCreate extends Component 'company_id' => $this->company_id, 'subject' => $this->subject, 'body' => $this->body, - 'status_id' => $this->status_id, 'priority_id' => $this->priority_id, 'category_id' => $this->category_id, 'project_id' => $this->project_id, @@ -105,10 +100,7 @@ final class TicketCreate extends Component public function render(): View { - $this->applyDefaults(); - return view('helpdesk::livewire.ticket-create', [ - 'statuses' => $this->statusOptions(), 'priorities' => $this->priorityOptions(), 'categories' => $this->categoryOptions(), 'companies' => $this->companyOptions(), @@ -125,28 +117,21 @@ final class TicketCreate extends Component private function applyDefaults(): void { if (blank($this->company_id) && Schema::hasTable('companies') && Schema::hasColumn('companies', 'is_default_helpdesk_company')) { - $this->company_id = $this->nullableInt(DB::table('companies') + $this->company_id = DB::table('companies') ->where('is_default_helpdesk_company', true) ->orderBy('name') - ->value('id')); - } - - if (blank($this->status_id) && $this->hasDefaultColumn('helpdesk_statuses')) { - $this->status_id = $this->nullableInt(Status::query() - ->where('is_default', true) - ->orderBy('sort_order') - ->value('id')); + ->value('id'); } if (blank($this->priority_id) && $this->hasDefaultColumn('helpdesk_priorities')) { - $this->priority_id = $this->nullableInt(Priority::query() + $this->priority_id = Priority::query() ->where('is_default', true) ->orderBy('sort_order') - ->value('id')); + ->value('id'); } if (blank($this->category_id) && $this->hasDefaultColumn('helpdesk_categories')) { - $this->category_id = $this->nullableInt(Category::query() + $this->category_id = Category::query() ->where('is_default', true) ->when($this->company_id, fn ($query) => $query->where(function ($query): void { $query->where('company_id', $this->company_id) @@ -154,11 +139,11 @@ final class TicketCreate extends Component })) ->orderByRaw('company_id is null') ->orderBy('name') - ->value('id')); + ->value('id'); } if (blank($this->team_id) && $this->hasDefaultColumn('helpdesk_teams')) { - $this->team_id = $this->nullableInt(Team::query() + $this->team_id = Team::query() ->where('is_default', true) ->whereNull('archived_at') ->when($this->company_id, fn ($query) => $query->where(function ($query): void { @@ -167,11 +152,11 @@ final class TicketCreate extends Component })) ->orderByRaw('company_id is null') ->orderBy('name') - ->value('id')); + ->value('id'); } if (blank($this->project_id) && $this->hasDefaultColumn('helpdesk_projects')) { - $this->project_id = $this->nullableInt(Project::query() + $this->project_id = Project::query() ->where('is_default', true) ->whereNull('archived_at') ->when($this->company_id, fn ($query) => $query->where(function ($query): void { @@ -185,23 +170,11 @@ final class TicketCreate extends Component ->orderByRaw('company_id is null') ->orderByRaw('team_id is null') ->orderBy('title') - ->value('id')); + ->value('id'); } } - - /** - * Return status options with default records listed first. - */ - private function statusOptions(): mixed - { - return Status::query() - ->when($this->hasDefaultColumn('helpdesk_statuses'), fn ($query) => $query->orderByDesc('is_default')) - ->orderBy('sort_order') - ->get(); - } - /** * Return priority options with default records listed first. */ @@ -270,32 +243,6 @@ final class TicketCreate extends Component ->get(); } - - /** - * Reload dependent defaults after the company changes. - */ - public function updatedCompanyId(mixed $value): void - { - $this->company_id = $this->nullableInt($value); - $this->category_id = null; - $this->team_id = null; - $this->project_id = null; - - $this->applyDefaults(); - } - - /** - * Convert nullable database / Livewire values to nullable integers. - */ - private function nullableInt(mixed $value): ?int - { - if ($value === null || $value === '') { - return null; - } - - return (int) $value; - } - /** * Check whether a Helpdesk lookup table has the default flag column. */ diff --git a/Modules/Helpdesk/Resources/views/components/lookup-table.blade.php b/Modules/Helpdesk/Resources/views/components/lookup-table.blade.php index 26189af7..d7712d32 100644 --- a/Modules/Helpdesk/Resources/views/components/lookup-table.blade.php +++ b/Modules/Helpdesk/Resources/views/components/lookup-table.blade.php @@ -23,8 +23,8 @@ {{ $item->tickets_count ?? 0 }} - Edit - Delete + id }})" variant="primary">Edit + id }})" variant="danger">Delete @empty diff --git a/Modules/Helpdesk/Resources/views/components/project-table.blade.php b/Modules/Helpdesk/Resources/views/components/project-table.blade.php index 92b7d688..4f31291a 100644 --- a/Modules/Helpdesk/Resources/views/components/project-table.blade.php +++ b/Modules/Helpdesk/Resources/views/components/project-table.blade.php @@ -25,8 +25,8 @@ {{ $item->tickets_count }} - Edit - Delete + id }})" variant="primary">Edit + id }})" variant="danger">Delete @empty diff --git a/Modules/Helpdesk/Resources/views/components/repository-table.blade.php b/Modules/Helpdesk/Resources/views/components/repository-table.blade.php index 54d4d0d8..19054d41 100644 --- a/Modules/Helpdesk/Resources/views/components/repository-table.blade.php +++ b/Modules/Helpdesk/Resources/views/components/repository-table.blade.php @@ -26,8 +26,8 @@ {{ route('api.helpdesk.git.webhook', ['repository' => $item->id]) }} - Edit - Delete + id }})">Edit + id }})" wire:confirm="Delete this repository?">Delete @empty diff --git a/Modules/Helpdesk/Resources/views/components/team-table.blade.php b/Modules/Helpdesk/Resources/views/components/team-table.blade.php index 61e73281..3b829dab 100644 --- a/Modules/Helpdesk/Resources/views/components/team-table.blade.php +++ b/Modules/Helpdesk/Resources/views/components/team-table.blade.php @@ -25,8 +25,8 @@ {{ $item->projects_count }} {{ $item->tickets_count }} - Edit - Delete + id }})" variant="primary">Edit + id }})" variant="danger">Delete @empty diff --git a/Modules/Helpdesk/Resources/views/index.blade.php b/Modules/Helpdesk/Resources/views/index.blade.php index a16e7152..946e4fa2 100644 --- a/Modules/Helpdesk/Resources/views/index.blade.php +++ b/Modules/Helpdesk/Resources/views/index.blade.php @@ -7,10 +7,22 @@

Helpdesk dashboard

Track open workload, closed tickets, response performance, project activity, priorities, Git commits and workflow communication from one professional support workspace.

- New ticket - Active tickets - Kanban - Settings + + + + New Ticket + + + + Active tickets + + + + Kanban + + + + Settings +
@@ -32,11 +44,11 @@
- Dashboard - Tickets - Create - Kanban - Settings + Dashboard + Tickets + + New Ticket + Kanban + Settings
diff --git a/Modules/Helpdesk/Resources/views/livewire/dashboard-widget.blade.php b/Modules/Helpdesk/Resources/views/livewire/dashboard-widget.blade.php index 38d713fe..ac196a8f 100644 --- a/Modules/Helpdesk/Resources/views/livewire/dashboard-widget.blade.php +++ b/Modules/Helpdesk/Resources/views/livewire/dashboard-widget.blade.php @@ -46,7 +46,7 @@

Recent commits

- Git setup + Git setup
@forelse ($recentCommits as $commit) @@ -67,7 +67,7 @@

Recent tickets

Latest support activity.

- View all + View all
@forelse ($recentTickets as $ticket) diff --git a/Modules/Helpdesk/Resources/views/livewire/kanban-board.blade.php b/Modules/Helpdesk/Resources/views/livewire/kanban-board.blade.php index 38ce8f27..b81d2e6c 100644 --- a/Modules/Helpdesk/Resources/views/livewire/kanban-board.blade.php +++ b/Modules/Helpdesk/Resources/views/livewire/kanban-board.blade.php @@ -9,9 +9,18 @@
- New ticket - Configure boards - List view + + + + New Ticket + + + + Configure boards + + + + List view +
diff --git a/Modules/Helpdesk/Resources/views/livewire/settings-manager.blade.php b/Modules/Helpdesk/Resources/views/livewire/settings-manager.blade.php index 0f16ca81..6ccff88b 100644 --- a/Modules/Helpdesk/Resources/views/livewire/settings-manager.blade.php +++ b/Modules/Helpdesk/Resources/views/livewire/settings-manager.blade.php @@ -31,8 +31,14 @@
- Helpdesk - Tickets + + + Helpdesk + + + + Tickets +
@@ -55,7 +61,46 @@ 'products' => ['label' => 'Products', 'count' => $products->count()], 'defaults' => ['label' => 'Defaults', 'count' => 1], ] as $key => $item) - @@ -77,7 +122,7 @@
- Save default company + Save default company
@@ -102,7 +147,7 @@ Default status for new tickets -
Save statusReset
+
Save statusReset
@@ -121,7 +166,7 @@ Default for new tickets -
Save priorityReset
+
Save priorityReset
@@ -141,7 +186,7 @@ Default category for new tickets -
Save categoryReset
+
Save categoryReset
@@ -161,7 +206,7 @@ Default team for new tickets -
Save teamReset
+
Save teamReset
@@ -182,7 +227,7 @@ Default project for new tickets -
Save projectReset
+
Save projectReset
@@ -216,8 +261,8 @@
- Save board - Reset + Save board + Reset
@@ -248,8 +293,8 @@ {{ $boardItem->is_default ? 'Default' : 'No' }} - Edit - Delete + id }})">Edit + id }})" wire:confirm="Delete this board?">Delete @empty @@ -285,8 +330,8 @@
- Save repository - Reset + Save repository + Reset
@@ -325,8 +370,8 @@
- Save workflow message - Reset + Save workflow message + Reset
@@ -350,8 +395,8 @@ {{ $template->to_role }} {{ $template->is_active ? 'Active' : 'Inactive' }} - Edit - Delete + id }})">Edit + id }})" wire:confirm="Delete this workflow message?">Delete @empty @@ -376,7 +421,7 @@
-
Save canned responseReset
+
Save canned responseReset
@@ -384,7 +429,7 @@

{{ $response->name }}

{{ $response->category?->name ?? 'Any category' }} · {{ $response->team?->name ?? 'Any team' }}

{{ $response->is_active ? 'Active' : 'Inactive' }}

{{ strip_tags($response->body) }}

-
EditDelete
+
id }})">Editid }})" wire:confirm="Delete this canned response?">Delete
@empty
No canned responses yet.
@@ -406,10 +451,10 @@ -
Save SLA policyReset
+
Save SLA policyReset
-
@forelse ($slaPolicies as $policy)@empty@endforelse
PolicyTargetsApplies toActions
{{ $policy->name }} @if($policy->is_default)Default@endif{{ $policy->first_response_minutes }}m response · {{ $policy->resolution_minutes }}m close{{ $policy->priority?->name ?? 'Any priority' }} · {{ $policy->category?->name ?? 'Any category' }}Edit Delete
No SLA policies yet.
+
@forelse ($slaPolicies as $policy)@empty@endforelse
PolicyTargetsApplies toActions
{{ $policy->name }} @if($policy->is_default)Default@endif{{ $policy->first_response_minutes }}m response · {{ $policy->resolution_minutes }}m close{{ $policy->priority?->name ?? 'Any priority' }} · {{ $policy->category?->name ?? 'Any category' }}id }})">Edit id }})" wire:confirm="Delete this SLA policy?">Delete
No SLA policies yet.
@endif @@ -429,31 +474,31 @@ @foreach ($projects as $project)@endforeach @foreach ($statuses as $status)@endforeach -
Save automation ruleReset
+
Save automation ruleReset
-
@forelse ($automationRules as $rule)

{{ $rule->name }}

Sender: {{ $rule->match_sender ?: 'Any' }} · Subject: {{ $rule->match_subject ?: 'Any' }}

EditDelete
@empty
No automation rules yet.
@endforelse
+
@forelse ($automationRules as $rule)

{{ $rule->name }}

Sender: {{ $rule->match_sender ?: 'Any' }} · Subject: {{ $rule->match_subject ?: 'Any' }}

id }})">Editid }})" wire:confirm="Delete this rule?">Delete
@empty
No automation rules yet.
@endforelse
@endif @if ($section === 'checklists') -
@foreach ($categories as $category)@endforeach@foreach ($projects as $project)@endforeach
Save checklistReset
-
@forelse ($checklistTemplates as $template)

{{ $template->name }}

{{ count($template->items ?? []) }} items

EditDelete
@empty
No checklist templates yet.
@endforelse
+
@foreach ($categories as $category)@endforeach@foreach ($projects as $project)@endforeach
Save checklistReset
+
@forelse ($checklistTemplates as $template)

{{ $template->name }}

{{ count($template->items ?? []) }} items

id }})">Editid }})" wire:confirm="Delete this checklist?">Delete
@empty
No checklist templates yet.
@endforelse
@endif @if ($section === 'tags') -
Save tagReset
-
@forelse ($tags as $tag)
{{ $tag->name }}
EditDelete
@empty
No tags yet.
@endforelse
+
Save tagReset
+
@forelse ($tags as $tag)
{{ $tag->name }}
id }})">Editid }})" wire:confirm="Delete this tag?">Delete
@empty
No tags yet.
@endforelse
@endif @if ($section === 'products') -
Save product/serviceReset
-
@forelse ($products as $product)

{{ $product->name }}

{{ ucfirst($product->type) }} · {{ $product->version ?: 'No version' }} · {{ $product->tickets_count }} tickets

EditDelete
@empty
No products or services yet.
@endforelse
+
Save product/serviceReset
+
@forelse ($products as $product)

{{ $product->name }}

{{ ucfirst($product->type) }} · {{ $product->version ?: 'No version' }} · {{ $product->tickets_count }} tickets

id }})">Editid }})" wire:confirm="Delete this product/service?">Delete
@empty
No products or services yet.
@endforelse
@endif diff --git a/Modules/Helpdesk/Resources/views/livewire/ticket-create.blade.php b/Modules/Helpdesk/Resources/views/livewire/ticket-create.blade.php index 532f233b..b8a50a81 100644 --- a/Modules/Helpdesk/Resources/views/livewire/ticket-create.blade.php +++ b/Modules/Helpdesk/Resources/views/livewire/ticket-create.blade.php @@ -104,7 +104,7 @@ @@ -122,7 +122,7 @@ @@ -139,7 +139,7 @@ @@ -156,7 +156,7 @@ @@ -173,7 +173,7 @@ @@ -188,7 +188,7 @@ diff --git a/Modules/Helpdesk/Resources/views/livewire/ticket-index.blade.php b/Modules/Helpdesk/Resources/views/livewire/ticket-index.blade.php index ae1249f4..03bca96d 100644 --- a/Modules/Helpdesk/Resources/views/livewire/ticket-index.blade.php +++ b/Modules/Helpdesk/Resources/views/livewire/ticket-index.blade.php @@ -8,8 +8,14 @@

Search, triage and manage support requests across companies, projects, teams, priorities and statuses.

- Dashboard - New ticket + + + Dashboard + + + + + New Ticket +
diff --git a/Modules/Helpdesk/Resources/views/livewire/ticket-show.blade.php b/Modules/Helpdesk/Resources/views/livewire/ticket-show.blade.php index 1ed6fbd7..9c1118ea 100644 --- a/Modules/Helpdesk/Resources/views/livewire/ticket-show.blade.php +++ b/Modules/Helpdesk/Resources/views/livewire/ticket-show.blade.php @@ -68,7 +68,7 @@ @endforeach
- Insert response + Insert response
@endif @@ -88,7 +88,7 @@
- + Post reply Posting... @@ -185,14 +185,14 @@ @endforeach - Update status + Update status
@foreach ($priorities as $priority) @endforeach - Update priority + Update priority
@endcan diff --git a/Modules/Helpdesk/Resources/views/partials/comment-thread.blade.php b/Modules/Helpdesk/Resources/views/partials/comment-thread.blade.php index b07a9232..14274338 100644 --- a/Modules/Helpdesk/Resources/views/partials/comment-thread.blade.php +++ b/Modules/Helpdesk/Resources/views/partials/comment-thread.blade.php @@ -39,7 +39,7 @@ @endif
- Reply + id }})">Reply
@if (($reply_parent_id ?? null) === $comment->id) @@ -47,8 +47,8 @@
- Cancel - Post reply + Cancel + Post reply
@endif diff --git a/Modules/Helpdesk/Services/TicketService.php b/Modules/Helpdesk/Services/TicketService.php index 8e88ecbe..f14cb90c 100644 --- a/Modules/Helpdesk/Services/TicketService.php +++ b/Modules/Helpdesk/Services/TicketService.php @@ -34,14 +34,10 @@ final class TicketService { return DB::transaction(function () use ($user, $data, $files): Ticket { $defaultStatusSlug = (string) config('helpdesk.default_status_slug', 'new'); - $status = ! empty($data['status_id']) - ? Status::query()->whereKey((int) $data['status_id'])->first() + $status = Schema::hasTable('helpdesk_statuses') && Schema::hasColumn('helpdesk_statuses', 'is_default') + ? Status::query()->where('is_default', true)->orderBy('sort_order')->first() : null; - if (! $status && Schema::hasTable('helpdesk_statuses') && Schema::hasColumn('helpdesk_statuses', 'is_default')) { - $status = Status::query()->where('is_default', true)->orderBy('sort_order')->first(); - } - if (! $status) { $status = Status::query()->where('slug', $defaultStatusSlug)->first(); } diff --git a/Modules/Helpdesk/changelog.yaml b/Modules/Helpdesk/changelog.yaml index 866e5435..6fa9288f 100644 --- a/Modules/Helpdesk/changelog.yaml +++ b/Modules/Helpdesk/changelog.yaml @@ -121,10 +121,16 @@ versions: - Confirmed ticket tags can be assigned on create and edit and are synced to the ticket-tag pivot. - Kept module.json version in sync with changelog.yaml. - "1.2.7": + "1.2.8": changed: - - Changed Helpdesk New ticket actions to use green action styling. - - Hardened ticket creation defaults so configured company, status, priority, category, team and project defaults are applied before rendering and when saving. - - Added explicit selected states for ticket create dropdowns so Select2 displays loaded defaults correctly. - - Allowed TicketService to respect an explicitly supplied default status id while preserving fallback status behaviour. + - Replaced white Flux action buttons on the Helpdesk dashboard, ticket list, Kanban board and settings header with explicit high-contrast coloured action buttons. + - Standardised + New Ticket actions as green buttons across Helpdesk entry points. + - Kept module.json version in sync with changelog.yaml. + + + "1.2.9": + changed: + - Applied explicit Helpdesk action colour conventions across dashboard, tickets, Kanban and settings pages. + - Coloured settings section navigation tiles by domain so Statuses, Priorities, Categories, Teams, Projects, Boards, Workflow, SLA, Tags, Products and Defaults are visually distinct. + - Coloured save, reset, edit, delete, settings, ticket, Kanban, reply and update action buttons consistently. - Kept module.json version in sync with changelog.yaml. diff --git a/Modules/Helpdesk/module.json b/Modules/Helpdesk/module.json index 639c7944..56219f94 100644 --- a/Modules/Helpdesk/module.json +++ b/Modules/Helpdesk/module.json @@ -22,5 +22,5 @@ "Modules\\Helpdesk\\Providers\\HelpdeskServiceProvider" ], "files": [], - "version": "1.2.7" + "version": "1.2.9" }