diff --git a/Modules/Client/Http/Controllers/Api/CorporateMemberController.php b/Modules/Client/Http/Controllers/Api/CorporateMemberController.php index d9f40b8f..14acd29a 100644 --- a/Modules/Client/Http/Controllers/Api/CorporateMemberController.php +++ b/Modules/Client/Http/Controllers/Api/CorporateMemberController.php @@ -188,15 +188,26 @@ class CorporateMemberController extends Controller public function showPerMember(Request $request, $corporate_id, $member_id) { $per_page = $request->has('per_page') ? $request->input('per_page') : 10; - - $data = Member::query() - ->with(['requestLogs']) + $member = Member::query() ->whereHas('currentCorporate', function ($query) use ($corporate_id) { $query->where('corporate_id', $corporate_id); }) ->find($member_id); - - return response()->json(['full_name' => $data->full_name ?? null, 'paginations' => Helper::paginateResources(DataListClaimMemberResource::collection($data->requestLogs()->paginate($per_page)))]); + $data = RequestLog::where([ + 'member_id' => $member->id, + 'deleted_at' => null + ]) + ->when($request->has('orderBy'), function ($query) use ($request) { + $orderBy = match ($request->input('orderBy')) { + 'admission_date' => 'request_logs.submission_date', + 'discharge_date' => 'request_logs.discharge_date', + 'code' => 'request_logs.code', + default => '' + }; + $query->getQuery()->orderBy($orderBy, $request->order); + }) + ->paginate($per_page); + return response()->json(['full_name' => $member->full_name?? null, 'paginations' => Helper::paginateResources(DataListClaimMemberResource::collection($data))]); } public function serviceMonitoring(int $corporate_id, int $request_log_id) @@ -211,7 +222,7 @@ class CorporateMemberController extends Controller 'requestLogBenefits:id,request_log_id,benefit_id,amount_incurred,amount_approved,amount_not_approved,excess_paid,keterangan' => [ 'benefit' ], - 'requestLogDailyMonitorings:id,request_log_id,created_at,subject,body_temperature,sistole,diastole,respiration_rate,analysis,lab_date,provider,examination' => [ + 'requestLogDailyMonitorings:id,request_log_id,submission_date,subject,body_temperature,sistole,diastole,respiration_rate,analysis,lab_date,provider,examination' => [ 'requestLogMedicalPlans:request_log_daily_monitoring_id,plan,type', // 'document' ], diff --git a/Modules/Client/Transformers/AlarmCenter/DataListClaimMemberResource.php b/Modules/Client/Transformers/AlarmCenter/DataListClaimMemberResource.php index 9b815b95..0f3bee66 100644 --- a/Modules/Client/Transformers/AlarmCenter/DataListClaimMemberResource.php +++ b/Modules/Client/Transformers/AlarmCenter/DataListClaimMemberResource.php @@ -4,6 +4,7 @@ namespace Modules\Client\Transformers\AlarmCenter; use Illuminate\Http\Resources\Json\JsonResource; use App\Models\Service; +use App\Models\Organization; class DataListClaimMemberResource extends JsonResource { @@ -16,10 +17,15 @@ class DataListClaimMemberResource extends JsonResource public function toArray($request) { $serviceData = Service::where('code', $this->service_code)->first(); + $organization = Organization::where('id', $this->organization_id)->first(); + $organizationName = '-'; + if ($organization){ + $organizationName = $organization->name; + } if ($serviceData) { $serviceName = $serviceData->name; } else { - $serviceName = $this->service_cod; + $serviceName = $this->service_code; } if ($this->status == 'approved' && $this->status_final_log ){ @@ -34,6 +40,7 @@ class DataListClaimMemberResource extends JsonResource 'admission_date' => $this->submission_date ?? null, 'discharge_date' => $this->discharge_date ?? null, 'code' => $this->code ?? null, + 'provider_name' => $organizationName ?? null, 'service_type' => $serviceName, 'status' => $status, ]; diff --git a/Modules/Client/Transformers/AlarmCenter/DataServiceMonitoring.php b/Modules/Client/Transformers/AlarmCenter/DataServiceMonitoring.php index 175b48b7..22933443 100644 --- a/Modules/Client/Transformers/AlarmCenter/DataServiceMonitoring.php +++ b/Modules/Client/Transformers/AlarmCenter/DataServiceMonitoring.php @@ -111,7 +111,7 @@ class DataServiceMonitoring extends JsonResource 'dischargeDate' => $this->discharge_date ?? null, 'dailyMonitorings' => $this->when($this->service_code === 'IP', collect($this->requestLogDailyMonitorings) ->groupBy(function ($requestLogDailyMonitoring) { - return $requestLogDailyMonitoring->created_at->format('d M Y'); + return Carbon::parse($requestLogDailyMonitoring->submission_date)->format('d M Y'); }) ->map(function ($groupedItems) { return collect($groupedItems) @@ -138,7 +138,7 @@ class DataServiceMonitoring extends JsonResource return [ - 'time' => $requestLogDailyMonitoring->created_at->format('H:i') ?? null, + 'time' => Carbon::parse($requestLogDailyMonitoring->submission_date)->format('H:i') ?? null, 'status' => 'Done' ?? null, 'subject' => $requestLogDailyMonitoring->subject ?? null, 'bodyTemperature' => $requestLogDailyMonitoring->body_temperature ?? null, @@ -168,18 +168,18 @@ class DataServiceMonitoring extends JsonResource return Carbon::createFromFormat('d M Y', $date)->format('Y-m-d'); }) ->all()) ?? null, - 'laboratoriumResults' => $this->whenLoaded('requestLogDailyMonitorings', collect($this->requestLogDailyMonitorings) + 'laboratoriumResults' => $this->when($this->service_code === 'IP', collect($this->requestLogDailyMonitorings) ->groupBy(function ($requestLogDailyMonitoring) { return Carbon::parse($requestLogDailyMonitoring->lab_date)->format('d M Y'); }) ->map(function ($groupedItems) { return collect($groupedItems) - ->map(function ($requestLogDailyMonitoring) { + ->map(function ($test) { $arr_document = []; $document = DB::table('files') ->where([ 'fileable_type' => 'App\Models\LaboratoriumResult', - 'fileable_id' => $requestLogDailyMonitoring->id, + 'fileable_id' => $test->id, 'deleted_at' => null ]) ->whereIn('type', ['laboratorium-result']) @@ -195,10 +195,10 @@ class DataServiceMonitoring extends JsonResource } } return [ - 'code' => $requestLogDailyMonitoring->code, - 'date' => Carbon::parse($requestLogDailyMonitoring->lab_date)->format('d M Y') ?? null, - 'examination' => $requestLogDailyMonitoring->examination ?? null, - 'location' => $requestLogDailyMonitoring->provider ?? null, + 'code' => $test->code, + 'date' => Carbon::parse($test->lab_date)->format('d M Y') ?? null, + 'examination' => $test->examination ?? null, + 'location' => $test->provider ?? null, 'files' => $arr_document ]; }) diff --git a/Modules/Internal/Http/Controllers/Api/DailyMonitoringController.php b/Modules/Internal/Http/Controllers/Api/DailyMonitoringController.php index 67a49953..dcb25af4 100644 --- a/Modules/Internal/Http/Controllers/Api/DailyMonitoringController.php +++ b/Modules/Internal/Http/Controllers/Api/DailyMonitoringController.php @@ -1,7 +1,7 @@ leftJoin('members', 'request_logs.member_id', '=', 'members.id') @@ -45,18 +47,18 @@ class DailyMonitoringController extends Controller ->select('members.member_id','members.name','members.members_effective_date AS startdate','members.members_expire_date AS enddate', 'request_logs.submission_date as addmision_date', 'organizations.name as provider' ) ->where('request_logs.service_code', 'IP') ->where('request_logs.deleted_at', null) + ->when($request->search, function ($q, $search) { + $q->where('members.member_id', 'LIKE', "%".$search."%"); + $q->orWhere('members.name','LIKE',"%".$search."%"); + }) // ->where('request_logs.status_final_log', 'approved') ->groupBy('request_logs.member_id') ->orderBy('request_logs.created_at', 'desc') - ->get(); + // ->get() + ->paginate(); - return response()->json([ - 'error' => false, - 'message' => "success", - 'data' => [ - 'member_list'=> $memberList, - ] - ],200); + + return Helper::paginateResources(DailyMonitoringResource::collection($memberList)); } /** @@ -76,8 +78,12 @@ class DailyMonitoringController extends Controller ->where('request_logs.service_code', 'IP') ->where('request_logs.status_final_log', 'approved') ->where("request_logs.member_id", "=", $memberDetail->id) + ->when($request->search, function ($q, $search) { + $q->where('request_logs.code', 'LIKE', "%".$search."%"); + }) ->orderBy("request_logs.created_at", "desc") - ->get(); + // ->get() + ->paginate(); return response()->json([ 'error' => false, diff --git a/Modules/Internal/Transformers/DailyMonitoringResource.php b/Modules/Internal/Transformers/DailyMonitoringResource.php new file mode 100644 index 00000000..af6fd8ae --- /dev/null +++ b/Modules/Internal/Transformers/DailyMonitoringResource.php @@ -0,0 +1,29 @@ + $this->member_id, + 'name' => $this->name, + 'start_date' => $this->startdate, + 'end_date' => $this->enddate, + 'addmision_date' => $this->addmision_date, + 'provider' => $this->provider, + ]; + + return $data; + } +} diff --git a/Modules/Internal/Transformers/RequestLogResource.php b/Modules/Internal/Transformers/RequestLogResource.php index c0b59bc3..60a4f0ac 100644 --- a/Modules/Internal/Transformers/RequestLogResource.php +++ b/Modules/Internal/Transformers/RequestLogResource.php @@ -24,8 +24,8 @@ class RequestLogResource extends JsonResource $data = [ 'id' => $this->id, 'code' => $this->code, - 'created_at' => $this->created_at, - 'submission_date' => $this->submission_date, + 'submission_date' => $this->created_at, // submsion_date diambil dari kolom created_at + 'admission_date' => $this->submission_date, // admission_date diambil dari kolom submission 'submission_date_fgl' => $this->approved_final_log_at, 'member_name' => $this->member->name, 'status' => $this->status ?? 'unknown', diff --git a/Modules/Internal/Transformers/RequestLogShowResource.php b/Modules/Internal/Transformers/RequestLogShowResource.php index 73f0ccf2..ebb5aa43 100644 --- a/Modules/Internal/Transformers/RequestLogShowResource.php +++ b/Modules/Internal/Transformers/RequestLogShowResource.php @@ -106,8 +106,8 @@ class RequestLogShowResource extends JsonResource 'principal_id' => $requestLog['member']['principal_id'] ? $requestLog['member']['principal_id'] : '-', 'principal_name' => $requestLog['member']['principal_id'] ? Helper::principalName($requestLog['member']['principal_id']) : '-', 'relation_with_principal' => Helper::relationWithPrincipal($requestLog['member']['relation_with_principal']), - 'admission_date' => $requestLog['submission_date'], // admission mengacu pada tanggal submit - 'submission_date' => $requestLog['created_at'], // submission mengacu pada tanggal buat + 'submission_date' => $requestLog['created_at'], + 'admission_date' => $requestLog['submission_date'], 'approved_final_log_at' => $requestLog['approved_final_log_at'], // submission final log 'discharge_date' => $requestLog['discharge_date'], 'service_type' => Helper::serviceName($requestLog['service_code']), diff --git a/frontend/client-portal/src/pages/AlarmCenter/ListMember.tsx b/frontend/client-portal/src/pages/AlarmCenter/ListMember.tsx index 8324b208..128ded13 100644 --- a/frontend/client-portal/src/pages/AlarmCenter/ListMember.tsx +++ b/frontend/client-portal/src/pages/AlarmCenter/ListMember.tsx @@ -109,6 +109,12 @@ export default function List() { label: 'Code', isSort: true, }, + { + id: 'provider_name', + align: 'left', + label: 'Provider', + isSort: false, + }, { id: 'service_type', align: 'center', diff --git a/frontend/dashboard/src/pages/CaseManagement/DailyMonitoring/Components/ClaimList.tsx b/frontend/dashboard/src/pages/CaseManagement/DailyMonitoring/Components/ClaimList.tsx index b9363926..cd52ce87 100644 --- a/frontend/dashboard/src/pages/CaseManagement/DailyMonitoring/Components/ClaimList.tsx +++ b/frontend/dashboard/src/pages/CaseManagement/DailyMonitoring/Components/ClaimList.tsx @@ -2,7 +2,7 @@ * Core * ============================================ */ -import { Box, Paper, TableContainer, Table, TableHead, TableRow, TableCell, TableBody } from "@mui/material"; +import { Box, Paper, TableContainer, Table, TableHead, TableRow, TableCell, TableBody, Grid, Stack } from "@mui/material"; /** * Component @@ -15,65 +15,232 @@ import ClaimListRow from "./ClaimListRow"; * ============================================ */ import { ClaimListType } from "../Model/Types"; +import React, { ChangeEvent, useEffect, useRef, useState } from "react"; +import axios from "@/utils/axios"; +import { enqueueSnackbar } from "notistack"; +import { Button } from "@mui/material"; +import DataTable from '../../../../components/LaravelTable'; +import { LaravelPaginatedData, LaravelPaginatedDataDefault } from "@/@types/paginated-data"; +import { useParams, useSearchParams } from "react-router-dom"; +import { TextField } from "@mui/material"; +import { ButtonGroup } from "@mui/material"; type Props = { claim_list: ClaimListType[] | null, } export default function ClaimList({ ...props }: Props) { + const [searchParams, setSearchParams] = useSearchParams(); + const { member_id } = useParams(); + // State + // -------------------- + const [dataTableIsLoading, setDataTableLoading] = useState(true); + const [dataTableData, setDataTableData] = useState( + LaravelPaginatedDataDefault + ); // Tabel Style // -------------------- const TableHeadStyle = { fontWeight: 'bold', }; - return ( - - - - {/* Head Table */} - - - - Admission Date - Discharge Date - Code - Service Type - Status - - - + // Load Data + // ------------------- + const loadDataTableData = async (appliedFilter: any | null = null) => { + setDataTableLoading(true); + const filter = appliedFilter ? appliedFilter : Object.fromEntries([...searchParams.entries()]); + + const response = await axios.get('/case_management/claimlist/'+member_id, {params: filter}) + setDataTableLoading(false); + setDataTableData(response.data); + } - {/* Body Table */} - {props.claim_list == null ? + const applyFilter = async (searchFilter: { search: string }) => { + await loadDataTableData(searchFilter); + setSearchParams(searchFilter); + }; + + const handlePageChange = (event: ChangeEvent, value: number): void => { + const filter = Object.fromEntries([...searchParams.entries(), ['page', value]]); + + loadDataTableData(filter); + setSearchParams(filter); + }; + + useEffect(() => { + loadDataTableData(); + }, []) + + function SearchInput(props: any) { + // SEARCH + const searchInput = useRef(null); + const [searchText, setSearchText] = useState(''); + + const handleSearchChange = (event: any) => { + const newSearchText = event.target.value ?? ''; + setSearchText(newSearchText); + }; + + const handleSearchSubmit = (event: any) => { + event.preventDefault(); + props.onSearch({ search: searchText }); // Trigger to Parent + }; + + useEffect(() => { + // Trigger First Search + setSearchText(searchParams.get('search') ?? ''); + }, []); + + return ( +
+ + + ); + } + + function ImportForm(props: any) { + // IMPORT + // Create Button Menu + const [anchorEl, setAnchorEl] = React.useState(null); + const createMenu = Boolean(anchorEl); + const importForm = useRef(null); + const [currentImportFileName, setCurrentImportFileName] = useState(null); + const [importLoading, setImportLoading] = useState(false); + + const handleClick = (event: React.MouseEvent) => { + setAnchorEl(event.currentTarget); + }; + const handleClose = () => { + setAnchorEl(null); + }; + + const handleImportButton = () => { + if (importForm?.current) { + handleClose(); + importForm.current ? importForm.current.click() : console.log('No File selected'); + } else { + alert('No file selected'); + } + }; + + const handleCancelImportButton = () => { + + }; + + const handleImportChange = (event: any) => { + if (event.target.files[0]) { + setCurrentImportFileName(event.target.files[0].name); + } else { + setCurrentImportFileName(null); + } + }; + + const handleUpload = () => { + + }; + + const handleGetTemplate = (type :string) => { + + } + + const handleGetData = (type :string) => { + + } + + return ( +
+ {!currentImportFileName && ( + + + {/* */} + + )} +
+ ); + } + + + function TableContent() { + return ( +
+ {/* Head Table */} + + + + Admission Date + Discharge Date + Code + Service Type + Status + + + + + {/* Body Table */} + {dataTableData.data.claim_list == null ? + ( + + + Loading + + + ) + : + ( + dataTableData.data.claim_list.data.length == 0 ? ( - Loading + No Data ) : ( - props.claim_list.length == 0 ? - ( - - - No Data - - - ) - : - ( - - {props.claim_list.map((row: ClaimListType, index) => ( - - ))} - - ) - )} -
-
-
- ) + + {dataTableData.data.claim_list.data.map((row: ClaimListType, index) => ( + + ))} + + ) + )} + + ) + } + + return ( + + + + + + + } + /> + + + ); } diff --git a/frontend/dashboard/src/pages/CaseManagement/DailyMonitoring/Components/DailyMonitoringList.tsx b/frontend/dashboard/src/pages/CaseManagement/DailyMonitoring/Components/DailyMonitoringList.tsx index 60c152cb..bd0fbfa4 100644 --- a/frontend/dashboard/src/pages/CaseManagement/DailyMonitoring/Components/DailyMonitoringList.tsx +++ b/frontend/dashboard/src/pages/CaseManagement/DailyMonitoring/Components/DailyMonitoringList.tsx @@ -2,8 +2,8 @@ * Core * ============================================ */ -import { useEffect, useState } from "react"; -import { Box, Paper, TableContainer, Table, TableHead, TableRow, TableCell, TableBody } from "@mui/material"; +import React, { ChangeEvent, useEffect, useRef, useState } from "react"; +import { Box, Paper, TableContainer, Table, TableHead, TableRow, TableCell, TableBody, Stack, TextField, Button, Menu, } from "@mui/material"; /** * Types & Functions @@ -12,12 +12,21 @@ import { Box, Paper, TableContainer, Table, TableHead, TableRow, TableCell, Tabl import { getDailyMonitoringList } from "../Model/Functions"; import { DailyMonitoringListType } from "../Model/Types"; import DailyMonitoringListRow from "./DailyMonitoringListRow"; +import { LaravelPaginatedData, LaravelPaginatedDataDefault } from "@/@types/paginated-data"; +import { Grid } from "@mui/material"; +import DataTable from '../../../../components/LaravelTable'; +import { MenuItem } from "@mui/material"; +import { useSearchParams } from "react-router-dom"; +import axios from "@/utils/axios"; export default function DailyMonitoringList() { + const [searchParams, setSearchParams] = useSearchParams(); // State // -------------------- const [dataTableIsLoading, setDataTableLoading] = useState(true); - const [dataTableData, setDataTableData] = useState([]); + const [dataTableData, setDataTableData] = useState( + LaravelPaginatedDataDefault + ); // Tabel Style // -------------------- @@ -25,69 +34,205 @@ export default function DailyMonitoringList() { fontWeight: 'bold', }; + + // Load Data // ------------------- - const loadDataTableData = async () => { + const loadDataTableData = async (appliedFilter: any | null = null) => { setDataTableLoading(true); - - const response = await getDailyMonitoringList(); - + const filter = appliedFilter ? appliedFilter : Object.fromEntries([...searchParams.entries()]); + + const response = await axios.get('/case_management/memberlist', {params: filter}) setDataTableLoading(false); - setDataTableData(response); + setDataTableData(response.data); } + const applyFilter = async (searchFilter: { search: string }) => { + await loadDataTableData(searchFilter); + setSearchParams(searchFilter); + }; + + const handlePageChange = (event: ChangeEvent, value: number): void => { + const filter = Object.fromEntries([...searchParams.entries(), ['page', value]]); + loadDataTableData(filter); + setSearchParams(filter); + }; + useEffect(() => { loadDataTableData(); }, []) - return ( - - - - {/* Head Table */} - - - - Member ID - Name - Start Date - End Date - Admission Date - Provider - - - + function SearchInput(props: any) { + // SEARCH + const searchInput = useRef(null); + const [searchText, setSearchText] = useState(''); + + const handleSearchChange = (event: any) => { + const newSearchText = event.target.value ?? ''; + setSearchText(newSearchText); + }; + + const handleSearchSubmit = (event: any) => { + event.preventDefault(); + props.onSearch({ search: searchText }); // Trigger to Parent + }; + + useEffect(() => { + // Trigger First Search + setSearchText(searchParams.get('search') ?? ''); + }, []); + + return ( +
+ + + ); + } - {/* Body Table */} - {dataTableIsLoading ? + function ImportForm(props: any) { + // IMPORT + // Create Button Menu + const [anchorEl, setAnchorEl] = React.useState(null); + const createMenu = Boolean(anchorEl); + const importForm = useRef(null); + const [currentImportFileName, setCurrentImportFileName] = useState(null); + const [importLoading, setImportLoading] = useState(false); + + const handleClick = (event: React.MouseEvent) => { + setAnchorEl(event.currentTarget); + }; + const handleClose = () => { + setAnchorEl(null); + }; + + const handleImportButton = () => { + if (importForm?.current) { + handleClose(); + importForm.current ? importForm.current.click() : console.log('No File selected'); + } else { + alert('No file selected'); + } + }; + + const handleCancelImportButton = () => { + + }; + + const handleImportChange = (event: any) => { + if (event.target.files[0]) { + setCurrentImportFileName(event.target.files[0].name); + } else { + setCurrentImportFileName(null); + } + }; + + const handleUpload = () => { + + }; + + const handleGetTemplate = (type :string) => { + + } + + const handleGetData = (type :string) => { + + } + + return ( +
+ {!currentImportFileName && ( + + + {/* */} + + )} +
+ ); + } + + function TableContent(){ + return ( +
+ {/* Head Table */} + + + + Member ID + Name + Start Date + End Date + Admission Date + Provider + + + + + {/* Body Table */} + {dataTableIsLoading ? + ( + + + Loading + + + ) + : + ( + dataTableData.data.length == 0 ? ( - Loading + No Data ) : ( - dataTableData.length == 0 ? - ( - - - No Data - - - ) - : - ( - - {dataTableData.map((row: DailyMonitoringListType, index) => ( - - ))} - - ) - )} -
-
-
- ) + + {dataTableData.data.map((row: DailyMonitoringListType, index) => ( + + ))} + + ) + )} + + ) + } + + return ( + + + + + + + } + /> + + + ); + } diff --git a/frontend/dashboard/src/pages/CaseManagement/DailyMonitoring/Components/DailyMonitoringListRow.tsx b/frontend/dashboard/src/pages/CaseManagement/DailyMonitoring/Components/DailyMonitoringListRow.tsx index 2b6df13b..466499cb 100644 --- a/frontend/dashboard/src/pages/CaseManagement/DailyMonitoring/Components/DailyMonitoringListRow.tsx +++ b/frontend/dashboard/src/pages/CaseManagement/DailyMonitoring/Components/DailyMonitoringListRow.tsx @@ -42,7 +42,7 @@ export default function DailyMonitoringListRow ({ ...props }: Props) { variant="ghost" color="default" > - {fDate(props.row.startdate)} + {fDate(props.row.start_date)} @@ -50,7 +50,7 @@ export default function DailyMonitoringListRow ({ ...props }: Props) { variant="ghost" color="default" > - {fDate(props.row.enddate)} + {fDate(props.row.end_date)} diff --git a/frontend/dashboard/src/pages/CaseManagement/DailyMonitoring/Components/DetailMonitoringForm.tsx b/frontend/dashboard/src/pages/CaseManagement/DailyMonitoring/Components/DetailMonitoringForm.tsx index 9a5e5c52..2643b9ec 100644 --- a/frontend/dashboard/src/pages/CaseManagement/DailyMonitoring/Components/DetailMonitoringForm.tsx +++ b/frontend/dashboard/src/pages/CaseManagement/DailyMonitoring/Components/DetailMonitoringForm.tsx @@ -364,7 +364,7 @@ export default function DetailMonitoringList() { /> { - index == (fields1.length-1) ? + index === 0 ? ( append1({medical_plan_str: ''})}> @@ -374,11 +374,22 @@ export default function DetailMonitoringList() { ) : ( - - remove1(index)}> - - - + index === (fields1.length - 1) ? + ( + + remove1(index)}> + + + + ) + : + ( + + append1({medical_plan_str: ''})}> + + + + ) ) } @@ -410,21 +421,30 @@ export default function DetailMonitoringList() { /> { - index == (fields2.length-1) ? + index === 0 ? ( append2({non_medikamentosa_plan_str: ''})}> - - ) - : - ( - - remove2(index)}> - - - + + ) : ( + index == (fields2.length-1) ? + ( + + remove2(index)}> + + + + ) + : + ( + + append2({non_medikamentosa_plan_str: ''})}> + + + + ) ) } @@ -558,12 +578,12 @@ export default function DetailMonitoringList() { - Date* + Date - Provider* + Provider @@ -585,7 +605,7 @@ export default function DetailMonitoringList() { - Examination* + Examination diff --git a/frontend/dashboard/src/pages/CaseManagement/DailyMonitoring/Model/Functions.ts b/frontend/dashboard/src/pages/CaseManagement/DailyMonitoring/Model/Functions.ts index 74367218..ffbe3be3 100644 --- a/frontend/dashboard/src/pages/CaseManagement/DailyMonitoring/Model/Functions.ts +++ b/frontend/dashboard/src/pages/CaseManagement/DailyMonitoring/Model/Functions.ts @@ -7,10 +7,10 @@ import { fDate, fDateOnly } from '@/utils/formatTime'; /** * Listing Daily Monitoring */ -export const getDailyMonitoringList = async ( ): Promise => { - const response = await axios.get('/case_management/memberlist') +export const getDailyMonitoringList = async ( param: any) => { + const response = await axios.get('/case_management/memberlist', {params: param}) .then((res) =>{ - return res.data.data.member_list; + return res.data; }) .catch((res) => { enqueueSnackbar("server error !", { diff --git a/frontend/dashboard/src/pages/CaseManagement/DailyMonitoring/Model/Types.ts b/frontend/dashboard/src/pages/CaseManagement/DailyMonitoring/Model/Types.ts index fa2b800d..8a39ff5c 100644 --- a/frontend/dashboard/src/pages/CaseManagement/DailyMonitoring/Model/Types.ts +++ b/frontend/dashboard/src/pages/CaseManagement/DailyMonitoring/Model/Types.ts @@ -4,8 +4,8 @@ export type DailyMonitoringListType = { member_id : string, name : string, - startdate : string, - enddate : string, + start_date : string, + end_date : string, addmision_date : string, provider : string } diff --git a/frontend/dashboard/src/pages/CustomerService/FinalLog/List.tsx b/frontend/dashboard/src/pages/CustomerService/FinalLog/List.tsx index 13ce5f18..838188b4 100644 --- a/frontend/dashboard/src/pages/CustomerService/FinalLog/List.tsx +++ b/frontend/dashboard/src/pages/CustomerService/FinalLog/List.tsx @@ -8,6 +8,7 @@ import { MenuItem, Table, TableBody, + TableSortLabel, TableCell, TableRow, TextField, @@ -48,10 +49,12 @@ import { capitalizeFirstLetter } from '@/utils/formatString'; import Label from '@/components/Label'; import TableMoreMenu from '@/components/table/TableMoreMenu'; import { Import } from '@/@types/claims'; +import { visuallyHidden } from '@mui/utils'; import { FinalLogType } from '../FinalLog/Model/Types'; import DialogDeleteFinalLOG from './Components/DialogDeleteFinalLOG'; import { Delete } from '@mui/icons-material'; +import { HeadCell, Order } from '@/@types/table'; // import LoadingButton from '@/theme/overrides/LoadingButton'; export default function List() { @@ -284,8 +287,14 @@ export default function List() { const loadDataTableData = async (appliedFilter: any | null = null) => { setDataTableLoading(true); - const filter = appliedFilter ? appliedFilter : Object.fromEntries([...searchParams.entries()]); - const response = await axios.get('/customer-service/request?final_log=1&service_code=OP', { params: filter }); + const parameters = + Object.keys(appliedParams).length !== 0 + ? appliedParams + : Object.fromEntries([...searchParams.entries(), ['order', order], ['orderBy', orderBy]]); + + const response = await axios.get('/customer-service/request?final_log=1&service_code=OP', { + params: { ...parameters }, + }); // console.log(response.data); setDataTableLoading(false); @@ -472,38 +481,139 @@ export default function List() { /* ------------------ END TABLE ROW ------------------ */ } + /* -------------------------------- headCell -------------------------------- */ + const headCells: HeadCell[] = [ + { + id: 'code', + align: 'left', + label: 'Code', + isSort: true, + }, + { + id: 'provider', + align: 'left', + label: 'Provider', + isSort: false, + }, + + { + id: 'name', + align: 'left', + label: 'Name', + isSort: false, + }, + { + id: 'submission_date', + align: 'left', + label: 'Admission Date', + isSort: true, + }, + { + id: 'service_code', + align: 'left', + label: 'Service Type', + isSort: true, + }, + { + id: 'claim_method', + align: 'left', + label: 'Claim Method', + isSort: false, + }, + { + id: 'status', + align: 'left', + label: 'Status', + isSort: true, + }, + { + id: '', + align: 'left', + label: 'Action', + isSort: false, + }, + ]; + /* -------------------------------------------------------------------------- */ + + const createSortHandler = (property: string) => (event: React.MouseEvent) => { + handleRequestSort(event, property); + }; + + /* ------------------------------ handle params ----------------------------- */ + const [appliedParams, setAppliedParams] = useState({}); + + const params = { + searchParams: searchParams, + setSearchParams: setSearchParams, + appliedParams: appliedParams, + setAppliedParams: setAppliedParams, + }; + + /* ------------------------------ handle order ------------------------------ */ + const [order, setOrder] = useState('desc'); + const [orderBy, setOrderBy] = useState('submission_date'); + + const orders = { + order: order, + setOrder: setOrder, + orderBy: orderBy, + setOrderBy: setOrderBy, + }; + + /* ------------------------------- handle sort ------------------------------ */ + const handleRequestSort = async (event: React.MouseEvent, property: string) => { + const isAsc = orders?.orderBy === property && orders?.order === 'asc'; + orders?.setOrder(isAsc ? 'desc' : 'asc'); + orders?.setOrderBy(property); + const parameters = Object.fromEntries([ + ...(params?.searchParams.entries() as IterableIterator<[string, string]>), + ['order', isAsc ? 'desc' : 'asc'], + ['orderBy', property], + ]); + console.log(parameters) + params?.setAppliedParams(parameters); + }; + + useEffect(() => { + loadDataTableData(); + }, [appliedParams, searchParams, order, orderBy, setSearchParams]); + + + function TableContent() { return ( {/* ------------------ TABLE HEADER ------------------ */} - {/* */} - {/* - ID Request LOG - */} - - Code - - - Provider - - - Name - - - Date of Submission - - - Service Type - - - Claim Method - - - Status - - + {headCells && + headCells.map((headCell, index) => ( + + {headCell.isSort ? ( + + {headCell.label} + {orders?.orderBy === headCell.id ? ( + + {orders.order === 'desc' ? 'sorted descending' : 'sorted ascending'} + + ) : null} + + ) : ( + headCell.label + )} + + ))} {/* ------------------ END TABLE HEADER ------------------ */} diff --git a/frontend/dashboard/src/pages/CustomerService/FinalLog/Model/Types.tsx b/frontend/dashboard/src/pages/CustomerService/FinalLog/Model/Types.tsx index 3860f530..fbf1224c 100644 --- a/frontend/dashboard/src/pages/CustomerService/FinalLog/Model/Types.tsx +++ b/frontend/dashboard/src/pages/CustomerService/FinalLog/Model/Types.tsx @@ -39,6 +39,7 @@ export type DetailFinalLogType = { marital_status : string, admission_date : string, submission_date : string, + admission_date : string, approved_final_log_at : string, service_type : string, claim_method : string, diff --git a/frontend/dashboard/src/pages/CustomerService/Request/List.tsx b/frontend/dashboard/src/pages/CustomerService/Request/List.tsx index ecf25789..b3e2bec9 100644 --- a/frontend/dashboard/src/pages/CustomerService/Request/List.tsx +++ b/frontend/dashboard/src/pages/CustomerService/Request/List.tsx @@ -334,7 +334,7 @@ export default function List() { }; // Called on every row to map the data to the columns - function createData(data: RequestLogType): any { + function createData(data: RequestLogType) { return { ...data, }; @@ -368,7 +368,7 @@ export default function List() { {row.code}{row.provider}{row.member_name} - + {row.service_name}{row.payment_type_name} @@ -514,7 +514,7 @@ export default function List() { { id: 'submission_date', align: 'left', - label: 'Submision Date', + label: 'Admission Date', isSort: true, }, { diff --git a/frontend/dashboard/src/pages/CustomerService/Request/Model/Types.tsx b/frontend/dashboard/src/pages/CustomerService/Request/Model/Types.tsx index 63aa725c..e8bdad3e 100644 --- a/frontend/dashboard/src/pages/CustomerService/Request/Model/Types.tsx +++ b/frontend/dashboard/src/pages/CustomerService/Request/Model/Types.tsx @@ -15,7 +15,10 @@ export type RequestLogType = { code : string, member : Member, submission_date : string, + admission_date : string, service_name : string, + provider : string, + member_name : string, payment_type_name : string, status_final_log : string, status : string,