Update Request LOG
This commit is contained in:
@@ -43,6 +43,7 @@ class MemberController extends Controller
|
|||||||
->where('members.birth_date', '=', $request->birth_date)
|
->where('members.birth_date', '=', $request->birth_date)
|
||||||
->select(
|
->select(
|
||||||
'members.id',
|
'members.id',
|
||||||
|
'members.name',
|
||||||
'members.member_id',
|
'members.member_id',
|
||||||
'member_policies.policy_id',
|
'member_policies.policy_id',
|
||||||
'persons.nik',
|
'persons.nik',
|
||||||
@@ -54,26 +55,53 @@ class MemberController extends Controller
|
|||||||
'members.race',
|
'members.race',
|
||||||
'members.relation_with_principal')
|
'members.relation_with_principal')
|
||||||
->first();
|
->first();
|
||||||
$res_data['members'] = $members;
|
if($members)
|
||||||
|
{
|
||||||
|
$res_data['members'] = $members;
|
||||||
|
|
||||||
$benefits = DB::table('member_plans')
|
$benefits = DB::table('member_plans')
|
||||||
->leftJoin('corporate_benefits','corporate_benefits.plan_id', '=', 'member_plans.plan_id')
|
->leftJoin('corporate_benefits','corporate_benefits.plan_id', '=', 'member_plans.plan_id')
|
||||||
->leftJoin('benefits', 'benefits.id', '=', 'corporate_benefits.benefit_id')
|
->leftJoin('benefits', 'benefits.id', '=', 'corporate_benefits.benefit_id')
|
||||||
->where('member_plans.member_id', '=', $members->id)
|
->leftJoin('plans', 'plans.id', '=', 'member_plans.plan_id')
|
||||||
->select('benefits.description','benefits.code','corporate_benefits.corporate_id')
|
->leftJoin('services', 'services.code', '=', 'plans.service_code')
|
||||||
->get();
|
->where('member_plans.member_id', '=', $members->id)
|
||||||
$res_data['benefits'] = $benefits;
|
->select(
|
||||||
|
'benefits.description',
|
||||||
|
'benefits.code',
|
||||||
|
'corporate_benefits.corporate_id',
|
||||||
|
'plans.service_code'
|
||||||
|
)
|
||||||
|
->get();
|
||||||
|
$res_data['benefits'] = $benefits;
|
||||||
|
|
||||||
$services = DB::table('member_plans')
|
$services = DB::table('member_plans')
|
||||||
->leftJoin('plans', 'plans.id', '=', 'member_plans.plan_id')
|
->leftJoin('plans', 'plans.id', '=', 'member_plans.plan_id')
|
||||||
->leftJoin('services', 'services.code', '=', 'plans.service_code')
|
->leftJoin('services', 'services.code', '=', 'plans.service_code')
|
||||||
->where('member_plans.member_id', $members->id)
|
->where('member_plans.member_id', $members->id)
|
||||||
->select('plans.service_code', 'services.name')
|
->select('plans.service_code', 'services.name')
|
||||||
->get();
|
->get();
|
||||||
$res_data['services'] = $services;
|
$res_data['services'] = $services;
|
||||||
|
|
||||||
|
// Group Services
|
||||||
|
$groupServices = [];
|
||||||
|
foreach ($res_data['benefits'] as $benefit) {
|
||||||
|
$serviceCode = $benefit->service_code;
|
||||||
|
$groupServices[$serviceCode][] = [
|
||||||
|
'description' => $benefit->description,
|
||||||
|
'code' => $benefit->code,
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
$res_data['groupServices'] = $groupServices;
|
||||||
|
|
||||||
|
|
||||||
return ApiResponse::apiResponse("Success", $res_data, trans('Message.success'), 200);
|
return ApiResponse::apiResponse("Success", $res_data, trans('Message.success'), 200);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return ApiResponse::apiResponse("Data Not Found", $data, trans('Message.not_found'), 404);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,51 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Modules\HospitalPortal\Http\Controllers\Api;
|
||||||
|
use Illuminate\Contracts\Support\Renderable;
|
||||||
|
use Illuminate\Http\Request;
|
||||||
|
use Illuminate\Routing\Controller;
|
||||||
|
use Illuminate\Support\Facades\Validator;
|
||||||
|
use Modules\HospitalPortal\Helpers\ApiResponse;
|
||||||
|
use Illuminate\Support\Facades\DB;
|
||||||
|
use Modules\Internal\Http\Controllers\Api\RequestLogController as primeCenterRequestLog;
|
||||||
|
|
||||||
|
class RequestLogController extends Controller
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Display a listing of the resource.
|
||||||
|
* @return Renderable
|
||||||
|
*/
|
||||||
|
public function requestLog(Request $request)
|
||||||
|
{
|
||||||
|
$data = [
|
||||||
|
'member_id' => $request->member_id,
|
||||||
|
'service_code' => $request->service_code
|
||||||
|
];
|
||||||
|
$validator = Validator::make($request->all(), [
|
||||||
|
'member_id' => 'required',
|
||||||
|
'service_code' => 'required'
|
||||||
|
], [
|
||||||
|
'member_id.required' => trans('Validation.required',['attribute' => 'Member ID']),
|
||||||
|
'service_code.required' => trans('Validation.required',['attribute' => 'Service Code']),
|
||||||
|
]);
|
||||||
|
if ($validator->fails())
|
||||||
|
{
|
||||||
|
return ApiResponse::apiResponse('Bad Request', $data, $validator->errors(), 400);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
|
||||||
|
$requestLogControllerInstance = new PrimeCenterRequestLog();
|
||||||
|
$response = $requestLogControllerInstance->createNew($request);
|
||||||
|
|
||||||
|
if($response->original['statusCode'] == 200)
|
||||||
|
{
|
||||||
|
return ApiResponse::apiResponse("Success", $data, trans('Message.success'), 200);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return ApiResponse::apiResponse('Server Error', $data, trans('Message.server_error'), 500);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -6,6 +6,7 @@ use Modules\HospitalPortal\Http\Controllers\Api\ClaimRequestController;
|
|||||||
use Modules\HospitalPortal\Http\Controllers\Api\MemberController;
|
use Modules\HospitalPortal\Http\Controllers\Api\MemberController;
|
||||||
use Modules\HospitalPortal\Http\Controllers\ClaimController;
|
use Modules\HospitalPortal\Http\Controllers\ClaimController;
|
||||||
use Modules\HospitalPortal\Http\Controllers\Api\NotificationController;
|
use Modules\HospitalPortal\Http\Controllers\Api\NotificationController;
|
||||||
|
use Modules\HospitalPortal\Http\Controllers\Api\RequestLogController;
|
||||||
use Modules\HospitalPortal\Http\Middleware\Authentication;
|
use Modules\HospitalPortal\Http\Middleware\Authentication;
|
||||||
use Modules\HospitalPortal\Http\Middleware\Authorization;
|
use Modules\HospitalPortal\Http\Middleware\Authorization;
|
||||||
|
|
||||||
@@ -47,6 +48,10 @@ Route::prefix('v1')->group(function() {
|
|||||||
Route::controller(MemberController::class)->group(function () {
|
Route::controller(MemberController::class)->group(function () {
|
||||||
Route::post('search-member', 'search');
|
Route::post('search-member', 'search');
|
||||||
});
|
});
|
||||||
|
// Request LOG
|
||||||
|
Route::controller(RequestLogController::class)->group(function () {
|
||||||
|
Route::post('request-log', 'requestLog');
|
||||||
|
});
|
||||||
//Notification
|
//Notification
|
||||||
Route::controller(NotificationController::class)->group(function() {
|
Route::controller(NotificationController::class)->group(function() {
|
||||||
//get notifications
|
//get notifications
|
||||||
|
|||||||
@@ -9,7 +9,14 @@
|
|||||||
"txtCardSearchMember3" : "Date Birth",
|
"txtCardSearchMember3" : "Date Birth",
|
||||||
"txtCardSearchMember4" : "Member ID",
|
"txtCardSearchMember4" : "Member ID",
|
||||||
"txtCardSearchMember5" : "Member",
|
"txtCardSearchMember5" : "Member",
|
||||||
"txtDialogMember1" : "Benefit",
|
"txtDialogMember1" : "Services",
|
||||||
"txtDialogMember2" : "Request LOG",
|
"txtDialogMember2" : "Request LOG",
|
||||||
"txtDialogMember3" : "Detail"
|
"txtDialogMember3" : "Detail",
|
||||||
|
"txtDialogMember4" : "Please select services",
|
||||||
|
"txtDialogMember5" : "Submission Date",
|
||||||
|
"txtDateBirth" : "Date of Birth",
|
||||||
|
"txtGender" : "Gender",
|
||||||
|
"txtMaritalStatus" : "Marital Status",
|
||||||
|
"txtLanguage" : "Language",
|
||||||
|
"txtRelationship" : "Relationship"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -9,7 +9,14 @@
|
|||||||
"txtCardSearchMember3" : "Tanggal Lahir",
|
"txtCardSearchMember3" : "Tanggal Lahir",
|
||||||
"txtCardSearchMember4" : "Member ID",
|
"txtCardSearchMember4" : "Member ID",
|
||||||
"txtCardSearchMember5" : "Member",
|
"txtCardSearchMember5" : "Member",
|
||||||
"txtDialogMember1" : "Manfaat",
|
"txtDialogMember1" : "Layanan",
|
||||||
"txtDialogMember2" : "Request LOG",
|
"txtDialogMember2" : "Request LOG",
|
||||||
"txtDialogMember3" : "Detail"
|
"txtDialogMember3" : "Detail",
|
||||||
|
"txtDialogMember4" : "Mohon pilih layanan",
|
||||||
|
"txtDialogMember5" : "Tanggal Pengajuan",
|
||||||
|
"txtDateBirth" : "Tanggal Lahir",
|
||||||
|
"txtGender" : "Jenis Kelamin",
|
||||||
|
"txtMaritalStatus" : "Status Perkawinan",
|
||||||
|
"txtLanguage" : "Bahasa",
|
||||||
|
"txtRelationship" : "Hubungan"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -46,8 +46,8 @@ const ItemNotificationStyle = styled(Card)(({ theme }) => ({
|
|||||||
|
|
||||||
// ----------------------------------------------------------------------
|
// ----------------------------------------------------------------------
|
||||||
|
|
||||||
export default function CardSearchMember(handleSubmitSuccess) {
|
export default function CardSearchMember(handleSubmitSuccess:()=> void) {
|
||||||
const { localeData } = useContext(LanguageContext);
|
const { localeData }: any = useContext(LanguageContext);
|
||||||
const {enqueueSnackbar} = useSnackbar();
|
const {enqueueSnackbar} = useSnackbar();
|
||||||
|
|
||||||
const [noPolis, setNoPolis] = useState('AW001-01');
|
const [noPolis, setNoPolis] = useState('AW001-01');
|
||||||
@@ -112,7 +112,7 @@ export default function CardSearchMember(handleSubmitSuccess) {
|
|||||||
<DatePicker
|
<DatePicker
|
||||||
label={localeData.txtCardSearchMember3}
|
label={localeData.txtCardSearchMember3}
|
||||||
value={birthDate}
|
value={birthDate}
|
||||||
onChange={(newValue) => {
|
onChange={(newValue:any) => {
|
||||||
setBirthDate( (newValue));
|
setBirthDate( (newValue));
|
||||||
}}
|
}}
|
||||||
inputFormat="dd-MM-yyyy"
|
inputFormat="dd-MM-yyyy"
|
||||||
@@ -144,7 +144,7 @@ export default function CardSearchMember(handleSubmitSuccess) {
|
|||||||
openDialog={openDialogBenefit}
|
openDialog={openDialogBenefit}
|
||||||
setOpenDialog={setOpenDialogBenefit}
|
setOpenDialog={setOpenDialogBenefit}
|
||||||
content={DialogMember(currentMember, () => {setOpenDialogBenefit(false); handleSubmitSuccess()})}
|
content={DialogMember(currentMember, () => {setOpenDialogBenefit(false); handleSubmitSuccess()})}
|
||||||
maxWidth="md"
|
maxWidth="sm"
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -1,7 +1,22 @@
|
|||||||
// mui
|
// mui
|
||||||
import { styled } from '@mui/material/styles';
|
import { styled } from '@mui/material/styles';
|
||||||
import { LoadingButton, TabPanel } from "@mui/lab";
|
import { LoadingButton, TabPanel } from "@mui/lab";
|
||||||
import { Button, Card, Divider, Grid, LinearProgress, linearProgressClasses, Typography } from "@mui/material";
|
import {
|
||||||
|
Button,
|
||||||
|
Card,
|
||||||
|
Divider,
|
||||||
|
Grid,
|
||||||
|
LinearProgress,
|
||||||
|
linearProgressClasses,
|
||||||
|
Typography,
|
||||||
|
Paper,
|
||||||
|
Table,
|
||||||
|
TableBody,
|
||||||
|
TableCell,
|
||||||
|
TableContainer,
|
||||||
|
TableHead,
|
||||||
|
TableRow,
|
||||||
|
Collapse, } from "@mui/material";
|
||||||
import { Tab, Tabs } from "@mui/material";
|
import { Tab, Tabs } from "@mui/material";
|
||||||
import { Box, Stack } from "@mui/material";
|
import { Box, Stack } from "@mui/material";
|
||||||
import React, { useEffect, useState, useContext } from "react";
|
import React, { useEffect, useState, useContext } from "react";
|
||||||
@@ -10,11 +25,14 @@ import { fPostFormat } from '@/utils/formatTime';
|
|||||||
import { Avatar } from '@mui/material';
|
import { Avatar } from '@mui/material';
|
||||||
import Iconify from '@/components/Iconify';
|
import Iconify from '@/components/Iconify';
|
||||||
import FormRequestClaim from './FormRequestClaim';
|
import FormRequestClaim from './FormRequestClaim';
|
||||||
|
import FormRequestLog from './FormRequestLog';
|
||||||
import { LanguageContext } from '@/contexts/LanguageContext';
|
import { LanguageContext } from '@/contexts/LanguageContext';
|
||||||
import { format } from 'date-fns';
|
import { format } from 'date-fns';
|
||||||
|
import KeyboardArrowDownIcon from '@mui/icons-material/KeyboardArrowDown';
|
||||||
|
import KeyboardArrowRightIcon from '@mui/icons-material/KeyboardArrowRight';
|
||||||
|
|
||||||
export default function DialogMember(member, handleSubmitSuccess) {
|
export default function DialogMember(member:any, handleSubmitSuccess:() => void) {
|
||||||
const { localeData } = useContext(LanguageContext);
|
const { localeData }: any = useContext(LanguageContext);
|
||||||
const [currentTab, setCurrentTab] = useState('request')
|
const [currentTab, setCurrentTab] = useState('request')
|
||||||
|
|
||||||
// ----------------------------------------------------------------------
|
// ----------------------------------------------------------------------
|
||||||
@@ -41,7 +59,7 @@ export default function DialogMember(member, handleSubmitSuccess) {
|
|||||||
},
|
},
|
||||||
}));
|
}));
|
||||||
|
|
||||||
function TabPanel(props) {
|
function TabPanel(props:any) {
|
||||||
const { children, value, index, ...other } = props;
|
const { children, value, index, ...other } = props;
|
||||||
return (
|
return (
|
||||||
<div
|
<div
|
||||||
@@ -60,6 +78,15 @@ export default function DialogMember(member, handleSubmitSuccess) {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const [openRows, setOpenRows] = useState<any>({});
|
||||||
|
|
||||||
|
const handleRowToggle = (index:number) => {
|
||||||
|
setOpenRows((prevOpenRows:any) => ({
|
||||||
|
...prevOpenRows,
|
||||||
|
[index]: !prevOpenRows[index],
|
||||||
|
}));
|
||||||
|
};
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div>
|
<div>
|
||||||
<Box sx={{ borderBottom: 1, borderColor: 'divider' }}>
|
<Box sx={{ borderBottom: 1, borderColor: 'divider' }}>
|
||||||
@@ -69,7 +96,7 @@ export default function DialogMember(member, handleSubmitSuccess) {
|
|||||||
aria-label="wrapped label tabs example"
|
aria-label="wrapped label tabs example"
|
||||||
>
|
>
|
||||||
<Tab value="detail" label={localeData.txtDialogMember3} />
|
<Tab value="detail" label={localeData.txtDialogMember3} />
|
||||||
<Tab value="benefit" label={localeData.txtDialogMember1} />
|
<Tab value="service" label={localeData.txtDialogMember1} />
|
||||||
<Tab value="request" label={localeData.txtDialogMember2} />
|
<Tab value="request" label={localeData.txtDialogMember2} />
|
||||||
</Tabs>
|
</Tabs>
|
||||||
|
|
||||||
@@ -96,19 +123,19 @@ export default function DialogMember(member, handleSubmitSuccess) {
|
|||||||
<Typography sx={{width:'50%', fontWeight: 'bold'}} variant="body2">{member?.members.email ?? '-'}</Typography>
|
<Typography sx={{width:'50%', fontWeight: 'bold'}} variant="body2">{member?.members.email ?? '-'}</Typography>
|
||||||
</Stack>
|
</Stack>
|
||||||
<Stack direction="row" justifyContent="space-between">
|
<Stack direction="row" justifyContent="space-between">
|
||||||
<Typography sx={{width:'50%'}} variant="body2">Date of Birth</Typography>
|
<Typography sx={{width:'50%'}} variant="body2">{localeData.txtDateBirth}</Typography>
|
||||||
<Typography sx={{width:'50%', fontWeight: 'bold'}} variant="body2">{member?.members.birth_date ? format(new Date(member.members.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>
|
||||||
<Stack direction="row" justifyContent="space-between">
|
<Stack direction="row" justifyContent="space-between">
|
||||||
<Typography sx={{width:'50%'}} variant="body2">Gender</Typography>
|
<Typography sx={{width:'50%'}} variant="body2">{localeData.txtGender}</Typography>
|
||||||
<Typography sx={{width:'50%', fontWeight: 'bold'}} variant="body2">{member?.members.gender ?? '-'}</Typography>
|
<Typography sx={{width:'50%', fontWeight: 'bold'}} variant="body2">{member?.members.gender ?? '-'}</Typography>
|
||||||
</Stack>
|
</Stack>
|
||||||
<Stack direction="row" justifyContent="space-between">
|
<Stack direction="row" justifyContent="space-between">
|
||||||
<Typography sx={{width:'50%'}} variant="body2">Marital Status</Typography>
|
<Typography sx={{width:'50%'}} variant="body2">{localeData.txtMaritalStatus}</Typography>
|
||||||
<Typography sx={{width:'50%', fontWeight: 'bold'}} variant="body2">{member?.members.marital_status ?? '-'}</Typography>
|
<Typography sx={{width:'50%', fontWeight: 'bold'}} variant="body2">{member?.members.marital_status ?? '-'}</Typography>
|
||||||
</Stack>
|
</Stack>
|
||||||
<Stack direction="row" justifyContent="space-between">
|
<Stack direction="row" justifyContent="space-between">
|
||||||
<Typography sx={{width:'50%'}} variant="body2">Language</Typography>
|
<Typography sx={{width:'50%'}} variant="body2">{localeData.txtLanguage}</Typography>
|
||||||
<Typography sx={{width:'50%', fontWeight: 'bold'}} variant="body2">{member?.members.language ?? '-'}</Typography>
|
<Typography sx={{width:'50%', fontWeight: 'bold'}} variant="body2">{member?.members.language ?? '-'}</Typography>
|
||||||
</Stack>
|
</Stack>
|
||||||
<Stack direction="row" justifyContent="space-between">
|
<Stack direction="row" justifyContent="space-between">
|
||||||
@@ -116,29 +143,51 @@ export default function DialogMember(member, handleSubmitSuccess) {
|
|||||||
<Typography sx={{width:'50%', fontWeight: 'bold'}} variant="body2">{member?.members.race ?? '-'}</Typography>
|
<Typography sx={{width:'50%', fontWeight: 'bold'}} variant="body2">{member?.members.race ?? '-'}</Typography>
|
||||||
</Stack>
|
</Stack>
|
||||||
<Stack direction="row" justifyContent="space-between">
|
<Stack direction="row" justifyContent="space-between">
|
||||||
<Typography sx={{width:'50%'}} variant="body2">Relationship</Typography>
|
<Typography sx={{width:'50%'}} variant="body2">{localeData.txtRelationship}</Typography>
|
||||||
<Typography sx={{width:'50%', fontWeight: 'bold'}} variant="body2">{member?.members.relation_with_principal != '' ? member?.members.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>
|
||||||
</Stack>
|
</Stack>
|
||||||
</TabPanel>
|
</TabPanel>
|
||||||
|
<TabPanel value={currentTab} index={'service'}>
|
||||||
<TabPanel value={currentTab} index={'benefit'}>
|
<TableContainer component={Paper}>
|
||||||
<Grid container spacing={2}>
|
<Table aria-label="collapsible table">
|
||||||
{ member && member?.benefits?.map((corporateBenefit, index) => {return (
|
{member && member.groupServices && Object.keys(member.groupServices).map((serviceCode, index) => (
|
||||||
<Grid item sm={6} key={index}>
|
<TableBody key={index}>
|
||||||
<Card sx={{p: 2}}>
|
<TableRow sx={{backgroundColor: '#FFFFFF', borderBottom: openRows[index] ? '' : '1px solid #e0e0e0'}}>
|
||||||
<Typography variant="body2" sx={{fontWeight: 'bold'}}>{corporateBenefit.description}</Typography>
|
<TableCell align="left" sx={{fontWeight: 'bold', width: '95%'}}><Typography variant="subtitle1">{serviceCode}</Typography></TableCell>
|
||||||
<Typography variant="body2" sx={{color: '#919EAB'}}>{corporateBenefit.code}</Typography>
|
<TableCell align="left" sx={{width: '5%'}}>
|
||||||
|
{openRows[index] ? (
|
||||||
</Card>
|
<KeyboardArrowDownIcon sx={{ cursor: 'pointer' }} onClick={() => handleRowToggle(index)} />
|
||||||
</Grid>
|
) : (
|
||||||
)})}
|
<KeyboardArrowRightIcon sx={{ cursor: 'pointer' }} onClick={() => handleRowToggle(index)} />
|
||||||
</Grid>
|
)}
|
||||||
|
</TableCell>
|
||||||
|
</TableRow>
|
||||||
|
<TableRow sx={{display: openRows[index] ? '' : 'none', borderBottom: openRows[index] ? '1px solid #e0e0e0' : ''}}>
|
||||||
|
<TableCell colSpan={2}>
|
||||||
|
{/* COLLAPSIBLE ROW */}
|
||||||
|
<Collapse in={openRows[index]} timeout="auto" unmountOnExit>
|
||||||
|
<Grid container spacing={2}>
|
||||||
|
{/* Loop through the array for the current serviceCode */}
|
||||||
|
{member.groupServices[serviceCode].map((item:any, innerIndex:number) => (
|
||||||
|
<Grid item sm={6} key={innerIndex}>
|
||||||
|
<Card sx={{ p: 2 }}>
|
||||||
|
<Typography variant="body2" sx={{ fontWeight: 'bold' }}>{item.description}</Typography>
|
||||||
|
<Typography variant="body2" sx={{ color: '#919EAB' }}>{item.code}</Typography>
|
||||||
|
</Card>
|
||||||
|
</Grid>
|
||||||
|
))}
|
||||||
|
</Grid>
|
||||||
|
</Collapse>
|
||||||
|
</TableCell>
|
||||||
|
</TableRow>
|
||||||
|
</TableBody>
|
||||||
|
))}
|
||||||
|
</Table>
|
||||||
|
</TableContainer>
|
||||||
</TabPanel>
|
</TabPanel>
|
||||||
|
|
||||||
|
|
||||||
<TabPanel value={currentTab} index={'request'}>
|
<TabPanel value={currentTab} index={'request'}>
|
||||||
<FormRequestClaim member={member} handleSubmitSuccess={handleSubmitSuccess} />
|
<FormRequestLog member={member} handleSubmitSuccess={handleSubmitSuccess} />
|
||||||
</TabPanel>
|
</TabPanel>
|
||||||
</Box>
|
</Box>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -0,0 +1,128 @@
|
|||||||
|
import { LoadingButton } from '@mui/lab';
|
||||||
|
import
|
||||||
|
{
|
||||||
|
Avatar,
|
||||||
|
FormControl,
|
||||||
|
InputLabel,
|
||||||
|
Select,
|
||||||
|
FormHelperText,
|
||||||
|
MenuItem
|
||||||
|
} from '@mui/material';
|
||||||
|
import { Card } from '@mui/material';
|
||||||
|
import { Stack, Typography } from '@mui/material';
|
||||||
|
import axios from '@/utils/axios';
|
||||||
|
import { enqueueSnackbar } from 'notistack';
|
||||||
|
import { useRef, useState, useContext } from 'react';
|
||||||
|
import { makeFormData } from '@/utils/jsonToFormData';
|
||||||
|
import { format } from 'date-fns';
|
||||||
|
import { LanguageContext } from '@/contexts/LanguageContext';
|
||||||
|
|
||||||
|
interface MemberType {
|
||||||
|
members: any;
|
||||||
|
services: any;
|
||||||
|
}
|
||||||
|
interface FormRequestClaimProps {
|
||||||
|
member: MemberType;
|
||||||
|
handleSubmitSuccess: () => void;
|
||||||
|
}
|
||||||
|
export default function FormRequestClaim({ member, handleSubmitSuccess }: FormRequestClaimProps) {
|
||||||
|
const { localeData }: any = useContext(LanguageContext);
|
||||||
|
const [serviceCode, setServiceCode] = useState<string>('');
|
||||||
|
|
||||||
|
const [submitLoading, setSubmitLoading] = useState<boolean>(false);
|
||||||
|
function submitRequest() {
|
||||||
|
if(serviceCode == '')
|
||||||
|
{
|
||||||
|
enqueueSnackbar(localeData.txtDialogMember4, { variant: 'warning' });
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
setSubmitLoading(true);
|
||||||
|
const formData = {
|
||||||
|
member_id: member.members.id,
|
||||||
|
service_code: serviceCode
|
||||||
|
};
|
||||||
|
axios
|
||||||
|
.post('/request-log', formData)
|
||||||
|
.then((response) => {
|
||||||
|
console.log(response);
|
||||||
|
if (response && response.data && response.data.meta) {
|
||||||
|
enqueueSnackbar(response.data.meta.message, { variant: 'success' });
|
||||||
|
handleSubmitSuccess();
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.catch(({ response }) => {
|
||||||
|
if (response && response.data && response.data.meta) {
|
||||||
|
enqueueSnackbar(response.data.meta.message, { variant: 'error' });
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.then(() => {
|
||||||
|
setSubmitLoading(false);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
interface MemberService {
|
||||||
|
service_code: string;
|
||||||
|
name: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
return (
|
||||||
|
<Stack direction="column" spacing={4}>
|
||||||
|
<Stack direction="row" justifyContent={'end'} sx={{ marginBottom: 2 }} spacing={2}>
|
||||||
|
<Typography variant='body2' sx={{color: '#757575'}}>
|
||||||
|
{localeData.txtDialogMember5}
|
||||||
|
</Typography>
|
||||||
|
<Typography variant='body2' sx={{fontWeight:'bold'}}>{format(new Date(), "d MMM yyyy")}</Typography>
|
||||||
|
</Stack>
|
||||||
|
|
||||||
|
<Stack direction="row" spacing={2}>
|
||||||
|
<Stack spacing={2} sx={{width:'100%'}}>
|
||||||
|
<Typography variant='subtitle1'>{localeData.txtDialogMember1}*</Typography>
|
||||||
|
<FormControl>
|
||||||
|
<InputLabel htmlFor="service_type">
|
||||||
|
{localeData.txtDialogMember1}
|
||||||
|
</InputLabel>
|
||||||
|
<Select
|
||||||
|
id="service_type"
|
||||||
|
value={serviceCode}
|
||||||
|
fullWidth
|
||||||
|
label={localeData.txtDialogMember1}
|
||||||
|
onChange={(e) => {
|
||||||
|
setServiceCode(e.target.value);
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
{member && member?.services?.map((item: MemberService, index:number) => (
|
||||||
|
<MenuItem key={index} value={item.service_code}>{item.name}</MenuItem>
|
||||||
|
))}
|
||||||
|
</Select>
|
||||||
|
<FormHelperText style={{ color: 'red' }}></FormHelperText>
|
||||||
|
</FormControl>
|
||||||
|
</Stack>
|
||||||
|
</Stack>
|
||||||
|
|
||||||
|
<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?.members.name ?? ''}
|
||||||
|
sx={{ marginTop: 1, width: 48, height: 48 }}
|
||||||
|
/>
|
||||||
|
<Stack sx={{ p: 1 }}>
|
||||||
|
<Typography variant="body2">{member?.members.name ?? ''}</Typography>
|
||||||
|
<Typography variant="body2" sx={{color:'#637381'}}>{member?.members.member_id ?? ''}</Typography>
|
||||||
|
</Stack>
|
||||||
|
</Stack>
|
||||||
|
</Card>
|
||||||
|
|
||||||
|
<LoadingButton
|
||||||
|
variant="contained"
|
||||||
|
sx={{ marginTop: 2, p: 2, backgroundColor: '#19BBBB' }}
|
||||||
|
onClick={() => {
|
||||||
|
submitRequest();
|
||||||
|
}}
|
||||||
|
loading={submitLoading}
|
||||||
|
>
|
||||||
|
{localeData.txtDialogMember2}
|
||||||
|
</LoadingButton>
|
||||||
|
</Stack>
|
||||||
|
);
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user