components([ Schemas\Components\Section::make(__('Coeficient')) ->columns(2) ->schema([ Forms\Components\TextInput::make('name')->label(__('Denumire'))->required() ->placeholder(__('ex: Mașină veche, Client VIP, Express'))->columnSpanFull(), Forms\Components\TextInput::make('multiplier') ->label(__('Multiplicator')) ->numeric() ->required() ->default(1.10) ->helperText(__('1.15 = +15% peste prețul de bază. 0.95 = -5%.')), Forms\Components\TextInput::make('priority')->label(__('Prioritate'))->numeric()->default(100), Forms\Components\Toggle::make('stackable') ->label(__('Cumulabil')) ->default(true) ->helperText(__('Cumulabil = se înmulțește cu alți coeficienți. Necumulabil = doar cel mai mare necumulabil se aplică.')), Forms\Components\Toggle::make('is_active')->label(__('Activ'))->default(true), ]), Schemas\Components\Section::make(__('Condiții (toate trebuie îndeplinite)')) ->description(__('Lasă gol = se aplică mereu. Combină condițiile pentru a ținti situații specifice.')) ->columns(2) ->schema([ Forms\Components\CheckboxList::make('conditions.classes') ->label(__('Clase auto')) ->options(PricingCoefficient::VEHICLE_CLASSES) ->columns(2) ->columnSpanFull(), Forms\Components\CheckboxList::make('conditions.body_types') ->label(__('Caroserie')) ->options(\App\Models\Tenant\Vehicle::BODY_TYPES) ->columns(3) ->columnSpanFull(), Forms\Components\CheckboxList::make('conditions.transmissions') ->label(__('Cutie de viteze')) ->options(\App\Models\Tenant\Vehicle::TRANSMISSION_TYPES) ->columns(3) ->columnSpanFull(), Forms\Components\TextInput::make('conditions.age_min')->label(__('Vârstă min (ani)'))->numeric(), Forms\Components\TextInput::make('conditions.age_max')->label(__('Vârstă max (ani)'))->numeric(), Forms\Components\Toggle::make('conditions.client_vip')->label(__('Doar clienți VIP')), Forms\Components\CheckboxList::make('conditions.urgency') ->label(__('Urgență')) ->options(PricingCoefficient::URGENCY) ->columns(3) ->columnSpanFull(), ]), ]); } public static function table(Table $table): Table { return $table ->columns([ Tables\Columns\TextColumn::make('priority')->label(__('Prio'))->sortable()->alignRight(), Tables\Columns\TextColumn::make('name')->searchable()->sortable(), Tables\Columns\TextColumn::make('multiplier') ->label(__('Multiplicator')) ->formatStateUsing(fn ($s) => '×' . rtrim(rtrim(number_format((float) $s, 3), '0'), '.')) ->alignRight() ->color(fn ($s) => (float) $s >= 1 ? 'success' : 'warning'), Tables\Columns\IconColumn::make('stackable')->label(__('Cumul.'))->boolean(), Tables\Columns\IconColumn::make('is_active')->label(__('Activ'))->boolean(), ]) ->filters([ Tables\Filters\TernaryFilter::make('is_active')->label(__('Active')), ]) ->actions([ Actions\EditAction::make(), Actions\DeleteAction::make(), ]) ->emptyStateHeading(__('Niciun coeficient')) ->emptyStateDescription(__('Adaugă reguli care ajustează prețul în funcție de vârsta mașinii, clasă (SUV, comercial, hibrid), client VIP sau urgență. Se aplică peste markup-ul de bază pe fișele de lucru.')) ->emptyStateIcon('heroicon-o-adjustments-horizontal') ->defaultSort('priority'); } public static function getModelLabel(): string { return __('coeficient'); } public static function getPluralModelLabel(): string { return __('coeficienți preț'); } public static function getPages(): array { return [ 'index' => Pages\ListPricingCoefficients::route('/'), 'create' => Pages\CreatePricingCoefficient::route('/create'), 'edit' => Pages\EditPricingCoefficient::route('/{record}/edit'), ]; } }