Datenverbund

- Die Namenssuche vergleicht automatisch auf Übereinstimmung und uebernimmt
die Daten wenn eine vollständige Übereinstimmung gegeben ist
This commit is contained in:
Andreas Österreicher
2018-11-07 09:44:34 +01:00
parent 29b8af21f2
commit 6bb6046979
+63 -11
View File
@@ -122,6 +122,30 @@ class dvb extends basis_db
return ErrorHandler::error();
}
// Wenn nicht gefunden, wird zusaetzlich noch eine Namenssuche gestartet
if ($matrikelnummer == false || $matrikelnummer == '')
{
$this->debug('Keine Matrikelnummer gefunden -> Suche per Nachname');
$nachnameresult = $this->existsByNachname($person_id);
if (ErrorHandler::isSuccess($nachnameresult))
{
if (ErrorHandler::hasData($nachnameresult)
&& isset($nachnameresult->retval->matrikelnummer)
&& $nachnameresult->retval->matrikelnummer != '')
{
$this->debug('Nachnamensuche erfolgreich');
$matrikelnummer = $nachnameresult->retval->matrikelnummer;
if(isset($nachnameresult->retval->bpk))
$bpk = $nachnameresult->retval->bpk;
}
else
{
$this->errormsg = 'Namenssuche ergab nicht eindeutige Treffer -> manuelle Pruefung ist erforderlich';
return ErrorHandler::error();
}
}
}
if ($matrikelnummer !== false && $matrikelnummer != '')
{
// Matrikelnummer wurde gefunden
@@ -142,12 +166,6 @@ class dvb extends basis_db
}
else
{
if($this->existsByName($person_id))
{
$this->errormsg = 'Namenssuche ergab Treffer -> manuelle Pruefung erforderlich';
return ErrorHandler::error();
}
if($softrun == true)
{
$this->errormsg = 'Nicht gefunden Softrun enabled keine Meldung';
@@ -1220,7 +1238,13 @@ class dvb extends basis_db
}
}
public function existsByName($person_id)
/**
* Prueft ob eine Person aufgrund Nachname und Geburtsdatum gefunden wird
* @param $person_id PersonID der gesuchten Person.
* @return Success wenn gefunden, error wenn nicht gefunden. Hat die Person 100% Uebereinstimmung der Daten
* dann wird auch MatrNr und BPK als Retrun geliefert.
*/
public function existsByNachname($person_id)
{
$person = new person();
if($person->load($person_id))
@@ -1236,18 +1260,46 @@ class dvb extends basis_db
{
if(isset($row->vorname) && isset($row->nachname))
{
$this->debug('Eintrag gefunden -> Pruefe Eindeutigkeit');
// Vorpruefung des Datenverbund
if(mb_substr(mb_strtolower($row->vorname),0,5) == mb_substr(mb_strtolower($person->vorname),0,5)
&& mb_substr(mb_strtolower($row->nachname),0,10) == mb_substr(mb_strtolower($person->nachname),0,10))
{
return true;
// Bei 100% eindeutiger Uebereinstimmung werden die Daten zurueckgeliefert
if (mb_strtolower($row->geschlecht) == mb_strtolower($person->geschlecht)
&& $row->staatsangehoerigkeit == $person->staatsbuergerschaft
&& mb_strtolower($row->nachname) == mb_strtolower($person->nachname)
&& (
mb_strtolower($row->vorname) == mb_strtolower($person->vorname)
||
mb_strtolower($row->vorname) == mb_strtolower($person->vorname.' '.$person->vornamen)
)
&& $row->matrikelnummer != ''
&& count($result->retval->data) == 1
)
{
$this->debug('Uebereinstimmung gefunden');
$retval = new stdClass();
if(isset($row->bpk) && $row->bpk!='')
$retval->bpk = $row->bpk;
$retval->matrikelnummer = $row->matrikelnummer;
return ErrorHandler::success($retval);
}
else
{
$this->debug('keine 100% Eindeutigkeit gegeben:'.print_r($result->retval->data,true));
// Uebereinstimmung gefunden aber nicht 100% eindeutig
return ErrorHandler::success();
}
}
}
}
return false;
$this->debug('Keine Uebereinstimmung per Namenssuche');
return ErrorHandler::error();
}
else
{
return false;
return ErrorHandler::error();
}
}
}
@@ -1338,7 +1390,7 @@ class dvb extends basis_db
foreach ($domnodes_matrikelnummer as $row)
{
// MatrikelNr Found
$data->matrikelnr = $row->textContent;
$data->matrikelnummer = $row->textContent;
break;
}
$domnodes_bpk = $row_student->getElementsByTagNameNS($namespace, 'personenkennzeichen');