change install file

This commit is contained in:
Flatlogic Bot 2026-02-28 07:03:36 +00:00
parent 10eedb49b2
commit b304da2bea
3 changed files with 51 additions and 29 deletions

View File

@ -9,22 +9,23 @@ $type_filter = $_GET['type'] ?? '';
$user_filter = $_GET['user_id'] ?? ''; $user_filter = $_GET['user_id'] ?? '';
$params = []; $params = [];
$where = ["due_date < CURDATE()", "status != 'closed'", "type != 'internal'"]; $where = ["m.due_date < CURDATE()", "s.name != 'closed'", "m.type != 'internal'"];
if ($type_filter) { if ($type_filter) {
$where[] = "type = ?"; $where[] = "m.type = ?";
$params[] = $type_filter; $params[] = $type_filter;
} }
if ($user_filter) { if ($user_filter) {
$where[] = "assigned_to = ?"; $where[] = "m.assigned_to = ?";
$params[] = $user_filter; $params[] = $user_filter;
} }
$where_clause = implode(" AND ", $where); $where_clause = implode(" AND ", $where);
$sql = "SELECT m.*, u.full_name as assigned_name $sql = "SELECT m.*, u.full_name as assigned_name, s.name as status_name, s.color as status_color
FROM mailbox m FROM mailbox m
LEFT JOIN users u ON m.assigned_to = u.id LEFT JOIN users u ON m.assigned_to = u.id
LEFT JOIN mailbox_statuses s ON m.status_id = s.id
WHERE $where_clause WHERE $where_clause
ORDER BY m.due_date ASC"; ORDER BY m.due_date ASC";
@ -34,6 +35,19 @@ $overdue_items = $stmt->fetchAll();
// Fetch all users for filter // Fetch all users for filter
$users = db()->query("SELECT id, full_name FROM users ORDER BY full_name")->fetchAll(); $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';
// Translation for default statuses
$display_name = $status_name;
if ($status_name == 'received') $display_name = 'تم الاستلام';
if ($status_name == 'in_progress') $display_name = 'قيد المعالجة';
if ($status_name == 'closed') $display_name = 'مكتمل';
return '<span class="badge" style="background-color: ' . $status_color . ';">' . htmlspecialchars($display_name) . '</span>';
}
?> ?>
<div class="d-flex justify-content-between flex-wrap flex-md-nowrap align-items-center pt-3 pb-2 mb-3 border-bottom"> <div class="d-flex justify-content-between flex-wrap flex-md-nowrap align-items-center pt-3 pb-2 mb-3 border-bottom">
@ -75,13 +89,14 @@ $users = db()->query("SELECT id, full_name FROM users ORDER BY full_name")->fetc
</div> </div>
<div class="card-body"> <div class="card-body">
<div class="table-responsive"> <div class="table-responsive">
<table class="table table-hover"> <table class="table table-hover align-middle">
<thead> <thead>
<tr> <tr>
<th>رقم المرجع</th> <th>رقم المرجع</th>
<th>النوع</th> <th>النوع</th>
<th>الموضوع</th> <th>الموضوع</th>
<th>الموظف المسؤول</th> <th>الموظف المسؤول</th>
<th>الحالة</th>
<th>تاريخ الاستحقاق</th> <th>تاريخ الاستحقاق</th>
<th>الأيام المتأخرة</th> <th>الأيام المتأخرة</th>
<th>الإجراءات</th> <th>الإجراءات</th>
@ -90,7 +105,7 @@ $users = db()->query("SELECT id, full_name FROM users ORDER BY full_name")->fetc
<tbody> <tbody>
<?php if (empty($overdue_items)): ?> <?php if (empty($overdue_items)): ?>
<tr> <tr>
<td colspan="7" class="text-center py-4 text-muted">لا توجد مهام متأخرة حالياً.</td> <td colspan="8" class="text-center py-4 text-muted">لا توجد مهام متأخرة حالياً.</td>
</tr> </tr>
<?php else: ?> <?php else: ?>
<?php foreach ($overdue_items as $item): <?php foreach ($overdue_items as $item):
@ -99,7 +114,7 @@ $users = db()->query("SELECT id, full_name FROM users ORDER BY full_name")->fetc
$diff = $today->diff($due_date)->format("%a"); $diff = $today->diff($due_date)->format("%a");
?> ?>
<tr> <tr>
<td><?= htmlspecialchars($item['ref_no']) ?></td> <td class="fw-bold"><?= htmlspecialchars($item['ref_no']) ?></td>
<td> <td>
<span class="badge bg-<?= $item['type'] == 'inbound' ? 'info' : 'warning' ?>"> <span class="badge bg-<?= $item['type'] == 'inbound' ? 'info' : 'warning' ?>">
<?= $item['type'] == 'inbound' ? 'وارد' : 'صادر' ?> <?= $item['type'] == 'inbound' ? 'وارد' : 'صادر' ?>
@ -107,6 +122,7 @@ $users = db()->query("SELECT id, full_name FROM users ORDER BY full_name")->fetc
</td> </td>
<td><?= htmlspecialchars($item['subject']) ?></td> <td><?= htmlspecialchars($item['subject']) ?></td>
<td><?= htmlspecialchars($item['assigned_name'] ?? 'غير معين') ?></td> <td><?= htmlspecialchars($item['assigned_name'] ?? 'غير معين') ?></td>
<td><?= getStatusBadgeForReport($item) ?></td>
<td class="text-danger fw-bold"><?= $item['due_date'] ?></td> <td class="text-danger fw-bold"><?= $item['due_date'] ?></td>
<td class="text-danger fw-bold"><?= $diff ?> يوم</td> <td class="text-danger fw-bold"><?= $diff ?> يوم</td>
<td> <td>

View File

@ -12,23 +12,26 @@ $due_tomorrow = db()->query("
SELECT m.*, u.email, u.full_name SELECT m.*, u.email, u.full_name
FROM mailbox m FROM mailbox m
JOIN users u ON m.assigned_to = u.id 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) WHERE m.due_date = DATE_ADD(CURDATE(), INTERVAL 1 DAY)
AND m.status != 'closed' AND s.name != 'closed'
")->fetchAll(); ")->fetchAll();
foreach ($due_tomorrow as $task) { foreach ($due_tomorrow as $task) {
if (!empty($task['email'])) { if (!empty($task['email'])) {
$subject = "تذكير: موعد نهائي لمهمة غداً - " . $task['ref_no']; $subject = "تذكير: موعد نهائي لمهمة غداً - " . $task['ref_no'];
$html = " $html = "
<h3>تذكير بموعد نهائي</h3> <div dir='rtl' style='font-family: Arial, sans-serif;'>
<p>عزيزي <b>" . htmlspecialchars($task['full_name']) . "</b>،</p> <h3>تذكير بموعد نهائي</h3>
<p>هذا تذكير بأن المهمة التالية مستحقة غداً:</p> <p>عزيزي <b>" . htmlspecialchars($task['full_name']) . "</b>،</p>
<ul> <p>هذا تذكير بأن المهمة التالية مستحقة غداً:</p>
<li><b>رقم المرجع:</b> " . htmlspecialchars($task['ref_no']) . "</li> <ul>
<li><b>الموضوع:</b> " . htmlspecialchars($task['subject']) . "</li> <li><b>رقم المرجع:</b> " . htmlspecialchars($task['ref_no']) . "</li>
<li><b>تاريخ الاستحقاق:</b> " . $task['due_date'] . "</li> <li><b>الموضوع:</b> " . htmlspecialchars($task['subject']) . "</li>
</ul> <li><b>تاريخ الاستحقاق:</b> " . $task['due_date'] . "</li>
<p>يرجى متابعة المهمة وإغلاقها في الوقت المحدد.</p> </ul>
<p>يرجى متابعة المهمة وإغلاقها في الوقت المحدد.</p>
</div>
"; ";
$res = MailService::sendMail($task['email'], $subject, $html); $res = MailService::sendMail($task['email'], $subject, $html);
if ($res['success']) { if ($res['success']) {
@ -45,23 +48,26 @@ $overdue = db()->query("
SELECT m.*, u.email, u.full_name SELECT m.*, u.email, u.full_name
FROM mailbox m FROM mailbox m
JOIN users u ON m.assigned_to = u.id JOIN users u ON m.assigned_to = u.id
JOIN mailbox_statuses s ON m.status_id = s.id
WHERE m.due_date < CURDATE() WHERE m.due_date < CURDATE()
AND m.status != 'closed' AND s.name != 'closed'
")->fetchAll(); ")->fetchAll();
foreach ($overdue as $task) { foreach ($overdue as $task) {
if (!empty($task['email'])) { if (!empty($task['email'])) {
$subject = "تنبيه: مهمة متأخرة! - " . $task['ref_no']; $subject = "تنبيه: مهمة متأخرة! - " . $task['ref_no'];
$html = " $html = "
<h3 style='color: red;'>تنبيه: مهمة متأخرة</h3> <div dir='rtl' style='font-family: Arial, sans-serif;'>
<p>عزيزي <b>" . htmlspecialchars($task['full_name']) . "</b>،</p> <h3 style='color: red;'>تنبيه: مهمة متأخرة</h3>
<p>هذه المهمة قد تجاوزت الموعد النهائي المحدد:</p> <p>عزيزي <b>" . htmlspecialchars($task['full_name']) . "</b>،</p>
<ul> <p>هذه المهمة قد تجاوزت الموعد النهائي المحدد:</p>
<li><b>رقم المرجع:</b> " . htmlspecialchars($task['ref_no']) . "</li> <ul>
<li><b>الموضوع:</b> " . htmlspecialchars($task['subject']) . "</li> <li><b>رقم المرجع:</b> " . htmlspecialchars($task['ref_no']) . "</li>
<li><b>تاريخ الاستحقاق:</b> <span style='color: red;'>" . $task['due_date'] . "</span></li> <li><b>الموضوع:</b> " . htmlspecialchars($task['subject']) . "</li>
</ul> <li><b>تاريخ الاستحقاق:</b> <span style='color: red;'>" . $task['due_date'] . "</span></li>
<p>يرجى معالجة هذه المهمة في أقرب وقت ممكن.</p> </ul>
<p>يرجى معالجة هذه المهمة في أقرب وقت ممكن.</p>
</div>
"; ";
$res = MailService::sendMail($task['email'], $subject, $html); $res = MailService::sendMail($task['email'], $subject, $html);
if ($res['success']) { if ($res['success']) {