diff --git a/app/Enums/MissionTypes.php b/app/Enums/MissionTypes.php index e19472cf..356fbd33 100644 --- a/app/Enums/MissionTypes.php +++ b/app/Enums/MissionTypes.php @@ -6,12 +6,14 @@ enum MissionTypes: int { case SAATY= 1; case ROZANE = 2; + case NO_PROCESS = 3; public static function name(int $state): string { $mapArray = [ 1 => 'ساعتی', 2 => 'روزانه', + 3 => 'بدون فرآیند', ]; return $mapArray[$state]; diff --git a/app/Events/V3/Dashboard/Mission/FinishRequestEvent.php b/app/Events/V3/Dashboard/Mission/FinishRequestEvent.php new file mode 100644 index 00000000..3569c2b3 --- /dev/null +++ b/app/Events/V3/Dashboard/Mission/FinishRequestEvent.php @@ -0,0 +1,19 @@ +value; + $mission->update([ 'state_id' => $state, 'state_name' => MissionStates::name($state), @@ -60,4 +65,41 @@ class ControlUnitController extends Controller return $this->successResponse(); } + + + public function noProcess(NoProcessRequest $request): JsonResponse + { + + DB::transaction(function () use ($request) { + $user = auth()->user(); + $zone= $request->zone; + $type= MissionTypes::NO_PROCESS->value; + + $mission = Mission::query()->create([ + 'user_id' => $user->id, + 'username' => $user->username, + 'province_id' => $user->province_id, + 'province_name' => $user->province_fa, + 'edare_shahri_id' => $user->edarate_shahri_id ?? null, + 'edare_shahri_name' => $user->edarate_shahri_name ?? null, + 'zone' => $zone, + 'zone_fa' => MissionZones::name($zone), + 'type' => $type, + 'type_fa' => MissionTypes::name($type), + 'start_date' => $request->start_date, + 'end_date' => $request->end_date, + 'end_point' => $request->end_point, + 'area' => json_encode($request->area), + 'category_id' => $request->category_id, + 'category_name' => MissionCategory::name($request->category_id), + 'start_time' => $request->start_date, + 'finish_time' => $request->end_date, + ]); + + $mission->rahdaran()->sync($request->rahdaran); + $mission->machines()->attach($request->machines); + $mission->rahdaran()->attach($request->driver, ['is_driver' => true]); + }); + return $this->successResponse(); + } } diff --git a/app/Http/Requests/V3/Mission/ControlUnit/NoProcessRequest.php b/app/Http/Requests/V3/Mission/ControlUnit/NoProcessRequest.php new file mode 100644 index 00000000..bbcf30b9 --- /dev/null +++ b/app/Http/Requests/V3/Mission/ControlUnit/NoProcessRequest.php @@ -0,0 +1,62 @@ + + */ + public function rules(): array + { + return [ + 'rahdaran' => 'array', + 'rahdaran.*' => 'exists:rahdaran,id', + 'machines' => 'required|array', + 'machines.*' => 'required|integer|exists:cmms_machines,id', + 'driver' => 'required|integer|exists:rahdaran,id', + 'zone' => 'required|in:1,2,3', + 'start_date' => 'required|date', + 'end_date' => 'required|date', + 'end_point' => 'required|string', + 'area' => 'required|array', + 'area.type' => 'required|string', + 'area.coordinates' => 'required|array', + 'category_id' => 'required|in:1,2,3', + ]; + } + + public function after(): array + { + return [ + function (Validator $validator) { + $start = Carbon::parse($this->start_date); + $end = Carbon::parse($this->end_date); + $now = Carbon::now(); + + if ($end->diffInMinutes($now) > 0 || $start->diffInMinutes($now) > 0) { + $validator->errors()->add( + 'end_date', + 'امکان ثبت ماموریت بدون فرایند با توجه به زمان انتخابی مقدور نمی باشد.' + ); + } + } + ]; + } +} diff --git a/app/Listeners/V3/Dashboard/Mission/FinishRequestListener.php b/app/Listeners/V3/Dashboard/Mission/FinishRequestListener.php new file mode 100644 index 00000000..be6e1d49 --- /dev/null +++ b/app/Listeners/V3/Dashboard/Mission/FinishRequestListener.php @@ -0,0 +1,35 @@ +url = config('App\Services\FMSService.url'); + $this->username = config('App\Services\FMSService.username'); + $this->password = config('App\Services\FMSService.password'); + } + + /** + * @throws RequestException + */ + public function handle(FinishRequestEvent $event): void + { + Http::post($this->url, + array( + 'area' => $event->mission->area, + 'machine_code' => $event->mission->machines()->pluck('machines.machine_code'), + 'start_date' => $event->mission->start_date, + 'end_date' => $event->mission->end_date, + ))->throw(); + } +}