components([ Forms\Components\Section::make('Date generale') ->columns(2) ->schema([ Forms\Components\Select::make('type') ->label('Tip') ->options(['individual' => 'Persoană fizică', 'company' => 'Persoană juridică']) ->default('individual') ->required() ->live(), Forms\Components\TextInput::make('name')->label('Nume')->required()->maxLength(120), Forms\Components\TextInput::make('company_name') ->label('Denumire companie') ->visible(fn (Forms\Get $get) => $get('type') === 'company') ->maxLength(160), Forms\Components\Select::make('status') ->options([ 'new' => 'Nou', 'active' => 'Activ', 'vip' => 'VIP', 'debtor' => 'Datornic', 'blocked' => 'Blocat', 'lost' => 'Pierdut', ]) ->default('active') ->required(), ]), Forms\Components\Section::make('Contacte') ->columns(2) ->schema([ Forms\Components\TextInput::make('phone')->label('Telefon')->tel()->required()->maxLength(40), Forms\Components\TextInput::make('phone_alt')->label('Telefon alternativ')->tel()->maxLength(40), Forms\Components\TextInput::make('email')->email()->maxLength(120), Forms\Components\TextInput::make('telegram')->maxLength(60), Forms\Components\TextInput::make('whatsapp')->maxLength(60), Forms\Components\TextInput::make('viber')->maxLength(60), ]), Forms\Components\Section::make('Marketing') ->columns(2) ->schema([ Forms\Components\TextInput::make('source')->label('Sursă')->maxLength(60), Forms\Components\TextInput::make('marketing_channel')->label('Canal marketing')->maxLength(60), ]), Forms\Components\Section::make('Financiar') ->columns(2) ->schema([ Forms\Components\TextInput::make('balance')->label('Sold')->numeric()->default(0), Forms\Components\TextInput::make('discount_pct')->label('Discount %')->numeric()->default(0), ]), Forms\Components\Textarea::make('notes')->label('Notițe')->columnSpanFull()->rows(3), ]); } public static function table(Table $table): Table { return $table ->columns([ Tables\Columns\TextColumn::make('name')->searchable()->sortable(), Tables\Columns\TextColumn::make('phone')->searchable()->copyable(), Tables\Columns\TextColumn::make('email')->searchable()->toggleable(), Tables\Columns\TextColumn::make('vehicles_count')->counts('vehicles')->label('Mașini'), Tables\Columns\TextColumn::make('status') ->badge() ->colors([ 'success' => ['active', 'vip'], 'gray' => ['new'], 'danger' => ['debtor', 'blocked', 'lost'], ]), Tables\Columns\TextColumn::make('balance') ->money(fn () => tenant()?->settings['currency'] ?? 'MDL') ->color(fn ($state) => $state < 0 ? 'danger' : 'success'), Tables\Columns\TextColumn::make('created_at')->date()->sortable(), ]) ->filters([ Tables\Filters\SelectFilter::make('status')->options([ 'new' => 'Nou', 'active' => 'Activ', 'vip' => 'VIP', 'debtor' => 'Datornic', 'blocked' => 'Blocat', 'lost' => 'Pierdut', ]), ]) ->actions([ Actions\EditAction::make(), Actions\DeleteAction::make(), ]) ->defaultSort('created_at', 'desc'); } public static function getPages(): array { return [ 'index' => Pages\ListClients::route('/'), 'create' => Pages\CreateClient::route('/create'), 'edit' => Pages\EditClient::route('/{record}/edit'), ]; } }