Update service hospital dan prime center
This commit is contained in:
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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) => (
|
||||
|
||||
@@ -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"})
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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>
|
||||
);
|
||||
|
||||
Reference in New Issue
Block a user