Merge pull request 'update cache and UI' (#74) from joseph.update_navbar_permissions into master

Reviewed-on: #74
This commit is contained in:
joseph 2024-09-21 13:50:39 +10:00
commit 73f762b822
7 changed files with 81 additions and 42 deletions

View File

@ -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,

View File

@ -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!']);

View File

@ -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();

View File

@ -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;
}
}

View File

@ -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 },

View File

@ -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 = () => {
<Table.Td ta={'center'}>{index + 1}</Table.Td>
<Table.Td>
<Tooltip multiline label={user.user.name}>
<div>{user.user.name}</div>
<div style={{display:'flex', alignItems:'center'}}><Avatar size={'md'} mr={'md'} src={import.meta.env.VITE_BACKEND_URL.includes('local')
? import.meta.env.VITE_BACKEND_URL +
'storage/' +
user.user.avatar
: import.meta.env.VITE_BACKEND_URL +
'image/storage/' +
user.user.avatar}/>{user.user.name}</div>
</Tooltip>
</Table.Td>

View File

@ -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)}
>
<div>{user.user.name}</div>
<div style={{display:'flex', alignItems:'center'}}><Avatar size={'md'} mr={'md'} src={import.meta.env.VITE_BACKEND_URL.includes('local')
? import.meta.env.VITE_BACKEND_URL +
'storage/' +
user.user.avatar
: import.meta.env.VITE_BACKEND_URL +
'image/storage/' +
user.user.avatar}/>{user.user.name}</div>
</Tooltip>
</Table.Td>
<Table.Td ta={'center'}>{totalDays}</Table.Td>