diff --git a/application/views/system/infocenter/stammdaten.php b/application/views/system/infocenter/stammdaten.php index cab839bd9..6681e29d3 100755 --- a/application/views/system/infocenter/stammdaten.php +++ b/application/views/system/infocenter/stammdaten.php @@ -1,6 +1,12 @@
| p->t('person','titelpre')) ?> | +titelpre ?> | +||||||||||||||
| p->t('person','vorname')) ?> | vorname ?> | @@ -10,6 +16,12 @@nachname ?> | |||||||||||||
| p->t('person','titelpost')) ?> | +titelpost ?> | +||||||||||||||
| p->t('person','geburtsdatum')) ?> |
diff --git a/application/views/system/messageList.php b/application/views/system/messageList.php
index 11f83bc9c..76c77612a 100644
--- a/application/views/system/messageList.php
+++ b/application/views/system/messageList.php
@@ -47,7 +47,8 @@ $widthColumn = $msgExists === true ? 8 : 12;
autoresize_min_height: 140,
autoresize_max_height: 495,
//callback to avoid conflict with ajax (for getting body of first message)
- init_instance_callback: "initMsgBody"
+ init_instance_callback: "initMsgBody",
+ responsive: true
});
function initMsgBody()
diff --git a/include/dvb.class.php b/include/dvb.class.php
index e3eba7162..fb2f97afd 100644
--- a/include/dvb.class.php
+++ b/include/dvb.class.php
@@ -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';
@@ -1099,7 +1117,7 @@ class dvb extends basis_db
* @param $strasse Strasse der Person (optional).
* @return BPK or false on error.
*/
- private function pruefeBPK($geburtsdatum, $vorname, $nachname, $geschlecht, $plz = null, $strasse = null)
+ public function pruefeBPK($geburtsdatum, $vorname, $nachname, $geschlecht, $plz = null, $strasse = null)
{
if ($this->tokenIsExpired())
{
@@ -1193,6 +1211,18 @@ class dvb extends basis_db
$dom = new DOMDocument();
$dom->loadXML($response);
$namespace = 'http://www.brz.gv.at/datenverbund-unis';
+ $domnodes_fehlernummer = $dom->getElementsByTagNameNS($namespace, 'fehlernummer');
+ if($domnodes_fehlernummer->length > 0)
+ {
+ $fehlercode = $domnodes_fehlernummer->item(0)->textContent;
+ if($fehlercode == 'ZD00001')
+ {
+ // Zu viele Requests pro Minute
+ $this->debug('Zu viele Requests pro Minute -> Pause');
+ sleep(30);
+ }
+ }
+
$domnodes_bpk = $dom->getElementsByTagNameNS($namespace, 'personenkennzeichen');
if($domnodes_bpk->length > 0)
{
@@ -1220,7 +1250,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 +1272,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 +1402,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');
diff --git a/soap/datenverbund_client.php b/soap/datenverbund_client.php
index 91245f1a0..4651c9f46 100644
--- a/soap/datenverbund_client.php
+++ b/soap/datenverbund_client.php
@@ -55,6 +55,7 @@ $matura = filter_input(INPUT_POST, 'matura');
$svnr = filter_input(INPUT_POST, 'svnr');
$ersatzkennzeichen = filter_input(INPUT_POST, 'ersatzkennzeichen');
$person_id = filter_input(INPUT_POST, 'person_id');
+$strasse = filter_input(INPUT_POST, 'strasse');
?>
@@ -78,6 +79,7 @@ $person_id = filter_input(INPUT_POST, 'person_id');
Fehlgeschlagen:'.$dvb->errormsg; break; + case 'pruefeBPK': + $data = $dvb->pruefeBPK($geburtsdatum, $vorname, $nachname, $geschlecht, $postleitzahl, $strasse); + if(ErrorHandler::isSuccess($data)) + { + echo ' OK BPK: '.$data->retval->bpk; + } + else + echo ' Fehlgeschlagen:'.$dvb->errormsg; + break; default: echo "Unknown action"; break; diff --git a/system/checkStudenten.php b/system/checkStudenten.php index 12bad24b8..171cdd690 100644 --- a/system/checkStudenten.php +++ b/system/checkStudenten.php @@ -609,7 +609,7 @@ $text .= " Studierender hat keine Matrikelnummer "; $qry = " SELECT - distinct on (person_id) + distinct on (tbl_person.person_id) tbl_student.student_uid, tbl_prestudent.prestudent_id, tbl_prestudent.studiengang_kz as studiengang @@ -618,7 +618,7 @@ FROM JOIN public.tbl_prestudentstatus USING(prestudent_id) JOIN public.tbl_person USING(person_id) JOIN public.tbl_student USING(prestudent_id) - JOIN public.tbl_benutzer USING(person_id) + JOIN public.tbl_benutzer ON(tbl_student.student_uid=tbl_benutzer.uid) WHERE status_kurzbz in('Student', 'Diplomand', 'Absolvent', 'Abbrecher') AND tbl_prestudent.bismelden diff --git a/system/phrasesupdate.php b/system/phrasesupdate.php index 210149cfa..636832b5a 100644 --- a/system/phrasesupdate.php +++ b/system/phrasesupdate.php @@ -1845,6 +1845,46 @@ $phrases = array( ) ) ), + array( + 'app' => 'core', + 'category' => 'person', + 'phrase' => 'titelpre', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => 'TitelPre', + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => 'TitlePre', + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), + array( + 'app' => 'core', + 'category' => 'person', + 'phrase' => 'titelpost', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => 'TitelPost', + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => 'TitlePost', + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), //**************** CORE/lehre array( diff --git a/vilesci/bis/checkverwendung.php b/vilesci/bis/checkverwendung.php index a843d41c6..faf0e500e 100644 --- a/vilesci/bis/checkverwendung.php +++ b/vilesci/bis/checkverwendung.php @@ -241,6 +241,7 @@ $qryall=' JOIN bis.tbl_bisverwendung ON (uid=mitarbeiter_uid) WHERE aktiv=false + and bismelden=true AND (ende>now() OR ende IS NULL) GROUP BY uid, nachname, vorname ORDER by nachname, vorname;'; diff --git a/vilesci/bis/personal_generateverwendung.php b/vilesci/bis/personal_generateverwendung.php index 17f44537d..6f06140f3 100644 --- a/vilesci/bis/personal_generateverwendung.php +++ b/vilesci/bis/personal_generateverwendung.php @@ -101,7 +101,7 @@ wird das Ende des Semesters letzten Lehrauftrages herangezogen. $qry = "SELECT ma.* FROM ( SELECT - vorname, nachname, uid, personalnummer, insertamum,anmerkung, + vorname, nachname, uid, personalnummer, insertamum, anmerkung, aktiv, ( SELECT studiensemester_kurzbz FROM ( SELECT @@ -198,6 +198,7 @@ if ($result = $db->db_query($qry)) | Nachname | Vorname | UID | +Aktiv | Personalnummer | Anlagedatum | Letzer Lehrauftrag | @@ -216,6 +217,7 @@ if ($result = $db->db_query($qry))'.$db->convert_html_chars($row->nachname).' | '.$db->convert_html_chars($row->vorname).' | '.$db->convert_html_chars($row->uid).' | +'.($db->db_parse_bool($row->aktiv)?'Ja':'Nein').' | '.$db->convert_html_chars($row->personalnummer).' | '.$db->convert_html_chars($datum_obj->formatDatum($row->insertamum,'d.m.Y')).' | '.$db->convert_html_chars($row->letzter_lehrauftrag).' | diff --git a/vilesci/cronjobs/bpk.php b/vilesci/cronjobs/bpk.php index 7fa7c8355..2d26634e3 100644 --- a/vilesci/cronjobs/bpk.php +++ b/vilesci/cronjobs/bpk.php @@ -85,6 +85,7 @@ $qry = " WHERE public.tbl_benutzer.aktiv = true AND tbl_person.matr_nr is not null + AND tbl_person.bpk is null AND studiengang_kz<10000 AND EXISTS(SELECT 1 FROM public.tbl_prestudent WHERE person_id=tbl_person.person_id AND bismelden=true) AND gebdatum is not null"; @@ -93,10 +94,17 @@ if ($limit != '') $qry .= " LIMIT ".$limit; $db = new basis_db(); +$cnt = 0; if ($result = $db->db_query($qry)) { while ($row = $db->db_fetch_object($result)) { + $cnt++; + // Nach jeweils 25 Requests eine Pause einlegen damit die + // Anzahl Requests pro Minute nicht überschritten wird + if($cnt%25 == 0) + sleep(30); + echo $nl."Pruefe $row->person_id $row->vorname $row->nachname"; $data = $webservice->getBPK($row->person_id); if (ErrorHandler::isSuccess($data)) diff --git a/vilesci/stammdaten/personen_wartung.php b/vilesci/stammdaten/personen_wartung.php index 8153707e0..c449341b8 100644 --- a/vilesci/stammdaten/personen_wartung.php +++ b/vilesci/stammdaten/personen_wartung.php @@ -152,7 +152,8 @@ if (isset($personToDelete) && isset($personToKeep) && $personToDelete >= 0 && $p } // Wenn beide Personen eine Matr_nr haben, abbrechen - if (($personToDelete_obj->matr_nr != '' && $personToKeep_obj->matr_nr != '')) + if ($personToDelete_obj->matr_nr != '' && $personToKeep_obj->matr_nr != '' + && $personToDelete_obj->matr_nr != $personToKeep_obj->matr_nr) { $msg_error[] = 'Beide Personen haben eine Matrikelnummer und können nicht zusammengelegt werden.
|---|