diff --git a/app/DAL/Studies/WorklistBase.php b/app/DAL/Studies/WorklistBase.php index 28e986b..57eeefd 100644 --- a/app/DAL/Studies/WorklistBase.php +++ b/app/DAL/Studies/WorklistBase.php @@ -42,11 +42,15 @@ abstract class WorklistBase implements IUserStudyLister public function setRadiologist(int $radiologist_id): self { $this->radiologist_id = $radiologist_id; + + return $this; } public function setStudyStatus(StudyLevelStatus $status): self { $this->studyStatus = $status; + + return $this; } private function applyRadiologist(Builder $query): Builder @@ -55,7 +59,7 @@ private function applyRadiologist(Builder $query): Builder $rad = $this->radiologist_id; $query = $query->where(function ($query) use ($rad) { $query->Where('assigned_physician_id', '=', $rad); - $query->orWhere('reading_physician_id', '=', $rad); + $query->orWhere('reporting_physician_id', '=', $rad); }); } @@ -92,6 +96,8 @@ private function applyReportStatus(Builder $query): Builder public function setReportStatus(ReportStatus $status): self { $this->reportStatus = $status; + + return $this; } protected static function reportCompleteQuery(Builder $query): Builder @@ -120,6 +126,7 @@ public function query(?int $user_id = null): Builder { $query = $this->buildQuery($user_id); $query = $this->applySort($query); + $query = $this->applyRadiologist($query); return $query; } diff --git a/app/DataTables/WorklistDataTable.php b/app/DataTables/WorklistDataTable.php index e05c3c1..23c66d4 100644 --- a/app/DataTables/WorklistDataTable.php +++ b/app/DataTables/WorklistDataTable.php @@ -4,7 +4,9 @@ use App\DAL\Studies\WorklistFactory; use App\Models\Study; +use Carbon\Carbon; use Illuminate\Database\Eloquent\Builder as QueryBuilder; +use Illuminate\Support\Facades\Storage; use Illuminate\Support\Str; use Yajra\DataTables\EloquentDataTable; use Yajra\DataTables\Html\Builder as HtmlBuilder; @@ -20,12 +22,34 @@ class WorklistDataTable extends DataTable * * @param QueryBuilder $query Results from query() method. */ + // const DATE_FORMAT = 'DD.MM.YYYY HH:mm'; + const DATE_FORMAT = 'DD MMM HH:mm'; + public function dataTable(QueryBuilder $query): EloquentDataTable { return (new EloquentDataTable($query)) ->addColumn('action', 'worklist.action') + ->editColumn('reader', function ($study) { + if ($study->readingPhysician == null) { + return ''; + } + + return ''.$study->readingPhysician->display_name; + }) + ->editColumn('images', function (Study $study) { + return $study->numInstances().'
'.human_filesize($study->disk_size).''; + }) + ->editColumn('study_date', function ($data) { + return Carbon::parse($data->study_date)->isoFormat(self::DATE_FORMAT); + }) + ->editColumn('reported_at', function ($data) { + return Carbon::parse($data->reported_at)->isoFormat(self::DATE_FORMAT); + }) + ->editColumn('received_at', function ($data) { + return Carbon::parse($data->received_at)->isoFormat(self::DATE_FORMAT); + }) ->orderColumn('patient_name', 'patient_name $1') - ->rawColumns(['priority_icon', 'report_status_led']) + ->rawColumns(['priority_icon', 'report_status_led', 'images', 'reader']) ->setRowId('id'); } @@ -81,7 +105,7 @@ public function html(): HtmlBuilder public function getColumns(): array { return [ - Column::checkbox(''), + // Column::checkbox(''), Column::make('priority_icon') ->searchable(false) ->orderable(false) @@ -107,9 +131,10 @@ public function getColumns(): array Column::make('reported_at')->searchable(false)->title('Reported'), Column::make('study_description'), - Column::make('reporting_physician_id'), + Column::make('reader') + ->title('Reader'), // Column::make('body_part_examined'), - Column::make('num_instances') + Column::make('images') ->searchable(false) ->orderable(false) ->addClass('text-center') diff --git a/app/Models/Study.php b/app/Models/Study.php index c6a090a..8d00d76 100644 --- a/app/Models/Study.php +++ b/app/Models/Study.php @@ -9,6 +9,7 @@ use App\Models\Traits\HashableId; use App\Services\Pacs\PacsUrlGen; use Carbon\Carbon; +use Illuminate\Database\Eloquent\Relations\BelongsTo; use Illuminate\Database\Eloquent\Relations\HasMany; use Illuminate\Database\Eloquent\Relations\HasOne; @@ -108,6 +109,11 @@ public function numInstances(): string return "{$this->image_count} / {$this->series_count}"; } + public function readingPhysician(): BelongsTo + { + return $this->belongsTo(User::class, 'reporting_physician_id'); + } + public function getReportStatusLedAttribute(): string { $color = match ($this->report_status) { @@ -194,6 +200,9 @@ public function allowed(): array public function toArray(): array { return array_merge(parent::toArray(), [ + 'disk_size_human' => human_filesize($this->disk_size), + 'reader_name' => $this->readingPhysician?->display_name, + 'reader_photo' => $this->readingPhysician?->profile_photo_url, 'report_status_led' => $this->getReportStatusLedAttribute(), 'priority_icon' => $this->getPriorityIcon(), 'sex_age' => $this->sexAge(), diff --git a/app/helpers.php b/app/helpers.php index 52db5aa..d24fc58 100644 --- a/app/helpers.php +++ b/app/helpers.php @@ -72,3 +72,15 @@ function may(BackedEnum|iterable|string $perm): bool return auth()->user()->can($perm); } } +if (! function_exists('human_filesize')) { + function human_filesize(int $bytes, $dec = 0): string + { + $size = ['B', 'kB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB']; + $factor = floor((strlen($bytes) - 1) / 3); + if ($factor == 0) { + $dec = 0; + } + + return sprintf("%.{$dec}f %s", $bytes / (1024 ** $factor), $size[$factor]); + } +} diff --git a/resources/imgs/ct.png b/resources/imgs/ct.png new file mode 100644 index 0000000..7be8a5b Binary files /dev/null and b/resources/imgs/ct.png differ diff --git a/resources/imgs/mg.png b/resources/imgs/mg.png new file mode 100644 index 0000000..92a1406 Binary files /dev/null and b/resources/imgs/mg.png differ diff --git a/resources/imgs/mr.png b/resources/imgs/mr.png new file mode 100644 index 0000000..08f3662 Binary files /dev/null and b/resources/imgs/mr.png differ diff --git a/resources/imgs/us.png b/resources/imgs/us.png new file mode 100644 index 0000000..ae6b014 Binary files /dev/null and b/resources/imgs/us.png differ diff --git a/resources/imgs/xr.png b/resources/imgs/xr.png new file mode 100644 index 0000000..a35994a Binary files /dev/null and b/resources/imgs/xr.png differ