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); });