ScheduleResource.php 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. <?php
  2. namespace App\Http\Resources;
  3. use App\Models\ServicePackageItem;
  4. use Illuminate\Http\Request;
  5. use Illuminate\Http\Resources\Json\JsonResource;
  6. class ScheduleResource extends JsonResource
  7. {
  8. public function toArray(Request $request): array
  9. {
  10. $servicePackageId = $this->service_package_id ?? ServicePackageItem::query()
  11. ->where('schedule_id', $this->id)
  12. ->value('service_package_id');
  13. $servicePackageItemsCount = $this->service_package_items_count ?? (
  14. $servicePackageId
  15. ? ServicePackageItem::query()
  16. ->where('service_package_id', $servicePackageId)
  17. ->whereHas('schedule', fn ($query) => $query
  18. ->whereNotIn('status', ['cancelled', 'rejected'])
  19. ->where('schedule_type', 'default'))
  20. ->count()
  21. : 0
  22. );
  23. return [
  24. 'id' => $this->id,
  25. 'client_id' => $this->client_id,
  26. 'client_name' => $this->client?->user?->name,
  27. 'provider_id' => $this->provider_id,
  28. 'provider_name' => $this->provider?->user?->name,
  29. 'gender' => $this->provider?->gender?->value,
  30. 'gender_label' => $this->provider?->gender?->label(),
  31. 'address_id' => $this->address_id,
  32. 'address_full' => $this->address ? implode(', ', array_filter([
  33. $this->address->address,
  34. $this->address->number ? "nº {$this->address->number}" : null,
  35. $this->address->district,
  36. $this->address->city ? "{$this->address->city->name}/{$this->address->state?->code}" : null,
  37. ])) : null,
  38. 'address' => new AddressResource($this->whenLoaded('address')),
  39. 'date' => $this->date?->format('Y-m-d'),
  40. 'period_type' => $this->period_type,
  41. 'schedule_type' => $this->schedule_type,
  42. 'start_time' => $this->start_time,
  43. 'end_time' => $this->end_time,
  44. 'offers_meal' => $this->offers_meal,
  45. 'status' => $this->status,
  46. 'total_amount' => $this->total_amount,
  47. 'code' => $this->code,
  48. 'code_verified' => $this->code_verified,
  49. 'service_package_id' => $servicePackageId,
  50. 'service_package_items_count' => $servicePackageItemsCount,
  51. 'created_at' => $this->created_at?->toISOString(),
  52. 'updated_at' => $this->updated_at?->toISOString(),
  53. 'deleted_at' => $this->deleted_at?->toISOString(),
  54. ];
  55. }
  56. }