components([ DatePicker::make('start_date') ->label('Tanggal Mulai') ->required() ->native(false), DatePicker::make('end_date') ->label('Tanggal Selesai') ->required() ->native(false) ->after('start_date'), Textarea::make('task_description') ->label('Deskripsi Tugas') ->required() ->rows(4) ->maxLength(65535), TextInput::make('report_amount') ->label('Jumlah Laporan') ->numeric() ->required() ->minValue(1) ->default(1), Select::make('partner_media_ids') ->label('Media yang Ditugaskan') ->relationship('partnerMedia', 'name') ->multiple() ->preload() ->required(), Select::make('status') ->options(ApprovalStatus::options()) ->required() ->default(ApprovalStatus::PENDING), Textarea::make('rejection_reason') ->label('Alasan Penolakan') ->rows(3) ->columnSpanFull(), ]); } public function table(Table $table): Table { return $table ->recordTitleAttribute('task_description') ->columns([ TextColumn::make('start_date') ->label('Mulai') ->date('l, d F Y'), TextColumn::make('end_date') ->label('Selesai') ->date('l, d F Y'), TextColumn::make('task_description') ->label('Deskripsi Tugas') ->limit(50), TextColumn::make('report_amount') ->label('Jumlah Laporan'), TextColumn::make('report_count') ->label('Laporan Diterima') ->getStateUsing(function (TaskAssignment $record) { return $record->reports()->count() . ' / ' . ($record->report_amount * $record->partnerMedia()->count()); }), ]) ->filters([ // ]) ->headerActions([ CreateAction::make() ->label('Buat Penugasan') ->visible(fn() => $this->canCreateTaskAssignment()), ]) ->recordActions([ EditAction::make(), DeleteAction::make(), ]) ->toolbarActions([ BulkActionGroup::make([ DeleteBulkAction::make(), ]), ]); } protected function canCreateTaskAssignment(): bool { $cooperation = $this->getOwnerRecord(); // Can create task assignment only if there are accepted proposals return $cooperation->proposals()->where('status', ApprovalStatus::ACCEPTED)->exists(); } }