diff --git a/Modules/Internal/Http/Controllers/Api/CorporateController.php b/Modules/Internal/Http/Controllers/Api/CorporateController.php
index 91870d34..8208ca90 100644
--- a/Modules/Internal/Http/Controllers/Api/CorporateController.php
+++ b/Modules/Internal/Http/Controllers/Api/CorporateController.php
@@ -575,6 +575,12 @@ class CorporateController extends Controller
"file_url" => url('files/Template Import Request LOG.xlsx')
]);
break;
+ case 'final-log-invoice':
+ return Helper::responseJson([
+ 'file_name' => "Template Import Invoice.xlsx",
+ "file_url" => url('files/Template Import Invoice.xlsx')
+ ]);
+ break;
default:
return Helper::responseJson([], 'error', 404);
break;
diff --git a/Modules/Internal/Http/Controllers/Api/RequestLogController.php b/Modules/Internal/Http/Controllers/Api/RequestLogController.php
index 6418e627..05af4eeb 100644
--- a/Modules/Internal/Http/Controllers/Api/RequestLogController.php
+++ b/Modules/Internal/Http/Controllers/Api/RequestLogController.php
@@ -22,6 +22,8 @@ use Carbon\Carbon;
use Maatwebsite\Excel\Facades\Excel;
use Box\Spout\Reader\Common\Creator\ReaderEntityFactory;
use Box\Spout\Writer\Common\Creator\WriterEntityFactory;
+use Box\Spout\Writer\Common\Creator\Style\StyleBuilder;
+use Box\Spout\Common\Entity\Style\CellAlignment;
use Exception;
@@ -212,7 +214,7 @@ class RequestLogController extends Controller
});
return Helper::responseJson(data: $manipulatedIcds);
}
-
+
public function hospitals(){
$organizations = Organization::query()
->where([
@@ -330,7 +332,7 @@ class RequestLogController extends Controller
// Hapus semua manfaat log permintaan terkait
RequestLogBenefit::where('request_log_id', $id)->delete();
-
+
return response()->json([
'error' => false,
'message' => 'Delete Final LOG',
@@ -461,7 +463,7 @@ class RequestLogController extends Controller
// if($requestLog->service_code != 'IP'){
// $requestLog->discharge_date = Carbon::now();
// }
-
+
$requestLog->save();
@@ -670,6 +672,181 @@ class RequestLogController extends Controller
];
}
+ public function importInvoice(Request $request)
+ {
+ if ($request->hasFile('file')) {
+ $file = $request->file('file');
+ $data = Excel::toArray([], $file);
+
+ $processedData = $this->processCategoryNames($data);
+
+ $importedRows = 0;
+ $result_rows = [];
+ $failedRows = [];
+
+ foreach ($processedData as $row) {
+ if($row['code'])
+ {
+ try {
+ $affectedRows = DB::table('request_logs')
+ ->where('code','=', $row['code'])
+ ->update([
+ 'invoice_no' => $row['invoice_no'],
+ 'billing_no' => $row['billing_no'],
+ ]);
+
+ if ($affectedRows === 0) {
+ $row['code_error'] = '500';
+ $row['error'] = 'Gagal update karena data sudah ada ';
+ $result_rows[] = $row;
+ $failedRows[] = $row;
+ } else {
+ $importedRows += $affectedRows;
+ $row['code_error'] = '200';
+ $row['error'] = 'Sukses';
+ $result_rows[] = $row;
+ }
+ } catch (\Exception $e) {
+ $row['code_error'] = '500';
+ $row['error'] = $e->getMessage();
+ if(!$row['code'])
+ {
+ $row['error'] = 'Kolom Code wajib isi';
+ }
+ if(!$row['invoice_no'])
+ {
+ $row['error'] = 'No Invoice wajib isi';
+ }
+ if(!$row['billing_no'])
+ {
+ $row['error'] = 'No Billing wajib isi';
+ }
+ $result_rows[] = $row;
+ $failedRows[] = $row;
+ }
+ }
+ }
+
+ $response = [
+ 'message' => 'File uploaded and data saved to database',
+ 'metaData' => 'invoice',
+ 'data' => [
+ 'total_success_row' => $importedRows,
+ 'total_failed_row' => count($failedRows),
+ 'result_rows' => $result_rows,
+ ],
+ ];
+
+ return response()->json($response);
+ }
+
+ return response()->json(['error' => 'No file uploaded.']);
+ }
+
+ private function processCategoryNames($data)
+ {
+ $header = [];
+ $row = [];
+ for ($i = 1; $i < count($data[0]); $i++) {
+ $row[] = $data[0][$i];
+ $header[] = $data[0][0];
+ }
+
+ $filed = [];
+ foreach ($header[0] as $value)
+ {
+ $modelColumn = strtolower(preg_replace('/\s+/', '_', trim($value)));
+ $modelColumn = str_replace(['*', ' '], '', $modelColumn);
+ if($modelColumn)
+ {
+ $filed[] = $modelColumn;
+ }
+ }
+
+ $result = [];
+ foreach ($row as $subarray) {
+ $trimmedSubarray = [];
+ for ($i = 0; $i < count($filed); $i++) {
+ $trimmedSubarray[$filed[$i]] = $subarray[$i] ? $subarray[$i] : null;
+ }
+
+ $result[] = $trimmedSubarray;
+ }
+ return $result;
+ }
+
+ public function exportFiledInvoice(Request $request)
+ {
+ $writer = WriterEntityFactory::createXLSXWriter();
+ $writer->openToFile(public_path('files/Report-Data-Result-Import.xlsx'));
+ $header = [
+ 'Code*',
+ 'Inovice No*',
+ 'Billing NO*',
+ 'Ingest Code',
+ 'Ingest Note'
+ ];
+ $style = (new StyleBuilder())
+ ->setFontBold()
+ // ->setFontSize(15)
+ // ->setFontColor(Color::BLUE)
+ // ->setShouldWrapText()
+ ->setCellAlignment(CellAlignment::LEFT)
+ // ->setBackgroundColor(Color::YELLOW)
+ ->build();
+
+ $headerRow = WriterEntityFactory::createRowFromArray($header, $style);
+ $writer->addRow($headerRow);
+ // ============================
+
+ foreach($request->params as $item)
+ {
+
+ $rowData = [
+ $item['code'],
+ $item['invoice_no'],
+ $item['billing_no'],
+ $item['code_error'],
+ $item['error']
+ ];
+ $style = (new StyleBuilder())
+ //->setFontBold()
+ // ->setFontSize(15)
+ // ->setFontColor(Color::BLUE)
+ // ->setShouldWrapText()
+ ->setCellAlignment(CellAlignment::LEFT)
+ // ->setBackgroundColor(Color::YELLOW)
+ ->build();
+ $row = WriterEntityFactory::createRowFromArray($rowData, $style);
+ $writer->addRow($row);
+ }
+ $footer = [
+ '',
+ '',
+ '',
+ '',
+ ''
+ ];
+ $style = (new StyleBuilder())
+ ->setFontBold()
+ // ->setFontSize(15)
+ // ->setFontColor(Color::BLUE)
+ // ->setShouldWrapText()
+ ->setCellAlignment(CellAlignment::LEFT)
+ // ->setBackgroundColor(Color::YELLOW)
+ ->build();
+
+ $footerRow = WriterEntityFactory::createRowFromArray($footer, $style);
+ $writer->addRow($footerRow);
+
+ $writer->close();
+
+ return Helper::responseJson([
+ 'file_name' => 'Report-Data-Result-Import',
+ "file_url" => url('files/Report-Data-Result-Import.xlsx')
+ ]);
+ }
+
public function claimRequestDetail($claimRequestId)
{
$status = DB::table('claim_requests')
@@ -962,7 +1139,7 @@ class RequestLogController extends Controller
// Menghapus file dari penyimpanan
if (Storage::exists($path)) {
Storage::delete($path);
-
+
// Update entri file dari basis data
File::where('path', $request->path)->update([
'deleted_at' => Carbon::now(), // Gunakan Carbon untuk mendapatkan tanggal dan waktu saat ini
diff --git a/Modules/Internal/Routes/api.php b/Modules/Internal/Routes/api.php
index 56fc9861..c0a19526 100644
--- a/Modules/Internal/Routes/api.php
+++ b/Modules/Internal/Routes/api.php
@@ -278,6 +278,8 @@ Route::prefix('internal')->group(function () {
Route::put('customer-service/request/final_log/{id}', [RequestLogController::class, 'deleteFinalLog']);
Route::get('customer-service/request/{id}/download', [RequestLogController::class, 'generateRequestLog']);
Route::post('customer-service/request/import', [RequestLogController::class, 'importRequestLog']);
+ Route::post('customer-service/request/import-invoice', [RequestLogController::class, 'importInvoice']);
+ Route::post('customer-service/request/exportFiledInvoice', [RequestLogController::class, 'exportFiledInvoice']);
Route::get('customer-service/request/data', [RequestLogController::class, 'generateDataRequestLogExcel']);
Route::post('customer-service/request/{id}/add_file', [RequestLogController::class, 'requestFiles']);
Route::post('customer-service/request/{id}/delete_file', [RequestLogController::class, 'deleteFiles']);
@@ -306,13 +308,13 @@ Route::prefix('internal')->group(function () {
Route::resource('appointments', AppointmentController::class);
Route::get('live-chat/export', [LivechatController::class, 'export']);
Route::resource('live-chat', LivechatController::class);
-
+
Route::get('prescription', [PrescriptionController::class, 'index']);
Route::post('prescription', [PrescriptionController::class, 'store']);
Route::get('prescription-download/{id}', [PrescriptionController::class, 'downloadPrescription']);
-
+
Route::get('prescription/{id}', [PrescriptionController::class, 'index']);
Route::get('doctorrating', [DoctorRatingController::class, 'index']);
Route::get('doctorrating/{id}', [PrescriptionController::class, 'index']);
diff --git a/frontend/dashboard/src/pages/CustomerService/FinalLog/List.tsx b/frontend/dashboard/src/pages/CustomerService/FinalLog/List.tsx
index 40d31b34..cd580050 100644
--- a/frontend/dashboard/src/pages/CustomerService/FinalLog/List.tsx
+++ b/frontend/dashboard/src/pages/CustomerService/FinalLog/List.tsx
@@ -115,13 +115,12 @@ export default function List() {
const handleClose = () => {
setAnchorEl(null);
};
-
- const handleImportButton = () => {
+ const [paramImport, setParamImport] = useState('');
+ const handleImportButton = (param:any) => {
+ setParamImport(param);
if (importForm?.current) {
handleClose();
importForm.current ? importForm.current.click() : console.log('No File selected');
- } else {
- alert('No file selected');
}
};
@@ -144,12 +143,18 @@ export default function List() {
formData.append('file', importForm.current?.files[0]);
setImportLoading(true);
+ let url = 'claim-requests/import';
+ if(paramImport == 'invoice')
+ {
+ url = 'customer-service/request/import-invoice'
+ }
axios
- .post(`claim-requests/import`, formData)
+ .post(`${url}`, formData)
.then((response) => {
handleCancelImportButton();
- loadDataTableData();
+ // loadDataTableData();
setImportResult(response.data);
+ setParamImport(response.data.metaData);
// alert('Succesfully read '+ response.data.total_successed_row + ' with ' + response.data.total_failed_row + ' failed rows');
setImportLoading(false);
})
@@ -166,6 +171,28 @@ export default function List() {
}
};
+ const handleExportReportFiled = async () => {
+
+ await axios
+ .post('customer-service/request/exportFiledInvoice', { params: importResult?.data.result_rows })
+ .then((res) => {
+ enqueueSnackbar('Data berhasil di Export', {
+ variant: 'success',
+ anchorOrigin: { horizontal: 'right', vertical: 'top' },
+ });
+ setImportLoading(false);
+
+ document.location.href = res.data.data.file_url;
+ })
+ .catch((err) =>
+ enqueueSnackbar('Data Gagal di Export', {
+ variant: 'error',
+ anchorOrigin: { horizontal: 'right', vertical: 'top' },
+ })
+
+ );
+ };
+
const handleGetTemplate = (type :string) => {
axios.get('corporates/import-document-example/' + type)
.then((response) => {
@@ -220,9 +247,11 @@ export default function List() {
'aria-labelledby': 'basic-button',
}}
>
-
+
+
+
{/*