HEX
Server: nginx/1.24.0
System: Linux DGT-WORDPRESS-VM-SERVER 6.14.0-1014-azure #14~24.04.1-Ubuntu SMP Fri Oct 3 20:52:11 UTC 2025 x86_64
User: ubuntu (1000)
PHP: 8.4.12
Disabled: NONE
Upload Files
File: /mnt/data/ghayatcom/ghayatcom-api/app/ReferalDetails.php
<?php

namespace App;

use App\Allergie;
use App\Appointment;
use App\ExaminationDetails;
use App\Examinations;
use App\HealthProfileAllergie;
use App\HealthProfileMedication;
use App\Medication;
use App\ReferalRequests;
use App\ReferalRequestDetail;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\SoftDeletes;
use Illuminate\Database\Eloquent\Relations\BelongsToMany;
use Illuminate\Database\Eloquent\Relations\HasMany;
use Storage;

/**
 * App\ReferalDetails
 *
 * @property mixed $is_referal
 * @property mixed $presenting_complaints
 * @property mixed $indications
 * @property mixed $special_comments
 * @property mixed $last_menstrual_period
 * @property mixed $other_examinations
 * @property mixed $additional_comments
 * @property mixed $status
 */
class ReferalDetails extends Model
{
    use SoftDeletes;

    protected $appends = ['request_for_str','examinations_str','specific_examinations_str','allergies_str','current_medications_str','examination_list','examinations_data','specific_examinations_data','request_for_data'];
    protected $hidden = ['deleted_by','deleted_at'];

    public function referalExaminations(): BelongsToMany
    {
        return $this->belongsToMany(Examinations::class, 'referal_examinations');
    }
    public function referalSpecificExaminations(): BelongsToMany
    {
        return $this->belongsToMany(ExaminationDetails::class, 'referal_specific_examinations');
    }
    public function referalRequestFor(): HasMany
    {
        return $this->hasMany(ReferalRequestDetail::class, 'referal_details_id', 'id');
    }
    public function getRequestForStrAttribute()
    {
        return $this->referalRequestFor()->get()->toArray();
    }

    public function getExaminationsStrAttribute()
    {
        if (! empty($this->examinations)) {
            $list = explode(',', $this->examinations);
            $out = [];
            foreach ($list as $key => $value) {
                $val = Examinations::select('examination')->find($value);
                $out[] = $val->examination;
            }

            return $out;
        } else {
            return $this->examinations;
        }
    }

    public function getSpecificExaminationsStrAttribute()
    {
        if (! empty($this->specific_examinations)) {
            $list = explode(',', $this->specific_examinations);
            $out = [];
            foreach ($list as $key => $value) {
                $val = ExaminationDetails::select('name')->find($value);
                $out[] = $val->name;
            }
            return $out;
        } else {
            return $this->specific_examinations;
        }
    }

    public function getAllergiesStrAttribute()
    {
        // $appointment = Appointment::find($this->appointment_id);
        // $patient_id = $appointment->patient_id;
        // $allergies = HealthProfileAllergie::where('user_id', $patient_id)->get();
        // $out = [];
        // foreach ($allergies as $key => $value) {
        //     $out[] = $value->allergie_name;
        // }
        // return $out;
        $out = [];
        $appointment = Appointment::find($this->appointment_id);
        $patient_id = $appointment->patient_id;
        $doctor_id = $appointment->doctor_id;
        $out[] = GeneralHealthConditionPatient::where('doctor_id', $doctor_id)
        ->where('patient_id', $patient_id)
        ->where('type', 'Allergy')
        ->value('description');
        return $out;
    }

    public function getCurrentMedicationsStrAttribute()
    {
        // $appointment = Appointment::find($this->appointment_id);
        // $patient_id = $appointment->patient_id;
        // $medications = HealthProfileMedication::where('user_id', $patient_id)->get();
        // $out = [];
        // foreach ($medications as $key => $value) {
        //     $out[] = $value->medication_name;
        // }
        // return $out;
        
        $out = [];
        $appointment = Appointment::find($this->appointment_id);
        $patient_id = $appointment->patient_id;
        $doctor_id = $appointment->doctor_id;
        $out[] = GeneralHealthConditionPatient::where('doctor_id', $doctor_id)
        ->where('patient_id', $patient_id)
        ->where('type', 'Medication')
        ->value('description');
        return $out;


    }

    public function getExaminationListAttribute()
    {
        $list = $this->referalExaminations()->get()->toArray();
        $out = [];
        /**
         * @var array $list
         */
        foreach ($list as $key => $value) {
            $exam_id = $value['id'];
            $exe = Examinations::select('id', 'examination')->find($exam_id);

            // $specific = explode(',', $this->specific_examinations);
            $specific = $this->referalSpecificExaminations()->get()->toArray();
            $sp = [];
            /**
             * @var array $specific
             */
            foreach ($specific as $key => $val) {
                $spec_id = $val['id'];
                $val1 = ExaminationDetails::select('id', 'examination_id', 'name')->find($spec_id);
                if ($val1->examination_id == $exe->id) {
                    $sp[] = $val1->name;
                } elseif ($val1->examination_id == 5) {
                    $sp[] = $this->other_examinations;
                }
            }
            $spec_out = implode(',', $sp);
            $out[] = $exe->examination.' - '.$spec_out;
        }

        return $out;
    }

    public function getPdfAttribute($value)
    {
        // return (isset($value)) ? Storage::url('app/public/referal/' . $value) : "";
        $S3Library = new \App\Library\S3Library;
        $digimedFile = ($S3Library->s3Url($value, null, 'digimed/images/referal'));

        return (isset($value)) ? $digimedFile : '';
    }
    public function getExaminationsDataAttribute(){
        // $out = [];
        // if($this->examinations != ""){
        //     $items = explode(",",$this->examinations);
        //     $out = Examinations::select('id','examination')->whereIn('id',$items)->get()->toArray();
        //     return $out;
        // }
        // return $out;
        return $this->referalExaminations()->get()->toArray();
    }
    public function getSpecificExaminationsDataAttribute(){
        // $out = [];
        // if($this->specific_examinations != ""){
        //     $items = explode(",",$this->specific_examinations);
        //     $out = ExaminationDetails::select('id','name')->whereIn('id',$items)->get()->toArray();
        //     return $out;
        // }
        // return $out;
        return $this->referalSpecificExaminations()->get()->toArray();
    }
    public function getRequestForDataAttribute(){
        // $out = [];
        // if($this->request_for != ""){
        //     $items = explode(",",$this->request_for);
        //     $out = ReferalRequests::select('id','name')->whereIn('id',$items)->get()->toArray();
        //     return $out;
        // }
        // return $out;
        return $this->referalRequestFor()->get()->toArray();
    }
}