components([ Forms\Components\Select::make('part_id') ->label(__('Piesă')) ->options(fn () => Part::where('is_active', true) ->get() ->mapWithKeys(fn ($p) => [$p->id => "{$p->name} " . ($p->article ? "[{$p->article}]" : '')]) ->toArray()) ->searchable() ->required() ->live() ->afterStateUpdated(function ($state, Set $set) { if ($state && $p = Part::find($state)) { $set('unit', $p->unit); } }), Forms\Components\TextInput::make('qty')->label(__('Cantitate'))->numeric()->default(1)->required(), Forms\Components\TextInput::make('unit')->label(__('UM'))->default('buc')->maxLength(16), ]); } public function table(Table $table): Table { return $table ->recordTitleAttribute('part.name') ->columns([ Tables\Columns\TextColumn::make('part.name')->label(__('Piesă'))->wrap(), Tables\Columns\TextColumn::make('part.article')->label(__('Cod'))->placeholder('—'), Tables\Columns\TextColumn::make('qty')->label(__('Cant.'))->alignRight(), Tables\Columns\TextColumn::make('unit')->label(__('UM')), ]) ->headerActions([Actions\CreateAction::make()]) ->actions([Actions\EditAction::make(), Actions\DeleteAction::make()]) ->emptyStateHeading(__('Nicio piesă implicită')) ->emptyStateDescription(__('Adaugă piesele care se montează de obicei la această manoperă — se adaugă automat în fișă când selectezi manopera.')); } }