diff --git a/BACKEND/Modules/Admin/app/Http/Controllers/LeaveManagementController.php b/BACKEND/Modules/Admin/app/Http/Controllers/LeaveManagementController.php index 064507c..d9d8caf 100644 --- a/BACKEND/Modules/Admin/app/Http/Controllers/LeaveManagementController.php +++ b/BACKEND/Modules/Admin/app/Http/Controllers/LeaveManagementController.php @@ -72,6 +72,7 @@ class LeaveManagementController extends Controller 'users.id as user_id', 'users.name as user_name', 'users.email', + 'users.avatar', 'users.created_at as user_created_at', 'users.permission', 'users.updated_at as user_updated_at', @@ -92,6 +93,7 @@ class LeaveManagementController extends Controller 'id' => $item->user_id, 'name' => $item->user_name, 'email' => $item->email, + 'avatar' => $item->avatar, 'created_at' => $item->user_created_at, 'permission' => $item->permission, 'updated_at' => $item->user_updated_at, diff --git a/BACKEND/Modules/Admin/app/Http/Controllers/TimekeepingController.php b/BACKEND/Modules/Admin/app/Http/Controllers/TimekeepingController.php index 14e3165..d23ac3b 100644 --- a/BACKEND/Modules/Admin/app/Http/Controllers/TimekeepingController.php +++ b/BACKEND/Modules/Admin/app/Http/Controllers/TimekeepingController.php @@ -33,24 +33,24 @@ class TimekeepingController extends Controller $cacheData = CurrentMonthTimekeeping::getCacheCurrentMonthTimekeeping(); if ($cacheData) { $cacheData->data = json_decode($cacheData->data, true); - return response()->json(['status' => true, 'data' => $cacheData->data, 'working_days' => $cacheData->working_days, 'message' => 'Get from cache']); + return response()->json(['status' => true, 'data' => $this->appendUsersInformation($cacheData->data), 'working_days' => $cacheData->working_days, 'message' => 'Get from cache']); } else { $result = $this->analyzeCurrentMonthTimeKeepingData($currentMonth, $currentYear); if ($data) { $data->update(['data' => json_encode($result)]); - return response()->json(['status' => true, 'data' => $result, 'message' => 'Get from analyzeCurrentMonthTimeKeepingData + update record']); + return response()->json(['status' => true, 'data' => $this->appendUsersInformation($result), 'message' => 'Get from analyzeCurrentMonthTimeKeepingData + update record']); } MonthlyTimekeeping::create(['month' => $currentMonth, 'year' => $currentYear, 'working_days' => $currentDate->daysInMonth, 'data' => json_encode($result)]); - return response()->json(['status' => true, 'data' => $result, 'message' => 'Get from analyzeCurrentMonthTimeKeepingData + create record']); + return response()->json(['status' => true, 'data' => $this->appendUsersInformation($result), 'message' => 'Get from analyzeCurrentMonthTimeKeepingData + create record']); } } else { if ($data) { $data['data'] = json_decode($data['data']); - return response()->json(['status' => true, 'data' => $data['data'], 'working_days' => $data['working_days'], 'message' => 'Get from DB']); + return response()->json(['status' => true, 'data' => $this->appendUsersInformation($data['data']), 'working_days' => $data['working_days'], 'message' => 'Get from DB']); } else { $result = $this->analyzeCurrentMonthTimeKeepingData($request->month, $request->year); MonthlyTimekeeping::create(['month' => $request->month, 'year' => $request->year, 'working_days' => Carbon::create((int)$request->year, (int)$request->month)->daysInMonth, 'data' => json_encode($result)]); - return response()->json(['status' => true, 'data' => $result, 'message' => 'Get from analyzeCurrentMonthTimeKeepingData']); + return response()->json(['status' => true, 'data' => $this->appendUsersInformation($result), 'message' => 'Get from analyzeCurrentMonthTimeKeepingData']); } } return response()->json(['status' => false, 'mewssage' => 'Get data failed!']); diff --git a/BACKEND/Modules/Auth/app/Http/Controllers/UserController.php b/BACKEND/Modules/Auth/app/Http/Controllers/UserController.php index 51804a8..bb1e898 100755 --- a/BACKEND/Modules/Auth/app/Http/Controllers/UserController.php +++ b/BACKEND/Modules/Auth/app/Http/Controllers/UserController.php @@ -54,45 +54,49 @@ class UserController extends Controller 'url' => 'https://ms.prology.net' ]; - $gitea = Http::withHeaders([ - 'Authorization' => 'token ' . env('GITEA_ADMIN_TOKEN'), - 'Accept' => 'application/json', - ])->post('https://gitea.nswteam.net/api/v1/admin/users', [ - 'email' => $request->email, - 'full_name' => $request->name, - 'login_name' => Str::of($request->name)->lower()->replace(' ', ''), - 'password' => 'Work@1234', - 'must_change_password' => false, - 'send_notify' => false, - 'username' => Str::of($request->name)->lower()->replace(' ', '') - ]); + if (env('APP_ENV') == 'prod' || env('APP_ENV') == 'production') { + $gitea = Http::withHeaders([ + 'Authorization' => 'token ' . env('GITEA_ADMIN_TOKEN'), + 'Accept' => 'application/json', + ])->post('https://gitea.nswteam.net/api/v1/admin/users', [ + 'email' => $request->email, + 'full_name' => $request->name, + 'login_name' => Str::of($request->name)->lower()->replace(' ', ''), + 'password' => 'Work@1234', + 'must_change_password' => false, + 'send_notify' => false, + 'username' => Str::of($request->name)->lower()->replace(' ', '') + ]); - $gitea_data = $gitea->json(); + $gitea_data = $gitea->json(); - $gitea_res = [ - "login" => $gitea_data['login'], - "full_name" => $gitea_data['full_name'], - "email" => $gitea_data['email'], - "password" => 'Work@1234', - "url" => 'https://gitea.nswteam.net', - ]; + $gitea_res = [ + "login" => $gitea_data['login'], + "full_name" => $gitea_data['full_name'], + "email" => $gitea_data['email'], + "password" => 'Work@1234', + "url" => 'https://gitea.nswteam.net', + ]; - $adminEmail = env('ZULIP_ADMIN_EMAIL'); - $apiKey = env('ZULIP_API_KEY'); - $apiUrl = env('ZULIP_API_URL') . '/invites'; + $adminEmail = env('ZULIP_ADMIN_EMAIL'); + $apiKey = env('ZULIP_API_KEY'); + $apiUrl = env('ZULIP_API_URL') . '/invites'; - $zulip = Http::asForm()->withBasicAuth($adminEmail, $apiKey)->post($apiUrl, [ - 'invitee_emails' => $request->email, - 'invite_expires_in_minutes' => 1440, - 'invite_as' => 400, - 'stream_ids' => '[22]' - ]); + $zulip = Http::asForm()->withBasicAuth($adminEmail, $apiKey)->post($apiUrl, [ + 'invitee_emails' => $request->email, + 'invite_expires_in_minutes' => 1440, + 'invite_as' => 400, + 'stream_ids' => '[22]' + ]); - $zulip_data = $zulip->json(); - $zulip_data['msg'] = 'Check inbox email ' . $request->email; - $zulip_data['url'] = 'https://zulip.ipsupply.com.au'; + $zulip_data = $zulip->json(); + $zulip_data['msg'] = 'Check inbox email ' . $request->email; + $zulip_data['url'] = 'https://zulip.ipsupply.com.au'; - return response()->json(['data' => ['user' => $user_res, 'gitea' => $gitea_res, 'zulip' => $zulip_data], 'status' => true, 'message' => 'Create successful']); + return response()->json(['data' => ['user' => $user_res, 'gitea' => $gitea_res, 'zulip' => $zulip_data], 'status' => true, 'message' => 'Create successful']); + } else { + return response()->json(['data' => ['user' => $user_res, 'gitea' => "dev", 'zulip' => "dev"], 'status' => true, 'message' => 'Create successful']); + } } return response()->json(['status' => false, 'message' => 'Process fail']); @@ -123,7 +127,7 @@ class UserController extends Controller if ($user) { if (!$user->qrcode) { // Generate the QR code and save it to storage - QrCode::size(500)->margin(2)->generate($qrCodeContent, Storage::path('public/'.$filePath)); + QrCode::size(500)->margin(2)->generate($qrCodeContent, Storage::path('public/' . $filePath)); // Update the user's record with the QR code file path $user->qrcode = $filePath; $user->save(); diff --git a/BACKEND/app/Traits/AnalyzeData.php b/BACKEND/app/Traits/AnalyzeData.php index 3b86196..e7fb691 100644 --- a/BACKEND/app/Traits/AnalyzeData.php +++ b/BACKEND/app/Traits/AnalyzeData.php @@ -4,6 +4,7 @@ namespace App\Traits; use App\Helper\Cache\CurrentMonthTimekeeping; use App\Models\Notes; +use App\Models\User; use Carbon\Carbon; use Illuminate\Http\JsonResponse; use Illuminate\Support\Facades\DB; @@ -100,7 +101,7 @@ trait AnalyzeData } } - $result[] = ['user' => $admin, 'history' => $user_data]; + $result[] = ['user' => $admin->id, 'history' => $user_data]; } return $result; } @@ -119,4 +120,19 @@ trait AnalyzeData CurrentMonthTimekeeping::cleanCacheCurrentMonthTimekeeping(); return; } + + public function appendUsersInformation($results) + { + $users = User::all(); + $data = []; + foreach($users as $user){ + foreach($results as $result){ + $result = (array)$result; + if($result['user'] === $user->id){ + $data[] = ['user'=> $user, 'history' => $result['history']]; + } + } + } + return $data; + } } diff --git a/FRONTEND/src/components/Navbar/Navbar.tsx b/FRONTEND/src/components/Navbar/Navbar.tsx index a2fb7b4..afe19fd 100755 --- a/FRONTEND/src/components/Navbar/Navbar.tsx +++ b/FRONTEND/src/components/Navbar/Navbar.tsx @@ -138,6 +138,7 @@ const data = [ label: 'Organization Settings', icon: IconSettings, group: 'admin', + permissions: 'admin', }, // { link: '/jira', label: 'Jira', icon: IconSubtask }, // { link: '/custom-theme', label: 'Custom Theme', icon: IconBrush }, diff --git a/FRONTEND/src/pages/LeaveManagement/LeaveManagement.tsx b/FRONTEND/src/pages/LeaveManagement/LeaveManagement.tsx index 4aa1d0f..4b9b176 100644 --- a/FRONTEND/src/pages/LeaveManagement/LeaveManagement.tsx +++ b/FRONTEND/src/pages/LeaveManagement/LeaveManagement.tsx @@ -2,6 +2,7 @@ import { getLeaveManagement, updateNoteLeave } from '@/api/Admin' import { update } from '@/rtk/helpers/CRUD' import { get } from '@/rtk/helpers/apiService' import { + Avatar, Box, Button, Drawer, @@ -30,6 +31,7 @@ interface User { email_verified_at: string | null permission: string remember_token: string | null + avatar: string created_at: string | null updated_at: string | null } @@ -458,7 +460,13 @@ const LeaveManagement = () => { {index + 1} -
{user.user.name}
+
{user.user.name}
diff --git a/FRONTEND/src/pages/Timekeeping/Timekeeping.tsx b/FRONTEND/src/pages/Timekeeping/Timekeeping.tsx index 8687c9a..b3d00f2 100644 --- a/FRONTEND/src/pages/Timekeeping/Timekeeping.tsx +++ b/FRONTEND/src/pages/Timekeeping/Timekeeping.tsx @@ -9,6 +9,7 @@ import { import { update, Xdelete } from '@/rtk/helpers/CRUD' import { get } from '@/rtk/helpers/apiService' import { + Avatar, Box, Button, Drawer, @@ -43,6 +44,7 @@ interface User { email_verified_at: string | null permission: string remember_token: string | null + avatar: string created_at: string | null updated_at: string | null } @@ -864,7 +866,13 @@ const Timekeeping = () => { // offset={{ mainAxis: 5, crossAxis: 0 }} label={showTooltipAllNote(user)} > -
{user.user.name}
+
{user.user.name}
{totalDays}