setPrimaryKey('id') ->setDefaultSort('created_at', 'desc') ->setSortingPillsEnabled(false) ->setAdditionalSelects(['projects.id as id', 'projects.created_at as created_at']); } public function builder(): Builder { return Project::accessibleBy(Auth::user()) ->with('phases'); } public function columns(): array { return [ Column::make('Referencia', 'reference') ->sortable() ->searchable() ->format(function ($value, $row) { $url = route('projects.dashboard', $row->id); return $value ? ''.e($value).'' : '—'; }) ->html(), Column::make(__('Name'), 'name') ->sortable() ->searchable(), Column::make(__('Address'), 'address') ->sortable() ->searchable() ->format(fn ($value) => $value ? ''.e($value).'' : '—') ->html(), Column::make(__('Status'), 'status') ->sortable() ->format(function ($value) { $map = [ 'planning' => ['badge-ghost', 'Planificación'], 'in_progress' => ['badge-primary', 'En progreso'], 'paused' => ['badge-warning', 'Pausado'], 'completed' => ['badge-success', 'Completado'], ]; [$cls, $label] = $map[$value] ?? ['badge-ghost', ucfirst($value)]; return ''.$label.''; }) ->html(), Column::make(__('Progress')) ->label(function ($row) { $avg = $row->phases->avg('progress_percent') ?? 0; $pct = round($avg); return '