@extends('layouts.app') @section('title', __('messages.dashboard')) @section('page_title', __('messages.dashboard')) @section('breadcrumb')@endsection @section('content') {{-- ============== KPI Cards (الصف الأول) ============== --}}
مبيعات اليوم
{{ number_format($kpi['sales_today'], 2) }}
{{ $kpi['orders_today'] }} فاتورة
ربح اليوم
{{ number_format($kpi['profit_today'], 2) }}
{{ $kpi['sales_today'] > 0 ? number_format($kpi['profit_today'] / $kpi['sales_today'] * 100, 1) : 0 }}% هامش
مبيعات الشهر
{{ number_format($kpi['sales_month'], 0) }}
{{ now()->format('F Y') }}
مديونيات معلّقة
{{ number_format($kpi['pending_due'], 2) }}
فواتير لم تُسدّد بعد
{{-- ============== KPI Cards (الصف الثانى — حالة المخزون) ============== --}}
قيمة المخزون
{{ number_format($kpi['inventory_value'], 0) }}
ج.م إجمالى
منتهية الصلاحية
{{ $kpi['expired_cnt'] }}
@can('inventory.view') عرض التفاصيل @else تشغيلات تالفة @endcan
قاربت على الانتهاء
{{ $kpi['near_expiry_cnt'] }}
@can('inventory.view') خلال 90 يوم @else خلال 90 يوم @endcan
أصناف منخفضة
{{ $kpi['low_stock_cnt'] }}
@can('inventory.view') تحت حد إعادة الطلب @else تحت حد إعادة الطلب @endcan
{{-- ============== ETA — مصلحة الضرائب ============== --}}
الفاتورة الإلكترونية — مصلحة الضرائب المصرية (ETA)
{{ $kpi['eta_pharmacies'] }} صيدلية مُفعّلة
فى الطابور {{ $kpi['eta_queued'] }} لم تُرسل بعد
مُرسلة اليوم {{ $kpi['eta_sent_today'] }} فى انتظار الرد
مقبولة هذا الشهر {{ $kpi['eta_valid_month'] }} {{ now()->format('F Y') }}
مرفوضة (محتاج مراجعة) {{ $kpi['eta_invalid'] }} يجب إعادة الإرسال
@if ($kpi['eta_pending_total'] > 0)
قيمة الفواتير المعلّقة على ETA: {{ number_format($kpi['eta_pending_total'], 2) }} ج.م — يجب إرسالها خلال نافذة الـ 7 أيام طبقاً لمواصفة ETA.
@endif @if ($kpi['eta_pharmacies'] === 0)
لم يتم تفعيل ETA على أى صيدلية بعد. @can('pharmacies.eta') توجّه لـ إعدادات الصيدليات وأضف بيانات اعتماد ETA لتبدأ. @endcan
@endif
{{-- آخر فواتير ETA المرفوضة --}} @if ($recent['eta_invalid']->count())
فواتير ETA مرفوضة (آخر 5)
@foreach ($recent['eta_invalid'] as $s) @endforeach
الرقمالصيدليةالعميلالإجمالى
@can('sales.view'){{ $s->reference }}@else{{ $s->reference }}@endcan {{ $s->pharmacy?->name }} {{ $s->customer?->name ?? 'عابر' }} {{ number_format($s->total, 2) }}
@endif {{-- آخر submissions --}} @if ($recent['eta_submissions']->count())
آخر إرساليات ETA
@foreach ($recent['eta_submissions'] as $sub) @php $statusColors = [ 'pending' => 'secondary', 'submitted' => 'info', 'accepted' => 'success', 'partial' => 'warning', 'rejected' => 'danger', 'failed' => 'dark', ]; @endphp @endforeach
الصيدليةالمستنداتالحالةالوقت
{{ $sub->pharmacy?->name ?? '—' }} {{ $sub->documents_count }} +{{ $sub->accepted_count }} @if ($sub->rejected_count > 0)-{{ $sub->rejected_count }}@endif {{ $sub->status }} {{ $sub->submitted_at?->diffForHumans() ?? '—' }}
@endif
{{-- ============== Charts ============== --}}
مبيعات آخر 30 يوم
المحور الأيسر: المبلغ — الأيمن: عدد الفواتير
طرق الدفع
@if ($charts['payment_methods']->count()) @else

لا توجد دفعات فى الـ 30 يوم الماضية.

@endif
أعلى الأصناف مبيعاً (30 يوم)
@if ($charts['top_items']->count()) @else

لا توجد بيانات بعد. ابدأ بإصدار فواتير من شاشة POS.

@endif
مبيعات اليوم لكل صيدلية
@if ($charts['sales_by_pharmacy']->count()) @php $totalDay = $charts['sales_by_pharmacy']->sum('total'); @endphp @foreach ($charts['sales_by_pharmacy'] as $row) @endforeach
الصيدليةالمبلغ%
{{ $row->name }} {{ number_format($row->total, 2) }}
{{ $totalDay > 0 ? number_format($row->total / $totalDay * 100, 0) : 0 }}%
@else

لا توجد مبيعات اليوم.

@endif
{{-- ============== Activity & Alerts ============== --}}
آخر الفواتير
@can('sales.view')عرض الكل@endcan
@if ($recent['sales']->count()) @foreach ($recent['sales'] as $s) @endforeach
الرقمالعميلالصيدليةالإجمالىالحالة
@can('sales.view'){{ $s->reference }}@else{{ $s->reference }}@endcan {{ $s->customer?->name ?? 'عابر' }} {{ $s->pharmacy?->name }} {{ number_format($s->total, 2) }} @php $colors = ['draft' => 'secondary', 'confirmed' => 'info', 'paid' => 'success', 'partial_paid' => 'warning', 'cancelled' => 'danger']; @endphp {{ $s->status }}
@else

لا توجد فواتير بعد.

@endif
تنبيهات قارب انتهاء
@can('inventory.view')عرض الكل@endcan
@if ($recent['near_expiry']->count()) @foreach ($recent['near_expiry'] as $b) @php $days = (int) now()->startOfDay()->diffInDays($b->expiry_date, false); @endphp @endforeach
الصنفالتشغيلةالصلاحيةالرصيد
{{ $b->item->name }} {{ $b->batch_number }} {{ $b->expiry_date?->format('Y-m-d') }} ({{ $days }} يوم) {{ number_format((float) $b->quantity_on_hand, 0) }}
@else

لا توجد تشغيلات قاربت على الانتهاء.

@endif
أصناف منخفضة المخزون
@can('inventory.view')عرض الكل@endcan
@if ($recent['low_stock']->count()) @foreach ($recent['low_stock'] as $r) @endforeach
الصنفالصيدليةالرصيدحد الطلب
{{ $r->item->name }} {{ $r->pharmacy->name }} {{ number_format((float) $r->quantity_on_hand, 0) }} {{ number_format((float) $r->reorder_level, 0) }}
@else

كل الأصناف فوق حد الطلب — تمام!

@endif
إجراءات سريعة
@can('sales.create') @endcan @can('purchases.create') @endcan @can('items.create') @endcan @can('customers.create') @endcan

{{ $kpi['pharmacies'] }}
صيدليات
{{ $kpi['customers'] }}
عملاء
{{ $kpi['suppliers'] }}
موردين
@endsection @push('scripts') @endpush