210 lines
7.7 KiB
PHP
210 lines
7.7 KiB
PHP
<?php
|
|
|
|
namespace App\Http\Controllers\Admin;
|
|
|
|
use App\Http\Controllers\Controller;
|
|
use App\Services\DummyDataService;
|
|
use Illuminate\Http\Request;
|
|
use Carbon\Carbon;
|
|
|
|
class AdminPeminjamanController extends Controller
|
|
{
|
|
public function index(Request $request)
|
|
{
|
|
$peminjamanAktif = DummyDataService::getAdminPeminjamanAktif();
|
|
$allUsers = collect(DummyDataService::getAllSiswa());
|
|
|
|
// LOGIC DENDA & WA LINK (Update Request Client)
|
|
$peminjamanAktif = $peminjamanAktif->map(function ($item) use ($allUsers) {
|
|
$userData = $allUsers->firstWhere('id', $item['user_id']);
|
|
$role = $userData ? strtolower($userData['role']) : 'siswa';
|
|
$item['role'] = $role;
|
|
|
|
// Hitung Denda Flat 1000/hari
|
|
$tenggat = Carbon::parse($item['tenggat_kembali']);
|
|
$now = Carbon::now();
|
|
|
|
$item['hari_terlambat'] = 0;
|
|
$item['total_denda'] = 0;
|
|
$item['denda_per_hari'] = 1000;
|
|
|
|
if ($now->greaterThan($tenggat)) {
|
|
$hariTelat = $tenggat->diffInDays($now);
|
|
$item['hari_terlambat'] = $hariTelat;
|
|
|
|
if ($role === 'guru') {
|
|
$item['total_denda'] = 0;
|
|
$item['denda_per_hari'] = 0;
|
|
} else {
|
|
$item['total_denda'] = $hariTelat * 1000;
|
|
}
|
|
}
|
|
|
|
// Generate WA Link
|
|
$hp = $item['nomor_hp'];
|
|
if (substr($hp, 0, 1) == '0') {
|
|
$hp = '62' . substr($hp, 1);
|
|
}
|
|
|
|
// Pesan WA dibedakan antara Guru dan Siswa
|
|
if ($role === 'guru') {
|
|
$pesan = "Halo Bapak/Ibu {$item['peminjam']}, buku yang dipinjam sudah melewati tenggat waktu {$item['hari_terlambat']} hari. Mohon berkenan untuk segera dikembalikan ke perpustakaan ya.";
|
|
} else {
|
|
$pesan = "Halo kak {$item['peminjam']}, buku anda sudah terlambat {$item['hari_terlambat']} hari dengan denda Rp " . number_format($item['total_denda'], 0, ',', '.') . ". Mohon segera dikembalikan ya.";
|
|
}
|
|
|
|
$item['wa_link'] = "https://wa.me/{$hp}?text=" . urlencode($pesan);
|
|
|
|
return $item;
|
|
});
|
|
|
|
$daftarPeminjam = $peminjamanAktif->pluck('peminjam')->unique();
|
|
|
|
return view('admin.peminjaman.index', [
|
|
'pageTitle' => 'Manajemen Peminjaman',
|
|
'peminjamanAktif' => $peminjamanAktif,
|
|
'daftarPeminjam' => $daftarPeminjam,
|
|
]);
|
|
}
|
|
|
|
public function create()
|
|
{
|
|
$allUsers = collect(DummyDataService::getAllSiswa());
|
|
$peminjamanAktif = DummyDataService::getAdminPeminjamanAktif();
|
|
|
|
$groupedUsers = $allUsers
|
|
->whereIn('role', ['siswa', 'guru'])
|
|
->map(function ($user) use ($peminjamanAktif) {
|
|
|
|
// Hitung berapa buku yang sedang dipinjam
|
|
$jumlahPinjam = $peminjamanAktif->where('peminjam', $user['nama_lengkap'])->count();
|
|
|
|
$user['jumlah_pinjam'] = $jumlahPinjam;
|
|
if (strtolower($user['role']) === 'siswa') {
|
|
$user['kena_limit'] = $jumlahPinjam >= 2;
|
|
} else {
|
|
$user['kena_limit'] = false;
|
|
}
|
|
|
|
// Cek apakah user di-banned (Nonaktif Manual)
|
|
$user['is_banned'] = $user['is_banned'] ?? false;
|
|
$user['disabled'] = $user['kena_limit'] || $user['is_banned'];
|
|
|
|
if ($user['is_banned']) {
|
|
$user['status_text'] = "(Akun Dibekukan)";
|
|
} elseif ($user['kena_limit']) {
|
|
$user['status_text'] = "(Limit Penuh: 2/2)";
|
|
} else {
|
|
$user['status_text'] = "";
|
|
}
|
|
|
|
$user['jabatan'] = $user['jabatan'] ?? 'Guru Mata Pelajaran';
|
|
|
|
return $user;
|
|
})
|
|
->groupBy('role');
|
|
|
|
$daftarBuku = DummyDataService::getAllBooks()
|
|
->where('status', 'Tersedia')
|
|
->filter(function ($buku) {
|
|
if (is_array($buku['tipe_akses'])) {
|
|
return in_array('offline', $buku['tipe_akses']);
|
|
}
|
|
return $buku['tipe_akses'] === 'offline';
|
|
});
|
|
|
|
return view('admin.peminjaman.create', [
|
|
'pageTitle' => 'Buat Peminjaman Manual',
|
|
'groupedUsers' => $groupedUsers,
|
|
'daftarBuku' => $daftarBuku,
|
|
]);
|
|
}
|
|
|
|
/**
|
|
* Menampilkan halaman KHUSUS Manajemen Denda (Siswa & Guru Telat).
|
|
*/
|
|
public function dendaIndex()
|
|
{
|
|
$allData = DummyDataService::getAdminPeminjamanAktif();
|
|
$allSiswaRaw = collect(DummyDataService::getAllSiswa());
|
|
$now = \Carbon\Carbon::now();
|
|
|
|
// LOGIC AUTO-BAN
|
|
$allSiswa = $allSiswaRaw->map(function ($siswa) use ($allData, $now) {
|
|
$pinjamanUser = $allData->firstWhere('user_id', $siswa['id']);
|
|
$isTelat = false;
|
|
|
|
if ($pinjamanUser) {
|
|
$isTelat = $pinjamanUser['tenggat_kembali']->startOfDay()->lt($now->startOfDay());
|
|
}
|
|
|
|
if ($siswa['role'] === 'siswa' && $isTelat) {
|
|
$siswa['is_banned'] = true;
|
|
}
|
|
|
|
return $siswa;
|
|
});
|
|
|
|
$siswaTelat = $allData->filter(function ($item) use ($now, $allSiswa) {
|
|
$userData = $allSiswa->firstWhere('id', $item['user_id']);
|
|
|
|
if (!$userData) return false;
|
|
|
|
$isTelat = $item['tenggat_kembali']->startOfDay()->lt($now->startOfDay());
|
|
$isBanned = $userData['is_banned'];
|
|
$isTargetRole = in_array($userData['role'], ['siswa', 'guru']);
|
|
|
|
return ($isTelat || $isBanned) && $isTargetRole;
|
|
})->map(function ($item) use ($now, $allSiswa) {
|
|
|
|
$tenggat = $item['tenggat_kembali']->startOfDay();
|
|
$hariTelat = ($tenggat->lt($now->startOfDay())) ? $tenggat->diffInDays($now->startOfDay()) : 0;
|
|
|
|
$dataSiswa = $allSiswa->firstWhere('id', $item['user_id']);
|
|
$role = $dataSiswa ? strtolower($dataSiswa['role']) : 'siswa';
|
|
$item['role'] = $role;
|
|
|
|
if ($role === 'guru') {
|
|
$item['total_denda'] = 0;
|
|
} else {
|
|
$item['total_denda'] = $hariTelat * $item['denda_per_hari'];
|
|
}
|
|
|
|
$item['hari_terlambat'] = $hariTelat;
|
|
$item['is_banned'] = $dataSiswa['is_banned'] ?? false;
|
|
$item['kelas'] = $dataSiswa['kelas'] ?? 'Guru';
|
|
|
|
// Link WA
|
|
$hp = $item['nomor_hp'];
|
|
if (substr($hp, 0, 1) == '0') $hp = '62' . substr($hp, 1);
|
|
|
|
if ($hariTelat > 0 && $role !== 'guru') {
|
|
$pesan = "Halo {$item['peminjam']}, anda terlambat pengembalian buku. Total Denda: Rp " . number_format($item['total_denda'], 0, ',', '.');
|
|
} elseif ($hariTelat > 0 && $role === 'guru') {
|
|
$pesan = "Halo Bapak/Ibu {$item['peminjam']}, mohon berkenan untuk mengembalikan buku yang telah melewati tenggat waktu.";
|
|
} else {
|
|
$pesan = "Halo {$item['peminjam']}, akun anda sedang dinonaktifkan sementara. Mohon hubungi petugas.";
|
|
}
|
|
|
|
$item['wa_link'] = "https://wa.me/{$hp}?text=" . urlencode($pesan);
|
|
|
|
return $item;
|
|
});
|
|
|
|
$listKelas = $siswaTelat->pluck('kelas')->unique()->values();
|
|
|
|
return view('admin.denda.index', [
|
|
'pageTitle' => 'Manajemen Denda & Sanksi',
|
|
'siswaTelat' => $siswaTelat,
|
|
'listKelas' => $listKelas
|
|
]);
|
|
}
|
|
|
|
/**
|
|
* Dummy function untuk tombol Sanksi
|
|
*/
|
|
public function berikanSanksi(Request $request)
|
|
{
|
|
return response()->json(['status' => 'success']);
|
|
}
|
|
} |