Naprawiona większość mechanizmów przed spotkaniami
This commit is contained in:
parent
8f2aebda66
commit
c52190436a
@ -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,
|
||||||
|
|||||||
46
index.php
46
index.php
@ -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>
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user