in class controller
public function table(Table $table): Table
{
return $table
->query(WtdReport::query()->whereNotNull('ltxday'))
->headerActions([
\Filament\Tables\Actions\Action::make('download')
->label('Download Report')
->icon('heroicon-s-cloud-arrow-down')
//add download process
->action(function ($livewire) {
$getdata = $livewire->getFilteredTableQuery()->whereNotNull('ltxday')
->get()->map(function ($data, $k) {
$newdata = new \stdClass();
$newdata->{'No'} = $k + 1;
$newdata->{'Account No.'} = $data->actno;
$newdata->{'ID Number'} = $data->id1;
$newdata->{'Name'} = $data->name;
$newdata->{'GL Account No.'} = $data->gl_account;
$newdata->{'CODA Code'} = $data->coda_code;
$newdata->{'Transaction Amount'} = $data->txamt;
$newdata->{'Transaction Code (After)'} = $data->transaction_code_after;
$newdata->{'LTXDAY'} = $data->ltxday;
return $newdata;
})->toArray();
$livewire->dispatch('download-div', [
'data' => $getdata,
'name' => 'WtdReportClosingDataG12',
]);
}),
])in blade
@assets
<script src="{{ url('js/xlsx.full.min.js') }}"></script>
@endassets
@script
<script data-navigate-once>
// Event listener untuk butang "Download"
$wire.on('download-div', (getdata) => {
// console.log("data", getdata[0]);
downloadXLSX(getdata[0].name + ".xlsx", getdata[0].data);
// Fungsi untuk memuat turun fail XLSX
function downloadXLSX(filename, data) {
// Membuat workbook baru
const workbook = XLSX.utils.book_new();
// Menukar data ke dalam bentuk sheet
//Associative arrays ([{}, {}, {}]) XLSX.utils.json_to_sheet()
const worksheet = XLSX.utils.json_to_sheet(data);
//AOA 2D arrays ([[...], [...]]) XLSX.utils.aoa_to_sheet()
// const worksheet = XLSX.utils.aoa_to_sheet(data);
// Menambah worksheet ke dalam workbook
XLSX.utils.book_append_sheet(workbook, worksheet, "Sheet1");
// Menyimpan workbook sebagai fail XLSX
XLSX.writeFile(workbook, filename);
}
}, {
once: true
});
</script>
@endscript
Leave a Reply