@php use App\Models\Discount; use Illuminate\Support\Facades\Auth; use App\Models\ServiceOrder; use App\Models\Certificate; use Carbon\Carbon; // ==== دالة: هل المستخدم عنده عضوية GOVI فعّالة؟ ==== $userHasActiveGoviMembership = function (?int $uid): bool { if (!$uid) return false; // شروط العضوية: // 1) عنده طلب خدمة رقمها 173323 // 2) عنده شهادة status=active لنفس العضوية وما انتهت // نفس منطق Adminusers::getHasGoviMembershipProperty $orders = ServiceOrder::query() ->with('service:id,service_no') ->where('user_id', $uid) ->whereHas('service', fn($q) => $q->where('service_no', '173323')) ->get(); // نستخرج أرقام الشهادات من الـ attachments لو النظام يحفظها هناك $certificateNos = []; foreach ($orders as $o) { $atts = is_array($o->attachments) ? $o->attachments : (json_decode($o->attachments ?? '[]', true) ?: []); foreach ($atts as $a) { if (($a['type'] ?? null) === 'certificate') { $meta = $a['meta'] ?? []; if ( ($meta['service_no'] ?? null) === '173323' && !empty($meta['certificate_no']) ) { $certificateNos[] = (string)$meta['certificate_no']; } } } } if (empty($certificateNos)) { // حتى لو ما لقينا رقم شهادة بالـattachments // ممكن العضوية مثبتة بأي شهادة active لنفس الشخص // فنكمل التشييك العام. } $today = Carbon::now('Asia/Riyadh')->toDateString(); // هل فيه شهادة فعّالة (active) وما انتهت؟ $hasActiveCert = Certificate::query() ->where('user_id', $uid) ->when(!empty($certificateNos), function ($q) use ($certificateNos) { $q->whereIn('certificate_no', $certificateNos); }) ->where('status', 'active') ->where(function ($qq) use ($today) { $qq->whereNull('end_date') ->orWhere('end_date', '>=', $today); }) ->exists(); return (bool) $hasActiveCert; }; // ===== بيانات المستخدم المسجل ===== $authUser = auth()->user(); $userId = $authUser?->id; $userEmail = $authUser?->email; $userDomain = null; if ($userEmail && str_contains($userEmail, '@')) { $userDomain = strtolower(substr(strrchr($userEmail, '@'), 1)); // بعد الـ @ } // هل هو عضو GOVI فعّال؟ $isActiveGoviMember = $userHasActiveGoviMembership($userId); // ===== جلب خصومات الدومين / المستخدم / كود GOVI_MEMBER (نشطة فقط) ===== $domainDiscounts = collect(); if ($userDomain) { $domainDiscounts = Discount::query() ->where('status', 'active') ->where('type', 'domain') ->where('domain', $userDomain) ->get(); } $userDiscounts = collect(); if ($userId) { $userDiscounts = Discount::query() ->where('status', 'active') ->where('type', 'user') ->where(function ($q) use ($userId) { // user_ids قد تكون [3942] (int) أو ["3942"] (string) $q->whereJsonContains('user_ids', (string) $userId) ->orWhereJsonContains('user_ids', (int) $userId); }) ->get(); } // خصم العضوية GOVI_MEMBER (نوع code) $goviCodeDiscounts = collect(); if ($isActiveGoviMember) { $goviCodeDiscounts = Discount::query() ->where('status', 'active') ->where('type', 'code') ->where('code', 'GOVI_MEMBER') ->get(); // لو مو عضو، ما نجيبها أصلًا } // ===== دالة مساعدة لحساب أفضل خصم لخدمة معيّنة (تشمل GOVI_MEMBER) ===== $applyBestDiscount = function ($basePrice, $serviceId) use ($domainDiscounts, $userDiscounts, $goviCodeDiscounts) { $base = (float) ($basePrice ?? 0); if (!($base > 0)) { return 0.0; // مجانية من الأساس } $candidates = collect(); $filterForService = function ($discount) use ($serviceId) { // service_ids ممكن تكون [] أو null => ينطبق على الكل $sids = is_array($discount->service_ids) ? $discount->service_ids : (json_decode($discount->service_ids ?? 'null', true) ?: null); return empty($sids) || in_array( (int)$serviceId, array_map('intval', (array)$sids), true ); }; if ($domainDiscounts->isNotEmpty()) { $candidates = $candidates->merge( $domainDiscounts->filter($filterForService) ); } if ($userDiscounts->isNotEmpty()) { $candidates = $candidates->merge( $userDiscounts->filter($filterForService) ); } // خصم عضوية GOVI (code = GOVI_MEMBER) if ($goviCodeDiscounts->isNotEmpty()) { $candidates = $candidates->merge( $goviCodeDiscounts->filter($filterForService) ); } if ($candidates->isEmpty()) { return $base; // لا خصم } // حساب أكبر خصم (نسبة أو مبلغ) $bestOff = 0.0; foreach ($candidates as $d) { $val = (float) $d->discount_value; if ($d->discount_type === 'percent') { $off = max(0.0, min(100.0, $val)) * $base / 100.0; } else { // 'amount' $off = max(0.0, $val); } if ($off > $bestOff) { $bestOff = $off; } } $final = $base - $bestOff; if ($final < 0) $final = 0.0; return $final; }; @endphp
{{-- ======= شريط التصفية وعداد النتائج (يظهر في وضع القائمة) ======= --}} @if($mode === 'list')

عدد الخدمات {{ $services->count() }}

{{-- شبكة بطاقات الخدمات --}}
@forelse($services as $row) @php $computedPrice = $applyBestDiscount($row->price ?? 0, $row->id); @endphp
{{ \Illuminate\Support\Str::limit($row->description, 140) }}
@if(!is_null($row->duration_days)) المدة: {{ $row->duration_days }} يوم @endif السعر: @if(!($computedPrice > 0)) مجانية @else {{ number_format($computedPrice, 2) }} ر.س @endif
@empty
لا توجد خدمات مطابقة.
@endforelse
@endif {{-- ======= تفاصيل الخدمة ======= --}} @if($mode === 'detail' && $current) @php $detailPrice = $applyBestDiscount($current->price ?? 0, $current->id); $isFreeDetail = !($detailPrice > 0); // === تعديل: حساب هل لدى المستخدم خصم "user" مخصص ينطبق على هذه الخدمة الحالية === $hasUserSpecificDiscountForCurrent = false; if ($userDiscounts->isNotEmpty()) { $hasUserSpecificDiscountForCurrent = $userDiscounts->contains(function ($discount) use ($current) { $sids = is_array($discount->service_ids) ? $discount->service_ids : (json_decode($discount->service_ids ?? 'null', true) ?: null); return empty($sids) || in_array( (int) $current->id, array_map('intval', (array) $sids), true ); }); } // === نهاية التعديل الخاص بحساب خصم user على الخدمة الحالية === @endphp
{{ $current->title }}
{{ $current->description }}
 
@if($isFreeDetail) مجانية @else {{ number_format($detailPrice, 2) }} ر.س @endif
{{-- المميزات --}} @php $feat = is_array($current->features) ? $current->features : (json_decode($current->features ?? '[]', true) ?: []); @endphp @foreach($feat as $i => $f)
{{ $f }}
 
 
@endforeach

ملخص الخدمة

بيانات الخدمة

رقم الخدمة {{ $current->service_no }}
سعر الخدمة @if($isFreeDetail) مجانية @else {{ number_format($detailPrice, 2) }} ر.س @endif
مدة التنفيذ {{ $current->duration_days ? $current->duration_days . ' أيام' : '—' }}
{{-- === تعديل: تنبيه للمستخدم بأن لديه إتاحة خاصة لوجود خصم user على هذه الخدمة === --}} @if($hasUserSpecificDiscountForCurrent) @if($current?->status === 'inactive')
هذه الخدمة متاحة لكم بشكل خاص لحسابكم في GOVI.
@endif @endif {{-- === نهاية التعديل الخاص بالتنبيه === --}}
@endif {{-- Toast بسيط --}} {{-- SweetAlert خفيف --}}