From cf998455e09dff5609aa7b01d27a53d9089851e2 Mon Sep 17 00:00:00 2001 From: arifal Date: Wed, 19 Mar 2025 16:16:10 +0700 Subject: [PATCH] add export excel report tourisms --- app/Exports/ReportTourismExport.php | 25 +++++++ .../Api/ReportTourismsController.php | 15 ++++ .../Report/ReportTourismController.php | 1 - resources/js/report/tourisms/index.js | 74 +++++++++++++++++-- .../views/report/tourisms/index.blade.php | 14 +++- routes/api.php | 5 ++ routes/web.php | 4 +- 7 files changed, 127 insertions(+), 11 deletions(-) create mode 100644 app/Exports/ReportTourismExport.php create mode 100644 app/Http/Controllers/Api/ReportTourismsController.php diff --git a/app/Exports/ReportTourismExport.php b/app/Exports/ReportTourismExport.php new file mode 100644 index 0000000..10ccce5 --- /dev/null +++ b/app/Exports/ReportTourismExport.php @@ -0,0 +1,25 @@ +get(); + } + + public function headings(): array{ + return [ + 'Jenis Bisnis Pariwisata', + 'Jumlah Total' + ]; + } +} diff --git a/app/Http/Controllers/Api/ReportTourismsController.php b/app/Http/Controllers/Api/ReportTourismsController.php new file mode 100644 index 0000000..ec4b5d6 --- /dev/null +++ b/app/Http/Controllers/Api/ReportTourismsController.php @@ -0,0 +1,15 @@ + [item.kbli_title, item.total_records]), // Mengubah data untuk Grid.js - search: true, // Menambahkan fitur pencarian - pagination: true, // Menambahkan fitur pagination - sort: true, // Menambahkan fitur sorting + columns: ["Jenis Bisnis Pariwisata", "Jumlah Total"], // Nama kolom + data: businessTypeCounts.map((item) => [ + item.kbli_title, + item.total_records, + ]), // Mengubah data untuk Grid.js + search: true, // Menambahkan fitur pencarian + pagination: true, // Menambahkan fitur pagination + sort: true, // Menambahkan fitur sorting }).render(document.getElementById("tourisms-report-data-table")); + +class TourismReport { + constructor() {} + init() { + this.handleExportToExcel(); + } + + async handleExportToExcel() { + const button = document.getElementById("btn-export-excel"); + if (!button) { + console.error("Button not found: #btn-export-excel"); + return; + } + + let exportUrl = button.getAttribute("data-url"); + + button.addEventListener("click", async () => { + button.disabled = true; + try { + const response = await fetch(`${exportUrl}`, { + method: "GET", + credentials: "include", + headers: { + Authorization: `Bearer ${document + .querySelector('meta[name="api-token"]') + .getAttribute("content")}`, + }, + }); + if (!response.ok) { + console.error("Error fetching data:", response.statusText); + button.disabled = false; + return; + } + + // Convert response to Blob and trigger download + const blob = await response.blob(); + const url = window.URL.createObjectURL(blob); + const a = document.createElement("a"); + a.href = url; + a.download = "laporan-pariwisata.xlsx"; + document.body.appendChild(a); + a.click(); + document.body.removeChild(a); + window.URL.revokeObjectURL(url); + } catch (error) { + console.error("Error fetching data:", error); + button.disabled = false; + return; + } finally { + button.disabled = false; + } + }); + } +} + +document.addEventListener("DOMContentLoaded", function () { + new TourismReport().init(); +}); diff --git a/resources/views/report/tourisms/index.blade.php b/resources/views/report/tourisms/index.blade.php index 3831122..f96b566 100644 --- a/resources/views/report/tourisms/index.blade.php +++ b/resources/views/report/tourisms/index.blade.php @@ -9,8 +9,18 @@
-
-
Laporan Pariwisata
+
+
Laporan Pariwisata
+
+ + +
diff --git a/routes/api.php b/routes/api.php index b35da5f..6877392 100644 --- a/routes/api.php +++ b/routes/api.php @@ -12,6 +12,7 @@ use App\Http\Controllers\Api\LackOfPotentialController; use App\Http\Controllers\Api\MenusController; use App\Http\Controllers\Api\PbgTaskController; use App\Http\Controllers\Api\PbgTaskGoogleSheetsController; +use App\Http\Controllers\Api\ReportTourismsController; use App\Http\Controllers\Api\RequestAssignmentController; use App\Http\Controllers\Api\RolesController; use App\Http\Controllers\Api\ScrapingController; @@ -154,4 +155,8 @@ Route::group(['middleware' => 'auth:sanctum'], function (){ // pbg-task-google-sheet Route::apiResource('pbg-task-google-sheet', PbgTaskGoogleSheetsController::class); + + Route::controller(ReportTourismsController::class)->group(function (){ + Route::get('/report-tourisms/excel', 'export_excel')->name('api.report-tourisms.excel'); + }); }); \ No newline at end of file diff --git a/routes/web.php b/routes/web.php index 73e6804..bd301be 100755 --- a/routes/web.php +++ b/routes/web.php @@ -136,7 +136,9 @@ Route::group(['middleware' => 'auth'], function(){ // Report Route::group(['prefix' => '/report'], function(){ // Resource route, kecuali create karena dibuat terpisah - Route::resource('/tourisms-report', ReportTourismController::class); + Route::controller(ReportTourismController::class)->group(function (){ + Route::get('/tourisms-report','index')->name('tourisms-report.index'); + }); Route::controller(BigdataResumesController::class)->group(function (){ Route::get('/bigdata-resumes', 'index')->name('bigdata-resumes');