components([ Schemas\Components\Section::make()->columns(2)->schema([ Forms\Components\TextInput::make('name')->label('Nume')->required()->maxLength(160), Forms\Components\Select::make('specialty') ->label('Specialitate') ->options(array_combine(Subcontractor::SPECIALTIES, Subcontractor::SPECIALTIES)) ->searchable(), Forms\Components\TextInput::make('phone')->label('Telefon')->tel()->maxLength(40), Forms\Components\TextInput::make('email')->email()->maxLength(120), Forms\Components\Select::make('rating') ->label('Rating') ->options([1 => '★', 2 => '★★', 3 => '★★★', 4 => '★★★★', 5 => '★★★★★']) ->default(3), Forms\Components\Toggle::make('is_active')->label('Activ')->default(true), Forms\Components\Textarea::make('notes')->label('Observații')->columnSpanFull()->rows(2), ]), ]); } public static function table(Table $table): Table { return $table ->columns([ Tables\Columns\TextColumn::make('name')->searchable()->sortable(), Tables\Columns\TextColumn::make('specialty')->badge()->placeholder('—'), Tables\Columns\TextColumn::make('phone')->copyable()->placeholder('—'), Tables\Columns\TextColumn::make('rating')->formatStateUsing(fn ($s) => str_repeat('★', (int) $s)), Tables\Columns\TextColumn::make('jobs_count')->counts('jobs')->label('Lucrări')->alignRight(), Tables\Columns\IconColumn::make('is_active')->boolean(), ]) ->filters([ Tables\Filters\TernaryFilter::make('is_active')->label('Activi'), ]) ->actions([ Actions\EditAction::make(), Actions\DeleteAction::make(), ]) ->emptyStateHeading('Niciun subcontractor') ->emptyStateDescription('Adaugă atelierele terțe la care trimiți lucrări (turbo, cutii, vopsitorie, PDR) și urmărește costul + marja.') ->emptyStateIcon('heroicon-o-user-group') ->defaultSort('name'); } public static function getNavigationLabel(): string { return __('Subcontractori'); } public static function getNavigationGroup(): ?string { return __('Subcontractare'); } public static function getModelLabel(): string { return __('subcontractor'); } public static function getPluralModelLabel(): string { return __('subcontractori'); } public static function getPages(): array { return [ 'index' => Pages\ListSubcontractors::route('/'), 'create' => Pages\CreateSubcontractor::route('/create'), 'edit' => Pages\EditSubcontractor::route('/{record}/edit'), ]; } }