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,
|
p.ort, p.plz, p.strasse,
|
||||||
aa.artname
|
aa.artname
|
||||||
FROM anfragen a
|
FROM anfragen a
|
||||||
JOIN persons p ON a.requester_person_id = p.person_id
|
LEFT JOIN persons p ON a.requester_person_id = p.person_id
|
||||||
JOIN anfrageart aa ON a.anforderungart = aa.artid
|
LEFT JOIN anfrageart aa ON a.anforderungart = aa.artid
|
||||||
";
|
";
|
||||||
|
|
||||||
$params = [];
|
$params = [];
|
||||||
@@ -201,16 +201,19 @@ if(!check_worker()){
|
|||||||
$dateiname = e((string)$row["dateiname"]);
|
$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"];
|
$ordnungsid = $row["ordnungsid"];
|
||||||
$ordnungsstring = GetOrdnungsid($ordnungsid);
|
$ordnungsstring = GetOrdnungsid($ordnungsid);
|
||||||
$WeitereInfos= "";
|
$WeitereInfos= "";
|
||||||
$sicherenachricht = $row["sicherenachricht"];
|
$sicherenachricht = $row["sicherenachricht"];
|
||||||
if($sicherenachricht == "1"){
|
// Telefonanfragen liessen sicherenachricht NULL und wurden
|
||||||
$WeitereInfos .= "Interne Anfrage<br>";
|
// dadurch faelschlich als Mailanfrage etikettiert.
|
||||||
}else{
|
$WeitereInfos .= GetAnfrageHerkunft($row["source"] ?? "mail", $sicherenachricht) . "<br>";
|
||||||
$WeitereInfos .= "Mailanfrage<br>";
|
$WeitereInfos .= GetSprachnachrichtHinweis($row["source"] ?? "mail");
|
||||||
}
|
|
||||||
if($medikamenteins){
|
if($medikamenteins){
|
||||||
$WeitereInfos .= "Medikament1: $medikamenteins<br>";
|
$WeitereInfos .= "Medikament1: $medikamenteins<br>";
|
||||||
}
|
}
|
||||||
@@ -244,17 +247,44 @@ if(!check_worker()){
|
|||||||
$farbe = GetStatusFarbe($checked);
|
$farbe = GetStatusFarbe($checked);
|
||||||
$checkausgabe = GetStatus($checked);
|
$checkausgabe = GetStatus($checked);
|
||||||
|
|
||||||
$userausgabe = $vorname . " " . $nachname . "<br>" . $ausgabegeburstag;
|
// Ohne Treffer im LEFT JOIN gibt es keine Personendaten -
|
||||||
$adresse = $plz . " " . $ort . "<br>" . $strasse ;
|
// typisch fuer Telefonanfragen, deren Anrufer nicht zugeordnet
|
||||||
$adresse = $adresse;
|
// werden konnte. Frueher fielen diese Zeilen durch den INNER
|
||||||
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>
|
// 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;'>
|
<div style='float: left;margin:15px; height: 20px;'>
|
||||||
<form action='". self_action() ."' method=POST>
|
<form action='". self_action() ."' method=POST>
|
||||||
<input type=hidden name=aktion value=2>
|
<input type=hidden name=aktion value=2>
|
||||||
<input type=hidden name=anfrageid value=$anfrageid>
|
<input type=hidden name=anfrageid value=$anfrageid>
|
||||||
<input type=submit class='btn btn-primary' value='Antworten'>
|
<input type=submit class='btn btn-primary' value='Antworten'>
|
||||||
</form>
|
</form>
|
||||||
</div>
|
</div>";
|
||||||
|
}
|
||||||
|
echo "
|
||||||
<div style='float: left;margin:15px; height: 20px;'>
|
<div style='float: left;margin:15px; height: 20px;'>
|
||||||
<form action='". self_action() ."' method=POST>
|
<form action='". self_action() ."' method=POST>
|
||||||
<input type=hidden name=aktion value=20>
|
<input type=hidden name=aktion value=20>
|
||||||
@@ -308,8 +338,8 @@ if(!check_worker()){
|
|||||||
p.ort, p.plz, p.strasse,
|
p.ort, p.plz, p.strasse,
|
||||||
aa.artname
|
aa.artname
|
||||||
FROM anfragen a
|
FROM anfragen a
|
||||||
INNER JOIN persons p ON a.requester_person_id = p.person_id
|
LEFT JOIN persons p ON a.requester_person_id = p.person_id
|
||||||
INNER JOIN anfrageart aa ON a.anforderungart = aa.artid
|
LEFT JOIN anfrageart aa ON a.anforderungart = aa.artid
|
||||||
WHERE a.anfrageid = ?
|
WHERE a.anfrageid = ?
|
||||||
LIMIT 1
|
LIMIT 1
|
||||||
";
|
";
|
||||||
@@ -323,6 +353,27 @@ if(!check_worker()){
|
|||||||
exit;
|
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.
|
// Ticket und Antwort ansehen.
|
||||||
$abholort = $row["abholort"] ?? null;
|
$abholort = $row["abholort"] ?? null;
|
||||||
$sicherenachricht = $row["sicherenachricht"] ?? null;
|
$sicherenachricht = $row["sicherenachricht"] ?? null;
|
||||||
@@ -363,6 +414,8 @@ if(!check_worker()){
|
|||||||
$antworttext = $row["antworttext"] ?? null;
|
$antworttext = $row["antworttext"] ?? null;
|
||||||
|
|
||||||
$WeitereInfos = "";
|
$WeitereInfos = "";
|
||||||
|
$WeitereInfos .= GetAnruferZeile($row["source"] ?? "mail", $row["anrufernummer"] ?? null);
|
||||||
|
$WeitereInfos .= GetSprachnachrichtHinweis($row["source"] ?? "mail");
|
||||||
if ($medikamenteins) $WeitereInfos .= "Medikament1: $medikamenteins<br>";
|
if ($medikamenteins) $WeitereInfos .= "Medikament1: $medikamenteins<br>";
|
||||||
if ($medikamentzwei) $WeitereInfos .= "Medikament2: $medikamentzwei<br>";
|
if ($medikamentzwei) $WeitereInfos .= "Medikament2: $medikamentzwei<br>";
|
||||||
if ($medikamentdrei) $WeitereInfos .= "Medikament3: $medikamentdrei<br>";
|
if ($medikamentdrei) $WeitereInfos .= "Medikament3: $medikamentdrei<br>";
|
||||||
@@ -858,7 +911,7 @@ if(!check_worker()){
|
|||||||
$stmt = $pdo->prepare("
|
$stmt = $pdo->prepare("
|
||||||
SELECT *
|
SELECT *
|
||||||
FROM anfragen a
|
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
|
WHERE a.anfrageid = :anfrageid
|
||||||
LIMIT 1
|
LIMIT 1
|
||||||
");
|
");
|
||||||
@@ -875,16 +928,22 @@ if(!check_worker()){
|
|||||||
|
|
||||||
$vorname = $rowtime["vorname"];
|
$vorname = $rowtime["vorname"];
|
||||||
$nachname = $rowtime["nachname"];
|
$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 "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 "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>";
|
// Loeschen mit Mail setzt eine Mailadresse voraus.
|
||||||
echo '<input type="hidden" name="aktion" id="aktion" value="9" />';
|
if ($hatPerson) {
|
||||||
echo '<input type="hidden" name="anfrageid" id="anfrageid" value="'. $anfrageid .'" /><br>';
|
echo "<form action='". self_action() . "' method=POST>";
|
||||||
echo '<input type="submit" class="btn btn-primary" id="submitbox" value="Anforderung löschen (mit Mail)" />';
|
echo '<input type="hidden" name="aktion" id="aktion" value="9" />';
|
||||||
echo "<br>";
|
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 "<form action='". self_action() . "' method=POST>";
|
||||||
echo '<input type="hidden" name="aktion" id="aktion" value="10" />';
|
echo '<input type="hidden" name="aktion" id="aktion" value="10" />';
|
||||||
echo '<input type="hidden" name="anfrageid" id="anfrageid" value="'. $anfrageid .'" /><br>';
|
echo '<input type="hidden" name="anfrageid" id="anfrageid" value="'. $anfrageid .'" /><br>';
|
||||||
@@ -971,7 +1030,7 @@ if(!check_worker()){
|
|||||||
p.tele,
|
p.tele,
|
||||||
p.geburtstag
|
p.geburtstag
|
||||||
FROM anfragen a
|
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
|
WHERE a.anfrageid = :anfrageid
|
||||||
LIMIT 1
|
LIMIT 1
|
||||||
");
|
");
|
||||||
@@ -1038,6 +1097,8 @@ if(!check_worker()){
|
|||||||
a.medikament2,
|
a.medikament2,
|
||||||
a.sicherenachricht,
|
a.sicherenachricht,
|
||||||
a.abholort,
|
a.abholort,
|
||||||
|
a.source,
|
||||||
|
a.anrufernummer,
|
||||||
|
|
||||||
p.person_id,
|
p.person_id,
|
||||||
p.vorname,
|
p.vorname,
|
||||||
@@ -1051,8 +1112,8 @@ if(!check_worker()){
|
|||||||
|
|
||||||
aa.artname AS anfrageart_name
|
aa.artname AS anfrageart_name
|
||||||
FROM anfragen a
|
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
|
||||||
INNER JOIN anfrageart aa ON a.anforderungart = aa.artid
|
LEFT JOIN anfrageart aa ON a.anforderungart = aa.artid
|
||||||
WHERE a.anfrageid = :anfrageid
|
WHERE a.anfrageid = :anfrageid
|
||||||
LIMIT 1
|
LIMIT 1
|
||||||
");
|
");
|
||||||
@@ -1094,6 +1155,9 @@ if(!check_worker()){
|
|||||||
|
|
||||||
/* --- Anzeige-Strings --- */
|
/* --- Anzeige-Strings --- */
|
||||||
$WeitereInfos = "";
|
$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)) {
|
if (!empty($medikamenteins)) {
|
||||||
$WeitereInfos .= "Medikament1: " . htmlspecialchars($medikamenteins, ENT_QUOTES, 'UTF-8') . "<br>";
|
$WeitereInfos .= "Medikament1: " . htmlspecialchars($medikamenteins, ENT_QUOTES, 'UTF-8') . "<br>";
|
||||||
}
|
}
|
||||||
@@ -1284,6 +1348,8 @@ if(!check_worker()){
|
|||||||
a.medikament4,
|
a.medikament4,
|
||||||
a.medikament5,
|
a.medikament5,
|
||||||
a.medikament6,
|
a.medikament6,
|
||||||
|
a.source,
|
||||||
|
a.anrufernummer,
|
||||||
|
|
||||||
aa.artname AS anfrageart_name,
|
aa.artname AS anfrageart_name,
|
||||||
|
|
||||||
@@ -1344,6 +1410,8 @@ if(!check_worker()){
|
|||||||
$ordnungsstring = GetOrdnungsid($ordnungsid);
|
$ordnungsstring = GetOrdnungsid($ordnungsid);
|
||||||
|
|
||||||
$WeitereInfos = "";
|
$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($med1)) $WeitereInfos .= "Medikament1: " . htmlspecialchars($med1, ENT_QUOTES, 'UTF-8') . "<br>";
|
||||||
if (!empty($med2)) $WeitereInfos .= "Medikament2: " . htmlspecialchars($med2, 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>";
|
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){
|
function GetPatientenartName($Patientenart){
|
||||||
if($Patientenart == "0"){
|
if($Patientenart == "0"){
|
||||||
$impfenangebot = "Neupatient";
|
$impfenangebot = "Neupatient";
|
||||||
|
|||||||
Reference in New Issue
Block a user