67 lines
1.9 KiB
PHP
67 lines
1.9 KiB
PHP
<?php
|
|
|
|
namespace App\Nova\Actions;
|
|
|
|
use Illuminate\Bus\Queueable;
|
|
use Illuminate\Queue\InteractsWithQueue;
|
|
use Illuminate\Support\Collection;
|
|
use Laravel\Nova\Actions\Action;
|
|
use Laravel\Nova\Fields\ActionFields;
|
|
use Laravel\Nova\Fields\Select;
|
|
use Laravel\Nova\Fields\Boolean;
|
|
use Laravel\Nova\Fields\BelongsToMany;
|
|
use Laravel\Nova\Fields\Text;
|
|
use Laravel\Nova\Fields\Textarea;
|
|
use Laravel\Nova\Fields\Number;
|
|
use Laravel\Nova\Fields\Currency;
|
|
use Laravel\Nova\Fields\DateTime;
|
|
use Laravel\Nova\Http\Requests\NovaRequest;
|
|
use App\Models\RepairOrder;
|
|
use App\Models\Vehicle;
|
|
use Carbon\Carbon;
|
|
|
|
|
|
class CompleteRepair extends Action
|
|
{
|
|
use InteractsWithQueue, Queueable;
|
|
|
|
public $name = 'Mark as Completed';
|
|
|
|
public function handle(ActionFields $fields, Collection $models)
|
|
{
|
|
foreach ($models as $model) {
|
|
if (!in_array($model->status, ['completed', 'cancelled'])) {
|
|
$model->status = 'completed';
|
|
$model->completed_at = Carbon::now();
|
|
$model->resolution = $fields->resolution;
|
|
$model->calculateCosts();
|
|
$model->save();
|
|
|
|
// Update vehicle status
|
|
$vehicle = $model->vehicle;
|
|
$vehicle->status = 'active';
|
|
$vehicle->mileage = $fields->final_mileage;
|
|
$vehicle->save();
|
|
|
|
return Action::message('Repair has been marked as completed.');
|
|
}
|
|
}
|
|
|
|
return Action::danger('Cannot complete repairs that are already completed or cancelled.');
|
|
}
|
|
|
|
public function fields(NovaRequest $request): array
|
|
{
|
|
return [
|
|
Textarea::make('Resolution')
|
|
->rules('required')
|
|
->help('Describe what was done to resolve the issue'),
|
|
|
|
Number::make('Final Mileage')
|
|
->rules('required', 'numeric', 'min:0')
|
|
->help('Update the current mileage of the vehicle'),
|
|
];
|
|
}
|
|
}
|
|
|