Update service hospital dan prime center

This commit is contained in:
ivan-sim
2023-11-14 16:53:08 +07:00
parent c3b140d1f8
commit 8f77d8bec0
7 changed files with 107 additions and 65 deletions

View File

@@ -17,6 +17,7 @@ use Modules\HospitalPortal\Transformers\ClaimRequestResource;
use Modules\HospitalPortal\Transformers\ClaimRequestShowResource;
use PDF;
use Illuminate\Support\Facades\DB;
use Modules\HospitalPortal\Helpers\ApiResponse;
class ClaimRequestController extends Controller
{
@@ -64,7 +65,7 @@ class ClaimRequestController extends Controller
{
$request->validate([
'member_id' => 'required',
'service_code' => 'required|in:OP,IP'
'service_code' => 'required'
]);
$code = $this->getNextCode();
$member = Member::find($request->member_id);
@@ -145,7 +146,7 @@ class ClaimRequestController extends Controller
}
}
return Helper::responseJson(data: $request->toArray(), message: 'Claim Request berhasil ajukan!');
return ApiResponse::apiResponse("Success", [], trans('message.success'), 200);
}
/**
@@ -226,7 +227,8 @@ class ClaimRequestController extends Controller
public static function getNextCode()
{
$last_number = ClaimRequest::withTrashed()->max('code');
$next_number = empty($last_number) ? 1 : ((int) explode('-', $last_number)[2] + 1);
$last_number_parts = explode('-', $last_number);
$next_number = count($last_number_parts) < 3 ? 1 : ((int) $last_number_parts[2] + 1);
return self::makeCode($next_number);
}

View File

@@ -9,6 +9,7 @@ use Illuminate\Http\Request;
use Illuminate\Routing\Controller;
use Illuminate\Support\Facades\Validator;
use Modules\HospitalPortal\Helpers\ApiResponse;
use Illuminate\Support\Facades\DB;
class MemberController extends Controller
{
@@ -35,20 +36,43 @@ class MemberController extends Controller
}
else
{
$res_data = Member::query()
->where('member_id', $request->no_polis)
->where('birth_date', $request->birth_date)
->with(['person', 'currentCorporate',
// 'currentCorporate.corporateServices' => function ($corporateService) {
// $corporateService->where('status', 'active');
// },
// 'currentCorporate.corporateServices.service'
// 'currentPlan.benefits',
// 'currentPlan.corporateBenefit.plan',
'currentPolicy',
'currentPlan.corporateBenefits.benefit'
])
->firstOrFail();
$members = DB::table('members')
->leftJoin('member_policies', 'member_policies.member_id','=', 'members.member_id')
->leftJoin('persons', 'persons.id', '=', 'members.person_id')
->where('members.member_id', '=', $request->no_polis)
->where('members.birth_date', '=', $request->birth_date)
->select(
'members.id',
'members.member_id',
'member_policies.policy_id',
'persons.nik',
'members.email',
'members.birth_date',
'members.gender',
'members.marital_status',
'members.language',
'members.race',
'members.relation_with_principal')
->first();
$res_data['members'] = $members;
$benefits = DB::table('member_plans')
->leftJoin('corporate_benefits','corporate_benefits.plan_id', '=', 'member_plans.plan_id')
->leftJoin('benefits', 'benefits.id', '=', 'corporate_benefits.benefit_id')
->where('member_plans.member_id', '=', $members->id)
->select('benefits.description','benefits.code','corporate_benefits.corporate_id')
->get();
$res_data['benefits'] = $benefits;
$services = DB::table('member_plans')
->leftJoin('plans', 'plans.id', '=', 'member_plans.plan_id')
->leftJoin('services', 'services.code', '=', 'plans.service_code')
->where('member_plans.member_id', $members->id)
->select('plans.service_code', 'services.name')
->get();
$res_data['services'] = $services;
return ApiResponse::apiResponse("Success", $res_data, trans('message.success'), 200);
}
}

View File

@@ -723,7 +723,7 @@ class ClaimController extends Controller
$data_claim_requests = DB::table('claim_requests')
->leftJoin('claims', 'claim_requests.id', '=', 'claims.claim_request_id')
->where('claims.id', $claim_id)
->select('claim_requests.id')
->select('claim_requests.id', 'claim_requests.member_id')
->first();
$claim_id = $data_claim_requests->id;
@@ -738,9 +738,9 @@ class ClaimController extends Controller
->first();
//Service Type
$service_type = DB::table('corporate_services')
->leftJoin('services','corporate_services.service_code', 'services.code')
->where('corporate_services.corporate_id', $corporate_id->id)
$service_type = DB::table('claim_requests')
->leftJoin('services','claim_requests.service_code', 'services.code')
->where('claim_requests.id', $claim_id)
->select('services.name', 'services.code', 'services.id')
->get();
$results['service_type'] = $service_type;
@@ -751,14 +751,13 @@ class ClaimController extends Controller
->select('claims.plan_id')
->first();
//Benefit Name
$benefit_name = DB::table('corporate_benefits')
->leftJoin('benefits', 'corporate_benefits.benefit_id', 'benefits.id')
->where('corporate_benefits.corporate_id', $corporate_id->id)
->where('corporate_benefits.plan_id', $plan_id->plan_id)
->select('benefits.code', 'benefits.description', 'benefits.id')
->get();
$benefit_name = DB::table('member_plans')
->leftJoin('corporate_benefits','corporate_benefits.plan_id', '=', 'member_plans.plan_id')
->leftJoin('benefits', 'benefits.id', '=', 'corporate_benefits.benefit_id')
->where('member_plans.member_id', '=', $data_claim_requests->member_id)
->select('benefits.code', 'benefits.description', 'benefits.id')
->get();
$results['benefit_name'] = $benefit_name;
//Hospital

View File

@@ -1327,7 +1327,7 @@ export default function Detail() {
</InputLabel>
<Select
id="service_type"
value={valServiceType}
value={valServiceType ? serviceTypeData?.[0].id : ''}
fullWidth
label="Service Type"
error={!!valServiceTypeError}
@@ -1335,6 +1335,7 @@ export default function Detail() {
setValServiceType(e.target.value);
setValServiceTypeError(e.target.value === '' ? 'This field is required' : '');
}}
disabled
>
{serviceTypeData?.map((item, index) => (

View File

@@ -69,7 +69,7 @@ export default function CardSearchMember(handleSubmitSuccess) {
.then((response) => {
setOpenDialogBenefit(true)
setCurrentMember(response.data.data)
setNameMember(response.data.data.name);
setNameMember(response.data.data.members.name);
})
.catch(({response}) => {
enqueueSnackbar(response.data.errors ? response.data.errors[0] : (response.data ? response.data.meta.message : 'Opps, Something went Wrong!'), {variant : "error"})

View File

@@ -43,8 +43,6 @@ export default function DialogMember(member, handleSubmitSuccess) {
function TabPanel(props) {
const { children, value, index, ...other } = props;
console.log('current', value)
return (
<div
role="tabpanel"
@@ -79,58 +77,58 @@ export default function DialogMember(member, handleSubmitSuccess) {
<Stack direction="column" spacing={2}>
<Stack direction="row" justifyContent="space-between">
<Typography sx={{width:'50%'}} variant="body2">Member ID</Typography>
<Typography sx={{width:'50%', fontWeight: 'bold'}} variant="body2">{ member?.member_id ?? '-'}</Typography>
<Typography sx={{width:'50%', fontWeight: 'bold'}} variant="body2">{ member?.members.member_id ?? '-'}</Typography>
</Stack>
<Stack direction="row" justifyContent="space-between">
<Typography sx={{width:'50%'}} variant="body2">Policy Number</Typography>
<Typography sx={{width:'50%', fontWeight: 'bold'}} variant="body2">{ member?.current_policy?.code ?? '-'}</Typography>
<Typography sx={{width:'50%', fontWeight: 'bold'}} variant="body2">{ member?.members.policy_id ?? '-'}</Typography>
</Stack>
<Stack direction="row" justifyContent="space-between">
<Typography sx={{width:'50%'}} variant="body2">NRIC</Typography>
<Typography sx={{width:'50%', fontWeight: 'bold'}} variant="body2">{member?.person?.nik ?? '-'}</Typography>
<Typography sx={{width:'50%', fontWeight: 'bold'}} variant="body2">{member?.members.nik ?? '-'}</Typography>
</Stack>
<Stack direction="row" justifyContent="space-between">
<Typography sx={{width:'50%'}} variant="body2">NIK</Typography>
<Typography sx={{width:'50%', fontWeight: 'bold'}} variant="body2">{member?.person?.nik ?? '-'}</Typography>
<Typography sx={{width:'50%', fontWeight: 'bold'}} variant="body2">{member?.members.nik ?? '-'}</Typography>
</Stack>
<Stack direction="row" justifyContent="space-between">
<Typography sx={{width:'50%'}} variant="body2">Email</Typography>
<Typography sx={{width:'50%', fontWeight: 'bold'}} variant="body2">{member?.email ?? '-'}</Typography>
<Typography sx={{width:'50%', fontWeight: 'bold'}} variant="body2">{member?.members.email ?? '-'}</Typography>
</Stack>
<Stack direction="row" justifyContent="space-between">
<Typography sx={{width:'50%'}} variant="body2">Date of Birth</Typography>
<Typography sx={{width:'50%', fontWeight: 'bold'}} variant="body2">{member?.birth_date ? format(new Date(member.birth_date), "d MMM yyyy") : '-'}</Typography>
<Typography sx={{width:'50%', fontWeight: 'bold'}} variant="body2">{member?.members.birth_date ? format(new Date(member.members.birth_date), "d MMM yyyy") : '-'}</Typography>
</Stack>
<Stack direction="row" justifyContent="space-between">
<Typography sx={{width:'50%'}} variant="body2">Gender</Typography>
<Typography sx={{width:'50%', fontWeight: 'bold'}} variant="body2">{member?.gender ?? '-'}</Typography>
<Typography sx={{width:'50%', fontWeight: 'bold'}} variant="body2">{member?.members.gender ?? '-'}</Typography>
</Stack>
<Stack direction="row" justifyContent="space-between">
<Typography sx={{width:'50%'}} variant="body2">Marital Status</Typography>
<Typography sx={{width:'50%', fontWeight: 'bold'}} variant="body2">{member?.marital_status ?? '-'}</Typography>
<Typography sx={{width:'50%', fontWeight: 'bold'}} variant="body2">{member?.members.marital_status ?? '-'}</Typography>
</Stack>
<Stack direction="row" justifyContent="space-between">
<Typography sx={{width:'50%'}} variant="body2">Language</Typography>
<Typography sx={{width:'50%', fontWeight: 'bold'}} variant="body2">{member?.language ?? '-'}</Typography>
<Typography sx={{width:'50%', fontWeight: 'bold'}} variant="body2">{member?.members.language ?? '-'}</Typography>
</Stack>
<Stack direction="row" justifyContent="space-between">
<Typography sx={{width:'50%'}} variant="body2">Race</Typography>
<Typography sx={{width:'50%', fontWeight: 'bold'}} variant="body2">{member?.race ?? '-'}</Typography>
<Typography sx={{width:'50%', fontWeight: 'bold'}} variant="body2">{member?.members.race ?? '-'}</Typography>
</Stack>
<Stack direction="row" justifyContent="space-between">
<Typography sx={{width:'50%'}} variant="body2">Relationship</Typography>
<Typography sx={{width:'50%', fontWeight: 'bold'}} variant="body2">{member?.relation_with_principal ?? '-'}</Typography>
<Typography sx={{width:'50%', fontWeight: 'bold'}} variant="body2">{member?.members.relation_with_principal != '' ? member?.members.relation_with_principal : '-'}</Typography>
</Stack>
</Stack>
</TabPanel>
<TabPanel value={currentTab} index={'benefit'}>
<Grid container spacing={2}>
{ member && member?.current_plan?.corporate_benefits?.map((corporateBenefit, index) => {return (
{ member && member?.benefits?.map((corporateBenefit, index) => {return (
<Grid item sm={6} key={index}>
<Card sx={{p: 2}}>
<Typography variant="body2" sx={{fontWeight: 'bold'}}>{corporateBenefit.benefit.description}</Typography>
<Typography variant="body2" sx={{color: '#919EAB'}}>{corporateBenefit.benefit.code}</Typography>
<Typography variant="body2" sx={{fontWeight: 'bold'}}>{corporateBenefit.description}</Typography>
<Typography variant="body2" sx={{color: '#919EAB'}}>{corporateBenefit.code}</Typography>
</Card>
</Grid>

View File

@@ -26,7 +26,7 @@ export default function FormRequestClaim({ member, handleSubmitSuccess }) {
},
}));
const [serviceCode, setServiceCode] = useState('IP');
const [serviceCode, setServiceCode] = useState('');
// ----------------------------------------------------------------------
// Files Diagnosa
@@ -96,9 +96,14 @@ export default function FormRequestClaim({ member, handleSubmitSuccess }) {
const [submitLoading, setSubmitLoading] = useState(false);
function submitRequest() {
if(serviceCode == '')
{
enqueueSnackbar('Please select services', { variant: 'error' });
return false;
}
setSubmitLoading(true);
const formData = makeFormData({
member_id: member.id,
member_id: member.members.id,
result_files: fileHasilPenunjangs,
diagnosa_files: fileDiagnosas,
kondisi_files: fileKondisis,
@@ -107,11 +112,11 @@ export default function FormRequestClaim({ member, handleSubmitSuccess }) {
axios
.post('/claim-requests', formData)
.then((response) => {
enqueueSnackbar(response.data.message ?? 'Berhasil membuat data', { variant: 'success' });
enqueueSnackbar(response.data.data.message ?? 'Berhasil membuat data', { variant: 'success' });
handleSubmitSuccess();
})
.catch(({ response }) => {
enqueueSnackbar(response.data.message ?? 'Something Went Wrong', { variant: 'error' });
enqueueSnackbar(response.data.data.message ?? 'Something Went Wrong', { variant: 'error' });
})
.then(() => {
setSubmitLoading(false);
@@ -127,26 +132,39 @@ export default function FormRequestClaim({ member, handleSubmitSuccess }) {
<Typography variant='body2' sx={{fontWeight:'bold'}}>{format(new Date(), "d MMM yyyy")}</Typography>
</Stack>
<Card sx={{ p: 1, background: '#f4f6f8', marginBottom: 2 }}>
<Stack direction="column" spacing={2} sx={{marginBottom: 2}}>
<Typography variant="body1" sx={{fontWeight:'bold'}}>
Services
</Typography>
<Card sx={{ p: 1, background: '#f4f6f8', marginBottom: 2 }}>
<Stack direction="row" spacing={2}>
{member && member?.services?.map((dataServices, index) => (
<Button
key={index}
sx={{padding: 2, width: '100%'}}
color="primary"
variant={serviceCode === dataServices.service_code ? 'outlined' : ''}
onClick={() => { setServiceCode(dataServices.service_code) }}
>
{dataServices.name}
</Button>
))}
</Stack>
</Card>
<Stack direction="row" spacing={2}>
<Button sx={{padding: 2, width: '100%'}} color="primary" variant={serviceCode == 'IP' ? 'outlined' : ''} onClick={() => {setServiceCode('IP')}}>Inpatient</Button>
<Button sx={{padding: 2, width: '100%'}} color="primary" variant={serviceCode == 'OP' ? 'outlined' : ''} onClick={() => {setServiceCode('OP')}}>Outpatient</Button>
</Stack>
</Card>
<Card sx={{ p: 1, background: '#f4f6f8', marginBottom: 2 }}>
<Card sx={{ p: 1, background: '#f4f6f8'}}>
<Stack direction="row">
<Avatar
src="https://minimal-assets-api.vercel.app/assets/images/avatars/avatar_5.jpg"
alt={member?.full_name ?? ''}
alt={member?.members.name ?? ''}
sx={{ marginTop: 1, width: 48, height: 48 }}
/>
<Stack sx={{ p: 1 }}>
<Typography variant="body2">{member?.full_name ?? ''}</Typography>
<Typography variant="body2" sx={{color:'#637381'}}>{member?.member_id ?? ''}</Typography>
<Typography variant="body2">{member?.members.name ?? ''}</Typography>
<Typography variant="body2" sx={{color:'#637381'}}>{member?.members.member_id ?? ''}</Typography>
</Stack>
</Stack>
</Card>
@@ -173,7 +191,7 @@ export default function FormRequestClaim({ member, handleSubmitSuccess }) {
<Stack
divider={<Divider orientation="horizontal" flexItem />}
spacing={4}
sx={{ marginY: 2 }}
sx={{ marginY: 2, marginBottom: 6 }}
>
{/* -------------------------------Upload Dokumen Kondisi------------------------------- */}
<Stack sx={{ marginTop: 2 }}>
@@ -226,7 +244,7 @@ export default function FormRequestClaim({ member, handleSubmitSuccess }) {
style={{ display: 'none' }}
multiple
onChange={handleKondisiInputChange}
accept=".csv, application/vnd.openxmlformats-officedocument.spreadsheetml.sheet, application/vnd.ms-excel, text/plain, application/pdf"
accept="application/pdf"
/>
</ButtonBase>
</Stack>
@@ -287,7 +305,7 @@ export default function FormRequestClaim({ member, handleSubmitSuccess }) {
style={{ display: 'none' }}
multiple
onChange={handleDiagnosaInputChange}
accept=".csv, application/vnd.openxmlformats-officedocument.spreadsheetml.sheet, application/vnd.ms-excel, text/plain, application/pdf"
accept="application/pdf"
/>
</ButtonBase>
</Stack>
@@ -348,7 +366,7 @@ export default function FormRequestClaim({ member, handleSubmitSuccess }) {
style={{ display: 'none' }}
multiple
onChange={handleResultInputChange}
accept=".csv, application/vnd.openxmlformats-officedocument.spreadsheetml.sheet, application/vnd.ms-excel, text/plain, application/pdf"
accept="application/pdf"
/>
</ButtonBase>
</Stack>
@@ -362,7 +380,7 @@ export default function FormRequestClaim({ member, handleSubmitSuccess }) {
}}
loading={submitLoading}
>
LOG Request
Request LOG
</LoadingButton>
</Stack>
);