FarisaRahmaSari_E31222327/app/Http/Controllers/ReportController.php

132 lines
4.7 KiB
PHP

<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Models\User;
use App\Models\Attendance;
use App\Models\Leave;
use App\Models\Presensi;
use Carbon\Carbon;
use Yajra\DataTables\Facades\DataTables;
use Illuminate\Support\Facades\Log;
class ReportController extends Controller
{
public function index()
{
return view('admin.check');
}
public function sheetReport()
{
$employees = User::all(); // Ambil semua data karyawan
return view('admin.sheet-report', compact('employees'));
}
public function generatePDF()
{
// PDF generation logic here
return response()->json(['message' => 'PDF generated']);
}
public function checkStore(Request $request)
{
// Logic untuk menyimpan data check
return back()->with('success', 'Data berhasil disimpan');
}
public function getData(Request $request)
{
try {
$query = Presensi::query()
->select([
'presensi.*',
'users.name' // menggunakan kolom name dari users
])
->leftJoin('users', 'presensi.user_id', '=', 'users.id')
->orderBy('presensi.created_at', 'desc');
// Debug query
\Log::info('SQL Query: ' . $query->toSql());
\Log::info('Query Bindings: ' . json_encode($query->getBindings()));
return DataTables::of($query)
->addIndexColumn()
->addColumn('tanggal', function ($row) {
return Carbon::parse($row->created_at)->format('d/m/Y');
})
->addColumn('nama', function ($row) {
return $row->name ?? '-'; // menggunakan name dari hasil join
})
->addColumn('status', function ($row) {
$badges = [
'Hadir' => 'success',
'Sakit' => 'warning',
'Izin' => 'info',
'Alpha' => 'danger'
];
$color = $badges[$row->status] ?? 'secondary';
return "<span class='badge badge-{$color}'>{$row->status}</span>";
})
->addColumn('jam_masuk', function ($row) {
return $row->clock_type == 'in' ? Carbon::parse($row->created_at)->format('H:i:s') : '-';
})
->addColumn('jam_keluar', function ($row) {
return $row->clock_type == 'out' ? Carbon::parse($row->created_at)->format('H:i:s') : '-';
})
->addColumn('keterangan', function ($row) {
return $row->keterangan ?? '-';
})
->addColumn('lokasi', function ($row) {
if ($row->latitude && $row->longitude) {
return '<button class="btn btn-info btn-sm" onclick="showLocation('.$row->latitude.', '.$row->longitude.')">
<i class="fas fa-map-marker-alt"></i> Lihat Lokasi
</button>';
}
return '-';
})
->rawColumns(['status', 'lokasi'])
->make(true);
} catch (\Exception $e) {
\Log::error('Error in getData: ' . $e->getMessage());
return response()->json([
'error' => true,
'message' => $e->getMessage()
], 500);
}
}
public function getSummary(Request $request)
{
try {
// Ambil tanggal hari ini
$today = Carbon::today();
$query = Presensi::query()
->whereDate('created_at', $today); // Filter untuk hari ini saja
// Filter berdasarkan status jika ada
if ($request->status) {
$query->where('status', $request->status);
}
$summary = [
'hadir' => (clone $query)->where('status', 'Hadir')
->where('clock_type', 'in')
->count(),
'sakit' => (clone $query)->where('status', 'Sakit')->count(),
'izin' => (clone $query)->where('status', 'Izin')->count(),
'absen' => (clone $query)->where('status', 'Alpha')->count(),
];
return response()->json($summary);
} catch (\Exception $e) {
Log::error('Error in getSummary: ' . $e->getMessage());
return response()->json([
'error' => true,
'message' => $e->getMessage()
], 500);
}
}
}