Files
autocrm/resources/views/emails/appointment-confirmed.blade.php
T
Vasyka 09fd0bada2 Faza 2 (din continuare): Email notifications
4 Mailables auto-trigger pe model events:
- WorkOrderReadyMail: la WO.status → 'ready', către client.email
  • Atașat PDF fișa lucru (via WorkOrderPdfService)
  • Total/achitat/rest, recomandări (warning box)
- PaymentReceivedMail: la Payment::created, confirmare cu sumă/metodă/ref
- AppointmentConfirmedMail: la Appointment::created status='scheduled'
- ServiceReminderMail: dispatch manual (vehicle, type=itp/oil/general, note)

Layout email branded (resources/views/emails/layout.blade.php):
- Header cu logo tenant + theme_color border-bottom
- Footer cu telefon/email/disclaimer
- Stiluri inline (compatibil tot mail client)

Settings page extins cu 4 toggle:
- 'Mașina e gata de ridicat'
- 'Confirmare plată primită'
- 'Programare confirmată'
- 'Reminder ITP / revizie'
Salvate în companies.settings.notify (JSON), default true.

NotificationDispatcher service centralizat:
- Verifică isEnabled() pe settings.notify[$key]
- Skip dacă client n-are email
- Try/catch + Log::warning pe eșec (nu crapă request-ul)

Mailables folosesc UsesTenantBranding trait pentru context unitar.
Test prin Mailpit: https://mailpit.service.mir.md (capturează toate).
2026-05-07 13:20:19 +00:00

47 lines
2.3 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.
@component('emails.layout', [
'companyName' => $companyName,
'themeColor' => $themeColor,
'phone' => $phone ?? null,
'email' => $email ?? null,
'city' => $city ?? null,
'logoUrl' => $logoUrl ?? null,
'title' => 'Programare confirmată',
])
<h2 style="margin:0 0 12px;font-size:20px;color:{{ $themeColor }};">📅 Programare confirmată</h2>
<p>Bună ziua{{ $client?->name ? ', ' . $client->name : '' }},</p>
<p>Programarea dvs. este confirmată:</p>
<table role="presentation" width="100%" cellpadding="0" cellspacing="0" style="margin:16px 0;background:#f9fafb;border-radius:8px;">
<tr><td style="padding:14px 18px;font-size:13px;color:#374151;">Data</td>
<td style="padding:14px 18px;font-size:18px;text-align:right;font-weight:700;color:{{ $themeColor }};">
{{ $appointment->date?->format('d.m.Y') }}
</td></tr>
<tr><td style="padding:8px 18px;font-size:13px;color:#374151;">Ora</td>
<td style="padding:8px 18px;font-size:14px;text-align:right;font-weight:600;">
{{ \Illuminate\Support\Str::substr($appointment->time_start, 0, 5) }} {{ \Illuminate\Support\Str::substr($appointment->time_end, 0, 5) }}
</td></tr>
@if ($appointment->title)
<tr><td style="padding:8px 18px;font-size:12px;color:#6b7280;">Subiect</td>
<td style="padding:8px 18px;font-size:12px;text-align:right;">{{ $appointment->title }}</td></tr>
@endif
@if ($vehicle)
<tr><td style="padding:8px 18px;font-size:12px;color:#6b7280;">Auto</td>
<td style="padding:8px 18px;font-size:12px;text-align:right;">
{{ $vehicle->make }} {{ $vehicle->model }}
@if ($vehicle->plate) <b>[{{ $vehicle->plate }}]</b> @endif
</td></tr>
@endif
@if ($master)
<tr><td style="padding:8px 18px;font-size:12px;color:#6b7280;">Maistru</td>
<td style="padding:8px 18px;font-size:12px;text-align:right;">{{ $master->name }}</td></tr>
@endif
@if ($post)
<tr><td style="padding:8px 18px;font-size:12px;color:#6b7280;">Pod</td>
<td style="padding:8px 18px;font-size:12px;text-align:right;">{{ $post->name }}</td></tr>
@endif
</table>
<p> așteptăm! 🚗</p>
<p style="font-size:12px;color:#6b7280;">Pentru reprogramare sau anulare, sunați-ne la {{ $phone ?? '—' }}.</p>
@endcomponent