From f233b33093459af20ca5b9f19f342765fe5b8f53 Mon Sep 17 00:00:00 2001 From: ma0068 Date: Mon, 2 Jun 2025 10:29:14 +0200 Subject: [PATCH 1/5] add information to header --- .../Stv/Studentenverwaltung/Details.js | 46 ++++++++++++++++++- 1 file changed, 44 insertions(+), 2 deletions(-) diff --git a/public/js/components/Stv/Studentenverwaltung/Details.js b/public/js/components/Stv/Studentenverwaltung/Details.js index 483b6ca7d..a56c59e7f 100644 --- a/public/js/components/Stv/Studentenverwaltung/Details.js +++ b/public/js/components/Stv/Studentenverwaltung/Details.js @@ -63,11 +63,53 @@ export default {
profilbild + + +
-

{{students[0].titlepre}} {{students[0].vorname}} {{students[0].nachname}} {{students[0].titlepost}}

+

+ {{students[0].titelpre}} + {{students[0].vorname}} + {{students[0].nachname}} + {{students[0].titelpost}} +

+
+ Studiengang + {{students[0].studiengang}} + | Semester + {{students[0].semester}} + | Verband + {{students[0].verband}} + | Gruppe + {{students[0].gruppe}} +
+
+ Email + + {{students[0].mail_intern}} + + | Status + {{students[0].status}} + | MatrNr + {{students[0].matr_nr}} + | UID + {{students[0].uid}} + | Person ID + {{students[0].person_id}} +
+
- + +
From 7da8a9ed79cb00c02ec1ef207f2ae6fd3c64808f Mon Sep 17 00:00:00 2001 From: ma0068 Date: Tue, 3 Jun 2025 10:39:22 +0200 Subject: [PATCH 2/5] refactor header as component, show uid under profilpicture --- .../components/DetailHeader/DetailHeader.js | 100 ++++++++++++++++++ .../Stv/Studentenverwaltung/Details.js | 48 ++------- 2 files changed, 108 insertions(+), 40 deletions(-) create mode 100644 public/js/components/DetailHeader/DetailHeader.js diff --git a/public/js/components/DetailHeader/DetailHeader.js b/public/js/components/DetailHeader/DetailHeader.js new file mode 100644 index 000000000..49cbfbad8 --- /dev/null +++ b/public/js/components/DetailHeader/DetailHeader.js @@ -0,0 +1,100 @@ +export default { + name: 'DetailHeader', + props: { + headerData: { + type: Object, + required: true + }, + typeHeader: { + type: String, + default: 'student', + validator(value) { + return [ + 'student', + 'mitarbeiter', + ].includes(value) + } + } + }, + computed: { + appRoot() { + return FHC_JS_DATA_STORAGE_OBJECT.app_root; + }, + }, + data(){ + return{}; + }, + methods: { + //TODO(Manu) finish for Vertragsverwaltung + getVorgesetzer(){}, + }, + template: ` +
+ +
+ + {{person.uid}} +
+ +
+

+ {{headerData[0].titelpre}} + {{headerData[0].vorname}} + {{headerData[0].nachname}} + {{headerData[0].titelpost}} +

+ +
+ Studiengang + {{headerData[0].studiengang}} + | Semester + {{headerData[0].semester}} + | Verband + {{headerData[0].verband}} + | Gruppe + {{headerData[0].gruppe}} +
+
+ Team + {{headerData[0].studiengang}} + | Vorgesetzte*r + {{headerData[0].semester}} +
+ +
+ Email + + {{headerData[0].mail_intern}} + + | Status + {{headerData[0].status}} + | MatrNr + {{headerData[0].matr_nr}} + | UID + {{headerData[0].uid}} + | Person ID + {{headerData[0].person_id}} +
+
+ Email + + {{headerData[0].mail_intern}} + + | Durchwahl + {{headerData[0].status}} +
+ +
+ +
+ + ` +} \ No newline at end of file diff --git a/public/js/components/Stv/Studentenverwaltung/Details.js b/public/js/components/Stv/Studentenverwaltung/Details.js index a56c59e7f..3cfcc2061 100644 --- a/public/js/components/Stv/Studentenverwaltung/Details.js +++ b/public/js/components/Stv/Studentenverwaltung/Details.js @@ -1,4 +1,5 @@ import FhcTabs from "../../Tabs.js"; +import FhcHeader from "../../DetailHeader/DetailHeader.js"; import ApiStvApp from '../../../api/factory/stv/app.js'; @@ -8,7 +9,8 @@ import ApiStvApp from '../../../api/factory/stv/app.js'; export default { name: "DetailsPrestudent", components: { - FhcTabs + FhcTabs, + FhcHeader }, data() { return { @@ -61,45 +63,11 @@ export default { Bitte StudentIn auswählen!
-
- profilbild - - - -
-

- {{students[0].titelpre}} - {{students[0].vorname}} - {{students[0].nachname}} - {{students[0].titelpost}} -

-
- Studiengang - {{students[0].studiengang}} - | Semester - {{students[0].semester}} - | Verband - {{students[0].verband}} - | Gruppe - {{students[0].gruppe}} -
-
- Email - - {{students[0].mail_intern}} - - | Status - {{students[0].status}} - | MatrNr - {{students[0].matr_nr}} - | UID - {{students[0].uid}} - | Person ID - {{students[0].person_id}} -
- -
-
+ + Date: Wed, 4 Jun 2025 13:59:00 +0200 Subject: [PATCH 3/5] - show Profilpicture with lock symbol if foto_sperre - enable scrolling for multi view - show uid beneath profile picture - use phrases in detail header --- .../api/frontend/v1/stv/Students.php | 5 ++- .../components/DetailHeader/DetailHeader.js | 38 +++++++++++-------- 2 files changed, 26 insertions(+), 17 deletions(-) diff --git a/application/controllers/api/frontend/v1/stv/Students.php b/application/controllers/api/frontend/v1/stv/Students.php index 5fb7b592c..b2044a6d5 100644 --- a/application/controllers/api/frontend/v1/stv/Students.php +++ b/application/controllers/api/frontend/v1/stv/Students.php @@ -622,6 +622,8 @@ class Students extends FHCAPI_Controller $this->PrestudentModel->addSelect('ersatzkennzeichen'); $this->PrestudentModel->addSelect('gebdatum'); $this->PrestudentModel->addSelect('geschlecht'); + $this->PrestudentModel->addSelect('foto'); + $this->PrestudentModel->addSelect('foto_sperre'); // semester // verband @@ -629,6 +631,7 @@ class Students extends FHCAPI_Controller $this->PrestudentModel->addSelect('UPPER(stg.typ || stg.kurzbz) AS studiengang'); $this->PrestudentModel->addSelect('tbl_prestudent.studiengang_kz'); + $this->PrestudentModel->addSelect('stg.bezeichnung AS stg_bezeichnung'); $this->PrestudentModel->addSelect("s.matrikelnr"); $this->PrestudentModel->addSelect('p.person_id'); $this->PrestudentModel->addSelect('pls.status_kurzbz AS status'); @@ -640,7 +643,7 @@ class Students extends FHCAPI_Controller ); $this->PrestudentModel->addSelect(" CASE WHEN b.uid IS NOT NULL AND b.uid<>'' - THEN b.uid || " . $this->PrestudentModel->escape(DOMAIN) . " + THEN CONCAT(b.uid, '@', " . $this->PrestudentModel->escape(DOMAIN) . ") ELSE '' END AS mail_intern", false); $this->PrestudentModel->addSelect('p.anmerkung AS anmerkungen'); $this->PrestudentModel->addSelect('tbl_prestudent.anmerkung'); diff --git a/public/js/components/DetailHeader/DetailHeader.js b/public/js/components/DetailHeader/DetailHeader.js index 49cbfbad8..a50b39e8c 100644 --- a/public/js/components/DetailHeader/DetailHeader.js +++ b/public/js/components/DetailHeader/DetailHeader.js @@ -29,19 +29,27 @@ export default { getVorgesetzer(){}, }, template: ` -
+
Profilbild - {{person.uid}} + + + {{person.uid}}
@@ -53,17 +61,19 @@ export default {
- Studiengang - {{headerData[0].studiengang}} - | Semester + Person ID + {{headerData[0].person_id}} + | {{$p.t('lehre', 'studiengang')}} + {{headerData[0].stg_bezeichnung}} ({{headerData[0].studiengang}}) + | {{$p.t('lehre', 'semester')}} {{headerData[0].semester}} - | Verband + | {{$p.t('lehre', 'verband')}} {{headerData[0].verband}} - | Gruppe + | {{$p.t('lehre', 'gruppe')}} {{headerData[0].gruppe}}
- Team + Team / {{$p.t('lehre', 'kompetenzfeld')}} {{headerData[0].studiengang}} | Vorgesetzte*r {{headerData[0].semester}} @@ -76,19 +86,15 @@ export default { | Status {{headerData[0].status}} - | MatrNr + | {{$p.t('person', 'matrikelnummer')}} {{headerData[0].matr_nr}} - | UID - {{headerData[0].uid}} - | Person ID - {{headerData[0].person_id}}
Email {{headerData[0].mail_intern}} - | Durchwahl + | {{$p.t('kvp', 'op.label.phone')}} {{headerData[0].status}}
From ab059e9099b9c52406aa5b6eb629bbe6e40fd697 Mon Sep 17 00:00:00 2001 From: ma0068 Date: Wed, 11 Jun 2025 15:29:54 +0200 Subject: [PATCH 4/5] refactored detailFilter for Mitarbeiter --- .../api/frontend/v1/stv/Config.php | 7 +- public/js/api/factory/detailHeader.js | 37 +++ .../components/DetailHeader/DetailHeader.js | 252 +++++++++++++----- 3 files changed, 220 insertions(+), 76 deletions(-) create mode 100644 public/js/api/factory/detailHeader.js diff --git a/application/controllers/api/frontend/v1/stv/Config.php b/application/controllers/api/frontend/v1/stv/Config.php index 42de1b02f..138bdec67 100644 --- a/application/controllers/api/frontend/v1/stv/Config.php +++ b/application/controllers/api/frontend/v1/stv/Config.php @@ -29,6 +29,8 @@ class Config extends FHCAPI_Controller { + private $arr; + public function __construct() { // TODO(chris): permissions @@ -162,11 +164,12 @@ class Config extends FHCAPI_Controller 'changeStatusToAbsolvent' => $this->permissionlib->isBerechtigt('admin') ] ]; - $result['finalexam'] = [ - 'title' => $this->p->t('stv', 'tab_finalexam'), + $this->arr = [ + 'title' => $this->p->t('stv', 'tab_finalexam'), 'component' => './Stv/Studentenverwaltung/Details/Abschlusspruefung.js', 'config' => $config['finalexam'] ]; + $result['finalexam'] = $this->arr; Events::trigger('stv_conf_students', function & () use (&$result) { return $result; diff --git a/public/js/api/factory/detailHeader.js b/public/js/api/factory/detailHeader.js new file mode 100644 index 000000000..f9f368bc7 --- /dev/null +++ b/public/js/api/factory/detailHeader.js @@ -0,0 +1,37 @@ +/** + * Copyright (C) 2025 fhcomplete.org + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +export default { + getHeader(person_id){ + return { + method: 'get', + url: 'api/frontend/v1/vertraege/vertraege/getHeader/' + person_id, + }; + }, + getPersonAbteilung(person_id){ + return { + method: 'get', + url: 'api/frontend/v1/vertraege/vertraege/getPersonAbteilung/' + person_id, + }; + }, + getLeitungOrg(oekurzbz){ + return { + method: 'get', + url: 'api/frontend/v1/vertraege/vertraege/getLeitungOrg/' + oekurzbz, + }; + }, +} \ No newline at end of file diff --git a/public/js/components/DetailHeader/DetailHeader.js b/public/js/components/DetailHeader/DetailHeader.js index a50b39e8c..0b50c5153 100644 --- a/public/js/components/DetailHeader/DetailHeader.js +++ b/public/js/components/DetailHeader/DetailHeader.js @@ -1,9 +1,21 @@ +import ApiDetailHeader from "../../api/factory/detailHeader.js"; + export default { name: 'DetailHeader', + inject: { + domain: { + from: 'configDomain', + default: 'technikum-wien.at' + }, + }, props: { headerData: { type: Object, - required: true + required: false + }, + person_id: { + type: Number, + required: false }, typeHeader: { type: String, @@ -20,87 +32,179 @@ export default { appRoot() { return FHC_JS_DATA_STORAGE_OBJECT.app_root; }, + validatedHeaderData() { + if (this.typeHeader === 'student') return this.headerData; + if (this.typeHeader === 'mitarbeiter') return this.person_id; + return null; + } + }, + created(){ + if(this.person_id) { + this.getHeader(this.person_id); + + this.loadDepartmentData(this.person_id) + .then(() => { + // Call getLeitungOrg only after departmentData is loaded + this.getLeitungOrg(this.departmentData.oe_kurzbz); + }) + .catch((error) => { + console.error("Error loading department data:", error); + }); + } + }, + watch: { + person_id: { + handler(newVal) { + if (newVal) { + this.getHeader(this.person_id); + this.loadDepartmentData(this.person_id). + then(() => { + this.getLeitungOrg(this.departmentData.oe_kurzbz); + }); + } + }, + deep: true, + }, }, data(){ - return{}; + return{ + headerDataMa: {}, + departmentData: {}, + leitungData: {}, + }; }, methods: { - //TODO(Manu) finish for Vertragsverwaltung - getVorgesetzer(){}, + getHeader(person_id) { + return this.$api + .call(ApiDetailHeader.getHeader(person_id)) + .then(result => { + this.headerDataMa = result.data; + + }) + .catch(this.$fhcAlert.handleSystemError); + }, + loadDepartmentData(person_id) { + return this.$api + .call(ApiDetailHeader.getPersonAbteilung(person_id)) + .then(result => { + this.departmentData = result.data; + }) + .catch(this.$fhcAlert.handleSystemError); + }, + getLeitungOrg(oekurzbz){ + return this.$api + .call(ApiDetailHeader.getLeitungOrg(oekurzbz)) + .then(result => { + this.leitungData = result.data; + }) + .catch(this.$fhcAlert.handleSystemError); + }, + redirectToLeitung(){ + this.$emit('redirectToLeitung', { + person_id: this.leitungData.person_id}); + } }, template: `
+ + + +
` -} \ No newline at end of file +} From 4f56d799accf77eab4cbf3065f41d5229fe25a6a Mon Sep 17 00:00:00 2001 From: Harald Bamberger Date: Mon, 23 Jun 2025 07:43:39 +0200 Subject: [PATCH 5/5] remove private attribute --- application/controllers/api/frontend/v1/stv/Config.php | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/application/controllers/api/frontend/v1/stv/Config.php b/application/controllers/api/frontend/v1/stv/Config.php index 138bdec67..aed00ef27 100644 --- a/application/controllers/api/frontend/v1/stv/Config.php +++ b/application/controllers/api/frontend/v1/stv/Config.php @@ -29,8 +29,6 @@ class Config extends FHCAPI_Controller { - private $arr; - public function __construct() { // TODO(chris): permissions @@ -164,12 +162,11 @@ class Config extends FHCAPI_Controller 'changeStatusToAbsolvent' => $this->permissionlib->isBerechtigt('admin') ] ]; - $this->arr = [ + $result['finalexam'] = [ 'title' => $this->p->t('stv', 'tab_finalexam'), 'component' => './Stv/Studentenverwaltung/Details/Abschlusspruefung.js', 'config' => $config['finalexam'] ]; - $result['finalexam'] = $this->arr; Events::trigger('stv_conf_students', function & () use (&$result) { return $result;