93 lines
3.5 KiB
PHP
93 lines
3.5 KiB
PHP
<?php
|
|
|
|
namespace App\Http\Controllers;
|
|
|
|
use App\Models\BukuTamu;
|
|
use App\Models\Peminjaman;
|
|
use Illuminate\Http\Request;
|
|
|
|
class LaporanController extends Controller
|
|
{
|
|
public function kehadiran(Request $request)
|
|
{
|
|
$query = BukuTamu::with('user')->orderBy('tanggal_kunjungan', 'desc');
|
|
|
|
// Filter Bulan & Tahun
|
|
if ($request->filled('bulan')) {
|
|
$query->whereMonth('tanggal_kunjungan', $request->input('bulan'));
|
|
}
|
|
if ($request->filled('tahun')) {
|
|
$query->whereYear('tanggal_kunjungan', $request->input('tahun'));
|
|
}
|
|
|
|
$bukuTamu = $query->get();
|
|
|
|
// Slice data berdasarkan rentang baris (Limit Cetak)
|
|
if ($request->filled('limit_start') || $request->filled('limit_end')) {
|
|
$start = $request->filled('limit_start') ? (int)$request->input('limit_start') : 1;
|
|
$offset = max(0, $start - 1);
|
|
if ($request->filled('limit_end')) {
|
|
$end = (int)$request->input('limit_end');
|
|
$length = max(0, $end - $offset);
|
|
$bukuTamu = $bukuTamu->slice($offset, $length);
|
|
} else {
|
|
$bukuTamu = $bukuTamu->slice($offset);
|
|
}
|
|
}
|
|
|
|
return view('laporan.kehadiran', compact('bukuTamu'));
|
|
}
|
|
|
|
public function peminjaman(Request $request)
|
|
{
|
|
$query = Peminjaman::with(['anggota', 'user', 'buku.kategori'])->orderBy('tanggal_pinjam', 'desc');
|
|
|
|
// 1. Filter Bulan & Tahun
|
|
if ($request->filled('bulan')) {
|
|
$query->whereMonth('tanggal_pinjam', $request->input('bulan'));
|
|
}
|
|
if ($request->filled('tahun')) {
|
|
$query->whereYear('tanggal_pinjam', $request->input('tahun'));
|
|
}
|
|
|
|
// 2. Filter Kategori Buku (Berdasarkan DDC / Nomor Panggil)
|
|
if ($request->filled('id_kategori')) {
|
|
$classDigit = $request->input('id_kategori'); // '0', '1', ..., '9'
|
|
$query->whereHas('buku', function ($q) use ($classDigit) {
|
|
$q->where('nomor_panggil', 'like', "{$classDigit}%");
|
|
});
|
|
}
|
|
|
|
$peminjaman = $query->get();
|
|
|
|
// Slice data berdasarkan rentang baris (Limit Cetak)
|
|
if ($request->filled('limit_start') || $request->filled('limit_end')) {
|
|
$start = $request->filled('limit_start') ? (int)$request->input('limit_start') : 1;
|
|
$offset = max(0, $start - 1);
|
|
if ($request->filled('limit_end')) {
|
|
$end = (int)$request->input('limit_end');
|
|
$length = max(0, $end - $offset);
|
|
$peminjaman = $peminjaman->slice($offset, $length);
|
|
} else {
|
|
$peminjaman = $peminjaman->slice($offset);
|
|
}
|
|
}
|
|
|
|
// Kategori berdasarkan DDC & Lokasi Rak sesuai permintaan user
|
|
$categories = [
|
|
'0' => '000-099 : Karya Umum (Rak 01-05)',
|
|
'1' => '100-199 : Filsafat & Psikologi (Rak 06-14)',
|
|
'2' => '200-299 : Agama (Rak 15-32)',
|
|
'3' => '300-399 : Ilmu Sosial (Rak 33-44)',
|
|
'4' => '400-499 : Bahasa (Rak 45)',
|
|
'5' => '500-599 : Ilmu Murni / Sains (Rak 46-48)',
|
|
'6' => '600-699 : Ilmu Terapan (Rak 49-68)',
|
|
'7' => '700-799 : Kesenian & Olahraga (Rak 71-74)',
|
|
'8' => '800-899 : Sastra (Rak 77-79)',
|
|
'9' => '900-999 : Geografi & Sejarah (Rak 69-70, Rak 80-84)'
|
|
];
|
|
|
|
return view('laporan.peminjaman', compact('peminjaman', 'categories'));
|
|
}
|
|
}
|