From 9d0dd9bbab041e092349396feb3504e86151a9be Mon Sep 17 00:00:00 2001
From: Truong Vo <41848815+vmtruong301296@users.noreply.github.com>
Date: Sat, 21 Sep 2024 10:46:03 +0700
Subject: [PATCH 1/2] =?UTF-8?q?B=E1=BB=95=20sung=20view=20badge=20cho=20n?=
=?UTF-8?q?=E1=BB=99i=20dung=20level?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../pages/StaffEvaluation/StaffEvaluation.tsx | 29 ++++++++++++-------
1 file changed, 18 insertions(+), 11 deletions(-)
diff --git a/FRONTEND/src/pages/StaffEvaluation/StaffEvaluation.tsx b/FRONTEND/src/pages/StaffEvaluation/StaffEvaluation.tsx
index 996ae61..18e351e 100644
--- a/FRONTEND/src/pages/StaffEvaluation/StaffEvaluation.tsx
+++ b/FRONTEND/src/pages/StaffEvaluation/StaffEvaluation.tsx
@@ -198,17 +198,24 @@ const StaffEvaluation = () => {
size: '10%',
header: 'Level',
render: (row: any) => {
- if (row.level)
- return (
-
- {row?.level}
-
- )
+ return (
+
+ {row?.level ? row.level : ''}
+
+ )
},
},
{
From 7622e7a95bd345f7e070fe6a59cd2777c81ded12 Mon Sep 17 00:00:00 2001
From: JOSEPH LE
Date: Sat, 21 Sep 2024 10:50:03 +0700
Subject: [PATCH 2/2] update cache and UI
---
.../Controllers/LeaveManagementController.php | 2 +
.../Controllers/TimekeepingController.php | 10 +--
.../app/Http/Controllers/UserController.php | 72 ++++++++++---------
BACKEND/app/Traits/AnalyzeData.php | 18 ++++-
FRONTEND/src/components/Navbar/Navbar.tsx | 1 +
.../pages/LeaveManagement/LeaveManagement.tsx | 10 ++-
.../src/pages/Timekeeping/Timekeeping.tsx | 10 ++-
7 files changed, 81 insertions(+), 42 deletions(-)
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}
+
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}
+
{totalDays}