kept the mark as show or complete and cacle button stay after the user chose
This commit is contained in:
parent
773e1d3f7f
commit
0aa1b7f675
|
|
@ -116,7 +116,7 @@ class Consultation extends Model
|
||||||
*/
|
*/
|
||||||
public function markAsCompleted(): void
|
public function markAsCompleted(): void
|
||||||
{
|
{
|
||||||
if ($this->status !== ConsultationStatus::Approved) {
|
if (! in_array($this->status, [ConsultationStatus::Approved, ConsultationStatus::NoShow])) {
|
||||||
throw new \InvalidArgumentException(
|
throw new \InvalidArgumentException(
|
||||||
__('messages.invalid_status_transition', ['from' => $this->status->value, 'to' => 'completed'])
|
__('messages.invalid_status_transition', ['from' => $this->status->value, 'to' => 'completed'])
|
||||||
);
|
);
|
||||||
|
|
@ -131,7 +131,7 @@ class Consultation extends Model
|
||||||
*/
|
*/
|
||||||
public function markAsNoShow(): void
|
public function markAsNoShow(): void
|
||||||
{
|
{
|
||||||
if ($this->status !== ConsultationStatus::Approved) {
|
if (! in_array($this->status, [ConsultationStatus::Approved, ConsultationStatus::Completed])) {
|
||||||
throw new \InvalidArgumentException(
|
throw new \InvalidArgumentException(
|
||||||
__('messages.invalid_status_transition', ['from' => $this->status->value, 'to' => 'no_show'])
|
__('messages.invalid_status_transition', ['from' => $this->status->value, 'to' => 'no_show'])
|
||||||
);
|
);
|
||||||
|
|
|
||||||
|
|
@ -384,37 +384,43 @@ new class extends Component
|
||||||
{{ __('common.edit') }}
|
{{ __('common.edit') }}
|
||||||
</flux:button>
|
</flux:button>
|
||||||
|
|
||||||
@if($consultation->status === \App\Enums\ConsultationStatus::Approved)
|
@if(in_array($consultation->status, [\App\Enums\ConsultationStatus::Approved, \App\Enums\ConsultationStatus::Completed, \App\Enums\ConsultationStatus::NoShow]))
|
||||||
<flux:dropdown>
|
<flux:dropdown>
|
||||||
<flux:button variant="outline" size="sm" icon="ellipsis-vertical" />
|
<flux:button variant="outline" size="sm" icon="ellipsis-vertical" />
|
||||||
|
|
||||||
<flux:menu>
|
<flux:menu>
|
||||||
<flux:menu.item
|
@if($consultation->status !== \App\Enums\ConsultationStatus::Completed)
|
||||||
wire:click="markCompleted({{ $consultation->id }})"
|
<flux:menu.item
|
||||||
wire:confirm="{{ __('admin.confirm_mark_completed') }}"
|
wire:click="markCompleted({{ $consultation->id }})"
|
||||||
icon="check-circle"
|
wire:confirm="{{ __('admin.confirm_mark_completed') }}"
|
||||||
>
|
icon="check-circle"
|
||||||
{{ __('admin.mark_completed') }}
|
>
|
||||||
</flux:menu.item>
|
{{ __('admin.mark_completed') }}
|
||||||
|
</flux:menu.item>
|
||||||
|
@endif
|
||||||
|
|
||||||
<flux:menu.item
|
@if($consultation->status !== \App\Enums\ConsultationStatus::NoShow)
|
||||||
wire:click="markNoShow({{ $consultation->id }})"
|
<flux:menu.item
|
||||||
wire:confirm="{{ __('admin.confirm_mark_no_show') }}"
|
wire:click="markNoShow({{ $consultation->id }})"
|
||||||
icon="x-circle"
|
wire:confirm="{{ __('admin.confirm_mark_no_show') }}"
|
||||||
>
|
icon="x-circle"
|
||||||
{{ __('admin.mark_no_show') }}
|
>
|
||||||
</flux:menu.item>
|
{{ __('admin.mark_no_show') }}
|
||||||
|
</flux:menu.item>
|
||||||
|
@endif
|
||||||
|
|
||||||
<flux:menu.separator />
|
@if($consultation->status === \App\Enums\ConsultationStatus::Approved)
|
||||||
|
<flux:menu.separator />
|
||||||
|
|
||||||
<flux:menu.item
|
<flux:menu.item
|
||||||
wire:click="cancel({{ $consultation->id }})"
|
wire:click="cancel({{ $consultation->id }})"
|
||||||
wire:confirm="{{ __('admin.confirm_cancel_consultation') }}"
|
wire:confirm="{{ __('admin.confirm_cancel_consultation') }}"
|
||||||
icon="trash"
|
icon="trash"
|
||||||
variant="danger"
|
variant="danger"
|
||||||
>
|
>
|
||||||
{{ __('admin.cancel_consultation') }}
|
{{ __('admin.cancel_consultation') }}
|
||||||
</flux:menu.item>
|
</flux:menu.item>
|
||||||
|
@endif
|
||||||
</flux:menu>
|
</flux:menu>
|
||||||
</flux:dropdown>
|
</flux:dropdown>
|
||||||
@endif
|
@endif
|
||||||
|
|
|
||||||
|
|
@ -574,40 +574,46 @@ new class extends Component
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- Status Actions -->
|
<!-- Status Actions -->
|
||||||
@if($consultation->status === \App\Enums\ConsultationStatus::Approved)
|
@if(in_array($consultation->status, [\App\Enums\ConsultationStatus::Approved, \App\Enums\ConsultationStatus::Completed, \App\Enums\ConsultationStatus::NoShow]))
|
||||||
<div class="bg-white rounded-lg p-6 border border-zinc-200">
|
<div class="bg-white rounded-lg p-6 border border-zinc-200">
|
||||||
<flux:heading size="lg" class="mb-4">{{ __('common.actions') }}</flux:heading>
|
<flux:heading size="lg" class="mb-4">{{ __('common.actions') }}</flux:heading>
|
||||||
|
|
||||||
<div class="space-y-2">
|
<div class="space-y-2">
|
||||||
<flux:button
|
@if($consultation->status !== \App\Enums\ConsultationStatus::Completed)
|
||||||
wire:click="markCompleted"
|
<flux:button
|
||||||
wire:confirm="{{ __('admin.confirm_mark_completed') }}"
|
wire:click="markCompleted"
|
||||||
variant="outline"
|
wire:confirm="{{ __('admin.confirm_mark_completed') }}"
|
||||||
class="w-full"
|
variant="outline"
|
||||||
icon="check-circle"
|
class="w-full"
|
||||||
>
|
icon="check-circle"
|
||||||
{{ __('admin.mark_completed') }}
|
>
|
||||||
</flux:button>
|
{{ __('admin.mark_completed') }}
|
||||||
|
</flux:button>
|
||||||
|
@endif
|
||||||
|
|
||||||
<flux:button
|
@if($consultation->status !== \App\Enums\ConsultationStatus::NoShow)
|
||||||
wire:click="markNoShow"
|
<flux:button
|
||||||
wire:confirm="{{ __('admin.confirm_mark_no_show') }}"
|
wire:click="markNoShow"
|
||||||
variant="outline"
|
wire:confirm="{{ __('admin.confirm_mark_no_show') }}"
|
||||||
class="w-full"
|
variant="outline"
|
||||||
icon="x-circle"
|
class="w-full"
|
||||||
>
|
icon="x-circle"
|
||||||
{{ __('admin.mark_no_show') }}
|
>
|
||||||
</flux:button>
|
{{ __('admin.mark_no_show') }}
|
||||||
|
</flux:button>
|
||||||
|
@endif
|
||||||
|
|
||||||
<flux:button
|
@if($consultation->status === \App\Enums\ConsultationStatus::Approved)
|
||||||
wire:click="cancel"
|
<flux:button
|
||||||
wire:confirm="{{ __('admin.confirm_cancel_consultation') }}"
|
wire:click="cancel"
|
||||||
variant="danger"
|
wire:confirm="{{ __('admin.confirm_cancel_consultation') }}"
|
||||||
class="w-full"
|
variant="danger"
|
||||||
icon="trash"
|
class="w-full"
|
||||||
>
|
icon="trash"
|
||||||
{{ __('admin.cancel_consultation') }}
|
>
|
||||||
</flux:button>
|
{{ __('admin.cancel_consultation') }}
|
||||||
|
</flux:button>
|
||||||
|
@endif
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@endif
|
@endif
|
||||||
|
|
|
||||||
|
|
@ -189,14 +189,28 @@ test('admin can mark consultation as no-show', function () {
|
||||||
expect($consultation->fresh()->status)->toBe(ConsultationStatus::NoShow);
|
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();
|
$admin = User::factory()->admin()->create();
|
||||||
$consultation = Consultation::factory()->completed()->create();
|
$consultation = Consultation::factory()->completed()->create();
|
||||||
|
|
||||||
$this->actingAs($admin);
|
$this->actingAs($admin);
|
||||||
|
|
||||||
Volt::test('admin.consultations.index')
|
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);
|
expect($consultation->fresh()->status)->toBe(ConsultationStatus::Completed);
|
||||||
});
|
});
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue