diff --git a/app/Exports/DistrictPaymentRecapExport.php b/app/Exports/DistrictPaymentRecapExport.php new file mode 100644 index 0000000..f63172d --- /dev/null +++ b/app/Exports/DistrictPaymentRecapExport.php @@ -0,0 +1,31 @@ +groupBy('kecamatan')->get(); + } + + public function headings(): array{ + return [ + 'Kecamatan', + 'Total' + ]; + } + +} diff --git a/app/Http/Controllers/Api/BigDataResumeController.php b/app/Http/Controllers/Api/BigDataResumeController.php index ff08b4a..84022d4 100644 --- a/app/Http/Controllers/Api/BigDataResumeController.php +++ b/app/Http/Controllers/Api/BigDataResumeController.php @@ -249,7 +249,7 @@ class BigDataResumeController extends Controller 'year', 'created_at' )->orderBy('id', 'desc')->get(); - $pdf = Pdf::loadView('exports.report_director', compact('data'))->setPaper('a4', 'landscape'); + $pdf = Pdf::loadView('exports.director_report', compact('data'))->setPaper('a4', 'landscape'); return $pdf->download('laporan-pimpinan.pdf'); } private function response_empty_resume(){ diff --git a/app/Http/Controllers/Api/RequestAssignmentController.php b/app/Http/Controllers/Api/RequestAssignmentController.php index d7962a6..486476d 100644 --- a/app/Http/Controllers/Api/RequestAssignmentController.php +++ b/app/Http/Controllers/Api/RequestAssignmentController.php @@ -2,14 +2,17 @@ namespace App\Http\Controllers\Api; +use App\Exports\DistrictPaymentRecapExport; use App\Http\Controllers\Controller; use App\Http\Resources\RequestAssignmentResouce; use App\Models\PbgTask; use App\Models\PbgTaskGoogleSheet; +use Barryvdh\DomPDF\Facade\Pdf; use DB; use Exception; use Illuminate\Http\Request; use Log; +use Maatwebsite\Excel\Facades\Excel; class RequestAssignmentController extends Controller { @@ -49,6 +52,19 @@ class RequestAssignmentController extends Controller return response()->json(['message' => 'Terjadi kesalahan: ' . $e->getMessage()], 500); } } + + public function export_excel_district_payment_recaps(){ + return Excel::download(new DistrictPaymentRecapExport, 'laporan-rekap-data-pembayaran.xlsx'); + } + public function export_pdf_district_payment_recaps(){ + $data = PbgTaskGoogleSheet::select( + 'kecamatan', + DB::raw('SUM(nilai_retribusi_keseluruhan_simbg) as total') + ) + ->groupBy('kecamatan')->get(); + $pdf = Pdf::loadView('exports.district_payment_report', compact('data')); + return $pdf->download('laporan-rekap-data-pembayaran.pdf'); + } public function report_pbg_ptsp() { try { diff --git a/resources/js/report-payment-recaps/index.js b/resources/js/report-payment-recaps/index.js index be8100e..ecb2074 100644 --- a/resources/js/report-payment-recaps/index.js +++ b/resources/js/report-payment-recaps/index.js @@ -7,6 +7,8 @@ class ReportPaymentRecaps { constructor() { this.table = null; this.initTableReportPaymentRecaps(); + this.handleExportPDF(); + this.handleExportToExcel(); } initTableReportPaymentRecaps() { let tableContainer = document.getElementById( @@ -63,6 +65,100 @@ class ReportPaymentRecaps { fixedHeader: true, }).render(tableContainer); } + + 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-rekap-data-pembayaran.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; + } + }); + } + + async handleExportPDF() { + const button = document.getElementById("btn-export-pdf"); + if (!button) { + console.error("Button not found: #btn-export-pdf"); + 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-rekap-data-pembayaran.pdf"; + 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 (e) { new ReportPaymentRecaps(); diff --git a/resources/views/exports/report_director.blade.php b/resources/views/exports/director_report.blade.php similarity index 100% rename from resources/views/exports/report_director.blade.php rename to resources/views/exports/director_report.blade.php diff --git a/resources/views/exports/district_payment_report.blade.php b/resources/views/exports/district_payment_report.blade.php new file mode 100644 index 0000000..7324ef8 --- /dev/null +++ b/resources/views/exports/district_payment_report.blade.php @@ -0,0 +1,33 @@ + + + + + + Laporan Rekap Data Pembayaran + + + +

Laporan Rekap Data Pembayaran

+ + + + + + + + + @foreach($data as $item) + + + + + @endforeach + +
KecamatanTotal
{{ $item->kecamatan }}{{ $item->total }}
+ + diff --git a/resources/views/report-payment-recaps/index.blade.php b/resources/views/report-payment-recaps/index.blade.php index ffe848b..3a781cd 100644 --- a/resources/views/report-payment-recaps/index.blade.php +++ b/resources/views/report-payment-recaps/index.blade.php @@ -13,6 +13,19 @@
+
+
Laporan Rekap Data Pembayaran
+
+ + +
+
diff --git a/routes/api.php b/routes/api.php index daa178a..62fb2ad 100644 --- a/routes/api.php +++ b/routes/api.php @@ -56,6 +56,10 @@ Route::group(['middleware' => 'auth:sanctum'], function (){ Route::apiResource('request-assignments',RequestAssignmentController::class); Route::get('/report-payment-recaps',[RequestAssignmentController::class, 'report_payment_recaps'])->name('report-payment-recaps'); Route::get('/report-pbg-ptsp',[RequestAssignmentController::class, 'report_pbg_ptsp'])->name('report-pbg-ptsp'); + Route::controller(RequestAssignmentController::class)->group( function (){ + Route::get('/district-payment-report/excel', 'export_excel_district_payment_recaps')->name('api.district-payment-report.excel'); + Route::get('/district-payment-report/pdf', 'export_pdf_district_payment_recaps')->name('api.district-payment-report.pdf'); + }); // all dashboards Route::controller(DashboardController::class)->group(function(){