setPrimaryKey('id') ->setDefaultSort('inspections.created_at', 'desc') ->setSortingPillsEnabled(false) ->setSecondaryHeaderEnabled() ->setAdditionalSelects([ 'inspections.id as id', 'inspections.created_at as created_at', 'inspections.feature_id as feature_id', 'inspections.template_id as template_id', 'inspections.user_id as user_id', ]); } public function builder(): Builder { $user = Auth::user(); abort_unless( $user->can('manage all') || Project::whereKey($this->projectId)->whereHas('users', fn ($q) => $q->where('user_id', $user->id))->exists(), 403 ); return Inspection::query() ->where('inspections.project_id', $this->projectId) ->with(['feature', 'template', 'user']); } public function columns(): array { return [ Column::make('Fecha', 'created_at') ->sortable() ->secondaryHeaderFilter('fecha') ->format(fn ($value, $row) => $row->created_at?->format('d/m/Y') ?? '—'), Column::make('Elemento') ->secondaryHeaderFilter('elemento') ->label(fn ($row) => $row->feature?->name ? '' . e($row->feature->name) . '' : '') ->html(), Column::make('Plantilla') ->label(fn ($row) => e($row->template?->name ?? '—')), Column::make('Resultado', 'result') ->sortable() ->secondaryHeaderFilter('resultado') ->format(fn ($value) => $value ? '' . e($value) . '' : '') ->html(), Column::make('Usuario') ->secondaryHeaderFilter('usuario') ->label(fn ($row) => e($row->user?->name ?? '—')), Column::make('Acciones') ->label(fn ($row) => '
') ->html(), ]; } public function filters(): array { $results = Inspection::where('project_id', $this->projectId) ->whereNotNull('result')->distinct()->orderBy('result') ->pluck('result', 'result')->toArray(); $users = User::whereIn('id', Inspection::where('project_id', $this->projectId) ->whereNotNull('user_id')->distinct()->pluck('user_id')) ->orderBy('name')->pluck('name', 'id')->toArray(); return [ DateFilter::make('Fecha', 'fecha') ->filter(fn (Builder $query, string $value) => $query->whereDate('inspections.created_at', $value)), TextFilter::make('Elemento', 'elemento') ->config(['placeholder' => 'Buscar elemento…']) ->filter(fn (Builder $query, string $value) => $query->whereHas('feature', fn ($f) => $f->where('name', 'like', '%' . $value . '%'))), SelectFilter::make('Resultado', 'resultado') ->options(['' => 'Todos'] + $results) ->filter(fn (Builder $query, string $value) => $query->where('inspections.result', $value)), SelectFilter::make('Usuario', 'usuario') ->options(['' => 'Todos'] + $users) ->filter(fn (Builder $query, string $value) => $query->where('inspections.user_id', $value)), ]; } }