|
|
@@ -414,6 +414,8 @@ class DashboardService
|
|
|
$item->gender_label = GenderEnum::labelFor($item->gender);
|
|
|
});
|
|
|
|
|
|
+ $this->attachPackageItems($pendingSchedules);
|
|
|
+
|
|
|
$proposalsDistanceSelect = DistanceService::sqlExpression(
|
|
|
$providersCloseLatitude,
|
|
|
$providersCloseLongitude,
|
|
|
@@ -872,42 +874,15 @@ class DashboardService
|
|
|
: 'schedule-'.$schedule->id)
|
|
|
->values();
|
|
|
|
|
|
- $packageSchedules = collect();
|
|
|
-
|
|
|
- $listedPackageIds = $pendingSchedules->pluck('service_package_id')->filter()->unique();
|
|
|
-
|
|
|
- if ($listedPackageIds->isNotEmpty()) {
|
|
|
- $packageSchedules = Schedule::query()
|
|
|
- ->join('service_package_items as spi', 'spi.schedule_id', '=', 'schedules.id')
|
|
|
- ->whereIn('spi.service_package_id', $listedPackageIds)
|
|
|
- ->whereNotIn('schedules.status', ['cancelled', 'rejected'])
|
|
|
- ->orderBy('schedules.date', 'asc')
|
|
|
- ->orderBy('schedules.start_time', 'asc')
|
|
|
- ->select([
|
|
|
- 'schedules.id',
|
|
|
- 'schedules.date',
|
|
|
- 'schedules.start_time',
|
|
|
- 'schedules.end_time',
|
|
|
- 'schedules.total_amount',
|
|
|
- 'schedules.offers_meal',
|
|
|
- 'schedules.status',
|
|
|
- 'spi.service_package_id',
|
|
|
- ])
|
|
|
- ->get()
|
|
|
- ->groupBy('service_package_id');
|
|
|
- }
|
|
|
+ $this->attachPackageItems($pendingSchedules);
|
|
|
|
|
|
- $pendingSchedules->each(function ($schedule) use ($packageSchedules) {
|
|
|
+ $pendingSchedules->each(function ($schedule) {
|
|
|
$schedule->address = [
|
|
|
'address' => $schedule->address_address,
|
|
|
'number' => $schedule->address_number,
|
|
|
'district' => $schedule->address_district,
|
|
|
];
|
|
|
|
|
|
- $schedule->package_items = $schedule->service_package_id
|
|
|
- ? $packageSchedules->get($schedule->service_package_id, collect())->values()
|
|
|
- : collect();
|
|
|
-
|
|
|
unset(
|
|
|
$schedule->address_address,
|
|
|
$schedule->address_number,
|
|
|
@@ -1375,7 +1350,60 @@ class DashboardService
|
|
|
];
|
|
|
}
|
|
|
|
|
|
- // gera urls apenas para fotos verificadas ou visiveis ao proprio prestador.
|
|
|
+ private function attachPackageItems(Collection $schedules): void
|
|
|
+ {
|
|
|
+ $packageIds = $schedules->pluck('service_package_id')->filter()->unique();
|
|
|
+ $standaloneIds = $schedules->whereNull('service_package_id')->pluck('id')->filter()->unique();
|
|
|
+
|
|
|
+ if ($packageIds->isEmpty() && $standaloneIds->isEmpty()) {
|
|
|
+ $schedules->each(fn ($schedule) => $schedule->package_items = collect());
|
|
|
+
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ $rows = Schedule::query()
|
|
|
+ ->leftJoin('service_package_items as spi', 'spi.schedule_id', '=', 'schedules.id')
|
|
|
+ ->where(function ($query) use ($packageIds, $standaloneIds) {
|
|
|
+ if ($packageIds->isNotEmpty()) {
|
|
|
+ $query->orWhereIn('spi.service_package_id', $packageIds);
|
|
|
+ }
|
|
|
+
|
|
|
+ if ($standaloneIds->isNotEmpty()) {
|
|
|
+ $query->orWhereIn('schedules.id', $standaloneIds);
|
|
|
+ }
|
|
|
+ })
|
|
|
+ ->whereNotIn('schedules.status', ['cancelled', 'rejected'])
|
|
|
+ ->orderBy('schedules.date', 'asc')
|
|
|
+ ->orderBy('schedules.start_time', 'asc')
|
|
|
+ ->select([
|
|
|
+ 'schedules.id',
|
|
|
+ 'schedules.date',
|
|
|
+ 'schedules.start_time',
|
|
|
+ 'schedules.end_time',
|
|
|
+ 'schedules.total_amount',
|
|
|
+ 'schedules.offers_meal',
|
|
|
+ 'schedules.status',
|
|
|
+ 'spi.service_package_id',
|
|
|
+ ])
|
|
|
+ ->get();
|
|
|
+
|
|
|
+ $byPackage = $rows->whereNotNull('service_package_id')->groupBy('service_package_id');
|
|
|
+ $byId = $rows->keyBy('id');
|
|
|
+
|
|
|
+ $schedules->each(function ($schedule) use ($byPackage, $byId) {
|
|
|
+ if ($schedule->service_package_id) {
|
|
|
+ $schedule->package_items = $byPackage
|
|
|
+ ->get($schedule->service_package_id, collect())
|
|
|
+ ->values();
|
|
|
+
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ $own = $byId->get($schedule->id);
|
|
|
+
|
|
|
+ $schedule->package_items = $own ? collect([$own]) : collect();
|
|
|
+ });
|
|
|
+ }
|
|
|
|
|
|
private function providerPhotoUrls(iterable $providerIds): Collection
|
|
|
{
|