Files
autocrm/resources/views/emails/shop/order-confirmation.blade.php
T
Vasyka 3da1f5412a feat: shop UX polish — password reset / order email / multi-image / customer admin
Shop password reset:
- Configured 'shop_customers' password broker on the existing
  password_reset_tokens table
- ShopCustomer::sendPasswordResetNotification overrides Laravel default to
  send a ShopPasswordResetMail with a tenant-subdomain reset URL
- Routes /shop/password/forgot, /shop/password/email, /shop/password/reset/{token}
  + ShopAuthController showForgotPassword/sendResetLink/showResetPassword/
  resetPassword. Forgot view stays generic ("if it exists, we sent…") to avoid
  email enumeration. Login view links to "Am uitat parola".

Order confirmation email:
- ShopOrderConfirmationMail + nicely formatted HTML email template
- ShopOrderNotifier::placed now also emails customer_email (best-effort,
  warning-only logged on failure) alongside existing Telegram + staff push

Multiple images per Part:
- Part media collection switched from singleFile to multiple (max 8 in form)
- imageUrls() helper for galleries; imageUrl() still returns first for cards
- PartResource form: reorderable multi-upload
- Shop part detail: vertical thumbnails switch the main image via vanilla JS

ShopCustomerResource (tenant Filament, "Magazin" nav group):
- List with name/phone/email/client_id/orders_count/last_login_at
- Edit (no password field exposed)
- "Trimite reset parolă" action uses the new broker
- OrdersRelationManager shows the customer's orders read-only

Tests (7 new):
- forgot sends mail; forgot doesn't disclose unknown email; reset with valid
  token changes password; bad token rejected; order email when customer_email
  set; email skipped without it; Part has imageUrls() collection

Full suite: 130 passed.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-06-03 06:14:45 +00:00

66 lines
3.1 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.
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Comandă primită</title>
</head>
<body style="font-family: system-ui, -apple-system, 'Segoe UI', Roboto, sans-serif; max-width: 600px; margin: 0 auto; padding: 24px; color: #1f2937;">
@php $brand = $company->display_name ?? $company->name; @endphp
<h2 style="font-size: 22px; margin-bottom: 4px;">{{ $brand }}</h2>
<p style="color: #6b7280; margin-bottom: 24px;">Comanda ta a fost primită cu succes.</p>
<div style="background: #f9fafb; border-radius: 10px; padding: 18px; margin-bottom: 18px;">
<div style="font-size: 14px; color: #6b7280;">Comanda</div>
<div style="font-size: 22px; font-weight: 700; margin-bottom: 8px;">#{{ $order->number }}</div>
<div style="color: #6b7280; font-size: 13px;">
{{ $order->created_at->isoFormat('D MMM YYYY, HH:mm') }} ·
{{ \App\Models\Tenant\OnlineOrder::DELIVERY[$order->delivery_method] ?? $order->delivery_method }}
</div>
</div>
<h3 style="font-size: 16px; margin-bottom: 8px;">Produsele tale</h3>
<table style="width: 100%; border-collapse: collapse; margin-bottom: 18px; font-size: 14px;">
@foreach ($items as $item)
<tr>
<td style="padding: 8px 0; border-bottom: 1px solid #f3f4f6;">
{{ $item->name }}
<span style="color: #9ca3af;"> × {{ rtrim(rtrim(number_format((float) $item->qty, 2), '0'), '.') }}</span>
</td>
<td style="padding: 8px 0; border-bottom: 1px solid #f3f4f6; text-align: right;">
{{ number_format((float) $item->total, 2) }} {{ $currency }}
</td>
</tr>
@endforeach
@if ((float) $order->delivery_fee > 0)
<tr>
<td style="padding: 8px 0; color: #6b7280;">Livrare</td>
<td style="padding: 8px 0; text-align: right;">{{ number_format((float) $order->delivery_fee, 2) }} {{ $currency }}</td>
</tr>
@endif
<tr>
<td style="padding: 12px 0 4px; font-weight: 700;">Total</td>
<td style="padding: 12px 0 4px; font-weight: 700; font-size: 18px; text-align: right;">
{{ number_format((float) $order->total, 2) }} {{ $currency }}
</td>
</tr>
</table>
@if ($order->address)
<p style="background: #fefce8; border-left: 3px solid #facc15; padding: 10px 12px; font-size: 13px; color: #713f12;">
<strong>Adresă livrare:</strong> {{ $order->address }}
</p>
@endif
<p style="margin: 24px 0;">
<a href="{{ $trackingUrl }}" style="display: inline-block; background: #3b82f6; color: #fff; padding: 12px 24px; border-radius: 8px; text-decoration: none; font-weight: 600;">
Urmărește comanda
</a>
</p>
<p style="color: #9ca3af; font-size: 12px; border-top: 1px solid #e5e7eb; padding-top: 12px; margin-top: 32px;">
Email automat de la {{ $brand }} nu răspunde la el. Pentru întrebări, sună la {{ $company->phone ?? '—' }}.
</p>
</body>
</html>