feat(work-orders): new Mitchell1-style dashboard view (Phase 1 — layout + tabs)

Custom Filament Page at /app/work-orders/{id}/dashboard renders a
Mitchell1-inspired 3-column layout:
  - Top bar: WO#, status badge, actions (Edit / Tracking link)
  - Meta header row: creation / opened / ETA / responsible / urgency /
    paid amount (6 cells)
  - Left sidebar (300px): Client card (avatar, phone, email, status
    tag, 3-stat grid: visits/total/debt) + Vehicle card (photo, plate,
    VIN, mileage, engine, gearbox) + Repair history (latest 5 for this
    vehicle, links to dashboards)
  - Middle: tab bar (Lucrări/Piese/Diagnostic/Foto/Documente/Note)
    with Alpine-driven switching. Works & Parts show the tables read-
    only; add/edit still goes through existing EditWorkOrder Filament
    resource. Photos tab shows gallery from spatie/media-library.
  - Right (300px): Finance summary card (works cost, parts cost,
    discount, total, paid, balance) + placeholder for Timeline+Chat
    (Phase 2)
  - Responsive: right column collapses <1280px, left <900px.

'Vizualizare dashboard' button added on top of the existing
EditWorkOrder page so users can switch between edit form and info-
dense dashboard.

Fixed getSlug() signature (must match parent with ?Panel $panel).

+14 translations. All 306 tests pass.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-08-05 18:48:52 +00:00
parent 6de9c615f7
commit fa8704f8b6
5 changed files with 818 additions and 2 deletions
+12
View File
@@ -522,6 +522,8 @@
"Cost & marjă": "Cost & margin",
"Cost (de la terț)": "Cost (subcontractor)",
"Cost (terț)": "Cost (subcontractor)",
"Cost manopere": "Labor cost",
"Cost piese": "Parts cost",
"Cost piese (achiziție)": "Parts cost (purchase)",
"Cost/lead": "Cost/lead",
"Costuri": "Costs",
@@ -891,6 +893,7 @@
"Fără articol (manual)": "No article (manual)",
"Fără client": "No client",
"Fără maistru": "No master",
"Fără mașină": "No vehicle",
"Fără răspuns": "No answer",
"Fără stoc": "Out of stock",
"GNC": "CNG",
@@ -996,6 +999,7 @@
"Is vip": "VIP",
"Istoric depozitare": "Storage history",
"Istoric prețuri furnizori": "Supplier price history",
"Istoric reparații": "Repair history",
"Iulie": "July",
"Iunie": "June",
"JSON": "JSON",
@@ -1246,11 +1250,13 @@
"Nicio factură generată": "No invoice generated",
"Nicio fișă de lucru": "No work orders",
"Nicio fișă în perioada selectată.": "No orders in selected period.",
"Nicio fotografie": "No photos",
"Nicio lucrare de caroserie": "No bodyshop jobs",
"Nicio lucrare la terți": "No subcontracted work",
"Nicio manoperă efectuată.": "No work performed.",
"Nicio mașină încă": "No vehicles yet",
"Nicio metodă de plată configurată. Contactează operatorul.": "No payment method configured. Contact operator.",
"Nicio notă internă.": "No internal notes.",
"Nicio piesă implicită": "No default parts",
"Nicio piesă montată.": "No parts installed.",
"Nicio plată": "No payments",
@@ -1558,6 +1564,7 @@
"Prețuri": "Prices",
"Prețurile se înregistrează automat la fiecare recepție de PO.": "Prices are auto-recorded on every PO receipt.",
"Price": "Price",
"Prima vizită": "First visit",
"Primește cereri din canalul Telegram + trimite confirmări automate.": "Receive requests from the Telegram channel + send auto-confirmations.",
"Primit": "Incoming",
"Print": "Print",
@@ -1980,6 +1987,7 @@
"Testează bot Telegram": "Test Telegram bot",
"Theme color": "Theme color",
"Time": "Time",
"Timeline & Chat — Phase 2": "Timeline & Chat — Phase 2",
"Timp deschidere, ms": "Opening time, ms",
"Timp lucrat": "Time worked",
"Timp mediu": "Avg time",
@@ -2030,8 +2038,10 @@
"Total general": "Grand total",
"Total ieșiri": "Total outflow",
"Total intrări": "Total inflow",
"Total manopere:": "Labor total:",
"Total net": "Net total",
"Total paid": "Total paid",
"Total piese:": "Parts total:",
"Total plătit": "Total paid",
"Total rezultate": "Total results",
"Total venituri": "Total revenue",
@@ -2178,7 +2188,9 @@
"Visa, Mastercard prin Stripe": "Visa, Mastercard prin Stripe",
"Vizibil": "Visible",
"Vizitator": "Viewer",
"Vizite": "Visits",
"Vizual": "Visual",
"Vizualizare dashboard": "Dashboard view",
"Vizualizează": "View",
"Vizualizări": "Views",
"Vopsea sărită": "Paint chip",