sortable(), Text::make('Order Number') ->sortable() ->rules('required') ->creationRules('unique:repair_orders,order_number') ->updateRules('unique:repair_orders,order_number,{{resourceId}}'), BelongsTo::make('Vehicle') ->searchable() ->rules('required'), Badge::make('Status') ->map([ 'pending' => 'info', 'in_progress' => 'warning', 'parts_ordered' => 'info', 'on_hold' => 'danger', 'completed' => 'success', 'cancelled' => 'danger', ]) ->sortable(), Badge::make('Priority') ->map([ 'low' => 'info', 'medium' => 'warning', 'high' => 'danger', 'critical' => 'danger', ]) ->sortable(), DateTime::make('Reported At') ->sortable() ->rules('required'), DateTime::make('Assigned At') ->sortable() ->hideFromIndex() ->nullable(), DateTime::make('Started At') ->sortable() ->hideFromIndex() ->nullable(), DateTime::make('Completed At') ->sortable() ->nullable(), Textarea::make('Issue Description') ->rules('required') ->alwaysShow(), Textarea::make('Diagnosis') ->hideFromIndex() ->alwaysShow() ->nullable(), Textarea::make('Resolution') ->hideFromIndex() ->alwaysShow() ->nullable(), Number::make('Mileage At Repair') ->rules('required', 'numeric', 'min:0'), Number::make('Labor Hours') ->rules('nullable', 'numeric', 'min:0') ->hideFromIndex(), Currency::make('Labor Cost') ->rules('nullable', 'numeric', 'min:0'), Currency::make('Parts Cost') ->rules('nullable', 'numeric', 'min:0'), Currency::make('Total Cost') ->rules('nullable', 'numeric', 'min:0') ->sortable(), BelongsToMany::make('Technicians') ->fields(function () { return [ Boolean::make('Is Lead'), ]; }), BelongsToMany::make('Parts') ->fields(function () { return [ Number::make('Quantity Used') ->rules('required', 'min:1'), Currency::make('Unit Cost') ->rules('required'), ]; }), HasMany::make('Repair Tasks'), MorphMany::make('Documents'), ]; } public function cards(NovaRequest $request) { return [ new RepairsPerMonth, new AverageRepairCost, ]; } public function filters(NovaRequest $request) { return [ new RepairStatusFilter, ]; } public function actions(NovaRequest $request) { return [ new AssignTechnicians, new CompleteRepair, new GenerateRepairReport, ]; } }