diff --git a/include/person.class.php b/include/person.class.php index a50417db0..e10862ea1 100644 --- a/include/person.class.php +++ b/include/person.class.php @@ -24,6 +24,7 @@ */ require_once(dirname(__FILE__).'/basis_db.class.php'); require_once(dirname(__FILE__).'/datum.class.php'); +require_once(dirname(__FILE__).'/udf.class.php'); class person extends basis_db { @@ -64,6 +65,7 @@ class person extends basis_db public $foto_sperre = false; // boolean public $matr_nr; //varchar(32) public $bpk; //varchar(255) + public $udf_values; //json /** * Konstruktor - Uebergibt die Connection und laedt optional eine Person @@ -84,6 +86,8 @@ class person extends basis_db **/ public function load($personId) { + $udf = new UDF(); + //person_id auf gueltigkeit pruefen if (is_numeric($personId) && $personId != '') { @@ -91,8 +95,11 @@ class person extends basis_db gebdatum, gebort, gebzeit, foto, anmerkung, homepage, svnr, ersatzkennzeichen, familienstand, anzahlkinder, aktiv, insertamum, insertvon, updateamum, updatevon, ext_id, geschlecht, staatsbuergerschaft, geburtsnation, kurzbeschreibung, zugangscode, foto_sperre, - matr_nr, bpk - FROM public.tbl_person + matr_nr, bpk"; + if ($hasUDF = $udf->personHasUDF()) + $qry .= ", udf_values "; + + $qry .= "FROM public.tbl_person WHERE person_id = " . $this->db_add_param($personId, FHC_INTEGER); if (!$this->db_query($qry)) @@ -135,6 +142,10 @@ class person extends basis_db $this->foto_sperre = $this->db_parse_bool($row->foto_sperre); $this->matr_nr = $row->matr_nr; $this->bpk = $row->bpk; + if ($hasUDF) + { + $this->udf_values = $row->udf_values; + } } else { diff --git a/include/prestudent.class.php b/include/prestudent.class.php index ab1e329dd..1d493beb0 100644 --- a/include/prestudent.class.php +++ b/include/prestudent.class.php @@ -26,6 +26,7 @@ require_once(dirname(__FILE__).'/log.class.php'); require_once(dirname(__FILE__).'/phrasen.class.php'); require_once(dirname(__FILE__).'/globals.inc.php'); require_once(dirname(__FILE__).'/sprache.class.php'); +require_once(dirname(__FILE__).'/udf.class.php'); $sprache = getSprache(); $lang = new sprache(); @@ -73,6 +74,7 @@ class prestudent extends person public $priorisierung = null; public $foerderrelevant = null; public $standort_code = null; + public $udf_values = null; public $status_kurzbz; public $studiensemester_kurzbz; @@ -1413,6 +1415,9 @@ class prestudent extends person person_id=".$this->db_add_param($person_id, FHC_INTEGER)." ORDER BY prestudent_id"; + $udf = new UDF(); + $hasUDF = $udf->prestudentHasUDF(); + if($this->db_query($qry)) { while($row = $this->db_fetch_object()) @@ -1455,6 +1460,10 @@ class prestudent extends person $obj->gsstudientyp_kurzbz = $row->gsstudientyp_kurzbz; $obj->aufnahmegruppe_kurzbz = $row->aufnahmegruppe_kurzbz; $obj->priorisierung = $row->priorisierung; + if ($hasUDF) + { + $obj->udf_values = $row->udf_values; + } $this->result[] = $obj; } diff --git a/vilesci/stammdaten/personen_wartung.php b/vilesci/stammdaten/personen_wartung.php index 2c4c4f0fa..2def0bd3c 100644 --- a/vilesci/stammdaten/personen_wartung.php +++ b/vilesci/stammdaten/personen_wartung.php @@ -42,6 +42,7 @@ require_once ('../../include/kontakt.class.php'); require_once ('../../include/dokument.class.php'); require_once ('../../include/reihungstest.class.php'); require_once ('../../include/pruefling.class.php'); +require_once ('../../include/udf.class.php'); if (! $db = new basis_db()) @@ -54,6 +55,7 @@ $rechte->getBerechtigungen($uid); if (! $rechte->isBerechtigt('basis/person', null, 'suid')) die($rechte->errormsg); +$udf = new UDF(); $msg_info = array(); $msg_error = array(); $msg_warning = array(); @@ -283,6 +285,40 @@ if (isset($personToDelete) && isset($personToKeep) && $personToDelete >= 0 && $p if ($doppelteReihungstestzuordnung === false) $sql_query_upd1 .= "UPDATE public.tbl_rt_person SET person_id=" . $db->db_add_param($personToKeep, FHC_INTEGER) . " WHERE person_id=" . $db->db_add_param($personToDelete, FHC_INTEGER) . ";"; + + $personUDF = $udf->personHasUDF(); + + if ($personUDF) + { + $udfToKeep = json_decode($personToKeep_obj->udf_values, true); + $udfToDelete = json_decode($personToDelete_obj->udf_values, true); + + $udfToKeep = is_null($udfToKeep) ? array() : $udfToKeep; + $udfToDelete = is_null($udfToDelete) ? array() : $udfToDelete; + + if ($udfToKeep != $udfToDelete) + { + foreach ($udfToDelete as $key => $udf) + { + if (!array_key_exists($key, $udfToKeep)) + { + $udfToKeep[$key] = $udf; + } + elseif ($udfToKeep[$key] !== $udf && !is_null($udf)) + { + if (is_null($udfToKeep[$key])) + $udfToKeep[$key] = $udf; + else + { + $msg_error[] = 'Beide Personen haben unterschiedliche Werte in den UDFs und können nicht zusammengelegt werden.
+ Sie müssen die Datensätze manuell bereinigen, bevor Sie die Personen zusammenlegen können.'; + $error = true; + break; + } + } + } + } + } if ($error == false) { // Wenn bei einer der Personen das Foto gesperrt ist, dann die Sperre uebernehmen @@ -437,6 +473,7 @@ if (isset($personToDelete) && isset($personToKeep) && $personToDelete >= 0 && $p $sql_query_upd1 .= "UPDATE system.tbl_filters SET person_id=" . $db->db_add_param($personToKeep, FHC_INTEGER) . " WHERE person_id=" . $db->db_add_param($personToDelete, FHC_INTEGER) . ";"; $sql_query_upd1 .= "UPDATE system.tbl_log SET person_id=" . $db->db_add_param($personToKeep, FHC_INTEGER) . " WHERE person_id=" . $db->db_add_param($personToDelete, FHC_INTEGER) . ";"; $sql_query_upd1 .= "UPDATE system.tbl_person_lock SET person_id=" . $db->db_add_param($personToKeep, FHC_INTEGER) . " WHERE person_id=" . $db->db_add_param($personToDelete, FHC_INTEGER) . ";"; + $sql_query_upd1 .= "UPDATE system.tbl_issue SET person_id=" . $db->db_add_param($personToKeep, FHC_INTEGER) . " WHERE person_id=" . $db->db_add_param($personToDelete, FHC_INTEGER) . ";"; $sql_query_upd1 .= "UPDATE wawi.tbl_betriebsmittelperson SET person_id=" . $db->db_add_param($personToKeep, FHC_INTEGER) . " WHERE person_id=" . $db->db_add_param($personToDelete, FHC_INTEGER) . ";"; $sql_query_upd1 .= "UPDATE wawi.tbl_konto SET person_id=" . $db->db_add_param($personToKeep, FHC_INTEGER) . " WHERE person_id=" . $db->db_add_param($personToDelete, FHC_INTEGER) . ";"; $sql_query_upd1 .= $alma_query_upd; @@ -456,6 +493,9 @@ if (isset($personToDelete) && isset($personToKeep) && $personToDelete >= 0 && $p // BPK erst setzen, wenn nur mehr eine Person vorhanden ist $sql_query_upd1 .= "UPDATE public.tbl_person SET bpk=" . $db->db_add_param($bpk, FHC_STRING) . " WHERE person_id=" . $db->db_add_param($personToKeep, FHC_INTEGER) . ";"; + if ($personUDF) + $sql_query_upd1 .= "UPDATE public.tbl_person SET udf_values=" . $db->db_add_param(json_encode($udfToKeep)) . " WHERE person_id=" . $db->db_add_param($personToKeep, FHC_INTEGER) . ";"; + if ($db->db_query($sql_query_upd1)) { $msg_info[] = "Update Query:"; @@ -730,9 +770,10 @@ if (isset($personToDelete) && isset($personToKeep) && $personToDelete >= 0 && $p usort($prestudenten->result, "sortPrestudents"); + $prestudentUDF = $udf->prestudentHasUDF(); $prestudentenArray = array(); $kontaktLoeschArray = array(); - foreach ($prestudenten->result AS $row) + foreach ($prestudenten->result AS $key => $row) { $prestudentenArray[] = array( 'prestudent_id' => $row->prestudent_id, @@ -753,6 +794,8 @@ if (isset($personToDelete) && isset($personToKeep) && $personToDelete >= 0 && $p 'zgvmanation' => $row->zgvmanation, 'studiengang_typ' => $row->studiengang_typ ); + if ($prestudentUDF) + $prestudentenArray[$key] = array_merge($prestudentenArray[$key], array('udf_values' => $row->udf_values)); } /* @@ -793,6 +836,48 @@ if (isset($personToDelete) && isset($personToKeep) && $personToDelete >= 0 && $p $i++; continue; } + + //Wenn die UDF values nicht zusammengeführt werden können, wird mit dem nächsten weitergemacht und eine Warnung ausgegeben + if ($prestudentUDF) + { + $udfError = false; + + $udfToKeep = json_decode($prestudentenArray[$previousKey]['udf_values'], true);; + $udfToKeep = is_null($udfToKeep) ? array() : $udfToKeep; + + $udfToDelete = json_decode($value['udf_values'], true); + $udfToDelete = is_null($udfToDelete) ? array() : $udfToDelete; + + if ($udfToKeep != $udfToDelete) + { + foreach ($udfToDelete as $udfKey => $udf) + { + if (!array_key_exists($udfKey, $udfToKeep)) + { + $udfToKeep[$udfKey] = $udf; + } + elseif ($udfToKeep[$udfKey] !== $udf && !is_null($udf)) + { + if (is_null($udfToKeep[$udfKey])) + $udfToKeep[$udfKey] = $udf; + else + { + + $warningList['udfUnklar'][$i][1] = $prestudentId; + $warningList['udfUnklar'][$i][2] = $value['prestudent_id']; + $i++; + $udfError = true; + break; + } + } + } + } + + $prestudentenArray[$previousKey]['udf_values'] = json_encode($udfToKeep); + if ($udfError) + continue; + + } // Wenn der Status gleich ist, wird auf bestätigt-datum geprüft if ($status_kurzbz == $value['status_kurzbz']) { @@ -894,6 +979,11 @@ if (isset($personToDelete) && isset($personToKeep) && $personToDelete >= 0 && $p $zgvmadatum = $value['zgvmadatum']; $zgvmanation = $value['zgvmanation']; $previousKey = $key; + if ($prestudentUDF) + { + $udfToKeep = json_decode($value['udf_values'], true); + $udfToKeep = is_null($udfToKeep) ? array() : $udfToKeep; + } } // Messages in $msg_warning schreiben @@ -934,6 +1024,22 @@ if (isset($personToDelete) && isset($personToKeep) && $personToDelete >= 0 && $p } } + $msg_warning[] = $messageOutput; + $messageOutput = ''; + if(isset($warningList['udfUnklar'])) + { + foreach ($warningList['udfUnklar'] as $key => $value) { + + $messageOutput .= '
Bei folgenden PreStudenten sind die UDFs widersprüchlich oder unklar:
'; + + foreach ($value as $presstudentid) + { + $messageOutput .= '    '.$presstudentid.'
'; + } + $messageOutput .= '
'; + } + } + $msg_warning[] = $messageOutput; //Wenn Prüfling auf zu löschenden Prestudenten zeigt und ggf auf bleibenden umhängen.