From 9b4579e8f1c8b6a269d0970887fe18325a38b106 Mon Sep 17 00:00:00 2001 From: Muhammad Fajar Date: Wed, 27 Sep 2023 19:18:31 +0700 Subject: [PATCH] fix claim report --- .../Controllers/Api/ClaimReportController.php | 1 - .../Api/CorporateMemberController.php | 47 ++- .../ClaimReport/MemberResources.php | 3 +- app/Services/CorporateMemberService.php | 40 ++ .../pages/ClaimReport/DialogDetailClaim.tsx | 356 +++++++++--------- .../src/pages/ClaimReport/List.tsx | 184 +-------- 6 files changed, 258 insertions(+), 373 deletions(-) diff --git a/Modules/Client/Http/Controllers/Api/ClaimReportController.php b/Modules/Client/Http/Controllers/Api/ClaimReportController.php index 8a3d5b5a..599dcd13 100644 --- a/Modules/Client/Http/Controllers/Api/ClaimReportController.php +++ b/Modules/Client/Http/Controllers/Api/ClaimReportController.php @@ -3,7 +3,6 @@ namespace Modules\Client\Http\Controllers\Api; use App\Helpers\Helper; -use Illuminate\Http\Request; use App\Http\Controllers\Controller; use App\Models\ClaimRequest; diff --git a/Modules/Client/Http/Controllers/Api/CorporateMemberController.php b/Modules/Client/Http/Controllers/Api/CorporateMemberController.php index 4180139e..e711c470 100644 --- a/Modules/Client/Http/Controllers/Api/CorporateMemberController.php +++ b/Modules/Client/Http/Controllers/Api/CorporateMemberController.php @@ -32,7 +32,7 @@ class CorporateMemberController extends Controller $members = $this->corporateMemberService->getAllMemberClaimReports($corporate_id, $request); return response()->json(Helper::paginateResources(ClaimReportMemberResources::collection($members))); case 'claim-submit': - $members = $this->corporateMemberService->getAllMemberClaimReports($corporate_id, $request); + $members = $this->corporateMemberService->getAllMemberClaimSubmits($corporate_id, $request); return response()->json(Helper::paginateResources(ClaimSubmitMemberResources::collection($members))); case 'alarm-center': $members = $this->corporateMemberService->getAllMemberAlarmCenter($corporate_id, $request); @@ -61,35 +61,34 @@ class CorporateMemberController extends Controller //Get Family $data_family = DB::table('members') - ->join('persons', 'members.person_id', '=', 'persons.id') - ->select('members.*','persons.phone') - ->where('principal_id', $data->member_id) - ->get(); - if($data_family->isEmpty()) - { - $principal_id = DB::table('members') - ->where('member_id', $data->member_id) - ->select('principal_id') - ->first(); - $data_family = DB::table('members') ->join('persons', 'members.person_id', '=', 'persons.id') - ->select('members.*','persons.phone') - ->where('principal_id', $principal_id->principal_id) - ->where('members.member_id','<>',$data->member_id) - ->orWhere('members.member_id', $principal_id->principal_id) - ->get(); + ->select('members.*', 'persons.phone') + ->where('principal_id', $data->member_id) + ->get(); + if ($data_family->isEmpty()) { + $principal_id = DB::table('members') + ->where('member_id', $data->member_id) + ->select('principal_id') + ->first(); + $data_family = DB::table('members') + ->join('persons', 'members.person_id', '=', 'persons.id') + ->select('members.*', 'persons.phone') + ->where('principal_id', $principal_id->principal_id) + ->where('members.member_id', '<>', $data->member_id) + ->orWhere('members.member_id', $principal_id->principal_id) + ->get(); } - + $data->family = $data_family; //Claim History $data_claim_history = DB::table('claim_requests') - ->join('claims', 'claims.claim_request_id', '=', 'claim_requests.id') - ->join('claim_items', 'claim_items.claim_id', '=', 'claims.id') - ->join('benefits', 'benefits.id', '=', 'claim_items.claim_itemable_id') - ->select('claim_requests.status','claim_requests.submission_date','benefits.description') - ->where('claim_requests.member_id', $data->id) - ->get(); + ->join('claims', 'claims.claim_request_id', '=', 'claim_requests.id') + ->join('claim_items', 'claim_items.claim_id', '=', 'claims.id') + ->join('benefits', 'benefits.id', '=', 'claim_items.claim_itemable_id') + ->select('claim_requests.status', 'claim_requests.submission_date', 'benefits.description') + ->where('claim_requests.member_id', $data->id) + ->get(); $data->claim_history = $data_claim_history; return response()->json(DataMemberResource::make($data)); diff --git a/Modules/Client/Transformers/ClaimReport/MemberResources.php b/Modules/Client/Transformers/ClaimReport/MemberResources.php index 088f3510..2b4128f6 100644 --- a/Modules/Client/Transformers/ClaimReport/MemberResources.php +++ b/Modules/Client/Transformers/ClaimReport/MemberResources.php @@ -19,8 +19,7 @@ class MemberResources extends JsonResource 'memberId' => $this->member_id, 'fullName' => $this->full_name, 'division' => $this->division_name ?? '', - 'submission_date' => '', - 'status' => $this->active, + 'status' => $this->status, ]; } } diff --git a/app/Services/CorporateMemberService.php b/app/Services/CorporateMemberService.php index 9d40ae24..b552ac21 100644 --- a/app/Services/CorporateMemberService.php +++ b/app/Services/CorporateMemberService.php @@ -47,6 +47,46 @@ class CorporateMemberService { $limit = $request->has('perPage') ? $request->input('perPage') : 10; + return Member::query() + ->joinClaimRequests('right') + ->joinCorporateEmployees('left') + ->joinCorporateDivisions('left') + ->withSum('claims', 'total_claim') + ->whereHas('employeds', function (Builder $corporateEmployee) use ($corporateId) { + $corporateEmployee->where('corporate_id', $corporateId); + }) + ->when($request->input('search'), function (Builder $query, $search) { + $query->where(function (Builder $query) use ($search) { + $query->orWhere('members.member_id', 'like', "%" . $search . "%") + ->orWhere('members.name', 'like', "%" . $search . "%"); + }); + }) + ->when($request->input('division'), function (Builder $division, $value) { + $division->whereHas('division', function (Builder $corporateEmployee) use ($value) { + $corporateEmployee->where('division_id', $value); + }); + }) + ->when($request->has('orderBy'), function (Builder $query) use ($request) { + $orderBy = match ($request->orderBy) { + 'memberId' => 'member_id', + 'fullName' => 'name', + default => '' + }; + + if (in_array($orderBy, ['member_id', 'name', 'active'])) { + $query->getQuery()->orderBy($orderBy, $request->order); + } elseif ($request->orderBy === 'division') { + $query->getQuery()->orderBy('corporate_divisions.name', $request->order); + } + }) + ->select(['members.id', 'members.person_id', 'members.member_id', 'members.name', 'corporate_divisions.name AS division_name', 'claim_requests.status']) + ->paginate($limit); + } + + public function getAllMemberClaimSubmits(int $corporateId, Request $request) + { + $limit = $request->has('perPage') ? $request->input('perPage') : 10; + return Member::query() ->joinClaimRequests('right') ->joinCorporateEmployees('left') diff --git a/frontend/client-portal/src/pages/ClaimReport/DialogDetailClaim.tsx b/frontend/client-portal/src/pages/ClaimReport/DialogDetailClaim.tsx index 44c59d93..01df6b98 100644 --- a/frontend/client-portal/src/pages/ClaimReport/DialogDetailClaim.tsx +++ b/frontend/client-portal/src/pages/ClaimReport/DialogDetailClaim.tsx @@ -1,183 +1,181 @@ // @mui import { - Button, - Box, - Stepper, - Step, - StepLabel, - Card, - Typography, - Divider, - Stack, - } from '@mui/material'; - import { Add } from '@mui/icons-material'; - // components - import MuiDialog from '../../components/MuiDialog'; - // theme - import palette from '../../theme/palette'; - // React - import { ReactElement } from 'react'; - - type DataContent = { - info: string; - date: string; - time: string; - }; - - type MuiDialogProps = { - title?: { - name?: string; - icon?: string; - }; - openDialog: boolean; - setOpenDialog: Function; - content?: ReactElement; - data?: DataContent[]; - }; - - const steps = ['Review', 'Approval', 'Disbursement']; - - const DialogDetailClaim = ({ title, openDialog, setOpenDialog, data }: MuiDialogProps) => { - function clickHandler(arg0: string) { - throw new Error('Function not implemented.'); - } + Button, + Box, + Stepper, + Step, + StepLabel, + Card, + Typography, + Divider, + Stack, +} from '@mui/material'; +import { Add } from '@mui/icons-material'; +// components +import MuiDialog from '../../components/MuiDialog'; +// theme +import palette from '../../theme/palette'; +// React +import { ReactElement } from 'react'; - // const getContent = () => ( - - // ); - - return ( - - <> - - - Claim Request - - - Submission date - 15 / 05 / 2022 - - - - - {steps.map((label) => ( - - {label} - - ))} - - - - - 17 Mei 2022 - - - - - - {/* Item 1 */} - - - 09:10 WIB - - Approval - - - - - - Details : mohon melengkapi kekurangan dokumen - - - Lab pemeriksaan darah - - - - - {/* Item 2 */} - - - 09:00 WIB - - Approval - - - - - - Details : Penilaian Dokter - - - - {/* Item 3 */} - - - 08:00 WIB - - Review - - - - - - Details : Klaim Diajukan - - - - - - - // - ); +type DataContent = { + info: string; + date: string; + time: string; +}; + +type MuiDialogProps = { + title?: { + name?: string; + icon?: string; }; - - export default DialogDetailClaim; - \ No newline at end of file + openDialog: boolean; + setOpenDialog: Function; + content?: ReactElement; + data?: DataContent[]; +}; + +const steps = ['Review', 'Approval', 'Disbursement']; + +const DialogDetailClaim = ({ title, openDialog, setOpenDialog, data }: MuiDialogProps) => { + function clickHandler(arg0: string) { + throw new Error('Function not implemented.'); + } + + // const getContent = () => ( + + // ); + + return ( + <> + + + Claim Request + + + Submission date + 15 / 05 / 2022 + + + + + {steps.map((label) => ( + + {label} + + ))} + + + + + 17 Mei 2022 + + + + + + {/* Item 1 */} + + + 09:10 WIB + + Approval + + + + + + Details : mohon melengkapi kekurangan dokumen + + + Lab pemeriksaan darah + + + + + {/* Item 2 */} + + + 09:00 WIB + + Approval + + + + + + Details : Penilaian Dokter + + + + {/* Item 3 */} + + + 08:00 WIB + + Review + + + + + + Details : Klaim Diajukan + + + + + + + // + ); +}; + +export default DialogDetailClaim; diff --git a/frontend/client-portal/src/pages/ClaimReport/List.tsx b/frontend/client-portal/src/pages/ClaimReport/List.tsx index ddc67739..f41aa4bb 100644 --- a/frontend/client-portal/src/pages/ClaimReport/List.tsx +++ b/frontend/client-portal/src/pages/ClaimReport/List.tsx @@ -1,22 +1,5 @@ /* ---------------------------------- @mui ---------------------------------- */ -import { - Paper, - Table, - TableBody, - TableCell, - TableContainer, - TableHead, - TableRow, - TextField, - Stack, - IconButton, - Button, - TableSortLabel, - Box, -} from '@mui/material'; -import DialogDetailClaim from '../../sections/dashboard/DialogDetailClaim'; -import { visuallyHidden } from '@mui/utils'; -import { MoreVert as MoreVertIcon } from '@mui/icons-material'; +import { Stack, Button } from '@mui/material'; /* ---------------------------------- axios --------------------------------- */ // import axios from 'axios'; import axios from '../../utils/axios'; @@ -25,121 +8,13 @@ import { useContext, useEffect, useState } from 'react'; /* -------------------------------- component ------------------------------- */ import Iconify from '../../components/Iconify'; -import BaseTablePagination from '../../components/BaseTablePagination'; import TableComponent from '../../components/Table'; -import { Navigate } from 'react-router-dom'; - -/* ---------------------------------- 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 } from 'react-router-dom'; -/* ---------------------------------- 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} -// -// -// ))} -// -// -// ); -// } - -/* -------------------------------------------------------------------------- */ - export default function List() { const navigate = useNavigate(); @@ -250,12 +125,6 @@ export default function List() { label: 'Divisi', isSort: true, }, - /* { - id: 'end_date', - align: 'center', - label: 'End Date', - isSort: false, - }, */ { id: 'status', align: 'center', @@ -270,31 +139,6 @@ export default function List() { }, ]; - const [open, setOpen] = useState(null); - - const handleOpen = (event: React.MouseEvent) => { - setOpen(event.currentTarget); - }; - - const handleClose = () => { - setOpen(null); - }; - - /* const clickHandler = (isDialog: string) => { - switch (isDialog) { - - case 'infoDetail': - setDialogTitle('Claim Details'); - setIsDialog(isDialog); - setOpenDialog(true); - break; - - default: - break; - } - }; */ - /* -------------------------------------------------------------------------- */ - useEffect(() => { (async () => { setIsLoading(true); @@ -313,13 +157,10 @@ export default function List() { setData( response.data.data.map((obj: any) => ({ ...obj, - - /* memberId: , */ status: - obj.status === 1 ? ( + obj.status === 'requested' ? ( + ) : obj.status === 'approved' ? ( + ) : ( ), - /* action: ( - clickHandler('infoDetail')}> - - - ), */ })) ); @@ -383,7 +234,6 @@ export default function List() { loadings={loadings} params={params} searchs={searchs} - // filters={filters} /> );