query("SELECT COUNT(*) FROM charity_plans WHERE created_by IS NULL OR updated_by IS NULL")->fetchColumn() > 0) { db()->query("UPDATE charity_plans SET created_by = 1 WHERE created_by IS NULL"); db()->query("UPDATE charity_plans SET updated_by = 1 WHERE updated_by IS NULL"); } } catch (Exception $e) {} if (!isAdmin() && !canView('charity_plans')) { echo "
غير مصرح لك بالوصول لهذه الصفحة.
"; require_once 'includes/footer.php'; exit; } if ($_SERVER['REQUEST_METHOD'] === 'POST') { if (isset($_POST['add_plan']) && (isAdmin() || canAdd('charity_plans'))) { $title = $_POST['title']; $description = $_POST['description'] ?? ''; $start_date = $_POST['start_date'] ?? date('Y-m-d'); $end_date = $_POST['end_date'] ?? date('Y-m-d', strtotime('+1 month')); $target_value = (int)$_POST['target_value']; $achieved_value = (int)($_POST['achieved_value'] ?? 0); $status = $_POST['status'] ?? 'pending'; $stmt = db()->prepare("INSERT INTO charity_plans (title, description, start_date, end_date, target_value, achieved_value, status, created_by, updated_by) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)"); $stmt->execute([$title, $description, $start_date, $end_date, $target_value, $achieved_value, $status, $_SESSION['user_id'], $_SESSION['user_id']]); $_SESSION['success'] = "تمت إضافة الخطة بنجاح."; redirect('charity_plans.php'); } elseif (isset($_POST['edit_plan']) && (isAdmin() || canEdit('charity_plans'))) { $id = $_POST['id']; $title = $_POST['title']; $description = $_POST['description'] ?? ''; $start_date = $_POST['start_date'] ?? date('Y-m-d'); $end_date = $_POST['end_date'] ?? date('Y-m-d'); $target_value = (int)$_POST['target_value']; $achieved_value = (int)($_POST['achieved_value'] ?? 0); $status = $_POST['status'] ?? 'pending'; $stmt = db()->prepare("UPDATE charity_plans SET title = ?, description = ?, start_date = ?, end_date = ?, target_value = ?, achieved_value = ?, status = ?, updated_by = ? WHERE id = ?"); $stmt->execute([$title, $description, $start_date, $end_date, $target_value, $achieved_value, $status, $_SESSION['user_id'], $id]); $_SESSION['success'] = "تم تحديث الخطة بنجاح."; redirect('charity_plans.php'); } elseif (isset($_POST['delete_plan']) && (isAdmin() || canDelete('charity_plans'))) { $id = $_POST['id']; $stmt = db()->prepare("DELETE FROM charity_plans WHERE id = ?"); $stmt->execute([$id]); $_SESSION['success'] = "تم حذف الخطة بنجاح."; redirect('charity_plans.php'); } } $stmt = db()->query("SELECT * FROM charity_plans ORDER BY created_at DESC"); $plans = $stmt->fetchAll(); $total_plans = count($plans); $completed_plans = 0; $total_target = 0; $total_achieved = 0; foreach ($plans as $plan) { if ($plan['status'] === 'completed') { $completed_plans++; } $total_target += $plan['target_value']; $total_achieved += $plan['achieved_value']; } $completion_rate = $total_plans > 0 ? round(($completed_plans / $total_plans) * 100) : 0; $kpi_score = $total_target > 0 ? min(100, round(($total_achieved / $total_target) * 100)) : 0; $overall_score = round(($completion_rate * 0.4) + ($kpi_score * 0.6)); $status_colors = [ 'pending' => 'secondary', 'in_progress' => 'warning', 'completed' => 'success', 'cancelled' => 'danger' ]; $status_labels = [ 'pending' => 'قيد الانتظار', 'in_progress' => 'قيد التنفيذ', 'completed' => 'مكتمل', 'cancelled' => 'ملغي' ]; ?>

خطط وتقييم الجمعية (KPI)

طباعة تقرير الجمعية
التقييم العام للجمعية

%

= 85): ?> أداء متميز = 60): ?> أداء جيد بحاجة لتحسين
معدل الإنجاز (المستهدف)
%

إجمالي المحقق: من

إنجاز الخطط (الحالة)
%

خطط مكتملة: من

سجل الخطط والأهداف
0 ? min(100, round(($plan['achieved_value'] / $plan['target_value']) * 100)) : 0; ?>
عنوان الخطة / الهدف الفترة المستهدف المحقق النسبة الحالة أضيف بواسطة عُدل بواسطة الإجراءات
من:
إلى:
%
لا توجد خطط مضافة حتى الآن