diff --git a/Modules/HospitalPortal/Http/Controllers/Api/ClaimRequestController.php b/Modules/HospitalPortal/Http/Controllers/Api/ClaimRequestController.php index 332bbbeb..1d03ab6c 100644 --- a/Modules/HospitalPortal/Http/Controllers/Api/ClaimRequestController.php +++ b/Modules/HospitalPortal/Http/Controllers/Api/ClaimRequestController.php @@ -108,7 +108,7 @@ class ClaimRequestController extends Controller } } - if ($request->hasFile('result_files')) { + if ($request->hasFile('kondisi_files')) { foreach ($request->result_files as $file) { $pathFile = File::storeFile('claim-kondisi', $newClaimRequest->id, $file); $newClaimRequest->files()->updateOrCreate([ diff --git a/Modules/Internal/Http/Controllers/Api/ClaimRequestController.php b/Modules/Internal/Http/Controllers/Api/ClaimRequestController.php index d85e6e9e..615f2cc2 100644 --- a/Modules/Internal/Http/Controllers/Api/ClaimRequestController.php +++ b/Modules/Internal/Http/Controllers/Api/ClaimRequestController.php @@ -10,6 +10,8 @@ use Illuminate\Http\Request; use Illuminate\Routing\Controller; use Modules\Internal\Transformers\ClaimRequestResource; use Modules\Internal\Transformers\ClaimRequestShowResource; +use App\Models\File; +use App\Models\FilesMcu; class ClaimRequestController extends Controller { @@ -140,4 +142,27 @@ class ClaimRequestController extends Controller return $claimRequest; } + public function filesMcu(Request $request) + { + $request->validate([ + 'id' => 'required', + 'member_id' => 'required' + ]); + if ($request->hasFile('result_files')) { + $pathFile = File::storeFile('claim-result', $request->id, $request->result_files); + $data = [ + 'member_id' => $request->id, + 'path' => $pathFile, + 'created_by' => auth()->user()->id + ]; + FilesMcu::create($data); + return Helper::responseJson(data: $request->toArray(), message: 'Berhasil tambah file member '.$request->member_id.', silahkan lihat dilaporan'); + } + else + { + return Helper::responseJson(data: $request->toArray(), message: 'Tidak ada file member yang ditambahkan'); + } + + } + } diff --git a/Modules/Internal/Http/Controllers/ClaimEncounterController.php b/Modules/Internal/Http/Controllers/ClaimEncounterController.php index 9eea7c46..a1f6179b 100644 --- a/Modules/Internal/Http/Controllers/ClaimEncounterController.php +++ b/Modules/Internal/Http/Controllers/ClaimEncounterController.php @@ -263,7 +263,7 @@ class ClaimEncounterController extends Controller } } - public function x`counters($claim_id) + public function xcounters($claim_id) { $claim = Claim::findOrFail($claim_id); $encounters = $claim->encounters()->get(); diff --git a/Modules/Internal/Routes/api.php b/Modules/Internal/Routes/api.php index d13e0f47..716e4b7f 100644 --- a/Modules/Internal/Routes/api.php +++ b/Modules/Internal/Routes/api.php @@ -158,7 +158,9 @@ Route::prefix('internal')->group(function () { Route::resource('doctors', DoctorController::class); Route::post('generate-log/{member_id}', [CorporateMemberController::class, 'generateLog']); - + Route::controller(ClaimRequestController::class)->group(function(){ + Route::post('files-mcu','filesMcu'); + }); Route::get('claim-requests', [ClaimRequestController::class, 'index'])->name('claim-requests.index'); Route::post('claim-requests/{id}/approve', [ClaimRequestController::class, 'approve'])->name('claim-requests.approve'); Route::get('claim-requests/{id}', [ClaimRequestController::class, 'show'])->name('claim-requests.show'); diff --git a/app/Models/FilesMcu.php b/app/Models/FilesMcu.php new file mode 100644 index 00000000..94de6c75 --- /dev/null +++ b/app/Models/FilesMcu.php @@ -0,0 +1,14 @@ +increments('id'); + $table->integer('member_id'); + $table->string('path'); + $table->integer('created_by'); + $table->integer('updated_by')->default(0); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('filesmcu'); + } +}; diff --git a/frontend/dashboard/package.json b/frontend/dashboard/package.json index 7cc59630..d01822ef 100644 --- a/frontend/dashboard/package.json +++ b/frontend/dashboard/package.json @@ -38,6 +38,7 @@ ] }, "dependencies": { + "@ajoelp/json-to-formdata": "^1.5.0", "@date-io/date-fns": "^2.16.0", "@emotion/cache": "^11.10.5", "@emotion/react": "^11.10.5", diff --git a/frontend/dashboard/src/pages/Corporates/Member/List.tsx b/frontend/dashboard/src/pages/Corporates/Member/List.tsx index ee7051e3..9d0f5199 100644 --- a/frontend/dashboard/src/pages/Corporates/Member/List.tsx +++ b/frontend/dashboard/src/pages/Corporates/Member/List.tsx @@ -28,7 +28,9 @@ import { ButtonGroup, Grid, Tooltip, + Divider, } from '@mui/material'; +import Iconify from '@/components/Iconify'; import KeyboardArrowDownIcon from '@mui/icons-material/KeyboardArrowDown'; import KeyboardArrowRightIcon from '@mui/icons-material/KeyboardArrowRight'; import AddIcon from '@mui/icons-material/Add'; @@ -49,8 +51,34 @@ import { enqueueSnackbar } from 'notistack'; import { LoadingButton } from '@mui/lab'; import DialogLog from './sections/DialogLog'; import HistoryIcon from '@mui/icons-material/History'; +import { makeFormData } from '@/utils/jsonToFormData'; -export default function CorporatePlanList() { +export default function CorporatePlanList({handleSubmitSuccess}) { + // Files MCU + const fileMcuInput = useRef(null); + const [fileMcus, setFileMcus] = useState([]); + + const handleMcuInputChange = (id, member_id) => (event) => { + if (event.target.files[0]) { + const updatedFiles = Array.from(event.target.files).map((file) => ({ + file, + id + })); + setFileMcus((prevFileMcus) => { + const newFileMcus = [...prevFileMcus, ...updatedFiles]; + submitRequest(id, newFileMcus, member_id); + return newFileMcus; + }); + } else { + console.log('Tidak ada file'); + } + }; + const removeMcuFiles = (id, index) => { + setFileMcus((filesState) => + filesState.filter((file, fileIndex) => fileIndex !== index || file.id !== id) + ); + }; + const [submitLoading, setSubmitLoading] = useState(false); const { themeStretch } = useSettings(); const { corporate_id } = useParams(); const [searchParams, setSearchParams] = useSearchParams(); @@ -149,6 +177,44 @@ export default function CorporatePlanList() { ); } + function submitRequest(id, newFileMcus, member_id) { + setSubmitLoading(true); + if (newFileMcus && newFileMcus.length > 0) { + const fileWithId = newFileMcus.find((file) => file.id === id); + if (fileWithId) { + const formData = makeFormData({ + id: id, + member_id: member_id, + result_files: fileWithId.file, + }); + axios + .post('/files-mcu', formData) + .then((response) => { + const responseData = response?.data; + if(responseData) + { + enqueueSnackbar(responseData.message ?? 'Berhasil tambah file member '+member_id+', silahkan lihat dilaporan', { variant: 'success' }); + handleSubmitSuccess(); + } + + }) + .catch(({ response }) => { + const responseData = response?.data; + if(responseData) + { + enqueueSnackbar(responseData.message ?? 'Something Went Wrong', { variant: 'error' }); + } + }) + .then(() => { + setSubmitLoading(false); + }); + + } else { + console.log(`File dengan ID ${id} tidak ditemukan`); + } + } + } + // End Files MCU function ImportForm(props: any) { // IMPORT @@ -178,9 +244,7 @@ export default function CorporatePlanList() { const handleMemberList = async (appliedFilter = null) => { axios.get('corporates/' + corporate_id + '/members/list').then((response) => { - console.log(response); const link = document.createElement('a'); - console.log(response.data.data.file_name); link.href = response.data.data.file_url; link.setAttribute('download', response.data.data.file_name); document.body.appendChild(link); @@ -578,20 +642,66 @@ export default function CorporatePlanList() { - - } - // sx={{ p: 1.8 }} - // onClick={() => {handleDownloadLog(row)}} - onClick={() => { - setDialogLogOpen(true); - }} - loading={loadingLog} - > - Download LOG - + + + } + // sx={{ p: 1.8 }} + // onClick={() => {handleDownloadLog(row)}} + onClick={() => { + setDialogLogOpen(true); + }} + loading={loadingLog} + > + Download LOG + + + {/* -------------------------------Upload Dokumen MCU------------------------------- */} + + {/*} + spacing={1} + sx={{ marginY: 2}} + > + {fileMcus && + fileMcus + .filter((datas) => datas.id === row.id) + .map((datas, index) => ( + + {datas.file.name} + { + removeMcuFiles(datas.id, index); + }} + sx={{ cursor: 'pointer' }} + > + + ))} + */} + { + handleMcuInputChange(row.id, row.member_id)(event); + }} + accept="application/pdf" + /> + { + fileMcuInput.current.click(); + }} + > + + Add Result + +