|
@@ -6,8 +6,10 @@ use App\Models\Address;
|
|
|
use App\Models\Client;
|
|
use App\Models\Client;
|
|
|
use App\Models\ClientFavoriteProvider;
|
|
use App\Models\ClientFavoriteProvider;
|
|
|
use App\Models\Provider;
|
|
use App\Models\Provider;
|
|
|
|
|
+use App\Models\ProviderSpeciality;
|
|
|
use App\Models\Review;
|
|
use App\Models\Review;
|
|
|
use App\Models\Schedule;
|
|
use App\Models\Schedule;
|
|
|
|
|
+use App\Models\Speciality;
|
|
|
use App\Rules\ScheduleBusinessRules;
|
|
use App\Rules\ScheduleBusinessRules;
|
|
|
use Illuminate\Support\Facades\Auth;
|
|
use Illuminate\Support\Facades\Auth;
|
|
|
use Illuminate\Support\Facades\DB;
|
|
use Illuminate\Support\Facades\DB;
|
|
@@ -43,7 +45,7 @@ class DashboardService
|
|
|
->count(),
|
|
->count(),
|
|
|
];
|
|
];
|
|
|
|
|
|
|
|
- $nextSchedules = Schedule::with('address:district,address,number,source_id,source,id,address_type')
|
|
|
|
|
|
|
+ $nextSchedules = Schedule::with('address:district,address,complement,number,source_id,source,id,address_type')
|
|
|
->where('schedules.client_id', $cliente->id)
|
|
->where('schedules.client_id', $cliente->id)
|
|
|
->whereIn('schedules.status', ['accepted', 'paid'])
|
|
->whereIn('schedules.status', ['accepted', 'paid'])
|
|
|
->leftJoin('providers', 'providers.id', '=', 'schedules.provider_id')
|
|
->leftJoin('providers', 'providers.id', '=', 'schedules.provider_id')
|
|
@@ -180,6 +182,39 @@ class DashboardService
|
|
|
->orderBy('schedules.date', 'asc')
|
|
->orderBy('schedules.date', 'asc')
|
|
|
->get();
|
|
->get();
|
|
|
|
|
|
|
|
|
|
+ $todaySchedules = Schedule::with('address:district,address,number,source_id,source,id,address_type')
|
|
|
|
|
+ ->where('schedules.client_id', $cliente->id)
|
|
|
|
|
+ ->whereIn('schedules.status', ['accepted', 'paid', 'started', 'finished'])
|
|
|
|
|
+ ->whereDate('schedules.date', now()->toDateString())
|
|
|
|
|
+ ->leftJoin('providers', 'providers.id', '=', 'schedules.provider_id')
|
|
|
|
|
+ ->leftJoin('users as provider_user', 'provider_user.id', '=', 'providers.user_id')
|
|
|
|
|
+ ->leftJoin('media', 'media.id', '=', 'providers.profile_media_id')
|
|
|
|
|
+ ->select(
|
|
|
|
|
+ 'schedules.id',
|
|
|
|
|
+ 'schedules.provider_id',
|
|
|
|
|
+ 'provider_user.name as provider_name',
|
|
|
|
|
+ 'schedules.date',
|
|
|
|
|
+ 'schedules.start_time',
|
|
|
|
|
+ 'schedules.end_time',
|
|
|
|
|
+ 'schedules.total_amount',
|
|
|
|
|
+ 'schedules.period_type',
|
|
|
|
|
+ 'schedules.schedule_type',
|
|
|
|
|
+ 'schedules.address_id',
|
|
|
|
|
+ 'schedules.status',
|
|
|
|
|
+ 'schedules.code_verified',
|
|
|
|
|
+ 'schedules.code',
|
|
|
|
|
+ 'media.url as provider_photo',
|
|
|
|
|
+ DB::raw("EXISTS(
|
|
|
|
|
+ SELECT 1 FROM reviews
|
|
|
|
|
+ WHERE reviews.schedule_id = schedules.id
|
|
|
|
|
+ AND reviews.origin = 'client'
|
|
|
|
|
+ AND reviews.origin_id = {$cliente->id}
|
|
|
|
|
+ AND reviews.deleted_at IS NULL
|
|
|
|
|
+ ) as client_reviewed"),
|
|
|
|
|
+ )
|
|
|
|
|
+ ->orderBy('schedules.start_time', 'asc')
|
|
|
|
|
+ ->get();
|
|
|
|
|
+
|
|
|
return [
|
|
return [
|
|
|
'headerBar' => $headerBar,
|
|
'headerBar' => $headerBar,
|
|
|
'summaryInfos' => $summaryInfos,
|
|
'summaryInfos' => $summaryInfos,
|
|
@@ -188,6 +223,51 @@ class DashboardService
|
|
|
'lastDoneSchedules' => $lastDoneSchedules,
|
|
'lastDoneSchedules' => $lastDoneSchedules,
|
|
|
'favoriteProviders' => $favoriteProviders,
|
|
'favoriteProviders' => $favoriteProviders,
|
|
|
'providersClose' => $providersClose,
|
|
'providersClose' => $providersClose,
|
|
|
|
|
+ 'todaySchedules' => $todaySchedules,
|
|
|
|
|
+ ];
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ public function getScheduleClienteDetails(int $scheduleId): array
|
|
|
|
|
+ {
|
|
|
|
|
+ $user = Auth::user();
|
|
|
|
|
+ $cliente = Client::where('user_id', $user->id)->firstOrFail();
|
|
|
|
|
+
|
|
|
|
|
+ $schedule = Schedule::where('schedules.id', $scheduleId)
|
|
|
|
|
+ ->where('schedules.client_id', $cliente->id)
|
|
|
|
|
+ ->leftJoin('providers', 'providers.id', '=', 'schedules.provider_id')
|
|
|
|
|
+ ->leftJoin('users as provider_user', 'provider_user.id', '=', 'providers.user_id')
|
|
|
|
|
+ ->leftJoin('custom_schedules', 'custom_schedules.schedule_id', '=', 'schedules.id')
|
|
|
|
|
+ ->leftJoin('media', 'media.id', '=', 'providers.profile_media_id')
|
|
|
|
|
+ ->select(
|
|
|
|
|
+ 'schedules.provider_id',
|
|
|
|
|
+ 'provider_user.name as provider_name',
|
|
|
|
|
+ 'providers.birth_date as provider_birth_date',
|
|
|
|
|
+ 'media.url as provider_photo',
|
|
|
|
|
+ 'custom_schedules.offers_meal',
|
|
|
|
|
+ )
|
|
|
|
|
+ ->firstOrFail();
|
|
|
|
|
+
|
|
|
|
|
+ $allSpecialities = Speciality::where('active', true)
|
|
|
|
|
+ ->select('id', 'description')
|
|
|
|
|
+ ->orderBy('description')
|
|
|
|
|
+ ->get();
|
|
|
|
|
+
|
|
|
|
|
+ $providerSpecialityIds = ProviderSpeciality::where('provider_id', $schedule->provider_id)
|
|
|
|
|
+ ->pluck('speciality_id')
|
|
|
|
|
+ ->all();
|
|
|
|
|
+
|
|
|
|
|
+ $specialities = $allSpecialities->map(fn($sp) => [
|
|
|
|
|
+ 'id' => $sp->id,
|
|
|
|
|
+ 'description' => $sp->description,
|
|
|
|
|
+ 'has_speciality' => in_array($sp->id, $providerSpecialityIds),
|
|
|
|
|
+ ])->values();
|
|
|
|
|
+
|
|
|
|
|
+ return [
|
|
|
|
|
+ 'provider_name' => $schedule->provider_name,
|
|
|
|
|
+ 'provider_birth_date' => $schedule->provider_birth_date,
|
|
|
|
|
+ 'provider_photo' => $schedule->provider_photo,
|
|
|
|
|
+ 'offers_meal' => $schedule->offers_meal,
|
|
|
|
|
+ 'specialities' => $specialities,
|
|
|
];
|
|
];
|
|
|
}
|
|
}
|
|
|
|
|
|
|
@@ -251,13 +331,14 @@ class DashboardService
|
|
|
|
|
|
|
|
$todayServices = Schedule::with('address:district,address,number,source_id,source,id')
|
|
$todayServices = Schedule::with('address:district,address,number,source_id,source,id')
|
|
|
->where('schedules.provider_id', $provider->id)
|
|
->where('schedules.provider_id', $provider->id)
|
|
|
- ->whereIn('schedules.status', ['accepted', 'paid', 'started'])
|
|
|
|
|
|
|
+ ->whereIn('schedules.status', ['accepted', 'paid', 'started', 'finished'])
|
|
|
->whereDate('schedules.date', now()->toDateString())
|
|
->whereDate('schedules.date', now()->toDateString())
|
|
|
->leftJoin('clients', 'clients.id', '=', 'schedules.client_id')
|
|
->leftJoin('clients', 'clients.id', '=', 'schedules.client_id')
|
|
|
->leftJoin('users as client_user', 'client_user.id', '=', 'clients.user_id')
|
|
->leftJoin('users as client_user', 'client_user.id', '=', 'clients.user_id')
|
|
|
->leftJoin('custom_schedules', 'custom_schedules.schedule_id', '=', 'schedules.id')
|
|
->leftJoin('custom_schedules', 'custom_schedules.schedule_id', '=', 'schedules.id')
|
|
|
->select(
|
|
->select(
|
|
|
'schedules.id',
|
|
'schedules.id',
|
|
|
|
|
+ 'schedules.client_id',
|
|
|
'client_user.name as client_name',
|
|
'client_user.name as client_name',
|
|
|
'schedules.date',
|
|
'schedules.date',
|
|
|
'schedules.start_time',
|
|
'schedules.start_time',
|
|
@@ -268,8 +349,15 @@ class DashboardService
|
|
|
'schedules.schedule_type',
|
|
'schedules.schedule_type',
|
|
|
'schedules.status',
|
|
'schedules.status',
|
|
|
'schedules.code_verified',
|
|
'schedules.code_verified',
|
|
|
- 'schedules.status',
|
|
|
|
|
|
|
+ 'schedules.code',
|
|
|
'custom_schedules.offers_meal',
|
|
'custom_schedules.offers_meal',
|
|
|
|
|
+ DB::raw("EXISTS(
|
|
|
|
|
+ SELECT 1 FROM reviews
|
|
|
|
|
+ WHERE reviews.schedule_id = schedules.id
|
|
|
|
|
+ AND reviews.origin = 'provider'
|
|
|
|
|
+ AND reviews.origin_id = {$provider->id}
|
|
|
|
|
+ AND reviews.deleted_at IS NULL
|
|
|
|
|
+ ) as provider_reviewed"),
|
|
|
)
|
|
)
|
|
|
->orderBy('schedules.start_time', 'asc')
|
|
->orderBy('schedules.start_time', 'asc')
|
|
|
->get();
|
|
->get();
|