mirror of
https://github.com/FH-Complete/FHC-Core.git
synced 2026-06-01 20:29:29 +00:00
Merge branch 'feature-60875/FHC4_Studierendenverwaltung_Anrechnungen' into merge_FHC4_55354_55991_55992_60874_60875_61229_61230_61231
This commit is contained in:
@@ -52,7 +52,11 @@ $config['tabs'] =
|
||||
],
|
||||
],
|
||||
],
|
||||
]
|
||||
],
|
||||
'exemptions' => [
|
||||
//if true, Anrechnungen can be added and edited in tab Anrechnungen
|
||||
'editableAnrechnungen' => false,
|
||||
],
|
||||
];
|
||||
|
||||
// List of fields to show when ZGV_DOKTOR_ANZEIGEN is defined
|
||||
|
||||
@@ -0,0 +1,241 @@
|
||||
<?php
|
||||
|
||||
if (! defined('BASEPATH')) exit('No direct script access allowed');
|
||||
|
||||
use \DateTime as DateTime;
|
||||
|
||||
class Anrechnungen extends FHCAPI_Controller
|
||||
{
|
||||
public function __construct()
|
||||
{
|
||||
parent::__construct([
|
||||
'getAnrechnungen' => ['admin:r', 'assistenz:r'],
|
||||
'deleteAnrechnung' => ['admin:rw', 'assistenz:rw'],
|
||||
'getLehrveranstaltungen' => ['admin:r', 'assistenz:r'],
|
||||
'getBegruendungen' => ['admin:r', 'assistenz:r'],
|
||||
'getLektoren' => ['admin:r', 'assistenz:r'],
|
||||
'getLvsKompatibel' => ['admin:r', 'assistenz:r'],
|
||||
'insertAnrechnung' => ['admin:rw', 'assistenz:rw'],
|
||||
'loadAnrechnung' => ['admin:rw', 'assistenz:rw'],
|
||||
'updateAnrechnung' => ['admin:rw', 'assistenz:rw'],
|
||||
]);
|
||||
|
||||
// Load Libraries
|
||||
$this->load->library('VariableLib', ['uid' => getAuthUID()]);
|
||||
|
||||
// Load language phrases
|
||||
$this->loadPhrases([
|
||||
'ui', 'lehre'
|
||||
]);
|
||||
|
||||
// Load models
|
||||
$this->load->model('education/Anrechnung_model', 'AnrechnungsModel');
|
||||
}
|
||||
|
||||
public function getAnrechnungen($prestudent_id)
|
||||
{
|
||||
$result = $this->AnrechnungsModel->getAnrechnungsData($prestudent_id);
|
||||
|
||||
$data = $this->getDataOrTerminateWithError($result);
|
||||
|
||||
$this->terminateWithSuccess($data);
|
||||
}
|
||||
|
||||
public function getBegruendungen()
|
||||
{
|
||||
$this->load->model('education/Anrechnungbegruendung_model', 'AnrechnungbegrueundungsModel');
|
||||
|
||||
$result = $this->AnrechnungbegrueundungsModel->load();
|
||||
if (isError($result)) {
|
||||
$this->terminateWithError(getError($result), self::ERROR_TYPE_GENERAL);
|
||||
}
|
||||
$this->terminateWithSuccess(getData($result) ?: []);
|
||||
}
|
||||
|
||||
public function getLehrveranstaltungen($prestudent_id)
|
||||
{
|
||||
$this->load->model('crm/Prestudentstatus_model', 'PrestudentstatusModel');
|
||||
$result = $this->PrestudentstatusModel->getLastStatus($prestudent_id);
|
||||
|
||||
$data = $this->getDataOrTerminateWithError($result);
|
||||
$studienplan_id = current($data)->studienplan_id;
|
||||
|
||||
$this->load->model('education/Lehrveranstaltung_model', 'LehrveranstaltungModel');
|
||||
$result = $this->LehrveranstaltungModel->getLvsByStudienplanId($studienplan_id);
|
||||
$data = $this->getDataOrTerminateWithError($result);
|
||||
|
||||
$this->terminateWithSuccess($data);
|
||||
}
|
||||
|
||||
public function getLvsKompatibel($lehrveranstaltung_id)
|
||||
{
|
||||
$this->AnrechnungsModel->addJoin('lehre.tbl_lehrveranstaltung lv', 'ON (lv.lehrveranstaltung_id = lehre.tbl_anrechnung.lehrveranstaltung_id)');
|
||||
$result = $this->AnrechnungsModel->loadWhere(
|
||||
['lehrveranstaltung_id_kompatibel' => $lehrveranstaltung_id]
|
||||
);
|
||||
|
||||
$data = $this->getDataOrTerminateWithError($result);
|
||||
|
||||
$this->terminateWithSuccess($data);
|
||||
}
|
||||
|
||||
public function getLektoren($studiengang_kz)
|
||||
{
|
||||
$this->load->model('ressource/Mitarbeiter_model', 'MitarbeiterModel');
|
||||
|
||||
$result = $this->MitarbeiterModel->getLektoren($studiengang_kz);
|
||||
$data = $this->getDataOrTerminateWithError($result);
|
||||
|
||||
$this->terminateWithSuccess($data);
|
||||
}
|
||||
|
||||
public function insertAnrechnung()
|
||||
{
|
||||
$this->load->library('form_validation');
|
||||
|
||||
$prestudent_id = $this->input->post('prestudent_id');
|
||||
|
||||
if(!$prestudent_id)
|
||||
{
|
||||
return $this->terminateWithError($this->p->t('ui', 'error_missingId', ['id'=> 'Student UID']), self::ERROR_TYPE_GENERAL);
|
||||
}
|
||||
|
||||
$formData = $this->input->post('formData');
|
||||
$_POST['lehrveranstaltung_id'] =
|
||||
(isset($formData['lehrveranstaltung_id']) && !empty($formData['lehrveranstaltung_id']))
|
||||
? $formData['lehrveranstaltung_id']
|
||||
: null;
|
||||
$_POST['lehrveranstaltung_id_kompatibel'] =
|
||||
(isset($formData['lehrveranstaltung_id_kompatibel']) && !empty($formData['lehrveranstaltung_id_kompatibel']))
|
||||
? $formData['lehrveranstaltung_id_kompatibel']
|
||||
: null;
|
||||
$_POST['begruendung'] =
|
||||
(isset($formData['begruendung_id']) && !empty($formData['begruendung_id']))
|
||||
? $formData['begruendung_id']
|
||||
: null;
|
||||
$_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'])
|
||||
]);
|
||||
|
||||
$this->form_validation->set_rules('begruendung', 'Begruendung', 'required', [
|
||||
'required' => $this->p->t('ui', 'error_fieldRequired', ['field' => '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'])
|
||||
]);
|
||||
}
|
||||
|
||||
$this->form_validation->set_rules('genehmigtVon', 'GenehmigtVon', 'required', [
|
||||
'required' => $this->p->t('ui', 'error_fieldRequired', ['field' => 'GenehmigtVon'])
|
||||
]);
|
||||
|
||||
if ($this->form_validation->run() == false)
|
||||
{
|
||||
$this->terminateWithValidationErrors($this->form_validation->error_array());
|
||||
}
|
||||
|
||||
$result = $this->AnrechnungsModel->insert(
|
||||
[
|
||||
'prestudent_id' => $prestudent_id,
|
||||
'lehrveranstaltung_id' => $_POST['lehrveranstaltung_id'],
|
||||
'lehrveranstaltung_id_kompatibel' => $_POST['lehrveranstaltung_id_kompatibel'],
|
||||
'begruendung_id' => $_POST['begruendung'],
|
||||
'genehmigt_von' => $_POST['genehmigtVon']
|
||||
]
|
||||
);
|
||||
$data = $this->getDataOrTerminateWithError($result);
|
||||
|
||||
$this->terminateWithSuccess($data);
|
||||
}
|
||||
|
||||
public function loadAnrechnung($anrechnung_id)
|
||||
{
|
||||
$result = $this->AnrechnungsModel->loadWhere(
|
||||
array('anrechnung_id' => $anrechnung_id)
|
||||
);
|
||||
$data = $this->getDataOrTerminateWithError($result);
|
||||
|
||||
$this->terminateWithSuccess(current($data));
|
||||
}
|
||||
|
||||
public function updateAnrechnung()
|
||||
{
|
||||
$this->load->library('form_validation');
|
||||
|
||||
$anrechnung_id = $this->input->post('anrechnung_id');
|
||||
|
||||
if(!$anrechnung_id)
|
||||
{
|
||||
return $this->terminateWithError($this->p->t('ui', 'error_missingId', ['id'=> 'Anrechnung UID']), self::ERROR_TYPE_GENERAL);
|
||||
}
|
||||
|
||||
$formData = $this->input->post('formData');
|
||||
$_POST['lehrveranstaltung_id'] =
|
||||
(isset($formData['lehrveranstaltung_id']) && !empty($formData['lehrveranstaltung_id']))
|
||||
? $formData['lehrveranstaltung_id']
|
||||
: null;
|
||||
$_POST['lehrveranstaltung_id_kompatibel'] =
|
||||
(isset($formData['lehrveranstaltung_id_kompatibel']) && !empty($formData['lehrveranstaltung_id_kompatibel']))
|
||||
? $formData['lehrveranstaltung_id_kompatibel']
|
||||
: null;
|
||||
$_POST['begruendung'] = (isset($formData['begruendung_id']) && !empty($formData['begruendung_id'])) ? $formData['begruendung_id'] : null;
|
||||
$_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'])
|
||||
]);
|
||||
|
||||
$this->form_validation->set_rules('begruendung', 'Begruendung', 'required', [
|
||||
'required' => $this->p->t('ui', 'error_fieldRequired', ['field' => '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'])
|
||||
]);
|
||||
}
|
||||
|
||||
$this->form_validation->set_rules('genehmigtVon', 'GenehmigtVon', 'required', [
|
||||
'required' => $this->p->t('ui', 'error_fieldRequired', ['field' => 'GenehmigtVon'])
|
||||
]);
|
||||
|
||||
if ($this->form_validation->run() == false)
|
||||
{
|
||||
$this->terminateWithValidationErrors($this->form_validation->error_array());
|
||||
}
|
||||
|
||||
$result = $this->AnrechnungsModel->update(
|
||||
[
|
||||
'anrechnung_id' => $anrechnung_id,
|
||||
],
|
||||
[
|
||||
|
||||
'lehrveranstaltung_id' => $_POST['lehrveranstaltung_id'],
|
||||
'lehrveranstaltung_id_kompatibel' => $_POST['lehrveranstaltung_id_kompatibel'],
|
||||
'begruendung_id' => $_POST['begruendung'],
|
||||
'genehmigt_von' => $_POST['genehmigtVon']
|
||||
]
|
||||
);
|
||||
$data = $this->getDataOrTerminateWithError($result);
|
||||
|
||||
$this->terminateWithSuccess($data);
|
||||
}
|
||||
|
||||
public function deleteAnrechnung($anrechnung_id)
|
||||
{
|
||||
$result = $this->AnrechnungsModel->delete(
|
||||
array('anrechnung_id' => $anrechnung_id)
|
||||
);
|
||||
|
||||
$data = $this->getDataOrTerminateWithError($result);
|
||||
$this->terminateWithSuccess($data);
|
||||
}
|
||||
}
|
||||
@@ -130,6 +130,12 @@ class Config extends FHCAPI_Controller
|
||||
'component' => './Stv/Studentenverwaltung/Details/Pruefung.js'
|
||||
];
|
||||
|
||||
$result['exemptions'] = [
|
||||
'title' => $this->p->t('lehre', 'anrechnungen'),
|
||||
'component' => './Stv/Studentenverwaltung/Details/Anrechnungen.js',
|
||||
'config' => $config['exemptions']
|
||||
];
|
||||
|
||||
$result['finalexam'] = [
|
||||
'title' => $this->p->t('stv', 'tab_finalexam'),
|
||||
'component' => './Stv/Studentenverwaltung/Details/Abschlusspruefung.js',
|
||||
|
||||
@@ -202,4 +202,66 @@ class Anrechnung_model extends DB_Model
|
||||
return success();
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Get Anrechnungsdata for Table Anrechnungen
|
||||
*
|
||||
* @param $prestudent_id
|
||||
* @return array
|
||||
*/
|
||||
public function getAnrechnungsData($prestudent_id)
|
||||
{
|
||||
$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,
|
||||
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,
|
||||
count(nz.notizzuordnung_id) AS notizen_anzahl
|
||||
FROM
|
||||
lehre.tbl_anrechnung
|
||||
JOIN lehre.tbl_lehrveranstaltung USING (lehrveranstaltung_id)
|
||||
LEFT JOIN lehre.tbl_lehrveranstaltung lv_comp ON (lehre.tbl_anrechnung.lehrveranstaltung_id_kompatibel = lv_comp.lehrveranstaltung_id)
|
||||
JOIN lehre.tbl_anrechnung_begruendung USING (begruendung_id)
|
||||
LEFT JOIN lehre.tbl_anrechnung_anrechnungstatus ON (lehre.tbl_anrechnung_anrechnungstatus.anrechnung_id = lehre.tbl_anrechnung.anrechnung_id)
|
||||
AND lehre.tbl_anrechnung_anrechnungstatus.insertamum = (
|
||||
SELECT MAX(insertamum)
|
||||
FROM lehre.tbl_anrechnung_anrechnungstatus
|
||||
WHERE anrechnung_id = lehre.tbl_anrechnung.anrechnung_id
|
||||
)
|
||||
LEFT JOIN lehre.tbl_anrechnungstatus USING (status_kurzbz)
|
||||
LEFT JOIN public.tbl_notizzuordnung nz ON (nz.anrechnung_id = lehre.tbl_anrechnung.anrechnung_id)
|
||||
WHERE
|
||||
lehre.tbl_anrechnung.prestudent_id = ?
|
||||
GROUP BY
|
||||
nz.anrechnung_id,
|
||||
lehre.tbl_anrechnung.anrechnung_id,
|
||||
lehre.tbl_anrechnung.prestudent_id,
|
||||
lehre.tbl_anrechnung.lehrveranstaltung_id,
|
||||
bez_lehrveranstaltung,
|
||||
begruendung,
|
||||
status,
|
||||
genehmigt_von,
|
||||
lehre.tbl_anrechnung.insertamum,
|
||||
lehre.tbl_anrechnung.insertvon,
|
||||
lehre.tbl_anrechnung.updateamum,
|
||||
lehre.tbl_anrechnung.updatevon,
|
||||
lehrveranstaltung_id_kompatibel,
|
||||
lehrveranstaltung_bez_kompatibel
|
||||
ORDER BY
|
||||
lehre.tbl_anrechnung.updateamum ASC
|
||||
';
|
||||
|
||||
return $this->execQuery($qry, array($prestudent_id));
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -988,4 +988,41 @@ class Lehrveranstaltung_model extends DB_Model
|
||||
|
||||
return $this->execQuery($qry, $params);
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets lehrveranstaltungen of Studienplan
|
||||
* @param $studienplan_id ID des Studienplans
|
||||
* @param $semester Semester optional
|
||||
* @return array|null
|
||||
*/
|
||||
public function getLvsByStudienplanId($studienplan_id, $semester = null)
|
||||
{
|
||||
$params = array($studienplan_id);
|
||||
|
||||
$qry = "SELECT tbl_lehrveranstaltung.*,
|
||||
tbl_studienplan_lehrveranstaltung.studienplan_lehrveranstaltung_id,
|
||||
tbl_studienplan_lehrveranstaltung.semester as stpllv_semester,
|
||||
tbl_studienplan_lehrveranstaltung.pflicht as stpllv_pflicht,
|
||||
tbl_studienplan_lehrveranstaltung.koordinator as stpllv_koordinator,
|
||||
tbl_studienplan_lehrveranstaltung.studienplan_lehrveranstaltung_id_parent,
|
||||
tbl_studienplan_lehrveranstaltung.sort stpllv_sort,
|
||||
tbl_studienplan_lehrveranstaltung.curriculum,
|
||||
tbl_studienplan_lehrveranstaltung.export,
|
||||
tbl_studienplan_lehrveranstaltung.genehmigung
|
||||
FROM lehre.tbl_lehrveranstaltung
|
||||
JOIN lehre.tbl_studienplan_lehrveranstaltung
|
||||
USING(lehrveranstaltung_id)
|
||||
WHERE tbl_studienplan_lehrveranstaltung.studienplan_id = ?
|
||||
";
|
||||
|
||||
if ($semester !== null)
|
||||
{
|
||||
$qry.= " AND tbl_studienplan_lehrveranstaltung.semester = ?";
|
||||
$params[] = $semester;
|
||||
}
|
||||
|
||||
$qry .= " ORDER BY stpllv_sort, semester, sort";
|
||||
|
||||
return $this->execQuery($qry, $params);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -261,9 +261,9 @@ class Mitarbeiter_model extends DB_Model
|
||||
* @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
|
||||
public function getMitarbeiterFromLV($lehrveranstaltung_id)
|
||||
{
|
||||
$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
|
||||
@@ -278,4 +278,33 @@ class Mitarbeiter_model extends DB_Model
|
||||
|
||||
return $this->execQuery($qry, $parametersArray);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get Lektoren by studiengang_kz
|
||||
*
|
||||
* @param $studiengang_kz
|
||||
* @return array with Mitarbeiter
|
||||
*/
|
||||
public function getLektoren($studiengang_kz)
|
||||
{
|
||||
$qry = "
|
||||
SELECT DISTINCT
|
||||
campus.vw_mitarbeiter.uid,
|
||||
campus.vw_mitarbeiter.vorname,
|
||||
campus.vw_mitarbeiter.nachname,
|
||||
studiengang_kz,
|
||||
tbl_studiengang.typ,
|
||||
tbl_studiengang.kurzbz AS stg_kurzbz
|
||||
FROM
|
||||
campus.vw_mitarbeiter
|
||||
JOIN public.tbl_benutzerfunktion USING (uid)
|
||||
JOIN public.tbl_studiengang USING(oe_kurzbz)
|
||||
WHERE studiengang_kz = ?
|
||||
AND lektor is true
|
||||
ORDER BY campus.vw_mitarbeiter.nachname";
|
||||
|
||||
$parametersArray = array($studiengang_kz);
|
||||
|
||||
return $this->execQuery($qry, $parametersArray);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,75 @@
|
||||
/**
|
||||
* Copyright (C) 2025 fhcomplete.org
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
export default {
|
||||
getAnrechnungen(id) {
|
||||
return {
|
||||
method: 'get',
|
||||
url: 'api/frontend/v1/stv/anrechnungen/getAnrechnungen/' + id
|
||||
};
|
||||
},
|
||||
getLehrveranstaltungen(prestudent_id){
|
||||
return {
|
||||
method: 'get',
|
||||
url: 'api/frontend/v1/stv/anrechnungen/getLehrveranstaltungen/' + prestudent_id
|
||||
};
|
||||
},
|
||||
getBegruendungen(){
|
||||
return {
|
||||
method: 'get',
|
||||
url: 'api/frontend/v1/stv/anrechnungen/getBegruendungen/'
|
||||
};
|
||||
},
|
||||
getLvsKompatibel(lv_id){
|
||||
return {
|
||||
method: 'get',
|
||||
url: 'api/frontend/v1/stv/anrechnungen/getLvsKompatibel/' + lv_id
|
||||
};
|
||||
},
|
||||
getLektoren(studiengang_kz){
|
||||
return {
|
||||
method: 'get',
|
||||
url: 'api/frontend/v1/stv/anrechnungen/getLektoren/' + studiengang_kz
|
||||
};
|
||||
},
|
||||
addNewAnrechnung(params){
|
||||
return {
|
||||
method: 'post',
|
||||
url: 'api/frontend/v1/stv/anrechnungen/insertAnrechnung/',
|
||||
params
|
||||
};
|
||||
},
|
||||
loadAnrechnung(anrechnung_id){
|
||||
return {
|
||||
method: 'get',
|
||||
url: 'api/frontend/v1/stv/anrechnungen/loadAnrechnung/' + anrechnung_id
|
||||
};
|
||||
},
|
||||
editAnrechnung(params){
|
||||
return {
|
||||
method: 'post',
|
||||
url: 'api/frontend/v1/stv/anrechnungen/updateAnrechnung/',
|
||||
params
|
||||
};
|
||||
},
|
||||
deleteAnrechnung(anrechnung_id){
|
||||
return {
|
||||
method: 'post',
|
||||
url: 'api/frontend/v1/stv/anrechnungen/deleteAnrechnung/' + anrechnung_id
|
||||
};
|
||||
},
|
||||
}
|
||||
@@ -13,6 +13,7 @@ import grades from './stv/grades.js';
|
||||
import mobility from './stv/mobility.js';
|
||||
import archiv from './stv/archiv.js';
|
||||
import documents from './stv/documents.js';
|
||||
import exemptions from './stv/exemptions.js';
|
||||
|
||||
export default {
|
||||
verband,
|
||||
@@ -30,6 +31,7 @@ export default {
|
||||
mobility,
|
||||
archiv,
|
||||
documents,
|
||||
exemptions,
|
||||
configStudent() {
|
||||
return this.$fhcApi.get('api/frontend/v1/stv/config/student');
|
||||
},
|
||||
|
||||
@@ -0,0 +1,29 @@
|
||||
export default {
|
||||
getAnrechnungen(url, config, params) {
|
||||
return this.$fhcApi.get('api/frontend/v1/stv/anrechnungen/getAnrechnungen/' + params.id);
|
||||
},
|
||||
getLehrveranstaltungen(prestudent_id){
|
||||
return this.$fhcApi.get('api/frontend/v1/stv/anrechnungen/getLehrveranstaltungen/' + prestudent_id);
|
||||
},
|
||||
getBegruendungen(){
|
||||
return this.$fhcApi.get('api/frontend/v1/stv/anrechnungen/getBegruendungen/');
|
||||
},
|
||||
getLvsKompatibel(lv_id){
|
||||
return this.$fhcApi.get('api/frontend/v1/stv/anrechnungen/getLvsKompatibel/' + lv_id);
|
||||
},
|
||||
getLektoren(studiengang_kz){
|
||||
return this.$fhcApi.get('api/frontend/v1/stv/anrechnungen/getLektoren/' + studiengang_kz);
|
||||
},
|
||||
addNewAnrechnung(form, data){
|
||||
return this.$fhcApi.post(form, 'api/frontend/v1/stv/anrechnungen/insertAnrechnung/', data);
|
||||
},
|
||||
loadAnrechnung(anrechnung_id){
|
||||
return this.$fhcApi.get('api/frontend/v1/stv/anrechnungen/loadAnrechnung/' + anrechnung_id);
|
||||
},
|
||||
editAnrechnung(form, data){
|
||||
return this.$fhcApi.post(form, 'api/frontend/v1/stv/anrechnungen/updateAnrechnung/', data);
|
||||
},
|
||||
deleteAnrechnung(anrechnung_id){
|
||||
return this.$fhcApi.post('api/frontend/v1/stv/anrechnungen/deleteAnrechnung/' + anrechnung_id);
|
||||
},
|
||||
}
|
||||
@@ -0,0 +1,26 @@
|
||||
import AnrechnungenList from './Anrechnungen/Anrechnungen.js';
|
||||
|
||||
export default {
|
||||
name: "TabExemptions",
|
||||
components: {
|
||||
AnrechnungenList
|
||||
},
|
||||
provide() {
|
||||
return {
|
||||
config: this.config
|
||||
};
|
||||
},
|
||||
props: {
|
||||
modelValue: Object,
|
||||
config: Object
|
||||
},
|
||||
methods: {
|
||||
reload() {
|
||||
this.$refs.anrechnungen.$refs.table.reloadTable();
|
||||
}
|
||||
},
|
||||
template: `
|
||||
<div class="stv-details-anrechnungen h-100 d-flex flex-column">
|
||||
<anrechnungen-list ref="anrechnungen" :student="modelValue"></anrechnungen-list>
|
||||
</div>`
|
||||
};
|
||||
@@ -0,0 +1,442 @@
|
||||
import {CoreFilterCmpt} from "../../../../filter/Filter.js";
|
||||
import BsModal from "../../../../Bootstrap/Modal.js";
|
||||
import CoreForm from "../../../../Form/Form.js";
|
||||
import FormInput from "../../../../Form/Input.js";
|
||||
import CoreNotiz from "../../../../Notiz/Notiz.js";
|
||||
|
||||
import ApiStvExemptions from "../../../../../api/factory/stv/exemptions.js";
|
||||
import ApiNotizPerson from '../../../../../api/factory/notiz/person.js';
|
||||
|
||||
export default {
|
||||
name: "ExemptionComponent",
|
||||
components: {
|
||||
CoreFilterCmpt,
|
||||
BsModal,
|
||||
CoreForm,
|
||||
FormInput,
|
||||
CoreNotiz
|
||||
},
|
||||
inject: {
|
||||
$reloadList: {
|
||||
from: '$reloadList',
|
||||
required: true
|
||||
},
|
||||
config: {
|
||||
from: 'config',
|
||||
required: true
|
||||
},
|
||||
},
|
||||
props: {
|
||||
student: Object
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
tabulatorOptions: {
|
||||
ajaxURL: 'dummy',
|
||||
ajaxRequestFunc: () => this.$api.call(
|
||||
ApiStvExemptions.getAnrechnungen(this.student.prestudent_id)
|
||||
),
|
||||
ajaxResponse: (url, params, response) => response.data,
|
||||
columns: [
|
||||
{title: "anrechnung_id", field: "anrechnung_id", visible: false},
|
||||
{title: "lehrveranstaltung_id", field: "lehrveranstaltung_id", visible: false},
|
||||
{title: "Lehrveranstaltung", field: "bez_lehrveranstaltung"},
|
||||
{title: "Begründung", field: "begruendung"},
|
||||
{title: "lehrveranstaltung_id_kompatibel", field: "lehrveranstaltung_id_kompatibel", visible: false},
|
||||
{title: "lehrveranstaltung_bez_kompatibel", field: "lehrveranstaltung_bez_kompatibel"},
|
||||
{title: "status", field: "status"},
|
||||
{title: "genehmigt_von", field: "genehmigt_von"},
|
||||
{title: "notizen_anzahl", field: "notizen_anzahl", visible: false},
|
||||
{title: "Datum", field: "insertamum",
|
||||
formatter: function (cell) {
|
||||
const dateStr = cell.getValue();
|
||||
if (!dateStr) return "";
|
||||
|
||||
const date = new Date(dateStr);
|
||||
return date.toLocaleString("de-DE", {
|
||||
day: "2-digit",
|
||||
month: "2-digit",
|
||||
year: "numeric",
|
||||
});
|
||||
}
|
||||
},
|
||||
{
|
||||
title: 'Aktionen', field: 'actions',
|
||||
minWidth: 150, // Ensures Action-buttons will be always fully displayed
|
||||
formatter: (cell, formatterParams, onRendered) => {
|
||||
let container = document.createElement('div');
|
||||
container.className = "d-flex gap-2";
|
||||
|
||||
if(this.config.editableAnrechnungen){
|
||||
let buttonEdit = document.createElement('button');
|
||||
buttonEdit.className = 'btn btn-outline-secondary btn-action';
|
||||
buttonEdit.innerHTML = '<i class="fa fa-edit"></i>';
|
||||
buttonEdit.title = this.$p.t('ui', 'bearbeiten');
|
||||
buttonEdit.addEventListener('click', (event) =>
|
||||
this.actionEditAnrechnung(cell.getData().anrechnung_id)
|
||||
);
|
||||
container.append(buttonEdit);
|
||||
}
|
||||
|
||||
let button = document.createElement('button');
|
||||
button.className = 'btn btn-outline-secondary btn-action';
|
||||
button.innerHTML = '<i class="fa fa-xmark"></i>';
|
||||
button.title = this.$p.t('ui', 'loeschen');
|
||||
button.addEventListener('click', () =>
|
||||
this.actionDeleteAnrechnung(cell.getData().anrechnung_id)
|
||||
);
|
||||
container.append(button);
|
||||
|
||||
let countNotizen = cell.getData().notizen_anzahl;
|
||||
let buttonNotes = document.createElement('button');
|
||||
buttonNotes.className = 'btn btn-outline-secondary btn-action';
|
||||
if (countNotizen > 0){
|
||||
buttonNotes.innerHTML = countNotizen + this.$p.t('anrechnung', 'existingNotes');
|
||||
}
|
||||
else
|
||||
buttonNotes.innerHTML = '+' + this.$p.t('global', 'notiz');
|
||||
|
||||
buttonNotes.addEventListener('click', (event) =>
|
||||
this.addNote(cell.getData().anrechnung_id)
|
||||
);
|
||||
container.append(buttonNotes);
|
||||
|
||||
return container;
|
||||
},
|
||||
frozen: true
|
||||
},
|
||||
],
|
||||
layout: 'fitDataFill',
|
||||
height: '500',
|
||||
index: 'anrechnung_id',
|
||||
persistenceID: 'stv-details-anrechnungen'
|
||||
},
|
||||
tabulatorEvents: [
|
||||
{
|
||||
event: 'tableBuilt',
|
||||
handler: async () => {
|
||||
|
||||
await this.$p.loadCategory(['anrechnungen', 'global', 'ui', 'lehre']);
|
||||
|
||||
let cm = this.$refs.table.tabulator.columnManager;
|
||||
|
||||
cm.getColumnByField('anrechnung_id').component.updateDefinition({
|
||||
title: this.$p.t('ui', 'anrechnung_id'),
|
||||
});
|
||||
cm.getColumnByField('lehrveranstaltung_id').component.updateDefinition({
|
||||
title: this.$p.t('lehre', 'lehrveranstaltung_id'),
|
||||
});
|
||||
cm.getColumnByField('bez_lehrveranstaltung').component.updateDefinition({
|
||||
title: this.$p.t('lehre', 'lehrveranstaltung'),
|
||||
});
|
||||
cm.getColumnByField('begruendung').component.updateDefinition({
|
||||
title: this.$p.t('global', 'begruendung'),
|
||||
});
|
||||
cm.getColumnByField('lehrveranstaltung_id_kompatibel').component.updateDefinition({
|
||||
title: this.$p.t('anrechnung', 'lehrveranstaltung_id_kompatibel'),
|
||||
});
|
||||
cm.getColumnByField('lehrveranstaltung_bez_kompatibel').component.updateDefinition({
|
||||
title: this.$p.t('anrechnung', 'lehrveranstaltung_bez_kompatibel'),
|
||||
});
|
||||
cm.getColumnByField('genehmigt_von').component.updateDefinition({
|
||||
title: this.$p.t('anrechnung', 'genehmigtVon'),
|
||||
});
|
||||
cm.getColumnByField('notizen_anzahl').component.updateDefinition({
|
||||
title: this.$p.t('anrechnung', 'existingNotes'),
|
||||
});
|
||||
cm.getColumnByField('insertamum').component.updateDefinition({
|
||||
title: this.$p.t('global', 'datum'),
|
||||
});
|
||||
|
||||
}
|
||||
}
|
||||
],
|
||||
formData: {},
|
||||
listBegruendungen: [],
|
||||
listNewLehrveranstaltungen: [],
|
||||
listLektoren: [],
|
||||
listKompatibleLehrveranstaltungen: [],
|
||||
statusNew: true,
|
||||
showNotizen: false,
|
||||
currentAnrechnung_id: null,
|
||||
endpoint: ApiNotizPerson
|
||||
}
|
||||
},
|
||||
watch: {
|
||||
student(){
|
||||
if (this.$refs.table) {
|
||||
this.$refs.table.reloadTable();
|
||||
}
|
||||
},
|
||||
},
|
||||
methods: {
|
||||
actionNewAnrechnung(){
|
||||
this.statusNew = true;
|
||||
this.$refs.anrechnungsModal.show();
|
||||
},
|
||||
actionEditAnrechnung(anrechnung_id){
|
||||
this.resetForm();
|
||||
this.statusNew = false;
|
||||
this.loadAnrechnung(anrechnung_id);
|
||||
this.$refs.anrechnungsModal.show();
|
||||
},
|
||||
addNote(anrechnung_id){
|
||||
this.currentAnrechnung_id = anrechnung_id;
|
||||
this.showNotizen = true;
|
||||
},
|
||||
addNewAnrechnung(){
|
||||
const dataToSend = {
|
||||
prestudent_id: this.student.prestudent_id,
|
||||
formData: this.formData
|
||||
};
|
||||
|
||||
return this.$refs.formExemptions
|
||||
.call(ApiStvExemptions.addNewAnrechnung(dataToSend))
|
||||
.then(response => {
|
||||
this.$fhcAlert.alertSuccess(this.$p.t('ui', 'successSave'));
|
||||
this.$refs.anrechnungsModal.hide();
|
||||
this.resetForm();
|
||||
})
|
||||
.catch(this.$fhcAlert.handleSystemError)
|
||||
.finally(() => {
|
||||
this.reload();
|
||||
});
|
||||
},
|
||||
editAnrechnung(anrechnung_id){
|
||||
const dataToSend = {
|
||||
anrechnung_id: anrechnung_id,
|
||||
formData: this.formData
|
||||
};
|
||||
return this.$refs.formExemptions
|
||||
.call(ApiStvExemptions.editAnrechnung(dataToSend))
|
||||
.then(response => {
|
||||
this.$fhcAlert.alertSuccess(this.$p.t('ui', 'successSave'));
|
||||
this.$refs.anrechnungsModal.hide();
|
||||
this.resetForm();
|
||||
})
|
||||
.catch(this.$fhcAlert.handleSystemError)
|
||||
.finally(() => {
|
||||
this.reload();
|
||||
});
|
||||
},
|
||||
actionDeleteAnrechnung(anrechnung_id) {
|
||||
this.$fhcAlert
|
||||
.confirmDelete()
|
||||
.then(result => result
|
||||
? anrechnung_id
|
||||
: Promise.reject({handled: true}))
|
||||
.then(this.deleteAnrechnung)
|
||||
.catch(this.$fhcAlert.handleSystemError);
|
||||
},
|
||||
deleteAnrechnung(anrechnung_id){
|
||||
return this.$api
|
||||
.call(ApiStvExemptions.deleteAnrechnung(anrechnung_id))
|
||||
.then(response => {
|
||||
this.$fhcAlert.alertSuccess(this.$p.t('ui', 'successDelete'));
|
||||
})
|
||||
.catch(this.$fhcAlert.handleSystemError)
|
||||
.finally(() => {
|
||||
this.reload();
|
||||
});
|
||||
},
|
||||
getLvsKompatibel(){
|
||||
if(this.formData.lehrveranstaltung_id) {
|
||||
this.$api
|
||||
.call(ApiStvExemptions.getLvsKompatibel(this.formData.lehrveranstaltung_id))
|
||||
.then(result => {
|
||||
this.listKompatibleLehrveranstaltungen = result.data;
|
||||
})
|
||||
.catch(this.$fhcAlert.handleSystemError);
|
||||
}
|
||||
},
|
||||
handleInput(){
|
||||
if(this.formData.begruendung == 2) {
|
||||
this.getLvsKompatibel();
|
||||
}
|
||||
},
|
||||
loadAnrechnung(anrechnung_id){
|
||||
return this.$api
|
||||
.call(ApiStvExemptions.loadAnrechnung(anrechnung_id))
|
||||
.then(result => {
|
||||
this.formData = result.data;
|
||||
this.getLvsKompatibel();
|
||||
})
|
||||
.catch(this.$fhcAlert.handleSystemError);
|
||||
},
|
||||
reload() {
|
||||
this.$refs.table.reloadTable();
|
||||
},
|
||||
resetForm(){
|
||||
this.formData = {};
|
||||
this.statusNew = true;
|
||||
},
|
||||
resetLvKompatibel(){
|
||||
this.formData.lehrveranstaltung_id_kompatibel = null;
|
||||
this.handleInput();
|
||||
}
|
||||
},
|
||||
created() {
|
||||
this.$api
|
||||
.call(ApiStvExemptions.getLehrveranstaltungen(this.student.prestudent_id))
|
||||
.then(result => {
|
||||
this.listNewLehrveranstaltungen = result.data;
|
||||
})
|
||||
.catch(this.$fhcAlert.handleSystemError);
|
||||
|
||||
this.$api
|
||||
.call(ApiStvExemptions.getBegruendungen())
|
||||
.then(result => {
|
||||
this.listBegruendungen = result.data;
|
||||
})
|
||||
.catch(this.$fhcAlert.handleSystemError);
|
||||
|
||||
this.$api
|
||||
.call(ApiStvExemptions.getLektoren(this.student.studiengang_kz))
|
||||
.then(result => {
|
||||
this.listLektoren = result.data;
|
||||
})
|
||||
.catch(this.$fhcAlert.handleSystemError);
|
||||
|
||||
},
|
||||
template: `
|
||||
<div class="stv-details-tab_exemptions h-100 pb-3">
|
||||
<h5>{{$p.t('lehre', 'anrechnungen')}}</h5>
|
||||
|
||||
<div v-if="showNotizen" class="border p-3 overflow-auto" style="height: 200px;">
|
||||
<div class="justify-content-end pb-3">
|
||||
<form-input
|
||||
container-class="form-switch"
|
||||
type="checkbox"
|
||||
label="Notizen"
|
||||
v-model="showNotizen"
|
||||
@change="onSwitchHide"
|
||||
>
|
||||
</form-input>
|
||||
</div>
|
||||
<core-notiz
|
||||
:endpoint="endpoint"
|
||||
ref="formNotes"
|
||||
notiz-layout="popupModal"
|
||||
typeId="anrechnung_id"
|
||||
:id="currentAnrechnung_id"
|
||||
show-document
|
||||
show-tiny-mce
|
||||
:visibleColumns="['titel','text','verfasser','bearbeiter','dokumente']"
|
||||
>
|
||||
</core-notiz>
|
||||
|
||||
</div>
|
||||
|
||||
<template v-if="config.editableAnrechnungen" >
|
||||
<core-filter-cmpt
|
||||
ref="table"
|
||||
:tabulator-options="tabulatorOptions"
|
||||
:tabulator-events="tabulatorEvents"
|
||||
table-only
|
||||
:side-menu="false"
|
||||
reload
|
||||
new-btn-show
|
||||
:new-btn-label="this.$p.t('lehre', 'anrechnung')"
|
||||
@click:new="actionNewAnrechnung"
|
||||
>
|
||||
</core-filter-cmpt>
|
||||
</template>
|
||||
<template v-else>
|
||||
<core-filter-cmpt
|
||||
ref="table"
|
||||
:tabulator-options="tabulatorOptions"
|
||||
:tabulator-events="tabulatorEvents"
|
||||
table-only
|
||||
:side-menu="false"
|
||||
reload
|
||||
>
|
||||
</core-filter-cmpt>
|
||||
</template>
|
||||
|
||||
<bs-modal ref="anrechnungsModal" dialog-class="modal-dialog-scrollable" >
|
||||
<template #title>
|
||||
<p v-if="statusNew" class="fw-bold mt-3">{{$p.t('anrechnung', 'neueAnrechnung')}}</p>
|
||||
<p v-else class="fw-bold mt-3">{{$p.t('anrechnung', 'editAnrechnung')}}</p>
|
||||
</template>
|
||||
|
||||
<core-form ref="formExemptions">
|
||||
<div class="row mb-3">
|
||||
<form-input
|
||||
type="select"
|
||||
:label="$p.t('lehre/lehrveranstaltung')"
|
||||
name="lehrveranstaltung"
|
||||
v-model="formData.lehrveranstaltung_id"
|
||||
@change="resetLvKompatibel"
|
||||
>
|
||||
<option
|
||||
v-for="entry in listNewLehrveranstaltungen"
|
||||
:key="entry.lehrveranstaltung_id"
|
||||
:value="entry.lehrveranstaltung_id"
|
||||
>
|
||||
{{entry.bezeichnung}} Semester {{entry.semester}} {{entry.lehrform_kurzbz}}
|
||||
</option>
|
||||
</form-input>
|
||||
</div>
|
||||
|
||||
<div class="row mb-3">
|
||||
<form-input
|
||||
type="select"
|
||||
:label="$p.t('anrechnung/begruendung')"
|
||||
name="begruendung"
|
||||
v-model="formData.begruendung_id"
|
||||
@change="handleInput"
|
||||
>
|
||||
<option
|
||||
v-for="entry in listBegruendungen"
|
||||
:key="entry.begruendung_id"
|
||||
:value="entry.begruendung_id"
|
||||
>
|
||||
{{entry.bezeichnung}}
|
||||
</option>
|
||||
</form-input>
|
||||
</div>
|
||||
|
||||
<!--is shown when typ == kompatible LV-->
|
||||
<div v-if="formData.begruendung_id == '2'" class="row mb-3">
|
||||
<form-input
|
||||
type="select"
|
||||
label="Lehrveranstaltung Kompatibel"
|
||||
name="lehrveranstaltung_id_kompatibel"
|
||||
v-model="formData.lehrveranstaltung_id_kompatibel"
|
||||
>
|
||||
<option
|
||||
v-for="entry in listKompatibleLehrveranstaltungen"
|
||||
:key="entry.lehrveranstaltung_id"
|
||||
:value="entry.lehrveranstaltung_id"
|
||||
>
|
||||
{{entry.bezeichnung}} Semester {{entry.semester}} {{entry.lehrform_kurzbz}}
|
||||
</option>
|
||||
</form-input>
|
||||
</div>
|
||||
|
||||
<div class="row mb-3">
|
||||
<form-input
|
||||
type="select"
|
||||
:label="$p.t('anrechnung/genehmigtVon')"
|
||||
name="genehmigtVon"
|
||||
v-model="formData.genehmigt_von"
|
||||
>
|
||||
<option
|
||||
v-for="entry in listLektoren"
|
||||
:key="entry.uid"
|
||||
:value="entry.uid"
|
||||
>
|
||||
{{entry.nachname}} {{entry.vorname}}
|
||||
</option>
|
||||
</form-input>
|
||||
</div>
|
||||
</core-form>
|
||||
|
||||
<template #footer>
|
||||
<button v-if="statusNew" type="button" class="btn btn-primary" @click="addNewAnrechnung">{{$p.t('ui', 'speichern')}}</button>
|
||||
<button v-else type="button" class="btn btn-primary" @click="editAnrechnung(formData.anrechnung_id)">{{$p.t('ui', 'speichern')}}</button>
|
||||
</template>
|
||||
|
||||
</bs-modal>
|
||||
`
|
||||
}
|
||||
@@ -42805,6 +42805,148 @@ and represent the current state of research on the topic. The prescribed citatio
|
||||
)
|
||||
),
|
||||
// FHC4 Studierendenverwaltung Dokumente END
|
||||
// FHC4 Phrases Anrechnungen Start
|
||||
array(
|
||||
'app' => 'core',
|
||||
'category' => 'anrechnung',
|
||||
'phrase' => 'begruendung',
|
||||
'insertvon' => 'system',
|
||||
'phrases' => array(
|
||||
array(
|
||||
'sprache' => 'German',
|
||||
'text' => 'Begründung',
|
||||
'description' => '',
|
||||
'insertvon' => 'system'
|
||||
),
|
||||
array(
|
||||
'sprache' => 'English',
|
||||
'text' => 'Reason',
|
||||
'description' => '',
|
||||
'insertvon' => 'system'
|
||||
)
|
||||
)
|
||||
),
|
||||
array(
|
||||
'app' => 'core',
|
||||
'category' => 'anrechnung',
|
||||
'phrase' => 'genehmigtVon',
|
||||
'insertvon' => 'system',
|
||||
'phrases' => array(
|
||||
array(
|
||||
'sprache' => 'German',
|
||||
'text' => 'genehmigt von',
|
||||
'description' => '',
|
||||
'insertvon' => 'system'
|
||||
),
|
||||
array(
|
||||
'sprache' => 'English',
|
||||
'text' => 'approved by',
|
||||
'description' => '',
|
||||
'insertvon' => 'system'
|
||||
)
|
||||
)
|
||||
),
|
||||
array(
|
||||
'app' => 'core',
|
||||
'category' => 'anrechnung',
|
||||
'phrase' => 'editAnrechnung',
|
||||
'insertvon' => 'system',
|
||||
'phrases' => array(
|
||||
array(
|
||||
'sprache' => 'German',
|
||||
'text' => "Anrechnung bearbeiten",
|
||||
'description' => '',
|
||||
'insertvon' => 'system'
|
||||
),
|
||||
array(
|
||||
'sprache' => 'English',
|
||||
'text' => "Edit Exemption",
|
||||
'description' => '',
|
||||
'insertvon' => 'system'
|
||||
)
|
||||
)
|
||||
),
|
||||
array(
|
||||
'app' => 'core',
|
||||
'category' => 'anrechnung',
|
||||
'phrase' => 'existingNotes',
|
||||
'insertvon' => 'system',
|
||||
'phrases' => array(
|
||||
array(
|
||||
'sprache' => 'German',
|
||||
'text' => " Notiz(en)",
|
||||
'description' => '',
|
||||
'insertvon' => 'system'
|
||||
),
|
||||
array(
|
||||
'sprache' => 'English',
|
||||
'text' => " note(s)",
|
||||
'description' => '',
|
||||
'insertvon' => 'system'
|
||||
)
|
||||
)
|
||||
),
|
||||
array(
|
||||
'app' => 'core',
|
||||
'category' => 'ui',
|
||||
'phrase' => 'anrechnung_id',
|
||||
'insertvon' => 'system',
|
||||
'phrases' => array(
|
||||
array(
|
||||
'sprache' => 'German',
|
||||
'text' => 'Anrechnung ID',
|
||||
'description' => '',
|
||||
'insertvon' => 'system'
|
||||
),
|
||||
array(
|
||||
'sprache' => 'English',
|
||||
'text' => 'Exemption ID',
|
||||
'description' => '',
|
||||
'insertvon' => 'system'
|
||||
)
|
||||
)
|
||||
),
|
||||
array(
|
||||
'app' => 'core',
|
||||
'category' => 'anrechnung',
|
||||
'phrase' => 'lehrveranstaltung_id_kompatibel',
|
||||
'insertvon' => 'system',
|
||||
'phrases' => array(
|
||||
array(
|
||||
'sprache' => 'German',
|
||||
'text' => 'LV kompatibel ID',
|
||||
'description' => '',
|
||||
'insertvon' => 'system'
|
||||
),
|
||||
array(
|
||||
'sprache' => 'English',
|
||||
'text' => 'Course compatible ID',
|
||||
'description' => '',
|
||||
'insertvon' => 'system'
|
||||
)
|
||||
)
|
||||
),
|
||||
array(
|
||||
'app' => 'core',
|
||||
'category' => 'anrechnung',
|
||||
'phrase' => 'lehrveranstaltung_bez_kompatibel',
|
||||
'insertvon' => 'system',
|
||||
'phrases' => array(
|
||||
array(
|
||||
'sprache' => 'German',
|
||||
'text' => 'LV kompatibel',
|
||||
'description' => '',
|
||||
'insertvon' => 'system'
|
||||
),
|
||||
array(
|
||||
'sprache' => 'English',
|
||||
'text' => 'Course compatible',
|
||||
'description' => '',
|
||||
'insertvon' => 'system'
|
||||
)
|
||||
)
|
||||
),
|
||||
// FHC4 Phrases Anrechnungen End
|
||||
);
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user