diff --git a/Modules/Internal/Http/Controllers/Api/CorporateMemberController.php b/Modules/Internal/Http/Controllers/Api/CorporateMemberController.php index 19fc5583..549a01a0 100644 --- a/Modules/Internal/Http/Controllers/Api/CorporateMemberController.php +++ b/Modules/Internal/Http/Controllers/Api/CorporateMemberController.php @@ -20,6 +20,7 @@ use Modules\Internal\Services\MemberEnrollmentService; use PDF; use Illuminate\Support\Facades\DB; use Illuminate\Database\Eloquent\Builder; +use Illuminate\Support\Facades\File; class CorporateMemberController extends Controller { @@ -393,4 +394,36 @@ class CorporateMemberController extends Controller "file_url" => url('files/CorporateMembershipList.xlsx') ]); } + + public function sendAllECard(Request $request, $corporate_id){ + $members = DB::table('members') + ->leftJoin('corporate_employees', 'members.id', '=', 'corporate_employees.member_id') + ->where('corporate_employees.corporate_id', $corporate_id) + ->get() + ->toArray(); + + + foreach($members as $member){ + $pdf = PDF::loadView('pdf.ecard', compact(['member'])); + // Simpan file PDF ke direktori yang diinginkan + $pdfPath = storage_path('app/pdf/ecards/E-card-' . $member->name . '.pdf'); + // Cek apakah file sudah ada + if (!File::exists($pdfPath)) { + $pdf = PDF::loadView('pdf.ecard', compact('member')); + $pdf->save($pdfPath); + } + + $dataEmail = [ + 'email' => $member->email, + 'name' => $member->name, + 'subject' => 'Digital E Card '. $member->name, + 'body' => '

Hi ' . $member->name . '

', + 'attach' => $pdfPath, + ]; + $sendEmail = Helper::sendEmailattachData($dataEmail); + } + + return true; + + } } diff --git a/Modules/Internal/Http/Controllers/Api/DailyMonitoringController.php b/Modules/Internal/Http/Controllers/Api/DailyMonitoringController.php index 09347128..1d70de74 100644 --- a/Modules/Internal/Http/Controllers/Api/DailyMonitoringController.php +++ b/Modules/Internal/Http/Controllers/Api/DailyMonitoringController.php @@ -68,7 +68,7 @@ class DailyMonitoringController extends Controller $claimList = DB::table('request_logs') ->leftJoin('services', 'services.code', '=', 'request_logs.service_code') ->leftJoin('members', 'members.id', '=', 'request_logs.member_id') - ->select('request_logs.id','request_logs.submission_date AS admission_date','request_logs.discharge_date','request_logs.code','services.name as service_name','request_logs.status','members.name',) + ->select('request_logs.id','request_logs.submission_date AS admission_date','request_logs.discharge_date','request_logs.code','services.name as service_name','request_logs.status','members.name', 'members.member_id') ->where('request_logs.service_code', 'IP') ->where('request_logs.status_final_log', 'approved') ->where("request_logs.member_id", "=", $memberDetail->id) diff --git a/Modules/Internal/Routes/api.php b/Modules/Internal/Routes/api.php index c97454bd..4a262d30 100644 --- a/Modules/Internal/Routes/api.php +++ b/Modules/Internal/Routes/api.php @@ -284,6 +284,8 @@ Route::prefix('internal')->group(function () { Route::resource('doctors', DoctorController::class); Route::post('generate-log/{member_id}', [CorporateMemberController::class, 'generateLog']); + + Route::post('send_card/{corporate_id}', [CorporateMemberController::class, 'sendAllECard']); Route::controller(ClaimRequestController::class)->group(function () { Route::post('files-mcu', 'filesMcu'); }); diff --git a/app/Helpers/Helper.php b/app/Helpers/Helper.php index 5ce5c9a4..12eb9f96 100644 --- a/app/Helpers/Helper.php +++ b/app/Helpers/Helper.php @@ -317,7 +317,6 @@ class Helper { // Buat instance PHPMailer $mail = new PHPMailer(true); - try { // Server settings $mail->isSMTP(); @@ -341,8 +340,46 @@ class Helper // Kirim email $mail->send(); return true; + } catch (\Exception $e) { - //var_dump($mail->ErrorInfo);die(); + dd($e); + return ($mail->ErrorInfo); + return false; + } + } + + public static function sendEmailattachData($data = array()) + { + // Buat instance PHPMailer + $mail = new PHPMailer(true); + try { + // Server settings + $mail->isSMTP(); + $mail->Host = 'smtp.gmail.com'; + $mail->SMTPAuth = true; + $mail->Username = env('EMAIL'); + $mail->Password = env('PW_EMAIL'); + $mail->SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS; + $mail->Port = 465; + $mail->SMTPSecure = "ssl"; + + // Penerima email + $mail->setFrom(env('EMAIL'), env('NAME_EMAIL')); + $mail->addAddress($data['email'], $data['name']); + + // Konten email + $mail->isHTML(true); + $mail->Subject = $data['subject']; + $mail->Body = $data['body']; + $mail->addAttachment($data['attach'], 'e-card.pdf'); + + // Kirim email + $mail->send(); + return true; + + } catch (\Exception $e) { + dd($mail->ErrorInfo); + return ($mail->ErrorInfo); return false; } } diff --git a/frontend/dashboard/src/pages/CaseManagement/DailyMonitoring/Components/ClaimListRow.tsx b/frontend/dashboard/src/pages/CaseManagement/DailyMonitoring/Components/ClaimListRow.tsx index 67e46a89..3b758f82 100644 --- a/frontend/dashboard/src/pages/CaseManagement/DailyMonitoring/Components/ClaimListRow.tsx +++ b/frontend/dashboard/src/pages/CaseManagement/DailyMonitoring/Components/ClaimListRow.tsx @@ -89,11 +89,11 @@ export default function ClaimListRow ({ ...props }: Props) { - navigate(`/case_management/daily_monitoring/${props.row.member_id}/claims/${props.row.claim_code}/list_monitoring`)}> + navigate(`/case_management/daily_monitoring/${props.row.member_id}/claims/${props.row.code}/list_monitoring`)}> View - navigate(`/case_management/daily_monitoring/${props.row.member_id}/claims/${props.row.claim_code}/add_monitoring`)}> + navigate(`/case_management/daily_monitoring/${props.row.member_id}/claims/${props.row.code}/add_monitoring`)}> Daily Monitoring diff --git a/frontend/dashboard/src/pages/CaseManagement/DailyMonitoring/Components/DetailMonitoringForm.tsx b/frontend/dashboard/src/pages/CaseManagement/DailyMonitoring/Components/DetailMonitoringForm.tsx index b06b9721..fae9e07d 100644 --- a/frontend/dashboard/src/pages/CaseManagement/DailyMonitoring/Components/DetailMonitoringForm.tsx +++ b/frontend/dashboard/src/pages/CaseManagement/DailyMonitoring/Components/DetailMonitoringForm.tsx @@ -4,7 +4,7 @@ */ import { useFieldArray, useForm } from 'react-hook-form'; import { useNavigate, useParams } from 'react-router-dom'; -import { Box, IconButton, Typography, Grid, Card, Button } from '@mui/material'; +import { Box, IconButton, Typography, Grid, Card, Button, ButtonBase } from '@mui/material'; import { LoadingButton } from "@mui/lab"; /** @@ -28,11 +28,16 @@ import RemoveIcon from '@mui/icons-material/Remove'; */ import { AddMonitoringDetail } from '../Model/Functions'; import { DetailMonitoringListType} from '../Model/Types'; +import FormCreateFilesUpload from '@/pages/CustomerService/FinalLog/Components/FormCreateFilesUpload'; +import MultiFilePreview from '@/components/upload/MultiFilePreview'; +import Iconify from '@/components/Iconify'; +import { useRef } from 'react'; export default function DetailMonitoringList() { const { member_id, claim_code } = useParams(); const navigate = useNavigate() const pageTitle = claim_code??'_ _ _ _'; + const fileInput = useRef(null); // setup form // ==================================== @@ -50,6 +55,9 @@ export default function DetailMonitoringList() { medical_plan : [{ medical_plan_str: '' }], + non_medikamentosa_plan : [{ + non_medikamentosa_plan_str: '' + }], created_at : '' }; @@ -57,9 +65,37 @@ export default function DetailMonitoringList() { defaultValues }); - const {fields, append, remove} = useFieldArray({name: 'medical_plan',control: methods.control}) + const {fields: fields1, append: append1, remove: remove1} = useFieldArray({name: 'medical_plan',control: methods.control}) + const {fields: fields2, append: append2, remove: remove2} = useFieldArray({name: 'non_medikamentosa_plan',control: methods.control}) - const { handleSubmit, reset, formState: { isDirty, isSubmitting } } = methods; + const { handleSubmit, reset, watch, setValue, formState: { isDirty, isSubmitting } } = methods; + const formValues = watch(); + // Handle File Input + // ===================================== + const handleInputChange = (event: any) => { + if (event.target.files[0]) { + + let arr_lab_result_file = formValues.lab_result_file; + arr_lab_result_file.push(event.target.files[0]); + + setValue('lab_result_file', arr_lab_result_file) + } + else { + console.log('NO FILE'); + } + }; + + // Handle Remove File + // ===================================== + const handleRemoveFile = (target_index: number) => { + let arr_lab_result_file = formValues.lab_result_file.filter((file: any, index: number) =>{ + if (target_index !== index) { + return file; + } + }); + + setValue('lab_result_file', arr_lab_result_file) + }; // Submit Form // ===================================== @@ -197,7 +233,7 @@ export default function DetailMonitoringList() { {/* Complaints */} - + {/* @@ -212,7 +248,7 @@ export default function DetailMonitoringList() { /> - + */} {/* Analysis */} @@ -242,7 +278,7 @@ export default function DetailMonitoringList() { { - fields.map((field,index) => { + fields1.map((field,index) => { return ( @@ -253,10 +289,10 @@ export default function DetailMonitoringList() { /> { - index == (fields.length-1) ? + index == (fields1.length-1) ? ( - append({medical_plan_str: ''})}> + append1({medical_plan_str: ''})}> @@ -264,7 +300,7 @@ export default function DetailMonitoringList() { : ( - remove(index)}> + remove1(index)}> @@ -278,6 +314,110 @@ export default function DetailMonitoringList() { + {/* Non Medikamentosa Plan* */} + + + + + Non Medikamentosa Plan* : + + + + { + fields2.map((field,index) => { + return ( + + + + + { + index == (fields2.length-1) ? + ( + + append2({non_medikamentosa_plan_str: ''})}> + + + + ) + : + ( + + remove2(index)}> + + + + ) + } + + ) + }) + } + + + + + {/* Confirmation Medical Letter */} + + + + + Confirmation Medical Letter* + + + + { + formValues.lab_result_file.map((file: any, index: number) => ( + + + + {file.name ? file.name : '-'} + + handleRemoveFile(index)} + sx={{cursor: 'pointer'}} + > + + )) + } + + + fileInput.current?.click()}> + + + + Upload Result + + + + + + + + + + {/* Medical Action Letter */} + {/* Button Cancle & Save */} diff --git a/frontend/dashboard/src/pages/CaseManagement/DailyMonitoring/Model/Types.ts b/frontend/dashboard/src/pages/CaseManagement/DailyMonitoring/Model/Types.ts index 216c89e0..5d8c058d 100644 --- a/frontend/dashboard/src/pages/CaseManagement/DailyMonitoring/Model/Types.ts +++ b/frontend/dashboard/src/pages/CaseManagement/DailyMonitoring/Model/Types.ts @@ -35,6 +35,8 @@ export type ClaimListType = { admission_date : string, discharge_date : string, claim_code : string, + code : string, + service_name : string, claim_status : string, service_type : string, member_id : string @@ -55,9 +57,14 @@ export type DetailMonitoringListType = { analysis : string, complaints : string, medical_plan : MedicalPlanStrType[], + non_medikamentosa_plan : NonMedikamentosaPlanType[], created_at : string|null } export type MedicalPlanStrType = { medical_plan_str: string } + +export type NonMedikamentosaPlanType = { + non_medikamentosa_plan_str: string +}