70 lines
2.6 KiB
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
|
|
}
|
|
}
|