From aad5f7bd5edc4937665601f93c3a955aea254f92 Mon Sep 17 00:00:00 2001 From: hainberg Date: Thu, 29 Aug 2019 14:19:01 +0200 Subject: [PATCH] Amended Lehrauftrag Controller - GUI with Tabulator-table Amended the Lehrauftrag Controller GUI: . corrected DB query . corrected processing of GET-params . corrected filter of tabulator (LE-ID caused problems -> now LE_ID) . now stg are retrieved by permission entitlement of user . implemented Tabulator filter and other properties/functions . minor GUI adaptations . added phrase --- .../lehre/lehrauftrag/Lehrauftrag.php | 56 +++--- .../views/lehre/lehrauftrag/lehrauftrag.php | 104 ++++++----- .../lehre/lehrauftrag/lehrauftragData.php | 168 +++++++++++++----- system/filtersupdate.php | 4 +- system/phrasesupdate.php | 22 ++- 5 files changed, 230 insertions(+), 124 deletions(-) diff --git a/application/controllers/lehre/lehrauftrag/Lehrauftrag.php b/application/controllers/lehre/lehrauftrag/Lehrauftrag.php index 847bc2f3d..b214916cd 100644 --- a/application/controllers/lehre/lehrauftrag/Lehrauftrag.php +++ b/application/controllers/lehre/lehrauftrag/Lehrauftrag.php @@ -1,10 +1,9 @@ 'infocenter:r' + 'index' => 'lehre/lehrauftrag_bestellen:r' ) ); // Load models - $this->load->model('education/Lehreinheit_model', 'LehreinheitModel'); - $this->load->model('education/Lehreinheitmitarbeiter_model', 'LehreinheitmitarbeiterModel'); $this->load->model('organisation/Studiensemester_model', 'StudiensemesterModel'); -// $this->load->model('organisation/Studiengang_model', 'StudiengangModel'); // TODO: delete? - $this->load->model('person/Benutzerfunktion_model', 'BenutzerfunktionModel'); - // TODO: check: WidgetLib notwendig? // Load libraries $this->load->library('WidgetLib'); + $this->load->library('PermissionLib'); // Load language phrases $this->loadPhrases( @@ -50,9 +45,6 @@ class Lehrauftrag extends Auth_Controller $this->_setAuthUID(); // sets property uid - //TODO: delete test user - //$this->_uid = 'testuser'; - $this->setControllerId(); // sets the controller id } @@ -63,31 +55,21 @@ class Lehrauftrag extends Auth_Controller */ public function index() { - echo '
', print_r($_GET, 1), '
'; - $studiengang_kz = $this->input->get('studiengang'); - $studiensemester_kurzbz = $this->input->get('studiensemester'); + // Set studiengang selected for studiengang dropdown + $studiengang_kz = $this->input->get('studiengang'); // if provided by selected studiengang + $studiengang_kz = ($studiengang_kz == 'null' ? null : $studiengang_kz); - // Set studiengang variable - if (!isset($studiengang_kz) || !is_numeric($studiengang_kz)) + // Retrieve studiengaenge the user is entitled for to populate studiengang dropdown + if (!$studiengang_kz_arr = $this->permissionlib->getSTG_isEntitledFor(self::BERECHTIGUNG_LEHRAUFTRAG_BESTELLEN)) { - $benutzerfunktion = $this->BenutzerfunktionModel->getSTGLByUID($this->_uid); - - $studiengang_kz_arr = array(); - if (hasData($benutzerfunktion)) - { - foreach ($benutzerfunktion->retval as $benutzerfkt) - { - $studiengang_kz_arr[] = $benutzerfkt->studiengang_kz; - } - } - elseif (isError($benutzerfunktion)) - { - show_error($benutzerfunktion->error); - } + show_error('Fehler bei Berechtigungsprüfung'); } - // Set studiensemester variable - if (!isset($studiensemester_kurzbz) || !is_string($studiensemester_kurzbz)) + + // Set studiensemester selected for studiengang dropdown + $studiensemester_kurzbz = $this->input->get('studiensemester'); // if provided by selected studiensemester + + if (is_null($studiensemester_kurzbz)) // else set next studiensemester as default value { $studiensemester = $this->StudiensemesterModel->getNext(); if (hasData($studiensemester)) @@ -99,15 +81,17 @@ class Lehrauftrag extends Auth_Controller show_error($studiensemester->error); } } + $view_data = array( + 'studiengang_selected' => $studiengang_kz, 'studiengang' => $studiengang_kz_arr, - 'studiensemester' => $studiensemester_kurzbz + 'studiensemester_selected' => $studiensemester_kurzbz ); + $this->load->view('lehre/lehrauftrag/lehrauftrag.php', $view_data); } - // ----------------------------------------------------------------------------------------------------------------- // Private methods diff --git a/application/views/lehre/lehrauftrag/lehrauftrag.php b/application/views/lehre/lehrauftrag/lehrauftrag.php index 098bb448f..7742f05f8 100644 --- a/application/views/lehre/lehrauftrag/lehrauftrag.php +++ b/application/views/lehre/lehrauftrag/lehrauftrag.php @@ -16,58 +16,74 @@ $this->load->view( 'filterwidget' => true, 'navigationwidget' => true, 'phrases' => array( - 'person' => array('vorname', 'nachname'), - 'global' => array('mailAnXversandt'), - 'ui' => array('bitteEintragWaehlen') + 'global' => array('lehrauftraege'), ), 'customCSSs' => 'public/css/sbadmin2/tablesort_bootstrap.css', - 'customJSs' => array('public/js/bootstrapper.js', '') + 'customJSs' => array('public/js/bootstrapper.js') ) ); ?> +
+
+
+
+
+ +
+
+ +
+ widgetlib->widget( + 'Studiensemester_widget', + array( + DropdownWidget::SELECTED_ELEMENT => $studiensemester_selected + ), + array( + 'name' => 'studiensemester', + 'id' => 'studiensemester' + ) + ); + ?> +
+
+ widgetlib->widget( + 'Studiengang_widget', + array( + DropdownWidget::SELECTED_ELEMENT => $studiengang_selected, + 'studiengang' => $studiengang + ), + array( + 'name' => 'studiengang', + 'id' => 'studiengang' + ) + ); + ?> +
+ + +
+
-
- -
- - widgetlib->widget( - 'Studiengang_widget', - array( - DropdownWidget::SELECTED_ELEMENT => $studiengang[0], - 'studiengang' => $studiengang - ), - array( - 'name' => 'studiengang', - 'id' => 'studiengang', - 'class' => 'form-control' - ) - ); - ?> -
-
- - widgetlib->widget( - 'Studiensemester_widget', - array( - DropdownWidget::SELECTED_ELEMENT => $studiensemester - ), - array( - 'name' => 'studiensemester', - 'id' => 'studiensemester', - 'class' => 'form-control' - ) - ); - ?> -
- -
-
- load->view('lehre/lehrauftrag/lehrauftragData.php'); ?> -
+
+ load->view('lehre/lehrauftrag/lehrauftragData.php'); ?> +
+
+
+ + + +
+
+ +
+
+ load->view('templates/FHC-Footer'); ?> diff --git a/application/views/lehre/lehrauftrag/lehrauftragData.php b/application/views/lehre/lehrauftrag/lehrauftragData.php index 8abc5dc46..f8166bf15 100644 --- a/application/views/lehre/lehrauftrag/lehrauftragData.php +++ b/application/views/lehre/lehrauftrag/lehrauftragData.php @@ -1,53 +1,122 @@ = 0 + + +UNION + +/* Projektbetreuungsaufträge and -vertragsstati */ +SELECT + pa.lehreinheit_id AS "LE_ID", + \'Betreuung\' AS "Typ", + (betreuerart_kurzbz || \' \' || + (SELECT + vorname || \' \' || nachname + FROM + public.tbl_person + JOIN public.tbl_benutzer USING (person_id) + WHERE + uid = pa.student_uid) + || \' [\' || projekttyp_kurzbz || \'arbeit\' || \' \' || lv.semester || \'.Semester]\') AS "Auftrag", + CASE + WHEN oe.organisationseinheittyp_kurzbz = \'Kompetenzfeld\' THEN (\'KF \' || oe.bezeichnung) + WHEN oe.organisationseinheittyp_kurzbz = \'Department\' THEN (\'DEP \' || oe.bezeichnung) + ELSE (oe.organisationseinheittyp_kurzbz || \' \' || oe.bezeichnung) + END AS "Organisationseinheit", + CONCAT(stg.kurzbzlang, \'-\', legr.semester, legr.verband, legr.gruppe, \'\n\' || legr.gruppe_kurzbz) AS "Gruppe", + (vorname || \' \' || nachname) AS "Lektor", + TRUNC(pb.stunden, 1) AS "Stunden", + TRUNC((pb.stunden * pb.stundensatz), 2) AS "Betrag", + CASE + /* existing contracts for given study semester with status bestellt */ + WHEN pb.vertrag_id NOTNULL AND vertrag.vertragsstunden_studiensemester_kurzbz = \''. $STUDIENSEMESTER. '\' AND + vvs.vertragsstatus_kurzbz = \'bestellt\' THEN vvs.datum + END AS "Bestellt", + CASE + /* existing contracts for given study semester with status erteilt */ + WHEN pb.vertrag_id NOTNULL AND vertrag.vertragsstunden_studiensemester_kurzbz = \''. $STUDIENSEMESTER. '\' AND + vvs.vertragsstatus_kurzbz = \'erteilt\' THEN vvs.datum + END AS "Erteilt", + CASE + /* existing contracts for given study semester with status akzeptiert */ + WHEN pb.vertrag_id NOTNULL AND vertrag.vertragsstunden_studiensemester_kurzbz = \''. $STUDIENSEMESTER. '\' AND + vvs.vertragsstatus_kurzbz = \'akzeptiert\' THEN vvs.datum + END AS "Akzeptiert" +FROM + lehre.tbl_projektbetreuer pb + JOIN lehre.tbl_projektarbeit pa USING (projektarbeit_id) + JOIN lehre.tbl_lehreinheit le USING (lehreinheit_id) + JOIN lehre.tbl_lehrveranstaltung lv USING (lehrveranstaltung_id) + JOIN public.tbl_organisationseinheit oe USING (oe_kurzbz) + JOIN lehre.tbl_lehreinheitgruppe legr USING (lehreinheit_id) + JOIN public.tbl_person person USING (person_id) + LEFT JOIN lehre.tbl_vertrag vertrag USING (vertrag_id) + LEFT JOIN lehre.tbl_vertrag_vertragsstatus vvs USING (vertrag_id) + LEFT JOIN lehre.tbl_vertragsstatus status USING (vertragsstatus_kurzbz) + JOIN public.tbl_studiengang stg ON stg.studiengang_kz = lv.studiengang_kz +WHERE + /* filter studiengang */ + lv.studiengang_kz IN ('. implode(',', $STUDIENGANG) . ') + /* filter studiensemester */ + AND le.studiensemester_kurzbz = \''. $STUDIENSEMESTER. '\' + /* filter active lehrveranstaltungen */ + AND lv.aktiv = TRUE + +ORDER BY "Typ" DESC, "Auftrag", "Lektor" '; @@ -56,35 +125,52 @@ $filterWidgetArray = array( 'app' => Lehrauftrag::APP, 'datasetName' => 'lehrauftragOrder', 'filterKurzbz' => 'LehrauftragOrder', - //'filter_id' => $this->input->get('filter_id'), - 'requiredPermissions' => 'infocenter', // TODO: change permission + 'requiredPermissions' => 'lehre', // TODO: change permission 'datasetRepresentation' => 'tabulator', - 'reloadDataset' => ($this->input->get('reloadDataset') == 'true' ? true : false), // TODO: needed? - //'customMenu' => true, + 'customMenu' => false, 'hideOptions' => true, 'hideMenu' => true, - 'columnsAliases' => array( - ucfirst($this->p->t('person', 'vorname')) + 'columnsAliases' => array( // TODO: use phrasen + 'LE-ID', + ucfirst($this->p->t('global', 'typ')), + 'Auftrag', + 'Organisationseinheit', + 'Gruppe', + 'Lektor', + 'Stunden', + 'Betrag', + 'Bestellt', + 'Erteilt', + 'Akzeptiert' ), - 'markRow' => function($datasetRaw) { - - $mark = ''; - - if ($datasetRaw->LockDate != null) + 'formatRow' => function($datasetRaw) { + if (is_null($datasetRaw->{'Betrag'})) { - $mark = FilterWidget::DEFAULT_MARK_ROW_CLASS; + $datasetRaw->{'Betrag'} = 'Stundensatz fehlt'; } - - // Parking has priority over locking - if ($datasetRaw->ParkDate != null) - { - $mark = "text-info"; - } - - return $mark; + return $datasetRaw; }, - 'datasetRepOptions' => '{height: 300}', // tabulator properties - 'datasetRepFieldsDefs' => '{Vorname: {width: 400}}' // col properties + 'datasetRepOptions' => '{ + height: 700, + selectable: true, // allows row selection + selectableRangeMode: "click", // allows range selection using shift end click on end of range + movableColumns: true, // allows changing column + pagination: "local", // paginates the data + paginationSize: 15 // rows allowed per page + }', // tabulator properties + 'datasetRepFieldsDefs' => '{ + LE_ID: {headerFilter:"input", headerFilterPlaceholder:" "}, + Typ: {headerFilter:"input", headerFilterPlaceholder:" "}, + Auftrag: {headerFilter:"input", headerFilterPlaceholder:" "}, + Organisationseinheit: {headerFilter:"input", headerFilterPlaceholder:" "}, + Gruppe: {headerFilter:"input", headerFilterPlaceholder:" "}, + Lektor: {headerFilter:"input", headerFilterPlaceholder:" "}, + Stunden: {align:"right", headerFilter:"input", headerFilterPlaceholder:" "}, + Betrag: {align:"right", headerFilter:"input", headerFilterPlaceholder:">=", headerFilterFunc:">="}, + Bestellt: {align:"center", headerFilter:"input", headerFilterPlaceholder:" "}, + Erteilt: {align:"center", headerFilter:"input", headerFilterPlaceholder:" "}, + Akzeptiert: {align:"center", headerFilter:"input", headerFilterPlaceholder:" "} + }', // col properties ); echo $this->widgetlib->widget('FilterWidget', $filterWidgetArray); diff --git a/system/filtersupdate.php b/system/filtersupdate.php index 19ebea0f9..a31fe702e 100644 --- a/system/filtersupdate.php +++ b/system/filtersupdate.php @@ -408,9 +408,9 @@ $filters = array( 'default_filter' => true, 'filter' => ' { - "name": "Lehrauftragsstatus", + "name": "", "columns": [ - {"name": "LE-ID"}, + {"name": "LE_ID"}, {"name": "Typ"}, {"name": "Auftrag"}, {"name": "Organisationseinheit"}, diff --git a/system/phrasesupdate.php b/system/phrasesupdate.php index 0ee2aeda5..b39280a29 100644 --- a/system/phrasesupdate.php +++ b/system/phrasesupdate.php @@ -3450,7 +3450,27 @@ $phrases = array( 'insertvon' => 'system' ) ) - ) + ), + array( + 'app' => 'core', + 'category' => 'global', + 'phrase' => 'lehrauftraege', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => 'Lehraufträge', + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => 'Lectureships', + 'description' => '', + 'insertvon' => 'system' + ) + ) + ) );