diff --git a/app/Http/Controllers/V3/Dashboard/Mission/CartableController.php b/app/Http/Controllers/V3/Dashboard/Mission/CartableController.php deleted file mode 100644 index 518bd4c8..00000000 --- a/app/Http/Controllers/V3/Dashboard/Mission/CartableController.php +++ /dev/null @@ -1,65 +0,0 @@ -json($requestPortalService->datatable($request)); + } + + public function store(StoreRequest $request): JsonResponse + { + DB::transaction(function () use ($request) { + $state = MissionStates::REQUEST_CREATED->value; + $mission = Mission::query()->create([ + 'user_id'=> auth()->user()->id, + 'state_id' =>$state, + 'state_name' => MissionStates::name($state), + 'requested_machine_type' => $request->requested_machine_type, + 'requested_machine_numbers' => $request->requested_machine_numbers, + 'type' => $request->type, + 'start_date' => $request->start_date, + 'end_date' => $request->end_date, + 'request_date' => $request->request_date, + 'description' => $request->description, + 'start_point' => $request->start_point, + 'end_point' => $request->end_point, + ]); + + $mission->rahdaran()->attach($request->rahdaran); + }); + + return $this->successResponse(); + } + + public function show(Mission $mission): JsonResponse + { + return $this->successResponse($mission); + } + + public function update(UpdateRequest $request,Mission $mission): JsonResponse + { + DB::transaction(function () use ($mission, $request) { + $state = MissionStates::REQUEST_CREATED->value; + $mission->update([ + 'state_id' =>$state, + 'state_name' => MissionStates::name($state), + 'requested_machine_type' => $request->requested_machine_type, + 'requested_machine_numbers' => $request->requested_machine_numbers, + 'type' => $request->type, + 'start_date' => $request->start_date, + 'end_date' => $request->end_date, + 'request_date' => $request->request_date, + 'description' => $request->description, + 'start_point' => $request->start_point, + 'end_point' => $request->end_point, + ]); + + $mission->rahdaran()->sync($request->rahdaran); + }); + + return $this->successResponse(); + } + + public function destroy(Mission $mission): JsonResponse + { + DB::transaction(function () use ($mission) { + $mission->rahdaran()->detach(); + $mission->delete(); + }); + return $this->successResponse(); + } +} diff --git a/app/Http/Requests/V3/Mission/RequestPortal/StoreRequest.php b/app/Http/Requests/V3/Mission/RequestPortal/StoreRequest.php new file mode 100644 index 00000000..62bd1984 --- /dev/null +++ b/app/Http/Requests/V3/Mission/RequestPortal/StoreRequest.php @@ -0,0 +1,38 @@ +|string> + */ + public function rules(): array + { + return [ + 'rahdaran' => 'required|array', + 'rahdaran.*' => 'exists:rahdaran,id', + 'requested_machine_type' => 'required|string|max:255', + 'requested_machine_numbers'=> 'required|integer|max:255', + 'type' => 'required|string|max:50', + 'start_date' => 'required|date', + 'end_date' => 'required|date', + 'request_date' => 'required|date', + 'description' => 'string', + 'start_point' => 'required|string', + 'end_point' => 'required|string', + ]; + } +} diff --git a/app/Http/Requests/V3/Mission/RequestPortal/UpdateRequest.php b/app/Http/Requests/V3/Mission/RequestPortal/UpdateRequest.php new file mode 100644 index 00000000..4498ea7b --- /dev/null +++ b/app/Http/Requests/V3/Mission/RequestPortal/UpdateRequest.php @@ -0,0 +1,38 @@ +route('mission'))->user_id === auth()->id(); + } + + /** + * Get the validation rules that apply to the request. + * + * @return array|string> + */ + public function rules(): array + { + return [ + 'rahdaran' => 'required|array', + 'rahdaran.*' => 'exists:rahdaran,id', + 'requested_machine_type' => 'required|string|max:255', + 'requested_machine_numbers'=> 'required|integer|max:255', + 'type' => 'required|string|max:50', + 'start_date' => 'required|date', + 'end_date' => 'required|date', + 'request_date' => 'required|date', + 'description' => 'string', + 'start_point' => 'required|string', + 'end_point' => 'required|string', + ]; + } +} diff --git a/app/Services/Cartables/Mission/RequestPortalService.php b/app/Services/Cartables/Mission/RequestPortalService.php new file mode 100644 index 00000000..c1757019 --- /dev/null +++ b/app/Services/Cartables/Mission/RequestPortalService.php @@ -0,0 +1,34 @@ +user(); + $query = Mission::query(); + + if ($user->hasPermissionTo('mission-manage-city')) { + $query->where('edarate_shahri_id', '=', $user->edarate_shahri_id); + } + elseif ($user->hasPermissionTo('mission-manage-province')) { + $query->where('province_id', '=', $user->province_id); + } + return DataTableFacade::run( + $query, + $request, + allowedFilters: ['*'], + allowedSortings: ['*'] + ); + + } +} \ No newline at end of file diff --git a/routes/v3.php b/routes/v3.php index 4de8e0bc..ac3f0b46 100644 --- a/routes/v3.php +++ b/routes/v3.php @@ -7,6 +7,7 @@ use App\Http\Controllers\V3\Dashboard\Azmayesh\AzmayeshController; use App\Http\Controllers\V3\Dashboard\Azmayesh\AzmayeshSampleController; use App\Http\Controllers\V3\Dashboard\Azmayesh\AzmayeshTypeController; use App\Http\Controllers\V3\Dashboard\ItemsManagementController; +use App\Http\Controllers\V3\Dashboard\Mission\RequestPortalController; use App\Http\Controllers\V3\Dashboard\ObservedItemController; use App\Http\Controllers\V3\Dashboard\AccidentReceiptController; use App\Http\Controllers\V3\Dashboard\OtpManagementController; @@ -424,3 +425,13 @@ Route::prefix('road_maintenance_station') Route::post('/{rahdariPoint}', 'update')->name('update')->middleware('permission:edit-tollhouse|edit-tollhouse-province'); Route::delete('/{rahdariPoint}', 'destroy')->name('destroy')->middleware('permission:delete-tollhouse|delete-tollhouse-province'); }); +Route::prefix('missions') + ->name('missions.') + ->controller(RequestPortalController::class) + ->group(function () { + Route::get('/', 'index')->name('index'); + Route::post('/', 'store')->name('store'); + Route::get('/{mission}', 'show')->name('show'); + Route::post('/{mission}', 'update')->name('update'); + Route::delete('/{mission}', 'destroy')->name('destroy'); + });