2025-11-26 17:53:17 +03:00

93 lines
4.7 KiB
PHP

<?php
namespace App\Http\Resources\Intervention;
use Illuminate\Http\Request;
use Illuminate\Http\Resources\Json\JsonResource;
use App\Http\Resources\Deceased\DeceasedResource;
use App\Http\Resources\Client\ClientResource;
use App\Http\Resources\Employee\ThanatopractitionerResource;
class InterventionResource extends JsonResource
{
/**
* Transform the resource into an array.
*
* @return array<string, mixed>
*/
public function toArray(Request $request): array
{
return [
'id' => $this->id,
'client' => $this->whenLoaded('client', function () {
return new ClientResource($this->client);
}),
'deceased' => $this->whenLoaded('deceased', function () {
return new DeceasedResource($this->deceased);
}),
'order_giver' => $this->order_giver,
'location' => $this->whenLoaded('location', function () {
return [
'id' => $this->location->id,
'name' => $this->location->name
];
}),
'type' => $this->type,
'scheduled_at' => $this->scheduled_at ? $this->scheduled_at->format('Y-m-d H:i:s') : null,
'duration_min' => $this->duration_min,
'status' => $this->status,
'practitioners' => $this->whenLoaded('practitioners', function () {
return $this->practitioners->map(function ($practitioner) {
return [
'id' => $practitioner->id,
'employee_id' => $practitioner->employee_id,
'employee_name' => $practitioner->employee->full_name ?? ($practitioner->employee->first_name . ' ' . $practitioner->employee->last_name),
'diploma_number' => $practitioner->diploma_number,
'diploma_date' => $practitioner->diploma_date?->format('Y-m-d'),
'authorization_number' => $practitioner->authorization_number,
'authorization_issue_date' => $practitioner->authorization_issue_date?->format('Y-m-d'),
'authorization_expiry_date' => $practitioner->authorization_expiry_date?->format('Y-m-d'),
'notes' => $practitioner->notes,
'is_authorization_valid' => $practitioner->is_authorization_valid,
'created_at' => $practitioner->created_at?->format('Y-m-d H:i:s'),
'updated_at' => $practitioner->updated_at?->format('Y-m-d H:i:s'),
'role' => $practitioner->pivot->role ?? null,
];
});
}),
'principal_practitioner' => $this->whenLoaded('practitioners', function () {
$principal = $this->practitioners->where('pivot.role', 'principal')->first();
if (!$principal) {
return null;
}
return [
'id' => $principal->id,
'employee_id' => $principal->employee_id,
'employee_name' => $principal->employee->full_name ?? ($principal->employee->first_name . ' ' . $principal->employee->last_name),
'diploma_number' => $principal->diploma_number,
'diploma_date' => $principal->diploma_date?->format('Y-m-d'),
'authorization_number' => $principal->authorization_number,
'authorization_issue_date' => $principal->authorization_issue_date?->format('Y-m-d'),
'authorization_expiry_date' => $principal->authorization_expiry_date?->format('Y-m-d'),
'notes' => $principal->notes,
'is_authorization_valid' => $principal->is_authorization_valid,
'created_at' => $principal->created_at?->format('Y-m-d H:i:s'),
'updated_at' => $principal->updated_at?->format('Y-m-d H:i:s'),
'role' => $principal->pivot->role ?? null,
];
}),
'attachments_count' => $this->attachments_count,
'notes' => $this->notes,
'created_by' => $this->created_by,
'created_at' => $this->created_at->format('Y-m-d H:i:s'),
'updated_at' => $this->updated_at->format('Y-m-d H:i:s'),
'attachments' => $this->whenLoaded('attachments', function () {
return InterventionAttachmentResource::collection($this->attachments);
}),
'notifications' => $this->whenLoaded('notifications', function () {
return InterventionNotificationResource::collection($this->notifications);
})
];
}
}