This commit is contained in:
Dr Masroor Ehsan 2025-01-01 13:41:49 +06:00
parent a1d063b0dd
commit 16307a4c19
7 changed files with 42 additions and 24 deletions

View File

@ -32,8 +32,11 @@ public function save(StudyHistoryRequest $request)
abort_unless(auth()->user()->can(Permission::StudyHistoryEdit) || auth()->user()->isAdmin(), 403);
$this->decodeKeys();
$details = StudyDetails::historyOnly($this->key);
$details->update($request->validated());
$payload = array_trim_strings($request->validated());
unset($payload['study_id']);
$details->update($payload);
return redirect()->route('staff.history.view', _h($this->key));
// return redirect()->route('staff.history.view', _h($this->key));
return redirect()->route('staff.history.view', $details->hash);
}
}

View File

@ -2,6 +2,8 @@
namespace App\Http\Requests;
use App\Models\Study;
use App\Rules\ExistsByHash;
use Illuminate\Foundation\Http\FormRequest;
class StudyHistoryRequest extends FormRequest
@ -9,7 +11,7 @@ class StudyHistoryRequest extends FormRequest
public function rules(): array
{
return [
'study_id' => ['required', 'exists:studies'],
'study_id' => ['required', new ExistsByHash(Study::class)],
'clinical_history' => ['nullable'],
'surgical_history' => ['nullable'],
'lab_results' => ['nullable'],

View File

@ -30,11 +30,11 @@ protected function casts(): array
public static function historyOnly(int $studyId): self
{
return self::where('study_id', $studyId)->first(['id', 'study_id', 'clinical_history', 'surgical_history', 'lab_results', 'clinical_diagnosis']);
return self::where('study_id', $studyId)->firstOrFail(['id', 'study_id', 'clinical_history', 'surgical_history', 'lab_results', 'clinical_diagnosis']);
}
public static function seriesOnly(int $studyId): self
{
return self::where('study_id', $studyId)->first(['id', 'study_id', 'series']);
return self::where('study_id', $studyId)->firstOrFail(['id', 'study_id', 'series']);
}
}

View File

@ -13,6 +13,11 @@ public static function idToHash(int $key): string
return _h($key);
}
public static function hashToId(string $hash): int
{
return unhash_it($hash);
}
/**
* Get HashId column name.
*/

View File

@ -25,16 +25,16 @@ public function __construct(string $class)
{
$this->model = new $class;
if (! method_exists($this->model, 'bootHashableId')) {
if (! method_exists($this->model, 'getHashAttribute')) {
throw new InvalidArgumentException('Class does not use HashableId');
}
parent::__construct($class, $this->model->shouldHashPersist() ? $this->model->getHashColumnName() : $this->model->getKeyName());
parent::__construct($class, $this->model->getKeyName());
}
public function validate(string $attribute, mixed $value, Closure $fail): void
{
if (! $value || (! $this->model->shouldHashPersist() && ! $value = $this->model::hashToId($value))) {
if (! $value || (! $value = $this->model::hashToId($value))) {
$this->fail($attribute, $fail);
return;

View File

@ -31,6 +31,20 @@ function array_purge(array $ary): array
}
}
if (! function_exists('array_trim_strings')) {
function array_trim_strings(array $ary): array
{
return array_filter($ary, function ($v) {
if (! is_string($v)) {
return $v;
}
$v = trim($v);
return blank($v) ? null : $v;
});
}
}
if (! function_exists('sync_agent_id')) {
function sync_agent_id(): int
{

View File

@ -11,40 +11,34 @@
<div class="mt-10 sm:mt-0">
<h4>Clinical Information</h4>
@dd($details)
<form action="{{ route('staff.history.save', _h($details->study_id)) }}" method="post">
<form action="{{ route('staff.history.save', $details->hash) }}" method="post">
@csrf
<input type="hidden" name="study_id" value="{{ $details->study_id }}">
<input type="hidden" name="study_id" value="{{ $details->hash }}">
<h5>Clinical History</h5>
<div class="p-4 border-gray-100">
<textarea name="clinical_history" id="clinical_history" cols="30" rows="10"
value="{!! $details->clinical_history !!}">
</textarea>
<textarea name="clinical_history" id="clinical_history" cols="90"
rows="10">{!! $details->clinical_history !!}</textarea>
</div>
<x-section-border/>
<h5>surgical history</h5>
<div class="p-4 border-gray-100">
<textarea name="surgical_history" id="surgical_history" cols="30" rows="10"
value="{!! $details->surgical_history !!}">
</textarea>
<textarea name="surgical_history" id="surgical_history" cols="90"
rows="10">{!! $details->surgical_history !!}</textarea>
</div>
<x-section-border/>
<h5>lab results</h5>
<div class="p-4 border-gray-100">
<textarea name="lab_results" id="lab_results" cols="30" rows="10"
value="{!! $details->lab_results !!}">
</textarea>
<textarea name="lab_results" id="lab_results" cols="90"
rows="10">{!! $details->lab_results !!}</textarea>
</div>
<x-section-border/>
<h5>clinical diagnosis</h5>
<div class="p-4 border-gray-100">
<textarea name="clinical_diagnosis" id="clinical_diagnosis" cols="30" rows="10"
value="{!! $details->clinical_diagnosis !!}">
</textarea>
<textarea name="clinical_diagnosis" id="clinical_diagnosis" cols="90"
rows="10">{!! $details->clinical_diagnosis !!}</textarea>
</div>
<button type="submit">Save</button>