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) . ''; } ?>
| رقم المرجع | النوع | الموضوع | الموظف المسؤول | الحالة | تاريخ الاستحقاق | الأيام المتأخرة | الإجراءات |
|---|---|---|---|---|---|---|---|
| لا توجد مهام متأخرة حالياً. | |||||||
| = htmlspecialchars($item['ref_no']) ?> | = $item['type'] == 'inbound' ? 'وارد' : 'صادر' ?> | = htmlspecialchars($item['subject']) ?> | = htmlspecialchars($item['assigned_name'] ?? 'غير معين') ?> | = getStatusBadgeForReport($item) ?> | = $item['due_date'] ?> | = $diff ?> يوم | عرض |