From efcef48f89495172093bccee2a4940b967022f58 Mon Sep 17 00:00:00 2001 From: Cris Date: Mon, 9 May 2022 11:14:01 +0200 Subject: [PATCH 001/351] Changed Sanchomail 'From' to noreply --- application/helpers/hlp_sancho_helper.php | 2 +- include/sancho.inc.php | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/application/helpers/hlp_sancho_helper.php b/application/helpers/hlp_sancho_helper.php index d599e40bc..e57802432 100644 --- a/application/helpers/hlp_sancho_helper.php +++ b/application/helpers/hlp_sancho_helper.php @@ -49,7 +49,7 @@ function sendSanchoMail($vorlage_kurzbz, $vorlage_data, $to, $subject, $headerIm if ($from == '') { - $from = 'sancho@'.DOMAIN; + $from = 'noreply@'.DOMAIN; } // Embed sancho header and footer image diff --git a/include/sancho.inc.php b/include/sancho.inc.php index 5fc6fcdab..0d5c8e8a4 100644 --- a/include/sancho.inc.php +++ b/include/sancho.inc.php @@ -40,7 +40,7 @@ const DEFAULT_SANCHO_FOOTER_IMG = 'sancho_footer_DEFAULT.jpg'; */ function sendSanchoMail($vorlage_kurzbz, $vorlage_data, $to, $subject, $headerImg = DEFAULT_SANCHO_HEADER_IMG, $footerImg = DEFAULT_SANCHO_FOOTER_IMG, $replyTo = '', $cc = '') { - $from = 'sancho@'. DOMAIN; + $from = 'noreply@'. DOMAIN; $sanchoHeader_img = dirname(__FILE__). '/../skin/images/sancho/'. $headerImg; $sanchoFooter_img = dirname(__FILE__). '/../skin/images/sancho/'. $footerImg; From c39174980cd78bb6e44a273696dc886c141ac14e Mon Sep 17 00:00:00 2001 From: Cris Date: Mon, 9 May 2022 15:34:22 +0200 Subject: [PATCH 002/351] Fixed function _getSTGLMailAddress to return same array structure Different structure was causing errors in handling. --- application/controllers/jobs/AnrechnungJob.php | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/application/controllers/jobs/AnrechnungJob.php b/application/controllers/jobs/AnrechnungJob.php index f32a8268a..4c341af50 100644 --- a/application/controllers/jobs/AnrechnungJob.php +++ b/application/controllers/jobs/AnrechnungJob.php @@ -358,8 +358,6 @@ html; 'vorname' => $stgl->vorname ); } - - return $stglMailAdress_arr; } // If not available, get assistance mail address else @@ -368,12 +366,13 @@ html; if (hasData($result)) { - return array( - $result->retval[0]->email, - '' + $stglMailAdress_arr[]= array( + 'to' => $result->retval[0]->email, + 'vorname' => '' ); } } + return $stglMailAdress_arr; } // Build HTML table with yesterdays new Anrechnungen of the given STG From 06179ee7148e6c4830c60be654221486d7987c94 Mon Sep 17 00:00:00 2001 From: Paolo Date: Thu, 23 Mar 2023 14:38:42 +0100 Subject: [PATCH 003/351] Code quality check fixes --- application/helpers/hlp_sancho_helper.php | 25 +++++++++++++++++++++-- 1 file changed, 23 insertions(+), 2 deletions(-) diff --git a/application/helpers/hlp_sancho_helper.php b/application/helpers/hlp_sancho_helper.php index e57802432..f101ce89d 100644 --- a/application/helpers/hlp_sancho_helper.php +++ b/application/helpers/hlp_sancho_helper.php @@ -38,7 +38,17 @@ const DEFAULT_SANCHO_FOOTER_IMG = 'sancho_footer_DEFAULT.jpg'; * @param string $bcc Sets BCC of mail. * @return void */ -function sendSanchoMail($vorlage_kurzbz, $vorlage_data, $to, $subject, $headerImg = DEFAULT_SANCHO_HEADER_IMG, $footerImg = DEFAULT_SANCHO_FOOTER_IMG, $from = null, $cc = null, $bcc = null) +function sendSanchoMail( + $vorlage_kurzbz, + $vorlage_data, + $to, + $subject, + $headerImg = DEFAULT_SANCHO_HEADER_IMG, + $footerImg = DEFAULT_SANCHO_FOOTER_IMG, + $from = null, + $cc = null, + $bcc = null +) { $ci =& get_instance(); $ci->load->library('email'); @@ -74,7 +84,18 @@ function sendSanchoMail($vorlage_kurzbz, $vorlage_data, $to, $subject, $headerIm $body = _parseMailContent('Sancho_Mail_Template', $layout); // Send mail - return $ci->maillib->send($from, $to, $subject, $body, $alias = '', $cc, $bcc, $altMessage = '', $bulk = true, $autogenerated = true); + return $ci->maillib->send( + $from, + $to, + $subject, + $body, + '', // alias + $cc, + $bcc, + '', // altMessage + true, // bulk + true // autogenerated + ); } /** From d254b9c10b7066ed481d28952e8d7c4747a568d6 Mon Sep 17 00:00:00 2001 From: ma0068 Date: Fri, 23 Aug 2024 11:58:08 +0200 Subject: [PATCH 004/351] Start Tab Pruefung, Abfrage Pruefungen --- .../api/frontend/v1/stv/Config.php | 4 + .../api/frontend/v1/stv/Pruefung.php | 48 +++++++++ .../models/education/LePruefung_model.php | 41 +++++++ .../Studentenverwaltung/Details/Pruefung.js | 25 +++++ .../Details/Pruefung/Pruefunglist.js | 101 ++++++++++++++++++ system/phrasesupdate.php | 20 ++++ 6 files changed, 239 insertions(+) create mode 100644 application/controllers/api/frontend/v1/stv/Pruefung.php create mode 100644 public/js/components/Stv/Studentenverwaltung/Details/Pruefung.js create mode 100644 public/js/components/Stv/Studentenverwaltung/Details/Pruefung/Pruefunglist.js diff --git a/application/controllers/api/frontend/v1/stv/Config.php b/application/controllers/api/frontend/v1/stv/Config.php index c28c49485..bfff14580 100644 --- a/application/controllers/api/frontend/v1/stv/Config.php +++ b/application/controllers/api/frontend/v1/stv/Config.php @@ -97,6 +97,10 @@ class Config extends FHCAPI_Controller 'component' => './Stv/Studentenverwaltung/Details/Noten.js' ]; */ + $result['exam'] = [ + 'title' => $this->p->t('stv', 'tab_exam'), + 'component' => './Stv/Studentenverwaltung/Details/Pruefung.js' + ]; Events::trigger('stv_conf_student', function & () use (&$result) { return $result; diff --git a/application/controllers/api/frontend/v1/stv/Pruefung.php b/application/controllers/api/frontend/v1/stv/Pruefung.php new file mode 100644 index 000000000..60666c610 --- /dev/null +++ b/application/controllers/api/frontend/v1/stv/Pruefung.php @@ -0,0 +1,48 @@ +. + */ + +if (! defined('BASEPATH')) exit('No direct script access allowed'); + +/** + * This controller operates between (interface) the JS (GUI) and the back-end + * Provides data to the ajax get calls about addresses + * This controller works with JSON calls on the HTTP GET or POST and the output is always JSON + */ +class Pruefung extends FHCAPI_Controller +{ + public function __construct() + { + //TODO(Manu) Berechtigungen + parent::__construct([ + 'getPruefungen' => self::PERM_LOGGED + ]); + + //Load Models + $this->load->model('education/LePruefung_model', 'PruefungModel'); + } + + public function getPruefungen($student_uid, $studiensemester_kurzbz = null) + { + $result = $this->PruefungModel->getPruefungenByStudentuid($student_uid); + + $data = $this->getDataOrTerminateWithError($result); + + $this->terminateWithSuccess($data); + } + +} diff --git a/application/models/education/LePruefung_model.php b/application/models/education/LePruefung_model.php index ac6c7f9b2..5522a3998 100644 --- a/application/models/education/LePruefung_model.php +++ b/application/models/education/LePruefung_model.php @@ -11,4 +11,45 @@ class LePruefung_model extends DB_Model $this->dbTable = 'lehre.tbl_pruefung'; $this->pk = 'pruefung_id'; } + + /** + * CI_STYLE + * @param string $student_uid + * @param string $studiensemester_kurzbz + * + * @return stdClass + */ + public function getPruefungenByStudentuid($student_uid, $studiensemester_kurzbz = null) + { + $this->addSelect('tbl_pruefung.datum'); + $this->addSelect("TO_CHAR(tbl_pruefung.datum::timestamp, 'DD.MM.YYYY') AS format_datum"); + $this->addSelect('tbl_pruefung.anmerkung'); + $this->addSelect('tbl_pruefung.pruefungstyp_kurzbz'); + $this->addSelect('tbl_pruefung.pruefung_id'); + $this->addSelect('tbl_pruefung.lehreinheit_id'); + $this->addSelect('tbl_pruefung.student_uid'); + $this->addSelect('tbl_pruefung.mitarbeiter_uid'); + $this->addSelect('tbl_pruefung.punkte'); + + $this->addSelect('tbl_lehrveranstaltung.bezeichnung as lehrveranstaltung_bezeichnung'); + $this->addSelect('tbl_lehrveranstaltung.lehrveranstaltung_id'); + $this->addSelect('tbl_note.bezeichnung as note_bezeichnung'); + $this->addSelect('tbl_pruefungstyp.beschreibung as typ_beschreibung'); + $this->addSelect('tbl_lehreinheit.studiensemester_kurzbz as studiensemester_kurzbz'); + + $this->addJoin('lehre.tbl_lehreinheit', 'lehre.tbl_pruefung.lehreinheit_id=lehre.tbl_lehreinheit.lehreinheit_id'); + $this->addJoin('lehre.tbl_lehrveranstaltung', 'lehrveranstaltung_id'); + $this->addJoin('lehre.tbl_note', 'note'); + $this->addJoin('lehre.tbl_pruefungstyp', 'pruefungstyp_kurzbz'); + + if ($studiensemester_kurzbz) + $this->db->where("tbl_lehreinheit.studiensemester_kurzbz = ", $studiensemester_kurzbz); + + $this->addOrder('tbl_pruefung.datum', 'DESC'); + $this->addOrder('tbl_pruefung.pruefung_id', 'DESC'); + + return $this->loadWhere([ + 'student_uid' => $student_uid + ]); + } } diff --git a/public/js/components/Stv/Studentenverwaltung/Details/Pruefung.js b/public/js/components/Stv/Studentenverwaltung/Details/Pruefung.js new file mode 100644 index 000000000..eb43e36be --- /dev/null +++ b/public/js/components/Stv/Studentenverwaltung/Details/Pruefung.js @@ -0,0 +1,25 @@ +import PruefungList from "./Pruefung/Pruefunglist.js"; + +export default { + components: { + PruefungList + }, + props: { + modelValue: Object, + config: Object + }, + data() { + return { + pruefungen: [] + } + }, + template: ` +
+ + {{modelValue}} +
+ + +
+
` +}; \ No newline at end of file diff --git a/public/js/components/Stv/Studentenverwaltung/Details/Pruefung/Pruefunglist.js b/public/js/components/Stv/Studentenverwaltung/Details/Pruefung/Pruefunglist.js new file mode 100644 index 000000000..6f034e087 --- /dev/null +++ b/public/js/components/Stv/Studentenverwaltung/Details/Pruefung/Pruefunglist.js @@ -0,0 +1,101 @@ +import {CoreFilterCmpt} from "../../../../filter/Filter.js"; +import FormInput from "../../../../Form/Input.js"; + +export default{ + components: { + CoreFilterCmpt, + FormInput + }, + inject: { + defaultSemester: { + from: 'defaultSemester', + }, + }, + props: { + uid: Number + }, + data(){ + return { + tabulatorOptions: { + ajaxURL: 'api/frontend/v1/stv/pruefung/getPruefungen/' + this.uid, + ajaxRequestFunc: this.$fhcApi.get, + ajaxResponse: (url, params, response) => response.data, + columns: [ + {title: "Datum", field: "format_datum"}, + {title: "Lehrveranstaltung", field: "lehrveranstaltung_bezeichnung"}, + {title: "Note", field: "note_bezeichnung"}, + {title: "Anmerkung", field: "anmerkung"}, + {title: "Typ", field: "pruefungstyp_kurzbz"}, + {title: "PruefungId", field: "pruefung_id", visible:false}, + {title: "LehreinheitId", field: "lehreinheit_id", visible:false}, + {title: "Student_uid", field: "student_uid", visible:false}, + {title: "Mitarbeiter_uid", field: "mitarbeiter_uid", visible:false}, + {title: "Punkte", field: "punkte", visible:false}, + ], + layout: 'fitDataFill', + layoutColumnsOnNewData: false, + height: 'auto', + }, + tabulatorEvents: [{}], + pruefungData: {}, + filter: false + } + }, + computed:{}, +/* watch: { + modelValue() { + this.$refs.table.reloadTable(); + } + },*/ + methods:{ }, + template: ` +
+ +
+ + + +
+ +
+ +
+ + +
+ +
+

Form

+ + aktuelles Sem: {{defaultSemester}} + +
+
+
` +}; + diff --git a/system/phrasesupdate.php b/system/phrasesupdate.php index 56a7304d4..00ae67abc 100644 --- a/system/phrasesupdate.php +++ b/system/phrasesupdate.php @@ -29300,6 +29300,26 @@ array( ) ) ), + array( + 'app' => 'core', + 'category' => 'stv', + 'phrase' => 'tab_exam', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => 'Prüfung', + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => 'Exam', + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), // konto array( 'app' => 'core', From de0fbdb72c8bbb7d1eb1084d33e8283fb7dd364d Mon Sep 17 00:00:00 2001 From: ma0068 Date: Thu, 29 Aug 2024 09:53:34 +0200 Subject: [PATCH 005/351] Form, Table and Queries for new Tab Pruefung --- .../api/frontend/v1/stv/Pruefung.php | 273 +++++++++- .../models/education/LePruefung_model.php | 2 +- .../models/education/Lehreinheit_model.php | 53 ++ application/models/education/Note_model.php | 14 + .../models/ressource/Mitarbeiter_model.php | 24 + .../Studentenverwaltung/Details/Pruefung.js | 2 +- .../Details/Pruefung/Pruefunglist.js | 481 ++++++++++++++++-- 7 files changed, 811 insertions(+), 38 deletions(-) create mode 100644 application/models/education/Note_model.php diff --git a/application/controllers/api/frontend/v1/stv/Pruefung.php b/application/controllers/api/frontend/v1/stv/Pruefung.php index 60666c610..9ddd22897 100644 --- a/application/controllers/api/frontend/v1/stv/Pruefung.php +++ b/application/controllers/api/frontend/v1/stv/Pruefung.php @@ -29,7 +29,19 @@ class Pruefung extends FHCAPI_Controller { //TODO(Manu) Berechtigungen parent::__construct([ - 'getPruefungen' => self::PERM_LOGGED + 'getPruefungen' => ['admin:r', 'assistenz:r'], + 'loadPruefung' => ['admin:r', 'assistenz:r'], + 'getTypenPruefungen' => self::PERM_LOGGED, + 'getLehreinheiten' => self::PERM_LOGGED, + 'getAllLehreinheiten' => self::PERM_LOGGED, + 'getLvsByStudent' => self::PERM_LOGGED, + 'getLvsandLesByStudent' => self::PERM_LOGGED, + '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'], ]); //Load Models @@ -45,4 +57,263 @@ class Pruefung extends FHCAPI_Controller $this->terminateWithSuccess($data); } + public function loadPruefung($pruefung_id) + { + $this->PruefungModel->addSelect('tbl_pruefung.datum'); + $this->PruefungModel->addSelect("TO_CHAR(tbl_pruefung.datum::timestamp, 'DD.MM.YYYY') AS format_datum"); + $this->PruefungModel->addSelect('tbl_pruefung.anmerkung'); + $this->PruefungModel->addSelect('tbl_pruefung.pruefungstyp_kurzbz'); + $this->PruefungModel->addSelect('tbl_pruefung.pruefung_id'); + $this->PruefungModel->addSelect('tbl_pruefung.lehreinheit_id'); + $this->PruefungModel->addSelect('tbl_pruefung.student_uid'); + $this->PruefungModel->addSelect('tbl_pruefung.mitarbeiter_uid'); + $this->PruefungModel->addSelect('tbl_pruefung.punkte'); + $this->PruefungModel->addSelect('tbl_pruefung.note'); + + $this->PruefungModel->addSelect('tbl_lehrveranstaltung.bezeichnung as lehrveranstaltung_bezeichnung'); + $this->PruefungModel->addSelect('tbl_lehrveranstaltung.lehrveranstaltung_id'); + $this->PruefungModel->addSelect('tbl_lehrveranstaltung.semester'); + $this->PruefungModel->addSelect('tbl_lehrveranstaltung.lehrform_kurzbz'); + $this->PruefungModel->addSelect('tbl_note.bezeichnung as note_bezeichnung'); + $this->PruefungModel->addSelect('tbl_pruefungstyp.beschreibung as typ_beschreibung'); + $this->PruefungModel->addSelect('tbl_lehreinheit.studiensemester_kurzbz as studiensemester_kurzbz'); + + $this->PruefungModel->addJoin('lehre.tbl_lehreinheit', 'lehre.tbl_pruefung.lehreinheit_id=lehre.tbl_lehreinheit.lehreinheit_id'); + $this->PruefungModel->addJoin('lehre.tbl_lehrveranstaltung', 'lehrveranstaltung_id'); + $this->PruefungModel->addJoin('lehre.tbl_note', 'note'); + $this->PruefungModel->addJoin('lehre.tbl_pruefungstyp', 'pruefungstyp_kurzbz'); + + + $this->PruefungModel->addLimit(1); + + $result = $this->PruefungModel->loadWhere( + array('pruefung_id' => $pruefung_id) + ); + if (isError($result)) { + return $this->terminateWithError($result, self::ERROR_TYPE_GENERAL); + } + + if (!hasData($result)) + { + return $this->terminateWithError($this->p->t('ui', 'error_missingId', ['id'=> 'Pruefung_id']), self::ERROR_TYPE_GENERAL); + } + $this->terminateWithSuccess(current(getData($result)) ? : null); + } + + public function insertPruefung(){ + //TODO(Manu) validations + + $authUID = getAuthUID(); + $lehreinheit_id = $this->input->post('lehreinheit_id'); + $student_uid = $this->input->post('student_uid'); + $mitarbeiter_uid = $this->input->post('mitarbeiter_uid'); + $datum = $this->input->post('datum'); + $note = $this->input->post('note'); + $pruefungstyp_kurzbz = $this->input->post('pruefungstyp_kurzbz'); + $anmerkung = $this->input->post('anmerkung'); + + + $result = $this->PruefungModel->insert([ + 'lehreinheit_id' => $lehreinheit_id, + 'student_uid' => $student_uid, + 'mitarbeiter_uid' => $mitarbeiter_uid, + 'datum' => $datum, + 'pruefungstyp_kurzbz' => $pruefungstyp_kurzbz, + 'note' => $note, + 'anmerkung' => $anmerkung, + 'insertamum' => date('c'), + 'insertvon' => $authUID, + ]); + + $this->getDataOrTerminateWithError($result); + + $this->terminateWithSuccess(true); + + } + + public function updatePruefung($pruefung_id){ + //TODO(Manu) validations + $result = $this->PruefungModel->load($pruefung_id); + + $oldpruefung = $this->getDataOrTerminateWithError($result); + if (!$oldpruefung) + show_404(); // Pruefung that should be updated does not exist + + $authUID = getAuthUID(); + + $lehreinheit_id = $this->input->post('lehreinheit_id'); + $student_uid = $this->input->post('student_uid'); + $mitarbeiter_uid = $this->input->post('mitarbeiter_uid'); + $datum = $this->input->post('datum'); + $note = $this->input->post('note'); + $pruefungstyp_kurzbz = $this->input->post('pruefungstyp_kurzbz'); + $anmerkung = $this->input->post('anmerkung'); + + $result = $this->PruefungModel->update( + [ + 'pruefung_id' => $pruefung_id + ], + [ 'lehreinheit_id' => $lehreinheit_id, + 'student_uid' => $student_uid, + 'mitarbeiter_uid' => $mitarbeiter_uid, + 'note' => $note, + 'pruefungstyp_kurzbz' => $pruefungstyp_kurzbz, + 'datum' => $datum, + 'anmerkung' => $anmerkung, + 'updatevon' => $authUID, + 'updateamum' => date('c'), + ] + ); + + $this->getDataOrTerminateWithError($result); + + return $this->outputJsonSuccess(true); + } + + public function deletePruefung($pruefung_id){ + $result = $this->PruefungModel->load($pruefung_id); + + $oldpruefung = $this->getDataOrTerminateWithError($result); + if (!$oldpruefung) + show_404(); // Pruefung that should be deleted does not exist + + $result = $this->PruefungModel->delete( + [ + 'pruefung_id' => $pruefung_id + ] + ); + + $this->getDataOrTerminateWithError($result); + + return $this->terminateWithSuccess(true); + } + + public function getTypenPruefungen() + { + $this->load->model('education/Pruefungstyp_model', 'PruefungtypModel'); + + //TODO(Manu) sort Termin3 + $this->PruefungtypModel->addOrder('sort', 'ASC'); + $result = $this->PruefungtypModel->loadWhere( + array('abschluss' => 'false') + ); + + if (isError($result)) { + $this->terminateWithError(getError($result), self::ERROR_TYPE_GENERAL); + } + return $this->terminateWithSuccess(getData($result) ?: []); + } + + public function getAllLehreinheiten(){ + + //TODO MANU (validations) + + $lv_id = $this->input->post('lv_id'); + $studiensemester_kurzbz = $this->input->post('studiensemester_kurzbz'); + + $this->load->model('education/Lehreinheit_model', 'LehreinheitModel'); + + $result = $this->LehreinheitModel->getLesFromLvIds($lv_id, $studiensemester_kurzbz); + + $data = $this->getDataOrTerminateWithError($result); + + $this->terminateWithSuccess($data); + } + + public function getLvsandLesByStudent($student_uid) + { + $this->load->model('education/Lehrveranstaltung_model', 'LehrveranstaltungModel'); + + $result = $this->LehrveranstaltungModel->getLvsByStudent($student_uid); + + $data = $this->getDataOrTerminateWithError($result); + + $lv_ids = array(); + $allData = array(); + + foreach ($data as $lehrveranstaltung) { + $lv_ids[] = $lehrveranstaltung->lehrveranstaltung_id; + } + + $this->load->model('education/Lehreinheit_model', 'LehreinheitModel'); + + foreach ($lv_ids as $id) + { + $result = $this->LehreinheitModel->getLesFromLvIds($id); + $data = $this->getDataOrTerminateWithError($result); + + if (is_array($data)) { + $allData = array_merge($allData, $data); + } + } + + return $this->terminateWithSuccess($allData); + } + + public function getLvsAndMas($student_uid) + { + $this->load->model('education/Lehrveranstaltung_model', 'LehrveranstaltungModel'); + + $result = $this->LehrveranstaltungModel->getLvsByStudent($student_uid); + + $data = $this->getDataOrTerminateWithError($result); + + $lv_ids = array(); + $allDataMa = array(); + + foreach ($data as $lehrveranstaltung) { + $lv_ids[] = $lehrveranstaltung->lehrveranstaltung_id; + } + + $this->load->model('ressource/Mitarbeiter_model', 'MitarbeiterModel'); + + foreach ($lv_ids as $id) { + + $resultMa = $this->MitarbeiterModel->getMitarbeiterFromLV($id); + $dataMa = $this->getDataOrTerminateWithError($resultMa); + + if (is_array($dataMa)) { + $allDataMa = array_merge($allDataMa, $dataMa); + } + } + + return $this->terminateWithSuccess($allDataMa); + } + + public function getLvsByStudent($student_uid) + { + $this->load->model('education/Lehrveranstaltung_model', 'LehrveranstaltungModel'); + + $result = $this->LehrveranstaltungModel->getLvsByStudent($student_uid); + + $data = $this->getDataOrTerminateWithError($result); + + return $this->terminateWithSuccess($data); + } + + public function getMitarbeiterLv($lv_id) + { + $this->load->model('ressource/Mitarbeiter_model', 'MitarbeiterModel'); + + $result = $this->MitarbeiterModel->getMitarbeiterFromLV($lv_id); + + $data = $this->getDataOrTerminateWithError($result); + + return $this->terminateWithSuccess($data); + } + + public function getNoten() + { + $this->load->model('education/Note_model', 'NoteModel'); + + $this->NoteModel->addOrder('note', 'ASC'); + $result = $this->NoteModel->load(); + + if (isError($result)) { + $this->terminateWithError(getError($result), self::ERROR_TYPE_GENERAL); + } + return $this->terminateWithSuccess(getData($result) ?: []); + } + + } diff --git a/application/models/education/LePruefung_model.php b/application/models/education/LePruefung_model.php index 5522a3998..6e51f1975 100644 --- a/application/models/education/LePruefung_model.php +++ b/application/models/education/LePruefung_model.php @@ -13,7 +13,7 @@ class LePruefung_model extends DB_Model } /** - * CI_STYLE + * gets all Pruefungen for a student_uid * @param string $student_uid * @param string $studiensemester_kurzbz * diff --git a/application/models/education/Lehreinheit_model.php b/application/models/education/Lehreinheit_model.php index 10c122b94..3b7e8d330 100644 --- a/application/models/education/Lehreinheit_model.php +++ b/application/models/education/Lehreinheit_model.php @@ -113,4 +113,57 @@ class Lehreinheit_model extends DB_Model return $this->execQuery($query, array($lehreinheit_id)); } + + /** + * Gets Lehreinheiten for Lehrveranstaltungen in a Studiensemester. + * Without using tbl_lehrfach: bezeichnung and kurzbz ALWAYS from lehrveranstaltung + * @param $lehrveranstaltung_id + * @param $studiensemester + * @return array with Lehreinheiten and their Lehreinheitgruppen + */ + public function getLesFromLvIds($lehrveranstaltung_id, $studiensemester_kurzbz = null) + { + $params = array($lehrveranstaltung_id); + + $query = " + SELECT + lv.lehrveranstaltung_id, + le.lehreinheit_id, + le.lehrform_kurzbz, + lv.kurzbz, + lv.bezeichnung, + lv.semester, + ma.mitarbeiter_uid, + ( + SELECT + STRING_AGG(CONCAT(leg.semester, leg.verband, leg.gruppe), ' ') + FROM lehre.tbl_lehreinheitgruppe leg + WHERE leg.lehreinheit_id = le.lehreinheit_id + ) AS gruppe + 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) + WHERE + lv.lehrveranstaltung_id = ? + --AND le.studiensemester_kurzbz = 'WS2021' + "; + + if (isset($studiensemester_kurzbz)) + { + $query .= " AND le.studiensemester_kurzbz = ?"; + $params[] = $studiensemester_kurzbz; + } + + $query .=" + ORDER BY + le.lehreinheit_id; + "; + + return $this->execQuery($query, $params); + + } + } diff --git a/application/models/education/Note_model.php b/application/models/education/Note_model.php new file mode 100644 index 000000000..80b454398 --- /dev/null +++ b/application/models/education/Note_model.php @@ -0,0 +1,14 @@ +dbTable = 'lehre.tbl_note'; + $this->pk = 'note'; + } +} \ No newline at end of file diff --git a/application/models/ressource/Mitarbeiter_model.php b/application/models/ressource/Mitarbeiter_model.php index c38fcf054..52ed62be1 100644 --- a/application/models/ressource/Mitarbeiter_model.php +++ b/application/models/ressource/Mitarbeiter_model.php @@ -238,4 +238,28 @@ class Mitarbeiter_model extends DB_Model return $this->execQuery($qry); } + + /** + * Gets Mitarbeiter for a certain Lehrveranstaltung. + * + * @param $lehrveranstaltung_id + * @return array with Mitarbeiter and their Lehreinheiten + */ + public function getMitarbeiterFromLV($lehrveranstaltung_id){ + //TODO(manu) maybe filter that in pruefungslist.js ? + $qry = "SELECT DISTINCT + lehrveranstaltung_id, uid, vorname, wahlname, vornamen, nachname, titelpre, titelpost, kurzbz, mitarbeiter_uid + FROM + lehre.tbl_lehreinheitmitarbeiter, campus.vw_mitarbeiter, lehre.tbl_lehreinheit + WHERE + lehrveranstaltung_id= ? + AND + mitarbeiter_uid=uid + AND + tbl_lehreinheitmitarbeiter.lehreinheit_id=tbl_lehreinheit.lehreinheit_id;"; + + $parametersArray = array($lehrveranstaltung_id); + + return $this->execQuery($qry, $parametersArray); + } } diff --git a/public/js/components/Stv/Studentenverwaltung/Details/Pruefung.js b/public/js/components/Stv/Studentenverwaltung/Details/Pruefung.js index eb43e36be..e45f97240 100644 --- a/public/js/components/Stv/Studentenverwaltung/Details/Pruefung.js +++ b/public/js/components/Stv/Studentenverwaltung/Details/Pruefung.js @@ -16,7 +16,7 @@ export default { template: `
- {{modelValue}} +
diff --git a/public/js/components/Stv/Studentenverwaltung/Details/Pruefung/Pruefunglist.js b/public/js/components/Stv/Studentenverwaltung/Details/Pruefung/Pruefunglist.js index 6f034e087..006cc6218 100644 --- a/public/js/components/Stv/Studentenverwaltung/Details/Pruefung/Pruefunglist.js +++ b/public/js/components/Stv/Studentenverwaltung/Details/Pruefung/Pruefunglist.js @@ -1,10 +1,12 @@ import {CoreFilterCmpt} from "../../../../filter/Filter.js"; import FormInput from "../../../../Form/Input.js"; +import BsModal from "../../../../Bootstrap/Modal.js"; export default{ components: { CoreFilterCmpt, - FormInput + FormInput, + BsModal }, inject: { defaultSemester: { @@ -26,40 +28,327 @@ export default{ {title: "Note", field: "note_bezeichnung"}, {title: "Anmerkung", field: "anmerkung"}, {title: "Typ", field: "pruefungstyp_kurzbz"}, - {title: "PruefungId", field: "pruefung_id", visible:false}, - {title: "LehreinheitId", field: "lehreinheit_id", visible:false}, - {title: "Student_uid", field: "student_uid", visible:false}, - {title: "Mitarbeiter_uid", field: "mitarbeiter_uid", visible:false}, - {title: "Punkte", field: "punkte", visible:false}, - ], + {title: "PruefungId", field: "pruefung_id", visible: false}, + {title: "LehreinheitId", field: "lehreinheit_id", visible: false}, + {title: "Student_uid", field: "student_uid", visible: false}, + {title: "LV_id", field: "lehrveranstaltung_id", visible: false}, //just for testing + {title: "Mitarbeiter_uid", field: "mitarbeiter_uid", visible: false}, + {title: "Punkte", field: "punkte", visible: false}, + { + title: 'Aktionen', field: 'actions', + minWidth: 150, + maxWidth: 150, + formatter: (cell, formatterParams, onRendered) => { + let container = document.createElement('div'); + container.className = "d-flex gap-2"; + + 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.addEventListener( + 'click', + (event) => + this.actionNewFromOldPruefung(cell.getData().pruefung_id) + ); + container.append(button); + + button = document.createElement('button'); + button.className = 'btn btn-outline-secondary btn-action'; + button.innerHTML = ''; + button.title = 'Prüfung bearbeiten'; + button.addEventListener( + 'click', + (event) => + this.actionEditPruefung(cell.getData().pruefung_id) + ); + container.append(button); + + button = document.createElement('button'); + button.className = 'btn btn-outline-secondary btn-action'; + button.innerHTML = ''; + button.title = 'Prüfung löschen'; + button.addEventListener( + 'click', + () => + this.actionDeletePruefung(cell.getData().pruefung_id) + ); + container.append(button); + + return container; + }, + frozen: true + }], layout: 'fitDataFill', layoutColumnsOnNewData: false, height: 'auto', }, - tabulatorEvents: [{}], + tabulatorEvents: [ + { + event: 'tableBuilt', + handler: async () => { + await this.$p.loadCategory(['fristenmanagement', 'global', 'person', 'ui',]); + let cm = this.$refs.table.tabulator.columnManager; + + cm.getColumnByField('bezeichnung').component.updateDefinition({ + title: this.$p.t('global', 'typ') + }); + + cm.getColumnByField('anmerkung').component.updateDefinition({ + title: this.$p.t('global', 'anmerkung') + }); + } + } + ], pruefungData: {}, - filter: false + listTypesExam: [], + listLvsAndLes: [], + listLvsAndMas: [], + listLvs: [], //TODO(Manu) nachträglich sortieren + listLes: [], + listMas: [], //TODO(Manu) Filter statt SELECT DISTINCT + listMarks: [], + filter: false, + statusNew: true, + isStartDropDown: false + } + }, + computed:{ +/* 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); } }, - computed:{}, /* watch: { modelValue() { this.$refs.table.reloadTable(); } },*/ - methods:{ }, + methods:{ + loadPruefung(pruefung_id) { + return this.$fhcApi.get('api/frontend/v1/stv/pruefung/loadPruefung/' + pruefung_id) + .then(result => { + this.pruefungData = result.data; + return result; + }) + .catch(this.$fhcAlert.handleSystemError); + }, + actionNewPruefung(){ + this.statusNew = true; + this.isStartDropDown = true; + +/* this.getLvsByStudent(this.uid).then(() => { + this.$refs.pruefungModal.show(); + });*/ + + this.$refs.pruefungModal.show(); + // this.prepareDropdowns(); + // this.$refs.pruefungModal.show(); + + }, + actionNewFromOldPruefung(pruefung_id) { + this.statusNew = true; + this.isStartDropDown = false; + this.loadPruefung(pruefung_id).then(() => { + this.pruefungData.note_bezeichnung = 'Noch nicht eingetragen'; + this.pruefungData.datum = new Date(); + this.prepareDropdowns(); + + this.$refs.pruefungModal.show(); + }); + }, + actionEditPruefung(pruefung_id) { + this.statusNew = false; + this.isStartDropDown = false; + this.loadPruefung(pruefung_id).then(() => { + + this.prepareDropdowns(); + + this.$refs.pruefungModal.show(); + }); + }, + actionDeletePruefung(pruefung_id) { + console.log("action delete Prüfung" + pruefung_id); + 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); + + }); + }, + addPruefung(){ + this.$fhcApi.post('api/frontend/v1/stv/pruefung/insertPruefung/', + this.pruefungData + ).then(response => { + this.$fhcAlert.alertSuccess(this.$p.t('ui', 'successSave')); + this.hideModal('pruefungModal'); + this.resetModal(); + }).catch(this.$fhcAlert.handleSystemError) + .finally(() => { + window.scrollTo(0, 0); + this.reload(); + }); + }, + updatePruefung(pruefung_id){ + console.log("update Prüfung" + pruefung_id); + this.$fhcApi.post('api/frontend/v1/stv/pruefung/updatePruefung/' + pruefung_id, + this.pruefungData + ).then(response => { + this.$fhcAlert.alertSuccess(this.$p.t('ui', 'successSave')); + this.hideModal('pruefungModal'); + this.resetModal(); + }).catch(this.$fhcAlert.handleSystemError) + .finally(() => { + window.scrollTo(0, 0); + this.reload(); + }); + }, + deletePruefung(pruefung_id) { + this.$fhcApi.post('api/frontend/v1/stv/pruefung/deletePruefung/' + pruefung_id) + .then(response => { + this.$fhcAlert.alertSuccess(this.$p.t('ui', 'successDelete')); + }).catch(this.$fhcAlert.handleSystemError) + .finally(()=> { + window.scrollTo(0, 0); + this.reload(); + }); + }, + hideModal(modalRef) { + this.$refs[modalRef].hide(); + }, + 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.statusNew = true; + }, + reload() { + this.$refs.table.reloadTable(); + }, + getLvsByStudent(student_uid){ + return this.$fhcApi.get('api/frontend/v1/stv/pruefung/getLvsByStudent/' + student_uid) + .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 => { + this.listMas = result.data; + }) + .catch(this.$fhcAlert.handleSystemError); + }, + getLehreinheiten(lv_id, studiensemester_kurzbz) { + const data = { + lv_id: lv_id, + studiensemester_kurzbz: studiensemester_kurzbz + }; + + return this.$fhcApi.post('api/frontend/v1/stv/pruefung/getAllLehreinheiten/', data) + .then(response => { + this.listLes = response.data; + }) + .catch(this.$fhcAlert.handleSystemError); + }, + 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 => { + console.error('Error loading Ma data:', error); + }); + + // Get Lehreinheiten + this.getLehreinheiten(this.pruefungData.lehrveranstaltung_id, this.pruefungData.studiensemester_kurzbz).then(() => { + + }).catch(error => { + console.error('Error loading Lehreinheiten multiple:', error); + }); + + + + this.$refs.pruefungModal.show(); + } + }, + created(){ + this.$fhcApi.get('api/frontend/v1/stv/pruefung/getLvsByStudent/' + this.uid) + .then(result => { + this.listLvs = result.data; + }) + .catch(this.$fhcAlert.handleSystemError); + + this.$fhcApi.get('api/frontend/v1/stv/pruefung/getLvsandLesByStudent/' + this.uid) + .then(result => { + this.listLvsAndLes = result.data; + }) + .catch(this.$fhcAlert.handleSystemError); + + this.$fhcApi.get('api/frontend/v1/stv/pruefung/getLvsAndMas/' + this.uid) + .then(result => { + this.listLvsAndMas = result.data; + }) + .catch(this.$fhcAlert.handleSystemError); + + this.$fhcApi.get('api/frontend/v1/stv/pruefung/getTypenPruefungen') + .then(result => { + this.listTypesExam = result.data; + }) + .catch(this.$fhcAlert.handleSystemError); + + this.$fhcApi.get('api/frontend/v1/stv/pruefung/getNoten') + .then(result => { + this.listMarks = result.data; + }) + .catch(this.$fhcAlert.handleSystemError); + }, template: `
- + + aktuelles Sem: {{defaultSemester}} +
+
- - +
-
- -
- - -
- -
-

Form

+ + + +

Form

+ + + + + +
+ Details - aktuelles Sem: {{defaultSemester}} - -
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
` }; From d6d6d0ac48a2c5c5fea4bc16790c66ea134e31d4 Mon Sep 17 00:00:00 2001 From: Cris Date: Mon, 16 Sep 2024 18:22:28 +0200 Subject: [PATCH 006/351] Added phrases for softwarebereitstellung app --- system/phrasesupdate.php | 64 ++++++++++++++++++++++++++++++++++++++-- 1 file changed, 62 insertions(+), 2 deletions(-) diff --git a/system/phrasesupdate.php b/system/phrasesupdate.php index a6fbf4f4d..9a99b21ec 100644 --- a/system/phrasesupdate.php +++ b/system/phrasesupdate.php @@ -28826,13 +28826,13 @@ array( 'phrases' => array( array( 'sprache' => 'German', - 'text' => 'Softwareanforderung und Lizenzmanagement für die Lehre', + 'text' => 'Softwareanforderung für die Lehre', 'description' => '', 'insertvon' => 'system' ), array( 'sprache' => 'English', - 'text' => 'Software Request and License management for Education', + 'text' => 'Software Request for Education', 'description' => '', 'insertvon' => 'system' ) @@ -30605,6 +30605,66 @@ array( ) ) ), + array( + 'app' => 'softwarebereitstellung', + 'category' => 'global', + 'phrase' => 'userAnzahl', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => 'User-Anzahl', + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => 'User Number', + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), + array( + 'app' => 'softwarebereitstellung', + 'category' => 'global', + 'phrase' => 'userAnzahlAendern', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => 'User-Anzahl ändern', + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => 'Change User Number', + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), + array( + 'app' => 'softwarebereitstellung', + 'category' => 'global', + 'phrase' => 'userAnzahlNeu', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => 'User-Anzahl NEU', + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => 'NEW User Number', + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), ); From 4d5ea1f519c68569ed504c8388988084688778cc Mon Sep 17 00:00:00 2001 From: ma0068 Date: Tue, 17 Sep 2024 15:28:18 +0200 Subject: [PATCH 007/351] adapt addNewPruefung, pruefungModal, function getLvsByStudent --- .../api/frontend/v1/stv/Pruefung.php | 17 ++- .../education/Lehrveranstaltung_model.php | 7 +- .../Details/Pruefung/Pruefunglist.js | 128 +++++++++++++++--- 3 files changed, 125 insertions(+), 27 deletions(-) diff --git a/application/controllers/api/frontend/v1/stv/Pruefung.php b/application/controllers/api/frontend/v1/stv/Pruefung.php index 9ddd22897..cdac93b4b 100644 --- a/application/controllers/api/frontend/v1/stv/Pruefung.php +++ b/application/controllers/api/frontend/v1/stv/Pruefung.php @@ -101,7 +101,7 @@ class Pruefung extends FHCAPI_Controller } public function insertPruefung(){ - //TODO(Manu) validations + //TODO(Manu) Berechtigungen $authUID = getAuthUID(); $lehreinheit_id = $this->input->post('lehreinheit_id'); @@ -112,6 +112,11 @@ class Pruefung extends FHCAPI_Controller $pruefungstyp_kurzbz = $this->input->post('pruefungstyp_kurzbz'); $anmerkung = $this->input->post('anmerkung'); + $this->load->library('form_validation'); + + $this->form_validation->set_rules( + 'datum', $this->p->t('global', 'datum'), ['is_valid_date'] + ); $result = $this->PruefungModel->insert([ 'lehreinheit_id' => $lehreinheit_id, @@ -132,7 +137,7 @@ class Pruefung extends FHCAPI_Controller } public function updatePruefung($pruefung_id){ - //TODO(Manu) validations + //TODO(Manu) validations and Berechtigungen $result = $this->PruefungModel->load($pruefung_id); $oldpruefung = $this->getDataOrTerminateWithError($result); @@ -280,11 +285,15 @@ class Pruefung extends FHCAPI_Controller return $this->terminateWithSuccess($allDataMa); } - public function getLvsByStudent($student_uid) + 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');*/ + $this->load->model('education/Lehrveranstaltung_model', 'LehrveranstaltungModel'); - $result = $this->LehrveranstaltungModel->getLvsByStudent($student_uid); + $result = $this->LehrveranstaltungModel->getLvsByStudent($student_uid, $studiensemester_kurzbz); $data = $this->getDataOrTerminateWithError($result); diff --git a/application/models/education/Lehrveranstaltung_model.php b/application/models/education/Lehrveranstaltung_model.php index cefd147b9..f343f2583 100644 --- a/application/models/education/Lehrveranstaltung_model.php +++ b/application/models/education/Lehrveranstaltung_model.php @@ -226,7 +226,7 @@ class Lehrveranstaltung_model extends DB_Model /** * Gets Lehrveranstaltungen of a student * @param $student_uid - * @param null $studiensemester_kurzbz + * @param $studiensemester_kurzbz * @return array|null */ public function getLvsByStudent($student_uid, $studiensemester_kurzbz = null) @@ -236,6 +236,7 @@ class Lehrveranstaltung_model extends DB_Model $qry = "SELECT * FROM lehre.tbl_lehrveranstaltung WHERE lehrveranstaltung_id IN(SELECT lehrveranstaltung_id FROM campus.vw_student_lehrveranstaltung WHERE uid=?"; + if (isset($studiensemester_kurzbz)) { $qry .= " AND studiensemester_kurzbz=?"; @@ -243,11 +244,11 @@ class Lehrveranstaltung_model extends DB_Model } $qry .= ") OR lehrveranstaltung_id IN(SELECT lehrveranstaltung_id FROM lehre.tbl_zeugnisnote WHERE student_uid=?"; $params[] = $student_uid; - if (isset($studiensemester_kurzbz)) +/* if (isset($studiensemester_kurzbz)) { $qry .= " AND studiensemester_kurzbz=?"; $params[] = $studiensemester_kurzbz; - } + }*/ $qry .= ") ORDER BY semester, bezeichnung"; return $this->execQuery($qry, $params); diff --git a/public/js/components/Stv/Studentenverwaltung/Details/Pruefung/Pruefunglist.js b/public/js/components/Stv/Studentenverwaltung/Details/Pruefung/Pruefunglist.js index 006cc6218..31f709e26 100644 --- a/public/js/components/Stv/Studentenverwaltung/Details/Pruefung/Pruefunglist.js +++ b/public/js/components/Stv/Studentenverwaltung/Details/Pruefung/Pruefunglist.js @@ -12,6 +12,10 @@ export default{ defaultSemester: { from: 'defaultSemester', }, +/* $reloadList: { + from: '$reloadList', + required: true + }*/ }, props: { uid: Number @@ -26,6 +30,7 @@ export default{ {title: "Datum", field: "format_datum"}, {title: "Lehrveranstaltung", field: "lehrveranstaltung_bezeichnung"}, {title: "Note", field: "note_bezeichnung"}, + {title: "StudSem", field: "studiensemester_kurzbz"}, //just testing {title: "Anmerkung", field: "anmerkung"}, {title: "Typ", field: "pruefungstyp_kurzbz"}, {title: "PruefungId", field: "pruefung_id", visible: false}, @@ -110,7 +115,10 @@ export default{ listMarks: [], filter: false, statusNew: true, - isStartDropDown: false + isStartDropDown: false, + currentSemester: false, + // componentKey: 0, + isFilterSet: false, } }, computed:{ @@ -124,13 +132,31 @@ export default{ }, 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: { + 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(); - } - },*/ + }*/ + }, methods:{ loadPruefung(pruefung_id) { return this.$fhcApi.get('api/frontend/v1/stv/pruefung/loadPruefung/' + pruefung_id) @@ -143,6 +169,7 @@ export default{ actionNewPruefung(){ this.statusNew = true; this.isStartDropDown = true; + this.resetModal(); /* this.getLvsByStudent(this.uid).then(() => { this.$refs.pruefungModal.show(); @@ -157,8 +184,9 @@ export default{ this.statusNew = true; this.isStartDropDown = false; this.loadPruefung(pruefung_id).then(() => { - this.pruefungData.note_bezeichnung = 'Noch nicht eingetragen'; + this.pruefungData.note = 9; this.pruefungData.datum = new Date(); + this.pruefungData.pruefungstyp_kurzbz = null; this.prepareDropdowns(); this.$refs.pruefungModal.show(); @@ -249,6 +277,16 @@ export default{ reload() { 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); + + this.$nextTick(this.$refs.table.reloadTable); + },*/ getLvsByStudent(student_uid){ return this.$fhcApi.get('api/frontend/v1/stv/pruefung/getLvsByStudent/' + student_uid) .then(result => { @@ -256,6 +294,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); + },*/ getMaFromLv(lv_id){ return this.$fhcApi.get('api/frontend/v1/stv/pruefung/getMitarbeiterLv/' + lv_id) .then(result => { @@ -301,7 +351,17 @@ export default{ 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); + //TODO(Manu) TypeError: this.$refs.table.setFilter is not a function + + } else { + console.log('Alle anzeigen'); + } + }, }, created(){ this.$fhcApi.get('api/frontend/v1/stv/pruefung/getLvsByStudent/' + this.uid) @@ -337,19 +397,41 @@ export default{ template: `
- aktuelles Sem: {{defaultSemester}} + + + aktuelles Sem: {{defaultSemester}}
+ current Sem: {{currentSemester}}
+
+ + + +
- - - - +

From b9911e69c547cdba3ab7448d220d7df3bcb1eea5 Mon Sep 17 00:00:00 2001 From: ma0068 Date: Wed, 2 Oct 2024 08:58:24 +0200 Subject: [PATCH 015/351] renaming id: Tab Contact --- .../Details/Kontakt/Address.js | 22 +++++++++---------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/public/js/components/Stv/Studentenverwaltung/Details/Kontakt/Address.js b/public/js/components/Stv/Studentenverwaltung/Details/Kontakt/Address.js index 7c3933f01..d9cdc75b2 100644 --- a/public/js/components/Stv/Studentenverwaltung/Details/Kontakt/Address.js +++ b/public/js/components/Stv/Studentenverwaltung/Details/Kontakt/Address.js @@ -196,9 +196,9 @@ export default{ this.resetModal(); this.$refs.adressModal.show(); }, - actionEditAdress(adress_id) { + actionEditAdress(adresse_id) { this.statusNew = false; - this.loadAdress(adress_id).then(() => { + this.loadAdress(adresse_id).then(() => { if(this.addressData.adresse_id) { this.loadPlaces(this.addressData.plz); @@ -207,8 +207,8 @@ export default{ } }); }, - actionDeleteAdress(adress_id) { - this.loadAdress(adress_id).then(() => { + actionDeleteAdress(adresse_id) { + this.loadAdress(adresse_id).then(() => { if(this.addressData.adresse_id) if(this.addressData.heimatadresse) this.$fhcAlert.alertError(this.$p.t('person', 'error_deleteHomeAdress')); @@ -216,7 +216,7 @@ export default{ this.$fhcAlert .confirmDelete() .then(result => result - ? adress_id + ? adresse_id : Promise.reject({handled: true})) .then(this.deleteAddress) .catch(this.$fhcAlert.handleSystemError); @@ -238,17 +238,17 @@ export default{ reload() { this.$refs.table.reloadTable(); }, - loadAdress(adress_id) { + loadAdress(adresse_id) { this.statusNew = false; - return this.$fhcApi.factory.stv.kontakt.loadAddress(adress_id) + return this.$fhcApi.factory.stv.kontakt.loadAddress(adresse_id) .then(result => { this.addressData = result.data; return result; }) .catch(this.$fhcAlert.handleSystemError); }, - updateAddress(adress_id) { - return this.$fhcApi.factory.stv.kontakt.updateAddress(adress_id, + updateAddress(adresse_id) { + return this.$fhcApi.factory.stv.kontakt.updateAddress(adresse_id, this.addressData ).then(response => { this.$fhcAlert.alertSuccess(this.$p.t('ui', 'successSave')); @@ -260,8 +260,8 @@ export default{ this.reload(); }); }, - deleteAddress(adress_id) { - return this.$fhcApi.factory.stv.kontakt.deleteAddress(adress_id) + deleteAddress(adresse_id) { + return this.$fhcApi.factory.stv.kontakt.deleteAddress(adresse_id) .then(response => { this.$fhcAlert.alertSuccess(this.$p.t('ui', 'successDelete')); }).catch(this.$fhcAlert.handleSystemError) From 11b0e770a2aae6ec0d64629ce3859b48976cdcf3 Mon Sep 17 00:00:00 2001 From: Cris Date: Mon, 7 Oct 2024 16:29:53 +0200 Subject: [PATCH 016/351] Added filter lehrtyp_kurzbz to getAutocompleteSuggestions in Lehrveranstaltung_model.php --- .../education/Lehrveranstaltung_model.php | 34 ++++++++++++++++--- 1 file changed, 30 insertions(+), 4 deletions(-) diff --git a/application/models/education/Lehrveranstaltung_model.php b/application/models/education/Lehrveranstaltung_model.php index de8ebc5c9..f10ba5423 100644 --- a/application/models/education/Lehrveranstaltung_model.php +++ b/application/models/education/Lehrveranstaltung_model.php @@ -20,19 +20,45 @@ class Lehrveranstaltung_model extends DB_Model * @param $eventQuery String * @param string $studiensemester_kurzbz Filter by Studiensemester * @param array $oes Filter by Organisationseinheiten + * @param null $lehrtyp_kurzbz Filter by Lehrtyp 'lv' or 'modul' * @return array */ - public function getAutocompleteSuggestions($eventQuery, $studiensemester_kurzbz = null, $oes = null) + public function getAutocompleteSuggestions($eventQuery, $studiensemester_kurzbz = null, $oes = null, $lehrtyp_kurzbz = null) { - $subQry = $this->_getQryLvsByStudienplan($studiensemester_kurzbz, $oes); + // Subquery + $subQry = $this->_getQryLvsByStudienplan(); $params = []; - /* filter by input string */ - if (is_string($eventQuery)) { + if (isset($studiensemester_kurzbz) && is_string($studiensemester_kurzbz)) + { + /* filter by studiensemester */ + $subQry.= ' AND stplsem.studiensemester_kurzbz = ?'; + $params[] = $studiensemester_kurzbz; + } + + if (isset($oes) && is_array($oes)) + { + /* filter by organisationseinheit */ + $subQry.= ' AND lv.oe_kurzbz IN ?'; + $params[]= $oes; + } + + if (isset($lehrtyp_kurzbz) && is_string($lehrtyp_kurzbz)) + { + /* filter by lehrtyp_kurzbz */ + $subQry .= ' AND lehrtyp_kurzbz = ?'; + $params[] = $lehrtyp_kurzbz; + } + + + if (is_string($eventQuery)) + { + /* filter by input string */ $subQry.= ' AND lv.bezeichnung ILIKE ?'; $params[] = '%' . $eventQuery . '%'; } + // Final Query $qry = 'SELECT DISTINCT ON (lehrveranstaltung_id) * FROM ('. $subQry. ') AS tmp'; return $this->execQuery($qry, $params); From 8744a00ce7e42afe54806d260136302525503731 Mon Sep 17 00:00:00 2001 From: Cris Date: Mon, 7 Oct 2024 16:34:41 +0200 Subject: [PATCH 017/351] Added filter lehrtyp_kurzbz and $oe_column to getLvsByStudienplan in Lehrveranstaltung_model.php .lehrtyp_kurzbz filters by Lehrtyp 'lv' or 'modul' (default no filter) .oe_column is used when filtering $oes: Filter by lv.oe_kurzbz or stg.oe_kurzbz (the stg joined to lv) --- .../education/Lehrveranstaltung_model.php | 49 ++++++++++++++++--- 1 file changed, 42 insertions(+), 7 deletions(-) diff --git a/application/models/education/Lehrveranstaltung_model.php b/application/models/education/Lehrveranstaltung_model.php index f10ba5423..1fb949d7b 100644 --- a/application/models/education/Lehrveranstaltung_model.php +++ b/application/models/education/Lehrveranstaltung_model.php @@ -67,15 +67,50 @@ class Lehrveranstaltung_model extends DB_Model /** * Get Lehrveranstaltungen with its Stg, OE and OE-type. * Filter by Studiensemester and Organisationseinheiten if necessary. - * @param $eventQuery String - * @param string $studiensemester_kurzbz Filter by Studiensemester - * @param array $oes Filter by Organisationseinheiten - * @param array $lv_ids Filter by Lehrveranstaltung-Ids + * @param null|string $studiensemester_kurzbz Filter by Studiensemester + * @param null|array $oes Filter by Organisationseinheiten + * @param null|string $lehrtyp_kurzbz Filter by Lehrtyp 'lv' or 'modul' + * @param null|array $lv_ids Filter by Lehrveranstaltung-Ids + * @param string $oe_column 'lv'|'stg' Used when filtering $oes: Filter by lv.oe_kurzbz or stg.oe_kurzbz (the stg joined to lv) * @return array */ - public function getLvsByStudienplan($studiensemester_kurzbz = null, $oes = null, $lv_ids = null) + public function getLvsByStudienplan($studiensemester_kurzbz = null, $oes = null, $lehrtyp_kurzbz = null, $lv_ids = null, $oe_column = 'lv') { - $subQry = $this->_getQryLvsByStudienplan($studiensemester_kurzbz, $oes); + // Subquery LVs + $subQry = $this->_getQryLvsByStudienplan(); + $params = []; + + if (isset($studiensemester_kurzbz) && is_string($studiensemester_kurzbz)) + { + /* filter by studiensemester */ + $subQry.= ' AND stplsem.studiensemester_kurzbz = ?'; + $params[] = $studiensemester_kurzbz; + } + + if (isset($oes) && is_array($oes)) + { + if ($oe_column === 'lv') + { + /* filter by lv organisationseinheit (Standard behaviour) */ + $subQry.= ' AND lv.oe_kurzbz IN ?'; + } + elseif ($oe_column === 'stg') + { + /* filter by lv studiengangs organisationseinheit () */ + $subQry.= ' AND stg.oe_kurzbz IN ?'; + } + + $params[]= $oes; + } + + if (isset($lehrtyp_kurzbz) && is_string($lehrtyp_kurzbz)) + { + /* filter by lehrtyp_kurzbz */ + $subQry .= ' AND lehrtyp_kurzbz = ?'; + $params[] = $lehrtyp_kurzbz; + } + + // Final Query $qry = 'SELECT * FROM ('. $subQry. ') AS tmp'; if (isset($lv_ids) && is_array($lv_ids)) @@ -87,7 +122,7 @@ class Lehrveranstaltung_model extends DB_Model $qry.= ' ORDER BY stg_typ_kurzbz, orgform_kurzbz DESC'; - return $this->execQuery($qry); + return $this->execQuery($qry, $params); } /** From b08e01f72f8589c0790856b1d656d6ac9df0f252 Mon Sep 17 00:00:00 2001 From: Cris Date: Mon, 7 Oct 2024 16:37:07 +0200 Subject: [PATCH 018/351] Added columns to and moved where-clauses from _getQryLvsByStudienplan to calling methods in Lehrveranstaltung_model.php .added cols lehrtyp_kurzbz and lehrveranstaltung_template_id --- .../education/Lehrveranstaltung_model.php | 23 ++++--------------- 1 file changed, 5 insertions(+), 18 deletions(-) diff --git a/application/models/education/Lehrveranstaltung_model.php b/application/models/education/Lehrveranstaltung_model.php index 1fb949d7b..1c601a291 100644 --- a/application/models/education/Lehrveranstaltung_model.php +++ b/application/models/education/Lehrveranstaltung_model.php @@ -130,7 +130,7 @@ class Lehrveranstaltung_model extends DB_Model * * @return string */ - private function _getQryLvsByStudienplan($studiensemester_kurzbz = null, $oes = null, $lehrtyp_kurzbz = 'lv') + private function _getQryLvsByStudienplan() { $qry = ' SELECT @@ -152,6 +152,8 @@ class Lehrveranstaltung_model extends DB_Model lv.lehrveranstaltung_id, lv.semester, lv.bezeichnung AS lv_bezeichnung, + lv.lehrtyp_kurzbz, + lv.lehrveranstaltung_template_id, ( -- comma seperated string of all lehreinheitgruppen SELECT string_agg(bezeichnung, \', \') AS lehreinheitgruppe_bezeichnung @@ -186,23 +188,8 @@ class Lehrveranstaltung_model extends DB_Model JOIN public.tbl_organisationseinheit oe USING (oe_kurzbz) JOIN public.tbl_studiengang stg ON stg.studiengang_kz = sto.studiengang_kz JOIN public.tbl_studiengangstyp stgtyp ON stgtyp.typ = stg.typ - /* filter by lehrtyp_kurzbz, default is lvs only */ - WHERE - lehrtyp_kurzbz = '. $this->db->escape($lehrtyp_kurzbz); - - if (isset($studiensemester_kurzbz) && is_string($studiensemester_kurzbz)) - { - /* filter by studiensemester */ - $qry.= ' AND stplsem.studiensemester_kurzbz = '. $this->db->escape($studiensemester_kurzbz); - - } - - if (isset($oes) && is_array($oes)) - { - /* filter by organisationseinheit */ - $implodedOes = "'". implode("', '", $oes). "'"; - $qry.= ' AND lv.oe_kurzbz IN ('. $implodedOes. ')'; - } + WHERE 1 = 1 + '; return $qry; } From 7096bba958ed8db567532d6812764bda07ccfa48 Mon Sep 17 00:00:00 2001 From: Cris Date: Mon, 7 Oct 2024 16:37:45 +0200 Subject: [PATCH 019/351] Added phrases for Softwarebereitstellung --- system/phrasesupdate.php | 80 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 80 insertions(+) diff --git a/system/phrasesupdate.php b/system/phrasesupdate.php index 9a99b21ec..89dc427c3 100644 --- a/system/phrasesupdate.php +++ b/system/phrasesupdate.php @@ -30665,6 +30665,86 @@ array( ) ) ), + array( + 'app' => 'softwarebereitstellung', + 'category' => 'global', + 'phrase' => 'standardLvTemplate', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => 'Standard LV-Template', + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => 'Standard Course Template', + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), + array( + 'app' => 'softwarebereitstellung', + 'category' => 'global', + 'phrase' => 'anforderungNachStandardLvTemplate', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => 'Anforderung nach Standard LV-Template', + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => 'Request by Standard Course Template', + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), + array( + 'app' => 'softwarebereitstellung', + 'category' => 'global', + 'phrase' => 'swAnforderungUeberAuswahlVonStandardisiertenLvTemplates', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => "Softwareanforderung über die Auswahl von standardisierten LV-Templates (Quellkurse)", + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => "Software Requirements based on the Selection of Standardized Course-Templates", + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), + array( + 'app' => 'softwarebereitstellung', + 'category' => 'global', + 'phrase' => 'swFuerLvAnfordern', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => "Software für LV anfordern", + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => "Request software for courses", + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), ); From 5cee80ed124e28205145d6ec723234764609ba3f Mon Sep 17 00:00:00 2001 From: ma0048 Date: Fri, 18 Oct 2024 13:24:39 +0200 Subject: [PATCH 020/351] - rtliste automatisierte messages --- public/js/plugin/FhcAlert.js | 26 ++++++++++++++++++++ system/dbupdate_3.4.php | 2 ++ system/dbupdate_3.4/37620_reihungslisten.php | 13 ++++++++++ vilesci/stammdaten/auswertung_fhtw.php | 18 ++++++++++++-- 4 files changed, 57 insertions(+), 2 deletions(-) create mode 100644 system/dbupdate_3.4/37620_reihungslisten.php diff --git a/public/js/plugin/FhcAlert.js b/public/js/plugin/FhcAlert.js index b079bf98e..aa8c7a3cc 100644 --- a/public/js/plugin/FhcAlert.js +++ b/public/js/plugin/FhcAlert.js @@ -60,6 +60,13 @@ * Displays a confirmation dialog and returns a Promise which resolves * with true or false depending und the pressed button. * @return Promise + * + * confirm + * ------------ + * Displays a confirmation dialog and returns a Promise which resolves + * with true or false depending und the pressed button. + * @param string message + * @return Promise * * alertDefault * ------------ @@ -226,6 +233,25 @@ export default { }); }); }, + confirm(message) { + return new Promise((resolve, reject) => { + helperAppInstance.$confirm.require({ + group: 'fhcAlertConfirm', + header: 'Achtung', + message: message, + acceptLabel: 'Ja', + acceptClass: 'btn btn-success', + rejectLabel: 'Abbrechen', + rejectClass: 'btn btn-outline-secondary', + accept() { + resolve(true); + }, + reject() { + resolve(false); + }, + }); + }); + }, alertDefault(severity, title, message, sticky = false) { let options = { severity: severity, summary: title, detail: message}; diff --git a/system/dbupdate_3.4.php b/system/dbupdate_3.4.php index 11880fd55..ca8b42db9 100644 --- a/system/dbupdate_3.4.php +++ b/system/dbupdate_3.4.php @@ -58,6 +58,8 @@ require_once('dbupdate_3.4/17513_Entwicklungsteam.php'); require_once('dbupdate_3.4/28575_softwarebereitstellung.php'); require_once('dbupdate_3.4/41150_oe-pfad_db_view.php'); require_once('dbupdate_3.4/44031_stv_favorites.php'); +require_once('dbupdate_3.4/37620_reihungslisten.php'); + // *** Pruefung und hinzufuegen der neuen Attribute und Tabellen echo '

Pruefe Tabellen und Attribute!

'; diff --git a/system/dbupdate_3.4/37620_reihungslisten.php b/system/dbupdate_3.4/37620_reihungslisten.php new file mode 100644 index 000000000..950d6af0e --- /dev/null +++ b/system/dbupdate_3.4/37620_reihungslisten.php @@ -0,0 +1,13 @@ +db_query("SELECT 1 FROM public.tbl_buchungstyp WHERE buchungstyp_kurzbz = 'KautionDrittStaat';")) +{ + if ($db->db_num_rows($result) == 0) + { + $qry = "INSERT INTO public.tbl_buchungstyp (buchungstyp_kurzbz, beschreibung, standardtext, standardbetrag) VALUES ('KautionDrittStaat', 'Kaution', 'Deposit for application, third countries', '-250');"; + if (!$db->db_query($qry)) + echo 'public.tbl_buchungstyp '.$db->db_last_error().'
'; + else + echo ' public.tbl_buchungstyp: Added buchungstyp "KautionDrittStaat"
'; + } +} \ No newline at end of file diff --git a/vilesci/stammdaten/auswertung_fhtw.php b/vilesci/stammdaten/auswertung_fhtw.php index aa39889cb..10809dc4f 100644 --- a/vilesci/stammdaten/auswertung_fhtw.php +++ b/vilesci/stammdaten/auswertung_fhtw.php @@ -1220,6 +1220,7 @@ $reihungstest = isset($_REQUEST['reihungstest']) ? $_REQUEST['reihungstest'] : ' $studiengang = isset($_REQUEST['studiengang']) ? $_REQUEST['studiengang'] : ''; $semester = isset($_REQUEST['semester']) ? $_REQUEST['semester'] : ''; $prestudent_id = isset($_REQUEST['prestudent_id']) ? $_REQUEST['prestudent_id'] : ''; +$prestudent_ids = isset($_REQUEST['prestudent_ids']) ? $_REQUEST['prestudent_ids'] : ''; $orgform_kurzbz = isset($_REQUEST['orgform_kurzbz']) ? $_REQUEST['orgform_kurzbz'] : ''; $format = (isset($_REQUEST['format']) ? $_REQUEST['format'] : ''); $stgtyp = (isset($_REQUEST['stgtyp']) ? $_REQUEST['stgtyp'] : ''); @@ -1259,7 +1260,7 @@ if ($prestudent_id != '' && !is_numeric($prestudent_id)) { die('PrestudentID ist ungueltig'); } -if (isset($_POST['rtauswsubmit']) && $reihungstest == '' && $studiengang == '' && $semester == '' && $prestudent_id == '' && $datum_von == '' && $datum_bis == '') +if (isset($_POST['rtauswsubmit']) && $reihungstest == '' && $studiengang == '' && $semester == '' && $prestudent_id == '' && $datum_von == '' && $datum_bis == '' && $prestudent_ids == '') { die('Waehlen Sie bitte mindestens eine der Optionen aus'); } @@ -1378,6 +1379,10 @@ if (isset($_REQUEST['reihungstest']) || isset($_POST['rtauswsubmit'])) { $query .= " AND ps.prestudent_id=" . $db->db_add_param($prestudent_id, FHC_INTEGER); } + if ($prestudent_ids != '') + { + $query .= " AND ps.prestudent_id IN (" .$db->db_implode4SQL(explode(',', $prestudent_ids)) . ")"; + } if ($orgform_kurzbz != '' && $studiengang != '') { $query .= " AND (tbl_ablauf.studienplan_id=( @@ -1611,6 +1616,10 @@ if (isset($_REQUEST['reihungstest']) || isset($_POST['rtauswsubmit'])) { $query .= " AND ps.prestudent_id=" . $db->db_add_param($prestudent_id, FHC_INTEGER); } + if ($prestudent_ids != '') + { + $query .= " AND ps.prestudent_id IN (" .$db->db_implode4SQL(explode(',',$prestudent_ids)) . ")"; + } if ($orgform_kurzbz != '') { //$query .= " AND tbl_prestudentstatus.orgform_kurzbz=" . $db->db_add_param($orgform_kurzbz); @@ -2890,7 +2899,7 @@ else $selectedrtstr = ''; $checkbxstr = ''; $first = true; - $noparamsselected = $prestudent_id == '' && $reihungstest == '' && $datum_von == '' && $datum_bis == '' && $studiengang == '' && $semester == ''; + $noparamsselected = $prestudent_id == '' && $reihungstest == '' && $datum_von == '' && $datum_bis == '' && $studiengang == '' && $semester == '' && $prestudent_ids == ''; //$maxeachline = 1; foreach ($rtest as $rt) { @@ -3006,6 +3015,9 @@ else echo ''; echo ''; echo 'PrestudentIn: '; + echo ''; + echo ''; + echo 'PrestudentIn (Mehrfachauswahl): '; echo ' '; echo '

'; @@ -3014,6 +3026,7 @@ else &datum_von=' . $datum_von . ' &datum_bis=' . $datum_bis . ' &prestudent_id=' . $prestudent_id . ' + &' . http_build_query(array('prestudent_ids' => $prestudent_ids)) . ' &' . http_build_query(array('reihungstest' => $reihungstest)) . ' &orgform_kurzbz=' . $orgform_kurzbz . ' &stgtyp=' . $stgtyp . ' @@ -3067,6 +3080,7 @@ else datum_von=' . $datum_von . '& datum_bis=' . $datum_bis . '& prestudent_id=' . $prestudent_id . '& + &' . http_build_query(array('prestudent_ids' => $prestudent_ids)) . ' &' . http_build_query(array('reihungstest' => $reihungstest)) . '">
'; echo '
'; From dcb24415fcb75f75f920ad0bffb1f61135f41559 Mon Sep 17 00:00:00 2001 From: Cris Date: Mon, 21 Oct 2024 14:02:25 +0200 Subject: [PATCH 021/351] Added phrases 'errorConfigFehlt' and 'errorUnbekannteUrl' --- system/phrasesupdate.php | 42 +++++++++++++++++++++++++++++++++++++++- 1 file changed, 41 insertions(+), 1 deletion(-) diff --git a/system/phrasesupdate.php b/system/phrasesupdate.php index 59c4a2246..a8d80a4af 100644 --- a/system/phrasesupdate.php +++ b/system/phrasesupdate.php @@ -31165,7 +31165,47 @@ array( 'insertvon' => 'system' ) ) - ) + ), + array( + 'app' => 'core', + 'category' => 'ui', + 'phrase' => 'errorConfigFehlt', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => "Config-Eintrag fehlt", + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => "Missing config entry", + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), + array( + 'app' => 'core', + 'category' => 'ui', + 'phrase' => 'errorUnbekannteUrl', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => "Unbekannte URL. Seite bzw. Link kann nicht geöffnet werden.", + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => "Unknown URL. Cannot open to site or link", + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), ); From 8787558fef91b6eb9a6d886f79b45d944d9d6a97 Mon Sep 17 00:00:00 2001 From: ma0068 Date: Tue, 22 Oct 2024 15:58:02 +0200 Subject: [PATCH 022/351] cleanUp Tasks Tab PrestudentIn --- application/config/stv.php | 22 +++ .../api/frontend/v1/stv/Config.php | 8 +- .../api/frontend/v1/stv/Prestudent.php | 12 ++ .../models/codex/Bisstandort_model.php | 14 ++ application/views/Studentenverwaltung.php | 6 +- public/js/api/stv/prestudent.js | 38 ++++ .../Studentenverwaltung/Details/Prestudent.js | 174 ++++++++++-------- .../Details/Prestudent/MultiStatus.js | 1 + 8 files changed, 198 insertions(+), 77 deletions(-) create mode 100644 application/config/stv.php create mode 100644 application/models/codex/Bisstandort_model.php diff --git a/application/config/stv.php b/application/config/stv.php new file mode 100644 index 000000000..6296e8e6b --- /dev/null +++ b/application/config/stv.php @@ -0,0 +1,22 @@ + [ + + //all fields can be configured to be hidden, see class attribute stv-prestudent-prestudent-name for name + 'hiddenFields' => [ + + //corresponding to config-entry 'ZGV_DOKTOR_ANZEIGEN' in global.config + 'zgvdoktor_code', 'zgvdoktorort', 'zgvdoktordatum', 'zgvdoktornation', 'zgvdoktor_erfuellt', + + //corresponding to config-entry 'ZGV_ERFUELLT_ANZEIGEN' in global.config + 'zgv_erfuellt', 'zgvmas_erfuellt','zgvdoktor_erfuellt', + + //propably used by FH-Communities + 'aufnahmeschluessel', 'standort_code', 'facheinschlaegigBerufstaetig' + + ], + 'hideUDFs' => false + ] +]; \ No newline at end of file diff --git a/application/controllers/api/frontend/v1/stv/Config.php b/application/controllers/api/frontend/v1/stv/Config.php index c28c49485..97477fca7 100644 --- a/application/controllers/api/frontend/v1/stv/Config.php +++ b/application/controllers/api/frontend/v1/stv/Config.php @@ -46,11 +46,16 @@ class Config extends FHCAPI_Controller 'stv', 'konto' ]); + + // Load Config + $this->load->config('stv'); } public function student() { $result = []; + $config = $this->config->item('tabs'); + $result['details'] = [ 'title' => $this->p->t('stv', 'tab_details'), 'component' => './Stv/Studentenverwaltung/Details/Details.js' @@ -69,7 +74,8 @@ class Config extends FHCAPI_Controller ]; $result['prestudent'] = [ 'title' => $this->p->t('stv', 'tab_prestudent'), - 'component' => './Stv/Studentenverwaltung/Details/Prestudent.js' + 'component' => './Stv/Studentenverwaltung/Details/Prestudent.js', + 'config' => $config['prestudent'] ]; $result['status'] = [ 'title' => 'Status', diff --git a/application/controllers/api/frontend/v1/stv/Prestudent.php b/application/controllers/api/frontend/v1/stv/Prestudent.php index ef9aeb111..0b06b9667 100644 --- a/application/controllers/api/frontend/v1/stv/Prestudent.php +++ b/application/controllers/api/frontend/v1/stv/Prestudent.php @@ -19,6 +19,7 @@ class Prestudent extends FHCAPI_Controller 'getAufmerksamdurch' => ['admin:r', 'assistenz:r'], 'getBerufstaetigkeit' => ['admin:r', 'assistenz:r'], 'getTypenStg' => ['admin:r', 'assistenz:r'], + 'getBisstandort' => ['admin:r', 'assistenz:r'], 'getStudienplaene' => ['admin:r', 'assistenz:r'], 'getStudiengang' => ['admin:r', 'assistenz:r'] ]); @@ -265,6 +266,17 @@ class Prestudent extends FHCAPI_Controller return $this->terminateWithSuccess(getData($result) ?: []); } + public function getBisstandort() + { + $this->load->model('codex/Bisstandort_model', 'BisstandortModel'); + + $result = $this->BisstandortModel->load(); + if (isError($result)) { + $this->terminateWithError(getError($result), self::ERROR_TYPE_GENERAL); + } + return $this->terminateWithSuccess(getData($result) ?: []); + } + public function getStudienplaene($prestudent_id) { $this->load->model('organisation/Studienplan_model', 'StudienplanModel'); diff --git a/application/models/codex/Bisstandort_model.php b/application/models/codex/Bisstandort_model.php new file mode 100644 index 000000000..9c7e9e45b --- /dev/null +++ b/application/models/codex/Bisstandort_model.php @@ -0,0 +1,14 @@ +dbTable = 'bis.tbl_bisstandort'; + $this->pk = 'standort_code'; + } +} diff --git a/application/views/Studentenverwaltung.php b/application/views/Studentenverwaltung.php index 2d0d22346..c8d9dc3f7 100644 --- a/application/views/Studentenverwaltung.php +++ b/application/views/Studentenverwaltung.php @@ -34,8 +34,10 @@ !defined('GENERATE_ALIAS_STUDENT') ? true : GENERATE_ALIAS_STUDENT, - 'showZgvDoktor' => !defined('ZGV_DOKTOR_ANZEIGEN') ? false : ZGV_DOKTOR_ANZEIGEN, - 'showZgvErfuellt' => !defined('ZGV_ERFUELLT_ANZEIGEN') ? false : ZGV_ERFUELLT_ANZEIGEN + + //replaced by possibility to hide each formular field via config stv.php + #'showZgvDoktor' => !defined('ZGV_DOKTOR_ANZEIGEN') ? false : ZGV_DOKTOR_ANZEIGEN, + #'showZgvErfuellt' => !defined('ZGV_ERFUELLT_ANZEIGEN') ? false : ZGV_ERFUELLT_ANZEIGEN ]; ?> diff --git a/public/js/api/stv/prestudent.js b/public/js/api/stv/prestudent.js index 4e97759f4..dd90880c5 100644 --- a/public/js/api/stv/prestudent.js +++ b/public/js/api/stv/prestudent.js @@ -1,5 +1,43 @@ export default { +//------------- Prestudent.js------------------------------------------------------ + + get(prestudent_id){ + return this.$fhcApi.post('api/frontend/v1/stv/prestudent/get/' + prestudent_id); + }, + updatePrestudent(prestudent_id, data){ + return this.$fhcApi.post('api/frontend/v1/stv/prestudent/updatePrestudent/' + prestudent_id, + data + ); + }, + getBezeichnungZGV() { + return this.$fhcApi.get('api/frontend/v1/stv/prestudent/getBezeichnungZGV/'); + }, + getBezeichnungMZgv() { + return this.$fhcApi.get('api/frontend/v1/stv/prestudent/getBezeichnungMZgv/'); + }, + getBezeichnungDZgv() { + return this.$fhcApi.get('api/frontend/v1/stv/prestudent/getBezeichnungDZgv/'); + }, + getStgs() { + return this.$fhcApi.get('api/frontend/v1/stv/lists/getStgs/'); + }, + getAusbildung() { + return this.$fhcApi.get('api/frontend/v1/stv/prestudent/getAusbildung/'); + }, + getAufmerksamdurch() { + return this.$fhcApi.get('api/frontend/v1/stv/prestudent/getAufmerksamdurch/'); + }, + getBerufstaetigkeit() { + return this.$fhcApi.get('api/frontend/v1/stv/prestudent/getBerufstaetigkeit/'); + }, + getTypenStg() { + return this.$fhcApi.get('api/frontend/v1/stv/prestudent/getTypenStg/'); + }, + getBisstandort() { + return this.$fhcApi.get('api/frontend/v1/stv/prestudent/getBisstandort/'); + }, + //------------- MultiStatus.js------------------------------------------------------ getHistoryPrestudent (url, config, params){ diff --git a/public/js/components/Stv/Studentenverwaltung/Details/Prestudent.js b/public/js/components/Stv/Studentenverwaltung/Details/Prestudent.js index e6db926cc..46edeaaf9 100644 --- a/public/js/components/Stv/Studentenverwaltung/Details/Prestudent.js +++ b/public/js/components/Stv/Studentenverwaltung/Details/Prestudent.js @@ -15,14 +15,6 @@ export default { lists: { from: 'lists' }, - showZgvErfuellt: { - from: 'configShowZgvErfuellt', - default: false - }, - showZgvDoktor: { - from: 'configShowZgvDoktor', - default: false - }, hasPrestudentPermission: { from: 'hasPrestudentPermission', default: false @@ -41,6 +33,10 @@ export default { }, props: { modelValue: Object, + config: { + type: Object, + default: {} + } }, data() { return { @@ -58,6 +54,7 @@ export default { { text: 'Nein', value: false } ], listStgTyp: [], + listBisStandort: [], initialFormData: {}, deltaArray: {}, actionUpdate: false @@ -91,8 +88,7 @@ export default { methods: { loadPrestudent() { - this.$fhcApi - .get('api/frontend/v1/stv/prestudent/get/' + this.modelValue.prestudent_id) + return this.$fhcApi.factory.stv.prestudent.get(this.modelValue.prestudent_id) .then(result => result.data) .then(result => { this.data = result; @@ -105,8 +101,7 @@ export default { this.initialFormData = {...(this.initialFormData || {}), ...udfs}; }, updatePrestudent(){ - this.$refs.form - .post('api/frontend/v1/stv/prestudent/updatePrestudent/' + this.modelValue.prestudent_id, this.deltaArray) + return this.$fhcApi.factory.stv.prestudent.updatePrestudent(this.modelValue.prestudent_id, this.deltaArray) .then(response => { this.$fhcAlert.alertSuccess(this.$p.t('ui', 'successSave')); this.deltaArray = []; @@ -120,62 +115,60 @@ export default { }, created() { this.loadPrestudent(); - this.$fhcApi - .get('api/frontend/v1/stv/prestudent/getBezeichnungZGV') + this.$fhcApi.factory.stv.prestudent.getBezeichnungZGV() .then(result => result.data) .then(result => { this.listZgvs = result; }) .catch(this.$fhcAlert.handleSystemError); - this.$fhcApi - .get('api/frontend/v1/stv/prestudent/getBezeichnungMZgv') + this.$fhcApi.factory.stv.prestudent.getBezeichnungMZgv() .then(result => result.data) .then(result => { this.listZgvsmaster = result; }) .catch(this.$fhcAlert.handleSystemError); - this.$fhcApi - .get('api/frontend/v1/stv/prestudent/getBezeichnungDZgv') + this.$fhcApi.factory.stv.prestudent.getBezeichnungDZgv() .then(result => result.data) .then(result => { this.listZgvsdoktor = result; }) .catch(this.$fhcAlert.handleSystemError); - this.$fhcApi - .get('api/frontend/v1/stv/lists/getStgs') + this.$fhcApi.factory.stv.prestudent.getStgs() .then(result => result.data) .then(result => { this.listStgs = result; }) .catch(this.$fhcAlert.handleSystemError); - this.$fhcApi - .get('api/frontend/v1/stv/prestudent/getAusbildung') + this.$fhcApi.factory.stv.prestudent.getAusbildung() .then(result => result.data) .then(result => { this.listAusbildung = result; }) .catch(this.$fhcAlert.handleSystemError); - this.$fhcApi - .get('api/frontend/v1/stv/prestudent/getAufmerksamdurch') + this.$fhcApi.factory.stv.prestudent.getAufmerksamdurch() .then(result => result.data) .then(result => { this.listAufmerksamdurch = result; }) .catch(this.$fhcAlert.handleSystemError); - this.$fhcApi - .get('api/frontend/v1/stv/prestudent/getBerufstaetigkeit') + this.$fhcApi.factory.stv.prestudent.getBerufstaetigkeit() .then(result => result.data) .then(result => { this.listBerufe = result; }) .catch(this.$fhcAlert.handleSystemError); - this.$fhcApi - .get('api/frontend/v1/stv/prestudent/getTypenStg') + this.$fhcApi.factory.stv.prestudent.getTypenStg() .then(result => result.data) .then(result => { this.listStgTyp = result; }) .catch(this.$fhcAlert.handleSystemError); + this.$fhcApi.factory.stv.prestudent.getBisstandort() + .then(result => result.data) + .then(result => { + this.listBisStandort = result; + }) + .catch(this.$fhcAlert.handleSystemError); }, template: `
@@ -187,7 +180,8 @@ export default { {{$p.t('lehre', 'title_zgv')}} {{modelValue.nachname}} {{modelValue.vorname}}
{{zgv.zgv_bez}}
{{mzgv.zgvmas_bez}}
-
+
{{zgv.zgvdoktor_bez}}
-
+
-
+
PrestudentIn
{{adurch.beschreibung}} {{beruf.berufstaetigkeit_bez}}
- ` + /* TODO(chris): Ausgeblendet für Testing
- - - + +
- */` - +
- + - +
- ` + /* TODO(chris): Ausgeblendet für Testing + - */`
- + +
diff --git a/public/js/components/Stv/Studentenverwaltung/Details/Prestudent/MultiStatus.js b/public/js/components/Stv/Studentenverwaltung/Details/Prestudent/MultiStatus.js index 6935810b1..1c2c37ec6 100644 --- a/public/js/components/Stv/Studentenverwaltung/Details/Prestudent/MultiStatus.js +++ b/public/js/components/Stv/Studentenverwaltung/Details/Prestudent/MultiStatus.js @@ -154,6 +154,7 @@ export default{ layoutColumnsOnNewData: false, height: 'auto', selectable: false, + //TODO(Manu) define Persistence Id to avoid empty result array if sort index not corresponding }, tabulatorEvents: [ { From e2839972939848fd888271dc9e43f8d93f28447a Mon Sep 17 00:00:00 2001 From: ma0068 Date: Wed, 23 Oct 2024 14:26:33 +0200 Subject: [PATCH 023/351] cleanUp Tasks Tab Details --- application/config/stv.php | 8 +- .../api/frontend/v1/stv/Config.php | 3 +- .../api/frontend/v1/stv/Student.php | 8 +- public/js/api/stv.js | 2 + public/js/api/stv/details.js | 10 + .../Studentenverwaltung/Details/Details.js | 176 ++++++++++------- system/phrasesupdate.php | 183 +++++++++++++++++- 7 files changed, 312 insertions(+), 78 deletions(-) create mode 100644 public/js/api/stv/details.js diff --git a/application/config/stv.php b/application/config/stv.php index 6296e8e6b..8b7792e83 100644 --- a/application/config/stv.php +++ b/application/config/stv.php @@ -2,9 +2,15 @@ $config['tabs'] = [ + 'details' => [ + //all fields can be configured to be hidden, see class attribute stv-details-details-name for name + 'hiddenFields' => [], + 'hideUDFs' => false + ], + 'prestudent' => [ - //all fields can be configured to be hidden, see class attribute stv-prestudent-prestudent-name for name + //all fields can be configured to be hidden, see class attribute stv-details-prestudent-name for name 'hiddenFields' => [ //corresponding to config-entry 'ZGV_DOKTOR_ANZEIGEN' in global.config diff --git a/application/controllers/api/frontend/v1/stv/Config.php b/application/controllers/api/frontend/v1/stv/Config.php index 97477fca7..fd318a79f 100644 --- a/application/controllers/api/frontend/v1/stv/Config.php +++ b/application/controllers/api/frontend/v1/stv/Config.php @@ -58,7 +58,8 @@ class Config extends FHCAPI_Controller $result['details'] = [ 'title' => $this->p->t('stv', 'tab_details'), - 'component' => './Stv/Studentenverwaltung/Details/Details.js' + 'component' => './Stv/Studentenverwaltung/Details/Details.js', + 'config' => $config['details'] ]; $result['notes'] = [ 'title' => $this->p->t('stv', 'tab_notes'), diff --git a/application/controllers/api/frontend/v1/stv/Student.php b/application/controllers/api/frontend/v1/stv/Student.php index 89c317ae4..f805be88a 100644 --- a/application/controllers/api/frontend/v1/stv/Student.php +++ b/application/controllers/api/frontend/v1/stv/Student.php @@ -55,7 +55,7 @@ class Student extends FHCAPI_Controller // Load language phrases $this->loadPhrases([ - 'ui' + 'ui', 'lehre' ]); } @@ -223,12 +223,10 @@ class Student extends FHCAPI_Controller // Check PKs if (count($update_lehrverband) + count($update_student) && $uid === null) { - // TODO(chris): phrase - $this->terminateWithValidationErrors(['' => "Kein/e StudentIn vorhanden!"]); + $this->terminateWithValidationErrors(['' => $this->p->t('lehre', 'error_no_student')]); } if (count($update_person) && $person_id === null) { - // TODO(chris): phrase - $this->terminateWithValidationErrors(['' => "Keine Person vorhanden!"]); + $this->terminateWithValidationErrors(['' => $this->p->t('lehre', 'error_no_person')]); } // Do Updates diff --git a/public/js/api/stv.js b/public/js/api/stv.js index 5a8316916..b66ae401e 100644 --- a/public/js/api/stv.js +++ b/public/js/api/stv.js @@ -5,6 +5,7 @@ import konto from './stv/konto.js'; import kontakt from './stv/kontakt.js'; import prestudent from './stv/prestudent.js'; import status from './stv/status.js'; +import details from './stv/details.js'; export default { verband, @@ -14,6 +15,7 @@ export default { kontakt, prestudent, status, + details, configStudent() { return this.$fhcApi.get('api/frontend/v1/stv/config/student'); }, diff --git a/public/js/api/stv/details.js b/public/js/api/stv/details.js new file mode 100644 index 000000000..bdf26739b --- /dev/null +++ b/public/js/api/stv/details.js @@ -0,0 +1,10 @@ +export default { + get(prestudent_id) { + return this.$fhcApi.post('api/frontend/v1/stv/student/get/' + prestudent_id); + }, + save(prestudent_id, data) { + return this.$fhcApi.post('api/frontend/v1/stv/student/save/' + prestudent_id, + data + ); + }, +} diff --git a/public/js/components/Stv/Studentenverwaltung/Details/Details.js b/public/js/components/Stv/Studentenverwaltung/Details/Details.js index ae4f92b20..34ab779ac 100644 --- a/public/js/components/Stv/Studentenverwaltung/Details/Details.js +++ b/public/js/components/Stv/Studentenverwaltung/Details/Details.js @@ -37,7 +37,11 @@ export default { } }, props: { - modelValue: Object + modelValue: Object, + config: { + type: Object, + default: {} + } }, data() { return { @@ -95,8 +99,7 @@ export default { methods: { updateStudent(n) { // TODO(chris): move to fhcapi.factory - this.$fhcApi - .get('api/frontend/v1/stv/student/get/' + n.prestudent_id) + return this.$fhcApi.factory.stv.details.get(n.prestudent_id) .then(result => { this.data = result.data; if (!this.data.familienstand) @@ -110,14 +113,13 @@ export default { return; this.$refs.form.clearValidation(); - this.$refs.form - .post('api/frontend/v1/stv/student/save/' + this.modelValue.prestudent_id, this.changed) + return this.$fhcApi.factory.stv.details.save(this.modelValue.prestudent_id, this.changed) .then(result => { this.original = {...this.data}; this.changed = {}; this.$refs.form.setFeedback(true, result.data); }) - .catch(this.$fhcAlert.handleSystemError) + .catch(this.$fhcAlert.handleSystemError); }, udfsLoaded(udfs) { this.original = {...(this.original || {}), ...udfs}; @@ -141,16 +143,17 @@ export default {
- Loading... + {{$p.t('ui', 'dropdownLoading')}}...
- Loading... + {{$p.t('ui', 'dropdownLoading')}}...
` diff --git a/public/js/components/Stv/Studentenverwaltung/Details/Kontakt/Address.js b/public/js/components/Stv/Studentenverwaltung/Details/Kontakt/Address.js index d9cdc75b2..7a24c03ff 100644 --- a/public/js/components/Stv/Studentenverwaltung/Details/Kontakt/Address.js +++ b/public/js/components/Stv/Studentenverwaltung/Details/Kontakt/Address.js @@ -62,7 +62,7 @@ export default{ {title:"Adresse_id", field:"adresse_id", visible:false}, {title:"Person_id", field:"person_id", visible:false}, {title:"Name", field:"name", visible:false}, - {title:"letzte Änderung", field:"updateamum", visible:false}, + {title:"letzte Änderung", field:"lastupdate", visible:false}, {title:"Rechnungsadresse", field:"rechnungsadresse", visible:false, formatter: (cell, formatterParams, onRendered) => { let output = cell.getValue() ? this.$p.t('ui','ja') : this.$p.t('ui','nein'); @@ -89,9 +89,14 @@ export default{ button.className = 'btn btn-outline-secondary btn-action'; button.innerHTML = ''; button.title = this.$p.t('person', 'adresse_delete'); - button.addEventListener('click', () => - this.actionDeleteAdress(cell.getData().adresse_id) - ); + + button.addEventListener('click', () => { + if (cell.getData().heimatadresse) + this.$fhcAlert.alertError(this.$p.t('person', 'error_deleteHomeAdress')); + else + this.actionDeleteAdress(cell.getData().adresse_id) + }); + container.append(button); return container; @@ -134,6 +139,9 @@ export default{ cm.getColumnByField('heimatadresse').component.updateDefinition({ title: this.$p.t('person', 'heimatadresse') }); + cm.getColumnByField('zustelladresse').component.updateDefinition({ + title: this.$p.t('person', 'zustelladresse') + }); cm.getColumnByField('co_name').component.updateDefinition({ title: this.$p.t('person', 'co_name') }); @@ -143,7 +151,7 @@ export default{ cm.getColumnByField('firmenname').component.updateDefinition({ title: this.$p.t('person', 'firma') }); - cm.getColumnByField('updateamum').component.updateDefinition({ + cm.getColumnByField('lastupdate').component.updateDefinition({ title: this.$p.t('notiz', 'letzte_aenderung') }); cm.getColumnByField('rechnungsadresse').component.updateDefinition({ @@ -152,6 +160,18 @@ export default{ cm.getColumnByField('anmerkung').component.updateDefinition({ title: this.$p.t('global', 'anmerkung') }); + cm.getColumnByField('firma_id').component.updateDefinition({ + title: this.$p.t('ui', 'firma_id') + }); + cm.getColumnByField('adresse_id').component.updateDefinition({ + title: this.$p.t('ui', 'adresse_id') + }); + cm.getColumnByField('person_id').component.updateDefinition({ + title: this.$p.t('person', 'person_id') + }); + cm.getColumnByField('actions').component.updateDefinition({ + title: this.$p.t('global', 'aktionen') + }); } } ], @@ -160,7 +180,9 @@ export default{ heimatadresse: true, rechnungsadresse: false, typ: 'h', - nation: 'A' + nation: 'A', + address: {plz: null}, + plz: null }, statusNew: true, places: [], @@ -201,37 +223,33 @@ export default{ this.loadAdress(adresse_id).then(() => { if(this.addressData.adresse_id) { - this.loadPlaces(this.addressData.plz); + this.addressData.address.plz = this.addressData.plz; + // delete this.addressData.plz; + this.loadPlaces(this.addressData.address.plz); this.$refs.adressModal.show(); } }); }, actionDeleteAdress(adresse_id) { - this.loadAdress(adresse_id).then(() => { - if(this.addressData.adresse_id) - if(this.addressData.heimatadresse) - this.$fhcAlert.alertError(this.$p.t('person', 'error_deleteHomeAdress')); - else { - this.$fhcAlert - .confirmDelete() - .then(result => result - ? adresse_id - : Promise.reject({handled: true})) - .then(this.deleteAddress) - .catch(this.$fhcAlert.handleSystemError); - } - }); + this.$fhcAlert + .confirmDelete() + .then(result => result + ? adresse_id + : Promise.reject({handled: true})) + .then(this.deleteAddress) + .catch(this.$fhcAlert.handleSystemError); }, addNewAddress(addressData) { - return this.$fhcApi.factory.stv.kontakt.addNewAddress(this.uid, this.addressData) + this.addressData.plz = this.addressData.address.plz; + return this.$refs.addressData.factory.stv.kontakt.addNewAddress(this.uid, this.addressData) .then(response => { this.$fhcAlert.alertSuccess(this.$p.t('ui', 'successSave')); this.hideModal('adressModal'); this.resetModal(); }).catch(this.$fhcAlert.handleSystemError) .finally(() => { - window.scrollTo(0, 0); + //window.scrollTo(0, 0); this.reload(); }); }, @@ -242,13 +260,18 @@ export default{ this.statusNew = false; return this.$fhcApi.factory.stv.kontakt.loadAddress(adresse_id) .then(result => { - this.addressData = result.data; - return result; + this.addressData = result.data; + this.addressData.address = {}; + this.addressData.address.plz = this.addressData.plz || null; + // delete this.addressData.plz; + return result; }) .catch(this.$fhcAlert.handleSystemError); }, updateAddress(adresse_id) { - return this.$fhcApi.factory.stv.kontakt.updateAddress(adresse_id, + //TODO(Manu) buggy with relad, warning/error: e.element.after is not a function + this.addressData.plz = this.addressData.address.plz; + return this.$refs.addressData.factory.stv.kontakt.updateAddress(adresse_id, this.addressData ).then(response => { this.$fhcAlert.alertSuccess(this.$p.t('ui', 'successSave')); @@ -256,7 +279,7 @@ export default{ this.resetModal(); }).catch(this.$fhcAlert.handleSystemError) .finally(() => { - window.scrollTo(0, 0); + //window.scrollTo(0, 0); this.reload(); }); }, @@ -271,23 +294,17 @@ export default{ }); }, loadPlaces() { - //TODO(Manu) check with chris if its okay without abortion controller -/* if (this.abortController.places) - this.abortController.places.abort();*/ - if (this.addressData.nation != 'A' || !this.addressData.plz) + if (this.abortController.places) + this.abortController.places.abort(); + if (this.addressData.nation != 'A' || !this.addressData.address.plz) return; - //this.abortController.places = new AbortController(); - return this.$fhcApi.factory.stv.kontakt.getPlaces(this.addressData.plz) + this.abortController.places = new AbortController(); + + return this.$refs.addressData.factory.stv.kontakt.getPlaces(this.addressData.address.plz) .then(result => { this.places = result.data; }); -/* .catch(error => { - if (error.code != "ERR_CANCELED") - window.setTimeout(this.loadPlaces, 100); - else - this.$fhcAlert.handleSystemError(error); - });*/ }, search(event) { return this.$fhcApi.factory.stv.kontakt.getFirmen(event.query) @@ -311,7 +328,7 @@ export default{ this.addressData.anmerkung = null; this.addressData.typ = 'h'; this.addressData.nation = 'A'; - this.addressData.plz = null; + this.addressData.address = {plz: null}; this.statusNew = true; }, @@ -388,9 +405,9 @@ export default{
@@ -418,6 +435,7 @@ export default{ v-else type="text" name="addressData.gemeinde" + :label="$p.t('person/gemeinde')" v-model="addressData.gemeinde" > @@ -444,6 +462,7 @@ export default{ v-else type="text" name="ort" + :label="$p.t('person/ort')" v-model="addressData.ort" > @@ -562,7 +581,7 @@ export default{ diff --git a/public/js/components/Stv/Studentenverwaltung/Details/Kontakt/Bankaccount.js b/public/js/components/Stv/Studentenverwaltung/Details/Kontakt/Bankaccount.js index fbb9b4a8b..140104038 100644 --- a/public/js/components/Stv/Studentenverwaltung/Details/Kontakt/Bankaccount.js +++ b/public/js/components/Stv/Studentenverwaltung/Details/Kontakt/Bankaccount.js @@ -36,10 +36,10 @@ export default{ let output; switch(cell.getValue()){ case "p": - output = "Privatkonto"; + output = this.$p.t('person', 'privatkonto'); break; case "f": - output = "Firmenkonto"; + output = this.$p.t('person', 'firmenkonto'); break; default: output = cell.getValue(); @@ -110,7 +110,6 @@ export default{ cm.getColumnByField('typ').component.updateDefinition({ title: this.$p.t('global', 'typ') }); - cm.getColumnByField('anschrift').component.updateDefinition({ title: this.$p.t('person', 'anschrift') }); @@ -120,10 +119,18 @@ export default{ cm.getColumnByField('blz').component.updateDefinition({ title: this.$p.t('person', 'blz') }); - cm.getColumnByField('verrechnung').component.updateDefinition({ title: this.$p.t('person', 'verrechnung') }); + cm.getColumnByField('person_id').component.updateDefinition({ + title: this.$p.t('person', 'person_id') + }); + cm.getColumnByField('bankverbindung_id').component.updateDefinition({ + title: this.$p.t('ui', 'bankverbindung_id') + }); + cm.getColumnByField('actions').component.updateDefinition({ + title: this.$p.t('global', 'aktionen') + }); } } ], @@ -153,18 +160,16 @@ export default{ }); }, actionDeleteBankverbindung(bankverbindung_id){ - this.loadBankverbindung(bankverbindung_id).then(() => { - this.$fhcAlert - .confirmDelete() - .then(result => result - ? bankverbindung_id - : Promise.reject({handled: true})) - .then(this.deleteBankverbindung) - .catch(this.$fhcAlert.handleSystemError); - }); + this.$fhcAlert + .confirmDelete() + .then(result => result + ? bankverbindung_id + : Promise.reject({handled: true})) + .then(this.deleteBankverbindung) + .catch(this.$fhcAlert.handleSystemError); }, addNewBankverbindung(bankverbindungData) { - return this.$fhcApi.factory.stv.kontakt.addNewBankverbindung(this.uid, this.bankverbindungData) + return this.$refs.bankverbindungData.factory.stv.kontakt.addNewBankverbindung(this.uid, this.bankverbindungData) .then(response => { this.$fhcAlert.alertSuccess(this.$p.t('ui', 'successSave')); this.hideModal('bankverbindungModal'); @@ -186,7 +191,7 @@ export default{ .catch(this.$fhcAlert.handleSystemError); }, updateBankverbindung(bankverbindung_id){ - return this.$fhcApi.factory.stv.kontakt.updateBankverbindung(bankverbindung_id, + return this.$refs.bankverbindungData.factory.stv.kontakt.updateBankverbindung(bankverbindung_id, this.bankverbindungData) .then(response => { this.$fhcAlert.alertSuccess(this.$p.t('ui', 'successSave')); @@ -234,7 +239,7 @@ export default{
- +