diff --git a/Modules/Internal/Http/Controllers/Api/CorporateMemberController.php b/Modules/Internal/Http/Controllers/Api/CorporateMemberController.php index 93f4e075..52c82bee 100755 --- a/Modules/Internal/Http/Controllers/Api/CorporateMemberController.php +++ b/Modules/Internal/Http/Controllers/Api/CorporateMemberController.php @@ -10,6 +10,7 @@ use App\Models\Member; use Box\Spout\Reader\Common\Creator\ReaderEntityFactory; use Box\Spout\Writer\Common\Creator\WriterEntityFactory; use Box\Spout\Common\Entity\Row; +use Carbon\Carbon; use Illuminate\Contracts\Support\Renderable; use Illuminate\Http\Request; use Illuminate\Routing\Controller; @@ -42,10 +43,10 @@ class CorporateMemberController extends Controller 'claims' => function ($claim) { // return $claim->whereBetween('requested_at', [now()->startOfYear(), now()->endOfYear()]); // return $claim->used(now()->startOfYear(), now()->endOfYear()); - } + }, + 'currentPlan', + 'currentPlan.benefits' ]) - ->with('currentPlan') - // ->with ->paginate() ->appends($request->all()); @@ -231,15 +232,23 @@ class CorporateMemberController extends Controller } - public function generateLog($member_id) + public function generateLog(Request $request, $member_id) { $member = Member::findOrFail($member_id) - ->load(['currentPlan', 'currentPolicy', 'currentPlan.corporateBenefits', 'currentPlan.corporateBenefits.benefit']); + ->load([ + 'currentPlan', + 'currentPolicy', + 'currentPlan.corporateBenefits' => function ($benefit) use ($request) { + return $benefit->when($request->benefit_ids, function ($q, $ids) { + return $q->whereIn('id', $ids); + }); + }, + 'currentPlan.corporateBenefits.benefit']); - // dd($member->currentPlan->corporateBenefits->toArray()); + $dateOfAdmission = $request->date_of_admission ? Carbon::parse($request->date_of_admission) : now(); // return view('pdf.guaranted_leter', compact('member')); - $pdf = PDF::loadView('pdf.guaranted_leter', compact('member')); + $pdf = PDF::loadView('pdf.guaranted_leter', compact(['member', 'dateOfAdmission'])); return $pdf->download('Guaranted Letter - '.$member->full_name.'.pdf'); } } diff --git a/Modules/Internal/Routes/api.php b/Modules/Internal/Routes/api.php index 7041f488..3c8f664c 100755 --- a/Modules/Internal/Routes/api.php +++ b/Modules/Internal/Routes/api.php @@ -131,7 +131,7 @@ Route::prefix('internal')->group(function () { Route::resource('doctors', DoctorController::class); - Route::get('generate-log/{member_id}', [CorporateMemberController::class, 'generateLog']); + Route::post('generate-log/{member_id}', [CorporateMemberController::class, 'generateLog']); Route::get('claim-requests', [ClaimRequestController::class, 'index'])->name('claim-requests.index'); Route::post('claim-requests/{id}/approve', [ClaimRequestController::class, 'approve'])->name('claim-requests.approve'); diff --git a/frontend/dashboard/src/pages/Corporates/Member/List.tsx b/frontend/dashboard/src/pages/Corporates/Member/List.tsx index dac4b68c..14c5a85d 100755 --- a/frontend/dashboard/src/pages/Corporates/Member/List.tsx +++ b/frontend/dashboard/src/pages/Corporates/Member/List.tsx @@ -46,6 +46,7 @@ import { Member } from '../../../@types/member'; import BasePagination from '../../../components/BasePagination'; import { enqueueSnackbar } from 'notistack'; import { LoadingButton } from '@mui/lab'; +import DialogLog from './sections/DialogLog'; export default function CorporatePlanList() { const { themeStretch } = useSettings(); @@ -198,19 +199,17 @@ export default function CorporatePlanList() { enqueueSnackbar('No File Selected', { variant: 'warning' }); } }; - - const handleGetTemplate = (type :string) => { - axios.get('corporates/import-document-example/' + type) - .then((response) => { - const link = document.createElement('a'); - link.href = response.data.data.file_url; - link.setAttribute('download', response.data.data.file_name); - document.body.appendChild(link); - link.click(); - handleClose(); - }) - } + const handleGetTemplate = (type: string) => { + axios.get('corporates/import-document-example/' + type).then((response) => { + const link = document.createElement('a'); + link.href = response.data.data.file_url; + link.setAttribute('download', response.data.data.file_name); + document.body.appendChild(link); + link.click(); + handleClose(); + }); + }; return (
@@ -248,7 +247,13 @@ export default function CorporatePlanList() { }} > Import - {handleGetTemplate('member')}}>Download Template + { + handleGetTemplate('member'); + }} + > + Download Template + )} @@ -329,6 +334,15 @@ export default function CorporatePlanList() { const { row } = props; const [open, setOpen] = React.useState(false); const [loadingLog, setLoadingLog] = React.useState(false); + const [dialogLogOpen, setDialogLogOpen] = React.useState(false); + + // useEffect(function () { + // if (row.full_name == 'Pajri') { + // setDialogLogOpen(true); + // console.log('fuck'); + // } + // }, []); + const handleActivate = (model: any, status: string) => { axios .put(`/members/${row.id}/activation`, { @@ -355,33 +369,7 @@ export default function CorporatePlanList() { ); }); }; - - const handleDownloadLog = (row: ReturnType) => { - setLoadingLog(true); - axios.get(`generate-log/${row.id}`, { - responseType: 'blob' - }) - .then((response) => { - window.open(URL.createObjectURL(response.data)); - // const content = response.headers['content-type']; - // download(response.data, file.file_name, content); - // const link = document.createElement('a'); - // console.log(response.data); - // link.href = response.data.data.file_url; - // link.setAttribute('download', response.data.data.file_name); - // document.body.appendChild(link); - // link.click(); - setLoadingLog(false); - }) - // .then((blobFile) => { - // new File([blobFile], 'asdads.pdf', { type: blobFile.type }) - // setLoadingLog(false); - // }) - .catch((response) => { - enqueueSnackbar(response.message, {variant: 'error'}) - setLoadingLog(false); - }) - } + return ( *': { borderBottom: 'unset' } }}> @@ -546,31 +534,29 @@ export default function CorporatePlanList() { - } - // sx={{ p: 1.8 }} - onClick={() => {handleDownloadLog(row)}} - loading={loadingLog} - > - Download LOG - + } + // sx={{ p: 1.8 }} + // onClick={() => {handleDownloadLog(row)}} + onClick={() => { + setDialogLogOpen(true); + }} + loading={loadingLog} + > + Download LOG + - {/* Sub Corporate - - - - - Sub Corporates (asdasdasdasd) - - - : qweqweqweqwe - - - - */} + diff --git a/frontend/dashboard/src/pages/Corporates/Member/sections/DialogLog.tsx b/frontend/dashboard/src/pages/Corporates/Member/sections/DialogLog.tsx new file mode 100644 index 00000000..81e83298 --- /dev/null +++ b/frontend/dashboard/src/pages/Corporates/Member/sections/DialogLog.tsx @@ -0,0 +1,203 @@ +// react +import { ReactElement, useEffect, useState } from 'react'; +// mui +import { + Card, + Checkbox, + Divider, + Grid, + Input, + Link, + Stack, + Table, + TableCell, + TableContainer, + TableRow, + Typography, +} from '@mui/material'; +import { styled } from '@mui/material/styles'; +// Component +import MuiDialog from '@/components/MuiDialog'; +import { Box } from '@mui/material'; +import { TextField } from '@mui/material'; +import { DesktopDatePicker, LocalizationProvider } from '@mui/x-date-pickers'; +import { AdapterDateFns } from '@mui/x-date-pickers/AdapterDateFns'; +import { fPostFormat } from '@/utils/formatTime'; +import { LoadingButton } from '@mui/lab'; +import InsertDriveFileIcon from '@mui/icons-material/InsertDriveFile'; +import axios from '@/utils/axios'; +import { enqueueSnackbar } from 'notistack'; + +type DataContent = { + info: string; + date: string; + time: string; +}; + +type MuiDialogProps = { + title?: { + name?: string; + icon?: string; + }; + openDialog: boolean; + setOpenDialog: Function; + content?: ReactElement; + data?: DataContent[]; +}; + +const ItemNotificationStyle = styled(Card)(({ theme }) => ({ + boxShadow: 'none', + padding: theme.spacing(1), + borderRadius: 0.5, + color: 'black', +})); + +const DialogLog = ({ title, openDialog, setOpenDialog, data }: MuiDialogProps) => { + const [openDialogClaim, setOpenDialogClaim] = useState(false); + const [dialogTitleClaim, setDialogTitleClaim] = useState(''); + const [dateOfAdmission, setDateOfAdmission] = useState(new Date()); + const [checkedBenefitIds, setCheckedBenefitIds] = useState([]); + const [benefitIds, setBenefitIds] = useState([]); + const [loadingLog, setLoadingLog] = useState(false); + + useEffect(() => { + setBenefitIds(data.member.current_plan?.benefits.map((benefit) => benefit.id)) + setCheckedBenefitIds(benefitIds) + console.log('Check All', benefitIds, 'X', data.member.current_plan?.benefits.map((benefit) => benefit.id)) + }, []) + + const clickHandler = () => { + setDialogTitleClaim('Claim Details'); + setOpenDialogClaim(true); + }; + + const handleCheckAll = (event) => { + if (event.target.checked) { + setCheckedBenefitIds(benefitIds) + } else { + setCheckedBenefitIds([]) + } + } + + const handleCheckChange = (event, benefit) => { + if ( event.target.checked ) { + setCheckedBenefitIds([...checkedBenefitIds, benefit.id]) + } else { + // setCheckedBenefitIds([]) + setCheckedBenefitIds(checkedBenefitIds.filter((benefitId) => benefitId !== benefit.id)) + } + } + + const handleDownloadLog = (row) => { + setLoadingLog(true); + axios + .post(`generate-log/${row.id}`, { + date_of_admission : dateOfAdmission, + benefit_ids : checkedBenefitIds + }, { + responseType: 'blob', + }) + .then((response) => { + window.open(URL.createObjectURL(response.data)); + setLoadingLog(false); + setOpenDialog(false); + }) + .catch((response) => { + enqueueSnackbar(response.message, { variant: 'error' }); + setLoadingLog(false); + }); + } + + const getContent = () => ( + + + + + + + { + setDateOfAdmission(new Date(fPostFormat(value))); + // console.log('value') + }} + renderInput={(params) => ( + + )} + /> + + + + + List Of Benefit + + + All + + + + + + }> + { data.member.current_plan?.benefits && ( + data.member.current_plan?.benefits.map((benefit, index) => ( + + + {benefit.code} {benefit.description ? ` - ${benefit.description} ` : ''} + + {handleCheckChange(event, benefit)} } /> + + )) + )} + + {/* + + + + ASD + + + ASD + + +
+
*/} +
+ + + } + onClick={() => {handleDownloadLog(data.member)}} + loading={loadingLog} + > + Download LOG + + +
+
+
+
+ ); + + return ( + <> + + + ); +}; + +export default DialogLog; diff --git a/resources/views/pdf/guaranted_leter.blade.php b/resources/views/pdf/guaranted_leter.blade.php index f93a1fd5..5c25fdeb 100644 --- a/resources/views/pdf/guaranted_leter.blade.php +++ b/resources/views/pdf/guaranted_leter.blade.php @@ -127,7 +127,7 @@ @if (isset($claimRequest))
{{ !empty($claimRequest->submission_date) ? \Carbon\Carbon::parse($claimRequest->submission_date)->format('d/m/Y') : now()->format('d/m/Y') }}
@else -
{{ !empty($member->endorsement_date) ? \Carbon\Carbon::parse($member->endorsement_date)->format('d/m/Y') : $member->created_at->format('d/m/Y') }}
+
{{ $dateOfAdmission->format('d/m/Y') }}
@endif