middleware(function ($request, $next) { $response = $next($request); $response->headers->set('Cache-Control', 'no-store, no-cache, must-revalidate, proxy-revalidate'); $response->headers->set('Pragma', 'no-cache'); $response->headers->set('Expires', 'Sat, 26 Jul 1997 05:00:00 GMT'); return $response; }); } public function index() { if (!Auth::check()) { // Cek apakah pengguna sudah login return redirect()->route('login'); // Arahkan ke login jika belum login } $data = getDevices(); return view('admin.pages.dashboard', compact('data')); } public function dua(distanceChart $distanceChart, Request $request) { $data['distanceChart'] = $distanceChart->build(); $latestPressure = SensorData::where('device_name', 'kawedanan') ->orderBy('created_at', 'desc') ->first(['pressure']); // Jika request adalah AJAX, kembalikan data dalam format JSON if ($request->ajax()) { if ($latestPressure) { Log::info('Pressure data:', ['pressure' => $latestPressure->pressure]); return response()->json(['pressure' => $latestPressure->pressure, 'distanceChart' => $data['distanceChart']]); // Kembalikan data dalam format JSON } else { Log::warning('No pressure data found for device "kawedanan".'); return response()->json(['pressure' => null, 'distanceChart' => $data['distanceChart']]); // Kembalikan null jika tidak ada data } } // Mengirim data ke view jika bukan request AJAX $data['latestPressure'] = $latestPressure; // Menambahkan data tekanan ke data view return view('admin.pages.unit1', $data); } public function showUnit(string $deviceName) { if (!Auth::check()) { return redirect()->route('login'); } // Ambil data sensor terbaru (termasuk pressure dan distance) $latestData = SensorData::where('device_name', 'like', "%$deviceName%") ->latest('created_at') ->first(); // Ambil data pressure terbaru yang valid (tidak null) $latestPressureData = SensorData::where('device_name', 'like', "%$deviceName%") ->whereNotNull('pressure') ->orderBy('created_at', 'desc') ->first(); if ($latestPressureData) { $pressureLatest = $latestPressureData->pressure; $pressureLatestDate = \Carbon\Carbon::parse($latestPressureData->created_at); } else { $pressureLatest = null; $pressureLatestDate = null; } $startOfWeek = now()->startOfWeek(); $endOfWeek = now()->endOfWeek(); $distanceData = SensorData::select( 'distance', 'created_at', DB::raw('date_format(created_at, "%w") as day'), 'device_name' ) ->whereNotNull('distance') ->where('device_name', 'like', "%$deviceName%") ->whereBetween('created_at', [$startOfWeek, $endOfWeek]) ->orderBy('created_at', 'desc') ->get() ->groupBy('day') ->map(function ($items) { $groupedByDevice = $items->groupBy('device_name'); $latestItems = $groupedByDevice->map(fn($devItems) => $devItems->first()); $totalDistance = $latestItems->sum(fn($item) => $item->distance ?? 0); $latestCreatedAt = $latestItems->max(fn($item) => $item->created_at); $anyItem = $items->first(); return [ 'value' => $totalDistance, 'day' => ['Minggu', 'Senin', 'Selasa', 'Rabu', 'Kamis', 'Jumat', 'Sabtu'][$anyItem->day], 'dayIndex' => $anyItem->day, 'created_at' => \Carbon\Carbon::parse($latestCreatedAt)->format('H:i'), 'latestCreatedAtObj' => $latestCreatedAt, ]; }) ->sortBy('dayIndex') ->values(); // Ambil waktu terbaru dari semua data distance $latestDistanceDate = $distanceData->max('latestCreatedAtObj'); $latestDistanceDate = $latestDistanceDate ? \Carbon\Carbon::parse($latestDistanceDate) : null; $data = [ 'latest' => $latestData, 'distanceData' => json_encode($distanceData), 'pressureLatest' => $pressureLatest, 'pressureLatestDate' => $pressureLatestDate, 'latestDistanceDate' => $latestDistanceDate, 'deviceName' => ucwords($deviceName), ]; return view('admin.pages.unit', $data); } public function getDistanceData(Request $request) { $startDate = Carbon::parse($request->start_date)->startOfDay(); $endDate = Carbon::parse($request->end_date)->endOfDay(); $data = DB::table('sensor_data') ->select( DB::raw("DATE_FORMAT(created_at, '%Y-%m-%d %H:%i') as time_interval"), DB::raw("SUM(CASE WHEN device_name = 'klampisan_atas' THEN distance ELSE 0 END) as distance_atas"), DB::raw("SUM(CASE WHEN device_name = 'klampisan_bawah' THEN distance ELSE 0 END) as distance_bawah"), DB::raw("SUM(distance) as total_distance") ) ->whereBetween('created_at', [$startDate, $endDate]) ->whereIn('device_name', ['klampisan_atas', 'klampisan_bawah']) ->groupBy(DB::raw("FLOOR(UNIX_TIMESTAMP(created_at) / (30 * 60))")) ->orderBy('time_interval') ->get(); return response()->json($data); } public function profiladmin() { return view('admin.pages.profil'); } public function datapegawai() { return view('admin.pages.datapegawai'); } public function ambilsensor($deviceName) { // Mendapatkan tanggal hari ini dan 7 hari sebelumnya $startDate = now()->subDays(7); // 7 hari yang lalu $endDate = now(); // Hari ini // Mengambil data untuk klampisan_atas dalam rentang waktu satu minggu terakhir $klampisanAtas = SensorData::where('device_name', 'klampisan_atas') ->whereBetween('created_at', [$startDate, $endDate]) ->select('created_at', 'distance') ->orderBy('created_at', 'asc') ->get(); // Mengambil data untuk klampisan_bawah dalam rentang waktu satu minggu terakhir $klampisanBawah = SensorData::where('device_name', 'klampisan_bawah') ->whereBetween('created_at', [$startDate, $endDate]) ->select('created_at', 'distance') ->orderBy('created_at', 'asc') ->get(); // Memisahkan label dan data untuk chart $labels = $klampisanAtas->pluck('created_at')->map(function ($date) { return $date->format('M d'); // Format tanggal sesuai kebutuhan }); // Data distance untuk klampisan_atas $dataAtas = $klampisanAtas->pluck('distance'); // Data distance untuk klampisan_bawah $dataBawah = $klampisanBawah->pluck('distance'); // Mengirimkan data ke view $data = [ 'labels' => $labels, 'klampisan_atas' => $dataAtas, 'klampisan_bawah' => $dataBawah, ]; return view('admin.pages.datasensor', compact('data', 'deviceName')); } }