diff --git a/include/dvb.class.php b/include/dvb.class.php
index 0131f1e4d..2f163d5e7 100644
--- a/include/dvb.class.php
+++ b/include/dvb.class.php
@@ -1013,6 +1013,134 @@ class dvb extends basis_db
}
}
+ public function setMatrikelnummerErnp($bildungseinrichtung, $person, $reisepass)
+ {
+ $this->debug('ernpMeldung');
+ $uuid = $this->getUUID();
+
+ if ($this->tokenIsExpired())
+ {
+ $result = $this->authenticate();
+ if (ErrorHandler::isError($result))
+ return ErrorHandler::error();
+ }
+
+ $data = '';
+ $data .= '
+ '.$uuid.'';
+
+ $data .= $this->getPersonmeldungXml($bildungseinrichtung, $person);
+
+ $data .= '
+
+ '.$reisepass->ausgabedatum.'
+ '.$reisepass->ausstellBehoerde.'
+ '.$reisepass->ausstellland.'
+ '.$reisepass->dokumentnr.'
+ REISEP
+
+ ';
+ $data .= '';
+
+ $curl = curl_init();
+ $url = self::DVB_URL_WEBSERVICE_MELDUNG;
+
+ curl_setopt($curl, CURLOPT_URL, $url);
+ curl_setopt($curl, CURLOPT_POST, true);
+ curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
+ curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
+ curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
+ curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
+
+ $headers = array(
+ 'Accept: application/xml',
+ 'Content-Type: application/xml',
+ 'Authorization: Bearer '.$this->authentication->access_token,
+ 'User-Agent: FHComplete',
+ 'Connection: Keep-Alive',
+ 'Expect:'
+ );
+ curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
+
+ $this->debug('Request URL:'.$url);
+ $this->debug('Request Data:'.$data);
+ $response = curl_exec($curl);
+ $curl_info = curl_getinfo($curl);
+ curl_close($curl);
+
+ $this->debug('Response: '.$curl_info['http_code']);
+
+ $this->debug('Response: '.print_r($response, true));
+
+ if ($curl_info['http_code'] == '200')
+ {
+ $dom = new DOMDocument();
+ $dom->loadXML($response);
+ $domnodes_fehlerliste = $dom->getElementsByTagName('fehlerliste');
+
+ $fehleranzahl = $domnodes_fehlerliste->item(0)->getAttribute('fehleranzahl');
+ if ($fehleranzahl === '0')
+ {
+ // Keine Fehler -> Meldung erfolgreich
+ $retval = new stdClass();
+ $retval->matrikelnummer = $person->matrikelnummer;
+ return ErrorHandler::success($retval);
+ }
+ else
+ {
+ $this->errormsg = 'Es gab '.$fehleranzahl.' Fehler:';
+ $domnodes_fehler = $dom->getElementsByTagName('fehler');
+ foreach ($domnodes_fehler as $row)
+ {
+ $fehlernummer = $row->getElementsByTagName('fehlernummer');
+
+ /**
+ * Bei Fehlernummer ED10065 wurde die Matrikelnummer korrekt gesetzt.
+ * Das BPK wurde vom Datenverbund versucht zu ermitteln und wird in der Fehlermeldung
+ * zurückgeliefert. Dieses sollte dann gespeichert werden.
+ * Es muss eine erneute Vergabemeldung mit korrigierten Daten vorgenommen werden um die Daten im
+ * DVB zu aktualisieren
+ * Dies gilt nur, wenn ED10065 alleine geliefert wird und keine sonstigen Fehler auftreten
+ */
+ if ($fehlernummer->length == 1 && $fehlernummer->item(0)->textContent == 'ED10065')
+ {
+ $this->debug('ED10065 Response');
+ $domnodes_feldinhalt = $row->getElementsByTagName('feldinhalt');
+ if ($domnodes_feldinhalt->length > 0 && $domnodes_feldinhalt->item(0)->textContent!='')
+ {
+ $bpk = $domnodes_feldinhalt->item(0)->textContent;
+ $retval = new stdClass();
+ $retval->matrikelnummer = $person->matrikelnummer;
+ if ($bpk != 'keine bPK gefunden')
+ $retval->bpk = $bpk;
+
+ $this->errormsg .= 'ED10065 Response';
+ $this->errormsg .= 'Eine Personendatenprüfung ist erforderlich';
+ $this->errormsg .= 'Danach muss eine erneute Vergabemeldung mit dieser Matrikelnummer erfolgen.';
+ $this->debug('BPK:'.$bpk);
+ $this->debug('MatrNr:'.$person->matrikelnummer);
+
+ return ErrorHandler::success($retval);
+ }
+ }
+ else
+ {
+ $datenfeld = $row->getElementsByTagName('datenfeld');
+ $fehlertext = $row->getElementsByTagName('fehlertext');
+ $this->errormsg .= ' Datenfeld:'.$datenfeld->item(0)->textContent;
+ $this->errormsg .= ' Fehlertext:'.$fehlertext->item(0)->textContent;
+ }
+ }
+ return ErrorHandler::error();
+ }
+ }
+ else
+ {
+ $errormsg = 'Request Failed with HTTP Code:'.$curl_info['http_code'].' and Response:'.$response;
+ return ErrorHandler::error($errormsg);
+ }
+ }
+
/**
* Get BPK from Person
* @param string $person_id ID of the Person.
@@ -1737,6 +1865,41 @@ class dvb extends basis_db
$this->debug_output .= "\n".date('Y-m-d H:i:s').': '.$msg;
}
+ private function getPersonmeldungXml($bildungseinrichtung, $person)
+ {
+ $gebdat = str_replace("-", "", $person->geburtsdatum);
+
+ $data = '
+ '.$bildungseinrichtung.'
+ '.$gebdat.'
+ '.$person->geschlecht.'
+ '.$person->matrikelnummer.'';
+ if (isset($person->matura) && $person->matura != '')
+ $data .= ''.$person->matura.'';
+ else
+ $data .= '00000000';
+
+ $data .= ''.$person->nachname.'';
+
+ if (isset($person->plz) && $person->plz != '')
+ $data .= ''.$person->plz.'';
+
+ $data .= ''.$person->staat.'';
+
+ if (isset($person->svnr) && $person->svnr != '')
+ $data .= ''.$person->svnr.'';
+
+ $data .= ''.$person->vorname.'';
+
+ if (isset($person->writeonerror) && $person->writeonerror === true)
+ $data .= 'J';
+
+ $data .= '
+ ';
+
+ return $data;
+ }
+
/**
* Erstellt einen Logeintrag
* @param object $person Personen objekt.
diff --git a/soap/datenverbund_client.php b/soap/datenverbund_client.php
index 36f0fb9e0..954eea2e6 100644
--- a/soap/datenverbund_client.php
+++ b/soap/datenverbund_client.php
@@ -57,6 +57,11 @@ $ersatzkennzeichen = filter_input(INPUT_POST, 'ersatzkennzeichen');
$person_id = filter_input(INPUT_POST, 'person_id');
$strasse = filter_input(INPUT_POST, 'strasse');
+$ausgabedatum = filter_input(INPUT_POST, 'ausgabedatum');
+$ausstellbehoerde = filter_input(INPUT_POST, 'ausstellbehoerde');
+$ausstellland = filter_input(INPUT_POST, 'ausstellland');
+$dokumentnr = filter_input(INPUT_POST, 'dokumentnr');
+
?>
@@ -79,6 +84,7 @@ $strasse = filter_input(INPUT_POST, 'strasse');
Matrikelnummer Reservierungen anzeigen
Matrikelnummer Kontingent anfordern
Matrikelnummer Vergabe melden
+ ERNP-Eintragung anfordern
Gesamtprozess (Abfrage, ggf Vergabemeldung, Speichern bei Person)
BPK ermitteln
BPK ermitteln manuell
@@ -114,6 +120,18 @@ $strasse = filter_input(INPUT_POST, 'strasse');
';
}
+ function printSetMatrikelnrRows()
+ {
+ global $matrikelnr, $nachname, $vorname, $geburtsdatum, $geschlecht, $postleitzahl, $staat, $svnr, $matura;
+ printrow('matrikelnummer', 'Matrikelnummer', $matrikelnr);
+ printrow('nachname', 'Nachname', $nachname, '', 255);
+ printrow('vorname', 'Vorname', $vorname, '', 30);
+ printrow('geburtsdatum', 'Geburtsdatum', $geburtsdatum, 'Format: YYYYMMDD', 10);
+ printrow('geschlecht', 'Geschlecht', $geschlecht, 'Format: M | W', 1);
+ printrow('postleitzahl', 'Postleitzahl', $postleitzahl, '', 10);
+ printrow('staat', 'Staat', $staat, '1-3 Stellen Codex (zb A für Österreich)', 3);
+ }
+
switch($action)
{
case 'getOAuth':
@@ -144,17 +162,32 @@ $strasse = filter_input(INPUT_POST, 'strasse');
break;
case 'setMatrikelnummer':
- printrow('matrikelnummer', 'Matrikelnummer', $matrikelnr);
- printrow('nachname', 'Nachname', $nachname, '', 255);
- printrow('vorname', 'Vorname', $vorname, '', 30);
- printrow('geburtsdatum', 'Geburtsdatum', $geburtsdatum, 'Format: YYYYMMDD', 10);
- printrow('geschlecht', 'Geschlecht', $geschlecht, 'Format: M | W', 1);
- printrow('postleitzahl', 'Postleitzahl', $postleitzahl, '', 10);
- printrow('staat', 'Staat', $staat, '1-3 Stellen Codex (zb A für Österreich)', 3);
+ printSetMatrikelnrRows();
printrow('svnr', 'SVNR', $svnr);
printrow('matura', 'Maturadatum', $matura, 'Format: YYYYMMDD (optional)', 10);
break;
+ case 'setMatrikelnummerErnp':
+ echo '
+
+ | Personmeldung |
+
';
+
+ printSetMatrikelnrRows();
+ printrow('svnr', 'Ersatzkennzeichen', $svnr);
+ printrow('matura', 'Maturadatum', $matura, 'Format: YYYYMMDD (optional)', 10);
+
+ echo '
+
+ | Ernpmeldung |
+
';
+
+ printrow('dokumentnr', 'Dokumentnummer', $dokumentnr, '', 60);
+ printrow('ausgabedatum', 'Ausgabedatum', $ausgabedatum, 'Format: YYYYMMDD', 10);
+ printrow('ausstellbehoerde', 'Ausstellbehörde', $ausstellbehoerde, '', 40);
+ printrow('ausstellland', 'Ausstellland', $ausstellland, '1-3 Stellen Codex (zb D für Deutschland)', 60);
+ break;
+
case 'assignMatrikelnummer':
printrow('person_id', 'PersonID', $person_id);
break;
@@ -337,6 +370,32 @@ if (isset($_REQUEST['submit']))
echo '
Fehlgeschlagen:'.$result->errormsg;
break;
+ case 'setMatrikelnummerErnp':
+ $person = new stdClass();
+ $person->matrikelnummer = $matrikelnr;
+ $person->vorname = $vorname;
+ $person->nachname = $nachname;
+ $person->geburtsdatum = $geburtsdatum;
+ $person->geschlecht = $geschlecht;
+ $person->staat = $staat;
+ $person->plz = $postleitzahl;
+ $person->matura = $matura; // Optional
+ $person->svnr = $svnr; // Optional
+
+ $reisepass = new stdClass();
+ $reisepass->ausgabedatum = $ausgabedatum;
+ $reisepass->ausstellBehoerde = $ausstellbehoerde;
+ $reisepass->ausstellland = $ausstellland;
+ $reisepass->dokumentnr = $dokumentnr;
+
+ $result = $dvb->setMatrikelnummerErnp(DVB_BILDUNGSEINRICHTUNG_CODE, $person, $reisepass);
+
+ if (ErrorHandler::isSuccess($result))
+ echo '
Erfolgreich gemeldet';
+ else
+ echo '
Fehlgeschlagen:'.$result->errormsg;
+ break;
+
case 'assignMatrikelnummer':
$result = $dvb->assignMatrikelnummer($person_id);
if(ErrorHandler::isSuccess($result))