Files
backend/app/Http/Requests/V3/Mission/ControlUnit/FinishRequest.php
2026-06-27 17:07:13 +03:30

80 lines
2.4 KiB
PHP

<?php
namespace App\Http\Requests\V3\Mission\ControlUnit;
use App\Enums\MissionStates;
use App\Models\CMMSMachine;
use Illuminate\Contracts\Validation\ValidationRule;
use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Validation\Validator;
class FinishRequest extends FormRequest
{
/**
* Determine if the user is authorized to make this request.
*/
public function authorize(): bool
{
return $this->mission->state_id == MissionStates::START_MISSION->value;
}
/**
* Get the validation rules that apply to the request.
*
* @return array<string, ValidationRule|array|string>
*/
public function rules(): array
{
return [
'time' => 'required|date',
'end_km' => 'required',
];
}
public function after(): array
{
return [
function (Validator $validator) {
$mission = $this->mission;
if (strtotime($this->time) < strtotime($mission->start_time)) {
$validator->errors()->add(
'time',
'زمان پایان ماموریت باید بعد از زمان شروع ماموریت باشد.'
);
}
if ($this->end_km <= $mission->km) {
$validator->errors()->add(
'end_km',
'کیلومتر پایان باید بزرگتر از کیلومتر شروع باشد.'
);
}
$machine = CMMSMachine::find($mission->machine_id);
$distance = $this->end_km - $mission->km;
if ($machine->car_group === 'سنگین') {
if ($distance > 15) {
$validator->errors()->add(
'end_km',
'اختلاف کیلومتر برای خودروهای سنگین باید کمتر از 15 باشد.'
);
}
} else {
if ($distance > 1000) {
$validator->errors()->add(
'end_km',
'اختلاف کیلومتر برای خودروهای سبک و نیمه سنگین باید کمتر از 1000 باشد.'
);
}
}
}
];
}
}