151 lines
5.8 KiB
PHP
151 lines
5.8 KiB
PHP
<?php
|
|
// app/Http/Controllers/Santri/SantriUangSakuController.php
|
|
|
|
namespace App\Http\Controllers\Santri;
|
|
|
|
use App\Http\Controllers\Controller;
|
|
use Illuminate\Http\Request;
|
|
use Illuminate\Support\Facades\Auth;
|
|
use Illuminate\Support\Facades\Log;
|
|
use App\Models\UangSaku;
|
|
use App\Models\Santri;
|
|
|
|
class SantriUangSakuController extends Controller
|
|
{
|
|
/**
|
|
* Tampilkan riwayat uang saku santri yang sedang login
|
|
*/
|
|
public function index(Request $request)
|
|
{
|
|
try {
|
|
$user = Auth::user();
|
|
|
|
// Validasi role
|
|
if (!in_array($user->role, ['santri', 'wali'])) {
|
|
abort(403, 'Akses ditolak');
|
|
}
|
|
|
|
// Ambil data santri
|
|
$santri = Santri::where('id_santri', $user->role_id)->first();
|
|
|
|
if (!$santri) {
|
|
abort(404, 'Data santri tidak ditemukan');
|
|
}
|
|
|
|
// Query uang saku dengan pagination dan filter
|
|
$query = UangSaku::where('id_santri', $santri->id_santri)
|
|
->with('santri:id_santri,nama_lengkap,kelas');
|
|
|
|
// Filter berdasarkan jenis transaksi
|
|
if ($request->filled('jenis_transaksi')) {
|
|
$query->where('jenis_transaksi', $request->jenis_transaksi);
|
|
}
|
|
|
|
// Filter berdasarkan tanggal
|
|
if ($request->filled('tanggal_dari')) {
|
|
$query->whereDate('tanggal_transaksi', '>=', $request->tanggal_dari);
|
|
}
|
|
|
|
if ($request->filled('tanggal_sampai')) {
|
|
$query->whereDate('tanggal_transaksi', '<=', $request->tanggal_sampai);
|
|
}
|
|
|
|
// Search
|
|
if ($request->filled('search')) {
|
|
$search = $request->search;
|
|
$query->where(function($q) use ($search) {
|
|
$q->where('keterangan', 'like', "%{$search}%")
|
|
->orWhere('id_uang_saku', 'like', "%{$search}%");
|
|
});
|
|
}
|
|
|
|
// Urutkan dari yang terbaru
|
|
$query->orderBy('tanggal_transaksi', 'desc')
|
|
->orderBy('created_at', 'desc');
|
|
|
|
// Pagination
|
|
$riwayatUangSaku = $query->paginate(15)->withQueryString();
|
|
|
|
// ✅ Hitung statistik berdasarkan filter atau bulan ini
|
|
$statistikQuery = UangSaku::where('id_santri', $santri->id_santri);
|
|
|
|
// Jika ada filter tanggal, gunakan filter tersebut
|
|
if ($request->filled('tanggal_dari') || $request->filled('tanggal_sampai')) {
|
|
if ($request->filled('tanggal_dari')) {
|
|
$statistikQuery->whereDate('tanggal_transaksi', '>=', $request->tanggal_dari);
|
|
}
|
|
if ($request->filled('tanggal_sampai')) {
|
|
$statistikQuery->whereDate('tanggal_transaksi', '<=', $request->tanggal_sampai);
|
|
}
|
|
} else {
|
|
// Jika tidak ada filter, tampilkan data bulan ini saja
|
|
$statistikQuery->whereMonth('tanggal_transaksi', now()->month)
|
|
->whereYear('tanggal_transaksi', now()->year);
|
|
}
|
|
|
|
// Clone query untuk menghitung pemasukan dan pengeluaran
|
|
$totalPemasukan = (clone $statistikQuery)->where('jenis_transaksi', 'pemasukan')->sum('nominal');
|
|
$totalPengeluaran = (clone $statistikQuery)->where('jenis_transaksi', 'pengeluaran')->sum('nominal');
|
|
|
|
// Saldo terakhir tetap dari data terbaru (tidak terpengaruh filter)
|
|
$saldoTerakhir = $santri->saldo_uang_saku;
|
|
|
|
// Info periode untuk ditampilkan di view
|
|
if ($request->filled('tanggal_dari') || $request->filled('tanggal_sampai')) {
|
|
$periodeTeks = 'Periode: ';
|
|
if ($request->filled('tanggal_dari')) {
|
|
$periodeTeks .= \Carbon\Carbon::parse($request->tanggal_dari)->format('d/m/Y');
|
|
}
|
|
$periodeTeks .= ' - ';
|
|
if ($request->filled('tanggal_sampai')) {
|
|
$periodeTeks .= \Carbon\Carbon::parse($request->tanggal_sampai)->format('d/m/Y');
|
|
}
|
|
} else {
|
|
$periodeTeks = 'Bulan Ini: ' . now()->isoFormat('MMMM YYYY');
|
|
}
|
|
|
|
return view('santri.uang-saku.index', compact(
|
|
'riwayatUangSaku',
|
|
'santri',
|
|
'totalPemasukan',
|
|
'totalPengeluaran',
|
|
'saldoTerakhir'
|
|
));
|
|
|
|
} catch (\Exception $e) {
|
|
Log::error('Error di Riwayat Uang Saku Santri: ' . $e->getMessage());
|
|
|
|
return back()->with('error', 'Terjadi kesalahan saat memuat riwayat uang saku');
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Tampilkan detail transaksi
|
|
*/
|
|
public function show($id)
|
|
{
|
|
try {
|
|
$user = Auth::user();
|
|
|
|
// Ambil data santri
|
|
$santri = Santri::where('id_santri', $user->role_id)->first();
|
|
|
|
if (!$santri) {
|
|
abort(404, 'Data santri tidak ditemukan');
|
|
}
|
|
|
|
// Ambil transaksi dengan validasi kepemilikan
|
|
$transaksi = UangSaku::where('id', $id)
|
|
->where('id_santri', $santri->id_santri)
|
|
->with('santri:id_santri,nama_lengkap,kelas')
|
|
->firstOrFail();
|
|
|
|
return view('santri.uang-saku.show', compact('transaksi', 'santri'));
|
|
|
|
} catch (\Exception $e) {
|
|
Log::error('Error di Detail Uang Saku: ' . $e->getMessage());
|
|
|
|
return back()->with('error', 'Transaksi tidak ditemukan atau Anda tidak memiliki akses');
|
|
}
|
|
}
|
|
} |