diff --git a/app/Filament/Tenant/Resources/WorkOrderResource/RelationManagers/WorksRelationManager.php b/app/Filament/Tenant/Resources/WorkOrderResource/RelationManagers/WorksRelationManager.php index 5a26f7f..a0674a4 100644 --- a/app/Filament/Tenant/Resources/WorkOrderResource/RelationManagers/WorksRelationManager.php +++ b/app/Filament/Tenant/Resources/WorkOrderResource/RelationManagers/WorksRelationManager.php @@ -49,11 +49,6 @@ class WorksRelationManager extends RelationManager ->options(WorkOrderWork::STATUSES) ->default('todo') ->required(), - Forms\Components\Toggle::make('apply_margin') - ->label('Aplică marjă internă') - ->default(true) - ->helperText('On = din prețul manoperei se scade marja pentru salariu. Off = manoperă la cost (salariu se calculează pe Total integral).') - ->visible(fn () => auth()->user()?->canDo(\App\Auth\Permissions::FINANCE_VIEW_INTERNAL_MARGIN) ?? false), Forms\Components\Textarea::make('notes')->label('Notițe')->columnSpanFull()->rows(2), ]); } @@ -82,15 +77,11 @@ class WorksRelationManager extends RelationManager ->alignRight() ->description(function ($record) { if (! self::marginDetailsVisible() || $record->salary_base === null) return null; - if (! $record->apply_margin) { + if ((float) $record->applied_margin_pct === 0.0) { return 'Fără marjă · bază salariu = Total'; } return 'Bază salariu: ' . number_format((float) $record->salary_base, 2) . ' MDL · marjă ' . rtrim(rtrim(number_format((float) $record->applied_margin_pct, 2), '0'), '.') . '%'; }), - Tables\Columns\ToggleColumn::make('apply_margin') - ->label('Marjă') - ->visible(fn () => auth()->user()?->canDo(\App\Auth\Permissions::FINANCE_VIEW_INTERNAL_MARGIN) ?? false) - ->tooltip('On = se aplică marja internă. Off = manoperă la cost.'), Tables\Columns\TextColumn::make('master.name')->label('Maistru')->placeholder('—'), Tables\Columns\TextColumn::make('status') ->formatStateUsing(fn ($s) => WorkOrderWork::STATUSES[$s] ?? $s) diff --git a/app/Models/Tenant/WorkOrder.php b/app/Models/Tenant/WorkOrder.php index 546e031..a59cea0 100644 --- a/app/Models/Tenant/WorkOrder.php +++ b/app/Models/Tenant/WorkOrder.php @@ -39,7 +39,7 @@ class WorkOrder extends Model implements HasMedia 'opened_at', 'closed_at', 'mileage_in', 'mileage_out', 'complaint', 'diagnosis', 'recommendations', 'status', 'urgency', 'pay_status', 'approved', 'approved_at', - 'discount_pct', 'override_margin_pct', 'total', + 'discount_pct', 'override_margin_pct', 'apply_margin', 'total', 'eta_at', 'eta_promised', 'eta_change_reason', 'eta_updated_at', 'tracking_token', ]; @@ -52,6 +52,7 @@ class WorkOrder extends Model implements HasMedia 'eta_promised' => 'datetime', 'eta_updated_at' => 'datetime', 'approved' => 'boolean', + 'apply_margin' => 'boolean', 'discount_pct' => 'decimal:2', 'total' => 'decimal:2', ]; diff --git a/app/Models/Tenant/WorkOrderWork.php b/app/Models/Tenant/WorkOrderWork.php index eebd2e9..98843ce 100644 --- a/app/Models/Tenant/WorkOrderWork.php +++ b/app/Models/Tenant/WorkOrderWork.php @@ -179,9 +179,15 @@ class WorkOrderWork extends Model } // Compute internal margin & freeze salary_base at save time. // Once frozen, changing user.internal_margin_pct later does NOT rewrite history. - // apply_margin=false → this line is at-cost (no reduction); salary_base = total. - if (($row->salary_base === null || $row->isDirty(['total', 'master_id', 'apply_margin'])) && (float) $row->total > 0) { - if ((bool) $row->apply_margin === false) { + // WO.apply_margin=false → toate liniile Fișei devin at-cost (salariu pe Total). + if (($row->salary_base === null || $row->isDirty(['total', 'master_id'])) && (float) $row->total > 0) { + // Citim direct din DB pentru a evita orice cache al relației belongsTo + $applyMargin = true; + if ($row->work_order_id) { + $raw = \DB::table('work_orders')->where('id', $row->work_order_id)->value('apply_margin'); + if ($raw !== null) $applyMargin = (bool) $raw; + } + if (! $applyMargin) { $row->applied_margin_pct = 0; $row->salary_base = (float) $row->total; } else { diff --git a/config/app.php b/config/app.php index 423eed5..5c35407 100644 --- a/config/app.php +++ b/config/app.php @@ -78,9 +78,9 @@ return [ | */ - 'locale' => env('APP_LOCALE', 'en'), + 'locale' => env('APP_LOCALE', 'ro'), - 'fallback_locale' => env('APP_FALLBACK_LOCALE', 'en'), + 'fallback_locale' => env('APP_FALLBACK_LOCALE', 'ro'), 'faker_locale' => env('APP_FAKER_LOCALE', 'en_US'), diff --git a/database/migrations/2026_07_09_000001_add_apply_margin_to_work_orders.php b/database/migrations/2026_07_09_000001_add_apply_margin_to_work_orders.php new file mode 100644 index 0000000..9955a94 --- /dev/null +++ b/database/migrations/2026_07_09_000001_add_apply_margin_to_work_orders.php @@ -0,0 +1,26 @@ +boolean('apply_margin')->default(true)->after('override_margin_pct'); + } + }); + } + + public function down(): void + { + Schema::table('work_orders', function (Blueprint $t) { + if (Schema::hasColumn('work_orders', 'apply_margin')) { + $t->dropColumn('apply_margin'); + } + }); + } +}; diff --git a/lang/ro/portal.php b/lang/ro/portal.php new file mode 100644 index 0000000..98d2f95 --- /dev/null +++ b/lang/ro/portal.php @@ -0,0 +1,155 @@ + [ + 'email' => 'Email', + 'phone' => 'Telefon', + 'name' => 'Nume', + 'password' => 'Parolă', + 'save' => 'Salvează', + 'cancel' => 'Anulează', + 'back' => 'Înapoi', + 'search' => 'Caută', + 'total' => 'Total', + 'yes' => 'Da', + 'no' => 'Nu', + 'required' => '*', + 'currency_mdl' => 'MDL', + 'powered_by' => 'Powered by AutoCRM', + ], + + // ─── Invitation flow ─── + 'invitation' => [ + 'title_accept' => 'Acceptă invitația', + 'welcome_name' => 'Bine ai venit, :name!', + 'welcome_body' => 'Ai fost invitat să accesezi :company. Setează o parolă pentru a-ți activa contul.', + 'new_password' => 'Parolă nouă', + 'confirm_password' => 'Confirmă parola', + 'activate_account' => 'Activează contul', + 'expired_title' => 'Invitație expirată', + 'expired_body' => 'Linkul de invitație a expirat (durata maximă: 7 zile). Roagă administratorul să retrimită invitația.', + 'invalid_title' => 'Invitație invalidă', + 'invalid_body' => 'Linkul nu mai este valabil sau a fost deja folosit.', + ], + + // ─── WO tracking (public) ─── + 'tracking' => [ + 'title_fisa' => 'Fișa #:number', + 'ready_estimated' => 'Gata estimat:', + 'details' => 'Detalii', + 'auto' => 'Auto', + 'mileage' => 'Kilometraj', + 'opened' => 'Deschis', + 'master' => 'Maistru', + 'stages' => 'Etape', + 'what_asked' => 'Ce ne-ai cerut', + 'recommendations' => 'Recomandări', + 'photos' => 'Fotografii', + 'approval_needed_title' => '⚠ Necesită aprobarea ta', + 'approval_needed_body' => 'Am descoperit lucrări suplimentare. Te rugăm să decizi mai jos.', + 'hours' => 'ore', + 'approve' => '✅ Aprob', + 'decline' => '❌ Nu aprob', + 'unit_pcs' => 'buc', + ], + + // ─── Shop navigation & layout ─── + 'shop' => [ + 'catalog' => 'Catalog', + 'search_by_vin' => 'Caută după VIN', + 'cart' => '🛒 Coș', + 'login' => 'Login', + 'register' => 'Înregistrare', + 'logout' => 'Ieșire', + + // Catalog + 'catalog_title' => 'Catalog piese', + 'search_placeholder' => 'Caută denumire, cod, brand, cod cross…', + 'all_categories' => 'Toate categoriile', + 'in_stock_only' => 'Doar în stoc', + 'no_parts_found' => 'Nicio piesă găsită', + 'no_parts_found_for' => 'Nicio piesă găsită pentru „:term"', + 'in_stock' => '● În stoc', + 'on_order' => '○ La comandă', + 'add_to_cart' => 'Adaugă în coș', + + // Cart + 'cart_title' => 'Coșul meu', + 'cart_empty' => 'Coșul e gol.', + 'view_catalog' => 'Vezi catalogul', + 'part' => 'Piesă', + 'price' => 'Preț', + 'qty' => 'Cant.', + 'update_cart' => 'Actualizează coșul', + 'subtotal' => 'Subtotal:', + 'checkout_arrow' => 'Finalizează comanda →', + + // Checkout + 'checkout_title' => 'Finalizează comanda', + 'full_name' => 'Nume complet *', + 'phone_req' => 'Telefon *', + 'delivery_req' => 'Livrare *', + 'address_delivery' => 'Adresă (pentru curier/poștă)', + 'notes' => 'Observații', + 'place_order' => 'Plasează comanda', + 'summary' => 'Sumar', + 'delivery_fee_note' => 'Taxa de livrare se calculează în funcție de metoda aleasă.', + + // Order status + 'order_number' => 'Comanda', + 'status' => 'Status', + 'products' => 'Produse', + 'delivery' => 'Livrare', + 'delivery_data' => 'Date livrare', + 'continue_shopping' => '← Continuă cumpărăturile', + + // Part detail + 'back_to_catalog' => '← Înapoi la catalog', + 'brand_label' => 'Brand:', + 'code_label' => 'Cod:', + 'in_stock_qty' => '● În stoc (:qty :unit)', + 'cross_refs_title' => 'Coduri echivalente (cross)', + 'description' => 'Descriere', + + // VIN + 'vin_title' => 'Caută piese după VIN', + 'vin_intro' => 'Introdu codul VIN (17 caractere) ca să identificăm mașina. Apoi caută piesele în catalog.', + 'vin_decode' => 'Decodează', + 'vin_invalid' => 'VIN invalid — trebuie 17 caractere.', + 'vin_identified' => 'Mașină identificată', + 'vin_manufacturer' => 'Producător', + 'vin_year' => 'An model', + 'vin_country' => 'Țară', + 'vin_region' => 'Regiune', + 'vin_search_parts' => 'Caută piese pentru :maker →', + 'vin_contact_note' => 'Pentru compatibilitate exactă pe model/motorizare, contactează service-ul cu acest VIN.', + 'this_car' => 'această mașină', + + // Account + 'my_account' => 'Contul meu', + 'hello_name' => 'Salut, :name!', + 'contact_data' => 'Date contact', + 'my_orders' => 'Comenzile mele (:count)', + 'no_orders_yet' => 'Nu ai nicio comandă încă.', + 'order_nr' => 'Nr.', + 'order_date' => 'Data', + 'order_items' => 'Articole', + 'order_details_arrow' => 'Detalii →', + + // Auth + 'signin_title' => 'Intră în cont', + 'signin_button' => 'Intră', + 'forgot_password' => 'Am uitat parola', + 'no_account' => 'Nu ai cont?', + 'register_title' => 'Înregistrare cont', + 'register_button' => 'Creează cont', + 'have_account' => 'Ai deja cont?', + 'forgot_title' => 'Am uitat parola', + 'forgot_intro' => 'Introdu emailul cu care te-ai înregistrat — îți trimitem un link de resetare.', + 'send_reset_link' => 'Trimite link resetare', + 'back_to_login' => '← Înapoi la login', + 'reset_title' => 'Setează o parolă nouă', + 'reset_button' => 'Setează parola', + ], +]; diff --git a/lang/ru/portal.php b/lang/ru/portal.php new file mode 100644 index 0000000..4269099 --- /dev/null +++ b/lang/ru/portal.php @@ -0,0 +1,155 @@ + [ + 'email' => 'Email', + 'phone' => 'Телефон', + 'name' => 'Имя', + 'password' => 'Пароль', + 'save' => 'Сохранить', + 'cancel' => 'Отмена', + 'back' => 'Назад', + 'search' => 'Поиск', + 'total' => 'Итого', + 'yes' => 'Да', + 'no' => 'Нет', + 'required' => '*', + 'currency_mdl' => 'MDL', + 'powered_by' => 'Работает на AutoCRM', + ], + + // ─── Приглашение ─── + 'invitation' => [ + 'title_accept' => 'Принять приглашение', + 'welcome_name' => 'Добро пожаловать, :name!', + 'welcome_body' => 'Вас пригласили в :company. Задайте пароль, чтобы активировать аккаунт.', + 'new_password' => 'Новый пароль', + 'confirm_password' => 'Подтвердите пароль', + 'activate_account' => 'Активировать аккаунт', + 'expired_title' => 'Приглашение просрочено', + 'expired_body' => 'Срок действия ссылки истёк (максимум 7 дней). Попросите администратора выслать приглашение повторно.', + 'invalid_title' => 'Недействительное приглашение', + 'invalid_body' => 'Ссылка больше не действительна или уже была использована.', + ], + + // ─── Отслеживание заказ-наряда (публично) ─── + 'tracking' => [ + 'title_fisa' => 'Заказ-наряд #:number', + 'ready_estimated' => 'Готово ориентировочно:', + 'details' => 'Подробности', + 'auto' => 'Автомобиль', + 'mileage' => 'Пробег', + 'opened' => 'Открыт', + 'master' => 'Мастер', + 'stages' => 'Этапы', + 'what_asked' => 'Что вы просили', + 'recommendations' => 'Рекомендации', + 'photos' => 'Фотографии', + 'approval_needed_title' => '⚠ Требуется ваше подтверждение', + 'approval_needed_body' => 'Обнаружены дополнительные работы. Пожалуйста, примите решение ниже.', + 'hours' => 'ч.', + 'approve' => '✅ Согласен', + 'decline' => '❌ Не согласен', + 'unit_pcs' => 'шт.', + ], + + // ─── Магазин: навигация и лейаут ─── + 'shop' => [ + 'catalog' => 'Каталог', + 'search_by_vin' => 'Поиск по VIN', + 'cart' => '🛒 Корзина', + 'login' => 'Войти', + 'register' => 'Регистрация', + 'logout' => 'Выйти', + + // Каталог + 'catalog_title' => 'Каталог запчастей', + 'search_placeholder' => 'Найти по названию, коду, бренду, кросс-номеру…', + 'all_categories' => 'Все категории', + 'in_stock_only' => 'Только в наличии', + 'no_parts_found' => 'Запчасти не найдены', + 'no_parts_found_for' => 'Запчасти не найдены по запросу „:term"', + 'in_stock' => '● В наличии', + 'on_order' => '○ Под заказ', + 'add_to_cart' => 'Добавить в корзину', + + // Корзина + 'cart_title' => 'Моя корзина', + 'cart_empty' => 'Корзина пуста.', + 'view_catalog' => 'Перейти в каталог', + 'part' => 'Запчасть', + 'price' => 'Цена', + 'qty' => 'Кол-во', + 'update_cart' => 'Обновить корзину', + 'subtotal' => 'Промежуточный итог:', + 'checkout_arrow' => 'Оформить заказ →', + + // Оформление + 'checkout_title' => 'Оформление заказа', + 'full_name' => 'ФИО *', + 'phone_req' => 'Телефон *', + 'delivery_req' => 'Доставка *', + 'address_delivery' => 'Адрес (для курьера/почты)', + 'notes' => 'Комментарий', + 'place_order' => 'Оформить заказ', + 'summary' => 'Сводка', + 'delivery_fee_note' => 'Стоимость доставки рассчитывается в зависимости от выбранного способа.', + + // Статус заказа + 'order_number' => 'Заказ', + 'status' => 'Статус', + 'products' => 'Товары', + 'delivery' => 'Доставка', + 'delivery_data' => 'Данные доставки', + 'continue_shopping' => '← Продолжить покупки', + + // Детали запчасти + 'back_to_catalog' => '← Назад в каталог', + 'brand_label' => 'Бренд:', + 'code_label' => 'Код:', + 'in_stock_qty' => '● В наличии (:qty :unit)', + 'cross_refs_title' => 'Кросс-номера', + 'description' => 'Описание', + + // VIN + 'vin_title' => 'Поиск запчастей по VIN', + 'vin_intro' => 'Введите VIN-код (17 символов), чтобы мы определили автомобиль. Затем найдите запчасти в каталоге.', + 'vin_decode' => 'Расшифровать', + 'vin_invalid' => 'Неверный VIN — должно быть 17 символов.', + 'vin_identified' => 'Автомобиль определён', + 'vin_manufacturer' => 'Производитель', + 'vin_year' => 'Год модели', + 'vin_country' => 'Страна', + 'vin_region' => 'Регион', + 'vin_search_parts' => 'Найти запчасти для :maker →', + 'vin_contact_note' => 'Для точного подбора по модели/двигателю свяжитесь с сервисом, указав этот VIN.', + 'this_car' => 'этого автомобиля', + + // Аккаунт + 'my_account' => 'Мой аккаунт', + 'hello_name' => 'Привет, :name!', + 'contact_data' => 'Контактные данные', + 'my_orders' => 'Мои заказы (:count)', + 'no_orders_yet' => 'У вас пока нет заказов.', + 'order_nr' => '№', + 'order_date' => 'Дата', + 'order_items' => 'Позиции', + 'order_details_arrow' => 'Подробнее →', + + // Аутентификация + 'signin_title' => 'Войти в аккаунт', + 'signin_button' => 'Войти', + 'forgot_password' => 'Забыли пароль', + 'no_account' => 'Нет аккаунта?', + 'register_title' => 'Регистрация аккаунта', + 'register_button' => 'Создать аккаунт', + 'have_account' => 'Уже есть аккаунт?', + 'forgot_title' => 'Забыли пароль', + 'forgot_intro' => 'Введите email, с которым регистрировались — вышлем ссылку для сброса.', + 'send_reset_link' => 'Выслать ссылку', + 'back_to_login' => '← Вернуться ко входу', + 'reset_title' => 'Задать новый пароль', + 'reset_button' => 'Установить пароль', + ], +]; diff --git a/phpunit.xml b/phpunit.xml index 861e9cb..509e757 100644 --- a/phpunit.xml +++ b/phpunit.xml @@ -19,6 +19,8 @@ + + diff --git a/resources/views/invitations/accept.blade.php b/resources/views/invitations/accept.blade.php index 953689b..3674e6c 100644 --- a/resources/views/invitations/accept.blade.php +++ b/resources/views/invitations/accept.blade.php @@ -1,8 +1,8 @@ - + -Acceptă invitația — {{ $company }} +{{ __('portal.invitation.title_accept') }} — {{ $company }} -

Invitație expirată

Linkul de invitație a expirat (durata maximă: 7 zile). Roagă administratorul să retrimită invitația.

+

{{ __('portal.invitation.expired_title') }}

{{ __('portal.invitation.expired_body') }}

diff --git a/resources/views/invitations/invalid.blade.php b/resources/views/invitations/invalid.blade.php index ef853c4..e976f48 100644 --- a/resources/views/invitations/invalid.blade.php +++ b/resources/views/invitations/invalid.blade.php @@ -1,4 +1,4 @@ -Invitație invalidă +{{ __('portal.invitation.invalid_title') }} -

Invitație invalidă

Linkul nu mai este valabil sau a fost deja folosit.

+

{{ __('portal.invitation.invalid_title') }}

{{ __('portal.invitation.invalid_body') }}

diff --git a/resources/views/shop/account.blade.php b/resources/views/shop/account.blade.php index 0c527e7..88a048f 100644 --- a/resources/views/shop/account.blade.php +++ b/resources/views/shop/account.blade.php @@ -1,32 +1,32 @@ @extends('shop.layout') -@section('title', 'Contul meu') +@section('title', __('portal.shop.my_account')) @section('content') @php $currency = $tenant->settings['currency'] ?? 'MDL'; $statuses = \App\Models\Tenant\OnlineOrder::STATUSES; @endphp -

Salut, {{ $customer->name }}!

+

{{ __('portal.shop.hello_name', ['name' => $customer->name]) }}

-

Date contact

+

{{ __('portal.shop.contact_data') }}

📞 {{ $customer->phone }}

@if ($customer->email)

✉️ {{ $customer->email }}

@endif
-

Comenzile mele ({{ $orders->count() }})

+

{{ __('portal.shop.my_orders', ['count' => $orders->count()]) }}

@if ($orders->isEmpty())
-

Nu ai nicio comandă încă.

- Vezi catalogul +

{{ __('portal.shop.no_orders_yet') }}

+ {{ __('portal.shop.view_catalog') }}
@else
- + @@ -37,7 +37,7 @@ - + @endforeach diff --git a/resources/views/shop/auth/forgot.blade.php b/resources/views/shop/auth/forgot.blade.php index beb4870..2db70aa 100644 --- a/resources/views/shop/auth/forgot.blade.php +++ b/resources/views/shop/auth/forgot.blade.php @@ -1,10 +1,10 @@ @extends('shop.layout') -@section('title', 'Resetare parolă') +@section('title', __('portal.shop.forgot_title')) @section('content')
-

Am uitat parola

-

Introdu emailul cu care te-ai înregistrat — îți trimitem un link de resetare.

+

{{ __('portal.shop.forgot_title') }}

+

{{ __('portal.shop.forgot_intro') }}

@if (session('status'))
@@ -22,14 +22,14 @@
@csrf -
+
- +

- ← Înapoi la login + {{ __('portal.shop.back_to_login') }}

@endsection diff --git a/resources/views/shop/auth/login.blade.php b/resources/views/shop/auth/login.blade.php index 24f26bc..75d0349 100644 --- a/resources/views/shop/auth/login.blade.php +++ b/resources/views/shop/auth/login.blade.php @@ -1,9 +1,9 @@ @extends('shop.layout') -@section('title', 'Login') +@section('title', __('portal.shop.login')) @section('content')
-

Intră în cont

+

{{ __('portal.shop.signin_title') }}

@if ($errors->any())
@@ -15,18 +15,18 @@
@csrf -
+
-
+
- +

- Am uitat parola - · Nu ai cont? Înregistrare + {{ __('portal.shop.forgot_password') }} + · {{ __('portal.shop.no_account') }} {{ __('portal.shop.register') }}

@if (session('status'))
diff --git a/resources/views/shop/auth/register.blade.php b/resources/views/shop/auth/register.blade.php index 1b776aa..22b9388 100644 --- a/resources/views/shop/auth/register.blade.php +++ b/resources/views/shop/auth/register.blade.php @@ -1,9 +1,9 @@ @extends('shop.layout') -@section('title', 'Înregistrare') +@section('title', __('portal.shop.register')) @section('content')
-

Înregistrare cont

+

{{ __('portal.shop.register_title') }}

@if ($errors->any())
@@ -15,26 +15,26 @@
@csrf -
+
-
+
-
+
-
+
-
+
- +

- Ai deja cont? Login + {{ __('portal.shop.have_account') }} {{ __('portal.shop.login') }}

@endsection diff --git a/resources/views/shop/auth/reset.blade.php b/resources/views/shop/auth/reset.blade.php index dfef3d5..6f09654 100644 --- a/resources/views/shop/auth/reset.blade.php +++ b/resources/views/shop/auth/reset.blade.php @@ -1,9 +1,9 @@ @extends('shop.layout') -@section('title', 'Parolă nouă') +@section('title', __('portal.shop.reset_title')) @section('content')
-

Setează o parolă nouă

+

{{ __('portal.shop.reset_title') }}

@if ($errors->any())
@@ -16,16 +16,16 @@
@csrf -
+
-
+
-
+
- +
@endsection diff --git a/resources/views/shop/cart.blade.php b/resources/views/shop/cart.blade.php index 712beca..c8e6278 100644 --- a/resources/views/shop/cart.blade.php +++ b/resources/views/shop/cart.blade.php @@ -1,14 +1,14 @@ @extends('shop.layout') -@section('title', 'Coș') +@section('title', __('portal.shop.cart_title')) @section('content') @php $currency = $tenant->settings['currency'] ?? 'MDL'; @endphp -

Coșul meu

+

{{ __('portal.shop.cart_title') }}

@if (empty($cart))
-

Coșul e gol.

- Vezi catalogul +

{{ __('portal.shop.cart_empty') }}

+ {{ __('portal.shop.view_catalog') }}
@else
@@ -16,7 +16,7 @@
Nr.DataArticoleTotalStatus{{ __('portal.shop.order_nr') }}{{ __('portal.shop.order_date') }}{{ __('portal.shop.order_items') }}{{ __('portal.common.total') }}{{ __('portal.shop.status') }}
{{ $order->items()->count() }} {{ number_format((float) $order->total, 2) }} {{ $currency }} {{ $statuses[$order->status] ?? $order->status }}Detalii →{{ __('portal.shop.order_details_arrow') }}
- + @foreach ($cart as $id => $item) @@ -37,10 +37,10 @@
PiesăPrețCant.Total
{{ __('portal.shop.part') }}{{ __('portal.shop.price') }}{{ __('portal.shop.qty') }}{{ __('portal.common.total') }}
- +
-
Subtotal: {{ number_format($subtotal, 2) }} {{ $currency }}
- Finalizează comanda → +
{{ __('portal.shop.subtotal') }} {{ number_format($subtotal, 2) }} {{ $currency }}
+ {{ __('portal.shop.checkout_arrow') }}
diff --git a/resources/views/shop/catalog.blade.php b/resources/views/shop/catalog.blade.php index 5e8c8d5..40ba542 100644 --- a/resources/views/shop/catalog.blade.php +++ b/resources/views/shop/catalog.blade.php @@ -1,26 +1,26 @@ @extends('shop.layout') -@section('title', 'Catalog piese') +@section('title', __('portal.shop.catalog_title')) @section('content') @php $currency = $tenant->settings['currency'] ?? 'MDL'; @endphp
- + - +
@if ($parts->isEmpty())
-

Nicio piesă găsită{{ $term ? ' pentru „' . $term . '”' : '' }}.

+

{{ $term ? __('portal.shop.no_parts_found_for', ['term' => $term]) : __('portal.shop.no_parts_found') }}.

@else
@@ -41,12 +41,12 @@ {{ $p->brand ? $p->brand . ' · ' : '' }}{{ $p->article ?? '' }}
- {{ $stock > 0 ? '● În stoc' : '○ La comandă' }} + {{ $stock > 0 ? __('portal.shop.in_stock') : __('portal.shop.on_order') }}
{{ number_format((float) $p->sell_price, 2) }} {{ $currency }}
@csrf - +
@endforeach diff --git a/resources/views/shop/checkout.blade.php b/resources/views/shop/checkout.blade.php index 0659802..39215ac 100644 --- a/resources/views/shop/checkout.blade.php +++ b/resources/views/shop/checkout.blade.php @@ -1,12 +1,12 @@ @extends('shop.layout') -@section('title', 'Finalizare comandă') +@section('title', __('portal.shop.checkout_title')) @section('content') @php $currency = $tenant->settings['currency'] ?? 'MDL'; $labels = \App\Models\Tenant\OnlineOrder::DELIVERY; @endphp -

Finalizează comanda

+

{{ __('portal.shop.checkout_title') }}

@if ($errors->any())
@@ -20,19 +20,19 @@
@csrf
- +
- +
- +
- +
- +
- +
- +
-

Sumar

+

{{ __('portal.shop.summary') }}

@foreach ($cart as $item) @@ -63,7 +63,7 @@
{{ number_format($subtotal, 2) }} {{ $currency }}
-

Taxa de livrare se calculează în funcție de metoda aleasă.

+

{{ __('portal.shop.delivery_fee_note') }}

diff --git a/resources/views/shop/layout.blade.php b/resources/views/shop/layout.blade.php index 007ba87..c25242e 100644 --- a/resources/views/shop/layout.blade.php +++ b/resources/views/shop/layout.blade.php @@ -10,7 +10,7 @@ -@yield('title', 'Magazin') — {{ $brand }} +@yield('title', __('portal.shop.catalog')) — {{ $brand }} @if ($faviconUrl)@endif