|
|
@@ -110,6 +110,10 @@ class DashboardService
|
|
|
|
|
|
$blockedProviderIds = ScheduleBusinessRules::getBlockedProviderIdsForClient($cliente->id);
|
|
|
$providersWithWorkingDays = ScheduleBusinessRules::getProviderIdsWithWorkingDays();
|
|
|
+ $clientAddress = Address::where('source', 'client')
|
|
|
+ ->where('source_id', $cliente->id)
|
|
|
+ ->orderBy('is_primary', 'desc')
|
|
|
+ ->first();
|
|
|
|
|
|
$clientPrimaryAddress = Address::where('source', 'client')
|
|
|
->where('source_id', $cliente->id)
|
|
|
@@ -117,6 +121,16 @@ class DashboardService
|
|
|
->first();
|
|
|
|
|
|
$providersClose = 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')
|
|
|
+ ->where('provider_address.city_id', '=', $clientAddress->city_id)
|
|
|
->leftJoin('addresses as provider_address', function ($join) {
|
|
|
$join->on('provider_address.source_id', '=', 'providers.id')
|
|
|
->where('provider_address.source', 'provider')
|
|
|
@@ -132,7 +146,6 @@ class DashboardService
|
|
|
->select(
|
|
|
'providers.id as provider_id',
|
|
|
'provider_user.name as provider_name',
|
|
|
- 'provider_address.district',
|
|
|
'provider_address.id as address_id',
|
|
|
'providers.average_rating',
|
|
|
'providers.total_services',
|
|
|
@@ -150,9 +163,38 @@ class DashboardService
|
|
|
)
|
|
|
->get();
|
|
|
|
|
|
+ $pendingSchedules = Schedule::with('address:district,address,number,source_id,source,id,address_type')
|
|
|
+ ->where('schedules.client_id', $cliente->id)
|
|
|
+ ->whereIn('schedules.status', ['pending', 'accepted'])
|
|
|
+ ->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',
|
|
|
+ DB::raw("TO_CHAR(schedules.date, 'DD \"de\" TMMonth \"de\" YYYY') as formatted_date"),
|
|
|
+ 'schedules.start_time',
|
|
|
+ 'schedules.end_time',
|
|
|
+ 'schedules.period_type',
|
|
|
+ 'schedules.address_id',
|
|
|
+ 'schedules.status',
|
|
|
+ 'schedules.total_amount',
|
|
|
+ DB::raw("(SELECT district FROM addresses WHERE source = 'provider' AND source_id = schedules.provider_id and deleted_at is null ORDER BY is_primary DESC LIMIT 1) as provider_district"),
|
|
|
+ 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,
|
|
|
@@ -195,6 +237,7 @@ class DashboardService
|
|
|
->where('schedules.status', 'pending')
|
|
|
->leftJoin('clients', 'clients.id', '=', 'schedules.client_id')
|
|
|
->leftJoin('users as client_user', 'client_user.id', '=', 'clients.user_id')
|
|
|
+ ->leftJoin('custom_schedules', 'custom_schedules.schedule_id', '=', 'schedules.id')
|
|
|
->select(
|
|
|
'schedules.id',
|
|
|
'client_user.name as client_name',
|
|
|
@@ -207,6 +250,8 @@ class DashboardService
|
|
|
'schedules.period_type',
|
|
|
'schedules.schedule_type',
|
|
|
'schedules.address_id',
|
|
|
+ 'schedules.status',
|
|
|
+ 'custom_schedules.offers_meal',
|
|
|
DB::raw("CASE
|
|
|
WHEN (now() - schedules.created_at) < INTERVAL '1 day' THEN CONCAT(ROUND(EXTRACT(EPOCH FROM (now() - schedules.created_at)) / 3600), ' hours ago')
|
|
|
ELSE CONCAT(ROUND(EXTRACT(EPOCH FROM (now() - schedules.created_at)) / 86400), ' days ago')
|
|
|
@@ -215,6 +260,31 @@ class DashboardService
|
|
|
->orderBy('schedules.date', 'asc')
|
|
|
->get();
|
|
|
|
|
|
+ $todayServices = Schedule::with('address:district,address,number,source_id,source,id')
|
|
|
+ ->where('schedules.provider_id', $provider->id)
|
|
|
+ ->whereIn('schedules.status', ['accepted', 'paid', 'started'])
|
|
|
+ ->whereDate('schedules.date', now()->toDateString())
|
|
|
+ ->leftJoin('clients', 'clients.id', '=', 'schedules.client_id')
|
|
|
+ ->leftJoin('users as client_user', 'client_user.id', '=', 'clients.user_id')
|
|
|
+ ->leftJoin('custom_schedules', 'custom_schedules.schedule_id', '=', 'schedules.id')
|
|
|
+ ->select(
|
|
|
+ 'schedules.id',
|
|
|
+ 'client_user.name as client_name',
|
|
|
+ 'schedules.date',
|
|
|
+ 'schedules.start_time',
|
|
|
+ 'schedules.end_time',
|
|
|
+ 'schedules.total_amount',
|
|
|
+ 'schedules.period_type',
|
|
|
+ 'schedules.address_id',
|
|
|
+ 'schedules.schedule_type',
|
|
|
+ 'schedules.status',
|
|
|
+ 'schedules.code_verified',
|
|
|
+ 'schedules.status',
|
|
|
+ 'custom_schedules.offers_meal',
|
|
|
+ )
|
|
|
+ ->orderBy('schedules.start_time', 'asc')
|
|
|
+ ->get();
|
|
|
+
|
|
|
$nextSchedules = Schedule::with('address:district,address,number,source_id,source,id')
|
|
|
->where('schedules.provider_id', $provider->id)
|
|
|
->whereIn('schedules.status', ['accepted', 'paid'])
|
|
|
@@ -231,6 +301,7 @@ class DashboardService
|
|
|
'schedules.period_type',
|
|
|
'schedules.address_id',
|
|
|
'schedules.schedule_type',
|
|
|
+ 'schedules.status',
|
|
|
'custom_schedules.offers_meal',
|
|
|
)
|
|
|
->orderBy('schedules.date', 'asc')
|
|
|
@@ -269,6 +340,7 @@ class DashboardService
|
|
|
'summaryInfos' => $summaryInfos,
|
|
|
'priceSuggested' => $priceSuggested,
|
|
|
'solicitations' => $solicitations,
|
|
|
+ 'todayServices' => $todayServices,
|
|
|
'nextSchedules' => $nextSchedules,
|
|
|
'opportunities' => $opportunities,
|
|
|
];
|