Files
aso/Modules/Linksehat/Transformers/Doctor/DoctorResourceDetail.php
2022-11-03 01:52:12 +07:00

67 lines
2.9 KiB
PHP
Executable File

<?php
namespace Modules\Linksehat\Transformers\Doctor;
use App\Helpers\Helper;
use App\Models\Organization;
use Illuminate\Http\Resources\Json\JsonResource;
use Modules\Linksehat\Transformers\Hospital\HospitalResource;
class DoctorResourceDetail extends JsonResource
{
/**
* Transform the resource into an array.
*
* @param \Illuminate\Http\Request
* @return array
*/
public function toArray($request)
{
foreach ($this->practices as $practice) {
$prices[$practice->service_code] = !empty($practice->price) ? Helper::currencyIdrFormat($practice->price) : '-';
}
$award[] = explode("\n", $this->practitioner->meta->award);
$education[] = explode("\n", $this->practitioner->meta->education);
$queryHospitals = Organization::query()
->without('meta')
->where('organizations.type', 'hospital')
->leftJoin('addresses', function ($q) {
$q->on('organizations.main_address_id', '=', 'addresses.id');
$q->where('addresses.addressable_type', '=', Organization::class);
});
if ($request->has('lat') && !empty($request->lat) && $request->has('lng') && !empty($request->lng)) {
$queryHospitals = $queryHospitals->selectRaw("organizations.*, addresses.text AS currentAddress, 6371 * acos (cos ( radians($request->lat) ) * cos( radians( addresses.lat ) ) * cos( radians( addresses.lng ) - radians($request->lng) ) + sin ( radians($request->lat) ) * sin( radians( addresses.lat ) )) as distance")->orderBy('distance', 'ASC');
}
$queryHospitals = $queryHospitals->orderBy('organizations.name', 'asc')->where('organizations.id', $this->organization_id)->get();
return [
'name' => $this->practitioner->person->full_name,
'length_of_work_year' => rand(1, 20),
'price' => $prices,
'rating' => rand(50, 100),
'photos' => [
'title' => 'doctor-avatar-' . $this->practitioner->person->id,
'url' => asset('images/default-doctor-avatar.png')
],
'spesialis' => [
[
'name' => 'Spesialis ' . $this->speciality->name,
'str' => random_int(1000000000000000, 5000000000000000)
],
],
'award' => $award,
'education' => $education,
'location_practect' => HospitalResource::collection($queryHospitals),
'available' => [
'is_chat_available' => $this->is_chat_available,
'is_video_available' => $this->is_video_available,
'is_walkin_available' => $this->is_walkin_available,
'is_instant_chat_available' => $this->is_instant_chat_available,
'day_available' => $this->day_available
]
];
}
}