• DevPilot's avatar
    fix(facility-grids, members): cross-grid delete auth gap, blank names, wrong... · d3f2e87e
    DevPilot authored
    fix(facility-grids, members): cross-grid delete auth gap, blank names, wrong permissions, dead crons, FY string mismatch
    
    FacilityGrids:
    - ZoneTraineeController::remove()/clearZone()/move() ما كانوش بيتأكدوا إن
      المتدرب/المنطقة فعلاً تابعين لنفس الشبكة في الـ URL — أي حد عنده
      facility_grid.manage على أي شبكة كان يقدر يمسح متدرب أو يفرغ منطقة تابعة
      لشبكة تانية تمامًا لو خمّن الـ ID. دلوقتي بيتأكدوا من الملكية الأول.
    - FacilityAttendanceService::sendPaymentReminders() والـ view بتاع شاشة
      الحضور كانوا لسه بيقروا name_ar بعد ما الكويري اتصلح لـ full_name_ar —
      فكل تذكير دفع كان بيتبعت باسم فاضي، وشاشة تسجيل الحضور كانت بتطلع كل
      أسماء المدربين/المتدربين فاضية وبتحفظ entity_name_cache فاضي في القاعدة.
    - MonthlyPlanController::index() كان بيتحقق من صلاحية مختلفة عن اللي مسجلة
      على الـ route بتاعه (manage بدل view) — يعني حتى لو عندك صلاحية العرض
      بس، تاخد 403 فور ما تدخل شاشة الخطط الشهرية.
    - زرار "إنشاء شبكة" و"خطة جديدة" كانوا بيتحكموا بصلاحية facility.manage
      (بتاعة موديول Facilities المختلف) بدل facility_grid.manage بتاع
      الموديول نفسه.
    - زرار "تصدير PDF" في لوحة المالية كان بيسمي نفسه غلط — الملف اللي بينزل
      فعليًا HTML مش PDF.
    
    Members:
    - AutoFreezeService::freezeTemporaryAtAgeLimit() كانت شرطه بيدور على أكواد
      فئات (sisters_under_25 إلخ) مش موجودة في القاعدة أصلًا — الفئات الحقيقية
      المخزنة هي sister/stepchild/orphan، فالكرون كان ميت فعليًا ومفيش شقيقة
      ولا ابن زوج ولا يتيم بيتقفل تلقائيًا بعد سن 25.
    - حالة permanently_dropped (اللي بيكتبها كرون إسقاط الأعضاء) ما كانتش في
      قائمة تسميات الحالات — فكانت بتظهر بالإنجليزي الخام في أي شاشة تعرض حالة
      العضو. اتضافت هي وterminated اللي كانت ناقصة في نفس القائمة.
    - MemberController::show() كان بيبني السنة المالية الحالية بصيغة فيها شرطة
      (2025-2026) بينما كل مكان تاني في الكود بيكتبها بشرطة مايلة (2025/2026)
      زي ما فعليًا متخزن في subscriptions — فكانت شاشة بروفايل أي عضو دايمًا
      بتقول إن مفيش اشتراك للسنة الحالية حتى لو مدفوع فعلًا.
    
    Plus extreme-detail reference docs for both modules.
    d3f2e87e
index.php 3.03 KB