From 014976b757e5ed4cad723831556b29c7663d9ac5 Mon Sep 17 00:00:00 2001 From: isaacclad Date: Sun, 5 Jul 2026 22:06:04 +0000 Subject: [PATCH] Sync Frontdesk queue integration flag with Ladill Queue on enable. Mirror Care fix so provision and settings keep frontdesk_enabled in sync. Co-authored-by: Cursor --- .../Frontdesk/ServiceQueueController.php | 13 +++++++++++-- .../Controllers/Frontdesk/SettingsController.php | 2 +- app/Services/Queue/QueueClient.php | 16 ++++++++++++++-- 3 files changed, 26 insertions(+), 5 deletions(-) diff --git a/app/Http/Controllers/Frontdesk/ServiceQueueController.php b/app/Http/Controllers/Frontdesk/ServiceQueueController.php index dc8b8bd..db38e5b 100644 --- a/app/Http/Controllers/Frontdesk/ServiceQueueController.php +++ b/app/Http/Controllers/Frontdesk/ServiceQueueController.php @@ -28,8 +28,17 @@ class ServiceQueueController extends Controller try { $counters = $queue->counters($owner); - } catch (RequestException) { - return redirect()->route('frontdesk.settings')->with('error', 'Could not reach Ladill Queue. Enable Frontdesk integration in Queue settings and verify API keys.'); + } catch (RequestException $e) { + if ($queue->configured() && $e->response?->status() === 403) { + try { + $queue->syncIntegration($owner, true); + $counters = $queue->counters($owner); + } catch (RequestException) { + return redirect()->route('frontdesk.settings')->with('error', 'Ladill Queue integration is not enabled. Save settings with Queue integration checked, and enable Frontdesk in Queue settings.'); + } + } else { + return redirect()->route('frontdesk.settings')->with('error', 'Could not reach Ladill Queue. Enable Frontdesk integration in Queue settings and verify API keys.'); + } } return view('frontdesk.service-queues.index', compact('counters', 'organization')); diff --git a/app/Http/Controllers/Frontdesk/SettingsController.php b/app/Http/Controllers/Frontdesk/SettingsController.php index f477b39..983c01c 100644 --- a/app/Http/Controllers/Frontdesk/SettingsController.php +++ b/app/Http/Controllers/Frontdesk/SettingsController.php @@ -83,7 +83,7 @@ class SettingsController extends Controller $hadQueue = (bool) data_get($settings, 'queue_integration_enabled', false); $settings['queue_integration_enabled'] = $wantsQueue; - if ($wantsQueue && ! $hadQueue && $queue->configured()) { + if ($wantsQueue && $queue->configured()) { $branch = Branch::owned($owner)->where('organization_id', $organization->id)->orderBy('name')->first(); try { $queue->enable($owner, $organization->name, $branch?->name); diff --git a/app/Services/Queue/QueueClient.php b/app/Services/Queue/QueueClient.php index 25d0546..52867d5 100644 --- a/app/Services/Queue/QueueClient.php +++ b/app/Services/Queue/QueueClient.php @@ -46,11 +46,23 @@ class QueueClient */ public function enable(string $owner, string $organizationName, ?string $branchName = null): array { - $response = $this->http($owner)->post($this->base().'/integrations/provision', array_filter([ + $this->http($owner)->post($this->base().'/integrations/provision', array_filter([ 'organization_name' => $organizationName, 'branch_name' => $branchName, 'industry' => 'visitor', - ])); + ]))->throw(); + + return $this->syncIntegration($owner, true); + } + + /** + * @return array + */ + public function syncIntegration(string $owner, bool $enabled = true): array + { + $response = $this->http($owner)->patch($this->base().'/integrations', [ + 'frontdesk_enabled' => $enabled, + ]); $response->throw(); return (array) ($response->json('data') ?? []);