*/ public static string $model = \App\Models\Session::class; /** * The single value that should be used to represent the resource when being displayed. * * @var string */ public static $title = 'id'; /** * The columns that should be searched. * * @var array */ public static $search = ['id', 'status', 'result']; /** * Indicates if the resource should be displayed in the sidebar. * * @var bool */ public static $displayInNavigation = true; /** * The group associated with the resource. * * @var string */ public static $group = 'Questionnaire'; /** * The relationships that should be eager loaded on index queries. * * @var array */ public static $with = ['user', 'category', 'screening']; /** * Get the displayable label of the resource. */ public static function label(): string { return 'Sessions'; } /** * Get the displayable singular label of the resource. */ public static function singularLabel(): string { return 'Session'; } /** * Get the fields displayed by the resource. * * @return array */ public function fields(NovaRequest $request): array { return [ ID::make()->sortable(), BelongsTo::make('User', 'user', User::class) ->sortable() ->filterable() ->rules('required') ->help('The person who started this questionnaire session.'), BelongsTo::make('Category', 'category', CategoryResource::class) ->sortable() ->filterable() ->rules('required') ->help('The assessment category for this session, such as Audit or Tax.'), BelongsTo::make('Screening', 'screening', ScreeningResource::class) ->nullable() ->sortable() ->filterable() ->rules('nullable') ->help('The pre-screening that was completed before starting this session.'), Select::make('Status') ->options([ 'in_progress' => 'In Progress', 'completed' => 'Completed', 'abandoned' => 'Abandoned', ]) ->displayUsingLabels() ->sortable() ->filterable() ->help('The current state of this session. "In Progress" means the user has not yet submitted, "Completed" means submitted, "Abandoned" means the user left without finishing.'), Number::make('Score') ->sortable() ->filterable() ->copyable() ->rules('nullable', 'integer') ->help('The total score from all scored questions. Only "Yes" answers count as points.'), Select::make('Result') ->options([ 'go' => 'Go', 'no_go' => 'No Go', 'consult_leadership' => 'Consult Leadership', ]) ->displayUsingLabels() ->sortable() ->filterable() ->help('The final outcome based on the score. "Go" (10+ points) means pursue the opportunity, "Consult Leadership" (5-9 points) means seek advice, "No Go" (1-4 points) means do not pursue.'), Textarea::make('Additional Comments') ->rules('nullable') ->help('Any extra notes the user added at the end of the questionnaire.'), DateTime::make('Completed At') ->sortable() ->filterable() ->rules('nullable') ->help('The date and time when the user submitted this session.'), HasMany::make('Answers', 'answers', AnswerResource::class), HasMany::make('Logs', 'logs', LogResource::class), ]; } /** * Get the cards available for the request. * * @return array */ public function cards(NovaRequest $request): array { return []; } /** * Get the filters available for the resource. * * @return array */ public function filters(NovaRequest $request): array { return []; } /** * Get the lenses available for the resource. * * @return array */ public function lenses(NovaRequest $request): array { return []; } /** * Get the actions available for the resource. * * @return array */ public function actions(NovaRequest $request): array { return [ new DownloadExcel, ]; } }