|
|
@@ -138,9 +138,35 @@ class DashboardService
|
|
|
)
|
|
|
->get();
|
|
|
|
|
|
+ $pendingSchedules = Schedule::with('address:district,address,number,source_id,source,id')
|
|
|
+ ->where('schedules.client_id', $cliente->id)
|
|
|
+ ->where('schedules.status', 'pending')
|
|
|
+ ->where('schedules.schedule_type', 'default')
|
|
|
+ ->leftJoin('providers', 'providers.id', '=', 'schedules.provider_id')
|
|
|
+ ->leftJoin('users as provider_user', 'provider_user.id', '=', 'providers.user_id')
|
|
|
+ ->select(
|
|
|
+ 'schedules.id',
|
|
|
+ 'schedules.provider_id',
|
|
|
+ 'provider_user.name as provider_name',
|
|
|
+ 'schedules.date',
|
|
|
+ 'schedules.start_time',
|
|
|
+ 'schedules.end_time',
|
|
|
+ 'schedules.period_type',
|
|
|
+ 'schedules.address_id',
|
|
|
+ 'schedules.status',
|
|
|
+ DB::raw("CASE
|
|
|
+ WHEN (now() - schedules.created_at) < INTERVAL '1 hour' THEN CONCAT(ROUND(EXTRACT(EPOCH FROM (now() - schedules.created_at)) / 60), 'min')
|
|
|
+ WHEN (now() - schedules.created_at) < INTERVAL '1 day' THEN CONCAT(ROUND(EXTRACT(EPOCH FROM (now() - schedules.created_at)) / 3600), 'h')
|
|
|
+ ELSE CONCAT(ROUND(EXTRACT(EPOCH FROM (now() - schedules.created_at)) / 86400), 'd')
|
|
|
+ END as time_since_request"),
|
|
|
+ )
|
|
|
+ ->orderBy('schedules.date', 'asc')
|
|
|
+ ->get();
|
|
|
+
|
|
|
return [
|
|
|
'headerBar' => $headerBar,
|
|
|
'summaryInfos' => $summaryInfos,
|
|
|
+ 'pendingSchedules' => $pendingSchedules,
|
|
|
'nextSchedules' => $nextSchedules,
|
|
|
'lastDoneSchedules' => $lastDoneSchedules,
|
|
|
'favoriteProviders' => $favoriteProviders,
|
|
|
@@ -148,72 +174,6 @@ class DashboardService
|
|
|
];
|
|
|
}
|
|
|
|
|
|
- public function buscaPrestadores(?string $name = null, ?string $date = null): array
|
|
|
- {
|
|
|
- $user = Auth::user();
|
|
|
- $cliente = Client::where('user_id', $user->id)->first();
|
|
|
-
|
|
|
- $blockedProviderIds = ScheduleBusinessRules::getBlockedProviderIdsForClient($cliente->id);
|
|
|
- $providersWithWorkingDays = ScheduleBusinessRules::getProviderIdsWithWorkingDays();
|
|
|
-
|
|
|
- $clientPrimaryAddress = Address::where('source', 'client')
|
|
|
- ->where('source_id', $cliente->id)
|
|
|
- ->orderBy('is_primary', 'desc')
|
|
|
- ->first();
|
|
|
-
|
|
|
- return Provider::leftJoin('users as provider_user', 'provider_user.id', '=', 'providers.user_id')
|
|
|
- ->leftJoin(DB::raw("
|
|
|
- (
|
|
|
- SELECT DISTINCT ON (source_id)
|
|
|
- *
|
|
|
- FROM addresses
|
|
|
- WHERE source = 'provider'
|
|
|
- ORDER BY source_id, is_primary DESC
|
|
|
- ) as provider_address
|
|
|
- "), 'provider_address.source_id', '=', 'providers.id')
|
|
|
- ->whereNotNull('provider_address.id')
|
|
|
- ->where('provider_address.city_id', $clientPrimaryAddress?->city_id)
|
|
|
- ->whereNotIn('providers.id', $blockedProviderIds)
|
|
|
- ->whereIn('providers.id', $providersWithWorkingDays)
|
|
|
- ->whereNotNull('providers.daily_price_8h')
|
|
|
- ->whereNotNull('providers.daily_price_6h')
|
|
|
- ->whereNotNull('providers.daily_price_4h')
|
|
|
- ->whereNotNull('providers.daily_price_2h')
|
|
|
- ->when($name, fn($q) => $q->where('provider_user.name', 'ILIKE', "%{$name}%"))
|
|
|
- ->select(
|
|
|
- 'providers.id as provider_id',
|
|
|
- 'provider_user.name as provider_name',
|
|
|
- 'provider_address.district',
|
|
|
- 'providers.average_rating',
|
|
|
- 'providers.total_services',
|
|
|
- 'providers.daily_price_8h',
|
|
|
- 'providers.daily_price_6h',
|
|
|
- 'providers.daily_price_4h',
|
|
|
- 'providers.daily_price_2h',
|
|
|
- 'providers.created_at',
|
|
|
- DB::raw("(
|
|
|
- SELECT COUNT(*)
|
|
|
- FROM reviews
|
|
|
- LEFT JOIN schedules ON schedules.id = reviews.schedule_id
|
|
|
- WHERE reviews.origin = 'provider'
|
|
|
- AND schedules.provider_id = providers.id
|
|
|
- ) as total_reviews"),
|
|
|
- )
|
|
|
- ->orderBy('providers.average_rating', 'desc')
|
|
|
- ->get()
|
|
|
- ->when(
|
|
|
- $date,
|
|
|
- fn($collection) => $collection->whereIn(
|
|
|
- 'provider_id',
|
|
|
- ScheduleBusinessRules::getAvailableProviderIdsForDate(
|
|
|
- $date,
|
|
|
- $collection->pluck('provider_id')
|
|
|
- )->toArray()
|
|
|
- )->values()
|
|
|
- )
|
|
|
- ->toArray();
|
|
|
- }
|
|
|
-
|
|
|
public function dadosDashboardPrestador(): array
|
|
|
{
|
|
|
$user = Auth::user();
|