671 lines
26 KiB
PHP
671 lines
26 KiB
PHP
<?php
|
|
|
|
namespace App\Http\Controllers\V3\Dashboard;
|
|
|
|
use App\Facades\File\FileFacade;
|
|
use App\Http\Controllers\Controller;
|
|
use App\Http\Requests\V3\Dashboard\UserManagement\ChangeConfirmEnabelRequest;
|
|
use App\Http\Requests\V3\Dashboard\UserManagement\ChangeConfirmStatusRequest;
|
|
use App\Http\Requests\V3\Dashboard\UserManagement\ChangePasswordRequest;
|
|
use App\Http\Requests\V3\Dashboard\UserManagement\GivePermissionRequest;
|
|
use App\Http\Requests\V3\Dashboard\UserManagement\GiveRoleRequest;
|
|
use App\Http\Requests\V3\Dashboard\UserManagement\StoreRequest;
|
|
use App\Http\Requests\V3\Dashboard\UserManagement\UpdateRequest;
|
|
use App\Http\Traits\ApiResponse;
|
|
use App\Models\City;
|
|
use App\Models\EdarateOstani;
|
|
use App\Models\EdarateShahri;
|
|
use App\Models\Province;
|
|
use App\Models\Role;
|
|
use App\Models\User;
|
|
use App\Services\Cartables\UserManagement\UserManagementService;
|
|
use Carbon\Carbon;
|
|
use Illuminate\Http\JsonResponse;
|
|
use Illuminate\Http\Request;
|
|
use Illuminate\Support\Facades\DB;
|
|
use Illuminate\Support\Facades\Hash;
|
|
|
|
class UserManagementController extends Controller
|
|
{
|
|
use ApiResponse;
|
|
|
|
public function index(Request $request, UserManagementService $userManagementService): JsonResponse
|
|
{
|
|
auth()->user()->addActivityComplete(1038);
|
|
|
|
$data = $userManagementService->datatable($request);
|
|
|
|
return response()->json($data);
|
|
}
|
|
|
|
public function store(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),
|
|
'edarate_shahri_id' => $request->edarate_shahri_id,
|
|
'edarate_shahri_name' => $request->edarate_shahri_id == null ?
|
|
null :
|
|
EdarateShahri::query()->find($request->edarate_shahri_id),
|
|
]);
|
|
|
|
return $this->successResponse();
|
|
}
|
|
|
|
public function storeExtra(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),
|
|
'edarate_shahri_id' => $request->edarate_shahri_id,
|
|
'edarate_shahri_name' => $request->edarate_shahri_id == null ?
|
|
null :
|
|
EdarateShahri::query()->find($request->edarate_shahri_id),
|
|
'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->with(['roles', 'permissions'])->get());
|
|
}
|
|
|
|
/**
|
|
* @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),
|
|
'edarate_shahri_id' => $request->edarate_shahri_id,
|
|
'edarate_shahri_name' => $request->edarate_shahri_id == null ?
|
|
null :
|
|
EdarateShahri::query()->find($request->edarate_shahri_id),
|
|
'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'), "avatar/{$user->id}/");
|
|
}
|
|
|
|
$user->update($data);
|
|
});
|
|
|
|
return $this->successResponse();
|
|
}
|
|
|
|
public function destroy(User $user): JsonResponse
|
|
{
|
|
DB::transaction(function () use ($user) {
|
|
if ($user->avatar) {
|
|
FileFacade::delete($user->avatar, true);
|
|
}
|
|
if ($user->photo) {
|
|
FileFacade::delete($user->photo, 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);
|
|
}
|
|
}
|