feat(laporan-hasil-penilaian): tambahkan filter penilai pada laporan penilaian jaminan

- Menambahkan filter untuk memilih penilai pada halaman laporan penilaian jaminan.
- Memperbarui query untuk menyertakan filter penilai saat mengambil data.
- Memperbaiki tampilan dengan menambahkan elemen input untuk filter penilai.
This commit is contained in:
Daeng Deni Mardaeni
2025-04-23 15:51:03 +07:00
parent d251c7655d
commit 0972f3fcff
3 changed files with 88 additions and 32 deletions

View File

@@ -41,6 +41,13 @@
$query->where('branch_id', $this->request->branch_id);
}
if ($this->request->has('penilai_id') && !empty($this->request->penilai_id)) {
$request = $this->request; // Store in a local variable
$query->whereHas('penilaian._user_penilai.userPenilaiTeam', function($q) use ($request) {
$q->where('user_id', $request->penilai_id);
});
}
// Apply search filter if provided
if ($this->request->has('search') && !empty($this->request->search)) {
$search = $this->request->search;

View File

@@ -46,6 +46,12 @@
$query->where('branch_id', $search->branch_id);
}
if (isset($search->penilai_id) && !empty($search->penilai_id)) {
$query->whereHas('penilaian._user_penilai.userPenilaiTeam', function($q) use ($search) {
$q->where('user_id', $search->penilai_id);
});
}
if (isset($search->search)) {
$query->where(function ($q) use ($search) {
@@ -110,12 +116,12 @@
'id' => $permohonan->id,
'nomor_registrasi' => $permohonan->nomor_registrasi,
'tanggal_permohonan' => $permohonan->tanggal_permohonan,
'branch' => $permohonan->debiture->branch->name,
'name' => $permohonan->debiture->name,
'pemohon' => $permohonan->creator->name,
'tujuan_penilaian' => $permohonan->tujuanPenilaian->name,
'jenis_agunan' => $permohonan->documents->pluck('jenisJaminan.name')->unique()->implode(', '),
'alamat_agunan' => $permohonan->documents->map(function ($document) {
'branch' => $permohonan->debiture?->branch?->name,
'name' => $permohonan->debiture?->name,
'pemohon' => $permohonan->creator?->name,
'tujuan_penilaian' => $permohonan->tujuanPenilaian?->name,
'jenis_agunan' => $permohonan->documents?->pluck('jenisJaminan.name')->unique()->implode(', '),
'alamat_agunan' => $permohonan->documents?->map(function ($document) {
return formatAlamat($document);
})->unique()->implode(', '),
'luas_tanah' => $luas_tanah . ' m²',
@@ -123,10 +129,10 @@
'luas_bangunan' => $luas_bangunan . ' m²',
'nilai_bangunan' => formatRupiah($nilai_bangunan,2),
'tanggal_laporan' => $permohonan->approval_dd_at ?? $permohonan->approval_eo_at ?? '',
'tanggal_review' => $permohonan->penilaian->tanggal_kunjungan ?? '',
'tanggal_review' => $permohonan->penilaian?->tanggal_kunjungan ?? '',
'nilai_pasar_wajar' => formatRupiah($npw,2),
'nilai_likuidasi' => formatRupiah($nilai_liquidasi,2),
'nama_penilai' => $permohonan->penilaian->_user_penilai->userPenilaiTeam->name,
'nama_penilai' => $permohonan->penilaian?->_user_penilai?->userPenilaiTeam?->name,
];
});

View File

@@ -6,44 +6,75 @@
@section('content')
<div class="w-full grid gap-5 lg:gap-7.5 mx-auto">
<div class="card border border-agi-100 card-grid min-w-full" data-datatable="false" data-datatable-page-size="10" data-datatable-state-save="false" id="laporan-penilaian-jaminan-table" data-api-url="{{ route('laporan-penilaian-jaminan.data') }}">
<div class="card-header bg-agi-50 py-5 flex-wrap">
<h3 class="card-title">
Laporan Penilaian Jaminan
</h3>
<div class="flex flex-wrap gap-2 lg:gap-5">
<div class="flex">
<label class="input input-sm">
<!-- Filter Card -->
<div class="card border border-agi-100">
<div class="card-header bg-agi-50 py-5">
<h3 class="card-title">Filter Laporan</h3>
</div>
<div class="card-body grid gap-4">
<!-- Search field at the top, full width -->
<div class="flex flex-col w-full">
<label class="text-sm font-medium mb-1">Pencarian</label>
<label class="input input-sm">
<i class="ki-filled ki-magnifier"></i>
<input placeholder="Search Laporan Penilaian Jaminan" id="search" type="text" value="">
</label>
</div>
<!-- Other filter fields in grid layout -->
<div class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-4">
<div class="flex flex-col">
<label class="text-base font-medium mb-1">Tanggal Awal</label>
<label class="input">
<input placeholder="Tanggal Awal" id="start_date" type="date">
</label>
</div>
<div class="flex">
<label class="input input-sm">
<div class="flex flex-col">
<label class="text-base font-medium mb-1">Tanggal Akhir</label>
<label class="input">
<input placeholder="Tanggal Akhir" id="end_date" type="date">
</label>
</div>
<div class="flex">
<select class="select select-sm" id="branch_filter">
<div class="flex flex-col">
<label class="text-base font-medium mb-1">Cabang</label>
<select class="select tomselect" id="branch_filter">
<option value="">Semua Cabang</option>
@foreach(\Modules\Basicdata\Models\Branch::where('status', 1)->get() as $branch)
<option value="{{ $branch->id }}">{{ $branch->name }}</option>
@endforeach
</select>
</div>
<div class="flex">
<button class="btn btn-sm btn-primary" id="filter_tanggal">Filter</button>
</div>
<div class="flex">
<label class="input input-sm"> <i class="ki-filled ki-magnifier"> </i>
<input placeholder="Search Laporan Penilaian Jaminan" id="search" type="text" value="">
</label>
</div>
<div class="flex flex-wrap gap-2.5">
<div class="h-[24px] border border-r-gray-200"></div>
<a class="btn btn-sm btn-light" href="{{ route('laporan-penilaian-jaminan.export') }}" id="export-btn"> Export to Excel </a>
<div class="flex flex-col">
<label class="text-base font-medium mb-1">Penilai</label>
<select class="select tomselect" id="penilai_filter">
<option value="">Semua Penilai</option>
@foreach(\MOdules\Usermanagement\Models\User::role('penilai')->get() as $penilai)
<option value="{{ $penilai->id }}">{{ $penilai->name }}</option>
@endforeach
</select>
</div>
</div>
<!-- Buttons row at the bottom -->
<div class="grid grid-cols-1 md:grid-cols-2 gap-4 mt-2">
<button class="btn btn-sm btn-primary" id="filter_tanggal">
<i class="ki-outline ki-filter fs-2 me-1"></i>
Terapkan Filter
</button>
<a class="btn btn-sm btn-light" href="{{ route('laporan-hasil-penilaian-jaminan-internal-external.export') }}" id="export-btn">
<i class="ki-outline ki-file-down fs-2 me-1"></i>
Export to Excel
</a>
</div>
</div>
</div>
<!-- Data Table Card -->
<div class="card border border-agi-100 card-grid min-w-full" data-datatable="false" data-datatable-page-size="10" data-datatable-state-save="false" id="laporan-penilaian-jaminan-table" data-api-url="{{ route('laporan-penilaian-jaminan.data') }}">
<div class="card-header bg-agi-50 py-5 flex-wrap">
<h3 class="card-title">
Laporan Penilaian Jaminan
</h3>
</div>
<div class="card-body">
@@ -152,6 +183,7 @@
const endDateInput = document.getElementById('end_date');
const branchFilter = document.getElementById('branch_filter');
const filterTanggalButton = document.getElementById('filter_tanggal');
const penilaiFilter = document.getElementById('penilai_filter');
const exportBtn = document.getElementById('export-btn');
const apiUrl = element.getAttribute('data-api-url');
@@ -243,6 +275,7 @@
const startDate = startDateInput.value;
const endDate = endDateInput.value;
const branch = branchFilter.value;
const penilai = penilaiFilter.value;
if (searchInput.value) {
filters.search = searchInput.value;
@@ -260,6 +293,10 @@
filters.branch_id = branch;
}
if (penilai) {
filters.penilai_id = penilai;
}
dataTable.search(filters);
}
@@ -291,6 +328,12 @@
url.searchParams.delete('search');
}
if (penilaiFilter.value) {
url.searchParams.set('penilai_id', penilaiFilter.value);
} else {
url.searchParams.delete('penilai_id');
}
exportBtn.href = url.toString();
}