Naprawiona większość mechanizmów przed spotkaniami

This commit is contained in:
Flatlogic Bot 2026-01-11 14:32:24 +00:00
parent 8f2aebda66
commit c52190436a
2 changed files with 67 additions and 10 deletions

View File

@ -134,15 +134,32 @@ class WorkflowEngine {
// 7. Fetch Spotkania columns (upcoming meetings) // 7. Fetch Spotkania columns (upcoming meetings)
$today = date('Y-m-d H:i:s'); $today = date('Y-m-d H:i:s');
$stmt_meetings = $this->pdo->prepare(" $stmt_meetings = $this->pdo->prepare("
SELECT bni_groups.id as group_id, bni_groups.name as group_name, MIN(calendar_events.start_datetime) as next_meeting_date WITH RankedMeetings AS (
FROM bni_groups SELECT
LEFT JOIN calendar_event_groups ON bni_groups.id = calendar_event_groups.bni_group_id bg.id as group_id,
LEFT JOIN calendar_events ON calendar_event_groups.calendar_event_id = calendar_events.id AND calendar_events.start_datetime >= :today bg.name as group_name,
GROUP BY bni_groups.id ce.start_datetime,
ORDER BY bni_groups.name ROW_NUMBER() OVER(PARTITION BY bg.id ORDER BY ce.start_datetime) as rn
FROM bni_groups bg
JOIN calendar_event_groups ceg ON bg.id = ceg.bni_group_id
JOIN calendar_events ce ON ceg.calendar_event_id = ce.id
WHERE ce.start_datetime >= :today
)
SELECT group_id, group_name, start_datetime
FROM RankedMeetings
WHERE rn <= 3
ORDER BY group_id, start_datetime;
"); ");
$stmt_meetings->execute(['today' => $today]); $stmt_meetings->execute(['today' => $today]);
$spotkania_cols = $stmt_meetings->fetchAll(PDO::FETCH_ASSOC); $upcoming_meetings_flat = $stmt_meetings->fetchAll(PDO::FETCH_ASSOC);
$spotkania_cols = [];
foreach ($upcoming_meetings_flat as $meeting) {
$spotkania_cols[$meeting['group_id']]['group_id'] = $meeting['group_id'];
$spotkania_cols[$meeting['group_id']]['group_name'] = $meeting['group_name'];
$spotkania_cols[$meeting['group_id']]['meetings'][] = $meeting['start_datetime'];
}
return [ return [
'people' => $people, 'people' => $people,

View File

@ -124,9 +124,15 @@ $status_colors = [
</tr> </tr>
<tr class="text-center"> <tr class="text-center">
<?php foreach ($spotkania_cols as $col): ?> <?php foreach ($spotkania_cols as $col): ?>
<th> <th data-group-id="<?= $col['group_id'] ?>" data-meetings='<?= json_encode($col['meetings'] ?? []) ?>'>
<?= htmlspecialchars($col['group_name']) ?><br> <div class="d-flex justify-content-center align-items-center">
<small><?= $col['next_meeting_date'] ? date('d.m.Y', strtotime($col['next_meeting_date'])) : 'Brak' ?></small> <button class="btn btn-sm btn-outline-secondary meeting-nav-btn meeting-prev-btn"><i class="bi bi-chevron-left"></i></button>
<div class="mx-2 text-center">
<?= htmlspecialchars($col['group_name']) ?><br>
<small class="meeting-date"></small>
</div>
<button class="btn btn-sm btn-outline-secondary meeting-nav-btn meeting-next-btn"><i class="bi bi-chevron-right"></i></button>
</div>
</th> </th>
<?php endforeach; ?> <?php endforeach; ?>
<?php foreach ($processes as $col): ?> <?php foreach ($processes as $col): ?>
@ -711,7 +717,41 @@ document.addEventListener('DOMContentLoaded', function () {
editMemberOnlyFields.style.display = isMember ? 'block' : 'none'; editMemberOnlyFields.style.display = isMember ? 'block' : 'none';
}); });
// Meeting navigation
document.querySelectorAll('[data-group-id]').forEach(function(headerCell) {
let meetings = JSON.parse(headerCell.dataset.meetings);
let currentIndex = 0;
let dateElement = headerCell.querySelector('.meeting-date');
let prevBtn = headerCell.querySelector('.meeting-prev-btn');
let nextBtn = headerCell.querySelector('.meeting-next-btn');
function updateDate() {
if (meetings.length > 0) {
let date = new Date(meetings[currentIndex]);
dateElement.textContent = date.toLocaleDateString('pl-PL', { day: '2-digit', month: '2-digit', year: 'numeric' });
} else {
dateElement.textContent = 'Brak';
}
prevBtn.disabled = currentIndex === 0;
nextBtn.disabled = currentIndex === meetings.length - 1;
}
prevBtn.addEventListener('click', function() {
if (currentIndex > 0) {
currentIndex--;
updateDate();
}
});
nextBtn.addEventListener('click', function() {
if (currentIndex < meetings.length - 1) {
currentIndex++;
updateDate();
}
});
updateDate();
});
}); });
</script> </script>