diff --git a/app/Models/Consultation.php b/app/Models/Consultation.php
index 143d7a4..294a9d7 100644
--- a/app/Models/Consultation.php
+++ b/app/Models/Consultation.php
@@ -116,7 +116,7 @@ class Consultation extends Model
*/
public function markAsCompleted(): void
{
- if ($this->status !== ConsultationStatus::Approved) {
+ if (! in_array($this->status, [ConsultationStatus::Approved, ConsultationStatus::NoShow])) {
throw new \InvalidArgumentException(
__('messages.invalid_status_transition', ['from' => $this->status->value, 'to' => 'completed'])
);
@@ -131,7 +131,7 @@ class Consultation extends Model
*/
public function markAsNoShow(): void
{
- if ($this->status !== ConsultationStatus::Approved) {
+ if (! in_array($this->status, [ConsultationStatus::Approved, ConsultationStatus::Completed])) {
throw new \InvalidArgumentException(
__('messages.invalid_status_transition', ['from' => $this->status->value, 'to' => 'no_show'])
);
diff --git a/resources/views/livewire/admin/consultations/index.blade.php b/resources/views/livewire/admin/consultations/index.blade.php
index 6d0ffb6..0f1f2f3 100644
--- a/resources/views/livewire/admin/consultations/index.blade.php
+++ b/resources/views/livewire/admin/consultations/index.blade.php
@@ -384,37 +384,43 @@ new class extends Component
{{ __('common.edit') }}
- @if($consultation->status === \App\Enums\ConsultationStatus::Approved)
+ @if(in_array($consultation->status, [\App\Enums\ConsultationStatus::Approved, \App\Enums\ConsultationStatus::Completed, \App\Enums\ConsultationStatus::NoShow]))
-
- {{ __('admin.mark_completed') }}
-
+ @if($consultation->status !== \App\Enums\ConsultationStatus::Completed)
+
+ {{ __('admin.mark_completed') }}
+
+ @endif
-
- {{ __('admin.mark_no_show') }}
-
+ @if($consultation->status !== \App\Enums\ConsultationStatus::NoShow)
+
+ {{ __('admin.mark_no_show') }}
+
+ @endif
-
+ @if($consultation->status === \App\Enums\ConsultationStatus::Approved)
+
-
- {{ __('admin.cancel_consultation') }}
-
+
+ {{ __('admin.cancel_consultation') }}
+
+ @endif
@endif
diff --git a/resources/views/livewire/admin/consultations/show.blade.php b/resources/views/livewire/admin/consultations/show.blade.php
index 06e1d3b..04f6604 100644
--- a/resources/views/livewire/admin/consultations/show.blade.php
+++ b/resources/views/livewire/admin/consultations/show.blade.php
@@ -574,40 +574,46 @@ new class extends Component
- @if($consultation->status === \App\Enums\ConsultationStatus::Approved)
+ @if(in_array($consultation->status, [\App\Enums\ConsultationStatus::Approved, \App\Enums\ConsultationStatus::Completed, \App\Enums\ConsultationStatus::NoShow]))
{{ __('common.actions') }}
-
- {{ __('admin.mark_completed') }}
-
+ @if($consultation->status !== \App\Enums\ConsultationStatus::Completed)
+
+ {{ __('admin.mark_completed') }}
+
+ @endif
-
- {{ __('admin.mark_no_show') }}
-
+ @if($consultation->status !== \App\Enums\ConsultationStatus::NoShow)
+
+ {{ __('admin.mark_no_show') }}
+
+ @endif
-
- {{ __('admin.cancel_consultation') }}
-
+ @if($consultation->status === \App\Enums\ConsultationStatus::Approved)
+
+ {{ __('admin.cancel_consultation') }}
+
+ @endif
@endif
diff --git a/tests/Feature/Admin/ConsultationManagementTest.php b/tests/Feature/Admin/ConsultationManagementTest.php
index 92d7893..d669f97 100644
--- a/tests/Feature/Admin/ConsultationManagementTest.php
+++ b/tests/Feature/Admin/ConsultationManagementTest.php
@@ -189,14 +189,28 @@ test('admin can mark consultation as no-show', function () {
expect($consultation->fresh()->status)->toBe(ConsultationStatus::NoShow);
});
-test('cannot mark completed consultation as no-show', function () {
+test('admin can change completed consultation to no-show', function () {
$admin = User::factory()->admin()->create();
$consultation = Consultation::factory()->completed()->create();
$this->actingAs($admin);
Volt::test('admin.consultations.index')
- ->call('markNoShow', $consultation->id);
+ ->call('markNoShow', $consultation->id)
+ ->assertHasNoErrors();
+
+ expect($consultation->fresh()->status)->toBe(ConsultationStatus::NoShow);
+});
+
+test('admin can change no-show consultation to completed', function () {
+ $admin = User::factory()->admin()->create();
+ $consultation = Consultation::factory()->noShow()->create();
+
+ $this->actingAs($admin);
+
+ Volt::test('admin.consultations.index')
+ ->call('markCompleted', $consultation->id)
+ ->assertHasNoErrors();
expect($consultation->fresh()->status)->toBe(ConsultationStatus::Completed);
});