172 lines
4.9 KiB
PHP
172 lines
4.9 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 RepairOrder extends Resource
|
|
{
|
|
public static string $model = \App\Models\RepairOrder::class;
|
|
public static $title = 'order_number';
|
|
public static $search = ['order_number', 'issue_description', 'diagnosis', 'resolution'];
|
|
|
|
public function fields(NovaRequest $request)
|
|
{
|
|
return [
|
|
ID::make()->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,
|
|
];
|
|
}
|
|
}
|