- 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>
71 lines
1.8 KiB
PHP
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
|
|
];
|
|
}
|
|
}
|