From a42d444b8266860c717df9709c73a04f88c02f99 Mon Sep 17 00:00:00 2001 From: Muhammad Fajar Date: Sat, 13 Jan 2024 13:58:49 +0700 Subject: [PATCH] [Client Portal] Alarm Center --- .../Api/CorporateMemberController.php | 29 +- Modules/Client/Routes/api.php | 4 +- .../DataListClaimMemberResource.php | 21 +- .../AlarmCenter/DataServiceMonitoring.php | 200 +--- app/Models/Member.php | 23 +- app/Models/RequestLog.php | 12 +- app/Models/RequestLogBenefit.php | 8 +- app/Models/RequestLogDailyMonitoring.php | 21 + app/Models/RequestLogMedicalPlan.php | 16 + .../client-portal/src/components/Table.tsx | 20 + .../components/nav-section/vertical/index.tsx | 22 +- .../layouts/dashboard/navbar/NavConfig.tsx | 13 +- .../src/pages/AlarmCenter/Index.tsx | 113 +-- .../src/pages/AlarmCenter/List.tsx | 222 +---- .../src/pages/AlarmCenter/ListMember.tsx | 388 ++------ .../pages/AlarmCenter/ServiceMonitoring.tsx | 911 +++++++++++------- .../src/pages/AlarmCenter/UserProfile.tsx | 7 +- .../src/pages/Corporate/ServiceMonitoring.tsx | 12 +- frontend/client-portal/src/routes/index.tsx | 21 +- 19 files changed, 827 insertions(+), 1236 deletions(-) create mode 100644 app/Models/RequestLogDailyMonitoring.php create mode 100644 app/Models/RequestLogMedicalPlan.php diff --git a/Modules/Client/Http/Controllers/Api/CorporateMemberController.php b/Modules/Client/Http/Controllers/Api/CorporateMemberController.php index 7b1c8273..7e81fa11 100644 --- a/Modules/Client/Http/Controllers/Api/CorporateMemberController.php +++ b/Modules/Client/Http/Controllers/Api/CorporateMemberController.php @@ -6,6 +6,7 @@ use App\Helpers\Helper; use App\Models\Member; use App\Models\Claim; use App\Models\ClaimRequest; +use App\Models\RequestLog; use App\Services\CorporateMemberService; use Illuminate\Contracts\Support\Renderable; use Illuminate\Http\Request; @@ -184,17 +185,31 @@ class CorporateMemberController extends Controller ]); } - public function showPerMember($corporate_id, $member_id) + public function showPerMember(Request $request, $corporate_id, $member_id) { - $data = ClaimRequest::where(['member_id' => $member_id]) - ->whereNotNull('claim_id') - ->paginate(10); - return response()->json(Helper::paginateResources(DataListClaimMemberResource::collection($data))); + $per_page = $request->has('per_page') ? $request->input('per_page') : 10; + + $data = Member::query() + ->with(['requestLogs']) + ->whereHas('currentCorporate', function ($query) use ($corporate_id) { + $query->where('corporate_id', $corporate_id); + }) + ->find($member_id); + + return response()->json(['full_name' => $data->full_name, 'paginations' => Helper::paginateResources(DataListClaimMemberResource::collection($data->requestLogs()->paginate($per_page)))]); } - public function serviceMonitoring($corporate_id, $claim_id) + public function serviceMonitoring(int $corporate_id, int $request_log_id) { - $data = Claim::where('id', $claim_id)->first(); + // $data = Claim::where('id', $claim_id)->first(); + + // return $request_log_id; + + $data = RequestLog::query() + ->with(['member' => ['currentCorporate', 'person'], 'organization', 'requestLogBenefit' => ['benefit'], 'requestLogDailyMonitorings' => ['requestLogMedicalPlans'],]) + ->find($request_log_id); + + // return $data; return Helper::responseJson(DataServiceMonitoring::make($data)); } } diff --git a/Modules/Client/Routes/api.php b/Modules/Client/Routes/api.php index 28b28bcf..e7fc76e2 100644 --- a/Modules/Client/Routes/api.php +++ b/Modules/Client/Routes/api.php @@ -50,7 +50,7 @@ Route::prefix('client')->group(function () { Route::get('members/{id}', [CorporateMemberController::class, 'show']); Route::get('export-members/list', [CorporateMemberController::class, 'generateMemberList']); Route::get('alarm-center-members/{id}', [CorporateMemberController::class, 'showPerMember']); - Route::get('service-monitoring/{id}', [CorporateMemberController::class, 'serviceMonitoring']); + Route::get('service-monitoring/{request_log_id}', [CorporateMemberController::class, 'serviceMonitoring']); Route::get('claims/status', [ClaimController::class, 'status']); Route::get('claims', [ClaimController::class, 'index']); Route::get('claims/export', [ClaimController::class, 'export']); @@ -65,8 +65,6 @@ Route::prefix('client')->group(function () { Route::get('corporate', [CorporateCurrentController::class, 'index']); Route::put('corporate-update', [CorporateCurrentController::class, 'update']); - - }); Route::get('claims/{id}', [ClaimController::class, 'show']); diff --git a/Modules/Client/Transformers/AlarmCenter/DataListClaimMemberResource.php b/Modules/Client/Transformers/AlarmCenter/DataListClaimMemberResource.php index 988ebb55..338621dc 100644 --- a/Modules/Client/Transformers/AlarmCenter/DataListClaimMemberResource.php +++ b/Modules/Client/Transformers/AlarmCenter/DataListClaimMemberResource.php @@ -2,9 +2,7 @@ namespace Modules\Client\Transformers\AlarmCenter; -use App\Models\Member; use Illuminate\Http\Resources\Json\JsonResource; -use Illuminate\Support\Facades\Storage; class DataListClaimMemberResource extends JsonResource { @@ -16,22 +14,13 @@ class DataListClaimMemberResource extends JsonResource */ public function toArray($request) { - $member = Member::findOrFail($this->member_id); - return [ 'id' => $this->id, - 'admission_date' => $this->submission_date, - 'discharge_date' => $this->submission_date, - 'code' => $this->code, + 'admission_date' => $this->submission_date ?? null, + 'discharge_date' => $this->discharge_date ?? null, + 'code' => $this->code ?? null, 'service_type' => $this->service_code == 'IP' ? 'Inpatient' : 'Outpatient', - 'status' => $this->service_code == 'approved' ? 'Done' : 'OnGoing', - 'claim_id' => $this->claim_id, - // 'memberId' => $this->member_id, - 'fullName' => $member->name, - // 'division' => $this->division_name ?? '', - // 'status' => $this->status, - // 'claimRequestId' => $this->claim_request_id, - // 'submissionDate' => $this->submission_date, - ]; + 'status' => $this->status === 'requested' || ($this->status === 'approved' && $this->status_final_log) || ($this->status_final_log === 'requested' && $this->status === 'requested') ? 'Ongoing' : ($this->status === 'approved' && $this->status_final_log === 'approved' ? 'Approved' : 'Declined') + ]; } } diff --git a/Modules/Client/Transformers/AlarmCenter/DataServiceMonitoring.php b/Modules/Client/Transformers/AlarmCenter/DataServiceMonitoring.php index 4922f3eb..eebb2cea 100644 --- a/Modules/Client/Transformers/AlarmCenter/DataServiceMonitoring.php +++ b/Modules/Client/Transformers/AlarmCenter/DataServiceMonitoring.php @@ -2,25 +2,8 @@ namespace Modules\Client\Transformers\AlarmCenter; -use App\Models\ClaimRequest; -use App\Models\DiagnosisSecondaryClaimHistoryCare; -use App\Models\ClaimEncounter; -use App\Models\ClaimHistoryCare; -use App\Models\Encounter; -use App\Models\Member; -use App\Models\Icd; -use App\Models\Organization; -use App\Models\MedicalPlan; -use App\Models\CorporateEmployee; -use App\Models\DailyMonitoring; -use App\Models\LaboratoriumResult; - - use App\Helpers\Helper; - - use Illuminate\Http\Resources\Json\JsonResource; -use Illuminate\Support\Facades\Storage; class DataServiceMonitoring extends JsonResource { @@ -32,157 +15,38 @@ class DataServiceMonitoring extends JsonResource */ public function toArray($request) { - $claim_request = ClaimRequest::findOrFail($this->claim_request_id); - $member = Member::findOrFail($this->member_id); - - - // History Care Hospital - $historyCareHospital = ClaimHistoryCare::where('claim_id', $this->id)->first(); - if ($historyCareHospital) { - $hospital = Organization::findOrFail($historyCareHospital->organization_id)->name; - $mainDianosis = Icd::findOrFail($historyCareHospital->main_diagnosis_id)->name; - $mainDianosisCode = Icd::findOrFail($historyCareHospital->main_diagnosis_id)->code; - - $comporatationDiagnosis = DiagnosisSecondaryClaimHistoryCare::where('claim_history_care_id', $historyCareHospital->id)->first(); - - $comporatationDiagnosisName = Icd::findOrFail($comporatationDiagnosis->icd_id)->name; - $comporatationDiagnosisCode = Icd::findOrFail($comporatationDiagnosis->icd_id)->code; - - $admissionDate = $historyCareHospital->admission_date; - $dischargeDate = $historyCareHospital->discharge_date; - $serviceCode = $historyCareHospital->service_code; - $symptoms = $historyCareHospital->symptoms; - $sign = $historyCareHospital->sign; - } else { - $hospital = '-'; - $mainDianosis = '-'; - $mainDianosisCode = '-'; - $comporatationDiagnosisName = '-'; - $comporatationDiagnosisCode = '-'; - $admissionDate = '-'; - $dischargeDate = '-'; - $serviceCode = '-'; - $symptoms = '-'; - $sign = '-'; - } - - - - - - - $dailyMonitoring = DailyMonitoring::where('claim_id', $claim_request->claim_id)->get()->toArray(); - $laboratoriumResult = LaboratoriumResult::where('claim_id', $claim_request->claim_id)->get()->toArray(); - - // Handle Daily Monitoring - $dataDailyMonitoring = []; - if (count($dailyMonitoring) > 0){ - $temp = []; - foreach($dailyMonitoring as $data){ - $temp['date'] = Helper::formatDateOnly($data['created_at']); - $temp['time'] = Helper::formatTimeOnly($data['created_at']); - $temp['status'] = 'Done'; - $temp['subject_title'] = $data['subject']; - $temp['body_temperature'] = $data['body_temperature']. 'mm[Hg]'; - $temp['sistole'] = $data['sistole']. 'mm[Hg]'; - $temp['diastole'] = $data['diastole']. 'mm[Hg]'; - $temp['respiration_rate'] = $data['respiration_rate']. 'mm[Hg]'; - $temp['analisis_title'] = $data['analysis']; - - $medicalPlan = MedicalPlan::where('claim_daily_monitoring_id', $data['id'])->get('plan')->toArray(); - if (count( $medicalPlan) > 0){ - $temp['Perencanaan'] = []; - foreach($medicalPlan as $item){ - array_push($temp['Perencanaan'], $item['plan']); - } - - } else { - $temp['Perencanaan'] = []; - } - array_push($dataDailyMonitoring, $temp); - } - } - - // Handle Laboratorium Result - $dataLaboratoruiumResult = []; - if (count($laboratoriumResult) > 0){ - $tempLab = []; - foreach($laboratoriumResult as $data){ - $tempLab['datetime'] = $data['date']; - $tempLab['reimbursement_code'] = "RE-0" . $data['id']; - $tempLab['examination'] = $data['examination']; - $tempLab['location'] = $data['location']; - - if (count($data['lab_result_file']) > 0){ - $tempLab['file'] = $data['lab_result_file'][0]['lab_result_file_obj']->path; // masih dumy untuk download nya belum bisa multiple - } - array_push($dataLaboratoruiumResult, $tempLab); - } - } - - $data = [ - "id" => $this->id, - "company_name" => $member->currentCorporate->name, - "member_name" => $member->name, - "member_code" => $member->member_id, - "member_id" => $member->id, - "phone" => $member->person->phone, - "email" => $member->email, - "birth_date" => $member->birth_date, - "symptoms" => $symptoms, - "sign" => $sign, - "main_diagnose" => $mainDianosis, - "main_diagnose_code" => $mainDianosisCode, - "comparative_diagnosis" => $comporatationDiagnosisName, - "comparative_diagnosis_code" => $comporatationDiagnosisCode, - "service_name" => $serviceCode, - "benefit_name" => "Konsultasi Dokter", - "hospital" => $hospital, - "admission_date" => $admissionDate, - "discharge_date" => $dischargeDate, - "dialy_monitoring" => $dataDailyMonitoring, - // "laboratorium_result" => [ - // "0" => [ - // [ - // "datetime" => "2023-10-05 10:00", - // "reimbursement_code" => "RE-011", - // "examination" => "SGOT", - // "location" => "Pramita Jakarta Ragunan", - // "files" => "https:://test.com" - // ], - // [ - // "datetime" => "2023-10-05 09:00", - // "reimbursement_code" => "RE-010", - // "examination" => "SGOT", - // "location" => "Pramita Jakarta Ragunan", - // "files" => "https:://test.com" - // ], - // ], - // "1" => [ - // [ - // "datetime" => "2023-10-04 10:00", - // "reimbursement_code" => "RE-09", - // "examination" => "Hematologi Lengkap", - // "location" => "Pramita Jakarta Ragunan", - // "files" => "https:://test.com" - // ], - // [ - // "datetime" => "2023-10-04 09:00", - // "reimbursement_code" => "RE-08", - // "examination" => "Hematologi Lengkap", - // "location" => "Pramita Jakarta Ragunan", - // "files" => "https:://test.com" - // ] - // ] - - // ], - - "laboratorium_result" => [$dataLaboratoruiumResult], // - - + return [ + 'companyName' => $this->member->currentCorporate->name ?? null, + 'memberId' => $this->member->member_id ?? null, + 'fullName' => $this->member->full_name ?? null, + 'dateOfBirth' => $this->member->birth_date ?? null, + 'dateOfBirth' => $this->member->birth_date ?? null, + 'phoneNumber' => $this->person->phone ?? null, + 'email' => $this->member->email ?? ($this->member->person->email ?? null), + 'serviceName' => $this->service_code === 'IP' ? 'Inpatient' : ($this->service_code === 'OP' ? 'Outpatient' : null), + 'benefitName' => $this->requestLogBenefit->benefit->description ?? null, + 'hospital' => $this->organization->name ?? null, + 'admissionDate' => $this->submission_date ?? null, + 'dischargeDate' => $this->discharge_date ?? null, + 'dailyMonitorings' => $this->when($this->service_code === 'IP', collect($this->requesLogDailyMonitorings)->map(function ($requesLogDailyMonitoring) { + return [ + 'date' => Helper::formatDateOnly($requesLogDailyMonitoring->created_at) ?? null, + 'time' => Helper::formatTimeOnly($requesLogDailyMonitoring->created_at) ?? null, + 'status' => 'Done' ?? null, + 'subject' => $requesLogDailyMonitoring->subject ?? null, + 'bodyTemperature' => $requesLogDailyMonitoring->body_temperature ?? null, + 'sistole' => $requesLogDailyMonitoring->sistole . 'mm[Hg]' ?? null, + 'diastole' => $requesLogDailyMonitoring->diastole . 'mm[Hg]' ?? null, + 'respirationRate' => $requesLogDailyMonitoring->respiration_rate . '/min' ?? null, + 'analysis' => $requesLogDailyMonitoring->analysis ?? null, + 'plan' => collect($requesLogDailyMonitoring->requestLogMedicalPlans)->map(function ($requestLogMedicalPlan) { + return $requestLogMedicalPlan->type == 1 ? $requestLogMedicalPlan->plan : null; + })->all(), + ]; + })->all()), + // 'laboratoriumResults' => collect($this->dailyMonitorings)->map(function ($dailyMonitoring) { + // $data['date'][Helper::formatDateOnly($dailyMonitoring->created_at)] + // })->all() ?? null ]; - - - return $data; } } diff --git a/app/Models/Member.php b/app/Models/Member.php index a6c1bbe8..f6c347ce 100644 --- a/app/Models/Member.php +++ b/app/Models/Member.php @@ -197,6 +197,11 @@ class Member extends Model { return $this->hasOneThrough(CorporateDivision::class, CorporateEmployee::class, 'member_id', 'id', 'id', 'division_id'); } + + public function requestLogs() + { + return $this->hasMany(RequestLog::class); + } /* -------------------------------------------------------------------------- */ /* -------------------------------------------------------------------------- */ @@ -270,13 +275,13 @@ class Member extends Model protected function relations(): Attribute { $relation = '-'; - if ($this->relation_with_principal == 'H'){ + if ($this->relation_with_principal == 'H') { $relation = 'Husbund'; - } else if ($this->relation_with_principal == 'W'){ + } else if ($this->relation_with_principal == 'W') { $relation = 'Wife'; - } else if ($this->relation_with_principal == 'S'){ + } else if ($this->relation_with_principal == 'S') { $relation = 'Son'; - } else if ($this->relation_with_principal == 'D'){ + } else if ($this->relation_with_principal == 'D') { $relation = 'Daughter'; } return Attribute::make( @@ -287,11 +292,11 @@ class Member extends Model protected function statusMarital(): Attribute { $maritalStatus = '-'; - if ($this->marital_status == 'M'){ + if ($this->marital_status == 'M') { $maritalStatus = 'Married'; - } else if ($this->relation_with_principal == 'D'){ + } else if ($this->relation_with_principal == 'D') { $maritalStatus = 'Divorced'; - } else if ($this->relation_with_principal == 'S'){ + } else if ($this->relation_with_principal == 'S') { $maritalStatus = 'Single'; } return Attribute::make( @@ -311,12 +316,12 @@ class Member extends Model protected function birthDateeCard(): Attribute { // $date = $this->person->birth_date ?? ($this->birth_date ?? null); - if ($this->birth_date){ + if ($this->birth_date) { $date = $this->birth_date; return Attribute::make( get: fn () => !empty($date) ? Carbon::parse($date)->format('d / M / Y') : null ); - } else if ($this->person->birth_date){ + } else if ($this->person->birth_date) { return Attribute::make( get: fn () => !empty($date) ? Carbon::parse($date)->format('d / M / Y') : null ); diff --git a/app/Models/RequestLog.php b/app/Models/RequestLog.php index 2683be21..cb63e1f3 100644 --- a/app/Models/RequestLog.php +++ b/app/Models/RequestLog.php @@ -94,7 +94,7 @@ class RequestLog extends Model "CLAIM METHOD", "STATUS", ]; - + public static $status = [ 'draft' => 'Draft', @@ -241,6 +241,16 @@ class RequestLog extends Model return $this->belongsTo(Service::class, 'service_code', 'code'); } + public function requestLogBenefit() + { + return $this->hasOne(RequestLogBenefit::class, 'request_log_id'); + } + + public function requestLogDailyMonitorings() + { + return $this->hasMany(RequestLogDailyMonitoring::class, 'request_log_id'); + } + public function getPaymentTypeNameAttribute() { return self::$payment_types[$this->payment_type] ?? $this->payment_type; diff --git a/app/Models/RequestLogBenefit.php b/app/Models/RequestLogBenefit.php index 1b42c6d2..2fe837bc 100644 --- a/app/Models/RequestLogBenefit.php +++ b/app/Models/RequestLogBenefit.php @@ -24,7 +24,13 @@ class RequestLogBenefit extends Model 'deleted_by', ]; - public function benefit(){ + public function benefit() + { return $this->belongsTo(Benefit::class, 'benefit_id', 'id'); } + + public function requestLog() + { + return $this->belongsTo(RequestLog::class, 'aa'); + } } diff --git a/app/Models/RequestLogDailyMonitoring.php b/app/Models/RequestLogDailyMonitoring.php new file mode 100644 index 00000000..84f818cf --- /dev/null +++ b/app/Models/RequestLogDailyMonitoring.php @@ -0,0 +1,21 @@ +belongsTo(RequestLog::class); + } + + public function requestLogMedicalPlans() + { + return $this->hasMany(RequestLogMedicalPlan::class); + } +} diff --git a/app/Models/RequestLogMedicalPlan.php b/app/Models/RequestLogMedicalPlan.php new file mode 100644 index 00000000..4a0a6508 --- /dev/null +++ b/app/Models/RequestLogMedicalPlan.php @@ -0,0 +1,16 @@ +belongsTo(RequestLogDailyMonitoring::class); + } +} diff --git a/frontend/client-portal/src/components/Table.tsx b/frontend/client-portal/src/components/Table.tsx index e492a412..75dd41fc 100644 --- a/frontend/client-portal/src/components/Table.tsx +++ b/frontend/client-portal/src/components/Table.tsx @@ -196,6 +196,26 @@ export default function Table({ /> + ) : exportReport && exportReport.useExport && filterStatus === undefined ? ( + +
+ searchs.setSearchText(event.target.value)} + value={searchs.searchText} + fullWidth + InputProps={{ + startAdornment: ( + + + + ), + }} + placeholder="Search Name or Member ID... " + /> + +
) : (
diff --git a/frontend/client-portal/src/components/nav-section/vertical/index.tsx b/frontend/client-portal/src/components/nav-section/vertical/index.tsx index de247933..41f0b915 100644 --- a/frontend/client-portal/src/components/nav-section/vertical/index.tsx +++ b/frontend/client-portal/src/components/nav-section/vertical/index.tsx @@ -32,16 +32,18 @@ export default function NavSectionVertical({ {navConfig.map((group, index) => ( - - {group.subheader} - + {group.subheader && ( + + {group.subheader} + + )} {group.items.map((list) => ( diff --git a/frontend/client-portal/src/layouts/dashboard/navbar/NavConfig.tsx b/frontend/client-portal/src/layouts/dashboard/navbar/NavConfig.tsx index 633d8a1b..1be186e4 100644 --- a/frontend/client-portal/src/layouts/dashboard/navbar/NavConfig.tsx +++ b/frontend/client-portal/src/layouts/dashboard/navbar/NavConfig.tsx @@ -7,7 +7,7 @@ const navConfig = [ items: [{ title: 'Dashboard', path: '/dashboard' }], }, - // Corporate + // Corporate // ---------------------------------------------------------------------- { subheader: 'Corporate', @@ -15,21 +15,19 @@ const navConfig = [ { title: 'Corporate', path: '/corporate', - // icon: ICONS.default, + }, + { + title: 'Employee Data', + path: '/employee-data', }, ], }, - // Alarm Center // ---------------------------------------------------------------------- { subheader: 'Case Management', items: [ - { - title: 'Employee Data', - path: '/employee-data', - }, { title: 'Alarm Center', path: '/alarm-center', @@ -45,7 +43,6 @@ const navConfig = [ ], }, - // User Management // ---------------------------------------------------------------------- // { diff --git a/frontend/client-portal/src/pages/AlarmCenter/Index.tsx b/frontend/client-portal/src/pages/AlarmCenter/Index.tsx index be37af34..10d3e9f8 100644 --- a/frontend/client-portal/src/pages/AlarmCenter/Index.tsx +++ b/frontend/client-portal/src/pages/AlarmCenter/Index.tsx @@ -1,105 +1,15 @@ -/* ---------------------------------- react --------------------------------- */ -import { useState, SyntheticEvent } from 'react'; /* ---------------------------------- @mui ---------------------------------- */ -import { Box, Tabs, Tab, Container, Grid, Card } from '@mui/material'; -import { styled } from '@mui/material/styles'; +import { Container, Grid } from '@mui/material'; /* ------------------------------- components ------------------------------- */ import Page from '../../components/Page'; /* ---------------------------------- hooks --------------------------------- */ import useSettings from '../../hooks/useSettings'; import List from './List'; -import ServiceMonitoring from './ServiceMonitoring'; -import UserProfile from './UserProfile'; import HeaderBreadcrumbs from '../../components/HeaderBreadcrumbs'; -/* ------------------------------ tabs setting ------------------------------ */ - -/* ---------------------------------- types --------------------------------- */ - -interface TabPanelProps { - children?: React.ReactNode; - index: number; - value: number; -} - -interface StyledTabsProps { - children?: React.ReactNode; - value: number; - onChange: (event: React.SyntheticEvent, newValue: number) => void; -} - -interface StyledTabProps { - label: string; - icon?: string | React.ReactElement; -} - -/* -------------------------------- tab style ------------------------------- */ - -function TabPanel(props: TabPanelProps) { - const { children, value, index, ...other } = props; - - return ( - - ); -} - -function a11yProps(index: number) { - return { - id: `simple-tab-${index}`, - 'aria-controls': `simple-tabpanel-${index}`, - }; -} - -const StyledTabs = styled((props: StyledTabsProps) => )({ - backgroundColor: '#F4F6F8', - padding: '0 24px', - '& .MuiTabs-indicator': { - display: 'flex', - justifyContent: 'space-between', - backgroundColor: 'transparent', - }, - '& .MuiTabs-indicatorSpan': { - maxWidth: 40, - backgroundColor: '#635ee7', - }, -}); - -const StyledTab = styled((props: StyledTabProps) => )( - ({ theme }) => ({ - textTransform: 'none', - fontWeight: 600, - color: theme.palette.grey[600], - marginRight: '5rem', - '&.Mui-selected': { - color: '#212B36', - borderBottom: '2px solid ' + theme.palette.primary.main, - }, - '&:hover': { - color: '#212B36', - opacity: 1, - borderBottom: '2px solid ' + theme.palette.primary.main, - }, - }) -); - -/* -------------------------------------------------------------------------- */ - export default function Drugs() { const { themeStretch } = useSettings(); - const [value, setValue] = useState(0); - const handleChange = (event: SyntheticEvent, newValue: number) => { - setValue(newValue); - }; - return ( @@ -107,29 +17,12 @@ export default function Drugs() { heading={'Alarm Center'} links={[ { name: 'Case Management', href: '/alarm-center' }, - { name: 'Alarm Center', href: '/alarm-center'} + { name: 'Alarm Center', href: '/alarm-center' }, ]} /> - {/* */} - {/* - - - - - - */} - - - - {/* - - - - - */} - {/* */} + diff --git a/frontend/client-portal/src/pages/AlarmCenter/List.tsx b/frontend/client-portal/src/pages/AlarmCenter/List.tsx index f87fe1e5..b049f229 100644 --- a/frontend/client-portal/src/pages/AlarmCenter/List.tsx +++ b/frontend/client-portal/src/pages/AlarmCenter/List.tsx @@ -1,149 +1,23 @@ /* ---------------------------------- @mui ---------------------------------- */ -import { - Paper, - Table, - TableBody, - TableCell, - TableContainer, - TableHead, - TableRow, - TextField, - Stack, - Button, - TableSortLabel, - Box, - SelectChangeEvent, - Typography, - MenuItem -} from '@mui/material'; -import { visuallyHidden } from '@mui/utils'; +import { SelectChangeEvent, MenuItem } from '@mui/material'; /* ---------------------------------- axios --------------------------------- */ -// import axios from 'axios'; import axios from '../../utils/axios'; /* ---------------------------------- react --------------------------------- */ import { useContext, useEffect, useState } from 'react'; /* -------------------------------- component ------------------------------- */ -import Iconify from '../../components/Iconify'; -import BaseTablePagination from '../../components/BaseTablePagination'; import TableComponent from '../../components/Table'; -/* ---------------------------------- hooks --------------------------------- */ -import useMap from '../../hooks/useMap'; /* ---------------------------------- theme --------------------------------- */ -import palette from '../../theme/palette'; import { UserCurrentCorporateContext } from '../../contexts/UserCurrentCorporate'; import { HeadCell, Order, PaginationTableProps } from '../../@types/table'; -import { useSearchParams, useNavigate, Link } from 'react-router-dom'; +import { useSearchParams, useNavigate } from 'react-router-dom'; import { fDateSuffix } from '../../utils/formatTime'; import TableMoreMenu from '../../components/table/TableMoreMenu'; import VisibilityOutlinedIcon from '@mui/icons-material/VisibilityOutlined'; import { enqueueSnackbar } from 'notistack'; - -import DetailDataMember from './ListMember'; import Label from '../../components/Label'; - - -/* ---------------------------------- types --------------------------------- */ - -// type PaginationTableProps = { -// current_page: number; -// from: number; -// last_page: number; -// links: []; -// path: string; -// per_page: number; -// to: number; -// total: number; -// }; - -// type DataTableProps = { -// fullName: string; -// memberId: string; -// service: string; -// start_date: string; -// end_date: string; -// status: boolean | number; -// }; - -// /* -------------------------------------------------------------------------- */ - -// /* -------------------------- enchanced table head -------------------------- */ - -// type Order = 'asc' | 'desc'; - -// interface HeadCell { -// id: string; -// label: string; -// } - -// const headCells: readonly HeadCell[] = [ -// { -// id: 'name', -// label: 'Name', -// }, -// { -// id: 'member_id', -// label: 'Member ID', -// }, -// { -// id: 'service', -// label: 'Service', -// }, -// { -// id: 'start_date', -// label: 'Start Date', -// }, -// { -// id: 'end_date', -// label: 'End Date', -// }, -// { -// id: 'status', -// label: 'Status', -// }, -// ]; - -// interface EnhancedTableProps { -// onRequestSort: (event: React.MouseEvent, property: string) => void; -// order: Order; -// orderBy: string; -// } - -// function EnhancedTableHead(props: EnhancedTableProps) { -// const { order, orderBy, onRequestSort } = props; -// const createSortHandler = (property: string) => (event: React.MouseEvent) => { -// onRequestSort(event, property); -// }; - -// return ( -// -// -// No -// {headCells.map((headCell) => ( -// -// -// {headCell.label} -// {orderBy === headCell.id ? ( -// -// {order === 'desc' ? 'sorted descending' : 'sorted ascending'} -// -// ) : null} -// -// -// ))} -// -// -// ); -// } +import { Stack } from '@mui/material'; /* -------------------------------------------------------------------------- */ @@ -237,7 +111,7 @@ export default function List() { handleSearchSubmit: handleSearchSubmit, }; - /* ------------------------------ handle filter ----------------------------- */ + /* ------------------------------ handle filter ----------------------------- */ const [statusValue, setStatusValue] = useState('all'); const [filterData, setStatusData] = useState([]); @@ -263,7 +137,7 @@ export default function List() { config: { label: 'Status', statusValue: statusValue, - filterData: filterData, + statusData: filterData, handleStatusChange: handleStatusChanges, }, }; @@ -273,13 +147,16 @@ export default function List() { const handleStartDateChanges = async (event: React.FormEvent) => { event.preventDefault(); - console.log(startDateValue) + console.log(startDateValue); if (startDateValue === '') { searchParams.delete('start_date'); const params = Object.fromEntries([...searchParams.entries()]); setAppliedParams(params); } else { - const params = Object.fromEntries([...searchParams.entries(), ['start_date', startDateValue]]); + const params = Object.fromEntries([ + ...searchParams.entries(), + ['start_date', startDateValue], + ]); setAppliedParams(params); } }; @@ -314,7 +191,7 @@ export default function List() { }; /* -------------------------------- handle export --------------------------- */ - const handleExportReport = async () => { + const handleExportReport = async () => { var filter = Object.fromEntries([...searchParams.entries()]); await axios @@ -339,8 +216,8 @@ export default function List() { startDate: startDateValue, endDate: endDateValue, status: statusValue, - handleExportReport: handleExportReport - } + handleExportReport: handleExportReport, + }; /* -------------------------------- headCell -------------------------------- */ const headCells: HeadCell[] = [ @@ -356,7 +233,7 @@ export default function List() { label: 'Name', isSort: true, }, - + { id: 'start_date', align: 'center', @@ -400,72 +277,34 @@ export default function List() { }); const status = [ - {"id": 1, "name": "Done" }, - {"id": 0, "name": "On Going" }, - - ] - setStatusData(status) + { id: 1, name: 'Done' }, + { id: 0, name: 'On Going' }, + ]; + setStatusData(status); setData( - response.data.data.map((obj: any) => { - return { - ...obj, - // memberId: - // // - // - // , - start_date: - - , - end_date: - - , - // status: - // obj.status === 1 ? ( - // - // Done - // - // ) : ( - // - // Ongoing - // - // ), - action: - ({ + ...obj, + start_date: , + end_date: , + action: ( + - navigate('member/'+obj.id )}> + navigate('member/' + obj.id)}> View - } /> - }; - }) + } + /> + ), + })) ); setPaginationTable(response.data); setRowsPerPage(response.data.per_page); - - if (searchParams.get('page')) { //@ts-ignore const currentPage = parseInt(searchParams.get('page')) - 1; @@ -488,7 +327,6 @@ export default function List() { loadings={loadings} params={params} searchs={searchs} - // filters={filters} filterStatus={filterStatus} filterStartDate={filterStartDate} filterEndDate={filterEndDate} diff --git a/frontend/client-portal/src/pages/AlarmCenter/ListMember.tsx b/frontend/client-portal/src/pages/AlarmCenter/ListMember.tsx index 193c33db..e95bf847 100644 --- a/frontend/client-portal/src/pages/AlarmCenter/ListMember.tsx +++ b/frontend/client-portal/src/pages/AlarmCenter/ListMember.tsx @@ -1,23 +1,5 @@ /* ---------------------------------- @mui ---------------------------------- */ -import { - Paper, - Table, - TableBody, - TableCell, - TableContainer, - TableHead, - TableRow, - TextField, - Stack, - Button, - TableSortLabel, - Box, - SelectChangeEvent, - Typography, - MenuItem, - Grid -} from '@mui/material'; -import { visuallyHidden } from '@mui/utils'; +import { Stack, Typography, MenuItem, Grid } from '@mui/material'; /* ---------------------------------- axios --------------------------------- */ // import axios from 'axios'; import axios from '../../utils/axios'; @@ -25,137 +7,27 @@ import axios from '../../utils/axios'; import { useContext, useEffect, useState } from 'react'; /* -------------------------------- component ------------------------------- */ -import Iconify from '../../components/Iconify'; -import BaseTablePagination from '../../components/BaseTablePagination'; import TableComponent from '../../components/Table'; import ArrowBackIosIcon from '@mui/icons-material/ArrowBackIos'; -/* ---------------------------------- hooks --------------------------------- */ -import useMap from '../../hooks/useMap'; /* ---------------------------------- theme --------------------------------- */ -import palette from '../../theme/palette'; import { UserCurrentCorporateContext } from '../../contexts/UserCurrentCorporate'; import { HeadCell, Order, PaginationTableProps } from '../../@types/table'; -import { useSearchParams, useNavigate, Link, useParams } from 'react-router-dom'; -import { fDateSuffix, fPostFormat } from '../../utils/formatTime'; +import { useSearchParams, useNavigate, useParams } from 'react-router-dom'; +import { fDateSuffix } from '../../utils/formatTime'; import TableMoreMenu from '../../components/table/TableMoreMenu'; import VisibilityOutlinedIcon from '@mui/icons-material/VisibilityOutlined'; import Label from '../../components/Label'; - -/* ---------------------------------- types --------------------------------- */ - -type DataList = { - name: string; -}; - -// type PaginationTableProps = { -// current_page: number; -// from: number; -// last_page: number; -// links: []; -// path: string; -// per_page: number; -// to: number; -// total: number; -// }; - -// type DataTableProps = { -// fullName: string; -// memberId: string; -// service: string; -// start_date: string; -// end_date: string; -// status: boolean | number; -// }; - -// /* -------------------------------------------------------------------------- */ - -// /* -------------------------- enchanced table head -------------------------- */ - -// type Order = 'asc' | 'desc'; - -// interface HeadCell { -// id: string; -// label: string; -// } - -// const headCells: readonly HeadCell[] = [ -// { -// id: 'name', -// label: 'Name', -// }, -// { -// id: 'member_id', -// label: 'Member ID', -// }, -// { -// id: 'service', -// label: 'Service', -// }, -// { -// id: 'start_date', -// label: 'Start Date', -// }, -// { -// id: 'end_date', -// label: 'End Date', -// }, -// { -// id: 'status', -// label: 'Status', -// }, -// ]; - -// interface EnhancedTableProps { -// onRequestSort: (event: React.MouseEvent, property: string) => void; -// order: Order; -// orderBy: string; -// } - -// function EnhancedTableHead(props: EnhancedTableProps) { -// const { order, orderBy, onRequestSort } = props; -// const createSortHandler = (property: string) => (event: React.MouseEvent) => { -// onRequestSort(event, property); -// }; - -// return ( -// -// -// No -// {headCells.map((headCell) => ( -// -// -// {headCell.label} -// {orderBy === headCell.id ? ( -// -// {order === 'desc' ? 'sorted descending' : 'sorted ascending'} -// -// ) : null} -// -// -// ))} -// -// -// ); -// } - -/* -------------------------------------------------------------------------- */ - export default function List() { const navigate = useNavigate(); const { corporateValue } = useContext(UserCurrentCorporateContext); - const [data, setData] = useState([]); + const [data, setData] = useState({ + full_name: '', + paginations: [], + }); const { id } = useParams(); /* -------------------------------------------------------------------------- */ @@ -182,7 +54,7 @@ export default function List() { /* ------------------------------ handle order ------------------------------ */ const [order, setOrder] = useState('asc'); - const [orderBy, setOrderBy] = useState('fullName'); + const [orderBy, setOrderBy] = useState('admission_date'); const orders = { order: order, @@ -215,141 +87,10 @@ export default function List() { paginationTable: paginationTable, setPaginationTable: setPaginationTable, }; - /* -------------------------------------------------------------------------- */ - /* ------------------------------ handle search ----------------------------- */ - const [searchText, setSearchText] = useState(''); - const [name, setName] = useState(''); - - const handleSearchSubmit = async (event: React.FormEvent) => { - event.preventDefault(); - - if (searchText === '') { - searchParams.delete('search'); - const params = Object.fromEntries([...searchParams.entries()]); - setAppliedParams(params); - } else { - const params = Object.fromEntries([...searchParams.entries(), ['search', searchText]]); - setAppliedParams(params); - } - }; - - const searchs = { - useSearchs: false, - searchText: searchText, - setSearchText: setSearchText, - handleSearchSubmit: handleSearchSubmit, - }; - - /* ------------------------------ handle filter ----------------------------- */ - const [statusValue, setStatusValue] = useState('all'); - const [filterData, setStatusData] = useState([]); - - // handle status - const handleStatusChanges = (event: SelectChangeEvent) => { - setStatusValue(event.target.value as string); - - if (event.target.value === 'all') { - searchParams.delete('status'); - const params = Object.fromEntries([...searchParams.entries()]); - setAppliedParams(params); - } else { - const params = Object.fromEntries([ - ...searchParams.entries(), - ['status', event.target.value as string], - ]); - setAppliedParams(params); - } - }; - - const filterStatus = { - useFilter: false, - config: { - label: 'Status', - statusValue: statusValue, - filterData: filterData, - handleStatusChange: handleStatusChanges, - }, - }; - - // handle start date - const [startDateValue, setStartDateValue] = useState(''); - - const handleStartDateChanges = async (event: React.FormEvent) => { - event.preventDefault(); - console.log(startDateValue) - if (startDateValue === '') { - searchParams.delete('start_date'); - const params = Object.fromEntries([...searchParams.entries()]); - setAppliedParams(params); - } else { - const params = Object.fromEntries([...searchParams.entries(), ['start_date', startDateValue]]); - setAppliedParams(params); - } - }; - - const filterStartDate = { - useFilter: false, - startDate: startDateValue, - setStartDate: setStartDateValue, - handleStartDateChange: handleStartDateChanges, - }; - - // handle end date - const [endDateValue, setEndDateValue] = useState(''); - - const handleEndDateChanges = async (event: React.FormEvent) => { - event.preventDefault(); - if (endDateValue === '') { - searchParams.delete('end_date'); - const params = Object.fromEntries([...searchParams.entries()]); - setAppliedParams(params); - } else { - const params = Object.fromEntries([...searchParams.entries(), ['end_date', endDateValue]]); - setAppliedParams(params); - } - }; - - const filterEndDate = { - useFilter: false, - endDate: endDateValue, - setEndDate: setEndDateValue, - handleEndDateChange: handleEndDateChanges, - }; - - /* -------------------------------- handle export --------------------------- */ - const handleExportReport = async () => { - var filter = Object.fromEntries([...searchParams.entries()]); - - await axios - .get('claims/export', { params: filter }) - .then((res) => { - enqueueSnackbar('Data berhasil di Export', { - variant: 'success', - anchorOrigin: { horizontal: 'right', vertical: 'top' }, - }); - - document.location.href = res.data.data.file_url; - }) - .catch((err) => - enqueueSnackbar('Data Gagal di Export', { - variant: 'error', - anchorOrigin: { horizontal: 'right', vertical: 'top' }, - }) - ); - }; - - const exportReport = { - useExport: false, - startDate: startDateValue, - endDate: endDateValue, - status: statusValue, - handleExportReport: handleExportReport - } - /* -------------------------------- headCell -------------------------------- */ - const headCells: HeadCell[] = [ + const headCells: HeadCell[] = [ { id: 'admission_date', align: 'center', @@ -368,6 +109,12 @@ export default function List() { label: 'Code', isSort: true, }, + { + id: 'service_type', + align: 'center', + label: 'Service Type', + isSort: false, + }, { id: 'status', align: 'center', @@ -398,59 +145,45 @@ export default function List() { params: { ...parameters }, }); - const status = [ - {"id": 1, "name": "Done" }, - {"id": 0, "name": "On Going" }, + setSearchParams(parameters); - ] - setStatusData(status) - const datatable = response.data.data; - - // if (response.data.data.length > 0){ - // setIsLoading(true); - // } else { - // setIsLoading(false); - // } - - const dataName = response.data.data[0].fullName - setName(dataName) - setData( - datatable.map((obj: any) => { - return { - ...obj, - admission_date: - - , - discharge_date: - - , - status: - obj.status === 'Done' ? ( - - ) : ( - - ), - action: - ({ + ...obj, + admission_date: obj.admission_date ? ( + + ) : ( + '' + ), + discharge_date: obj.discharge_date ? ( + + ) : ( + '' + ), + status: + obj.status === 'Done' ? ( + + ) : ( + + ), + action: ( + - navigate('service-monitoring/'+obj.claim_id )}> + navigate('service-monitoring/' + obj.id)}> View - } /> - }; - }) - ); + } + /> + ), + })), + }); - setPaginationTable(response.data); - setRowsPerPage(response.data.per_page); - - + setPaginationTable(response.data.paginations); + setRowsPerPage(response.data.paginations.per_page); if (searchParams.get('page')) { //@ts-ignore @@ -463,17 +196,14 @@ export default function List() { setIsLoading(false); })(); }, [appliedParams, searchParams, order, orderBy, setSearchParams, corporateValue]); - console.log(loadings); + return ( - - - - navigate(`/alarm-center`)} - sx={{ cursor: 'pointer' }} - /> + + + + navigate(`/alarm-center`)} sx={{ cursor: 'pointer' }} /> - {name} + {data.full_name} @@ -481,24 +211,14 @@ export default function List() { - - - - ); } diff --git a/frontend/client-portal/src/pages/AlarmCenter/ServiceMonitoring.tsx b/frontend/client-portal/src/pages/AlarmCenter/ServiceMonitoring.tsx index 288f41ee..f1d4597a 100644 --- a/frontend/client-portal/src/pages/AlarmCenter/ServiceMonitoring.tsx +++ b/frontend/client-portal/src/pages/AlarmCenter/ServiceMonitoring.tsx @@ -3,8 +3,6 @@ import { Box, Tabs, Tab, - IconButton, - Container, Grid, Card, Stack, @@ -14,32 +12,31 @@ import { TableBody, Table, TableRow, - Link, + MenuItem, + Skeleton, } from '@mui/material'; import { styled } from '@mui/material/styles'; import DownloadIcon from '@mui/icons-material/Download'; // components import Page from '../../components/Page'; -import Iconify from '../../components/Iconify'; // utils -import useSettings from '../../hooks/useSettings'; import { useState, SyntheticEvent, useContext, useEffect } from 'react'; import { UserCurrentCorporateContext } from '../../contexts/UserCurrentCorporate'; import { useNavigate, useParams } from 'react-router-dom'; import axios from '../../utils/axios'; -import { fDate, fDateSuffix, fDateTime, fDateTimeSuffix } from '../../utils/formatTime'; - +import { fDateBirth, fDateSuffix, fDateTime } from '../../utils/formatTime'; import ArrowBackIosIcon from '@mui/icons-material/ArrowBackIos'; import TimelineItem, { timelineItemClasses } from '@mui/lab/TimelineItem'; -import { Timeline, TimelineConnector, TimelineContent, TimelineDot, TimelineSeparator } from '@mui/lab'; -import Select from '../../theme/overrides/Select'; +import { + Timeline, + TimelineConnector, + TimelineContent, + TimelineDot, + TimelineSeparator, +} from '@mui/lab'; import TableMoreMenu from '../../components/table/TableMoreMenu'; -import { MenuItem } from '@mui/material'; import Label from '../../components/Label'; -// sections -// import ListTable from '../../sections/claimreports/ListTable'; -// import ClaimStatusCard from '../../sections/claimreports/ClaimStatusCard'; interface TabPanelProps { children?: React.ReactNode; @@ -56,7 +53,6 @@ function TabPanel(props: TabPanelProps) { hidden={value !== index} id={`simple-tabpanel-${index}`} aria-labelledby={`simple-tab-${index}`} - // style={{ backgroundColor: '#F9FAFB' }} {...other} > {value === index && ( @@ -75,8 +71,6 @@ function a11yProps(index: number) { }; } - - interface StyledTabsProps { children?: React.ReactNode; value: number; @@ -101,75 +95,43 @@ interface StyledTabProps { icon?: string | React.ReactElement; } - const StyledTab = styled((props: StyledTabProps) => )( ({ theme }) => ({ - textTransform: 'none', - fontWeight: 500, - fontSize: theme.typography.pxToRem(20), - color: '#637381', + fontWeight: 600, + fontSize: '14px', + color: theme.palette.grey[600], maxWidth: '15%', flex: 1, margin: '0 !important', '&.Mui-selected': { - color: '#212B36', + color: theme.palette.grey[900], }, '&:hover': { - color: '#212B36', + color: theme.palette.grey[900], opacity: 1, }, }) ); -type Data = { - id: number, - company_name: string, - member_name: string, - member_code: string, - member_id: number, - phone: string, - email: string, - birth_date: string, - symptoms: string, - sign: string, - main_diagnose: string, - main_diagnose_code: string, - comparative_diagnosis: string, - comparative_diagnosis_code: string, - service_name: string, - benefit_name: string, - hospital: string, - admission_date: string, - discharge_date: string, - dialy_monitoring: DailyMonitoring[], - laboratorium_result: LaboratoriumResult[], - -} - -type DailyMonitoring = { - date: string, - time: string, - status: string, - subject_title: string, - body_temperature: string, - sistole: string, - diastole: string, - respiration_rate: string, - analisis_title: string, - Perencanaan: string, - -} - -type LaboratoriumResult = { - datetime: string, - reimbursement_code: string, - examination: string, - location: string, - files: string, -} +type ServiceMonitoringProps = { + companyName: string; + memberId: string; + fullName: string; + dateOfBirth: string; + phoneNumber: string; + email: string; + symptoms: string; + sign: string; + mainDiagnose: string; + comparativeDiagnosis: string; + serviceName: string; + benefitName: string; + hospital: string; + admissionDate: string; + dischargeDate: string; +}; export default function ServiceMonitoring() { - const { themeStretch } = useSettings(); const navigate = useNavigate(); const [value, setValue] = useState(0); @@ -177,23 +139,18 @@ export default function ServiceMonitoring() { setValue(newValue); }; - const [data, setData] = useState(null); - const [corporate, setCorporate] = useState(); + const [data, setData] = useState(null); const { corporateValue } = useContext(UserCurrentCorporateContext); - const { id } = useParams(); - + const { memberId, requestLogId } = useParams(); useEffect(() => { (async () => { - - // await new Promise((resolve) => setTimeout(resolve, 250)); - - const response = await axios.get(`${corporateValue}/service-monitoring/${id}`); + const response = await axios.get(`${corporateValue}/service-monitoring/${requestLogId}`); setData(response.data.data); })(); }, [corporateValue]); - + function handleDownloadClick(fileUrl: string) { const tempLink = document.createElement('a'); tempLink.href = fileUrl; @@ -206,360 +163,604 @@ export default function ServiceMonitoring() { return ( - - - - navigate(`/alarm-center/member/${data.member_id}}`)} - sx={{ cursor: 'pointer' }} - /> - - Service Monitoring - - - - - {/* Item 1 */} - - - - - Employee Profiles - - - - - Company Name - {data?.company_name} - + + + + navigate(`/alarm-center/member/${memberId}}`)} + sx={{ cursor: 'pointer' }} + /> + + Service Monitoring + + + + + {/* Item 1 */} + + + + + + {data ? 'Employee Profile' : } + + + + + + + {data ? 'Company Name' : } + - - - Member ID - {data?.member_code || 'Loading...'} - + + + {data ? ( + data.companyName ? ( + data.companyName + ) : ( + '-' + ) + ) : ( + + )} + - - - - - Full Name - {data?.member_name} - + + + + + {data ? 'Member ID' : } + - - - Date of Birth - {data?.birth_date ? fDateSuffix(data?.birth_date) : '-' || 'Loading...'} - + + + {data ? ( + data.memberId ? ( + data.memberId + ) : ( + '-' + ) + ) : ( + + )} + - - - - - Phone Number - {data?.phone} - + + + + + {data ? 'Full Name' : } + - - - Email - {data?.email || 'Loading...'} - + + + {data ? ( + data.fullName ? ( + data.fullName + ) : ( + '-' + ) + ) : ( + + )} + - - + + + + + {data ? 'Date of Birth' : } + + + + + {data ? ( + data.dateOfBirth ? ( + fDateBirth(data.dateOfBirth) + ) : ( + '-' + ) + ) : ( + + )} + + + + + + + {data ? 'Phone Number' : } + + + + + {data ? ( + data.phoneNumber ? ( + data.phoneNumber + ) : ( + '-' + ) + ) : ( + + )} + + + + + + + {data ? 'Date of Birth' : } + + + + + {data ? ( + data.email ? ( + data.email + ) : ( + '-' + ) + ) : ( + + )} + + + + + + + + + + + + + + {data ? 'Diagnose Summary' : } + + + + + + + {data ? 'Symptoms' : } + + + + + {data ? ( + data.symptoms ? ( + data.symptoms + ) : ( + '-' + ) + ) : ( + + )} + + + + + + + {data ? 'Sign' : } + + + + + {data ? ( + data.sign ? ( + data.sign + ) : ( + '-' + ) + ) : ( + + )} + + + + + + + {data ? 'Main Diagnose' : } + + + + + {data ? ( + data.mainDiagnose ? ( + data.mainDiagnose + ) : ( + '-' + ) + ) : ( + + )} + + + + + + + {data ? ( + 'Comparative Diagnosis' + ) : ( + + )} + + + + + {data ? ( + data.comparativeDiagnosis ? ( + data.comparativeDiagnosis + ) : ( + '-' + ) + ) : ( + + )} + + + + + - {/* Item 2 */} - - - - - Diagnose Summary - - - - - Symptoms - {data?.symptoms} - + + + + + + {data ? 'Services' : } + + + + + + + {data ? 'Service Name' : } + + + + + {data ? ( + data.serviceName ? ( + data.serviceName + ) : ( + '-' + ) + ) : ( + + )} + + - - - Sign - {data?.sign || 'Loading...'} - + + + + {data ? 'Benefit Name' : } + + + + + {data ? ( + data.benefitName ? ( + data.benefitName + ) : ( + '-' + ) + ) : ( + + )} + + - - - Main Diagnosis - - {data?.main_diagnose} - - - + + + + {data ? 'Hospital' : } + + + + + {data ? ( + data.hospital ? ( + data.hospital + ) : ( + '-' + ) + ) : ( + + )} + + - - - Comparative Diagnosis - - {data?.comparative_diagnosis} - - - + + + + {data ? 'Admission Date' : } + + + + + {data ? ( + data.admissionDate ? ( + fDateSuffix(data.admissionDate) + ) : ( + '-' + ) + ) : ( + + )} + + - - - - - + + + + {data ? 'Discharge Date' : } + + + + + {data ? ( + data.dischargeDate ? ( + fDateSuffix(data.dischargeDate) + ) : ( + '-' + ) + ) : ( + + )} + + - - + + - {/* Item 3 */} - - - - - Services - - - - - Code - {data?.service_name} - - - - - Benefit Name - {data?.benefit_name || 'Loading...'} - - - - - Hospital - {data?.hospital} - - - - - Admission Date - {data?.admission_date ? fDateSuffix(data?.admission_date) : '-'} - - - - - Discharge Date - { data?.discharge_date ? fDateSuffix(data?.discharge_date) : '-'} - - - - - - - - - - - - - - - - - - - {data?.dialy_monitoring.length > 0 ? data?.dialy_monitoring.map((row, index) => ( - + + + + + + + + + + + + + + {/* {data?.dialy_monitoring.length > 0 ? ( + data?.dialy_monitoring.map((row, index) => ( + - + - {row.date ? fDateSuffix(row.date) : '-'} - - + + {' '} + {row.date ? fDateSuffix(row.date) : '-'} + + + - + -
+
- + Subject {row.subject_title} - + - Objektif + + Objektif + - - + + - Body Temperature + Body Temperature - + - {row.body_temperature} + + {row.body_temperature} + - - + + - Sistole + Sistole - - - {row.sistole} + + + {row.sistole} - - + + - Diastole + Diastole - + - {row.diastole} + {row.diastole} - - + + - Respiration Rate + Respiration Rate - + - {row.respiration_rate} + + {row.respiration_rate} + - Analysis + + Analysis + - - + + - {row.analisis_title} + + {row.analisis_title} + - Perencanaan + + Perencanaan + - +
    - {row.Perencanaan.length > 0 ? row.Perencanaan.map((r, index) => ( -
  • {r}
  • - )) :
  • -
  • } + {row.Perencanaan.length > 0 ? ( + row.Perencanaan.map((r, index) => ( +
  • {r}
  • + )) + ) : ( +
  • -
  • + )}
-
- )) : - - No Data Found - - } -
-
-
- -
+ )) + ) : ( + No Data Found + )} */} + No Data Found + +
+
+
- - - - {data?.laboratorium_result.length > 0 ? data?.laboratorium_result.map((row, index) => ( - - - {row[index]?.datetime ? fDateSuffix(row[index].datetime) : ''} - {row.length > 0 ? row.map((list, i) => ( - - - - - - Date - Examination - Location - - - - - - - - - {list.examination} - {list.location} - - handleDownloadClick(list.file)} > - - Download - - - } /> - - -
-
- )) : Data Not Found} -
-
- )) : - - Data Not Found - - } -
-
-
-
-
+ + + + {/* {data?.laboratorium_result.length > 0 ? ( + data?.laboratorium_result.map((row, index) => ( + + + + {row[index]?.datetime ? fDateSuffix(row[index].datetime) : ''} + + {row.length > 0 ? ( + row.map((list, i) => ( + + + + + + Date + Examination + Location + + + + + + + + + {list.examination} + {list.location} + + handleDownloadClick(list.file)} + > + + Download + + + } + /> + + +
+
+ )) + ) : ( + Data Not Found + )} +
+
+ )) + ) : ( + Data Not Found + )} */} + Data Not Found +
+
+
+ +
); } diff --git a/frontend/client-portal/src/pages/AlarmCenter/UserProfile.tsx b/frontend/client-portal/src/pages/AlarmCenter/UserProfile.tsx index 0c7a740b..45f3f9eb 100644 --- a/frontend/client-portal/src/pages/AlarmCenter/UserProfile.tsx +++ b/frontend/client-portal/src/pages/AlarmCenter/UserProfile.tsx @@ -39,15 +39,12 @@ export default function UserProfile() { }); }, []); -// console.log('data', data); + // console.log('data', data); return ( - {/* navigate()}> - - */} Profil Peserta @@ -74,7 +71,7 @@ export default function UserProfile() { {/* Item 2 */} - + diff --git a/frontend/client-portal/src/pages/Corporate/ServiceMonitoring.tsx b/frontend/client-portal/src/pages/Corporate/ServiceMonitoring.tsx index 5fd6e12c..07784f5f 100644 --- a/frontend/client-portal/src/pages/Corporate/ServiceMonitoring.tsx +++ b/frontend/client-portal/src/pages/Corporate/ServiceMonitoring.tsx @@ -121,14 +121,14 @@ export default function ServiceMonitoring() { const { corporateValue } = useContext(UserCurrentCorporateContext); const { id } = useParams(); const claimId = '2'; -// console.log('id', id); + // console.log('id', id); useEffect(() => { console.log('fetching data...'); axios .get('/data/' + id) .then((response) => { -// console.log('data fetched...', response.data); + // console.log('data fetched...', response.data); setData(response.data); }) .catch((error) => { @@ -138,7 +138,7 @@ export default function ServiceMonitoring() { axios .get('/corporate-manage/' + corporateValue) .then((response) => { -// console.log('corporate fetched...', response.data); + // console.log('corporate fetched...', response.data); setCorporate(response.data); }) .catch((error) => { @@ -146,15 +146,15 @@ export default function ServiceMonitoring() { }); }, []); -// console.log('Data:', data); + // console.log('Data:', data); const [encounterData, setEncounterData] = useState({}); useEffect(() => { -// console.log('fetching encounter data...'); + // console.log('fetching encounter data...'); axios .get('/claims/${claim_id}/encounters') .then((response) => { -// console.log('encounter data fetched...', response.data); + // console.log('encounter data fetched...', response.data); setEncounterData(response.data); }) .catch((error) => { diff --git a/frontend/client-portal/src/routes/index.tsx b/frontend/client-portal/src/routes/index.tsx index 4eac0cdd..a43eba44 100644 --- a/frontend/client-portal/src/routes/index.tsx +++ b/frontend/client-portal/src/routes/index.tsx @@ -89,8 +89,8 @@ export default function Router() { }, { path: '/employee-data/user-profile/:id', - element: , - } + element: , + }, ], }, { @@ -112,13 +112,12 @@ export default function Router() { element: , }, { - path: 'member/:id/service-monitoring/:id', + path: 'member/:memberId/service-monitoring/:requestLogId', element: , }, ], }, - - + { path: '/claim-submit', element: ( @@ -135,7 +134,7 @@ export default function Router() { }, { path: 'dialog-detail', - element: + element: , }, ], }, @@ -155,7 +154,7 @@ export default function Router() { }, { path: 'dialog-detail', - element: + element: , }, ], }, @@ -180,7 +179,7 @@ export default function Router() { { path: '/claim-report/detail-history/:id', element: , - } + }, ], }, { @@ -262,9 +261,9 @@ const AlarmCenterUserProfile = Loadable(lazy(() => import('../pages/AlarmCenter/ const ClaimReport = Loadable(lazy(() => import('../pages/ClaimReport/Index'))); const Claims = Loadable(lazy(() => import('../pages/Claims/Index'))); const ClaimShow = Loadable(lazy(() => import('../pages/Claims/Show'))); -const DialogDetailClaim = Loadable(lazy(()=> import('../pages/ClaimReport/DialogDetailClaim'))); -const DetailClaimReport = Loadable(lazy(()=> import('../pages/ClaimReport/Detail'))); -const DetailHitoryClaimReport = Loadable(lazy(()=> import('../pages/ClaimReport/DetailHistory'))); +const DialogDetailClaim = Loadable(lazy(() => import('../pages/ClaimReport/DialogDetailClaim'))); +const DetailClaimReport = Loadable(lazy(() => import('../pages/ClaimReport/Detail'))); +const DetailHitoryClaimReport = Loadable(lazy(() => import('../pages/ClaimReport/DetailHistory'))); // Claim submit const ClaimSubmit = Loadable(lazy(() => import('../pages/ClaimSubmit/Index')));