Commit 497401cb authored by Mahmoud Aglan's avatar Mahmoud Aglan

Add manual status change buttons for programs and groups

Programs: activate (draft/closed→active), close (active→closed)
Groups: activate (forming/on_hold→active), pause (active→on_hold)
Co-Authored-By: 's avatarClaude Opus 4.6 <noreply@anthropic.com>
parent d6f1c86b
...@@ -60,6 +60,17 @@ public function sortColumn(string $column): void ...@@ -60,6 +60,17 @@ public function sortColumn(string $column): void
} }
} }
public function changeStatus(string $uuid, string $newStatus, TrainingProgramService $service): void
{
try {
$program = TrainingProgram::where('uuid', $uuid)->firstOrFail();
$service->changeStatus($program, $newStatus);
session()->flash('success', __('تم تحديث حالة البرنامج بنجاح'));
} catch (DomainException $e) {
session()->flash('error', $e->getMessage());
}
}
public function delete(string $uuid, TrainingProgramService $service): void public function delete(string $uuid, TrainingProgramService $service): void
{ {
try { try {
......
...@@ -88,10 +88,23 @@ class="w-full px-4 py-2 border border-gray-300 rounded-lg focus:ring-2 focus:rin ...@@ -88,10 +88,23 @@ class="w-full px-4 py-2 border border-gray-300 rounded-lg focus:ring-2 focus:rin
<td class="px-4 py-3 text-center"> <td class="px-4 py-3 text-center">
<div class="flex items-center justify-center gap-3"> <div class="flex items-center justify-center gap-3">
@can('groups.update') @can('groups.update')
@if($sv === 'forming')
<button wire:click="changeStatus('{{ $group->uuid }}', 'active')"
wire:confirm="{{ __('تفعيل هذه المجموعة؟') }}"
class="text-emerald-600 hover:text-emerald-800 text-sm font-medium">{{ __('تفعيل') }}</button>
@elseif($sv === 'on_hold')
<button wire:click="changeStatus('{{ $group->uuid }}', 'active')"
wire:confirm="{{ __('إعادة تفعيل هذه المجموعة؟') }}"
class="text-emerald-600 hover:text-emerald-800 text-sm font-medium">{{ __('تفعيل') }}</button>
@elseif($sv === 'active')
<button wire:click="changeStatus('{{ $group->uuid }}', 'on_hold')"
wire:confirm="{{ __('إيقاف هذه المجموعة مؤقتاً؟') }}"
class="text-amber-600 hover:text-amber-800 text-sm font-medium">{{ __('إيقاف') }}</button>
@endif
<a href="{{ route('groups.edit', $group) }}" wire:navigate <a href="{{ route('groups.edit', $group) }}" wire:navigate
class="text-green-600 hover:text-green-800 text-sm">{{ __('تعديل') }}</a> class="text-blue-600 hover:text-blue-800 text-sm">{{ __('تعديل') }}</a>
@endcan @endcan
<a href="{{ route('groups.print', $group) }}" target="_blank" class="text-green-600 hover:text-green-700 active:text-green-800 text-sm transition-colors">{{ __('طباعة') }}</a> <a href="{{ route('groups.print', $group) }}" target="_blank" class="text-gray-500 hover:text-gray-700 text-sm transition-colors">{{ __('طباعة') }}</a>
@can('groups.delete') @can('groups.delete')
<button wire:click="deleteGroup('{{ $group->uuid }}')" <button wire:click="deleteGroup('{{ $group->uuid }}')"
wire:confirm="{{ __('هل أنت متأكد من حذف هذه المجموعة؟ سيتم حذف جميع الجداول والحصص والتسجيلات المرتبطة بها نهائيًا.') }}" wire:confirm="{{ __('هل أنت متأكد من حذف هذه المجموعة؟ سيتم حذف جميع الجداول والحصص والتسجيلات المرتبطة بها نهائيًا.') }}"
......
...@@ -110,6 +110,25 @@ class="w-full px-3 py-2 text-sm border border-gray-300 rounded-lg focus:ring-2 f ...@@ -110,6 +110,25 @@ class="w-full px-3 py-2 text-sm border border-gray-300 rounded-lg focus:ring-2 f
<td class="px-4 py-3 text-end"> <td class="px-4 py-3 text-end">
<div class="flex items-center justify-end gap-2"> <div class="flex items-center justify-end gap-2">
@permission('programs.update') @permission('programs.update')
@if($statusValue === 'draft')
<button wire:click="changeStatus('{{ $program->uuid }}', 'active')"
wire:confirm="{{ __('تفعيل هذا البرنامج؟') }}"
class="text-green-600 hover:text-green-800 text-sm font-medium">
{{ __('تفعيل') }}
</button>
@elseif($statusValue === 'closed')
<button wire:click="changeStatus('{{ $program->uuid }}', 'active')"
wire:confirm="{{ __('إعادة تفعيل هذا البرنامج؟') }}"
class="text-green-600 hover:text-green-800 text-sm font-medium">
{{ __('تفعيل') }}
</button>
@elseif($statusValue === 'active')
<button wire:click="changeStatus('{{ $program->uuid }}', 'closed')"
wire:confirm="{{ __('إغلاق هذا البرنامج؟') }}"
class="text-amber-600 hover:text-amber-800 text-sm font-medium">
{{ __('إغلاق') }}
</button>
@endif
<a href="{{ route('programs.edit', $program) }}" wire:navigate <a href="{{ route('programs.edit', $program) }}" wire:navigate
class="text-blue-600 hover:text-blue-800 text-sm font-medium"> class="text-blue-600 hover:text-blue-800 text-sm font-medium">
{{ __('تعديل') }} {{ __('تعديل') }}
...@@ -183,6 +202,14 @@ class="text-red-600 hover:text-red-800 text-sm font-medium"> ...@@ -183,6 +202,14 @@ class="text-red-600 hover:text-red-800 text-sm font-medium">
<div class="flex items-center justify-end gap-4 border-t border-gray-100 pt-3"> <div class="flex items-center justify-end gap-4 border-t border-gray-100 pt-3">
@permission('programs.update') @permission('programs.update')
@if($statusValue === 'draft' || $statusValue === 'closed')
<button wire:click="changeStatus('{{ $program->uuid }}', 'active')"
wire:confirm="{{ __('تفعيل هذا البرنامج؟') }}"
class="inline-flex items-center gap-1 py-2 text-green-600 hover:text-green-800 text-sm font-medium">
<svg class="w-4 h-4" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M5 13l4 4L19 7"/></svg>
{{ __('تفعيل') }}
</button>
@endif
<a href="{{ route('programs.edit', $program) }}" wire:navigate <a href="{{ route('programs.edit', $program) }}" wire:navigate
class="inline-flex items-center gap-1 py-2 text-blue-600 hover:text-blue-800 text-sm font-medium"> class="inline-flex items-center gap-1 py-2 text-blue-600 hover:text-blue-800 text-sm font-medium">
<svg class="w-4 h-4" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M11 5H6a2 2 0 00-2 2v11a2 2 0 002 2h11a2 2 0 002-2v-5m-1.414-9.414a2 2 0 112.828 2.828L11.828 15H9v-2.828l8.586-8.586z"/></svg> <svg class="w-4 h-4" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M11 5H6a2 2 0 00-2 2v11a2 2 0 002 2h11a2 2 0 002-2v-5m-1.414-9.414a2 2 0 112.828 2.828L11.828 15H9v-2.828l8.586-8.586z"/></svg>
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment