Improve ticketing settings

This commit is contained in:
Joel Wedemire
2026-04-08 19:48:32 -07:00
parent f2b614abb7
commit 3c65f9a4fd
3 changed files with 172 additions and 22 deletions

View File

@@ -5,6 +5,7 @@ namespace Dashboard\Ticketing\Http\Controllers;
use Dashboard\Ticketing\Models\PriorityLevel;
use Dashboard\Ticketing\Models\TicketingAgentAccess;
use Dashboard\Ticketing\Models\TicketingGroup;
use Illuminate\Validation\Rule;
use Illuminate\Http\Request;
use Illuminate\Routing\Controller;
use Illuminate\Support\Facades\Auth;
@@ -212,4 +213,52 @@ class TicketingSettingsController extends Controller
return back()->with('success', 'Priority level created.');
}
public function updatePriority(Request $request, PriorityLevel $priority)
{
$this->requireAgentAccess();
if ($priority->group_id) {
$this->requireManagerAccess($priority->group_id);
}
$validated = $request->validate([
'name' => 'required|string|max:100',
'color' => 'required|string|regex:/^#[0-9a-fA-F]{6}$/',
'description' => 'nullable|string',
'sort_order' => 'required|integer|min:0',
'group_id' => [
'nullable',
'exists:ticketing_groups,id',
Rule::in([$priority->group_id, null]),
],
]);
if (!empty($validated['group_id'])) {
$this->requireManagerAccess($validated['group_id']);
}
$priority->update($validated);
return back()->with('success', 'Priority level updated.');
}
public function destroyPriority(PriorityLevel $priority)
{
$this->requireAgentAccess();
if ($priority->group_id) {
$this->requireManagerAccess($priority->group_id);
}
if ($priority->tickets()->exists()) {
return back()->withErrors([
'priority' => 'Cannot delete a priority that is in use by tickets.',
]);
}
$priority->delete();
return back()->with('success', 'Priority level removed.');
}
}

View File

@@ -17,6 +17,8 @@ Route::middleware(['web', 'auth', 'app.access:ticketing'])->prefix('app/ticketin
Route::post('/settings/agents', [TicketingSettingsController::class, 'storeAgent'])->name('settings.agents.store');
Route::delete('/settings/agents/{access}', [TicketingSettingsController::class, 'destroyAgent'])->name('settings.agents.destroy');
Route::post('/settings/priorities', [TicketingSettingsController::class, 'storePriority'])->name('settings.priorities.store');
Route::put('/settings/priorities/{priority}', [TicketingSettingsController::class, 'updatePriority'])->name('settings.priorities.update');
Route::delete('/settings/priorities/{priority}', [TicketingSettingsController::class, 'destroyPriority'])->name('settings.priorities.destroy');
// Ticket routes
Route::get('/', [TicketController::class, 'index'])->name('index');