From 5cd8c05a7cfa7dd58db793c4f3e6022fc1ec9f17 Mon Sep 17 00:00:00 2001 From: twotalesanimation <80506065+twotalesanimation@users.noreply.github.com> Date: Fri, 2 Jan 2026 21:23:12 +0200 Subject: [PATCH] feat: Move Trello card to Packing when inspection is passed - Create InspectionPassed event - Create MoveCardToPackingOnInspectionPassed listener - Register event listener in EventServiceProvider - Dispatch event when markInspectionPassed() is called Now when an order passes inspection on the ops page, the Trello card automatically moves from Inspection to Packing list. --- app/Events/InspectionPassed.php | 26 +++ app/Http/Controllers/OpsController.php | 6 +- .../Controllers/TrelloWebhookController.php | 14 +- .../MoveCardToPackingOnInspectionPassed.php | 50 ++++++ app/Providers/EventServiceProvider.php | 11 +- .../464108a9c481e0b2bc1196375b40109a.php | 164 ++++++++++++++++++ .../b21f5d9c9867a9c98290a83b32d87faf.php | 82 +++++++++ 7 files changed, 347 insertions(+), 6 deletions(-) create mode 100644 app/Events/InspectionPassed.php create mode 100644 app/Listeners/MoveCardToPackingOnInspectionPassed.php create mode 100644 storage/framework/views/464108a9c481e0b2bc1196375b40109a.php create mode 100644 storage/framework/views/b21f5d9c9867a9c98290a83b32d87faf.php diff --git a/app/Events/InspectionPassed.php b/app/Events/InspectionPassed.php new file mode 100644 index 0000000..3bbb77f --- /dev/null +++ b/app/Events/InspectionPassed.php @@ -0,0 +1,26 @@ +update(['status' => 'packing']); Log::info('Inspection passed via QR', [ @@ -127,8 +127,8 @@ class OpsController extends Controller 'marked_by' => auth()->user()->name, ]); - // Emit event for listeners to handle Slack/Trello updates - // TODO: Create InspectionPassed event + // Emit event to trigger Slack/Trello updates + \App\Events\InspectionPassed::dispatch($order); return response()->json([ 'success' => true, diff --git a/app/Http/Controllers/TrelloWebhookController.php b/app/Http/Controllers/TrelloWebhookController.php index 926e6e2..45013f4 100644 --- a/app/Http/Controllers/TrelloWebhookController.php +++ b/app/Http/Controllers/TrelloWebhookController.php @@ -106,15 +106,25 @@ class TrelloWebhookController extends Controller // Handle list-specific actions match ($listName) { + 'Prep' => $order->update(['status' => 'prep']), + 'Printing' => $order->update(['status' => 'printing']), + 'Inspection' => $order->update(['status' => 'inspection']), + 'Packing' => $order->update(['status' => 'packing']), 'Ready to Ship' => $this->handleReadyToShipIntent($order, $cardId), 'Awaiting Collection' => $this->handleAwaitingCollectionIntent($order, $cardId), - 'In Transit' => Log::info('Card in transit', ['order_uuid' => $order->uuid]), - 'Done' => Log::info('Card completed', ['order_uuid' => $order->uuid]), + 'In Transit' => $order->update(['status' => 'in_transit']), + 'Done' => $order->update(['status' => 'completed']), default => Log::debug('Card moved to list', [ 'order_uuid' => $order->uuid, 'list' => $listName, ]), }; + + Log::info('Order status updated from Trello', [ + 'order_uuid' => $order->uuid, + 'list' => $listName, + 'status' => $order->status, + ]); } /** diff --git a/app/Listeners/MoveCardToPackingOnInspectionPassed.php b/app/Listeners/MoveCardToPackingOnInspectionPassed.php new file mode 100644 index 0000000..8008844 --- /dev/null +++ b/app/Listeners/MoveCardToPackingOnInspectionPassed.php @@ -0,0 +1,50 @@ +order; + + if (!$order->trello_card_id) { + Log::debug('No Trello card to move', ['order_uuid' => $order->uuid]); + return; + } + + try { + // Move card to Packing list + $success = $this->trello->moveCard($order->trello_card_id, 'packing'); + + if ($success) { + Log::info('Trello card moved to Packing', [ + 'order_uuid' => $order->uuid, + 'card_id' => $order->trello_card_id, + ]); + } else { + Log::warning('Failed to move Trello card to Packing', [ + 'order_uuid' => $order->uuid, + 'card_id' => $order->trello_card_id, + ]); + } + } catch (\Exception $e) { + Log::error('Error moving Trello card to Packing', [ + 'order_uuid' => $order->uuid, + 'error' => $e->getMessage(), + ]); + } + } +} diff --git a/app/Providers/EventServiceProvider.php b/app/Providers/EventServiceProvider.php index d8eab82..321c75c 100644 --- a/app/Providers/EventServiceProvider.php +++ b/app/Providers/EventServiceProvider.php @@ -4,6 +4,7 @@ namespace App\Providers; use App\Events\BalancePaid; use App\Events\DepositPaid; +use App\Events\InspectionPassed; use App\Events\OrderCreated; use App\Events\OrderPacked; use App\Events\ParcelCollected; @@ -18,6 +19,7 @@ use App\Events\ShipmentCreated; use App\Events\ShipmentCreationFailed; use App\Listeners\CreateShipmentOnReadyToShip; use App\Listeners\GenerateQrCodeOnOrderCreated; +use App\Listeners\MoveCardToPackingOnInspectionPassed; use App\Listeners\NotifySlackOnOrderCreated; use App\Listeners\NotifySlackOnOrderPacked; use App\Listeners\NotifySlackOnParcelCollected; @@ -46,7 +48,14 @@ class EventServiceProvider extends ServiceProvider // Packing events OrderPacked::class => [ NotifySlackOnOrderPacked::class, - ],Ready to Ship intent (from Trello webhook) + ], + + // Inspection events + InspectionPassed::class => [ + MoveCardToPackingOnInspectionPassed::class, + ], + + // Ready to Ship intent (from Trello webhook) ReadyToShipIntent::class => [ CreateShipmentOnReadyToShip::class, ], diff --git a/storage/framework/views/464108a9c481e0b2bc1196375b40109a.php b/storage/framework/views/464108a9c481e0b2bc1196375b40109a.php new file mode 100644 index 0000000..8e80d1f --- /dev/null +++ b/storage/framework/views/464108a9c481e0b2bc1196375b40109a.php @@ -0,0 +1,164 @@ + +
Quality check completed - proceed to packing
+ + +Quality issue detected - needs review
+ + + + +