Enhance waitlist functionality: update queries to count distinct users, add new impfwarteliste.php page, and improve form handling in functions.impfen.inc.php
This commit is contained in:
+18
-7
@@ -235,7 +235,7 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST') {
|
|||||||
} else {
|
} else {
|
||||||
$dosen = (int)$rule['dosen_pro_flasche'];
|
$dosen = (int)$rule['dosen_pro_flasche'];
|
||||||
|
|
||||||
$stCount = $pdo->prepare("SELECT COUNT(*)
|
$stCount = $pdo->prepare("SELECT COUNT(DISTINCT userid)
|
||||||
FROM warteliste
|
FROM warteliste
|
||||||
WHERE checked = 1
|
WHERE checked = 1
|
||||||
AND (impfstoff = :iid OR impfstoff = 0)
|
AND (impfstoff = :iid OR impfstoff = 0)
|
||||||
@@ -291,16 +291,27 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST') {
|
|||||||
WHERE checked = 1
|
WHERE checked = 1
|
||||||
AND (impfstoff = :iid OR impfstoff = 0)
|
AND (impfstoff = :iid OR impfstoff = 0)
|
||||||
AND (zeitraum_id = :zid OR zeitraum_id IS NULL)
|
AND (zeitraum_id = :zid OR zeitraum_id IS NULL)
|
||||||
ORDER BY date_created ASC, warteid ASC
|
ORDER BY date_created ASC, warteid ASC");
|
||||||
LIMIT :lim");
|
|
||||||
$stW->bindValue(':iid', $impfstoffId, PDO::PARAM_INT);
|
$stW->bindValue(':iid', $impfstoffId, PDO::PARAM_INT);
|
||||||
$stW->bindValue(':zid', $planId, PDO::PARAM_INT);
|
$stW->bindValue(':zid', $planId, PDO::PARAM_INT);
|
||||||
$stW->bindValue(':lim', $dosen, PDO::PARAM_INT);
|
|
||||||
$stW->execute();
|
$stW->execute();
|
||||||
$warteRows = $stW->fetchAll(PDO::FETCH_ASSOC);
|
$warteRowsRaw = $stW->fetchAll(PDO::FETCH_ASSOC);
|
||||||
|
$warteRows = [];
|
||||||
|
$seenUserIds = [];
|
||||||
|
foreach ($warteRowsRaw as $warteRow) {
|
||||||
|
$warteUserId = (int)$warteRow['userid'];
|
||||||
|
if (isset($seenUserIds[$warteUserId])) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
$seenUserIds[$warteUserId] = true;
|
||||||
|
$warteRows[] = $warteRow;
|
||||||
|
if (count($warteRows) >= $dosen) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (count($warteRows) < $dosen) {
|
if (count($warteRows) < $dosen) {
|
||||||
throw new RuntimeException("Warteliste während Verarbeitung zu klein geworden.");
|
throw new RuntimeException("Warteliste waehrend Verarbeitung zu klein geworden.");
|
||||||
}
|
}
|
||||||
|
|
||||||
$stInsTermin = $pdo->prepare("INSERT INTO impftermin
|
$stInsTermin = $pdo->prepare("INSERT INTO impftermin
|
||||||
@@ -540,7 +551,7 @@ $eventOverview = [];
|
|||||||
|
|
||||||
try {
|
try {
|
||||||
$stRules = $pdo->prepare("SELECT r.impfstoff_id, r.dosen_pro_flasche, i.impfname,
|
$stRules = $pdo->prepare("SELECT r.impfstoff_id, r.dosen_pro_flasche, i.impfname,
|
||||||
COALESCE((SELECT COUNT(*) FROM warteliste w WHERE w.checked = 1 AND (w.impfstoff = r.impfstoff_id OR w.impfstoff = 0)),0) AS wartende
|
COALESCE((SELECT COUNT(DISTINCT w.userid) FROM warteliste w WHERE w.checked = 1 AND (w.impfstoff = r.impfstoff_id OR w.impfstoff = 0)),0) AS wartende
|
||||||
FROM impfstoff_workflow r
|
FROM impfstoff_workflow r
|
||||||
INNER JOIN impfstoff i ON i.impfid = r.impfstoff_id
|
INNER JOIN impfstoff i ON i.impfid = r.impfstoff_id
|
||||||
WHERE (i.aktiv = 1 OR i.aktivwarteliste = 1 OR i.aktivtermin = 1 OR i.aktivgrippe = 1)
|
WHERE (i.aktiv = 1 OR i.aktivwarteliste = 1 OR i.aktivtermin = 1 OR i.aktivgrippe = 1)
|
||||||
|
|||||||
@@ -411,7 +411,7 @@ $allImpforte = getImpforte($pdo, false);
|
|||||||
$zeitraeume = impfGetZeitraumRows($pdo, true);
|
$zeitraeume = impfGetZeitraumRows($pdo, true);
|
||||||
|
|
||||||
$stRules = $pdo->prepare("SELECT r.impfstoff_id, r.dosen_pro_flasche, i.impfname,
|
$stRules = $pdo->prepare("SELECT r.impfstoff_id, r.dosen_pro_flasche, i.impfname,
|
||||||
COALESCE((SELECT COUNT(*) FROM warteliste w WHERE w.checked = 1 AND (w.impfstoff = r.impfstoff_id OR w.impfstoff = 0)),0) AS wartende
|
COALESCE((SELECT COUNT(DISTINCT w.userid) FROM warteliste w WHERE w.checked = 1 AND (w.impfstoff = r.impfstoff_id OR w.impfstoff = 0)),0) AS wartende
|
||||||
FROM impfstoff_workflow r
|
FROM impfstoff_workflow r
|
||||||
INNER JOIN impfstoff i ON i.impfid = r.impfstoff_id
|
INNER JOIN impfstoff i ON i.impfid = r.impfstoff_id
|
||||||
WHERE (i.aktiv = 1 OR i.aktivwarteliste = 1 OR i.aktivtermin = 1 OR i.aktivgrippe = 1)
|
WHERE (i.aktiv = 1 OR i.aktivwarteliste = 1 OR i.aktivtermin = 1 OR i.aktivgrippe = 1)
|
||||||
|
|||||||
@@ -358,3 +358,145 @@ if (!function_exists('impfGetZeitraeumeByImpfstoff')) {
|
|||||||
return $result;
|
return $result;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!function_exists('impfGetWartelistenFormOptions')) {
|
||||||
|
function impfGetWartelistenFormOptions(PDO $pdo): array
|
||||||
|
{
|
||||||
|
$impfstoffe = [];
|
||||||
|
$zeitfenster = [];
|
||||||
|
|
||||||
|
$stImpfstoffe = $pdo->prepare("SELECT r.impfstoff_id, i.impfname
|
||||||
|
FROM impfstoff_workflow r
|
||||||
|
INNER JOIN impfstoff i ON i.impfid = r.impfstoff_id
|
||||||
|
WHERE (i.aktiv = 1 OR i.aktivwarteliste = 1 OR i.aktivtermin = 1 OR i.aktivgrippe = 1)
|
||||||
|
AND r.dosen_pro_flasche > 0
|
||||||
|
ORDER BY i.impfname");
|
||||||
|
$stImpfstoffe->execute();
|
||||||
|
foreach ($stImpfstoffe->fetchAll(PDO::FETCH_ASSOC) as $row) {
|
||||||
|
$impfstoffe[(int)$row['impfstoff_id']] = (string)$row['impfname'];
|
||||||
|
}
|
||||||
|
|
||||||
|
$zeitraeumeByImpfstoff = impfGetZeitraeumeByImpfstoff($pdo, true);
|
||||||
|
foreach ($zeitraeumeByImpfstoff as $impfstoffId => $zeitraeume) {
|
||||||
|
if (!isset($impfstoffe[$impfstoffId])) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
foreach ($zeitraeume as $zeitraum) {
|
||||||
|
if (!isset($zeitfenster[$impfstoffId])) {
|
||||||
|
$zeitfenster[$impfstoffId] = [];
|
||||||
|
}
|
||||||
|
$zeitfenster[$impfstoffId][] = [
|
||||||
|
'id' => (int)$zeitraum['zeitraum_id'],
|
||||||
|
'label' => (string)$zeitraum['label'],
|
||||||
|
];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
foreach (array_keys($impfstoffe) as $impfstoffId) {
|
||||||
|
if (empty($zeitfenster[$impfstoffId])) {
|
||||||
|
unset($impfstoffe[$impfstoffId]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return [
|
||||||
|
'impfstoffe' => $impfstoffe,
|
||||||
|
'zeitfenster' => $zeitfenster,
|
||||||
|
];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!function_exists('impfCreateWaitlistEntryForPerson')) {
|
||||||
|
function impfCreateWaitlistEntryForPerson(
|
||||||
|
PDO $pdo,
|
||||||
|
int $personId,
|
||||||
|
int $impfstoffId,
|
||||||
|
int $zeitraumId,
|
||||||
|
int $impfart,
|
||||||
|
?string $letzteImpfung = null,
|
||||||
|
int $checked = 1
|
||||||
|
): array {
|
||||||
|
if ($personId <= 0) {
|
||||||
|
return [false, 'Keine gueltige Person uebergeben.', null];
|
||||||
|
}
|
||||||
|
if ($impfstoffId <= 0) {
|
||||||
|
return [false, 'Bitte einen Impfstoff auswaehlen.', null];
|
||||||
|
}
|
||||||
|
if ($zeitraumId <= 0) {
|
||||||
|
return [false, 'Bitte ein Zeitfenster auswaehlen.', null];
|
||||||
|
}
|
||||||
|
if ($impfart < 1 || $impfart > 4) {
|
||||||
|
return [false, 'Bitte eine gueltige Impfungsart auswaehlen.', null];
|
||||||
|
}
|
||||||
|
|
||||||
|
$letzteImpfung = $letzteImpfung !== null ? trim($letzteImpfung) : null;
|
||||||
|
if ($impfart === 1) {
|
||||||
|
$letzteImpfung = null;
|
||||||
|
} elseif ($letzteImpfung === null || $letzteImpfung === '') {
|
||||||
|
return [false, 'Bitte das Datum der letzten Impfung angeben.', null];
|
||||||
|
} elseif (!preg_match('/^\d{4}-\d{2}-\d{2}$/', $letzteImpfung)) {
|
||||||
|
return [false, 'Das Datum der letzten Impfung ist ungueltig.', null];
|
||||||
|
}
|
||||||
|
|
||||||
|
$stPerson = $pdo->prepare("SELECT person_id, patientenart, vorname, nachname
|
||||||
|
FROM persons
|
||||||
|
WHERE person_id = :pid
|
||||||
|
LIMIT 1");
|
||||||
|
$stPerson->execute(['pid' => $personId]);
|
||||||
|
$person = $stPerson->fetch(PDO::FETCH_ASSOC);
|
||||||
|
if (!$person) {
|
||||||
|
return [false, 'Die Person wurde nicht gefunden.', null];
|
||||||
|
}
|
||||||
|
|
||||||
|
$zeitraum = impfLoadZeitraumById($pdo, $zeitraumId, true);
|
||||||
|
if (!$zeitraum) {
|
||||||
|
return [false, 'Das ausgewaehlte Zeitfenster ist nicht mehr verfuegbar.', null];
|
||||||
|
}
|
||||||
|
if (!in_array($impfstoffId, $zeitraum['impfstoff_id_list'] ?? [], true)) {
|
||||||
|
return [false, 'Impfstoff und Zeitfenster passen nicht zusammen.', null];
|
||||||
|
}
|
||||||
|
|
||||||
|
$stDup = $pdo->prepare("SELECT warteid
|
||||||
|
FROM warteliste
|
||||||
|
WHERE userid = :uid
|
||||||
|
AND checked IN (0, 1)
|
||||||
|
AND impfstoff = :impfstoff
|
||||||
|
AND COALESCE(zeitraum_id, 0) = :zeitraum_id
|
||||||
|
AND impfart = :impfart
|
||||||
|
LIMIT 1");
|
||||||
|
$stDup->execute([
|
||||||
|
'uid' => $personId,
|
||||||
|
'impfstoff' => $impfstoffId,
|
||||||
|
'zeitraum_id' => $zeitraumId,
|
||||||
|
'impfart' => $impfart,
|
||||||
|
]);
|
||||||
|
if ($stDup->fetchColumn()) {
|
||||||
|
return [false, 'Diese Anfrage ist fuer diese Person bereits auf der aktiven Warteliste vorhanden.', null];
|
||||||
|
}
|
||||||
|
|
||||||
|
$patientenart = ((int)($person['patientenart'] ?? 0) === 1) ? 1 : 0;
|
||||||
|
$hash = bin2hex(random_bytes(16));
|
||||||
|
$checkedValue = ($checked === 0) ? 0 : 1;
|
||||||
|
|
||||||
|
$stInsert = $pdo->prepare("INSERT INTO warteliste
|
||||||
|
(userid, checked, hash, impfenangebot, impfstoff, Patientenart, Impfaufklaerung, WeitereFragen, impfart, impfenmit, letzteimpfung, impfenzeitraum, zeitraum_id, date_created)
|
||||||
|
VALUES
|
||||||
|
(:userid, :checked, :hash, 1, :impfstoff, :patientenart, 0, 0, :impfart, '', :letzteimpfung, :impfenzeitraum, :zeitraum_id, NOW())");
|
||||||
|
$stInsert->execute([
|
||||||
|
'userid' => $personId,
|
||||||
|
'checked' => $checkedValue,
|
||||||
|
'hash' => $hash,
|
||||||
|
'impfstoff' => $impfstoffId,
|
||||||
|
'patientenart' => $patientenart,
|
||||||
|
'impfart' => $impfart,
|
||||||
|
'letzteimpfung' => $letzteImpfung,
|
||||||
|
'impfenzeitraum' => (string)$zeitraum['label'],
|
||||||
|
'zeitraum_id' => $zeitraumId,
|
||||||
|
]);
|
||||||
|
|
||||||
|
$warteid = (int)$pdo->lastInsertId();
|
||||||
|
$personName = trim((string)$person['vorname'] . ' ' . (string)$person['nachname']);
|
||||||
|
|
||||||
|
return [true, 'Wartelistenplatz fuer ' . $personName . ' wurde gespeichert.', $warteid];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
@@ -0,0 +1,283 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
require_once(__DIR__ . "/../inc/config.inc.php");
|
||||||
|
require_once(__DIR__ . "/../inc/functions.inc.php");
|
||||||
|
require_once(__DIR__ . "/../inc/functions.impfen.inc.php");
|
||||||
|
|
||||||
|
ini_set('display_errors', '1');
|
||||||
|
error_reporting(E_ALL);
|
||||||
|
|
||||||
|
$user = check_intern_user();
|
||||||
|
if (!$user) {
|
||||||
|
header("Location: login.php");
|
||||||
|
exit;
|
||||||
|
}
|
||||||
|
|
||||||
|
include(__DIR__ . "/templates/header.inc.php");
|
||||||
|
|
||||||
|
echo "</header>";
|
||||||
|
echo "<div class='jumbotron'><div class='container'>";
|
||||||
|
|
||||||
|
echo "<h1>Impfwarteliste</h1>";
|
||||||
|
echo "<p>Hallo " . e((string)($user['vorname'] ?? '')) . ",<br></p>";
|
||||||
|
|
||||||
|
if (!check_mailreg()) {
|
||||||
|
echo "<br><br>";
|
||||||
|
echo "Es fehlt die Authentifizierung Ihres Kontos per E-Mail. Bitte authentifizieren Sie Ihre E-Mail-Adresse.<br>";
|
||||||
|
echo "<form action='authmeldung.php' method='POST'>";
|
||||||
|
echo "<input name='aktion' type='hidden' value='1'>";
|
||||||
|
echo "<input type='submit' class='btn btn-primary' value='E-Mail Authentifizierung'><br>";
|
||||||
|
echo "</form>";
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!check_userdatenvorhanden()) {
|
||||||
|
echo "<br><br>";
|
||||||
|
echo "Es fehlen noch Informationen in Ihren Stammdaten. Bitte pflegen Sie die Daten nach.<br>";
|
||||||
|
echo "<form action='settings.php' method='POST'>";
|
||||||
|
echo "<input name='aktion' type='hidden' value='1'>";
|
||||||
|
echo "<input type='submit' class='btn btn-primary' value='Stammdaten pflegen'><br>";
|
||||||
|
echo "</form>";
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!(check_mailreg() && check_userdatenvorhanden())) {
|
||||||
|
echo "<br><br><br><form action='index.php' method='POST'>";
|
||||||
|
echo "<input type='submit' class='btn btn-primary' value='Zum Hauptmenue'>";
|
||||||
|
echo "</form>";
|
||||||
|
echo "</div></div>";
|
||||||
|
include(__DIR__ . "/templates/footer.inc.php");
|
||||||
|
exit;
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
impfWorkflowEnsureTables($pdo);
|
||||||
|
$internUserId = isset($_SESSION['userid']) ? (int)$_SESSION['userid'] : null;
|
||||||
|
$personId = ensurePersonFromInternUsersByEmail($pdo, (string)($user['email'] ?? ''), $internUserId);
|
||||||
|
} catch (Throwable $t) {
|
||||||
|
echo "<div class='alert alert-danger'>Fehler: " . e($t->getMessage()) . "</div>";
|
||||||
|
echo "</div></div>";
|
||||||
|
include(__DIR__ . "/templates/footer.inc.php");
|
||||||
|
exit;
|
||||||
|
}
|
||||||
|
|
||||||
|
$options = impfGetWartelistenFormOptions($pdo);
|
||||||
|
$verfuegbareImpfstoffe = $options['impfstoffe'];
|
||||||
|
$zeitOptionenByImpfstoff = $options['zeitfenster'];
|
||||||
|
$zeitOptionenJson = json_encode($zeitOptionenByImpfstoff, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES);
|
||||||
|
|
||||||
|
$form = [
|
||||||
|
'impfstoff_id' => (int)($_POST['impfstoff_id'] ?? 0),
|
||||||
|
'zeitraum_id' => (int)($_POST['zeitraum_id'] ?? 0),
|
||||||
|
'impfart' => (int)($_POST['impfart'] ?? 0),
|
||||||
|
'letzteimpfung' => trim((string)($_POST['letzteimpfung'] ?? '')),
|
||||||
|
];
|
||||||
|
|
||||||
|
$successMessage = '';
|
||||||
|
$errorMessage = '';
|
||||||
|
|
||||||
|
$stActive = $pdo->prepare("SELECT w.warteid, w.checked, w.impfart, w.letzteimpfung, w.impfenzeitraum, i.impfname
|
||||||
|
FROM warteliste w
|
||||||
|
LEFT JOIN impfstoff i ON i.impfid = w.impfstoff
|
||||||
|
WHERE w.userid = :pid
|
||||||
|
AND w.checked IN (0, 1)
|
||||||
|
ORDER BY w.date_created DESC, w.warteid DESC");
|
||||||
|
$stActive->execute(['pid' => $personId]);
|
||||||
|
$activeWaitRows = $stActive->fetchAll(PDO::FETCH_ASSOC);
|
||||||
|
|
||||||
|
if (($_SERVER['REQUEST_METHOD'] ?? 'GET') === 'POST' && (string)($_POST['aktion'] ?? '') === 'create_waitlist') {
|
||||||
|
try {
|
||||||
|
[$ok, $message, $warteid] = impfCreateWaitlistEntryForPerson(
|
||||||
|
$pdo,
|
||||||
|
$personId,
|
||||||
|
(int)$form['impfstoff_id'],
|
||||||
|
(int)$form['zeitraum_id'],
|
||||||
|
(int)$form['impfart'],
|
||||||
|
$form['letzteimpfung'] !== '' ? $form['letzteimpfung'] : null,
|
||||||
|
1
|
||||||
|
);
|
||||||
|
|
||||||
|
if ($ok) {
|
||||||
|
try {
|
||||||
|
SendMailMessageVorlage($pdo, "2", (int)$warteid, "9");
|
||||||
|
$successMessage = $message . ' Eine Bestaetigung wurde per E-Mail versendet.';
|
||||||
|
} catch (Throwable $mailError) {
|
||||||
|
$successMessage = $message . ' Der Eintrag wurde gespeichert, aber die E-Mail konnte nicht automatisch versendet werden.';
|
||||||
|
error_log('Intern waitlist mail failed: ' . $mailError->getMessage());
|
||||||
|
}
|
||||||
|
|
||||||
|
$stActive->execute(['pid' => $personId]);
|
||||||
|
$activeWaitRows = $stActive->fetchAll(PDO::FETCH_ASSOC);
|
||||||
|
} else {
|
||||||
|
$errorMessage = (string)$message;
|
||||||
|
}
|
||||||
|
} catch (Throwable $t) {
|
||||||
|
$errorMessage = 'Der Wartelisteneintrag konnte nicht gespeichert werden: ' . $t->getMessage();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
echo "<p>Hier koennen Sie sich direkt aus dem internen Bereich in die Impfwarteliste eintragen lassen. Ihre Stammdaten werden aus Ihrem Kundenkonto uebernommen.</p>";
|
||||||
|
|
||||||
|
echo "<h4>Ihre hinterlegten Stammdaten</h4>";
|
||||||
|
echo "Name: " . e(trim((string)($user['vorname'] ?? '') . ' ' . (string)($user['nachname'] ?? ''))) . "<br>";
|
||||||
|
echo "Geburtstag: " . e((string)($user['geburtstag'] ?? '')) . "<br>";
|
||||||
|
echo "Adresse: " . e(trim((string)($user['strasse'] ?? '') . ', ' . (string)($user['plz'] ?? '') . ', ' . (string)($user['ort'] ?? ''))) . "<br>";
|
||||||
|
echo "E-Mail: " . e((string)($user['email'] ?? '')) . "<br><br>";
|
||||||
|
|
||||||
|
if ($successMessage !== '') {
|
||||||
|
echo "<div class='alert alert-success'>" . e($successMessage) . "</div>";
|
||||||
|
}
|
||||||
|
if ($errorMessage !== '') {
|
||||||
|
echo "<div class='alert alert-danger'>" . e($errorMessage) . "</div>";
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!empty($activeWaitRows)) {
|
||||||
|
$impfartLabels = [
|
||||||
|
1 => 'Erstimpfung',
|
||||||
|
2 => 'Zweitimpfung',
|
||||||
|
3 => 'Drittimpfung',
|
||||||
|
4 => 'Viertimpfung',
|
||||||
|
];
|
||||||
|
echo "<div class='alert alert-info'>";
|
||||||
|
echo "<strong>Ihre aktiven Wartelisteneintraege.</strong><br>";
|
||||||
|
echo "Sie koennen im internen Bereich mehrere verschiedene Wartelistenanfragen anlegen. Exakte Duplikate werden weiterhin geblockt.";
|
||||||
|
echo "</div>";
|
||||||
|
echo "<table class='table table-bordered table-striped'>";
|
||||||
|
echo "<thead><tr><th>Impfstoff</th><th>Zeitraum</th><th>Impfungsart</th><th>Status</th><th>Letzte Impfung</th></tr></thead><tbody>";
|
||||||
|
foreach ($activeWaitRows as $activeWaitRow) {
|
||||||
|
$statusText = ((int)$activeWaitRow['checked'] === 1) ? 'Bestaetigt' : 'Unbestaetigt';
|
||||||
|
echo "<tr>";
|
||||||
|
echo "<td>" . e((string)($activeWaitRow['impfname'] ?? 'Unbekannt')) . "</td>";
|
||||||
|
echo "<td>" . e((string)($activeWaitRow['impfenzeitraum'] ?? '')) . "</td>";
|
||||||
|
echo "<td>" . e((string)($impfartLabels[(int)$activeWaitRow['impfart']] ?? ('Status ' . (int)$activeWaitRow['impfart']))) . "</td>";
|
||||||
|
echo "<td>" . e($statusText) . "</td>";
|
||||||
|
echo "<td>" . e((string)($activeWaitRow['letzteimpfung'] ?? '')) . "</td>";
|
||||||
|
echo "</tr>";
|
||||||
|
}
|
||||||
|
echo "</tbody></table>";
|
||||||
|
}
|
||||||
|
|
||||||
|
if (empty($verfuegbareImpfstoffe)) {
|
||||||
|
echo "<div class='alert alert-warning'>Aktuell stehen im internen Bereich keine konfigurierten Impfstoffe mit Zeitfenstern zur Verfuegung.</div>";
|
||||||
|
} else {
|
||||||
|
?>
|
||||||
|
<form action="<?php echo e($_SERVER['PHP_SELF']); ?>" method="POST">
|
||||||
|
<input type="hidden" name="aktion" value="create_waitlist">
|
||||||
|
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-sm-8">
|
||||||
|
<label for="impfstoff_id">Ich moechte mich mit folgendem Impfstoff auf die Warteliste setzen lassen:</label>
|
||||||
|
<select class="form-control" name="impfstoff_id" id="impfstoff_id" required onchange="updateZeitfenster()">
|
||||||
|
<option value="">- Bitte auswaehlen -</option>
|
||||||
|
<?php foreach ($verfuegbareImpfstoffe as $impfstoffId => $impfstoffName): ?>
|
||||||
|
<option value="<?php echo (int)$impfstoffId; ?>" <?php echo ($form['impfstoff_id'] === (int)$impfstoffId) ? 'selected' : ''; ?>>
|
||||||
|
<?php echo e((string)$impfstoffName); ?>
|
||||||
|
</option>
|
||||||
|
<?php endforeach; ?>
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="row" style="margin-top:12px;">
|
||||||
|
<div class="col-sm-10">
|
||||||
|
<label for="zeitraum_id">Welcher Zeitbereich passt fuer Sie?</label>
|
||||||
|
<select class="form-control" name="zeitraum_id" id="zeitraum_id" required disabled>
|
||||||
|
<option value="">- Bitte zuerst Impfstoff auswaehlen -</option>
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="row" style="margin-top:12px;">
|
||||||
|
<div class="col-sm-6">
|
||||||
|
<label for="impfart">Welche Impfungsart benoetigen Sie?</label>
|
||||||
|
<select class="form-control" name="impfart" id="impfart" required onchange="checkLetzteImpfung()">
|
||||||
|
<option value="">- Bitte auswaehlen -</option>
|
||||||
|
<option value="1" <?php echo ($form['impfart'] === 1) ? 'selected' : ''; ?>>Erstimpfung</option>
|
||||||
|
<option value="2" <?php echo ($form['impfart'] === 2) ? 'selected' : ''; ?>>Zweitimpfung</option>
|
||||||
|
<option value="3" <?php echo ($form['impfart'] === 3) ? 'selected' : ''; ?>>Drittimpfung</option>
|
||||||
|
<option value="4" <?php echo ($form['impfart'] === 4) ? 'selected' : ''; ?>>Viertimpfung</option>
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="row" id="letzteimpfung_box" style="margin-top:12px; display:none;">
|
||||||
|
<div class="col-sm-6">
|
||||||
|
<label for="letzteimpfung">Wann war Ihre letzte Impfung?</label>
|
||||||
|
<input class="form-control" type="date" name="letzteimpfung" id="letzteimpfung" value="<?php echo e($form['letzteimpfung']); ?>">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="row" style="margin-top:18px;">
|
||||||
|
<div class="col-sm-12">
|
||||||
|
<button class="btn btn-primary" type="submit" id="submit_waitlist">In Warteliste eintragen</button>
|
||||||
|
<a class="btn btn-default" href="index.php">Zum Hauptmenue</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
const zeitfensterByImpfstoff = <?php echo $zeitOptionenJson ?: '{}'; ?>;
|
||||||
|
const initialZeitraumId = <?php echo (int)$form['zeitraum_id']; ?>;
|
||||||
|
|
||||||
|
function updateZeitfenster() {
|
||||||
|
const impfstoff = document.getElementById('impfstoff_id');
|
||||||
|
const zeitraum = document.getElementById('zeitraum_id');
|
||||||
|
const submit = document.getElementById('submit_waitlist');
|
||||||
|
const impfstoffId = impfstoff.value;
|
||||||
|
const optionen = zeitfensterByImpfstoff[impfstoffId] || [];
|
||||||
|
|
||||||
|
zeitraum.innerHTML = '';
|
||||||
|
if (!impfstoffId || optionen.length === 0) {
|
||||||
|
const opt = document.createElement('option');
|
||||||
|
opt.value = '';
|
||||||
|
opt.textContent = '- Kein Zeitfenster verfuegbar -';
|
||||||
|
zeitraum.appendChild(opt);
|
||||||
|
zeitraum.disabled = true;
|
||||||
|
submit.disabled = true;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
const optDefault = document.createElement('option');
|
||||||
|
optDefault.value = '';
|
||||||
|
optDefault.textContent = '- Bitte auswaehlen -';
|
||||||
|
zeitraum.appendChild(optDefault);
|
||||||
|
|
||||||
|
optionen.forEach((eintrag) => {
|
||||||
|
const opt = document.createElement('option');
|
||||||
|
opt.value = String(eintrag.id || '');
|
||||||
|
opt.textContent = eintrag.label || '';
|
||||||
|
if (initialZeitraumId > 0 && Number(eintrag.id) === initialZeitraumId) {
|
||||||
|
opt.selected = true;
|
||||||
|
}
|
||||||
|
zeitraum.appendChild(opt);
|
||||||
|
});
|
||||||
|
|
||||||
|
zeitraum.disabled = false;
|
||||||
|
submit.disabled = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
function checkLetzteImpfung() {
|
||||||
|
const impfart = document.getElementById('impfart');
|
||||||
|
const box = document.getElementById('letzteimpfung_box');
|
||||||
|
const input = document.getElementById('letzteimpfung');
|
||||||
|
|
||||||
|
if (impfart.value === '' || impfart.value === '1') {
|
||||||
|
box.style.display = 'none';
|
||||||
|
input.required = false;
|
||||||
|
if (impfart.value === '1') {
|
||||||
|
input.value = '';
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
box.style.display = 'block';
|
||||||
|
input.required = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
updateZeitfenster();
|
||||||
|
checkLetzteImpfung();
|
||||||
|
</script>
|
||||||
|
<?php
|
||||||
|
}
|
||||||
|
|
||||||
|
echo "</div></div>";
|
||||||
|
include(__DIR__ . "/templates/footer.inc.php");
|
||||||
|
|
||||||
|
?>
|
||||||
+5
-2
@@ -53,7 +53,10 @@ if( is_checked_in_index() ){
|
|||||||
?>
|
?>
|
||||||
<p>Neue Anfragen können Sie über diesen Button einreichen:<br><br></p>
|
<p>Neue Anfragen können Sie über diesen Button einreichen:<br><br></p>
|
||||||
<p><a class="btn btn-primary btn-lg" href="neueanfrage.php" role="button">Neue Anfragen erstellen</a></p><br><br>
|
<p><a class="btn btn-primary btn-lg" href="neueanfrage.php" role="button">Neue Anfragen erstellen</a></p><br><br>
|
||||||
|
|
||||||
|
<p>Wenn Sie sich für eine Impfung vormerken lassen möchten, können Sie sich hier direkt in die Warteliste eintragen:<br><br></p>
|
||||||
|
<p><a class="btn btn-primary btn-lg" href="impfwarteliste.php" role="button">Zur Impfwarteliste</a></p><br><br>
|
||||||
|
|
||||||
<p>Hier können Sie Ihre Anfragen einsehen. Die Antwort erhalten Sie per E-Mail.<br><br></p>
|
<p>Hier können Sie Ihre Anfragen einsehen. Die Antwort erhalten Sie per E-Mail.<br><br></p>
|
||||||
<p><a class="btn btn-primary btn-lg" href="meineanfragen.php" role="button">Meine Anfragen einsehen</a></p><br><br>
|
<p><a class="btn btn-primary btn-lg" href="meineanfragen.php" role="button">Meine Anfragen einsehen</a></p><br><br>
|
||||||
|
|
||||||
@@ -120,4 +123,4 @@ if( is_checked_in_index() ){
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
include("templates/footer.inc.php")
|
include("templates/footer.inc.php")
|
||||||
?>
|
?>
|
||||||
|
|||||||
@@ -68,6 +68,7 @@
|
|||||||
<ul class="nav col-12 col-lg-auto me-lg-auto mb-2 justify-content-center mb-md-0">
|
<ul class="nav col-12 col-lg-auto me-lg-auto mb-2 justify-content-center mb-md-0">
|
||||||
<li ><a href="meineanfragen.php" class="nav-link px-2 text-white">Meine Anfragen</a></li>
|
<li ><a href="meineanfragen.php" class="nav-link px-2 text-white">Meine Anfragen</a></li>
|
||||||
<li ><a href="neueanfrage.php" class="nav-link px-2 text-white">Neue Anfrage</a></li>
|
<li ><a href="neueanfrage.php" class="nav-link px-2 text-white">Neue Anfrage</a></li>
|
||||||
|
<li ><a href="impfwarteliste.php" class="nav-link px-2 text-white">Impfwarteliste</a></li>
|
||||||
<li ><a href="settings.php" class="nav-link px-2 text-white">Einstellungen</a></li>
|
<li ><a href="settings.php" class="nav-link px-2 text-white">Einstellungen</a></li>
|
||||||
|
|
||||||
</ul>
|
</ul>
|
||||||
@@ -93,4 +94,4 @@
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
?>
|
?>
|
||||||
|
|||||||
Reference in New Issue
Block a user