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