TIF_NGANJUK_E41211253/app/Charts/distanceChart.php

70 lines
2.6 KiB
PHP

<?php
namespace App\Charts;
use App\Models\SensorData;
use ArielMejiaDev\LarapexCharts\LarapexChart;
class distanceChart
{
protected $chart;
public function __construct(LarapexChart $chart)
{
$this->chart = $chart;
}
public function build(): \ArielMejiaDev\LarapexCharts\LineChart
{
$tahun = date('Y');
$bulan = date('m');
$hariIni = date('N'); // Mendapatkan hari saat ini dalam bentuk numerik (1 = Senin, 7 = Minggu)
// Array untuk menyimpan nama hari
$dataHari = ['Senin', 'Selasa', 'Rabu', 'Kamis', 'Jumat', 'Sabtu', 'Minggu'];
$dataPenjumlahan = [];
// Looping untuk setiap hari dalam seminggu (Senin sampai Minggu) hingga hari ini
for ($i = 0; $i < $hariIni; $i++) {
// Penyesuaian untuk memulai dari Senin (hari pertama)
$hariMySQL = $i + 1; // Hari dalam MySQL (1 = Minggu, 2 = Senin, dst.)
// Ambil data terbaru sensor jarak untuk `klampisan_atas`
$latestSensorAtas = SensorData::where('device_name', 'klampisan_atas')
->whereYear('created_at', $tahun)
->whereMonth('created_at', $bulan)
->whereRaw('WEEKDAY(created_at) = ?', [$i]) // `WEEKDAY` untuk mendapatkan hari mulai dari Senin (0 = Senin)
->orderBy('created_at', 'desc')
->first();
// Ambil data terbaru sensor jarak untuk `klampisan_bawah`
$latestSensorBawah = SensorData::where('device_name', 'klampisan_bawah')
->whereYear('created_at', $tahun)
->whereMonth('created_at', $bulan)
->whereRaw('WEEKDAY(created_at) = ?', [$i])
->orderBy('created_at', 'desc')
->first();
// Hitung penjumlahan jarak dari kedua device
$distanceAtas = $latestSensorAtas ? $latestSensorAtas->distance : 0;
$distanceBawah = $latestSensorBawah ? $latestSensorBawah->distance : 0;
$totalDistance = round($distanceAtas + $distanceBawah, 2);
// Simpan hasil penjumlahan dalam array
$dataPenjumlahan[] = $totalDistance;
}
// Hasilnya akan tersimpan dalam $dataPenjumlahan yang berisi total distance dari klampisan_atas dan klampisan_bawah untuk setiap hari
return $this->chart->lineChart()
->setDataset([
[
'name' => 'Penjumlahan Data Klampisan Atas & Bawah',
'data' => $dataPenjumlahan
]
])
->setHeight(270)
->setXAxis(array_slice($dataHari, 0, $hariIni)); // Hanya tampilkan hari hingga hari ini di X-axis
}
}