update banyak

This commit is contained in:
kevin
2023-06-09 13:52:54 +07:00
parent 684e63cd6f
commit 3a8a7438ba
13 changed files with 204 additions and 23 deletions

View File

@@ -33,6 +33,9 @@ class CorporateMemberController extends Controller
case 'alarm-center': case 'alarm-center':
$members = $this->corporateMemberService->getAllMemberAlarmCenter($corporate_id, $request); $members = $this->corporateMemberService->getAllMemberAlarmCenter($corporate_id, $request);
return response()->json(Helper::paginateResources(DashboardMemberAlarmResources::collection($members))); return response()->json(Helper::paginateResources(DashboardMemberAlarmResources::collection($members)));
case 'service-monitoring':
$members = $this->corporateMemberService->getAllEncounter($corporate_id, $request);
return response()->json(Helper::paginateResources(DashboardMemberAlarmResources::collection($members)));
default: default:
$members = $this->corporateMemberService->getAllMemberDashboards($corporate_id, $request); $members = $this->corporateMemberService->getAllMemberDashboards($corporate_id, $request);
return response()->json(Helper::paginateResources(DashboardMemberResources::collection($members))); return response()->json(Helper::paginateResources(DashboardMemberResources::collection($members)));

View File

@@ -62,6 +62,23 @@ class TopUpController extends Controller
return view('client::show'); return view('client::show');
} }
public function get($corporate_id)
{
$data = CorporatePolicy::query()
->where('corporate_id', $corporate_id)
->with(['currentPolicy', 'employees'])
->withCount(['employees', 'claims' => function ($query) {
$query->where('claims.status', 'paid');
}])
->first();
if (!$data) {
return response()->json(['message' => 'Corporate policy not found'], 404);
}
return Helper::responseJson(TopUpLimitResources::make($data));
}
/** /**
* Update the specified resource in storage. * Update the specified resource in storage.
* @param Request $request * @param Request $request

View File

@@ -8,6 +8,9 @@ use Modules\Client\Http\Controllers\Api\CorporatePolicyController;
use Modules\Client\Http\Controllers\Api\UserController; use Modules\Client\Http\Controllers\Api\UserController;
use Modules\Client\Http\Controllers\Api\ClaimController; use Modules\Client\Http\Controllers\Api\ClaimController;
use Modules\Client\Http\Controllers\Api\TopUpController; use Modules\Client\Http\Controllers\Api\TopUpController;
use Modules\Internal\Http\Controllers\ClaimEncounterController;
use App\Models\Encounter;
use Modules\Internal\Transformers\EncounterResource;
/* /*
|-------------------------------------------------------------------------- |--------------------------------------------------------------------------
@@ -38,11 +41,16 @@ Route::prefix('client')->group(function () {
Route::get('members', [CorporateMemberController::class, 'index']); Route::get('members', [CorporateMemberController::class, 'index']);
Route::get('claims/status', [ClaimController::class, 'status']); Route::get('claims/status', [ClaimController::class, 'status']);
Route::get('claims', [ClaimController::class, 'index']); Route::get('claims', [ClaimController::class, 'index']);
Route::get('claims/{claim_id}/encounters', [ClaimEncounterController::class, 'getEncounterData']);
Route::get('topup', [TopUpController::class, 'index']); Route::get('topup', [TopUpController::class, 'index']);
// Route::get('topup', [TopUpController::class, 'get']);
Route::post('topup', [TopUpController::class, 'store']); Route::post('topup', [TopUpController::class, 'store']);
}); });
Route::get('claims/{id}', [ClaimController::class, 'show']); Route::get('claims/{id}', [ClaimController::class, 'show']);
}); });
}); });

View File

@@ -12,6 +12,7 @@ use Illuminate\Routing\Controller;
use Illuminate\Support\Facades\DB; use Illuminate\Support\Facades\DB;
use Modules\Internal\Transformers\EncounterResource; use Modules\Internal\Transformers\EncounterResource;
class ClaimEncounterController extends Controller class ClaimEncounterController extends Controller
{ {
/** /**
@@ -31,6 +32,13 @@ class ClaimEncounterController extends Controller
{ {
return view('internal::create'); return view('internal::create');
} }
public function getAllData()
{
$encounters = Encounter::with('claim.member')->get();
return Helper::responseJson(data: EncounterResource::collection($encounters), message: 'Data berhasil diambil');
}
/** /**
* Store a newly created resource in storage. * Store a newly created resource in storage.
@@ -255,6 +263,22 @@ class ClaimEncounterController extends Controller
} }
} }
public function x`counters($claim_id)
{
$claim = Claim::findOrFail($claim_id);
$encounters = $claim->encounters()->get();
return response()->json($encounters);
}
public function getEncounterData($encounter_id)
{
$encounter = Encounter::with('claim.member')->findOrFail($encounter_id);
return Helper::responseJson(data: EncounterResource::make($encounter), message: 'Data berhasil diambil');
}
/** /**
* Remove the specified resource from storage. * Remove the specified resource from storage.
* @param int $id * @param int $id

View File

@@ -54,6 +54,12 @@ class Encounter extends Model
return $this->hasMany(EncounterParticipant::class, 'encounter_id'); return $this->hasMany(EncounterParticipant::class, 'encounter_id');
} }
public function claim()
{
return $this->belongsTo(Claim::class);
}
public function doctors() public function doctors()
{ {
@@ -96,6 +102,7 @@ class Encounter extends Model
return $this->belongsTo(Service::class, 'class', 'code'); return $this->belongsTo(Service::class, 'class', 'code');
} }
public function getMetaAttribute() public function getMetaAttribute()
{ {
$orgMeta = []; $orgMeta = [];

View File

@@ -3,6 +3,7 @@
namespace App\Services; namespace App\Services;
use App\Models\Member; use App\Models\Member;
use App\Models\Encounter;
use Illuminate\Database\Eloquent\Builder; use Illuminate\Database\Eloquent\Builder;
use Illuminate\Http\Request; use Illuminate\Http\Request;
@@ -120,4 +121,9 @@ class CorporateMemberService
->selectRaw("(select sum(`claims`.`total_claim`) from `claims` where `members`.`id` = `claims`.`member_id` AND `claims`.`deleted_at` IS NULL) AS `claims_sum_total_claim`") ->selectRaw("(select sum(`claims`.`total_claim`) from `claims` where `members`.`id` = `claims`.`member_id` AND `claims`.`deleted_at` IS NULL) AS `claims_sum_total_claim`")
->paginate($limit); ->paginate($limit);
} }
public function getAllEncounter(int $corporateId){
return Encounter::query()->select(['id'])->paginate(10);
}
} }

View File

@@ -107,9 +107,9 @@ export default function Drugs() {
<Card> <Card>
<Box sx={{ borderBottom: 1, borderColor: 'divider' }}> <Box sx={{ borderBottom: 1, borderColor: 'divider' }}>
<StyledTabs value={value} onChange={handleChange} aria-label="basic tabs example"> <StyledTabs value={value} onChange={handleChange} aria-label="basic tabs example">
<StyledTab label="All Data (999)" {...a11yProps(0)} /> <StyledTab label="All Data" {...a11yProps(0)} />
<StyledTab label="Ongoing (888)" {...a11yProps(1)} /> <StyledTab label="Ongoing" {...a11yProps(1)} />
<StyledTab label="Done (777)" {...a11yProps(2)} /> <StyledTab label="Done" {...a11yProps(2)} />
</StyledTabs> </StyledTabs>
</Box> </Box>
<TabPanel value={value} index={0}> <TabPanel value={value} index={0}>

View File

@@ -289,7 +289,7 @@ export default function List() {
, ,
status: status:
obj.status === 1 ? ( obj.status === 1 ? (
<Button onClick={() => navigate('service-monitoring/:id')} <Button onClick={() => navigate('service-monitoring/'+obj.personId )}
startIcon={<Iconify icon="ic:round-check" />} startIcon={<Iconify icon="ic:round-check" />}
sx={{ sx={{
backgroundColor: palette.light.grey[300], backgroundColor: palette.light.grey[300],
@@ -328,6 +328,8 @@ export default function List() {
setPaginationTable(response.data); setPaginationTable(response.data);
setRowsPerPage(response.data.per_page); setRowsPerPage(response.data.per_page);
if (searchParams.get('page')) { if (searchParams.get('page')) {
//@ts-ignore //@ts-ignore
const currentPage = parseInt(searchParams.get('page')) - 1; const currentPage = parseInt(searchParams.get('page')) - 1;

View File

@@ -17,8 +17,13 @@ import Page from '../../components/Page';
import Iconify from '../../components/Iconify'; import Iconify from '../../components/Iconify';
// utils // utils
import useSettings from '../../hooks/useSettings'; import useSettings from '../../hooks/useSettings';
import { useState, SyntheticEvent } from 'react'; import { useState, SyntheticEvent, useContext, useEffect } from 'react';
import { useNavigate } from 'react-router-dom'; import { UserCurrentCorporateContext } from '../../contexts/UserCurrentCorporate';
import { useNavigate, useParams } from 'react-router-dom';
import axios from '../../utils/axios';
// sections // sections
// import ListTable from '../../sections/claimreports/ListTable'; // import ListTable from '../../sections/claimreports/ListTable';
// import ClaimStatusCard from '../../sections/claimreports/ClaimStatusCard'; // import ClaimStatusCard from '../../sections/claimreports/ClaimStatusCard';
@@ -115,6 +120,47 @@ export default function ServiceMonitoring() {
}; };
const [data, setData] = useState({});
const [data1, setData1] = useState();
const {corporateValue} = useContext(UserCurrentCorporateContext);
const {id} = useParams();
const claimId = '2'
console.log('id',id);
useEffect (() => {
console.log('fetching data...')
axios.get('/data/'+id )
.then(response => {
console.log('data fetched...', response.data)
setData(response.data);
})
.catch(error => {
console.error('error fetching data...', error);
});
}, []);
console.log('Data:' , data);
const [encounterData, setEncounterData] = useState({});
useEffect(() => {
console.log('fetching encounter data...');
axios.get('/claims/${claim_id}/encounters')
.then(response => {
console.log('encounter data fetched...', response.data);
setEncounterData(response.data);
})
.catch(error => {
console.error('error fetching encounter data...', error);
});
}, []);
return ( return (
<Page title="Service Monitoring 123456"> <Page title="Service Monitoring 123456">
@@ -160,23 +206,23 @@ export default function ServiceMonitoring() {
<Stack spacing={2}> <Stack spacing={2}>
<Stack> <Stack>
<Typography variant="caption">Nama perusahaan</Typography> <Typography variant="caption">Nama perusahaan</Typography>
<Typography variant="body2">PT. Amman Mineral</Typography> <Typography variant="body2">{corporateValue}</Typography>
</Stack> </Stack>
<Stack> <Stack>
<Typography variant="caption">Nama Lengkap</Typography> <Typography variant="caption">Nama Lengkap</Typography>
<Typography variant="body2">Stephen kuow</Typography> <Typography variant="body2">{data.name || 'Loading...'}</Typography>
</Stack> </Stack>
<Stack> <Stack>
<Typography variant="caption">Tanggal lahir</Typography> <Typography variant="caption">Tanggal lahir</Typography>
<Typography variant="body2">09 Aug 1980</Typography> <Typography variant="body2">{data.birth_date}</Typography>
</Stack> </Stack>
<Stack> <Stack>
<Typography variant="caption">Email</Typography> <Typography variant="caption">Email</Typography>
<Typography variant="body2">Stephen.uow@gmal.com</Typography> <Typography variant="body2">{data.email}</Typography>
</Stack> </Stack>
<Stack> <Stack>
<Typography variant="caption">No telepon</Typography> <Typography variant="caption">No telepon</Typography>
<Typography variant="body2">+62 821-8123-2323</Typography> <Typography variant="body2">{data.phone}</Typography>
</Stack> </Stack>
</Stack> </Stack>
<Stack> <Stack>

View File

@@ -43,7 +43,7 @@ export default function UserProfile() {
}); });
}, []); }, []);
console.log(id) console.log('data', data)
return ( return (
<Page title="Profile Peserta Jessica Lie"> <Page title="Profile Peserta Jessica Lie">

View File

@@ -277,6 +277,8 @@ export default function Index() {
const corporateMembers = await axios.get(`${corporateValue}/members`, { const corporateMembers = await axios.get(`${corporateValue}/members`, {
params: { ...parameters }, params: { ...parameters },
}); });
console.log('member',corporateMembers );
const corporateTopUpLimit = await axios.get(`${corporateValue}/topup`); const corporateTopUpLimit = await axios.get(`${corporateValue}/topup`);
setSearchParams(parameters); setSearchParams(parameters);
@@ -331,11 +333,11 @@ export default function Index() {
Inactive Inactive
</Button> </Button>
), ),
action: ( /* action: (
<IconButton onClick={handleAction}> <IconButton onClick={handleAction}>
<MoreVertIcon /> <MoreVertIcon />
</IconButton> </IconButton>
), ), */
}; };
}) })
); );

View File

@@ -256,13 +256,13 @@ export default function CardPersonalInformation({data}) {
fullWidth fullWidth
sx={{ marginTop: '16px' }} sx={{ marginTop: '16px' }}
/> />
<TextField {/* <TextField
label="Address" label="Address"
value={address} value={address}
onChange={(e) => setAddress(e.target.value)} onChange={(e) => setAddress(e.target.value)}
fullWidth fullWidth
sx={{ marginTop: '16px' }} sx={{ marginTop: '16px' }}
/> /> */}
{/* Add more fields as needed */} {/* Add more fields as needed */}

View File

@@ -2,7 +2,10 @@
import { styled } from '@mui/material/styles'; import { styled } from '@mui/material/styles';
import { Card, Typography, Stack, LinearProgress, linearProgressClasses } from '@mui/material'; import { Card, Typography, Stack, LinearProgress, linearProgressClasses } from '@mui/material';
import CardBenefitSummary from './CardBenefitSummary'; import CardBenefitSummary from './CardBenefitSummary';
import axios from '../../../utils/axios';
import { useContext, useState, useEffect } from 'react';
import { UserCurrentCorporateContext } from '../../../contexts/UserCurrentCorporate';
// ---------------------------------------------------------------------- // ----------------------------------------------------------------------
const BorderLinearProgress = styled(LinearProgress)(({ theme }) => ({ const BorderLinearProgress = styled(LinearProgress)(({ theme }) => ({
@@ -17,10 +20,73 @@ const BorderLinearProgress = styled(LinearProgress)(({ theme }) => ({
}, },
})); }));
type CardPolicyProps = {
limit: {
myLimit: {
balance: number;
total: number;
percentage: number;
};
lockLimit: {
balance: number;
percentage: number;
};
};
topUpLimit: {
companyName: string;
policyNumber: number;
totalMembers: number;
totalCases: number;
totalPersen: number;
myLimit: {
balance: number;
total: number;
percentage: number;
};
maxTopUp: number;
};
members?: DataMember[];
};
// ---------------------------------------------------------------------- // ----------------------------------------------------------------------
export default function CardPolicyNumber() { export default function CardPolicyNumber() {
return (
const { corporateValue } = useContext(UserCurrentCorporateContext);
const [policyNumber,setPolicyNumber] = useState('');
const [policyData, setPolicyData] = useState<CardPolicyProps>();
/* axios.get(`${corporateValue}/topup`)
.then(response => {
console.log(response.data);
})
.catch(error => {
console.error(error);
}); */
useEffect(() => {
axios
.get(`${corporateValue}/topup`)
.then(response => {
const { data } = response.data; // Access the 'data' object from the response
const { policyNumber } = data; // Access the 'policyNumber' field from the 'data' object
setPolicyNumber(policyNumber);
})
.catch(error => {
console.error(error);
});
// const corporatePolicyLimit = axios.get(`${corporateValue}/policy`);
// const corporateTopUpLimit = axios.get(`${corporateValue}/topup`);
// setPolicyData({
// limit: corporatePolicyLimit.data.data,
// topUpLimit: corporateTopUpLimit.data.data,
// });
}, [corporateValue]);
return (
<Card sx={{ padding: 2 }}> <Card sx={{ padding: 2 }}>
<Stack> <Stack>
<Stack direction="row" alignItems="center" spacing={1} justifyContent="space-between"> <Stack direction="row" alignItems="center" spacing={1} justifyContent="space-between">
@@ -28,7 +94,7 @@ export default function CardPolicyNumber() {
<img width={52} height={52} src="/logo/logo-linksehat.png" alt="LinkSehat" /> <img width={52} height={52} src="/logo/logo-linksehat.png" alt="LinkSehat" />
<Stack spacing={1}> <Stack spacing={1}>
<Typography variant="subtitle2">Policy Number</Typography> <Typography variant="subtitle2">Policy Number</Typography>
<Typography variant="subtitle2">12345678910</Typography> <Typography variant="subtitle2">{policyNumber}</Typography>
</Stack> </Stack>
</Stack> </Stack>
<Stack spacing={1} sx={{ width: '206.5px' }}> <Stack spacing={1} sx={{ width: '206.5px' }}>