60 lines
1.6 KiB
PHP
60 lines
1.6 KiB
PHP
<?php
|
|
|
|
namespace App\Models;
|
|
|
|
use App\Casts\Compressed;
|
|
use App\Domain\Report\ReportStatus;
|
|
use Illuminate\Database\Eloquent\Concerns\HasTimestamps;
|
|
use Illuminate\Database\Eloquent\Relations\BelongsTo;
|
|
|
|
class StudyReport extends BaseModel
|
|
{
|
|
use HasTimestamps;
|
|
|
|
public function study(): BelongsTo
|
|
{
|
|
return $this->belongsTo(Study::class);
|
|
}
|
|
|
|
public function radiologist(): BelongsTo
|
|
{
|
|
return $this->belongsTo(User::class, 'read_by_id');
|
|
}
|
|
|
|
public function updateStatus(ReportStatus $status, User|int|null $user = null): void
|
|
{
|
|
$user_id = me($user)->id;
|
|
$params = ['report_status' => $status->value, 'read_by_id' => $user_id];
|
|
$this->update($params);
|
|
|
|
$params = ['report_status' => $status->value];
|
|
switch ($status) {
|
|
case ReportStatus::Finalized:
|
|
$params['reporting_physician_id'] = $user_id;
|
|
$params['reported_at'] = now();
|
|
break;
|
|
|
|
case ReportStatus::Approved:
|
|
if ($this->study->reporting_physician_id === null) {
|
|
$params['reporting_physician_id'] = $user_id;
|
|
$params['reported_at'] = now();
|
|
}
|
|
$params['approving_physician_id'] = $user_id;
|
|
$params['approved_at'] = now();
|
|
break;
|
|
}
|
|
$this->study->update($params);
|
|
}
|
|
|
|
/**
|
|
* @return array<string, string>
|
|
*/
|
|
protected function casts(): array
|
|
{
|
|
return [
|
|
'report_status' => ReportStatus::class,
|
|
'content' => Compressed::class,
|
|
];
|
|
}
|
|
}
|