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})"; + } +}