From 2c08f89587cde5d823bc7fa30b7eb46150b093b5 Mon Sep 17 00:00:00 2001 From: Riyad Murad Date: Sat, 17 May 2025 22:42:02 +0300 Subject: [PATCH 1/2] laravel_test_and_seeds_fix: Added casts variable to the Metric model --- amp-laravel/app/Models/Metric.php | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/amp-laravel/app/Models/Metric.php b/amp-laravel/app/Models/Metric.php index 0fd7136f..5573938b 100644 --- a/amp-laravel/app/Models/Metric.php +++ b/amp-laravel/app/Models/Metric.php @@ -19,6 +19,11 @@ class Metric extends Model 'date_month', ]; + protected $casts = [ + 'created_at' => 'datetime', + 'updated_at' => 'datetime', + ]; + public function master() { return $this->belongsTo(Master::class); From 1ac9da4596054a7df7f87fe7a170c86d9b1ca4dc Mon Sep 17 00:00:00 2001 From: Riyad Murad Date: Sat, 17 May 2025 22:42:37 +0300 Subject: [PATCH 2/2] laravel_test_and_seeds_fix: Fixed the query in the ClientDashboardService to fetch cumulative power uage grouped by day --- .../Client/ClientDashboardService.php | 48 ++++++++++--------- 1 file changed, 26 insertions(+), 22 deletions(-) diff --git a/amp-laravel/app/Services/Client/ClientDashboardService.php b/amp-laravel/app/Services/Client/ClientDashboardService.php index 05124c12..2cef4db2 100644 --- a/amp-laravel/app/Services/Client/ClientDashboardService.php +++ b/amp-laravel/app/Services/Client/ClientDashboardService.php @@ -5,6 +5,7 @@ use DateTime; use DateTimeZone; use App\Models\Metric; +use Illuminate\Support\Collection; class ClientDashboardService { @@ -13,39 +14,42 @@ public static function getDashboardData($slaveId): array $timezone = new DateTimeZone('Asia/Beirut'); $startOfMonth = (new DateTime('first day of this month', $timezone))->format('Y-m-d H:i:s'); $endOfMonth = (new DateTime('last day of this month', $timezone))->format('Y-m-d 23:59:59'); + $currentYear = now()->year; - // Fetch power usage per day for the current month - $powerUsagePerDayData = Metric::where('slave_id', $slaveId) + // Fetch all relevant data ordered by date_month and then created_at + $allMetrics = Metric::where('slave_id', $slaveId) ->whereBetween('created_at', [$startOfMonth, $endOfMonth]) - ->selectRaw('DATE(created_at) as date, SUM(power) as total_power') - ->groupByRaw('DATE(created_at)') - ->orderByRaw('DATE(created_at)') + ->orderBy('date_month') + ->orderBy('created_at') ->get(); - $powerUsagePerDay = $powerUsagePerDayData->pluck('total_power', 'date')->toArray(); + // Group by the combined year and date_month using createFromFormat + $groupedByDateMonth = $allMetrics->groupBy(function ($item) use ($currentYear) { + $date = DateTime::createFromFormat('m-d', $item->date_month); + if ($date) { + $date->setDate($currentYear, $date->format('m'), $date->format('d')); + return $date->format('Y-m-d'); + } + return null; // Handle cases where parsing fails + })->filter(); // Remove any null groupings - // Fetch cumulative power usage per day for the current month - $cumulativePowerUsageData = Metric::where('slave_id', $slaveId) - ->whereBetween('created_at', [$startOfMonth, $endOfMonth]) - ->orderBy('created_at') - ->selectRaw('DATE(created_at) as date, power') - ->get(); + $powerUsagePerDay = $groupedByDateMonth->map(function (Collection $dailyMetrics) { + return round($dailyMetrics->sum('power'), 2); + })->toArray(); - $cumulativePower = 0; - $cumulativePowerUsage = $cumulativePowerUsageData->mapWithKeys(function ($item, $key) use (&$cumulativePower) { - $cumulativePower += $item['power']; - return [$item['date'] => round($cumulativePower, 2)]; + $cumulativePowerUsage = $groupedByDateMonth->map(function (Collection $dailyMetrics) { + $cumulative = 0; + return $dailyMetrics->map(function ($metric) use (&$cumulative) { + $cumulative += $metric->power; + return round($cumulative, 2); + })->toArray(); })->toArray(); // Calculate total power usage this month - $totalPowerUsageThisMonth = Metric::where('slave_id', $slaveId) - ->whereBetween('created_at', [$startOfMonth, $endOfMonth]) - ->sum('power'); + $totalPowerUsageThisMonth = $allMetrics->sum('power'); // Calculate average voltage reach - $averageVoltageReach = Metric::where('slave_id', $slaveId) - ->whereBetween('created_at', [$startOfMonth, $endOfMonth]) - ->avg('voltage'); + $averageVoltageReach = $allMetrics->avg('voltage'); // Expected power limit $expectedPowerLimit = 100;