diff --git a/.env.example b/.env.example
deleted file mode 100755
index 174599a2..00000000
--- a/.env.example
+++ /dev/null
@@ -1,59 +0,0 @@
-APP_NAME=Laravel
-APP_ENV=local
-APP_KEY=
-APP_DEBUG=true
-APP_URL=http://localhost
-
-LOG_CHANNEL=stack
-LOG_DEPRECATIONS_CHANNEL=null
-LOG_LEVEL=debug
-
-DB_CONNECTION=mysql
-DB_HOST=127.0.0.1
-DB_PORT=3306
-DB_DATABASE=laravel
-DB_USERNAME=root
-DB_PASSWORD=
-
-OLDLMS_DB_CONNECTION=mysql
-OLDLMS_DB_HOST=127.0.0.1
-OLDLMS_DB_PORT=3306
-OLDLMS_DB_DATABASE=linksehat
-OLDLMS_DB_USERNAME=mysql
-OLDLMS_DB_PASSWORD=password
-
-BROADCAST_DRIVER=log
-CACHE_DRIVER=file
-FILESYSTEM_DISK=local
-QUEUE_CONNECTION=sync
-SESSION_DRIVER=file
-SESSION_LIFETIME=120
-
-MEMCACHED_HOST=127.0.0.1
-
-REDIS_HOST=127.0.0.1
-REDIS_PASSWORD=null
-REDIS_PORT=6379
-
-MAIL_MAILER=smtp
-MAIL_HOST=mailhog
-MAIL_PORT=1025
-MAIL_USERNAME=null
-MAIL_PASSWORD=null
-MAIL_ENCRYPTION=null
-MAIL_FROM_ADDRESS="hello@example.com"
-MAIL_FROM_NAME="${APP_NAME}"
-
-AWS_ACCESS_KEY_ID=
-AWS_SECRET_ACCESS_KEY=
-AWS_DEFAULT_REGION=us-east-1
-AWS_BUCKET=
-AWS_USE_PATH_STYLE_ENDPOINT=false
-
-PUSHER_APP_ID=
-PUSHER_APP_KEY=
-PUSHER_APP_SECRET=
-PUSHER_APP_CLUSTER=mt1
-
-MIX_PUSHER_APP_KEY="${PUSHER_APP_KEY}"
-MIX_PUSHER_APP_CLUSTER="${PUSHER_APP_CLUSTER}"
diff --git a/Modules/Client/Http/Controllers/Api/DataController.php b/Modules/Client/Http/Controllers/Api/DataController.php
new file mode 100644
index 00000000..6999959f
--- /dev/null
+++ b/Modules/Client/Http/Controllers/Api/DataController.php
@@ -0,0 +1,32 @@
+json($data);
+ } catch (\Exception $e) {
+ return response()->json(['error' => 'Member not found'], 404);
+ }
+ }
+
+ public function update(Request $request, $id)
+ {
+ try {
+ $data = Person::findOrFail($id);
+ $data->update($request->all());
+
+ return response()->json(['message' => 'Data updated successfully']);
+ } catch (\Exception $e) {
+ return response()->json(['error' => 'Failed to update data'], 500);
+ }
+ }
+}
diff --git a/Modules/Client/Http/Controllers/Api/TopUpController.php b/Modules/Client/Http/Controllers/Api/TopUpController.php
index 9eaf45c9..b39832ef 100755
--- a/Modules/Client/Http/Controllers/Api/TopUpController.php
+++ b/Modules/Client/Http/Controllers/Api/TopUpController.php
@@ -3,6 +3,7 @@
namespace Modules\Client\Http\Controllers\Api;
use App\Helpers\Helper;
+use App\Models\CorporatePolicy;
use Illuminate\Contracts\Support\Renderable;
use Illuminate\Http\Request;
use Illuminate\Routing\Controller;
@@ -33,9 +34,22 @@ class TopUpController extends Controller
* @param Request $request
* @return Renderable
*/
- public function store(Request $request)
+ public function store(Request $request, $corporate_id)
{
- //
+
+ $data = $request->validate([
+ 'topup' => 'required|numeric',
+ ]);
+
+ $corporatePolicy = CorporatePolicy::query()->where('corporate_id',$corporate_id)->firstOrFail();
+ if (!$corporatePolicy) {
+ return response() -> json (['message' => 'Corporate policy not found'],404);
+ }
+
+ $corporatePolicy -> total_premi += $data ['topup'];
+ $corporatePolicy -> save();
+
+ return response () -> json (['message' => 'Amount added to total_premi successfully'], 200);
}
/**
diff --git a/Modules/Client/Transformers/Dashboard/MemberAlarmCenterResources.php b/Modules/Client/Transformers/Dashboard/MemberAlarmCenterResources.php
index 6bb0587b..9186f04b 100755
--- a/Modules/Client/Transformers/Dashboard/MemberAlarmCenterResources.php
+++ b/Modules/Client/Transformers/Dashboard/MemberAlarmCenterResources.php
@@ -15,6 +15,7 @@ class MemberAlarmCenterResources extends JsonResource
{
return [
'id' => $this->id,
+ 'personId' => $this->person_id,
'memberId' => $this->member_id,
'fullName' => $this->full_name,
'service' => $this->service_code,
diff --git a/app/Models/Person.php b/app/Models/Person.php
index af6fb438..85315bcd 100755
--- a/app/Models/Person.php
+++ b/app/Models/Person.php
@@ -146,4 +146,9 @@ class Person extends Model
return "other";
}
}
+
+ public function updatePerson()
+ {
+ $this -> update ( $data );
+ }
}
diff --git a/app/Services/CorporateMemberService.php b/app/Services/CorporateMemberService.php
index afcec6f6..bf715f11 100755
--- a/app/Services/CorporateMemberService.php
+++ b/app/Services/CorporateMemberService.php
@@ -11,7 +11,6 @@ class CorporateMemberService
public function getAllMemberDashboards(int $corporateId, Request $request)
{
$limit = $request->has('perPage') ? $request->input('perPage') : 10;
-
return Member::query()
->joinCorporateEmployees('left')
->joinCorporateDivisions('left')
@@ -34,8 +33,9 @@ class CorporateMemberService
'division' => 'corporate_divisions.name',
default => ''
};
-
- $query->getQuery()->orderBy($orderBy, $request->order);
+ if ($request->order){
+ $query->getQuery()->orderBy($orderBy, $request->order);
+ }
})
->select(['members.id', 'members.person_id', 'members.member_id', 'members.name', 'corporate_divisions.name AS division_name', 'members.active'])
->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`")
diff --git a/frontend/client-portal/.env.development b/frontend/client-portal/.env.development
index 2badd03d..ced427a5 100755
--- a/frontend/client-portal/.env.development
+++ b/frontend/client-portal/.env.development
@@ -2,6 +2,6 @@ GENERATE_SOURCEMAP=false
PORT=8083
-REACT_APP_HOST_API_URL="http://localhost:8001"
+REACT_APP_HOST_API_URL="http://localhost:8000"
-VITE_API_URL="http://localhost:8001/api/client"
+VITE_API_URL="http://localhost:8000/api/client"
diff --git a/frontend/client-portal/src/components/ButtonBack.tsx b/frontend/client-portal/src/components/ButtonBack.tsx
new file mode 100644
index 00000000..94dcc16c
--- /dev/null
+++ b/frontend/client-portal/src/components/ButtonBack.tsx
@@ -0,0 +1,28 @@
+import * as React from 'react';
+import { IconButton } from '@mui/material';
+import ArrowBackIosNewIcon from '@mui/icons-material/ArrowBackIosNew';
+import { useNavigate } from 'react-router-dom';
+
+export default function ButtonBack(props: any) {
+ const navigate = useNavigate();
+ return (
+ (props.url ? navigate(props.url) : navigate(-1))}
+ >
+
+
+ );
+}
\ No newline at end of file
diff --git a/frontend/client-portal/src/layouts/dashboard/header/LanguagePopover.tsx b/frontend/client-portal/src/layouts/dashboard/header/LanguagePopover.tsx
index f8bc33e6..6a3bad33 100755
--- a/frontend/client-portal/src/layouts/dashboard/header/LanguagePopover.tsx
+++ b/frontend/client-portal/src/layouts/dashboard/header/LanguagePopover.tsx
@@ -14,7 +14,7 @@ const LANGS = [
value: 'en',
icon: 'https://minimal-assets-api.vercel.app/assets/icons/ic_flag_en.svg',
},
- {
+ /* {
label: 'German',
value: 'de',
icon: 'https://minimal-assets-api.vercel.app/assets/icons/ic_flag_de.svg',
@@ -23,7 +23,7 @@ const LANGS = [
label: 'French',
value: 'fr',
icon: 'https://minimal-assets-api.vercel.app/assets/icons/ic_flag_fr.svg',
- },
+ }, */
];
// ----------------------------------------------------------------------
diff --git a/frontend/client-portal/src/pages/AlarmCenter/Index.tsx b/frontend/client-portal/src/pages/AlarmCenter/Index.tsx
index 8cf7ae83..5ff13a54 100755
--- a/frontend/client-portal/src/pages/AlarmCenter/Index.tsx
+++ b/frontend/client-portal/src/pages/AlarmCenter/Index.tsx
@@ -8,6 +8,8 @@ import Page from '../../components/Page';
/* ---------------------------------- hooks --------------------------------- */
import useSettings from '../../hooks/useSettings';
import List from './List';
+import ServiceMonitoring from './ServiceMonitoring';
+import UserProfile from './UserProfile';
/* ------------------------------ tabs setting ------------------------------ */
@@ -105,21 +107,21 @@ export default function Drugs() {
-
-
-
+
+
+
-
- Item Two
+ {/*
+
- Item Two
-
-
+
+ */}
+
diff --git a/frontend/client-portal/src/pages/AlarmCenter/List.tsx b/frontend/client-portal/src/pages/AlarmCenter/List.tsx
index bcfcf455..298b8146 100755
--- a/frontend/client-portal/src/pages/AlarmCenter/List.tsx
+++ b/frontend/client-portal/src/pages/AlarmCenter/List.tsx
@@ -31,7 +31,8 @@ import useMap from '../../hooks/useMap';
import palette from '../../theme/palette';
import { UserCurrentCorporateContext } from '../../contexts/UserCurrentCorporate';
import { HeadCell, Order, PaginationTableProps } from '../../@types/table';
-import { useSearchParams } from 'react-router-dom';
+import { useSearchParams, useNavigate, Link } from 'react-router-dom';
+
/* ---------------------------------- types --------------------------------- */
@@ -137,6 +138,8 @@ import { useSearchParams } from 'react-router-dom';
/* -------------------------------------------------------------------------- */
export default function List() {
+ const navigate = useNavigate();
+
const { corporateValue } = useContext(UserCurrentCorporateContext);
const [data, setData] = useState([]);
@@ -198,6 +201,7 @@ export default function List() {
paginationTable: paginationTable,
setPaginationTable: setPaginationTable,
};
+
/* -------------------------------------------------------------------------- */
/* ------------------------------ handle search ----------------------------- */
@@ -224,18 +228,19 @@ export default function List() {
/* -------------------------------- headCell -------------------------------- */
const headCells: HeadCell[] = [
- {
- id: 'fullName',
- align: 'left',
- label: 'Name',
- isSort: true,
- },
{
id: 'memberId',
align: 'left',
label: 'Member ID',
isSort: true,
},
+ {
+ id: 'fullName',
+ align: 'left',
+ label: 'Name',
+ isSort: true,
+ },
+
{
id: 'start_date',
align: 'center',
@@ -268,17 +273,23 @@ export default function List() {
? appliedParams
: Object.fromEntries([...searchParams.entries(), ['order', order], ['orderBy', orderBy]]);
- const response = await axios.get(`/${corporateValue}/members?type=alarm-center`, {
- params: parameters,
+ const response = await axios.get(`${corporateValue}/members?type=alarm-center`, {
+ params: { ...parameters },
});
setData(
response.data.data.map((obj: any) => {
return {
...obj,
+ memberId:
+ //
+
+ ,
status:
obj.status === 1 ? (
-
+
+
+ {/* Item 2 */}
+
+
+ 09:00 WIB
+
+ Approval
+
+
+
+
+
+ Details : Penilaian Dokter
+
+
+
+ {/* Item 3 */}
+
+
+ 08:00 WIB
+
+ Review
+
+
+
+
+
+ Details : Klaim Diajukan
+
+
+
+
+
+ >
+ //
+ );
+ };
+
+ export default DialogDetailClaim;
+
\ No newline at end of file
diff --git a/frontend/client-portal/src/pages/ClaimReport/Index.tsx b/frontend/client-portal/src/pages/ClaimReport/Index.tsx
index c4a833d9..7e46fa2b 100755
--- a/frontend/client-portal/src/pages/ClaimReport/Index.tsx
+++ b/frontend/client-portal/src/pages/ClaimReport/Index.tsx
@@ -16,6 +16,10 @@ import { UserCurrentCorporateContext } from '../../contexts/UserCurrentCorporate
/* --------------------------------- orders --------------------------------- */
import { HeadCell, Order, PaginationTableProps } from '../../@types/table';
import { useSearchParams } from 'react-router-dom';
+import List from './List';
+import ClaimItems from '../Claims/components/ClaimItems';
+import DiagnosisHistory from '../Claims/components/DiagnosisHistory';
+import Documents from '../Claims/components/Documents';
export default function Drugs() {
const { themeStretch } = useSettings();
@@ -154,6 +158,8 @@ export default function Drugs() {
+
+
{/* , 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();
+
+ const { corporateValue } = useContext(UserCurrentCorporateContext);
+
+ const [data, setData] = useState([]);
+
+ /* -------------------------------------------------------------------------- */
+ /* setting up for the table */
+ /* -------------------------------------------------------------------------- */
+ const [isLoading, setIsLoading] = useState(true);
+
+ const loadings = {
+ isLoading: isLoading,
+ setIsLoading: setIsLoading,
+ };
+
+ /* ------------------------------ handle params ----------------------------- */
+ const [searchParams, setSearchParams] = useSearchParams();
+ const [appliedParams, setAppliedParams] = useState({});
+
+ const params = {
+ searchParams: searchParams,
+ setSearchParams: setSearchParams,
+ appliedParams: appliedParams,
+ setAppliedParams: setAppliedParams,
+ };
+ /* -------------------------------------------------------------------------- */
+
+ /* ------------------------------ handle order ------------------------------ */
+ const [order, setOrder] = useState('asc');
+ const [orderBy, setOrderBy] = useState('fullName');
+
+ const orders = {
+ order: order,
+ setOrder: setOrder,
+ orderBy: orderBy,
+ setOrderBy: setOrderBy,
+ };
+ /* -------------------------------------------------------------------------- */
+
+ /* ---------------------------- handle pagination --------------------------- */
+ const [page, setPage] = useState(0);
+ const [rowsPerPage, setRowsPerPage] = useState(10);
+
+ const [paginationTable, setPaginationTable] = useState({
+ current_page: 0,
+ from: 0,
+ last_page: 0,
+ links: [],
+ path: '',
+ per_page: 0,
+ to: 0,
+ total: 0,
+ });
+
+ const paginations = {
+ page: page,
+ setPage: setPage,
+ rowsPerPage: rowsPerPage,
+ setRowsPerPage: setRowsPerPage,
+ paginationTable: paginationTable,
+ setPaginationTable: setPaginationTable,
+ };
+
+ /* -------------------------------------------------------------------------- */
+
+ /* ------------------------------ handle search ----------------------------- */
+ const [searchText, setSearchText] = useState('');
+
+ const handleSearchSubmit = async (event: React.FormEvent) => {
+ event.preventDefault();
+
+ if (searchText === '') {
+ searchParams.delete('search');
+ const params = Object.fromEntries([...searchParams.entries()]);
+ setAppliedParams(params);
+ } else {
+ const params = Object.fromEntries([...searchParams.entries(), ['search', searchText]]);
+ setAppliedParams(params);
+ }
+ };
+
+
+ const searchs = {
+ searchText: searchText,
+ setSearchText: setSearchText,
+ handleSearchSubmit: handleSearchSubmit,
+ };
+
+ /* -------------------------------- headCell -------------------------------- */
+ const headCells: HeadCell[] = [
+ {
+ id: 'memberId',
+ align: 'left',
+ label: 'Member ID',
+ isSort: true,
+ },
+ {
+ id: 'fullName',
+ align: 'left',
+ label: 'Name',
+ isSort: true,
+ },
+
+ {
+ id: 'division',
+ align: 'left',
+ label: 'Divisi',
+ isSort: true,
+ },
+ /* {
+ id: 'end_date',
+ align: 'center',
+ label: 'End Date',
+ isSort: false,
+ }, */
+ {
+ id: 'status',
+ align: 'center',
+ label: 'Status',
+ isSort: true,
+ },
+ {
+ id: 'action',
+ align: 'right',
+ label: '',
+ isSort: false,
+ },
+
+ ];
+
+ 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);
+
+ await new Promise((resolve) => setTimeout(resolve, 250));
+
+ const parameters =
+ Object.keys(appliedParams).length !== 0
+ ? appliedParams
+ : Object.fromEntries([...searchParams.entries(), ['order', order], ['orderBy', orderBy]]);
+
+ const response = await axios.get(`${corporateValue}/members`, {
+ params: { ...parameters },
+ });
+
+ setData(
+ response.data.data.map((obj: any) => {
+
+
+ return {
+ ...obj,
+
+ /* memberId: navigate ('user-profile/:id')}>{obj.memberId}, */
+ status:
+ obj.status === 1 ? (
+
+ navigate('dialog-detail')}
+ /* startIcon={} */
+ sx={{
+ backgroundColor: 'rgba(84, 214, 44, 0.16)',
+ color: palette.dark.success.dark,
+ paddingX: 1.5,
+ paddingY: 1,
+ '&:hover': {
+ backgroundColor: 'rgba(84, 214, 44, 0.16)',
+ color: palette.dark.success.dark,
+ },
+ }}
+ >
+ Request
+
+
+ ) : (
+ }
+ sx={{
+ backgroundColor: '#CD7B2E',
+ color: '#FFFF',
+ paddingX: 1.5,
+ paddingY: 1,
+ '&:hover': {
+ backgroundColor: '#BF6919',
+ color: '#FFFF',
+ },
+ }}
+ >
+ Ongoing
+
+ ),
+ /* action: (
+ clickHandler('infoDetail')}>
+
+
+ ), */
+
+ };
+ })
+ );
+
+ setPaginationTable(response.data);
+ setRowsPerPage(response.data.per_page);
+
+ if (searchParams.get('page')) {
+ //@ts-ignore
+ const currentPage = parseInt(searchParams.get('page')) - 1;
+
+ paginationTable.current_page = currentPage;
+ setPage(currentPage);
+ }
+
+ setIsLoading(false);
+ })();
+ }, [appliedParams, searchParams, order, orderBy, setSearchParams, corporateValue]);
+
+ return (
+
+
+
+
+
+ );
+ }
+
\ No newline at end of file
diff --git a/frontend/client-portal/src/routes/index.tsx b/frontend/client-portal/src/routes/index.tsx
index 0df569b0..15325387 100755
--- a/frontend/client-portal/src/routes/index.tsx
+++ b/frontend/client-portal/src/routes/index.tsx
@@ -8,6 +8,7 @@ import LoadingScreen from '../components/LoadingScreen';
import GuestGuard from '../guards/GuestGuard';
import { AuthProvider } from '../contexts/LaravelAuthContext';
import AuthGuard from '../guards/AuthGuard';
+// import DialogDetailClaim from '../sections/dashboard/DialogDetailClaim';
// ----------------------------------------------------------------------
@@ -106,6 +107,10 @@ export default function Router() {
element: ,
index: true,
},
+ {
+ path: 'dialog-detail',
+ element:
+ },
],
},
{
@@ -158,3 +163,4 @@ const AlarmCenterUserProfile = Loadable(lazy(() => import('../pages/AlarmCenter/
const ClaimReport = Loadable(lazy(() => import('../pages/ClaimReport/Index')));
const Claims = Loadable(lazy(() => import('../pages/Claims/Index')));
const ClaimShow = Loadable(lazy(() => import('../pages/Claims/Show')));
+const DialogDetailClaim = Loadable(lazy(()=> import('../pages/ClaimReport/DialogDetailClaim')));
\ No newline at end of file
diff --git a/frontend/client-portal/src/sections/alarm-center/user-profile/CardPersonalInformation.tsx b/frontend/client-portal/src/sections/alarm-center/user-profile/CardPersonalInformation.tsx
index afda43a9..79b127cc 100755
--- a/frontend/client-portal/src/sections/alarm-center/user-profile/CardPersonalInformation.tsx
+++ b/frontend/client-portal/src/sections/alarm-center/user-profile/CardPersonalInformation.tsx
@@ -1,12 +1,86 @@
// mui
-import { Button, IconButton, Card, Stack, Typography } from '@mui/material';
-import { Visibility as VisibilityIcon } from '@mui/icons-material';
+import { Button, IconButton, Card, Stack, Typography, TextField } from '@mui/material';
+import { CardMembership, Visibility as VisibilityIcon } from '@mui/icons-material';
// components
import Iconify from '../../../components/Iconify';
+import axios from '../../../utils/axios';
+import { useContext, useEffect, useState } from 'react';
+import { UserCurrentCorporateContext } from '../../../contexts/UserCurrentCorporate';
+import { useParams } from 'react-router-dom';
+import { Dialog, DialogTitle, DialogContent, DialogActions } from '@mui/material';
+import { enqueueSnackbar } from 'notistack';
-export default function CardPersonalInformation() {
+
+
+
+
+export default function CardPersonalInformation({data}) {
+ /* const [data, setData] = useState(); */
+ const [openDialog, setOpenDialog] = useState(false);
+ const [editedData, setEditedData] = useState(null);
+ const { id } = useParams();
+ const [weight, setWeight] = useState(data?.last_weight_kg || '');
+ const [height, setHeight] = useState(data?.last_height_cm || '');
+ const [email, setEmail] = useState(data?.email || '' );
+ const [phone, setPhone] = useState(data?.phone || '' );
+ const [address, setAddress] = useState(data?.main_address_id || '' );
+
+ /* const [updatedData, setUpdatedData] = useState(data); */
+
+ const handleEditData = () => {
+ setWeight(data?.last_weight_kg || '');
+ setHeight(data?.last_height_cm || '');
+ setEmail(data?.email || '');
+ setPhone(data?.phone||'');
+ setAddress(data?.main_address_id||'');
+ setEditedData(data);
+ setOpenDialog(true);
+ };
+
+
+
+ const handleCloseDialog = () => {
+ // Close the dialog
+ /* setOpenDialog(false); */
+ // Reset the edited data
+ setEditedData(null);
+ setOpenDialog(false);
+ };
+
+ const handleSaveData = () => {
+ const updatedData = {
+ ...editedData,
+ last_weight_kg: weight,
+ last_height_cm: height,
+ email: email,
+ phone: phone,
+ main_address_id: address,
+ };
+
+ // Update the data in the database using the updatedData object
+ axios
+ .put('/data/' + id, updatedData)
+ .then((response) => {
+ // Handle the successful update
+ enqueueSnackbar('Data updated successfully', { variant: 'success' });
+ setOpenDialog(false);
+ })
+ .catch((error) => {
+ // Handle the error
+ enqueueSnackbar('Failed to update data', { variant: 'error' });
+ });
+ };
+
+
+
+
+
+
return (
+
+
+
{/* Stack 1 */}
Informasi Pribadi
- }>Edit Data
+ } onClick={handleEditData}>Edit Data
{/* Stack 2 */}
@@ -45,15 +119,15 @@ export default function CardPersonalInformation() {
Nama Lengkap
- Jessica Lie
+ {data ?. name}
- Berat Badan
- 40 kg
+ Berat Badan
+ {data ?. last_weight_kg} kg
- Tinggi Badan
- 165 cm
+ Tinggi Badan
+ {data ?. last_height_cm} cm
@@ -65,15 +139,15 @@ export default function CardPersonalInformation() {
Tempat Lahir
- Jakarta
+ {data ?. birth_place}
Tanggal Lahir
- 15-05-1996
+ {data ?. birth_date}
Jenis Kelamin
- Perempuan
+ {data ?. gender}
@@ -83,18 +157,17 @@ export default function CardPersonalInformation() {
Nomor Telpon
- 081256788765
+ {data ?. phone}
Email
- Jessica.lie@gmail.com
+ {data?. email}
Alamat
- Jl. Kalimantan No.6, Rw. Mekar Jaya, Kec. Serpong, Kota Tangerang Selatan, Banten
- 15310
+ {data ?. main_address_id}
@@ -110,7 +183,7 @@ export default function CardPersonalInformation() {
>
Nomor NIK
- 081256788765
+ {data ?. nik}
}>
@@ -125,23 +198,84 @@ export default function CardPersonalInformation() {
Agama
- Kristen
+ {data ?. religion}
Status
- Menikah
+ {data ?. marital_status}
Pendidikan
- S1
+ {data ?. last_education}
Pekerjaan
- Ibu Rumah Tangga
+ {data ?. current_employment}
+
+ {/* Dialog */}
+
);
}
diff --git a/frontend/client-portal/src/sections/claim-report/CardClaimStatus.tsx b/frontend/client-portal/src/sections/claim-report/CardClaimStatus.tsx
index 595c1dec..fdfd94b5 100755
--- a/frontend/client-portal/src/sections/claim-report/CardClaimStatus.tsx
+++ b/frontend/client-portal/src/sections/claim-report/CardClaimStatus.tsx
@@ -28,10 +28,10 @@ const RootStyle = styled(Card)(({ theme }) => ({
// ----------------------------------------------------------------------
const defaultData = [
- { name: 'Requested', value: 0, color: palette.dark.primary.dark },
- { name: 'Approval', value: 0, color: palette.dark.warning.dark },
+ { name: 'Requested', value: 5, color: palette.dark.primary.dark },
+ { name: 'Approval', value: 1, color: palette.dark.warning.dark },
{ name: 'Disbrusment', value: 0, color: palette.dark.success.dark },
- { name: 'Rejected', value: 0, color: palette.dark.error.dark },
+ { name: 'Rejected', value: 3, color: palette.dark.error.dark },
];
// ----------------------------------------------------------------------
diff --git a/frontend/client-portal/src/sections/dashboard/DialogTopUpLimit.tsx b/frontend/client-portal/src/sections/dashboard/DialogTopUpLimit.tsx
index 17da9d74..bb156185 100755
--- a/frontend/client-portal/src/sections/dashboard/DialogTopUpLimit.tsx
+++ b/frontend/client-portal/src/sections/dashboard/DialogTopUpLimit.tsx
@@ -13,14 +13,17 @@ import Checkbox from '@mui/material/Checkbox';
import MuiDialog from '../../components/MuiDialog';
import { FormProvider, RHFTextField } from '../../components/hook-form';
// React
-import { ReactElement, useEffect, useState } from 'react';
+import { useContext, ReactElement, useEffect, useState } from 'react';
import { fCurrency } from '../../utils/formatNumber';
+import { UserCurrentCorporateContext } from '../../contexts/UserCurrentCorporate';
+
// yup
import * as Yup from 'yup';
// form
import { useForm } from 'react-hook-form';
import { yupResolver } from '@hookform/resolvers/yup';
import axios from '../../utils/axios';
+import { enqueueSnackbar } from 'notistack';
/* ---------------------------------- types --------------------------------- */
type MuiDialogProps = {
@@ -76,6 +79,8 @@ export default function DialogTopUpLimit({
const [isDisabledInput, setIsDisabledInput] = useState(false);
const [isDisabledButton, setIsDisabledButton] = useState(true);
const [isCheckboxChecked, setIsCheckboxChecked] = useState(false);
+ const [ message, setMessage ] = useState ('');
+ const { corporateValue } = useContext(UserCurrentCorporateContext);
const TopUpSchema = Yup.object().shape({
topup: Yup.number().max(
@@ -112,15 +117,32 @@ export default function DialogTopUpLimit({
}, [openDialog, reset]);
const onSubmit = async (data: FormValuesProps) => {
+
+
await new Promise((resolve) => setTimeout(resolve, 500));
setIsDisabledInput(false);
setIsDisabledButton(true);
setIsCheckboxChecked(false);
- // await axios.post('');
-
- reset();
+ try {
+ // Send the HTTP POST request to the backend
+ await axios.post(corporateValue + '/topup', {
+ topup: data.topup,
+ });
+
+ // Show a success notification
+ enqueueSnackbar('The request has been sent', { variant: 'success' });
+ setOpenDialog(false);
+
+ reset();
+ } catch (error) {
+ // Show an error notification
+ enqueueSnackbar('An error occurred', { variant: 'error' });
+ setOpenDialog(false);
+ }
+
+
};
const onCheckHandler = (value: string) => {
@@ -128,7 +150,7 @@ export default function DialogTopUpLimit({
value === '0' || value === '' ? setIsDisabledButton(true) : setIsDisabledButton(false);
setIsCheckboxChecked(!isCheckboxChecked);
// @ts-ignore
- setValue('topup', data.maxTopUp);
+ setValue('topup', data.maxTopUp.toString());
};
const onTopupHandler = (value: string) => {
diff --git a/frontend/dashboard/src/pages/Corporates/Member/sections/DialogLog.tsx b/frontend/dashboard/src/pages/Corporates/Member/sections/DialogLog.tsx
index f4bfb088..03a4b8f2 100755
--- a/frontend/dashboard/src/pages/Corporates/Member/sections/DialogLog.tsx
+++ b/frontend/dashboard/src/pages/Corporates/Member/sections/DialogLog.tsx
@@ -63,6 +63,7 @@ const DialogLog = ({ title, openDialog, setOpenDialog, data }: MuiDialogProps) =
useEffect(() => {
setBenefitIds(data.member.current_plan?.benefits.filter((benefit) => benefit.pivot.active == 1).map((benefit) => benefit.id))
setCheckedBenefitIds(benefitIds)
+ console.log('Check All', benefitIds, 'X', data.member.current_plan?.benefits.map((benefit) => benefit.id))
}, [])
const clickHandler = () => {
diff --git a/routes/api.php b/routes/api.php
index a24de889..8421779a 100755
--- a/routes/api.php
+++ b/routes/api.php
@@ -1,11 +1,14 @@
group(function() {
- Route::get('member/{member_id}', [MembershipController::class, 'show'])->name('member.show');
- Route::post('check-membership', [MembershipController::class, 'check']);
- Route::post('check-limit', [MembershipController::class, 'checkLimit']);
- Route::post('check-coverage-limit', [MembershipController::class, 'checkLimit']);
- Route::get('linking-rules', [MembershipController::class, 'linkingRules']);
- Route::post('linking-validate', [MembershipController::class, 'linkingValidate']);
+Route::prefix('client')->group(function () {
- Route::post('claim-create', [ClaimController::class, 'store']);
- Route::post('claim-update-diagnosis', [ClaimController::class, 'updateClaimDiagnosis']);
+ Route::controller(AuthController::class)->group(function () {
+ Route::post('login', 'login');
+ Route::post('verify-code', 'validateOtp');
+ });
-});
\ No newline at end of file
+ Route::middleware('auth:sanctum')->group(function () {
+ Route::post('logout', [AuthController::class, 'logout'])->name('logout');
+ Route::get('user', [UserController::class, 'index']);
+ Route::get('data/{id}', [DataController::class, 'show']);
+ Route::put('data/{id}', [DataController::class, 'update' ]);
+
+ Route::get('corporate-manage', [CorporateManageController::class, 'index']);
+ Route::prefix('{corporate_id}')->group(function () {
+ Route::get('policy', [CorporatePolicyController::class, 'index']);
+ Route::get('division', [CorporateDivisionController::class, 'index']);
+ Route::get('members', [CorporateMemberController::class, 'index']);
+ Route::get('claims/status', [ClaimController::class, 'status']);
+ Route::get('claims', [ClaimController::class, 'index']);
+
+ Route::get('topup', [TopUpController::class, 'index']);
+ Route::post('topup', [TopUpController::class, 'store']);
+ });
+
+ Route::get('claims/{id}', [ClaimController::class, 'show']);
+ });
+});