diff --git a/app/Http/Controllers/V3/Dashboard/RoadObservationController.php b/app/Http/Controllers/V3/Dashboard/RoadObservationController.php index 8fc65f1f..278333c7 100644 --- a/app/Http/Controllers/V3/Dashboard/RoadObservationController.php +++ b/app/Http/Controllers/V3/Dashboard/RoadObservationController.php @@ -64,11 +64,19 @@ class RoadObservationController extends Controller public function operatorIndex(Request $request, RoadObservationTableService $roadObservationTableService): JsonResponse { + if (is_null(auth()->user()->edarate_shahri_id)) { + return $this->errorResponse('اداره‌ای برای شما در سامانه ثبت نشده است!'); + } + return response()->json($roadObservationTableService->operatorCartableIndex($request)); } public function operatorCartableReport(Request $request, RoadObservationTableService $roadObservationTableService): BinaryFileResponse { + if (is_null(auth()->user()->edarate_shahri_id)) { + return $this->errorResponse('اداره‌ای برای شما در سامانه ثبت نشده است!'); + } + $name = 'گزارش از کارتابل عملیات واکنش سریع ' . verta()->now()->format('Y-m-d H:i') . '.xlsx'; $data = $roadObservationTableService->operatorCartableIndex($request); return Excel::download(new OperatorCartableReport($data['data']), $name); @@ -86,13 +94,18 @@ class RoadObservationController extends Controller return Excel::download(new ComplaintsReport($data['data']), $name); } + public function show(RoadObserved $roadObserved): JsonResponse + { + return $this->successResponse($roadObserved); + } + public function register(RegisterRequest $request, RoadObserved $roadObserved, NikarayanService $nikarayanService): JsonResponse { $roadObservedData = [ 'status' => 0, 'status_fa' => 'در حال بررسی', 'rms_status' => $request->rms_status ?? $roadObserved->rms_status, - 'rms_description' => $request->description?? $roadObserved->rms_description, + 'rms_description' => $request->rms_description ?? $roadObserved->rms_description, ]; $roadObservedHistoryData = [ @@ -101,7 +114,7 @@ class RoadObservationController extends Controller 'previous_rms_start_latlng' => $roadObserved->rms_start_latlng, 'previous_rms_end_latlng' => $roadObserved->rms_end_latlng, 'previous_rms_description' => $roadObserved->rms_description, - 'new_files' => [] + 'new_files' => json_encode([]) ]; if ($request->rms_status == 1) { @@ -111,17 +124,21 @@ class RoadObservationController extends Controller $roadObserved->files()->where('path', 'like', '%_image_before%')->delete(); $roadObserved->files()->where('path', 'like', '%_image_after%')->delete(); - $image_before = FileFacade::save($request->image_before, "road_observeds/{$roadObserved->id}/"); - $image_after = FileFacade::save($request->image_after, "road_observeds/{$roadObserved->id}/"); + if ($request->has('image_before')) { + $image_before = FileFacade::save($request->image_before, "road_observeds/{$roadObserved->id}/"); + $roadObservedData['image_before'] = $image_before; + $files_path[0]['path'] = $image_before; + } - $files_path[0]['path'] = $image_before; - $files_path[1]['path'] = $image_after; + if ($request->has('image_after')) { + $image_after = FileFacade::save($request->image_after, "road_observeds/{$roadObserved->id}/"); + $roadObservedData['image_after'] = $image_after; + $files_path[1]['path'] = $image_after; + } $files = json_encode($files_path); $now_date_time = Carbon::now(); - $roadObservedData['image_before'] = $image_before; - $roadObservedData['image_after'] = $image_after; $roadObservedData['rms_start_latlng'] = explode(',', $request->start_point); $roadObservedData['updated_at_fa'] = Verta::instance($now_date_time); $roadObservedData['rms_last_activity_fa'] = Verta::instance($now_date_time); @@ -149,6 +166,8 @@ class RoadObservationController extends Controller public function refer(ReferRequest $request, RoadObserved $roadObserved): JsonResponse { + $province = Province::query()->find($request->province_id); + RoadObservationHistory::query()->create([ 'id' => $roadObserved->id, 'user_id' => auth()->user()->id, @@ -157,12 +176,13 @@ class RoadObservationController extends Controller 'from_edareh' => $roadObserved->edarate_shahri_id, 'to_edareh' => $request->edarate_shahri_id, 'from_province' => $roadObserved->province_id, - 'to_province' => $request->province_id + 'to_province' => $province->id ]); $roadObserved->update([ 'edarate_shahri_id' => $request->edarate_shahri_id, - 'province_id' => $request->province_id, + 'province_id' => $province->id, + 'province_fa' => $province->name_fa, ]); auth()->user()->addActivityComplete(1037); @@ -173,17 +193,17 @@ class RoadObservationController extends Controller public function referList(RoadObserved $roadObserved): JsonResponse { $data = RoadObservationHistory::query() - ->where('road_observation_histories.id', $roadObserved->id) + ->where('id', '=', $roadObserved->id) ->where('action', '=', 'refer')->get([ 'created_at', 'description', 'from_edareh', 'to_edareh', 'from_province', 'to_province', 'user_id' ]); foreach ($data as $key => $value) { - $data[$key]->from_edareh = EdarateShahri::query()->find($value->from_edareh)->name_fa; - $data[$key]->to_edareh = EdarateShahri::query()->find($value->to_edareh)->name_fa; - $data[$key]->from_province = EdarateShahri::query()->find($value->from_province)->name_fa; - $data[$key]->to_province = EdarateShahri::query()->find($value->to_province)->name_fa; + $data[$key]->from_edareh = EdarateShahri::query()->find($value->from_edareh)->name_fa ?? null; + $data[$key]->to_edareh = EdarateShahri::query()->find($value->to_edareh)->name_fa ?? null; + $data[$key]->from_province = Province::query()->find($value->from_province)->name_fa ?? null; + $data[$key]->to_province = Province::query()->find($value->to_province)->name_fa ?? null; $user = User::query()->find($value->user_id); $data[$key]->user = $user->first_name . ' ' . $user->last_name; } diff --git a/app/Http/Requests/V3/RoadObservation/RegisterRequest.php b/app/Http/Requests/V3/RoadObservation/RegisterRequest.php index 68f93dae..f2522339 100644 --- a/app/Http/Requests/V3/RoadObservation/RegisterRequest.php +++ b/app/Http/Requests/V3/RoadObservation/RegisterRequest.php @@ -24,9 +24,9 @@ class RegisterRequest extends FormRequest return [ 'rms_status' => 'required|in:1,2', 'rms_description' => 'required_if:rms_status,1|string', - 'image_before' => 'required_if:rms_status,1|file|mimes:jpg,jpeg,png', - 'image_after' => 'required_if:rms_status,1|file|mimes:jpg,jpeg,png', - 'start_point' => 'required_if:rms_status,1|string', + 'image_before' => 'file|mimes:jpg,jpeg,png', + 'image_after' => 'file|mimes:jpg,jpeg,png', + 'start_point' => 'string', ]; } } diff --git a/app/Http/Requests/V3/RoadObservation/RestoreRequest.php b/app/Http/Requests/V3/RoadObservation/RestoreRequest.php index 651de88a..1c02a650 100644 --- a/app/Http/Requests/V3/RoadObservation/RestoreRequest.php +++ b/app/Http/Requests/V3/RoadObservation/RestoreRequest.php @@ -22,7 +22,7 @@ class RestoreRequest extends FormRequest public function rules(): array { return [ - 'restore_description' => 'required|string', + 'restore_description' => 'string', ]; } } diff --git a/app/Models/RoadObserved.php b/app/Models/RoadObserved.php index 60131fd0..18c4c9af 100644 --- a/app/Models/RoadObserved.php +++ b/app/Models/RoadObserved.php @@ -62,6 +62,9 @@ class RoadObserved extends Model 'supervisor_description', 'supervising_time', 'supervisor_name', + 'rms_start_latlng', + 'rms_end_latlng', + 'rms_description', ]; /** diff --git a/app/Services/Cartables/RoadObservationTableService.php b/app/Services/Cartables/RoadObservationTableService.php index 504ea8e6..a9b326a7 100644 --- a/app/Services/Cartables/RoadObservationTableService.php +++ b/app/Services/Cartables/RoadObservationTableService.php @@ -17,13 +17,12 @@ class RoadObservationTableService $fields = [ 'fk_RegisteredEventMessage', 'road_observeds.id', 'Title', 'road_observeds.created_at', - 'lat', 'lng', 'FeatureTypeTitle', 'Description', 'MobileForSendEventSms', - 'rms_description', 'rms_status', 'rms_last_activity_fa', 'rms_last_activity', + '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') @@ -53,25 +52,57 @@ class RoadObservationTableService { $user = auth()->user(); - if (is_null($user->edarate_shahri_id)) { - return $this->errorResponse('اداره‌ای برای شما در سامانه ثبت نشده است!'); - } - $fields = [ 'fk_RegisteredEventMessage', 'road_observeds.id', 'Title', 'road_observeds.created_at', - 'lat', 'lng', 'FeatureTypeTitle', 'Description', 'MobileForSendEventSms', + '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); + if (auth()->user()->hasPermissionTo('show-fast-react')) { + $query = RoadObserved::leftjoin('edarate_shahri', 'road_observeds.edarate_shahri_id', 'edarate_shahri.id') + ->where('rms_status', '!=', 0) + ->whereNotNull('road_observeds.province_id') + ->whereNotNull('status') + ->select($fields); + } + elseif (auth()->user()->hasPermissionTo('show-fast-react-province')) { + if (is_null(auth()->user()->province_id)) { + return response()->json([ + 'message' => 'استانی برای شما در سامانه ثبت نشده است!' + ], 400); + } + + $query = RoadObserved::leftjoin('edarate_shahri', 'road_observeds.edarate_shahri_id', 'edarate_shahri.id') + ->where('rms_province_id', auth()->user()->province_id) + ->where('rms_status', '!=', 0) + ->whereNotNull('road_observeds.province_id') + ->whereNotNull('status') + ->select($fields); + } + elseif (auth()->user()->hasPermissionTo('show-fast-react-edarate-shahri')) { + if (is_null(auth()->user()->edarate_shahri_id)) { + return response()->json([ + 'message' => 'اداره ای برای شما در سامانه ثبت نشده است!' + ], 400); + } + + $query = RoadObserved::leftjoin('edarate_shahri', 'road_observeds.edarate_shahri_id', 'edarate_shahri.id') + ->where('edarate_shahri_id', auth()->user()->edarate_shahri_id) + ->where('rms_status', '!=', 0) + ->whereNotNull('road_observeds.province_id') + ->whereNotNull('status') + ->select($fields); + } + + // $query = RoadObserved::query() + // ->where('rms_status', '!=', 0) + // ->whereNotNull('road_observeds.province_id') + // ->whereNotNull('status') + // ->leftJoin('edarate_shahri', 'road_observeds.edarate_shahri_id', '=', 'edarate_shahri.id') + // ->where('edarate_shahri_id', $user->edarate_shahri_id) + // ->select($fields); return DataTableFacade::run( $query, @@ -89,7 +120,7 @@ class RoadObservationTableService ->where('rms_status', '=', 0) ->whereNotNull('edarate_shahri_id') ->selectRaw('fk_RegisteredEventMessage, road_observeds.id, Title, FeatureTypeTitle, MobileForSendEventSms, - road_observeds.created_at, rms_last_activity, rms_last_activity_fa, status, + 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' ); } @@ -104,7 +135,7 @@ class RoadObservationTableService ->whereNotNull('road_observeds.province_id') ->where('road_observeds.province_id', '=', $user->province_id) ->selectRaw('fk_RegisteredEventMessage, road_observeds.id, Title, FeatureTypeTitle, MobileForSendEventSms, - road_observeds.created_at, rms_last_activity, rms_last_activity_fa, status, + 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' ); @@ -120,7 +151,7 @@ class RoadObservationTableService ->whereNotNull('edarate_shahri_id') ->where('edarate_shahri_id', '=', $user->edarate_shahri_id) ->selectRaw('fk_RegisteredEventMessage, road_observeds.id, Title, FeatureTypeTitle, MobileForSendEventSms, - road_observeds.created_at, rms_last_activity, rms_last_activity_fa, status, + 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' ); diff --git a/routes/v3.php b/routes/v3.php index 19385474..9ae94585 100644 --- a/routes/v3.php +++ b/routes/v3.php @@ -293,6 +293,8 @@ Route::prefix('road_observations') Route::post('/register/{roadObserved}', 'register') ->middleware('permission:show-fast-react-edarate-shahri') ->name('register'); + + 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');