From 8abfd32be8885240387c6006715b9ff023a0f75d Mon Sep 17 00:00:00 2001 From: amirghasempoor Date: Mon, 22 Dec 2025 09:53:02 +0330 Subject: [PATCH] add station layer --- app/Enums/FMSResultCode.php | 2 +- .../Mission/RequestPortalController.php | 24 ++++++++------ .../Mission/ViolationManagementController.php | 10 +++--- .../RequestPortal/NoProcessRequest.php | 6 ++-- .../Mission/RequestPortal/UpdateRequest.php | 2 +- .../Cartables/Mission/ControlUnitService.php | 18 ++++++++--- .../Mission/RequestPortalService.php | 7 +++-- .../Mission/TransportationUnitService.php | 16 ++++++++-- ...22_090308_add_column_to_missions_table.php | 31 +++++++++++++++++++ ...12_22_090921_add_column_to_users_table.php | 28 +++++++++++++++++ routes/v3.php | 6 ++-- 11 files changed, 118 insertions(+), 32 deletions(-) create mode 100644 database/migrations/2025_12_22_090308_add_column_to_missions_table.php create mode 100644 database/migrations/2025_12_22_090921_add_column_to_users_table.php diff --git a/app/Enums/FMSResultCode.php b/app/Enums/FMSResultCode.php index 810d1db5..55f77426 100644 --- a/app/Enums/FMSResultCode.php +++ b/app/Enums/FMSResultCode.php @@ -18,7 +18,7 @@ enum FMSResultCode: string "-1" => "نام ﮐﺎرﺑﺮي ﯾﺎ ﮐﻠﻤﻪ ﻋﺒﻮر ﺻﺤﯿﺢ ﻧﯿﺴﺖ.", "-2" => "خودرو با کد مورد نظر وجود ندارد یا دستگاه ردیاب به آن متصل نیست.", "-3" => "کاربر به خودرو مورد نظر دسترسی ندارد.", - "-4" => "ﺗﻌﺪاد دﻓﻌﺎت ﺟﺮاي ﺗﺎﺑﻊ ﺑﯿﺶ از ﺣﺪ ﻣﺠﺎز اﺳﺖ(اﯾﻦ ﺳﺮوﯾﺲ را در ﻫﺮ ثاﻧﯿﻪ ﻓﻘﻂ ﯾﮏ ﺑﺎر ﻣﯽﺗﻮان اﺟﺮاﮐﺮد)", + "-4" => "ﺗﻌﺪاد دﻓﻌﺎت اﺟﺮاي ﺗﺎﺑﻊ ﺑﯿﺶ از ﺣﺪ ﻣﺠﺎز اﺳﺖ(اﯾﻦ ﺳﺮوﯾﺲ را در ﻫﺮ ثاﻧﯿﻪ ﻓﻘﻂ ﯾﮏ ﺑﺎر ﻣﯽﺗﻮان اﺟﺮاﮐﺮد)", "-5" => "پارامتر های داده شده صحیح نیستند", ]; diff --git a/app/Http/Controllers/V3/Dashboard/Mission/RequestPortalController.php b/app/Http/Controllers/V3/Dashboard/Mission/RequestPortalController.php index 007195a9..55e61d0f 100644 --- a/app/Http/Controllers/V3/Dashboard/Mission/RequestPortalController.php +++ b/app/Http/Controllers/V3/Dashboard/Mission/RequestPortalController.php @@ -69,6 +69,7 @@ class RequestPortalController extends Controller 'category_name' => MissionCategory::name($category), 'explanation' => $request->explanation, 'code' => rand(100000, 999999), + 'station_id' => $user->station_id ]); $mission->rahdaran()->sync($request->rahdaran); @@ -108,10 +109,10 @@ class RequestPortalController extends Controller 'fms_result_message' => FMSResultCode::name($responseData['resultCode']), ]); - if ($mission->category_id == 2) { - $rpc = new OperatorController; - $rpc->store($mission); - } +// if ($mission->category_id == 2) { +// $rpc = new OperatorController; +// $rpc->store($mission); +// } $state = MissionStates::START_MISSION->value; $category = $request->category_id; @@ -142,6 +143,7 @@ class RequestPortalController extends Controller 'start_time' => now(), 'machine_id' => $machine->id, 'machine_code' => $machine->machine_code, + 'station_id' => $user->station_id ]); $newMission->rahdaran()->sync($request->rahdaran); @@ -207,6 +209,7 @@ class RequestPortalController extends Controller $user = auth()->user(); $zone = $request->zone; $state = MissionStates::END_MISSION->value; + $machine = CMMSMachine::query()->where('id', '=', $request->machine_id)->first(['id', 'machine_code']); $mission = Mission::query()->create([ 'user_id' => $user->id, @@ -222,7 +225,6 @@ class RequestPortalController extends Controller '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, @@ -231,16 +233,18 @@ class RequestPortalController extends Controller 'state_name' => MissionStates::name($state), 'explanation' => $request->explanation, 'request_date' => now(), + 'machine_id' => $machine->id, + 'machine_code' => $machine->machine_code, + 'station_id' => $user->station_id ]); $mission->rahdaran()->sync($request->rahdaran); - $mission->machines()->attach($request->machines); $mission->rahdaran()->attach($request->driver, ['is_driver' => true]); - if ($mission->category_id == 2) { - $rpc = new OperatorController; - $rpc->store($mission); - } +// if ($mission->category_id == 2) { +// $rpc = new OperatorController; +// $rpc->store($mission); +// } }); return $this->successResponse(); diff --git a/app/Http/Controllers/V3/Dashboard/Mission/ViolationManagementController.php b/app/Http/Controllers/V3/Dashboard/Mission/ViolationManagementController.php index d4b49d7b..1abdf927 100644 --- a/app/Http/Controllers/V3/Dashboard/Mission/ViolationManagementController.php +++ b/app/Http/Controllers/V3/Dashboard/Mission/ViolationManagementController.php @@ -60,7 +60,6 @@ class ViolationManagementController extends Controller '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,// @@ -71,6 +70,7 @@ class ViolationManagementController extends Controller 'request_date' => now(), 'machine_id' => $machine->id,// 'machine_code' => $machine->machine_code,// + 'station_id' => $user->station_id ]); $mission->rahdaran()->sync($request->rahdaran); @@ -78,10 +78,10 @@ class ViolationManagementController extends Controller $violation->update(['status' => 1]); - if ($mission->category_id == 2) { - $rpc = new OperatorController; - $rpc->store($mission); - } +// if ($mission->category_id == 2) { +// $rpc = new OperatorController; +// $rpc->store($mission); +// } }); return $this->successResponse(); diff --git a/app/Http/Requests/V3/Mission/RequestPortal/NoProcessRequest.php b/app/Http/Requests/V3/Mission/RequestPortal/NoProcessRequest.php index 5437dca1..6017d6fd 100644 --- a/app/Http/Requests/V3/Mission/RequestPortal/NoProcessRequest.php +++ b/app/Http/Requests/V3/Mission/RequestPortal/NoProcessRequest.php @@ -30,9 +30,9 @@ class NoProcessRequest extends FormRequest 'start_date' => 'required|date', 'end_date' => 'required|date|after:start_date|before:now', 'end_point' => 'required|string', - 'area' => 'required|array', - 'area.type' => 'required|string', - 'area.coordinates' => 'required|array', +// 'area' => 'required|array', +// 'area.type' => 'required|string', +// 'area.coordinates' => 'required|array', 'category_id' => 'required|in:1,2,3', 'explanation' => 'required|string', ]; diff --git a/app/Http/Requests/V3/Mission/RequestPortal/UpdateRequest.php b/app/Http/Requests/V3/Mission/RequestPortal/UpdateRequest.php index d9764a7d..fb80a7f6 100644 --- a/app/Http/Requests/V3/Mission/RequestPortal/UpdateRequest.php +++ b/app/Http/Requests/V3/Mission/RequestPortal/UpdateRequest.php @@ -26,7 +26,7 @@ class UpdateRequest extends FormRequest public function rules(): array { return [ - 'rahdaran' => 'required|array', + 'rahdaran' => 'array', 'rahdaran.*' => 'exists:rahdaran,id', 'requested_machines' => 'required|array', 'type' => 'required|in:1,2', diff --git a/app/Services/Cartables/Mission/ControlUnitService.php b/app/Services/Cartables/Mission/ControlUnitService.php index aa559a65..df6c06c8 100644 --- a/app/Services/Cartables/Mission/ControlUnitService.php +++ b/app/Services/Cartables/Mission/ControlUnitService.php @@ -16,11 +16,21 @@ class ControlUnitService public function dataTable(Request $request) { - $query = Mission::query() - ->whereIn('state_id', [ + $user = Auth::user(); + + $query = Mission::query()->whereIn('state_id', [ MissionStates::PENDING_CONFIRMATION->value, MissionStates::START_MISSION->value - ]) - ->where('edare_shahri_id', '=', Auth::user()->edarate_shahri_id); + ]); + + if ($user->hasPermissionTo('manage-control-unit-station')) { + $query->where('station_id', '=', $user->station_id); + } + elseif ($user->hasPermissionTo('manage-control-unit-city')) { + $query->where('city_id', '=', $user->city_id); + } + elseif ($user->hasPermissionTo('manage-control-unit-province')) { + $query->where('province_id', '=', $user->province_id); + } return DataTableFacade::run( $query, diff --git a/app/Services/Cartables/Mission/RequestPortalService.php b/app/Services/Cartables/Mission/RequestPortalService.php index ca765a5e..354a1cb6 100644 --- a/app/Services/Cartables/Mission/RequestPortalService.php +++ b/app/Services/Cartables/Mission/RequestPortalService.php @@ -17,8 +17,11 @@ class RequestPortalService $user = auth()->user(); $query = Mission::query(); - if ($user->hasPermissionTo('manage-request-portal-city')) { - $query->where('edare_shahri_id', '=', $user->edarate_shahri_id); + if ($user->hasPermissionTo('manage-request-portal-station')) { + $query->where('station_id', '=', $user->station_id); + } + elseif ($user->hasPermissionTo('manage-request-portal-city')) { + $query->where('city_id', '=', $user->city_id); } elseif ($user->hasPermissionTo('manage-request-portal-province')) { $query->where('province_id', '=', $user->province_id); diff --git a/app/Services/Cartables/Mission/TransportationUnitService.php b/app/Services/Cartables/Mission/TransportationUnitService.php index be19780d..a33e5d01 100644 --- a/app/Services/Cartables/Mission/TransportationUnitService.php +++ b/app/Services/Cartables/Mission/TransportationUnitService.php @@ -12,9 +12,19 @@ class TransportationUnitService { public function dataTable(Request $request) { - $query = Mission::query() - ->whereIn('state_id', [MissionStates::REQUEST_CREATED->value, MissionStates::PENDING_CONFIRMATION->value]) - ->where('edare_shahri_id', '=', Auth::user()->edarate_shahri_id); + $user = Auth::user(); + + $query = Mission::query()->whereIn('state_id', [MissionStates::REQUEST_CREATED->value, MissionStates::PENDING_CONFIRMATION->value]); + + if ($user->hasPermissionTo('manage-transportation-unit-station')) { + $query->where('station_id', '=', $user->station_id); + } + elseif ($user->hasPermissionTo('manage-transportation-unit-city')) { + $query->where('city_id', '=', $user->city_id); + } + elseif ($user->hasPermissionTo('manage-transportation-unit-province')) { + $query->where('province_id', '=', $user->province_id); + } return DataTableFacade::run( $query, diff --git a/database/migrations/2025_12_22_090308_add_column_to_missions_table.php b/database/migrations/2025_12_22_090308_add_column_to_missions_table.php new file mode 100644 index 00000000..df9bc42b --- /dev/null +++ b/database/migrations/2025_12_22_090308_add_column_to_missions_table.php @@ -0,0 +1,31 @@ +unsignedSmallInteger('station_id')->nullable(); + $table->unsignedSmallInteger('city_id')->nullable(); + $table->string('station_name')->nullable(); + $table->string('city_name')->nullable(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::table('missions', function (Blueprint $table) { + $table->dropColumn(['station_id', 'city_id', 'station_name', 'city_name']); + }); + } +}; diff --git a/database/migrations/2025_12_22_090921_add_column_to_users_table.php b/database/migrations/2025_12_22_090921_add_column_to_users_table.php new file mode 100644 index 00000000..1a1388d6 --- /dev/null +++ b/database/migrations/2025_12_22_090921_add_column_to_users_table.php @@ -0,0 +1,28 @@ +unsignedSmallInteger('station_id')->nullable(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::table('users', function (Blueprint $table) { + $table->dropColumn('station_id'); + }); + } +}; diff --git a/routes/v3.php b/routes/v3.php index 2b3774a5..f569eb6e 100644 --- a/routes/v3.php +++ b/routes/v3.php @@ -484,7 +484,7 @@ Route::prefix('missions') ->group(function () { Route::name('requestPortal.') ->prefix('request_portal') - ->middleware('permission:manage-request-portal-city|manage-request-portal-province|manage-request-portal-country') + ->middleware('permission:manage-request-portal-city|manage-request-portal-province|manage-request-portal-country|manage-request-portal-station') ->controller(RequestPortalController::class) ->group(function () { Route::get('/', 'index')->name('index'); @@ -497,7 +497,7 @@ Route::prefix('missions') }); Route::name('transportationUnit.') ->prefix('transportation_unit') - ->middleware('permission:manage-transportation-unit') + ->middleware('permission:manage-transportation-unit-city|manage-transportation-unit-province|manage-transportation-unit-country|manage-transportation-unit-station') ->controller(TransportationUnitController::class) ->group(function () { Route::get('/', 'index')->name('index'); @@ -507,7 +507,7 @@ Route::prefix('missions') }); Route::name('controlUnit.') ->prefix('control_unit') - ->middleware('permission:manage-control-unit') + ->middleware('permission:manage-control-unit-city|manage-control-unit-province|manage-control-unit-country|manage-control-unit-station') ->controller(ControlUnitController::class) ->group(function () { Route::get('/', 'index')->name('index');