Files
2026-03-20 17:13:38 +01:00

434 lines
12 KiB
PHP

<!DOCTYPE HTML>
<!--
Alpha by HTML5 UP
html5up.net | @n33co
Free for personal and commercial use under the CCA 3.0 license (html5up.net/license)
-->
<html>
<head>
<?php
include('header.php');
?>
<title>Praxis Creutzburg - Termin absagen</title>
<link rel="stylesheet" href="css/formulare.css" />
</head>
<body >
<!-- Header -->
<header id="header" class="../skel-layers-fixed">
<?php
include('menu.php');
include_once("inc/config.inc.php");
include_once("inc/functions.inc.php");
include_once('inc/functions.impfen.inc.php');
include_once('inc/functions.formulare.inc.php');
?>
</header>
<!-- Main -->
<section id="main" class="container">
<?php
echo showHeaderpraxis();
?>
<section class="box special">
<h2>Termin absagen</h2>
<?php
if(isset($_POST["aktion"])){
if($_POST["aktion"] == "1"){
echo '<h4>Kontrollieren Sie Ihre Angaben!</h4><br>';
echo '<form action="'. $_SERVER['PHP_SELF'] .'" method=POST>';
echo '<table border="0">';
// Schleife durch Clemens 15.10.2018
foreach ($_POST as $key => $value) {
if(!($value == "" || $key == "submit" || $key == "aktion")){
if($key == "category"){
$stmt = $pdo->prepare("SELECT artname FROM anfrageart WHERE artid = ? LIMIT 1");
$stmt->execute([$value]);
$row = $stmt->fetch(PDO::FETCH_ASSOC);
$anfragearttext = $row ? $row["artname"] : null;
echo "<tr><td width=100 valign=top class=fett>$key:</td><td>$anfragearttext</td></tr>\n";
echo"<input type=hidden name='".$key."' value='".$value. "'>\n";
}else{
echo "<tr><td width=100 valign=top class=fett>$key:</td><td>$value</td></tr>\n";
echo"<input type=hidden name='".$key."' value='".$value. "'>\n";
}
}
}
echo '</table>';
echo '<input type="hidden" name="aktion" value="2" />';
echo '<input type="submit" value="Anfrage abschicken" />';
echo '</form >';
}else if($_POST["aktion"] == "2"){
// ================== 1) Input ==================
$vorname = trim($_POST["Vorname"] ?? "");
$nachname = trim($_POST["Name"] ?? "");
$geburtstag = trim($_POST["Geburtsjahr"] ?? "");
$email = trim($_POST["Email"] ?? "");
$tele = trim($_POST["Tel"] ?? "");
$plz = trim($_POST["plz"] ?? "");
$ort = trim($_POST["ort"] ?? "");
$strasse = trim($_POST["strasse"] ?? "");
$medikament1 = trim($_POST["Medikament1"] ?? "");
$medikament2 = trim($_POST["Medikament2"] ?? "");
$nachricht = trim($_POST["message"] ?? "");
$anforderungart = trim($_POST["category"] ?? "");
$abholung = trim($_POST["abholung"] ?? "");
// Geburtstag nur Jahr → auf Datum mappen
if (preg_match('/^\d{4}$/', $geburtstag)) {
$geburtstag .= "-01-01";
}
// Minimal-Checks
if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
die("<h3>Ungültige E-Mail</h3>");
}
if (!$geburtstag) {
die("<h3>Geburtsdatum fehlt</h3>");
}
if (!$anforderungart) {
die("<h3>Kategorie fehlt</h3>");
}
// ================== 2) Impfstoff (optional) ==================
$impfstofftext = null;
if (!empty($impfstoff)) {
$stmt = $pdo->prepare("SELECT impfname FROM impfstoff WHERE impfid = ? LIMIT 1");
$stmt->execute([$impfstoff]);
$impfstofftext = $stmt->fetchColumn() ?: null;
}
// ================== 3) DB-Logik ==================
try {
$pdo->beginTransaction();
// --- Person upsert ---
// UNIQUE(email, geburtstag) MUSS existieren!
$stmt = $pdo->prepare("
INSERT INTO persons (vorname, nachname, email, geburtstag, tele, ort, plz, strasse)
VALUES (:vorname, :nachname, :email, :geburtstag, :tele, :ort, :plz, :strasse)
ON DUPLICATE KEY UPDATE
vorname = VALUES(vorname),
nachname = VALUES(nachname),
tele = VALUES(tele),
ort = VALUES(ort),
plz = VALUES(plz),
strasse = VALUES(strasse),
updated_at = CURRENT_TIMESTAMP
");
$stmt->execute([
':vorname' => $vorname,
':nachname' => $nachname,
':email' => $email,
':geburtstag' => $geburtstag,
':tele' => $tele,
':ort' => $ort,
':plz' => $plz,
':strasse' => $strasse,
]);
// person_id holen
$stmt = $pdo->prepare("SELECT person_id FROM persons WHERE email = ? AND geburtstag = ? LIMIT 1");
$stmt->execute([$email, $geburtstag]);
$person_id = (int)$stmt->fetchColumn();
if (!$person_id) {
throw new Exception("Keine eindeutige Kennung (person_id)");
}
// --- Duplikatcheck (7 Tage) ---
$stmt = $pdo->prepare("
SELECT 1
FROM anfragen
WHERE requester_person_id = ?
AND anforderungart = ?
AND nachricht = ?
AND create_time >= (NOW() - INTERVAL 7 DAY)
LIMIT 1
");
$stmt->execute([$person_id, $anforderungart, $nachricht]);
$exists = (bool)$stmt->fetchColumn();
if ($exists) {
$pdo->rollBack();
echo "<h3>Doppelte Anfrage</h3><br>
Ihre Anfrage wurde schon gespeichert.<br>
Bitte warten Sie auf die Verarbeitung.<br><br>";
header("refresh:15;terminabsagen.php");
exit;
}
// --- Anfrage anlegen ---
$hashvorher = $vorname . $nachname . $email;
$hash = md5($hashvorher) . date("YmdHs");
$stmt = $pdo->prepare("
INSERT INTO anfragen
(requester_person_id, anforderungart, medikament1, medikament2,
nachricht, hash, create_time, ordnungsid,
sicherenachricht, source, created_by_account_id)
VALUES
(:pid, :art, :med1, :med2,
:nachricht, :hash, NOW(), 3,
0, 'mail', NULL)
");
$stmt->execute([
':pid' => $person_id,
':art' => $anforderungart,
':med1' => $medikament1,
':med2' => $medikament2,
':nachricht' => $nachricht,
':hash' => $hash
]);
$anfrageid = (int)$pdo->lastInsertId();
$pdo->commit();
} catch (Exception $e) {
if ($pdo->inTransaction()) $pdo->rollBack();
die("<h3>Speicherung nicht erfolgreich</h3><br>" . htmlspecialchars($e->getMessage()));
}
// ================== 4) Mail + Ausgabe ==================
try {
SendMailMessageVorlage($pdo, "3", $anfrageid, "25");
} catch (Exception $e) {
// Mailfehler ignorieren oder loggen
}
echo "<h3>Nachricht abgeschickt!</h3><br>
Sie bekommen eine Bestätigung per E-Mail!<br>
Überprüfen Sie auch Ihren Spam-Filter!<br><br>";
}
}else{
?>
<br>
Stellen Sie wiederholt Anfragen an die Praxis Creutzburg? <br>
Wollen Sie bis zu sechs Medikamente beantragen?<br>
Benötigen Sie ein längeres Textfeld?<br>
<br>Dann nutzen Sie auch unseren <a href="https://www.praxis-creutzburg.de/intern/">Internen Bereich</a> für Patienten.</p><br>
<h3>Sie benötigen einen neuen Termin?</h3>
Sagen Sie Ihren Termin bitte ab. Anschließend können Sie sich selbstständig einen neuen Termin für die Sprechstunde buchen.
Schauen Sie in unserem Online-Kalender nach einem Termin. Dort sind meist auch kurzfristige Termine vorhanden.<br>
<a href="termine.php".php" class="button alt" style="font-size: 18px;background-color: #4CAF50;color:white;">Online-Kalender</a><br>
</header>
<div class="row">
<div class="12u">
<!-- Form -->
<section class="box">
<?php
// Urlaubsabfrage
$today = date("Y-m-d");
$stmt = $pdo->prepare("
SELECT urlaubid
FROM urlaub
WHERE start <= ?
AND ende >= ?
LIMIT 1
");
$stmt->execute([$today, $today]);
$urlaubid = $stmt->fetchColumn();
if (!$urlaubid) {
?>
<h3>Formular bitte ausfüllen und abschicken</h3>
<p>Gehen Sie nach unten zum Formular und füllen Sie es (wie gewohnt) aus.</p>
<?php echo '<form action="'. $_SERVER['PHP_SELF'] .'" method=POST>';
echo '<input type="hidden" name="aktion" id="aktion" value="1" />';
?>
<div class="row uniform 50%">
<?php
echo ShowFormularFragenBenutzer();
?>
</div>
<div class="row uniform 50%">
<div class="12u">
<label for="category">Ich sagen meinen Termin aus dem folgenden Grund ab:</label>
<div class="select-wrapper">
<select name="category" id="category" required >
<option value=""> Bitte wählen Sie aus</option>
<?php
$stmt = $pdo->prepare("
SELECT artid, artname
FROM anfrageart
WHERE terminabsagen = 1
");
$stmt->execute();
while ($rowimpf = $stmt->fetch(PDO::FETCH_ASSOC)) {
$artname = $rowimpf["artname"];
$artid = $rowimpf["artid"];
?>
<option value="<?php echo htmlspecialchars($artid, ENT_QUOTES, 'UTF-8'); ?>">
<?php echo htmlspecialchars($artname, ENT_QUOTES, 'UTF-8'); ?>
</option>
<?php
}
?>
</select>
<div id="AstraInfobox"></div>
</div>
</div>
</div>
<div class="row uniform 50%">
<div class="12u">
<label for="message">Teilen Sie uns mit welchen Termin Sie absagen wollen:</label>
<textarea name="message" id="message" placeholder="Ihre Nachricht/Bemerkung" rows="6" maxlength="150"></textarea>
</div>
</div>
<div class="row uniform">
<div class="12u">
<br>
Bedenken Sie bitte, dass wir einmal im Quartal Ihre Chipkarte benötigen. Ohne Chipkarte sind seit 1.1.2016 keine Kassendienstleistungen mehr möglich. Kassenleistungen sind an die gesetzlichen Regelungen gebunden. Fragen Sie Ihre Krankenkasse.<br>
Ihre Daten werden HTTPS-verschlüsselt an unser System übertragen. Sie erhalten die Antwort per E-Mail mit TLS-Verschlüsselung. Mit Absenden Ihrer Anfrage stimmen Sie diesen Bedingungen zu.<br>
</div>
</div>
<div class="row uniform">
<div class="12u">
<ul class="actions">
<li><input type="submit" value="Abschicken" /></li>
<li><input type="reset" value="Reset" class="alt" /></li>
</ul>
</div>
</div>
</form>
<hr />
<?php }else{
echo "<h2>Praxis im Urlaub</h2>";
echo "Wir befinden uns aktuell im Urlaub.<br>Wenden Sie sich an unsere Vertretung oder warten Sie bis nach unserem Urlaub mit Ihrer Anfrage.<br><br>";
$today = date("Y-m-d");
$stmt = $pdo->prepare("
SELECT ende, vertretung, vertretertelefon, vertreteradresse, vertreterurl
FROM urlaub
WHERE start <= :today
AND ende >= :today
ORDER BY ende DESC
LIMIT 1
");
$stmt->execute([':today' => $today]);
$row = $stmt->fetch(); // liefert Array oder false
if ($row) {
$vertreter = $row["vertretung"] ?? null;
$vertretertelefon = $row["vertretertelefon"] ?? null;
$vertreteradresse = $row["vertreteradresse"] ?? null;
$vertreterurl = $row["vertreterurl"] ?? null;
$ende = $row["ende"] ?? null;
if ($ende) {
$endeausgabe = date("d.m.Y", strtotime("+1 day", strtotime($ende)));
} else {
$endeausgabe = null;
}
if (!empty($vertreter)) {
echo "Unsere Vertretung: " . htmlspecialchars($vertreter, ENT_QUOTES, 'UTF-8') . "<br>";
}
if (!empty($vertreterurl)) {
// optional: URL escapen/validieren
echo "Webseite Vertretung: " . htmlspecialchars($vertreterurl, ENT_QUOTES, 'UTF-8') . "<br>";
}
if (!empty($vertretertelefon)) {
echo "Telefonischer Kontakt Vertretung: " . htmlspecialchars($vertretertelefon, ENT_QUOTES, 'UTF-8') . "<br>";
}
if (!empty($vertreteradresse)) {
echo "Adresse Vertretung: " . htmlspecialchars($vertreteradresse, ENT_QUOTES, 'UTF-8') . "<br>";
}
if ($endeausgabe) {
echo "<br>Wir stehen Ihnen ab dem " . htmlspecialchars($endeausgabe, ENT_QUOTES, 'UTF-8') . " wieder zur Verfügung.<br><br><br>";
}
}
?>
<form action="index.php" method=POST>
<input type=submit class=button value="Zurück">
</form>
<?php
}
}
?>
</div>
</div>
</section>
<?php
include_once('footer.php');
?>
</body>
</html>