v1.3.1 Geburtstaglogik komplett überarbeitet

This commit is contained in:
Borgal
2025-11-18 18:40:27 +01:00
parent a4c3644a54
commit a8b4b0d5f2
2 changed files with 54 additions and 32 deletions

View File

@@ -18,15 +18,18 @@ function get_next_payer_info($conn, $meeting_id)
}
$meeting_date = $meeting['meeting_date'];
$current_year = (int)date('Y', strtotime($meeting_date));
$meeting_ts = strtotime($meeting_date);
$meeting_year = (int)date('Y', $meeting_ts);
$meeting_month = (int)date('n', $meeting_ts);
$meeting_day = (int)date('j', $meeting_ts);
// Alle ZUSAGENDEN Teilnehmer dieses Meetings
// Alle ZUSAGENDEN Teilnehmer mit last_birthday_year
$sql = "
SELECT
u.id,
u.username,
u.birthday,
u.birthday_payer_pending,
u.last_birthday_year,
u.regular_paid_count
FROM meeting_teilnehmer mt
JOIN users u ON mt.user_id = u.id
@@ -44,8 +47,25 @@ function get_next_payer_info($conn, $meeting_id)
return null;
}
// 🔹 PRIORITÄT 1: Geburtstags-Zahler (birthday_payer_pending = 1)
$birthday_candidates = array_filter($candidates, fn($c) => $c['birthday_payer_pending'] == 1);
// 🔹 Geburtstagskandidaten: Geburtstag war + noch nicht in diesem Jahr gezahlt
$birthday_candidates = array_filter($candidates, function ($c) use ($meeting_year, $meeting_month, $meeting_day) {
if (!$c['birthday'] || $c['birthday'] === '0000-00-00') {
return false;
}
$last_bday_year = (int)($c['last_birthday_year'] ?? 0);
if ($last_bday_year >= $meeting_year) {
return false; // Bereits in diesem Jahr gezahlt
}
$bday_month = (int)date('n', strtotime($c['birthday']));
$bday_day = (int)date('j', strtotime($c['birthday']));
// War der Geburtstag in diesem Jahr bereits?
return ($bday_month < $meeting_month ||
($bday_month == $meeting_month && $bday_day <= $meeting_day));
});
if (!empty($birthday_candidates)) {
usort($birthday_candidates, fn($a, $b) => strcmp($a['username'], $b['username']));
$first = $birthday_candidates[0];
@@ -55,7 +75,7 @@ function get_next_payer_info($conn, $meeting_id)
];
}
// 🔹 PRIORITÄT 2: Normale Rotation (nach regular_paid_count)
// 🔹 Normale Rotation
$min_paid = min(array_column($candidates, 'regular_paid_count'));
$regular_candidates = array_filter($candidates, fn($c) => $c['regular_paid_count'] == $min_paid);
usort($regular_candidates, fn($a, $b) => strcmp($a['username'], $b['username']));
@@ -65,9 +85,3 @@ function get_next_payer_info($conn, $meeting_id)
'is_birthday_payer' => false
];
}
function get_next_payer_username($conn, $meeting_id)
{
$info = get_next_payer_info($conn, $meeting_id);
return $info ? $info['username'] : null;
}