81 lines
2.4 KiB
PHP
81 lines
2.4 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 AssignTechnicians extends Action
|
|
{
|
|
use InteractsWithQueue, Queueable;
|
|
|
|
public $name = 'Assign Technicians';
|
|
|
|
public function handle(ActionFields $fields, Collection $models)
|
|
{
|
|
foreach ($models as $model) {
|
|
// Clear previous assignments if requested
|
|
if ($fields->clear_previous) {
|
|
$model->technicians()->detach();
|
|
}
|
|
|
|
// Assign selected technicians
|
|
foreach ($fields->technicians as $techId) {
|
|
// Check if already assigned
|
|
if (!$model->technicians->contains($techId)) {
|
|
$model->technicians()->attach($techId, [
|
|
'is_lead' => in_array($techId, $fields->lead_technicians) ? true : false
|
|
]);
|
|
}
|
|
}
|
|
|
|
// Update status if needed
|
|
if ($model->status === 'pending') {
|
|
$model->status = 'in_progress';
|
|
$model->assigned_at = Carbon::now();
|
|
$model->started_at = Carbon::now();
|
|
|
|
// Update vehicle status
|
|
$vehicle = $model->vehicle;
|
|
$vehicle->status = 'in_repair';
|
|
$vehicle->save();
|
|
}
|
|
|
|
$model->save();
|
|
}
|
|
|
|
return Action::message('Technicians have been assigned successfully.');
|
|
}
|
|
|
|
public function fields(NovaRequest $request): array
|
|
{
|
|
return [
|
|
BelongsToMany::make('Technicians')
|
|
->rules('required'),
|
|
|
|
BelongsToMany::make('Lead Technicians', 'technicians', 'App\Nova\Technician')
|
|
->help('Select technicians who will lead this repair'),
|
|
|
|
Boolean::make('Clear Previous Assignments', 'clear_previous')
|
|
->help('Remove all previously assigned technicians')
|
|
->default(false),
|
|
];
|
|
}
|
|
}
|