components([ Forms\Components\Select::make('part_id') ->label('Piesă din catalog') ->options(fn () => Part::where('is_active', true) ->get() ->mapWithKeys(fn ($p) => [$p->id => "{$p->name} " . ($p->article ? "[{$p->article}]" : '')]) ->toArray()) ->searchable() ->live() ->afterStateUpdated(function ($state, Set $set) { if ($state && $part = Part::find($state)) { $set('name', $part->name); $set('article', $part->article); $set('unit', $part->unit); $set('buy_price', $part->buy_price); } }) ->columnSpanFull(), Forms\Components\TextInput::make('name')->label('Denumire')->required()->columnSpanFull(), Forms\Components\TextInput::make('article')->label('Cod articol'), Forms\Components\TextInput::make('qty')->label('Cantitate')->numeric()->default(1)->required(), Forms\Components\TextInput::make('unit')->label('UM')->default('buc'), Forms\Components\TextInput::make('buy_price')->label('Preț achiziție')->numeric()->required(), ]); } public function table(Table $table): Table { return $table ->recordTitleAttribute('name') ->columns([ Tables\Columns\TextColumn::make('name')->wrap(), Tables\Columns\TextColumn::make('article')->placeholder('—'), Tables\Columns\TextColumn::make('qty')->alignRight(), Tables\Columns\TextColumn::make('unit')->label('UM'), Tables\Columns\TextColumn::make('buy_price')->money('MDL')->alignRight(), Tables\Columns\TextColumn::make('total')->money('MDL')->alignRight(), Tables\Columns\IconColumn::make('received')->boolean()->label('Recepț.'), ]) ->headerActions([ Actions\CreateAction::make(), ]) ->actions([ Actions\EditAction::make(), Actions\DeleteAction::make(), ]); } }