From 75e18e84e86ae50aee954ee334ca5f6992652f29 Mon Sep 17 00:00:00 2001 From: joddyabott Date: Mon, 18 Aug 2025 12:56:48 +0330 Subject: [PATCH] creat and fix --- .../AccessRoadActivityController.php | 10 +- .../ConstructionActivityController.php | 12 +- .../UtilityPassingActivityController.php | 10 +- .../V3/Dashboard/UserManagementController.php | 771 ++++++++++++++++++ .../Middleware/CheckAxisTypeMiddleware.php | 4 +- .../Dashboard/UserManagement/StoreRequest.php | 35 + .../UserManagement/UpdateRequest.php | 35 + routes/v2.php | 6 + routes/v3.php | 30 +- 9 files changed, 894 insertions(+), 19 deletions(-) create mode 100644 app/Http/Controllers/V3/Dashboard/UserManagementController.php create mode 100644 app/Http/Requests/V3/Dashboard/UserManagement/StoreRequest.php create mode 100644 app/Http/Requests/V3/Dashboard/UserManagement/UpdateRequest.php diff --git a/app/Http/Controllers/V3/Dashboard/SafetyAndPrivacy/OperatorReport/AccessRoadActivityController.php b/app/Http/Controllers/V3/Dashboard/SafetyAndPrivacy/OperatorReport/AccessRoadActivityController.php index f3e4a9cc..fc297660 100644 --- a/app/Http/Controllers/V3/Dashboard/SafetyAndPrivacy/OperatorReport/AccessRoadActivityController.php +++ b/app/Http/Controllers/V3/Dashboard/SafetyAndPrivacy/OperatorReport/AccessRoadActivityController.php @@ -19,9 +19,7 @@ class AccessRoadActivityController extends Controller use ApiResponse; public function countryActivity(Request $request, OperatorService $operatorService): JsonResponse { - $request->merge(['info_id' => 90]); - - $data = $operatorService->countryActivity($request); + $data = $operatorService->countryActivity(90); return $this->successResponse([ 'activities' => $data, @@ -31,9 +29,11 @@ class AccessRoadActivityController extends Controller public function provinceActivity(Request $request, OperatorService $operatorService): JsonResponse { - $request->merge(['info_id' => 90]); - $data = $operatorService->provinceActivity($request); + $data = $operatorService->provinceActivity( + info_id: 90, + province_id: $request->input('province_id') + ); return $this->successResponse([ 'activities' => $data, diff --git a/app/Http/Controllers/V3/Dashboard/SafetyAndPrivacy/OperatorReport/ConstructionActivityController.php b/app/Http/Controllers/V3/Dashboard/SafetyAndPrivacy/OperatorReport/ConstructionActivityController.php index 54dbad4b..b8299e63 100644 --- a/app/Http/Controllers/V3/Dashboard/SafetyAndPrivacy/OperatorReport/ConstructionActivityController.php +++ b/app/Http/Controllers/V3/Dashboard/SafetyAndPrivacy/OperatorReport/ConstructionActivityController.php @@ -19,20 +19,20 @@ class ConstructionActivityController extends Controller use ApiResponse; public function countryActivity(Request $request, OperatorService $operatorService): JsonResponse { - $request->merge(['info_id' => 89]); - $data = $operatorService->countryActivity($request); + $data = $operatorService->countryActivity(89); return $this->successResponse([ 'activities' => $data, 'provinces' => Province::all(['id', 'name_fa']), ]); } - public function provinceActivity(Request $request, OperatorService $operatorService): JsonResponse + public function provinceActivity(Request $request, OperatorService $operatorService,): JsonResponse { - $request->merge(['info_id' => 89]); - - $data = $operatorService->provinceActivity($request); + $data = $operatorService->provinceActivity( + info_id: 89, + province_id: $request->input('province_id') + ); return $this->successResponse([ 'activities' => $data, diff --git a/app/Http/Controllers/V3/Dashboard/SafetyAndPrivacy/OperatorReport/UtilityPassingActivityController.php b/app/Http/Controllers/V3/Dashboard/SafetyAndPrivacy/OperatorReport/UtilityPassingActivityController.php index dd61ed53..da3b9ed3 100644 --- a/app/Http/Controllers/V3/Dashboard/SafetyAndPrivacy/OperatorReport/UtilityPassingActivityController.php +++ b/app/Http/Controllers/V3/Dashboard/SafetyAndPrivacy/OperatorReport/UtilityPassingActivityController.php @@ -17,9 +17,8 @@ class UtilityPassingActivityController extends Controller { public function countryActivity(Request $request, OperatorService $operatorService): JsonResponse { - $request->merge(['info_id' => 91]); - $data = $operatorService->countryActivity($request); + $data = $operatorService->countryActivity(91); return $this->successResponse([ 'activities' => $data, @@ -28,9 +27,10 @@ class UtilityPassingActivityController extends Controller } public function provinceActivity(Request $request, OperatorService $operatorService): JsonResponse { - $request->merge(['info_id' => 91]); - - $data = $operatorService->provinceActivity($request); + $data = $operatorService->provinceActivity( + info_id: 91, + province_id: $request->input('province_id') + ); return $this->successResponse([ 'activities' => $data, diff --git a/app/Http/Controllers/V3/Dashboard/UserManagementController.php b/app/Http/Controllers/V3/Dashboard/UserManagementController.php new file mode 100644 index 00000000..d56b0753 --- /dev/null +++ b/app/Http/Controllers/V3/Dashboard/UserManagementController.php @@ -0,0 +1,771 @@ +can('full-user-managment') || Auth::user()->can('limited-user-management')) { +// return view('version2.dashboard_pages.user_management.list'); +// } +// +// abort(403); +// } + public function indexUser(Request $request) + { + if (auth()->user()) { + auth()->user()->addActivityComplete(1038); + } + + $province = $request->province ?? null; + $city = $request->city ?? null; + $province_office = $request->province_office ?? null; + + if (Auth::user()->checkUserHasPermission('full-user-management')) { + $users = User::when($province, function ($query, $province) { + return $query->where('province_id', $province); + }) + ->when($city, function ($query, $city) { + return $query->where('city_id', $city); + }) + ->when($province_office, function ($query, $province_office) { + if ($province_office == -1) { + return $query->where('edarate_ostani_id', null)->whereNotNull('edarate_shahri_id'); + } else { + return $query->where('edarate_ostani_id', $province_office); + } + }) + ->with(['roles' => function ($query) { + $query->where('for_report', 1); + }]) + ->get(); + } elseif (Auth::user()->checkUserHasPermission('limited-user-management')) { + $users = User::when($province, function ($query, $province) { + return $query->where('province_id', $province); + }) + ->where('province_id', Auth::user()->province_id) + ->when($city, function ($query, $city) { + return $query->where('city_id', $city); + }) + ->when($province_office, function ($query, $province_office) { + if ($province_office == -1) { + return $query->where('edarate_ostani_id', null)->whereNotNull('edarate_shahri_id'); + } else { + return $query->where('edarate_ostani_id', $province_office); + } + }) + ->with(['roles' => function ($query) { + $query->where('for_report', 1); + }]) + ->get(); + } else { + return response()->json([ + 'message' => 'Forbidden' + ], 403); + } + + return response()->json([ + 'status' => '200', + 'message' => 'success', + 'data' => $users, + ], 200); + } + + public function store(StoreRequest $request): jsonResponse + { + User::query()->create([ + 'username' => $request->username, + 'national_code' => $request->national_code, + 'password' => Hash::make($request->password), + 'province_id' => $request->province_id, + 'edarate_ostani_id' => $request->edarate_ostani_id, + 'city_id' => $request->city_id, + 'edarate_shahri_id' => $request->edarate_shahri_id, + ]); + + $user = new User(); + $user->username = $request->username; + + $user->province_id = $request->province_id == 0 ? null : $request->province_id; + $user->province_fa = ($request->province_id == 0) ? 'ستاد' : Province::find($request->province_id)->name_fa; + + $user->city_id = $request->city_id == 0 ? null : $request->city_id; + $user->city_fa = ($request->city_id == 0) ? null : City::find($request->city_id)->name_fa ; + + if ($request->edarate_ostani_id != 'null') { + $temp = EdarateOstani::find($request->edarate_ostani_id)->name_fa; + $user->edarate_ostani_id = $request->edarate_ostani_id; + $user->edarate_ostani_name = $temp; + if ($request->province_id == 0) { + $user->name = $temp .' '. $user->province_fa; + } else { + $user->name = $temp .' استان '. $user->province_fa; + } + } else { + $temp = EdarateShahri::find($request->edarate_shahri_id)->name_fa; + $user->edarate_shahri_id = $request->edarate_shahri_id; + $user->edarate_shahri_name = $temp; + + if ($request->province_id == 0) { + $user->name = $temp .' '. $user->province_fa; + } else { + $user->name = $temp .' استان '. $user->province_fa; + } + } + + $user->password = Hash::make($request->password); + $user->national_code = $request->national_code; + $user->save(); + + if (auth()->user()) { + auth()->user()->addActivityComplete(1039, $user); + } + + return response()->json([ + 'message' => 'success', + 'data' => $user + ], 200); + } + + public function editRole(Request $request, $id) + { + $request->validate([ + 'role_name' => 'required|string', + 'permissions' => 'required' + ], [ + 'permissions.required' => 'انتخاب دسترسی‌ها الزامی است.', + 'role_name.required' => 'نام نقش الزامی است.' + ]); + + if (auth()->user()) { + auth()->user()->addActivityComplete(1044); + } + $role = Role::find($id); + + + $updateRole = $role->update([ + 'name_fa' => $request->role_name, + 'description' => $request->description + ]); + + $permissions = $request->permissions; + // $permissions = explode(",", $request->permissions); + + $role->syncPermissions($permissions); + + return response()->json([ + 'message' => 'success', + 'data' => $role + ]); + } + + + public function createRole(Request $request) + { + $request->validate([ + 'role_name' => 'required|string', + 'permissions' => 'required' + ], [ + 'permissions.required' => 'انتخاب دسترسی‌ها الزامی است.', + 'role_name.required' => 'نام نقش الزامی است.' + ]); + + if (auth()->user()) { + auth()->user()->addActivityComplete(1043); + } + + $role = Role::create([ + 'name' => time(), + 'name_fa' => $request->role_name, + 'description' => $request->description + ]); + + $permissions = $request->permissions; + + // $permissions = explode(",", $request->permissions); + $role->givePermissionTo($permissions); + + return response()->json([ + 'message' => 'success', + 'data' => $role + ]); + } + + public function show(User $user) + { + $user = User::where('id', $user->id)->with(['roles', 'permissions'])->get(); + return response()->json([ + 'status' => '200', + 'message' => 'success', + 'data' => $user + ], 200); + } + + public function update(UpdateRequest $request, User $user): JsonResponse + { + $user->update([ + 'username' => $request->username, + 'national_code' => $request->national_code, + 'password' => Hash::make($request->password), + 'province_id' => $request->province_id, + 'edarate_ostani_id' => $request->edarate_ostani_id, + 'city_id' => $request->city_id, + 'edarate_shahri_id' => $request->edarate_shahri_id, + ]); + + $user->province_id = $request->province_id == 0 ? null : $request->province_id; + $user->province_fa = ($request->province_id == 0) ? 'ستاد' : Province::find($request->province_id)->name_fa; + + $user->city_id = $request->city_id == 0 ? null : $request->city_id; + $user->city_fa = ($request->city_id == 0) ? null : City::find($request->city_id)->name_fa ; + + if ($request->edarate_ostani_id != "null") { + $temp = EdarateOstani::find($request->edarate_ostani_id)->name_fa; + $user->edarate_ostani_id = $request->edarate_ostani_id; + $user->edarate_ostani_name = $temp; + + $user->edarate_shahri_id = null; + $user->edarate_shahri_name = null; + + if ($request->province_id == 0) { + $user->name = $temp .' '. $user->province_fa; + } else { + $user->name = $temp .' استان '. $user->province_fa; + } + } else { + $temp = EdarateShahri::find($request->edarate_shahri_id)->name_fa; + $user->edarate_shahri_id = $request->edarate_shahri_id; + $user->edarate_shahri_name = $temp; + $user->edarate_ostani_id = null; + $user->edarate_ostani_name = null; + if ($request->province_id == 0) { + $user->name = $temp .' '. $user->province_fa; + } else { + $user->name = $temp .' استان '. $user->province_fa; + } + } + + $user->first_name = $request->first_name; + $user->last_name = $request->last_name; + $user->position = $request->position; + $user->mobile = $request->mobile; + $user->degree = $request->degree; + $user->major = $request->major; + $user->national_code = $request->national_code; + + if (!is_null($request->password)) { + $request->validate([ + 'password' => ['string'] + ]); + $user->password = Hash::make($request->password); + } + + if (! $request->permissions == null) { + $user->syncPermissions(explode(",", $request->permissions)); + } + + $roles = $request->only('roles'); + if (! $roles == null) { + $user->syncRoles($roles); + } + + $user->save(); + + if (auth()->user()) { + auth()->user()->addActivityComplete(1040, $user); + } + + return response()->json([ + 'message' => 'success', + 'data' => $user + ]); + } + + public function activityReport() + { + return view('version2.dashboard_pages.user_management.activity_report'); + } + + public function userActivityLogs() + { + return response()->json([ + 'status' => 'succeed', + 'message' => '', + 'data' => auth()->user()->activityLogs, + ], 200); + } + + public function changeConfirmedStatus(Request $request) + { + $request->validate([ + 'user_ids' => 'required|regex:/^(\d+)(,\d+)*$/', + 'confirm' => 'required|in:0,1' + ]); + + $user_ids = explode(",", $request->user_ids); + + User::whereIn('id', $user_ids)->update([ + 'confirmed' => $request->confirm + ]); + return response()->json([ + 'status' => 'succeed', + ]); + } + + public function changePassword(User $user, Request $request) + { + $validData = $request->validate([ + 'password' => 'required|string|min:8|confirmed', + ]); + $user->password = Hash::make($request->password); + $user->save(); + return response()->json(['message' => "password changed successfully!!!!"], 200); + } + + public function givePermissionsTo(Request $request) + { + $request->validate([ + 'user_ids' => 'required|regex:/^(\d+)(,\d+)*$/', + 'permission_ids' => 'required', + ]); + + $user_ids = explode(",", $request->user_ids); + $permission_ids = $request->permission_ids; + + User::whereIn('id', $user_ids)->get()->each(function ($user) use ($permission_ids) { + $user->syncPermissions($permission_ids); + }); + + return response()->json([ + 'status' => 'succeed', + 'message' => 'permissions assigned to users succussfully.' + ]); + } + + public function destroy(Request $request) + { + $request->validate([ + 'user_ids' => 'required|regex:/^(\d+)(,\d+)*$/', + ]); + + $user_ids = explode(',', $request->user_ids); + + foreach ($user_ids as $id) { + $user = User::find($id); + + if ($user->avatar) { + if (Storage::disk('public')->exists(str_replace('storage/', '', $user->avatar))) { + Storage::disk('public')->delete(str_replace('storage/', '', $user->avatar)); + } + } + + if ($user->photo) { + if (Storage::disk('public')->exists(str_replace('storage/', '', $user->photo))) { + Storage::disk('public')->delete(str_replace('storage/', '', $user->photo)); + } + } + + $user->delete(); + } + + return response()->json([ + 'status' => 200, + 'message' => 'The users deleted succussfully.' + ]); + } + + public function getUserPermissions() + { + $userPermissions = Auth::user()->getUserPermissions(); + + return response()->json([ + 'message' => 'success', + 'data' => $userPermissions + ]); + } + + public function getUserSummaryReport(Request $request, User $user) + { + $request->fromDate = $request->fromDate ? $request->fromDate . " 00:00:00" : Carbon::now()->subDays(30)->format('Y-m-d 00:00:00'); + $request->toDate = $request->toDate ? $request->toDate . " 23:59:59" : Carbon::now()->format('Y-m-d 23:59:59'); + $data = []; + + $ids_list = ''; + $temp_sql_for_activity_time = " + SELECT sum(majmoe) AS activity FROM (SELECT *, + COUNT(cnt) AS majmoe + FROM ( + SELECT *, + COUNT(*) AS cnt + FROM ( + SELECT YEAR (created_at) AS yy, + MONTH (created_at) AS mm, + DAY (created_at) AS dd, + HOUR (created_at) AS hh, + user_id + FROM user_activity_logs + WHERE created_at between '{$request->fromDate}' and '{$request->toDate}' and user_id IN(".$user->id.") + ) user_activity_distinct + GROUP BY yy, + mm, + dd, + hh, + user_id + ) user_activity_by_hour_and_ + GROUP BY user_id) AS calculated_table;"; + + $temp_sql_for_activity_list = " + SELECT *, + COUNT(*) AS cnt + FROM ( + SELECT + description, + log_unique_code + FROM user_activity_logs + WHERE created_at between '{$request->fromDate}' and '{$request->toDate}' and user_id IN(".$user->id.") + ) user_activity_distinct + GROUP BY + log_unique_code + ORDER BY cnt desc"; + + $number_of_active_days = " + SELECT COUNT(*) AS cnt + FROM ( + SELECT mm,dd + FROM user_activity_logs + WHERE created_at between '{$request->fromDate}' and '{$request->toDate}' and user_id IN(".$user->id.") + GROUP BY + mm,dd + ) active_days + ORDER BY cnt desc"; + + + $number_of_activities = " + SELECT COUNT(*) AS cnt + FROM user_activity_logs + WHERE created_at between '{$request->fromDate}' and '{$request->toDate}' and user_id IN(".$user->id.") + ORDER BY cnt desc"; + + $number_of_active_days = (DB::select($number_of_active_days)[0]->cnt ? DB::select($number_of_active_days)[0]->cnt : -1); + $activity_time = DB::select($temp_sql_for_activity_time)[0]->activity; + $number_of_activities = DB::select($number_of_activities)[0]->cnt; + $data = [ + 'number_of_active_days' => $number_of_active_days, + + 'activity_time' => $user->id ? $activity_time : null, + 'average_activity_time' => round(($user->id ? $activity_time : 0) / $number_of_active_days, 2) , + 'number_of_activities' => $number_of_activities , + 'average_activity_number' => round(($user->id ? $number_of_activities : 0) / $number_of_active_days, 2) , + + 'activity_list' => $user->id ? DB::select($temp_sql_for_activity_list) : null, + 'last_login' => $user->last_login, + ]; + return $data; + } + + public function printGroup(User $user, Request $request) + { + $request->fromDate = $request->fromDate ? $request->fromDate . " 00:00:00" : Carbon::now()->format('Y-m-d 00:00:00') ; + $request->toDate = $request->toDate ? $request->toDate . " 23:59:59" : Carbon::now()->format('Y-m-d 23:59:59'); + + $data = []; + + $ids_list = ''; + // $users = $role->users()->select("*")->get()->toArray(); + // foreach ($user as $index => $item) { + $user_activity_quantity_temp[$user->id] = [ + "majmoe" => 0, + "name" => $user->first_name ? $user->first_name." ".$user->last_name." (".$user->username.")" : $user->name." (".$user->username.")", + ]; + + $user_activity_time_temp[$user->id] = [ + "majmoe" => 0, + "name" => $user->first_name ? $user->first_name." ".$user->last_name." (".$user->username.")" : $user->name."(".$user->username.")", + ]; + + $user_activity_top_5_temp[$user->id] = [ + "activity_list" => [], + "name" => $user->first_name ? $user->first_name." ".$user->last_name." (".$user->username.")" : $user->name."(".$user->username.")", + ]; + + + // if (!$index) { + $ids_list = $user->id; + // } else { + // $ids_list .= ",".$item['id']; + // } + // } + $total_activity_time_sql = " + SELECT sum(majmoe) AS activity FROM (SELECT *, + COUNT(quantity) AS majmoe + FROM ( + SELECT user_id, + COUNT(*) AS quantity + + FROM user_activity_logs + WHERE created_at between '{$request->fromDate}' and '{$request->toDate}' and user_id IN(".$ids_list.") + + GROUP BY yy, + mm, + dd, + hh, + user_id + ) user_activity_by_hour_and_ + GROUP BY user_id) AS calculated_table;"; + + $quantitative_activity_chart_sql = " + SELECT created_at, + COUNT(*) AS quantity + + FROM user_activity_logs + WHERE created_at between '{$request->fromDate}' and '{$request->toDate}' and user_id IN(".$ids_list.") + GROUP BY + yy, + mm, + dd ;"; + + $hourly_activity_chart_sql = " + SELECT + COUNT(quantity) AS majmoe + FROM ( + SELECT yy, + mm, + dd, + hh, + COUNT(*) AS quantity + FROM user_activity_logs + WHERE created_at between '{$request->fromDate}' and '{$request->toDate}' and user_id IN(".$ids_list.") + GROUP BY yy, + mm, + dd, + hh, + user_id + ) user_activity_by_hour_and_ + GROUP BY + yy, + mm, + dd;"; + + $total_activity_quantity_sql = " + SELECT COUNT(*) AS total_activity_quantity + FROM user_activity_logs + WHERE created_at between '{$request->fromDate}' and '{$request->toDate}' and user_id IN(".$ids_list.") + "; + + + $top_10_activity_list_sql = " + SELECT *, + COUNT(*) AS quantity + FROM ( + SELECT + description, + log_unique_code + FROM user_activity_logs + WHERE created_at between '{$request->fromDate}' and '{$request->toDate}' and user_id IN(".$ids_list.") + ) user_activity_distinct + GROUP BY + log_unique_code + ORDER BY quantity desc + LIMIT 10"; + + + $user_activity_quantity_sql = " + SELECT *, + COUNT(*) AS quantity + FROM ( + SELECT + user_id, + user_first_name, + user_last_name, + user_name, + username + FROM user_activity_logs + WHERE created_at between '{$request->fromDate}' and '{$request->toDate}' and user_id IN(".$ids_list.") + ) user_activity_distinct + GROUP BY user_id + ORDER BY quantity desc"; + + $active_user_count_sql = " + SELECT COUNT(*) AS active_user_count + FROM( + SELECT + user_id + FROM user_activity_logs + WHERE created_at between '{$request->fromDate}' and '{$request->toDate}' and user_id IN(".$ids_list.") + GROUP BY user_id + ) grpuped_by_user_id"; + + $user_activity_time_sql = " + select + *, + COUNT(quantity) AS majmoe + FROM ( + SELECT + user_first_name, + user_last_name, + user_name, + username, + user_id, + COUNT(*) AS quantity + FROM user_activity_logs + WHERE created_at between '{$request->fromDate}' and '{$request->toDate}' and user_id IN(".$ids_list.") + GROUP BY yy, + mm, + dd, + hh, + user_id + ) user_activity_by_hour_and_ + GROUP BY user_id + ORDER BY majmoe desc;"; + + foreach (DB::select($user_activity_quantity_sql) as $key => $value) { + $user_activity_quantity_temp[$value->user_id] = [ + "majmoe" => $value->quantity ?? 0, + "name" => $value->user_first_name ? $value->user_first_name." ".$value->user_last_name." (".$value->username.")" : $value->user_name." (".$value->username.")", + ]; + } + + foreach (DB::select($user_activity_time_sql) as $key => $value) { + $user_activity_time_temp[$value->user_id] = [ + "majmoe" => $value->majmoe ?? 0, + "name" => $value->user_first_name ? $value->user_first_name." ".$value->user_last_name." (".$value->username.")" : $value->user_name." (".$value->username.")", + ]; + } + + foreach ($user_activity_top_5_temp as $key => $value) { + $user_activity_top_5_temp_sql = " + SELECT + description, + COUNT(*) AS quantity + FROM user_activity_logs + WHERE user_id = {$key} AND created_at between '{$request->fromDate}' and '{$request->toDate}' + GROUP BY log_unique_code + ORDER BY quantity DESC + LIMIT 5 + "; + + $activity_list = DB::select($user_activity_top_5_temp_sql); + $sum = 0; + foreach ($activity_list as $index => $item) { + $sum += (int) $item->quantity; + } + $user_activity_top_5_temp[$key] = [ + "sum" => $sum, + "name" => $value['name'], + "activity_list" => $activity_list, + ]; + } + arsort($user_activity_top_5_temp); + arsort($user_activity_time_temp); + arsort($user_activity_quantity_temp); + $data = [ + 'fromDate' => $request->fromDate ? $request->fromDate : null, + 'toDate' => $request->toDate ? $request->toDate : null, + 'user_activity_time' => $ids_list ? $user_activity_time_temp : null, + 'hourly_activity_chart' => $ids_list ? DB::select($hourly_activity_chart_sql) : null, + 'quantitative_activity_chart' => $ids_list ? DB::select($quantitative_activity_chart_sql) : null, + 'total_activity_quantity' => $ids_list ? DB::select($total_activity_quantity_sql)[0]->total_activity_quantity : null, + 'total_activity_time' => $ids_list ? DB::select($total_activity_time_sql)[0]->activity : null, + 'top_10_activity_list' => $ids_list ? DB::select($top_10_activity_list_sql) : null, + 'user_activity_quantity' => $ids_list ? $user_activity_quantity_temp : null, + 'group_name' => $user->first_name." ".$user->last_name, + 'average' => round(($ids_list ? DB::select($total_activity_time_sql)[0]->activity : 0) / 1, 2) , + 'user_activity_top_5_temp' => $user_activity_top_5_temp, + 'total_user_count' => 1, + 'active_user_count' => $ids_list ? DB::select($active_user_count_sql)[0]->active_user_count : null, + 'group_id' => $user->id + ]; + + return View('word.user-activity-individual', compact('data')); + } + public function userPermission($id) + { + $user = User::find($id); + return response()->json([ + 'message' => 'success', + 'data' => $user->permissions, + ]); + } + + public function assignPermission(Request $request, User $user) + { + if (auth()->user()) { + auth()->user()->addActivityComplete(1042); + } + $permissions = explode(",", $request->permissions); + if (! $permissions == null) { + $user->syncPermissions($permissions); + } + + return response()->json([ + 'message' => 'status', + 'data' => User::where('id', $user->id)->with(['permissions'])->get() + ]); + } + + public function showAllRoles(Request $request) + { + $roles = Role::where('for_report', 0)->get(); + + return response()->json([ + 'message' => 'success', + 'data' => $roles + ]); + } + + public function deleteRole(Request $request, $id) + { + if (auth()->user()) { + auth()->user()->addActivityComplete(1045); + } + $role = Role::find($id)->delete(); + + return response()->json([ + 'message' => 'success', + 'data' => 1 + ]); + } + + public function changeUserEnabeld(User $user) + { + if (Auth::user()->checkUserHasPermission('full-user-management')) { + $user->enabled = !$user->enabled; + $user->save(); + return response()->json([ + 'message' => 'success' + ], 200); + } elseif (Auth::user()->checkUserHasPermission('limited-user-management') && Auth::user()->province_id == $user->province_id) { + $user->enabled = !$user->enabled; + $user->save(); + return response()->json([ + 'message' => 'success' + ], 200); + } else { + return response()->json([ + 'message' => 'Forbidden' + ], 403); + } + } +} diff --git a/app/Http/Middleware/CheckAxisTypeMiddleware.php b/app/Http/Middleware/CheckAxisTypeMiddleware.php index 6c50a26b..ee4bb37b 100644 --- a/app/Http/Middleware/CheckAxisTypeMiddleware.php +++ b/app/Http/Middleware/CheckAxisTypeMiddleware.php @@ -21,9 +21,9 @@ class CheckAxisTypeMiddleware */ public function handle(Request $request, Closure $next): Response { - $s = $request->route('safetyAndPrivacy'); + $s = $request->safetyAndPrivacy; - if (($s->step == 3 || $s->step == 2) && is_null($s->axis_type_id)) + if (($s->step == 1 || $s->step == 2) && is_null($s->axis_type_id)) { throw new ProhibitedAction('ابتدا نوع محور را مشخص کنید'); } diff --git a/app/Http/Requests/V3/Dashboard/UserManagement/StoreRequest.php b/app/Http/Requests/V3/Dashboard/UserManagement/StoreRequest.php new file mode 100644 index 00000000..522f6107 --- /dev/null +++ b/app/Http/Requests/V3/Dashboard/UserManagement/StoreRequest.php @@ -0,0 +1,35 @@ +|string> + */ + public function rules(): array + { + return [ + 'province_id' => 'required|exists:provinces,id', + 'edarate_ostani_id' => 'exists:edarate_ostanis,id', + 'city_id' => 'exists:cities,id', + 'edarate_shahri_id' => 'exists:edarate_shahris,id', + 'username' => 'required|unique:users,username', + 'national_code' => 'unique:users,national_code', + 'password' => 'required|min:8', + + ]; + } +} diff --git a/app/Http/Requests/V3/Dashboard/UserManagement/UpdateRequest.php b/app/Http/Requests/V3/Dashboard/UserManagement/UpdateRequest.php new file mode 100644 index 00000000..d831991c --- /dev/null +++ b/app/Http/Requests/V3/Dashboard/UserManagement/UpdateRequest.php @@ -0,0 +1,35 @@ +|string> + */ + public function rules(): array + { + return [ + 'province_id' => 'required|exists:provinces,id', + 'edarate_ostani_id' => 'exists:edarate_ostanis,id', + 'city_id' => 'exists:cities,id', + 'edarate_shahri_id' => 'exists:edarate_shahris,id', + 'username' => ['required',Rule::unique('users','username')->ignore($this->user->id)], + 'national_code' =>['required',Rule::unique('users','national_code')->ignore($this->user->id)], + 'password' => 'required|min:8', + ]; + } +} diff --git a/routes/v2.php b/routes/v2.php index 566c1a44..d5e56515 100644 --- a/routes/v2.php +++ b/routes/v2.php @@ -226,6 +226,12 @@ Route::get('axis_reports', function (Request $request) { return view('version2.dashboard_pages.axis_reports'); })->name('v2.axis_reports'); +Route::get('receipt/send-to-insurance/{accident}', 'ReceiptController@sendToInsurance'); +Route::get('receipt/document-release/{accident}', 'ReceiptController@documentRelease'); + +Route::any('/receipt/{any?}', fn() => abort(404, 'not found')) + ->where('any', '.*'); + Route::prefix('receipt')->group(function () { Route::prefix('/report')->group(function () { diff --git a/routes/v3.php b/routes/v3.php index 906a4ca0..e8ec2b33 100644 --- a/routes/v3.php +++ b/routes/v3.php @@ -26,6 +26,7 @@ use App\Http\Controllers\V3\Dashboard\SafetyAndPrivacy\OperatorReport\AccessRoad use App\Http\Controllers\V3\Dashboard\SafetyAndPrivacy\OperatorReport\ConstructionActivityController; use App\Http\Controllers\V3\Dashboard\SafetyAndPrivacy\OperatorReport\UtilityPassingActivityController; use App\Http\Controllers\V3\Dashboard\SafetyAndPrivacy\SupervisorController; +use App\Http\Controllers\V3\Dashboard\UserManagementController; use App\Http\Controllers\V3\FMSVehicleManagementController; use App\Http\Controllers\V3\Harim\DivarkeshiController; use App\Http\Controllers\V3\LogListManagementController; @@ -381,7 +382,7 @@ Route::prefix('safety_and_privacy') Route::get('operator/{safetyAndPrivacy}', 'show')->name('show'); Route::delete('operator/{safetyAndPrivacy}', 'destroy')->name('destroy')->middleware('permission:delete-safety-and-privacy'); Route::get('/deserialize/{safetyAndPrivacy}', 'deserialize')->name('deserialize'); - Route::post('operator/finish/{safetyAndPrivacy}', 'finish')->name('finish'); + Route::post('operator/finish/{safetyAndPrivacy}', 'finish')->middleware(['check-axis-type'])->name('finish'); }); Route::prefix('supervisor') @@ -557,5 +558,32 @@ Route::prefix('harim') Route::post('/confirm_guarantee_letter_need/{harim}', 'confirmGuaranteeLetterNeed')->name('confirmGuaranteeLetterNeed'); Route::get('/{harim}', 'show')->name('show'); }); + Route::prefix('user_management') + ->name('user_management.') + ->controller(UserManagementController::class) + ->group(function () { +// Route::get('/', 'index')->name('index'); + Route::get('/index_user', 'indexUser')->name('indexUser'); + Route::get('/activity_report', 'activityReport')->name('activityReport'); + Route::get('/userActivityLogs', 'userActivityLogs')->name('userActivityLogs'); + Route::post('/change_confirmed_status', 'changeConfirmedStatus')->name('changeConfirmedStatus'); + Route::get('/give_permissions_to', 'givePermissionsTo')->name('givePermissionsTo'); + Route::get('/get_user_permissions', 'getUserPermissions')->name('getUserPermissions'); + Route::get('/get_user_summary_report', 'getUserSummaryReport')->name('getUserSummaryReport'); + Route::get('/print_group', 'printGroup')->name('printGroup'); + Route::get('/user_permission', 'userPermission')->name('userPermission'); + Route::get('/assign_permission', 'assignPermission')->name('assignPermission'); + Route::get('/show_all_roles', 'showAllRoles')->name('showAllRoles'); + Route::post('/change_user_enabeld','changeUserEnabeld')->name('changeUserEnabeld'); + Route::post('/','store')->name('store'); + Route::post('/create_role','createRole')->name('createRole'); + Route::post('/edit_role','editRole')->name('editRole'); + Route::get('/{user}', 'show')->name('show'); + Route::post('/{user}', 'update')->name('update'); + Route::delete('/{user}', 'destroy')->name('destroy'); + Route::post('/change_password/{user}', 'changePassword')->name('changePassword'); + Route::post('delete-role/{id}', 'deleteRole')->name('deleteRole'); + + }); });