diff --git a/app/Services/CorporateMemberService.php b/app/Services/CorporateMemberService.php index d66fa83b..e026124a 100644 --- a/app/Services/CorporateMemberService.php +++ b/app/Services/CorporateMemberService.php @@ -46,7 +46,7 @@ class CorporateMemberService public function getAllMemberClaimReports(int $corporateId, Request $request) { - $limit = $request->has('perPage') ? $request->input('perPage') : 10; + $limit = $request->has('per_page') ? $request->input('per_page') : 10; $results = DB::table('claim_requests') ->leftJoin('claims', 'claim_requests.id', '=', 'claims.claim_request_id') diff --git a/frontend/client-portal/src/components/Table.tsx b/frontend/client-portal/src/components/Table.tsx index b38aa559..5a9ac040 100644 --- a/frontend/client-portal/src/components/Table.tsx +++ b/frontend/client-portal/src/components/Table.tsx @@ -136,6 +136,7 @@ export default function Table({ const parameters = Object.fromEntries([ ...params.searchParams.entries(), ['page', newPage + 1], + ['per_page', paginations.rowsPerPage] ]); paginations.setPage(newPage); await new Promise((resolve) => setTimeout(resolve, 500)); diff --git a/frontend/client-portal/src/pages/ClaimReport/DetailTimeline.tsx b/frontend/client-portal/src/pages/ClaimReport/DetailTimeline.tsx index 4a1b2064..1e93f302 100644 --- a/frontend/client-portal/src/pages/ClaimReport/DetailTimeline.tsx +++ b/frontend/client-portal/src/pages/ClaimReport/DetailTimeline.tsx @@ -44,8 +44,6 @@ export default function NoOppositeContent({data}) { } }, [data]); - console.log(timeline); - console.log(requestFile); return ( <> {timeline?.map((dataTimeline, index) => ( diff --git a/frontend/hospital-portal/public/lang/en-US.json b/frontend/hospital-portal/public/lang/en-US.json index baef7538..7850d55b 100644 --- a/frontend/hospital-portal/public/lang/en-US.json +++ b/frontend/hospital-portal/public/lang/en-US.json @@ -4,12 +4,12 @@ "infoLogin": "Enter the registered account", "txtLogin1" : "Sign in to Hospital Portal", "txtLogin2" : "Enter your details below", - "txtCardSearchMember1" : "Guarantee Submission", - "txtCardSearchMember2" : "Find Member", + "txtCardSearchMember1" : "Membership Query", + "txtCardSearchMember2" : "Search Member", "txtCardSearchMember3" : "Date Birth", "txtCardSearchMember4" : "Member ID", "txtCardSearchMember5" : "Member", - "txtDialogMember1" : "Benefit Summary", + "txtDialogMember1" : "Benefit", "txtDialogMember2" : "Request LOG", - "txtDialogMember3" : "Member Detail" + "txtDialogMember3" : "Detail" } diff --git a/frontend/hospital-portal/public/lang/id-ID.json b/frontend/hospital-portal/public/lang/id-ID.json index 41db3e54..182c705d 100644 --- a/frontend/hospital-portal/public/lang/id-ID.json +++ b/frontend/hospital-portal/public/lang/id-ID.json @@ -9,7 +9,7 @@ "txtCardSearchMember3" : "Tanggal Lahir", "txtCardSearchMember4" : "Member ID", "txtCardSearchMember5" : "Member", - "txtDialogMember1" : "Ringkasan Manfaat", + "txtDialogMember1" : "Manfaat", "txtDialogMember2" : "Request LOG", - "txtDialogMember3" : "Detail Member" + "txtDialogMember3" : "Detail" } diff --git a/frontend/hospital-portal/src/components/dialogs/DialogDetailClaim.tsx b/frontend/hospital-portal/src/components/dialogs/DialogDetailClaim.tsx index 374603df..fed3e5dc 100644 --- a/frontend/hospital-portal/src/components/dialogs/DialogDetailClaim.tsx +++ b/frontend/hospital-portal/src/components/dialogs/DialogDetailClaim.tsx @@ -10,6 +10,7 @@ import { Divider, Stack, CircularProgress, + ButtonBase, } from '@mui/material'; import { Add } from '@mui/icons-material'; // components @@ -17,7 +18,7 @@ import MuiDialog from '../../components/MuiDialog'; // theme import palette from '../../theme/palette'; // React -import { ReactElement, useEffect, useState } from 'react'; +import { ReactElement, useEffect, useState, useRef } from 'react'; import { fDate } from '@/utils/formatTime'; import { addMinutes, format } from 'date-fns'; import { LoadingButton } from '@mui/lab'; @@ -44,6 +45,7 @@ type MuiDialogProps = { const steps = ['Review', 'Approval', 'Disbursement']; const DialogDetailClaim = ({ title, openDialog, setOpenDialog, data }: MuiDialogProps) => { + console.log(data); const claim = data.claim ?? null; // --------------------------------------------- @@ -103,11 +105,11 @@ const DialogDetailClaim = ({ title, openDialog, setOpenDialog, data }: MuiDialog Claim Request - - Submission date + + Submission Date {/* {JSON.stringify(data)} */} - - {claim.created_at && fDate(claim.created_at)} + + {claim.created_at && format(new Date(claim.created_at), "d MMM yyyy")} @@ -122,47 +124,19 @@ const DialogDetailClaim = ({ title, openDialog, setOpenDialog, data }: MuiDialog ))} - - {/* { claim.status == 'approved' && ( - - } - fullWidth - // sx={{ typography: 'subtitle2', borderColor: '#F5F5F5' }} - onClick={() => {handleUploadInvoice()}} - > - Upload Invoice - - - )} */} - {/* ---------------------------------TYPE INFO------------------------------------ */} - - Pengajuan Penjaminan + Request Claim - - - - } - fullWidth - // sx={{ typography: 'subtitle2', borderColor: '#F5F5F5' }} - onClick={() => {}} - > - Upload Invoice - - - + + {console.log(claim.histories_by_date)} {claim.histories_by_date && claim.histories_by_date.map((historiesByDate) => ( @@ -322,4 +296,46 @@ const DialogDetailClaim = ({ title, openDialog, setOpenDialog, data }: MuiDialog ); }; +type ButtonIProp = { + row: ClaimSubmission; + type: 'invoice' | 'another' | 'lab'; + handle: (event: any, row: any, type: any) => void; +}; + +const Buttons = ({ handle, row, type }: ButtonIProp) => { + const ref = useRef(null); + + return ( + ref.current?.click()}> + + + + Add Invoice + + + handle(event, row, type)} + /> + + ); +}; + export default DialogDetailClaim; diff --git a/frontend/hospital-portal/src/components/table/Index.ts b/frontend/hospital-portal/src/components/table/Index.ts new file mode 100644 index 00000000..8b4b0f88 --- /dev/null +++ b/frontend/hospital-portal/src/components/table/Index.ts @@ -0,0 +1 @@ +export { default as TableMoreMenu } from './TableMoreMenu'; \ No newline at end of file diff --git a/frontend/hospital-portal/src/components/table/TableMoreMenu.tsx b/frontend/hospital-portal/src/components/table/TableMoreMenu.tsx new file mode 100644 index 00000000..6fe3f43e --- /dev/null +++ b/frontend/hospital-portal/src/components/table/TableMoreMenu.tsx @@ -0,0 +1,60 @@ +import { useEffect, useState } from 'react'; +// @mui +import { IconButton } from '@mui/material'; +// +import Iconify from '../Iconify'; +import MenuPopover from '../MenuPopover'; + +// ---------------------------------------------------------------------- + +type Props = { + actions: React.ReactNode; + disableRipple?: boolean; +}; + +export default function TableMoreMenu({ actions, disableRipple }: Props) { + const [open, setOpen] = useState(null); + + // Close menu popover + useEffect(() => { + setOpen(null); + }, [actions]) + + const handleOpen = (event: React.MouseEvent) => { + setOpen(event.currentTarget); + }; + + const handleClose = () => { + setOpen(null); + }; + + return ( + <> + + + + + + {actions} + +     +  ); +} \ No newline at end of file diff --git a/frontend/hospital-portal/src/pages/Dashboard.tsx b/frontend/hospital-portal/src/pages/Dashboard.tsx index aa5ae9b3..ab6274f6 100644 --- a/frontend/hospital-portal/src/pages/Dashboard.tsx +++ b/frontend/hospital-portal/src/pages/Dashboard.tsx @@ -86,12 +86,12 @@ export default function Dashboard() { - + {console.log('submit success')}}> - + {/* - + */} diff --git a/frontend/hospital-portal/src/sections/dashboard/CardSearchMember.tsx b/frontend/hospital-portal/src/sections/dashboard/CardSearchMember.tsx index 7ebbd7f2..70dea3cd 100644 --- a/frontend/hospital-portal/src/sections/dashboard/CardSearchMember.tsx +++ b/frontend/hospital-portal/src/sections/dashboard/CardSearchMember.tsx @@ -88,20 +88,26 @@ export default function CardSearchMember(handleSubmitSuccess) { alignItems="center" sx={{ paddingBottom: 2, paddingTop: 1 }} > - - {localeData.txtCardSearchMember1} - - - { + + { setNoPolis(event.target.value) - }} required> + }} + sx={{width:'40%'}} + required + /> + } + renderInput={(params) => } /> - - { - handleSearchMember() - }} - > - - {localeData.txtCardSearchMember2} - - {/* - Ajukan Penjaminan - */} - + { + handleSearchMember() + }} + > + + {localeData.txtCardSearchMember2} + {/* diff --git a/frontend/hospital-portal/src/sections/dashboard/DialogMember.tsx b/frontend/hospital-portal/src/sections/dashboard/DialogMember.tsx index 46c311e8..72af1fdc 100644 --- a/frontend/hospital-portal/src/sections/dashboard/DialogMember.tsx +++ b/frontend/hospital-portal/src/sections/dashboard/DialogMember.tsx @@ -11,6 +11,7 @@ import { Avatar } from '@mui/material'; import Iconify from '@/components/Iconify'; import FormRequestClaim from './FormRequestClaim'; import { LanguageContext } from '@/contexts/LanguageContext'; +import { format } from 'date-fns'; export default function DialogMember(member, handleSubmitSuccess) { const { localeData } = useContext(LanguageContext); @@ -75,84 +76,51 @@ export default function DialogMember(member, handleSubmitSuccess) { - - - - - - Member ID - - - : { member?.member_id ?? '-'} - - - Policy Number - - - : { member?.current_policy?.code ?? '-'} - - - NRIC - - - : {member?.nric ?? '-'} - - - - NIK - - - : {member?.person?.nik ?? '-'} - - - Email - - - : {member?.email ?? '-'} - - - - - - - Birth Date - - - : {member?.birth_date ?? '-'} - - - Gender - - - : {member?.gender ?? '-'} - - - Marital Status - - - : {member?.marital_status ?? '-'} - - - Language - - - : {member?.language ?? '-'} - - - Race - - - : {member?.race ?? '-'} - - - Relationship - - - : {member?.relation_with_principal ?? '-'} - - - - + + + Member ID + { member?.member_id ?? '-'} + + + Policy Number + { member?.current_policy?.code ?? '-'} + + + NRIC + {member?.person?.nik ?? '-'} + + + NIK + {member?.person?.nik ?? '-'} + + + Email + {member?.email ?? '-'} + + + Date of Birth + {member?.birth_date ? format(new Date(member.birth_date), "d MMM yyyy") : '-'} + + + Gender + {member?.gender ?? '-'} + + + Marital Status + {member?.marital_status ?? '-'} + + + Language + {member?.language ?? '-'} + + + Race + {member?.race ?? '-'} + + + Relationship + {member?.relation_with_principal ?? '-'} + @@ -161,12 +129,9 @@ export default function DialogMember(member, handleSubmitSuccess) { { member && member?.current_plan?.corporate_benefits?.map((corporateBenefit, index) => {return ( - {corporateBenefit.benefit.description} - Member ID : {corporateBenefit.benefit.code} - Yearly Limits - - {corporateBenefit.usage ?? 0} / - {corporateBenefit.limit_ammount < 9999999999 ? fCurrency(corporateBenefit.limit_amount ?? 0) : 'As Charge' } + {corporateBenefit.benefit.description} + {corporateBenefit.benefit.code} + )})} diff --git a/frontend/hospital-portal/src/sections/dashboard/FormRequestClaim.tsx b/frontend/hospital-portal/src/sections/dashboard/FormRequestClaim.tsx index 799d43ad..b946a6f5 100644 --- a/frontend/hospital-portal/src/sections/dashboard/FormRequestClaim.tsx +++ b/frontend/hospital-portal/src/sections/dashboard/FormRequestClaim.tsx @@ -2,7 +2,7 @@ import { styled } from '@mui/material/styles'; import Iconify from '@/components/Iconify'; import { fCurrency } from '@/utils/formatNumber'; import { LoadingButton } from '@mui/lab'; -import { Avatar, Button, Divider, LinearProgress, linearProgressClasses } from '@mui/material'; +import { Avatar, Button, Divider, LinearProgress, linearProgressClasses, ButtonBase, Box } from '@mui/material'; import { Card } from '@mui/material'; import { Stack, Typography } from '@mui/material'; import { fPostFormat } from '@/utils/formatTime'; @@ -10,6 +10,7 @@ import axios from '@/utils/axios'; import { enqueueSnackbar } from 'notistack'; import { useRef, useState } from 'react'; import { makeFormData } from '@/utils/jsonToFormData'; +import { format } from 'date-fns'; // TODO Fix any export default function FormRequestClaim({ member, handleSubmitSuccess }) { @@ -119,18 +120,19 @@ export default function FormRequestClaim({ member, handleSubmitSuccess }) { return ( - - - Submission Date :
{fPostFormat(new Date(), 'dd/MM/yyyy')} + + + Submission Date + {format(new Date(), "d MMM yyyy")} - - + + @@ -143,13 +145,13 @@ export default function FormRequestClaim({ member, handleSubmitSuccess }) { sx={{ marginTop: 1, width: 48, height: 48 }} /> - {member?.full_name ?? ''} - {member?.member_id ?? ''} + {member?.full_name ?? ''} + {member?.member_id ?? ''}
- + {/* Total Limit @@ -166,7 +168,7 @@ export default function FormRequestClaim({ member, handleSubmitSuccess }) { {fCurrency(member?.current_plan?.usage ?? 0)} /{' '} {member?.current_plan?.limit_rules < 9999999999 ? fCurrency(member?.current_plan?.limit_rules ?? 0) : 'As Charge' } - + */} } @@ -175,8 +177,8 @@ export default function FormRequestClaim({ member, handleSubmitSuccess }) { > {/* -------------------------------Upload Dokumen Kondisi------------------------------- */} - - Dokumen Kondisi + + Condition Document {/* Hasil Lab, */} ))} - {/* - Nama File .pdf - - */} - {/* { JSON.stringify(filesResult) } */} - - { - fileKondisiInput.current.click(); - }} - > - - Add Result - + fileKondisiInput.current?.click()}> + + + + Add Result + + + + {/* -------------------------------Upload Dokumen Diagnosa------------------------------- */} - - Dokumen Diagnosa + + Diagnosis Dokumen {/* Hasil Lab, */} */} {/* { JSON.stringify(filesResult) } */} - - { - fileDiagnosaInput.current.click(); - }} - > - - Add Result - + fileDiagnosaInput.current?.click()}> + + + + Add Result + + + + {/* -------------------------------Upload Dokumen Hasil Penunjang------------------------------- */} - - Dokumen Hasil Penunjang + + Supporting Result Document {/* Hasil Lab, */} */} {/* { JSON.stringify(filesResult) } */} - - { - fileHasilPenunjangInput.current.click(); - }} - > - - Add File - + fileHasilPenunjangInput.current?.click()}> + + + + Add Result + + + +
{ submitRequest(); }} diff --git a/frontend/hospital-portal/src/sections/dashboard/TableList.tsx b/frontend/hospital-portal/src/sections/dashboard/TableList.tsx index 0aeb07cf..bd063a75 100644 --- a/frontend/hospital-portal/src/sections/dashboard/TableList.tsx +++ b/frontend/hospital-portal/src/sections/dashboard/TableList.tsx @@ -41,6 +41,8 @@ import { fSplit } from '@/utils/formatNumber'; import { Chip } from '@mui/material'; import { enqueueSnackbar } from 'notistack'; import DialogDetailClaim from '@/components/dialogs/DialogDetailClaim'; +import { format } from 'date-fns'; +import TableMoreMenu from '@/components/table/TableMoreMenu'; /* ---------------------------------- types --------------------------------- */ type PaginationTableProps = { @@ -108,30 +110,35 @@ const headCells: readonly HeadCell[] = [ align: 'left', label: 'Request Code', isSort: true, + width:'25%', }, { id: 'member.name', - align: 'center', - label: 'Member', + align: 'left', + label: 'Name', isSort: false, + width: '33%', }, { id: 'submission_date', - align: 'center', + align: 'left', label: 'Submission Date', isSort: true, - }, - { - id: 'log_url', - align: 'right', - label: 'Download LOG', - isSort: false, + width: '25%', }, { id: 'status', - align: 'right', + align: 'left', label: 'Status', - isSort: false, + isSort: true, + width: '10%', + }, + { + id: 'action', + align: 'left', + label: '', + isSort: true, + width: '7%', }, ]; @@ -149,7 +156,7 @@ function EnhancedTableHead({ order, orderBy, onRequestSort }: EnhancedTableProps sortDirection={orderBy === headCell.id ? order : false} // @ts-ignore align={headCell.align} - sx={{ padding: 2 }} + sx={{ padding: 2, width: headCell.width }} > {headCell.isSort ? ( ( {row.code} - {row.member?.full_name ?? ''} - {row.submission_date} - - {row.status == 'approved' ? ( - - ) : ( - Belum Tersedia - )} + {row.member?.full_name ?? ''} + + theme.palette.grey[300], + borderRadius: '4px', + width: '70%', + }} + variant="body2" + > + {row.submission_date ? format(new Date(row.submission_date), "d MMM yyyy") : ''} + - - - - - - { - handleShowClaim(row); + + {row.status === 'requested' ? ( + - - + Request + + ) : row.status === 'approved' ? ( + + Approval + + ) : row.status === 'declined' ? ( + + Decline + + ) : row.status === 'pending' ? ( + + Pending + + ) : row.status === 'reviewed' ? ( + + Review + + ) : ''} + + + + + handleShowClaim(row)}> + + View + + handleDownloadLog(row)}> + + Download LOG + + + } /> ))