Files
autocrm/resources/views/shop/order.blade.php
T
Vasyka 954ba8f059 Stage 12 — Online Store: public catalog + cart + orders
Schema:
- online_orders (token-tracked, status workflow, delivery method/fee)
- online_order_items (price snapshot, fulfilled flag)
- part_cross_refs (OEM/equivalent codes for search)
- parts.is_published (shop visibility)

Storefront (ShopController, tenant subdomain, /shop):
- Catalog with search across name/article/brand/cross-refs, category +
  in-stock filters, live stock, white-label themed layout
- Part detail page with cross-ref codes
- VIN search → VinDecoder → guided catalog search
- Session cart (per-tenant key), guest checkout, order confirmation page
- Respects settings.shop.enabled (404 when off); tenant-guarded

Part::searchPublished matches cross-ref articles via whereHas.

Order notifications (ShopOrderNotifier, best-effort):
- Staff: Web Push to active users
- Customer: Telegram if phone matches a linked client

Filament (tenant):
- OnlineOrderResource under "Magazin" nav group, status workflow,
  items relation, "Onorează" action issues stock via WarehouseService (FIFO)
- PartResource: is_published toggle + column + bulk publish/unpublish +
  CrossRefsRelationManager
- Settings: shop section (enable, delivery methods, fee, free-over)
- Landing page: shop button when enabled

Tests (6 new):
- catalog 404 when disabled; lists published only; cross-ref search;
  order placement (token + items + total); fulfill issues stock;
  cross-tenant token isolation

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-28 05:27:51 +00:00

61 lines
2.8 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
@extends('shop.layout')
@section('title', 'Comanda ' . $order->number)
@section('content')
@php
$currency = $tenant->settings['currency'] ?? 'MDL';
$statuses = \App\Models\Tenant\OnlineOrder::STATUSES;
$delivery = \App\Models\Tenant\OnlineOrder::DELIVERY;
$flow = ['new', 'confirmed', 'packed', 'shipped', 'delivered'];
$idx = array_search($order->status, $flow, true);
@endphp
<div class="card" style="text-align:center;">
<div style="font-size:14px;color:#6b7280;">Comanda</div>
<div style="font-size:24px;font-weight:700;margin:4px 0;">#{{ $order->number }}</div>
<span class="status-pill">{{ $statuses[$order->status] ?? $order->status }}</span>
</div>
@if ($order->status !== 'cancelled')
<div class="card" style="margin-top:14px;">
<h3 style="font-size:15px;margin-bottom:12px;">Status</h3>
<div style="display:flex;justify-content:space-between;gap:4px;">
@foreach ($flow as $i => $st)
<div style="flex:1;text-align:center;">
<div style="width:22px;height:22px;border-radius:50%;margin:0 auto 6px;
background:{{ $idx !== false && $i <= $idx ? ($tenant->settings['theme_color'] ?? '#3B82F6') : '#e5e7eb' }};"></div>
<div style="font-size:11px;color:{{ $idx !== false && $i <= $idx ? '#111827' : '#9ca3af' }};">
{{ $statuses[$st] }}
</div>
</div>
@endforeach
</div>
</div>
@endif
<div class="card" style="margin-top:14px;">
<h3 style="font-size:15px;margin-bottom:10px;">Produse</h3>
<table class="cart">
@foreach ($order->items as $it)
<tr>
<td>{{ $it->name }} <span class="muted">×{{ rtrim(rtrim(number_format((float)$it->qty,2),'0'),'.') }}</span></td>
<td class="r">{{ number_format((float) $it->total, 2) }} {{ $currency }}</td>
</tr>
@endforeach
<tr><td class="muted">Livrare ({{ $delivery[$order->delivery_method] ?? $order->delivery_method }})</td>
<td class="r">{{ number_format((float) $order->delivery_fee, 2) }} {{ $currency }}</td></tr>
<tr><td style="font-weight:700;">Total</td>
<td class="r" style="font-weight:700;font-size:18px;">{{ number_format((float) $order->total, 2) }} {{ $currency }}</td></tr>
</table>
</div>
<div class="card" style="margin-top:14px;">
<h3 style="font-size:15px;margin-bottom:8px;">Date livrare</h3>
<p class="muted">{{ $order->customer_name }} · {{ $order->customer_phone }}</p>
@if ($order->address)<p class="muted">{{ $order->address }}</p>@endif
</div>
<div style="margin-top:16px;text-align:center;">
<a class="btn outline" href="/shop"> Continuă cumpărăturile</a>
</div>
@endsection