diff --git a/app/Listeners/NotifySlackOnOrderCreated.php b/app/Listeners/NotifySlackOnOrderCreated.php index 8a98da9..eb57734 100644 --- a/app/Listeners/NotifySlackOnOrderCreated.php +++ b/app/Listeners/NotifySlackOnOrderCreated.php @@ -3,15 +3,18 @@ namespace App\Listeners; use App\Events\OrderCreated; +use App\Services\QrStickerService; use App\Services\SlackNotifierService; use App\Services\TrelloService; use Illuminate\Support\Facades\Log; +use Illuminate\Support\Facades\Storage; class NotifySlackOnOrderCreated { public function __construct( protected SlackNotifierService $slack, protected TrelloService $trello, + protected QrStickerService $qrSticker, ) { } @@ -62,6 +65,35 @@ class NotifySlackOnOrderCreated $this->trello->setTextField($cardId, 'print_size', $printSize); Log::info('Trello card created for order', ['order_uuid' => $order->uuid, 'card_id' => $cardId]); + + // Generate QR sticker and attach to Trello card + try { + $stickerPaths = $this->qrSticker->generateSticker($order); + $pdfPath = storage_path('app/public/' . $stickerPaths['pdf_path']); + + if (Storage::disk('public')->exists($stickerPaths['pdf_path'])) { + // Generate a public URL for the PDF + $stickerUrl = Storage::disk('public')->url($stickerPaths['pdf_path']); + + // Attach to Trello card + $this->trello->attachFile( + $cardId, + "QR-Sticker-{$order->order_number}.pdf", + $stickerUrl + ); + + Log::info('QR sticker attached to Trello card', [ + 'order_uuid' => $order->uuid, + 'card_id' => $cardId, + 'pdf_path' => $stickerPaths['pdf_path'], + ]); + } + } catch (\Exception $e) { + Log::error('Failed to generate or attach QR sticker to Trello', [ + 'order_uuid' => $order->uuid, + 'error' => $e->getMessage(), + ]); + } } } } diff --git a/app/Services/QrStickerService.php b/app/Services/QrStickerService.php index 4be5455..d5f4436 100644 --- a/app/Services/QrStickerService.php +++ b/app/Services/QrStickerService.php @@ -133,7 +133,7 @@ class QrStickerService } .container { display: flex; - gap: 3mm; + gap: 2mm; height: 100%; } .info-section { @@ -144,7 +144,7 @@ class QrStickerService overflow: hidden; } .qr-section { - width: 50mm; + width: 100mm; display: flex; align-items: center; justify-content: center; @@ -164,29 +164,15 @@ class QrStickerService letter-spacing: 0.5pt; } .order-number { - font-size: 9pt; + font-size: 16pt; font-weight: bold; margin-top: 1mm; color: #222; word-break: break-all; } - .customer-info { - font-size: 8pt; - color: #555; - line-height: 1.3; - } - .customer-info .label { - font-size: 7pt; - color: #999; - text-transform: uppercase; - letter-spacing: 0.3pt; - } - .customer-info .name { - font-weight: 500; - color: #222; - } + .details { - font-size: 7.5pt; + font-size: 10pt; color: #666; line-height: 1.4; } @@ -197,20 +183,21 @@ class QrStickerService margin-bottom: 1mm; } .detail-label { - font-weight: 500; + color: #999; text-transform: uppercase; - font-size: 6.5pt; flex: 1; } .detail-value { text-align: right; + font-weight: bold; + text-transform: uppercase; color: #222; flex: 0 0 auto; } .qr-code { - width: 50mm; - height: 50mm; + width: 95mm; + height: 95mm; } .qr-code img { width: 100%; @@ -233,14 +220,14 @@ class QrStickerService ' . htmlspecialchars($orderType) . '
' . htmlspecialchars($order->order_number) . '
-
-
Customer
-
' . htmlspecialchars($customerSurname) . '
-
+
+ Customer: + ' . htmlspecialchars($customerSurname) . ' +
Design: - ' . htmlspecialchars($this->truncate($designName, 12)) . ' + ' . htmlspecialchars($this->truncate($designName, 12)) . '
Date: @@ -250,15 +237,15 @@ class QrStickerService Status: ' . htmlspecialchars($this->formatStatus($order->status)) . '
-
- + + -
-
- QR Code -
+
+ QR Code +
+ +
diff --git a/routes/web.php b/routes/web.php index 98fce5c..0395d52 100644 --- a/routes/web.php +++ b/routes/web.php @@ -116,7 +116,7 @@ Route::match(['get', 'post'], '/test/sticker/{orderNumber}/regenerate', function $order = \App\Models\Order::where('order_number', $orderNumber)->first(); if (!$order) { - return response()->json(['error' => 'Order not found'], 404); + return response('Order not found', 404); } try { @@ -131,18 +131,14 @@ Route::match(['get', 'post'], '/test/sticker/{orderNumber}/regenerate', function $service = new \App\Services\QrStickerService(); $paths = $service->generateSticker($order); - return response()->json([ - 'success' => true, - 'message' => 'Sticker PDF generated successfully', - 'svg_path' => $paths['svg_path'], - 'pdf_path' => $paths['pdf_path'], - 'view_url' => route('test.sticker', ['orderNumber' => $orderNumber]) + // Return PDF inline for viewing + $pdfPath = storage_path('app/public/' . $paths['pdf_path']); + return response()->file($pdfPath, [ + 'Content-Type' => 'application/pdf', + 'Content-Disposition' => 'inline; filename="QR-' . $order->order_number . '.pdf"' ]); } catch (\Exception $e) { - return response()->json([ - 'error' => 'Failed to generate sticker', - 'message' => $e->getMessage() - ], 500); + return response('Failed to generate sticker: ' . $e->getMessage(), 500); } })->name('test.sticker.regenerate');