feat(i18n): fix widgets, pipeline & mechanic boards + missing translations

Follow-up to previous i18n pass — user reported many visible RO strings on
EN/RU locales because auto-wrap missed:
  - Stat::make() first-arg labels in StatsOverview, FinanceOverview, PlatformStats
  - $heading static in LowStockTable (converted to getHeading() method)
  - Pipeline board Blade view: 40+ literal strings wrapped with {{ __() }}
  - Mechanic board Blade view: statuses, buttons, block modal
  - PipelineBoard.php hardcoded tag labels, stage labels, notify strings
  - MechanicBoard.php confirmBlock notification

Added human RU + EN translations for the visible strings shown in the
screenshots (dashboard widgets, Client/Vehicle list breadcrumbs & columns,
pipeline board topbar/stats/filters/cards/detail panel/quick actions,
mechanic board stats/statuses/block modal). All 306 tests pass.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-07-15 05:31:26 +00:00
parent f7fc69077b
commit 2d447e6294
9 changed files with 381 additions and 156 deletions
+10 -10
View File
@@ -33,29 +33,29 @@ class PlatformStats extends BaseWidget
->count();
return [
Stat::make('Tenants total', $total)
->description('Toate companiile')
Stat::make(__('Tenants total'), $total)
->description(__('Toate companiile'))
->descriptionIcon('heroicon-m-building-office-2')
->color('primary')
->url(\App\Filament\Central\Resources\CompanyResource::getUrl('index')),
Stat::make('Active', $active)
Stat::make(__('Active'), $active)
->description(__("✓ Pe abonament plătit"))
->descriptionIcon('heroicon-m-check-circle')
->color('success'),
Stat::make('În trial', $trial)
->description($trial > 0 ? 'Posibili clienți noi' : '—')
Stat::make(__('În trial'), $trial)
->description($trial > 0 ? __('Posibili clienți noi') : '—')
->descriptionIcon('heroicon-m-clock')
->color('warning'),
Stat::make('Expiră < 7 zile', $expiring)
->description($expiring > 0 ? '⚠ Acțiune necesară' : 'Toate ok')
Stat::make(__('Expiră < 7 zile'), $expiring)
->description($expiring > 0 ? __('⚠ Acțiune necesară') : __('Toate ok'))
->descriptionIcon('heroicon-m-exclamation-triangle')
->color($expiring > 0 ? 'danger' : 'success'),
Stat::make('Venit luna curentă', number_format($mrr, 0, ',', ' ') . ' MDL')
Stat::make(__('Venit luna curentă'), number_format($mrr, 0, ',', ' ') . ' MDL')
->description(__('MRR realizat'))
->descriptionIcon('heroicon-m-banknotes')
->color('success'),
Stat::make('Facturi neplătite', $overdue)
->description($overdue > 0 ? 'Verifică și amintește' : 'Toate plătite')
Stat::make(__('Facturi neplătite'), $overdue)
->description($overdue > 0 ? __('Verifică și amintește') : __('Toate plătite'))
->descriptionIcon('heroicon-m-exclamation-circle')
->color($overdue > 0 ? 'danger' : 'gray')
->url(\App\Filament\Central\Resources\SubscriptionResource::getUrl('index') . '?activeTab=overdue'),
+16 -16
View File
@@ -171,7 +171,7 @@ class PipelineBoard extends Page
$list = array_values($cards[$key]);
$sum = array_sum(array_map(fn ($c) => (float) $c['amount'], $list));
$columns[$key] = [
'label' => $label,
'label' => __($label),
'color' => $color,
'count' => count($list),
'sum' => $sum,
@@ -238,7 +238,7 @@ class PipelineBoard extends Page
}
Lead::create(array_merge($data, ['status' => 'new']));
$this->showNewForm = false;
$this->notify('Cerere nouă adăugată');
$this->notify(__('Cerere nouă adăugată'));
}
public function exportCsv()
@@ -398,10 +398,10 @@ class PipelineBoard extends Page
'date' => today()->addDay(),
'time_start' => '10:00',
'time_end' => '11:00',
'title' => $title ?: 'Programare',
'title' => $title ?: __('Programare'),
'status' => 'scheduled',
]);
$this->notify("Programare creată · mâine 10:00");
$this->notify(__('Programare creată · mâine 10:00'));
$this->openCardKey = null;
}
@@ -439,7 +439,7 @@ class PipelineBoard extends Page
$tags[] = ['label' => Lead::SOURCES[$lead->source] ?? $lead->source, 'color' => 'gray'];
}
if ($lead->status === 'no_answer') {
$tags[] = ['label' => 'Fără răspuns', 'color' => 'red'];
$tags[] = ['label' => __('Fără răspuns'), 'color' => 'red'];
}
$diffMin = $lead->created_at?->diffInMinutes(now()) ?? 0;
$overdue = $diffMin > 60 && $lead->status !== 'contacted';
@@ -450,7 +450,7 @@ class PipelineBoard extends Page
'code' => 'CR-' . str_pad((string) $lead->id, 4, '0', STR_PAD_LEFT),
'subject' => trim(($lead->car ?: '') . ' ' . ($lead->model ?: '')) ?: $lead->name,
'plate' => $lead->car ?: '',
'client_name' => $lead->name ?: 'Anonim',
'client_name' => $lead->name ?: __('Anonim'),
'phone' => $lead->phone,
'source' => $lead->source,
'amount' => (float) $lead->budget,
@@ -470,7 +470,7 @@ class PipelineBoard extends Page
{
$tags = [];
if ($deal->urgent) {
$tags[] = ['label' => 'Urgent', 'color' => 'red'];
$tags[] = ['label' => __('Urgent'), 'color' => 'red'];
}
if ($deal->source && in_array($deal->source, ['instagram', 'site', 'call', 'whatsapp', 'telegram'])) {
$tags[] = ['label' => Lead::SOURCES[$deal->source] ?? $deal->source, 'color' => 'gray'];
@@ -542,23 +542,23 @@ class PipelineBoard extends Page
private function woCard(WorkOrder $wo): array
{
$tags = [];
$tags[] = ['label' => "Fișă {$wo->number}", 'color' => 'purple'];
$tags[] = ['label' => __('Fișă') . " {$wo->number}", 'color' => 'purple'];
if ($wo->status === 'agreement') {
$tags[] = ['label' => 'Necesită aprobare', 'color' => 'amber'];
$tags[] = ['label' => __('Necesită aprobare'), 'color' => 'amber'];
}
if ($wo->status === 'awaiting_parts') {
$tags[] = ['label' => 'Așteaptă piese', 'color' => 'amber'];
$tags[] = ['label' => __('Așteaptă piese'), 'color' => 'amber'];
}
if ($wo->status === 'ready') {
$tags[] = ['label' => 'Gata', 'color' => 'green'];
$tags[] = ['label' => __('Gata'), 'color' => 'green'];
if ($wo->pay_status === 'partial') {
$tags[] = ['label' => 'Avans achitat', 'color' => 'blue'];
$tags[] = ['label' => __('Avans achitat'), 'color' => 'blue'];
} elseif ($wo->pay_status !== 'paid') {
$tags[] = ['label' => 'Neachitat', 'color' => 'amber'];
$tags[] = ['label' => __('Neachitat'), 'color' => 'amber'];
}
}
if ($wo->status === 'done' && $wo->pay_status === 'paid') {
$tags[] = ['label' => '✓ Achitat', 'color' => 'green'];
$tags[] = ['label' => __('✓ Achitat'), 'color' => 'green'];
}
$progress = null;
@@ -710,7 +710,7 @@ class PipelineBoard extends Page
default => 'edit',
},
'color' => 'blue',
'text' => $a->description ?: ucfirst($a->event ?? 'actualizat'),
'text' => $a->description ?: ucfirst($a->event ?? __('actualizat')),
'time' => $a->created_at?->diffForHumans(),
];
}
@@ -720,7 +720,7 @@ class PipelineBoard extends Page
private function stageStepper(int $currentIdx): array
{
$labels = ['Cerere', 'Calcul.', 'Programat', 'În lucru', 'Gata', 'Achitat'];
$labels = [__('Cerere'), __('Calcul.'), __('Programat'), __('În lucru'), __('Gata'), __('Achitat')];
$out = [];
foreach ($labels as $i => $label) {
$out[] = [
@@ -30,20 +30,20 @@ class FinanceOverview extends BaseWidget
$debt = max(0, $debtTotal - $paidOnDebt);
return [
Stat::make('Încasări (luna)', number_format($income, 2, '.', ' ') . ' MDL')
Stat::make(__('Încasări (luna)'), number_format($income, 2, '.', ' ') . ' MDL')
->icon('heroicon-o-arrow-trending-up')
->color('success')
->description(now()->translatedFormat('F Y')),
Stat::make('Cheltuieli (luna)', number_format($expenses, 2, '.', ' ') . ' MDL')
Stat::make(__('Cheltuieli (luna)'), number_format($expenses, 2, '.', ' ') . ' MDL')
->icon('heroicon-o-arrow-trending-down')
->color('danger'),
Stat::make('Profit (luna)', number_format($profit, 2, '.', ' ') . ' MDL')
Stat::make(__('Profit (luna)'), number_format($profit, 2, '.', ' ') . ' MDL')
->icon('heroicon-o-banknotes')
->color($profit >= 0 ? 'success' : 'danger'),
Stat::make('Datorii clienți', number_format($debt, 2, '.', ' ') . ' MDL')
Stat::make(__('Datorii clienți'), number_format($debt, 2, '.', ' ') . ' MDL')
->icon('heroicon-o-exclamation-circle')
->color($debt > 0 ? 'warning' : 'success'),
];
@@ -13,7 +13,12 @@ class LowStockTable extends BaseWidget
protected int|string|array $columnSpan = 'full';
protected static ?string $heading = '⚠️ Stoc minim atins';
protected static ?string $heading = null;
public function getHeading(): string
{
return '⚠️ ' . __('Stoc minim atins');
}
public function table(Table $table): Table
{
@@ -21,27 +21,27 @@ class StatsOverview extends BaseWidget
$todayAppointments = Appointment::whereDate('date', today())->count();
return [
Stat::make('Clienți', Client::count())
Stat::make(__('Clienți'), Client::count())
->description(__('Total în baza de date'))
->icon('heroicon-o-users')
->color('primary'),
Stat::make('Mașini', Vehicle::count())
Stat::make(__('Mașini'), Vehicle::count())
->description(__('Total înregistrate'))
->icon('heroicon-o-truck')
->color('info'),
Stat::make('Cereri noi', $newLeads)
Stat::make(__('Cereri noi'), $newLeads)
->description(__('De procesat'))
->icon('heroicon-o-inbox-arrow-down')
->color($newLeads > 0 ? 'warning' : 'success'),
Stat::make('Deal-uri active', $openDeals)
Stat::make(__('Deal-uri active'), $openDeals)
->description(__('În pipeline'))
->icon('heroicon-o-funnel')
->color('primary'),
Stat::make('Programări azi', $todayAppointments)
Stat::make(__('Programări azi'), $todayAppointments)
->description(today()->format('d.m.Y'))
->icon('heroicon-o-calendar')
->color('success'),
+124 -14
View File
@@ -1,4 +1,5 @@
{
"#": "#",
"$n sesiuni revoke-uite": "$n sesiuni revoke-uite",
"% Manopere": "% Manopere",
"% Piese": "% Piese",
@@ -33,6 +34,7 @@
"Acces în aplicație (opțional)": "Acces în aplicație (opțional)",
"Această acțiune este ireversibilă": "This action is irreversible",
"Achitat": "Paid",
"Achitat azi": "Paid today",
"Achiziții": "Purchases",
"Acord": "Agreement",
"Acordat de": "Acordat de",
@@ -40,6 +42,7 @@
"Activ": "Active",
"Activare": "Activation",
"Active": "Active",
"Active acum": "Active now",
"Activează": "Activate",
"Activează / dezactivează notificările auto către clienți. Telegram are prioritate dacă clientul are cont legat.": "Activează / dezactivează notificările auto către clienți. Telegram are prioritate dacă clientul are cont legat.",
"Activează PayPal": "Activează PayPal",
@@ -49,14 +52,17 @@
"Activează magazinul public la <slug>.service.mir.md/shop. Piesele apar doar dacă sunt marcate „Publicat\".": "Activează magazinul public la <slug>.service.mir.md/shop. Piesele apar doar dacă sunt marcate „Publicat\".",
"Activează plata prin transfer": "Activează plata prin transfer",
"Activi": "Active",
"Activitate recentă": "Recent activity",
"Activă": "Active",
"Actualizat la": "Updated at",
"Actualizează": "Update",
"Acțiune": "Action",
"Acțiuni rapide": "Quick actions",
"Acțiuni în bulk": "Bulk actions",
"Acțiuni în masă": "Bulk actions",
"Adaugă atelierele terțe la care trimiți lucrări (turbo, cutii, vopsitorie, PDR) și urmărește costul + marja.": "Adaugă atelierele terțe la care trimiți lucrări (turbo, cutii, vopsitorie, PDR) și urmărește costul + marja.",
"Adaugă auto": "Add vehicle",
"Adaugă cerere": "Add lead",
"Adaugă chei API ca să activezi asistentul. Cheile rămân la voi — nu sunt partajate.": "Adaugă chei API ca să activezi asistentul. Cheile rămân la voi — nu sunt partajate.",
"Adaugă cheltuială": "Add expense",
"Adaugă client": "Add client",
@@ -91,6 +97,7 @@
"Ai uitat parola?": "Forgot password?",
"Aici apar cererile clienților potențiali. Convertește-le în deal-uri sau direct în programări de la butonul „Convertește\".": "Aici apar cererile clienților potențiali. Convertește-le în deal-uri sau direct în programări de la butonul „Convertește\".",
"Aici apar clienții care și-au creat cont în magazinul online (/shop/register).": "Aici apar clienții care și-au creat cont în magazinul online (/shop/register).",
"Ale mele": "Mine",
"Aleatoriu": "Random",
"Alege categorie": "Choose category",
"Alege client": "Choose client",
@@ -107,16 +114,19 @@
"Alege vehicul": "Choose vehicle",
"Alfabetic": "Alphabetically",
"Alte cheltuieli": "Other expenses",
"Altă problemă": "Other problem",
"An": "Year",
"An fabricație": "Model year",
"Angajat din": "Angajat din",
"Ani": "Years",
"Anonim": "Anonymous",
"Antet": "Header",
"Antet fișă": "Order header",
"Anual": "Anual",
"Anul curent": "Current year",
"Anul trecut": "Last year",
"Anulat": "Cancelled",
"Anulează": "Cancel",
"Anulează fișa": "Cancel order",
"Anvelope": "Tires",
"Apare în magazinul online public.": "Apare în magazinul online public.",
@@ -154,9 +164,15 @@
"Autentificare": "Login",
"Autentificare 2FA": "2FA authentication",
"Auto": "Vehicle",
"Auto / model": "Vehicle / model",
"AutoCRM SRL": "AutoCRM SRL",
"Automobile": "Vehicles",
"Avans": "Advance",
"Avans achitat": "Advance paid",
"Avg zile": "Avg zile",
"Azi": "Today",
"Așteaptă piese": "Awaiting parts",
"Aștept aprobare client": "Awaiting client approval",
"Așteptată": "Expected",
"BIC / SWIFT": "BIC / SWIFT",
"Backup": "Backup",
@@ -169,8 +185,11 @@
"Bifează ce poate face acest rol. Modificările au efect imediat.": "Bifează ce poate face acest rol. Modificările au efect imediat.",
"Bifă": "Check",
"Bine ai venit": "Welcome",
"Blocat": "Blocked",
"Blocată": "Blocked",
"Blochează": "Block",
"Blochez": "Block",
"Blochez lucrarea": "Block the work",
"Boală": "Sick",
"Bon": "Receipt",
"Bonuri": "Receipts",
@@ -186,7 +205,9 @@
"Bună ziua": "Hello",
"CSV": "CSV",
"Calcul": "Calcul",
"Calcul.": "Quote",
"Calculat salariul {$period} pentru {$count} utilizatori": "Calculat salariul {$period} pentru {$count} utilizatori",
"Calculație": "Quote",
"Calculează luna curentă": "Calculează luna curentă",
"Calendar": "Calendar",
"Calendar vizual": "Calendar vizual",
@@ -204,15 +225,22 @@
"Categorie implicită": "Default category",
"Categorii": "Categorii",
"Caută": "Search",
"Caută client, mașină, număr...": "Search client, vehicle, number...",
"Caută în tabel": "Search in table",
"Caz asigurare": "Caz asigurare",
"Caz de asigurare": "Caz de asigurare",
"Ce a spus clientul...": "What the client said...",
"Cerere": "Lead",
"Cerere nouă": "New lead",
"Cerere nouă adăugată": "New lead added",
"Cereri": "Leads",
"Cereri noi": "New leads",
"Check-in depozit": "Check-in depozit",
"Cheia HMAC pentru semnarea cererilor + verificarea webhook-urilor de la Paynet.": "Cheia HMAC pentru semnarea cererilor + verificarea webhook-urilor de la Paynet.",
"Cheie": "Cheie",
"Cheltuială": "Expense",
"Cheltuieli": "Expenses",
"Cheltuieli (luna)": "Expenses (month)",
"Cheltuit": "Spent",
"Cheltuit 90d": "Cheltuit 90d",
"Chitanțe": "Receipts",
@@ -223,7 +251,7 @@
"Claude API Key": "Claude API Key",
"Client": "Client",
"Client & Auto": "Client & Auto",
"Client CRM": "Client CRM",
"Client CRM": "CRM client",
"Client ID": "Client ID",
"Client VIP": "Client VIP",
"Client existent": "Existing client",
@@ -285,9 +313,11 @@
"Creat de": "Created by",
"Creat la": "Created at",
"Create": "Create",
"Created at": "Created at",
"Crează manual prima factură sau folosește butonul „Generează factură\" din pagina Companiei.": "Crează manual prima factură sau folosește butonul „Generează factură\" din pagina Companiei.",
"Crează prima fișă pentru o mașină existentă. Adaugă manopere, piese, plăți — totalul se calculează automat.": "Crează prima fișă pentru o mașină existentă. Adaugă manopere, piese, plăți — totalul se calculează automat.",
"Credit": "Credit",
"Creează cerere": "Create lead",
"Creează planuri (ex: Free, Basic, Pro) și atribuie-le companiilor.": "Creează planuri (ex: Free, Basic, Pro) și atribuie-le companiilor.",
"Creează un bot la @BotFather, lipește token-ul aici și apasă „Setează webhook\". Clienții îți scriu la bot, partajează telefonul, iar codul se leagă automat de fișa lor.": "Creează un bot la @BotFather, lipește token-ul aici și apasă „Setează webhook\". Clienții îți scriu la bot, partajează telefonul, iar codul se leagă automat de fișa lor.",
"Crescător": "Ascending",
@@ -330,6 +360,7 @@
"Date personale": "Date personale",
"Datele apar pe facturi și pe pagina de plată a tenant-ului. Confirmarea o faci manual.": "Datele apar pe facturi și pe pagina de plată a tenant-ului. Confirmarea o faci manual.",
"Datorie": "Debt",
"Datorii clienți": "Client debt",
"Daune": "Daune",
"De către": "De către",
"De la": "From",
@@ -337,8 +368,10 @@
"De la data": "From date",
"De la ora": "From time",
"De obicei 10× preț lunar (2 luni gratis).": "De obicei 10× preț lunar (2 luni gratis).",
"De procesat": "De procesat",
"De procesat": "To process",
"Deal": "Deal",
"Deal nou": "New deal",
"Deal-uri active": "Active deals",
"Deals": "Deals",
"Debit": "Debit",
"Deblochează": "Unblock",
@@ -356,10 +389,15 @@
"Depozit implicit": "Default warehouse",
"Depozit țintă": "Target warehouse",
"Depublică": "Unpublish",
"Depășit termen": "Overdue",
"Descarcă PDF": "Download PDF",
"Descarcă factura": "Download invoice",
"Descarcă template": "Download template",
"Deschide": "Open",
"Deschide Fișă": "Open order",
"Deschide deal": "Open deal",
"Deschide fișa": "Open order",
"Deschide fișa pentru aprobare lucrare/piesă.": "Open the order to approve work/part.",
"Deschide tenantul": "Deschide tenantul",
"Deschis": "Opened",
"Deschis la": "Opened at",
@@ -367,6 +405,7 @@
"Descriere": "Description",
"Descriere produs": "Product description",
"Detalii": "Details",
"Detalii (opțional)": "Details (optional)",
"Detalii auto": "Vehicle details",
"Detalii client": "Client details",
"Detalii comandă": "Order details",
@@ -395,6 +434,7 @@
"Doar utilizatorii mei": "My users only",
"Document": "Document",
"Documente": "Documents",
"Done": "Done",
"Downgrade": "Downgrade",
"Drept": "Permission",
"Drepturi": "Permissions",
@@ -408,7 +448,9 @@
"Durată reală": "Actual duration",
"EJk...": "EJk...",
"ETA": "ETA",
"Echipament defect": "Broken equipment",
"Edit": "Edit",
"Editare": "Edit",
"Editează": "Edit",
"Editează drepturi": "Editează drepturi",
"Editează produs": "Edit product",
@@ -429,6 +471,7 @@
"Ex: 20": "Ex: 20",
"Ex: 20 pentru +20%": "Ex: 20 pentru +20%",
"Ex: 25": "Ex: 25",
"Ex: Lipsește filtrul Mann W712/83": "e.g. Missing filter Mann W712/83",
"Ex: Pod 1, Curte 1, Atelier electric": "Ex: Pod 1, Curte 1, Atelier electric",
"Ex: cu lift, fără lift, doar diagnoză...": "Ex: cu lift, fără lift, doar diagnoză...",
"Ex: lockdown temporar; acces pentru audit; etc.": "Ex: lockdown temporar; acces pentru audit; etc.",
@@ -436,11 +479,14 @@
"Excepții": "Overrides",
"Excepții drepturi": "Permission overrides",
"Expiră": "Expiră",
"Expiră < 7 zile": "Expires < 7 days",
"Expiră la (opțional)": "Expiră la (opțional)",
"Export": "Export",
"Export CSV": "Export CSV",
"Extras": "Statement",
"Ești sigur?": "Are you sure?",
"Facturi": "Invoices",
"Facturi neplătite": "Unpaid invoices",
"Facturi pending / overdue": "Facturi pending / overdue",
"Factură": "Invoice",
"Factură importată": "Factură importată",
@@ -453,7 +499,7 @@
"Filters": "Filters",
"Filtre": "Filters",
"Filtru": "Filter",
"Finalizat": "Completed",
"Finalizat": "Done",
"Financiar": "Financiar",
"Finanțe": "Finanțe",
"Fișe": "Orders",
@@ -464,6 +510,7 @@
"Fișiere": "Files",
"Fișă": "Order",
"Fișă asociată": "Fișă asociată",
"Fișă de lucru": "Work order",
"Fișă lucru": "Fișă lucru",
"Folosește „Check-in depozit\" pe set pentru a înregistra prima depozitare.": "Folosește „Check-in depozit\" pe set pentru a înregistra prima depozitare.",
"Folosit dacă markup = 0.": "Folosit dacă markup = 0.",
@@ -486,7 +533,10 @@
"Furnizor preferat": "Furnizor preferat",
"Furnizori": "Suppliers",
"Fără TVA": "Without VAT",
"Fără răspuns": "No answer",
"Galerie de până la 8 imagini. Prima e afișată în catalog. Max 2 MB / imagine.": "Galerie de până la 8 imagini. Prima e afișată în catalog. Max 2 MB / imagine.",
"Gata": "Ready",
"Gata de ridicare": "Ready for pickup",
"Gata estimat (ETA)": "Gata estimat (ETA)",
"Gemini API Key": "Gemini API Key",
"General": "General",
@@ -495,6 +545,7 @@
"Generează raport": "Generate report",
"Generează token": "Generează token",
"Global": "Global",
"Gol — trage un card aici": "Empty — drop a card here",
"Grafic": "Chart",
"Gravitate": "Gravitate",
"Grupează manopere + piese frecvente într-un șablon (ex: „Schimb ulei complet\") și aplică-l pe o fișă cu un click.": "Grupează manopere + piese frecvente într-un șablon (ex: „Schimb ulei complet\") și aplică-l pe o fișă cu un click.",
@@ -567,8 +618,11 @@
"Limite": "Limite",
"Linii": "Linii",
"Link client (QR)": "Link client (QR)",
"Link tracking": "Tracking link",
"Lipsă": "Lipsă",
"Lipsă piesă": "Missing part",
"Liste configurabile": "Configurable lists",
"Listă": "List",
"Livrare": "Livrare",
"Livrare (zile)": "Livrare (zile)",
"Livrare gratuită peste": "Livrare gratuită peste",
@@ -599,7 +653,9 @@
"Luni (zi)": "Monday",
"Lățime": "Lățime",
"MD00 AG00 0000 ...": "MD00 AG00 0000 ...",
"MRR realizat": "MRR realizat",
"MDL pipeline total": "MDL pipeline total",
"MDL închise azi": "MDL closed today",
"MRR realizat": "Realized MRR",
"Magazin": "Magazin",
"Magazin activ": "Magazin activ",
"Magazin online": "Online shop",
@@ -610,6 +666,7 @@
"Manopere": "Labor lines",
"Manoperă": "Labor",
"Marca": "Marca",
"Marchează Gata": "Mark ready",
"Marchează acest tenant ca demo (datele pot fi resetate periodic).": "Marchează acest tenant ca demo (datele pot fi resetate periodic).",
"Marchează anulat": "Mark as cancelled",
"Marchează plătit": "Mark as paid",
@@ -636,7 +693,7 @@
"Max mașini": "Max mașini",
"Max useri": "Max useri",
"Mașina e gata de ridicat": "Mașina e gata de ridicat",
"Mașini": "Mașini",
"Mașini": "Vehicles",
"Mecanic implicit": "Default mechanic",
"Mediu": "Medium",
"Merchant Code": "Merchant Code",
@@ -671,6 +728,10 @@
"Mulțumim": "Thank you",
"Mâine": "Tomorrow",
"Mărci auto suportate (separate prin virgulă)": "Mărci auto suportate (separate prin virgulă)",
"Neachitat": "Unpaid",
"Necesită acțiune": "Needs action",
"Necesită aprobare": "Needs approval",
"Necesită aprobare client": "Needs client approval",
"Necesită cel puțin 2 recepții complete cu data așteptată setată.": "Necesită cel puțin 2 recepții complete cu data așteptată setată.",
"Necompletat": "Empty",
"Necunoscut": "Unknown",
@@ -680,6 +741,8 @@
"Nesincronizat": "Not synced",
"Net 30 / Avans": "Net 30 / Avans",
"Neverificat": "Not verified",
"New client": "New client",
"New mașină": "New vehicle",
"Nicio comandă încă": "Nicio comandă încă",
"Nicio daună marcată": "Nicio daună marcată",
"Nicio factură generată": "Nicio factură generată",
@@ -688,7 +751,7 @@
"Nicio lucrare la terți": "Nicio lucrare la terți",
"Nicio mașină încă": "Nicio mașină încă",
"Nicio piesă implicită": "Nicio piesă implicită",
"Niciodată": "Niciodată",
"Niciodată": "Never",
"Niciun client magazin": "Niciun client magazin",
"Niciun client încă": "Niciun client încă",
"Niciun cod cross": "Niciun cod cross",
@@ -712,6 +775,8 @@
"Notifications": "Notifications",
"Notificări": "Notifications",
"Notițe": "Notes",
"Notițe / Reclamație": "Notes / Complaint",
"Notițe / reclamație": "Notes / complaint",
"Notițe interne": "Notițe interne",
"Nou": "New",
"Nou tehnician": "Nou tehnician",
@@ -783,7 +848,9 @@
"Pas 2 — Brand & limbă": "Pas 2 — Brand & limbă",
"Pas 3 — Tarif & terminat": "Pas 3 — Tarif & terminat",
"Pauză": "Pause",
"Pe pauză": "Paused",
"Penalizări": "Penalizări",
"Per page": "Per page",
"Perioada (YYYY-MM)": "Perioada (YYYY-MM)",
"Perioadă": "Period",
"Perioadă (YYYY-MM)": "Perioadă (YYYY-MM)",
@@ -819,6 +886,7 @@
"Politici": "Policies",
"Pontaj": "Timesheet",
"Populare": "Popular",
"Posibili clienți noi": "Potential new clients",
"Post actualizat": "Post actualizat",
"Poze": "Photos",
"Pozele auto": "Vehicle photos",
@@ -865,13 +933,20 @@
"Profil": "Profil",
"Profile": "Profile",
"Profit": "Profit",
"Profit (luna)": "Profit (month)",
"Programare": "Appointment",
"Programare adăugată": "Programare adăugată",
"Programare confirmată": "Programare confirmată",
"Programare creată · mâine 10:00": "Appointment created · tomorrow 10:00",
"Programare mutată": "Programare mutată",
"Programare ștearsă": "Programare ștearsă",
"Programat": "Scheduled",
"Programează": "Schedule",
"Programează întâlnire": "Schedule meeting",
"Programări": "Appointments",
"Programări azi": "Appointments today",
"Progres": "Progres",
"Progres etapă": "Stage progress",
"Proprietar": "Owner",
"Provider implicit": "Provider implicit",
"Public": "Public",
@@ -891,6 +966,7 @@
"ROI": "ROI",
"Rapoarte": "Reports",
"Raport": "Report",
"Rata conversie": "Conversion rate",
"Rating": "Rating",
"Rating actualizat → {$score}★": "Rating actualizat → {$score}★",
"Reactivează": "Reactivate",
@@ -963,6 +1039,7 @@
"Rânduri": "Rows",
"Rânduri per pagină": "Rows per page",
"Rămas": "Rămas",
"SMS": "SMS",
"Salarii": "Payroll",
"Salariu & comisioane": "Salariu & comisioane",
"Salariu & marjă": "Salary & margin",
@@ -1000,6 +1077,7 @@
"Selectează fișier": "Select file",
"Selectează furnizorul": "Selectează furnizorul",
"Selectează interval": "Select range",
"Selectează motivul pentru care lucrarea nu poate continua. Va fi vizibil managerului.": "Select the reason why work cannot continue. Visible to the manager.",
"Selectează oră": "Select time",
"Selectează perioadă": "Select period",
"Semnat": "Signed",
@@ -1045,12 +1123,15 @@
"Specificații": "Specificații",
"Standard": "Standard",
"Stare": "Stare",
"Stare timp": "Time state",
"Start": "Start",
"Status": "Status",
"Status dosar": "Status dosar",
"Status implicit": "Default status",
"Stoc": "Stock",
"Stoc adăugat": "Stoc adăugat",
"Stoc minim": "Stoc minim",
"Stoc minim atins": "Minimum stock reached",
"Storage (MB)": "Storage (MB)",
"Subcontractare": "Subcontracting",
"Subcontractor": "Subcontractor",
@@ -1065,6 +1146,7 @@
"Sunet": "Sound",
"Sunt de acord": "I agree",
"Sunteți sigur?": "Are you sure?",
"Sună": "Call",
"Sursă": "Source",
"Sursă & Atribuire": "Sursă & Atribuire",
"Suspendat": "Suspended",
@@ -1100,6 +1182,7 @@
"Tenant not resolved": "Tenant not resolved",
"Tenant suspendat.": "Tenant suspendat.",
"Tenants recenți": "Tenants recenți",
"Tenants total": "Total tenants",
"Termen": "Due date",
"Termen limită": "Deadline",
"Termene": "Termene",
@@ -1122,15 +1205,18 @@
"Tip jante": "Tip jante",
"Tipărește": "Print",
"Tipărește etichete QR": "Tipărește etichete QR",
"Toate": "All",
"Toate atelierele": "All workshops",
"Toate autovehiculele": "All vehicles",
"Toate categoriile": "All categories",
"Toate cererile": "All leads",
"Toate cheltuielile": "All expenses",
"Toate comenzile": "All orders",
"Toate companiile": "Toate companiile",
"Toate companiile": "All companies",
"Toate câmpurile": "All fields",
"Toate limbile": "All languages",
"Toate ok": "All OK",
"Toate plătite": "All paid",
"Toate plățile": "All payments",
"Toate produsele": "All products",
"Toate rolurile": "All roles",
@@ -1138,12 +1224,13 @@
"Token public": "Token public",
"Token revocat": "Token revocat",
"Total": "Total",
"Total deals active": "Total active deals",
"Total general": "Grand total",
"Total net": "Total net",
"Total plătit": "Total paid",
"Total rezultate": "Total results",
"Total în baza de date": "Total în baza de date",
"Total înregistrate": "Total înregistrate",
"Total în baza de date": "Total in database",
"Total înregistrate": "Total registered",
"Toți clienții": "All clients",
"Toți utilizatorii": "All users",
"Tracking & ETA": "Tracking & ETA",
@@ -1163,7 +1250,7 @@
"Trimite reset parolă": "Trimite reset parolă",
"UM": "Unit",
"Ulei": "Oil",
"Ultim login": "Ultim login",
"Ultim login": "Last login",
"Ultima actualizare": "Last updated",
"Ultima autentificare": "Last login",
"Ultima modificare": "Last modified",
@@ -1171,6 +1258,7 @@
"Un depozit implicit a fost creat la migrare. Adaugă altele dacă ai locații fizice separate (sucursală, hală, mobil).": "Un depozit implicit a fost creat la migrare. Adaugă altele dacă ai locații fizice separate (sucursală, hală, mobil).",
"Upgrade": "Upgrade",
"Urgent": "Urgent",
"Urgente": "Urgent",
"Urgență": "Urgency",
"User API": "User API",
"Useri": "Useri",
@@ -1182,6 +1270,7 @@
"VIN căutare & piese": "VIN căutare & piese",
"VIN-căutare": "VIN search",
"Va deconecta utilizatorul pe toate device-urile.": "Va deconecta utilizatorul pe toate device-urile.",
"Va fi adăugată în Cerere nouă": "Will be added to \"New lead\"",
"Va fi pre-completat când creezi o programare pentru acest pod": "Va fi pre-completat când creezi o programare pentru acest pod",
"Va recalcula sell_price pentru TOATE piesele active. Continui?": "Va recalcula sell_price pentru TOATE piesele active. Continui?",
"Val.": "Val.",
@@ -1192,11 +1281,13 @@
"Vehicul nou": "New vehicle",
"Venit": "Revenue",
"Venit generat": "Venit generat",
"Venit luna curentă": "Current month revenue",
"Venit manopere": "Venit manopere",
"Venituri": "Revenues",
"Verificare": "Verification",
"Verificat": "Verified",
"Verifică emailul": "Check your email",
"Verifică și amintește": "Verify and remind",
"Vezi imagine": "View image",
"Vezi mai mult": "View more",
"Vezi tot": "View all",
@@ -1216,6 +1307,7 @@
"Webhook setat — botul e gata": "Webhook setat — botul e gata",
"Weekend": "Weekend",
"Welcome": "Welcome",
"WhatsApp": "WhatsApp",
"Widget": "Widget",
"XLS": "XLS",
"Yes": "Yes",
@@ -1229,33 +1321,42 @@
"Zoom out": "Zoom out",
"achiziție": "achiziție",
"achiziții": "achiziții",
"active": "active",
"actualizat": "updated",
"angajați": "angajați",
"apasă": "click",
"auto-generat": "auto-generat",
"bonusuri/avansuri": "bonusuri/avansuri",
"canale marketing": "canale marketing",
"cheltuială": "cheltuială",
"client": "client",
"client magazin": "client magazin",
"clienți": "clienți",
"clienți": "clients",
"clienți magazin": "clienți magazin",
"coeficient": "coefficient",
"coeficienți preț": "coeficienți preț",
"comandă": "comandă",
"comenzi online": "comenzi online",
"deal-uri": "deal-uri",
"deals": "deals",
"ex: Iarnă Michelin": "ex: Iarnă Michelin",
"ex: Mașină veche, Client VIP, Express": "ex: Mașină veche, Client VIP, Express",
"ex: Revizie completă 15.000 km": "ex: Revizie completă 15.000 km",
"ex: app-mobil, integrare-erp": "ex: app-mobil, integrare-erp",
"factură": "factură",
"finalizat": "completed",
"fișe lucru": "fișe lucru",
"fișă": "fișă",
"fără client": "no client",
"h norm": "h norm",
"h real": "h real",
"lucrare caroserie": "lucrare caroserie",
"lucrare terți": "lucrare terți",
"lucrări caroserie": "lucrări caroserie",
"lucrări terți": "lucrări terți",
"mașini": "mașini",
"mașină": "mașină",
"mașini": "vehicles",
"mașină": "vehicle",
"new": "new",
"niciodată": "niciodată",
"norme-ore": "norme-ore",
"normă": "normă",
@@ -1380,19 +1481,26 @@
"subcontractor": "subcontractor",
"subcontractori": "subcontractori",
"template-uri": "template-uri",
"vip": "vip",
"Împărtășește": "Share",
"În așteptare": "Pending",
"În curs": "In progress",
"În depozit": "In warehouse",
"În lucru": "In progress",
"În pipeline": "In pipeline",
"În trial": "In trial",
"Înainte": "Back",
"Încarcă fișier": "Upload file",
"Încarcă fișierul Excel sau CSV": "Încarcă fișierul Excel sau CSV",
"Încarcă o poză cu factura. AI-ul extrage furnizorul, data și liniile. Verifici și salvezi.": "Încarcă o poză cu factura. AI-ul extrage furnizorul, data și liniile. Verifici și salvezi.",
"Încasări (luna)": "Income (month)",
"Începe": "Start",
"Începe lucrul": "Start work",
"Închide": "Close",
"Închide fișa": "Close order",
"Închis": "Closed",
"Închis la": "Closed at",
"Închise azi": "Closed today",
"Încărcare STO": "Workshop load",
"Încărcare service": "Workshop load",
"Înregistrare": "Register",
@@ -1414,7 +1522,9 @@
"șabloane servicii": "șabloane servicii",
"șablon": "șablon",
"Ține-mă minte": "Remember me",
"✓ Pe abonament plătit": "✓ Pe abonament plătit",
"⚠ Acțiune necesară": "⚠ Action needed",
"✓ Achitat": "✓ Paid",
"✓ Pe abonament plătit": "✓ On paid subscription",
"🅿️ PayPal": "🅿️ PayPal",
"🇲🇩 Paynet (Moldova)": "🇲🇩 Paynet (Moldova)",
"🎉 Bun venit în AutoCRM!": "🎉 Bun venit în AutoCRM!",
+125 -15
View File
@@ -1,4 +1,5 @@
{
"#": "#",
"$n sesiuni revoke-uite": "$n sesiuni revoke-uite",
"% Manopere": "% Manopere",
"% Piese": "% Piese",
@@ -33,6 +34,7 @@
"Acces în aplicație (opțional)": "Acces în aplicație (opțional)",
"Această acțiune este ireversibilă": "Это действие необратимо",
"Achitat": "Оплачено",
"Achitat azi": "Оплачено сегодня",
"Achiziții": "Закупки",
"Acord": "Соглашение",
"Acordat de": "Acordat de",
@@ -40,6 +42,7 @@
"Activ": "Активный",
"Activare": "Активация",
"Active": "Активные",
"Active acum": "В работе сейчас",
"Activează": "Активировать",
"Activează / dezactivează notificările auto către clienți. Telegram are prioritate dacă clientul are cont legat.": "Activează / dezactivează notificările auto către clienți. Telegram are prioritate dacă clientul are cont legat.",
"Activează PayPal": "Activează PayPal",
@@ -49,14 +52,17 @@
"Activează magazinul public la <slug>.service.mir.md/shop. Piesele apar doar dacă sunt marcate „Publicat\".": "Activează magazinul public la <slug>.service.mir.md/shop. Piesele apar doar dacă sunt marcate „Publicat\".",
"Activează plata prin transfer": "Activează plata prin transfer",
"Activi": "Активные",
"Activitate recentă": "Недавняя активность",
"Activă": "Активна",
"Actualizat la": "Обновлено",
"Actualizează": "Обновить",
"Acțiune": "Действие",
"Acțiuni rapide": "Быстрые действия",
"Acțiuni în bulk": "Массовые действия",
"Acțiuni în masă": "Массовые действия",
"Adaugă atelierele terțe la care trimiți lucrări (turbo, cutii, vopsitorie, PDR) și urmărește costul + marja.": "Adaugă atelierele terțe la care trimiți lucrări (turbo, cutii, vopsitorie, PDR) și urmărește costul + marja.",
"Adaugă auto": "Добавить авто",
"Adaugă cerere": "Добавить заявку",
"Adaugă chei API ca să activezi asistentul. Cheile rămân la voi — nu sunt partajate.": "Adaugă chei API ca să activezi asistentul. Cheile rămân la voi — nu sunt partajate.",
"Adaugă cheltuială": "Добавить расход",
"Adaugă client": "Добавить клиента",
@@ -91,6 +97,7 @@
"Ai uitat parola?": "Забыли пароль?",
"Aici apar cererile clienților potențiali. Convertește-le în deal-uri sau direct în programări de la butonul „Convertește\".": "Aici apar cererile clienților potențiali. Convertește-le în deal-uri sau direct în programări de la butonul „Convertește\".",
"Aici apar clienții care și-au creat cont în magazinul online (/shop/register).": "Aici apar clienții care și-au creat cont în magazinul online (/shop/register).",
"Ale mele": "Мои",
"Aleatoriu": "Случайно",
"Alege categorie": "Выбрать категорию",
"Alege client": "Выбрать клиента",
@@ -107,16 +114,19 @@
"Alege vehicul": "Выбрать транспорт",
"Alfabetic": "По алфавиту",
"Alte cheltuieli": "Прочие расходы",
"Altă problemă": "Другая проблема",
"An": "Год",
"An fabricație": "Год выпуска",
"Angajat din": "Angajat din",
"Ani": "Годы",
"Anonim": "Аноним",
"Antet": "Шапка",
"Antet fișă": "Шапка наряда",
"Anual": "Anual",
"Anul curent": "Текущий год",
"Anul trecut": "Прошлый год",
"Anulat": "Отменено",
"Anulează": "Отмена",
"Anulează fișa": "Отменить наряд",
"Anvelope": "Шины",
"Apare în magazinul online public.": "Apare în magazinul online public.",
@@ -154,9 +164,15 @@
"Autentificare": "Аутентификация",
"Autentificare 2FA": "2FA аутентификация",
"Auto": "Авто",
"Auto / model": "Авто / модель",
"AutoCRM SRL": "AutoCRM SRL",
"Automobile": "Автомобили",
"Avans": "Аванс",
"Avans achitat": "Аванс оплачен",
"Avg zile": "Avg zile",
"Azi": "Сегодня",
"Așteaptă piese": "Ждёт запчасти",
"Aștept aprobare client": "Ожидание одобрения клиента",
"Așteptată": "Ожидается",
"BIC / SWIFT": "BIC / SWIFT",
"Backup": "Бэкап",
@@ -169,8 +185,11 @@
"Bifează ce poate face acest rol. Modificările au efect imediat.": "Bifează ce poate face acest rol. Modificările au efect imediat.",
"Bifă": "Флажок",
"Bine ai venit": "Добро пожаловать",
"Blocat": "Заблокировано",
"Blocată": "Заблокирована",
"Blochează": "Заблокировать",
"Blochez": "Блокировать",
"Blochez lucrarea": "Заблокировать работу",
"Boală": "Больничный",
"Bon": "Чек",
"Bonuri": "Чеки",
@@ -186,7 +205,9 @@
"Bună ziua": "Здравствуйте",
"CSV": "CSV",
"Calcul": "Calcul",
"Calcul.": "Расчёт",
"Calculat salariul {$period} pentru {$count} utilizatori": "Calculat salariul {$period} pentru {$count} utilizatori",
"Calculație": "Расчёт",
"Calculează luna curentă": "Calculează luna curentă",
"Calendar": "Календарь",
"Calendar vizual": "Calendar vizual",
@@ -204,15 +225,22 @@
"Categorie implicită": "Категория по умолчанию",
"Categorii": "Categorii",
"Caută": "Поиск",
"Caută client, mașină, număr...": "Поиск клиента, авто, номера...",
"Caută în tabel": "Поиск в таблице",
"Caz asigurare": "Caz asigurare",
"Caz de asigurare": "Caz de asigurare",
"Ce a spus clientul...": "Что сказал клиент...",
"Cerere": "Заявка",
"Cerere nouă": "Новая заявка",
"Cerere nouă adăugată": "Новая заявка добавлена",
"Cereri": "Заявки",
"Cereri noi": "Новые заявки",
"Check-in depozit": "Check-in depozit",
"Cheia HMAC pentru semnarea cererilor + verificarea webhook-urilor de la Paynet.": "Cheia HMAC pentru semnarea cererilor + verificarea webhook-urilor de la Paynet.",
"Cheie": "Cheie",
"Cheltuială": "Расход",
"Cheltuieli": "Расходы",
"Cheltuieli (luna)": "Расходы (месяц)",
"Cheltuit": "Потрачено",
"Cheltuit 90d": "Cheltuit 90d",
"Chitanțe": "Квитанции",
@@ -223,7 +251,7 @@
"Claude API Key": "Claude API Key",
"Client": "Клиент",
"Client & Auto": "Client & Auto",
"Client CRM": "Client CRM",
"Client CRM": "Клиент CRM",
"Client ID": "Client ID",
"Client VIP": "Client VIP",
"Client existent": "Существующий клиент",
@@ -285,9 +313,11 @@
"Creat de": "Создано",
"Creat la": "Создано",
"Create": "Создать",
"Created at": "Создан",
"Crează manual prima factură sau folosește butonul „Generează factură\" din pagina Companiei.": "Crează manual prima factură sau folosește butonul „Generează factură\" din pagina Companiei.",
"Crează prima fișă pentru o mașină existentă. Adaugă manopere, piese, plăți — totalul se calculează automat.": "Crează prima fișă pentru o mașină existentă. Adaugă manopere, piese, plăți — totalul se calculează automat.",
"Credit": "Кредит",
"Creează cerere": "Создать заявку",
"Creează planuri (ex: Free, Basic, Pro) și atribuie-le companiilor.": "Creează planuri (ex: Free, Basic, Pro) și atribuie-le companiilor.",
"Creează un bot la @BotFather, lipește token-ul aici și apasă „Setează webhook\". Clienții îți scriu la bot, partajează telefonul, iar codul se leagă automat de fișa lor.": "Creează un bot la @BotFather, lipește token-ul aici și apasă „Setează webhook\". Clienții îți scriu la bot, partajează telefonul, iar codul se leagă automat de fișa lor.",
"Crescător": "По возрастанию",
@@ -330,6 +360,7 @@
"Date personale": "Date personale",
"Datele apar pe facturi și pe pagina de plată a tenant-ului. Confirmarea o faci manual.": "Datele apar pe facturi și pe pagina de plată a tenant-ului. Confirmarea o faci manual.",
"Datorie": "Долг",
"Datorii clienți": "Задолженности клиентов",
"Daune": "Daune",
"De către": "De către",
"De la": "От",
@@ -337,8 +368,10 @@
"De la data": "С даты",
"De la ora": "С",
"De obicei 10× preț lunar (2 luni gratis).": "De obicei 10× preț lunar (2 luni gratis).",
"De procesat": "De procesat",
"De procesat": "К обработке",
"Deal": "Сделка",
"Deal nou": "Новая сделка",
"Deal-uri active": "Активные сделки",
"Deals": "Сделки",
"Debit": "Дебет",
"Deblochează": "Разблокировать",
@@ -356,10 +389,15 @@
"Depozit implicit": "Склад по умолчанию",
"Depozit țintă": "Целевой склад",
"Depublică": "Снять с публикации",
"Depășit termen": "Просрочено",
"Descarcă PDF": "Скачать PDF",
"Descarcă factura": "Скачать счёт",
"Descarcă template": "Скачать шаблон",
"Deschide": "Открыть",
"Deschide Fișă": "Открыть наряд",
"Deschide deal": "Открыть сделку",
"Deschide fișa": "Открыть наряд",
"Deschide fișa pentru aprobare lucrare/piesă.": "Откройте наряд для одобрения работы/запчасти.",
"Deschide tenantul": "Deschide tenantul",
"Deschis": "Открыт",
"Deschis la": "Открыт",
@@ -367,6 +405,7 @@
"Descriere": "Описание",
"Descriere produs": "Описание товара",
"Detalii": "Подробности",
"Detalii (opțional)": "Детали (опционально)",
"Detalii auto": "Данные авто",
"Detalii client": "Данные клиента",
"Detalii comandă": "Данные заказа",
@@ -395,6 +434,7 @@
"Doar utilizatorii mei": "Только мои пользователи",
"Document": "Документ",
"Documente": "Документы",
"Done": "Готово",
"Downgrade": "Понижение",
"Drept": "Право",
"Drepturi": "Права",
@@ -408,7 +448,9 @@
"Durată reală": "Фактическая длительность",
"EJk...": "EJk...",
"ETA": "ETA",
"Echipament defect": "Неисправное оборудование",
"Edit": "Изменить",
"Editare": "Изменить",
"Editează": "Изменить",
"Editează drepturi": "Editează drepturi",
"Editează produs": "Изменить товар",
@@ -429,6 +471,7 @@
"Ex: 20": "Ex: 20",
"Ex: 20 pentru +20%": "Ex: 20 pentru +20%",
"Ex: 25": "Ex: 25",
"Ex: Lipsește filtrul Mann W712/83": "Например: Нет фильтра Mann W712/83",
"Ex: Pod 1, Curte 1, Atelier electric": "Ex: Pod 1, Curte 1, Atelier electric",
"Ex: cu lift, fără lift, doar diagnoză...": "Ex: cu lift, fără lift, doar diagnoză...",
"Ex: lockdown temporar; acces pentru audit; etc.": "Ex: lockdown temporar; acces pentru audit; etc.",
@@ -436,11 +479,14 @@
"Excepții": "Исключения",
"Excepții drepturi": "Исключения прав",
"Expiră": "Expiră",
"Expiră < 7 zile": "Истекает < 7 дней",
"Expiră la (opțional)": "Expiră la (opțional)",
"Export": "Экспорт",
"Export CSV": "Экспорт CSV",
"Extras": "Выписка",
"Ești sigur?": "Ты уверен?",
"Facturi": "Счета",
"Facturi neplătite": "Неоплаченные счета",
"Facturi pending / overdue": "Facturi pending / overdue",
"Factură": "Счёт",
"Factură importată": "Factură importată",
@@ -464,6 +510,7 @@
"Fișiere": "Файлы",
"Fișă": "Наряд",
"Fișă asociată": "Fișă asociată",
"Fișă de lucru": "Заказ-наряд",
"Fișă lucru": "Fișă lucru",
"Folosește „Check-in depozit\" pe set pentru a înregistra prima depozitare.": "Folosește „Check-in depozit\" pe set pentru a înregistra prima depozitare.",
"Folosit dacă markup = 0.": "Folosit dacă markup = 0.",
@@ -486,7 +533,10 @@
"Furnizor preferat": "Furnizor preferat",
"Furnizori": "Поставщики",
"Fără TVA": "Без НДС",
"Fără răspuns": "Без ответа",
"Galerie de până la 8 imagini. Prima e afișată în catalog. Max 2 MB / imagine.": "Galerie de până la 8 imagini. Prima e afișată în catalog. Max 2 MB / imagine.",
"Gata": "Готов",
"Gata de ridicare": "Готов к выдаче",
"Gata estimat (ETA)": "Gata estimat (ETA)",
"Gemini API Key": "Gemini API Key",
"General": "Общее",
@@ -495,6 +545,7 @@
"Generează raport": "Сгенерировать отчёт",
"Generează token": "Generează token",
"Global": "Глобально",
"Gol — trage un card aici": "Пусто — перетащите карточку сюда",
"Grafic": "График",
"Gravitate": "Gravitate",
"Grupează manopere + piese frecvente într-un șablon (ex: „Schimb ulei complet\") și aplică-l pe o fișă cu un click.": "Grupează manopere + piese frecvente într-un șablon (ex: „Schimb ulei complet\") și aplică-l pe o fișă cu un click.",
@@ -567,8 +618,11 @@
"Limite": "Limite",
"Linii": "Linii",
"Link client (QR)": "Link client (QR)",
"Link tracking": "Ссылка отслеживания",
"Lipsă": "Lipsă",
"Lipsă piesă": "Нет запчасти",
"Liste configurabile": "Настраиваемые списки",
"Listă": "Список",
"Livrare": "Livrare",
"Livrare (zile)": "Livrare (zile)",
"Livrare gratuită peste": "Livrare gratuită peste",
@@ -599,7 +653,9 @@
"Luni (zi)": "Понедельник",
"Lățime": "Lățime",
"MD00 AG00 0000 ...": "MD00 AG00 0000 ...",
"MRR realizat": "MRR realizat",
"MDL pipeline total": "MDL всего в воронке",
"MDL închise azi": "MDL закрыто сегодня",
"MRR realizat": "Реализованный MRR",
"Magazin": "Magazin",
"Magazin activ": "Magazin activ",
"Magazin online": "Онлайн-магазин",
@@ -610,6 +666,7 @@
"Manopere": "Работы",
"Manoperă": "Работа",
"Marca": "Marca",
"Marchează Gata": "Отметить готово",
"Marchează acest tenant ca demo (datele pot fi resetate periodic).": "Marchează acest tenant ca demo (datele pot fi resetate periodic).",
"Marchează anulat": "Отметить как отменено",
"Marchează plătit": "Отметить как оплачено",
@@ -636,7 +693,7 @@
"Max mașini": "Max mașini",
"Max useri": "Max useri",
"Mașina e gata de ridicat": "Mașina e gata de ridicat",
"Mașini": "Mașini",
"Mașini": "Автомобили",
"Mecanic implicit": "Механик по умолчанию",
"Mediu": "Средний",
"Merchant Code": "Merchant Code",
@@ -648,7 +705,7 @@
"Metode plată": "Способы оплаты",
"Metodă plată": "Способ оплаты",
"Miercuri": "Среда",
"Min.": "Min.",
"Min.": "Мин.",
"Minim": "Minim",
"Minute": "Минуты",
"Mod": "Режим",
@@ -671,6 +728,10 @@
"Mulțumim": "Спасибо",
"Mâine": "Завтра",
"Mărci auto suportate (separate prin virgulă)": "Mărci auto suportate (separate prin virgulă)",
"Neachitat": "Не оплачено",
"Necesită acțiune": "Требует действия",
"Necesită aprobare": "Требуется одобрение",
"Necesită aprobare client": "Требуется одобрение клиента",
"Necesită cel puțin 2 recepții complete cu data așteptată setată.": "Necesită cel puțin 2 recepții complete cu data așteptată setată.",
"Necompletat": "Не заполнено",
"Necunoscut": "Неизвестно",
@@ -680,6 +741,8 @@
"Nesincronizat": "Не синхронизировано",
"Net 30 / Avans": "Net 30 / Avans",
"Neverificat": "Не проверено",
"New client": "Новый клиент",
"New mașină": "Новое авто",
"Nicio comandă încă": "Nicio comandă încă",
"Nicio daună marcată": "Nicio daună marcată",
"Nicio factură generată": "Nicio factură generată",
@@ -688,7 +751,7 @@
"Nicio lucrare la terți": "Nicio lucrare la terți",
"Nicio mașină încă": "Nicio mașină încă",
"Nicio piesă implicită": "Nicio piesă implicită",
"Niciodată": "Niciodată",
"Niciodată": "Никогда",
"Niciun client magazin": "Niciun client magazin",
"Niciun client încă": "Niciun client încă",
"Niciun cod cross": "Niciun cod cross",
@@ -712,6 +775,8 @@
"Notifications": "Уведомления",
"Notificări": "Уведомления",
"Notițe": "Заметки",
"Notițe / Reclamație": "Заметки / Жалоба",
"Notițe / reclamație": "Заметки / жалоба",
"Notițe interne": "Notițe interne",
"Nou": "Новый",
"Nou tehnician": "Nou tehnician",
@@ -783,7 +848,9 @@
"Pas 2 — Brand & limbă": "Pas 2 — Brand & limbă",
"Pas 3 — Tarif & terminat": "Pas 3 — Tarif & terminat",
"Pauză": "Пауза",
"Pe pauză": "На паузе",
"Penalizări": "Penalizări",
"Per page": "На странице",
"Perioada (YYYY-MM)": "Perioada (YYYY-MM)",
"Perioadă": "Период",
"Perioadă (YYYY-MM)": "Perioadă (YYYY-MM)",
@@ -819,6 +886,7 @@
"Politici": "Политики",
"Pontaj": "Табель",
"Populare": "Популярные",
"Posibili clienți noi": "Потенциальные новые клиенты",
"Post actualizat": "Post actualizat",
"Poze": "Фото",
"Pozele auto": "Фото авто",
@@ -865,13 +933,20 @@
"Profil": "Profil",
"Profile": "Профиль",
"Profit": "Прибыль",
"Profit (luna)": "Прибыль (месяц)",
"Programare": "Запись",
"Programare adăugată": "Programare adăugată",
"Programare confirmată": "Programare confirmată",
"Programare creată · mâine 10:00": "Запись создана · завтра 10:00",
"Programare mutată": "Programare mutată",
"Programare ștearsă": "Programare ștearsă",
"Programat": "Запланировано",
"Programează": "Запланировать",
"Programează întâlnire": "Запланировать встречу",
"Programări": "Записи",
"Programări azi": "Записи сегодня",
"Progres": "Progres",
"Progres etapă": "Прогресс этапа",
"Proprietar": "Владелец",
"Provider implicit": "Provider implicit",
"Public": "Публично",
@@ -891,6 +966,7 @@
"ROI": "ROI",
"Rapoarte": "Отчёты",
"Raport": "Отчёт",
"Rata conversie": "Конверсия",
"Rating": "Рейтинг",
"Rating actualizat → {$score}★": "Rating actualizat → {$score}★",
"Reactivează": "Реактивировать",
@@ -963,6 +1039,7 @@
"Rânduri": "Строки",
"Rânduri per pagină": "Строк на странице",
"Rămas": "Rămas",
"SMS": "SMS",
"Salarii": "Зарплаты",
"Salariu & comisioane": "Salariu & comisioane",
"Salariu & marjă": "Зарплата и маржа",
@@ -1000,6 +1077,7 @@
"Selectează fișier": "Выберите файл",
"Selectează furnizorul": "Selectează furnizorul",
"Selectează interval": "Выберите интервал",
"Selectează motivul pentru care lucrarea nu poate continua. Va fi vizibil managerului.": "Выберите причину, по которой работа не может продолжаться. Будет видно менеджеру.",
"Selectează oră": "Выберите время",
"Selectează perioadă": "Выберите период",
"Semnat": "Подписано",
@@ -1045,12 +1123,15 @@
"Specificații": "Specificații",
"Standard": "Стандартно",
"Stare": "Stare",
"Stare timp": "Время",
"Start": "Старт",
"Status": "Статус",
"Status dosar": "Status dosar",
"Status implicit": "Статус по умолчанию",
"Stoc": "Остаток",
"Stoc adăugat": "Stoc adăugat",
"Stoc minim": "Stoc minim",
"Stoc minim atins": "Достигнут мин. остаток",
"Storage (MB)": "Storage (MB)",
"Subcontractare": "Субподряд",
"Subcontractor": "Субподрядчик",
@@ -1065,6 +1146,7 @@
"Sunet": "Звук",
"Sunt de acord": "Я согласен",
"Sunteți sigur?": "Вы уверены?",
"Sună": "Позвонить",
"Sursă": "Источник",
"Sursă & Atribuire": "Sursă & Atribuire",
"Suspendat": "Приостановлено",
@@ -1100,6 +1182,7 @@
"Tenant not resolved": "Tenant not resolved",
"Tenant suspendat.": "Tenant suspendat.",
"Tenants recenți": "Tenants recenți",
"Tenants total": "Всего тенантов",
"Termen": "Срок",
"Termen limită": "Крайний срок",
"Termene": "Termene",
@@ -1122,15 +1205,18 @@
"Tip jante": "Tip jante",
"Tipărește": "Печать",
"Tipărește etichete QR": "Tipărește etichete QR",
"Toate": "Все",
"Toate atelierele": "Все мастерские",
"Toate autovehiculele": "Все авто",
"Toate categoriile": "Все категории",
"Toate cererile": "Все заявки",
"Toate cheltuielile": "Все расходы",
"Toate comenzile": "Все заказы",
"Toate companiile": "Toate companiile",
"Toate companiile": "Все компании",
"Toate câmpurile": "Все поля",
"Toate limbile": "Все языки",
"Toate ok": "Всё в порядке",
"Toate plătite": "Все оплачены",
"Toate plățile": "Все платежи",
"Toate produsele": "Все товары",
"Toate rolurile": "Все роли",
@@ -1138,12 +1224,13 @@
"Token public": "Token public",
"Token revocat": "Token revocat",
"Total": "Итого",
"Total deals active": "Всего активных сделок",
"Total general": "Общий итог",
"Total net": "Total net",
"Total plătit": "Всего оплачено",
"Total rezultate": "Всего результатов",
"Total în baza de date": "Total în baza de date",
"Total înregistrate": "Total înregistrate",
"Total în baza de date": "Всего в базе",
"Total înregistrate": "Всего зарегистрировано",
"Toți clienții": "Все клиенты",
"Toți utilizatorii": "Все пользователи",
"Tracking & ETA": "Отслеживание и ETA",
@@ -1163,14 +1250,15 @@
"Trimite reset parolă": "Trimite reset parolă",
"UM": "Ед.",
"Ulei": "Масло",
"Ultim login": "Ultim login",
"Ultim login": "Последний вход",
"Ultima actualizare": "Последнее обновление",
"Ultima autentificare": "Последний вход",
"Ultima modificare": "Последнее изменение",
"Ultima sincronizare": "Последняя синхронизация",
"Un depozit implicit a fost creat la migrare. Adaugă altele dacă ai locații fizice separate (sucursală, hală, mobil).": "Un depozit implicit a fost creat la migrare. Adaugă altele dacă ai locații fizice separate (sucursală, hală, mobil).",
"Upgrade": "Обновление",
"Urgent": "Срочный",
"Urgent": "Срочно",
"Urgente": "Срочные",
"Urgență": "Срочность",
"User API": "User API",
"Useri": "Useri",
@@ -1182,6 +1270,7 @@
"VIN căutare & piese": "VIN căutare & piese",
"VIN-căutare": "VIN-поиск",
"Va deconecta utilizatorul pe toate device-urile.": "Va deconecta utilizatorul pe toate device-urile.",
"Va fi adăugată în Cerere nouă": "Будет добавлена в «Новая заявка»",
"Va fi pre-completat când creezi o programare pentru acest pod": "Va fi pre-completat când creezi o programare pentru acest pod",
"Va recalcula sell_price pentru TOATE piesele active. Continui?": "Va recalcula sell_price pentru TOATE piesele active. Continui?",
"Val.": "Val.",
@@ -1192,11 +1281,13 @@
"Vehicul nou": "Новый транспорт",
"Venit": "Доход",
"Venit generat": "Venit generat",
"Venit luna curentă": "Доход тек. месяца",
"Venit manopere": "Venit manopere",
"Venituri": "Доходы",
"Verificare": "Проверка",
"Verificat": "Проверено",
"Verifică emailul": "Проверьте email",
"Verifică și amintește": "Проверить и напомнить",
"Vezi imagine": "Просмотр изображения",
"Vezi mai mult": "Смотреть больше",
"Vezi tot": "Смотреть все",
@@ -1216,6 +1307,7 @@
"Webhook setat — botul e gata": "Webhook setat — botul e gata",
"Weekend": "Выходные",
"Welcome": "Добро пожаловать",
"WhatsApp": "WhatsApp",
"Widget": "Виджет",
"XLS": "XLS",
"Yes": "Да",
@@ -1229,33 +1321,42 @@
"Zoom out": "Отдалить",
"achiziție": "achiziție",
"achiziții": "achiziții",
"active": "активный",
"actualizat": "обновлено",
"angajați": "angajați",
"apasă": "нажмите",
"auto-generat": "auto-generat",
"bonusuri/avansuri": "bonusuri/avansuri",
"canale marketing": "canale marketing",
"cheltuială": "cheltuială",
"client": "клиент",
"client magazin": "client magazin",
"clienți": "clienți",
"clienți": "клиенты",
"clienți magazin": "clienți magazin",
"coeficient": "коэффициент",
"coeficienți preț": "coeficienți preț",
"comandă": "comandă",
"comenzi online": "comenzi online",
"deal-uri": "deal-uri",
"deals": "сделок",
"ex: Iarnă Michelin": "ex: Iarnă Michelin",
"ex: Mașină veche, Client VIP, Express": "ex: Mașină veche, Client VIP, Express",
"ex: Revizie completă 15.000 km": "ex: Revizie completă 15.000 km",
"ex: app-mobil, integrare-erp": "ex: app-mobil, integrare-erp",
"factură": "factură",
"finalizat": "завершено",
"fișe lucru": "fișe lucru",
"fișă": "fișă",
"fără client": "без клиента",
"h norm": " ч норм",
"h real": " ч факт",
"lucrare caroserie": "lucrare caroserie",
"lucrare terți": "lucrare terți",
"lucrări caroserie": "lucrări caroserie",
"lucrări terți": "lucrări terți",
"mașini": "mașini",
"mașină": "mașină",
"mașini": "машины",
"mașină": "машина",
"new": "новый",
"niciodată": "niciodată",
"norme-ore": "norme-ore",
"normă": "normă",
@@ -1380,19 +1481,26 @@
"subcontractor": "субподрядчик",
"subcontractori": "subcontractori",
"template-uri": "template-uri",
"vip": "vip",
"Împărtășește": "Поделиться",
"În așteptare": "В ожидании",
"În curs": "В процессе",
"În depozit": "На складе",
"În lucru": "В работе",
"În pipeline": "В воронке",
"În trial": "В триале",
"Înainte": "Назад",
"Încarcă fișier": "Загрузить файл",
"Încarcă fișierul Excel sau CSV": "Încarcă fișierul Excel sau CSV",
"Încarcă o poză cu factura. AI-ul extrage furnizorul, data și liniile. Verifici și salvezi.": "Încarcă o poză cu factura. AI-ul extrage furnizorul, data și liniile. Verifici și salvezi.",
"Încasări (luna)": "Поступления (месяц)",
"Începe": "Начать",
"Începe lucrul": "Начать работу",
"Închide": "Закрыть",
"Închide fișa": "Закрыть наряд",
"Închis": "Закрыт",
"Închis la": "Закрыт",
"Închise azi": "Закрыто сегодня",
"Încărcare STO": "Загрузка СТО",
"Încărcare service": "Загрузка сервиса",
"Înregistrare": "Регистрация",
@@ -1414,7 +1522,9 @@
"șabloane servicii": "șabloane servicii",
"șablon": "șablon",
"Ține-mă minte": "Запомнить меня",
"✓ Pe abonament plătit": "✓ Pe abonament plătit",
"⚠ Acțiune necesară": "⚠ Требуется действие",
"✓ Achitat": "✓ Оплачено",
"✓ Pe abonament plătit": "✓ На платной подписке",
"🅿️ PayPal": "🅿️ PayPal",
"🇲🇩 Paynet (Moldova)": "🇲🇩 Paynet (Moldova)",
"🎉 Bun venit în AutoCRM!": "🎉 Bun venit în AutoCRM!",
@@ -71,11 +71,11 @@
<div class="mb-stats">
<div class="mb-stat">
<div class="lbl">Active acum</div>
<div class="lbl">{{ __('Active acum') }}</div>
<div class="val">{{ $counts['active'] }}</div>
</div>
<div class="mb-stat">
<div class="lbl">Închise azi</div>
<div class="lbl">{{ __('Închise azi') }}</div>
<div class="val">{{ $counts['closed_today'] }}</div>
</div>
</div>
@@ -93,7 +93,7 @@
<a href="{{ route('filament.tenant.resources.work-orders.edit', $wo) }}" class="num" style="text-decoration:none;color:#3b82f6;">#{{ $wo->number }}</a>
<span class="plate">{{ $wo->vehicle?->plate ?? '—' }}</span>
</div>
<div class="client">{{ $wo->client?->name ?? 'fără client' }} · {{ $wo->vehicle?->make }} {{ $wo->vehicle?->model }}</div>
<div class="client">{{ $wo->client?->name ?? __('fără client') }} · {{ $wo->vehicle?->make }} {{ $wo->vehicle?->model }}</div>
@if ($wo->complaint)
<div class="complaint">{{ $wo->complaint }}</div>
@endif
@@ -112,31 +112,31 @@
<div style="flex:1;">
<span style="font-weight:600;">{{ $w->name }}</span>
<div style="margin-top:3px; display:flex; gap:4px; align-items:center; flex-wrap:wrap;">
<span style="background:{{ $stColor }}; color:white; padding:1px 6px; border-radius:4px; font-size:10px; font-weight:600;">{{ \App\Models\Tenant\WorkOrderWork::MECHANIC_STATUSES[$ms] }}</span>
<span style="background:{{ $stColor }}; color:white; padding:1px 6px; border-radius:4px; font-size:10px; font-weight:600;">{{ __(\App\Models\Tenant\WorkOrderWork::MECHANIC_STATUSES[$ms]) }}</span>
@if ($w->hours > 0)
<span style="color:#6b7280; font-size:10px;">{{ rtrim(rtrim(number_format($w->hours, 2), '0'), '.') }}h norm</span>
<span style="color:#6b7280; font-size:10px;">{{ rtrim(rtrim(number_format($w->hours, 2), '0'), '.') }}{{ __('h norm') }}</span>
@endif
@if ($w->actual_hours > 0 && $effColor)
<span style="color:{{ $effColor }}; font-weight:600; font-size:10px;">{{ rtrim(rtrim(number_format($w->actual_hours, 2), '0'), '.') }}h real ({{ $w->efficiencyPct() }}%)</span>
<span style="color:{{ $effColor }}; font-weight:600; font-size:10px;">{{ rtrim(rtrim(number_format($w->actual_hours, 2), '0'), '.') }}{{ __('h real') }} ({{ $w->efficiencyPct() }}%)</span>
@endif
@if ($w->block_reason)
<span style="color:#dc2626; font-size:10px;"> {{ \App\Models\Tenant\WorkOrderWork::BLOCK_REASONS[$w->block_reason] ?? $w->block_reason }}</span>
<span style="color:#dc2626; font-size:10px;"> {{ __(\App\Models\Tenant\WorkOrderWork::BLOCK_REASONS[$w->block_reason] ?? $w->block_reason) }}</span>
@endif
</div>
</div>
</div>
<div style="display:flex; gap:4px; margin-top:6px; flex-wrap:wrap;">
@if (in_array($ms, ['pending', 'blocked']))
<button wire:click="startWork({{ $w->id }})" style="background:#3b82f6;color:white;border:none;padding:4px 8px;border-radius:4px;font-size:11px;cursor:pointer;"> Start</button>
<button wire:click="startWork({{ $w->id }})" style="background:#3b82f6;color:white;border:none;padding:4px 8px;border-radius:4px;font-size:11px;cursor:pointer;"> {{ __('Start') }}</button>
@endif
@if ($ms === 'in_progress')
<button wire:click="pauseWork({{ $w->id }})" style="background:#f59e0b;color:white;border:none;padding:4px 8px;border-radius:4px;font-size:11px;cursor:pointer;"> Pauză</button>
<button wire:click="doneWork({{ $w->id }})" style="background:#10b981;color:white;border:none;padding:4px 8px;border-radius:4px;font-size:11px;cursor:pointer;"> Done</button>
<button wire:click="openBlockModal({{ $w->id }})" style="background:#fff;color:#dc2626;border:1px solid #dc2626;padding:4px 8px;border-radius:4px;font-size:11px;cursor:pointer;">🔴 Blochez</button>
<button wire:click="pauseWork({{ $w->id }})" style="background:#f59e0b;color:white;border:none;padding:4px 8px;border-radius:4px;font-size:11px;cursor:pointer;"> {{ __('Pauză') }}</button>
<button wire:click="doneWork({{ $w->id }})" style="background:#10b981;color:white;border:none;padding:4px 8px;border-radius:4px;font-size:11px;cursor:pointer;"> {{ __('Done') }}</button>
<button wire:click="openBlockModal({{ $w->id }})" style="background:#fff;color:#dc2626;border:1px solid #dc2626;padding:4px 8px;border-radius:4px;font-size:11px;cursor:pointer;">🔴 {{ __('Blochez') }}</button>
@endif
@if ($ms === 'paused')
<button wire:click="resumeWork({{ $w->id }})" style="background:#3b82f6;color:white;border:none;padding:4px 8px;border-radius:4px;font-size:11px;cursor:pointer;"> Reia</button>
<button wire:click="doneWork({{ $w->id }})" style="background:#10b981;color:white;border:none;padding:4px 8px;border-radius:4px;font-size:11px;cursor:pointer;"> Done</button>
<button wire:click="resumeWork({{ $w->id }})" style="background:#3b82f6;color:white;border:none;padding:4px 8px;border-radius:4px;font-size:11px;cursor:pointer;"> {{ __('Reia') }}</button>
<button wire:click="doneWork({{ $w->id }})" style="background:#10b981;color:white;border:none;padding:4px 8px;border-radius:4px;font-size:11px;cursor:pointer;"> {{ __('Done') }}</button>
@endif
</div>
</div>
@@ -155,19 +155,19 @@
@if ($blockingWorkId)
<div style="position:fixed; inset:0; background:rgba(0,0,0,0.5); z-index:9999; display:flex; align-items:center; justify-content:center;" wire:click="$set('blockingWorkId', null)">
<div class="mb-modal-content" style="background:white; border-radius:12px; padding:20px; max-width:400px; width:90%;" wire:click.stop>
<h2 style="font-size:16px; font-weight:600; margin-bottom:12px; color:#dc2626;">🔴 Blochez lucrarea</h2>
<p style="font-size:13px; color:#4b5563; margin-bottom:14px;">Selectează motivul pentru care lucrarea nu poate continua. Va fi vizibil managerului.</p>
<label style="font-size:11px; color:#6b7280; text-transform:uppercase; font-weight:600; display:block; margin-bottom:4px;">Motiv *</label>
<h2 style="font-size:16px; font-weight:600; margin-bottom:12px; color:#dc2626;">🔴 {{ __('Blochez lucrarea') }}</h2>
<p style="font-size:13px; color:#4b5563; margin-bottom:14px;">{{ __('Selectează motivul pentru care lucrarea nu poate continua. Va fi vizibil managerului.') }}</p>
<label style="font-size:11px; color:#6b7280; text-transform:uppercase; font-weight:600; display:block; margin-bottom:4px;">{{ __('Motiv') }} *</label>
<select wire:model="blockReason" style="width:100%; padding:8px 10px; border:1px solid #cbd5e1; border-radius:6px; font-size:14px; margin-bottom:12px;">
@foreach (\App\Models\Tenant\WorkOrderWork::BLOCK_REASONS as $k => $v)
<option value="{{ $k }}">{{ $v }}</option>
<option value="{{ $k }}">{{ __($v) }}</option>
@endforeach
</select>
<label style="font-size:11px; color:#6b7280; text-transform:uppercase; font-weight:600; display:block; margin-bottom:4px;">Detalii (opțional)</label>
<textarea wire:model="blockNote" rows="2" style="width:100%; padding:8px 10px; border:1px solid #cbd5e1; border-radius:6px; font-size:14px; margin-bottom:14px;" placeholder="Ex: Lipsește filtrul Mann W712/83"></textarea>
<label style="font-size:11px; color:#6b7280; text-transform:uppercase; font-weight:600; display:block; margin-bottom:4px;">{{ __('Detalii (opțional)') }}</label>
<textarea wire:model="blockNote" rows="2" style="width:100%; padding:8px 10px; border:1px solid #cbd5e1; border-radius:6px; font-size:14px; margin-bottom:14px;" placeholder="{{ __('Ex: Lipsește filtrul Mann W712/83') }}"></textarea>
<div style="display:flex; gap:8px;">
<button wire:click="$set('blockingWorkId', null)" style="flex:1; padding:8px; background:white; color:#4b5563; border:1px solid #cbd5e1; border-radius:6px; cursor:pointer;">Anulează</button>
<button wire:click="confirmBlock" style="flex:1; padding:8px; background:#dc2626; color:white; border:none; border-radius:6px; cursor:pointer; font-weight:600;">Blochez</button>
<button wire:click="$set('blockingWorkId', null)" style="flex:1; padding:8px; background:white; color:#4b5563; border:1px solid #cbd5e1; border-radius:6px; cursor:pointer;">{{ __('Anulează') }}</button>
<button wire:click="confirmBlock" style="flex:1; padding:8px; background:#dc2626; color:white; border:none; border-radius:6px; cursor:pointer; font-weight:600;">{{ __('Blochez') }}</button>
</div>
</div>
</div>
@@ -199,16 +199,16 @@
<div class="pb-shell" x-data="{ view: 'kanban', dragKey: null }" wire:poll.10s>
{{-- TOPBAR --}}
<div class="pb-topbar">
<span class="pb-topbar-title">Pipeline</span>
<span class="pb-topbar-title">{{ __('Pipeline') }}</span>
<div class="pb-topbar-sep"></div>
<div class="pb-search">
<span class="pb-search-icon">🔍</span>
<input placeholder="Caută client, mașină, număr..." wire:model.live.debounce.300ms="searchQuery" />
<input placeholder="{{ __('Caută client, mașină, număr...') }}" wire:model.live.debounce.300ms="searchQuery" />
</div>
<div class="pb-topbar-right">
<button class="pb-btn" wire:click="setFilter('urgent')"> Filtre</button>
<a class="pb-btn" wire:click="exportCsv" wire:loading.attr="disabled"> Export</a>
<button class="pb-btn pb-btn-primary" wire:click="openNewForm">+ Deal nou</button>
<button class="pb-btn" wire:click="setFilter('urgent')"> {{ __('Filtre') }}</button>
<a class="pb-btn" wire:click="exportCsv" wire:loading.attr="disabled"> {{ __('Export') }}</a>
<button class="pb-btn pb-btn-primary" wire:click="openNewForm">+ {{ __('Deal nou') }}</button>
</div>
</div>
@@ -216,49 +216,49 @@
<div class="pb-stat-strip">
<div class="pb-stat-item">
<span class="pb-stat-val">{{ $stats['active'] }}</span>
<span class="pb-stat-lbl">Total deals active</span>
<span class="pb-stat-lbl">{{ __('Total deals active') }}</span>
</div>
<div class="pb-stat-sep"></div>
<div class="pb-stat-item">
<span class="pb-stat-val" style="color:var(--pb-blue)">{{ number_format($stats['pipeline_mdl'], 0, '.', ' ') }}</span>
<span class="pb-stat-lbl">MDL pipeline total</span>
<span class="pb-stat-lbl">{{ __('MDL pipeline total') }}</span>
</div>
<div class="pb-stat-sep"></div>
<div class="pb-stat-item">
<span class="pb-stat-val" style="color:var(--pb-green)">{{ number_format($stats['closed_today_mdl'], 0, '.', ' ') }}</span>
<span class="pb-stat-lbl">MDL închise azi</span>
<span class="pb-stat-lbl">{{ __('MDL închise azi') }}</span>
</div>
<div class="pb-stat-sep"></div>
<div class="pb-stat-item">
<span class="pb-stat-val" style="color:var(--pb-amber)">{{ $stats['need_action'] }}</span>
<span class="pb-stat-lbl">Necesită acțiune</span>
<span class="pb-stat-lbl">{{ __('Necesită acțiune') }}</span>
</div>
<div class="pb-stat-sep"></div>
<div class="pb-stat-item">
<span class="pb-stat-val">{{ $stats['conversion_rate'] }}%</span>
<span class="pb-stat-lbl">Rata conversie</span>
<span class="pb-stat-lbl">{{ __('Rata conversie') }}</span>
</div>
<div class="pb-stat-sep"></div>
<div class="pb-stat-item">
<span class="pb-stat-val" style="color:var(--pb-red)">{{ $stats['overdue'] }}</span>
<span class="pb-stat-lbl">Depășit termen</span>
<span class="pb-stat-lbl">{{ __('Depășit termen') }}</span>
</div>
</div>
{{-- FILTER BAR --}}
<div class="pb-filter-bar">
<div class="pb-view-toggle">
<div class="pb-vt-btn" :class="view==='kanban' && 'active'" @click="view='kanban'">📋 Kanban</div>
<div class="pb-vt-btn" :class="view==='list' && 'active'" @click="view='list'"> Listă</div>
<div class="pb-vt-btn" :class="view==='kanban' && 'active'" @click="view='kanban'">📋 {{ __('Kanban') }}</div>
<div class="pb-vt-btn" :class="view==='list' && 'active'" @click="view='list'"> {{ __('Listă') }}</div>
</div>
<div class="pb-filter-sep"></div>
<div class="pb-chip {{ $activeFilter === 'all' ? 'active' : '' }}" wire:click="setFilter('all')">Toate</div>
<div class="pb-chip {{ $activeFilter === 'mine' ? 'active' : '' }}" wire:click="setFilter('mine')">👤 Ale mele</div>
<div class="pb-chip {{ $activeFilter === 'urgent' ? 'active' : '' }}" wire:click="setFilter('urgent')" style="color:var(--pb-red-text)"> Urgente</div>
<div class="pb-chip {{ $activeFilter === 'today' ? 'active' : '' }}" wire:click="setFilter('today')">📅 Azi</div>
<div class="pb-chip {{ $activeFilter === 'all' ? 'active' : '' }}" wire:click="setFilter('all')">{{ __('Toate') }}</div>
<div class="pb-chip {{ $activeFilter === 'mine' ? 'active' : '' }}" wire:click="setFilter('mine')">👤 {{ __('Ale mele') }}</div>
<div class="pb-chip {{ $activeFilter === 'urgent' ? 'active' : '' }}" wire:click="setFilter('urgent')" style="color:var(--pb-red-text)"> {{ __('Urgente') }}</div>
<div class="pb-chip {{ $activeFilter === 'today' ? 'active' : '' }}" wire:click="setFilter('today')">📅 {{ __('Azi') }}</div>
<div class="pb-filter-sep"></div>
<div class="pb-period">📅 {{ now()->locale('ro')->isoFormat('MMMM YYYY') }}</div>
<div class="pb-total">Pipeline: <strong>{{ number_format($stats['pipeline_mdl'], 0, '.', ' ') }} MDL</strong> · <strong>{{ $stats['active'] }} deals</strong></div>
<div class="pb-period">📅 {{ now()->locale(app()->getLocale())->isoFormat('MMMM YYYY') }}</div>
<div class="pb-total">{{ __('Pipeline') }}: <strong>{{ number_format($stats['pipeline_mdl'], 0, '.', ' ') }} MDL</strong> · <strong>{{ $stats['active'] }} {{ __('deals') }}</strong></div>
</div>
{{-- KANBAN --}}
@@ -297,29 +297,29 @@
<div class="pb-deal-actions" @click.stop>
@if ($colKey === 'request')
{{-- 📅 calendar-plus / 📞 phone / --}}
<a class="pb-act-btn" wire:click.stop="quickSchedule('{{ $card['key'] }}')" title="Programare">📅</a>
@if (!empty($card['phone']))<a class="pb-act-btn" href="tel:{{ $card['phone'] }}" @click.stop title="Sună">📞</a>@endif
<a class="pb-act-btn" href="{{ $card['edit_url'] }}" @click.stop title="Editare"></a>
<a class="pb-act-btn" wire:click.stop="quickSchedule('{{ $card['key'] }}')" title="{{ __('Programare') }}">📅</a>
@if (!empty($card['phone']))<a class="pb-act-btn" href="tel:{{ $card['phone'] }}" @click.stop title="{{ __('Sună') }}">📞</a>@endif
<a class="pb-act-btn" href="{{ $card['edit_url'] }}" @click.stop title="{{ __('Editare') }}"></a>
@elseif ($colKey === 'quote')
{{-- 📅 / 💬 message / --}}
<a class="pb-act-btn" wire:click.stop="quickSchedule('{{ $card['key'] }}')" title="Programare">📅</a>
@if (!empty($card['phone']))<a class="pb-act-btn" href="https://wa.me/{{ preg_replace('/\D/', '', $card['phone']) }}" target="_blank" @click.stop title="WhatsApp">💬</a>@endif
<a class="pb-act-btn" href="{{ $card['edit_url'] }}" @click.stop title="Editare"></a>
<a class="pb-act-btn" wire:click.stop="quickSchedule('{{ $card['key'] }}')" title="{{ __('Programare') }}">📅</a>
@if (!empty($card['phone']))<a class="pb-act-btn" href="https://wa.me/{{ preg_replace('/\D/', '', $card['phone']) }}" target="_blank" @click.stop title="{{ __('WhatsApp') }}">💬</a>@endif
<a class="pb-act-btn" href="{{ $card['edit_url'] }}" @click.stop title="{{ __('Editare') }}"></a>
@elseif ($colKey === 'scheduled')
{{-- 📄+ file-plus (start WO) / 💬 / --}}
<a class="pb-act-btn" wire:click.stop="moveCard('{{ $card['key'] }}', 'in_work')" title="Începe lucrul (creează fișă)">📄</a>
@if (!empty($card['phone']))<a class="pb-act-btn" href="https://wa.me/{{ preg_replace('/\D/', '', $card['phone']) }}" target="_blank" @click.stop title="WhatsApp">💬</a>@endif
<a class="pb-act-btn" href="{{ $card['edit_url'] }}" @click.stop title="Editare"></a>
<a class="pb-act-btn" wire:click.stop="moveCard('{{ $card['key'] }}', 'in_work')" title="{{ __('Începe lucrul') }}">📄</a>
@if (!empty($card['phone']))<a class="pb-act-btn" href="https://wa.me/{{ preg_replace('/\D/', '', $card['phone']) }}" target="_blank" @click.stop title="{{ __('WhatsApp') }}">💬</a>@endif
<a class="pb-act-btn" href="{{ $card['edit_url'] }}" @click.stop title="{{ __('Editare') }}"></a>
@elseif ($colKey === 'in_work')
{{-- 👁 eye / 💬 / --}}
<a class="pb-act-btn" href="{{ $card['edit_url'] }}" @click.stop title="Deschide fișa">👁</a>
@if (!empty($card['phone']))<a class="pb-act-btn" href="https://wa.me/{{ preg_replace('/\D/', '', $card['phone']) }}" target="_blank" @click.stop title="WhatsApp">💬</a>@endif
<a class="pb-act-btn" wire:click.stop="moveCard('{{ $card['key'] }}', 'ready')" title="Marchează Gata"></a>
<a class="pb-act-btn" href="{{ $card['edit_url'] }}" @click.stop title="{{ __('Deschide fișa') }}">👁</a>
@if (!empty($card['phone']))<a class="pb-act-btn" href="https://wa.me/{{ preg_replace('/\D/', '', $card['phone']) }}" target="_blank" @click.stop title="{{ __('WhatsApp') }}">💬</a>@endif
<a class="pb-act-btn" wire:click.stop="moveCard('{{ $card['key'] }}', 'ready')" title="{{ __('Marchează Gata') }}"></a>
@elseif ($colKey === 'ready')
{{-- 💰 cash / 💬 / --}}
<a class="pb-act-btn" wire:click.stop="moveCard('{{ $card['key'] }}', 'paid')" title="Achitat">💰</a>
@if (!empty($card['phone']))<a class="pb-act-btn" href="tel:{{ $card['phone'] }}" @click.stop title="Sună">📞</a>@endif
<a class="pb-act-btn" href="{{ $card['edit_url'] }}" @click.stop title="Editare"></a>
<a class="pb-act-btn" wire:click.stop="moveCard('{{ $card['key'] }}', 'paid')" title="{{ __('Achitat') }}">💰</a>
@if (!empty($card['phone']))<a class="pb-act-btn" href="tel:{{ $card['phone'] }}" @click.stop title="{{ __('Sună') }}">📞</a>@endif
<a class="pb-act-btn" href="{{ $card['edit_url'] }}" @click.stop title="{{ __('Editare') }}"></a>
@endif
</div>
<div class="pb-deal-id">{{ $card['code'] }}</div>
@@ -328,7 +328,7 @@
@if (!empty($card['tags']))
<div class="pb-deal-meta">
@foreach ($card['tags'] as $tag)
<span class="pb-tag pb-tag-{{ $tag['color'] }}">{{ $tag['label'] }}</span>
<span class="pb-tag pb-tag-{{ $tag['color'] }}">{{ __($tag['label']) }}</span>
@endforeach
</div>
@endif
@@ -350,10 +350,10 @@
@endif
</div>
@empty
<div class="pb-empty-col">Gol trage un card aici</div>
<div class="pb-empty-col">{{ __('Gol — trage un card aici') }}</div>
@endforelse
@if ($colKey !== 'paid')
<button type="button" class="pb-add-card" wire:click="openNewForm">+ Adaugă cerere</button>
<button type="button" class="pb-add-card" wire:click="openNewForm">+ {{ __('Adaugă cerere') }}</button>
@endif
</div>
</div>
@@ -366,7 +366,7 @@
<thead>
<tr>
@foreach (['#', 'Subiect', 'Client', 'Auto', 'Etapă', 'Sumă', 'Responsabil', 'Stare timp'] as $h)
<th style="text-align:left; padding:8px 12px; font-size:10px; font-weight:600; color:var(--pb-text-3); text-transform:uppercase; border-bottom:1px solid var(--pb-border);">{{ $h }}</th>
<th style="text-align:left; padding:8px 12px; font-size:10px; font-weight:600; color:var(--pb-text-3); text-transform:uppercase; border-bottom:1px solid var(--pb-border);">{{ __($h) }}</th>
@endforeach
</tr>
</thead>
@@ -395,40 +395,40 @@
@if ($showNewForm)
<div class="pb-panel-head">
<div>
<div class="pb-panel-title">Cerere nouă</div>
<div class="pb-panel-id">Va fi adăugată în Cerere nouă</div>
<div class="pb-panel-title">{{ __('Cerere nouă') }}</div>
<div class="pb-panel-id">{{ __('Va fi adăugată în Cerere nouă') }}</div>
</div>
<div class="pb-close-btn" wire:click="$set('showNewForm', false)"></div>
</div>
<form class="pb-panel-body" wire:submit.prevent="createNewLead">
<div class="pb-form-field">
<label>Nume *</label>
<label>{{ __('Nume') }} *</label>
<input type="text" wire:model="newName" placeholder="Ion Popescu" autofocus>
</div>
<div class="pb-form-field">
<label>Telefon *</label>
<label>{{ __('Telefon') }} *</label>
<input type="text" wire:model="newPhone" placeholder="+373 69 ...">
</div>
<div class="pb-form-field">
<label>Auto / model</label>
<label>{{ __('Auto / model') }}</label>
<input type="text" wire:model="newCar" placeholder="VW Passat 2018">
</div>
<div class="pb-form-field">
<label>Sursă</label>
<label>{{ __('Sursă') }}</label>
<select wire:model="newSource">
@foreach (\App\Models\Tenant\Lead::SOURCES as $val => $lbl)
<option value="{{ $val }}">{{ $lbl }}</option>
<option value="{{ $val }}">{{ __($lbl) }}</option>
@endforeach
</select>
</div>
<div class="pb-form-field">
<label>Notițe / reclamație</label>
<textarea wire:model="newNotes" placeholder="Ce a spus clientul..."></textarea>
<label>{{ __('Notițe / reclamație') }}</label>
<textarea wire:model="newNotes" placeholder="{{ __('Ce a spus clientul...') }}"></textarea>
</div>
</form>
<div class="pb-panel-actions">
<button type="button" class="pb-quick-btn" wire:click="$set('showNewForm', false)">Anulează</button>
<button type="button" class="pb-quick-btn primary" wire:click="createNewLead">Creează cerere</button>
<button type="button" class="pb-quick-btn" wire:click="$set('showNewForm', false)">{{ __('Anulează') }}</button>
<button type="button" class="pb-quick-btn primary" wire:click="createNewLead">{{ __('Creează cerere') }}</button>
</div>
@endif
</div>
@@ -446,7 +446,7 @@
</div>
<div class="pb-panel-body">
<div>
<div class="pb-panel-sec-title">Progres etapă</div>
<div class="pb-panel-sec-title">{{ __('Progres etapă') }}</div>
<div class="pb-stage-stepper">
@foreach ($detail['stages'] as $st)
<div class="pb-stage-step {{ $st['done'] ? 'done' : '' }} {{ $st['current'] ? 'current' : '' }}"></div>
@@ -454,7 +454,7 @@
</div>
<div class="pb-stage-labels">
@foreach ($detail['stages'] as $st)
<div class="pb-stage-lbl {{ $st['current'] ? 'current' : '' }}">{{ $st['label'] }}</div>
<div class="pb-stage-lbl {{ $st['current'] ? 'current' : '' }}">{{ __($st['label']) }}</div>
@endforeach
</div>
</div>
@@ -464,15 +464,15 @@
@foreach ($detail['fields'] as $label => $value)
@if ($value)
<div class="pb-pfield">
<div class="pb-pfield-label">{{ $label }}</div>
<div class="pb-pfield-val" @if($label==='Telefon') style="color:var(--pb-blue)" @endif>{{ $value }}</div>
<div class="pb-pfield-label">{{ __($label) }}</div>
<div class="pb-pfield-val" @if(__($label)===__("Telefon")) style="color:var(--pb-blue)" @endif>{{ $value }}</div>
</div>
@endif
@endforeach
</div>
@if ($detail['note'])
<div class="pb-pfield">
<div class="pb-pfield-label">Notițe / Reclamație</div>
<div class="pb-pfield-label">{{ __('Notițe / Reclamație') }}</div>
<div style="font-size:12px; color:var(--pb-text-2); white-space:pre-wrap;">{{ $detail['note'] }}</div>
</div>
@endif
@@ -480,21 +480,21 @@
@if (!empty($detail['wo']))
<div class="pb-panel-section">
<div class="pb-panel-sec-title">Fișă de lucru</div>
<div class="pb-panel-sec-title">{{ __('Fișă de lucru') }}</div>
<div style="background:var(--pb-purple-bg); border:1px solid #DDD6FE; border-radius:6px; padding:10px 12px; display:flex; align-items:center; justify-content:space-between;">
<div>
<div style="font-size:12px; font-weight:600; color:var(--pb-purple-text);">{{ $detail['wo']['number'] }} · {{ $detail['wo']['status_label'] }}</div>
<div style="font-size:12px; font-weight:600; color:var(--pb-purple-text);">{{ $detail['wo']['number'] }} · {{ __($detail['wo']['status_label']) }}</div>
<div style="font-size:11px; color:var(--pb-purple-text); opacity:.8; margin-top:2px;">
@if (!is_null($detail['wo']['progress_pct'])){{ $detail['wo']['progress_pct'] }}% finalizat @endif
@if (!is_null($detail['wo']['progress_pct'])){{ $detail['wo']['progress_pct'] }}% {{ __('finalizat') }} @endif
@if ($detail['wo']['eta']) · ETA {{ $detail['wo']['eta'] }} @endif
</div>
</div>
<a class="pb-quick-btn" style="padding:4px 10px;" href="{{ $detail['edit_url'] }}"> Deschide</a>
<a class="pb-quick-btn" style="padding:4px 10px;" href="{{ $detail['edit_url'] }}"> {{ __('Deschide') }}</a>
</div>
@if (!empty($detail['wo']['has_pending_approval']))
<div style="margin-top:8px; background:var(--pb-amber-bg); border:1px solid #FDE68A; border-radius:6px; padding:8px 12px;">
<div style="font-size:11px; font-weight:600; color:var(--pb-amber-text);"> Necesită aprobare client</div>
<div style="font-size:11px; color:var(--pb-amber-text); margin-top:2px;">Deschide fișa pentru aprobare lucrare/piesă.</div>
<div style="font-size:11px; font-weight:600; color:var(--pb-amber-text);"> {{ __('Necesită aprobare client') }}</div>
<div style="font-size:11px; color:var(--pb-amber-text); margin-top:2px;">{{ __('Deschide fișa pentru aprobare lucrare/piesă.') }}</div>
</div>
@endif
</div>
@@ -502,7 +502,7 @@
@if (!empty($detail['activity']))
<div class="pb-panel-section">
<div class="pb-panel-sec-title">Activitate recentă</div>
<div class="pb-panel-sec-title">{{ __('Activitate recentă') }}</div>
@foreach ($detail['activity'] as $a)
<div class="pb-activity-item">
<div class="pb-act-icon" style="background:var(--pb-blue-bg); color:var(--pb-blue-text);"></div>
@@ -516,15 +516,15 @@
@endif
<div class="pb-panel-section">
<div class="pb-panel-sec-title">Acțiuni rapide</div>
<div class="pb-panel-sec-title">{{ __('Acțiuni rapide') }}</div>
<div class="pb-quick-grid">
@if (!empty($detail['phone']))
<a class="pb-quick-btn" target="_blank" href="https://wa.me/{{ preg_replace('/\D/', '', $detail['phone']) }}">💚 WhatsApp</a>
<a class="pb-quick-btn" href="tel:{{ $detail['phone'] }}">📞 Sună</a>
<a class="pb-quick-btn" href="sms:{{ $detail['phone'] }}">💬 SMS</a>
<a class="pb-quick-btn" target="_blank" href="https://wa.me/{{ preg_replace('/\D/', '', $detail['phone']) }}">💚 {{ __('WhatsApp') }}</a>
<a class="pb-quick-btn" href="tel:{{ $detail['phone'] }}">📞 {{ __('Sună') }}</a>
<a class="pb-quick-btn" href="sms:{{ $detail['phone'] }}">💬 {{ __('SMS') }}</a>
@endif
@if (!empty($detail['wo']['tracking_url']))
<a class="pb-quick-btn" href="{{ $detail['wo']['tracking_url'] }}" target="_blank">🔗 Link tracking</a>
<a class="pb-quick-btn" href="{{ $detail['wo']['tracking_url'] }}" target="_blank">🔗 {{ __('Link tracking') }}</a>
@endif
</div>
</div>
@@ -533,11 +533,11 @@
<div class="pb-panel-actions">
@php $kind = explode(':', $openCardKey)[0] ?? '' @endphp
@if (in_array($kind, ['lead', 'deal']) && empty($detail['wo']))
<a class="pb-quick-btn" wire:click="quickSchedule('{{ $openCardKey }}')">📅 Programează</a>
<a class="pb-quick-btn primary" href="{{ $detail['edit_url'] }}"> Deschide deal</a>
<a class="pb-quick-btn" wire:click="quickSchedule('{{ $openCardKey }}')">📅 {{ __('Programează') }}</a>
<a class="pb-quick-btn primary" href="{{ $detail['edit_url'] }}"> {{ __('Deschide deal') }}</a>
@elseif ($kind === 'wo')
<a class="pb-quick-btn" href="{{ $this->calendarUrl() }}">📅 Calendar</a>
<a class="pb-quick-btn primary" href="{{ $detail['edit_url'] }}"> Deschide Fișă</a>
<a class="pb-quick-btn" href="{{ $this->calendarUrl() }}">📅 {{ __('Calendar') }}</a>
<a class="pb-quick-btn primary" href="{{ $detail['edit_url'] }}"> {{ __('Deschide Fișă') }}</a>
@endif
</div>
@endif