diff --git a/Modules/Internal/Http/Controllers/Api/DoctorOnlineController.php b/Modules/Internal/Http/Controllers/Api/DoctorOnlineController.php index faf7b23f..d7571212 100755 --- a/Modules/Internal/Http/Controllers/Api/DoctorOnlineController.php +++ b/Modules/Internal/Http/Controllers/Api/DoctorOnlineController.php @@ -84,69 +84,76 @@ class DoctorOnlineController extends Controller public function export(Request $request) { + // Menyimpan tanggal mulai dan tanggal selesai dari request $start_date = $request->input('start_date') ? $request->input('start_date') : 'all'; $end_date = $request->input('end_date') ? $request->input('end_date') : 'all'; + + // Membuat writer untuk file XLSX $writer = WriterEntityFactory::createXLSXWriter(); - $writer->openToFile(public_path('files/Report-Data-Rating-Dokter-'.$start_date.'-'.$end_date.'.xlsx')); + + // Pastikan folder 'files' ada dan bisa ditulis + $filePath = public_path('files'); + if (!is_dir($filePath)) { + mkdir($filePath, 0755, true); // Membuat folder jika belum ada + } + + // Menyimpan file Excel ke folder yang sesuai + $fileName = 'Report-Data-Rating-Dokter-' . $start_date . '-' . $end_date . '.xlsx'; + $writer->openToFile(public_path('files/' . $fileName)); + + // Header Excel $header = [ 'No', 'Nama Dokter', 'Date', 'Status', ]; - $style = (new StyleBuilder()) - ->setFontBold() - // ->setFontSize(15) - // ->setFontColor(Color::BLUE) - // ->setShouldWrapText() - ->setCellAlignment(CellAlignment::LEFT) - // ->setBackgroundColor(Color::YELLOW) - ->build(); - $headerRow = WriterEntityFactory::createRowFromArray($header, $style); + // Styling untuk header (bold) + $headerStyle = (new StyleBuilder()) + ->setFontBold() // Menambahkan font bold hanya pada header + ->setCellAlignment(CellAlignment::LEFT) + ->build(); + + // Menambahkan header ke dalam file + $headerRow = WriterEntityFactory::createRowFromArray($header, $headerStyle); $writer->addRow($headerRow); - // ============================ - $results = DB::connection('oldlms')->table('tx_users_online') - ->leftJoin('tm_users', 'tx_users_online.nIDUser', '=', 'tm_users.nID') - ->when($request->input('search'), function ($query, $search) { - $query->where(function ($query) use ($search) { - $query->orWhere('tm_users.sFirstname', 'like', "%" . $search . "%"); - $query->orWhere('tm_users.sLastname', 'like', "%" . $search . "%"); - }); - }) - ->when($request->has('orderBy'), function ($query) use ($request) { - $orderBy = $request->orderBy; - $direction = $request->order ?? 'asc'; - $query->orderBy($orderBy, $direction); - }) - ->when($request->input('start_date') , function ($query, $start_date) { - $query->where(function ($query) use ($start_date) { - $query->where('tx_users_online.sDate', '>=', $start_date. ' 00:00:00'); - }); - }) - ->when($request->input('end_date') , function ($query, $end_date) { - $query->where(function ($query) use ($end_date) { - $query->where('tx_users_online.sDate', '<=', $end_date. ' 23:59:59'); - }); - }) - // ->when($request->input('provider') , function ($query, $provider) { - // $query->where(function ($query) use ($provider) { - // $query->where('request_logs.organization_id', '=', $provider); - // }); - // }) - // ->where('files.fileable_type', '=', 'App\Models\RequestLog') - // ->where('request_logs.final_log', '=', '1') - // ->where('request_logs.status_final_log', '=', 'approved') - ->select( - DB::connection('oldlms')->raw("CONCAT('dr. ', tm_users.sFirstName, ' ', IFNULL(tm_users.sMiddleName, ''), ' ', IFNULL(tm_users.sLastName, '')) as nama_dokter"), - 'tx_users_online.sStatus', - 'tx_users_online.sDate' + // Query untuk mengambil data dari database + $results = DB::connection('oldlms')->table('tx_users_online') + ->leftJoin('tm_users', 'tx_users_online.nIDUser', '=', 'tm_users.nID') + ->when($request->input('search'), function ($query, $search) { + $query->where(function ($query) use ($search) { + $query->orWhere('tm_users.sFirstname', 'like', "%" . $search . "%"); + $query->orWhere('tm_users.sLastname', 'like', "%" . $search . "%"); + }); + }) + ->when($request->has('orderBy'), function ($query) use ($request) { + $orderBy = $request->orderBy; + $direction = $request->order ?? 'asc'; + $query->orderBy($orderBy, $direction); + }) + ->when($request->input('start_date'), function ($query, $start_date) { + $query->where('tx_users_online.sDate', '>=', $start_date . ' 00:00:00'); + }) + ->when($request->input('end_date'), function ($query, $end_date) { + $query->where('tx_users_online.sDate', '<=', $end_date . ' 23:59:59'); + }) + ->select( + DB::connection('oldlms')->raw("CONCAT('dr. ', tm_users.sFirstName, ' ', IFNULL(tm_users.sMiddleName, ''), ' ', IFNULL(tm_users.sLastName, '')) as nama_dokter"), + 'tx_users_online.sStatus', + 'tx_users_online.sDate' ) - ->get(); - $no=0; - foreach($results as $item) - { + ->get(); + + // Styling untuk baris data (tidak ada bold) + $dataStyle = (new StyleBuilder()) + ->setCellAlignment(CellAlignment::LEFT) + ->build(); + + // Menambahkan data baris ke dalam file + $no = 0; + foreach ($results as $item) { $no++; $rowData = [ $no, @@ -154,43 +161,23 @@ class DoctorOnlineController extends Controller $item->sDate, $item->sStatus ]; - $style = (new StyleBuilder()) - //->setFontBold() - // ->setFontSize(15) - // ->setFontColor(Color::BLUE) - // ->setShouldWrapText() - ->setCellAlignment(CellAlignment::LEFT) - // ->setBackgroundColor(Color::YELLOW) - ->build(); - $row = WriterEntityFactory::createRowFromArray($rowData, $style); + + $row = WriterEntityFactory::createRowFromArray($rowData, $dataStyle); $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); + // Menutup writer setelah selesai menulis file $writer->close(); + // Mengirimkan response JSON return Helper::responseJson([ - 'file_name' => 'Report-Data-Dokter-Online'. $start_date.'-'.$end_date, - "file_url" => url('files/Report-Data-Dokter-Online-'. $start_date.'-'.$end_date.'.xlsx') + 'file_name' => $fileName, + 'file_url' => url('files/' . $fileName), ]); } + + /** * Show the form for creating a new resource. * @return Renderable