From c9471c344d146b4cb07969e6267409f58006e7a2 Mon Sep 17 00:00:00 2001 From: Johann Hoffmann Date: Wed, 31 Jul 2024 14:37:26 +0200 Subject: [PATCH 01/23] added unruly person boolean column to tbl_person; studStatus/leitung added a checkbox to mark persons as unruly unrelated to studstatus datastate; --- .../api/frontend/v1/studstatus/Abmeldung.php | 5 +- .../frontend/v1/unrulyperson/UnrulyPerson.php | 51 ++++++++++++ .../controllers/lehre/Studierendenantrag.php | 8 +- .../system/infocenter/InfoCenter.php | 10 ++- application/libraries/AntragLib.php | 22 ++--- .../models/crm/Prestudentstatus_model.php | 3 +- .../education/Studierendenantrag_model.php | 16 +++- application/models/person/Person_model.php | 26 +++++- application/views/lehre/Antrag/Create.php | 3 +- .../system/infocenter/infocenterDetails.php | 19 ++++- public/js/api/fhcapifactory.js | 6 +- public/js/api/unrulyperson.js | 13 +++ .../components/Studierendenantrag/Antrag.js | 6 +- .../Studierendenantrag/Form/AbmeldungStgl.js | 21 ++++- .../Studierendenantrag/Leitung/Table.js | 5 +- system/dbupdate_3.4.php | 5 +- .../40896_kennzeichnung_unruly_person.php | 17 ++++ system/phrasesupdate.php | 82 ++++++++++++++++++- 18 files changed, 283 insertions(+), 35 deletions(-) create mode 100644 application/controllers/api/frontend/v1/unrulyperson/UnrulyPerson.php create mode 100644 public/js/api/unrulyperson.js create mode 100644 system/dbupdate_3.4/40896_kennzeichnung_unruly_person.php diff --git a/application/controllers/api/frontend/v1/studstatus/Abmeldung.php b/application/controllers/api/frontend/v1/studstatus/Abmeldung.php index 875b6484c..87fec9918 100644 --- a/application/controllers/api/frontend/v1/studstatus/Abmeldung.php +++ b/application/controllers/api/frontend/v1/studstatus/Abmeldung.php @@ -136,6 +136,7 @@ class Abmeldung extends FHCAPI_Controller $grund = $this->input->post('grund'); $studiensemester = $this->input->post('studiensemester'); $prestudent_id = $this->input->post('prestudent_id'); + $unruly = $this->input->post('unruly'); $result = $this->antraglib->getPrestudentAbmeldeBerechtigt($prestudent_id); $result = $this->getDataOrTerminateWithError($result); @@ -146,7 +147,7 @@ class Abmeldung extends FHCAPI_Controller elseif ($result < 0) $this->terminateWithError($this->p->t('studierendenantrag', 'error_antrag_exists'), self::ERROR_TYPE_GENERAL); - $result = $this->antraglib->createAbmeldung($prestudent_id, $studiensemester, getAuthUID(), $grund); + $result = $this->antraglib->createAbmeldung($prestudent_id, $studiensemester, getAuthUID(), $grund, $unruly); $data = $this->getDataOrTerminateWithError($result); $result = $this->antraglib->getDetailsForAntrag($data); @@ -184,4 +185,4 @@ class Abmeldung extends FHCAPI_Controller $this->terminateWithSuccess($data); } -} +} \ No newline at end of file diff --git a/application/controllers/api/frontend/v1/unrulyperson/UnrulyPerson.php b/application/controllers/api/frontend/v1/unrulyperson/UnrulyPerson.php new file mode 100644 index 000000000..a1673739a --- /dev/null +++ b/application/controllers/api/frontend/v1/unrulyperson/UnrulyPerson.php @@ -0,0 +1,51 @@ +. + */ + +if (! defined('BASEPATH')) exit('No direct script access allowed'); + +class UnrulyPerson extends FHCAPI_Controller +{ + + // TODO: BERECHTIGUNGEN + public function __construct() + { + parent::__construct([ + 'updatePersonUnrulyStatus' => 'basis/mitarbeiter:rw' + ]); + + $this->_ci =& get_instance(); + $this->_ci->load->model('person/Person_model', 'PersonModel'); + } + + public function updatePersonUnrulyStatus() + { + $data = json_decode($this->input->raw_input_stream, true); + + $person_id = $data['person_id']; + $unruly = $data['unruly']; + + $result = $this->_ci->PersonModel->updateUnruly($person_id, $unruly); + + if(isError($result)) { + $this->terminateWithError($result); + } else if (isSuccess($result)) { + $this->terminateWithSuccess($result); + } + + } +} \ No newline at end of file diff --git a/application/controllers/lehre/Studierendenantrag.php b/application/controllers/lehre/Studierendenantrag.php index d6d6b2c50..3baf30355 100644 --- a/application/controllers/lehre/Studierendenantrag.php +++ b/application/controllers/lehre/Studierendenantrag.php @@ -21,6 +21,7 @@ class Studierendenantrag extends FHC_Controller // Load Models $this->load->model('education/Studierendenantrag_model', 'StudierendenantragModel'); + $this->load->model('person/Person_model', 'PersonModel'); // Load language phrases $this->loadPhrases([ @@ -102,10 +103,13 @@ class Studierendenantrag extends FHC_Controller public function abmeldungstgl($prestudent_id, $studierendenantrag_id = null) { + $unruly = getData($this->PersonModel->loadPrestudent($prestudent_id))[0]->unruly; + $this->load->view('lehre/Antrag/Create', [ 'prestudent_id' => $prestudent_id, 'studierendenantrag_id' => $studierendenantrag_id, - 'antrag_type' => 'AbmeldungStgl' + 'antrag_type' => 'AbmeldungStgl', + 'unruly' => $unruly ]); } @@ -185,4 +189,4 @@ class Studierendenantrag extends FHC_Controller return $strRequiredPermissions; } -} +} \ No newline at end of file diff --git a/application/controllers/system/infocenter/InfoCenter.php b/application/controllers/system/infocenter/InfoCenter.php index cf0c6755a..d5cb50a00 100644 --- a/application/controllers/system/infocenter/InfoCenter.php +++ b/application/controllers/system/infocenter/InfoCenter.php @@ -337,10 +337,13 @@ class InfoCenter extends Auth_Controller $persondata = $this->_loadPersonData($person_id); $checkPerson = $this->PersonModel->checkDuplicate($person_id); - if (isError($checkPerson)) show_error(getError($checkPerson)); + $checkUnruly = $this->PersonModel->checkUnruly($persondata['stammdaten']->vorname, $persondata['stammdaten']->nachname, $persondata['stammdaten']->gebdatum); + if (isError($checkUnruly)) show_error(getError($checkUnruly)); + $duplicate = array('duplicated' => getData($checkPerson)); + $unruly = array('unruly' => getData($checkUnruly)); $prestudentdata = $this->_loadPrestudentData($person_id); @@ -351,7 +354,8 @@ class InfoCenter extends Auth_Controller $persondata, $prestudentdata, $dokumentdata, - $duplicate + $duplicate, + $unruly ); $data[self::FHC_CONTROLLER_ID] = $this->getControllerId(); @@ -2383,4 +2387,4 @@ class InfoCenter extends Auth_Controller $this->outputJsonSuccess("Success"); } -} +} \ No newline at end of file diff --git a/application/libraries/AntragLib.php b/application/libraries/AntragLib.php index ce4485279..41b6e4ced 100644 --- a/application/libraries/AntragLib.php +++ b/application/libraries/AntragLib.php @@ -911,7 +911,7 @@ class AntragLib public function createWiederholung($prestudent_id, $studiensemester_kurzbz, $insertvon, $repeat) { $result = $this->_ci->StudierendenantragModel->loadIdAndStatusWhere([ - 'prestudent_id' => $prestudent_id, + 'tbl_studierendenantrag.prestudent_id' => $prestudent_id, 'studiensemester_kurzbz'=> $studiensemester_kurzbz, 'typ' => Studierendenantrag_model::TYP_WIEDERHOLUNG ]); @@ -1341,7 +1341,7 @@ class AntragLib if (!in_array($result->status_kurzbz, $this->_ci->config->item('antrag_prestudentstatus_whitelist_abmeldung'))) { $result = $this->_ci->StudierendenantragModel->loadWithStatusWhere([ - 'prestudent_id' => $prestudent_id, + 'tbl_studierendenantrag.prestudent_id' => $prestudent_id, 's.studierendenantrag_statustyp_kurzbz' => Studierendenantragstatus_model::STATUS_APPROVED ], [ Studierendenantrag_model::TYP_ABMELDUNG, @@ -1353,7 +1353,7 @@ class AntragLib return success(-1); $result = $this->_ci->StudierendenantragModel->loadWithStatusWhere([ - 'prestudent_id' => $prestudent_id, + 'tbl_studierendenantrag.prestudent_id' => $prestudent_id, 's.studierendenantrag_statustyp_kurzbz' => Studierendenantragstatus_model::STATUS_PAUSE ], [ Studierendenantrag_model::TYP_ABMELDUNG, @@ -1367,7 +1367,7 @@ class AntragLib return success(0); } - $result = $this->_ci->StudierendenantragModel->loadWithStatusWhere(['prestudent_id' => $prestudent_id]); + $result = $this->_ci->StudierendenantragModel->loadWithStatusWhere(['tbl_studierendenantrag.prestudent_id' => $prestudent_id]); if (isError($result)) return $result; if (!hasData($result)) @@ -1428,7 +1428,7 @@ class AntragLib && $result->status_kurzbz != 'Unterbrecher') { return success(0); } - $result = $this->_ci->StudierendenantragModel->loadWithStatusWhere(['prestudent_id' => $prestudent_id]); + $result = $this->_ci->StudierendenantragModel->loadWithStatusWhere(['tbl_studierendenantrag.prestudent_id' => $prestudent_id]); if (isError($result)) return $result; if (!hasData($result)) @@ -1510,7 +1510,7 @@ class AntragLib $datumStatus = $result->datum; if (!in_array($result->status_kurzbz, $this->_ci->config->item('antrag_prestudentstatus_whitelist'))) { $result = $this->_ci->StudierendenantragModel->loadWithStatusWhere([ - 'prestudent_id' => $prestudent_id, + 'tbl_studierendenantrag.prestudent_id' => $prestudent_id, 'typ' => Studierendenantrag_model::TYP_WIEDERHOLUNG, 's.studierendenantrag_statustyp_kurzbz' => Studierendenantragstatus_model::STATUS_APPROVED ]); @@ -1520,7 +1520,7 @@ class AntragLib return success(-1); $result = $this->_ci->StudierendenantragModel->loadWithStatusWhere([ - 'prestudent_id' => $prestudent_id, + 'tbl_studierendenantrag.prestudent_id' => $prestudent_id, 'typ' => Studierendenantrag_model::TYP_WIEDERHOLUNG, 's.studierendenantrag_statustyp_kurzbz' => Studierendenantragstatus_model::STATUS_DEREGISTERED ]); @@ -1530,7 +1530,7 @@ class AntragLib return success(-1); $result = $this->_ci->StudierendenantragModel->loadWithStatusWhere([ - 'prestudent_id' => $prestudent_id, + 'tbl_studierendenantrag.prestudent_id' => $prestudent_id, 'typ' => Studierendenantrag_model::TYP_WIEDERHOLUNG, 's.studierendenantrag_statustyp_kurzbz' => Studierendenantragstatus_model::STATUS_PAUSE ]); @@ -1541,7 +1541,7 @@ class AntragLib return success(0); } - $result = $this->_ci->StudierendenantragModel->loadWithStatusWhere(['prestudent_id' => $prestudent_id]); + $result = $this->_ci->StudierendenantragModel->loadWithStatusWhere(['tbl_studierendenantrag.prestudent_id' => $prestudent_id]); if (isError($result)) return $result; if (!hasData($result)) @@ -1594,7 +1594,7 @@ class AntragLib public function getDetailsForLastAntrag($prestudent_id, $typ = null) { $where = [ - 'prestudent_id' => $prestudent_id + 'tbl_studierendenantrag.prestudent_id' => $prestudent_id ]; $types = null; if ($typ) { @@ -2180,4 +2180,4 @@ class AntragLib $result = $this->_ci->StudierendenantraglehrveranstaltungModel->getLvsForPrestudent($prestudent_id, $studiensemester_kurzbz); return $result; } -} +} \ No newline at end of file diff --git a/application/models/crm/Prestudentstatus_model.php b/application/models/crm/Prestudentstatus_model.php index b3dc45321..f5435a1df 100644 --- a/application/models/crm/Prestudentstatus_model.php +++ b/application/models/crm/Prestudentstatus_model.php @@ -280,6 +280,7 @@ class Prestudentstatus_model extends DB_Model $this->addSelect('ss.studienjahr_kurzbz'); $this->addSelect('pers.vorname'); $this->addSelect('pers.nachname'); + $this->addSelect('pers.unruly'); $this->addSelect('TRIM(CONCAT(pers.vorname, \' \', pers.nachname)) AS name'); $this->addSelect('pers.person_id'); $this->addSelect('g.studiengang_kz'); @@ -339,4 +340,4 @@ class Prestudentstatus_model extends DB_Model return $this; } -} +} \ No newline at end of file diff --git a/application/models/education/Studierendenantrag_model.php b/application/models/education/Studierendenantrag_model.php index e138d1a1c..e86ef6be0 100644 --- a/application/models/education/Studierendenantrag_model.php +++ b/application/models/education/Studierendenantrag_model.php @@ -38,6 +38,7 @@ class Studierendenantrag_model extends DB_Model $this->addSelect('studienjahr_kurzbz'); $this->addSelect('vorname'); $this->addSelect('nachname'); + $this->addSelect('unruly'); $this->addSelect('p.prestudent_id'); $this->addSelect('p.studiengang_kz'); $this->addSelect('semester'); @@ -148,6 +149,7 @@ class Studierendenantrag_model extends DB_Model $this->addSelect('s.studierendenantrag_statustyp_kurzbz status'); $this->addSelect('s.insertvon status_insertvon'); $this->addSelect('t.bezeichnung[(' . $lang . ')] statustyp'); + $this->addSelect('p.unruly AS unruly'); $this->addJoin( 'campus.tbl_studierendenantrag_status s', @@ -157,6 +159,18 @@ class Studierendenantrag_model extends DB_Model 'campus.tbl_studierendenantrag_statustyp t', 's.studierendenantrag_statustyp_kurzbz=t.studierendenantrag_statustyp_kurzbz' ); + $this->addJoin( + 'public.tbl_student st', + 'st.prestudent_id=tbl_studierendenantrag.prestudent_id' + ); + $this->addJoin( + 'public.tbl_benutzer b', + 'st.student_uid=b.uid' + ); + $this->addJoin( + 'public.tbl_person p', + 'b.person_id=p.person_id' + ); if ($types && is_array($types)) { $this->db->where_in('typ', $types); @@ -471,4 +485,4 @@ class Studierendenantrag_model extends DB_Model return hasData($this->load()); } -} +} \ No newline at end of file diff --git a/application/models/person/Person_model.php b/application/models/person/Person_model.php index 88813220e..c3a6c34f1 100644 --- a/application/models/person/Person_model.php +++ b/application/models/person/Person_model.php @@ -374,5 +374,29 @@ class Person_model extends DB_Model 'prestudent_id' => $prestudent_id ]); } -} + public function checkUnruly($vorname, $nachname, $gebdatum) + { + $qry = "SELECT * + FROM tbl_person + WHERE tbl_person.vorname = ? + AND tbl_person.nachname = ? + AND tbl_person.gebdatum = ? + AND tbl_person.unruly = TRUE;"; + + return $this->execQuery($qry, [$vorname, $nachname, $gebdatum]); + } + + public function updateUnruly($person_id, $unruly) + { + $result = $this->update($person_id, array( + 'unruly' => $unruly + )); + + if (isError($result)) { + return error($result->msg, EXIT_ERROR); + } else if (isSuccess($result) && hasData($result)) { + return success($result); + } + } +} \ No newline at end of file diff --git a/application/views/lehre/Antrag/Create.php b/application/views/lehre/Antrag/Create.php index 91b20c9b7..f4a7d1c3c 100644 --- a/application/views/lehre/Antrag/Create.php +++ b/application/views/lehre/Antrag/Create.php @@ -35,6 +35,7 @@ $this->load->view( :prestudent-id="" antrag-type="" :studierendenantrag-id="" + :unruly="" v-model:info-array="infoArray" v-model:status-msg="status.msg" v-model:status-severity="status.severity" @@ -52,4 +53,4 @@ $this->load->view( $this->load->view( 'templates/FHC-Footer', $sitesettings -); +); \ No newline at end of file diff --git a/application/views/system/infocenter/infocenterDetails.php b/application/views/system/infocenter/infocenterDetails.php index a8e6e3e13..53fbda8b5 100644 --- a/application/views/system/infocenter/infocenterDetails.php +++ b/application/views/system/infocenter/infocenterDetails.php @@ -74,6 +74,22 @@ + +
+

+ p->t('infocenter', 'unrulyPersonFound') . ':'; ?> +

+
+ person_id . '
'; + } + ?> +
+ +
+

@@ -201,5 +217,4 @@

-load->view('templates/FHC-Footer', $includesArray); ?> - +load->view('templates/FHC-Footer', $includesArray); ?> \ No newline at end of file diff --git a/public/js/api/fhcapifactory.js b/public/js/api/fhcapifactory.js index f496cd491..1448be1dd 100644 --- a/public/js/api/fhcapifactory.js +++ b/public/js/api/fhcapifactory.js @@ -21,6 +21,7 @@ import navigation from "./navigation.js"; import filter from "./filter.js"; import studstatus from "./studstatus.js"; import betriebsmittel from "./betriebsmittel.js"; +import unrulyperson from "./unrulyperson.js"; export default { search, @@ -28,5 +29,6 @@ export default { navigation, filter, studstatus, - betriebsmittel -}; + betriebsmittel, + unrulyperson +}; \ No newline at end of file diff --git a/public/js/api/unrulyperson.js b/public/js/api/unrulyperson.js new file mode 100644 index 000000000..361aecd43 --- /dev/null +++ b/public/js/api/unrulyperson.js @@ -0,0 +1,13 @@ +export default { + updatePersonUnrulyStatus(person_id, unrulyParam) { + + try { + const payload = {person_id, unruly: unrulyParam} + const url = '/api/frontend/v1/unrulyperson/UnrulyPerson/updatePersonUnrulyStatus'; + return this.$fhcApi.post(url, payload, null); + } catch (error) { + throw error; + } + + } +} \ No newline at end of file diff --git a/public/js/components/Studierendenantrag/Antrag.js b/public/js/components/Studierendenantrag/Antrag.js index 197fe2206..37de9314d 100644 --- a/public/js/components/Studierendenantrag/Antrag.js +++ b/public/js/components/Studierendenantrag/Antrag.js @@ -21,7 +21,8 @@ export default { studierendenantragId: Number, infoArray: Array, statusMsg: String, - statusSeverity: String + statusSeverity: String, + unruly: Boolean }, data() { return { @@ -49,10 +50,11 @@ export default { v-model:status="status" :prestudent-id="prestudentId" :studierendenantrag-id="studierendenantragId" + :unruly="unruly" @setInfos="$emit('update:infoArray', $event)" @setStatus="$emit('update:statusMsg', $event.msg);$emit('update:statusSeverity', $event.severity)" > ` -} +} \ No newline at end of file diff --git a/public/js/components/Studierendenantrag/Form/AbmeldungStgl.js b/public/js/components/Studierendenantrag/Form/AbmeldungStgl.js index 004f6f4d0..f7daa8d23 100644 --- a/public/js/components/Studierendenantrag/Form/AbmeldungStgl.js +++ b/public/js/components/Studierendenantrag/Form/AbmeldungStgl.js @@ -18,7 +18,8 @@ export default { ], props: { prestudentId: Number, - studierendenantragId: Number + studierendenantragId: Number, + unruly: Boolean }, data() { return { @@ -26,7 +27,8 @@ export default { saving: false, formData: { grund: '' - } + }, + unrulyInternal: this.unruly } }, computed: { @@ -107,6 +109,14 @@ export default { ? this.$p.t('studierendenantrag', event.target.value) : ''; }, + saveUnrulyPerson(event) { + this.$fhcApi.factory.unrulyperson.updatePersonUnrulyStatus(this.data.person_id, this.unrulyInternal).then( + (res)=> { + if(res?.meta?.status === "success") { + this.$fhcAlert.alertSuccess(this.$p.t('studierendenantrag', 'antrag_unruly_updated')) + } + }) + } }, created() { this.uuid = _uuid++; @@ -187,6 +197,11 @@ export default { +
+ + +
+
` -} +} \ No newline at end of file diff --git a/public/js/components/Studierendenantrag/Leitung/Table.js b/public/js/components/Studierendenantrag/Leitung/Table.js index 778f91c00..0f8b22540 100644 --- a/public/js/components/Studierendenantrag/Leitung/Table.js +++ b/public/js/components/Studierendenantrag/Leitung/Table.js @@ -230,6 +230,9 @@ export default { return val ? link : ' '; } + }, { + field: 'unruly', + title: this.$p.t('studierendenantrag', 'antrag_unruly') }, { field: 'dms_id', title: this.$p.t('studierendenantrag', 'antrag_dateianhaenge'), @@ -485,4 +488,4 @@ export default { ` -} +} \ No newline at end of file diff --git a/system/dbupdate_3.4.php b/system/dbupdate_3.4.php index 9fb7f0ee9..7406ff92a 100644 --- a/system/dbupdate_3.4.php +++ b/system/dbupdate_3.4.php @@ -56,6 +56,7 @@ require_once('dbupdate_3.4/36530_bis_internationsalisierung_codextabelle_neuerun require_once('dbupdate_3.4/34543_ux_template.php'); require_once('dbupdate_3.4/17513_Entwicklungsteam.php'); require_once('dbupdate_3.4/28575_softwarebereitstellung.php'); +require_once('dbupdate_3.4/40896_kennzeichnung_unruly_person.php'); // *** Pruefung und hinzufuegen der neuen Attribute und Tabellen echo '

Pruefe Tabellen und Attribute!

'; @@ -299,7 +300,7 @@ $tabellen=array( "public.tbl_ortraumtyp" => array("ort_kurzbz","hierarchie","raumtyp_kurzbz"), "public.tbl_organisationseinheit" => array("oe_kurzbz", "oe_parent_kurzbz", "bezeichnung","organisationseinheittyp_kurzbz", "aktiv","mailverteiler","freigabegrenze","kurzzeichen","lehre","standort","warn_semesterstunden_frei","warn_semesterstunden_fix","standort_id"), "public.tbl_organisationseinheittyp" => array("organisationseinheittyp_kurzbz", "bezeichnung", "beschreibung"), - "public.tbl_person" => array("person_id","staatsbuergerschaft","geburtsnation","sprache","anrede","titelpost","titelpre","nachname","vorname","vornamen","gebdatum","gebort","gebzeit","foto","anmerkung","homepage","svnr","ersatzkennzeichen","familienstand","geschlecht","anzahlkinder","aktiv","insertamum","insertvon","updateamum","updatevon","ext_id","bundesland_code","kompetenzen","kurzbeschreibung","zugangscode", "foto_sperre","matr_nr","zugangscode_timestamp","udf_values","bpk","matr_aktiv","wahlname"), + "public.tbl_person" => array("person_id","staatsbuergerschaft","geburtsnation","sprache","anrede","titelpost","titelpre","nachname","vorname","vornamen","gebdatum","gebort","gebzeit","foto","anmerkung","homepage","svnr","ersatzkennzeichen","familienstand","geschlecht","anzahlkinder","aktiv","insertamum","insertvon","updateamum","updatevon","ext_id","bundesland_code","kompetenzen","kurzbeschreibung","zugangscode", "foto_sperre","matr_nr","zugangscode_timestamp","udf_values","bpk","matr_aktiv","wahlname","unruly"), "public.tbl_person_fotostatus" => array("person_fotostatus_id","person_id","fotostatus_kurzbz","datum","insertamum","insertvon","updateamum","updatevon"), "public.tbl_personfunktionstandort" => array("personfunktionstandort_id","funktion_kurzbz","person_id","standort_id","position","anrede"), "public.tbl_preincoming" => array("preincoming_id","person_id","mobilitaetsprogramm_code","zweck_code","firma_id","universitaet","aktiv","bachelorthesis","masterthesis","von","bis","uebernommen","insertamum","insertvon","updateamum","updatevon","anmerkung","zgv","zgv_ort","zgv_datum","zgv_name","zgvmaster","zgvmaster_datum","zgvmaster_ort","zgvmaster_name","program_name","bachelor","master","jahre","person_id_emergency","person_id_coordinator_dep","person_id_coordinator_int","code","deutschkurs1","deutschkurs2","research_area","deutschkurs3","ext_id"), @@ -475,4 +476,4 @@ if (!$result=@$db->db_query($sql_query)) } if($error==false) echo '
Gegenpruefung fehlerfrei'; -?> +?> \ No newline at end of file diff --git a/system/dbupdate_3.4/40896_kennzeichnung_unruly_person.php b/system/dbupdate_3.4/40896_kennzeichnung_unruly_person.php new file mode 100644 index 000000000..32c01502c --- /dev/null +++ b/system/dbupdate_3.4/40896_kennzeichnung_unruly_person.php @@ -0,0 +1,17 @@ +db_query("SELECT 1 FROM information_schema.columns WHERE table_schema = 'public' + AND table_name = 'tbl_person' AND column_name = 'unruly'")) +{ + if($db->db_num_rows($result) === 0) + { + $qry = "ALTER TABLE tbl_person ADD COLUMN unruly BOOLEAN NOT NULL DEFAULT FALSE"; + + if(!$db->db_query($qry)) + echo 'Public Tabelle person: '.$db->db_last_error().'
'; + else + echo '
spalte unruly hinzugefuegt'; + } +} \ No newline at end of file diff --git a/system/phrasesupdate.php b/system/phrasesupdate.php index ad2b6aa57..d4a3777b1 100644 --- a/system/phrasesupdate.php +++ b/system/phrasesupdate.php @@ -4920,6 +4920,26 @@ The invoice will be sent to you again. The amount is only to be trans ) ) ), + array( + 'app' => 'infocenter', + 'category' => 'infocenter', + 'phrase' => 'unrulyPersonFound', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => 'Unerwünschte Person wurde gefunden', + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => 'Unruly Person detected', + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), array( 'app' => 'core', 'category' => 'password', @@ -20389,6 +20409,46 @@ array( ) ) ), + array( + 'app' => 'core', + 'category' => 'studierendenantrag', + 'phrase' => 'antrag_unruly', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => 'Unerwünscht', + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => 'Unruly', + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), + array( + 'app' => 'core', + 'category' => 'studierendenantrag', + 'phrase' => 'antrag_unruly_updated', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => 'Unerwünschte Person Status wurde aktualisiert.', + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => 'Unruly person status has been updated.', + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), array( 'app' => 'core', 'category' => 'studierendenantrag', @@ -22910,6 +22970,26 @@ array( ) ) ), + array( + 'app' => 'core', + 'category' => 'studierendenantrag', + 'phrase' => 'mark_person_as_unruly', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => 'Person ist unerwünscht', + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => 'Person is unruly.', + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), array( 'app' => 'core', 'category' => 'ui', @@ -27065,4 +27145,4 @@ foreach ($phrases as $phrase) } if(!$new) - echo 'Keine neuen Phrasen
'; + echo 'Keine neuen Phrasen
'; \ No newline at end of file From d03678e3dc4d864a6743d0462d9051936b49b09d Mon Sep 17 00:00:00 2001 From: Johann Hoffmann Date: Tue, 27 Aug 2024 15:30:17 +0200 Subject: [PATCH 02/23] WIP --- .../Studierendenantrag/Leitung/Table.js | 3 --- system/phrasesupdate.php | 20 +++++++++++++++++++ 2 files changed, 20 insertions(+), 3 deletions(-) diff --git a/public/js/components/Studierendenantrag/Leitung/Table.js b/public/js/components/Studierendenantrag/Leitung/Table.js index 0f8b22540..8201462b4 100644 --- a/public/js/components/Studierendenantrag/Leitung/Table.js +++ b/public/js/components/Studierendenantrag/Leitung/Table.js @@ -230,9 +230,6 @@ export default { return val ? link : ' '; } - }, { - field: 'unruly', - title: this.$p.t('studierendenantrag', 'antrag_unruly') }, { field: 'dms_id', title: this.$p.t('studierendenantrag', 'antrag_dateianhaenge'), diff --git a/system/phrasesupdate.php b/system/phrasesupdate.php index d4a3777b1..dce318771 100644 --- a/system/phrasesupdate.php +++ b/system/phrasesupdate.php @@ -2281,6 +2281,26 @@ $phrases = array( ) ) ), + array( + 'app' => 'core', + 'category' => 'person', + 'phrase' => 'unruly', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => 'Unerwünscht', + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => 'Unruly', + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), //**************** CORE/lehre array( From 888e3878bdb714188902449a4bd14f20c479d005 Mon Sep 17 00:00:00 2001 From: Johann Hoffmann Date: Mon, 9 Sep 2024 17:16:05 +0200 Subject: [PATCH 03/23] studstatus unruly als grund --- .../components/Studierendenantrag/Antrag.js | 3 +++ .../Studierendenantrag/Form/Abmeldung.js | 16 ++++++++++++++- .../Studierendenantrag/Form/AbmeldungStgl.js | 15 ++------------ system/phrasesupdate.php | 20 +++++++++++++++++++ 4 files changed, 40 insertions(+), 14 deletions(-) diff --git a/public/js/components/Studierendenantrag/Antrag.js b/public/js/components/Studierendenantrag/Antrag.js index 37de9314d..29ed40592 100644 --- a/public/js/components/Studierendenantrag/Antrag.js +++ b/public/js/components/Studierendenantrag/Antrag.js @@ -37,6 +37,9 @@ export default { return this.$p.t('studierendenantrag/info_' + this.antragType + '_' + this.status); } }, + mounted() { + console.log(this) + }, template: `
diff --git a/public/js/components/Studierendenantrag/Form/Abmeldung.js b/public/js/components/Studierendenantrag/Form/Abmeldung.js index 1660957c5..ab75c7a53 100644 --- a/public/js/components/Studierendenantrag/Form/Abmeldung.js +++ b/public/js/components/Studierendenantrag/Form/Abmeldung.js @@ -77,6 +77,17 @@ export default { this.formData.grund ) .then(result => { + console.log(this.formData.grund) + // TODO: replace this with actual identifier after demo porpuses + if(this.formData.grund === '<< PHRASE textLong_unruly>>') { + this.$fhcApi.factory.unrulyperson.updatePersonUnrulyStatus(this.data.person_id, true).then( + (res)=> { + if(res?.meta?.status === "success") { + this.$fhcAlert.alertSuccess(this.$p.t('studierendenantrag', 'antrag_unruly_updated')) + } + }) + } + if (result.data === true) document.location += ""; @@ -144,6 +155,9 @@ export default { created() { this.uuid = _uuid++; }, + mounted() { + console.log(this) + }, template: `
@@ -259,4 +273,4 @@ export default {
` -} +} \ No newline at end of file diff --git a/public/js/components/Studierendenantrag/Form/AbmeldungStgl.js b/public/js/components/Studierendenantrag/Form/AbmeldungStgl.js index f7daa8d23..16cf187b4 100644 --- a/public/js/components/Studierendenantrag/Form/AbmeldungStgl.js +++ b/public/js/components/Studierendenantrag/Form/AbmeldungStgl.js @@ -108,14 +108,6 @@ export default { this.formData.grund = event.target.value ? this.$p.t('studierendenantrag', event.target.value) : ''; - }, - saveUnrulyPerson(event) { - this.$fhcApi.factory.unrulyperson.updatePersonUnrulyStatus(this.data.person_id, this.unrulyInternal).then( - (res)=> { - if(res?.meta?.status === "success") { - this.$fhcAlert.alertSuccess(this.$p.t('studierendenantrag', 'antrag_unruly_updated')) - } - }) } }, created() { @@ -182,6 +174,8 @@ export default { +
@@ -197,11 +191,6 @@ export default {
-
- - -
-
'; } - + if($rechte->isBerechtigt('lehre/reihungstest', $stg_rechtecheck->oe_kurzbz, 'suid')) { $anzahl_teilnehmer = new reihungstest(); @@ -2701,9 +2703,9 @@ if($reihungstest_id!='') SELECT studiensemester_kurzbz FROM PUBLIC.tbl_studiensemester WHERE studiensemester_kurzbz = rt.studiensemester_kurzbz - + UNION - + ( SELECT studiensemester_kurzbz FROM PUBLIC.tbl_studiensemester @@ -2714,9 +2716,9 @@ if($reihungstest_id!='') ) ORDER BY ende DESC LIMIT 1 ) - + UNION - + ( SELECT studiensemester_kurzbz FROM PUBLIC.tbl_studiensemester @@ -3152,7 +3154,7 @@ if($reihungstest_id!='') echo '
'; } } -} +} /** * Liefert die interne Empfangsadresse des Studiengangs fuer den Mailversand. @@ -3168,18 +3170,18 @@ if($reihungstest_id!='') function getMailEmpfaenger($studiengang_kz, $studienplan_id = null, $orgform_kurzbz = null) { $studiengang = new studiengang($studiengang_kz); - + if ($studienplan_id != '') { $studienplan = new studienplan(); $studienplan->loadStudienplan($studienplan_id); } - + $empf_array = array(); $empfaenger = ''; if(defined('BEWERBERTOOL_BEWERBUNG_EMPFAENGER')) $empf_array = unserialize(BEWERBERTOOL_BEWERBUNG_EMPFAENGER); - + // Umgehung für FHTW. Ausprogrammiert im Code if(defined('BEWERBERTOOL_MAILEMPFANG') && BEWERBERTOOL_MAILEMPFANG != '') { @@ -3199,7 +3201,7 @@ function getMailEmpfaenger($studiengang_kz, $studienplan_id = null, $orgform_kur } else $empfaenger = $studiengang->email; - + if ($empfaenger != '') return $empfaenger; else From fa0fe2a952ea99a6937b5b8781dac7d0a9ce59fe Mon Sep 17 00:00:00 2001 From: Harald Bamberger Date: Tue, 22 Oct 2024 16:49:56 +0200 Subject: [PATCH 15/23] hide unruly option in AbmeldungStg for the moment --- .../js/components/Studierendenantrag/Form/AbmeldungStgl.js | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/public/js/components/Studierendenantrag/Form/AbmeldungStgl.js b/public/js/components/Studierendenantrag/Form/AbmeldungStgl.js index c804b20d1..450769362 100644 --- a/public/js/components/Studierendenantrag/Form/AbmeldungStgl.js +++ b/public/js/components/Studierendenantrag/Form/AbmeldungStgl.js @@ -189,8 +189,10 @@ export default { + ` -} \ No newline at end of file +} From f59bdf812a11b76ba1b4a78e9a1285ddfeba21de Mon Sep 17 00:00:00 2001 From: Harald Bamberger Date: Tue, 22 Oct 2024 17:18:02 +0200 Subject: [PATCH 16/23] add phrase mark_person_as_unruly --- system/phrasesupdate.php | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/system/phrasesupdate.php b/system/phrasesupdate.php index 90a14938f..d9a72eaac 100644 --- a/system/phrasesupdate.php +++ b/system/phrasesupdate.php @@ -23831,6 +23831,26 @@ array( ) ) ), + array( + 'app' => 'core', + 'category' => 'studierendenantrag', + 'phrase' => 'mark_person_as_unruly', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => 'Person ist unruly.', + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => 'Person is unruly.', + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), array( 'app' => 'core', 'category' => 'notiz', From 4789bfab42d92c254a691f8a0854e6232bd54ed8 Mon Sep 17 00:00:00 2001 From: Harald Bamberger Date: Thu, 24 Oct 2024 07:57:54 +0200 Subject: [PATCH 17/23] add columns gehaltsbestandteil_von and gehaltsbestandteil_bis to hr.tbl_gehaltshistorie --- system/dbupdate_3.4/28260_vertraege.php | 36 +++++++++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/system/dbupdate_3.4/28260_vertraege.php b/system/dbupdate_3.4/28260_vertraege.php index 8fc6be05f..9ce2ba29b 100644 --- a/system/dbupdate_3.4/28260_vertraege.php +++ b/system/dbupdate_3.4/28260_vertraege.php @@ -85,6 +85,8 @@ if ($result = $db->db_query("SELECT * FROM information_schema.tables WHERE table betrag bytea, gehaltsbestandteil_id integer, mitarbeiter_uid character varying(32), + gehaltsbestandteil_von date, + gehaltsbestandteil_bis date, CONSTRAINT tbl_gehaltshistorie_pk PRIMARY KEY (gehaltshistorie_id) ); @@ -570,3 +572,37 @@ if ($result = $db->db_query("SELECT * FROM hr.tbl_vertragsart WHERE vertragsart_ echo 'Vertragsart "Dienstverhältnis zu einer anderen Bildungseinrichtung oder einem anderen Träger" erstellt.
'; } } + +if ($result = $db->db_query("SELECT * FROM information_schema.columns WHERE column_name='gehaltsbestandteil_von' AND table_name='tbl_gehaltshistorie' AND table_schema='hr'")) +{ + if ($db->db_num_rows($result) == 0) + { + $qry = " + ALTER TABLE + hr.tbl_gehaltshistorie + ADD COLUMN + gehaltsbestandteil_von date + "; + if (! $db->db_query($qry)) + echo 'Vertraege: ' . $db->db_last_error() . '
'; + else + echo 'Spalte gehaltsbestandteil_von wurde in hr.tbl_gehaltshistorie neu erstellt
'; + } +} + +if ($result = $db->db_query("SELECT * FROM information_schema.columns WHERE column_name='gehaltsbestandteil_bis' AND table_name='tbl_gehaltshistorie' AND table_schema='hr'")) +{ + if ($db->db_num_rows($result) == 0) + { + $qry = " + ALTER TABLE + hr.tbl_gehaltshistorie + ADD COLUMN + gehaltsbestandteil_bis date + "; + if (! $db->db_query($qry)) + echo 'Vertraege: ' . $db->db_last_error() . '
'; + else + echo 'Spalte gehaltsbestandteil_bis wurde in hr.tbl_gehaltshistorie neu erstellt
'; + } +} \ No newline at end of file From 2edfd1febcdf75a5550ad3b3a082dad25bdd027a Mon Sep 17 00:00:00 2001 From: cgfhtw Date: Thu, 24 Oct 2024 11:03:28 +0200 Subject: [PATCH 18/23] Unterbrecher in serie problematik --- application/libraries/PrestudentLib.php | 31 ++++++++++++++++++++++++- 1 file changed, 30 insertions(+), 1 deletion(-) diff --git a/application/libraries/PrestudentLib.php b/application/libraries/PrestudentLib.php index af62668cf..67d9b3450 100644 --- a/application/libraries/PrestudentLib.php +++ b/application/libraries/PrestudentLib.php @@ -254,7 +254,7 @@ class PrestudentLib $studiengang = current(getData($res)); $prestudent_status = current($result); - if($prestudent_status->ausbildungssemester + 1 < $studiengang->max_semester) + if ($prestudent_status->status_kurzbz != Prestudentstatus_model::STATUS_UNTERBRECHER && $prestudent_status->ausbildungssemester + 1 < $studiengang->max_semester) $ausbildungssemester_plus = 1; if(!$result) @@ -264,6 +264,35 @@ class PrestudentLib 'studiensemester_kurzbz' => $studiensemester_kurzbz ])); } + } elseif (current($result)->status_kurzbz == Prestudentstatus_model::STATUS_UNTERBRECHER) { + if ($studierendenantrag_id) + { + $resultAntrag = $this->_ci->StudierendenantragModel->load($studierendenantrag_id); + if (isError($resultAntrag)) + return $resultAntrag; + $resultAntrag = getData($resultAntrag); + if (!$resultAntrag) + return error($this->_ci->p->t('studierendenantrag', 'error_no_antrag_found', ['id' => $studierendenantrag_id])); + + $antrag = current($resultAntrag); + $anmerkung = current($result)->anmerkung . ' Wiedereinstieg ' . $antrag->datum_wiedereinstieg; + + $result = $this->_ci->PrestudentstatusModel->update([ + 'prestudent_id' => $prestudent_id, + 'status_kurzbz' => Prestudentstatus_model::STATUS_UNTERBRECHER, + 'studiensemester_kurzbz' => $studiensemester_kurzbz, + 'ausbildungssemester' => $semester + ], [ + 'updatevon' => $insertvon, + 'updateamum' => date('c'), + 'anmerkung'=> $anmerkung + ]); + + if (isError($result)) + return $result; + } + + return success(); } $prestudent_status = current($result); From 9eb91574c36f53157313720a10df517b3b75f61b Mon Sep 17 00:00:00 2001 From: cgfhtw Date: Thu, 24 Oct 2024 11:08:22 +0200 Subject: [PATCH 19/23] semester --- application/libraries/PrestudentLib.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/application/libraries/PrestudentLib.php b/application/libraries/PrestudentLib.php index 67d9b3450..ef5e2e3a9 100644 --- a/application/libraries/PrestudentLib.php +++ b/application/libraries/PrestudentLib.php @@ -281,7 +281,7 @@ class PrestudentLib 'prestudent_id' => $prestudent_id, 'status_kurzbz' => Prestudentstatus_model::STATUS_UNTERBRECHER, 'studiensemester_kurzbz' => $studiensemester_kurzbz, - 'ausbildungssemester' => $semester + 'ausbildungssemester' => current($result)->ausbildungssemester ], [ 'updatevon' => $insertvon, 'updateamum' => date('c'), From 1e55b13546826db2b12da607977b0fa00d112bb5 Mon Sep 17 00:00:00 2001 From: Harald Bamberger Date: Mon, 28 Oct 2024 15:58:20 +0100 Subject: [PATCH 20/23] force use of insertamum column from antrag table --- application/models/education/Studierendenantrag_model.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/application/models/education/Studierendenantrag_model.php b/application/models/education/Studierendenantrag_model.php index 80804f49a..677d01f04 100644 --- a/application/models/education/Studierendenantrag_model.php +++ b/application/models/education/Studierendenantrag_model.php @@ -151,6 +151,7 @@ class Studierendenantrag_model extends DB_Model $this->addSelect('s.insertvon status_insertvon'); $this->addSelect('t.bezeichnung[(' . $lang . ')] statustyp'); $this->addSelect('p.unruly AS unruly'); + $this->addSelect($this->dbTable . '.insertamum AS insertamum'); $this->addJoin( 'campus.tbl_studierendenantrag_status s', @@ -489,4 +490,4 @@ class Studierendenantrag_model extends DB_Model return hasData($this->load()); } -} \ No newline at end of file +} From ae80c3415d60f7529bd9da7702a66b92563ae7d4 Mon Sep 17 00:00:00 2001 From: Harald Bamberger Date: Tue, 29 Oct 2024 10:37:00 +0100 Subject: [PATCH 21/23] betraege im Gehaltsbestandteil als string mit . als komma konvertieren, um zu verhindern, dass locale spezifische Betraege in der verschluesselten DB Spalte gespeichert werden --- .../libraries/vertragsbestandteil/Gehaltsbestandteil.php | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/application/libraries/vertragsbestandteil/Gehaltsbestandteil.php b/application/libraries/vertragsbestandteil/Gehaltsbestandteil.php index 22f8ee2ae..95bbdd908 100644 --- a/application/libraries/vertragsbestandteil/Gehaltsbestandteil.php +++ b/application/libraries/vertragsbestandteil/Gehaltsbestandteil.php @@ -201,6 +201,10 @@ class Gehaltsbestandteil extends AbstractBestandteil implements \JsonSerializabl public function setGrundbetrag($grundbetrag) { + if(is_float($grundbetrag)) + { + $grundbetrag = number_format($grundbetrag, 2, '.', ''); + } $this->markDirty('grundbetrag', $this->grundbetrag, $grundbetrag); $this->grundbetrag = $grundbetrag; return $this; @@ -208,6 +212,10 @@ class Gehaltsbestandteil extends AbstractBestandteil implements \JsonSerializabl public function setBetrag_valorisiert($betrag_valorisiert) { + if(is_float($betrag_valorisiert)) + { + $betrag_valorisiert = number_format($betrag_valorisiert, 2, '.', ''); + } $this->markDirty('betrag_valorisiert', $this->betrag_valorisiert, $betrag_valorisiert); $this->betrag_valorisiert = $betrag_valorisiert; return $this; From 9b4fb2ac2c277a0151fcb4696dd7e07b089e3b17 Mon Sep 17 00:00:00 2001 From: Alexei Karpenko Date: Tue, 29 Oct 2024 16:28:17 +0100 Subject: [PATCH 22/23] bpk job: enabled getting vBPKs with new API version 0.8 --- config/vilesci.config-default.inc.php | 2 + include/dvb.class.php | 95 +++++++--- include/kennzeichen.class.php | 261 ++++++++++++++++++++++++++ include/person.class.php | 6 +- vilesci/cronjobs/bpk.php | 92 ++++++++- 5 files changed, 427 insertions(+), 29 deletions(-) create mode 100644 include/kennzeichen.class.php diff --git a/config/vilesci.config-default.inc.php b/config/vilesci.config-default.inc.php index a372bc9da..09f33ee31 100644 --- a/config/vilesci.config-default.inc.php +++ b/config/vilesci.config-default.inc.php @@ -266,6 +266,8 @@ define('BIS_FUNKTIONSCODE_6_ARR', array( // bPk Abfrage define('BPK_FUER_ALLE_BENUTZER_ABFRAGEN', false); +// bPk Typen in Form 'BEREICH' => 'kennzeichenTyp' +define('VBPK_TYPES', array('AS' => 'vbpkAs', 'BF' => 'vbpkBf', 'ZP-TD' => 'vbpkTd')); // Docsbox configs define('DOCSBOX_SERVER', 'http://docconverter.technikum-wien.at/'); diff --git a/include/dvb.class.php b/include/dvb.class.php index fbeb79afc..90eb8d306 100644 --- a/include/dvb.class.php +++ b/include/dvb.class.php @@ -29,6 +29,7 @@ require_once(dirname(__FILE__).'/studiensemester.class.php'); require_once(dirname(__FILE__).'/adresse.class.php'); require_once(dirname(__FILE__).'/webservicelog.class.php'); require_once(dirname(__FILE__).'/prestudent.class.php'); +require_once(dirname(__FILE__).'/kennzeichen.class.php'); require_once(dirname(__FILE__).'/errorhandler.class.php'); class dvb extends basis_db @@ -42,6 +43,7 @@ class dvb extends basis_db const DVB_URL_WEBSERVICE_RESERVIERUNG = DVB_PORTAL.'/rws/0.6/matrikelreservierung.xml'; const DVB_URL_WEBSERVICE_MELDUNG = DVB_PORTAL.'/rws/0.6/matrikelmeldung.xml'; const DVB_URL_WEBSERVICE_BPK = DVB_PORTAL.'/rws/0.6/pruefebpk.xml'; + const DVB_URL_WEBSERVICE_BPK_ALL = DVB_PORTAL.'/rws/0.8/pruefebpk.xml'; public $authentication; private $username; @@ -1149,15 +1151,29 @@ class dvb extends basis_db */ public function getBPK($person_id) { + $vbpkTypes = defined('VBPK_TYPES') && is_array(VBPK_TYPES) ? VBPK_TYPES : null; + $person = new person(); if ($person->load($person_id)) { if ($person->bpk != '') { - // BPK exisitert bereits $retval = new stdClass(); $retval->bpk = $person->bpk; - return ErrorHandler::success($retval); + + // BPK existiert bereits + if (!isset($vbpkTypes)) return ErrorHandler::success($retval); + + $kennzeichen = new kennzeichen(); + + if ($kennzeichen->load_pers($person_id, $vbpkTypes)) + { + if (array_unique(array_column($kennzeichen->result, 'kennzeichentyp_kurzbz')) == array_values($vbpkTypes)) + { + // BPKs exisiteren bereits + return ErrorHandler::success($retval); + } + } } if ($person->gebdatum == '') @@ -1178,7 +1194,8 @@ class dvb extends basis_db return ErrorHandler::error($errormsg); } - $geburtsdatum = str_replace("-", "", $person->gebdatum); + //$geburtsdatum = str_replace("-", "", $person->gebdatum); + $geburtsdatum = $person->gebdatum; $vorname = $person->vorname; $nachname = $person->nachname; $geschlecht = mb_strtoupper($person->geschlecht); @@ -1258,6 +1275,8 @@ class dvb extends basis_db */ public function pruefeBPK($geburtsdatum, $vorname, $nachname, $geschlecht, $plz = null, $strasse = null) { + $vbpkTypes = defined('VBPK_TYPES') && is_array(VBPK_TYPES) ? VBPK_TYPES : null; + if ($this->tokenIsExpired()) { $result = $this->authenticate(); @@ -1271,7 +1290,7 @@ class dvb extends basis_db $uuid = $this->getUUID(); - $url = self::DVB_URL_WEBSERVICE_BPK; + $url = self::DVB_URL_WEBSERVICE_BPK_ALL; $url .= '?geburtsdatum='.curl_escape($curl, $geburtsdatum); $url .= '&vorname='.curl_escape($curl, $vorname); $url .= '&nachname='.curl_escape($curl, $nachname); @@ -1311,24 +1330,15 @@ class dvb extends basis_db if ($curl_info['http_code'] == '200') { /* Example Response: - - - 12345ABCDEFGHXXXXXXX= - - - Hans - Huber - M - 1990-01-01 - - - - 1100 - - - - - + + + 5cc93441-a46a-4f97-a5e3-e64891b39f10 + 12345ABCDEFG + 12345ABCDEFG + 12345ABCDEFG + 12345ABCDEFG + true + Example Error: @@ -1369,10 +1379,30 @@ class dvb extends basis_db } $domnodes_bpk = $dom->getElementsByTagNameNS($namespace, 'bpk'); + if ($domnodes_bpk->length > 0) { $retval = new stdClass(); $retval->bpk = $domnodes_bpk->item(0)->textContent; + + // vbpks auslesen + $domnodes_vbpks = $dom->getElementsByTagNameNS($namespace, 'vbpk'); + + $retval->vbpks = array(); + if ($domnodes_vbpks->length > 0) + { + foreach ($domnodes_vbpks as $domnode_vbpk) + { + foreach ($domnode_vbpk->attributes as $attribute) + { + if ($attribute->nodeName == 'bereich' && isset($vbpkTypes[$attribute->nodeValue])) + { + $retval->vbpks[$vbpkTypes[$attribute->nodeValue]] = $domnode_vbpk->nodeValue; + } + } + } + } + return ErrorHandler::success($retval); } else @@ -1385,6 +1415,27 @@ class dvb extends basis_db $retval->multiple = true; return ErrorHandler::error(null, $retval); } + else + { + $errorTexts = array(); + $domnodes_fehler = $dom->getElementsByTagNameNS($namespace, 'fehlerliste'); + + if ($domnodes_fehler->length > 0) + { + foreach ($domnodes_fehler as $domnode_fehler) + { + if ($domnode_fehler->childNodes->length > 0) + { + foreach ($domnode_fehler->childNodes as $childNode) + { + $errorTexts[] = $childNode->nodeValue; + } + } + } + $this->errormsg = count($errorTexts) > 0 ? implode('; ', $errorTexts) : null; + return ErrorHandler::error(null); + } + } } return ErrorHandler::error(); } diff --git a/include/kennzeichen.class.php b/include/kennzeichen.class.php new file mode 100644 index 000000000..c21c5eee0 --- /dev/null +++ b/include/kennzeichen.class.php @@ -0,0 +1,261 @@ +, + */ +/** + * Klasse kennzeichen + */ +require_once(dirname(__FILE__).'/basis_db.class.php'); + +class kennzeichen extends basis_db +{ + public $new; // boolean + public $result = array(); // adresse Objekt + + //Tabellenspalten + public $kennzeichen_id; // integer + public $person_id; // integer + + public $kennzeichentyp_kurzbz; // string + public $inhalt; // string + public $aktiv; // boolean + public $insertamum; // timestamp + public $insertvon; // string + public $updateamum; // timestamp + public $updatevon; // string + + /** + * Konstruktor + * @param $kennzeichen_id ID des Kennzeichens das geladen werden soll (Default=null) + */ + public function __construct($kennzeichen_id=null) + { + parent::__construct(); + $this->new = true; + + if(!is_null($kennzeichen_id)) + $this->load($kennzeichen_id); + } + + /** + * Laedt ein Kennzeichen mit der ID $kennzeichen_id + * @param $kennzeichen_id ID des zu ladenden Kennzeichens + * @return true wenn ok, false im Fehlerfall + */ + public function load($kennzeichen_id) + { + if (!is_numeric($kennzeichen_id)) + { + $this->errormsg = 'Kennzeichen Id ist ungueltig'; + return false; + } + + $qry = "SELECT + * + FROM + public.tbl_kennzeichen + WHERE + kennzeichen_id = " . $this->db_add_param($kennzeichen_id, FHC_INTEGER) . ";"; + + if ($this->db_query($qry)) + { + if ($row = $this->db_fetch_object()) + { + $this->kennzeichen_id = $row->kennzeichen_id; + $this->person_id = $row->person_id; + $this->kennzeichentyp_kurzbz = $row->kennzeichentyp_kurzbz; + $this->inhalt = $row->inhalt; + $this->aktiv = $this->db_parse_bool($row->aktiv); + $this->updateamum = $row->updateamum; + $this->updatevon = $row->updatevon; + $this->insertamum = $row->insertamum; + $this->insertvon = $row->insertvon; + return true; + } + else + { + $this->errormsg = 'Datensatz wurde nicht gefunden'; + return false; + } + } + else + { + $this->errormsg = 'Fehler beim Laden der Daten'; + return false; + } + } + + /** + * Prueft die Kennzeichen auf Gueltigkeit + * @return true wenn ok, false im Fehlerfall + */ + public function validate() + { + //Gesamtlaenge pruefen + if(mb_strlen($this->kennzeichentyp_kurzbz)>32) + { + $this->errormsg = 'Kennzeichentyp darf nicht länger als 32 Zeichen sein'; + return false; + } + $this->errormsg = ''; + return true; + } + + /** + * Speichert den aktuellen Datensatz in die Datenbank + * Wenn $neu auf true gesetzt ist wird ein neuer Datensatz angelegt + * andernfalls wird der Datensatz mit der ID in $kennzeichen_id aktualisiert + * @return true wenn ok, false im Fehlerfall + */ + public function save($new = null) + { + if(!is_null($new)) + $this->new = $new; + + //Variablen pruefen + if(!$this->validate()) + return false; + + if($this->new) + { + //Neuen Datensatz einfuegen + $qry='BEGIN;INSERT INTO public.tbl_kennzeichen (person_id, kennzeichentyp_kurzbz, inhalt, aktiv, insertamum, insertvon) VALUES('. + $this->db_add_param($this->person_id, FHC_INTEGER).', '. + $this->db_add_param($this->kennzeichentyp_kurzbz).', '. + $this->db_add_param($this->inhalt).', '. + $this->db_add_param($this->aktiv, FHC_BOOLEAN).', now(), '. + $this->db_add_param($this->insertvon).');'; + } + else + { + //Updaten des bestehenden Datensatzes + + //Pruefen ob kennzeichen_id eine gueltige Zahl ist + if(!is_numeric($this->kennzeichen_id)) + { + $this->errormsg = 'kennzeichen_id muss eine gueltige Zahl sein'; + return false; + } + + $qry='UPDATE public.tbl_kennzeichen SET '. + 'person_id='.$this->db_add_param($this->person_id,FHC_INTEGER).', '. + 'kennzeichentyp_kurzbz='.$this->db_add_param($this->kennzeichentyp_kurzbz).', '. + 'aktiv='.$this->db_add_param($this->aktiv, FHC_BOOLEAN).', '. + 'updateamum= now(), '. + 'updatevon='.$this->db_add_param($this->updatevon).' '. + 'WHERE kennzeichen_id='.$this->db_add_param($this->kennzeichen_id, FHC_INTEGER).';'; + } + + if($this->db_query($qry)) + { + //Sequence auslesen um die eingefuegte ID zu ermitteln + if($this->new) + { + $qry = "SELECT currval('public.tbl_kennzeichen_id_seq') as id;"; + + if($this->db_query($qry)) + { + if($row = $this->db_fetch_object()) + { + $this->kennzeichen_id = $row->id; + $this->db_query('COMMIT;'); + return true; + } + else + { + $this->errormsg = 'Fehler beim Auslesen er Sequence'; + $this->db_query('ROLLBACK;'); + return false; + } + } + else + { + $this->errormsg = 'Fehler beim Auslesen der Sequence'; + $this->db_query('ROLLBACK;'); + return false; + } + } + return true; + } + else + { + $this->errormsg = 'Fehler beim Speichern der Daten'; + return false; + } + } + + /** + * Laedt Kennzeichen einer Person + * @param person_id + * @param kennzeichentyp_kurzbz_arr filtern nach Kennzeichentyp + * @return boolean + */ + public function load_pers($person_id, $kennzeichentyp_kurzbz_arr) + { + if(!is_numeric($person_id)) + { + $this->errormsg = 'Person_id ist ungueltig'; + return false; + } + if(!is_array($kennzeichentyp_kurzbz_arr)) + { + $this->errormsg = 'Kennzeichen sind ungueltig'; + return false; + } + + $qry = " + SELECT + kz.kennzeichen_id, kz.person_id, kz.kennzeichentyp_kurzbz, inhalt, aktiv, updateamum, updatevon, insertamum, insertvon + FROM + public.tbl_kennzeichen kz + WHERE + person_id=".$this->db_add_param($person_id, FHC_INTEGER)." + AND aktiv = TRUE + AND kennzeichentyp_kurzbz IN (".$this->implode4SQL($kennzeichentyp_kurzbz_arr).") + ORDER BY + kz.kennzeichentyp_kurzbz, kz.kennzeichen_id;"; + + if($this->db_query($qry)) + { + while($row = $this->db_fetch_object()) + { + $obj = new kennzeichen(); + + $obj->kennzeichen_id = $row->kennzeichen_id; + $obj->person_id = $row->person_id; + $obj->kennzeichentyp_kurzbz = $row->kennzeichentyp_kurzbz; + $obj->inhalt = $row->inhalt; + $obj->aktiv = $this->db_parse_bool($row->aktiv); + $obj->updateamum = $row->updateamum; + $obj->updatevon = $row->updatevon; + $obj->insertamum = $row->insertamum; + $obj->insertvon = $row->insertvon; + + $this->result[] = $obj; + } + + return true; + } + else + { + $this->errormsg = 'Fehler beim Laden der Daten'; + return false; + } + } +} +?> diff --git a/include/person.class.php b/include/person.class.php index 95230ef3e..924c15ab6 100644 --- a/include/person.class.php +++ b/include/person.class.php @@ -97,10 +97,10 @@ class person extends basis_db familienstand, anzahlkinder, aktiv, insertamum, insertvon, updateamum, updatevon, ext_id, geschlecht, staatsbuergerschaft, geburtsnation, kurzbeschreibung, zugangscode, foto_sperre, matr_nr, bpk, wahlname"; - if ($hasUDF = $udf->personHasUDF()) - $qry .= ", udf_values "; + if ($hasUDF = $udf->personHasUDF() && false) + $qry .= ", udf_values"; - $qry .= "FROM public.tbl_person + $qry .= " FROM public.tbl_person WHERE person_id = " . $this->db_add_param($personId, FHC_INTEGER); if (!$this->db_query($qry)) diff --git a/vilesci/cronjobs/bpk.php b/vilesci/cronjobs/bpk.php index 3a7ac4395..75af4f9f8 100644 --- a/vilesci/cronjobs/bpk.php +++ b/vilesci/cronjobs/bpk.php @@ -27,6 +27,7 @@ require_once(dirname(__FILE__).'/../../include/basis_db.class.php'); require_once(dirname(__FILE__).'/../../include/dvb.class.php'); require_once(dirname(__FILE__).'/../../include/benutzerberechtigung.class.php'); require_once(dirname(__FILE__).'/../../include/datum.class.php'); +require_once(dirname(__FILE__).'/../../include/kennzeichen.class.php'); require_once(dirname(__FILE__).'/../../include/errorhandler.class.php'); if (!$db = new basis_db()) @@ -34,6 +35,7 @@ if (!$db = new basis_db()) $limit = ''; $debug = false; +$vbpkTypes = defined('VBPK_TYPES') && is_array(VBPK_TYPES) ? VBPK_TYPES : null; // Wenn das Script nicht ueber Commandline gestartet wird, muss eine // Authentifizierung stattfinden @@ -85,8 +87,27 @@ if (defined('BPK_FUER_ALLE_BENUTZER_ABFRAGEN') && BPK_FUER_ALLE_BENUTZER_ABFRAGE JOIN public.tbl_benutzer USING(person_id) WHERE public.tbl_benutzer.aktiv = true - AND tbl_person.bpk is null - AND gebdatum is not null"; + AND + ( + tbl_person.bpk is null"; + + // checken, ob vBpks fehlen + if (isset($vbpkTypes)) + { + $qry .= + " OR ( + SELECT + COUNT(DISTINCT kennzeichentyp_kurzbz) + FROM + public.tbl_kennzeichen + WHERE + person_id = tbl_person.person_id + AND kennzeichentyp_kurzbz IN (".$db->implode4SQL($vbpkTypes).") + ) < ".$db->db_add_param(count($vbpkTypes), FHC_INTEGER); + } + + $qry .= + ") AND gebdatum is not null"; } else { @@ -100,8 +121,27 @@ else 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 + ( + tbl_person.bpk is null"; + + // checken, ob vBpks fehlen + if (isset($vbpkTypes)) + { + $qry .= + " OR ( + SELECT + COUNT(DISTINCT kennzeichentyp_kurzbz) + FROM + public.tbl_kennzeichen + WHERE + person_id = tbl_person.person_id + AND kennzeichentyp_kurzbz IN (".$db->implode4SQL($vbpkTypes).") + ) < ".$db->db_add_param(count($vbpkTypes), FHC_INTEGER); + } + + $qry .= + ") 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"; } @@ -135,6 +175,50 @@ if ($result = $db->db_query($qry)) echo ' OK'; else echo ' Failed: '.$person->errormsg; + + $vbpkErrors = array(); + + // alle existierenden vBpks einer Person holen + $kennzeichenTypes = new kennzeichen(); + if ($kennzeichenTypes->load_pers($row->person_id, $vbpkTypes)) + { + $existingVbpks = $kennzeichenTypes->result; + + foreach ($data->retval->vbpks as $vbpkType => $vbpkValue) + { + $new = true; + foreach ($existingVbpks as $existingVbpk) + { + // nicht speichern, wenn vBpk bereits vorhanden + if ($existingVbpk->kennzeichentyp_kurzbz == $vbpkType) + { + $new = false; + break; + } + } + + if (!$new) continue; + + // neue vBpk speichern + $kennzeichen = new kennzeichen(); + + $kennzeichen->person_id = $row->person_id; + $kennzeichen->kennzeichentyp_kurzbz = $vbpkType; + $kennzeichen->inhalt = $vbpkValue; + $kennzeichen->aktiv = true; + $kennzeichen->insertvon = 'bpkJob'; + + if (!$kennzeichen->save()) + { + $vbpkErrors[] = 'Failed to save vBpk '.$vbpkType.':'.$kennzeichen->errormsg; + } + } + } + + if (count($vbpkErrors) > 0) + { + echo implode('; ', $vbpkErrors); + } } } else From 835adca419efaf79b311c6d2a730859745c87161 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andreas=20=C3=96sterreicher?= Date: Mon, 4 Nov 2024 15:42:47 +0100 Subject: [PATCH 23/23] Debugging option entfernt --- include/person.class.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/person.class.php b/include/person.class.php index 924c15ab6..f8103dd65 100644 --- a/include/person.class.php +++ b/include/person.class.php @@ -97,7 +97,7 @@ class person extends basis_db familienstand, anzahlkinder, aktiv, insertamum, insertvon, updateamum, updatevon, ext_id, geschlecht, staatsbuergerschaft, geburtsnation, kurzbeschreibung, zugangscode, foto_sperre, matr_nr, bpk, wahlname"; - if ($hasUDF = $udf->personHasUDF() && false) + if ($hasUDF = $udf->personHasUDF()) $qry .= ", udf_values"; $qry .= " FROM public.tbl_person