Support SQLite dashboard time calculations
This commit is contained in:
@@ -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()
|
||||||
|
|||||||
@@ -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');
|
||||||
|
|
||||||
|
|||||||
@@ -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})";
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user