beginTransaction(); if ($action === 'add') { if (!canAdd('outbound')) throw new Exception('ليس لديك صلاحية الإضافة.'); $stmt = db()->prepare("INSERT INTO outbound_mail (ref_no, date_registered, due_date, sender, recipient, subject, description, status_id, assigned_to, created_by) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"); $stmt->execute([$ref_no, $date_registered, $due_date, $sender, $recipient, $subject, $description, $status_id, $assigned_to, $_SESSION['user_id']]); $id = db()->lastInsertId(); $success = 'تم إضافة البريد الصادر بنجاح.'; } else { if (!canEdit('outbound')) throw new Exception('ليس لديك صلاحية التعديل.'); $stmt = db()->prepare("UPDATE outbound_mail SET ref_no = ?, date_registered = ?, due_date = ?, sender = ?, recipient = ?, subject = ?, description = ?, status_id = ?, assigned_to = ? WHERE id = ?"); $stmt->execute([$ref_no, $date_registered, $due_date, $sender, $recipient, $subject, $description, $status_id, $assigned_to, $id]); $success = 'تم تحديث بيانات البريد الصادر بنجاح.'; } // Handle file uploads if (isset($_FILES['attachments']) && !empty($_FILES['attachments']['name'][0])) { $upload_dir = 'uploads/attachments/'; if (!is_dir($upload_dir)) mkdir($upload_dir, 0777, true); for ($i = 0; $i < count($_FILES['attachments']['name']); $i++) { if ($_FILES['attachments']['error'][$i] === 0) { $filename = time() . '_' . $_FILES['attachments']['name'][$i]; $filepath = $upload_dir . $filename; if (move_uploaded_file($_FILES['attachments']['tmp_name'][$i], $filepath)) { $stmt = db()->prepare("INSERT INTO outbound_attachments (mail_id, display_name, file_path, file_name, file_size) VALUES (?, ?, ?, ?, ?)"); $stmt->execute([$id, $_FILES['attachments']['name'][$i], $filepath, $_FILES['attachments']['name'][$i], $_FILES['attachments']['size'][$i]]); } } } } db()->commit(); } catch (Exception $e) { db()->rollBack(); $error = 'خطأ: ' . $e->getMessage(); } } elseif ($action === 'delete') { if (!canDelete('outbound')) { $error = 'ليس لديك صلاحية الحذف.'; } else { $stmt = db()->prepare("DELETE FROM outbound_mail WHERE id = ?"); $stmt->execute([$id]); $success = 'تم حذف البريد الصادر بنجاح.'; } } } } // Fetch stats $total_stmt = db()->query("SELECT COUNT(*) FROM outbound_mail"); $total_outbound = $total_stmt->fetchColumn(); $completed_stmt = db()->prepare("SELECT COUNT(*) FROM outbound_mail WHERE status_id IN (SELECT id FROM mailbox_statuses WHERE name LIKE '%مكتمل%' OR name LIKE '%منتهي%')"); $completed_stmt->execute(); $completed_outbound = $completed_stmt->fetchColumn(); // Search and Filter $where = "WHERE 1=1"; $params = []; if (isset($_GET['search']) && !empty($_GET['search'])) { $where .= " AND (m.ref_no LIKE ? OR m.subject LIKE ? OR m.sender LIKE ? OR m.recipient LIKE ?)"; $search = "%" . $_GET['search'] . "%"; $params = array_merge($params, [$search, $search, $search, $search]); } if (isset($_GET['status_id']) && !empty($_GET['status_id'])) { $where .= " AND m.status_id = ?"; $params[] = $_GET['status_id']; } // Pagination $page = isset($_GET['page']) ? (int)$_GET['page'] : 1; if ($page < 1) $page = 1; $limit = 10; $offset = ($page - 1) * $limit; // Count filtered $countQuery = "SELECT COUNT(*) FROM outbound_mail m $where"; $countStmt = db()->prepare($countQuery); $countStmt->execute($params); $totalFiltered = $countStmt->fetchColumn(); $query = "SELECT m.*, s.name as status_name, s.color as status_color, u.full_name as assigned_to_name, (SELECT GROUP_CONCAT(display_name SEPARATOR '|||') FROM outbound_attachments WHERE mail_id = m.id) as attachment_names FROM outbound_mail m LEFT JOIN mailbox_statuses s ON m.status_id = s.id LEFT JOIN users u ON m.assigned_to = u.id $where ORDER BY m.date_registered DESC, m.id DESC LIMIT $limit OFFSET $offset"; $stmt = db()->prepare($query); $stmt->execute($params); $mails = $stmt->fetchAll(); $statuses = db()->query("SELECT * FROM mailbox_statuses ORDER BY id ASC")->fetchAll(); $users = db()->query("SELECT id, full_name, username FROM users ORDER BY full_name ASC")->fetchAll(); $default_status_id = db()->query("SELECT id FROM mailbox_statuses WHERE is_default = 1 LIMIT 1")->fetchColumn() ?: ($statuses[0]['id'] ?? null); $deepLinkData = null; if (isset($_GET['id'])) { $dlStmt = db()->prepare("SELECT m.*, (SELECT GROUP_CONCAT(display_name SEPARATOR '|||') FROM outbound_attachments WHERE mail_id = m.id) as attachment_names FROM outbound_mail m WHERE m.id = ?"); $dlStmt->execute([$_GET['id']]); $deepLinkData = $dlStmt->fetch(); } ?>
إدارة المراسلات الصادرة إلى الجهات الخارجية وتتبع حالاتها.
| رقم القيد | التاريخ | الموضوع | الجهة المستلمة | الحالة | الإجراءات |
|---|---|---|---|---|---|
|
لا يوجد بريد صادر حالياً. |
|||||
| = htmlspecialchars($mail['ref_no']) ?> | = date('Y-m-d', strtotime($mail['date_registered'])) ?> |
= htmlspecialchars($mail['subject']) ?>
= count(explode('|||', $mail['attachment_names'])) ?> مرفقات
|
= htmlspecialchars($mail['recipient']) ?> | = htmlspecialchars($mail['status_name']) ?> | |