Переглянути джерело

fix horizon, fix consulta/scontino view

marcofalabretti 11 години тому
джерело
коміт
e31ea48bbc

+ 5
- 3
app/Providers/HorizonServiceProvider.php Переглянути файл

@@ -28,9 +28,11 @@ class HorizonServiceProvider extends HorizonApplicationServiceProvider
28 28
     protected function gate(): void
29 29
     {
30 30
         Gate::define('viewHorizon', function ($user = null) {
31
-            return in_array(optional($user)->email, [
32
-                //
33
-            ]);
31
+            return $user && $user->hasRole('superadmin');
32
+
33
+            // return in_array(optional($user)->email, [
34
+            //     //
35
+            // ]);
34 36
         });
35 37
     }
36 38
 }

+ 3
- 1
app/Services/Stampa/CreaScontrino.php Переглянути файл

@@ -17,7 +17,7 @@ class CreaScontrino
17 17
      */
18 18
     public function perOrdine(Ordine $ordine): array
19 19
     {
20
-        $ordine->loadMissing(['righe_ordine.piatto', 'attivita', 'metodo_pagamento']);
20
+        $ordine->loadMissing(['righe_ordine.piatto', 'attivita', 'metodo_pagamento', 'dispositivo']);
21 21
 
22 22
         $connector = new DummyPrintConnector;
23 23
         $printer = new Printer($connector);
@@ -145,6 +145,8 @@ class CreaScontrino
145 145
         $printer->setTextSize(1, 1);
146 146
         $printer->setEmphasis(false);
147 147
         $printer->text("\n");
148
+        $printer->text("Da:".$ordine->dispositivo?->nome ?? 'ND');
149
+        $printer->text("\n");
148 150
         $metodoPagamento = $ordine->pagamento?->metodo_pagamento?->tipo ?? 'ND';
149 151
         $printer->text($this->pairLine(mb_strtoupper($this->sanitizeLine((string) $metodoPagamento)), $this->sanitizeLine($dataOra)));
150 152
     }

+ 1
- 1
database/migrations/2026_06_17_201520_fix_categoria_contabiles.php Переглянути файл

@@ -14,7 +14,7 @@ return new class extends Migration
14 14
         Schema::table('categoria_contabile', function (Blueprint $table) {
15 15
             $table->bigInteger('attivita_id')->unsigned()->nullable()->after('id');
16 16
             $table->foreign('attivita_id')->references('id')->on('attivita')->onDelete('cascade');
17
-            $table->dropUnique(['nome']);
17
+            // $table->dropUnique(['nome']);
18 18
             $table->unique(['attivita_id', 'nome']);
19 19
         });
20 20
     }

+ 1
- 1
resources/menu/verticalMenu.json Переглянути файл

@@ -105,7 +105,7 @@
105 105
       "icon": "menu-icon icon-base bx bx-chart",
106 106
       "slug": "contabilita.index",
107 107
       "url": "admin/contabilita",
108
-      "can": "permission:view-contabilita | role:amministratore",
108
+      "can": "permission:view-contabilita | role:amministratore | role:superadmin",
109 109
       "submenu": [
110 110
         {
111 111
           "name": "Prima nota",

+ 474
- 120
resources/views/consulta/scontrino/show.blade.php Переглянути файл

@@ -2,136 +2,491 @@
2 2
 
3 3
 @section('title', 'Il tuo scontrino')
4 4
 
5
-@section('pageTitle')
6
-<div class="d-flex flex-column">
7
-  <h4 class="mb-1"> 
8
-    <i class="bx bx-receipt"></i> Il tuo scontrino
9
-    <small class="text-muted">Ordine #{{ $ordine->id }}</small>
10
-  </h4>
11
-</div>
5
+@section('page-meta')
6
+  <script>document.documentElement.classList.add('scontrino-cliente-page');</script>
7
+  <link rel="preconnect" href="https://fonts.googleapis.com" />
8
+  <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
9
+  <link href="https://fonts.googleapis.com/css2?family=Plus+Jakarta+Sans:ital,wght@0,400;0,500;0,600;0,700;0,800;1,400&display=swap" rel="stylesheet" />
10
+@endsection
11
+
12
+@section('page-style')
13
+<style>
14
+  html.scontrino-cliente-page,
15
+  html.scontrino-cliente-page body {
16
+    background: #f4eef8;
17
+  }
18
+
19
+  html.scontrino-cliente-page .misc-wrapper {
20
+    text-align: start;
21
+    align-items: flex-start;
22
+    justify-content: flex-start;
23
+    padding: 0;
24
+    max-width: 100%;
25
+    min-block-size: auto;
26
+    background: transparent;
27
+  }
28
+
29
+  .scontrino-cliente {
30
+    --fest-orange: #f58220;
31
+    --fest-orange-soft: #ff9a2e;
32
+    --fest-purple: #602d91;
33
+    --fest-navy: #15265c;
34
+    --fest-text: #1a2744;
35
+    --fest-text-muted: #4a5568;
36
+    --fest-radius: 1.15rem;
37
+    --fest-shadow: 0 4px 24px rgba(21, 38, 92, 0.08), 0 1px 3px rgba(21, 38, 92, 0.06);
38
+
39
+    position: relative;
40
+    width: 100%;
41
+    max-width: 32rem;
42
+    margin: 0 auto;
43
+    padding: 1rem 0.85rem 2.5rem;
44
+    font-family: "Plus Jakarta Sans", "Public Sans", system-ui, sans-serif;
45
+    color: var(--fest-text);
46
+  }
47
+
48
+  .scontrino-cliente__bg {
49
+    position: fixed;
50
+    inset: 0;
51
+    z-index: -1;
52
+    overflow: hidden;
53
+    pointer-events: none;
54
+    background: linear-gradient(145deg, #ffe8d4 0%, #ecd8f5 38%, #d8e4f8 100%);
55
+  }
56
+
57
+  .scontrino-cliente__bg::before {
58
+    content: "";
59
+    position: absolute;
60
+    inset: 0;
61
+    background:
62
+      radial-gradient(ellipse 80% 60% at 5% 15%, rgba(245, 130, 32, 0.45) 0%, transparent 55%),
63
+      radial-gradient(ellipse 75% 55% at 98% 88%, rgba(96, 45, 145, 0.38) 0%, transparent 52%);
64
+    pointer-events: none;
65
+  }
66
+
67
+  .scontrino-cliente__bg-stripe {
68
+    position: absolute;
69
+    top: 0;
70
+    left: 0;
71
+    right: 0;
72
+    height: 5px;
73
+    background: linear-gradient(90deg, var(--fest-orange) 0%, var(--fest-purple) 50%, var(--fest-navy) 100%);
74
+  }
75
+
76
+  .scontrino-cliente__header {
77
+    text-align: center;
78
+    margin-bottom: 0.25rem;
79
+  }
80
+
81
+  .scontrino-cliente__card {
82
+    background: rgba(255, 255, 255, 0.94);
83
+    backdrop-filter: blur(14px);
84
+    border: 1px solid rgba(255, 255, 255, 0.95);
85
+    border-radius: calc(var(--fest-radius) + 0.1rem);
86
+    box-shadow: var(--fest-shadow);
87
+    padding: 1.35rem 1.25rem;
88
+    margin-bottom: 1rem;
89
+  }
90
+
91
+  .scontrino-cliente__logo {
92
+    display: block;
93
+    max-height: 44px;
94
+    width: auto;
95
+    margin: 0 auto 1rem;
96
+  }
97
+
98
+  .scontrino-cliente__eyebrow {
99
+    display: inline-flex;
100
+    align-items: center;
101
+    justify-content: center;
102
+    gap: 0.4rem;
103
+    margin-bottom: 0.65rem;
104
+    font-size: 0.72rem;
105
+    font-weight: 700;
106
+    letter-spacing: 0.1em;
107
+    text-transform: uppercase;
108
+    color: var(--fest-purple);
109
+  }
110
+
111
+  .scontrino-cliente__venue-name {
112
+    display: block;
113
+    width: 85%;
114
+    max-width: 85%;
115
+    margin: 0 auto 0.85rem;
116
+    font-size: clamp(1.35rem, 5vw, 1.75rem);
117
+    font-weight: 800;
118
+    line-height: 1.15;
119
+    letter-spacing: -0.03em;
120
+    color: var(--fest-orange);
121
+    word-break: break-word;
122
+    text-align: center;
123
+  }
124
+
125
+  .scontrino-cliente__divider {
126
+    margin: 1.15rem 0;
127
+    border: none;
128
+    border-top: 1px dashed rgba(21, 38, 92, 0.12);
129
+  }
130
+
131
+  .scontrino-cliente__meta {
132
+    display: flex;
133
+    flex-wrap: wrap;
134
+    align-items: center;
135
+    justify-content: center;
136
+    gap: 0.5rem;
137
+    font-size: 0.875rem;
138
+    color: var(--fest-text-muted);
139
+    margin-bottom: 0.25rem;
140
+  }
141
+
142
+  .scontrino-cliente__badge {
143
+    display: inline-flex;
144
+    align-items: center;
145
+    padding: 0.2rem 0.65rem;
146
+    border-radius: 999px;
147
+    font-size: 0.75rem;
148
+    font-weight: 700;
149
+    text-transform: capitalize;
150
+  }
151
+
152
+  .scontrino-cliente__badge--ok {
153
+    background: rgba(34, 197, 94, 0.15);
154
+    color: #15803d;
155
+  }
156
+
157
+  .scontrino-cliente__badge--pending {
158
+    background: rgba(21, 38, 92, 0.08);
159
+    color: var(--fest-navy);
160
+  }
161
+
162
+  .scontrino-cliente__info-grid {
163
+    display: grid;
164
+    grid-template-columns: 1fr 1fr;
165
+    gap: 0.75rem;
166
+    margin-top: 1rem;
167
+    padding-top: 1rem;
168
+    border-top: 1px dashed rgba(21, 38, 92, 0.1);
169
+  }
170
+
171
+  .scontrino-cliente__info-label {
172
+    display: block;
173
+    font-size: 0.7rem;
174
+    font-weight: 700;
175
+    text-transform: uppercase;
176
+    letter-spacing: 0.06em;
177
+    color: var(--fest-text-muted);
178
+    margin-bottom: 0.15rem;
179
+  }
180
+
181
+  .scontrino-cliente__info-value {
182
+    font-size: 0.95rem;
183
+    font-weight: 600;
184
+    color: var(--fest-navy);
185
+  }
186
+
187
+  .scontrino-cliente__note {
188
+    display: flex;
189
+    align-items: flex-start;
190
+    gap: 0.5rem;
191
+    margin-top: 1rem;
192
+    padding: 0.75rem 0.9rem;
193
+    border-radius: 0.85rem;
194
+    background: rgba(245, 130, 32, 0.1);
195
+    border: 1px solid rgba(245, 130, 32, 0.2);
196
+    font-size: 0.875rem;
197
+    color: var(--fest-text);
198
+  }
199
+
200
+  .scontrino-cliente__note i {
201
+    color: var(--fest-orange);
202
+    font-size: 1.1rem;
203
+    margin-top: 0.1rem;
204
+  }
205
+
206
+  .scontrino-cliente__section-title {
207
+    font-size: 0.72rem;
208
+    font-weight: 700;
209
+    letter-spacing: 0.08em;
210
+    text-transform: uppercase;
211
+    color: var(--fest-text-muted);
212
+    margin: 0 0 0.75rem;
213
+  }
214
+
215
+  .scontrino-cliente__items {
216
+    list-style: none;
217
+    margin: 0;
218
+    padding: 0;
219
+    display: flex;
220
+    flex-direction: column;
221
+    gap: 0.65rem;
222
+  }
223
+
224
+  .scontrino-cliente__item {
225
+    display: flex;
226
+    align-items: center;
227
+    gap: 0.85rem;
228
+    padding: 0.75rem 0.85rem;
229
+    border-radius: 0.9rem;
230
+    background: #fff;
231
+    border: 1px solid rgba(21, 38, 92, 0.06);
232
+    box-shadow: 0 1px 4px rgba(21, 38, 92, 0.04);
233
+  }
234
+
235
+  .scontrino-cliente__qty {
236
+    flex-shrink: 0;
237
+    display: flex;
238
+    flex-direction: column;
239
+    align-items: center;
240
+    justify-content: center;
241
+    min-width: 3.25rem;
242
+    padding: 0.4rem 0.5rem;
243
+    border-radius: 0.75rem;
244
+    background: linear-gradient(135deg, var(--fest-orange) 0%, var(--fest-orange-soft) 100%);
245
+    color: #fff;
246
+    font-weight: 800;
247
+    line-height: 1.15;
248
+    box-shadow: 0 2px 8px rgba(245, 130, 32, 0.28);
249
+  }
250
+
251
+  .scontrino-cliente__qty small {
252
+    font-size: 0.68rem;
253
+    font-weight: 600;
254
+    opacity: 0.92;
255
+  }
256
+
257
+  .scontrino-cliente__item-name {
258
+    flex: 1;
259
+    font-size: 1rem;
260
+    font-weight: 700;
261
+    color: var(--fest-navy);
262
+    line-height: 1.25;
263
+  }
264
+
265
+  .scontrino-cliente__item-note {
266
+    display: block;
267
+    margin-top: 0.2rem;
268
+    font-size: 0.78rem;
269
+    font-weight: 500;
270
+    color: var(--fest-text-muted);
271
+  }
272
+
273
+  .scontrino-cliente__item-price {
274
+    flex-shrink: 0;
275
+    font-size: 0.95rem;
276
+    font-weight: 700;
277
+    color: var(--fest-navy);
278
+  }
279
+
280
+  .scontrino-cliente__empty {
281
+    text-align: center;
282
+    padding: 1.5rem 1rem;
283
+    border-radius: 0.9rem;
284
+    background: rgba(21, 38, 92, 0.04);
285
+    color: var(--fest-text-muted);
286
+    font-size: 0.9rem;
287
+  }
288
+
289
+  .scontrino-cliente__total {
290
+    display: flex;
291
+    align-items: center;
292
+    justify-content: space-between;
293
+    margin-top: 1rem;
294
+    padding: 1rem 1.15rem;
295
+    border-radius: 0.95rem;
296
+    background: linear-gradient(135deg, rgba(245, 130, 32, 0.12) 0%, rgba(255, 154, 46, 0.18) 100%);
297
+    border: 1px solid rgba(245, 130, 32, 0.22);
298
+  }
299
+
300
+  .scontrino-cliente__total-label {
301
+    font-size: 0.95rem;
302
+    font-weight: 700;
303
+    color: var(--fest-navy);
304
+  }
305
+
306
+  .scontrino-cliente__total-value {
307
+    font-size: 1.45rem;
308
+    font-weight: 800;
309
+    color: var(--fest-orange);
310
+    letter-spacing: -0.02em;
311
+  }
312
+
313
+  .scontrino-cliente__actions {
314
+    display: flex;
315
+    flex-direction: column;
316
+    align-items: stretch;
317
+    gap: 0.5rem;
318
+    text-align: center;
319
+  }
320
+
321
+  .scontrino-cliente__notify-hint {
322
+    margin: 0;
323
+    font-size: 0.78rem;
324
+    color: var(--fest-text-muted);
325
+    line-height: 1.35;
326
+  }
327
+
328
+  .scontrino-cliente__btn-notify {
329
+    display: inline-flex;
330
+    align-items: center;
331
+    justify-content: center;
332
+    gap: 0.45rem;
333
+    width: 100%;
334
+    padding: 0.85rem 1.15rem;
335
+    border: none;
336
+    border-radius: 0.85rem;
337
+    font-size: 1rem;
338
+    font-weight: 700;
339
+    color: #fff;
340
+    background: linear-gradient(135deg, var(--fest-orange) 0%, var(--fest-orange-soft) 100%);
341
+    box-shadow: 0 4px 16px rgba(245, 130, 32, 0.32);
342
+    transition: box-shadow 0.15s ease, transform 0.15s ease;
343
+  }
344
+
345
+  .scontrino-cliente__btn-notify:hover:not(:disabled) {
346
+    color: #fff;
347
+    box-shadow: 0 6px 20px rgba(245, 130, 32, 0.4);
348
+    transform: translateY(-1px);
349
+  }
350
+
351
+  .scontrino-cliente__btn-notify:disabled {
352
+    opacity: 0.7;
353
+  }
354
+
355
+  .scontrino-cliente__success {
356
+    margin: 0;
357
+    padding: 0.75rem 1rem;
358
+    border-radius: 0.85rem;
359
+    background: rgba(34, 197, 94, 0.12);
360
+    border: 1px solid rgba(34, 197, 94, 0.25);
361
+    color: #15803d;
362
+    font-size: 0.875rem;
363
+    font-weight: 600;
364
+    text-align: center;
365
+  }
366
+
367
+  .scontrino-cliente__back {
368
+    display: inline-flex;
369
+    align-items: center;
370
+    justify-content: center;
371
+    gap: 0.35rem;
372
+    margin-top: 1.25rem;
373
+    padding: 0.55rem 1rem;
374
+    border-radius: 0.65rem;
375
+    font-size: 0.875rem;
376
+    font-weight: 600;
377
+    color: var(--fest-navy);
378
+    background: rgba(255, 255, 255, 0.85);
379
+    border: 1px solid rgba(21, 38, 92, 0.12);
380
+    text-decoration: none;
381
+    transition: background 0.15s ease, border-color 0.15s ease;
382
+  }
383
+
384
+  .scontrino-cliente__back:hover {
385
+    color: var(--fest-navy);
386
+    background: #fff;
387
+    border-color: rgba(21, 38, 92, 0.22);
388
+  }
389
+</style>
12 390
 @endsection
13 391
 
14 392
 @section('content')
15
-<div class="container-xxl flex-grow-1 container-p-y p-10">
16
-  <div class="invoice-preview-container mt-10">
17
-    <div class="card invoice-preview-card">
18
-      <div class="card-body">
19
-        <!-- Header with Order Info -->
20
-        <div class="d-flex align-items-center justify-content-between flex-wrap gap-3">
21
-          <div class="d-flex flex-column">
22
-            <span class="app-brand-logo demo mb-2">
23
-              <i class="bx bx-receipt text-primary" style="font-size:2rem"></i>
24
-            </span>
25
-            <h4 class="mb-1">Il tuo scontrino per <span class="text-primary">{{ $ordine->attivita->nome }}</span></h4>
26
-            <div class="d-flex flex-wrap align-items-center mb-2 gap-2">
27
-              <span class="text-muted me-2">Ordine #{{ $ordine->id }}</span>
28
-              <span class="badge bg-{{ $ordine->stato === 'pagato' ? 'success' : 'secondary' }}">
29
-                {{ ucfirst($ordine->stato ?? 'Non disponibile') }}
30
-              </span>
31
-            </div>
32
-            <small class="text-muted">{{ $ordine->created_at ? $ordine->created_at->format('d/m/Y H:i') : '' }}</small>
33
-          </div>
34
-          <div class="d-flex flex-column align-items-end">
35
-            <div class="mb-2">
36
-              <span class="fw-semibold text-heading">Cliente:</span>
37
-              <span class="ms-1 text-muted">{{ $ordine->info['cliente'] ?? '-' }}</span>
38
-            </div>
39
-            <div>
40
-              <span class="fw-semibold text-heading">Tavolo:</span>
41
-              <span class="ms-1 text-muted">{{ $ordine->info['tavolo'] ?? '-' }}</span>
42
-            </div>
43
-          </div>
44
-        </div>
45
-        @if(isset($ordine->note) && $ordine->note)
46
-          <div class="alert alert-warning bg-warning my-3 py-2 px-3 d-flex align-items-center">
47
-            <i class="bx bx-info-circle me-2"></i>
48
-            <div class="flex-grow-1">
49
-              <span class="fw-semibold">Note:</span>
50
-              <span class="ms-1">{{ $ordine->note }}</span>
51
-            </div>
52
-          </div>
53
-        @endif
54
-
55
-        <!-- Divider -->
56
-        <hr class="my-4 mx-n4" />
57
-
58
-        <!-- CARD LIST ITEMS (instead of table) -->
59
-        <div class="row gy-3 mb-4">
60
-          @forelse($ordine->righe_ordine as $riga)
61
-            <div class="col-12">
62
-              <div class="card shadow-sm border-1 h-100">
63
-                <div class="card-body p-3 d-flex flex-row align-items-center justify-content-between flex-wrap gap-2">
64
-                  <div class="d-flex align-items-center gap-3 flex-grow-1">
65
-                    <div>
66
-                      <span class="badge bg-primary text-white px-3 py-2 d-flex flex-column align-items-center justify-content-center" style="font-size:1.15rem; min-width:65px;">
67
-                        <span>{{ $riga->quantita }} x</span>
68
-                        <span class="fw-semibold" style="font-size:0.95rem;">
69
-                          &euro; {{ number_format($riga->piatto->prezzo , 2, ',', '.') }}
70
-                        </span>
71
-                      </span>
72
-                    </div>
73
-                    <div>
74
-                      <span class="fw-bold" style="font-size:1.15rem;">{{ $riga->piatto->nome ?? 'Prodotto' }}</span>
75
-                      @if(!empty($riga->note))
76
-                        <div>
77
-                          <small class="text-muted"><i class="bx bx-chat me-1"></i>{{ $riga->note }}</small>
78
-                        </div>
79
-                      @endif
80
-                    </div>
81
-                  </div>
82
-                  <!-- <div class="d-flex align-items-end gap-2 justify-content-sm-around justify-content-end" style="min-width:120px">
83
-                    <div>
84
-                      <span class="text-muted" style="font-size:0.95rem;">Totale piatto</span><br>
85
-                      <span class="fw-semibold" style="font-size:1.05rem;">&euro; {{ number_format($riga->piatto->prezzo * $riga->quantita, 2, ',', '.') }}</span>
86
-                    </div>
87
-                  </div> -->
88
-                </div>
89
-              </div>
90
-            </div>
91
-          @empty
92
-            <div class="col-12">
93
-              <div class="alert alert-secondary text-center mb-0">
94
-                 Nessun prodotto nell'ordine.
95
-              </div>
96
-            </div>
97
-          @endforelse
98
-        </div>
393
+<div class="scontrino-cliente__bg" aria-hidden="true">
394
+  <div class="scontrino-cliente__bg-stripe"></div>
395
+</div>
99 396
 
100
-        <!-- Totale finale -->
101
-        <div class="d-flex flex-row justify-content-end align-items-center py-2 px-2">
102
-          <div class="bg-light rounded-3 px-4 py-3 shadow-sm border fw-bold" style="font-size:1.1rem;">
103
-            Totale: <span class="text-primary" style="font-size:1.25rem;">&euro; {{ number_format($ordine->prezzo ?? 0, 2, ',', '.') }}</span>
104
-          </div>
397
+<div class="scontrino-cliente">
398
+  <div class="scontrino-cliente__card">
399
+    <div class="scontrino-cliente__header">
400
+      <img
401
+        src="{{ asset('assets/img/logo_fest_L.png') }}"
402
+        alt="{{ config('app.name') }}"
403
+        class="scontrino-cliente__logo"
404
+      >
405
+      <p class="scontrino-cliente__eyebrow mb-0">
406
+        <i class="bx bx-receipt"></i> Il tuo scontrino
407
+      </p>
408
+      <span class="scontrino-cliente__venue-name">{{ $ordine->attivita->nome ?? 'Attività' }}</span>
409
+      <div class="scontrino-cliente__meta">
410
+        <span>#{{ $ordine->id }}</span>
411
+        <span>&middot;</span>
412
+        <span>{{ $ordine->created_at ? $ordine->created_at->format('d/m/Y H:i') : '' }}</span>
413
+        <span class="scontrino-cliente__badge scontrino-cliente__badge--{{ $ordine->stato === 'pagato' ? 'ok' : 'pending' }}">
414
+          {{ ucfirst($ordine->stato ?? 'Non disponibile') }}
415
+        </span>
416
+      </div>
417
+    </div>
418
+
419
+    <div class="scontrino-cliente__info-grid">
420
+      <div>
421
+        <span class="scontrino-cliente__info-label">Cliente</span>
422
+        <span class="scontrino-cliente__info-value">{{ $ordine->info['cliente'] ?? '—' }}</span>
423
+      </div>
424
+      <div>
425
+        <span class="scontrino-cliente__info-label">Tavolo</span>
426
+        <span class="scontrino-cliente__info-value">{{ $ordine->info['tavolo'] ?? '—' }}</span>
427
+      </div>
428
+    </div>
429
+
430
+    @if(!empty($ordine->note))
431
+      <div class="scontrino-cliente__note">
432
+        <i class="bx bx-info-circle"></i>
433
+        <div>
434
+          <strong>Note</strong><br>
435
+          {{ $ordine->note }}
105 436
         </div>
437
+      </div>
438
+    @endif
106 439
 
107
-        <!-- Tracciamento ordine -->
108
-        <div class="d-flex flex-row justify-content-center align-items-center py-2 px-2">
109
-          <div class="d-flex flex-column align-items-center">
110
-            <span class="badge bg-primary text-white px-3 py-2 d-flex flex-column align-items-center justify-content-center" style="font-size:1.15rem; min-width:65px;">
111
-              <span>Tracciamento ordine</span>
112
-              <span class="fw-semibold" style="font-size:0.95rem;">
113
-                <a href="{{ route('ordine.show', $ordine->id) }}" target="_blank">
114
-                  <i class="bx bx-link"></i> {{ route('ordine.show', $ordine->id) }}
115
-                </a>
440
+    <hr class="scontrino-cliente__divider">
441
+
442
+    <p class="scontrino-cliente__section-title">Cosa hai ordinato</p>
443
+
444
+    <ul class="scontrino-cliente__items">
445
+      @forelse($ordine->righe_ordine as $riga)
446
+        <li class="scontrino-cliente__item">
447
+          <div class="scontrino-cliente__qty">
448
+            {{ $riga->quantita }}×
449
+            <small>&euro; {{ number_format($riga->piatto->prezzo ?? 0, 2, ',', '.') }}</small>
450
+          </div>
451
+          <div class="scontrino-cliente__item-name">
452
+            {{ $riga->piatto->nome ?? 'Prodotto' }}
453
+            @if(!empty($riga->note))
454
+              <span class="scontrino-cliente__item-note">
455
+                <i class="bx bx-chat"></i> {{ $riga->note }}
116 456
               </span>
117
-            </span>
457
+            @endif
458
+          </div>
459
+          <div class="scontrino-cliente__item-price">
460
+            &euro; {{ number_format(($riga->piatto->prezzo ?? 0) * $riga->quantita, 2, ',', '.') }}
118 461
           </div>
462
+        </li>
463
+      @empty
464
+        <li class="scontrino-cliente__empty">Nessun prodotto nell'ordine.</li>
465
+      @endforelse
466
+    </ul>
119 467
 
120
-          <button type="button" id="btn-notificami" class="btn btn-primary btn-lg w-100" data-ordine-id="{{ $ordine->id }}">
121
-    <i class="bx bx-bell"></i> Avvisami quando è pronto
122
-  </button>
123
-  <div id="msg-successo" class="alert alert-success d-none mt-3">
124
-    Notifiche attive — puoi chiudere questa pagina.
125
-  </div>        </div>
126
-
127
-        <div class="d-flex justify-content-center mt-4">
128
-          <a href="{{ url()->previous() }}" class="btn btn-label-secondary">
129
-            <i class="bx bx-arrow-back me-1"></i> Torna indietro
130
-          </a>
131
-        </div>
132
-      </div>
468
+    <div class="scontrino-cliente__total">
469
+      <span class="scontrino-cliente__total-label">Totale ordine</span>
470
+      <span class="scontrino-cliente__total-value">&euro; {{ number_format($ordine->prezzo ?? 0, 2, ',', '.') }}</span>
133 471
     </div>
134 472
   </div>
473
+
474
+  <div class="scontrino-cliente__card scontrino-cliente__actions">
475
+    <button type="button" id="btn-notificami" class="scontrino-cliente__btn-notify" data-ordine-id="{{ $ordine->id }}">
476
+      <i class="bx bx-bell"></i> Avvisami quando è pronto
477
+    </button>
478
+    <p class="scontrino-cliente__notify-hint">Ricevi una notifica sul telefono appena l'ordine è pronto.</p>
479
+
480
+    <div id="msg-successo" class="scontrino-cliente__success d-none">
481
+      Notifiche attive — puoi chiudere questa pagina.
482
+    </div>
483
+  </div>
484
+
485
+  <div class="text-center">
486
+    <a href="{{ url()->previous() }}" class="scontrino-cliente__back">
487
+      <i class="bx bx-arrow-back"></i> Torna indietro
488
+    </a>
489
+  </div>
135 490
 </div>
136 491
 @endsection
137 492
 
@@ -148,4 +503,3 @@
148 503
 </script>
149 504
 @vite(['resources/js/ordine-notifica.js'])
150 505
 @endsection
151
-

Завантаження…
Відмінити
Зберегти