prepare($sql); $stmt->execute($params); $overdue_items = array_merge($overdue_items, $stmt->fetchAll()); } if (!$type_filter || $type_filter === 'outbound') { $where = ["m.due_date < CURDATE()", "s.name != 'closed'"]; $params = []; if ($user_filter) { $where[] = "m.assigned_to = ?"; $params[] = $user_filter; } $where_clause = implode(" AND ", $where); $sql = "SELECT m.*, 'outbound' as type, u.full_name as assigned_name, s.name as status_name, s.color as status_color FROM outbound_mail m LEFT JOIN users u ON m.assigned_to = u.id LEFT JOIN mailbox_statuses s ON m.status_id = s.id WHERE $where_clause"; $stmt = db()->prepare($sql); $stmt->execute($params); $overdue_items = array_merge($overdue_items, $stmt->fetchAll()); } // Sort by due date usort($overdue_items, function($a, $b) { return strtotime($a['due_date']) - strtotime($b['due_date']); }); // Fetch all users for filter $users = db()->query("SELECT id, full_name FROM users ORDER BY full_name")->fetchAll(); function getStatusBadgeForReport($item) { $status_name = $item['status_name'] ?? 'غير معروف'; $status_color = $item['status_color'] ?? '#6c757d'; $display_name = $status_name; if ($status_name == 'received') $display_name = 'تم الاستلام'; if ($status_name == 'in_progress') $display_name = 'قيد المعالجة'; if ($status_name == 'closed') $display_name = 'مكتمل'; return '' . htmlspecialchars($display_name) . ''; } ?>

تقرير المهام المتأخرة

جميع المهام المتأخرة
diff($due_date)->format("%a"); ?>
رقم المرجع النوع الموضوع الموظف المسؤول الحالة تاريخ الاستحقاق الأيام المتأخرة الإجراءات
لا توجد مهام متأخرة حالياً.
يوم عرض