%PDF- %PDF-
Mini Shell

Mini Shell

Direktori : /var/www/html/klinisol/klinisol-api/app/Models/
Upload File :
Create Path :
Current File : /var/www/html/klinisol/klinisol-api/app/Models/Submission.php

<?php

namespace App\Models;

use App\Traits\IsSignable;
use Spatie\MediaLibrary\HasMedia;
use Spatie\MediaLibrary\InteractsWithMedia;
use Spatie\MediaLibrary\MediaCollections\Models\Media;

class Submission extends BaseModel implements HasMedia
{
    use InteractsWithMedia, IsSignable;

    const ASSIGNED = 'ASSIGNED';
    const SENT = 'SENT';
    const COMPLETED = 'COMPLETED';

    protected $table = 'submissions';

    const COLLECTION_NAME = 'questions';
    const DISK = 's3';
    const FINAL_FORM = 'FINAL_FORM';

    protected $fillable = [
        'patient_id',
        'protocol_id',
        'status',
        'doctor_id',
        'description',
        'is_eligible',
    ];

    protected $casts = [
        'id'           => 'int',
        'patient_id'   => 'int',
        'protocol_id'  => 'int',
        'doctor_id'    => 'int',
        'description'  => 'string',
        'is_eligible'  => 'boolean',
        'status'       => 'string',
    ];

    public function answers()
    {
        return $this->hasMany(Answer::class);
    }

    public function patient()
    {
        return $this->belongsTo(Patient::class);
    }

    public function protocol()
    {
        return $this->belongsTo(Protocol::class);
    }

    public function doctor()
    {
        return $this->belongsTo(Doctor::class);
    }

    public static function IsEligible($answers)
    {
        $inclusion = Question::query()
                             ->whereIn('id', $answers->pluck('question_id')
                                                     ->toArray())
                             ->where('type', 'inclusion')
                             ->get();
        if ($inclusion->count() > 0) {
            $invalidInclusions = $answers->whereIn('question_id', $inclusion->pluck('id')
                                                                            ->toArray())
                                         ->where('value', '<>', 'yes')
                                         ->count();
            if ($invalidInclusions > 0)
                return false;
        }

        $exclusion = Question::query()
                             ->whereIn('id', $answers->pluck('question_id')
                                                     ->toArray())
                             ->where('type', 'exclusion')
                             ->get();
        if ($exclusion->count() > 0) {
            $invalidExclusions = $answers->whereIn('question_id', $exclusion->pluck('id')
                                                                            ->toArray())
                                         ->where('value', '<>', 'no')
                                         ->count();
            if ($invalidExclusions > 0)
                return false;
        }
        return true;
    }

    public function finalForm()
    {
        return $this->getMedia(Protocol::COLLECTION_NAME, function (Media $media) {
            return isset($media->custom_properties['type']) && $media->custom_properties['type'] === $this . self::FINAL_FORM;
        })
                    ->first();
    }
}

Zerion Mini Shell 1.0