2025-03-22 10:19:15 +00:00

120 lines
3.2 KiB
PHP

<?php
namespace App\Nova;
use Laravel\Nova\Fields\ID;
use Laravel\Nova\Fields\Text;
use Laravel\Nova\Fields\Number;
use Laravel\Nova\Fields\Select;
use Laravel\Nova\Fields\Textarea;
use Laravel\Nova\Fields\Boolean;
use Laravel\Nova\Fields\Date;
use Laravel\Nova\Fields\DateTime;
use Laravel\Nova\Fields\BelongsTo;
use Laravel\Nova\Fields\BelongsToMany;
use Laravel\Nova\Fields\HasMany;
use Laravel\Nova\Fields\Currency;
use Laravel\Nova\Fields\Badge;
use Laravel\Nova\Fields\File;
use Laravel\Nova\Fields\MorphMany;
use Laravel\Nova\Http\Requests\NovaRequest;
use App\Nova\Metrics\VehiclesPerStatus;
use App\Nova\Metrics\RepairsPerMonth;
use App\Nova\Metrics\AverageRepairCost;
use App\Nova\Metrics\PartsInventoryValue;
use App\Nova\Actions\GenerateRepairReport;
use App\Nova\Actions\CompleteRepair;
use App\Nova\Actions\AssignTechnicians;
use App\Nova\Actions\OrderParts;
use App\Nova\Filters\VehicleStatusFilter;
use App\Nova\Filters\RepairStatusFilter;
use App\Nova\Filters\TechnicianSpecializationFilter;
use App\Nova\Lenses\VehiclesDueForMaintenance;
use App\Nova\Lenses\LowInventoryParts;
class Vehicle extends Resource
{
public static string $model = \App\Models\Vehicle::class;
public static $title = 'fleet_number';
public static $search = ['fleet_number', 'license_plate', 'vin', 'make', 'model'];
public function fields(NovaRequest $request): array
{
return [
ID::make()->sortable(),
Text::make('Fleet Number')
->sortable()
->rules('required', 'unique:vehicles,fleet_number,{{resourceId}}'),
Text::make('License Plate')
->sortable(),
Text::make('Make')
->sortable()
->rules('required'),
Text::make('Model')
->sortable()
->rules('required'),
Number::make('Year')
->sortable()
->rules('required', 'digits:4'),
Text::make('VIN')
->hideFromIndex()
->rules('required', 'size:17', 'unique:vehicles,vin,{{resourceId}}'),
Text::make('Color')
->hideFromIndex(),
Number::make('Mileage')
->sortable()
->rules('required', 'numeric', 'min:0'),
Badge::make('Status')
->map([
'active' => 'success',
'in_repair' => 'warning',
'out_of_service' => 'danger',
])
->sortable(),
Textarea::make('Notes')
->alwaysShow()
->hideFromIndex(),
HasMany::make('Repair Orders'),
HasMany::make('Maintenance Schedules'),
MorphMany::make('Documents'),
];
}
public function cards(NovaRequest $request): array
{
return [
new VehiclesPerStatus,
];
}
public function filters(NovaRequest $request): array
{
return [
new VehicleStatusFilter,
];
}
public function lenses(NovaRequest $request): array
{
return [
new VehiclesDueForMaintenance,
];
}
public function actions(NovaRequest $request): array
{
return [];
}
}