Support SQLite dashboard time calculations

This commit is contained in:
2026-06-03 07:02:17 +05:00
parent 932b37c7f6
commit 036489c8d2
3 changed files with 21 additions and 2 deletions
+2 -1
View File
@@ -6,6 +6,7 @@ use App\Models\ActivityLog;
use App\Models\ServiceRequest; use App\Models\ServiceRequest;
use App\Models\Status; use App\Models\Status;
use App\Models\User; use App\Models\User;
use App\Support\DatabaseExpression;
use Illuminate\Database\Eloquent\Builder; use Illuminate\Database\Eloquent\Builder;
use Livewire\Attributes\Layout; use Livewire\Attributes\Layout;
use Livewire\Component; use Livewire\Component;
@@ -47,7 +48,7 @@ class DashboardPage extends Component
$this->avgResolutionHours = (float) (ServiceRequest::query() $this->avgResolutionHours = (float) (ServiceRequest::query()
->whereNotNull('completed_at') ->whereNotNull('completed_at')
->whereDate('completed_at', '>=', now()->subDays(30)) ->whereDate('completed_at', '>=', now()->subDays(30))
->selectRaw('AVG(TIMESTAMPDIFF(HOUR, created_at, completed_at)) as avg_hours') ->selectRaw('AVG('.DatabaseExpression::hoursBetween('created_at', 'completed_at').') as avg_hours')
->value('avg_hours') ?? 0); ->value('avg_hours') ?? 0);
$this->statusChart = Status::query() $this->statusChart = Status::query()
+2 -1
View File
@@ -7,6 +7,7 @@ use App\Models\RequestType;
use App\Models\ServiceRequest; use App\Models\ServiceRequest;
use App\Models\Status; use App\Models\Status;
use App\Models\User; use App\Models\User;
use App\Support\DatabaseExpression;
use Illuminate\Database\Eloquent\Builder; use Illuminate\Database\Eloquent\Builder;
use Illuminate\Support\Collection; use Illuminate\Support\Collection;
@@ -63,7 +64,7 @@ class ReportService
$overdue = (clone $query)->overdue()->count(); $overdue = (clone $query)->overdue()->count();
$avgResolution = (clone $query) $avgResolution = (clone $query)
->whereNotNull('completed_at') ->whereNotNull('completed_at')
->selectRaw('AVG(TIMESTAMPDIFF(HOUR, created_at, completed_at)) as avg_hours') ->selectRaw('AVG('.DatabaseExpression::hoursBetween('created_at', 'completed_at').') as avg_hours')
->value('avg_hours'); ->value('avg_hours');
$rating = (clone $query)->whereNotNull('client_rating')->avg('client_rating'); $rating = (clone $query)->whereNotNull('client_rating')->avg('client_rating');
+17
View File
@@ -0,0 +1,17 @@
<?php
namespace App\Support;
use Illuminate\Support\Facades\DB;
class DatabaseExpression
{
public static function hoursBetween(string $startColumn, string $endColumn): string
{
if (DB::connection()->getDriverName() === 'sqlite') {
return "(julianday({$endColumn}) - julianday({$startColumn})) * 24";
}
return "TIMESTAMPDIFF(HOUR, {$startColumn}, {$endColumn})";
}
}