TIF_NGANJUK_E41220778/app/Http/Controllers/Admin/AdminPeminjamanController.php

191 lines
6.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();
// LOGIC DENDA & WA LINK (Update Request Client)
$peminjamanAktif = $peminjamanAktif->map(function ($item) {
// Hitung Denda Flat 1000/hari
$tenggat = Carbon::parse($item['tenggat_kembali']);
$now = Carbon::now();
$item['hari_terlambat'] = 0;
$item['total_denda'] = 0;
if ($now->greaterThan($tenggat)) {
$hariTelat = $tenggat->diffInDays($now);
$item['hari_terlambat'] = $hariTelat;
$item['total_denda'] = $hariTelat * 1000;
$item['denda_per_hari'] = 1000;
}
// Generate WA Link
$hp = $item['nomor_hp'];
if (substr($hp, 0, 1) == '0') {
$hp = '62' . substr($hp, 1);
}
$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 & Denda',
'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();
// Cek Status
$user['jumlah_pinjam'] = $jumlahPinjam;
$user['kena_limit'] = $jumlahPinjam >= 2;
// 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'] = "";
}
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) {
// Cek siswa punya pinjaman yang telat
$pinjamanUser = $allData->firstWhere('user_id', $siswa['id']);
$isTelat = false;
if ($pinjamanUser) {
$isTelat = $pinjamanUser['tenggat_kembali']->startOfDay()->lt($now->startOfDay());
}
// Jika Role SISWA dan TELAT -> Wajib AUTO BAN (Override true)
// ika Role GURU -> Ikut status asli database (Manual Ban)
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) {
// Hitungan Denda
$tenggat = $item['tenggat_kembali']->startOfDay();
// Jika belum telat (tapi banned/manual), hari telat 0
$hariTelat = ($tenggat->lt($now->startOfDay()))
? $tenggat->diffInDays($now->startOfDay())
: 0;
$totalDenda = $hariTelat * $item['denda_per_hari'];
$item['hari_terlambat'] = $hariTelat;
$item['total_denda'] = $totalDenda;
// Ambil status is_banned TERBARU dari $allSiswa
$dataSiswa = $allSiswa->firstWhere('id', $item['user_id']);
$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) {
$pesan = "Halo {$item['peminjam']}, anda terlambat pengembalian buku. Total Denda: Rp " . number_format($totalDenda, 0, ',', '.');
} 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']);
}
}