fix: auto-populate prescription content and lab content from pre-selected defaults

This commit is contained in:
SajjadMahmoody
2026-04-18 13:45:07 +03:30
parent bbb727cffe
commit 4abd856bf9
7 changed files with 147 additions and 22 deletions
@@ -5,6 +5,8 @@
namespace App\Filament\Resources\PrescriptionResource\Pages;
use App\Filament\Resources\PrescriptionResource;
use App\Models\LabTest;
use App\Models\Medication;
use Filament\Resources\Pages\CreateRecord;
use Filament\Support\Enums\Width;
@@ -20,6 +22,30 @@ protected function mutateFormDataBeforeCreate(array $data): array
{
$data['doctor'] = auth()->user()?->name;
$data['issue_datetime'] = now();
$data['medication_ids'] = $data['medication_order'] ?? $data['medication_ids'] ?? [];
$content = $data['content'] ?? '';
if (empty($content) && ! empty($data['medication_ids'])) {
$medications = Medication::whereIn('id', $data['medication_ids'])->get()->keyBy('id');
$data['content'] = '<ul>' . collect($data['medication_ids'])->map(fn ($id) => isset($medications[$id])
? '<li>' . implode(' ', array_filter([
$medications[$id]->dosage_form,
$medications[$id]->name,
$medications[$id]->strength,
$medications[$id]->quantity ? '#' . $medications[$id]->quantity : null,
$medications[$id]->timing,
])) . '</li>'
: ''
)->filter()->implode('') . '</ul>';
}
$labTestIds = $data['lab_test_ids'] ?? [];
$labContent = $data['lab_content'] ?? '';
if (empty($labContent) && ! empty($labTestIds)) {
$tests = LabTest::whereIn('id', $labTestIds)->orderBy('name')->get();
$data['lab_content'] = '<ul>' . $tests->map(fn ($t) => '<li>' . $t->name . '</li>')->implode('') . '</ul>';
}
return $data;
}
@@ -5,6 +5,8 @@
namespace App\Filament\Resources\PrescriptionResource\Pages;
use App\Filament\Resources\PrescriptionResource;
use App\Models\LabTest;
use App\Models\Medication;
use Filament\Actions\Action;
use Filament\Actions\DeleteAction;
use Filament\Resources\Pages\EditRecord;
@@ -21,6 +23,30 @@ protected function mutateFormDataBeforeFill(array $data): array
{
$data['medication_order'] = $data['medication_ids'] ?? [];
$data['lab_test_order'] = $data['lab_test_ids'] ?? [];
$medicationIds = $data['medication_ids'] ?? [];
if (empty($data['content']) && ! empty($medicationIds)) {
$meds = Medication::whereIn('id', $medicationIds)->get()->keyBy('id');
$data['content'] = '<ul>' . collect($medicationIds)->map(fn ($id) => isset($meds[$id])
? '<li>' . implode(' ', array_filter([
$meds[$id]->dosage_form,
$meds[$id]->name,
$meds[$id]->strength,
$meds[$id]->quantity ? '#' . $meds[$id]->quantity : null,
$meds[$id]->timing,
])) . '</li>'
: ''
)->filter()->implode('') . '</ul>';
}
$labTestIds = $data['lab_test_ids'] ?? [];
if (empty($data['lab_content']) && ! empty($labTestIds)) {
$tests = LabTest::whereIn('id', $labTestIds)->orderBy('name')->get();
$data['lab_content'] = $tests->isNotEmpty()
? '<ul>' . $tests->map(fn ($t) => '<li>' . $t->name . '</li>')->implode('') . '</ul>'
: '';
}
return $data;
}
@@ -30,6 +56,28 @@ protected function mutateFormDataBeforeSave(array $data): array
$data['issue_datetime'] = now();
$data['medication_ids'] = $data['medication_order'] ?? $data['medication_ids'] ?? [];
$data['lab_test_ids'] = $data['lab_test_order'] ?? $data['lab_test_ids'] ?? [];
$content = $data['content'] ?? '';
if (empty($content) && ! empty($data['medication_ids'])) {
$medications = Medication::whereIn('id', $data['medication_ids'])->get()->keyBy('id');
$data['content'] = '<ul>' . collect($data['medication_ids'])->map(fn ($id) => isset($medications[$id])
? '<li>' . implode(' ', array_filter([
$medications[$id]->dosage_form,
$medications[$id]->name,
$medications[$id]->strength,
$medications[$id]->quantity ? '#' . $medications[$id]->quantity : null,
$medications[$id]->timing,
])) . '</li>'
: ''
)->filter()->implode('') . '</ul>';
}
$labContent = $data['lab_content'] ?? '';
if (empty($labContent) && ! empty($data['lab_test_ids'])) {
$tests = LabTest::whereIn('id', $data['lab_test_ids'])->orderBy('name')->get();
$data['lab_content'] = '<ul>' . $tests->map(fn ($t) => '<li>' . $t->name . '</li>')->implode('') . '</ul>';
}
return $data;
}