From 5cb26d9553167d96cfd605942e25b308992baf83 Mon Sep 17 00:00:00 2001 From: ivan-sim Date: Wed, 16 Oct 2024 12:02:33 +0700 Subject: [PATCH] Update --- .../Api/CorporateMemberController.php | 26 ++++- .../DataListClaimMemberResource.php | 8 +- .../src/pages/AlarmCenter/ListMember.tsx | 98 ++++++++++++++++++- 3 files changed, 129 insertions(+), 3 deletions(-) diff --git a/Modules/Client/Http/Controllers/Api/CorporateMemberController.php b/Modules/Client/Http/Controllers/Api/CorporateMemberController.php index 76d1eeef..5d13b285 100755 --- a/Modules/Client/Http/Controllers/Api/CorporateMemberController.php +++ b/Modules/Client/Http/Controllers/Api/CorporateMemberController.php @@ -210,7 +210,31 @@ class CorporateMemberController extends Controller }; $query->getQuery()->orderBy($orderBy, $request->order); }) - ->paginate($per_page); + ->when($request->search, function ($q, $search) { + $q->where('code', 'LIKE', "%".$search."%"); + $q->orWhereHas('member', function ($subQuery) use ($search) { + $subQuery->where('name', 'LIKE', "%".$search."%"); + }); + }) + ->when($request->status, function ($q, $search) { + if ($search == 'kondisi') { + $q->whereHas('files', function ($subQuery) { + $subQuery->where('type', 'final-log-kondisi'); + }); + } elseif ($search == 'diagnosa') { + $q->whereHas('files', function ($subQuery) { + $subQuery->where('type', 'final-log-diagnosis'); + }); + } elseif ($search == 'result') { + $q->whereHas('files', function ($subQuery) { + $subQuery->where('type', 'final-log-result'); + }); + } elseif ($search == 'none') { + $q->doesntHave('files'); + } + }) + ->with(['member','files']) + ->paginate($per_page); return response()->json(['full_name' => $member->full_name?? null, 'paginations' => Helper::paginateResources(DataListClaimMemberResource::collection($data))]); } diff --git a/Modules/Client/Transformers/AlarmCenter/DataListClaimMemberResource.php b/Modules/Client/Transformers/AlarmCenter/DataListClaimMemberResource.php index 0f3bee66..4078995c 100755 --- a/Modules/Client/Transformers/AlarmCenter/DataListClaimMemberResource.php +++ b/Modules/Client/Transformers/AlarmCenter/DataListClaimMemberResource.php @@ -6,6 +6,8 @@ use Illuminate\Http\Resources\Json\JsonResource; use App\Models\Service; use App\Models\Organization; +use Illuminate\Support\Str; + class DataListClaimMemberResource extends JsonResource { /** @@ -16,12 +18,15 @@ class DataListClaimMemberResource extends JsonResource */ public function toArray($request) { + $filesGroupByType = $this->files->mapToGroups(function($file) { + return [Str::slug($file->type, '_') => $file]; + }); $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 { @@ -43,6 +48,7 @@ class DataListClaimMemberResource extends JsonResource 'provider_name' => $organizationName ?? null, 'service_type' => $serviceName, 'status' => $status, + 'files_by_type' => $filesGroupByType ]; } } diff --git a/frontend/client-portal/src/pages/AlarmCenter/ListMember.tsx b/frontend/client-portal/src/pages/AlarmCenter/ListMember.tsx index ba1b556f..3932d7e3 100755 --- a/frontend/client-portal/src/pages/AlarmCenter/ListMember.tsx +++ b/frontend/client-portal/src/pages/AlarmCenter/ListMember.tsx @@ -1,5 +1,5 @@ /* ---------------------------------- @mui ---------------------------------- */ -import { Stack, Typography, MenuItem, Grid } from '@mui/material'; +import { SelectChangeEvent, Stack, Typography, MenuItem, Grid } from '@mui/material'; /* ---------------------------------- axios --------------------------------- */ // import axios from 'axios'; import axios from '../../utils/axios'; @@ -122,6 +122,12 @@ export default function List() { label: 'Service Type', isSort: false, }, + { + id: 'files_by_type', + align: 'left', + label: 'File Upload', + isSort: false, + }, { id: 'status', align: 'center', @@ -136,6 +142,57 @@ export default function List() { }, ]; /* -------------------------------------------------------------------------- */ + /* ------------------------------ handle search ----------------------------- */ + const [searchText, setSearchText] = 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: true, + 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: true, + config: { + label: 'Status', + statusValue: statusValue, + statusData: filterData, + handleStatusChange: handleStatusChanges, + }, + }; useEffect(() => { (async () => { @@ -154,6 +211,14 @@ export default function List() { setSearchParams(parameters); + const status = [ + { id: 'kondisi', name: 'Dokumen Billing' }, + { id: 'diagnosa', name: 'Dokumen Diagnosa' }, + { id: 'result', name: 'Dokumen Penduk Medis' }, + { id: 'none', name: 'Belum ada Dokumen' }, + ]; + setStatusData(status); + setData({ full_name: response.data.full_name, paginations: response.data.paginations.data.map((obj: any) => ({ @@ -168,6 +233,35 @@ export default function List() { ) : ( '' ), + files_by_type: + <> + {obj.files_by_type?.final_log_diagnosis?.length > 0 ? ( + <> + +
+ + ):('')} + {obj.files_by_type?.final_log_kondisi?.length > 0 ? ( + <> + +
+ + ):('')} + {obj.files_by_type?.final_log_result?.length > 0 ? ( + <> + + + ) : ( + '' + )} + + , status: obj.status === 'Done' ? ( @@ -221,12 +315,14 @@ export default function List() {