diff --git a/app/DataTables/WorklistDataTable.php b/app/DataTables/WorklistDataTable.php index ffb9c69..573db21 100644 --- a/app/DataTables/WorklistDataTable.php +++ b/app/DataTables/WorklistDataTable.php @@ -53,33 +53,7 @@ public function dataTable(QueryBuilder $query): EloquentDataTable $rawColumns[] = $column; } - // Apply status filter - if (($status = strtolower($this->request()->get('status'))) && $status !== 'all') { - $dataTable->filter(function ($query) use ($status) { - switch ($status) { - case 'unread': - $query->where('report_status', '<', ReportStatus::Finalized->value); - break; - case 'read': - $query->where('report_status', '>=', ReportStatus::Finalized->value); - break; - case 'progress': - $query->whereNotNull('locked_at'); - break; - } - }); - } - - // Apply date range filters - $this->filterDateRange($dataTable, 'study_date', - $this->request()->get('study_from'), - $this->request()->get('study_to')); - - $this->filterDateRange($dataTable, 'received_at', - $this->request()->get('receive_from'), - $this->request()->get('receive_to')); - - $this->filterModalities($dataTable, $this->request()->get('modality')); + $this->applyFilters($dataTable); $dataTable ->orderColumn(WorklistColumn::PatientName->value, sprintf('%s $1', WorklistColumn::PatientName->value)) @@ -89,44 +63,6 @@ public function dataTable(QueryBuilder $query): EloquentDataTable return $dataTable; } - private function filterModalities(QueryDataTable $dataTable, ?string $request): void - { - if (blank($request)) { - return; - } - - $modalities = collect(explode(',', $request)) - ->filter() - ->each(fn ($m) => strtoupper($m)) - ->unique(); - - $dataTable->filter(function ($query) use ($modalities) { - $query->whereIn('modality', $modalities->toArray()); - }); - } - - private function filterDateRange(QueryDataTable $dataTable, string $column, ?string $from, ?string $to): void - { - if (blank($from)) { - return; - } - - $start = Carbon::parse($from); - $end = filled($to) ? Carbon::parse($to) : Carbon::today(); - - if ($start->eq($end)) { - $dataTable->filter(function ($query) use ($column, $start) { - $query->whereDate($column, $start); - }); - } else { - $dataTable->filter(function ($query) use ($column, $start, $end) { - $query - ->whereDate($column, '>=', $start) - ->whereDate($column, '<=', $end); - }); - } - } - /** * Get the query source of dataTable. */ @@ -291,6 +227,84 @@ protected function filename(): string return Str::slug(implode(' ', $parts), '_'); } + private function applyFilters(QueryDataTable $dataTable) + { + $status = strtolower($this->request()->get('status')); + $studyFrom = $this->request()->get('study_from'); + $studyTo = $this->request()->get('study_to'); + $receiveFrom = $this->request()->get('receive_from'); + $receiveTo = $this->request()->get('receive_to'); + $assignFrom = $this->request()->get('assign_from'); + $assignTo = $this->request()->get('assign_to'); + $readFrom = $this->request()->get('read_from'); + $readTo = $this->request()->get('read_to'); + $modality = $this->request()->get('modality'); + + $dataTable->filter( + function ($query) use ($status, $studyFrom, $studyTo, $receiveFrom, $receiveTo, $modality, $assignFrom, $assignTo, $readFrom, $readTo) { + $this->filterStatus($query, $status); + $this->filterDateRange($query, 'study_date', $studyFrom, $studyTo); + $this->filterDateRange($query, 'received_at', $receiveFrom, $receiveTo); + $this->filterDateRange($query, 'assigned_at', $assignFrom, $assignTo); + $this->filterDateRange($query, 'read_at', $readFrom, $readTo); + $this->filterModalities($query, $modality); + } + ); + } + + private function filterStatus($query, ?string $status): void + { + if (blank($status)) { + return; + } + + switch ($status) { + case 'unread': + $query->where('report_status', '<', ReportStatus::Finalized->value); + break; + case 'read': + $query->where('report_status', '>=', ReportStatus::Finalized->value); + break; + case 'progress': + $query->whereNotNull('locked_at'); + break; + } + + } + + private function filterModalities($query, ?string $request): void + { + if (blank($request)) { + return; + } + + $modalities = collect(explode(',', $request)) + ->filter() + ->each(fn ($m) => strtoupper($m)) + ->unique() + ->toArray(); + + $query->whereIn('modality', $modalities); + } + + private function filterDateRange($query, string $column, ?string $from, ?string $to): void + { + if (blank($from)) { + return; + } + + $start = Carbon::parse($from); + $end = filled($to) ? Carbon::parse($to) : null; + + if (is_null($end) || $start->eq($end)) { + $query->whereDate($column, '=', $start); + } else { + $query + ->whereDate($column, '>=', $start) + ->whereDate($column, '<=', $end); + } + } + private function columTitle(string $str): string { return Str::of($str)->slug()->replace('-', ' ')->title()->toString(); diff --git a/resources/views/staff/worklist/index.blade.php b/resources/views/staff/worklist/index.blade.php index 0f287db..d547c54 100644 --- a/resources/views/staff/worklist/index.blade.php +++ b/resources/views/staff/worklist/index.blade.php @@ -51,7 +51,7 @@ @section('page-script') @vite([ - //'resources/assets/js/forms-pickers.js', + 'resources/assets/js/cards-actions.js', 'resources/assets/js/ui-popover.js' ]) @@ -99,10 +99,11 @@