Gate ticket handoff as Pro; reorder settings cards.
Deploy Ladill Queue / deploy (push) Successful in 1m19s

Transfer between queues requires Pro (console UI, API, and plans copy).
Branches & team now sits after Organization on the settings page.
This commit is contained in:
isaacclad
2026-07-16 09:54:53 +00:00
parent 26c9edc131
commit 7b2722f471
8 changed files with 263 additions and 52 deletions
+26 -8
View File
@@ -7,7 +7,7 @@ use App\Http\Controllers\Qms\Concerns\ScopesToAccount;
use App\Models\Counter;
use App\Models\ServiceQueue;
use App\Models\Ticket;
use App\Services\Qms\OrganizationResolver;
use App\Services\Qms\PlanService;
use App\Services\Qms\QueueEngine;
use Illuminate\Http\RedirectResponse;
use Illuminate\Http\Request;
@@ -19,6 +19,7 @@ class ConsoleController extends Controller
public function __construct(
protected QueueEngine $engine,
protected PlanService $plans,
) {}
public function show(Request $request, Counter $counter): View
@@ -26,6 +27,7 @@ class ConsoleController extends Controller
$this->authorizeAbility($request, 'console.use');
$this->authorizeOwner($request, $counter);
$owner = $this->ownerRef($request);
$organization = $this->organization($request);
$counter->load(['serviceQueues', 'branch']);
$queues = $counter->serviceQueues;
@@ -41,14 +43,24 @@ class ConsoleController extends Controller
return [$queue->id => $this->engine->waitingTickets($queue, 10)];
});
$allQueues = ServiceQueue::owned($owner)
->where('organization_id', $counter->organization_id)
->where('branch_id', $counter->branch_id)
->where('is_active', true)
->orderBy('name')
->get();
$canTransfer = $this->plans->hasFeature($organization, 'transfer');
$allQueues = $canTransfer
? ServiceQueue::owned($owner)
->where('organization_id', $counter->organization_id)
->where('branch_id', $counter->branch_id)
->where('is_active', true)
->orderBy('name')
->get()
: collect();
return view('qms.console.show', compact('counter', 'queues', 'currentTicket', 'waitingByQueue', 'allQueues'));
return view('qms.console.show', compact(
'counter',
'queues',
'currentTicket',
'waitingByQueue',
'allQueues',
'canTransfer',
));
}
public function action(Request $request, Counter $counter): RedirectResponse
@@ -65,6 +77,12 @@ class ConsoleController extends Controller
'reason' => ['nullable', 'string', 'max:500'],
]);
if ($validated['action'] === 'transfer' && ! $this->plans->hasFeature($this->organization($request), 'transfer')) {
return redirect()
->route('qms.pro.index')
->with('error', 'Handing off tickets between queues requires Queue Pro.');
}
try {
$message = match ($validated['action']) {
'call_next' => $this->handleCallNext($counter, (int) $validated['queue_id'], $actor),