components([ Forms\Components\Select::make('subcontractor_id') ->label('Subcontractor') ->options(fn () => Subcontractor::where('is_active', true)->pluck('name', 'id')) ->searchable() ->columnSpanFull(), Forms\Components\Select::make('category') ->label('Categorie') ->options(array_combine(Subcontractor::SPECIALTIES, Subcontractor::SPECIALTIES)) ->searchable(), Forms\Components\Select::make('status')->options(SubcontractJob::STATUSES)->default('sent')->required(), Forms\Components\Textarea::make('description')->label('Descriere')->rows(2)->columnSpanFull(), Forms\Components\TextInput::make('cost')->label('Cost (terț)')->numeric()->default(0)->required(), Forms\Components\TextInput::make('markup_pct')->label('Markup %')->numeric()->default(0), Forms\Components\TextInput::make('client_price')->label('Preț client')->numeric()->default(0) ->helperText('Folosit dacă markup = 0.'), Forms\Components\DatePicker::make('eta')->label('ETA'), ]); } public function table(Table $table): Table { return $table ->recordTitleAttribute('number') ->columns([ Tables\Columns\TextColumn::make('number')->label('Nr.'), Tables\Columns\TextColumn::make('subcontractor.name')->label('Terț')->placeholder('—'), Tables\Columns\TextColumn::make('category')->badge()->placeholder('—'), Tables\Columns\TextColumn::make('cost')->money('MDL')->alignRight(), Tables\Columns\TextColumn::make('client_price')->label('Preț client')->money('MDL')->alignRight(), Tables\Columns\TextColumn::make('margin') ->label('Marjă') ->state(fn (SubcontractJob $r) => $r->margin()) ->money('MDL')->alignRight() ->color(fn ($s) => (float) $s > 0 ? 'success' : ((float) $s < 0 ? 'danger' : 'gray')), Tables\Columns\TextColumn::make('status') ->formatStateUsing(fn ($s) => SubcontractJob::STATUSES[$s] ?? $s) ->badge() ->colors(['warning' => ['sent', 'in_progress'], 'success' => ['done', 'returned'], 'danger' => ['cancelled']]), ]) ->headerActions([Actions\CreateAction::make()]) ->actions([Actions\EditAction::make(), Actions\DeleteAction::make()]); } }