From 080f0e2212186f19509c3fbe1fe2beac7b3ae0c9 Mon Sep 17 00:00:00 2001 From: joddyabott Date: Sun, 23 Feb 2025 15:33:18 +0330 Subject: [PATCH 01/14] update versionv2-v3for road observation --- .../SupervisorCartableReport.php | 67 +++++++++++++++++++ .../Dashboard/RoadObservationController.php | 56 ++++++++++++++++ .../VerifyBySupervisorRequest.php | 28 ++++++++ .../Cartables/RoadObservationTableService.php | 28 ++++++++ routes/v3.php | 11 +++ 5 files changed, 190 insertions(+) create mode 100644 app/Exports/V3/RoadObservation/SupervisorCartableReport.php create mode 100644 app/Http/Controllers/V3/Dashboard/RoadObservationController.php create mode 100644 app/Http/Requests/V3/RoadObservation/VerifyBySupervisorRequest.php create mode 100644 app/Services/Cartables/RoadObservationTableService.php diff --git a/app/Exports/V3/RoadObservation/SupervisorCartableReport.php b/app/Exports/V3/RoadObservation/SupervisorCartableReport.php new file mode 100644 index 00000000..224be733 --- /dev/null +++ b/app/Exports/V3/RoadObservation/SupervisorCartableReport.php @@ -0,0 +1,67 @@ + $this->data, + ]); + } + + public function registerEvents(): array + { + return [ + AfterSheet::class => function (AfterSheet $event) { + $event->sheet->getDelegate()->setRightToLeft(true); + $event->sheet->getDelegate()->getStyle('A:U')->getFont()->setName('Arial'); + $event->sheet->getDelegate()->getStyle('A:U') + ->getAlignment() + ->setHorizontal(Alignment::HORIZONTAL_CENTER); + + $event->sheet->getDelegate()->getStyle('A:U') + ->getAlignment() + ->setVertical(Alignment::VERTICAL_CENTER); + } + ]; + } + + public function drawings(): array + { + $drawing = new Drawing(); + $drawing->setName('Logo'); + $drawing->setDescription('This is my logo'); + $drawing->setPath(public_path('/dist/logo.png')); + $drawing->setWidth(50); + $drawing->setHeight(50); + $drawing->setOffsetX(5); + $drawing->setOffsetY(5); + $drawing->setCoordinates('A1'); + + $drawing2 = new Drawing(); + $drawing2->setName('Logo'); + $drawing2->setDescription('This is my logo'); + $drawing2->setPath(public_path('/dist/141icon.png')); + $drawing2->setWidth(50); + $drawing2->setHeight(50); + $drawing2->setOffsetX(5); + $drawing2->setOffsetY(5); + $drawing2->setCoordinates('q1'); + return [$drawing, $drawing2]; + } +} diff --git a/app/Http/Controllers/V3/Dashboard/RoadObservationController.php b/app/Http/Controllers/V3/Dashboard/RoadObservationController.php new file mode 100644 index 00000000..beb8bb69 --- /dev/null +++ b/app/Http/Controllers/V3/Dashboard/RoadObservationController.php @@ -0,0 +1,56 @@ + supervisorCartableIndex($request); + foreach ($data['data'] as &$roadItem) { + $roadItem['can_supervise'] = Gate::allows('gate-supervise-road-item', $roadItem) ? 1 : 0; + } + + return response()->json($data); + } + + public function verifyBySupervisor(VerifyBySupervisorRequest $request, RoadObserved $roadObserved): JsonResponse + { + $statusFa = $request->verify == 1 ? 'تایید شده' : 'عدم تایید'; + + $roadObserved->update([ + 'status' => $request->verify, + 'status_fa' => $statusFa, + 'supervisor_id' => Auth::id(), + 'supervisor_name' => Auth::user()->name, + 'supervisor_description' => $request->description, + 'supervising_time' => now(), + ]); + + Auth::user()->addActivityComplete(1138); + + return response()->json(['status' => 'succeed']); + } + + + public function supervisorCartableReport (Request $request, RoadObservationTableService $roadObservationTableService): BinaryFileResponse + + { + $name = 'گزارش از کارتابل ارزیابی واکنش سریع '. verta()->now()->format('Y-m-d') . '.xlsx'; + $data = $roadObservationTableService->supervisorCartableIndex($request, true); + + return Excel::download(new SupervisorCartableReport($data['data']), $name); +} + +} diff --git a/app/Http/Requests/V3/RoadObservation/VerifyBySupervisorRequest.php b/app/Http/Requests/V3/RoadObservation/VerifyBySupervisorRequest.php new file mode 100644 index 00000000..32d4b335 --- /dev/null +++ b/app/Http/Requests/V3/RoadObservation/VerifyBySupervisorRequest.php @@ -0,0 +1,28 @@ +|string> + */ + public function rules(): array + {return [ + 'verify' => ['required', 'in:1,2'], + 'description' => ['nullable', 'string'], + ]; + } +} diff --git a/app/Services/Cartables/RoadObservationTableService.php b/app/Services/Cartables/RoadObservationTableService.php new file mode 100644 index 00000000..035e6445 --- /dev/null +++ b/app/Services/Cartables/RoadObservationTableService.php @@ -0,0 +1,28 @@ +user(); + + if ($user->hasPermissionTo('supervise-fast-react')) { + $query = RoadObserved::query(); + } + elseif ($user->hasPermissionTo('supervise-fast-react-province') && $user->province_id) { + $query = RoadObserved::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 584c6178..7c618393 100644 --- a/routes/v3.php +++ b/routes/v3.php @@ -12,6 +12,7 @@ use App\Http\Controllers\V3\Dashboard\AccidentReceiptController; 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\RoadObservationController; use App\Http\Controllers\V3\Dashboard\RoadPatrolProjectController; use App\Http\Controllers\V3\FMSVehicleManagementController; use App\Http\Controllers\V3\Harim\DivarkeshiController; @@ -265,3 +266,13 @@ Route::prefix('receipt_reports') Route::get('/province_excel_report', 'provinceExcelReport')->name('provinceExcelReport'); Route::get('/city_excel_report', 'cityExcelReport')->name('cityExcelReport'); }); + +Route::prefix('road_observations') + ->name('roadObservations.') + ->middleware('permission:manage-road-observation') + ->controller(RoadObservationController::class) + ->group(function () { + Route::get('/', 'supervisorIndex')->name('index'); + Route::post('/verify/{road_observed}', 'verifyBySupervisor')->name('verifyBySupervisor'); + Route::get('/report', 'supervisorReport')->name('report'); + }); From d9d51c63c68a6c780ea11f22da0540d15ae8a728 Mon Sep 17 00:00:00 2001 From: joddyabott Date: Mon, 24 Feb 2025 11:12:54 +0330 Subject: [PATCH 02/14] fix and update v2 for operator --- .../OperatorCartableReport.php | 70 ++++++++++++++++++ .../Dashboard/RoadObservationController.php | 56 +++++++++------ .../VerifyBySupervisorRequest.php | 5 +- .../Cartables/RoadObservationTableService.php | 71 +++++++++++++++++-- routes/v3.php | 9 +-- 5 files changed, 180 insertions(+), 31 deletions(-) create mode 100644 app/Exports/V3/RoadObservation/OperatorCartableReport.php diff --git a/app/Exports/V3/RoadObservation/OperatorCartableReport.php b/app/Exports/V3/RoadObservation/OperatorCartableReport.php new file mode 100644 index 00000000..18e0ef18 --- /dev/null +++ b/app/Exports/V3/RoadObservation/OperatorCartableReport.php @@ -0,0 +1,70 @@ + $this->data, + ]); + + } + public function registerEvents(): array + { + return [ + AfterSheet::class => function (AfterSheet $event) { + $event->sheet->getDelegate()->setRightToLeft(true); + $event->sheet->getDelegate()->getStyle('A:U')->getFont()->setName('Arial'); + $event->sheet->getDelegate()->getStyle('A:U') + ->getAlignment() + ->setHorizontal(Alignment::HORIZONTAL_CENTER); + + $event->sheet->getDelegate()->getStyle('A:U') + ->getAlignment() + ->setVertical(Alignment::VERTICAL_CENTER); + } + ]; + } + + public function drawings(): array + { + $drawing = new Drawing(); + $drawing->setName('Logo'); + $drawing->setDescription('This is my logo'); + $drawing->setPath(public_path('/dist/logo.png')); + $drawing->setWidth(50); + $drawing->setHeight(50); + $drawing->setOffsetX(5); + $drawing->setOffsetY(5); + $drawing->setCoordinates('A1'); + + $drawing2 = new Drawing(); + $drawing2->setName('Logo'); + $drawing2->setDescription('This is my logo'); + $drawing2->setPath(public_path('/dist/141icon.png')); + $drawing2->setWidth(50); + $drawing2->setHeight(50); + $drawing2->setOffsetX(5); + $drawing2->setOffsetY(5); + $drawing2->setCoordinates('q1'); + return [$drawing, $drawing2]; + } + +} diff --git a/app/Http/Controllers/V3/Dashboard/RoadObservationController.php b/app/Http/Controllers/V3/Dashboard/RoadObservationController.php index beb8bb69..bdc10f8c 100644 --- a/app/Http/Controllers/V3/Dashboard/RoadObservationController.php +++ b/app/Http/Controllers/V3/Dashboard/RoadObservationController.php @@ -1,9 +1,11 @@ supervisorCartableIndex($request); - foreach ($data['data'] as &$roadItem) { - $roadItem['can_supervise'] = Gate::allows('gate-supervise-road-item', $roadItem) ? 1 : 0; - } - return response()->json($data); } - public function verifyBySupervisor(VerifyBySupervisorRequest $request, RoadObserved $roadObserved): JsonResponse + public function verifybysupervisor (VerifyBySupervisorRequest $request, RoadObserved $roadObserved): JsonResponse { $statusFa = $request->verify == 1 ? 'تایید شده' : 'عدم تایید'; $roadObserved->update([ - 'status' => $request->verify, - 'status_fa' => $statusFa, - 'supervisor_id' => Auth::id(), - 'supervisor_name' => Auth::user()->name, - 'supervisor_description' => $request->description, - 'supervising_time' => now(), - ]); + '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); + auth()->user()->addActivityComplete(1138); + + return $this->successResponse(['status' => 'succeed']); - return response()->json(['status' => 'succeed']); } - - public function supervisorCartableReport (Request $request, RoadObservationTableService $roadObservationTableService): BinaryFileResponse + public function supervisorcartablereport (Request $request, RoadObservationTableService $roadObservationTableService): BinaryFileResponse { - $name = 'گزارش از کارتابل ارزیابی واکنش سریع '. verta()->now()->format('Y-m-d') . '.xlsx'; + $name = 'گزارش از کارتابل ارزیابی واکنش سریع '. verta()->now()->format('Y-m-d H:i') . '.xlsx'; $data = $roadObservationTableService->supervisorCartableIndex($request, true); - return Excel::download(new SupervisorCartableReport($data['data']), $name); -} + return Excel::download(new SupervisorCartableReport($data), $name); + } + + public function operatorindex(Request $request, RoadObservationTableService $roadObservationTableService): JsonResponse + { + $data = $roadObservationTableService->operatorCartableIndex($request); + return response()->json($data); + } + + public function operatorcartablereport(Request $request, RoadObservationTableService $roadObservationTableService): BinaryFileResponse + { + $name = 'گزارش از کارتابل ارزیابی واکنش سریع ' . verta()->now()->format('Y-m-d H:i') . '.xlsx'; + $data = $roadObservationTableService->operatorCartableIndex($request); + return Excel::download(new OperatorCartableReport($data), $name); + } } + diff --git a/app/Http/Requests/V3/RoadObservation/VerifyBySupervisorRequest.php b/app/Http/Requests/V3/RoadObservation/VerifyBySupervisorRequest.php index 32d4b335..e2154f30 100644 --- a/app/Http/Requests/V3/RoadObservation/VerifyBySupervisorRequest.php +++ b/app/Http/Requests/V3/RoadObservation/VerifyBySupervisorRequest.php @@ -3,6 +3,7 @@ namespace App\Http\Requests\V3\RoadObservation; use Illuminate\Foundation\Http\FormRequest; +use Illuminate\Support\Facades\Gate; class VerifyBySupervisorRequest extends FormRequest { @@ -11,7 +12,7 @@ class VerifyBySupervisorRequest extends FormRequest */ public function authorize(): bool { - return true; + return Gate::allows('gate-supervise-road-observed'); } /** @@ -22,7 +23,7 @@ class VerifyBySupervisorRequest extends FormRequest public function rules(): array {return [ 'verify' => ['required', 'in:1,2'], - 'description' => ['nullable', 'string'], + 'description' => ['string'], ]; } } diff --git a/app/Services/Cartables/RoadObservationTableService.php b/app/Services/Cartables/RoadObservationTableService.php index 035e6445..9b8bbafd 100644 --- a/app/Services/Cartables/RoadObservationTableService.php +++ b/app/Services/Cartables/RoadObservationTableService.php @@ -3,20 +3,83 @@ namespace App\Services\Cartables; use App\Facades\DataTable\DataTableFacade; +use App\Http\Traits\ApiResponse; use App\Models\RoadObserved; use Illuminate\Http\Request; +use Illuminate\Support\Facades\DB; class RoadObservationTableService { - public function supervisorCartableIndex(Request $request, $loadRelations = false) + use ApiResponse; + public function supervisorCartableIndex(Request $request) { $user = auth()->user(); + $fields = [ + 'fk_RegisteredEventMessage', 'road_observeds.id', 'Title', 'road_observeds.created_at', + 'lat', 'lng', 'FeatureTypeTitle', 'Description', 'MobileForSendEventSms', + 'rms_description', 'rms_status', 'rms_last_activity_fa', 'rms_last_activity', + 'road_observeds.province_id', 'province_fa', 'city_fa', 'edarate_shahri.name_fa', + 'status', 'status_fa', 'supervisor_description', 'supervising_time' + ]; + + if ($user->hasPermissionTo('supervise-fast-react')) { - $query = RoadObserved::query(); + $query = RoadObserved::query()->leftjoin('edarate_shahri', 'road_observeds.edarate_shahri_id', 'edarate_shahri.id') + ->whereNotNull('road_observeds.status'); } - elseif ($user->hasPermissionTo('supervise-fast-react-province') && $user->province_id) { - $query = RoadObserved::where('province_id', $user->province_id); + elseif ($user->hasPermissionTo('supervise-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'); + } + + return DataTableFacade::run( + $query, + $request, + allowedFilters: ['*'], + allowedSortings: ['*']); + } + + public function operatorCartableIndex(Request $request) + { + $user = auth()->user(); + + $fields = [ + 'fk_RegisteredEventMessage', 'road_observeds.id', 'Title', 'road_observeds.created_at', + 'lat', 'lng', 'FeatureTypeTitle', 'Description', 'MobileForSendEventSms', + 'rms_description', 'rms_status', 'rms_start_latlng', 'rms_last_activity_fa', + 'rms_last_activity', 'road_observeds.province_id', 'province_fa', 'city_fa', + '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') + ->select($fields) + ->addSelect([ + DB::raw("CONCAT('https://rms.rmto.ir/', image_before) as image_before"), + DB::raw("CONCAT('https://rms.rmto.ir/', image_after) as image_after") + ]); + + if ($user->hasPermissionTo('show-fast-react-province')) { + if (is_null($user->province_id)) { + return $this->errorResponse('استانی برای شما در سامانه ثبت نشده است!'); + } + $query->where('rms_province_id', $user->province_id); + } elseif ($user->hasPermissionTo('show-fast-react-edarate-shahri')) { + if (is_null($user->edarate_shahri_id)) { + return $this->errorResponse('اداره‌ای برای شما در سامانه ثبت نشده است!'); + } + $query->where('edarate_shahri_id', $user->edarate_shahri_id); } return DataTableFacade::run( diff --git a/routes/v3.php b/routes/v3.php index 7c618393..22ec9951 100644 --- a/routes/v3.php +++ b/routes/v3.php @@ -269,10 +269,11 @@ Route::prefix('receipt_reports') Route::prefix('road_observations') ->name('roadObservations.') - ->middleware('permission:manage-road-observation') ->controller(RoadObservationController::class) ->group(function () { - Route::get('/', 'supervisorIndex')->name('index'); - Route::post('/verify/{road_observed}', 'verifyBySupervisor')->name('verifyBySupervisor'); - Route::get('/report', 'supervisorReport')->name('report'); + Route::get('/supervisor_index', 'supervisorindex')->name('supervisorIndex')->middleware('supervise-fast-react-province','supervise-fast-react'); + Route::post('/verify/{road_observed}', 'verifybysupervisor')->name('verifyBySupervisor'); + Route::get('/supervisor_report', 'supervisorcartablereport')->name('report'); + Route::get('/operator_index','operatorIndex')->name('operatorIndex')->middleware('show-fast-react','show-fast-react-province'); + Route::get('/operator_report', 'operatorcartablereport')->name('operatorExcelReport'); }); From 19dd88cd25093ffca87fe67de7bf2fe594eaec38 Mon Sep 17 00:00:00 2001 From: joddyabott Date: Mon, 24 Feb 2025 11:26:53 +0330 Subject: [PATCH 03/14] debug my code --- .../Dashboard/RoadObservationController.php | 20 +++++++++---------- routes/v3.php | 10 +++++----- 2 files changed, 14 insertions(+), 16 deletions(-) diff --git a/app/Http/Controllers/V3/Dashboard/RoadObservationController.php b/app/Http/Controllers/V3/Dashboard/RoadObservationController.php index bdc10f8c..1000a9ce 100644 --- a/app/Http/Controllers/V3/Dashboard/RoadObservationController.php +++ b/app/Http/Controllers/V3/Dashboard/RoadObservationController.php @@ -10,22 +10,20 @@ use App\Models\RoadObserved; use Illuminate\Http\JsonResponse; use Illuminate\Http\Request; use App\Services\Cartables\RoadObservationTableservice; -use Illuminate\Support\Facades\Auth; use Maatwebsite\Excel\Facades\Excel; -use Illuminate\Support\Facades\Gate; use Symfony\Component\HttpFoundation\BinaryFileResponse; class RoadObservationController extends Controller { use ApiResponse; - public function supervisorindex (Request $request,RoadObservationTableservice $roadObservationTableservice ): JsonResponse + public function supervisorIndex (Request $request,RoadObservationTableservice $roadObservationTableservice ): JsonResponse { - $data = $roadObservationTableservice-> supervisorCartableIndex($request); + $data = $roadObservationTableservice->supervisorCartableIndex($request); return response()->json($data); } - public function verifybysupervisor (VerifyBySupervisorRequest $request, RoadObserved $roadObserved): JsonResponse + public function verifyBySupervisor (VerifyBySupervisorRequest $request, RoadObserved $roadObserved): JsonResponse { $statusFa = $request->verify == 1 ? 'تایید شده' : 'عدم تایید'; @@ -40,30 +38,30 @@ class RoadObservationController extends Controller auth()->user()->addActivityComplete(1138); - return $this->successResponse(['status' => 'succeed']); + return $this->successResponse(); } - public function supervisorcartablereport (Request $request, RoadObservationTableService $roadObservationTableService): BinaryFileResponse + public function supervisorCartableReport (Request $request, RoadObservationTableService $roadObservationTableService): BinaryFileResponse { $name = 'گزارش از کارتابل ارزیابی واکنش سریع '. verta()->now()->format('Y-m-d H:i') . '.xlsx'; $data = $roadObservationTableService->supervisorCartableIndex($request, true); - return Excel::download(new SupervisorCartableReport($data), $name); + return Excel::download(new SupervisorCartableReport($data['data']), $name); } - public function operatorindex(Request $request, RoadObservationTableService $roadObservationTableService): JsonResponse + public function operatorIndex(Request $request, RoadObservationTableService $roadObservationTableService): JsonResponse { $data = $roadObservationTableService->operatorCartableIndex($request); return response()->json($data); } - public function operatorcartablereport(Request $request, RoadObservationTableService $roadObservationTableService): BinaryFileResponse + public function operatorCartableReport(Request $request, RoadObservationTableService $roadObservationTableService): BinaryFileResponse { $name = 'گزارش از کارتابل ارزیابی واکنش سریع ' . verta()->now()->format('Y-m-d H:i') . '.xlsx'; $data = $roadObservationTableService->operatorCartableIndex($request); - return Excel::download(new OperatorCartableReport($data), $name); + return Excel::download(new OperatorCartableReport($data['data']), $name); } } diff --git a/routes/v3.php b/routes/v3.php index 22ec9951..fb984f0f 100644 --- a/routes/v3.php +++ b/routes/v3.php @@ -271,9 +271,9 @@ Route::prefix('road_observations') ->name('roadObservations.') ->controller(RoadObservationController::class) ->group(function () { - Route::get('/supervisor_index', 'supervisorindex')->name('supervisorIndex')->middleware('supervise-fast-react-province','supervise-fast-react'); - Route::post('/verify/{road_observed}', 'verifybysupervisor')->name('verifyBySupervisor'); - Route::get('/supervisor_report', 'supervisorcartablereport')->name('report'); - Route::get('/operator_index','operatorIndex')->name('operatorIndex')->middleware('show-fast-react','show-fast-react-province'); - Route::get('/operator_report', 'operatorcartablereport')->name('operatorExcelReport'); + Route::get('/supervisor_index', 'supervisorIndex')->name('supervisorIndex')->middleware('permission:supervise-fast-react-province|supervise-fast-react'); + Route::post('/verify/{road_observed}', 'verifyBySupervisor')->name('verifyBySupervisor'); + Route::get('/supervisor_report', 'supervisorCartableReport')->name('report'); + Route::get('/operator_index','operatorIndex')->name('operatorIndex')->middleware('permission:show-fast-react|show-fast-react-province'); + Route::get('/operator_report', 'operatorCartableReport')->name('operatorExcelReport'); }); From 21c1e0c580f22a169ea21ff5d4ec4b6500b01d28 Mon Sep 17 00:00:00 2001 From: amirghasempoor Date: Tue, 25 Feb 2025 11:03:13 +0330 Subject: [PATCH 04/14] create api for register road observation --- .../Dashboard/AccidentReceiptController.php | 2 +- .../Dashboard/RoadObservationController.php | 96 ++++++++++++++++++- .../V3/AccidentReceipt/UpdateRequest.php | 6 +- .../V3/RoadObservation/ReferRequest.php | 29 ++++++ app/Models/RoadObserved.php | 16 ++++ .../Cartables/RoadObservationTableService.php | 42 ++++++++ routes/v3.php | 7 +- 7 files changed, 192 insertions(+), 6 deletions(-) create mode 100644 app/Http/Requests/V3/RoadObservation/ReferRequest.php diff --git a/app/Http/Controllers/V3/Dashboard/AccidentReceiptController.php b/app/Http/Controllers/V3/Dashboard/AccidentReceiptController.php index 530b4add..5368e931 100644 --- a/app/Http/Controllers/V3/Dashboard/AccidentReceiptController.php +++ b/app/Http/Controllers/V3/Dashboard/AccidentReceiptController.php @@ -156,7 +156,7 @@ class AccidentReceiptController extends Controller FileFacade::delete($accident->police_file, true); } - if (!$request->report_base) { + if (!$request->report_base && $request->has('police_file')) { FileFacade::delete($accident->police_file, true); $accidentData['police_file'] = FileFacade::save($request->file('police_file'), "receipts_files/{$accident->id}/"); } diff --git a/app/Http/Controllers/V3/Dashboard/RoadObservationController.php b/app/Http/Controllers/V3/Dashboard/RoadObservationController.php index 1000a9ce..937cdb3b 100644 --- a/app/Http/Controllers/V3/Dashboard/RoadObservationController.php +++ b/app/Http/Controllers/V3/Dashboard/RoadObservationController.php @@ -3,14 +3,24 @@ namespace App\Http\Controllers\V3\Dashboard; use App\Exports\V3\RoadObservation\OperatorCartableReport; use App\Exports\V3\RoadObservation\SupervisorCartableReport; +use App\Facades\File\FileFacade; +use App\Facades\Sms\Sms; use App\Http\Controllers\Controller; +use App\Http\Requests\V3\RoadObservation\ReferRequest; use App\Http\Requests\V3\RoadObservation\VerifyBySupervisorRequest; use App\Http\Traits\ApiResponse; +use App\Models\RoadObservationHistory; use App\Models\RoadObserved; +use App\Services\NikarayanService; +use Carbon\Carbon; +use Hekmatinasser\Verta\Verta; use Illuminate\Http\JsonResponse; use Illuminate\Http\Request; use App\Services\Cartables\RoadObservationTableservice; +use Illuminate\Support\Facades\Auth; +use Illuminate\Support\Str; use Maatwebsite\Excel\Facades\Excel; +use SoapFault; use Symfony\Component\HttpFoundation\BinaryFileResponse; class RoadObservationController extends Controller @@ -59,10 +69,94 @@ class RoadObservationController extends Controller public function operatorCartableReport(Request $request, RoadObservationTableService $roadObservationTableService): BinaryFileResponse { - $name = 'گزارش از کارتابل ارزیابی واکنش سریع ' . verta()->now()->format('Y-m-d H:i') . '.xlsx'; + $name = 'گزارش از کارتابل عملیات واکنش سریع ' . verta()->now()->format('Y-m-d H:i') . '.xlsx'; $data = $roadObservationTableService->operatorCartableIndex($request); return Excel::download(new OperatorCartableReport($data['data']), $name); } + public function complaintsIndex(Request $request, RoadObservationTableservice $roadObservationTableservice): JsonResponse + { + return response()->json($roadObservationTableservice->complaintsIndex($request)); + } + + public function register(Request $request, RoadObserved $roadObserved, NikarayanService $nikarayanService): JsonResponse + { + $roadObservedData = [ + 'status' => 0, + 'status_fa' => 'در حال بررسی', + 'rms_status' => $request->rms_status ?? $roadObserved->rms_status, + 'rms_description' => $request->description?? $roadObserved->rms_description, + ]; + + $roadObservedHistoryData = [ + 'user_id' => auth()->user()->id, + 'previous_rms_status' => $roadObserved->rms_status, + 'previous_rms_start_latlng' => $roadObserved->rms_start_latlng, + 'previous_rms_end_latlng' => $roadObserved->rms_end_latlng, + 'previous_rms_description' => $roadObserved->rms_description, + 'new_files' => [] + ]; + + if ($request->rms_status == 1) { + + $files_path = []; + + $roadObserved->files()->where('path', 'like', '%_image_before%')->delete(); + $roadObserved->files()->where('path', 'like', '%_image_after%')->delete(); + + $image_before = FileFacade::save($request->image_before, "road_observeds/{$roadObserved->id}/"); + $image_after = FileFacade::save($request->image_after, "road_observeds/{$roadObserved->id}/"); + + $files_path[0]['path'] = $image_before; + $files_path[1]['path'] = $image_after; + + $files = json_encode($files_path); + $now_date_time = Carbon::now(); + + $roadObservedData['image_before'] = $image_before; + $roadObservedData['image_after'] = $image_after; + $roadObservedData['rms_start_latlng'] = explode(',', $request->start_point); + $roadObservedData['updated_at_fa'] = Verta::instance($now_date_time); + $roadObservedData['rms_last_activity_fa'] = Verta::instance($now_date_time); + $roadObservedData['rms_last_activity'] = $now_date_time; + $roadObservedHistoryData['new_files'] = $files; + } + + $roadObserved->problemHistories()->create($roadObservedHistoryData); + $roadObserved->update($roadObservedData); + + auth()->user()->addActivityComplete(1142); + + try { + $result = $nikarayanService->updateRoadObservedInfoByNikarayan($request, $roadObserved, json_encode($roadObservedHistoryData['new_files'])); + } + catch (SoapFault $e) { + + $msg = "error in send to nikarayan at" . date("Y-m-d H:i:s") . "\n"; + $msg .= $e->getMessage(); + Sms::sendSms(env('RMS_CTO_PHONE_NUMBER'), $msg); + } + + return $this->successResponse(); + } + + public function refer(ReferRequest $request, RoadObserved $roadObserved): JsonResponse + { + $roadObserved->problemHistories()->create([ + 'user_id' => auth()->user()->id, + 'action' => 'refer', + 'description' => $request->refer_description, + 'from_edareh' => $roadObserved->edarate_shahri_id, + 'to_edareh' => $request->edarate_shahri_id + ]); + + $roadObserved->update([ + 'edarate_shahri_id' => $request->edarate_shahri_id, + ]); + + auth()->user()->addActivityComplete(1037); + + return $this->successResponse(); + } } diff --git a/app/Http/Requests/V3/AccidentReceipt/UpdateRequest.php b/app/Http/Requests/V3/AccidentReceipt/UpdateRequest.php index 3b50bdf5..3160896d 100644 --- a/app/Http/Requests/V3/AccidentReceipt/UpdateRequest.php +++ b/app/Http/Requests/V3/AccidentReceipt/UpdateRequest.php @@ -35,11 +35,11 @@ class UpdateRequest extends FormRequest 'accident_date' => 'required|date', 'accident_time' => 'required|string', 'report_base' => 'required|in:0,1', - 'police_file' => 'required_if:report_base,0|file|mimes:pdf,jpg,jpeg,png', + 'police_file' => 'file|mimes:pdf,jpg,jpeg,png', 'police_serial' => 'required_if:report_base,0|string', 'police_file_date' => 'required_if:report_base,0|date', - 'damage_picture1' => 'required|file|mimes:pdf,jpg,jpeg,png', - 'damage_picture2' => 'required|file|mimes:pdf,jpg,jpeg,png', + 'damage_picture1' => 'file|mimes:pdf,jpg,jpeg,png', + 'damage_picture2' => 'file|mimes:pdf,jpg,jpeg,png', 'damage_items' => 'required|array', 'damage_items.*.value' => 'required', 'damage_items.*.amount' => 'required', diff --git a/app/Http/Requests/V3/RoadObservation/ReferRequest.php b/app/Http/Requests/V3/RoadObservation/ReferRequest.php new file mode 100644 index 00000000..4db948c2 --- /dev/null +++ b/app/Http/Requests/V3/RoadObservation/ReferRequest.php @@ -0,0 +1,29 @@ +roadObserved->rms_status == 0; + } + + /** + * Get the validation rules that apply to the request. + * + * @return array|string> + */ + public function rules(): array + { + return [ + 'edarate_shahri_id' => 'required|exists:edarate_shahri,id', + 'refer_description' => 'required|string', + ]; + } +} diff --git a/app/Models/RoadObserved.php b/app/Models/RoadObserved.php index 54fd8c29..60131fd0 100644 --- a/app/Models/RoadObserved.php +++ b/app/Models/RoadObserved.php @@ -2,8 +2,10 @@ namespace App\Models; +use Illuminate\Database\Eloquent\Casts\Attribute; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; +use Illuminate\Support\Facades\Storage; class RoadObserved extends Model { @@ -99,4 +101,18 @@ class RoadObserved extends Model { return $this->belongsTo('App\Models\EdarateShahri', 'edarate_shahri_id'); } + + protected function imageAfter(): Attribute + { + return Attribute::make( + get: fn($value) => $value == null ? null : Storage::disk('public')->url($value) + ); + } + + protected function imageBefore(): Attribute + { + return Attribute::make( + get: fn($value) => $value == null ? null : Storage::disk('public')->url($value) + ); + } } diff --git a/app/Services/Cartables/RoadObservationTableService.php b/app/Services/Cartables/RoadObservationTableService.php index 9b8bbafd..eac2e585 100644 --- a/app/Services/Cartables/RoadObservationTableService.php +++ b/app/Services/Cartables/RoadObservationTableService.php @@ -88,4 +88,46 @@ class RoadObservationTableService allowedFilters: ['*'], allowedSortings: ['*']); } + + public function complaintsIndex(Request $request) + { + $user = auth()->user(); + + if ($user->hasPermissionTo('show-fast-react')) { + $query = RoadObserved::query()->leftjoin('edarate_shahri', 'road_observeds.edarate_shahri_id', 'edarate_shahri.id') + ->where('rms_status', '=', 0) + ->whereNotNull('edarate_shahri_id'); + } + 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('rms_status', '=', 0) + ->whereNotNull('edarate_shahri_id') + ->where('road_observeds.province_id', '=', $user->province_id); + + } + elseif ($user->hasPermissionTo('show-fast-react-edarate-shahri')) { + + if (is_null($user->edarate_shahri_id)) { + return $this->errorResponse('اداره ای برای شما در سامانه ثبت نشده است!'); + } + + $query = RoadObserved::query()->leftjoin('edarate_shahri', 'road_observeds.edarate_shahri_id', 'edarate_shahri.id') + ->where('rms_status', '=', 0) + ->whereNotNull('edarate_shahri_id') + ->where('edarate_shahri_id', '=', $user->edarate_shahri_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 793ea143..fe623242 100644 --- a/routes/v3.php +++ b/routes/v3.php @@ -285,5 +285,10 @@ Route::prefix('road_observations') Route::post('/verify/{road_observed}', 'verifyBySupervisor')->name('verifyBySupervisor'); Route::get('/supervisor_report', 'supervisorCartableReport')->name('report'); Route::get('/operator_index','operatorIndex')->name('operatorIndex')->middleware('permission:show-fast-react|show-fast-react-province'); - Route::get('/operator_report', 'operatorCartableReport')->name('operatorExcelReport'); + Route::get('/complaints_index', 'complaintsIndex') + ->middleware('permission:show-fast-react-edarate-shahri|show-fast-react-province|show-fast-react') + ->name('complaintsIndex'); + Route::post('/register/{roadObserved}', 'register') + ->middleware('permission:show-fast-react-edarate-shahri|show-fast-react-province|show-fast-react') + ->name('register'); }); From 320efee4c763e1c98e01608bf12400925eda4c07 Mon Sep 17 00:00:00 2001 From: joddyabott Date: Tue, 25 Feb 2025 12:59:26 +0330 Subject: [PATCH 05/14] inprove my view foe Road observation --- .../OperatorCartableReport.php | 10 ++- .../SupervisorCartableReport.php | 8 +- .../OpratorCartableReport.blade.php | 75 +++++++++++++++++ .../SupervisorCartableReport.blade.php | 84 +++++++++++++++++++ 4 files changed, 170 insertions(+), 7 deletions(-) create mode 100644 resources/views/v3/Reports/RoadObservation/OpratorCartableReport.blade.php create mode 100644 resources/views/v3/Reports/RoadObservation/SupervisorCartableReport.blade.php diff --git a/app/Exports/V3/RoadObservation/OperatorCartableReport.php b/app/Exports/V3/RoadObservation/OperatorCartableReport.php index 18e0ef18..4cad7e54 100644 --- a/app/Exports/V3/RoadObservation/OperatorCartableReport.php +++ b/app/Exports/V3/RoadObservation/OperatorCartableReport.php @@ -17,15 +17,17 @@ use PhpOffice\PhpSpreadsheet\Worksheet\Drawing; class OperatorCartableReport implements FromView, ShouldAutoSize, WithEvents, WithDrawings { - public function __construct(private ?Collection $data){} + public function __construct(private Collection $data){} public function view(): View { - return view ("test", [ - 'data' => $this->data, - ]); + $data = $this->data; + return view('v3.Reports.RoadItems.RoadObservation.OperatorCartableReport', [ + 'data' => $data['activities']['data'], + ]); } + public function registerEvents(): array { return [ diff --git a/app/Exports/V3/RoadObservation/SupervisorCartableReport.php b/app/Exports/V3/RoadObservation/SupervisorCartableReport.php index 224be733..ea3170f4 100644 --- a/app/Exports/V3/RoadObservation/SupervisorCartableReport.php +++ b/app/Exports/V3/RoadObservation/SupervisorCartableReport.php @@ -15,12 +15,14 @@ use PhpOffice\PhpSpreadsheet\Worksheet\Drawing; class SupervisorCartableReport implements FromView, WithEvents, ShouldAutoSize, WithDrawings { - public function __construct(private ?Collection $data){} + public function __construct(private Collection $data){} public function view(): View { - return view ("test", [ - 'data' => $this->data, + $data = $this->data; + + return view('v3.Reports.RoadItems.RoadObservation.supervisorCartableReport', [ + 'data' => $data['activities']['data'], ]); } diff --git a/resources/views/v3/Reports/RoadObservation/OpratorCartableReport.blade.php b/resources/views/v3/Reports/RoadObservation/OpratorCartableReport.blade.php new file mode 100644 index 00000000..da390bb1 --- /dev/null +++ b/resources/views/v3/Reports/RoadObservation/OpratorCartableReport.blade.php @@ -0,0 +1,75 @@ + + + + + + + + گزارش واکنش سریع + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @foreach ($data as $item) + + + + + + + + + + + + + + @endforeach + +
+ تاریخ دریافت گزارش: {{ verta()->now()->format('Y/m/d H:i') }} +
+
+ گزارش کارتابل ارزیابی واکنش سریع +
کد یکتاکد سوانحاستانادارات شهریموضوع گزارشنوع گزارششماره تماس گیرندهوضعیتتاریخ اقدامتوضیحاتتوضیحات کارشناس
{{ $item['id'] ?? '-' }}{{ $item['fk_RegisteredEventMessage'] ?? '-' }}{{ $item['province_fa'] ?? '-' }}{{ $item['edarate_shahri_name_fa'] ?? '-' }}{{ $item['Title'] ?? '-' }}{{ $item['FeatureTypeTitle'] ?? '-' }}{{ $item['MobileForSendEventSms'] ?? '-' }}{{ $item['status_fa'] ?? '-' }}{{ $item['rms_last_activity_fa'] ?? '-' }}{{ $item['rms_description'] ?? '-' }}{{ $item['supervisor_description'] ?? '-' }}
+ + + diff --git a/resources/views/v3/Reports/RoadObservation/SupervisorCartableReport.blade.php b/resources/views/v3/Reports/RoadObservation/SupervisorCartableReport.blade.php new file mode 100644 index 00000000..4c04abfd --- /dev/null +++ b/resources/views/v3/Reports/RoadObservation/SupervisorCartableReport.blade.php @@ -0,0 +1,84 @@ + + + + + + + + گزارش واکنش سریع + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @foreach ($data as $item) + + + + + + + + + + + + + + @endforeach + +
+ تاریخ دریافت گزارش: {{ verta()->now()->format('Y/m/d H:i') }} +
+
+ @if ($fromDate == null) + گزارش کارتابل ارزیابی واکنش سریع + @else + گزارش کارتابل ارزیابی واکنش سریع از تاریخ + {{ verta($fromDate)->format('Y/n/j') }} + تا + تاریخ + {{ verta($toDate)->format('Y/n/j') }} + @endif + +
کد یکتاکد پیگیریاستانادارات شهریموضوع گزارشنوع گزارششماره تماس گیرندهوضعیتتاریخ اقدامتوضیحاتتوضیحات کارشناس
{{ $item['id'] ?? '-' }}{{ $item['fk_RegisteredEventMessage'] ?? '-' }}{{ $item['province_fa'] ?? '-' }}{{ $item['edarate_shahri_name_fa'] ?? '-' }}{{ $item['Title'] ?? '-' }}{{ $item['FeatureTypeTitle'] ?? '-' }}{{ $item['MobileForSendEventSms'] ?? '-' }}{{ $item['status_fa'] ?? '-' }}{{ $item['rms_last_activity_fa'] ?? '-' }}{{ $item['rms_description'] ?? '-' }}{{ $item['supervisor_description'] ?? '-' }}
+ + + From 2adf091f7d01bc5661c55162bcd95a24593e532e Mon Sep 17 00:00:00 2001 From: amirghasempoor Date: Tue, 25 Feb 2025 13:24:14 +0330 Subject: [PATCH 06/14] add column to road observation histories --- .../Dashboard/RoadObservationController.php | 78 +++++++++++++++---- .../V3/RoadObservation/ReferRequest.php | 1 + .../V3/RoadObservation/RestoreRequest.php | 28 +++++++ ...mn_to_road_observation_histories_table.php | 30 +++++++ routes/v3.php | 9 ++- 5 files changed, 132 insertions(+), 14 deletions(-) create mode 100644 app/Http/Requests/V3/RoadObservation/RestoreRequest.php create mode 100644 database/migrations/2025_02_25_114351_add_column_to_road_observation_histories_table.php diff --git a/app/Http/Controllers/V3/Dashboard/RoadObservationController.php b/app/Http/Controllers/V3/Dashboard/RoadObservationController.php index 937cdb3b..77e53de6 100644 --- a/app/Http/Controllers/V3/Dashboard/RoadObservationController.php +++ b/app/Http/Controllers/V3/Dashboard/RoadObservationController.php @@ -7,17 +7,21 @@ use App\Facades\File\FileFacade; use App\Facades\Sms\Sms; use App\Http\Controllers\Controller; use App\Http\Requests\V3\RoadObservation\ReferRequest; +use App\Http\Requests\V3\RoadObservation\RestoreRequest; use App\Http\Requests\V3\RoadObservation\VerifyBySupervisorRequest; use App\Http\Traits\ApiResponse; +use App\Models\EdarateShahri; use App\Models\RoadObservationHistory; use App\Models\RoadObserved; +use App\Models\User; use App\Services\NikarayanService; use Carbon\Carbon; use Hekmatinasser\Verta\Verta; use Illuminate\Http\JsonResponse; use Illuminate\Http\Request; -use App\Services\Cartables\RoadObservationTableservice; +use App\Services\Cartables\RoadObservationTableService; use Illuminate\Support\Facades\Auth; +use Illuminate\Support\Facades\Storage; use Illuminate\Support\Str; use Maatwebsite\Excel\Facades\Excel; use SoapFault; @@ -27,10 +31,9 @@ class RoadObservationController extends Controller { use ApiResponse; - public function supervisorIndex (Request $request,RoadObservationTableservice $roadObservationTableservice ): JsonResponse + public function supervisorIndex (Request $request,RoadObservationTableService $roadObservationTableService ): JsonResponse { - $data = $roadObservationTableservice->supervisorCartableIndex($request); - return response()->json($data); + return response()->json($roadObservationTableService->supervisorCartableIndex($request)); } public function verifyBySupervisor (VerifyBySupervisorRequest $request, RoadObserved $roadObserved): JsonResponse @@ -49,11 +52,9 @@ class RoadObservationController extends Controller 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, true); @@ -63,8 +64,7 @@ class RoadObservationController extends Controller public function operatorIndex(Request $request, RoadObservationTableService $roadObservationTableService): JsonResponse { - $data = $roadObservationTableService->operatorCartableIndex($request); - return response()->json($data); + return response()->json($roadObservationTableService->operatorCartableIndex($request)); } public function operatorCartableReport(Request $request, RoadObservationTableService $roadObservationTableService): BinaryFileResponse @@ -74,7 +74,7 @@ class RoadObservationController extends Controller return Excel::download(new OperatorCartableReport($data['data']), $name); } - public function complaintsIndex(Request $request, RoadObservationTableservice $roadObservationTableservice): JsonResponse + public function complaintsIndex(Request $request, RoadObservationTableService $roadObservationTableservice): JsonResponse { return response()->json($roadObservationTableservice->complaintsIndex($request)); } @@ -128,7 +128,7 @@ class RoadObservationController extends Controller auth()->user()->addActivityComplete(1142); try { - $result = $nikarayanService->updateRoadObservedInfoByNikarayan($request, $roadObserved, json_encode($roadObservedHistoryData['new_files'])); + $nikarayanService->updateRoadObservedInfoByNikarayan($request, $roadObserved, json_encode($roadObservedHistoryData['new_files'])); } catch (SoapFault $e) { @@ -142,21 +142,73 @@ class RoadObservationController extends Controller public function refer(ReferRequest $request, RoadObserved $roadObserved): JsonResponse { - $roadObserved->problemHistories()->create([ + RoadObservationHistory::query()->create([ + 'id' => $roadObserved->id, 'user_id' => auth()->user()->id, 'action' => 'refer', 'description' => $request->refer_description, 'from_edareh' => $roadObserved->edarate_shahri_id, - 'to_edareh' => $request->edarate_shahri_id + 'to_edareh' => $request->edarate_shahri_id, + 'from_province' => $roadObserved->province_id, + 'to_province' => $request->province_id ]); $roadObserved->update([ 'edarate_shahri_id' => $request->edarate_shahri_id, + 'province_id' => $request->province_id, ]); auth()->user()->addActivityComplete(1037); return $this->successResponse(); } -} + public function referList(Request $request, RoadObserved $roadObserved): JsonResponse + { + $data = RoadObservationHistory::query() + ->where('id', '=', $roadObserved->id) + ->where('action', '=', 'refer') + ->get(); + foreach ($data as $key => $value) { + $data[$key]->from_edareh = EdarateShahri::find($value->from_edareh)->name_fa; + $data[$key]->to_edareh = EdarateShahri::find($value->to_edareh)->name_fa; + $user = User::find($value->user_id); + $data[$key]->user = $user->first_name . ' ' . $user->last_name; + } + 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(); + } +} diff --git a/app/Http/Requests/V3/RoadObservation/ReferRequest.php b/app/Http/Requests/V3/RoadObservation/ReferRequest.php index 4db948c2..33e2bc83 100644 --- a/app/Http/Requests/V3/RoadObservation/ReferRequest.php +++ b/app/Http/Requests/V3/RoadObservation/ReferRequest.php @@ -23,6 +23,7 @@ class ReferRequest extends FormRequest { return [ 'edarate_shahri_id' => 'required|exists:edarate_shahri,id', + 'province_id' => 'required|exists:provinces,id', 'refer_description' => 'required|string', ]; } diff --git a/app/Http/Requests/V3/RoadObservation/RestoreRequest.php b/app/Http/Requests/V3/RoadObservation/RestoreRequest.php new file mode 100644 index 00000000..651de88a --- /dev/null +++ b/app/Http/Requests/V3/RoadObservation/RestoreRequest.php @@ -0,0 +1,28 @@ +|string> + */ + public function rules(): array + { + return [ + 'restore_description' => 'required|string', + ]; + } +} diff --git a/database/migrations/2025_02_25_114351_add_column_to_road_observation_histories_table.php b/database/migrations/2025_02_25_114351_add_column_to_road_observation_histories_table.php new file mode 100644 index 00000000..9e0037c8 --- /dev/null +++ b/database/migrations/2025_02_25_114351_add_column_to_road_observation_histories_table.php @@ -0,0 +1,30 @@ +string('from_province')->nullable(); + $table->string('to_province')->nullable(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::table('road_observation_histories', function (Blueprint $table) { + $table->dropColumn('from_province'); + $table->dropColumn('to_province'); + }); + } +}; diff --git a/routes/v3.php b/routes/v3.php index fe623242..86e0c5fc 100644 --- a/routes/v3.php +++ b/routes/v3.php @@ -283,12 +283,19 @@ Route::prefix('road_observations') ->group(function () { Route::get('/supervisor_index', 'supervisorIndex')->name('supervisorIndex')->middleware('permission:supervise-fast-react-province|supervise-fast-react'); Route::post('/verify/{road_observed}', 'verifyBySupervisor')->name('verifyBySupervisor'); - Route::get('/supervisor_report', 'supervisorCartableReport')->name('report'); + Route::get('/supervisor_report', 'supervisorCartableReport')->name('supervisorCartableReport'); Route::get('/operator_index','operatorIndex')->name('operatorIndex')->middleware('permission:show-fast-react|show-fast-react-province'); + Route::get('/operator_report','operatorCartableReport')->name('operatorCartableReport'); Route::get('/complaints_index', 'complaintsIndex') ->middleware('permission:show-fast-react-edarate-shahri|show-fast-react-province|show-fast-react') ->name('complaintsIndex'); Route::post('/register/{roadObserved}', 'register') ->middleware('permission:show-fast-react-edarate-shahri|show-fast-react-province|show-fast-react') ->name('register'); + Route::post('/refer/{roadObserved}', 'refer') + ->middleware('permission:show-fast-react-edarate-shahri|show-fast-react-province|show-fast-react') + ->name('refer'); + Route::post('/restore/{roadObserved}', 'restore') + ->middleware('permission:restore-fast-react') + ->name('restore'); }); From d0c9908e6ca90cc6ff6808296d94c0cff30ccab4 Mon Sep 17 00:00:00 2001 From: amirghasempoor Date: Tue, 25 Feb 2025 15:03:30 +0330 Subject: [PATCH 07/14] create complaints blade --- .../V3/RoadObservation/ComplaintsReport.php | 67 +++++++++++++ .../Dashboard/RoadObservationController.php | 38 +++++--- .../Cartables/RoadObservationTableService.php | 23 +++-- .../Cartables/RoadPatrolTableService.php | 6 +- .../ComplaintsReport.blade.php | 93 +++++++++++++++++++ routes/v3.php | 1 + 6 files changed, 204 insertions(+), 24 deletions(-) create mode 100644 app/Exports/V3/RoadObservation/ComplaintsReport.php create mode 100644 resources/views/v3/Reports/RoadObservation/ComplaintsReport.blade.php diff --git a/app/Exports/V3/RoadObservation/ComplaintsReport.php b/app/Exports/V3/RoadObservation/ComplaintsReport.php new file mode 100644 index 00000000..e8012634 --- /dev/null +++ b/app/Exports/V3/RoadObservation/ComplaintsReport.php @@ -0,0 +1,67 @@ + $this->data, + ]); + } + + public function registerEvents(): array + { + return [ + AfterSheet::class => function (AfterSheet $event) { + $event->sheet->getDelegate()->setRightToLeft(true); + $event->sheet->getDelegate()->getStyle('A:U')->getFont()->setName('Arial'); + $event->sheet->getDelegate()->getStyle('A:U') + ->getAlignment() + ->setHorizontal(Alignment::HORIZONTAL_CENTER); + + $event->sheet->getDelegate()->getStyle('A:U') + ->getAlignment() + ->setVertical(Alignment::VERTICAL_CENTER); + } + ]; + } + + public function drawings(): array + { + $drawing = new Drawing(); + $drawing->setName('Logo'); + $drawing->setDescription('This is my logo'); + $drawing->setPath(public_path('/dist/logo.png')); + $drawing->setWidth(50); + $drawing->setHeight(50); + $drawing->setOffsetX(5); + $drawing->setOffsetY(5); + $drawing->setCoordinates('A1'); + + $drawing2 = new Drawing(); + $drawing2->setName('Logo'); + $drawing2->setDescription('This is my logo'); + $drawing2->setPath(public_path('/dist/141icon.png')); + $drawing2->setWidth(50); + $drawing2->setHeight(50); + $drawing2->setOffsetX(5); + $drawing2->setOffsetY(5); + $drawing2->setCoordinates('q1'); + return [$drawing, $drawing2]; + } +} diff --git a/app/Http/Controllers/V3/Dashboard/RoadObservationController.php b/app/Http/Controllers/V3/Dashboard/RoadObservationController.php index 77e53de6..457f3d75 100644 --- a/app/Http/Controllers/V3/Dashboard/RoadObservationController.php +++ b/app/Http/Controllers/V3/Dashboard/RoadObservationController.php @@ -1,6 +1,7 @@ json($roadObservationTableservice->complaintsIndex($request)); + return response()->json($roadObservationTableService->complaintsIndex($request)); + } + + public function complaintsReport(Request $request, RoadObservationTableService $roadObservationTableService): BinaryFileResponse + { + $name = 'گزارش از رسیدگی به شکایات واکنش سریع ' . verta()->now()->format('Y-m-d H:i') . '.xlsx'; + $data = $roadObservationTableService->complaintsIndex($request); + return Excel::download(new ComplaintsReport($data['data']), $name); } public function register(Request $request, RoadObserved $roadObserved, NikarayanService $nikarayanService): JsonResponse @@ -142,8 +151,7 @@ class RoadObservationController extends Controller public function refer(ReferRequest $request, RoadObserved $roadObserved): JsonResponse { - RoadObservationHistory::query()->create([ - 'id' => $roadObserved->id, + $roadObserved->problemHistories()->create([ 'user_id' => auth()->user()->id, 'action' => 'refer', 'description' => $request->refer_description, @@ -165,17 +173,18 @@ class RoadObservationController extends Controller public function referList(Request $request, RoadObserved $roadObserved): JsonResponse { - $data = RoadObservationHistory::query() - ->where('id', '=', $roadObserved->id) - ->where('action', '=', 'refer') - ->get(); + $referList = []; + $data = $roadObserved->problemHistories()->where('action', '=', 'refer')->get(); + foreach ($data as $key => $value) { - $data[$key]->from_edareh = EdarateShahri::find($value->from_edareh)->name_fa; - $data[$key]->to_edareh = EdarateShahri::find($value->to_edareh)->name_fa; - $user = User::find($value->user_id); - $data[$key]->user = $user->first_name . ' ' . $user->last_name; + $referList[$key]['from_edareh'] = EdarateShahri::query()->find($value->from_edareh)->name_fa; + $referList[$key]['to_edareh'] = EdarateShahri::query()->find($value->to_edareh)->name_fa; + $referList[$key]['from_province'] = Province::query()->find($value->from_province)->name_fa; + $referList[$key]['to_province'] = Province::query()->find($value->to_province)->name_fa; + $user = User::query()->find($value->user_id); + $referList[$key]['user'] = $user->first_name . ' ' . $user->last_name; } - return $this->successResponse($data); + return $this->successResponse($referList); } public function restore(RestoreRequest $request, RoadObserved $roadObserved): JsonResponse @@ -200,8 +209,7 @@ class RoadObservationController extends Controller 'status_fa' => null, ]); - RoadObservationHistory::query()->create([ - 'id' => $roadObserved->id, + $roadObserved->problemHistories()->create([ 'user_id' => auth()->user()->id, 'action' => 'restore', 'description' => $request->restore_description, diff --git a/app/Services/Cartables/RoadObservationTableService.php b/app/Services/Cartables/RoadObservationTableService.php index eac2e585..0f733d94 100644 --- a/app/Services/Cartables/RoadObservationTableService.php +++ b/app/Services/Cartables/RoadObservationTableService.php @@ -26,7 +26,8 @@ class RoadObservationTableService if ($user->hasPermissionTo('supervise-fast-react')) { $query = RoadObserved::query()->leftjoin('edarate_shahri', 'road_observeds.edarate_shahri_id', 'edarate_shahri.id') - ->whereNotNull('road_observeds.status'); + ->whereNotNull('road_observeds.status') + ->select($fields); } elseif ($user->hasPermissionTo('supervise-fast-react-province')) { @@ -37,7 +38,8 @@ class RoadObservationTableService $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'); + ->whereNotNull('road_observeds.status') + ->select($fields); } return DataTableFacade::run( @@ -96,7 +98,10 @@ class RoadObservationTableService if ($user->hasPermissionTo('show-fast-react')) { $query = RoadObserved::query()->leftjoin('edarate_shahri', 'road_observeds.edarate_shahri_id', 'edarate_shahri.id') ->where('rms_status', '=', 0) - ->whereNotNull('edarate_shahri_id'); + ->whereNotNull('edarate_shahri_id') + ->selectRaw('fk_RegisteredEventMessage, road_observeds.id, Title, FeatureTypeTitle, MobileForSendEventSms, + road_observeds.created_at, rms_last_activity, rms_last_activity_fa, status, + status_fa, supervisor_description, rms_description, province_fa, city_fa, Description, edarate_shahri.name_fa as edarate_shahri_name_fa, lat, lng'); } elseif ($user->hasPermissionTo('show-fast-react-province')) { @@ -106,8 +111,11 @@ class RoadObservationTableService $query = RoadObserved::query()->leftjoin('edarate_shahri', 'road_observeds.edarate_shahri_id', 'edarate_shahri.id') ->where('rms_status', '=', 0) - ->whereNotNull('edarate_shahri_id') - ->where('road_observeds.province_id', '=', $user->province_id); + ->whereNotNull('road_observeds.province_id') + ->where('road_observeds.province_id', '=', $user->province_id) + ->selectRaw('fk_RegisteredEventMessage, road_observeds.id, Title, FeatureTypeTitle, MobileForSendEventSms, + road_observeds.created_at, rms_last_activity, rms_last_activity_fa, status, + status_fa, supervisor_description, rms_description, province_fa, city_fa, Description, edarate_shahri.name_fa as edarate_shahri_name_fa, lat, lng'); } elseif ($user->hasPermissionTo('show-fast-react-edarate-shahri')) { @@ -119,7 +127,10 @@ class RoadObservationTableService $query = RoadObserved::query()->leftjoin('edarate_shahri', 'road_observeds.edarate_shahri_id', 'edarate_shahri.id') ->where('rms_status', '=', 0) ->whereNotNull('edarate_shahri_id') - ->where('edarate_shahri_id', '=', $user->edarate_shahri_id); + ->where('edarate_shahri_id', '=', $user->edarate_shahri_id) + ->selectRaw('fk_RegisteredEventMessage, road_observeds.id, Title, FeatureTypeTitle, MobileForSendEventSms, + road_observeds.created_at, rms_last_activity, rms_last_activity_fa, status, + status_fa, supervisor_description, rms_description, province_fa, city_fa, Description, edarate_shahri.name_fa as edarate_shahri_name_fa, lat, lng'); } diff --git a/app/Services/Cartables/RoadPatrolTableService.php b/app/Services/Cartables/RoadPatrolTableService.php index c6f38395..d43a45d7 100644 --- a/app/Services/Cartables/RoadPatrolTableService.php +++ b/app/Services/Cartables/RoadPatrolTableService.php @@ -21,7 +21,7 @@ class RoadPatrolTableService $query = RoadPatrol::query() ->select([ 'province_fa', 'province_id', 'id', 'edare_id', 'edare_name', 'start_time', 'end_time', 'created_at', 'description', - 'distance', 'vehicle_runtime', 'fuel_consumption', 'stop_points,' + 'distance', 'vehicle_runtime', 'fuel_consumption', 'stop_points' ]) ->when($loadRelations, fn ($query) => $query->with(['rahdaran:id,name,code', 'cmmsMachines:id,machine_code,car_name,plak_number'])); } @@ -32,7 +32,7 @@ class RoadPatrolTableService $query = RoadPatrol::query() ->select([ 'province_fa', 'province_id', 'id', 'edare_id', 'edare_name', 'start_time', 'end_time', 'created_at', 'description', - 'distance', 'vehicle_runtime', 'fuel_consumption', 'stop_points,' + 'distance', 'vehicle_runtime', 'fuel_consumption', 'stop_points' ]) ->where('province_id', '=', $user->province_id) ->when($loadRelations, fn ($query) => $query->with(['rahdaran:id,name,code', 'cmmsMachines:id,machine_code,car_name,plak_number'])); @@ -55,7 +55,7 @@ class RoadPatrolTableService $query = RoadPatrol::query() ->select([ 'province_fa', 'province_id', 'id', 'edare_id', 'edare_name', 'start_time', 'end_time', 'created_at', 'description', - 'distance', 'vehicle_runtime', 'fuel_consumption', 'stop_points,' + 'distance', 'vehicle_runtime', 'fuel_consumption', 'stop_points' ]) ->where('operator_id', '=', auth()->user()->id) ->when($loadRelations, fn ($query) => $query->with(['rahdaran:id,name,code', 'cmmsMachines:id,machine_code,car_name,plak_number'])); diff --git a/resources/views/v3/Reports/RoadObservation/ComplaintsReport.blade.php b/resources/views/v3/Reports/RoadObservation/ComplaintsReport.blade.php new file mode 100644 index 00000000..e2d061ba --- /dev/null +++ b/resources/views/v3/Reports/RoadObservation/ComplaintsReport.blade.php @@ -0,0 +1,93 @@ + + + + + + + + گزارش واکنش سریع + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @foreach ($data as $item) + + + + + + + + + + + + @endforeach + +
+ تاریخ دریافت گزارش: {{ verta()->now()->format('Y/m/d H:i') }} +
+
+ گزارش رسیدگی به شکایات واکنش سریع +
کد + سوانح + استان + + ادارات شهری + + موضوع گزارش + + نوع گزارش + توضیح گزارش + موقعیت مکانی + شماره تماس گیرنده + تاریخ ثبت گزارش
{{ $item['fk_RegisteredEventMessage'] ?? '-' }}{{ $item['province_fa'] ?? '-' }}{{ $item['edarate_shahri_name_fa'] ?? '-' }}{{ $item['Title'] ?? '-' }}{{ $item['FeatureTypeTitle'] ?? '-' }}{{ $item['Description'] ?? '-' }}{{ isset($item['lat']) && isset($item['lng']) ? $item['lat'] . ' ' . $item['lng'] : '-' }}{{ $item['MobileForSendEventSms'] ?? '-' }}{{ $item['created_at'] ? verta($item['created_at'])->format('Y/n/j H:i:s') : '-' }}
+ + diff --git a/routes/v3.php b/routes/v3.php index 86e0c5fc..b498fc9b 100644 --- a/routes/v3.php +++ b/routes/v3.php @@ -298,4 +298,5 @@ Route::prefix('road_observations') Route::post('/restore/{roadObserved}', 'restore') ->middleware('permission:restore-fast-react') ->name('restore'); + Route::get('/complaints_report', 'complaintsReport')->name('complaintsReport'); }); From a47f4cac4891f517e699ea1d9c202a1f163095ec Mon Sep 17 00:00:00 2001 From: joddyabott Date: Tue, 25 Feb 2025 15:55:11 +0330 Subject: [PATCH 08/14] debug my code --- app/Exports/V3/RoadObservation/OperatorCartableReport.php | 4 ++-- app/Exports/V3/RoadObservation/SupervisorCartableReport.php | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/app/Exports/V3/RoadObservation/OperatorCartableReport.php b/app/Exports/V3/RoadObservation/OperatorCartableReport.php index 4cad7e54..fbf560f3 100644 --- a/app/Exports/V3/RoadObservation/OperatorCartableReport.php +++ b/app/Exports/V3/RoadObservation/OperatorCartableReport.php @@ -23,8 +23,8 @@ class OperatorCartableReport implements FromView, ShouldAutoSize, WithEvents, Wi { $data = $this->data; - return view('v3.Reports.RoadItems.RoadObservation.OperatorCartableReport', [ - 'data' => $data['activities']['data'], + return view('v3.Reports.RoadObservation.OperatorCartableReport', [ + 'data' => $data, ]); } diff --git a/app/Exports/V3/RoadObservation/SupervisorCartableReport.php b/app/Exports/V3/RoadObservation/SupervisorCartableReport.php index ea3170f4..036edb76 100644 --- a/app/Exports/V3/RoadObservation/SupervisorCartableReport.php +++ b/app/Exports/V3/RoadObservation/SupervisorCartableReport.php @@ -21,8 +21,8 @@ class SupervisorCartableReport implements FromView, WithEvents, ShouldAutoSize, { $data = $this->data; - return view('v3.Reports.RoadItems.RoadObservation.supervisorCartableReport', [ - 'data' => $data['activities']['data'], + return view('v3.Reports.RoadObservation.SupervisorCartableReport', [ + 'data' => $data, ]); } From c4a50de162b76f8d36e667c65453ad7eba9afcaf Mon Sep 17 00:00:00 2001 From: amirghasempoor Date: Tue, 25 Feb 2025 15:58:46 +0330 Subject: [PATCH 09/14] debug --- .../V3/Dashboard/RoadObservationController.php | 10 +++++----- app/Services/Cartables/RoadItemTableService.php | 6 +++--- .../Cartables/RoadObservationTableService.php | 15 +++++++-------- routes/v3.php | 3 +++ 4 files changed, 18 insertions(+), 16 deletions(-) diff --git a/app/Http/Controllers/V3/Dashboard/RoadObservationController.php b/app/Http/Controllers/V3/Dashboard/RoadObservationController.php index 457f3d75..1182a8fb 100644 --- a/app/Http/Controllers/V3/Dashboard/RoadObservationController.php +++ b/app/Http/Controllers/V3/Dashboard/RoadObservationController.php @@ -33,19 +33,19 @@ class RoadObservationController extends Controller { use ApiResponse; - public function supervisorIndex (Request $request,RoadObservationTableService $roadObservationTableService ): JsonResponse + public function supervisorIndex(Request $request,RoadObservationTableService $roadObservationTableService ): JsonResponse { return response()->json($roadObservationTableService->supervisorCartableIndex($request)); } - public function verifyBySupervisor (VerifyBySupervisorRequest $request, RoadObserved $roadObserved): JsonResponse + 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_id' => auth()->user()->id, 'supervisor_name' => auth()->user()->name, 'supervisor_description' => $request->description, 'supervising_time' => now(), @@ -56,7 +56,7 @@ class RoadObservationController extends Controller return $this->successResponse(); } - public function supervisorCartableReport (Request $request, RoadObservationTableService $roadObservationTableService): BinaryFileResponse + public function supervisorCartableReport(Request $request, RoadObservationTableService $roadObservationTableService): BinaryFileResponse { $name = 'گزارش از کارتابل ارزیابی واکنش سریع '. verta()->now()->format('Y-m-d H:i') . '.xlsx'; $data = $roadObservationTableService->supervisorCartableIndex($request, true); @@ -171,7 +171,7 @@ class RoadObservationController extends Controller return $this->successResponse(); } - public function referList(Request $request, RoadObserved $roadObserved): JsonResponse + public function referList(RoadObserved $roadObserved): JsonResponse { $referList = []; $data = $roadObserved->problemHistories()->where('action', '=', 'refer')->get(); diff --git a/app/Services/Cartables/RoadItemTableService.php b/app/Services/Cartables/RoadItemTableService.php index c0a929fd..0ff0a29f 100644 --- a/app/Services/Cartables/RoadItemTableService.php +++ b/app/Services/Cartables/RoadItemTableService.php @@ -21,7 +21,7 @@ class RoadItemTableService if ($user->hasPermissionTo('show-road-item-supervise-cartable')) { $query = RoadItemsProject::query() - ->select(['id', 'province_fa', 'edarat_name', 'item_fa', 'sub_item_fa', 'sub_item_data', 'unit_fa', 'start_lat', 'start_lng', + ->select(['id', 'province_fa', 'edarat_name', 'item_id', 'item_fa', 'sub_item_id', 'sub_item_fa', 'sub_item_data', 'unit_fa', 'start_lat', 'start_lng', 'end_lat', 'end_lng', 'activity_date_time', 'created_at', 'status_fa', 'status']) ->where('is_new', 1) ->when($loadRelations, fn ($query) => $query->with(['rahdaran:id,name,code', 'cmmsMachines:id,machine_code,car_name,plak_number'])); @@ -31,7 +31,7 @@ class RoadItemTableService return $this->errorResponse('استانی برای شما در سامانه ثبت نشده است!'); } $query = RoadItemsProject::query() - ->select(['id', 'province_fa', 'edarat_name', 'item_fa', 'sub_item_fa', 'sub_item_data', 'unit_fa', 'start_lat', 'start_lng', + ->select(['id', 'province_fa', 'edarat_name', 'item_id', 'item_fa', 'sub_item_id', 'sub_item_fa', 'sub_item_data', 'unit_fa', 'start_lat', 'start_lng', 'end_lat', 'end_lng', 'activity_date_time', 'created_at', 'status_fa', 'status']) ->where('is_new', 1) ->where('province_id', auth()->user()->province_id) @@ -53,7 +53,7 @@ class RoadItemTableService $allowedSortings = ['*']; $query = RoadItemsProject::query() - ->select(['id', 'supervisor_description', 'item_fa', 'sub_item_fa', 'sub_item_data', 'unit_fa', 'start_lat', 'start_lng', + ->select(['id', 'supervisor_description', 'item_id', 'item_fa', 'sub_item_id', 'sub_item_fa', 'sub_item_data', 'unit_fa', 'start_lat', 'start_lng', 'end_lat', 'end_lng', 'activity_date_time', 'created_at', 'status_fa', 'status']) ->where('is_new', 1) ->where('user_id', auth()->user()->id) diff --git a/app/Services/Cartables/RoadObservationTableService.php b/app/Services/Cartables/RoadObservationTableService.php index 0f733d94..a245656a 100644 --- a/app/Services/Cartables/RoadObservationTableService.php +++ b/app/Services/Cartables/RoadObservationTableService.php @@ -66,11 +66,7 @@ class RoadObservationTableService ->whereNotNull('road_observeds.province_id') ->whereNotNull('status') ->leftJoin('edarate_shahri', 'road_observeds.edarate_shahri_id', '=', 'edarate_shahri.id') - ->select($fields) - ->addSelect([ - DB::raw("CONCAT('https://rms.rmto.ir/', image_before) as image_before"), - DB::raw("CONCAT('https://rms.rmto.ir/', image_after) as image_after") - ]); + ->select($fields); if ($user->hasPermissionTo('show-fast-react-province')) { if (is_null($user->province_id)) { @@ -101,7 +97,8 @@ class RoadObservationTableService ->whereNotNull('edarate_shahri_id') ->selectRaw('fk_RegisteredEventMessage, road_observeds.id, Title, FeatureTypeTitle, MobileForSendEventSms, road_observeds.created_at, rms_last_activity, rms_last_activity_fa, status, - status_fa, supervisor_description, rms_description, province_fa, city_fa, Description, edarate_shahri.name_fa as edarate_shahri_name_fa, lat, lng'); + status_fa, supervisor_description, rms_description, province_fa, city_fa, Description, edarate_shahri.name_fa as edarate_shahri_name_fa, lat, lng' + ); } elseif ($user->hasPermissionTo('show-fast-react-province')) { @@ -115,7 +112,8 @@ class RoadObservationTableService ->where('road_observeds.province_id', '=', $user->province_id) ->selectRaw('fk_RegisteredEventMessage, road_observeds.id, Title, FeatureTypeTitle, MobileForSendEventSms, road_observeds.created_at, rms_last_activity, rms_last_activity_fa, status, - status_fa, supervisor_description, rms_description, province_fa, city_fa, Description, edarate_shahri.name_fa as edarate_shahri_name_fa, lat, lng'); + status_fa, supervisor_description, rms_description, province_fa, city_fa, Description, edarate_shahri.name_fa as edarate_shahri_name_fa, lat, lng' + ); } elseif ($user->hasPermissionTo('show-fast-react-edarate-shahri')) { @@ -130,7 +128,8 @@ class RoadObservationTableService ->where('edarate_shahri_id', '=', $user->edarate_shahri_id) ->selectRaw('fk_RegisteredEventMessage, road_observeds.id, Title, FeatureTypeTitle, MobileForSendEventSms, road_observeds.created_at, rms_last_activity, rms_last_activity_fa, status, - status_fa, supervisor_description, rms_description, province_fa, city_fa, Description, edarate_shahri.name_fa as edarate_shahri_name_fa, lat, lng'); + status_fa, supervisor_description, rms_description, province_fa, city_fa, Description, edarate_shahri.name_fa as edarate_shahri_name_fa, lat, lng' + ); } diff --git a/routes/v3.php b/routes/v3.php index b498fc9b..d38b556f 100644 --- a/routes/v3.php +++ b/routes/v3.php @@ -295,6 +295,9 @@ Route::prefix('road_observations') 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')->name('referList'); + Route::post('/restore/{roadObserved}', 'restore') ->middleware('permission:restore-fast-react') ->name('restore'); From f2ca87d6aa4385b191ae40f677dd74272e139e7e Mon Sep 17 00:00:00 2001 From: amirghasempoor Date: Tue, 25 Feb 2025 16:30:05 +0330 Subject: [PATCH 10/14] remove the redundant relation --- .../V3/Dashboard/RoadObservationController.php | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/app/Http/Controllers/V3/Dashboard/RoadObservationController.php b/app/Http/Controllers/V3/Dashboard/RoadObservationController.php index 1182a8fb..ff534f53 100644 --- a/app/Http/Controllers/V3/Dashboard/RoadObservationController.php +++ b/app/Http/Controllers/V3/Dashboard/RoadObservationController.php @@ -22,9 +22,6 @@ use Hekmatinasser\Verta\Verta; use Illuminate\Http\JsonResponse; use Illuminate\Http\Request; use App\Services\Cartables\RoadObservationTableService; -use Illuminate\Support\Facades\Auth; -use Illuminate\Support\Facades\Storage; -use Illuminate\Support\Str; use Maatwebsite\Excel\Facades\Excel; use SoapFault; use Symfony\Component\HttpFoundation\BinaryFileResponse; @@ -151,7 +148,8 @@ class RoadObservationController extends Controller public function refer(ReferRequest $request, RoadObserved $roadObserved): JsonResponse { - $roadObserved->problemHistories()->create([ + RoadObservationHistory::query()->create([ + 'id' => $roadObserved->id, 'user_id' => auth()->user()->id, 'action' => 'refer', 'description' => $request->refer_description, @@ -174,7 +172,9 @@ class RoadObservationController extends Controller public function referList(RoadObserved $roadObserved): JsonResponse { $referList = []; - $data = $roadObserved->problemHistories()->where('action', '=', 'refer')->get(); + $data = RoadObservationHistory::query() + ->where('road_observation_histories.id', $roadObserved->id) + ->where('action', '=', 'refer')->get(); foreach ($data as $key => $value) { $referList[$key]['from_edareh'] = EdarateShahri::query()->find($value->from_edareh)->name_fa; @@ -209,7 +209,8 @@ class RoadObservationController extends Controller 'status_fa' => null, ]); - $roadObserved->problemHistories()->create([ + RoadObservationHistory::query()->create([ + 'id' => $roadObserved->id, 'user_id' => auth()->user()->id, 'action' => 'restore', 'description' => $request->restore_description, From b5b799ee904528e05cdec0a50de14c410127d2ee Mon Sep 17 00:00:00 2001 From: joddyabott Date: Tue, 25 Feb 2025 16:40:35 +0330 Subject: [PATCH 11/14] debug code for 3 item --- app/Exports/V3/RoadObservation/OperatorCartableReport.php | 4 +++- app/Exports/V3/RoadObservation/SupervisorCartableReport.php | 4 +++- .../Reports/RoadObservation/OpratorCartableReport.blade.php | 6 +++--- 3 files changed, 9 insertions(+), 5 deletions(-) diff --git a/app/Exports/V3/RoadObservation/OperatorCartableReport.php b/app/Exports/V3/RoadObservation/OperatorCartableReport.php index fbf560f3..7dca86d8 100644 --- a/app/Exports/V3/RoadObservation/OperatorCartableReport.php +++ b/app/Exports/V3/RoadObservation/OperatorCartableReport.php @@ -24,7 +24,9 @@ class OperatorCartableReport implements FromView, ShouldAutoSize, WithEvents, Wi $data = $this->data; return view('v3.Reports.RoadObservation.OperatorCartableReport', [ - 'data' => $data, + 'data' => $this->data, + 'fromDate' => $this->data['fromDate'] ?? null, + 'toDate' => $this->data['toDate'] ?? null ]); } diff --git a/app/Exports/V3/RoadObservation/SupervisorCartableReport.php b/app/Exports/V3/RoadObservation/SupervisorCartableReport.php index 036edb76..3ecc88f8 100644 --- a/app/Exports/V3/RoadObservation/SupervisorCartableReport.php +++ b/app/Exports/V3/RoadObservation/SupervisorCartableReport.php @@ -22,7 +22,9 @@ class SupervisorCartableReport implements FromView, WithEvents, ShouldAutoSize, $data = $this->data; return view('v3.Reports.RoadObservation.SupervisorCartableReport', [ - 'data' => $data, + 'data' => $this->data, + 'fromDate' => $this->data['fromDate'] ?? null, + 'toDate' => $this->data['toDate'] ?? null ]); } diff --git a/resources/views/v3/Reports/RoadObservation/OpratorCartableReport.blade.php b/resources/views/v3/Reports/RoadObservation/OpratorCartableReport.blade.php index da390bb1..4c308f98 100644 --- a/resources/views/v3/Reports/RoadObservation/OpratorCartableReport.blade.php +++ b/resources/views/v3/Reports/RoadObservation/OpratorCartableReport.blade.php @@ -21,18 +21,18 @@ - - - From 8c2491d38084535aca3749a8a26c72539b8756b7 Mon Sep 17 00:00:00 2001 From: joddyabott Date: Wed, 26 Feb 2025 10:24:53 +0330 Subject: [PATCH 12/14] fix code for blade and report --- .../RoadObservation/OperatorCartableReport.php | 8 ++------ .../RoadObservation/SupervisorCartableReport.php | 4 +--- .../V3/Dashboard/RoadObservationController.php | 2 +- .../OpratorCartableReport.blade.php | 8 ++++---- .../SupervisorCartableReport.blade.php | 16 ++++------------ 5 files changed, 12 insertions(+), 26 deletions(-) diff --git a/app/Exports/V3/RoadObservation/OperatorCartableReport.php b/app/Exports/V3/RoadObservation/OperatorCartableReport.php index 7dca86d8..6285c700 100644 --- a/app/Exports/V3/RoadObservation/OperatorCartableReport.php +++ b/app/Exports/V3/RoadObservation/OperatorCartableReport.php @@ -21,13 +21,9 @@ class OperatorCartableReport implements FromView, ShouldAutoSize, WithEvents, Wi public function view(): View { - $data = $this->data; - return view('v3.Reports.RoadObservation.OperatorCartableReport', [ 'data' => $this->data, - 'fromDate' => $this->data['fromDate'] ?? null, - 'toDate' => $this->data['toDate'] ?? null - ]); + ]); } public function registerEvents(): array @@ -67,7 +63,7 @@ class OperatorCartableReport implements FromView, ShouldAutoSize, WithEvents, Wi $drawing2->setHeight(50); $drawing2->setOffsetX(5); $drawing2->setOffsetY(5); - $drawing2->setCoordinates('q1'); + $drawing2->setCoordinates('K1'); return [$drawing, $drawing2]; } diff --git a/app/Exports/V3/RoadObservation/SupervisorCartableReport.php b/app/Exports/V3/RoadObservation/SupervisorCartableReport.php index 3ecc88f8..4aa2b072 100644 --- a/app/Exports/V3/RoadObservation/SupervisorCartableReport.php +++ b/app/Exports/V3/RoadObservation/SupervisorCartableReport.php @@ -23,8 +23,6 @@ class SupervisorCartableReport implements FromView, WithEvents, ShouldAutoSize, return view('v3.Reports.RoadObservation.SupervisorCartableReport', [ 'data' => $this->data, - 'fromDate' => $this->data['fromDate'] ?? null, - 'toDate' => $this->data['toDate'] ?? null ]); } @@ -65,7 +63,7 @@ class SupervisorCartableReport implements FromView, WithEvents, ShouldAutoSize, $drawing2->setHeight(50); $drawing2->setOffsetX(5); $drawing2->setOffsetY(5); - $drawing2->setCoordinates('q1'); + $drawing2->setCoordinates('K1'); return [$drawing, $drawing2]; } } diff --git a/app/Http/Controllers/V3/Dashboard/RoadObservationController.php b/app/Http/Controllers/V3/Dashboard/RoadObservationController.php index ff534f53..c8a52bdc 100644 --- a/app/Http/Controllers/V3/Dashboard/RoadObservationController.php +++ b/app/Http/Controllers/V3/Dashboard/RoadObservationController.php @@ -56,7 +56,7 @@ class RoadObservationController extends Controller public function supervisorCartableReport(Request $request, RoadObservationTableService $roadObservationTableService): BinaryFileResponse { $name = 'گزارش از کارتابل ارزیابی واکنش سریع '. verta()->now()->format('Y-m-d H:i') . '.xlsx'; - $data = $roadObservationTableService->supervisorCartableIndex($request, true); + $data = $roadObservationTableService->supervisorCartableIndex($request); return Excel::download(new SupervisorCartableReport($data['data']), $name); } diff --git a/resources/views/v3/Reports/RoadObservation/OpratorCartableReport.blade.php b/resources/views/v3/Reports/RoadObservation/OpratorCartableReport.blade.php index 4c308f98..e15d1d53 100644 --- a/resources/views/v3/Reports/RoadObservation/OpratorCartableReport.blade.php +++ b/resources/views/v3/Reports/RoadObservation/OpratorCartableReport.blade.php @@ -21,20 +21,20 @@
تاریخ دریافت گزارش: {{ verta()->now()->format('Y/m/d H:i') }}
گزارش کارتابل ارزیابی واکنش سریع
- - - diff --git a/resources/views/v3/Reports/RoadObservation/SupervisorCartableReport.blade.php b/resources/views/v3/Reports/RoadObservation/SupervisorCartableReport.blade.php index 4c04abfd..2ebaab38 100644 --- a/resources/views/v3/Reports/RoadObservation/SupervisorCartableReport.blade.php +++ b/resources/views/v3/Reports/RoadObservation/SupervisorCartableReport.blade.php @@ -21,28 +21,20 @@
تاریخ دریافت گزارش: {{ verta()->now()->format('Y/m/d H:i') }}
- گزارش کارتابل ارزیابی واکنش سریع + گزارش کارتابل عملیات واکنش سریع
- - - From 2b132959d348c349c37084dc957763a609bfe6bd Mon Sep 17 00:00:00 2001 From: amirghasempoor Date: Wed, 26 Feb 2025 10:56:08 +0330 Subject: [PATCH 13/14] create report cartable --- .../RoadObservationReportController.php | 28 +++++++++ .../Cartables/RoadItemTableService.php | 6 +- .../Cartables/RoadObservationTableService.php | 59 ++++++++++++++++--- 3 files changed, 82 insertions(+), 11 deletions(-) create mode 100644 app/Http/Controllers/V3/Dashboard/Reports/RoadObservationReportController.php diff --git a/app/Http/Controllers/V3/Dashboard/Reports/RoadObservationReportController.php b/app/Http/Controllers/V3/Dashboard/Reports/RoadObservationReportController.php new file mode 100644 index 00000000..eb20abf8 --- /dev/null +++ b/app/Http/Controllers/V3/Dashboard/Reports/RoadObservationReportController.php @@ -0,0 +1,28 @@ +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/Services/Cartables/RoadItemTableService.php b/app/Services/Cartables/RoadItemTableService.php index 0ff0a29f..0b64e741 100644 --- a/app/Services/Cartables/RoadItemTableService.php +++ b/app/Services/Cartables/RoadItemTableService.php @@ -21,7 +21,7 @@ class RoadItemTableService if ($user->hasPermissionTo('show-road-item-supervise-cartable')) { $query = RoadItemsProject::query() - ->select(['id', 'province_fa', 'edarat_name', 'item_id', 'item_fa', 'sub_item_id', 'sub_item_fa', 'sub_item_data', 'unit_fa', 'start_lat', 'start_lng', + ->select(['id', 'province_fa', 'edarat_name', 'item', 'item_fa', 'sub_item', 'sub_item_fa', 'sub_item_data', 'unit_fa', 'start_lat', 'start_lng', 'end_lat', 'end_lng', 'activity_date_time', 'created_at', 'status_fa', 'status']) ->where('is_new', 1) ->when($loadRelations, fn ($query) => $query->with(['rahdaran:id,name,code', 'cmmsMachines:id,machine_code,car_name,plak_number'])); @@ -31,7 +31,7 @@ class RoadItemTableService return $this->errorResponse('استانی برای شما در سامانه ثبت نشده است!'); } $query = RoadItemsProject::query() - ->select(['id', 'province_fa', 'edarat_name', 'item_id', 'item_fa', 'sub_item_id', 'sub_item_fa', 'sub_item_data', 'unit_fa', 'start_lat', 'start_lng', + ->select(['id', 'province_fa', 'edarat_name', 'item', 'item_fa', 'sub_item', 'sub_item_fa', 'sub_item_data', 'unit_fa', 'start_lat', 'start_lng', 'end_lat', 'end_lng', 'activity_date_time', 'created_at', 'status_fa', 'status']) ->where('is_new', 1) ->where('province_id', auth()->user()->province_id) @@ -53,7 +53,7 @@ class RoadItemTableService $allowedSortings = ['*']; $query = RoadItemsProject::query() - ->select(['id', 'supervisor_description', 'item_id', 'item_fa', 'sub_item_id', 'sub_item_fa', 'sub_item_data', 'unit_fa', 'start_lat', 'start_lng', + ->select(['id', 'supervisor_description', 'item', 'item_fa', 'sub_item', 'sub_item_fa', 'sub_item_data', 'unit_fa', 'start_lat', 'start_lng', 'end_lat', 'end_lng', 'activity_date_time', 'created_at', 'status_fa', 'status']) ->where('is_new', 1) ->where('user_id', auth()->user()->id) diff --git a/app/Services/Cartables/RoadObservationTableService.php b/app/Services/Cartables/RoadObservationTableService.php index a245656a..e70bf2b9 100644 --- a/app/Services/Cartables/RoadObservationTableService.php +++ b/app/Services/Cartables/RoadObservationTableService.php @@ -19,8 +19,8 @@ class RoadObservationTableService 'fk_RegisteredEventMessage', 'road_observeds.id', 'Title', 'road_observeds.created_at', 'lat', 'lng', 'FeatureTypeTitle', 'Description', 'MobileForSendEventSms', 'rms_description', 'rms_status', 'rms_last_activity_fa', 'rms_last_activity', - 'road_observeds.province_id', 'province_fa', 'city_fa', 'edarate_shahri.name_fa', - 'status', 'status_fa', 'supervisor_description', 'supervising_time' + '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' ]; @@ -56,13 +56,13 @@ class RoadObservationTableService $fields = [ 'fk_RegisteredEventMessage', 'road_observeds.id', 'Title', 'road_observeds.created_at', 'lat', 'lng', 'FeatureTypeTitle', 'Description', 'MobileForSendEventSms', - 'rms_description', 'rms_status', 'rms_start_latlng', 'rms_last_activity_fa', - 'rms_last_activity', 'road_observeds.province_id', 'province_fa', 'city_fa', + 'rms_description', 'rms_status', 'rms_start_latlng', 'rms_last_activity_fa', 'image_after', 'image_before', + 'rms_last_activity', 'road_observeds.province_id', 'province_fa', 'city_id', 'city_fa', 'edarate_shahri.name_fa', 'status', 'status_fa', 'supervisor_description', 'supervising_time' ]; $query = RoadObserved::query() - ->where('rms_status', '!=', 0) + ->where('rms_status', '<>', 0) ->whereNotNull('road_observeds.province_id') ->whereNotNull('status') ->leftJoin('edarate_shahri', 'road_observeds.edarate_shahri_id', '=', 'edarate_shahri.id') @@ -97,7 +97,7 @@ class RoadObservationTableService ->whereNotNull('edarate_shahri_id') ->selectRaw('fk_RegisteredEventMessage, road_observeds.id, Title, FeatureTypeTitle, MobileForSendEventSms, road_observeds.created_at, rms_last_activity, rms_last_activity_fa, status, - status_fa, supervisor_description, rms_description, province_fa, city_fa, Description, edarate_shahri.name_fa as edarate_shahri_name_fa, lat, lng' + status_fa, supervisor_description, rms_description, province_fa, city_id, city_fa, Description, edarate_shahri.name_fa as edarate_shahri_name_fa, lat, lng' ); } elseif ($user->hasPermissionTo('show-fast-react-province')) { @@ -112,7 +112,7 @@ class RoadObservationTableService ->where('road_observeds.province_id', '=', $user->province_id) ->selectRaw('fk_RegisteredEventMessage, road_observeds.id, Title, FeatureTypeTitle, MobileForSendEventSms, road_observeds.created_at, rms_last_activity, rms_last_activity_fa, status, - status_fa, supervisor_description, rms_description, province_fa, city_fa, Description, edarate_shahri.name_fa as edarate_shahri_name_fa, lat, lng' + status_fa, supervisor_description, rms_description, province_fa, city_id, city_fa, Description, edarate_shahri.name_fa as edarate_shahri_name_fa, lat, lng' ); } @@ -128,7 +128,7 @@ class RoadObservationTableService ->where('edarate_shahri_id', '=', $user->edarate_shahri_id) ->selectRaw('fk_RegisteredEventMessage, road_observeds.id, Title, FeatureTypeTitle, MobileForSendEventSms, road_observeds.created_at, rms_last_activity, rms_last_activity_fa, status, - status_fa, supervisor_description, rms_description, province_fa, city_fa, Description, edarate_shahri.name_fa as edarate_shahri_name_fa, lat, lng' + status_fa, supervisor_description, rms_description, province_fa, city_id, city_fa, Description, edarate_shahri.name_fa as edarate_shahri_name_fa, lat, lng' ); } @@ -140,4 +140,47 @@ class RoadObservationTableService allowedSortings: ['*'] ); } + + public function reportIndex(Request $request) + { + $fromDate = $request->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 From 98b3351842cfc4a865c68f3b4afad515a3dcacad Mon Sep 17 00:00:00 2001 From: joddyabott Date: Wed, 26 Feb 2025 13:39:54 +0330 Subject: [PATCH 14/14] fix code for routs and service --- .../VerifyBySupervisorRequest.php | 3 ++- .../Cartables/RoadObservationTableService.php | 21 +++++++------------ routes/v3.php | 18 +++++++++------- 3 files changed, 20 insertions(+), 22 deletions(-) diff --git a/app/Http/Requests/V3/RoadObservation/VerifyBySupervisorRequest.php b/app/Http/Requests/V3/RoadObservation/VerifyBySupervisorRequest.php index e2154f30..db1450cd 100644 --- a/app/Http/Requests/V3/RoadObservation/VerifyBySupervisorRequest.php +++ b/app/Http/Requests/V3/RoadObservation/VerifyBySupervisorRequest.php @@ -9,10 +9,11 @@ class VerifyBySupervisorRequest extends FormRequest { /** * Determine if the user is authorized to make this request. + * @return bool */ public function authorize(): bool { - return Gate::allows('gate-supervise-road-observed'); + return Gate::allows('gate-supervise-road-observed',$this->roadObserved); } /** diff --git a/app/Services/Cartables/RoadObservationTableService.php b/app/Services/Cartables/RoadObservationTableService.php index e70bf2b9..504ea8e6 100644 --- a/app/Services/Cartables/RoadObservationTableService.php +++ b/app/Services/Cartables/RoadObservationTableService.php @@ -24,12 +24,12 @@ class RoadObservationTableService ]; - if ($user->hasPermissionTo('supervise-fast-react')) { + 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('supervise-fast-react-province')) + elseif ($user->hasPermissionTo('show-fast-react-province')) { if (is_null($user->province_id)) { @@ -53,6 +53,10 @@ class RoadObservationTableService { $user = auth()->user(); + if (is_null($user->edarate_shahri_id)) { + return $this->errorResponse('اداره‌ای برای شما در سامانه ثبت نشده است!'); + } + $fields = [ 'fk_RegisteredEventMessage', 'road_observeds.id', 'Title', 'road_observeds.created_at', 'lat', 'lng', 'FeatureTypeTitle', 'Description', 'MobileForSendEventSms', @@ -66,20 +70,9 @@ class RoadObservationTableService ->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); - if ($user->hasPermissionTo('show-fast-react-province')) { - if (is_null($user->province_id)) { - return $this->errorResponse('استانی برای شما در سامانه ثبت نشده است!'); - } - $query->where('rms_province_id', $user->province_id); - } elseif ($user->hasPermissionTo('show-fast-react-edarate-shahri')) { - if (is_null($user->edarate_shahri_id)) { - return $this->errorResponse('اداره‌ای برای شما در سامانه ثبت نشده است!'); - } - $query->where('edarate_shahri_id', $user->edarate_shahri_id); - } - return DataTableFacade::run( $query, $request, diff --git a/routes/v3.php b/routes/v3.php index d38b556f..f4e235f0 100644 --- a/routes/v3.php +++ b/routes/v3.php @@ -281,25 +281,29 @@ Route::prefix('road_observations') ->name('roadObservations.') ->controller(RoadObservationController::class) ->group(function () { - Route::get('/supervisor_index', 'supervisorIndex')->name('supervisorIndex')->middleware('permission:supervise-fast-react-province|supervise-fast-react'); + Route::get('/supervisor_index', 'supervisorIndex')->name('supervisorIndex')->middleware('permission:show-fast-react-province|show-fast-react'); Route::post('/verify/{road_observed}', 'verifyBySupervisor')->name('verifyBySupervisor'); - Route::get('/supervisor_report', 'supervisorCartableReport')->name('supervisorCartableReport'); - Route::get('/operator_index','operatorIndex')->name('operatorIndex')->middleware('permission:show-fast-react|show-fast-react-province'); - Route::get('/operator_report','operatorCartableReport')->name('operatorCartableReport'); + 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::post('/register/{roadObserved}', 'register') - ->middleware('permission:show-fast-react-edarate-shahri|show-fast-react-province|show-fast-react') + ->middleware('permission:show-fast-react-edarate-shahri') ->name('register'); 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')->name('referList'); + 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::get('/complaints_report', 'complaintsReport')->name('complaintsReport'); + + Route::get('/complaints_report', 'complaintsReport')->name('complaintsReport') + ->middleware('permission:show-fast-react-edarate-shahri|show-fast-react-province|show-fast-react'); });
تاریخ دریافت گزارش: {{ verta()->now()->format('Y/m/d H:i') }}
- @if ($fromDate == null) - گزارش کارتابل ارزیابی واکنش سریع - @else - گزارش کارتابل ارزیابی واکنش سریع از تاریخ - {{ verta($fromDate)->format('Y/n/j') }} - تا - تاریخ - {{ verta($toDate)->format('Y/n/j') }} - @endif + گزارش کارتابل ارزیابی واکنش سریع