diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index c5b6229b..263025f7 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -28,8 +28,8 @@ services: before_script: - apk update - - coman=$(ls && pwd) - - echo "'$coman'" + - command=$(ls && pwd) + - echo "'$command'" - cp .env.example .env - composer install - php artisan key:generate @@ -49,7 +49,7 @@ test: - sed -i "s/DB_PASSWORD=/DB_PASSWORD=$MYSQL_ROOT_PASSWORD/" .env.testing - cat .env.testing - php artisan key:generate --env=testing - - php artisan migrate --env=testing --force + - php artisan migrate --path=/database/old_migrations/ --path=database/migrations --env=testing --force - php artisan test rules: - if: $CI_PIPELINE_SOURCE == 'merge_request_event' @@ -71,21 +71,21 @@ test: when: always allow_failure: true -deploy: - stage: deploy - script: - - apt-get update && add --no-cache openssh-client - - chmod og-rwx $ID_RSA - - ssh -i $ID_RSA -o StrictHostKeyChecking=no $SERVER_USER@$SERVER_IP " - echo -e '$SHECAN_DNS' | sudo tee /etc/resolv.conf && - dns=\$(cat /etc/resolv.conf) && - echo \"\$dns\" && - cd $PROJECT_PATH && - git checkout $TARGET_BRANCH_NAME && - ssh -T git@gitlab.com && - git pull ssh-origin $TARGET_BRANCH_NAME && - echo -e '$DEFAULT_DNS' | sudo tee /etc/resolv.conf" - resource_group: develop_deploy - rules: - - if: '$CI_PIPELINE_SOURCE == "push" && $CI_COMMIT_REF_NAME == "develop"' +#deploy: +# stage: deploy +# script: +# - apt-get update && add --no-cache openssh-client +# - chmod og-rwx $ID_RSA +# - ssh -i $ID_RSA -o StrictHostKeyChecking=no $SERVER_USER@$SERVER_IP " +# echo -e '$SHECAN_DNS' | sudo tee /etc/resolv.conf && +# dns=\$(cat /etc/resolv.conf) && +# echo \"\$dns\" && +# cd $PROJECT_PATH && +# git checkout $TARGET_BRANCH_NAME && +# ssh -T git@gitlab.com && +# git pull ssh-origin $TARGET_BRANCH_NAME && +# echo -e '$DEFAULT_DNS' | sudo tee /etc/resolv.conf" +# resource_group: develop_deploy +# rules: +# - if: '$CI_PIPELINE_SOURCE == "push" && $CI_COMMIT_REF_NAME == "develop"' diff --git a/app/Console/Commands/RoadObservationProblems.php b/app/Console/Commands/RoadObservationProblems.php index 3706103e..69cbc074 100755 --- a/app/Console/Commands/RoadObservationProblems.php +++ b/app/Console/Commands/RoadObservationProblems.php @@ -129,8 +129,8 @@ class RoadObservationProblems extends Command 'rms_city_id' => NikarayanComplaints::mapCities((int) $value->fk_Town) ?? null, 'observed_way_id' => $nominatimService->get_way_id_from_nominatim($value->XGeo, $value->YGeo) ?? null, - 'province_id' => $city ? $city['province_id'] : null, - 'city_id' => $city ? $city['city_id'] : null, + 'province_id' => $cityModel->province()->first()->id, + 'city_id' => $cityModel->id, // 'handler_type' => EdarateShahri::class, 'edarate_shahri_id' => $cityModel->edarateShahri()->first()->id, 'province_fa' => (isset($city['province_id']) ? Province::find($city['province_id'])->name_fa : null), @@ -147,7 +147,7 @@ class RoadObservationProblems extends Command return $result; } echo 'done at: ' . date("Y-m-d H:i:s") . "\n"; - $this->info("{$affectedRows} row's affected"); + echo "{$affectedRows} row's affected"; return 0; } } diff --git a/app/Console/Kernel.php b/app/Console/Kernel.php index 6a2033c1..f1f2d616 100755 --- a/app/Console/Kernel.php +++ b/app/Console/Kernel.php @@ -26,17 +26,19 @@ class Kernel extends ConsoleKernel protected function schedule(Schedule $schedule) { $schedule->command('webservice:roadobserved') - ->everyFiveMinutes()->appendOutputTo(storage_path('logs/nikarayan.log')); + ->everyTenMinutes()->appendOutputTo(storage_path('logs/nikarayan.log')); $schedule->command('command:sendcontractsmsnotification') - // ->everyMinute()->appendOutputTo(storage_path('logs/contractSms.log')); ->dailyAt('10:00')->appendOutputTo(storage_path('logs/contractSms.log')); $schedule->command('reports:rms-summary') ->dailyAt('00:00')->appendOutputTo(storage_path('logs/report_summary.log')); $schedule->command("webservice:roadobserved --daily-mode") - ->dailyAt('00:15')->appendOutputTo(storage_path('logs/nikarayan.log')); + ->dailyAt('00:05')->appendOutputTo(storage_path('logs/nikarayan.log')); + + $schedule->command("webservice:roadobserved --daily-mode") + ->dailyAt('00:45')->appendOutputTo(storage_path('logs/nikarayan.log')); } /** diff --git a/app/Enums/MissionStates.php b/app/Enums/MissionStates.php new file mode 100644 index 00000000..b72a5637 --- /dev/null +++ b/app/Enums/MissionStates.php @@ -0,0 +1,27 @@ + 'درخواست ایجاد شد و در حال بررسی توسط واحد نقلیه است', + 2 => 'خودرو اختصاص داده شد و درخواست توسط واحد کنترل در حال بررسی است', + 3 => 'درخواست توسط واحد کنترل تایید شد و ماموریت آغاز می شود', + 4 => 'اتمام ماموریت', + 5 => 'عدم تخصیص خودرو توسط واحد نقلیه و بازگشت درخواست به کارتابل کاربر', + 6 => 'ماموریت لغو شد', + ]; + + return $mapArray[$state]; + } +} \ No newline at end of file diff --git a/app/Exports/V2/RoadObservation/PendingComplaintsExport.php b/app/Exports/V2/RoadObservation/PendingComplaintsExport.php index 46e766c0..94a5b586 100644 --- a/app/Exports/V2/RoadObservation/PendingComplaintsExport.php +++ b/app/Exports/V2/RoadObservation/PendingComplaintsExport.php @@ -38,10 +38,10 @@ class PendingComplaintsExport implements FromView, ShouldAutoSize, WithEvents, W return $query->where('road_observeds.province_id', $province_id); }) ->when(($fromDate && $toDate), function ($query) use ($fromDate, $toDate) { - return $query->whereBetween('road_observeds.created_at', [$fromDate, $toDate]); + return $query->whereBetween('road_observeds.StartTime_DateTime', [$fromDate, $toDate]); }) ->selectRaw('fk_RegisteredEventMessage, road_observeds.id, Title, FeatureTypeTitle, MobileForSendEventSms, - road_observeds.created_at, rms_last_activity, rms_last_activity_fa, status, + road_observeds.StartTime_DateTime, 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') ->orderBy('status') ->orderBy('road_observeds.id', 'desc') @@ -60,10 +60,10 @@ class PendingComplaintsExport implements FromView, ShouldAutoSize, WithEvents, W ->where('rms_status', 0) ->whereNotNull('road_observeds.province_id') ->when(($fromDate && $toDate), function ($query) use ($fromDate, $toDate) { - return $query->whereBetween('road_observeds.created_at', [$fromDate, $toDate]); + return $query->whereBetween('road_observeds.StartTime_DateTime', [$fromDate, $toDate]); }) ->selectRaw('fk_RegisteredEventMessage, road_observeds.id, Title, FeatureTypeTitle, MobileForSendEventSms, - road_observeds.created_at, rms_last_activity, rms_last_activity_fa, status, + road_observeds.StartTime_DateTime, 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') ->orderBy('status') ->orderBy('road_observeds.id', 'desc') @@ -81,10 +81,10 @@ class PendingComplaintsExport implements FromView, ShouldAutoSize, WithEvents, W ->where('rms_status', 0) ->whereNotNull('edarate_shahri_id') ->when(($fromDate && $toDate), function ($query) use ($fromDate, $toDate) { - return $query->whereBetween('road_observeds.created_at', [$fromDate, $toDate]); + return $query->whereBetween('road_observeds.StartTime_DateTime', [$fromDate, $toDate]); }) ->selectRaw('fk_RegisteredEventMessage, road_observeds.id, Title, FeatureTypeTitle, MobileForSendEventSms, - road_observeds.created_at, rms_last_activity, rms_last_activity_fa, status, + road_observeds.StartTime_DateTime, 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') ->orderBy('status') ->orderBy('road_observeds.id', 'desc') diff --git a/app/Exports/V3/RoadObservation/ComplaintsReport.php b/app/Exports/V3/RoadObservation/ComplaintsReport.php index e8012634..4484b4b0 100644 --- a/app/Exports/V3/RoadObservation/ComplaintsReport.php +++ b/app/Exports/V3/RoadObservation/ComplaintsReport.php @@ -61,7 +61,7 @@ class ComplaintsReport implements FromView, WithEvents, ShouldAutoSize, WithDraw $drawing2->setHeight(50); $drawing2->setOffsetX(5); $drawing2->setOffsetY(5); - $drawing2->setCoordinates('q1'); + $drawing2->setCoordinates('J1'); return [$drawing, $drawing2]; } } diff --git a/app/Http/Controllers/V3/Dashboard/AccidentReceiptController.php b/app/Http/Controllers/V3/Dashboard/Accident/AccidentReceiptController.php similarity index 91% rename from app/Http/Controllers/V3/Dashboard/AccidentReceiptController.php rename to app/Http/Controllers/V3/Dashboard/Accident/AccidentReceiptController.php index 3b314a2d..f4a5900b 100644 --- a/app/Http/Controllers/V3/Dashboard/AccidentReceiptController.php +++ b/app/Http/Controllers/V3/Dashboard/Accident/AccidentReceiptController.php @@ -1,10 +1,10 @@ where('id', '=', $request->city_id)->first(); $accidentData = [ + 'is_foreign' => $request->is_foreign, 'province_id' => $province->id, 'province_fa' => $province->name_fa, 'city_id' => $city->id, @@ -79,11 +80,8 @@ class AccidentReceiptController extends Controller 'accident_type_fa' => DailyAccidentSettings::query()->where('type', 'accident_type')->where('name', $request->accident_type)->first()->value, 'way_id' => $nominatimService->get_way_id_from_nominatim($request->lat, $request->lng), 'report_base' => $request->report_base, - 'police_file' => $request->report_base ? null : FileFacade::save($request->file('police_file'), 'receipts_files/'), 'police_serial' => $request->police_serial ?? null, 'police_file_date' => $request->police_file_date ?? null, - 'damage_picture1' => FileFacade::save($request->file('damage_picture1'), 'receipts_files/'), - 'damage_picture2' => FileFacade::save($request->file('damage_picture2'), 'receipts_files/'), 'status' => AccidentStates::BEDON_EGHDAM->value, 'status_fa' => AccidentStates::name(AccidentStates::BEDON_EGHDAM->value), ]; @@ -108,6 +106,10 @@ class AccidentReceiptController extends Controller $accidentData['sum'] = $sum; $accident = Accident::query()->create($accidentData); + $accident->damage_picture1 = FileFacade::save($request->file('damage_picture1'), "receipts_files/{$accident->id}"); + $accident->damage_picture2 = FileFacade::save($request->file('damage_picture2'), "receipts_files/{$accident->id}"); + $accident->police_file = $request->report_base ? null : FileFacade::save($request->file('police_file'), "receipts_files/{$accident->id}"); + $accident->save(); $accident->damages()->attach($damageData); @@ -130,6 +132,7 @@ class AccidentReceiptController extends Controller $city = City::query()->where('id', '=', $request->city_id)->first(); $accidentData = [ + 'is_foreign' => $request->is_foreign, 'province_id' => $province->id, 'province_fa' => $province->name_fa, 'city_id' => $city->id, @@ -156,8 +159,8 @@ class AccidentReceiptController extends Controller FileFacade::delete($accident->police_file, true); } - if (!$request->report_base && $request->has('police_file')) { - FileFacade::delete($accident->police_file, true); + if ($request->has('police_file')) { + if ($accident->police_file) {FileFacade::delete($accident->police_file, true);} $accidentData['police_file'] = FileFacade::save($request->file('police_file'), "receipts_files/{$accident->id}/"); } @@ -200,9 +203,14 @@ class AccidentReceiptController extends Controller return $this->successResponse(); } + /** + * @throws Throwable + */ public function destroy(Accident $accident): JsonResponse { - FileFacade::deleteDirectory('receipts_files/'.$accident->id); + throw_if($accident->status != AccidentStates::BEDON_EGHDAM->value, new ProhibitedAction('قابلیت حذف در این مرحله وجود ندارد')); + + FileFacade::deleteDirectory("receipts_files/{$accident->id}"); DB::transaction(function () use ($accident) { @@ -254,13 +262,14 @@ class AccidentReceiptController extends Controller return $this->successResponse(); } + /** + * @throws Throwable + */ public function submitInvoice(Accident $accident, PaymentService $paymentService): JsonResponse { $final_amount = $accident->sum - ($accident->deposit_insurance_amount + $accident->deposit_daghi_amount); - if ($final_amount < 0) { - return $this->errorResponse('error'); - } + throw_if($final_amount < 0, new ProhibitedAction('مبالغ داغی و بیمه از مبلغ کل بیشتر می باشد.')); $bill_code = $paymentService->invoiceBillApi($accident->driver_national_code, $final_amount); diff --git a/app/Http/Controllers/V3/Dashboard/Reports/AccidentReceiptReportController.php b/app/Http/Controllers/V3/Dashboard/Accident/AccidentReceiptReportController.php similarity index 97% rename from app/Http/Controllers/V3/Dashboard/Reports/AccidentReceiptReportController.php rename to app/Http/Controllers/V3/Dashboard/Accident/AccidentReceiptReportController.php index e9a29694..6669bfed 100644 --- a/app/Http/Controllers/V3/Dashboard/Reports/AccidentReceiptReportController.php +++ b/app/Http/Controllers/V3/Dashboard/Accident/AccidentReceiptReportController.php @@ -1,9 +1,9 @@ json($controlUnitService->datatable($request)); + } +} diff --git a/app/Http/Controllers/V3/Dashboard/Mission/DetailController.php b/app/Http/Controllers/V3/Dashboard/Mission/DetailController.php new file mode 100644 index 00000000..55ba3c14 --- /dev/null +++ b/app/Http/Controllers/V3/Dashboard/Mission/DetailController.php @@ -0,0 +1,24 @@ +successResponse($mission->machines()->get(['cmms_machines.id', 'cmms_machines.machine_code', 'cmms_machines.car_name', 'cmms_machines.plak_number'])); + } + + public function rahdaran(Mission $mission): JsonResponse + { + return $this->successResponse($mission->rahdaran()->get(['rahdaran.id', 'rahdaran.name', 'rahdaran.code'])); + } +} diff --git a/app/Http/Controllers/V3/Dashboard/Mission/RequestPortalController.php b/app/Http/Controllers/V3/Dashboard/Mission/RequestPortalController.php new file mode 100644 index 00000000..f8a1fcef --- /dev/null +++ b/app/Http/Controllers/V3/Dashboard/Mission/RequestPortalController.php @@ -0,0 +1,89 @@ +json($requestPortalService->datatable($request)); + } + + public function store(StoreRequest $request): JsonResponse + { + DB::transaction(function () use ($request) { + $user = auth()->user(); + $state = MissionStates::REQUEST_CREATED->value; + $mission = Mission::query()->create([ + 'user_id' => $user->id, + 'username' => $user->username, + 'province_id' => $user->province_id, + 'province_name' => $user->province_fa, + 'edare_shahri_id' => $user->edare_shahri_id ?? null, + 'edare_shahri_name' => $user->edare_shahri_name ?? null, + 'state_id' => $state, + 'state_name' => MissionStates::name($state), + 'requested_machines' => json_encode($request->requested_machines), + 'type' => $request->type, + 'start_date' => $request->start_date, + 'end_date' => $request->end_date, + 'request_date' => now(), + 'description' => $request->description, + 'end_point' => $request->end_point, + ]); + + $mission->rahdaran()->attach($request->rahdaran); + }); + + return $this->successResponse(); + } + + public function show(Mission $mission): JsonResponse + { + return $this->successResponse($mission); + } + + public function update(UpdateRequest $request,Mission $mission): JsonResponse + { + DB::transaction(function () use ($mission, $request) { + $state = MissionStates::REQUEST_CREATED->value; + $mission->update([ + 'state_id' =>$state, + 'state_name' => MissionStates::name($state), + 'requested_machines' => json_encode($request->requested_machines), + 'type' => $request->type, + 'start_date' => $request->start_date, + 'end_date' => $request->end_date, + 'request_date' => $request->request_date, + 'description' => $request->description, + 'end_point' => $request->end_point, + ]); + + $mission->rahdaran()->sync($request->rahdaran); + }); + + return $this->successResponse(); + } + + public function destroy(Mission $mission): JsonResponse + { + DB::transaction(function () use ($mission) { + $mission->rahdaran()->detach(); + $mission->delete(); + }); + return $this->successResponse(); + } +} diff --git a/app/Http/Controllers/V3/Dashboard/Mission/TransportationUnitController.php b/app/Http/Controllers/V3/Dashboard/Mission/TransportationUnitController.php new file mode 100644 index 00000000..4e14cae4 --- /dev/null +++ b/app/Http/Controllers/V3/Dashboard/Mission/TransportationUnitController.php @@ -0,0 +1,72 @@ +json($transportationUnitService->dataTable($request)); + } + + public function allocate(AllocateRequest $request, Mission $mission): JsonResponse + { + DB::transaction(function () use ($request, $mission) { + $mission->machines()->attach($request->machines); + + $mission->histories()->create([ + 'user_id' => auth()->user()->id, + 'previous_state_id' => $mission->state_id, + 'previous_state_name' => $mission->state_name + ]); + + $state = MissionStates::PENDING_CONFIRMATION->value; + $mission->update([ + 'state_id' => $state, + 'state_name' => MissionStates::name($state), + ]); + }); + + return $this->successResponse(); + } + + public function deallocate(DeallocateRequest $request, Mission $mission): JsonResponse + { + DB::transaction(function () use ($request, $mission) { + $mission->histories()->create([ + 'user_id' => auth()->user()->id, + 'previous_state_id' => $mission->state_id, + 'previous_state_name' => $mission->state_name, + 'user_description' => $request->description + ]); + + $state = MissionStates::REJECT_BY_TRANSPORTATION->value; + + $mission->update([ + 'state_id' => $state, + 'state_name' => MissionStates::name($state), + 'description' => $request->description + ]); + }); + + return $this->successResponse(); + } + + public function rahdaran(Mission $mission): JsonResponse + { + return $this->successResponse($mission->rahdaran()->get(['rahdaran.id', 'rahdaran.name', 'rahdaran.code'])); + } +} 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/Reports/SafetyAndPrivacyReportController.php b/app/Http/Controllers/V3/Dashboard/Reports/SafetyAndPrivacyReportController.php deleted file mode 100644 index 3346cdb7..00000000 --- a/app/Http/Controllers/V3/Dashboard/Reports/SafetyAndPrivacyReportController.php +++ /dev/null @@ -1,52 +0,0 @@ -countryActivity($request); - return $this->successResponse([ - 'activities' => $data, - 'provinces' => Province::all(['id', 'name_fa']) - ]); - } - - public function provinceActivity(Request $request, SafetyAndPrivacyTableService $safetyAndPrivacyTableService): JsonResponse - { - $data = $safetyAndPrivacyTableService->provinceActivity($request); - return $this->successResponse([ - 'activities' => $data, - 'edarateShahri' => EdarateShahri::query()->where('province_id', '=', $request->province_id)->get(['id', 'name_fa']), - ]); - } - - public function countryExcelActivity(Request $request, SafetyAndPrivacyTableService $safetyAndPrivacyTableService): BinaryFileResponse - { - $data = $safetyAndPrivacyTableService->countryActivity($request); - $name = 'گزارش از نگهداری حریم راه ' . verta()->now()->format('Y-m-d H-i') . '.xlsx'; - return Excel::download(new CountryActivityReport($data), $name); - } - - public function provinceExcelActivity(Request $request, SafetyAndPrivacyTableService $safetyAndPrivacyTableService): BinaryFileResponse - { - $data = $safetyAndPrivacyTableService->provinceActivity($request); - $name = 'گزارش از نگهداری حریم راه ' . verta()->now()->format('Y-m-d H-i') . '.xlsx'; - return Excel::download(new ProvinceActivityReport($data, $request), $name); - } -} diff --git a/app/Http/Controllers/V3/Dashboard/RoadObservationController.php b/app/Http/Controllers/V3/Dashboard/RoadObservation/OperatorController.php similarity index 64% rename from app/Http/Controllers/V3/Dashboard/RoadObservationController.php rename to app/Http/Controllers/V3/Dashboard/RoadObservation/OperatorController.php index 8cdd32c7..bd3033ee 100644 --- a/app/Http/Controllers/V3/Dashboard/RoadObservationController.php +++ b/app/Http/Controllers/V3/Dashboard/RoadObservation/OperatorController.php @@ -1,91 +1,61 @@ 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 + /** + * @throws Throwable + */ + 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 + /** + * @throws Throwable + */ + 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 +114,6 @@ class RoadObservationController extends Controller auth()->user()->addActivityComplete(1142); $nikarayanService->updateRoadObservedInfoByNikarayan($request, $roadObserved, json_encode($roadObservedHistoryData['new_files'])); - }); return $this->successResponse(); @@ -219,24 +188,26 @@ class RoadObservationController extends Controller { $province = Province::query()->find($request->province_id); - 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, - 'from_province' => $roadObserved->province_id, - 'to_province' => $province->id - ]); + DB::transaction(function () use ($roadObserved, $request, $province) { + 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, + 'from_province' => $roadObserved->province_id, + 'to_province' => $province->id + ]); - $roadObserved->update([ - 'edarate_shahri_id' => $request->edarate_shahri_id, - 'province_id' => $province->id, - 'province_fa' => $province->name_fa, - ]); + $roadObserved->update([ + 'edarate_shahri_id' => $request->edarate_shahri_id, + 'province_id' => $province->id, + 'province_fa' => $province->name_fa, + ]); - auth()->user()->addActivityComplete(1037); + auth()->user()->addActivityComplete(1037); + }); return $this->successResponse(); } @@ -262,49 +233,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..02e48f63 --- /dev/null +++ b/app/Http/Controllers/V3/Dashboard/RoadObservation/SupervisorController.php @@ -0,0 +1,92 @@ +json($supervisorService->index($request)); + } + + public function verify(VerifyBySupervisorRequest $request, RoadObserved $roadObserved): JsonResponse + { + $statusFa = $request->verify == 1 ? 'تایید شده' : 'عدم تایید'; + + DB::transaction(function () use ($request, $statusFa, $roadObserved) { + $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, true); + } + + if ($roadObserved->image_after) { + FileFacade::delete($roadObserved->image_after, true); + } + + DB::transaction(function () use ($request, $roadObserved) { + $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/Http/Controllers/V3/Dashboard/SafetyAndPrivacy/OperatorController.php b/app/Http/Controllers/V3/Dashboard/SafetyAndPrivacy/OperatorController.php index b6726fe4..995233c1 100644 --- a/app/Http/Controllers/V3/Dashboard/SafetyAndPrivacy/OperatorController.php +++ b/app/Http/Controllers/V3/Dashboard/SafetyAndPrivacy/OperatorController.php @@ -17,7 +17,7 @@ use App\Http\Requests\V3\SafetyAndPrivacy\UpdateRequest; use App\Http\Traits\ApiResponse; use App\Models\InfoItem; use App\Models\SafetyAndPrivacy; -use App\Services\Cartables\SafetyAndPrivacyTableService; +use App\Services\Cartables\SafetyAndPrivacy\OperatorService; use App\Services\NominatimService; use Illuminate\Http\JsonResponse; use Illuminate\Http\Request; @@ -34,18 +34,18 @@ class OperatorController extends Controller /** * @throws Throwable */ - public function index(Request $request, SafetyAndPrivacyTableService $safetyAndPrivacyTableService): JsonResponse + public function index(Request $request, OperatorService $operatorService): JsonResponse { - return response()->json($safetyAndPrivacyTableService->operatorDatatable($request)); + return response()->json($operatorService->datatable($request)); } /** * @throws Throwable */ - public function excelReport(Request $request, SafetyAndPrivacyTableService $safetyAndPrivacyTableService): BinaryFileResponse + public function excelReport(Request $request, OperatorService $operatorService): BinaryFileResponse { $name = 'گزارش از نگهداری حریم راه ' . verta()->now()->format('Y-m-d H-i') . '.xlsx'; - $data = $safetyAndPrivacyTableService->operatorDatatable($request); + $data = $operatorService->datatable($request); return Excel::download(new OperatorCartableReport($data['data']), $name); } diff --git a/app/Http/Controllers/V3/Dashboard/SafetyAndPrivacy/OperatorReportController.php b/app/Http/Controllers/V3/Dashboard/SafetyAndPrivacy/OperatorReportController.php index 31b41c52..0e3c5e78 100644 --- a/app/Http/Controllers/V3/Dashboard/SafetyAndPrivacy/OperatorReportController.php +++ b/app/Http/Controllers/V3/Dashboard/SafetyAndPrivacy/OperatorReportController.php @@ -8,6 +8,7 @@ use App\Http\Controllers\Controller; use App\Http\Traits\ApiResponse; use App\Models\EdarateShahri; use App\Models\Province; +use App\Services\Cartables\SafetyAndPrivacy\OperatorService; use App\Services\Cartables\SafetyAndPrivacyTableService; use Illuminate\Http\JsonResponse; use Illuminate\Http\Request; @@ -18,34 +19,34 @@ class OperatorReportController extends Controller { use ApiResponse; - public function countryActivity(Request $request, SafetyAndPrivacyTableService $safetyAndPrivacyTableService): JsonResponse + public function countryActivity(Request $request, OperatorService $operatorService): JsonResponse { - $data = $safetyAndPrivacyTableService->countryActivity($request); + $data = $operatorService->countryActivity($request); return $this->successResponse([ 'activities' => $data, 'provinces' => Province::all(['id', 'name_fa']) ]); } - public function provinceActivity(Request $request, SafetyAndPrivacyTableService $safetyAndPrivacyTableService): JsonResponse + public function provinceActivity(Request $request, OperatorService $operatorService): JsonResponse { - $data = $safetyAndPrivacyTableService->provinceActivity($request); + $data = $operatorService->provinceActivity($request); return $this->successResponse([ 'activities' => $data, 'edarateShahri' => EdarateShahri::query()->where('province_id', '=', $request->province_id)->get(['id', 'name_fa']), ]); } - public function countryExcelActivity(Request $request, SafetyAndPrivacyTableService $safetyAndPrivacyTableService): BinaryFileResponse + public function countryExcelActivity(Request $request, OperatorService $operatorService): BinaryFileResponse { - $data = $safetyAndPrivacyTableService->countryActivity($request); + $data = $operatorService->countryActivity($request); $name = 'گزارش از نگهداری حریم راه ' . verta()->now()->format('Y-m-d H-i') . '.xlsx'; return Excel::download(new CountryActivityReport($data), $name); } - public function provinceExcelActivity(Request $request, SafetyAndPrivacyTableService $safetyAndPrivacyTableService): BinaryFileResponse + public function provinceExcelActivity(Request $request, OperatorService $operatorService): BinaryFileResponse { - $data = $safetyAndPrivacyTableService->provinceActivity($request); + $data = $operatorService->provinceActivity($request); $name = 'گزارش از نگهداری حریم راه ' . verta()->now()->format('Y-m-d H-i') . '.xlsx'; return Excel::download(new ProvinceActivityReport($data, $request), $name); } diff --git a/app/Http/Controllers/V3/Dashboard/SafetyAndPrivacy/SupervisorController.php b/app/Http/Controllers/V3/Dashboard/SafetyAndPrivacy/SupervisorController.php index fc026166..0cd984c5 100644 --- a/app/Http/Controllers/V3/Dashboard/SafetyAndPrivacy/SupervisorController.php +++ b/app/Http/Controllers/V3/Dashboard/SafetyAndPrivacy/SupervisorController.php @@ -8,6 +8,7 @@ use App\Http\Controllers\Controller; use App\Http\Requests\V3\SafetyAndPrivacy\RejectRequest; use App\Http\Traits\ApiResponse; use App\Models\SafetyAndPrivacy; +use App\Services\Cartables\SafetyAndPrivacy\SupervisorService; use App\Services\Cartables\SafetyAndPrivacyTableService; use Illuminate\Http\JsonResponse; use Illuminate\Http\Request; @@ -22,18 +23,18 @@ class SupervisorController extends Controller /** * @throws Throwable */ - public function index(Request $request, SafetyAndPrivacyTableService $safetyAndPrivacyTableService): JsonResponse + public function index(Request $request, SupervisorService $supervisorService): JsonResponse { - return response()->json($safetyAndPrivacyTableService->supervisorDataTable($request)); + return response()->json($supervisorService->dataTable($request)); } /** * @throws Throwable */ - public function excelReport(Request $request, SafetyAndPrivacyTableService $safetyAndPrivacyTableService): BinaryFileResponse + public function excelReport(Request $request, SupervisorService $supervisorService): BinaryFileResponse { $name = 'گزارش از نگهداری حریم راه ' . verta()->now()->format('Y-m-d H-i') . '.xlsx'; - $data = $safetyAndPrivacyTableService->supervisorDataTable($request); + $data = $supervisorService->dataTable($request); return Excel::download(new SupervisorCartableReport($data['data']), $name); } diff --git a/app/Http/Controllers/V3/Dashboard/SafetyAndPrivacy/SupervisorReportController.php b/app/Http/Controllers/V3/Dashboard/SafetyAndPrivacy/SupervisorReportController.php index 60b3ab87..601a0384 100644 --- a/app/Http/Controllers/V3/Dashboard/SafetyAndPrivacy/SupervisorReportController.php +++ b/app/Http/Controllers/V3/Dashboard/SafetyAndPrivacy/SupervisorReportController.php @@ -21,36 +21,4 @@ use Symfony\Component\HttpFoundation\BinaryFileResponse; class SupervisorReportController extends Controller { use ApiResponse; - - public function countryActivity(Request $request, SafetyAndPrivacyTableService $safetyAndPrivacyTableService): JsonResponse - { - $data = $safetyAndPrivacyTableService->countryActivity($request); - return $this->successResponse([ - 'activities' => $data, - 'provinces' => Province::all(['id', 'name_fa']) - ]); - } - - public function provinceActivity(Request $request, SafetyAndPrivacyTableService $safetyAndPrivacyTableService): JsonResponse - { - $data = $safetyAndPrivacyTableService->provinceActivity($request); - return $this->successResponse([ - 'activities' => $data, - 'edarateShahri' => EdarateShahri::query()->where('province_id', '=', $request->province_id)->get(['id', 'name_fa']), - ]); - } - - public function countryExcelActivity(Request $request, SafetyAndPrivacyTableService $safetyAndPrivacyTableService): BinaryFileResponse - { - $data = $safetyAndPrivacyTableService->countryActivity($request); - $name = 'گزارش از نگهداری حریم راه ' . verta()->now()->format('Y-m-d H-i') . '.xlsx'; - return Excel::download(new CountryActivityReport($data), $name); - } - - public function provinceExcelActivity(Request $request, SafetyAndPrivacyTableService $safetyAndPrivacyTableService): BinaryFileResponse - { - $data = $safetyAndPrivacyTableService->provinceActivity($request); - $name = 'گزارش از نگهداری حریم راه ' . verta()->now()->format('Y-m-d H-i') . '.xlsx'; - return Excel::download(new ProvinceActivityReport($data, $request), $name); - } } diff --git a/app/Http/Controllers/V3/Dashboard/SafetyAndPrivacyController.php b/app/Http/Controllers/V3/Dashboard/SafetyAndPrivacyController.php deleted file mode 100644 index 06b03021..00000000 --- a/app/Http/Controllers/V3/Dashboard/SafetyAndPrivacyController.php +++ /dev/null @@ -1,269 +0,0 @@ -json($safetyAndPrivacyTableService->operatorDatatable($request)); - } - - /** - * @throws Throwable - */ - public function operatorExcelReport(Request $request, SafetyAndPrivacyTableService $safetyAndPrivacyTableService): BinaryFileResponse - { - $name = 'گزارش از نگهداری حریم راه ' . verta()->now()->format('Y-m-d H-i') . '.xlsx'; - $data = $safetyAndPrivacyTableService->operatorDatatable($request); - return Excel::download(new OperatorCartableReport($data['data']), $name); - } - - public function firstStepStore(FirstStepStoreRequest $request, NominatimService $nominatimService): JsonResponse - { - $user = auth()->user(); - - $coordinates = explode(',', $request->point); - $item = InfoItem::query() - ->where('id', $request->info_id) - ->where('item', 17) - ->firstOrFail(); - - DB::transaction(function () use ($request, $coordinates, $item, $nominatimService, $user) - { - $step = SafetyAndPrivacySteps::SHENASAEI->value; - $safety_and_privacy = SafetyAndPrivacy::query()->create([ - 'lat' => $coordinates[0], - 'lon' => $coordinates[1], - 'operator_id' => $user->id, - 'operator_name' => $user->name, - 'province_id' => $user->province_id, - 'province_fa' => $user->province_fa, - 'info_id' => $item->id, - 'info_fa' => $item->sub_item_str, - 'city_id' => $user->city_id, - 'city_fa' => $user->city_fa, - 'activity_date_time' => $request->activity_date." ".$request->activity_time, - 'edare_shahri_id' => $user->edarate_shahri_id, - 'edare_shahri_name' => $user->edarate_shahri_name, - 'way_id' => $nominatimService->get_way_id_from_nominatim($coordinates[0], $coordinates[1]), - 'axis_type_id' => $request->axis_type_id, - 'axis_type_name' => AxisTypes::name($request->axis_type_id), - 'step' => $step, - 'step_fa' => SafetyAndPrivacySteps::name($step), - 'is_finished' => false, - ]); - - $safety_and_privacy->recognize_picture = $request->has('recognize_picture') ? - FileFacade::save($request->recognize_picture, "safety_and_privacy/{$safety_and_privacy->id}") : - null; - $safety_and_privacy->save(); - - $user->addActivityComplete(1134); - }); - - return $this->successResponse(); - } - - public function secondStepStore(SafetyAndPrivacy $safetyAndPrivacy, SecondStepStoreRequest $request): JsonResponse - { - $user = auth()->user(); - - DB::transaction(function () use ($request, $safetyAndPrivacy, $user) { - - $need_judiciary = $request->need_judiciary; - - $judiciary_document = []; - if ($need_judiciary) { - foreach ($request->judiciary_document as $index => $file) { - $judiciary_document[] = FileFacade::save( - $file, - "safety_and_privacy/{$safetyAndPrivacy->id}/judiciary_document" - ); - } - } - - $step = SafetyAndPrivacySteps::MOSTANADAT_GAZAEI->value; - $safetyAndPrivacy->update([ - 'step' => $step, - 'step_fa' => SafetyAndPrivacySteps::name($step), - 'judiciary_document' => $need_judiciary ? serialize($judiciary_document) : null, - 'judiciary_document_upload_date' => $need_judiciary ? now() : null, - 'need_judiciary' => $need_judiciary, - ]); - - $user->addActivityComplete(1135); - }); - - return $this->successResponse(); - } - - public function thirdStepStore(SafetyAndPrivacy $safetyAndPrivacy, ThirdStepStoreRequest $request): JsonResponse - { - $user = auth()->user(); - - DB::transaction(function () use ($request, $safetyAndPrivacy, $user) { - $step = SafetyAndPrivacySteps::BARKHORD->value; - $safetyAndPrivacy->update([ - 'step' => $step, - 'step_fa' => SafetyAndPrivacySteps::name($step), - 'action_picture' => FileFacade::save($request->action_picture, "safety_and_privacy/{$safetyAndPrivacy->id}/action_picture"), - 'action_picture_document_upload_date' => now(), - 'action_date' => $request->action_date, - 'is_finished' => true, - 'final_description' => 'پیام سیستمی : این عملیات پس از طی تمامی گام ها خاتمه یافت' - ]); - - $user->addActivityComplete(1136); - }); - - return $this->successResponse(); - } - - public function update(SafetyAndPrivacy $safetyAndPrivacy, UpdateRequest $request): JsonResponse - { - DB::transaction(function () use ($request, $safetyAndPrivacy) { - $safetyAndPrivacy->update([ - 'axis_type_id' => $request->axis_type_id, - 'axis_type_name' => AxisTypes::name($request->axis_type_id), - ]); - - auth()->user()->addActivityComplete(1168); - }); - - return $this->successResponse(); - } - - public function show(SafetyAndPrivacy $safetyAndPrivacy): JsonResponse - { - return $this->successResponse($safetyAndPrivacy); - } - - public function destroy(SafetyAndPrivacy $safetyAndPrivacy): JsonResponse - { - FileFacade::deleteDirectory("safety_and_privacy/{$safetyAndPrivacy->id}"); - - DB::transaction(function () use ($safetyAndPrivacy) - { - auth()->user()->addActivityComplete(1155); - $safetyAndPrivacy->delete(); - }); - - return $this->successResponse(); - } - - public function deserialize(SafetyAndPrivacy $safetyAndPrivacy): JsonResponse - { - $judiciaries = $safetyAndPrivacy->judiciary_document ? unserialize($safetyAndPrivacy->judiciary_document) : []; - - $result = []; - - foreach ($judiciaries as $judiciary) { - $result[] = Storage::disk('public')->url($judiciary); - } - - return $this->successResponse($result); - } - - public function subItems(): JsonResponse - { - return $this->successResponse(InfoItem::query() - ->where('item', '=', 17) - ->select('id', 'item', 'item_str', 'sub_item_str as name', 'sub_item_unit as unit', 'needs_image', 'needs_end_point', 'sub_item') - ->get()); - } - - public function map(Request $request): JsonResponse - { - return response()->json(DataTableFacade::run( - SafetyAndPrivacy::query(), - $request, - allowedFilters: ['*'], - allowedSortings: ['*'], - allowedSelects: ['id', 'lat', 'lon', 'step'] - )); - } - - public function confirm(SafetyAndPrivacy $safetyAndPrivacy): JsonResponse - { - $status_id = SafetyAndPrivacyStatus::CONFIRM->value; - - $safetyAndPrivacy->update([ - 'status' => $status_id, - 'status_fa' => SafetyAndPrivacyStatus::name($status_id), - ]); - - return $this->successResponse(); - } - - public function reject(RejectRequest $request, SafetyAndPrivacy $safetyAndPrivacy): JsonResponse - { - $status_id = SafetyAndPrivacyStatus::REJECT->value; - - $safetyAndPrivacy->update([ - 'status' => $status_id, - 'status_fa' => SafetyAndPrivacyStatus::name($status_id), - 'supervisor_description' => $request->supervisor_description - ]); - - return $this->successResponse(); - } - - public function finish(FinishRequest $request, SafetyAndPrivacy $safetyAndPrivacy): JsonResponse - { - $status_id = SafetyAndPrivacyStatus::PENDING->value; - - $safetyAndPrivacy->update([ - 'is_finished' => 1, - 'final_description' => $request->final_description, - 'status' => $status_id, - 'status_fa' => SafetyAndPrivacyStatus::name($status_id), - ]); - - return $this->successResponse(); - } - - public function supervisorIndex(Request $request, SafetyAndPrivacyTableService $safetyAndPrivacyTableService): JsonResponse - { - return response()->json($safetyAndPrivacyTableService->supervisorDataTable($request)); - } - - public function supervisorExcelReport(Request $request, SafetyAndPrivacyTableService $safetyAndPrivacyTableService): BinaryFileResponse - { - $name = 'گزارش از نگهداری حریم راه ' . verta()->now()->format('Y-m-d H-i') . '.xlsx'; - $data = $safetyAndPrivacyTableService->supervisorDataTable($request); - return Excel::download(new SupervisorCartableReport($data['data']), $name); - } -} diff --git a/app/Http/Controllers/V3/NotificationController.php b/app/Http/Controllers/V3/NotificationController.php index f5d3bb82..293a79b3 100644 --- a/app/Http/Controllers/V3/NotificationController.php +++ b/app/Http/Controllers/V3/NotificationController.php @@ -148,7 +148,9 @@ class NotificationController extends Controller ['status', '=', 0] ])->count(); - $road_observations['complaint_cnt'] = RoadObserved::query()->where('rms_status', '=', 0)->count(); + $road_observations['complaint_cnt'] = RoadObserved::query()->where('rms_status', '=', 0) + ->whereNotNull('edarate_shahri_id') + ->count(); } elseif ($user->hasPermissionTo('show-fast-react-province')) { throw_if(is_null($user->province_id), new ProhibitedAction('استانی برای شما در سامانه ثبت نشده است!')); diff --git a/app/Http/Kernel.php b/app/Http/Kernel.php index 04705bf0..756d3797 100644 --- a/app/Http/Kernel.php +++ b/app/Http/Kernel.php @@ -78,6 +78,7 @@ class Kernel extends HttpKernel 'permission' => \Spatie\Permission\Middlewares\PermissionMiddleware::class, 'role_or_permission' => \Spatie\Permission\Middlewares\RoleOrPermissionMiddleware::class, 'validate-store-access' => \App\Http\Middleware\ValidateStoreAccess::class, + 'check-axis-type' => \App\Http\Middleware\CheckAxisTypeMiddleware::class, ]; /** diff --git a/app/Http/Middleware/CheckAxisTypeMiddleware.php b/app/Http/Middleware/CheckAxisTypeMiddleware.php new file mode 100644 index 00000000..6c50a26b --- /dev/null +++ b/app/Http/Middleware/CheckAxisTypeMiddleware.php @@ -0,0 +1,33 @@ +route('safetyAndPrivacy'); + + if (($s->step == 3 || $s->step == 2) && is_null($s->axis_type_id)) + { + throw new ProhibitedAction('ابتدا نوع محور را مشخص کنید'); + } + + return $next($request); + } +} diff --git a/app/Http/Middleware/ValidateShowAccess.php b/app/Http/Middleware/ValidateShowAccess.php new file mode 100644 index 00000000..e0868ca6 --- /dev/null +++ b/app/Http/Middleware/ValidateShowAccess.php @@ -0,0 +1,32 @@ +province_id), + new ProhibitedAction('استانی برای شما در سامانه ثبت نشده است!')); + + throw_if(is_null($user->edarate_shahri_id), + new ProhibitedAction('اداره شهری برای شما در سامانه ثبت نشده است!')); + + return $next($request); + } +} diff --git a/app/Http/Requests/V3/AccidentReceipt/ConfirmPaymentInfoRequest.php b/app/Http/Requests/V3/AccidentReceipt/ConfirmPaymentInfoRequest.php index 3b079953..0bbed211 100644 --- a/app/Http/Requests/V3/AccidentReceipt/ConfirmPaymentInfoRequest.php +++ b/app/Http/Requests/V3/AccidentReceipt/ConfirmPaymentInfoRequest.php @@ -2,6 +2,8 @@ namespace App\Http\Requests\V3\AccidentReceipt; +use App\Enums\AccidentStates; +use App\Models\Accident; use Illuminate\Foundation\Http\FormRequest; class ConfirmPaymentInfoRequest extends FormRequest @@ -11,7 +13,7 @@ class ConfirmPaymentInfoRequest extends FormRequest */ public function authorize(): bool { - return true; + return $this->accident->status === AccidentStates::SODOR_NAME_BIME_VA_DAGHI->value; } /** diff --git a/app/Http/Requests/V3/AccidentReceipt/StoreRequest.php b/app/Http/Requests/V3/AccidentReceipt/StoreRequest.php index 5b7f34bf..f3fe71dd 100644 --- a/app/Http/Requests/V3/AccidentReceipt/StoreRequest.php +++ b/app/Http/Requests/V3/AccidentReceipt/StoreRequest.php @@ -24,13 +24,14 @@ class StoreRequest extends FormRequest public function rules(): array { return [ + 'is_foreign' => 'required|boolean', 'province_id' => 'required|integer|exists:provinces,id', 'city_id' => 'required|integer|exists:cities,id', 'axis_name' => 'required|string', - 'driver_name' => 'required|string', - 'plaque' => 'required|string', - 'driver_national_code' => 'required|string', - 'driver_phone_number' => 'required|string', + 'driver_name' => 'required_if:is_foreign,0|string', + 'plaque' => 'required_if:is_foreign,0|string', + 'driver_national_code' => 'required_if:is_foreign,0|string', + 'driver_phone_number' => 'required_if:is_foreign,0|string', 'lat' => 'required|numeric', 'lng' => 'required|numeric', 'accident_type' => 'required|integer', diff --git a/app/Http/Requests/V3/AccidentReceipt/UpdateRequest.php b/app/Http/Requests/V3/AccidentReceipt/UpdateRequest.php index 3160896d..134bb4a0 100644 --- a/app/Http/Requests/V3/AccidentReceipt/UpdateRequest.php +++ b/app/Http/Requests/V3/AccidentReceipt/UpdateRequest.php @@ -2,6 +2,7 @@ namespace App\Http\Requests\V3\AccidentReceipt; +use App\Enums\AccidentStates; use Illuminate\Foundation\Http\FormRequest; class UpdateRequest extends FormRequest @@ -11,7 +12,7 @@ class UpdateRequest extends FormRequest */ public function authorize(): bool { - return true; + return $this->accident->status === AccidentStates::BEDON_EGHDAM->value; } /** @@ -22,13 +23,14 @@ class UpdateRequest extends FormRequest public function rules(): array { return [ + 'is_foreign' => 'required|boolean', 'province_id' => 'required|integer|exists:provinces,id', 'city_id' => 'required|integer|exists:cities,id', 'axis_name' => 'required|string', - 'driver_name' => 'required|string', - 'plaque' => 'required|string', - 'driver_national_code' => 'required|string', - 'driver_phone_number' => 'required|string', + 'driver_name' => 'required_if:is_foreign,0|string', + 'plaque' => 'required_if:is_foreign,0|string', + 'driver_national_code' => 'required_if:is_foreign,0|string', + 'driver_phone_number' => 'required_if:is_foreign,0|string', 'lat' => 'required|numeric', 'lng' => 'required|numeric', 'accident_type' => 'required|integer', diff --git a/app/Http/Requests/V3/Mission/RequestPortal/StoreRequest.php b/app/Http/Requests/V3/Mission/RequestPortal/StoreRequest.php new file mode 100644 index 00000000..d4927d28 --- /dev/null +++ b/app/Http/Requests/V3/Mission/RequestPortal/StoreRequest.php @@ -0,0 +1,36 @@ +|string> + */ + public function rules(): array + { + return [ + 'rahdaran' => 'required|array', + 'rahdaran.*' => 'exists:rahdaran,id', + 'requested_machines' => 'required|array', + 'type' => 'required|string|max:50', + 'start_date' => 'required|date', + 'end_date' => 'required|date', + 'request_date' => 'required|date', + 'description' => 'string', + 'end_point' => 'required|string', + ]; + } +} diff --git a/app/Http/Requests/V3/Mission/RequestPortal/UpdateRequest.php b/app/Http/Requests/V3/Mission/RequestPortal/UpdateRequest.php new file mode 100644 index 00000000..be6eaee5 --- /dev/null +++ b/app/Http/Requests/V3/Mission/RequestPortal/UpdateRequest.php @@ -0,0 +1,37 @@ +mission->user_id === auth()->user()->id && $this->mission->state_id == MissionStates::REJECT_BY_TRANSPORTATION->value; + } + + /** + * Get the validation rules that apply to the request. + * + * @return array|string> + */ + public function rules(): array + { + return [ + 'rahdaran' => 'required|array', + 'rahdaran.*' => 'exists:rahdaran,id', + 'requested_machines' => 'required|array', + 'type' => 'required|string|max:50', + 'start_date' => 'required|date', + 'end_date' => 'required|date', + 'request_date' => 'required|date', + 'description' => 'string', + 'end_point' => 'required|string', + ]; + } +} diff --git a/app/Http/Requests/V3/Mission/TransportaionUnit/AllocateRequest.php b/app/Http/Requests/V3/Mission/TransportaionUnit/AllocateRequest.php new file mode 100644 index 00000000..5cff54a5 --- /dev/null +++ b/app/Http/Requests/V3/Mission/TransportaionUnit/AllocateRequest.php @@ -0,0 +1,30 @@ +mission->edare_shahri_id == auth()->user()->edarate_shahri_id && $this->mission->state_id == MissionStates::REQUEST_CREATED->value; + } + + /** + * Get the validation rules that apply to the request. + * + * @return array|string> + */ + public function rules(): array + { + return [ + 'machines' => 'required|array', + 'machines.*' => 'required|integer|exists:cmms_machines,id', + ]; + } +} diff --git a/app/Http/Requests/V3/Mission/TransportaionUnit/DeallocateRequest.php b/app/Http/Requests/V3/Mission/TransportaionUnit/DeallocateRequest.php new file mode 100644 index 00000000..28074809 --- /dev/null +++ b/app/Http/Requests/V3/Mission/TransportaionUnit/DeallocateRequest.php @@ -0,0 +1,29 @@ +mission->edare_shahri_id == auth()->user()->edarate_shahri_id && $this->mission->state_id == MissionStates::REQUEST_CREATED->value; + } + + /** + * Get the validation rules that apply to the request. + * + * @return array|string> + */ + public function rules(): array + { + return [ + 'description' => 'string', + ]; + } +} diff --git a/app/Models/Mission.php b/app/Models/Mission.php new file mode 100644 index 00000000..3f169f16 --- /dev/null +++ b/app/Models/Mission.php @@ -0,0 +1,63 @@ + json_decode($value) + ); + } + + public function histories(): HasMany + { + return $this->hasMany(MissionHistory::class); + } + + public function roadItems(): MorphToMany + { + return $this->morphedByMany(RoadItemsProject::class, 'missionable'); + } + + public function roadPatrols(): MorphToMany + { + return $this->morphedByMany(RoadPatrol::class, 'missionable'); + } + + public function roadObserveds(): MorphToMany + { + return $this->morphedByMany(RoadObserved::class, 'missionable'); + } + + public function machines(): MorphToMany + { + return $this->morphToMany(CMMSMachine::class, + 'machinable', + 'machinables', + 'machinable_id', + 'machine_id' + ); + } + + public function rahdaran(): MorphToMany + { + return $this->morphToMany(Rahdaran::class, + 'rahdarable', + 'rahdarables', + 'rahdarable_id', + 'rahdar_id', + ); + } +} diff --git a/app/Models/MissionHistory.php b/app/Models/MissionHistory.php new file mode 100644 index 00000000..6683b063 --- /dev/null +++ b/app/Models/MissionHistory.php @@ -0,0 +1,13 @@ +morphToMany(Mission::class, + 'missionable', + 'missionables', + 'missionable_id', + 'mission_id', + ); + } } diff --git a/app/Models/RoadObserved.php b/app/Models/RoadObserved.php index ce30a7a2..16d30d16 100644 --- a/app/Models/RoadObserved.php +++ b/app/Models/RoadObserved.php @@ -5,6 +5,7 @@ namespace App\Models; use Illuminate\Database\Eloquent\Casts\Attribute; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; +use Illuminate\Database\Eloquent\Relations\MorphToMany; use Illuminate\Support\Facades\Storage; class RoadObserved extends Model @@ -124,4 +125,14 @@ class RoadObserved extends Model : Storage::disk('public')->url($value)) ); } + + public function missions(): MorphToMany + { + return $this->morphToMany(Mission::class, + 'missionable', + 'missionables', + 'missionable_id', + 'mission_id', + ); + } } diff --git a/app/Models/RoadPatrol.php b/app/Models/RoadPatrol.php index 19ff01bd..819467f2 100644 --- a/app/Models/RoadPatrol.php +++ b/app/Models/RoadPatrol.php @@ -45,4 +45,14 @@ class RoadPatrol extends Model 'rahdar_id', ); } + + public function missions(): MorphToMany + { + return $this->morphToMany(Mission::class, + 'missionable', + 'missionables', + 'missionable_id', + 'mission_id', + ); + } } diff --git a/app/Services/Cartables/AccidentReceiptTableService.php b/app/Services/Cartables/AccidentReceiptTableService.php index 4f251709..69ab80d3 100644 --- a/app/Services/Cartables/AccidentReceiptTableService.php +++ b/app/Services/Cartables/AccidentReceiptTableService.php @@ -46,6 +46,9 @@ class AccidentReceiptTableService "کشوری" as province_fa, -1 as province_id, COUNT(id) AS tedade, + COUNT(CASE WHEN STATUS =0 THEN 1 END ) AS egdam, + COUNT(CASE WHEN STATUS IN (1,2,3,4) THEN 1 END) AS pardakht, + COUNT(CASE WHEN STATUS =5 THEN 1 END ) AS khatm, COUNT(CASE WHEN report_base = 0 THEN 1 END) AS police_rah, COUNT(CASE WHEN report_base = 1 THEN 1 END) AS gozaresh_gasht, SUM(`sum`) AS kol_sabt_shode, @@ -60,6 +63,9 @@ class AccidentReceiptTableService province_fa, province_id, COUNT(id) AS tedade, + COUNT(CASE WHEN STATUS =0 THEN 1 END ) AS egdam, + COUNT(CASE WHEN STATUS IN (1,2,3,4) THEN 1 END) AS pardakht, + COUNT(CASE WHEN STATUS =5 THEN 1 END ) AS khatm, COUNT(CASE WHEN report_base = 0 THEN 1 END) AS police_rah, COUNT(CASE WHEN report_base = 1 THEN 1 END) AS gozaresh_gasht, SUM(`sum`) AS kol_sabt_shode, @@ -86,7 +92,10 @@ class AccidentReceiptTableService 'SELECT "استانی" as city_fa, -1 as city_id, - COUNT(id) AS tedade, + COUNT(id) AS tedade, + COUNT(CASE WHEN STATUS =0 THEN 1 END ) AS egdam, + COUNT(CASE WHEN STATUS IN (1,2,3,4) THEN 1 END) AS pardakht, + COUNT(CASE WHEN STATUS =5 THEN 1 END ) AS khatm, COUNT(CASE WHEN report_base = 0 THEN 1 END) AS police_rah, COUNT(CASE WHEN report_base = 1 THEN 1 END) AS gozaresh_gasht, SUM(`sum`) AS kol_sabt_shode, @@ -100,7 +109,10 @@ class AccidentReceiptTableService SELECT city_fa, city_id, - COUNT(id) AS tedade, + COUNT(id) AS tedade, + COUNT(CASE WHEN STATUS =0 THEN 1 END ) AS egdam, + COUNT(CASE WHEN STATUS IN (1,2,3,4) THEN 1 END) AS pardakht, + COUNT(CASE WHEN STATUS =5 THEN 1 END ) AS khatm, COUNT(CASE WHEN report_base = 0 THEN 1 END) AS police_rah, COUNT(CASE WHEN report_base = 1 THEN 1 END) AS gozaresh_gasht, SUM(`sum`) AS kol_sabt_shode, diff --git a/app/Services/Cartables/Mission/ControlUnitService.php b/app/Services/Cartables/Mission/ControlUnitService.php new file mode 100644 index 00000000..571d361d --- /dev/null +++ b/app/Services/Cartables/Mission/ControlUnitService.php @@ -0,0 +1,37 @@ +where('state_id', '=', MissionStates::PENDING_CONFIRMATION->value) + ->where('edare_shahri_name', '=', Auth::user()->edarate_shahri_id); + + return DataTableFacade::run( + $query, + $request, + allowedFilters: ['*'], + allowedSortings: ['*'], + allowedSelects: $fields + ); + } +} \ No newline at end of file diff --git a/app/Services/Cartables/Mission/RequestPortalService.php b/app/Services/Cartables/Mission/RequestPortalService.php new file mode 100644 index 00000000..01d7cf76 --- /dev/null +++ b/app/Services/Cartables/Mission/RequestPortalService.php @@ -0,0 +1,40 @@ +user(); + $fields = [ + 'id', 'user_id', 'username', 'state_name', 'province_name', 'edare_shahri_name', + 'description', 'requested_machines', 'type', 'start_date', + 'end_date', 'request_date', 'end_point', + ]; + $query = Mission::query(); + + if ($user->hasPermissionTo('manage-request-portal-city')) { + $query->where('edare_shahri_id', '=', $user->edarate_shahri_id); + } + elseif ($user->hasPermissionTo('manage-request-portal-province')) { + $query->where('province_id', '=', $user->province_id); + } + + return DataTableFacade::run( + $query, + $request, + allowedFilters: ['*'], + allowedSortings: ['*'], + allowedSelects: $fields + ); + } +} \ No newline at end of file diff --git a/app/Services/Cartables/Mission/TransportationUnitService.php b/app/Services/Cartables/Mission/TransportationUnitService.php new file mode 100644 index 00000000..3462e2b2 --- /dev/null +++ b/app/Services/Cartables/Mission/TransportationUnitService.php @@ -0,0 +1,33 @@ +where('state_id', '=', MissionStates::REQUEST_CREATED->value) + ->where('edare_shahri_name', '=', Auth::user()->edarate_shahri_id); + + return DataTableFacade::run( + $query, + $request, + allowedFilters: ['*'], + allowedSortings: ['*'], + allowedSelects: $fields + ); + } +} \ No newline at end of file diff --git a/app/Services/Cartables/RoadObservation/OperatorService.php b/app/Services/Cartables/RoadObservation/OperatorService.php new file mode 100644 index 00000000..7256a92d --- /dev/null +++ b/app/Services/Cartables/RoadObservation/OperatorService.php @@ -0,0 +1,86 @@ +user(); + + $fields = [ + 'fk_RegisteredEventMessage', 'road_observeds.id', 'Title', 'road_observeds.created_at', 'StartTime_DateTime', + 'lat', 'lng', 'FeatureTypeTitle', 'Description', 'MobileForSendEventSms', 'edarate_shahri_id', + '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) + ->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); + + return DataTableFacade::run( + $query, + $request, + allowedFilters: ['*'], + allowedSortings: ['*'], + allowedSelects: $fields); + } + + /** + * @throws Throwable + */ + public function complaintsIndex(Request $request) + { + $user = auth()->user(); + + $fields = ['fk_RegisteredEventMessage', 'road_observeds.id', 'Title', 'FeatureTypeTitle', 'MobileForSendEventSms', 'StartTime_DateTime', + 'road_observeds.created_at', 'rms_last_activity', 'rms_last_activity_fa', 'status', 'edarate_shahri_id', + 'status_fa', 'supervisor_description', 'rms_description', 'province_fa', 'city_id', 'city_fa', 'Description', + 'edarate_shahri.name_fa as edarate_shahri_name_fa', 'lat', 'lng']; + + 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')) { + + throw_if(is_null($user->province_id), new ProhibitedAction('استانی برای شما در سامانه ثبت نشده است!')); + + $query = RoadObserved::query()->leftjoin('edarate_shahri', 'road_observeds.edarate_shahri_id', 'edarate_shahri.id') + ->where('rms_status', '=', 0) + ->whereNotNull('road_observeds.province_id') + ->where('road_observeds.province_id', '=', $user->province_id); + + } + elseif ($user->hasPermissionTo('show-fast-react-edarate-shahri')) { + + throw_if(is_null($user->edarate_shahri_id), new ProhibitedAction('اداره ای برای شما در سامانه ثبت نشده است!')); + + $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: ['*'], + allowedSelects: $fields + ); + } +} \ No newline at end of file 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..ade845a0 --- /dev/null +++ b/app/Services/Cartables/RoadObservation/SupervisorService.php @@ -0,0 +1,48 @@ +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')) + { + throw_if(is_null($user->province_id), new ProhibitedAction('استانی برای شما در سامانه ثبت نشده است!')); + + $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/app/Services/Cartables/RoadObservationTableService.php b/app/Services/Cartables/RoadObservationTableService.php deleted file mode 100644 index 810d4b88..00000000 --- a/app/Services/Cartables/RoadObservationTableService.php +++ /dev/null @@ -1,169 +0,0 @@ -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) - { - $user = auth()->user(); - - $fields = [ - 'fk_RegisteredEventMessage', 'road_observeds.id', 'Title', 'road_observeds.created_at', 'StartTime_DateTime', - 'lat', 'lng', 'FeatureTypeTitle', 'Description', 'MobileForSendEventSms', 'edarate_shahri_id', - '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) - ->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, - $request, - allowedFilters: ['*'], - allowedSortings: ['*']); - } - - public function complaintsIndex(Request $request) - { - $user = auth()->user(); - - $fields = 'fk_RegisteredEventMessage, road_observeds.id, Title, FeatureTypeTitle, MobileForSendEventSms, StartTime_DateTime, - road_observeds.created_at, rms_last_activity, rms_last_activity_fa, status, edarate_shahri_id, - status_fa, supervisor_description, rms_description, province_fa, city_id, city_fa, Description, edarate_shahri.name_fa as edarate_shahri_name_fa, lat, lng'; - - 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') - ->selectRaw($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('rms_status', '=', 0) - ->whereNotNull('road_observeds.province_id') - ->where('road_observeds.province_id', '=', $user->province_id) - ->selectRaw($fields); - - } - 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) - ->selectRaw($fields); - - } - - return DataTableFacade::run( - $query, - $request, - allowedFilters: ['*'], - 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 diff --git a/app/Services/Cartables/SafetyAndPrivacyTableService.php b/app/Services/Cartables/SafetyAndPrivacy/OperatorService.php similarity index 78% rename from app/Services/Cartables/SafetyAndPrivacyTableService.php rename to app/Services/Cartables/SafetyAndPrivacy/OperatorService.php index b6331901..f41270fd 100644 --- a/app/Services/Cartables/SafetyAndPrivacyTableService.php +++ b/app/Services/Cartables/SafetyAndPrivacy/OperatorService.php @@ -1,24 +1,15 @@ user(); @@ -41,37 +32,6 @@ class SafetyAndPrivacyTableService ); } - /** - * @throws Throwable - */ - public function supervisorDataTable(Request $request) - { - $user = auth()->user(); - - $fields = [ - 'id','lat','lon', 'recognize_picture','action_picture','created_at','status', 'final_description', 'province_fa', - 'info_fa', 'activity_date_time', 'action_picture_document_upload_date', 'judiciary_document_upload_date', 'edare_shahri_name', - 'step_fa', 'axis_type_id', 'axis_type_name', 'action_date', 'is_finished', 'status_fa', 'supervisor_description', 'operator_description' - ]; - - $query = SafetyAndPrivacy::query(); - - if ($user->hasPermissionTo('show-safety-and-privacy-operator-cartable-province')) - { - throw_if(is_null($user->province_id), new ProhibitedAction('استانی برای شما در سامانه ثبت نشده است!')); - - $query = $query->where('province_id', '=', $user->province_id); - } - - return DataTableFacade::run( - $query, - $request, - allowedFilters: ['*'], - allowedSortings: ['*'], - allowedSelects: $fields - ); - } - public function countryActivity(Request $request): array { $activities = []; @@ -186,4 +146,4 @@ class SafetyAndPrivacyTableService return array_values($activities); } -} +} \ No newline at end of file diff --git a/app/Services/Cartables/SafetyAndPrivacy/SupervisorService.php b/app/Services/Cartables/SafetyAndPrivacy/SupervisorService.php new file mode 100644 index 00000000..0579bc8b --- /dev/null +++ b/app/Services/Cartables/SafetyAndPrivacy/SupervisorService.php @@ -0,0 +1,39 @@ +user(); + + $fields = [ + 'id','lat','lon', 'recognize_picture','action_picture','created_at','status', 'final_description', 'province_fa', + 'info_fa', 'activity_date_time', 'action_picture_document_upload_date', 'judiciary_document_upload_date', 'edare_shahri_name', + 'step_fa', 'axis_type_id', 'axis_type_name', 'action_date', 'is_finished', 'status_fa', 'supervisor_description', 'operator_description' + ]; + + $query = SafetyAndPrivacy::query(); + + if ($user->hasPermissionTo('show-safety-and-privacy-operator-cartable-province')) + { + throw_if(is_null($user->province_id), new ProhibitedAction('استانی برای شما در سامانه ثبت نشده است!')); + + $query = $query->where('province_id', '=', $user->province_id); + } + + return DataTableFacade::run( + $query, + $request, + allowedFilters: ['*'], + allowedSortings: ['*'], + allowedSelects: $fields + ); + } +} \ No newline at end of file diff --git a/app/Services/NikarayanService.php b/app/Services/NikarayanService.php index 702ab1d4..ba87eb8b 100644 --- a/app/Services/NikarayanService.php +++ b/app/Services/NikarayanService.php @@ -33,7 +33,7 @@ class NikarayanService $soapClient = new SoapClient($url); $result = $soapClient->UpdateInfo_RoadObservedProblems($array); - Log::channel('nikarayan')->info(json_encode($result)); + Log::channel('nikarayan')->info([json_encode($result), $roadObserved->fk_RegisteredEventMessage]); return $result; } diff --git a/database/factories/MissionFactory.php b/database/factories/MissionFactory.php new file mode 100644 index 00000000..f089f944 --- /dev/null +++ b/database/factories/MissionFactory.php @@ -0,0 +1,23 @@ + + */ +class MissionFactory extends Factory +{ + /** + * Define the model's default state. + * + * @return array + */ + public function definition(): array + { + return [ + // + ]; + } +} diff --git a/database/factories/MissionHistoryFactory.php b/database/factories/MissionHistoryFactory.php new file mode 100644 index 00000000..3033e6b5 --- /dev/null +++ b/database/factories/MissionHistoryFactory.php @@ -0,0 +1,23 @@ + + */ +class MissionHistoryFactory extends Factory +{ + /** + * Define the model's default state. + * + * @return array + */ + public function definition(): array + { + return [ + // + ]; + } +} diff --git a/database/factories/MissionStateFactory.php b/database/factories/MissionStateFactory.php new file mode 100644 index 00000000..8b1e249b --- /dev/null +++ b/database/factories/MissionStateFactory.php @@ -0,0 +1,23 @@ + + */ +class MissionStateFactory extends Factory +{ + /** + * Define the model's default state. + * + * @return array + */ + public function definition(): array + { + return [ + // + ]; + } +} diff --git a/database/migrations/2025_05_16_100623_create_mission_states_table.php b/database/migrations/2025_05_16_100623_create_mission_states_table.php new file mode 100644 index 00000000..5f9b472f --- /dev/null +++ b/database/migrations/2025_05_16_100623_create_mission_states_table.php @@ -0,0 +1,29 @@ +id(); + $table->string('name'); + $table->text('description')->nullable(); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('mission_states'); + } +}; diff --git a/database/migrations/2025_05_17_103927_create_missions_table.php b/database/migrations/2025_05_17_103927_create_missions_table.php new file mode 100644 index 00000000..25a60291 --- /dev/null +++ b/database/migrations/2025_05_17_103927_create_missions_table.php @@ -0,0 +1,45 @@ +id(); + $table->unsignedInteger('user_id'); + $table->foreign('user_id')->references('id')->on('users'); + $table->string('username'); + $table->foreignId('state_id')->constrained('mission_states')->noActionOnDelete(); + $table->string('state_name'); + $table->unsignedTinyInteger('province_id')->nullable(); + $table->foreign('province_id')->references('id')->on('provinces')->noActionOnDelete(); + $table->string('province_name'); + $table->unsignedBigInteger('edare_shahri_id')->nullable(); + $table->foreign('edare_shahri_id')->references('id')->on('edarate_shahri')->noActionOnDelete(); + $table->string('edare_shahri_name')->nullable(); + $table->json('requested_machines'); + $table->string('type'); + $table->dateTime('start_date'); + $table->dateTime('end_date'); + $table->dateTime('request_date'); + $table->text('description')->nullable(); + $table->string('end_point'); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('missions'); + } +}; diff --git a/database/migrations/2025_05_18_090655_create_missionables_table.php b/database/migrations/2025_05_18_090655_create_missionables_table.php new file mode 100644 index 00000000..3bd88f09 --- /dev/null +++ b/database/migrations/2025_05_18_090655_create_missionables_table.php @@ -0,0 +1,29 @@ +id(); + $table->foreignId('mission_id')->constrained('missions')->noActionOnDelete(); + $table->morphs('missionable'); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('missionables'); + } +}; diff --git a/database/migrations/2025_05_18_093843_create_mission_histories_table.php b/database/migrations/2025_05_18_093843_create_mission_histories_table.php new file mode 100644 index 00000000..d3a79188 --- /dev/null +++ b/database/migrations/2025_05_18_093843_create_mission_histories_table.php @@ -0,0 +1,33 @@ +id(); + $table->foreignId('mission_id')->constrained('missions'); + $table->unsignedInteger('user_id'); + $table->foreign('user_id')->references('id')->on('users'); + $table->foreignId('previous_state_id')->constrained('mission_states'); + $table->string('previous_state_name'); + $table->text('user_description')->nullable(); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('mission_histories'); + } +}; diff --git a/database/migrations/2025_05_27_133805_add_is_foreign_to_accidents_table.php b/database/migrations/2025_05_27_133805_add_is_foreign_to_accidents_table.php new file mode 100644 index 00000000..eb239e41 --- /dev/null +++ b/database/migrations/2025_05_27_133805_add_is_foreign_to_accidents_table.php @@ -0,0 +1,28 @@ +boolean('is_foreign')->default(false); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::table('accidents', function (Blueprint $table) { + $table->dropColumn('is_foreign'); + }); + } +}; diff --git a/database/seeders/AxisTypeSeeder.php b/database/seeders/AxisTypeSeeder.php index f8ae72bc..ea36f145 100644 --- a/database/seeders/AxisTypeSeeder.php +++ b/database/seeders/AxisTypeSeeder.php @@ -4,6 +4,7 @@ namespace Database\Seeders; use Illuminate\Database\Console\Seeds\WithoutModelEvents; use Illuminate\Database\Seeder; +use Illuminate\Support\Facades\DB; class AxisTypeSeeder extends Seeder { @@ -12,6 +13,12 @@ class AxisTypeSeeder extends Seeder */ public function run(): void { - // + DB::table('axis_types')->insert([ + ['name' => 'آزادراه'], + ['name' => 'بزرگراه'], + ['name' => 'اصلی'], + ['name' => 'فرعی'], + ['name' => 'روستایی'], + ]); } } diff --git a/database/seeders/MissionHistorySeeder.php b/database/seeders/MissionHistorySeeder.php new file mode 100644 index 00000000..1da76daf --- /dev/null +++ b/database/seeders/MissionHistorySeeder.php @@ -0,0 +1,17 @@ +count(5)->create(); + } +} diff --git a/database/seeders/MissionStateSeeder.php b/database/seeders/MissionStateSeeder.php new file mode 100644 index 00000000..a73b3df9 --- /dev/null +++ b/database/seeders/MissionStateSeeder.php @@ -0,0 +1,25 @@ +insert([ + ['name' => 'درخواست ایجاد شد و در حال بررسی در توسط واحد نقلیه است'], + ['name' => 'خودرو اختصاص داده شد و درخواست توسط واحد کنترل در حال بررسی است'], + ['name' => 'درخواست توسط واحد کنترل تایید شد و ماموریت آغاز می شود'], + ['name' => 'اتمام ماموریت'], + ['name' => 'عدم تخصیص خودرو توسط واحد نقلیه و بازگشت درخواست به کارتابل کاربر'], + ['name' => 'ماموریت لغو شد'], + ]); + } +} diff --git a/resources/views/v3/Reports/AccidentReceipt/CountryReport.blade.php b/resources/views/v3/Reports/AccidentReceipt/CountryReport.blade.php index c5745eb6..6050d470 100644 --- a/resources/views/v3/Reports/AccidentReceipt/CountryReport.blade.php +++ b/resources/views/v3/Reports/AccidentReceipt/CountryReport.blade.php @@ -14,20 +14,20 @@ - - - - + + + + @@ -67,7 +79,7 @@ گزارش گشت راهداری + + +
تاریخ دریافت گزارش: {{ verta()->now()->format('Y/m/d H:i') }}
+ گزارش خسارات وارده به ابنیه فنی و تاسیسات راه از تاریخ {{ verta($fromDate)->format('Y/n/j') }} تا @@ -42,8 +42,8 @@ اداره کل - تعداد کل + + تعداد خسارات ثبت شده نحوه شناسایی خسارت @@ -59,6 +59,18 @@
+ کل + + در دست اقدام + + در حال پرداخت + + خاتمه یافته + گزارش پلیس راه - فیش + فاکتور بیمه @@ -87,6 +99,13 @@ {{ $road['name'] }} {{ $road['tedade'] }} + + {{ $road['egdam'] }} + {{ $road['pardakht'] }} + {{ $road['khatm'] }} {{ $road['police_rah'] }} diff --git a/resources/views/v3/Reports/AccidentReceipt/DataTableReport.blade.php b/resources/views/v3/Reports/AccidentReceipt/DataTableReport.blade.php index 134166b1..1109a5e5 100644 --- a/resources/views/v3/Reports/AccidentReceipt/DataTableReport.blade.php +++ b/resources/views/v3/Reports/AccidentReceipt/DataTableReport.blade.php @@ -10,15 +10,15 @@ - - + - + @@ -26,6 +26,7 @@ + @@ -33,7 +34,7 @@ - + @@ -48,6 +49,7 @@ + diff --git a/resources/views/v3/Reports/AccidentReceipt/ProvinceReport.blade.php b/resources/views/v3/Reports/AccidentReceipt/ProvinceReport.blade.php index 501f8ce4..d48aef61 100644 --- a/resources/views/v3/Reports/AccidentReceipt/ProvinceReport.blade.php +++ b/resources/views/v3/Reports/AccidentReceipt/ProvinceReport.blade.php @@ -14,20 +14,20 @@
+ تاریخ دریافت گزارش: {{verta()->now()->format('Y/m/d H:i')}}
گزارش کلی خسارات واردهگزارش کلی خسارات وارده
استان شهرستان نام محورنوع ناوگان نام راننده کد ملی راننده شماره موبایل رانندهنوع تصادف تاریخ تصادف مبلغ کل خسارتمبلغ فیشمبلغ فاکتور مبلغ بیمه مبلغ داغی تاریخ ثبت{{$item->province_fa}} {{$item->city_fa}} {{$item->axis_name}}{{$item->is_foreign ? 'خارجی' : 'داخلی'}} {{$item->driver_name}} {{$item->driver_national_code}} {{$item->driver_phone_number}}
- - - - + + + + @@ -68,7 +80,7 @@ گزارش گشت راهداری + + + diff --git a/resources/views/v3/Reports/RoadObservation/SupervisorCartableReport.blade.php b/resources/views/v3/Reports/RoadObservation/SupervisorCartableReport.blade.php index fa412f98..3174ec5c 100644 --- a/resources/views/v3/Reports/RoadObservation/SupervisorCartableReport.blade.php +++ b/resources/views/v3/Reports/RoadObservation/SupervisorCartableReport.blade.php @@ -49,7 +49,7 @@ - + diff --git a/routes/v2.php b/routes/v2.php index 19aff985..566c1a44 100644 --- a/routes/v2.php +++ b/routes/v2.php @@ -303,6 +303,9 @@ Route::get('map', function () { return view('version2.dashboard_pages.map'); })->name('v2.map'); +Route::any('/safety_and_privacy/{any?}', fn() => abort(404, 'not found')) + ->where('any', '.*'); + Route::prefix('safety_and_privacy')->group(function () { Route::get('/sub_item_list', 'V2\Dashboard\SafetyAndPrivacyController@subItemList'); diff --git a/routes/v3.php b/routes/v3.php index 01f34693..6567212e 100644 --- a/routes/v3.php +++ b/routes/v3.php @@ -3,25 +3,27 @@ use App\Http\Controllers\V3\Auth\LogoutController; use App\Http\Controllers\V3\CMMSMachinesController; use App\Http\Controllers\V3\DamageManagementController; +use App\Http\Controllers\V3\Dashboard\Accident\AccidentReceiptController; +use App\Http\Controllers\V3\Dashboard\Accident\AccidentReceiptReportController; use App\Http\Controllers\V3\Dashboard\Azmayesh\AzmayeshController; use App\Http\Controllers\V3\Dashboard\Azmayesh\AzmayeshSampleController; use App\Http\Controllers\V3\Dashboard\Azmayesh\AzmayeshTypeController; use App\Http\Controllers\V3\Dashboard\ItemsManagementController; +use App\Http\Controllers\V3\Dashboard\Mission\ControlUnitController; +use App\Http\Controllers\V3\Dashboard\Mission\DetailController; +use App\Http\Controllers\V3\Dashboard\Mission\RequestPortalController; +use App\Http\Controllers\V3\Dashboard\Mission\TransportationUnitController; use App\Http\Controllers\V3\Dashboard\ObservedItemController; -use App\Http\Controllers\V3\Dashboard\AccidentReceiptController; use App\Http\Controllers\V3\Dashboard\OtpManagementController; -use App\Http\Controllers\V3\Dashboard\RoadMaintenanceStationController; -use App\Http\Controllers\V3\Dashboard\Reports\AccidentReceiptReportController; use App\Http\Controllers\V3\Dashboard\Reports\RoadItemsReportController; use App\Http\Controllers\V3\Dashboard\Reports\RoadPatrolReportController; -use App\Http\Controllers\V3\Dashboard\Reports\SafetyAndPrivacyReportController; use App\Http\Controllers\V3\Dashboard\RoadItemsProjectController; -use App\Http\Controllers\V3\Dashboard\RoadObservationController; +use App\Http\Controllers\V3\Dashboard\RoadMaintenanceStationController; +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; use App\Http\Controllers\V3\Dashboard\SafetyAndPrivacy\SupervisorController; -use App\Http\Controllers\V3\Dashboard\SafetyAndPrivacy\SupervisorReportController; use App\Http\Controllers\V3\FMSVehicleManagementController; use App\Http\Controllers\V3\Harim\DivarkeshiController; use App\Http\Controllers\V3\LogListManagementController; @@ -290,37 +292,50 @@ 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::name('operator.') + ->controller(\App\Http\Controllers\V3\Dashboard\RoadObservation\OperatorController::class) + ->group(function () { + Route::get('operator/cartable','cartableIndex')->name('cartableIndex')->middleware('permission:show-fast-react-edarate-shahri'); + Route::get('operator/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('operator/register/{roadObserved}', 'register') + ->middleware('permission:show-fast-react-edarate-shahri') + ->name('register'); + Route::post('operator/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::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.') + ->prefix('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.') + ->prefix('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') @@ -349,8 +364,8 @@ Route::prefix('safety_and_privacy') Route::post('operator/first_step_store', 'firstStepStore')->name('firstStepStore')->middleware(['validate-store-access', 'permission:add-safety-and-privacy']); Route::get('/sub_items', 'subItems')->name('subItems'); Route::get('/map', 'map')->name('map'); - Route::post('operator/second_step_store/{safetyAndPrivacy}', 'secondStepStore')->name('secondStepStore')->middleware(['validate-store-access','permission:add-safety-and-privacy']); - Route::post('operator/third_step_store/{safetyAndPrivacy}', 'thirdStepStore')->name('thirdStepStore')->middleware(['validate-store-access','permission:add-safety-and-privacy']); + Route::post('operator/second_step_store/{safetyAndPrivacy}', 'secondStepStore')->name('secondStepStore')->middleware(['validate-store-access','permission:add-safety-and-privacy','check-axis-type']); + Route::post('operator/third_step_store/{safetyAndPrivacy}', 'thirdStepStore')->name('thirdStepStore')->middleware(['validate-store-access','permission:add-safety-and-privacy','check-axis-type']); Route::post('operator/{safetyAndPrivacy}', 'update')->name('update')->middleware('permission:update-safety-and-privacy'); Route::get('operator/{safetyAndPrivacy}', 'show')->name('show'); Route::delete('operator/{safetyAndPrivacy}', 'destroy')->name('destroy')->middleware('permission:delete-safety-and-privacy'); @@ -383,13 +398,6 @@ Route::prefix('safety_and_privacy_report') Route::get('/country_excel_activity', 'countryExcelActivity')->name('countryExcelActivity'); Route::get('/province_excel_activity', 'provinceExcelActivity')->name('provinceExcelActivity'); }); - - Route::prefix('supervisor') - ->name('supervisor.') - ->controller(SupervisorReportController::class) - ->group(function () { - - }); }); Route::prefix('otp') @@ -432,3 +440,40 @@ Route::prefix('road_maintenance_station') Route::post('/{rahdariPoint}', 'update')->name('update')->middleware('permission:edit-tollhouse|edit-tollhouse-province'); Route::delete('/{rahdariPoint}', 'destroy')->name('destroy')->middleware('permission:delete-tollhouse|delete-tollhouse-province'); }); + +Route::prefix('missions') + ->name('missions.') + ->group(function () { + Route::name('requestPortal.') + ->prefix('request_portal') + ->middleware('permission:manage-request-portal-city|manage-request-portal-province|manage-request-portal-country') + ->controller(RequestPortalController::class) + ->group(function () { + Route::get('/', 'index')->name('index'); + Route::post('/', 'store')->name('store'); + Route::get('/{mission}', 'show')->name('show'); + Route::post('/{mission}', 'update')->name('update'); + Route::delete('/{mission}', 'destroy')->name('destroy'); + }); + Route::name('transportationUnit.') + ->prefix('transportation_unit') + ->controller(TransportationUnitController::class) + ->group(function () { + Route::get('/', 'index')->name('index'); + Route::post('/allocate/{mission}', 'allocate')->name('allocate'); + Route::post('/deallocate/{mission}', 'deallocate')->name('deallocate'); + }); + Route::name('controlUnit.') + ->prefix('control_unit') + ->controller(ControlUnitController::class) + ->group(function () { + Route::get('/', 'index')->name('index'); + }); + Route::prefix('details') + ->name('details.') + ->controller(DetailController::class) + ->group(function () { + Route::get('/machines/{mission}', 'machines')->name('machines'); + Route::get('/rahdaran/{mission}', 'rahdaran')->name('rahdaran'); + }); + });
تاریخ دریافت گزارش: {{ verta()->now()->format('Y/m/d H:i') }}
+ گزارش خسارات وارده به ابنیه فنی و تاسیسات راه از تاریخ {{ verta($fromDate)->format('Y/n/j') }} تا @@ -43,8 +43,8 @@ اداره کل - تعداد کل + + تعداد خسارات ثبت شده تعداد نحوه شناسایی خسارت @@ -60,6 +60,18 @@
+ کل + + در دست اقدام + + در حال پرداخت + + خاتمه یافته + گزارش پلیس راه - فیش + فاکتور بیمه @@ -88,6 +100,13 @@ {{ $road['name'] }} {{ $road['tedade'] }} + < + {{ $road['egdam'] }} + {{ $road['pardakht'] }} + {{ $road['khatm'] }} {{ $road['police_rah'] }} diff --git a/resources/views/v3/Reports/RoadObservation/OperatorCartableReport.blade.php b/resources/views/v3/Reports/RoadObservation/OperatorCartableReport.blade.php index 6dd7d746..8fe8cda1 100644 --- a/resources/views/v3/Reports/RoadObservation/OperatorCartableReport.blade.php +++ b/resources/views/v3/Reports/RoadObservation/OperatorCartableReport.blade.php @@ -33,7 +33,7 @@
+ style="background-color: #DAEEF3;text-align: center;border-right:1px solid black;font-weight:bolder;font-size: 13px;"> گزارش کارتابل عملیات واکنش سریع
تاریخ ثبت تاریخ اقدام توضیح مامورتوضیح کارشناستوضیح ناظر وضعیت