From 3122825b73d561516f66fdc7bcfb97764d1f2795 Mon Sep 17 00:00:00 2001 From: KarpAlex Date: Sat, 22 Apr 2023 15:41:20 +0200 Subject: [PATCH] student issues list issueData: language index comes from tbl_sprache, limit results only to dvuh and core issues --- .../controllers/system/issues/Issues.php | 29 ++- .../views/system/issues/issuesData.php | 182 ++++++++++-------- 2 files changed, 131 insertions(+), 80 deletions(-) diff --git a/application/controllers/system/issues/Issues.php b/application/controllers/system/issues/Issues.php index 6d959a024..2e599e232 100644 --- a/application/controllers/system/issues/Issues.php +++ b/application/controllers/system/issues/Issues.php @@ -26,6 +26,7 @@ class Issues extends Auth_Controller // Load models $this->load->model('person/Benutzerfunktion_model', 'BenutzerfunktionModel'); $this->load->model('organisation/Organisationseinheit_model', 'OrganisationseinheitModel'); + $this->load->model('system/Sprache_model', 'SpracheModel'); $this->loadPhrases( array( @@ -45,10 +46,11 @@ class Issues extends Auth_Controller public function index() { $oes_for_issues = $this->_getOesForIssues(); + $language_index = $this->_getLanguageIndex(); $this->load->view( 'system/issues/issues', - $oes_for_issues + array_merge($oes_for_issues, array('language_index' => $language_index)) ); } @@ -166,4 +168,29 @@ class Issues extends Auth_Controller 'all_oe_kurzbz_berechtigt' => $all_oe_kurzbz_berechtigt ); } + + /** + * + * @param + * @return object success or error + */ + private function _getLanguageIndex() + { + $idx = 1; + $this->SpracheModel->addSelect('sprache, index'); + $langRes = $this->SpracheModel->load(); + + if (hasData($langRes)) + { + $userLang = getUserLanguage(); + $lang = getData($langRes); + + foreach ($lang as $l) + { + if ($l->sprache == $userLang) $idx = $l->index; + } + } + + return $idx; + } } diff --git a/application/views/system/issues/issuesData.php b/application/views/system/issues/issuesData.php index 50b7c1483..7a0b75bad 100644 --- a/application/views/system/issues/issuesData.php +++ b/application/views/system/issues/issuesData.php @@ -6,7 +6,6 @@ $ALL_FUNKTIONEN_OE_KURZBZ = "('" . implode("','", array_keys($all_funktionen_oe_ // all oes for which logged user has issues permissions, including permissions for "special" issue funktion $ALL_OE_KURZBZ_BERECHTIGT = "('" . implode("','", $all_oe_kurzbz_berechtigt) . "')"; $RELEVANT_PRESTUDENT_STATUS = "('Aufgenommener', 'Student', 'Incoming', 'Diplomand', 'Abbrecher', 'Unterbrecher', 'Absolvent')"; -$LANGUAGE_INDEX = getUserLanguage() == 'German' ? '1' : '2'; // get issues for the oes of the logged user or for the persons (students, oe-zuordnung) of the oes $query = "WITH zustaendigkeiten AS ( @@ -34,73 +33,97 @@ $query = "WITH zustaendigkeiten AS ( FROM system.tbl_fehler_zustaendigkeiten zst )"; -$query .= "SELECT issue_id, fehlercode AS \"Fehlercode\", iss.fehlercode_extern AS \"Fehlercode extern\", datum AS \"Datum\", - inhalt AS \"Inhalt\", inhalt_extern AS \"Inhalt extern\", iss.person_id AS \"PersonId\", iss.oe_kurzbz AS \"OE\", - ftyp.bezeichnung_mehrsprachig[".$LANGUAGE_INDEX."] AS \"Fehlertyp\", stat.bezeichnung_mehrsprachig[".$LANGUAGE_INDEX."] AS \"Fehlerstatus\", - verarbeitetvon AS \"Verarbeitet von\",verarbeitetamum AS \"Verarbeitet am\", fr.app AS \"Applikation\", - fr.fehlertyp_kurzbz AS \"Fehlertypcode\", iss.status_kurzbz AS \"Statuscode\", - pers.vorname AS \"Vorname\", pers.nachname AS \"Nachname\", - ( - /* show all relevant Studiengänge of person and wether it is an employee*/ - SELECT STRING_AGG(studiengang || ' ' || last_status, ' | ') - || (CASE WHEN EXISTS ( - SELECT 1 FROM public.tbl_mitarbeiter ma - JOIN public.tbl_benutzer ben ON ma.mitarbeiter_uid = ben.uid - WHERE person_id = prestudents.person_id - AND ben.aktiv - ) THEN ' | Mitarbeiter' ELSE '' END) - FROM ( - SELECT DISTINCT person_id, prestudent_id, UPPER(stg.typ || stg.kurzbz) AS studiengang, get_rolle_prestudent(ps.prestudent_id, null) AS last_status - FROM public.tbl_prestudent ps - JOIN public.tbl_studiengang stg USING (studiengang_kz) - WHERE person_id = pers.person_id - ORDER BY prestudent_id DESC - ) prestudents - WHERE last_status IN ('Abgewiesener','Aufgenommener', 'Student', 'Incoming', 'Diplomand', 'Abbrecher', 'Unterbrecher', 'Absolvent') - GROUP BY person_id - LIMIT 1; - ) AS \"Zugehörigkeit\", - CASE - WHEN - EXISTS(SELECT 1 - FROM zustaendigkeiten - WHERE fehlercode = iss.fehlercode - AND zustaendig = TRUE) /* If Zuständigkeit is defined for the oe/person, zustaendig. */ - THEN 'Ja' - WHEN - EXISTS(SELECT 1 - FROM zustaendigkeiten - WHERE fehlercode = iss.fehlercode - AND zustaendig = FALSE) /* If Zuständigkeit is defined for different oe/person, not zustaendig. */ - THEN 'Nein' - ELSE 'Ja' /* If no Zuständigkeit defined, zustaendig by default. */ - END AS \"Hauptzuständig\", - ( - SELECT string_agg(vorname || ' ' || nachname, ' | ' ORDER BY vorname, nachname) - FROM system.tbl_fehler_zustaendigkeiten - JOIN public.tbl_person USING (person_id) - WHERE fehlercode = fr.fehlercode - GROUP BY fehlercode - ) AS \"Person Zuständigkeiten\", - ( - SELECT string_agg(organisationseinheittyp_kurzbz || ' ' || oe.bezeichnung || COALESCE(' - ' || fu.beschreibung, ''), ' | ' ORDER BY bezeichnung, oe_kurzbz) - FROM system.tbl_fehler_zustaendigkeiten - LEFT JOIN public.tbl_organisationseinheit oe USING (oe_kurzbz) - LEFT JOIN public.tbl_funktion fu USING (funktion_kurzbz) - WHERE fehlercode = fr.fehlercode - GROUP BY fehlercode - ) AS \"Organisationseinheit Zuständigkeiten\", - pers.bpk AS \"BPK\", - pers.matr_nr AS \"Matrikelnummer\" - FROM system.tbl_issue iss - JOIN system.tbl_fehler fr USING (fehlercode) - JOIN system.tbl_fehlertyp ftyp USING (fehlertyp_kurzbz) - JOIN system.tbl_issue_status stat USING (status_kurzbz) - LEFT JOIN public.tbl_person pers ON iss.person_id = pers.person_id - WHERE EXISTS ( /* if oe or person is specified in fehler_zustaendigkeiten */ - SELECT 1 FROM zustaendigkeiten - WHERE fehlercode = iss.fehlercode - AND zustaendig = TRUE)"; +$query .= " + SELECT + issue_id, fehlercode AS \"Fehlercode\", iss.fehlercode_extern AS \"Fehlercode extern\", datum AS \"Datum\", + inhalt AS \"Inhalt\", inhalt_extern AS \"Inhalt extern\", iss.person_id AS \"PersonId\", iss.oe_kurzbz AS \"OE\", + ftyp.bezeichnung_mehrsprachig[".$language_index."] AS \"Fehlertyp\", + stat.bezeichnung_mehrsprachig[".$language_index."] AS \"Fehlerstatus\", + verarbeitetvon AS \"Verarbeitet von\",verarbeitetamum AS \"Verarbeitet am\", fr.app AS \"Applikation\", + fr.fehlertyp_kurzbz AS \"Fehlertypcode\", iss.status_kurzbz AS \"Statuscode\", + pers.vorname AS \"Vorname\", pers.nachname AS \"Nachname\", + ( + /* show all relevant Studiengänge of person and wether it is an employee*/ + SELECT + STRING_AGG(studiengang || ' ' || last_status, ' | ') + || (CASE WHEN EXISTS ( + SELECT 1 FROM public.tbl_mitarbeiter ma + JOIN public.tbl_benutzer ben ON ma.mitarbeiter_uid = ben.uid + WHERE person_id = prestudents.person_id + AND ben.aktiv + ) THEN ' | Mitarbeiter' ELSE '' END) + FROM ( + SELECT + DISTINCT person_id, prestudent_id, UPPER(stg.typ || stg.kurzbz) AS studiengang, + get_rolle_prestudent(ps.prestudent_id, null) AS last_status + FROM + public.tbl_prestudent ps + JOIN public.tbl_studiengang stg USING (studiengang_kz) + WHERE + person_id = pers.person_id + ORDER BY + prestudent_id DESC + ) prestudents + WHERE + last_status IN ('Abgewiesener','Aufgenommener', 'Student', 'Incoming', 'Diplomand', 'Abbrecher', 'Unterbrecher', 'Absolvent') + GROUP BY + person_id + LIMIT 1; + ) AS \"Zugehörigkeit\", + CASE + WHEN + EXISTS(SELECT 1 + FROM zustaendigkeiten + WHERE fehlercode = iss.fehlercode + AND zustaendig = TRUE) /* If Zuständigkeit is defined for the oe/person, zustaendig. */ + THEN 'Ja' + WHEN + EXISTS(SELECT 1 + FROM zustaendigkeiten + WHERE fehlercode = iss.fehlercode + AND zustaendig = FALSE) /* If Zuständigkeit is defined for different oe/person, not zustaendig. */ + THEN 'Nein' + ELSE 'Ja' /* If no Zuständigkeit defined, zustaendig by default. */ + END AS \"Hauptzuständig\", + ( + SELECT + string_agg(vorname || ' ' || nachname, ' | ' ORDER BY vorname, nachname) + FROM + system.tbl_fehler_zustaendigkeiten + JOIN public.tbl_person USING (person_id) + WHERE + fehlercode = fr.fehlercode + GROUP BY + fehlercode + ) AS \"Person Zuständigkeiten\", + ( + SELECT + string_agg(organisationseinheittyp_kurzbz || ' ' || oe.bezeichnung || + COALESCE(' - ' || fu.beschreibung, ''), ' | ' ORDER BY bezeichnung, oe_kurzbz) + FROM + system.tbl_fehler_zustaendigkeiten + LEFT JOIN public.tbl_organisationseinheit oe USING (oe_kurzbz) + LEFT JOIN public.tbl_funktion fu USING (funktion_kurzbz) + WHERE + fehlercode = fr.fehlercode + GROUP BY + fehlercode + ) AS \"Organisationseinheit Zuständigkeiten\", + pers.bpk AS \"BPK\", + pers.matr_nr AS \"Matrikelnummer\" + FROM + system.tbl_issue iss + JOIN system.tbl_fehler fr USING (fehlercode) + JOIN system.tbl_fehlertyp ftyp USING (fehlertyp_kurzbz) + JOIN system.tbl_issue_status stat USING (status_kurzbz) + LEFT JOIN public.tbl_person pers ON iss.person_id = pers.person_id + WHERE + fr.app IN ('core', 'dvuh') + AND ( + EXISTS ( /* if oe or person is specified in fehler_zustaendigkeiten */ + SELECT 1 FROM zustaendigkeiten + WHERE fehlercode = iss.fehlercode + AND zustaendig = TRUE)"; // show issue if it is assigend to oe of logged in user or to student of oe of logged in user if (!isEmptyArray($all_oe_kurzbz_berechtigt)) @@ -131,6 +154,7 @@ if (!isEmptyArray($all_oe_kurzbz_berechtigt)) ) )"; } +$query .= ") "; $query .= " ORDER BY CASE @@ -146,16 +170,16 @@ $query .= " ORDER BY datum DESC, fehlercode, issue_id DESC"; $filterWidgetArray = array( - 'query' => $query, + 'query' => $query, 'app' => 'core', 'datasetName' => 'issues', 'filter_id' => $this->input->get('filter_id'), - 'tableUniqueId' => 'issues', - 'requiredPermissions' => 'system/issues_verwalten', - 'datasetRepresentation' => 'tablesorter', + 'tableUniqueId' => 'issues', + 'requiredPermissions' => 'system/issues_verwalten', + 'datasetRepresentation' => 'tablesorter', 'checkboxes' => 'issue_id', - 'columnsAliases' => array( - 'ID', + 'columnsAliases' => array( + 'ID', ucfirst($this->p->t('fehlermonitoring', 'fehlercode')), ucfirst($this->p->t('fehlermonitoring', 'fehlercodeExtern')), ucfirst($this->p->t('global', 'datum')), @@ -176,10 +200,10 @@ $filterWidgetArray = array( ucfirst($this->p->t('fehlermonitoring', 'hauptzustaendig')), ucfirst($this->p->t('fehlermonitoring', 'zustaendigePersonen')), ucfirst($this->p->t('fehlermonitoring', 'zustaendigeOrganisationseinheiten')), - 'BPK', - 'Matrikelnummer' - ), - 'formatRow' => function($datasetRaw) { + 'BPK', + 'Matrikelnummer' + ), + 'formatRow' => function ($datasetRaw) { if ($datasetRaw->{'Fehlercode extern'} == null) { @@ -238,7 +262,7 @@ $filterWidgetArray = array( return $datasetRaw; }, - 'markRow' => function($datasetRaw) { + 'markRow' => function ($datasetRaw) { $mark = '';