From a7f51205b10296254717bd53799cc911220746ca Mon Sep 17 00:00:00 2001 From: ma0068 Date: Fri, 20 Sep 2024 11:41:44 +0200 Subject: [PATCH] =?UTF-8?q?Show=20=20K=C3=BCrzel=20Ma=20in=20Dropdown,=20F?= =?UTF-8?q?ilter=20current=20semester,=20adapt=20Berechtigungen,=20reload?= =?UTF-8?q?=20semester?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../api/frontend/v1/stv/Pruefung.php | 82 ++++-- .../models/education/Lehreinheit_model.php | 8 +- .../js/components/Stv/Studentenverwaltung.js | 3 +- .../Details/Pruefung/Pruefunglist.js | 246 +++++++----------- system/phrasesupdate.php | 80 ++++++ 5 files changed, 255 insertions(+), 164 deletions(-) diff --git a/application/controllers/api/frontend/v1/stv/Pruefung.php b/application/controllers/api/frontend/v1/stv/Pruefung.php index 25ff04e05..b29db123c 100644 --- a/application/controllers/api/frontend/v1/stv/Pruefung.php +++ b/application/controllers/api/frontend/v1/stv/Pruefung.php @@ -39,24 +39,78 @@ class Pruefung extends FHCAPI_Controller 'getLvsAndMas' => self::PERM_LOGGED, 'getMitarbeiterLv' => self::PERM_LOGGED, 'getNoten' => self::PERM_LOGGED, - 'insertPruefung' => ['admin:r', 'assistenz:r'], - 'updatePruefung' =>['admin:r', 'assistenz:r'], - 'deletePruefung' =>['admin:r', 'assistenz:r'], + 'insertPruefung' => ['admin:rw', 'assistenz:rw'], + 'updatePruefung' =>['admin:rw', 'assistenz:rw'], + 'deletePruefung' =>['admin:rw', 'assistenz:rw'], ]); //Load Models $this->load->model('education/LePruefung_model', 'PruefungModel'); - //TODO(Manu) check // Additional Permission Checks - //not working if activated? -/* if ($this->router->method == 'insertPruefung' - || $this->router->method == 'updatePruefung' - || $this->router->method == 'deletePruefung' - ) { - $prestudent_id = current(array_slice($this->uri->rsegments, 2)); + //TODO(Manu) avoid php warning: Message: Illegal offset type + //version with postParameter + if ($this->router->method == 'insertPruefung') { + + $student_uid = $this->input->post('student_uid'); + + $this->load->model('crm/Student_model', 'StudentModel'); + $result = $this->StudentModel->load($student_uid); + $student = $this->getDataOrTerminateWithError($result); + + $prestudent_id = current($student)->prestudent_id; + + + $this->checkPermissionsForPrestudent($prestudent_id, ['admin:w', 'assistenz:w']); + } + + // parameter from uri + if ($this->router->method == 'updatePruefung' || $this->router->method == 'deletePruefung') { + + $pruefung_id = current(array_slice($this->uri->rsegments, 2)); + + $result = $this->PruefungModel->load($pruefung_id); + $pruefung = $this->getDataOrTerminateWithError($result); + $student_uid = current($pruefung)->student_uid; + + + $this->load->model('crm/Student_model', 'StudentModel'); + $result = $this->StudentModel->load($student_uid); + $student = $this->getDataOrTerminateWithError($result); + $prestudent_id = current($student)->prestudent_id; + $this->checkPermissionsForPrestudent($prestudent_id, ['admin:rw', 'assistenz:rw']); - }*/ + } + + if ($this->router->method == 'loadPruefung') { + + $pruefung_id = current(array_slice($this->uri->rsegments, 2)); + + $result = $this->PruefungModel->load($pruefung_id); + $pruefung = $this->getDataOrTerminateWithError($result); + $student_uid = current($pruefung)->student_uid; + + + $this->load->model('crm/Student_model', 'StudentModel'); + $result = $this->StudentModel->load($student_uid); + $student = $this->getDataOrTerminateWithError($result); + $prestudent_id = current($student)->prestudent_id; + + $this->checkPermissionsForPrestudent($prestudent_id, ['admin:r', 'assistenz:r']); + } + + if ($this->router->method == 'getPruefungen') { + $student_uid = current(array_slice($this->uri->rsegments, 2)); + + // $this->terminateWithError($student_id, self::ERROR_TYPE_GENERAL); + + $this->load->model('crm/Student_model', 'StudentModel'); + $result = $this->StudentModel->load($student_uid); + $student = $this->getDataOrTerminateWithError($result); + $prestudent_id = current($student)->prestudent_id; + + $this->checkPermissionsForPrestudent($prestudent_id, ['admin:r', 'assistenz:r']); + } // Load language phrases $this->loadPhrases([ @@ -266,8 +320,6 @@ class Pruefung extends FHCAPI_Controller public function getAllLehreinheiten(){ - //TODO MANU (validations) - $lv_id = $this->input->post('lv_id'); $studiensemester_kurzbz = $this->input->post('studiensemester_kurzbz'); @@ -343,8 +395,8 @@ class Pruefung extends FHCAPI_Controller public function getLvsByStudent($student_uid, $studiensemester_kurzbz=null ) { //bei post request -/* $student_uid = $this->input->post('student_uid'); - $studiensemester_kurzbz = $this->input->post('studiensemester_kurzbz');*/ + /* $student_uid = $this->input->post('student_uid'); + $studiensemester_kurzbz = $this->input->post('studiensemester_kurzbz');*/ $this->load->model('education/Lehrveranstaltung_model', 'LehrveranstaltungModel'); diff --git a/application/models/education/Lehreinheit_model.php b/application/models/education/Lehreinheit_model.php index 3b7e8d330..68fe75fc5 100644 --- a/application/models/education/Lehreinheit_model.php +++ b/application/models/education/Lehreinheit_model.php @@ -31,7 +31,7 @@ class Lehreinheit_model extends DB_Model $this->addOrder('lehreinheit_id'); $les = $this->loadWhere( array('lehrveranstaltung_id' => $lehrveranstaltung_id, - 'studiensemester_kurzbz' => $studiensemester) + 'studiensemester_kurzbz' => $studiensemester) ); if (hasData($les)) @@ -139,16 +139,18 @@ class Lehreinheit_model extends DB_Model STRING_AGG(CONCAT(leg.semester, leg.verband, leg.gruppe), ' ') FROM lehre.tbl_lehreinheitgruppe leg WHERE leg.lehreinheit_id = le.lehreinheit_id - ) AS gruppe + ) AS gruppe, + tma.kurzbz as kuerzel FROM lehre.tbl_lehreinheit le JOIN lehre.tbl_lehrveranstaltung lv ON lv.lehrveranstaltung_id = le.lehrveranstaltung_id JOIN lehre.tbl_lehreinheitmitarbeiter ma USING (lehreinheit_id) + JOIN + public.tbl_mitarbeiter tma USING (mitarbeiter_uid) WHERE lv.lehrveranstaltung_id = ? - --AND le.studiensemester_kurzbz = 'WS2021' "; if (isset($studiensemester_kurzbz)) diff --git a/public/js/components/Stv/Studentenverwaltung.js b/public/js/components/Stv/Studentenverwaltung.js index 194b3b574..f30e30085 100644 --- a/public/js/components/Stv/Studentenverwaltung.js +++ b/public/js/components/Stv/Studentenverwaltung.js @@ -58,6 +58,7 @@ export default { hasPermissionToSkipStatusCheck: this.permissions['student/keine_studstatuspruefung'], hasPermissionRtAufsicht: this.permissions['lehre/reihungstestAufsicht'], lists: this.lists, + currentSemester: Vue.computed(() => this.studiensemesterKurzbz), defaultSemester: this.defaultSemester, $reloadList: () => { this.$refs.stvList.reload(); @@ -76,7 +77,7 @@ export default { student: { defaultaction: { type: "link", - action: function(data) { + action: function(data) { return FHC_JS_DATA_STORAGE_OBJECT.app_root + FHC_JS_DATA_STORAGE_OBJECT.ci_router + '/studentenverwaltung/student/' + data.uid; } }, diff --git a/public/js/components/Stv/Studentenverwaltung/Details/Pruefung/Pruefunglist.js b/public/js/components/Stv/Studentenverwaltung/Details/Pruefung/Pruefunglist.js index 757fca21f..70bc2369d 100644 --- a/public/js/components/Stv/Studentenverwaltung/Details/Pruefung/Pruefunglist.js +++ b/public/js/components/Stv/Studentenverwaltung/Details/Pruefung/Pruefunglist.js @@ -9,21 +9,17 @@ export default{ BsModal }, inject: { - defaultSemester: { - from: 'defaultSemester', + currentSemester: { + from: 'currentSemester', }, showHintKommPrfg: { from: 'configShowHintKommPrfg', default: false }, - showZgvErfuellt: { - from: 'configShowZgvErfuellt', - default: false - }, -/* $reloadList: { - from: '$reloadList', - required: true - }*/ + /* $reloadList: { + from: '$reloadList', + required: true + }*/ }, props: { uid: Number @@ -57,8 +53,8 @@ export default{ let button = document.createElement('button'); button.className = 'btn btn-outline-secondary btn-action'; - button.innerHTML = ''; - button.title = 'neue Prüfung aus dieser LV erstellen'; + button.innerHTML = ''; + button.title = this.$p.t('exam', 'newFromOld_pruefung'); button.addEventListener( 'click', (event) => @@ -69,7 +65,7 @@ export default{ button = document.createElement('button'); button.className = 'btn btn-outline-secondary btn-action'; button.innerHTML = ''; - button.title = 'Prüfung bearbeiten'; + button.title = this.$p.t('exam', 'edit_pruefung'); button.addEventListener( 'click', (event) => @@ -80,7 +76,7 @@ export default{ button = document.createElement('button'); button.className = 'btn btn-outline-secondary btn-action'; button.innerHTML = ''; - button.title = 'Prüfung löschen'; + button.title = this.$p.t('exam', 'delete_pruefung'); button.addEventListener( 'click', () => @@ -100,16 +96,28 @@ export default{ { event: 'tableBuilt', handler: async () => { - await this.$p.loadCategory(['fristenmanagement', 'global', 'person', 'ui',]); + //console.log('tableBuilt'); + + /* const filter = this.$refs.table.tabulator.getFilters().filter(filter => filter.field == 'studiensemester_kurzbz').pop(); + if (filter) { + this.isFilterSet = true; + if (this.currentSemester !== filter.value) { + this.$refs.table.tabulator.setFilter('studiensemester_kurzbz', '=', this.currentSemester); + } + }*/ + + await this.$p.loadCategory(['fristenmanagement', 'global', 'ui', 'exam']); let cm = this.$refs.table.tabulator.columnManager; - cm.getColumnByField('bezeichnung').component.updateDefinition({ - title: this.$p.t('global', 'typ') - }); + /* cm.getColumnByField('bezeichnung').component.updateDefinition({ + title: this.$p.t('global', 'typ') + });*/ cm.getColumnByField('anmerkung').component.updateDefinition({ title: this.$p.t('global', 'anmerkung') }); + + } } ], @@ -124,46 +132,34 @@ export default{ filter: false, statusNew: true, isStartDropDown: false, - currentSemester: false, - // componentKey: 0, + // componentKey: 0, isFilterSet: false, } }, computed:{ -/* lehrveranstaltungen(){ - return this.listLvsAndLes.filter((value, index, self) => { - return self.indexOf(value) === index; - }); - },*/ + /* lehrveranstaltungen(){ + return this.listLvsAndLes.filter((value, index, self) => { + return self.indexOf(value) === index; + }); + },*/ lv_teile(){ return this.listLvsAndLes.filter(lv => lv.lehrveranstaltung_id == this.pruefungData.lehrveranstaltung_id); }, lv_teile_ma(){ return this.listLvsAndMas.filter(lv => lv.lehrveranstaltung_id == this.pruefungData.lehrveranstaltung_id); - }, - semester_intern: { - get() { - if (this.currentSemester) - return this.currentSemester; - else - return false; - }, - set(value) { - this.currentSemester = value; - } - }, + } }, watch: { -/* defaultSemester(newVal, oldVal) { - if (newVal !== oldVal) { - console.log("variable did change"); - //this.reload(); // Methode aufrufen, um die Komponente neu zu laden - this.componentKey += 1; - } - }, - modelValue() { - this.$refs.table.reloadTable(); - }*/ + /* defaultSemester(newVal, oldVal) { + if (newVal !== oldVal) { + console.log("variable did change"); + //this.reload(); // Methode aufrufen, um die Komponente neu zu laden + this.componentKey += 1; + } + }, + modelValue() { + this.$refs.table.reloadTable(); + }*/ }, methods:{ loadPruefung(pruefung_id) { @@ -214,13 +210,13 @@ export default{ this.loadPruefung(pruefung_id).then(() => { if(this.pruefungData.pruefung_id) - this.$fhcAlert - .confirmDelete() - .then(result => result - ? pruefung_id - : Promise.reject({handled: true})) - .then(this.deletePruefung) - .catch(this.$fhcAlert.handleSystemError); + this.$fhcAlert + .confirmDelete() + .then(result => result + ? pruefung_id + : Promise.reject({handled: true})) + .then(this.deletePruefung) + .catch(this.$fhcAlert.handleSystemError); }); }, @@ -267,33 +263,34 @@ export default{ resetModal() { this.pruefungData = {}; -/* this.pruefungData.strasse = null; - this.pruefungData.zustellpruefunge = true; - this.pruefungData.heimatpruefunge = true; - this.pruefungData.rechnungspruefunge = false; - this.pruefungData.co_name = null; - this.pruefungData.firma_id = null; - this.pruefungData.name = null; - this.pruefungData.anmerkung = null; - this.pruefungData.typ = 'h'; - this.pruefungData.nation = 'A'; - this.pruefungData.plz = null;*/ + /* this.pruefungData.strasse = null; + this.pruefungData.zustellpruefunge = true; + this.pruefungData.heimatpruefunge = true; + this.pruefungData.rechnungspruefunge = false; + this.pruefungData.co_name = null; + this.pruefungData.firma_id = null; + this.pruefungData.name = null; + this.pruefungData.anmerkung = null; + this.pruefungData.typ = 'h'; + this.pruefungData.nation = 'A'; + this.pruefungData.plz = null;*/ this.statusNew = true; }, reload() { + console.log('reload triggered'); this.$refs.table.reloadTable(); }, -/* setFilter(semester) { - if (semester == 'open') - window.localStorage.setItem(LOCAL_STORAGE_ID_FILTER, this.filter ? 1 : 0); - else if( semester == 'default_semester') - this.$fhcApi.factory - .stv.filter.setSemester(this.defaultSemester) - .catch(this.$fhcAlert.handleSystemError); + /* setFilter(semester) { + if (semester == 'open') + window.localStorage.setItem(LOCAL_STORAGE_ID_FILTER, this.filter ? 1 : 0); + else if( semester == 'default_semester') + this.$fhcApi.factory + .stv.filter.setSemester(this.defaultSemester) + .catch(this.$fhcAlert.handleSystemError); - this.$nextTick(this.$refs.table.reloadTable); - },*/ + this.$nextTick(this.$refs.table.reloadTable); + },*/ getLvsByStudent(student_uid){ return this.$fhcApi.get('api/frontend/v1/stv/pruefung/getLvsByStudent/' + student_uid) .then(result => { @@ -301,18 +298,18 @@ export default{ }) .catch(this.$fhcAlert.handleSystemError); }, -/* //version post request -getLvsByStudent(student_uid, studiensemester_kurzbz){ - const data = { - student_uid: student_uid, - studiensemester_kurzbz: studiensemester_kurzbz - }; - return this.$fhcApi.post('api/frontend/v1/stv/pruefung/getLvsByStudent/', data) - .then(result => { - this.listLvs = result.data; - }) - .catch(this.$fhcAlert.handleSystemError); - },*/ + /* //version post request + getLvsByStudent(student_uid, studiensemester_kurzbz){ + const data = { + student_uid: student_uid, + studiensemester_kurzbz: studiensemester_kurzbz + }; + return this.$fhcApi.post('api/frontend/v1/stv/pruefung/getLvsByStudent/', data) + .then(result => { + this.listLvs = result.data; + }) + .catch(this.$fhcAlert.handleSystemError); + },*/ getMaFromLv(lv_id){ return this.$fhcApi.get('api/frontend/v1/stv/pruefung/getMitarbeiterLv/' + lv_id) .then(result => { @@ -335,7 +332,7 @@ getLvsByStudent(student_uid, studiensemester_kurzbz){ handleTypeChange(){ if( this.showHintKommPrfg && (this.pruefungData.pruefungstyp_kurzbz === 'kommPruef' - || this.pruefungData.pruefungstyp_kurzbz === 'zusKommPruef')){ + || this.pruefungData.pruefungstyp_kurzbz === 'zusKommPruef')){ //TODO(Manu) phrase this.pruefungData.anmerkung = 'Bitte bei Neuanlage einer kommissionellen Prüfung das Datum der Noteneintragung ' + @@ -345,14 +342,6 @@ getLvsByStudent(student_uid, studiensemester_kurzbz){ }, prepareDropdowns(){ - // Get Lvs from Student -/* this.getLvsByStudent(this.pruefungData.student_uid).then(() => { - - }).catch(error => { - console.error('Error loading Lvs:', error); - });*/ - - // Get Ma from Lv this.getMaFromLv(this.pruefungData.lehrveranstaltung_id).then(() => { }).catch(error => { @@ -366,18 +355,17 @@ getLvsByStudent(student_uid, studiensemester_kurzbz){ console.error('Error loading Lehreinheiten multiple:', error); }); - - this.$refs.pruefungModal.show(); }, onSwitchChange() { if (this.isFilterSet) { - console.log('filter gesetzt: ' + this.defaultSemester + ' uid ' + this.uid); - this.$refs.table.setFilter("studiensemester_kurzbz", "=", this.defaultSemester); + console.log('filter gesetzt: ' + this.currentSemester + ' uid ' + this.uid); + this.$refs.table.tabulator.setFilter("studiensemester_kurzbz", "=", this.currentSemester); //TODO(Manu) TypeError: this.$refs.table.setFilter is not a function } else { console.log('Alle anzeigen'); + this.$refs.table.tabulator.clearFilter("studiensemester_kurzbz"); } }, }, @@ -418,58 +406,28 @@ getLvsByStudent(student_uid, studiensemester_kurzbz){ {{showHintKommPrfg}} {{showZgvErfuellt}} - {{lv_teile}} -
- {{listLes}} - aktuelles Sem: {{defaultSemester}}
- current Sem: {{currentSemester}} + + aktuelles Sem: {{currentSemester}}
- - -
- - - + +
@@ -521,7 +479,7 @@ getLvsByStudent(student_uid, studiensemester_kurzbz){ :key="le.lehreinheit_id" :value="le.lehreinheit_id" > - {{le.kurzbz}}-{{le.lehrform_kurzbz}} {{le.bezeichnung}} {{le.gruppe}} ({{le.mitarbeiter_uid}}) + {{le.kurzbz}}-{{le.lehrform_kurzbz}} {{le.bezeichnung}} {{le.gruppe}} ({{le.kuerzel}}) @@ -614,8 +572,6 @@ getLvsByStudent(student_uid, studiensemester_kurzbz){
diff --git a/system/phrasesupdate.php b/system/phrasesupdate.php index 00ae67abc..5ca8dfc7a 100644 --- a/system/phrasesupdate.php +++ b/system/phrasesupdate.php @@ -30185,6 +30185,86 @@ array( ) ) ), + array( + 'app' => 'core', + 'category' => 'exam', + 'phrase' => 'add_pruefung', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => 'Prüfung hinzufügen', + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => 'Add exam', + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), + array( + 'app' => 'core', + 'category' => 'exam', + 'phrase' => 'edit_pruefung', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => 'Prüfung bearbeiten', + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => 'Edit exam', + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), + array( + 'app' => 'core', + 'category' => 'exam', + 'phrase' => 'delete_pruefung', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => 'Prüfung löschen', + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => 'Delete exam', + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), + array( + 'app' => 'core', + 'category' => 'exam', + 'phrase' => 'newFromOld_pruefung', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => 'Prüfungskopie für neue Prüfung erstellen', + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => 'Copy exam', + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), );