feat(work-order-dashboard): Phase 2 — Timeline + Chat + Bottom action bar

Right column now shows:
- Timeline card: synthesised events from WO lifecycle fields (created,
  opened, approved, closed) + payments + activity_log entries (spatie/
  activitylog). Sorted newest first, scrollable.
- Chat client card: outbound notifications history (ClientNotificationLog)
  + inline send form. Prefers Telegram if client has telegram_chat_id,
  else falls back to SMS/WhatsApp. Logged either way for UI history.

New bottom action bar (fixed, above footer):
- Previous / Next WO links (adjacent by id) with number preview
- Repeat order: pre-fills create form with same client/vehicle
- Close order (danger button): sets status='done' + closed_at=now, with
  wire:confirm guard. Hidden when already closed.

+14 translations. Fixed ready_at reference (not in schema, removed).
All 306 tests pass.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-08-05 19:00:28 +00:00
parent fa8704f8b6
commit 9830dd9a6f
4 changed files with 322 additions and 9 deletions
+14
View File
@@ -263,6 +263,7 @@
"Auto": "Vehicle",
"Auto / model": "Vehicle / model",
"Auto CRM": "CRM vehicle",
"Auto primit în service": "Vehicle received",
"Auto-import Excel/CSV": "Auto-import Excel/CSV",
"AutoCRM PSauto · psauto.service.mir.md": "AutoCRM PSauto · psauto.service.mir.md",
"AutoCRM SRL": "AutoCRM SRL",
@@ -383,6 +384,7 @@
"Cereri": "Leads",
"Cereri noi": "New leads",
"Channel": "Channel",
"Chat client": "Client chat",
"Check-in depozit": "Check-in storage",
"Checksum (ISO)": "Checksum (ISO)",
"Cheia HMAC pentru semnarea cererilor + verificarea webhook-urilor de la Paynet.": "Cheia HMAC pentru semnarea cererilor + verificarea webhook-urilor de la Paynet.",
@@ -455,6 +457,7 @@
"Comandă emisă": "Order issued",
"Comandă nouă #": "New order #",
"Comandă primită": "Order received",
"Comandă repetată": "Repeat order",
"Combustibil": "Fuel",
"Comentariu / recomandări maistru": "Master comment / recommendations",
"Comenzi": "Orders",
@@ -816,6 +819,7 @@
"Extras": "Statement",
"Eșapament": "Exhaust",
"Ești sigur?": "Are you sure?",
"Eșuat": "Failed",
"FIȘĂ DE LUCRU": "WORK ORDER",
"Facturi": "Invoices",
"Facturi & abonament": "Facturi & abonament",
@@ -855,9 +859,11 @@
"Fișierul nu există.": "File does not exist.",
"Fișă": "Order",
"Fișă asociată": "Linked order",
"Fișă creată": "Order created",
"Fișă de lucru": "Work order",
"Fișă lucru": "Work order",
"Fișă lucru (opțional)": "Work order (opt.)",
"Fișă închisă": "Order closed",
"Folie PPF": "PPF film",
"Folosește AI Assistant": "Use AI Assistant",
"Folosește „Check-in depozit": "Use \"Check-in storage\"",
@@ -892,6 +898,8 @@
"Fără acest cod, plata va fi greu de identificat.": "Without this code, payment will be hard to identify.",
"Fără articol (manual)": "No article (manual)",
"Fără client": "No client",
"Fără client — nu se poate trimite mesaj.": "No client — cannot send message.",
"Fără evenimente": "No events",
"Fără maistru": "No master",
"Fără mașină": "No vehicle",
"Fără răspuns": "No answer",
@@ -1168,6 +1176,7 @@
"Merchant Code": "Merchant Code",
"Mesaj": "Message",
"Mesaj client": "Client message",
"Mesaj trimis": "Message sent",
"Mesaje": "Messages",
"Mesaje AI/lună": "AI messages/month",
"Message": "Message",
@@ -1496,6 +1505,7 @@
"Plată": "Payment",
"Plată & total": "Payment & total",
"Plată anulată": "Plată anulată",
"Plată primită": "Payment received",
"Plată reușită": "Plată reușită",
"Plată reușită!": "Plată reușită!",
"Plângere client": "Client complaint",
@@ -1987,6 +1997,7 @@
"Testează bot Telegram": "Test Telegram bot",
"Theme color": "Theme color",
"Time": "Time",
"Timeline": "Timeline",
"Timeline & Chat — Phase 2": "Timeline & Chat — Phase 2",
"Timp deschidere, ms": "Opening time, ms",
"Timp lucrat": "Time worked",
@@ -2083,6 +2094,7 @@
"Trimite prin email": "Send by email",
"Trimite reminder după X zile fără vizită": "Send reminder after X days without visit",
"Trimite reset parolă": "Send password reset",
"Trimitere eșuată — verifică integrarea": "Send failed — check integration",
"Turbo": "Turbo",
"Type": "Type",
"UAH — Hryvnia": "UAH — Hryvnia",
@@ -2517,6 +2529,8 @@
"Începe lucrul": "Start work",
"Închide": "Close",
"Închide fișa": "Close order",
"Închide fișa?": "Close the order?",
"Închide fișă": "Close order",
"Închidere KZ ÎNAINTE": "Closing KZ BEFORE",
"Închidere ÎNAINTE": "Closing BEFORE",
"Închis": "Closed",
+14
View File
@@ -263,6 +263,7 @@
"Auto": "Авто",
"Auto / model": "Авто / модель",
"Auto CRM": "CRM-авто",
"Auto primit în service": "Авто принято в сервис",
"Auto-import Excel/CSV": "Auto-import Excel/CSV",
"AutoCRM PSauto · psauto.service.mir.md": "AutoCRM PSauto · psauto.service.mir.md",
"AutoCRM SRL": "AutoCRM SRL",
@@ -383,6 +384,7 @@
"Cereri": "Заявки",
"Cereri noi": "Новые заявки",
"Channel": "Канал",
"Chat client": "Чат с клиентом",
"Check-in depozit": "Приёмка на склад",
"Checksum (ISO)": "Checksum (ISO)",
"Cheia HMAC pentru semnarea cererilor + verificarea webhook-urilor de la Paynet.": "Cheia HMAC pentru semnarea cererilor + verificarea webhook-urilor de la Paynet.",
@@ -455,6 +457,7 @@
"Comandă emisă": "Заказ создан",
"Comandă nouă #": "Новый заказ #",
"Comandă primită": "Заказ получен",
"Comandă repetată": "Повторный заказ",
"Combustibil": "Топливо",
"Comentariu / recomandări maistru": "Комментарий / рекомендации мастера",
"Comenzi": "Заказы",
@@ -816,6 +819,7 @@
"Extras": "Выписка",
"Eșapament": "Выхлоп",
"Ești sigur?": "Ты уверен?",
"Eșuat": "Ошибка",
"FIȘĂ DE LUCRU": "ЗАКАЗ-НАРЯД",
"Facturi": "Счета",
"Facturi & abonament": "Facturi & abonament",
@@ -855,9 +859,11 @@
"Fișierul nu există.": "Файл не существует.",
"Fișă": "Наряд",
"Fișă asociată": "Связанный наряд",
"Fișă creată": "Наряд создан",
"Fișă de lucru": "Заказ-наряд",
"Fișă lucru": "Заказ-наряд",
"Fișă lucru (opțional)": "Заказ-наряд (опц.)",
"Fișă închisă": "Наряд закрыт",
"Folie PPF": "Плёнка PPF",
"Folosește AI Assistant": "Использовать AI Assistant",
"Folosește „Check-in depozit": "Используйте «Приёмка на склад»",
@@ -892,6 +898,8 @@
"Fără acest cod, plata va fi greu de identificat.": "Без этого кода платёж трудно идентифицировать.",
"Fără articol (manual)": "Без артикула (вручную)",
"Fără client": "Без клиента",
"Fără client — nu se poate trimite mesaj.": "Нет клиента — сообщение отправить нельзя.",
"Fără evenimente": "Нет событий",
"Fără maistru": "Без мастера",
"Fără mașină": "Без авто",
"Fără răspuns": "Без ответа",
@@ -1168,6 +1176,7 @@
"Merchant Code": "Merchant Code",
"Mesaj": "Сообщение",
"Mesaj client": "Сообщение клиента",
"Mesaj trimis": "Сообщение отправлено",
"Mesaje": "Сообщения",
"Mesaje AI/lună": "AI-сообщения/мес",
"Message": "Сообщение",
@@ -1496,6 +1505,7 @@
"Plată": "Платёж",
"Plată & total": "Оплата и итого",
"Plată anulată": "Plată anulată",
"Plată primită": "Платёж получен",
"Plată reușită": "Plată reușită",
"Plată reușită!": "Plată reușită!",
"Plângere client": "Жалоба клиента",
@@ -1987,6 +1997,7 @@
"Testează bot Telegram": "Тест Telegram-бота",
"Theme color": "Theme color",
"Time": "Время",
"Timeline": "Хронология",
"Timeline & Chat — Phase 2": "Timeline и чат — этап 2",
"Timp deschidere, ms": "Время открытия, мс",
"Timp lucrat": "Отработано",
@@ -2083,6 +2094,7 @@
"Trimite prin email": "Отправить по email",
"Trimite reminder după X zile fără vizită": "Отправить напоминание через X дней без визита",
"Trimite reset parolă": "Отправить сброс пароля",
"Trimitere eșuată — verifică integrarea": "Ошибка отправки — проверьте интеграцию",
"Turbo": "Турбина",
"Type": "Тип",
"UAH — Hryvnia": "UAH — Гривна",
@@ -2517,6 +2529,8 @@
"Începe lucrul": "Начать работу",
"Închide": "Закрыть",
"Închide fișa": "Закрыть наряд",
"Închide fișa?": "Закрыть наряд?",
"Închide fișă": "Закрыть наряд",
"Închidere KZ ÎNAINTE": "Закрытие КЗ ДО",
"Închidere ÎNAINTE": "Закрытие ДО",
"Închis": "Закрыт",