From 2d671e79b9508c1f8db78ee957d5d407480a1d9e Mon Sep 17 00:00:00 2001 From: amirghasempoor Date: Sat, 31 May 2025 10:54:16 +0330 Subject: [PATCH] refactor road observation --- .../RoadObservationReportController.php | 28 ----- .../OperatorController.php} | 109 +++--------------- .../RoadObservation/ReportController.php | 42 +++++++ .../RoadObservation/SupervisorController.php | 87 ++++++++++++++ .../OperatorService.php} | 60 ++-------- .../RoadObservation/ReportService.php | 53 +++++++++ .../RoadObservation/SupervisorService.php | 47 ++++++++ routes/v3.php | 69 ++++++----- 8 files changed, 292 insertions(+), 203 deletions(-) delete mode 100644 app/Http/Controllers/V3/Dashboard/Reports/RoadObservationReportController.php rename app/Http/Controllers/V3/Dashboard/{RoadObservationController.php => RoadObservation/OperatorController.php} (69%) create mode 100644 app/Http/Controllers/V3/Dashboard/RoadObservation/ReportController.php create mode 100644 app/Http/Controllers/V3/Dashboard/RoadObservation/SupervisorController.php rename app/Services/Cartables/{RoadObservationTableService.php => RoadObservation/OperatorService.php} (65%) create mode 100644 app/Services/Cartables/RoadObservation/ReportService.php create mode 100644 app/Services/Cartables/RoadObservation/SupervisorService.php diff --git a/app/Http/Controllers/V3/Dashboard/Reports/RoadObservationReportController.php b/app/Http/Controllers/V3/Dashboard/Reports/RoadObservationReportController.php deleted file mode 100644 index eb20abf8..00000000 --- a/app/Http/Controllers/V3/Dashboard/Reports/RoadObservationReportController.php +++ /dev/null @@ -1,28 +0,0 @@ -reportIndex($request); - return response()->json($data['data']); - } - - public function excelReport(Request $request, RoadObservationTableService $roadObservationTableService): BinaryFileResponse - { - $name = 'گزارش رسیدگی به شکایات واکنش سریع ' . verta()->now()->format('Y-m-d H:i') . '.xlsx'; - $data = $roadObservationTableService->reportIndex($request); - return Excel::download(new ReportComplaintsExport($data), $name); - } -} diff --git a/app/Http/Controllers/V3/Dashboard/RoadObservationController.php b/app/Http/Controllers/V3/Dashboard/RoadObservation/OperatorController.php similarity index 69% rename from app/Http/Controllers/V3/Dashboard/RoadObservationController.php rename to app/Http/Controllers/V3/Dashboard/RoadObservation/OperatorController.php index 8cdd32c7..6e701d44 100644 --- a/app/Http/Controllers/V3/Dashboard/RoadObservationController.php +++ b/app/Http/Controllers/V3/Dashboard/RoadObservation/OperatorController.php @@ -1,91 +1,54 @@ json($roadObservationTableService->supervisorCartableIndex($request)); + return response()->json($operatorService->cartableIndex($request)); } - public function verifyBySupervisor(VerifyBySupervisorRequest $request, RoadObserved $roadObserved): JsonResponse - { - $statusFa = $request->verify == 1 ? 'تایید شده' : 'عدم تایید'; - - $roadObserved->update([ - 'status' => $request->verify, - 'status_fa' => $statusFa, - 'supervisor_id' => auth()->user()->id, - 'supervisor_name' => auth()->user()->name, - 'supervisor_description' => $request->description, - 'supervising_time' => now(), - ]); - - auth()->user()->addActivityComplete(1138); - - return $this->successResponse(); - } - - public function supervisorCartableReport(Request $request, RoadObservationTableService $roadObservationTableService): BinaryFileResponse - { - $name = 'گزارش از کارتابل ارزیابی واکنش سریع '. verta()->now()->format('Y-m-d H:i') . '.xlsx'; - $data = $roadObservationTableService->supervisorCartableIndex($request); - - return Excel::download(new SupervisorCartableReport($data['data']), $name); - } - - public function operatorIndex(Request $request, RoadObservationTableService $roadObservationTableService): JsonResponse - { - return response()->json($roadObservationTableService->operatorCartableIndex($request)); - } - - public function operatorCartableReport(Request $request, RoadObservationTableService $roadObservationTableService): BinaryFileResponse + public function cartableReport(Request $request, OperatorService $operatorService): BinaryFileResponse { $name = 'گزارش از کارتابل عملیات واکنش سریع ' . verta()->now()->format('Y-m-d H:i') . '.xlsx'; - $data = $roadObservationTableService->operatorCartableIndex($request); + $data = $operatorService->cartableIndex($request); return Excel::download(new OperatorCartableReport($data['data']), $name); } - public function complaintsIndex(Request $request, RoadObservationTableService $roadObservationTableService): JsonResponse + public function complaintsIndex(Request $request, OperatorService $operatorService): JsonResponse { - return response()->json($roadObservationTableService->complaintsIndex($request)); + return response()->json($operatorService->complaintsIndex($request)); } - public function complaintsReport(Request $request, RoadObservationTableService $roadObservationTableService): BinaryFileResponse + public function complaintsReport(Request $request, OperatorService $operatorService): BinaryFileResponse { $name = 'گزارش از رسیدگی به شکایات واکنش سریع ' . verta()->now()->format('Y-m-d H:i') . '.xlsx'; - $data = $roadObservationTableService->complaintsIndex($request); + $data = $operatorService->complaintsIndex($request); return Excel::download(new ComplaintsReport($data['data']), $name); } @@ -144,7 +107,6 @@ class RoadObservationController extends Controller auth()->user()->addActivityComplete(1142); $nikarayanService->updateRoadObservedInfoByNikarayan($request, $roadObserved, json_encode($roadObservedHistoryData['new_files'])); - }); return $this->successResponse(); @@ -262,49 +224,4 @@ class RoadObservationController extends Controller } return $this->successResponse($data); } - - public function restore(RestoreRequest $request, RoadObserved $roadObserved): JsonResponse - { - if ($roadObserved->image_before) { - FileFacade::delete($roadObserved->image_before); - } - - if ($roadObserved->image_after) { - FileFacade::delete($roadObserved->image_after); - } - - $roadObserved->update([ - 'image_before' => null, - 'image_after' => null, - 'rms_last_activity' => null, - 'rms_last_activity_fa' => null, - 'updated_at_fa' => null, - 'updated_at' => null, - 'rms_status' => 0, - 'status' => null, - 'status_fa' => null, - ]); - - RoadObservationHistory::query()->create([ - 'id' => $roadObserved->id, - 'user_id' => auth()->user()->id, - 'action' => 'restore', - 'description' => $request->restore_description, - ]); - - auth()->user()->addActivityComplete(1141); - - return $this->successResponse(); - } - - public function map(Request $request): JsonResponse - { - return response()->json(DataTableFacade::run( - RoadObserved::query(), - $request, - allowedFilters: ['*'], - allowedSortings: ['*'], - allowedSelects: ['id', 'lat', 'lng', 'status'] - )); - } -} +} \ No newline at end of file diff --git a/app/Http/Controllers/V3/Dashboard/RoadObservation/ReportController.php b/app/Http/Controllers/V3/Dashboard/RoadObservation/ReportController.php new file mode 100644 index 00000000..db11136c --- /dev/null +++ b/app/Http/Controllers/V3/Dashboard/RoadObservation/ReportController.php @@ -0,0 +1,42 @@ +index($request); + return response()->json($data['data']); + } + + public function excel(Request $request, ReportService $reportService): BinaryFileResponse + { + $name = 'گزارش رسیدگی به شکایات واکنش سریع ' . verta()->now()->format('Y-m-d H:i') . '.xlsx'; + $data = $reportService->index($request); + return Excel::download(new ReportComplaintsExport($data), $name); + } + + public function map(Request $request): JsonResponse + { + return response()->json(DataTableFacade::run( + RoadObserved::query(), + $request, + allowedFilters: ['*'], + allowedSortings: ['*'], + allowedSelects: ['id', 'lat', 'lng', 'status'] + )); + } +} \ No newline at end of file diff --git a/app/Http/Controllers/V3/Dashboard/RoadObservation/SupervisorController.php b/app/Http/Controllers/V3/Dashboard/RoadObservation/SupervisorController.php new file mode 100644 index 00000000..5af4756c --- /dev/null +++ b/app/Http/Controllers/V3/Dashboard/RoadObservation/SupervisorController.php @@ -0,0 +1,87 @@ +json($supervisorService->index($request)); + } + + public function verify(VerifyBySupervisorRequest $request, RoadObserved $roadObserved): JsonResponse + { + $statusFa = $request->verify == 1 ? 'تایید شده' : 'عدم تایید'; + + $roadObserved->update([ + 'status' => $request->verify, + 'status_fa' => $statusFa, + 'supervisor_id' => auth()->user()->id, + 'supervisor_name' => auth()->user()->name, + 'supervisor_description' => $request->description, + 'supervising_time' => now(), + ]); + + auth()->user()->addActivityComplete(1138); + + return $this->successResponse(); + } + + public function report(Request $request, SupervisorService $supervisorService): BinaryFileResponse + { + $name = 'گزارش از کارتابل ارزیابی واکنش سریع '. verta()->now()->format('Y-m-d H:i') . '.xlsx'; + $data = $supervisorService->index($request); + + return Excel::download(new SupervisorCartableReport($data['data']), $name); + } + + public function restore(RestoreRequest $request, RoadObserved $roadObserved): JsonResponse + { + if ($roadObserved->image_before) { + FileFacade::delete($roadObserved->image_before); + } + + if ($roadObserved->image_after) { + FileFacade::delete($roadObserved->image_after); + } + + $roadObserved->update([ + 'image_before' => null, + 'image_after' => null, + 'rms_last_activity' => null, + 'rms_last_activity_fa' => null, + 'updated_at_fa' => null, + 'updated_at' => null, + 'rms_status' => 0, + 'status' => null, + 'status_fa' => null, + ]); + + RoadObservationHistory::query()->create([ + 'id' => $roadObserved->id, + 'user_id' => auth()->user()->id, + 'action' => 'restore', + 'description' => $request->restore_description, + ]); + + auth()->user()->addActivityComplete(1141); + + return $this->successResponse(); + } +} \ No newline at end of file diff --git a/app/Services/Cartables/RoadObservationTableService.php b/app/Services/Cartables/RoadObservation/OperatorService.php similarity index 65% rename from app/Services/Cartables/RoadObservationTableService.php rename to app/Services/Cartables/RoadObservation/OperatorService.php index 810d4b88..bfec4b3e 100644 --- a/app/Services/Cartables/RoadObservationTableService.php +++ b/app/Services/Cartables/RoadObservation/OperatorService.php @@ -1,54 +1,14 @@ user(); - - $fields = [ - 'fk_RegisteredEventMessage', 'road_observeds.id', 'Title', 'road_observeds.created_at', 'StartTime_DateTime', - 'lat', 'lng', 'FeatureTypeTitle', 'Description', 'MobileForSendEventSms', 'rms_start_latlng', - 'rms_description', 'rms_status', 'rms_last_activity_fa', 'rms_last_activity', 'edarate_shahri_id', - 'road_observeds.province_id', 'province_fa', 'city_id', 'city_fa', 'edarate_shahri.name_fa', - 'status', 'status_fa', 'supervisor_description', 'supervising_time', 'image_after', 'image_before' - ]; - - if ($user->hasPermissionTo('show-fast-react')) { - $query = RoadObserved::query()->leftjoin('edarate_shahri', 'road_observeds.edarate_shahri_id', 'edarate_shahri.id') - ->whereNotNull('road_observeds.status') - ->select($fields); - } - elseif ($user->hasPermissionTo('show-fast-react-province')) - { - if (is_null($user->province_id)) - { - return $this->errorResponse('استانی برای شما در سامانه ثبت نشده است!'); - } - - $query = RoadObserved::query()->leftjoin('edarate_shahri', 'road_observeds.edarate_shahri_id', 'edarate_shahri.id') - ->where('road_observeds.province_id', $user->province_id) - ->whereNotNull('road_observeds.status') - ->select($fields); - } - - return DataTableFacade::run( - $query, - $request, - allowedFilters: ['*'], - allowedSortings: ['*']); - } - - public function operatorCartableIndex(Request $request) + public function cartableIndex(Request $request) { $user = auth()->user(); @@ -60,13 +20,13 @@ class RoadObservationTableService 'edarate_shahri.name_fa', 'status', 'status_fa', 'supervisor_description', 'supervising_time' ]; - $query = RoadObserved::query() - ->where('rms_status', '!=', 0) - ->whereNotNull('road_observeds.province_id') - ->whereNotNull('status') - ->leftJoin('edarate_shahri', 'road_observeds.edarate_shahri_id', '=', 'edarate_shahri.id') - ->where('edarate_shahri_id', $user->edarate_shahri_id) - ->select($fields); + $query = RoadObserved::query() + ->where('rms_status', '!=', 0) + ->whereNotNull('road_observeds.province_id') + ->whereNotNull('status') + ->leftJoin('edarate_shahri', 'road_observeds.edarate_shahri_id', '=', 'edarate_shahri.id') + ->where('edarate_shahri_id', $user->edarate_shahri_id) + ->select($fields); return DataTableFacade::run( $query, diff --git a/app/Services/Cartables/RoadObservation/ReportService.php b/app/Services/Cartables/RoadObservation/ReportService.php new file mode 100644 index 00000000..71d0cd03 --- /dev/null +++ b/app/Services/Cartables/RoadObservation/ReportService.php @@ -0,0 +1,53 @@ +from_date . ' 00:00:00'; + $toDate = $request->date_to . ' 23:59:59'; + + $fields = [ + 'fk_RegisteredEventMessage', + 'road_observeds.id', + 'Title', + 'road_observeds.created_at', + 'lat', + 'lng', + 'FeatureTypeTitle', + 'Description', + 'MobileForSendEventSms', + 'road_observeds.province_id', + 'province_fa', + 'city_fa', + 'edarate_shahri.name_fa', + 'rms_last_activity_fa', + 'rms_description' + ]; + + $query = RoadObserved::leftjoin('edarate_shahri', 'road_observeds.edarate_shahri_id', 'edarate_shahri.id') + ->where('rms_status', "<>", 0) + ->whereNotNull('edarate_shahri_id') + ->whereBetween('road_observeds.created_at', [$fromDate, $toDate]) + ->select($fields); + + $data = DataTableFacade::run( + $query, + $request, + allowedFilters: ['*'], + allowedSortings: ['*'] + ); + + return [ + 'data' => $data, + 'fromDate' => $fromDate, + 'toDate' => $toDate, + ]; + } +} \ No newline at end of file diff --git a/app/Services/Cartables/RoadObservation/SupervisorService.php b/app/Services/Cartables/RoadObservation/SupervisorService.php new file mode 100644 index 00000000..437c0d96 --- /dev/null +++ b/app/Services/Cartables/RoadObservation/SupervisorService.php @@ -0,0 +1,47 @@ +user(); + + $fields = [ + 'fk_RegisteredEventMessage', 'road_observeds.id', 'Title', 'road_observeds.created_at', 'StartTime_DateTime', + 'lat', 'lng', 'FeatureTypeTitle', 'Description', 'MobileForSendEventSms', 'rms_start_latlng', + 'rms_description', 'rms_status', 'rms_last_activity_fa', 'rms_last_activity', 'edarate_shahri_id', + 'road_observeds.province_id', 'province_fa', 'city_id', 'city_fa', 'edarate_shahri.name_fa', + 'status', 'status_fa', 'supervisor_description', 'supervising_time', 'image_after', 'image_before' + ]; + + if ($user->hasPermissionTo('show-fast-react')) { + $query = RoadObserved::query()->leftjoin('edarate_shahri', 'road_observeds.edarate_shahri_id', 'edarate_shahri.id') + ->whereNotNull('road_observeds.status') + ->select($fields); + } + elseif ($user->hasPermissionTo('show-fast-react-province')) + { + if (is_null($user->province_id)) + { + return $this->errorResponse('استانی برای شما در سامانه ثبت نشده است!'); + } + + $query = RoadObserved::query()->leftjoin('edarate_shahri', 'road_observeds.edarate_shahri_id', 'edarate_shahri.id') + ->where('road_observeds.province_id', $user->province_id) + ->whereNotNull('road_observeds.status') + ->select($fields); + } + + return DataTableFacade::run( + $query, + $request, + allowedFilters: ['*'], + allowedSortings: ['*']); + } +} \ No newline at end of file diff --git a/routes/v3.php b/routes/v3.php index 3a49cc51..3d47f03a 100644 --- a/routes/v3.php +++ b/routes/v3.php @@ -19,7 +19,7 @@ use App\Http\Controllers\V3\Dashboard\Reports\RoadItemsReportController; use App\Http\Controllers\V3\Dashboard\Reports\RoadPatrolReportController; use App\Http\Controllers\V3\Dashboard\RoadItemsProjectController; use App\Http\Controllers\V3\Dashboard\RoadMaintenanceStationController; -use App\Http\Controllers\V3\Dashboard\RoadObservationController; +use App\Http\Controllers\V3\Dashboard\RoadObservation\RoadObservationController; use App\Http\Controllers\V3\Dashboard\RoadPatrolProjectController; use App\Http\Controllers\V3\Dashboard\SafetyAndPrivacy\OperatorController; use App\Http\Controllers\V3\Dashboard\SafetyAndPrivacy\OperatorReportController; @@ -292,37 +292,48 @@ Route::prefix('receipt_reports') Route::prefix('road_observations') ->name('roadObservations.') - ->controller(RoadObservationController::class) ->group(function () { - Route::get('/supervisor_index', 'supervisorIndex')->name('supervisorIndex')->middleware('permission:show-fast-react-province|show-fast-react'); - Route::post('/verify/{roadObserved}', 'verifyBySupervisor')->name('verifyBySupervisor'); - Route::get('/supervisor_report', 'supervisorCartableReport')->name('supervisorCartableReport')->middleware('permission:show-fast-react-province|show-fast-react'); - Route::get('/operator_index','operatorIndex')->name('operatorIndex')->middleware('permission:show-fast-react-edarate-shahri'); - Route::get('/operator_report','operatorCartableReport')->name('operatorCartableReport')->middleware('permission:show-fast-react-edarate-shahri'); - Route::get('/complaints_index', 'complaintsIndex') - ->middleware('permission:show-fast-react-edarate-shahri|show-fast-react-province|show-fast-react') - ->name('complaintsIndex'); - Route::get('/complaints_report', 'complaintsReport')->name('complaintsReport') - ->middleware('permission:show-fast-react-edarate-shahri|show-fast-react-province|show-fast-react'); - Route::post('/register/{roadObserved}', 'register') - ->middleware('permission:show-fast-react-edarate-shahri') - ->name('register'); - Route::post('/modify_registration/{roadObserved}', 'modifyRegistration') - ->middleware('permission:show-fast-react-edarate-shahri') - ->name('modifyRegistration'); + Route::controller(\App\Http\Controllers\V3\Dashboard\RoadObservation\OperatorController::class)->get('/{roadObserved}', 'show')->name('show'); + Route::name('operator.') + ->controller(\App\Http\Controllers\V3\Dashboard\RoadObservation\OperatorController::class) + ->group(function () { + Route::get('/cartable','cartableIndex')->name('cartableIndex')->middleware('permission:show-fast-react-edarate-shahri'); + Route::get('/cartable_report','cartableReport')->name('cartableReport')->middleware('permission:show-fast-react-edarate-shahri'); + Route::get('/complaints_index', 'complaintsIndex') + ->middleware('permission:show-fast-react-edarate-shahri|show-fast-react-province|show-fast-react') + ->name('complaintsIndex'); + Route::get('/complaints_report', 'complaintsReport')->name('complaintsReport') + ->middleware('permission:show-fast-react-edarate-shahri|show-fast-react-province|show-fast-react'); + Route::post('/register/{roadObserved}', 'register') + ->middleware('permission:show-fast-react-edarate-shahri') + ->name('register'); + Route::post('/modify_registration/{roadObserved}', 'modifyRegistration') + ->middleware('permission:show-fast-react-edarate-shahri') + ->name('modifyRegistration'); + Route::post('/refer/{roadObserved}', 'refer') + ->middleware('permission:show-fast-react-edarate-shahri|show-fast-react-province|show-fast-react') + ->name('refer'); + Route::get('/refer_list/{roadObserved}', 'referList') + ->middleware('permission:show-fast-react-edarate-shahri|show-fast-react-province|show-fast-react') + ->name('referList'); + }); - Route::get('/{roadObserved}', 'show')->name('show'); - Route::post('/refer/{roadObserved}', 'refer') - ->middleware('permission:show-fast-react-edarate-shahri|show-fast-react-province|show-fast-react') - ->name('refer'); + Route::name('supervisor.') + ->controller(\App\Http\Controllers\V3\Dashboard\RoadObservation\SupervisorController::class) + ->group(function () { + Route::get('/index', 'index')->name('index')->middleware('permission:show-fast-react-province|show-fast-react'); + Route::post('/verify/{roadObserved}', 'verify')->name('verify'); + Route::get('/report', 'report')->name('report')->middleware('permission:show-fast-react-province|show-fast-react'); + Route::post('/restore/{roadObserved}', 'restore')->middleware('permission:restore-fast-react')->name('restore'); + }); - Route::get('/refer_list/{roadObserved}', 'referList') - ->middleware('permission:show-fast-react-edarate-shahri|show-fast-react-province|show-fast-react') - ->name('referList'); - - Route::post('/restore/{roadObserved}', 'restore') - ->middleware('permission:restore-fast-react') - ->name('restore'); + Route::name('report.') + ->controller(\App\Http\Controllers\V3\Dashboard\RoadObservation\ReportController::class) + ->group(function () { + Route::get('/index', 'index')->name('index')->middleware('permission:show-fast-react-province|show-fast-react'); + Route::get('/excel', 'excel')->name('excel')->middleware('permission:show-fast-react-province|show-fast-react'); + Route::get('/map', 'map')->name('map'); + }); }); Route::prefix('log_list')