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(\App\Support\I18n::opts(array_combine(Subcontractor::SPECIALTIES, Subcontractor::SPECIALTIES))) ->searchable(), Forms\Components\Select::make('status')->options(\App\Support\I18n::opts(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()]); } }