diff --git a/Modules/Client/Http/Controllers/Api/CorporateMemberController.php b/Modules/Client/Http/Controllers/Api/CorporateMemberController.php index dd0832f7..5275fb01 100644 --- a/Modules/Client/Http/Controllers/Api/CorporateMemberController.php +++ b/Modules/Client/Http/Controllers/Api/CorporateMemberController.php @@ -277,4 +277,50 @@ class CorporateMemberController extends Controller return response()->json($deposit); } + + public function getLimits($corporate_id, $member_id) + { + $deposit = DB::table('corporate_policies') + ->select('total_premi') + ->where('corporate_id','=', $corporate_id) + ->first(); + $usage = DB::table('corporate_employees') + ->join('request_logs', 'request_logs.member_id', '=', 'corporate_employees.member_id') + ->join('request_log_benefits', 'request_log_benefits.request_log_id', '=', 'request_logs.id') + ->where('corporate_employees.corporate_id', '=', $corporate_id) + ->where('request_logs.member_id', '=', $member_id) + ->sum('request_log_benefits.amount_approved'); + + $services = DB::table('member_plans') + ->leftJoin('plans', 'plans.id', '=', 'member_plans.plan_id') + ->leftJoin('services', 'services.code', '=', 'plans.service_code') + ->where('member_plans.member_id', '=', $member_id) + ->whereNull('member_plans.deleted_at') + ->select( + 'plans.service_code', + 'services.name as title', + 'plans.limit_rules as total', + DB::raw(" + ( + SELECT SUM(request_log_benefits.amount_approved) + FROM request_logs + INNER JOIN request_log_benefits + ON request_log_benefits.request_log_id = request_logs.id + WHERE request_logs.member_id = $member_id + AND request_logs.service_code = plans.service_code + ) as current + ") + + ) + ->get(); + // Ganti dengan logika Anda untuk mendapatkan data deposit + $deposit = [ + 'deposit' => $deposit->total_premi, + 'usage' => $usage, + 'services' => $services + ]; + + return response()->json($deposit); + } + } diff --git a/Modules/Client/Routes/api.php b/Modules/Client/Routes/api.php index 724ce079..090e2cd4 100644 --- a/Modules/Client/Routes/api.php +++ b/Modules/Client/Routes/api.php @@ -72,6 +72,8 @@ Route::prefix('client')->group(function () { Route::get('corporate', [CorporateCurrentController::class, 'index']); Route::put('corporate-update', [CorporateCurrentController::class, 'update']); Route::get('get-deposits', [CorporateMemberController::class, 'getDeposit']); + + Route::get('get-limits/{member_id}', [CorporateMemberController::class, 'getLimits']); }); Route::get('claims/{id}', [ClaimController::class, 'show']); diff --git a/Modules/Client/Transformers/AlarmCenter/DataServiceMonitoring.php b/Modules/Client/Transformers/AlarmCenter/DataServiceMonitoring.php index caaaeaef..1028409f 100644 --- a/Modules/Client/Transformers/AlarmCenter/DataServiceMonitoring.php +++ b/Modules/Client/Transformers/AlarmCenter/DataServiceMonitoring.php @@ -23,11 +23,11 @@ class DataServiceMonitoring extends JsonResource $filesFinalLogKondisi = []; if (count($this->files)>0){ foreach ($this->files as $key => $value) { - /* - Sementara di buat satu dulu, jangan di hapus.. + /* + Sementara di buat satu dulu, jangan di hapus.. karena suka labil client nya, tiba2 hide tiba2 munculin fitur :D */ - + // if($value->type == 'final-log-result'){ array_push($filesFinalLogResult, $value); // }; @@ -71,7 +71,7 @@ class DataServiceMonitoring extends JsonResource $main_diagnosis = $d; } $diagnosis = '-'; - } + } if ($key > 0){ if ($icd) { @@ -86,6 +86,7 @@ class DataServiceMonitoring extends JsonResource return [ 'companyName' => $this->member->currentCorporate->name ?? null, 'serviceCode' => $this->service_code ?? null, + 'member_id' => $this->member->id ?? null, 'memberId' => $this->member->member_id ?? null, 'fullName' => $this->member->full_name ?? null, 'dateOfBirth' => $this->member->birth_date ?? null, @@ -121,7 +122,7 @@ class DataServiceMonitoring extends JsonResource $arr_document = []; $document = DB::table('files') ->where([ - 'fileable_type' => 'App\Models\LaboratoriumResult', + 'fileable_type' => 'App\Models\LaboratoriumResult', 'fileable_id' => $requestLogDailyMonitoring->id, 'deleted_at' => null ]) @@ -138,7 +139,7 @@ class DataServiceMonitoring extends JsonResource } } - + return [ 'time' => Carbon::parse($requestLogDailyMonitoring->submission_date)->format('H:i') ?? null, 'status' => 'Done' ?? null, @@ -180,12 +181,12 @@ class DataServiceMonitoring extends JsonResource }) ->map(function ($groupedItems) { return collect($groupedItems) - + ->map(function ($test) { $arr_document = []; $document = DB::table('files') ->where([ - 'fileable_type' => 'App\Models\LaboratoriumResult', + 'fileable_type' => 'App\Models\LaboratoriumResult', 'fileable_id' => $test->id, 'deleted_at' => null ]) @@ -201,7 +202,7 @@ class DataServiceMonitoring extends JsonResource ]; } } - + return [ 'code' => $test->code, 'date' => Carbon::parse($test->lab_date)->format('d M Y') ?? null, diff --git a/database/seeders/PermissionTableSeeder.php b/database/seeders/PermissionTableSeeder.php index bbcdcf89..fa57a98e 100644 --- a/database/seeders/PermissionTableSeeder.php +++ b/database/seeders/PermissionTableSeeder.php @@ -84,7 +84,8 @@ class PermissionTableSeeder extends Seeder 'corporate-client-portal', 'alarm-center-list-client-portal', 'formularium-list-client-portal', - 'case-management-client-portal' + 'case-management-client-portal', + 'service-monitoring-limit-client-portal', ] ] ]; diff --git a/frontend/client-portal/src/pages/AlarmCenter/ServiceMonitoring.tsx b/frontend/client-portal/src/pages/AlarmCenter/ServiceMonitoring.tsx index 449f036c..b911d7d8 100644 --- a/frontend/client-portal/src/pages/AlarmCenter/ServiceMonitoring.tsx +++ b/frontend/client-portal/src/pages/AlarmCenter/ServiceMonitoring.tsx @@ -20,11 +20,14 @@ import { ListItemText, ListItemButton, Divider, + CardContent, + LinearProgress } from '@mui/material'; import { styled } from '@mui/material/styles'; import { Download as DownloadIcon, Circle as CircleIcon, TableView } from '@mui/icons-material'; // components import Page from '../../components/Page'; +import { fCurrency } from '../../utils/formatNumber'; // utils import { useState, SyntheticEvent, useContext, useEffect } from 'react'; import { UserCurrentCorporateContext } from '../../contexts/UserCurrentCorporate'; @@ -45,6 +48,8 @@ import TableMoreMenu from '../../components/table/TableMoreMenu'; import Label from '../../components/Label'; import { fSplit } from '../../utils/formatNumber'; +import useAuth from '../../hooks/useAuth'; + interface TabPanelProps { children?: React.ReactNode; index: number; @@ -208,6 +213,13 @@ type ServiceMonitoringProps = { }; export default function ServiceMonitoring() { + const {user} = useAuth(); + const checkIfNameExists = (name) => { + return user.user.permissions.some(item => item.name === name); + }; + + const nameToCheck = 'service-monitoring-limit-client-porta'; + const doesNameExist = checkIfNameExists(nameToCheck); const navigate = useNavigate(); const controller = new AbortController(); @@ -221,7 +233,7 @@ export default function ServiceMonitoring() { const { corporateValue } = useContext(UserCurrentCorporateContext); const { memberId, requestLogId } = useParams(); - + const [depositData, setDepositData] = useState({ deposit: 0, limit: 0, usage: 0 }); useEffect(() => { (async () => { try { @@ -236,6 +248,18 @@ export default function ServiceMonitoring() { if (response.data.data.serviceCode !== 'IP') { setValue(1); } + + var member_id = response.data.data.member_id; + const fetchDepositData = async () => { + try { + const response = await axios.get(`${corporateValue}/get-limits/${member_id}`); + setDepositData(response.data); + } catch (error) { + console.error('Failed to fetch deposit data:', error); + } + }; + + fetchDepositData(); } catch (error: any) { console.error('Error fetching data:', error.message); } finally { @@ -248,7 +272,7 @@ export default function ServiceMonitoring() { }; }, [corporateValue]); - + const renderHTML = (data:string) => { return (
); } + const formatNumber = (number) => { + return new Intl.NumberFormat('id-ID').format(number); + }; + const LimitPlanCard = ({ title, current, total }) => ( +