From a87266c32509769b8cd175cfa49378d849c3b5b2 Mon Sep 17 00:00:00 2001 From: Johann Hoffmann Date: Mon, 5 Oct 2026 17:04:22 +0200 Subject: [PATCH] icon fixes in request anrechnung; block request dispaly reason when lv is not in studienplan of logged in users prestudent history; added mehrsprachigkeit to anrechnung begruendung options in db; more phrasen; --- .../api/frontend/v1/notiz/NotizAnrechnung.php | 2 +- .../api/frontend/v1/stv/Anrechnungen.php | 24 +++--- .../lehre/anrechnung/CreateAnrechnung.php | 26 +++++++ .../lehre/anrechnung/RequestAnrechnung.php | 33 ++++++++- application/libraries/AnrechnungLib.php | 4 +- .../models/education/Anrechnung_model.php | 26 +++++-- .../education/Anrechnungszeitraum_model.php | 6 +- .../education/Lehrveranstaltung_model.php | 20 +++++ .../approveAnrechnungUebersicht.php | 9 ++- .../lehre/anrechnung/requestAnrechnung.php | 74 ++++++++----------- .../anrechnung/requestAnrechnungImportant.php | 22 +++--- .../anrechnung/reviewAnrechnungDetail.php | 9 +-- .../anrechnung/reviewAnrechnungUebersicht.php | 12 ++- .../Details/Anrechnungen/Anrechnungen.js | 18 ++++- .../js/lehre/anrechnung/requestAnrechnung.js | 21 ++++-- ...98_anrechnung_begruendung_mehrsprachig.php | 2 +- system/phrasesupdate.php | 40 ++++++++++ 17 files changed, 243 insertions(+), 105 deletions(-) diff --git a/application/controllers/api/frontend/v1/notiz/NotizAnrechnung.php b/application/controllers/api/frontend/v1/notiz/NotizAnrechnung.php index 30dae9a50..e3a5ec4ea 100644 --- a/application/controllers/api/frontend/v1/notiz/NotizAnrechnung.php +++ b/application/controllers/api/frontend/v1/notiz/NotizAnrechnung.php @@ -21,7 +21,7 @@ class NotizAnrechnung extends Notiz_Controller // Load language phrases $this->loadPhrases([ - 'ui' + 'ui', 'lehre' ]); } diff --git a/application/controllers/api/frontend/v1/stv/Anrechnungen.php b/application/controllers/api/frontend/v1/stv/Anrechnungen.php index 251e2d5bd..fef90a799 100644 --- a/application/controllers/api/frontend/v1/stv/Anrechnungen.php +++ b/application/controllers/api/frontend/v1/stv/Anrechnungen.php @@ -25,7 +25,7 @@ class Anrechnungen extends FHCAPI_Controller // Load language phrases $this->loadPhrases([ - 'ui', 'lehre' + 'ui', 'lehre', 'anrechnung' ]); // Load models @@ -45,6 +45,12 @@ class Anrechnungen extends FHCAPI_Controller { $this->load->model('education/Anrechnungbegruendung_model', 'AnrechnungbegrueundungsModel'); + // Begruendung in the users language, German name if no translation exists + $language_index = getUserLanguage() == 'German' ? 1 : 2; + $this->AnrechnungbegrueundungsModel->addSelect( + 'begruendung_id, COALESCE(bezeichnung_mehrsprachig[' . $language_index . '], bezeichnung) AS bezeichnung', + false + ); $result = $this->AnrechnungbegrueundungsModel->load(); if (isError($result)) { $this->terminateWithError(getError($result), self::ERROR_TYPE_GENERAL); @@ -118,22 +124,22 @@ class Anrechnungen extends FHCAPI_Controller : null; $this->form_validation->set_rules('lehrveranstaltung_id', 'Lehrveranstaltung_id', 'required', [ - 'required' => $this->p->t('ui', 'error_fieldRequired', ['field' => 'Lehrveranstaltung']) + 'required' => $this->p->t('ui', 'error_fieldRequired', ['field' => $this->p->t('lehre', 'lehrveranstaltung')]) ]); $this->form_validation->set_rules('begruendung', 'Begruendung', 'required', [ - 'required' => $this->p->t('ui', 'error_fieldRequired', ['field' => 'Begruendung']) + 'required' => $this->p->t('ui', 'error_fieldRequired', ['field' => $this->p->t('anrechnung', 'begruendung')]) ]); if($_POST['begruendung'] == 2) { $this->form_validation->set_rules('lehrveranstaltung_id_kompatibel', 'Lehrveranstaltung_id', 'required', [ - 'required' => $this->p->t('ui', 'error_fieldRequired', ['field' => 'Lehrveranstaltung Kompatibel']) + 'required' => $this->p->t('ui', 'error_fieldRequired', ['field' => $this->p->t('anrechnung', 'lehrveranstaltung_bez_kompatibel')]) ]); } $this->form_validation->set_rules('genehmigtVon', 'GenehmigtVon', 'required', [ - 'required' => $this->p->t('ui', 'error_fieldRequired', ['field' => 'GenehmigtVon']) + 'required' => $this->p->t('ui', 'error_fieldRequired', ['field' => $this->p->t('anrechnung', 'genehmigtVon')]) ]); if ($this->form_validation->run() == false) @@ -190,22 +196,22 @@ class Anrechnungen extends FHCAPI_Controller $_POST['genehmigtVon'] = (isset($formData['genehmigt_von']) && !empty($formData['genehmigt_von'])) ? $formData['genehmigt_von'] : null; $this->form_validation->set_rules('lehrveranstaltung_id', 'Lehrveranstaltung_id', 'required', [ - 'required' => $this->p->t('ui', 'error_fieldRequired', ['field' => 'Lehrveranstaltung']) + 'required' => $this->p->t('ui', 'error_fieldRequired', ['field' => $this->p->t('lehre', 'lehrveranstaltung')]) ]); $this->form_validation->set_rules('begruendung', 'Begruendung', 'required', [ - 'required' => $this->p->t('ui', 'error_fieldRequired', ['field' => 'Begruendung']) + 'required' => $this->p->t('ui', 'error_fieldRequired', ['field' => $this->p->t('anrechnung', 'begruendung')]) ]); if($_POST['begruendung'] == 2) { $this->form_validation->set_rules('lehrveranstaltung_id_kompatibel', 'Lehrveranstaltung_id', 'required', [ - 'required' => $this->p->t('ui', 'error_fieldRequired', ['field' => 'Lehrveranstaltung Kompatibel']) + 'required' => $this->p->t('ui', 'error_fieldRequired', ['field' => $this->p->t('anrechnung', 'lehrveranstaltung_bez_kompatibel')]) ]); } $this->form_validation->set_rules('genehmigtVon', 'GenehmigtVon', 'required', [ - 'required' => $this->p->t('ui', 'error_fieldRequired', ['field' => 'GenehmigtVon']) + 'required' => $this->p->t('ui', 'error_fieldRequired', ['field' => $this->p->t('anrechnung', 'genehmigtVon')]) ]); if ($this->form_validation->run() == false) diff --git a/application/controllers/lehre/anrechnung/CreateAnrechnung.php b/application/controllers/lehre/anrechnung/CreateAnrechnung.php index bc594371d..7532bbdd5 100644 --- a/application/controllers/lehre/anrechnung/CreateAnrechnung.php +++ b/application/controllers/lehre/anrechnung/CreateAnrechnung.php @@ -76,6 +76,13 @@ class CreateAnrechnung extends Auth_Controller // Get Anrechnungsbegruendungen $this->load->model('education/Anrechnungbegruendung_model', 'AnrechnungbegruendungModel'); + + // Begruendung in the users language, German name if no translation exists + $language_index = getUserLanguage() == 'German' ? 1 : 2; + $this->AnrechnungbegruendungModel->addSelect( + 'begruendung_id, COALESCE(bezeichnung_mehrsprachig[' . $language_index . '], bezeichnung) AS bezeichnung', + false + ); $begruendung_arr = getData($this->AnrechnungbegruendungModel->load()); $viewData = array( @@ -94,6 +101,12 @@ class CreateAnrechnung extends Auth_Controller { $prestudent_id = $this->input->post('prestudent_id'); $studiensemester_kurzbz = $this->input->post('studiensemester_kurzbz'); + + // Exit if user has no permission for the Studiengang of the student + if (!$this->anrechnunglib->isBerechtigtForPrestudent(self::BERECHTIGUNG_ANRECHNUNG_ANLEGEN, 's', $prestudent_id)) + { + $this->terminateWithJsonError($this->p->t('ui', 'keineBerechtigung')); + } // Get Student UID $student_uid = $this->StudentModel->getUID($prestudent_id); @@ -136,6 +149,19 @@ class CreateAnrechnung extends Auth_Controller { $this->terminateWithJsonError($this->p->t('ui', 'errorFelderFehlen')); } + + // Exit if user has no write permission for the Studiengang of the student + if (!$this->anrechnunglib->isBerechtigtForPrestudent(self::BERECHTIGUNG_ANRECHNUNG_ANLEGEN, 'suid', $prestudent_id)) + { + $this->terminateWithJsonError($this->p->t('ui', 'keineBerechtigung')); + } + + // Exit if the Lehrveranstaltung is not one of the LVs the form offers for this student + $result = $this->LehrveranstaltungModel->getLvsByStudent($this->StudentModel->getUID($prestudent_id), $studiensemester_kurzbz); + if (!in_array($lehrveranstaltung_id, array_column(hasData($result) ? getData($result) : array(), 'lehrveranstaltung_id'))) + { + $this->terminateWithJsonError($this->p->t('anrechnung', 'lvNichtZugeteilt')); + } // Exit if application already exists if (self::_applicationExists($lehrveranstaltung_id, $studiensemester_kurzbz, $prestudent_id)) diff --git a/application/controllers/lehre/anrechnung/RequestAnrechnung.php b/application/controllers/lehre/anrechnung/RequestAnrechnung.php index ebc272e3e..d979dd264 100644 --- a/application/controllers/lehre/anrechnung/RequestAnrechnung.php +++ b/application/controllers/lehre/anrechnung/RequestAnrechnung.php @@ -88,6 +88,10 @@ class requestAnrechnung extends Auth_Controller // Get Anrechung data $anrechnungData = $this->anrechnunglib->getAnrechnungDataByLv($lehrveranstaltung_id, $studiensemester_kurzbz, $prestudent_id); + // Check if a new Antrag is for a Lehrveranstaltung outside the Studienplan (e.g. LV of a parallel study) + $is_not_in_studienplan = !is_numeric($anrechnungData->anrechnung_id) + && !hasData($this->LehrveranstaltungModel->getLvInStudienplan($prestudent_id, $lehrveranstaltung_id)); + // Get Antrag data $antragData = $this->anrechnunglib->getAntragData($prestudent_id, $studiensemester_kurzbz, $lehrveranstaltung_id, $anrechnungData->anrechnung_id); @@ -95,7 +99,8 @@ class requestAnrechnung extends Auth_Controller 'antragData' => $antragData, 'anrechnungData' => $anrechnungData, 'is_expired' => $is_expired, - 'is_blocked' => $is_blocked + 'is_blocked' => $is_blocked, + 'is_not_in_studienplan' => $is_not_in_studienplan ); $this->load->view('lehre/anrechnung/requestAnrechnung.php', $viewData); @@ -154,7 +159,7 @@ class requestAnrechnung extends Auth_Controller // Exit if application already exists if (self::_applicationExists($lehrveranstaltung_id, $studiensemester_kurzbz, $prestudent_id)) { - return $this->outputJsonError($this->p->t('anrechnung', 'antragBereitsGestellt')); + return $this->outputJsonError($this->p->t('global', 'antragBereitsGestellt')); } // Exit if application is a past ( < actual ) studysemester @@ -162,6 +167,30 @@ class requestAnrechnung extends Auth_Controller { return $this->outputJsonError($this->p->t('anrechnung', 'antragNichtFuerVerganganeSS')); } + + // Exit if student is not assigned to the Lehrveranstaltung + if (!hasData($this->LehrveranstaltungModel->getLvByStudent($this->_uid, $studiensemester_kurzbz, $lehrveranstaltung_id))) + { + return $this->outputJsonError($this->p->t('anrechnung', 'lvNichtZugeteilt')); + } + + // Exit if Lehrveranstaltung is not in the Studienplan of the student (e.g. LV of a parallel study) + if (!hasData($this->LehrveranstaltungModel->getLvInStudienplan($prestudent_id, $lehrveranstaltung_id))) + { + return $this->outputJsonError($this->p->t('anrechnung', 'lvNichtImStudienplan')); + } + + // Exit if application deadline is expired + if ($this->_isExpired($studiensemester_kurzbz)) + { + return $this->outputJsonError($this->p->t('anrechnung', 'deadlineUeberschritten')); + } + + // Exit if Lehrveranstaltung was already graded with application blocking grades + if (self::_LVhasBlockingGrades($studiensemester_kurzbz, $lehrveranstaltung_id)) + { + return $this->outputJsonError($this->p->t('anrechnung', 'antragBenotungBlockiert')); + } // Upload document $result = self::_uploadFile(); diff --git a/application/libraries/AnrechnungLib.php b/application/libraries/AnrechnungLib.php index d119d222c..b593ce6af 100644 --- a/application/libraries/AnrechnungLib.php +++ b/application/libraries/AnrechnungLib.php @@ -59,7 +59,7 @@ class AnrechnungLib // Load LV, but check if student is assigned to that LV. Break, if not. if(!$lv = getData($this->ci->LehrveranstaltungModel->getLvByStudent($uid, $studiensemester_kurzbz, $lv_id))[0]) { - show_error('You are not assigned to this course yet.'); + show_error($this->ci->p->t('anrechnung', 'lvNichtZugeteilt')); } } @@ -788,7 +788,7 @@ class AnrechnungLib $result = $this->ci->AnrechnungModel->load($anrechnung_id); if (!hasData($result)) { - showError('Anrechnung existiert nicht'); + show_error('Failed loading Anrechnung'); } // Get lectors of lehrveranstaltung diff --git a/application/models/education/Anrechnung_model.php b/application/models/education/Anrechnung_model.php index 0b81be80c..5ca4a5ae6 100644 --- a/application/models/education/Anrechnung_model.php +++ b/application/models/education/Anrechnung_model.php @@ -61,7 +61,7 @@ class Anrechnung_model extends DB_Model if ($this->db->trans_status() === false) { $this->db->trans_rollback(); - return error('Failed inserting Anrechnung', EXIT_ERROR); + return error($this->p->t('ui', 'fehlerBeimSpeichern'), EXIT_ERROR); } return success($lastInsert_anrechnung_id); @@ -166,7 +166,7 @@ class Anrechnung_model extends DB_Model // Get last Anrechnungstatus if (!$result = getData($this->AnrechnungModel->getLastAnrechnungstatus($anrechnung_id))[0]) { - return error('Failed loading Anrechnung'); + return error($this->p->t('ui', 'fehlerBeimLesen')); } $last_status = $result->status_kurzbz; @@ -175,7 +175,7 @@ class Anrechnung_model extends DB_Model // Exit, if last status is not approved / rejected if ($last_status != self::ANRECHNUNGSTATUS_APPROVED && $last_status != self::ANRECHNUNGSTATUS_REJECTED) { - return error('Nothing to withdraw. Application is still in progress'); + return error($this->p->t('anrechnung', 'keineGenehmigungZumZuruecknehmen')); } // Start DB transaction @@ -197,7 +197,7 @@ class Anrechnung_model extends DB_Model if ($this->db->trans_status() === false) { $this->db->trans_rollback(); - return error('Failed withdrawing Genehmigung', EXIT_ERROR); + return error($this->p->t('anrechnung', 'antragNichtZurueckgenommen'), EXIT_ERROR); } return success(); @@ -211,21 +211,31 @@ class Anrechnung_model extends DB_Model */ public function getAnrechnungsData($prestudent_id) { + // Names in the users language, German if no translation exists + $english = getUserLanguage() != 'German'; + $language_index = $english ? 2 : 1; + $lv_bezeichnung = $english + ? 'COALESCE(NULLIF(lehre.tbl_lehrveranstaltung.bezeichnung_english, \'\'), lehre.tbl_lehrveranstaltung.bezeichnung)' + : 'lehre.tbl_lehrveranstaltung.bezeichnung'; + $lv_comp_bezeichnung = $english + ? 'COALESCE(NULLIF(lv_comp.bezeichnung_english, \'\'), lv_comp.bezeichnung)' + : 'lv_comp.bezeichnung'; + $qry = ' SELECT lehre.tbl_anrechnung.anrechnung_id, lehre.tbl_anrechnung.prestudent_id, lehre.tbl_anrechnung.lehrveranstaltung_id, - lehre.tbl_lehrveranstaltung.bezeichnung AS bez_lehrveranstaltung, - lehre.tbl_anrechnung_begruendung.bezeichnung AS begruendung, - lehre.tbl_anrechnung_anrechnungstatus.status_kurzbz AS status, + ' . $lv_bezeichnung . ' AS bez_lehrveranstaltung, + COALESCE(lehre.tbl_anrechnung_begruendung.bezeichnung_mehrsprachig[' . $language_index . '], lehre.tbl_anrechnung_begruendung.bezeichnung) AS begruendung, + COALESCE(lehre.tbl_anrechnungstatus.bezeichnung_mehrsprachig[' . $language_index . '], lehre.tbl_anrechnung_anrechnungstatus.status_kurzbz) AS status, genehmigt_von, lehre.tbl_anrechnung.insertamum, lehre.tbl_anrechnung.insertvon, lehre.tbl_anrechnung.updateamum, lehre.tbl_anrechnung.updatevon, lehrveranstaltung_id_kompatibel, - lv_comp.bezeichnung as lehrveranstaltung_bez_kompatibel, + ' . $lv_comp_bezeichnung . ' as lehrveranstaltung_bez_kompatibel, count(nz.notizzuordnung_id) AS notizen_anzahl FROM lehre.tbl_anrechnung diff --git a/application/models/education/Anrechnungszeitraum_model.php b/application/models/education/Anrechnungszeitraum_model.php index e6f0f13d3..0a094c314 100644 --- a/application/models/education/Anrechnungszeitraum_model.php +++ b/application/models/education/Anrechnungszeitraum_model.php @@ -31,7 +31,7 @@ class Anrechnungszeitraum_model extends DB_Model if (isError($result)) { - return error('Fehler bei Anrechnungszeitraum speichern.'); + return error($this->p->t('ui', 'fehlerBeimSpeichern')); } // Return new anrechnungszeitraum_id @@ -50,7 +50,7 @@ class Anrechnungszeitraum_model extends DB_Model if (isError($result)) { - return error('Fehler bei Anrechnungszeitraum löschen.'); + return error($this->p->t('anrechnung', 'fehlerBeimLoeschen')); } return success($result->retval); @@ -78,7 +78,7 @@ class Anrechnungszeitraum_model extends DB_Model if (isError($result)) { - return error('Fehler bei Anrechnungszeitraum update.'); + return error($this->p->t('ui', 'fehlerBeimSpeichern')); } return success($result->retval); diff --git a/application/models/education/Lehrveranstaltung_model.php b/application/models/education/Lehrveranstaltung_model.php index ffa652cbc..27f32bb1e 100644 --- a/application/models/education/Lehrveranstaltung_model.php +++ b/application/models/education/Lehrveranstaltung_model.php @@ -658,6 +658,26 @@ class Lehrveranstaltung_model extends DB_Model return $this->execQuery($query, array($uid, $studiensemester_kurzbz, $lehrveranstaltung_id)); } + /** + * Gets the Lehrveranstaltung if it is in a Studienplan of the prestudent. + * Checks the Studienplaene of all statuses, because the status of a future semester can be missing. + * @param $prestudent_id + * @param $lehrveranstaltung_id + * @return array|null + */ + public function getLvInStudienplan($prestudent_id, $lehrveranstaltung_id) + { + $query = ' + SELECT DISTINCT spl.lehrveranstaltung_id + FROM public.tbl_prestudentstatus ps + JOIN lehre.tbl_studienplan_lehrveranstaltung spl USING (studienplan_id) + WHERE ps.prestudent_id = ? + AND spl.lehrveranstaltung_id = ?; + '; + + return $this->execQuery($query, array($prestudent_id, $lehrveranstaltung_id)); + } + /** * Get Lehreinheit. * diff --git a/application/views/lehre/anrechnung/approveAnrechnungUebersicht.php b/application/views/lehre/anrechnung/approveAnrechnungUebersicht.php index 758be8474..eb32918ca 100644 --- a/application/views/lehre/anrechnung/approveAnrechnungUebersicht.php +++ b/application/views/lehre/anrechnung/approveAnrechnungUebersicht.php @@ -141,7 +141,8 @@ if (defined("CIS4")) { + class="btn btn-outline-secondary col-auto">p->t('ui', 'anzeigen')); ?> + @@ -179,9 +180,11 @@ if (defined("CIS4")) {
  • p->t('anrechnung', 'genehmigungNegativKenntnisseNichtGleichwertigWeilHinweis'); ?>
  • - + placeholder="p->t('anrechnung', 'textUebernehmenOderEigenenBegruendungstext'); ?>" + required> diff --git a/application/views/lehre/anrechnung/requestAnrechnung.php b/application/views/lehre/anrechnung/requestAnrechnung.php index 81b07b1ee..5ec10ba12 100644 --- a/application/views/lehre/anrechnung/requestAnrechnung.php +++ b/application/views/lehre/anrechnung/requestAnrechnung.php @@ -11,7 +11,7 @@ $includesArray = array( 'jquery3' => true, 'jqueryui1' => true, 'bootstrap5' => true, - 'fontawesome4' => true, + 'fontawesome6' => true, 'ajaxlib' => true, 'dialoglib' => true, 'cis'=>true, @@ -36,8 +36,10 @@ $includesArray = array( 'anrechnung' => array( 'deadlineUeberschritten', 'benotungDerLV', + 'lvNichtImStudienplan', 'anrechnungEctsTextBeiUeberschreitung', - 'anrechnungEctsTooltipTextBeiUeberschreitung' + 'anrechnungEctsTooltipTextBeiUeberschreitung', + 'hoechstgrenzeUeberschritten' ), 'person' => array( 'student', @@ -158,9 +160,9 @@ else - Total ECTS: sumEctsSchulisch + $antragData->sumEctsBeruflich, 1) ?> - [ Schulisch: sumEctsSchulisch ?> | - Beruflich: sumEctsBeruflich ?> ] + p->t('anrechnung', 'totalEcts'); ?>: sumEctsSchulisch + $antragData->sumEctsBeruflich, 1) ?> + [ p->t('anrechnung', 'schulisch'); ?>: sumEctsSchulisch ?> | + p->t('anrechnung', 'beruflich'); ?>: sumEctsBeruflich ?> ]
    @@ -184,43 +186,31 @@ else

    p->t('anrechnung', 'antragStellenText'); ?>

    -
    -
    - begruendung_id == '1' ? 'checked' : ''; ?> required /> p->t('anrechnung', 'antragStellenWegenZeugnis'); ?> 
    -
    -
    - begruendung_id == '5' ? 'checked' : ''; ?> required /> p->t('anrechnung', 'antragStellenWegenHochschulzeugnis'); ?> 
    -
    - begruendung_id == '4' ? 'checked' : ''; ?> required /> p->t('anrechnung', 'antragStellenWegenPraxis'); ?> 
    -
    - - -
    @@ -285,7 +275,7 @@ else required>
    - +
    dokumentname) ?> - - - @@ -303,38 +290,35 @@ else
    - -
    -
    - p->t('anrechnung', 'herkunftDerKenntnisse'); ?>  -
    - -
    -
    -
    - - p->t('ui', 'maxZeichen'); ?> : -
    +
    +
    + p->t('anrechnung', 'herkunftDerKenntnisse'); ?>  +
    +
    - +
    + + p->t('ui', 'maxZeichen'); ?> : +
    +
    +
    - -
    +
    p->t('anrechnung', 'bestaetigungstext'); ?> -
    +
    -
    @@ -343,16 +327,18 @@ else
    -
    Status: - status; ?> - +
    p->t('global', 'status'); ?>: + + status; ?> +
    + data-blocked="" + data-not_in_studienplan="">
    load->view('lehre/anrechnung/requestAnrechnungImportant'); ?>
    diff --git a/application/views/lehre/anrechnung/requestAnrechnungImportant.php b/application/views/lehre/anrechnung/requestAnrechnungImportant.php index 0ec44c047..0b3bd882a 100644 --- a/application/views/lehre/anrechnung/requestAnrechnungImportant.php +++ b/application/views/lehre/anrechnung/requestAnrechnungImportant.php @@ -3,10 +3,10 @@ config->item('display_infobox')['fristen']) && $this->config->item('display_infobox')['fristen'] === true): ?>

    -
    -
    - +
    +
    +   p->t('anrechnung', 'requestAnrechnungInfoFristenTitle'); ?>
    @@ -23,9 +23,10 @@ config->item('display_infobox')['referenzbeispiele_ects']) && $this->config->item('display_infobox')['referenzbeispiele_ects'] === true): ?>

    -

    @@ -148,10 +150,12 @@ if (defined("CIS4")) { p->t('anrechnung', 'empfehlungenNegativQuestion'); ?>

    -  p->t('anrechnung', 'bitteBegruendungAngeben'); ?> + +  p->t('anrechnung', 'bitteBegruendungAngeben'); ?> p->t('anrechnung', 'begruendungWirdFuerAlleUebernommen'); ?> - + +
      diff --git a/public/js/components/Stv/Studentenverwaltung/Details/Anrechnungen/Anrechnungen.js b/public/js/components/Stv/Studentenverwaltung/Details/Anrechnungen/Anrechnungen.js index 1d28bf618..1e26caefb 100644 --- a/public/js/components/Stv/Studentenverwaltung/Details/Anrechnungen/Anrechnungen.js +++ b/public/js/components/Stv/Studentenverwaltung/Details/Anrechnungen/Anrechnungen.js @@ -134,7 +134,7 @@ export default { event: 'tableBuilt', handler: async () => { - await this.$p.loadCategory(['anrechnungen', 'global', 'ui', 'lehre']); + await this.$p.loadCategory(['anrechnung', 'global', 'ui', 'lehre']); const setHeader = (field, text) => { const col = this.$refs.table.tabulator.getColumn(field); @@ -158,6 +158,10 @@ export default { setHeader( 'genehmigt_von', this.$p.t('anrechnung', 'genehmigtVon')); setHeader( 'notizen_anzahl', this.$p.t('anrechnung', 'existingNotes')); setHeader( 'insertamum', this.$p.t('global', 'datum')); + setHeader( 'actions', this.$p.t('global', 'aktionen')); + + // Render the action buttons again, their phrases can arrive after the data + this.$refs.table.tabulator.redraw(true); } } ]; @@ -280,6 +284,12 @@ export default { resetLvKompatibel(){ this.formData.lehrveranstaltung_id_kompatibel = null; this.handleInput(); + }, + lvBezeichnung(lv) { + // English name only if the LV has one + return this.$p.user_language.value != 'German' && lv.bezeichnung_english + ? lv.bezeichnung_english + : lv.bezeichnung; } }, created() { @@ -380,7 +390,7 @@ export default { :key="entry.lehrveranstaltung_id" :value="entry.lehrveranstaltung_id" > - {{entry.bezeichnung}} Semester {{entry.semester}} {{entry.lehrform_kurzbz}} + {{lvBezeichnung(entry)}} Semester {{entry.semester}} {{entry.lehrform_kurzbz}}
    @@ -407,7 +417,7 @@ export default {
    @@ -416,7 +426,7 @@ export default { :key="entry.lehrveranstaltung_id" :value="entry.lehrveranstaltung_id" > - {{entry.bezeichnung}} Semester {{entry.semester}} {{entry.lehrform_kurzbz}} + {{lvBezeichnung(entry)}} Semester {{entry.semester}} {{entry.lehrform_kurzbz}}
    diff --git a/public/js/lehre/anrechnung/requestAnrechnung.js b/public/js/lehre/anrechnung/requestAnrechnung.js index c92665757..91d58da80 100644 --- a/public/js/lehre/anrechnung/requestAnrechnung.js +++ b/public/js/lehre/anrechnung/requestAnrechnung.js @@ -181,9 +181,10 @@ var requestAnrechnung = { const anrechnung_id = $('#requestAnrechnung-sperre').data('anrechnung_id'); const is_expired = $('#requestAnrechnung-sperre').data('expired'); const is_blocked = $('#requestAnrechnung-sperre').data('blocked'); + const is_not_in_studienplan = $('#requestAnrechnung-sperre').data('not_in_studienplan'); - // If Deadline is expired or is blocked by grades of LV, AND not already angerechnet - if ((is_expired || is_blocked) && anrechnung_id == '') + // If Deadline is expired, LV is blocked by grades or LV is not in the Studienplan, AND not already angerechnet + if ((is_expired || is_blocked || is_not_in_studienplan) && anrechnung_id == '') { // Hide status panel $('#requestAnrechnung-status').hide(); @@ -194,7 +195,10 @@ var requestAnrechnung = { .html(function(){ let sperregrund = FHC_PhrasesLib.t('global', 'bearbeitungGesperrt') + ': '; - if (is_expired) { + if (is_not_in_studienplan) { + sperregrund += FHC_PhrasesLib.t('anrechnung', 'lvNichtImStudienplan'); + } + else if (is_expired) { sperregrund += FHC_PhrasesLib.t('anrechnung', 'deadlineUeberschritten'); } else if (is_blocked){ @@ -294,7 +298,7 @@ var requestAnrechnung = { ) { $('#requestAnrechnung-maxEctsUeberschrittenMsg') - .html("Die Höchstgrenze für Anrechnungen gem. § 12 Abs. 3 Fachhochschulgesetz ist überschritten. ") + .html("" + FHC_PhrasesLib.t("anrechnung", "hoechstgrenzeUeberschritten") + " ") .addClass('bg-danger-subtle') .tooltip({ title: FHC_PhrasesLib.t("anrechnung", "anrechnungEctsTooltipTextBeiUeberschreitung"), @@ -351,11 +355,12 @@ var requestAnrechnung = { }, getMsgBeiEctsUeberschreitung: function(begruendung_id, ects, sumEctsSchulisch, sumEctsBeruflich){ - const phraseUsed = 'Die Höchstgrenze für Anrechnungen gem. § 12 Abs. 3 Fachhochschulgesetz wird überschritten.Bisherige ECTS + ECTS dieser LV: Total: {0} [ Schulisch: {1} | Beruflich: {2} ] '; - return $('
    ') - .html(phraseUsed) // schulisch - .append('') + .html(FHC_PhrasesLib.t("anrechnung", "anrechnungEctsTextBeiUeberschreitung", + begruendung_id == 4 + ? [(sumEctsSchulisch + sumEctsBeruflich + ects), sumEctsSchulisch, (sumEctsBeruflich + ects)] // beruflich + : [(sumEctsSchulisch + sumEctsBeruflich + ects), (sumEctsSchulisch + ects), sumEctsBeruflich])) // schulisch + .append(' ') .addClass('bg-danger-subtle') .tooltip({ title: FHC_PhrasesLib.t("anrechnung", "anrechnungEctsTooltipTextBeiUeberschreitung"), diff --git a/system/dbupdate_3.4/83598_anrechnung_begruendung_mehrsprachig.php b/system/dbupdate_3.4/83598_anrechnung_begruendung_mehrsprachig.php index 47e374586..85dce9a13 100644 --- a/system/dbupdate_3.4/83598_anrechnung_begruendung_mehrsprachig.php +++ b/system/dbupdate_3.4/83598_anrechnung_begruendung_mehrsprachig.php @@ -13,7 +13,7 @@ if ($result = $db->db_query("SELECT 1 FROM information_schema.columns WHERE tabl UPDATE lehre.tbl_anrechnung_begruendung SET bezeichnung_mehrsprachig = ARRAY[ bezeichnung, CASE bezeichnung - WHEN 'externes Zeugnis' THEN 'external certificate' + WHEN 'schulisches Zeugnis' THEN 'school certificate' WHEN 'kompatible Lehrveranstaltung' THEN 'compatible course' WHEN 'Prüfung' THEN 'examination' WHEN 'berufliche Praxis' THEN 'professional practice' diff --git a/system/phrasesupdate.php b/system/phrasesupdate.php index bb4e69533..9f2b36987 100644 --- a/system/phrasesupdate.php +++ b/system/phrasesupdate.php @@ -13742,6 +13742,46 @@ Any unusual occurrences ) ) ), + array( + 'app' => 'core', + 'category' => 'anrechnung', + 'phrase' => 'keineGenehmigungZumZuruecknehmen', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => 'Es gibt keine Genehmigung oder Ablehnung zum Zurücknehmen. Der Antrag ist noch in Bearbeitung.', + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => 'There is no approval or rejection to withdraw. The application is still in progress.', + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), + array( + 'app' => 'core', + 'category' => 'anrechnung', + 'phrase' => 'fehlerBeimLoeschen', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => 'Fehler beim Löschen', + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => 'Error while deleting', + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), array( 'app' => 'core', 'category' => 'anrechnung',