{{-- resources/views/advisor/monitor/live-activities.blade.php --}} @extends('layouts.advisor') @section('title', 'متابعة الأنشطة المباشرة') @section('page-title', '📡 متابعة الأنشطة المباشرة — Live Activities') @section('content') @php $statusLabels = [ 'scheduled' => 'مجدول', 'pending' => 'بانتظار التنفيذ', 'confirmed' => 'تم التنفيذ', 'absent_no_excuse' => 'غياب بدون عذر', 'absent_with_excuse' => 'غياب بعذر', 'excuse_pending' => 'عذر قيد المراجعة', 'excuse_approved' => 'تم قبول العذر', 'excuse_rejected' => 'تم رفض العذر', 'proof_rejected' => 'تم رفض الإثبات', 'cancelled' => 'ملغي', ]; $statusColors = [ 'scheduled' => 'bg-slate-100 text-slate-700 border-slate-300 dark:bg-slate-800 dark:text-slate-100 dark:border-slate-600', 'pending' => 'bg-amber-50 text-amber-700 border-amber-300 dark:bg-amber-900/40 dark:text-amber-100 dark:border-amber-500/60', 'confirmed' => 'bg-emerald-50 text-emerald-700 border-emerald-300 dark:bg-emerald-900/40 dark:text-emerald-100 dark:border-emerald-500/60', 'absent_no_excuse' => 'bg-rose-50 text-rose-700 border-rose-300 dark:bg-rose-900/40 dark:text-rose-100 dark:border-rose-500/60', 'absent_with_excuse' => 'bg-orange-50 text-orange-700 border-orange-300 dark:bg-orange-900/40 dark:text-orange-100 dark:border-orange-500/60', 'excuse_pending' => 'bg-sky-50 text-sky-700 border-sky-300 dark:bg-sky-900/40 dark:text-sky-100 dark:border-sky-500/60', 'excuse_approved' => 'bg-emerald-50 text-emerald-700 border-emerald-300 dark:bg-emerald-900/40 dark:text-emerald-100 dark:border-emerald-500/60', 'excuse_rejected' => 'bg-rose-50 text-rose-700 border-rose-300 dark:bg-rose-900/40 dark:text-rose-100 dark:border-rose-500/60', 'proof_rejected' => 'bg-rose-50 text-rose-700 border-rose-300 dark:bg-rose-900/40 dark:text-rose-100 dark:border-rose-500/60', 'cancelled' => 'bg-slate-100 text-slate-600 border-slate-300 dark:bg-slate-800 dark:text-slate-200 dark:border-slate-600', ]; $totalAll = $stats['total_all'] ?? 0; $totalOfficial = $stats['total_official'] ?? 0; $totalMemberReq = $stats['total_member_req'] ?? 0; $todayActivities = $stats['today_activities'] ?? 0; @endphp
{{-- هيدر ناعم ومفتوح --}}
قسم المتابعة الميدانية — الأنشطة المباشرة

متابعة جلسات البث والأنشطة المباشرة في التيم

هنا يراقب المستشار كل الجلسات المباشرة: ما تم تنفيذه، ما تأجل، ومن يتكرر غيابه بدون عذر ليتخذ قرارات تربوية وإدارية أدق. 💛

المستشار
{{ $advisor->name }}
{{ now()->locale('ar')->timezone(config('app.timezone'))->isoFormat('dddd D MMM YYYY, h:mm a') }}
{{-- فلاتر البحث --}}
{{-- من تاريخ --}}
{{-- إلى تاريخ --}}
{{-- حالة النشاط --}}
{{-- نوع الطلب --}}
{{-- نوع النشاط --}}
{{-- بحث عام --}}
إعادة ضبط
مجموع الأنشطة المطابقة للفلاتر: {{ $totalAll }}
{{-- كروت إحصائية سريعة --}}
{{-- إجمالي الأنشطة --}}
إجمالي الأنشطة
{{ $totalAll }}

كل الأنشطة المباشرة ضمن الفلاتر الحالية.

{{-- أنشطة اليوم --}}
أنشطة اليوم
{{ $todayActivities }}

عدد الجلسات المجدولة لتاريخ اليوم.

{{-- حسب نوع الطلب --}}
نوع الطلب
طلبات رسمية من الإدارة {{ $totalOfficial }}
طلبات مقدمة من الأعضاء {{ $totalMemberReq }}
{{-- حالات حساسة --}}
مؤشرات حساسة
جلسات غياب بدون عذر {{ $stats['status_absent_no'] ?? 0 }}
جلسات ملغاة {{ $stats['status_cancelled'] ?? 0 }}
{{-- جدول الأنشطة --}}

🧾 قائمة الأنشطة المباشرة

مرتبة من الأحدث إلى الأقدم
@forelse($activities as $activity) @php $statusKey = $activity->status ?? 'scheduled'; $label = $statusLabels[$statusKey] ?? $statusKey; $color = $statusColors[$statusKey] ?? $statusColors['scheduled']; $dateStr = $activity->scheduled_date ? \Carbon\Carbon::parse($activity->scheduled_date)->locale('ar')->isoFormat('D MMM YYYY') : 'غير محدد'; $timeStr = $activity->scheduled_time ? \Carbon\Carbon::parse($activity->scheduled_time)->format('H:i') : '--:--'; $reqLabel = $activity->request_type === 'member_request' ? 'طلب من العضو' : 'طلب رسمي من الإدارة'; $duration = ''; if (!empty($activity->duration_hours)) { $duration .= $activity->duration_hours . ' ساعة '; } if (!empty($activity->duration_minutes)) { $duration .= $activity->duration_minutes . ' دقيقة'; } if ($duration === '') { $duration = 'غير محددة'; } $totalParticipants = $activity->total_participants ?? 0; $confirmedCount = $activity->confirmed_count ?? 0; $absentNoExcuse = $activity->absent_no_excuse_count ?? 0; $absentWithExcuse = $activity->absent_with_excuse_count ?? 0; // المشاركون لهذا النشاط $participants = $participantsByActivity[$activity->id] ?? collect(); @endphp {{-- التاريخ / الوقت --}} {{-- النشاط --}} {{-- نوع الطلب --}} {{-- المنشئ --}} {{-- المشاركون --}} {{-- الحالة --}} @empty @endforelse
التاريخ / الوقت النشاط نوع الطلب المنشئ المشاركون الحالة
{{ $dateStr }} الساعة {{ $timeStr }} المدة: {{ $duration }}
{{ $activity->title ?? 'نشاط بدون عنوان' }} النوع: {{ $activity->activity_type_name ?? 'غير محدد' }} @if($activity->description) {{ $activity->description }} @endif
@if($activity->request_type === 'member_request') @else @endif {{ $reqLabel }}
{{-- الاسم --}} {{ $activity->creator_name ?? 'غير معروف' }} {{-- اليوزرنيم --}} @if(!empty($activity->creator_username)) {{ '@' . $activity->creator_username }} @endif
{{-- ملخص أرقام --}}
الإجمالي {{ $totalParticipants }}
حضروا {{ $confirmedCount }}
غياب بدون عذر {{ $absentNoExcuse }}
غياب بعذر {{ $absentWithExcuse }}
{{-- أسماء المشاركين --}} @if($participants->isNotEmpty())
المشاركون في الجلسة:
@foreach($participants as $p) {{ $p->name }} @if($p->status === 'confirmed') حضر ✅ @elseif($p->status === 'absent_with_excuse') غياب بعذر 📝 @elseif($p->status === 'absent_no_excuse') غياب بدون عذر ❌ @endif @endforeach
@else
لا توجد بيانات مفصلة عن المشاركين.
@endif
@if(in_array($statusKey, ['confirmed','excuse_approved'])) @elseif(in_array($statusKey, ['absent_no_excuse','excuse_rejected','proof_rejected','cancelled'])) @elseif(in_array($statusKey, ['pending','excuse_pending'])) @else @endif {{ $label }}
لا يوجد أنشطة مطابقة للفلاتر الحالية.
{{-- ترقيم الصفحات --}}
{{ $activities->links() }}
@endsection