user()->addActivityComplete(1038); $data = $userManagementService->datatable($request); return response()->json($data); } public function limitStore(StoreRequest $request): jsonResponse { auth()->user()->addActivityComplete(1039); User::query()->create([ 'username' => $request->username, 'national_code' => $request->national_code, 'password' => Hash::make($request->password), 'province_id' => $request->province_id, 'province_fa' => ($request->province_id == 0) ? 'ستاد' : Province::query()->find($request->province_id)->name_fa, 'city_id' => $request->city_id, 'city_fa' => ($request->city_id == 0) ? null : City::query()->find($request->city_id)->name_fa, 'edarate_ostani_id' => $request->edarate_ostani_id, 'edarate_ostani_name' => $request->edarate_ostani_id == null ? null : EdarateOstani::query()->find($request->edarate_ostani_id)->name_fa, 'edarate_shahri_id' => $request->edarate_shahri_id, 'edarate_shahri_name' => $request->edarate_shahri_id == null ? null : EdarateShahri::query()->find($request->edarate_shahri_id)->name_fa, ]); return $this->successResponse(); } /** * @throws Throwable */ public function fullStore(StoreRequest $request): jsonResponse { DB::transaction(function () use ($request) { auth()->user()->addActivityComplete(1039); $user = User::query()->create([ 'username' => $request->username, 'national_code' => $request->national_code, 'password' => Hash::make($request->password), 'province_id' => $request->province_id, 'province_fa' => ($request->province_id == 0) ? 'ستاد' : Province::query()->find($request->province_id)->name_fa, 'city_id' => $request->city_id, 'city_fa' => ($request->city_id == 0) ? null : City::query()->find($request->city_id)->name_fa, 'edarate_ostani_id' => $request->edarate_ostani_id, 'edarate_ostani_name' => $request->edarate_ostani_id == null ? null : EdarateOstani::query()->find($request->edarate_ostani_id)->name_fa, 'edarate_shahri_id' => $request->edarate_shahri_id, 'edarate_shahri_name' => $request->edarate_shahri_id == null ? null : EdarateShahri::query()->find($request->edarate_shahri_id)->name_fa, 'first_name' => $request->first_name, 'last_name' => $request->last_name, 'position' => $request->position, 'mobile' => $request->mobile, 'degree' => $request->degree, 'major' => $request->major, ]); $user->avatar = $request->has('avatar') ? FileFacade::save($request->avatar, "user/{$user->id}") : null; }); return $this->successResponse(); } public function show(User $user): JsonResponse { return $this->successResponse($user); } public function userPermissions(User $user): JsonResponse { $role = $user->roles()->pluck('name')->first(); $permissions = $user->getAllPermissions()->pluck('name'); return $this->successResponse([ 'role' => $role, 'permissions' => $permissions, ]); } /** * @throws Throwable */ public function update(UpdateRequest $request, User $user): JsonResponse { DB::transaction(function () use ($request, $user) { auth()->user()->addActivityComplete(1040); $data = [ 'username' => $request->username, 'national_code' => $request->national_code, 'province_id' => $request->province_id, 'province_fa' => ($request->province_id == 0) ? 'ستاد' : Province::query()->find($request->province_id)->name_fa, 'city_id' => $request->city_id, 'city_fa' => ($request->city_id == 0) ? null : City::query()->find($request->city_id)->name_fa, 'edarate_ostani_id' => $request->edarate_ostani_id, 'edarate_ostani_name' => $request->edarate_ostani_id == null ? null : EdarateOstani::query()->find($request->edarate_ostani_id)->name_fa, 'edarate_shahri_id' => $request->edarate_shahri_id, 'edarate_shahri_name' => $request->edarate_shahri_id == null ? null : EdarateShahri::query()->find($request->edarate_shahri_id)->name_fa, 'first_name' => $request->first_name, 'last_name' => $request->last_name, 'position' => $request->position, 'mobile' => $request->mobile, 'degree' => $request->degree, 'major' => $request->major, ]; if ($request->has('avatar')) { if ($user->avatar) { FileFacade::delete($user->avatar, true); } $data['avatar'] = FileFacade::save($request->file('avatar'), "avatars/{$user->id}/"); } $user->update($data); }); return $this->successResponse(); } /** * @throws Throwable */ public function destroy(User $user): JsonResponse { DB::transaction(function () use ($user) { if ($user->avatar) { FileFacade::delete($user->avatar, true); } $user->roles()->detach(); $user->permissions()->detach(); $user->delete(); }); return $this->successResponse(); } public function changePassword(User $user, ChangePasswordRequest $request): JsonResponse { $user->update([ 'password' => Hash::make($request->new_password), ]); return $this->successResponse(); } public function givePermissionsTo(GivePermissionRequest $request, User $user): JsonResponse { $user->syncPermissions($request->permissions); return $this->successResponse(); } public function giveRoleToUser(GiveRoleRequest $request, User $user): JsonResponse { $user->syncRoles($request->role); return $this->successResponse(); } public function changeConfirmedStatus(ChangeConfirmStatusRequest $request, User $user): JsonResponse { $user->update([ 'confirmed' => $request->confirm, ]); return $this->successResponse(); } public function changeUserEnabeld(ChangeConfirmEnabelRequest $request, User $user): JsonResponse { $user->update([ 'enabled' => $request->enabled, ]); return $this->successResponse(); } // public function userActivityLogs() // { // return response()->json([ // 'status' => 'succeed', // 'message' => '', // 'data' => auth()->user()->activityLogs, // ], 200); // } // 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 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 indexShow(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'); $roles_must_show_report = Role::where('for_report', 1)->get(); $data = []; $users_activity = []; foreach ($roles_must_show_report as $key => $value) { $ids_list = ''; $users = $value->users()->select('id')->get()->toArray(); foreach ($users as $index => $item) { if (! $index) { $ids_list = $item['id']; } else { $ids_list .= ','.$item['id']; } } $temp_sql = " SELECT sum(majmoe) AS activity FROM (SELECT *, COUNT(quantity) AS majmoe FROM ( SELECT *, 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;'; $activity = DB::select($temp_sql)[0]->activity; $users_activity[] = [ 'activity_time' => $ids_list ? $activity : null, 'average' => round(($ids_list ? $activity : 0) / count($users), 2), 'group_name' => $value->name_fa, 'user_count' => count($users), 'is_static' => 0, 'group_id' => $value->id, ]; } $country_group_ids_list = ''; $country_group_user_quantity = 0; foreach (Role::whereIn('id', $this->country_group_ids_list_array)->get() as $key => $value) { $users = $value->users()->select('id')->get(); $country_group_user_quantity += count($users); foreach ($users as $index => $item) { if (! $key) { $country_group_ids_list = $item->id; } else { $country_group_ids_list .= ','.$item->id; } } } $country_temp_sql = " SELECT sum(majmoe) AS activity FROM (SELECT *, COUNT(quantity) AS majmoe FROM ( SELECT *, COUNT(*) AS quantity FROM user_activity_logs WHERE (created_at between '{$request->fromDate}' and '{$request->toDate}') and user_id IN(".$country_group_ids_list.') GROUP BY yy, mm, dd, hh, user_id ) user_activity_by_hour_and_ GROUP BY user_id) AS calculated_table;'; $users_activity[] = [ 'activity_time' => $country_group_ids_list ? DB::select($country_temp_sql)[0]->activity : null, 'average' => round(($country_group_ids_list ? DB::select($country_temp_sql)[0]->activity : 0) / $country_group_user_quantity, 2), 'group_name' => 'کشوری', 'user_count' => $country_group_user_quantity, 'is_static' => 1, 'group_id' => 3, ]; $organization_group_ids_list = ''; $organization_group_user_quantity = 0; foreach (Role::whereIn('id', $this->organization_group_ids_list_array)->get() as $key => $value) { $users = $value->users()->select('id')->get(); $organization_group_user_quantity += count($users); foreach ($users as $index => $item) { if (! $key) { $organization_group_ids_list = $item->id; } else { $organization_group_ids_list .= ','.$item->id; } } } $organization_temp_sql = " SELECT sum(majmoe) AS activity FROM (SELECT *, COUNT(quantity) AS majmoe FROM ( SELECT *, COUNT(*) AS quantity FROM user_activity_logs WHERE (created_at between '{$request->fromDate}' and '{$request->toDate}') and user_id IN(".$organization_group_ids_list.') GROUP BY yy, mm, dd, hh, user_id ) user_activity_by_hour_and_ GROUP BY user_id) AS calculated_table;'; $users_activity[] = [ 'activity_time' => $organization_group_ids_list ? DB::select($organization_temp_sql)[0]->activity : null, 'average' => round(($organization_group_ids_list ? DB::select($organization_temp_sql)[0]->activity : 0) / $organization_group_user_quantity, 2), 'group_name' => 'سازمانی', 'user_count' => $organization_group_user_quantity, 'is_static' => 2, 'group_id' => 3, ]; return response()->json([ 'status' => 'succeed', 'message' => '', 'data' => $users_activity, ], 200); } }