Files
basicdata/app/Exports/HolidayCalendarExport.php
Daeng Deni Mardaeni be271dbe6e feat(basicdata): tambahkan pencarian pada fitur ekspor Holiday Calendar
- Menambahkan kemampuan pencarian pada fitur ekspor Holiday Calendar.
- Mengubah konstruktor `HolidayCalendarExport` untuk menerima parameter `search` yang bersifat opsional.
- Menyesuaikan query pengambilan data pada `HolidayCalendarExport` agar mendukung filter berdasarkan:
  - Deskripsi (`description`).
  - Tipe (`type`).
  - Tanggal (`date`).
- Memperbaiki logika perhitungan halaman aktif pada pagination di `HolidayCalendarController`.
- Menambahkan parameter `search` pada fungsi `export` di `HolidayCalendarController`.
- Memperbarui URL export pada tampilan `index.blade.php` ketika input pencarian diubah.
- Menambahkan fungsi JavaScript `updateExportUrl()` untuk menyisipkan filter pencarian pada URL ekspor.
- Menjamin tidak ada perubahan URL ekspor jika pencarian kosong.

Fitur ini memungkinkan pengguna untuk mengekspor data kalender libur berdasarkan hasil pencarian spesifik.

Signed-off-by: Daeng Deni Mardaeni <ddeni05@gmail.com>
2025-05-19 09:10:33 +07:00

71 lines
1.8 KiB
PHP

<?php
namespace Modules\Basicdata\Exports;
use Maatwebsite\Excel\Concerns\FromCollection;
use Maatwebsite\Excel\Concerns\WithColumnFormatting;
use Maatwebsite\Excel\Concerns\WithHeadings;
use Maatwebsite\Excel\Concerns\WithMapping;
use Modules\Basicdata\Models\HolidayCalendar;
use PhpOffice\PhpSpreadsheet\Style\NumberFormat;
class HolidayCalendarExport implements WithColumnFormatting, WithHeadings, FromCollection, WithMapping
{
protected $search;
public function __construct($search = null)
{
$this->search = $search;
}
public function collection()
{
$query = HolidayCalendar::query();
if (!empty($this->search)) {
$search = $this->search;
$query->where(function ($q) use ($search) {
$q->whereRaw('LOWER(description) LIKE ?', ['%' . strtolower($search) . '%'])
->orWhereRaw('LOWER(type) LIKE ?', ['%' . strtolower($search) . '%'])
->orWhereRaw('CAST(date AS TEXT) LIKE ?', ['%' . $search . '%']);
});
}
return $query->get();
}
public function map($row): array
{
return [
$row->id,
$row->date,
$row->description,
$row->type,
$row->created_at,
$row->updated_at
];
}
public function headings(): array
{
return [
'ID',
'Date',
'Description',
'Type',
'Created At',
'Updated At'
];
}
public function columnFormats(): array
{
return [
'A' => NumberFormat::FORMAT_NUMBER,
'B' => NumberFormat::FORMAT_DATE_DDMMYYYY,
'E' => NumberFormat::FORMAT_DATE_DATETIME,
'F' => NumberFormat::FORMAT_DATE_DATETIME
];
}
}