Compare commits
5
Commits
6d903ac4fc
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
e7955e354c | ||
|
|
53cff55ac2 | ||
|
|
4dabad0b22 | ||
|
|
e39c00105e | ||
|
|
f19c490f44 |
+93
-25
@@ -115,8 +115,8 @@ if(!check_worker()){
|
||||
p.ort, p.plz, p.strasse,
|
||||
aa.artname
|
||||
FROM anfragen a
|
||||
JOIN persons p ON a.requester_person_id = p.person_id
|
||||
JOIN anfrageart aa ON a.anforderungart = aa.artid
|
||||
LEFT JOIN persons p ON a.requester_person_id = p.person_id
|
||||
LEFT JOIN anfrageart aa ON a.anforderungart = aa.artid
|
||||
";
|
||||
|
||||
$params = [];
|
||||
@@ -201,16 +201,19 @@ if(!check_worker()){
|
||||
$dateiname = e((string)$row["dateiname"]);
|
||||
|
||||
|
||||
$anfrageart = e((string)$row["artname"]);
|
||||
// artname kann seit dem LEFT JOIN leer sein.
|
||||
$anfrageart = e((string)($row["artname"] ?? ""));
|
||||
if($anfrageart === ""){
|
||||
$anfrageart = "unbekannte Art";
|
||||
}
|
||||
$ordnungsid = $row["ordnungsid"];
|
||||
$ordnungsstring = GetOrdnungsid($ordnungsid);
|
||||
$WeitereInfos= "";
|
||||
$sicherenachricht = $row["sicherenachricht"];
|
||||
if($sicherenachricht == "1"){
|
||||
$WeitereInfos .= "Interne Anfrage<br>";
|
||||
}else{
|
||||
$WeitereInfos .= "Mailanfrage<br>";
|
||||
}
|
||||
// Telefonanfragen liessen sicherenachricht NULL und wurden
|
||||
// dadurch faelschlich als Mailanfrage etikettiert.
|
||||
$WeitereInfos .= GetAnfrageHerkunft($row["source"] ?? "mail", $sicherenachricht) . "<br>";
|
||||
$WeitereInfos .= GetSprachnachrichtHinweis($row["source"] ?? "mail");
|
||||
if($medikamenteins){
|
||||
$WeitereInfos .= "Medikament1: $medikamenteins<br>";
|
||||
}
|
||||
@@ -244,17 +247,44 @@ if(!check_worker()){
|
||||
$farbe = GetStatusFarbe($checked);
|
||||
$checkausgabe = GetStatus($checked);
|
||||
|
||||
$userausgabe = $vorname . " " . $nachname . "<br>" . $ausgabegeburstag;
|
||||
$adresse = $plz . " " . $ort . "<br>" . $strasse ;
|
||||
$adresse = $adresse;
|
||||
echo "<tr style='background-color:". $farbe. ";'><td>$userausgabe <br> $mail <br>Tel:<a href='tel:".$tel."'>$tel</a></td><td>$adresse</td><td>$ordnungsstring - $anfrageart <br>$WeitereInfos</td><td>$datumausgabe</td><td>$update_time<br>$checkausgabe<br>$ausgabeworker</td><td>
|
||||
// Ohne Treffer im LEFT JOIN gibt es keine Personendaten -
|
||||
// typisch fuer Telefonanfragen, deren Anrufer nicht zugeordnet
|
||||
// werden konnte. Frueher fielen diese Zeilen durch den INNER
|
||||
// JOIN komplett aus der Liste.
|
||||
$hatPerson = ($row["vorname"] !== null || $row["nachname"] !== null);
|
||||
// Die Anlage haelt die Rufnummer des Anrufers getrennt von den
|
||||
// Stammdaten - sie kann von der hinterlegten abweichen.
|
||||
$anruferzeile = GetAnruferZeile($row["source"] ?? "mail", $row["anrufernummer"] ?? null);
|
||||
// Wer koennte angerufen haben? Nur ein Vorschlag anhand der
|
||||
// Rufnummer, die Auswahl trifft die Mitarbeiterin.
|
||||
$anrufervorschlag = GetPatientZuRufnummerAusgabe($pdo, $row["source"] ?? "mail", $row["anrufernummer"] ?? null, $row["requester_person_id"] ?? null);
|
||||
if($hatPerson){
|
||||
$userausgabe = $vorname . " " . $nachname . "<br>" . $ausgabegeburstag;
|
||||
$adresse = $plz . " " . $ort . "<br>" . $strasse ;
|
||||
$kontakt = "$mail <br>Tel:<a href='tel:$tel'>$tel</a>";
|
||||
if($anruferzeile !== ""){
|
||||
$kontakt .= "<br>" . $anruferzeile;
|
||||
}
|
||||
}else{
|
||||
$userausgabe = "<i>Kein Patient zugeordnet</i>";
|
||||
$adresse = "-";
|
||||
$kontakt = ($anruferzeile !== "") ? $anruferzeile : "<i>Kontaktdaten siehe Nachricht</i>";
|
||||
$kontakt .= $anrufervorschlag;
|
||||
}
|
||||
echo "<tr style='background-color:". $farbe. ";'><td>$userausgabe <br> $kontakt</td><td>$adresse</td><td>$ordnungsstring - $anfrageart <br>$WeitereInfos</td><td>$datumausgabe</td><td>$update_time<br>$checkausgabe<br>$ausgabeworker</td><td>";
|
||||
// "Antworten" verschickt eine Mailvorlage. Ohne zugeordnete Person
|
||||
// gibt es keine Adresse, der Knopf wuerde ins Leere laufen.
|
||||
if($hatPerson){
|
||||
echo "
|
||||
<div style='float: left;margin:15px; height: 20px;'>
|
||||
<form action='". self_action() ."' method=POST>
|
||||
<input type=hidden name=aktion value=2>
|
||||
<input type=hidden name=anfrageid value=$anfrageid>
|
||||
<input type=submit class='btn btn-primary' value='Antworten'>
|
||||
</form>
|
||||
</div>
|
||||
</div>";
|
||||
}
|
||||
echo "
|
||||
<div style='float: left;margin:15px; height: 20px;'>
|
||||
<form action='". self_action() ."' method=POST>
|
||||
<input type=hidden name=aktion value=20>
|
||||
@@ -308,8 +338,8 @@ if(!check_worker()){
|
||||
p.ort, p.plz, p.strasse,
|
||||
aa.artname
|
||||
FROM anfragen a
|
||||
INNER JOIN persons p ON a.requester_person_id = p.person_id
|
||||
INNER JOIN anfrageart aa ON a.anforderungart = aa.artid
|
||||
LEFT JOIN persons p ON a.requester_person_id = p.person_id
|
||||
LEFT JOIN anfrageart aa ON a.anforderungart = aa.artid
|
||||
WHERE a.anfrageid = ?
|
||||
LIMIT 1
|
||||
";
|
||||
@@ -323,6 +353,27 @@ if(!check_worker()){
|
||||
exit;
|
||||
}
|
||||
|
||||
// Ohne zugeordnete Person gibt es keine Mailadresse - die
|
||||
// Antwortvorlagen unten wuerden ins Leere laufen. Betrifft vor
|
||||
// allem Telefonanfragen ohne erkannten Anrufer.
|
||||
if ($row["vorname"] === null && $row["nachname"] === null) {
|
||||
echo "<div class='alert alert-warning' role='alert'>";
|
||||
echo "<b>Dieser Anfrage ist kein Patient zugeordnet.</b><br>";
|
||||
echo "Herkunft: " . e(GetAnfrageHerkunft($row["source"] ?? "mail", $row["sicherenachricht"] ?? null)) . "<br>";
|
||||
echo "Eine Antwort per Mail ist deshalb nicht moeglich. ";
|
||||
echo "Bitte telefonisch beantworten und die Anfrage anschliessend ";
|
||||
echo "ueber <b>Telefonisch beantwortet</b> abschliessen.";
|
||||
echo "</div>";
|
||||
echo GetAnruferZeile($row["source"] ?? "mail", $row["anrufernummer"] ?? null);
|
||||
echo GetPatientZuRufnummerAusgabe($pdo, $row["source"] ?? "mail", $row["anrufernummer"] ?? null, $row["requester_person_id"] ?? null);
|
||||
echo GetSprachnachrichtHinweis($row["source"] ?? "mail");
|
||||
echo "<b>Nachricht:</b><br>" . nl2br(e((string)$row["nachricht"])) . "<br><br>";
|
||||
ZuruckzumAnfrageOverView();
|
||||
echo "</form>";
|
||||
include(__DIR__ . "/templates/footer.inc.php");
|
||||
exit;
|
||||
}
|
||||
|
||||
// Ticket und Antwort ansehen.
|
||||
$abholort = $row["abholort"] ?? null;
|
||||
$sicherenachricht = $row["sicherenachricht"] ?? null;
|
||||
@@ -363,6 +414,8 @@ if(!check_worker()){
|
||||
$antworttext = $row["antworttext"] ?? null;
|
||||
|
||||
$WeitereInfos = "";
|
||||
$WeitereInfos .= GetAnruferZeile($row["source"] ?? "mail", $row["anrufernummer"] ?? null);
|
||||
$WeitereInfos .= GetSprachnachrichtHinweis($row["source"] ?? "mail");
|
||||
if ($medikamenteins) $WeitereInfos .= "Medikament1: $medikamenteins<br>";
|
||||
if ($medikamentzwei) $WeitereInfos .= "Medikament2: $medikamentzwei<br>";
|
||||
if ($medikamentdrei) $WeitereInfos .= "Medikament3: $medikamentdrei<br>";
|
||||
@@ -858,7 +911,7 @@ if(!check_worker()){
|
||||
$stmt = $pdo->prepare("
|
||||
SELECT *
|
||||
FROM anfragen a
|
||||
INNER JOIN persons p ON p.person_id = a.requester_person_id
|
||||
LEFT JOIN persons p ON p.person_id = a.requester_person_id
|
||||
WHERE a.anfrageid = :anfrageid
|
||||
LIMIT 1
|
||||
");
|
||||
@@ -875,16 +928,22 @@ if(!check_worker()){
|
||||
|
||||
$vorname = $rowtime["vorname"];
|
||||
$nachname = $rowtime["nachname"];
|
||||
$userausgabe = $vorname . " " . $nachname;
|
||||
// Telefonanfragen ohne erkannten Anrufer haben keine Person.
|
||||
$hatPerson = ($vorname !== null || $nachname !== null);
|
||||
$userausgabe = $hatPerson ? ($vorname . " " . $nachname) : "Kein Patient zugeordnet";
|
||||
|
||||
|
||||
echo "Name:<br>$userausgabe<br>Anforderung: $impfstofftext<br>";
|
||||
echo "Wollen Sie wirklich diesen Eintrag löschen?<br>Dieses ist nicht rückgängig zu machen!<br>Dann bestätigen Sie die Abmeldung:<br>";
|
||||
echo "<form action='". self_action() . "' method=POST>";
|
||||
echo '<input type="hidden" name="aktion" id="aktion" value="9" />';
|
||||
echo '<input type="hidden" name="anfrageid" id="anfrageid" value="'. $anfrageid .'" /><br>';
|
||||
echo '<input type="submit" class="btn btn-primary" id="submitbox" value="Anforderung löschen (mit Mail)" />';
|
||||
echo "<br>";
|
||||
// Loeschen mit Mail setzt eine Mailadresse voraus.
|
||||
if ($hatPerson) {
|
||||
echo "<form action='". self_action() . "' method=POST>";
|
||||
echo '<input type="hidden" name="aktion" id="aktion" value="9" />';
|
||||
echo '<input type="hidden" name="anfrageid" id="anfrageid" value="'. $anfrageid .'" /><br>';
|
||||
echo '<input type="submit" class="btn btn-primary" id="submitbox" value="Anforderung löschen (mit Mail)" />';
|
||||
echo "</form>";
|
||||
echo "<br>";
|
||||
}
|
||||
echo "<form action='". self_action() . "' method=POST>";
|
||||
echo '<input type="hidden" name="aktion" id="aktion" value="10" />';
|
||||
echo '<input type="hidden" name="anfrageid" id="anfrageid" value="'. $anfrageid .'" /><br>';
|
||||
@@ -971,7 +1030,7 @@ if(!check_worker()){
|
||||
p.tele,
|
||||
p.geburtstag
|
||||
FROM anfragen a
|
||||
INNER JOIN persons p ON p.person_id = a.requester_person_id
|
||||
LEFT JOIN persons p ON p.person_id = a.requester_person_id
|
||||
WHERE a.anfrageid = :anfrageid
|
||||
LIMIT 1
|
||||
");
|
||||
@@ -1038,6 +1097,8 @@ if(!check_worker()){
|
||||
a.medikament2,
|
||||
a.sicherenachricht,
|
||||
a.abholort,
|
||||
a.source,
|
||||
a.anrufernummer,
|
||||
|
||||
p.person_id,
|
||||
p.vorname,
|
||||
@@ -1051,8 +1112,8 @@ if(!check_worker()){
|
||||
|
||||
aa.artname AS anfrageart_name
|
||||
FROM anfragen a
|
||||
INNER JOIN persons p ON p.person_id = a.requester_person_id
|
||||
INNER JOIN anfrageart aa ON a.anforderungart = aa.artid
|
||||
LEFT JOIN persons p ON p.person_id = a.requester_person_id
|
||||
LEFT JOIN anfrageart aa ON a.anforderungart = aa.artid
|
||||
WHERE a.anfrageid = :anfrageid
|
||||
LIMIT 1
|
||||
");
|
||||
@@ -1094,6 +1155,9 @@ if(!check_worker()){
|
||||
|
||||
/* --- Anzeige-Strings --- */
|
||||
$WeitereInfos = "";
|
||||
$WeitereInfos .= GetAnruferZeile($row["source"] ?? "mail", $row["anrufernummer"] ?? null);
|
||||
$WeitereInfos .= GetPatientZuRufnummerAusgabe($pdo, $row["source"] ?? "mail", $row["anrufernummer"] ?? null, $row["person_id"] ?? null);
|
||||
$WeitereInfos .= GetSprachnachrichtHinweis($row["source"] ?? "mail");
|
||||
if (!empty($medikamenteins)) {
|
||||
$WeitereInfos .= "Medikament1: " . htmlspecialchars($medikamenteins, ENT_QUOTES, 'UTF-8') . "<br>";
|
||||
}
|
||||
@@ -1284,6 +1348,8 @@ if(!check_worker()){
|
||||
a.medikament4,
|
||||
a.medikament5,
|
||||
a.medikament6,
|
||||
a.source,
|
||||
a.anrufernummer,
|
||||
|
||||
aa.artname AS anfrageart_name,
|
||||
|
||||
@@ -1344,6 +1410,8 @@ if(!check_worker()){
|
||||
$ordnungsstring = GetOrdnungsid($ordnungsid);
|
||||
|
||||
$WeitereInfos = "";
|
||||
$WeitereInfos .= GetAnruferZeile($row["source"] ?? "mail", $row["anrufernummer"] ?? null);
|
||||
$WeitereInfos .= GetSprachnachrichtHinweis($row["source"] ?? "mail");
|
||||
if (!empty($med1)) $WeitereInfos .= "Medikament1: " . htmlspecialchars($med1, ENT_QUOTES, 'UTF-8') . "<br>";
|
||||
if (!empty($med2)) $WeitereInfos .= "Medikament2: " . htmlspecialchars($med2, ENT_QUOTES, 'UTF-8') . "<br>";
|
||||
if (!empty($med3)) $WeitereInfos .= "Medikament3: " . htmlspecialchars($med3, ENT_QUOTES, 'UTF-8') . "<br>";
|
||||
|
||||
@@ -611,6 +611,273 @@ function GetOrdnungsid($wert){
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Herkunft einer Anfrage als Text.
|
||||
*
|
||||
* Nur der Fall "telefon" kommt aus anfragen.source. Die Unterscheidung
|
||||
* intern/Mail bleibt bewusst an sicherenachricht haengen: source="portal"
|
||||
* ist dafuer unbrauchbar, weil insertAnfrage() kein source setzt und interne
|
||||
* Anfragen deshalb als source="mail" in der Tabelle stehen.
|
||||
* Seit 02.09.2026 legt die Telefonanlage Anfragen mit source="telefon" an;
|
||||
* diese haben oft keine requester_person_id, weil der Anrufer nicht
|
||||
* zugeordnet werden konnte.
|
||||
*/
|
||||
function GetAnfrageHerkunft($source, $sicherenachricht){
|
||||
if($source == "telefon"){
|
||||
$text = "Telefonanfrage";
|
||||
}else if($sicherenachricht == "1"){
|
||||
$text = "Interne Anfrage";
|
||||
}else{
|
||||
$text = "Mailanfrage";
|
||||
}
|
||||
return $text;
|
||||
}
|
||||
|
||||
/**
|
||||
* Hinweis auf die Sprachnachricht einer Telefonanfrage.
|
||||
*
|
||||
* Die Telefonanlage legt in anfragen.nachricht nur das automatisch erzeugte
|
||||
* Transkript ab, das Erkennungsfehler enthalten kann. Die Aufnahme selbst
|
||||
* liegt in PraxisKI und ist nur aus dem Praxisnetz erreichbar.
|
||||
* Fuer alle anderen Herkuenfte leer.
|
||||
*/
|
||||
function GetSprachnachrichtHinweis($source){
|
||||
if($source != "telefon"){
|
||||
return "";
|
||||
}
|
||||
return "Transkript der Sprachnachricht - Aufnahme anhören: "
|
||||
. "<a href=\"https://ki-praxis.praxis.local/anfragen/\" target=\"_blank\" rel=\"noopener\">ki-praxis.praxis.local/anfragen</a>"
|
||||
. " (nur im Praxisnetz)<br>";
|
||||
}
|
||||
|
||||
/**
|
||||
* Telefonnummer als anklickbaren tel:-Link ausgeben.
|
||||
*
|
||||
* Der Link vertraegt nur Ziffern und ein fuehrendes Plus; Klammern,
|
||||
* Leerzeichen und Bindestriche fliegen fuer das Ziel raus, angezeigt wird
|
||||
* die Nummer unveraendert. Nummern ohne jede Ziffer - etwa "unterdrueckt"
|
||||
* bei unterdrueckter Rufnummer - werden nur als Text ausgegeben.
|
||||
* Erwartet den Rohwert aus der Datenbank und maskiert selbst.
|
||||
*/
|
||||
function GetTelefonLink($nummer){
|
||||
$nummer = trim((string)$nummer);
|
||||
if($nummer === ""){
|
||||
return "";
|
||||
}
|
||||
$ziel = preg_replace('/[^0-9]/', '', $nummer);
|
||||
if($ziel === ""){
|
||||
return htmlspecialchars($nummer, ENT_QUOTES, 'UTF-8');
|
||||
}
|
||||
if(substr($nummer, 0, 1) === "+"){
|
||||
$ziel = "+" . $ziel;
|
||||
}
|
||||
return "<a href=\"tel:" . htmlspecialchars($ziel, ENT_QUOTES, 'UTF-8') . "\">"
|
||||
. htmlspecialchars($nummer, ENT_QUOTES, 'UTF-8') . "</a>";
|
||||
}
|
||||
|
||||
/**
|
||||
* Rufnummer des Anrufers als beschriftete Zeile.
|
||||
*
|
||||
* anfragen.anrufernummer fuellt die Telefonanlage; steht dort nichts, gibt
|
||||
* es keine Zeile. Fuer alle Herkuenfte ausser "telefon" leer.
|
||||
*/
|
||||
function GetAnruferZeile($source, $anrufernummer){
|
||||
if($source != "telefon"){
|
||||
return "";
|
||||
}
|
||||
$link = GetTelefonLink($anrufernummer);
|
||||
if($link === ""){
|
||||
return "";
|
||||
}
|
||||
return "Anruf von: " . $link . "<br>";
|
||||
}
|
||||
|
||||
/**
|
||||
* Rufnummer auf eine vergleichbare Form bringen.
|
||||
*
|
||||
* Nur Ziffern; +49 und 0049 werden zur nationalen Schreibweise mit
|
||||
* fuehrender 0, damit die Anzeige der Telefonanlage und die von Hand
|
||||
* gepflegten Nummern in persons zusammenfinden.
|
||||
*/
|
||||
function NormalisiereRufnummer($nummer){
|
||||
$ziffern = preg_replace('/[^0-9]/', '', (string)$nummer);
|
||||
if($ziffern === ""){
|
||||
return "";
|
||||
}
|
||||
if(strpos($ziffern, "0049") === 0){
|
||||
$ziffern = "0" . substr($ziffern, 4);
|
||||
}elseif(strpos(trim((string)$nummer), "+") === 0 && strpos($ziffern, "49") === 0){
|
||||
$ziffern = "0" . substr($ziffern, 2);
|
||||
}
|
||||
return $ziffern;
|
||||
}
|
||||
|
||||
/**
|
||||
* Patienten zu einer Rufnummer suchen.
|
||||
*
|
||||
* Gesucht wird in persons UND im Altbestand user_old. persons allein reicht
|
||||
* nicht: bei 122 der 2552 migrierten Paare weicht die Nummer ab, 87 Nummern
|
||||
* stehen ausschliesslich in user_old, und 176 alte Zeilen wurden nie
|
||||
* gemappt. Genau so ein Fall war Anfrage 13037 - die Mobilnummer stand nur
|
||||
* im Altbestand, in persons nur eine aeltere siebenstellige.
|
||||
*
|
||||
* Gibt es zu einer alten Zeile einen aktuellen Datensatz, werden dessen
|
||||
* Daten gezeigt: die Nummer ist nur der Schluessel, angezeigt gehoert der
|
||||
* gepflegte Stand. Jeder Patient taucht je Nummer hoechstens einmal auf.
|
||||
*
|
||||
* Liefert bewusst alle Treffer, denn 521 der gepflegten Nummern gehoeren zu
|
||||
* mehr als einer Person (Familien, zwei sogar zu 16 bzw. 18). Die Auswahl
|
||||
* trifft die Mitarbeiterin, nicht der Code.
|
||||
*
|
||||
* Nummern mit weniger als 7 Ziffern werden nicht gesucht: in den Stammdaten
|
||||
* stehen ein paar Platzhalter mit 1 bis 5 Ziffern, die sonst wahllos
|
||||
* zusammenfallen.
|
||||
*
|
||||
* Der Index wird beim ersten Treffer einmal je Seitenaufruf aufgebaut und
|
||||
* danach wiederverwendet - die Anfrageliste zeigt bis zu einige tausend
|
||||
* Zeilen, eine Abfrage je Zeile waere zu teuer.
|
||||
*/
|
||||
function FindePatientenZuRufnummer($pdo, $nummer){
|
||||
static $index = null;
|
||||
|
||||
$gesucht = NormalisiereRufnummer($nummer);
|
||||
if(strlen($gesucht) < 7){
|
||||
return array();
|
||||
}
|
||||
|
||||
if($index === null){
|
||||
$index = array();
|
||||
$gesehen = array();
|
||||
|
||||
$aufnehmen = function($nummerRoh, $schluessel, $eintrag) use (&$index, &$gesehen){
|
||||
$n = NormalisiereRufnummer($nummerRoh);
|
||||
if(strlen($n) < 7){
|
||||
return;
|
||||
}
|
||||
// Zweiter Schluessel ueber Name und Geburtstag: nicht gemappte
|
||||
// Altzeilen haben eine eigene userid, sind aber oft dieselbe
|
||||
// Person wie ein persons-Datensatz. Ohne das stuende sie zweimal
|
||||
// in der Liste. Der Vergleich traegt hier, weil ohnehin nur
|
||||
// Eintraege zu ein und derselben Rufnummer verglichen werden.
|
||||
$identitaet = "id:" . mb_strtolower(trim((string)$eintrag["vorname"]) . "|"
|
||||
. trim((string)$eintrag["nachname"]) . "|" . (string)$eintrag["geburtstag"]);
|
||||
if(isset($gesehen[$n][$schluessel]) || isset($gesehen[$n][$identitaet])){
|
||||
return;
|
||||
}
|
||||
$gesehen[$n][$schluessel] = true;
|
||||
$gesehen[$n][$identitaet] = true;
|
||||
$index[$n][] = $eintrag;
|
||||
};
|
||||
|
||||
$stmt = $pdo->query("SELECT person_id, vorname, nachname, geburtstag, email, tele
|
||||
FROM persons WHERE tele IS NOT NULL AND tele <> ''");
|
||||
foreach($stmt as $p){
|
||||
$aufnehmen($p["tele"], "p" . $p["person_id"], array(
|
||||
"person_id" => $p["person_id"],
|
||||
"vorname" => $p["vorname"],
|
||||
"nachname" => $p["nachname"],
|
||||
"geburtstag" => $p["geburtstag"],
|
||||
"email" => $p["email"],
|
||||
"altbestand" => false,
|
||||
));
|
||||
}
|
||||
|
||||
$stmt = $pdo->query("SELECT u.userid, u.tele,
|
||||
p.person_id AS person_id,
|
||||
COALESCE(p.vorname, u.vorname) AS vorname,
|
||||
COALESCE(p.nachname, u.nachname) AS nachname,
|
||||
COALESCE(p.geburtstag, u.geburtstag) AS geburtstag,
|
||||
COALESCE(p.email, u.mail) AS email
|
||||
FROM user_old u
|
||||
LEFT JOIN tmp_user_person_map m ON m.old_userid = u.userid
|
||||
LEFT JOIN persons p ON p.person_id = m.person_id
|
||||
WHERE u.tele IS NOT NULL AND u.tele <> ''");
|
||||
foreach($stmt as $u){
|
||||
$pid = $u["person_id"] !== null ? (int)$u["person_id"] : null;
|
||||
$aufnehmen($u["tele"], $pid !== null ? "p" . $pid : "u" . $u["userid"], array(
|
||||
"person_id" => $pid,
|
||||
"vorname" => $u["vorname"],
|
||||
"nachname" => $u["nachname"],
|
||||
"geburtstag" => $u["geburtstag"],
|
||||
"email" => $u["email"],
|
||||
"altbestand" => true,
|
||||
));
|
||||
}
|
||||
}
|
||||
|
||||
return isset($index[$gesucht]) ? $index[$gesucht] : array();
|
||||
}
|
||||
|
||||
/**
|
||||
* Zu einer Telefonanfrage ohne zugeordneten Patienten anzeigen, wer hinter
|
||||
* der Rufnummer stecken koennte.
|
||||
*
|
||||
* Bewusst nur ein Vorschlag: die Rufnummer beweist nicht, wer angerufen hat.
|
||||
* Bei mehreren Treffern werden die Namen aufgezaehlt, statt einen zu waehlen.
|
||||
* Leer, sobald die Anfrage bereits einen Patienten hat oder nichts passt.
|
||||
*/
|
||||
function GetPatientZuRufnummerAusgabe($pdo, $source, $anrufernummer, $personId = null){
|
||||
if($source != "telefon"){
|
||||
return "";
|
||||
}
|
||||
if(!empty($personId)){
|
||||
return "";
|
||||
}
|
||||
|
||||
$treffer = FindePatientenZuRufnummer($pdo, $anrufernummer);
|
||||
if(!$treffer){
|
||||
return "";
|
||||
}
|
||||
|
||||
$namen = array();
|
||||
$ausAltbestand = false;
|
||||
foreach($treffer as $p){
|
||||
$name = trim(((string)$p["vorname"]) . " " . ((string)$p["nachname"]));
|
||||
$namen[] = htmlspecialchars($name, ENT_QUOTES, 'UTF-8');
|
||||
if(!empty($p["altbestand"])){
|
||||
$ausAltbestand = true;
|
||||
}
|
||||
}
|
||||
|
||||
if(count($treffer) === 1){
|
||||
$p = $treffer[0];
|
||||
$text = "Rufnummer passt zu: <b>" . $namen[0] . "</b>";
|
||||
|
||||
$geburtstag = (string)($p["geburtstag"] ?? "");
|
||||
if($geburtstag !== "" && $geburtstag !== "0000-00-00"){
|
||||
$zeit = strtotime($geburtstag);
|
||||
if($zeit !== false){
|
||||
$geburtstag = date("d.m.Y", $zeit);
|
||||
}
|
||||
$text .= ", geb. " . htmlspecialchars($geburtstag, ENT_QUOTES, 'UTF-8');
|
||||
}
|
||||
|
||||
$mail = trim((string)($p["email"] ?? ""));
|
||||
if($mail !== ""){
|
||||
$text .= "<br>" . htmlspecialchars($mail, ENT_QUOTES, 'UTF-8');
|
||||
}
|
||||
|
||||
if(!empty($p["altbestand"])){
|
||||
$text .= $p["person_id"] === null
|
||||
? "<br><i>nur im alten Bestand, kein aktueller Patientendatensatz</i>"
|
||||
: "<br><i>Rufnummer stammt aus dem alten Bestand</i>";
|
||||
}
|
||||
|
||||
return $text . "<br><i>nicht bestätigt - nur über die Rufnummer erkannt</i><br>";
|
||||
}
|
||||
|
||||
$gezeigt = array_slice($namen, 0, 6);
|
||||
$text = "Rufnummer passt zu " . count($treffer) . " Patienten: " . implode(", ", $gezeigt);
|
||||
if(count($namen) > count($gezeigt)){
|
||||
$text .= " und " . (count($namen) - count($gezeigt)) . " weiteren";
|
||||
}
|
||||
if($ausAltbestand){
|
||||
$text .= "<br><i>teilweise über den alten Bestand gefunden</i>";
|
||||
}
|
||||
|
||||
return $text . "<br><i>nicht zugeordnet - bitte selbst prüfen</i><br>";
|
||||
}
|
||||
|
||||
function GetPatientenartName($Patientenart){
|
||||
if($Patientenart == "0"){
|
||||
$impfenangebot = "Neupatient";
|
||||
|
||||
Reference in New Issue
Block a user