From 036489c8d2c3bef6c634bdccbdbd31f33224d1a0 Mon Sep 17 00:00:00 2001 From: Crimson Date: Wed, 3 Jun 2026 07:02:17 +0500 Subject: [PATCH] Support SQLite dashboard time calculations --- app/Livewire/Dashboard/DashboardPage.php | 3 ++- app/Services/ReportService.php | 3 ++- app/Support/DatabaseExpression.php | 17 +++++++++++++++++ 3 files changed, 21 insertions(+), 2 deletions(-) create mode 100644 app/Support/DatabaseExpression.php diff --git a/app/Livewire/Dashboard/DashboardPage.php b/app/Livewire/Dashboard/DashboardPage.php index e78b293..c8cf39b 100644 --- a/app/Livewire/Dashboard/DashboardPage.php +++ b/app/Livewire/Dashboard/DashboardPage.php @@ -6,6 +6,7 @@ use App\Models\ActivityLog; use App\Models\ServiceRequest; use App\Models\Status; use App\Models\User; +use App\Support\DatabaseExpression; use Illuminate\Database\Eloquent\Builder; use Livewire\Attributes\Layout; use Livewire\Component; @@ -47,7 +48,7 @@ class DashboardPage extends Component $this->avgResolutionHours = (float) (ServiceRequest::query() ->whereNotNull('completed_at') ->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); $this->statusChart = Status::query() diff --git a/app/Services/ReportService.php b/app/Services/ReportService.php index 12c438d..97fa323 100644 --- a/app/Services/ReportService.php +++ b/app/Services/ReportService.php @@ -7,6 +7,7 @@ use App\Models\RequestType; use App\Models\ServiceRequest; use App\Models\Status; use App\Models\User; +use App\Support\DatabaseExpression; use Illuminate\Database\Eloquent\Builder; use Illuminate\Support\Collection; @@ -63,7 +64,7 @@ class ReportService $overdue = (clone $query)->overdue()->count(); $avgResolution = (clone $query) ->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'); $rating = (clone $query)->whereNotNull('client_rating')->avg('client_rating'); diff --git a/app/Support/DatabaseExpression.php b/app/Support/DatabaseExpression.php new file mode 100644 index 0000000..7fbe336 --- /dev/null +++ b/app/Support/DatabaseExpression.php @@ -0,0 +1,17 @@ +getDriverName() === 'sqlite') { + return "(julianday({$endColumn}) - julianday({$startColumn})) * 24"; + } + + return "TIMESTAMPDIFF(HOUR, {$startColumn}, {$endColumn})"; + } +}