From 01032c63d3a04c40f32ff182d37269d5e38dd74f Mon Sep 17 00:00:00 2001 From: Cris Date: Wed, 4 Nov 2020 15:29:36 +0100 Subject: [PATCH 01/25] Update der Person in ALMA Tabelle, wenn Personen zusammengelegt werden MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Falls nur die zu löschende Person in ALMA vorhanden ist, mit der zu behaltenden Person ersetzen. Falls bereits die zu ersetzende UND zu löschende Person in ALMA vorhanden sind, muss erst direkt im ALMA Bibliothekssystem und in der tbl_alma gelöscht werden. Signed-off-by: Cris --- vilesci/stammdaten/personen_wartung.php | 47 +++++++++++++++++++++++++ 1 file changed, 47 insertions(+) diff --git a/vilesci/stammdaten/personen_wartung.php b/vilesci/stammdaten/personen_wartung.php index c143a1390..6f4e25cc4 100644 --- a/vilesci/stammdaten/personen_wartung.php +++ b/vilesci/stammdaten/personen_wartung.php @@ -135,6 +135,52 @@ if (isset($personToDelete) && isset($personToKeep) && $personToDelete >= 0 && $p } else { + // Wenn Person in ALMA Bibliothek vorkommt, ggf. die Person dort übernehmen + $alma_has_personToKeep = false; + $alma_has_personToDelete = false; + $alma_update_obj = new StdClass(); + $alma_query_upd = ''; + + $alma_query = " + SELECT * + FROM sync.tbl_alma + WHERE ( + person_id = " . $db->db_add_param($personToKeep, FHC_INTEGER) . " OR + person_id = " . $db->db_add_param($personToDelete, FHC_INTEGER) . " + )"; + + + if ($result = $db->db_query($alma_query)) + { + while ($row = $db->db_fetch_object($result)) + { + if ($row->person_id == $personToKeep) + { + $alma_has_personToKeep = true; + } + if ($row->person_id == $personToDelete) + { + $alma_has_personToDelete = true; + $alma_update_obj = $row; + } + } + } + + // Falls nur die zu löschende Person in ALMA vorhanden ist, mit der zu behaltenden Person ersetzen + if ($alma_has_personToDelete && !$alma_has_personToKeep) + { + $alma_query_upd = " + UPDATE sync.tbl_alma + SET person_id = " . $db->db_add_param($personToKeep, FHC_INTEGER) . " + WHERE alma_match_id = " . $alma_update_obj->alma_match_id . " + AND person_id = " . $alma_update_obj->person_id . ";"; + } + // Falls bereits doppelte Einträge in ALMA vorhanden sind, manuell lösen + elseif ($alma_has_personToDelete && $alma_has_personToKeep) + { + die('Es sind bereits beide Personen in ALMA vorhanden. Bitte zuerst direkt im ALMA Bibliotheksystem und in der tbl_alma lösen.'); + } + $personToDelete_obj = new person(); if ($personToDelete_obj->load($personToDelete)) { @@ -346,6 +392,7 @@ if (isset($personToDelete) && isset($personToKeep) && $personToDelete >= 0 && $p $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 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; $sql_query_upd1 .= "DELETE FROM public.tbl_person WHERE person_id=" . $db->db_add_param($personToDelete, FHC_INTEGER) . ";"; From adb96ed33f0b7ca4f843d027f8e1a64e1fa98ad1 Mon Sep 17 00:00:00 2001 From: Cris Date: Mon, 16 Nov 2020 15:11:08 +0100 Subject: [PATCH 02/25] Automatisch Personen in tbl_sap_students zusammenlegen MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Wenn doppelt angelegte Personen zusammengeführt werden, wird nun ggf auch in der Tabelle tbl_sap_students die hinterlegte Person upgedatet. Ausnahme: wenn in der tbl_sap_students die Person auch schon doppelt angelegt ist. In diesem Fall gibt es ein exit mit der Aufforderung, dies direkt (manuell) in der tbl_sap_students zu ändern. Signed-off-by: cris-technikum --- vilesci/stammdaten/personen_wartung.php | 48 +++++++++++++++++++++++++ 1 file changed, 48 insertions(+) diff --git a/vilesci/stammdaten/personen_wartung.php b/vilesci/stammdaten/personen_wartung.php index 6f4e25cc4..9cc0bba15 100644 --- a/vilesci/stammdaten/personen_wartung.php +++ b/vilesci/stammdaten/personen_wartung.php @@ -181,6 +181,53 @@ if (isset($personToDelete) && isset($personToKeep) && $personToDelete >= 0 && $p die('Es sind bereits beide Personen in ALMA vorhanden. Bitte zuerst direkt im ALMA Bibliotheksystem und in der tbl_alma lösen.'); } + + // Wenn Person in SAP students vorkommt, ggf. die Person dort übernehmen + $sap_students_has_personToKeep = false; + $sap_students_has_personToDelete = false; + $sap_students_update_obj = new StdClass(); + $sap_students_query_upd = ''; + + $sap_students_query = " + SELECT * + FROM sync.tbl_sap_students + WHERE ( + person_id = " . $db->db_add_param($personToKeep, FHC_INTEGER) . " OR + person_id = " . $db->db_add_param($personToDelete, FHC_INTEGER) . " + )"; + + if ($result = $db->db_query($sap_students_query)) + { + while ($row = $db->db_fetch_object($result)) + { + if ($row->person_id == $personToKeep) + { + $sap_students_has_personToKeep = true; + } + if ($row->person_id == $personToDelete) + { + $sap_students_has_personToDelete = true; + $sap_students_update_obj = $row; + } + } + } + + // Wenn die zu löschende Person in SAP students eingetragen ist, dann mit der zu behaltenden Person überschreiben + if ($sap_students_has_personToDelete && !$sap_students_has_personToKeep) + { + $sap_students_query_upd = " + UPDATE sync.tbl_sap_students + SET person_id = " . $db->db_add_param($personToKeep, FHC_INTEGER) . " + WHERE sap_user_id = " . $db->db_add_param($sap_students_update_obj->sap_user_id, FHC_STRING) . " + AND person_id = " . $sap_students_update_obj->person_id . ";"; + } + // Wenn doppelte Personeneinträge in SAP students vorhanden sind (zu löschende UND zu behaltende Person), + // dann manuell lösen + elseif ($sap_students_has_personToDelete && $sap_students_has_personToKeep) + { + die('Es sind bereits beide Personen in SAP vorhanden. Bitte zuerst direkt in der tbl_sap_students lösen.'); + } + $personToDelete_obj = new person(); if ($personToDelete_obj->load($personToDelete)) { @@ -393,6 +440,7 @@ if (isset($personToDelete) && isset($personToKeep) && $personToDelete >= 0 && $p $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; + $sql_query_upd1 .= $sap_students_query_upd; $sql_query_upd1 .= "DELETE FROM public.tbl_person WHERE person_id=" . $db->db_add_param($personToDelete, FHC_INTEGER) . ";"; From 4cbbd662b6f34722845bed3c48453911419b6610 Mon Sep 17 00:00:00 2001 From: Cris Date: Mon, 16 Nov 2020 17:48:24 +0100 Subject: [PATCH 03/25] Automatisch Personen in tbl_sap_mitarbeiter zusammenlegen MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Wenn doppelt angelegte Personen zusammengeführt werden, wird nun ggf auch in der Tabelle tbl_sap_mitarbeiter die hinterlegte Person upgedatet. Ausnahme: wenn in der tbl_sap_mitarbeiter die Person auch schon doppelt angelegt ist. In diesem Fall gibt es ein exit mit der Aufforderung, dies direkt (manuell) in der tbl_sap_mitarbeiter zu ändern. Signed-off-by: cris-technikum --- vilesci/stammdaten/personen_wartung.php | 145 ++++++++++++++++++------ 1 file changed, 110 insertions(+), 35 deletions(-) diff --git a/vilesci/stammdaten/personen_wartung.php b/vilesci/stammdaten/personen_wartung.php index 9cc0bba15..fdf3c0531 100644 --- a/vilesci/stammdaten/personen_wartung.php +++ b/vilesci/stammdaten/personen_wartung.php @@ -182,51 +182,117 @@ if (isset($personToDelete) && isset($personToKeep) && $personToDelete >= 0 && $p } - // Wenn Person in SAP students vorkommt, ggf. die Person dort übernehmen - $sap_students_has_personToKeep = false; - $sap_students_has_personToDelete = false; - $sap_students_update_obj = new StdClass(); - $sap_students_query_upd = ''; + // Prüfen, ob Person Mitarbeiter oder Student ist + $uid_toDelete = new Benutzer(); + $uid_toDelete->getBenutzerFromPerson($personToDelete); + $uid_toDelete = $uid_toDelete->result[0]->uid; - $sap_students_query = " + $mitarbeiter = new Mitarbeiter(); + $is_Mitarbeiter = $mitarbeiter->load($uid_toDelete); + + // Wenn Person Mitarbeiter ist, gegebenenfalls die SAP Mitarbeiter Tabelle updaten + if($is_Mitarbeiter) + { + $uid_toKeep = new Benutzer(); + $uid_toKeep->getBenutzerFromPerson($personToKeep); + $uid_toKeep = $uid_toKeep->result[0]->uid; + + // Wenn Person in SAP students vorkommt, ggf. die Person dort übernehmen + $sap_mitarbeiter_has_uidToKeep = false; + $sap_mitarbeiter_has_uidToDelete = false; + $sap_mitarbeiter_update_obj = new StdClass(); + $sap_mitarbeiter_query_upd = ''; + + $sap_mitarbeiter_query = " + SELECT * + FROM sync.tbl_sap_mitarbeiter + WHERE ( + mitarbeiter_uid = " . $db->db_add_param($uid_toKeep) . " OR + mitarbeiter_uid = " . $db->db_add_param($uid_toDelete) . " + )"; + + if ($result = $db->db_query($sap_mitarbeiter_query)) + { + while ($row = $db->db_fetch_object($result)) + { + if ($row->mitarbeiter_uid == $uid_toKeep) + { + $sap_mitarbeiter_has_uidToKeep = true; + } + if ($row->mitarbeiter_uid == $uid_toDelete) + { + $sap_mitarbeiter_has_uidToDelete = true; + $sap_mitarbeiter_update_obj = $row; + } + } + } + + // Wenn die zu löschende Person in SAP students eingetragen ist, dann mit der zu behaltenden Person überschreiben + if ($sap_mitarbeiter_has_uidToDelete && !$sap_mitarbeiter_has_uidToKeep) + { + $sap_mitarbeiter_query_upd = " + UPDATE sync.tbl_sap_mitarbeiter + SET mitarbeiter_uid = " . $db->db_add_param($uid_toKeep) . " + WHERE sap_eeid = " . $db->db_add_param($sap_mitarbeiter_update_obj->sap_eeid) . " + AND mitarbeiter_uid = " . $db->db_add_param($sap_mitarbeiter_update_obj->mitarbeiter_uid) . ";"; + } + // Wenn doppelte Personeneinträge in SAP students vorhanden sind (zu löschende UND zu behaltende Person), + // dann manuell lösen + elseif ($sap_mitarbeiter_has_uidToDelete && $sap_mitarbeiter_has_uidToKeep) + { + die('Es sind bereits beide Personen in SAP vorhanden. Bitte zuerst direkt in der tbl_sap_mitarbeiter lösen.'); + } + + } + // Wenn Person Student ist, gegebenenfalls die SAP Studenten Tabelle updaten + else + { + $sap_students_has_personToKeep = false; + $sap_students_has_personToDelete = false; + $sap_students_update_obj = new StdClass(); + $sap_students_query_upd = ''; + + $sap_students_query = " SELECT * FROM sync.tbl_sap_students WHERE ( person_id = " . $db->db_add_param($personToKeep, FHC_INTEGER) . " OR person_id = " . $db->db_add_param($personToDelete, FHC_INTEGER) . " )"; - - if ($result = $db->db_query($sap_students_query)) - { - while ($row = $db->db_fetch_object($result)) - { - if ($row->person_id == $personToKeep) - { - $sap_students_has_personToKeep = true; - } - if ($row->person_id == $personToDelete) - { - $sap_students_has_personToDelete = true; - $sap_students_update_obj = $row; - } - } - } - - // Wenn die zu löschende Person in SAP students eingetragen ist, dann mit der zu behaltenden Person überschreiben - if ($sap_students_has_personToDelete && !$sap_students_has_personToKeep) - { - $sap_students_query_upd = " + + if ($result = $db->db_query($sap_students_query)) + { + while ($row = $db->db_fetch_object($result)) + { + if ($row->person_id == $personToKeep) + { + $sap_students_has_personToKeep = true; + } + if ($row->person_id == $personToDelete) + { + $sap_students_has_personToDelete = true; + $sap_students_update_obj = $row; + } + } + } + + // Wenn die zu löschende Person in SAP students eingetragen ist, dann mit der zu behaltenden Person überschreiben + if ($sap_students_has_personToDelete && !$sap_students_has_personToKeep) + { + $sap_students_query_upd = " UPDATE sync.tbl_sap_students SET person_id = " . $db->db_add_param($personToKeep, FHC_INTEGER) . " WHERE sap_user_id = " . $db->db_add_param($sap_students_update_obj->sap_user_id, FHC_STRING) . " AND person_id = " . $sap_students_update_obj->person_id . ";"; - } - // Wenn doppelte Personeneinträge in SAP students vorhanden sind (zu löschende UND zu behaltende Person), - // dann manuell lösen - elseif ($sap_students_has_personToDelete && $sap_students_has_personToKeep) - { - die('Es sind bereits beide Personen in SAP vorhanden. Bitte zuerst direkt in der tbl_sap_students lösen.'); - } + } + // Wenn doppelte Personeneinträge in SAP students vorhanden sind (zu löschende UND zu behaltende Person), + // dann manuell lösen + elseif ($sap_students_has_personToDelete && $sap_students_has_personToKeep) + { + die('Es sind bereits beide Personen in SAP vorhanden. Bitte zuerst direkt in der tbl_sap_students lösen.'); + } + } + $personToDelete_obj = new person(); if ($personToDelete_obj->load($personToDelete)) @@ -440,7 +506,16 @@ if (isset($personToDelete) && isset($personToKeep) && $personToDelete >= 0 && $p $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; - $sql_query_upd1 .= $sap_students_query_upd; + // Wenn Person Mitarbeiter ist, ggf. SAP Mitarbeiter updaten + if ($is_Mitarbeiter) + { + $sql_query_upd1 .= $sap_mitarbeiter_query_upd; + } + // Wenn Person Student ist, ggf. SAP Studententabelle updaten + if (!$is_Mitarbeiter) + { + $sql_query_upd1 .= $sap_students_query_upd; + } $sql_query_upd1 .= "DELETE FROM public.tbl_person WHERE person_id=" . $db->db_add_param($personToDelete, FHC_INTEGER) . ";"; From 34e3756d744817dfbd7f4f2e909b88403989339e Mon Sep 17 00:00:00 2001 From: Cris Date: Wed, 18 Nov 2020 13:14:59 +0100 Subject: [PATCH 04/25] Mitarbeiter zusammenlegen entfernt / Extension-Tabellen auf Vorhandensein pruefen - Mitarbeiter zusammenlegen entfernt. - Bevor Personen auch in extenstions zusammengelegt werden: pruefen, ob die entsprechenden Tabellen existieren. (diese sind nur vorhanden, wenn extensions FHC-Core-ALMA, FHC-Core-SAP installiert sind) Signed-off-by: cris-technikum --- vilesci/stammdaten/personen_wartung.php | 146 ++++++++++++------------ 1 file changed, 73 insertions(+), 73 deletions(-) diff --git a/vilesci/stammdaten/personen_wartung.php b/vilesci/stammdaten/personen_wartung.php index 9cc0bba15..2c4c4f0fa 100644 --- a/vilesci/stammdaten/personen_wartung.php +++ b/vilesci/stammdaten/personen_wartung.php @@ -135,97 +135,97 @@ if (isset($personToDelete) && isset($personToKeep) && $personToDelete >= 0 && $p } else { - // Wenn Person in ALMA Bibliothek vorkommt, ggf. die Person dort übernehmen - $alma_has_personToKeep = false; - $alma_has_personToDelete = false; - $alma_update_obj = new StdClass(); - $alma_query_upd = ''; - - $alma_query = " - SELECT * - FROM sync.tbl_alma - WHERE ( - person_id = " . $db->db_add_param($personToKeep, FHC_INTEGER) . " OR - person_id = " . $db->db_add_param($personToDelete, FHC_INTEGER) . " - )"; - - - if ($result = $db->db_query($alma_query)) + // Prüfen, ob tbl_alma existiert (also ob ALMA extension installiert ist) + if($result = @$db->db_query("SELECT 1 FROM sync.tbl_alma LIMIT 1")) { - while ($row = $db->db_fetch_object($result)) + // Wenn Person in ALMA Bibliothek vorkommt, ggf. die Person dort übernehmen + $alma_has_personToKeep = false; + $alma_has_personToDelete = false; + $alma_update_obj = new StdClass(); + $alma_query_upd = ''; + + $alma_query = " + SELECT * + FROM sync.tbl_alma + WHERE ( + person_id = " . $db->db_add_param($personToKeep, FHC_INTEGER) . " OR + person_id = " . $db->db_add_param($personToDelete, FHC_INTEGER) . " + )"; + + if ($result = $db->db_query($alma_query)) { - if ($row->person_id == $personToKeep) + while ($row = $db->db_fetch_object($result)) { - $alma_has_personToKeep = true; - } - if ($row->person_id == $personToDelete) - { - $alma_has_personToDelete = true; - $alma_update_obj = $row; + if ($row->person_id == $personToKeep) + { + $alma_has_personToKeep = true; + } + if ($row->person_id == $personToDelete) + { + $alma_has_personToDelete = true; + $alma_update_obj = $row; + } } } - } - - // Falls nur die zu löschende Person in ALMA vorhanden ist, mit der zu behaltenden Person ersetzen - if ($alma_has_personToDelete && !$alma_has_personToKeep) + + // Falls nur die zu löschende Person in ALMA vorhanden ist, mit der zu behaltenden Person ersetzen + if ($alma_has_personToDelete && !$alma_has_personToKeep) + { + $alma_query_upd = " + UPDATE sync.tbl_alma + SET person_id = " . $db->db_add_param($personToKeep, FHC_INTEGER) . " + WHERE alma_match_id = " . $alma_update_obj->alma_match_id . " + AND person_id = " . $alma_update_obj->person_id . ";"; + } + // Falls bereits doppelte Einträge in ALMA vorhanden sind (zu löschende und zu behaltende), manuell lösen + elseif ($alma_has_personToDelete && $alma_has_personToKeep) + { + die('Es sind bereits beide Personen in ALMA vorhanden. Bitte zuerst direkt im ALMA Bibliotheksystem und in der tbl_alma lösen.'); + } + } + + // Prüfen, ob tbl_sap_students exisitiert + if($result = @$db->db_query("SELECT 1 FROM sync.tbl_sap_students LIMIT 1")) { - $alma_query_upd = " - UPDATE sync.tbl_alma - SET person_id = " . $db->db_add_param($personToKeep, FHC_INTEGER) . " - WHERE alma_match_id = " . $alma_update_obj->alma_match_id . " - AND person_id = " . $alma_update_obj->person_id . ";"; - } - // Falls bereits doppelte Einträge in ALMA vorhanden sind, manuell lösen - elseif ($alma_has_personToDelete && $alma_has_personToKeep) - { - die('Es sind bereits beide Personen in ALMA vorhanden. Bitte zuerst direkt im ALMA Bibliotheksystem und in der tbl_alma lösen.'); - } - - - // Wenn Person in SAP students vorkommt, ggf. die Person dort übernehmen - $sap_students_has_personToKeep = false; - $sap_students_has_personToDelete = false; - $sap_students_update_obj = new StdClass(); - $sap_students_query_upd = ''; - - $sap_students_query = " + // Wenn Person in SAP students vorkommt, ggf. die Person dort übernehmen + $sap_students_has_personToKeep = false; + $sap_students_has_personToDelete = false; + $sap_students_update_obj = new StdClass(); + $sap_students_query_upd = ''; + + $sap_students_query = " SELECT * FROM sync.tbl_sap_students WHERE ( person_id = " . $db->db_add_param($personToKeep, FHC_INTEGER) . " OR person_id = " . $db->db_add_param($personToDelete, FHC_INTEGER) . " )"; - - if ($result = $db->db_query($sap_students_query)) - { - while ($row = $db->db_fetch_object($result)) - { - if ($row->person_id == $personToKeep) - { - $sap_students_has_personToKeep = true; - } - if ($row->person_id == $personToDelete) - { - $sap_students_has_personToDelete = true; - $sap_students_update_obj = $row; + + if ($result = $db->db_query($sap_students_query)) { + while ($row = $db->db_fetch_object($result)) { + if ($row->person_id == $personToKeep) { + $sap_students_has_personToKeep = true; + } + if ($row->person_id == $personToDelete) { + $sap_students_has_personToDelete = true; + $sap_students_update_obj = $row; + } } } - } - - // Wenn die zu löschende Person in SAP students eingetragen ist, dann mit der zu behaltenden Person überschreiben - if ($sap_students_has_personToDelete && !$sap_students_has_personToKeep) - { - $sap_students_query_upd = " + + // Wenn die zu löschende Person in SAP students eingetragen ist, dann mit der zu behaltenden Person überschreiben + if ($sap_students_has_personToDelete && !$sap_students_has_personToKeep) { + $sap_students_query_upd = " UPDATE sync.tbl_sap_students SET person_id = " . $db->db_add_param($personToKeep, FHC_INTEGER) . " WHERE sap_user_id = " . $db->db_add_param($sap_students_update_obj->sap_user_id, FHC_STRING) . " AND person_id = " . $sap_students_update_obj->person_id . ";"; - } - // Wenn doppelte Personeneinträge in SAP students vorhanden sind (zu löschende UND zu behaltende Person), - // dann manuell lösen - elseif ($sap_students_has_personToDelete && $sap_students_has_personToKeep) - { - die('Es sind bereits beide Personen in SAP vorhanden. Bitte zuerst direkt in der tbl_sap_students lösen.'); + } + // Wenn doppelte Personeneinträge in SAP students vorhanden sind (zu löschende UND zu behaltende Person), + // dann manuell lösen + elseif ($sap_students_has_personToDelete && $sap_students_has_personToKeep) { + die('Es sind bereits beide Personen in SAP vorhanden. Bitte zuerst direkt in der tbl_sap_students lösen.'); + } } $personToDelete_obj = new person(); From 2c6d8937f64eb322af4feaac831412b7f7f398d8 Mon Sep 17 00:00:00 2001 From: ma0048 Date: Wed, 12 May 2021 12:48:29 +0200 Subject: [PATCH 05/25] funktion hinzugefuegt um mehrere bewerber abzuweisen und status wird nur angezeigt wenn aktiv --- .../system/infocenter/InfoCenter.php | 56 ++++++++- application/models/crm/Prestudent_model.php | 13 +++ application/models/crm/Statusgrund_model.php | 13 +++ .../models/organisation/Studiengang_model.php | 13 +++ .../views/system/infocenter/infocenter.php | 1 + .../js/infocenter/infocenterPersonDataset.js | 107 ++++++++++++++++++ 6 files changed, 197 insertions(+), 6 deletions(-) diff --git a/application/controllers/system/infocenter/InfoCenter.php b/application/controllers/system/infocenter/InfoCenter.php index 43de8bb60..fd3f98320 100644 --- a/application/controllers/system/infocenter/InfoCenter.php +++ b/application/controllers/system/infocenter/InfoCenter.php @@ -108,7 +108,9 @@ class InfoCenter extends Auth_Controller 'setOnHold' => 'infocenter:rw', 'removeOnHold' => 'infocenter:rw', 'getStudienjahrEnd' => 'infocenter:r', - 'setNavigationMenuArrayJson' => 'infocenter:r' + 'setNavigationMenuArrayJson' => 'infocenter:r', + 'getAbsageData' => 'infocenter:r', + 'saveAbsageForAll' => 'infocenter:rw' ) ); @@ -433,11 +435,14 @@ class InfoCenter extends Auth_Controller * Saves Absage for Prestudent including the reason for the Absage (statusgrund). * inserts Studiensemester and Ausbildungssemester for the new Absage of (chronologically) last status. */ - public function saveAbsage() + public function saveAbsage($prestudent_id = null, $statusgrund = null) { $json = null; - $prestudent_id = $this->input->post('prestudent_id'); - $statusgrund = $this->input->post('statusgrund'); + if (is_null($prestudent_id)) + $prestudent_id = $this->input->post('prestudent_id'); + + if (is_null($statusgrund)) + $statusgrund = $this->input->post('statusgrund'); $lastStatus = $this->PrestudentstatusModel->getLastStatus($prestudent_id); @@ -1427,8 +1432,8 @@ class InfoCenter extends Auth_Controller $this->_sortPrestudents($zgvpruefungen); - $abwstatusgruende = $this->StatusgrundModel->loadWhere(array('status_kurzbz' => self::ABGEWIESENERSTATUS))->retval; - $intstatusgruende = $this->StatusgrundModel->loadWhere(array('status_kurzbz' => self::INTERESSENTSTATUS))->retval; + $abwstatusgruende = $this->StatusgrundModel->getStatus(self::ABGEWIESENERSTATUS, true)->retval; + $intstatusgruende = $this->StatusgrundModel->getStatus(self::INTERESSENTSTATUS)->retval; $data = array ( 'zgvpruefungen' => $zgvpruefungen, @@ -1687,4 +1692,43 @@ class InfoCenter extends Auth_Controller $this->loglib->logError('Studiengang has no mail for sending Freigabe mail'); } } + + public function getAbsageData() + { + $this->load->model('organisation/Studiengang_model', 'StudiengangModel'); + + $statusgruende = $this->StatusgrundModel->getStatus(self::ABGEWIESENERSTATUS, true)->retval; + $studiengaenge = $this->StudiengangModel->getStudiengaengeWithOrgForm(['b', 'm']); + + $data = array ( + 'statusgruende' => $statusgruende, + 'studiengaenge' => $studiengaenge->retval + ); + + $this->outputJsonSuccess($data); + } + + public function saveAbsageForAll() + { + $statusgrund = $this->input->post('statusgrund'); + $studiengang = $this->input->post('studiengang'); + $personen = $this->input->post('personen'); + + if ($statusgrund === 'null' || $studiengang === 'null' || empty($personen)) + $this->terminateWithJsonError("Bitte Statusgrund, Studiengang und Personen auswählen."); + + foreach($personen as $person) + { + $prestudent = $this->PrestudentModel->getPrestudentByStudiengangAndPerson($studiengang, $person); + + if(!hasData($prestudent)) + continue; + + $prestudentData = getData($prestudent); + + $this->saveAbsage($prestudentData[0]->prestudent_id, $statusgrund); + } + + $this->outputJsonSuccess("Success"); + } } diff --git a/application/models/crm/Prestudent_model.php b/application/models/crm/Prestudent_model.php index 2e014800c..41639d0ac 100644 --- a/application/models/crm/Prestudent_model.php +++ b/application/models/crm/Prestudent_model.php @@ -581,4 +581,17 @@ class Prestudent_model extends DB_Model return $this->execQuery($query, array($person_id)); } + + public function getPrestudentByStudiengangAndPerson($studiengang, $person) + { + $query = "SELECT ps.prestudent_id + FROM public.tbl_prestudentstatus pss + JOIN public.tbl_prestudent ps USING(prestudent_id) + JOIN public.tbl_studiengang sg USING(studiengang_kz) + JOIN lehre.tbl_studienplan sp USING(studienplan_id) + WHERE ps.person_id = ? + AND UPPER((sg.typ || sg.kurzbz) || ':' || sp.orgform_kurzbz) = ?"; + + return $this->execQuery($query, array($person, $studiengang)); + } } diff --git a/application/models/crm/Statusgrund_model.php b/application/models/crm/Statusgrund_model.php index 4717a7571..f9b156b76 100644 --- a/application/models/crm/Statusgrund_model.php +++ b/application/models/crm/Statusgrund_model.php @@ -11,4 +11,17 @@ class Statusgrund_model extends DB_Model $this->dbTable = "public.tbl_status_grund"; $this->pk = "statusgrund_id"; } + + public function getStatus($status_kurzbz = null, $aktiv = null) + { + $where = array(); + if (!is_null($status_kurzbz)) + $where['status_kurzbz'] = $status_kurzbz; + if (!is_null($aktiv)) + $where['aktiv'] = $aktiv; + + $status = $this->loadWhere($where); + + return success($status->retval); + } } diff --git a/application/models/organisation/Studiengang_model.php b/application/models/organisation/Studiengang_model.php index 8b8be0366..999fcbbd0 100644 --- a/application/models/organisation/Studiengang_model.php +++ b/application/models/organisation/Studiengang_model.php @@ -481,4 +481,17 @@ class Studiengang_model extends DB_Model return $this->loadWhere($condition); } + + public function getStudiengaengeWithOrgForm($typ) + { + $query = "SELECT DISTINCT (UPPER(sg.typ || sg.kurzbz || ':' || sp.orgform_kurzbz)) AS Studiengang + FROM public.tbl_prestudentstatus pss + JOIN public.tbl_prestudent ps USING(prestudent_id) + JOIN public.tbl_studiengang sg USING(studiengang_kz) + JOIN lehre.tbl_studienplan sp USING(studienplan_id) + WHERE sg.typ IN ? + ORDER BY Studiengang;"; + + return $this->execQuery($query, array($typ)); + } } diff --git a/application/views/system/infocenter/infocenter.php b/application/views/system/infocenter/infocenter.php index 4005518a1..43e326bb5 100644 --- a/application/views/system/infocenter/infocenter.php +++ b/application/views/system/infocenter/infocenter.php @@ -13,6 +13,7 @@ 'ajaxlib' => true, 'filterwidget' => true, 'navigationwidget' => true, + 'dialoglib' => true, 'phrases' => array( 'person' => array('vorname', 'nachname'), 'global' => array('mailAnXversandt'), diff --git a/public/js/infocenter/infocenterPersonDataset.js b/public/js/infocenter/infocenterPersonDataset.js index 87a40c0f1..7ea048b71 100644 --- a/public/js/infocenter/infocenterPersonDataset.js +++ b/public/js/infocenter/infocenterPersonDataset.js @@ -31,6 +31,20 @@ var InfocenterPersonDataset = { var formHtml = '
'; $("#datasetActionsTop").before(formHtml); + var auswahlAbsageToggle = + 'Erweiterte Einstellungen'; + + var auswahlAbsage = + '' + + '' + + ''; + + InfocenterPersonDataset.getAbsageData(); + var studienSemesterHtml = ' ' + @@ -60,6 +74,14 @@ var InfocenterPersonDataset = { "
"+studienSemesterHtml+"
"+ "

"); + $("#datasetActionsBottom").append( + "
"+ + "
"+auswahlAbsageToggle+"
"+ + ""+ + "
" + + "
" + + "
" + ) $("button.incStudiensemester").click(function() { InfocenterPersonDataset.changeStudiensemesterUservar(1); }); @@ -68,6 +90,16 @@ var InfocenterPersonDataset = { InfocenterPersonDataset.changeStudiensemesterUservar(-1); }); + $('button.auswahlAbsageBtn').click(function() + { + InfocenterPersonDataset.saveAbsageForAll(); + }); + + $('a.absageToggle').click(function() + { + $('#absagePunkte').toggle(); + }) + var personcount = 0; FHC_AjaxClient.ajaxCallGet( @@ -203,6 +235,81 @@ var InfocenterPersonDataset = { ); }, + saveAbsageForAll: function() + { + var idsel = $("#filterTableDataset input:checked[name=PersonId\\[\\]]"); + + if(idsel.length <= 0) + return FHC_DialogLib.alertInfo("Bitte wählen Sie die Personen aus."); + + var statusgrund = $('.absgstatusgrund').val(); + var studiengang = $('.auswahlAbsageStg').val(); + + if(statusgrund === 'null' || studiengang === 'null') + return FHC_DialogLib.alertInfo("Bitte den Absagegrund und Studiengang auswählen."); + + var personen = []; + + for (var i = 0; i < idsel.length; i++) + { + personen.push($(idsel[i]).val()); + } + + FHC_AjaxClient.ajaxCallPost( + 'system/infocenter/InfoCenter/saveAbsageForAll', + { + 'statusgrund': statusgrund, + 'studiengang': studiengang, + 'personen' : personen + }, + { + successCallback: function(data, textStatus, jqXHR) { + if (FHC_AjaxClient.isError(data)) + FHC_DialogLib.alertError(FHC_AjaxClient.getError(data)); + + if (FHC_AjaxClient.hasData(data)) + FHC_FilterWidget.reloadDataset(); + + }, + errorCallback: function(jqXHR, textStatus, errorThrown) { + FHC_DialogLib.alertError(textStatus); + } + } + ); + }, + + getAbsageData: function() + { + FHC_AjaxClient.ajaxCallGet( + 'system/infocenter/InfoCenter/getAbsageData', + {}, + { + successCallback: function(data, textStatus, jqXHR) { + if (FHC_AjaxClient.hasData(data)) + { + data = FHC_AjaxClient.getData(data); + $.each(data.statusgruende, function(key, value){ + $('.absgstatusgrund').append($("