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>
This commit is contained in:
Daeng Deni Mardaeni
2025-05-19 09:10:33 +07:00
parent 8d190cb10d
commit be271dbe6e
3 changed files with 45 additions and 6 deletions

View File

@@ -11,9 +11,27 @@ 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()
{
return HolidayCalendar::all();
$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

View File

@@ -5,7 +5,6 @@
use App\Http\Controllers\Controller;
use Exception;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Maatwebsite\Excel\Facades\Excel;
use Modules\Basicdata\Exports\HolidayCalendarExport;
use Modules\Basicdata\Http\Requests\HolidayCalendarRequest;
@@ -191,7 +190,7 @@
$pageCount = ceil($totalRecords / $request->get('size'));
// Calculate the current page number
$currentPage = 0 + 1;
$currentPage = $request->get('page') ?: 1;
// Return the response data as a JSON object
return response()->json([
@@ -205,13 +204,16 @@
]);
}
public function export()
public function export(Request $request)
{
// Check if the authenticated user has the required permission to export holiday calendars
if (is_null($this->user) || !$this->user->can('basic-data.export')) {
abort(403, 'Sorry! You are not allowed to export holiday calendars.');
}
return Excel::download(new HolidayCalendarExport, 'holiday_calendar.xlsx');
// Get search parameter from request
$search = $request->get('search');
return Excel::download(new HolidayCalendarExport($search), 'holiday_calendar.xlsx');
}
}