Files
backend/app/Http/Controllers/UserController.php
Hamidreza Ranjbarpour 21e9931298 producion changes
2026-05-23 09:28:21 +00:00

2174 lines
84 KiB
PHP

<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Hekmatinasser\Verta\Verta;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Storage;
use Spatie\Permission\Models\Permission;
use App\Models\User;
use Carbon\Carbon;
use App\Models\City;
use App\Models\Province;
use Illuminate\Support\Facades\File;
use App\Models\EdarateShahri;
use App\Models\EdarateOstani;
use Cache;
use App\Models\Role;
use App\Models\HttpErorrsList;
class UserController extends Controller
{
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 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 userActivityLogs()
{
return response()->json([
'status' => 'succeed',
'message' => '',
'data' => auth()->user()->activityLogs,
], 200);
}
public function index(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(Request $request)
{
$validData = $request->validate([
'username' => 'string|unique:users',
// 'national_code' => 'unique:users,national_code',
'mobile' => 'digits:11|regex:/^09[0-9]{9}$/i',
]);
$createUser = new User();
$createUser->province_id = $request->province_id == 0 ? null : $request->province_id;
$createUser->province_fa = ($request->province_id == 0) ? 'ستاد' : Province::find($request->province_id)->name_fa;
$createUser->city_id = $request->city_id == 0 ? null : $request->city_id;
$createUser->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;
$createUser->edarate_ostani_id = $request->edarate_ostani_id;
$createUser->edarate_ostani_name = $temp;
if ($request->province_id == 0) {
$createUser->name = $temp .' '. $createUser->province_fa;
} else {
$createUser->name = $temp .' استان '. $createUser->province_fa;
}
} else {
$temp = EdarateShahri::find($request->edarate_shahri_id)->name_fa;
$createUser->edarate_shahri_id = $request->edarate_shahri_id;
$createUser->edarate_shahri_name = $temp;
if ($request->province_id == 0) {
$createUser->name = $temp .' '. $createUser->province_fa;
} else {
$createUser->name = $temp .' استان '. $createUser->province_fa;
}
}
$createUser->username = $request->username;
$createUser->password = Hash::make($request->password);
$createUser->first_name = $request->first_name;
$createUser->last_name = $request->last_name;
$createUser->position = $request->position;
$createUser->mobile = $request->mobile;
$createUser->degree = $request->degree;
$createUser->major = $request->major;
$createUser->national_code = $request->national_code;
$createUser->save();
if (! $request->permissions == null) {
$createUser->syncPermissions(explode(",", $request->permissions));
}
$roles = $request->only('roles');
if (! $roles == null) {
$createUser->syncRoles($roles);
}
if ($request->has('avatar')) {
$destinationPath = 'avatar/' . $request->username;
$filename = time() .".". $request->file('avatar')->getClientOriginalExtension();
$request->file('avatar')->storeAs($destinationPath, $filename, 'public');
$createUser->update(['avatar' => 'storage/'.$destinationPath ."/". $filename]);
}
if (auth()->user()) {
auth()->user()->addActivityComplete(1039, $createUser);
}
return response()->json([
'message' => 'success',
'data' => $createUser
], 200);
}
public function simpleAddUser(Request $request)
{
$request->validate([
'province_id' => 'required',
'username' => 'required|unique:users,username',
// 'national_code' => 'unique:users,national_code',
'password' => 'required'
]);
$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->station_id = $request->station_id;
$user->save();
if (auth()->user()) {
auth()->user()->addActivityComplete(1039, $user);
}
return response()->json([
'message' => 'success',
'data' => $user
], 200);
}
public function show($id)
{
$user = User::where('id', $id)->with(['roles', 'permissions'])->get();
return response()->json([
'status' => '200',
'message' => 'success',
'data' => $user
], 200);
}
public function update(Request $request, User $user)
{
$request->validate([
// 'national_code' => 'required|unique:users,national_code,'.$user->id,
]);
if ($request->has('avatar')) {
Storage::delete('public/' . $user->avatar);
$destinationPath = 'avatar/' . $user->username;
$filename = time() .".". $request->file('avatar')->getClientOriginalExtension();
$request->file('avatar')->storeAs($destinationPath, $filename, 'public');
$user->update(['avatar' => 'storage/'.$destinationPath ."/". $filename]);
}
$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 updateToDefaultPassword($id)
{
$user = User::find($id);
$user->password = Hash::make('123');
$user->confirmed = 0;
$user->save();
return response()->json([
'status' => 'succeed',
'message' => ''
], 201);
}
public function getUserProjects()
{
if (Auth::user()->username == 'drdanesh') {
$provinces = \App\Models\Province::with('users')->get();
} else {
$provinces = \App\Models\Province::where('id', Auth::user()->province_id)
->with('users')->get();
}
$projectsCount = [];
$projectsList = [];
$projectsList['roadItemsProjects'] = 0;
$projectsList['roadConstructionProjects'] = 0;
$projectsList['roadPatrolProjects'] = 0;
$projectsList['abrarPlanProjects'] = 0;
foreach ($provinces as $province) {
if ($province->id == Auth::user()->province_id) {
$projectsList['province'] = $province->name_fa;
$projectsList['projects'] = $province->roadItemsProjects()->orderByDesc('created_at')->limit(10)->get();
}
$projectsCount[$province->name_fa] = [];
$projectsCount[$province->name_fa]['name'] = $province->name_fa;
$projectsCount[$province->name_fa]['roadItemsProjects'] = $province->roadItemsProjects()->count();
$projectsCount[$province->name_fa]['roadConstructionProjects'] = $province->roadConstructionProjects()->count();
$projectsCount[$province->name_fa]['roadPatrolProjects'] = $province->roadPatrolProjects()->count();
$projectsCount[$province->name_fa]['abrarPlanProjects'] = $province->abrarPlanProjects()->count();
$projectsList['roadItemsProjects'] += $projectsCount[$province->name_fa]['roadItemsProjects'];
$projectsList['roadConstructionProjects'] += $projectsCount[$province->name_fa]['roadConstructionProjects'];
$projectsList['roadPatrolProjects'] += $projectsCount[$province->name_fa]['roadPatrolProjects'];
$projectsList['abrarPlanProjects'] += $projectsCount[$province->name_fa]['abrarPlanProjects'];
}
return view('rmto-preview.pages.management.user-projects-list', [
'projects' => $projectsCount,
'projectsList' => $projectsList
]);
}
public function getProvinceProjectsCount(Request $request)
{
$request->validate([
'start-date' => 'date_format:Y-m-d',
'end-date' => 'date_format:Y-m-d'
]);
if ($request->input('start-date') && $request->input('end-date')) {
$startDate = date($request->input('start-date') . ' 00:00:00');
$endtDate = date($request->input('end-date') . ' 23:59:59');
} else {
$startDate = date('Y-m-d 00:00:00');
$endtDate = date('Y-m-d H:i:s');
}
$users = User::where('province_id', '=', Auth::user()->province_id)
->whereNotBetween('id', [466, 470])
->get();
$projectsCount = [];
$countIndex = 0;
$roadItemsCount = 0;
$roadPatrolCount = 0;
$roadConstructionCount = 0;
$cityProjectsCount = 0;
foreach ($users as $user) {
$projectsCount[$countIndex]['province_id'] = $user->province->id;
$projectsCount[$countIndex]['province_name'] = $user->province->name_fa;
$projectsCount[$countIndex]['user_id'] = $user->id;
$projectsCount[$countIndex]['user_name'] = $user->name;
$projectsCount[$countIndex]['roadItemsProjects'] = $user->roadItemsProjects()
->where('item', '<', '17')
->whereBetween('created_at', [$startDate, $endtDate])->count();
$roadPatrolProjects = $user->roadPatrolProjects()
->whereBetween('created_at', [$startDate, $endtDate])->get();
$projectsCount[$countIndex]['roadPatrolProjects'] = $roadPatrolProjects->count();
$projectsCount[$countIndex]['roadPatrolSubProjects'] = 0;
foreach ($roadPatrolProjects as $roadPatrolProject) {
$projectsCount[$countIndex]['roadPatrolSubProjects'] += $roadPatrolProject->roadPatrolSubProjects()
->where('item', '<', '17')->count();
}
$projectsCount[$countIndex]['roadConstructionProjects'] = $user->roadConstructionProjects()
->whereBetween('created_at', [$startDate, $endtDate])->count();
$projectsCount[$countIndex]['projectsCount'] = $projectsCount[$countIndex]['roadItemsProjects']
+ $projectsCount[$countIndex]['roadPatrolProjects']
+ $projectsCount[$countIndex]['roadConstructionProjects'];
$roadItemsCount += $projectsCount[$countIndex]['roadItemsProjects'];
$roadPatrolCount += $projectsCount[$countIndex]['roadPatrolProjects'];
$roadConstructionCount += $projectsCount[$countIndex]['roadConstructionProjects'];
$cityProjectsCount += $projectsCount[$countIndex]['projectsCount'];
$countIndex++;
}
return response()->json([
'status' => 'succeed',
'message' => '',
'data' => [
'projects' => $projectsCount,
'count' => [
'roadItemsCount' => $roadItemsCount,
'roadPatrolCount' => $roadPatrolCount,
'roadConstructionCount' => $roadConstructionCount,
'totalCount' => $cityProjectsCount
]
]
], 200);
}
public function getProvinceProjectsItem(Request $request)
{
$request->validate([
'start-date' => 'date_format:Y-m-d',
'end-date' => 'date_format:Y-m-d'
]);
if ($request->input('start-date') && $request->input('end-date')) {
$startDate = date($request->input('start-date') . ' 00:00:00');
$endtDate = date($request->input('end-date') . ' 23:59:59');
} else {
$startDate = date('Y-m-d 00:00:00');
$endtDate = date('Y-m-d H:i:s');
}
$province = \App\Models\Province::find(Auth::user()->province_id);
$roadItemsProjects = $province->roadItemsProjects()
->where('road_items_projects.item', '<', '17')
->whereBetween('road_items_projects.created_at', [$startDate, $endtDate])
->get();
$roadPatrolProjects = $province->roadPatrolProjects()
->whereBetween('road_patrol_projects.created_at', [$startDate, $endtDate])
->get();
$projectCollection = new \Illuminate\Support\Collection();
$projectCollectionTemp = new \Illuminate\Support\Collection();
foreach ($roadItemsProjects as $roadItemsProject) {
if ($roadItemsProject->user->username == 'witel' || $roadItemsProject->user->username == 'drdanesh') {
continue;
}
if (Auth::user()->province_id != null && Auth::user()->city_id == null && Auth::user()->id <= 470) {
if ($roadItemsProject->created_at->isToday() || $roadItemsProject->created_at->isYesterday()) {
$canDelete = 1;
} else {
$canDelete = 0;
}
} elseif (Auth::user()->id == $roadItemsProject->user->id) {
if ($roadItemsProject->created_at->isToday()) {
$canDelete = 1;
} else {
$canDelete = 0;
}
} else {
$canDelete = 0;
}
if (($roadItemsProject->sub_items != null && $roadItemsProject->sub_items_data != null)
&& sizeof($roadItemsProject->sub_items) > 0) {
$dataKeys = array_keys($roadItemsProject->sub_items_data);
foreach ($roadItemsProject->sub_items as $key => $subItem) {
$subItemData = null;
if (isset($dataKeys[$key])) {
$subItemData = [
$dataKeys[$key] => $roadItemsProject->sub_items_data[$dataKeys[$key]]
];
}
$project = [
'id' => $roadItemsProject->id,
'user' => $roadItemsProject->user->name,
'type' => 'فعالیت روزانه و جاری راهداری',
'item' => $roadItemsProject->item,
'sub_items' => [$subItem],
'sub_items_data' => $subItemData,
'created_at_jalali' => verta($roadItemsProject->created_at)->format('Y/m/d - H:i'),
'created_at' => $roadItemsProject->created_at->toDateTimeString(),
'can_delete' => $canDelete
];
$projectCollection->add($project);
}
} else {
$project = [
'id' => $roadItemsProject->id,
'user' => $roadItemsProject->user->name,
'type' => 'فعالیت روزانه و جاری راهداری',
'item' => $roadItemsProject->item,
'sub_items' => $roadItemsProject->sub_items,
'sub_items_data' => $roadItemsProject->sub_items_data,
'created_at_jalali' => verta($roadItemsProject->created_at)->format('Y/m/d - H:i'),
'created_at' => $roadItemsProject->created_at->toDateTimeString(),
'can_delete' => $canDelete
];
$projectCollection->add($project);
}
}
foreach ($roadPatrolProjects as $roadPatrolProject) {
if ($roadPatrolProject->user->username == 'witel' || $roadPatrolProject->user->username == 'drdanesh') {
continue;
}
$subProjects = $roadPatrolProject->roadPatrolSubProjects()
->where('item', '<', '17')->get();
$subItems = [];
foreach ($subProjects as $key => $subProject) {
$subItems[$key] = [
'item' => $subProject->item,
'sub_items' => $subProject->sub_items,
'sub_items_data' => $subProject->sub_items_data
];
}
if (Auth::user()->province_id != null && Auth::user()->city_id == null && Auth::user()->id <= 470) {
if ($roadPatrolProject->created_at->isToday() || $roadPatrolProject->created_at->isYesterday()) {
$canDelete = 1;
} else {
$canDelete = 0;
}
} elseif (Auth::user()->id == $roadPatrolProject->user->id) {
if ($roadPatrolProject->created_at->isToday()) {
$canDelete = 1;
} else {
$canDelete = 0;
}
} else {
$canDelete = 0;
}
$project = [
'id' => $roadPatrolProject->id,
'user' => $roadPatrolProject->user->name,
'type' => 'گشت راهداری و ترابری',
'created_at_jalali' => verta($roadPatrolProject->created_at)->format('Y/m/d - H:i'),
'created_at' => $roadPatrolProject->created_at->toDateTimeString(),
'sub_projects' => $subItems,
'can_delete' => $canDelete
];
$projectCollection->add($project);
}
$projectCollection = $projectCollection->sortByDesc('created_at');
foreach ($projectCollection as $project) {
$projectCollectionTemp->add($project);
}
return response()->json([
'status' => 'succeed',
'message' => '',
'data' => [
$projectCollectionTemp->toArray()
]
], 200);
}
public function getNewUserProjects()
{
if (Auth::user()->id == 469 || Auth::user()->id == 470) {
return view('rmto-preview.pages.management.user-projects-list-admin');
} else {
return view('rmto-preview.pages.management.user-projects-list-new');
}
}
public function getProvinceProjectsItemPublic(Request $request)
{
$request->validate([
'start-date' => 'date_format:Y-m-d',
'end-date' => 'date_format:Y-m-d'
]);
if ($request->input('start-date') && $request->input('end-date')) {
$startDate = date($request->input('start-date') . ' 00:00:00');
$endtDate = date($request->input('end-date') . ' 23:59:59');
} else {
$startDate = date('Y-m-d 00:00:00');
$endtDate = date('Y-m-d H:i:s');
}
$province = \App\Models\Province::find(9);
$roadItemsProjects = $province->roadItemsProjects()
->where('road_items_projects.item', '<', '17')
->whereBetween('road_items_projects.created_at', [$startDate, $endtDate])
->get();
$roadPatrolProjects = $province->roadPatrolProjects()
->whereBetween('road_patrol_projects.created_at', [$startDate, $endtDate])
->get();
$projectCollection = new \Illuminate\Support\Collection();
$projectCollectionTemp = new \Illuminate\Support\Collection();
foreach ($roadItemsProjects as $roadItemsProject) {
if (($roadItemsProject->sub_items != null && $roadItemsProject->sub_items_data != null)
&& sizeof($roadItemsProject->sub_items) > 0) {
$dataKeys = array_keys($roadItemsProject->sub_items_data);
foreach ($roadItemsProject->sub_items as $key => $subItem) {
$subItemData = null;
if (isset($dataKeys[$key])) {
$subItemData = [
$dataKeys[$key] => $roadItemsProject->sub_items_data[$dataKeys[$key]]
];
}
$project = [
'id' => $roadItemsProject->id,
'user' => $roadItemsProject->user->name,
'type' => 'فعالیت روزانه و جاری راهداری',
'item' => $roadItemsProject->item,
'sub_items' => [$subItem],
'sub_items_data' => $subItemData,
'created_at_jalali' => verta($roadItemsProject->created_at)->format('Y/m/d - H:i'),
'created_at' => $roadItemsProject->created_at->toDateTimeString(),
'can_delete' => 0
];
$projectCollection->add($project);
}
} else {
$project = [
'id' => $roadItemsProject->id,
'user' => $roadItemsProject->user->name,
'type' => 'فعالیت روزانه و جاری راهداری',
'item' => $roadItemsProject->item,
'sub_items' => $roadItemsProject->sub_items,
'sub_items_data' => $roadItemsProject->sub_items_data,
'created_at_jalali' => verta($roadItemsProject->created_at)->format('Y/m/d - H:i'),
'created_at' => $roadItemsProject->created_at->toDateTimeString(),
'can_delete' => 0
];
$projectCollection->add($project);
}
}
foreach ($roadPatrolProjects as $roadPatrolProject) {
$subProjects = $roadPatrolProject->roadPatrolSubProjects()
->where('item', '<', '17')->get();
$subItems = [];
foreach ($subProjects as $key => $subProject) {
$subItems[$key] = [
'item' => $subProject->item,
'sub_items' => $subProject->sub_items,
'sub_items_data' => $subProject->sub_items_data
];
}
$project = [
'id' => $roadPatrolProject->id,
'user' => $roadPatrolProject->user->name,
'type' => 'گشت راهداری و ترابری',
'created_at_jalali' => verta($roadPatrolProject->created_at)->format('Y/m/d - H:i'),
'created_at' => $roadPatrolProject->created_at->toDateTimeString(),
'sub_projects' => $subItems,
'can_delete' => 1
];
$projectCollection->add($project);
}
$projectCollection = $projectCollection->sortByDesc('created_at');
foreach ($projectCollection as $project) {
$projectCollectionTemp->add($project);
}
return response()->json([
'status' => 'succeed',
'message' => '',
'data' => [
$projectCollectionTemp->toArray()
]
], 200);
}
public function deleteSpecificUserProject(Request $request)
{
$request->validate([
'id' => 'required|integer',
'type' => 'required|string|in:ri,rp'
]);
if ($request->input('type') == 'ri') {
$project = \App\Models\RoadItemsProject::find($request->input('id'));
$project->files()->delete();
$project->delete();
} else {
$project = \App\Models\RoadPatrolProject::find($request->input('id'));
$subProjects = $project->roadPatrolSubProjects;
foreach ($subProjects as $subProject) {
$subProject->files()->delete();
$subProject->delete();
}
$project->delete();
}
return response()->json([
'status' => 'succeed',
'message' => ''
], 200);
}
public function getAdminProvinceProjectsCount(Request $request)
{
$request->validate([
'start-date' => 'date_format:Y-m-d',
'end-date' => 'date_format:Y-m-d'
]);
if ($request->input('start-date') && $request->input('end-date')) {
$startDate = date($request->input('start-date') . ' 00:00:00');
$endtDate = date($request->input('end-date') . ' 23:59:59');
} else {
$startDate = date('Y-m-d 00:00:00');
$endtDate = date('Y-m-d H:i:s');
}
$provinces = \App\Models\Province::all();
$projectsCount = [];
$countIndex = 0;
$roadItemsCount = 0;
$roadPatrolCount = 0;
$roadConstructionCount = 0;
$fastReaction = 0;
$provinceProjectsCount = 0;
foreach ($provinces as $province) {
$projectsCount[$countIndex]['province_id'] = $province->id;
$projectsCount[$countIndex]['province_name'] = $province->name_fa;
$projectsCount[$countIndex]['roadItemsProjects'] = $province->roadItemsProjects()
->where('item', '<', '17')
->whereBetween('road_items_projects.created_at', [$startDate, $endtDate])->count();
$roadPatrolProjects = $province->roadPatrolProjects()
->whereBetween('road_patrol_projects.created_at', [$startDate, $endtDate])->get();
$projectsCount[$countIndex]['roadPatrolProjects'] = $roadPatrolProjects->count();
$projectsCount[$countIndex]['roadPatrolSubProjects'] = 0;
foreach ($roadPatrolProjects as $roadPatrolProject) {
$projectsCount[$countIndex]['roadPatrolSubProjects'] += $roadPatrolProject->roadPatrolSubProjects()
->where('item', '<', '17')->count();
}
$projectsCount[$countIndex]['roadConstructionProjects'] = $province->roadConstructionProjects()
->whereBetween('road_construction_projects.created_at', [$startDate, $endtDate])->count();
$projectsCount[$countIndex]['fastReaction'] = $province->fastReactionProjects()
->where('road_observeds.rms_status', 1)
->whereBetween('road_observeds.created_at', [$startDate, $endtDate])->count();
$projectsCount[$countIndex]['projectsCount'] = $projectsCount[$countIndex]['roadItemsProjects']
+ $projectsCount[$countIndex]['roadPatrolProjects']
+ $projectsCount[$countIndex]['roadConstructionProjects']
+ $projectsCount[$countIndex]['fastReaction'];
$roadItemsCount += $projectsCount[$countIndex]['roadItemsProjects'];
$roadPatrolCount += $projectsCount[$countIndex]['roadPatrolProjects'];
$roadConstructionCount += $projectsCount[$countIndex]['roadConstructionProjects'];
$fastReaction += $projectsCount[$countIndex]['fastReaction'];
$provinceProjectsCount += $projectsCount[$countIndex]['projectsCount'];
$countIndex++;
}
return response()->json([
'status' => 'succeed',
'message' => '',
'data' => [
'projects' => $projectsCount,
'count' => [
'roadItemsCount' => $roadItemsCount,
'roadPatrolCount' => $roadPatrolCount,
'roadConstructionCount' => $roadConstructionCount,
'fastReaction' => $fastReaction,
'totalCount' => $provinceProjectsCount
]
]
], 200);
}
public function getAdminCityProjectsCount(Request $request)
{
$request->validate([
'province-id' => 'required|integer',
'start-date' => 'date_format:Y-m-d',
'end-date' => 'date_format:Y-m-d'
]);
if ($request->input('start-date') && $request->input('end-date')) {
$startDate = date($request->input('start-date') . ' 00:00:00');
$endtDate = date($request->input('end-date') . ' 23:59:59');
} else {
$startDate = date('Y-m-d 00:00:00');
$endtDate = date('Y-m-d H:i:s');
}
$cities = User::where('province_id', $request->input('province-id'))
->whereNotBetween('id', [466, 470])
->get();
$projectsCount = [];
$countIndex = 0;
$roadItemsCount = 0;
$roadPatrolCount = 0;
$roadConstructionCount = 0;
$cityProjectsCount = 0;
foreach ($cities as $city) {
$projectsCount[$countIndex]['province_id'] = $city->province->id;
$projectsCount[$countIndex]['province_name'] = $city->province->name_fa;
$projectsCount[$countIndex]['city_id'] = $city->id;
$projectsCount[$countIndex]['city_name'] = $city->name;
$projectsCount[$countIndex]['roadItemsProjects'] = $city->roadItemsProjects()
->where('item', '<', '17')
->whereBetween('road_items_projects.created_at', [$startDate, $endtDate])->count();
$roadPatrolProjects = $city->roadPatrolProjects()
->whereBetween('road_patrol_projects.created_at', [$startDate, $endtDate])->get();
$projectsCount[$countIndex]['roadPatrolProjects'] = $roadPatrolProjects->count();
$projectsCount[$countIndex]['roadPatrolSubProjects'] = 0;
foreach ($roadPatrolProjects as $roadPatrolProject) {
$projectsCount[$countIndex]['roadPatrolSubProjects'] += $roadPatrolProject->roadPatrolSubProjects()
->where('item', '<', '17')->count();
}
$projectsCount[$countIndex]['roadConstructionProjects'] = $city->roadConstructionProjects()
->whereBetween('road_construction_projects.created_at', [$startDate, $endtDate])->count();
$projectsCount[$countIndex]['projectsCount'] = $projectsCount[$countIndex]['roadItemsProjects']
+ $projectsCount[$countIndex]['roadPatrolProjects']
+ $projectsCount[$countIndex]['roadConstructionProjects'];
$roadItemsCount += $projectsCount[$countIndex]['roadItemsProjects'];
$roadPatrolCount += $projectsCount[$countIndex]['roadPatrolProjects'];
$roadConstructionCount += $projectsCount[$countIndex]['roadConstructionProjects'];
$cityProjectsCount += $projectsCount[$countIndex]['projectsCount'];
$countIndex++;
}
return response()->json([
'status' => 'succeed',
'message' => '',
'data' => [
'projects' => $projectsCount,
'count' => [
'roadItemsCount' => $roadItemsCount,
'roadPatrolCount' => $roadPatrolCount,
'roadConstructionCount' => $roadConstructionCount,
'totalCount' => $cityProjectsCount
]
]
], 200);
}
public function getProfileAndUserList()
{
$authUser = Auth::user();
$users = null;
$usersArray = [];
if ($authUser->id == 470) { // witel
$users = User::whereNotIn('id', [470])
->get();
} elseif ($authUser->id == 469) { // danesh
$users = User::whereNotIn('id', [466, 469, 470])
->get();
} elseif ($authUser->id <= 35) {
$users = User::where('province_id', $authUser->province_id)
->where('id', '>', 35)
->whereNotBetween('id', [466, 470])
->get();
} else {
//
}
$usersArray[0] = [
'id' => $authUser->id,
'provinceName' => ($authUser->province_id) ? $authUser->province->name_fa : '-',
'name' => $authUser->name,
'username' => $authUser->username,
'password' => '-',
'firstName' => $authUser->first_name ?? '-',
'lastName' => $authUser->last_name ?? '-',
'mobile' => $authUser->mobile ?? '-',
'lastSubmit' => '-',
'status' => '-',
'degree' => $authUser->degree ?? '-',
'photo' => (($authUser->photo) ?
asset('storage' . substr($authUser->photo, 6)) :
'https://rms.rmto.ir/storage/no-image-1.jpg'),
'delete' => 0
];
foreach ($users as $key => $user) {
$usersArray[$key + 1] = [
'id' => $user->id,
'provinceName' => ($user->province_id) ? $user->province->name_fa : '-',
'name' => $user->name,
'username' => $user->username,
'password' => '-',
'firstName' => $user->first_name ?? '-',
'lastName' => $user->last_name ?? '-',
'mobile' => $user->mobile ?? '-',
'lastSubmit' => '-',
'status' => '-',
'degree' => $user->degree ?? '-',
'photo' => (($user->photo) ?
asset('storage' . substr($user->photo, 6)) :
'https://rms.rmto.ir/storage/no-image-1.jpg'),
'delete' => 1
];
}
return response()->json([
'status' => 'succeed',
'message' => '',
'data' => [
'users' => $usersArray
]
], 200);
}
public function getProfileAndUserListPublic()
{
$authUser = User::find(470);
$users = null;
$usersArray = [];
if ($authUser->id == 470) { // witel
$users = User::whereNotIn('id', [470])
->get();
} elseif ($authUser->id == 469) { // danesh
$users = User::whereNotIn('id', [466, 469, 470])
->get();
} elseif ($authUser->id <= 35) {
$users = User::where('province_id', $authUser->province_id)
->where('id', '>', 35)
->whereNotBetween('id', [466, 470])
->get();
} else {
//
}
$usersArray[0] = [
'id' => $authUser->id,
'provinceName' => ($authUser->province_id) ? $authUser->province->name_fa : '-',
'name' => $authUser->name,
'username' => $authUser->username,
'password' => '-',
'firstName' => $authUser->first_name ?? '-',
'lastName' => $authUser->last_name ?? '-',
'mobile' => $authUser->mobile ?? '-',
'lastSubmit' => '-',
'status' => '-',
'degree' => $authUser->degree ?? '-',
'photo' => (($authUser->photo) ?
asset('storage' . substr($authUser->photo, 6)) :
'https://rms.rmto.ir/storage/no-image-1.jpg'),
'delete' => 0
];
foreach ($users as $key => $user) {
$usersArray[$key + 1] = [
'id' => $user->id,
'provinceName' => ($user->province_id) ? $user->province->name_fa : '-',
'name' => $user->name,
'username' => $user->username,
'password' => '-',
'firstName' => $user->first_name ?? '-',
'lastName' => $user->last_name ?? '-',
'mobile' => $user->mobile ?? '-',
'lastSubmit' => '-',
'status' => '-',
'degree' => $user->degree ?? '-',
'photo' => (($user->photo) ?
asset('storage' . substr($user->photo, 6)) :
'https://rms.rmto.ir/storage/no-image-1.jpg'),
'delete' => 1
];
}
return response()->json([
'status' => 'succeed',
'message' => '',
'data' => [
'users' => $usersArray
]
], 200);
}
public function getUserListPage()
{
return view('rmto-preview.pages.management.user-list-new');
}
public function updateUserInfo(Request $request, $id)
{
$request->validate([
'name' => 'string',
'username' => 'string|unique:users,username',
'fname' => 'string',
'lname' => 'string',
'mobile' => 'digits:11|regex:/^09[0-9]{9}$/i',
'degree' => 'string',
'image' => 'image',
'password' => 'string|min:8|confirmed|regex:/^(?=.*?[A-Z])(?=.*?[a-z])(?=.*?[0-9]).{8,}$/'
]);
$user = User::find($id);
$user->name = $request->input('name') ?? $user->name;
$user->username = $request->input('username') ?? $user->username;
$user->first_name = $request->input('fname') ?? $user->first_name;
$user->last_name = $request->input('lname') ?? $user->last_name;
$user->mobile = $request->input('mobile') ?? $user->mobile;
$user->degree = $request->input('degree') ?? $user->degree;
if ($request->file('image')) {
$user->photo = $request->file('image')->store('public/users/photo');
}
if ($request->input('password')) {
$user->password = Hash::make($request->input('password'));
}
//$user->save();
return response()->json([
'status' => 'succeed',
'message' => '',
'data' => $user
], 201);
}
public function getRoadItemsProjectsStat(Request $request)
{
$request->validate([
'start-date' => 'date_format:Y-m-d',
'end-date' => 'date_format:Y-m-d'
]);
if ($request->input('start-date') && $request->input('end-date')) {
$startDate = date($request->input('start-date') . ' 00:00:00');
$endtDate = date($request->input('end-date') . ' 23:59:59');
} else {
$startDate = date('Y-m-d 00:00:00');
$endtDate = date('Y-m-d H:i:s');
}
//// if role admin in code
if (Auth::user()->username == 'witel' || Auth::user()->username == 'drdanesh') {
$roadItemsProjects = \App\Models\RoadItemsProject::whereBetween('created_at', [$startDate, $endtDate])
->get();
} else {
//// else in code
$roadItemsProjects = \App\Models\RoadItemsProject::where('province_id', Auth::user()->province_id)
->whereBetween('created_at', [$startDate, $endtDate])
->get();
}
$subItems = [];
$subItems['project'] = $roadItemsProjects->count();
foreach ($roadItemsProjects as $project) {
if (isset($subItems['item_' . $project->item]) && $subItems['item_' . $project->item] > 0) {
$subItems['item_' . $project->item]++;
} else {
$subItems['item_' . $project->item] = 1;
}
}
for ($i = 1; $i < 18; $i++) {
if (!isset($subItems['item_' . $i])) {
$subItems['item_' . $i] = 0;
}
}
return response()->json([
'status' => 'succeed',
'message' => '',
'data' => [
$subItems
]
], 200);
}
public function getAdminProvinceProjectsItem(Request $request, $id)
{
$request->validate([
'start-date' => 'date_format:Y-m-d',
'end-date' => 'date_format:Y-m-d'
]);
if ($request->input('start-date') && $request->input('end-date')) {
$startDate = date($request->input('start-date') . ' 00:00:00');
$endtDate = date($request->input('end-date') . ' 23:59:59');
} else {
$startDate = date('Y-m-d 00:00:00');
$endtDate = date('Y-m-d H:i:s');
}
$province = \App\Models\Province::find($id);
///// if role admin kole in code
if (Auth::user()->username == 'witel' || Auth::user()->username == 'drdanesh') {
$roadItemsProjects = $province->roadItemsProjects()
->whereBetween('road_items_projects.created_at', [$startDate, $endtDate])
->get();
$roadPatrolProjects = $province->roadPatrolProjects()
->whereBetween('road_patrol_projects.created_at', [$startDate, $endtDate])
->get();
$fastReactionProjects = $province->fastReactionProjects()
->where('road_observeds.rms_status', 1)
->whereBetween('road_observeds.created_at', [$startDate, $endtDate])
->get();
} else {
//// else in code
$roadItemsProjects = $province->roadItemsProjects()
->where('province_id', $id)
->whereBetween('road_items_projects.created_at', [$startDate, $endtDate])
->get();
$roadPatrolProjects = $province->roadPatrolProjects()
->where('province_id', $id)
->whereBetween('road_patrol_projects.created_at', [$startDate, $endtDate])
->get();
$fastReactionProjects = $province->fastReactionProjects()
->where('rms_province_id', $id)
->where('road_observeds.rms_status', 1)
->whereBetween('road_observeds.created_at', [$startDate, $endtDate])
->get();
}
$projectCollection = new \Illuminate\Support\Collection();
$projectCollectionTemp = new \Illuminate\Support\Collection();
foreach ($roadItemsProjects as $roadItemsProject) {
if ($roadItemsProject->user->username == 'witel' || $roadItemsProject->user->username == 'drdanesh') {
continue;
}
$canDelete = 1;
if (($roadItemsProject->sub_items != null && $roadItemsProject->sub_items_data != null)
&& sizeof($roadItemsProject->sub_items) > 0) {
$dataKeys = array_keys($roadItemsProject->sub_items_data);
foreach ($roadItemsProject->sub_items as $key => $subItem) {
$subItemData = null;
if (isset($dataKeys[$key])) {
$subItemData = [
$dataKeys[$key] => $roadItemsProject->sub_items_data[$dataKeys[$key]]
];
}
$project = [
'id' => $roadItemsProject->id,
'user' => $roadItemsProject->user->name,
'type' => 'فعالیت روزانه و جاری راهداری',
'item' => $roadItemsProject->item,
'sub_items' => [$subItem],
'sub_items_data' => $subItemData,
'created_at_jalali' => verta($roadItemsProject->created_at)->format('Y/m/d - H:i'),
'created_at' => $roadItemsProject->created_at->toDateTimeString(),
'can_delete' => $canDelete
];
$projectCollection->add($project);
}
} else {
$project = [
'id' => $roadItemsProject->id,
'user' => $roadItemsProject->user->name,
'type' => 'فعالیت روزانه و جاری راهداری',
'item' => $roadItemsProject->item,
'sub_items' => $roadItemsProject->sub_items,
'sub_items_data' => $roadItemsProject->sub_items_data,
'created_at_jalali' => verta($roadItemsProject->created_at)->format('Y/m/d - H:i'),
'created_at' => $roadItemsProject->created_at->toDateTimeString(),
'can_delete' => $canDelete
];
$projectCollection->add($project);
}
}
foreach ($roadPatrolProjects as $roadPatrolProject) {
if ($roadPatrolProject->user->username == 'witel' || $roadPatrolProject->user->username == 'drdanesh') {
continue;
}
$subProjects = $roadPatrolProject->roadPatrolSubProjects()
->where('item', '<', '22')->get();
$subItems = [];
foreach ($subProjects as $key => $subProject) {
$subItems[$key] = [
'item' => $subProject->item,
'sub_items' => $subProject->sub_items,
'sub_items_data' => $subProject->sub_items_data
];
}
$canDelete = 1;
$project = [
'id' => $roadPatrolProject->id,
'user' => $roadPatrolProject->user->name,
'type' => 'گشت راهداری و ترابری',
'created_at_jalali' => verta($roadPatrolProject->created_at)->format('Y/m/d - H:i'),
'created_at' => $roadPatrolProject->created_at->toDateTimeString(),
'sub_projects' => $subItems,
'can_delete' => $canDelete
];
$projectCollection->add($project);
}
foreach ($fastReactionProjects as $fastReactionProject) {
$project = [
'id' => $fastReactionProject->id,
'user' => 'شهرستان ' . $fastReactionProject->TownName,
'type' => 'واکنش سریع',
'created_at_jalali' => verta($fastReactionProject->created_at)->format('Y/m/d - H:i'),
'created_at' => $fastReactionProject->created_at->toDateTimeString(),
'can_delete' => 0
];
$projectCollection->add($project);
}
$projectCollection = $projectCollection->sortByDesc('created_at');
foreach ($projectCollection as $project) {
$projectCollectionTemp->add($project);
}
return response()->json([
'status' => 'succeed',
'message' => '',
'data' => [
$projectCollectionTemp->toArray()
]
], 200);
}
public function get_city_items(Request $request)
{
// $user = Auth::user();
// $id = $user->id;
$id = 1;
$p_p = 7;
if ($request->input('date-from') and $request->input('date-to')) {
$date_from = new Verta($request->input('date-from'));
$date_to = new Verta($request->input('date-to'));
$date_bool = 1;
} else {
$date_from = date("Y-m-d");
$date_from .=' 00:00:01';
$date_to = date("Y-m-d H:i:s");
$date_bool = 1;
}
////// check for admin
if ($id == 469 || $id == 470) {
echo 'nothing';
$province = $request->input('province-id');
} else {
// $p_p = $user->province_id;
$itemss = DB::table('road_items_projects')
->when($date_from != null and $date_to != null, function ($query) use ($date_from, $date_to) {
return $query->whereBetween('road_items_projects.created_at', [$date_from, $date_to]);
})
->when(!empty($p_p), function ($query) use ($p_p) {
return $query->where('users.province_id', '>', $p_p);
})
->leftJoin('users', 'users.id', '=', 'road_items_projects.user_id')
->leftJoin('cities', 'cities.id', '=', 'users.city_id')
->where('city_id', '>', 0)
->select('count(*) as count, item, city_id, name_fa')
->groupBy('city_id', 'item')
->get();
// $items_array = $itemss->toArray();
$counts = array();
$lastkey = null;
// return $itemss;
$tmp = null;
// $counts['count_all'] = 0;
$count_all = 0;
foreach ($itemss as $key => $value) {
if ($key > 0) {
if ($value->city_id == $counts[$lastkey]['city_id']) {
$counts[$lastkey]['items'] += [$value->item => $value->count];
$counts[$lastkey]['count_items'] += $value->count;
$count_all += $value->count;
continue;
}
}
$counts[$key] = [
'city_id' => $value->city_id,
'city_na' => $value->name_fa,
'items' => [
$value->item => $value->count
],
'count_items' => $value->count
];
$count_all += $value->count;
$lastkey = $key;
}
// $tmp['count_all'] = $counts['count_all'];
// unset($counts['count_all']);
// return $tmp;
$tmp = array_values($counts);
return response()->json([
'status' => 'succeed',
'message' => '',
'data' => $tmp,
'count_all' => $count_all
], 200);
}
}
public function getAdminProjectItems(Request $request)
{
$provinceID = $request->province_id ?? null;
$request->validate([
'start-date' => 'date_format:Y-m-d',
'end-date' => 'date_format:Y-m-d'
]);
if ($request->input('start-date') && $request->input('end-date')) {
$startDate = date($request->input('start-date') . ' 00:00:00');
$endtDate = date($request->input('end-date') . ' 23:59:59');
} else {
$startDate = date('Y-m-d 00:00:00');
$endtDate = date('Y-m-d H:i:s');
}
if (Auth::user()->username == 'witel' || Auth::user()->username == 'drdanesh') {
$roadItemsProjects = \App\Models\RoadItemsProject::whereBetween('road_items_projects.created_at', [$startDate, $endtDate])
->when($provinceID, function ($query, $provinceID) {
return $query->where('province_id', $provinceID);
})
->get();
$roadPatrolProjects = \App\Models\RoadPatrolProject::whereBetween('road_patrol_projects.created_at', [$startDate, $endtDate])
->when($provinceID, function ($query, $provinceID) {
return $query->where('province_id', $provinceID);
})
->get();
$fastReactionProjects = \App\Models\RoadObserved::where('road_observeds.rms_status', 1)
->whereBetween('road_observeds.created_at', [$startDate, $endtDate])
->when($provinceID, function ($query, $provinceID) {
return $query->where('rms_province_id', $provinceID);
})
->get();
} else {
$roadItemsProjects = \App\Models\RoadItemsProject::whereBetween('road_items_projects.created_at', [$startDate, $endtDate])
->where('province_id', Auth::user()->province_id)
->get();
$roadPatrolProjects = \App\Models\RoadPatrolProject::whereBetween('road_patrol_projects.created_at', [$startDate, $endtDate])
->where('province_id', Auth::user()->province_id)
->get();
$fastReactionProjects = \App\Models\RoadObserved::where('road_observeds.rms_status', 1)
->whereBetween('road_observeds.created_at', [$startDate, $endtDate])
->where('rms_province_id', Auth::user()->province_id)
->get();
}
$projectCollection = new \Illuminate\Support\Collection();
$projectCollectionTemp = new \Illuminate\Support\Collection();
foreach ($roadItemsProjects as $roadItemsProject) {
if ($roadItemsProject->user->username == 'witel' || $roadItemsProject->user->username == 'drdanesh') {
continue;
}
$canDelete = 1;
if (($roadItemsProject->sub_items != null && $roadItemsProject->sub_items_data != null)
&& sizeof($roadItemsProject->sub_items) > 0) {
$dataKeys = array_keys($roadItemsProject->sub_items_data);
foreach ($roadItemsProject->sub_items as $key => $subItem) {
$subItemData = null;
if (isset($dataKeys[$key])) {
$subItemData = [
$dataKeys[$key] => $roadItemsProject->sub_items_data[$dataKeys[$key]]
];
}
$project = [
'id' => $roadItemsProject->id,
'user' => $roadItemsProject->user->name,
'province' => $roadItemsProject->user->province_fa,
'type' => 'فعالیت روزانه و جاری راهداری',
'item' => $roadItemsProject->item,
'sub_items' => [$subItem],
'sub_items_data' => $subItemData,
'created_at_jalali' => verta($roadItemsProject->created_at)->format('Y/m/d - H:i'),
'created_at' => $roadItemsProject->created_at->toDateTimeString(),
'can_delete' => $canDelete
];
$projectCollection->add($project);
}
} else {
$project = [
'id' => $roadItemsProject->id,
'user' => $roadItemsProject->user->name,
'province' => $roadItemsProject->user->province_fa,
'type' => 'فعالیت روزانه و جاری راهداری',
'item' => $roadItemsProject->item,
'sub_items' => $roadItemsProject->sub_items,
'sub_items_data' => $roadItemsProject->sub_items_data,
'created_at_jalali' => verta($roadItemsProject->created_at)->format('Y/m/d - H:i'),
'created_at' => $roadItemsProject->created_at->toDateTimeString(),
'can_delete' => $canDelete
];
$projectCollection->add($project);
}
}
foreach ($roadPatrolProjects as $roadPatrolProject) {
if ($roadPatrolProject->user->username == 'witel' || $roadPatrolProject->user->username == 'drdanesh') {
continue;
}
$subProjects = $roadPatrolProject->roadPatrolSubProjects()
->get();
$subItems = [];
foreach ($subProjects as $key => $subProject) {
$subItems[$key] = [
'item' => $subProject->item,
'sub_items' => $subProject->sub_items,
'sub_items_data' => $subProject->sub_items_data
];
}
$canDelete = 1;
$project = [
'id' => $roadPatrolProject->id,
'user' => $roadPatrolProject->user->name,
'province' => $roadPatrolProject->user->province_fa,
'type' => 'گشت راهداری و ترابری',
'created_at_jalali' => verta($roadPatrolProject->created_at)->format('Y/m/d - H:i'),
'created_at' => $roadPatrolProject->created_at->toDateTimeString(),
'sub_projects' => $subItems,
'can_delete' => $canDelete
];
$projectCollection->add($project);
}
foreach ($fastReactionProjects as $fastReactionProject) {
$project = [
'id' => $fastReactionProject->id,
'user' => 'شهرستان ' . $fastReactionProject->TownName,
'province' => $fastReactionProject->ProvinceName,
'type' => 'واکنش سریع',
'created_at_jalali' => verta($fastReactionProject->created_at)->format('Y/m/d - H:i'),
'created_at' => $fastReactionProject->created_at->toDateTimeString(),
'can_delete' => 0
];
$projectCollection->add($project);
}
$projectCollection = $projectCollection->sortByDesc('created_at');
foreach ($projectCollection as $project) {
$projectCollectionTemp->add($project);
}
return response()->json([
'status' => 'succeed',
'message' => '',
'data' => [
$projectCollectionTemp->toArray()
]
], 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 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 getUserPermissionsTypes()
{
$auth_user_permissions_types = auth()->user()->permissions()->groupBy('type')->pluck('type')->toArray();
return response()->json([
'status' => 200,
'data' => $auth_user_permissions_types
]);
}
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 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);
}
}
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 getAllPermissions()
{
$permissions = Permission::select('id', 'name', 'name_fa', 'description', 'type', 'need_province', 'need_edare_shahri', 'type_fa')
->orderBy('type')
// ->where('id', '>', 9)
->get();
return response()->json([
'Permissions' => $permissions,
]);
}
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 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 showAllRoles(Request $request)
{
$roles = Role::where('for_report', 0)->get();
return response()->json([
'message' => 'success',
'data' => $roles
]);
}
public function showRole($id, Request $request)
{
$role = Role::where('id', $id)->with('permissions:id,name,name_fa,description')->first();
return response()->json([
'message' => 'success',
'data' => [
'role' => Role::whereId($id)->first(),
'permissions' => $role->permissions
]
]);
}
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 profile()
// {
// return response()->json([
// 'message' => 'success',
// 'data' => Auth::user()->get()
// ]);
// }
public function profile_edit(Request $request)
{
$user = Auth::user();
$validData = $request->validate([
'first_name' => 'required',
'last_name' => 'required',
'degree' => 'required',
'major' => 'required',
'mobile' => 'required',
]);
$user->first_name = $request->first_name;
$user->last_name = $request->last_name;
$user->degree = $request->degree;
$user->major = $request->major;
if (!is_null($request->password)) {
$user->password = Hash::make($request->password);
}
$user->mobile = $request->mobile;
$user->save();
if ($request->has('avatar')) {
File::delete($user->avatar);
$destinationPath = 'avatar/' . $user->username;
$filename = time() .".". $request->file('avatar')->getClientOriginalExtension();
$request->file('avatar')->storeAs($destinationPath, $filename, 'public');
$user->update(['avatar' => 'storage/'.$destinationPath ."/". $filename]);
}
return response()->json([
'message' => 'success',
'data' => $user,
]);
}
public function storeInformation(Request $request)
{
$user = Auth::user();
$validData = $request->validate([
'first_name' => 'required',
'last_name' => 'required',
'degree' => 'required',
'major' => 'required',
'mobile' => 'required',
'password' => 'required',
]);
$user->first_name = $request->first_name;
$user->last_name = $request->last_name;
$user->degree = $request->degree;
$user->major = $request->major;
$user->mobile = $request->mobile;
$user->password = Hash::make($request->password);
$user->confirmed = 1;
$user->save();
if ($request->has('avatar')) {
Storage::delete('public/' . $user->avatar);
$destinationPath = 'avatar/' . $user->username;
$filename = time() .".". $request->file('avatar')->getClientOriginalExtension();
$request->file('avatar')->storeAs($destinationPath, $filename, 'public');
$user->update(['avatar' => 'storage/'.$destinationPath ."/". $filename]);
}
return response()->json([
'message' => 'success',
'data' => $user,
]);
}
public function getMyData()
{
return response()->json([
'message' => 'success',
'data' => Auth::user()
]);
}
}