query(" SELECT m.*, u.email, u.full_name FROM mailbox m JOIN users u ON m.assigned_to = u.id JOIN mailbox_statuses s ON m.status_id = s.id WHERE m.due_date = DATE_ADD(CURDATE(), INTERVAL 1 DAY) AND s.name != 'closed' ")->fetchAll(); foreach ($due_tomorrow as $task) { if (!empty($task['email'])) { $subject = "تذكير: موعد نهائي لمهمة غداً - " . $task['ref_no']; $html = "

تذكير بموعد نهائي

عزيزي " . htmlspecialchars($task['full_name']) . "،

هذا تذكير بأن المهمة التالية مستحقة غداً:

يرجى متابعة المهمة وإغلاقها في الوقت المحدد.

"; $res = MailService::sendMail($task['email'], $subject, $html); if ($res['success']) { echo "Sent 24h reminder to " . $task['email'] . " for task " . $task['ref_no'] . PHP_EOL; } else { echo "Failed to send 24h reminder to " . $task['email'] . ": " . ($res['error'] ?? 'Unknown error') . PHP_EOL; } } } // 2. Overdue tasks (due date passed and still not closed) - Only send once a week or daily? // For now, let's send daily for overdue tasks to ensure they are handled. $overdue = db()->query(" SELECT m.*, u.email, u.full_name FROM mailbox m JOIN users u ON m.assigned_to = u.id JOIN mailbox_statuses s ON m.status_id = s.id WHERE m.due_date < CURDATE() AND s.name != 'closed' ")->fetchAll(); foreach ($overdue as $task) { if (!empty($task['email'])) { $subject = "تنبيه: مهمة متأخرة! - " . $task['ref_no']; $html = "

تنبيه: مهمة متأخرة

عزيزي " . htmlspecialchars($task['full_name']) . "،

هذه المهمة قد تجاوزت الموعد النهائي المحدد:

يرجى معالجة هذه المهمة في أقرب وقت ممكن.

"; $res = MailService::sendMail($task['email'], $subject, $html); if ($res['success']) { echo "Sent overdue reminder to " . $task['email'] . " for task " . $task['ref_no'] . PHP_EOL; } else { echo "Failed to send overdue reminder to " . $task['email'] . ": " . ($res['error'] ?? 'Unknown error') . PHP_EOL; } } } echo "[" . date('Y-m-d H:i:s') . "] Reminder process finished." . PHP_EOL;