mirror of
https://github.com/FH-Complete/FHC-Core.git
synced 2026-06-01 20:29:29 +00:00
Merge branch 'master' into demo-cis40
This commit is contained in:
@@ -88,9 +88,14 @@ if (!defined('ZGV_DOKTOR_ANZEIGEN') || !ZGV_DOKTOR_ANZEIGEN) {
|
||||
);
|
||||
}
|
||||
|
||||
$config['tabs']['projektarbeit']['defaultProjektbetreuerStunden'] = '4.0';
|
||||
$config['tabs']['projektarbeit']['defaultProjektbetreuerStundenDiplom'] = '5.0';
|
||||
$config['tabs']['projektarbeit']['lvLektroinnenzuteilungFixangestelltStundensatz'] = true;
|
||||
$config['tabs']['projektarbeit']['defaultProjektbetreuerStunden'] =
|
||||
defined('FAS_STUDIERENDE_PROJEKTARBEIT_DEFAULT_BETREUER_STUNDEN_BACHELOR')
|
||||
? FAS_STUDIERENDE_PROJEKTARBEIT_DEFAULT_BETREUER_STUNDEN_BACHELOR
|
||||
: '0.0';
|
||||
$config['tabs']['projektarbeit']['defaultProjektbetreuerStundenDiplom'] =
|
||||
defined('FAS_STUDIERENDE_PROJEKTARBEIT_DEFAULT_BETREUER_STUNDEN_MASTER')
|
||||
? FAS_STUDIERENDE_PROJEKTARBEIT_DEFAULT_BETREUER_STUNDEN_MASTER
|
||||
: '0.0';
|
||||
$config['tabs']['projektarbeit']['defaultProjektbetreuerStundensatz'] = '80.0';
|
||||
|
||||
$config['student_tab_order'] = [
|
||||
|
||||
@@ -442,6 +442,10 @@ class Documents extends FHCAPI_Controller
|
||||
'betreuerart_kurzbz',
|
||||
'studiensemester_kurzbz'
|
||||
] as $key) {
|
||||
if (in_array($xsl, array('Ausbildungsver', 'AusbVerEng')) && $key === 'uid')
|
||||
{
|
||||
continue;
|
||||
}
|
||||
$value = $this->input->post_get($key);
|
||||
if ($value !== null)
|
||||
$params .= '&' . $key . '=' . urlencode($value);
|
||||
|
||||
@@ -590,8 +590,8 @@ class Dokumente extends FHCAPI_Controller
|
||||
|
||||
$documents = [
|
||||
buildDropdownEntryPrintArray("accountinfo", "Accountinfoblatt", "xml=accountinfoblatt.xml.php&xsl=AccountInfo&output=pdf", $uid, 10, null),
|
||||
buildDropdownEntryPrintArray("ausbildungsvertrag", "Ausbildungsvertrag", "xml=ausbildungsvertrag.xml.php&xsl=Ausbildungsver&output=pdf", $uid, 20, null),
|
||||
buildDropdownEntryPrintArray("ausbildungsvertrag_en", "Ausbildungsvertrag Zweisprachig", "xml=ausbildungsvertrag.xml.php&xsl=AusbVerEng&output=pdf", $uid, 21, null),
|
||||
buildDropdownEntryPrintArray("ausbildungsvertrag", "Ausbildungsvertrag", "xml=ausbildungsvertrag.xml.php&xsl=Ausbildungsver&output=pdf&prestudent_id=$prestudent_id", null,20, null),
|
||||
buildDropdownEntryPrintArray("ausbildungsvertrag_en", "Ausbildungsvertrag Zweisprachig", "xml=ausbildungsvertrag.xml.php&xsl=AusbVerEng&output=pdf&prestudent_id=$prestudent_id", null,21, null),
|
||||
|
||||
buildDropdownEntryPrintArray("bescheid", "Bescheid (nur Voransicht)", "xml=abschlusspruefung.rdf.php&xsl_stg_kz=$studiengang_kz&xsl=Bescheid&output=pdf", $uid, 25, null),
|
||||
buildDropdownEntryPrintArray("diplomasupp", "Diploma Supplement (nur Voransicht)", "xml=diplomasupplement.xml.php&xsl_stg_kz=$studiengang_kz&xsl=DiplSupplement&output=pdf", $uid, 26, null),
|
||||
|
||||
@@ -60,7 +60,8 @@ class Grades extends FHCAPI_Controller
|
||||
{
|
||||
$this->load->model('codex/Note_model', 'NoteModel');
|
||||
|
||||
$this->NoteModel->addOrder('note');
|
||||
$this->NoteModel->addOrder('notenwert', 'ASC');
|
||||
$this->NoteModel->addOrder('bezeichnung', 'ASC');
|
||||
|
||||
$result = $this->NoteModel->load();
|
||||
|
||||
|
||||
@@ -17,7 +17,8 @@ class Projektarbeit extends FHCAPI_Controller
|
||||
'getTypenProjektarbeit' => ['admin:r', 'assistenz:r'],
|
||||
'getFirmen' => ['admin:r', 'assistenz:r'],
|
||||
'getLehrveranstaltungen' => ['admin:r', 'assistenz:r'],
|
||||
'getNoten' => ['admin:r', 'assistenz:r']
|
||||
'getNoten' => ['admin:r', 'assistenz:r'],
|
||||
'getStudiensemester' => ['admin:r', 'assistenz:r']
|
||||
]);
|
||||
|
||||
// Load Libraries
|
||||
@@ -40,11 +41,15 @@ class Projektarbeit extends FHCAPI_Controller
|
||||
$this->load->model('ressource/Mitarbeiter_model', 'MitarbeiterModel');
|
||||
$this->load->model('education/Note_model', 'NoteModel');
|
||||
$this->load->model('education/Projektbetreuer_model', 'BetreuerModel');
|
||||
$this->load->model('organisation/Studiensemester_model', 'StudiensemesterModel');
|
||||
|
||||
// load libraries
|
||||
$this->load->library('PermissionLib');
|
||||
}
|
||||
|
||||
/**
|
||||
* Get projekt works for a uid.
|
||||
*/
|
||||
public function getProjektarbeit()
|
||||
{
|
||||
$student_uid = $this->input->get('uid');
|
||||
@@ -53,10 +58,7 @@ class Projektarbeit extends FHCAPI_Controller
|
||||
|
||||
$result = $this->ProjektarbeitModel->getProjektarbeit($student_uid);
|
||||
|
||||
if (isError($result))
|
||||
{
|
||||
$this->terminateWithError(getError($result), self::ERROR_TYPE_GENERAL);
|
||||
}
|
||||
if (isError($result)) $this->terminateWithError(getError($result), self::ERROR_TYPE_GENERAL);
|
||||
|
||||
if (!hasData($result)) $this->terminateWithSuccess([]);
|
||||
|
||||
@@ -79,6 +81,9 @@ class Projektarbeit extends FHCAPI_Controller
|
||||
$this->terminateWithSuccess($projektarbeiten);
|
||||
}
|
||||
|
||||
/**
|
||||
* Load a single Projektarbeit by id.
|
||||
*/
|
||||
public function loadProjektarbeit()
|
||||
{
|
||||
$projektarbeit_id = $this->input->get('projektarbeit_id');
|
||||
@@ -101,6 +106,9 @@ class Projektarbeit extends FHCAPI_Controller
|
||||
$this->terminateWithSuccess(current($data));
|
||||
}
|
||||
|
||||
/**
|
||||
* Inwert a Projektarbeit.
|
||||
*/
|
||||
public function insertProjektarbeit()
|
||||
{
|
||||
$student_uid = $this->input->post('uid');
|
||||
@@ -128,6 +136,9 @@ class Projektarbeit extends FHCAPI_Controller
|
||||
$this->terminateWithSuccess($data);
|
||||
}
|
||||
|
||||
/**
|
||||
* Update a Projektarbeit by ID.
|
||||
*/
|
||||
public function updateProjektarbeit()
|
||||
{
|
||||
$projektarbeit_id = $this->input->post('projektarbeit_id');
|
||||
@@ -157,6 +168,9 @@ class Projektarbeit extends FHCAPI_Controller
|
||||
$this->terminateWithSuccess($data);
|
||||
}
|
||||
|
||||
/**
|
||||
* Delete Projektarbeit by ID after validation.
|
||||
*/
|
||||
public function deleteProjektarbeit()
|
||||
{
|
||||
$projektarbeit_id = $this->input->post('projektarbeit_id');
|
||||
@@ -185,6 +199,9 @@ class Projektarbeit extends FHCAPI_Controller
|
||||
return $this->terminateWithSuccess(current(getData($result)) ? : null);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get all active projekt work types.
|
||||
*/
|
||||
public function getTypenProjektarbeit()
|
||||
{
|
||||
$result = $this->ProjekttypModel->loadWhere(['aktiv' => true]);
|
||||
@@ -194,6 +211,9 @@ class Projektarbeit extends FHCAPI_Controller
|
||||
return $this->terminateWithSuccess(hasData($result) ? getData($result) : []);
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets companies by search string.
|
||||
*/
|
||||
public function getFirmen()
|
||||
{
|
||||
$searchString = $this->input->get('searchString');
|
||||
@@ -208,6 +228,9 @@ class Projektarbeit extends FHCAPI_Controller
|
||||
return $this->terminateWithSuccess(hasData($result) ? getData($result) : []);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get Lehrveranstaltungen by params, incling lehreinheiten for a specific Studiensemester..
|
||||
*/
|
||||
public function getLehrveranstaltungen()
|
||||
{
|
||||
$student_uid = $this->input->get('student_uid');
|
||||
@@ -218,6 +241,7 @@ class Projektarbeit extends FHCAPI_Controller
|
||||
if (!isset($student_uid)) $this->terminateWithError($this->p->t('ui', 'error_missingId', ['id'=> 'Student UID']), self::ERROR_TYPE_GENERAL);
|
||||
if (!isset($studiensemester_kurzbz)) $this->terminateWithError('Studiensemster missing', self::ERROR_TYPE_GENERAL);
|
||||
|
||||
// get Lvs
|
||||
$lvsResult = $this->LehrveranstaltungModel->getLvsForProjektarbeit($student_uid, $studiengang_kz, $additional_lehrveranstaltung_id);
|
||||
|
||||
if (isError($lvsResult)) return $this->terminateWithError($lvsResult, self::ERROR_TYPE_GENERAL);
|
||||
@@ -226,6 +250,7 @@ class Projektarbeit extends FHCAPI_Controller
|
||||
|
||||
foreach ($lvs as $lv)
|
||||
{
|
||||
// add Lehreinheiten for each Lv for the semester
|
||||
$lehreinheiten = $this->LehreinheitModel->getLesForLv(
|
||||
$lv->lehrveranstaltung_id, $studiensemester_kurzbz
|
||||
);
|
||||
@@ -250,8 +275,14 @@ class Projektarbeit extends FHCAPI_Controller
|
||||
return $this->terminateWithSuccess($lvs);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get all noten.
|
||||
*/
|
||||
public function getNoten()
|
||||
{
|
||||
$this->NoteModel->addOrder('notenwert', 'ASC');
|
||||
$this->NoteModel->addOrder('bezeichnung', 'ASC');
|
||||
|
||||
$result = $this->NoteModel->load();
|
||||
|
||||
if (isError($result)) return $this->terminateWithError(getError($result), self::ERROR_TYPE_GENERAL);
|
||||
@@ -260,9 +291,22 @@ class Projektarbeit extends FHCAPI_Controller
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param
|
||||
* @return object success or error
|
||||
* Get all Studiensemester, sorted.
|
||||
*/
|
||||
public function getStudiensemester()
|
||||
{
|
||||
$this->StudiensemesterModel->addOrder('start', 'DESC');
|
||||
$result = $this->StudiensemesterModel->load();
|
||||
|
||||
if (isError($result)) return $this->terminateWithError(getError($result), self::ERROR_TYPE_GENERAL);
|
||||
|
||||
return $this->terminateWithSuccess(hasData($result) ? getData($result) : []);
|
||||
}
|
||||
|
||||
/**
|
||||
* Validate Projektarbeit data.
|
||||
* @param formData
|
||||
* @return bool true if data valid
|
||||
*/
|
||||
private function _validate($formData)
|
||||
{
|
||||
@@ -293,9 +337,9 @@ class Projektarbeit extends FHCAPI_Controller
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param
|
||||
* @return object success or error
|
||||
* Extract Projektarbeit data from passed form data.
|
||||
* @param formData
|
||||
* @return array
|
||||
*/
|
||||
private function _getProjektarbeitArr($formData)
|
||||
{
|
||||
@@ -317,9 +361,9 @@ class Projektarbeit extends FHCAPI_Controller
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param
|
||||
* @return object success or error
|
||||
* Check if deletion of a Projektarbeit is possible.
|
||||
* @param $projektarbeit_id
|
||||
* @return object success if deletion possible, error otherwise.
|
||||
*/
|
||||
private function _validateDelete($projektarbeit_id)
|
||||
{
|
||||
@@ -340,6 +384,11 @@ class Projektarbeit extends FHCAPI_Controller
|
||||
return success();
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks permissions for a student.
|
||||
* @param $student_uid
|
||||
* @return bool true if authorized
|
||||
*/
|
||||
private function _hasBerechtigungForStudent($student_uid)
|
||||
{
|
||||
if (!$student_uid)
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
if (! defined('BASEPATH')) exit('No direct script access allowed');
|
||||
|
||||
use \DateTime as DateTime;
|
||||
use CI3_Events as Events;
|
||||
use \CI3_Events as Events;
|
||||
|
||||
class Projektbetreuer extends FHCAPI_Controller
|
||||
{
|
||||
@@ -43,6 +43,9 @@ class Projektbetreuer extends FHCAPI_Controller
|
||||
$this->load->library('PermissionLib');
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets Projektbetreuer data for a Projektarbeit.
|
||||
*/
|
||||
public function getProjektbetreuer()
|
||||
{
|
||||
$projektarbeit_id = $this->input->get('projektarbeit_id');
|
||||
@@ -50,21 +53,30 @@ class Projektbetreuer extends FHCAPI_Controller
|
||||
if (!isset($projektarbeit_id))
|
||||
$this->terminateWithError($this->p->t('ui', 'error_missingId', ['id'=> 'Projektarbeit ID']), self::ERROR_TYPE_GENERAL);
|
||||
|
||||
$this->ProjektbetreuerModel->addSelect(
|
||||
'projektarbeit_id, person_id, nachname, vorname, note, punkte, round(stunden, 1) AS stunden,
|
||||
stundensatz, betreuerart_kurzbz, vertrag_id, titelpre, titelpost'
|
||||
);
|
||||
$this->ProjektbetreuerModel->addSelect("CASE
|
||||
WHEN EXISTS
|
||||
(SELECT 1 FROM public.tbl_benutzer JOIN public.tbl_mitarbeiter ON(uid=mitarbeiter_uid) WHERE person_id=pers.person_id)
|
||||
THEN 'Mitarbeiter'
|
||||
WHEN EXISTS
|
||||
(SELECT 1 FROM public.tbl_benutzer JOIN public.tbl_student ON(uid=student_uid) WHERE person_id=pers.person_id)
|
||||
THEN 'Student'
|
||||
ELSE 'Person'
|
||||
END AS status");
|
||||
$this->ProjektbetreuerModel->addJoin('public.tbl_person pers', 'person_id');
|
||||
$result = $this->ProjektbetreuerModel->loadWhere(['projektarbeit_id' => $projektarbeit_id]);
|
||||
$qry = "
|
||||
SELECT * FROM (
|
||||
SELECT
|
||||
projektarbeit_id, person_id, nachname, vorname, note, punkte, round(stunden, 1) AS stunden,
|
||||
stundensatz, betreuerart_kurzbz, vertrag_id, titelpre, titelpost,
|
||||
CASE
|
||||
WHEN EXISTS
|
||||
(SELECT 1 FROM public.tbl_benutzer JOIN public.tbl_mitarbeiter ON(uid=mitarbeiter_uid) WHERE person_id=pers.person_id)
|
||||
THEN 'Mitarbeiter'
|
||||
WHEN EXISTS
|
||||
(SELECT 1 FROM public.tbl_benutzer JOIN public.tbl_student ON(uid=student_uid) WHERE person_id=pers.person_id)
|
||||
THEN 'Student'
|
||||
ELSE 'Person'
|
||||
END AS status
|
||||
FROM
|
||||
lehre.tbl_projektbetreuer
|
||||
JOIN public.tbl_person pers USING (person_id)
|
||||
WHERE
|
||||
projektarbeit_id = ?
|
||||
) betreuer
|
||||
ORDER BY
|
||||
CASE WHEN status = 'Mitarbeiter' THEN 0 WHEN status = 'Person' THEN 1 ELSE 2 END";
|
||||
|
||||
$result = $this->ProjektbetreuerModel->execReadOnlyQuery($qry, [$projektarbeit_id]);
|
||||
|
||||
if (isError($result)) $this->terminateWithError(getError($result), self::ERROR_TYPE_GENERAL);
|
||||
|
||||
@@ -86,6 +98,7 @@ class Projektbetreuer extends FHCAPI_Controller
|
||||
//~ }
|
||||
//~ }
|
||||
|
||||
// add thesis download link (from external extension)
|
||||
foreach ($projektbetreuer as $pb)
|
||||
{
|
||||
$downloadLink = null;
|
||||
@@ -104,6 +117,9 @@ class Projektbetreuer extends FHCAPI_Controller
|
||||
$this->terminateWithSuccess($this->_addFullNameToBetreuer($projektbetreuer));
|
||||
}
|
||||
|
||||
/**
|
||||
* Saves (adds or updates) a single Projektbetreuer for a Projektarbeit.
|
||||
*/
|
||||
public function saveProjektbetreuer()
|
||||
{
|
||||
$projektarbeit_id = $this->input->post('projektarbeit_id');
|
||||
@@ -118,14 +134,36 @@ class Projektbetreuer extends FHCAPI_Controller
|
||||
|
||||
if ($this->_validate($projektbetreuer) == false) $this->terminateWithValidationErrors($this->form_validation->error_array());
|
||||
|
||||
// check if assessor has already been assigned
|
||||
if (isset($projektbetreuer['person_id']))
|
||||
{
|
||||
$this->ProjektbetreuerModel->addSelect('1');
|
||||
$betreuerRes = $this->ProjektbetreuerModel->loadWhere(
|
||||
[
|
||||
'person_id' => $projektbetreuer['person_id'],
|
||||
'projektarbeit_id' => $projektbetreuer['projektarbeit_id'],
|
||||
'betreuerart_kurzbz' => $projektbetreuer['betreuerart_kurzbz']
|
||||
]
|
||||
);
|
||||
|
||||
if (hasData($betreuerRes)
|
||||
&& (!isset($projektbetreuer['person_id_old']) || $projektbetreuer['person_id'] != $projektbetreuer['person_id_old'])) {
|
||||
return $this->terminateWithError($this->p->t('projektarbeit', 'betreuerZugewiesen'), self::ERROR_TYPE_GENERAL);
|
||||
}
|
||||
}
|
||||
|
||||
$result = null;
|
||||
|
||||
$stunden = isset($projektbetreuer['stunden']) && !isEmptyString($projektbetreuer['stunden']) ? $projektbetreuer['stunden'] : null;
|
||||
$stundensatz =
|
||||
isset($projektbetreuer['stundensatz']) && !isEmptyString($projektbetreuer['stundensatz']) ? $projektbetreuer['stundensatz'] : null;
|
||||
|
||||
$betreuer = [
|
||||
'projektarbeit_id' => $projektarbeit_id,
|
||||
'person_id' => $projektbetreuer['person_id'],
|
||||
'note' => $projektbetreuer['note'],
|
||||
'stunden' => $projektbetreuer['stunden'],
|
||||
'stundensatz' => $projektbetreuer['stundensatz'],
|
||||
'stunden' => $stunden,
|
||||
'stundensatz' => $stundensatz,
|
||||
'betreuerart_kurzbz' => $projektbetreuer['betreuerart_kurzbz']
|
||||
];
|
||||
|
||||
@@ -152,6 +190,9 @@ class Projektbetreuer extends FHCAPI_Controller
|
||||
$this->terminateWithSuccess(hasData($result) ? getData($result) : []);
|
||||
}
|
||||
|
||||
/**
|
||||
* Delete a Projektbetreuer assignment to a Projektarbeit.
|
||||
*/
|
||||
public function deleteProjektbetreuer()
|
||||
{
|
||||
$projektarbeit_id = $this->input->post('projektarbeit_id');
|
||||
@@ -159,21 +200,44 @@ class Projektbetreuer extends FHCAPI_Controller
|
||||
$betreuerart_kurzbz = $this->input->post('betreuerart_kurzbz');
|
||||
|
||||
if (!isset($projektarbeit_id) || !is_numeric($projektarbeit_id))
|
||||
return $this->terminateWithError($this->p->t('ui', 'error_missingId', ['id'=> $this->p->t('projektarbeit', 'projektarbeit').' ID'], self::ERROR_TYPE_GENERAL));
|
||||
{
|
||||
return $this->terminateWithError(
|
||||
$this->p->t('ui', 'error_missingId', ['id'=> $this->p->t('projektarbeit', 'projektarbeit').' ID'], self::ERROR_TYPE_GENERAL)
|
||||
);
|
||||
}
|
||||
|
||||
if (!isset($person_id) || !is_numeric($person_id))
|
||||
return $this->terminateWithError($this->p->t('ui', 'error_missingId', ['id'=> 'Person ID'], self::ERROR_TYPE_GENERAL));
|
||||
|
||||
if (!isset($betreuerart_kurzbz))
|
||||
return $this->terminateWithError($this->p->t('ui', 'error_missingId', ['id'=> $this->p->t('projektarbeit', 'betreuerart')], self::ERROR_TYPE_GENERAL));
|
||||
{
|
||||
return $this->terminateWithError(
|
||||
$this->p->t('ui', 'error_missingId', ['id'=> $this->p->t('projektarbeit', 'betreuerart')], self::ERROR_TYPE_GENERAL)
|
||||
);
|
||||
}
|
||||
|
||||
// check permission
|
||||
if (!$this->ProjektarbeitModel->hasBerechtigungForProjektarbeit($projektarbeit_id))
|
||||
return $this->_outputAuthError([$this->router->method => ['admin:rw', 'assistenz:rw']]);
|
||||
|
||||
$validate = $this->_validateDelete($projektarbeit_id, $person_id);
|
||||
$validate = $this->_validateDelete($projektarbeit_id, $person_id, $betreuerart_kurzbz);
|
||||
|
||||
if (isError($validate)) return $this->terminateWithError(getError($validate), self::ERROR_TYPE_GENERAL);
|
||||
|
||||
// check if there is a Projektarbeitsbeurteilung - if yes, it is handled (possibly deleted) by external extension.
|
||||
$beurteilungDeleteSuccess = true;
|
||||
|
||||
Events::trigger(
|
||||
'projektarbeitsbeurteilung_delete',
|
||||
$projektarbeit_id,
|
||||
function ($value) use (&$beurteilungDeleteSuccess) {
|
||||
$beurteilungDeleteSuccess = $value;
|
||||
}
|
||||
);
|
||||
|
||||
// if there is still a Beurteilung, Projektarbeit cannot be deleted - return with error
|
||||
if (!$beurteilungDeleteSuccess) return $this->terminateWithError($this->p->t('projektarbeit', 'error_paarbeitHatBeurteilung'));
|
||||
|
||||
$result = $this->ProjektbetreuerModel->delete(
|
||||
['projektarbeit_id' => $projektarbeit_id, 'person_id' => $person_id, 'betreuerart_kurzbz' => $betreuerart_kurzbz]
|
||||
);
|
||||
@@ -185,9 +249,12 @@ class Projektbetreuer extends FHCAPI_Controller
|
||||
$this->outputJson($result);
|
||||
}
|
||||
|
||||
return $this->terminateWithSuccess(current(getData($result)) ? : null);
|
||||
return $this->terminateWithSuccess(getData($result));
|
||||
}
|
||||
|
||||
/**
|
||||
* Get all active Betreuerarten.
|
||||
*/
|
||||
public function getBetreuerarten()
|
||||
{
|
||||
$result = $this->BetreuerartModel->loadWhere(['aktiv' => true]);
|
||||
@@ -197,6 +264,9 @@ class Projektbetreuer extends FHCAPI_Controller
|
||||
return $this->terminateWithSuccess(hasData($result) ? getData($result) : []);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get all Noten.
|
||||
*/
|
||||
public function getNoten()
|
||||
{
|
||||
$result = $this->NoteModel->load();
|
||||
@@ -206,6 +276,9 @@ class Projektbetreuer extends FHCAPI_Controller
|
||||
return $this->terminateWithSuccess(hasData($result) ? getData($result) : []);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get default Stundensätze for an employee in a semester.
|
||||
*/
|
||||
public function getDefaultStundensaetze()
|
||||
{
|
||||
$person_id = $this->input->get('person_id');
|
||||
@@ -216,6 +289,9 @@ class Projektbetreuer extends FHCAPI_Controller
|
||||
return $this->terminateWithSuccess($result);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get all Projektbetreuer by search string.
|
||||
*/
|
||||
public function getProjektbetreuerBySearchQuery()
|
||||
{
|
||||
$searchString = $this->input->get('searchString');
|
||||
@@ -227,9 +303,23 @@ class Projektbetreuer extends FHCAPI_Controller
|
||||
|
||||
if (isError($result)) return $this->terminateWithError(getError($result), self::ERROR_TYPE_GENERAL);
|
||||
|
||||
return $this->terminateWithSuccess(hasData($result) ? $this->_addFullNameToBetreuer(getData($result)) : []);
|
||||
if (!hasData($result)) $this->terminateWithSuccess([]);
|
||||
|
||||
$persons = $this->_addFullNameToBetreuer(getData($result));
|
||||
|
||||
// sort persons by type (employees first)
|
||||
usort($persons, function ($a, $b) {
|
||||
$statusRanks = ['Mitarbeiter' => 0, 'Person' => 1, 'Student' => 2];
|
||||
return (isset($statusRanks[$a->status]) ? $statusRanks[$a->status] : count($statusRanks) + 1)
|
||||
- (isset($statusRanks[$b->status]) ? $statusRanks[$b->status] : count($statusRanks) + 1);
|
||||
});
|
||||
|
||||
return $this->terminateWithSuccess($persons);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get person info by Id.
|
||||
*/
|
||||
public function getPerson()
|
||||
{
|
||||
$person_id = $this->input->get('person_id');
|
||||
@@ -255,9 +345,7 @@ class Projektbetreuer extends FHCAPI_Controller
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param
|
||||
* @return object success or error
|
||||
* Validate list of Projektbetreuer.
|
||||
*/
|
||||
public function validateProjektbetreuer()
|
||||
{
|
||||
@@ -277,9 +365,9 @@ class Projektbetreuer extends FHCAPI_Controller
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param
|
||||
* @return object success or error
|
||||
* Validation funciton for checking Projektbetreuer input.
|
||||
* @param $formData Betreuer data
|
||||
* @return bool true when data is valid
|
||||
*/
|
||||
private function _validate($formData)
|
||||
{
|
||||
@@ -306,26 +394,32 @@ class Projektbetreuer extends FHCAPI_Controller
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param
|
||||
* @return object success or error
|
||||
* Check possibility of deletion of a Projektbetreuer.
|
||||
* @param projektarbeit_id
|
||||
* @param person_id
|
||||
* @param betreuerart_kurzbz
|
||||
* @return object success when delete possible, error otherwise
|
||||
*/
|
||||
private function _validateDelete($projektarbeit_id, $person_id)
|
||||
private function _validateDelete($projektarbeit_id, $person_id, $betreuerart_kurzbz)
|
||||
{
|
||||
// check if contract exists
|
||||
$this->ProjektbetreuerModel->addSelect('vertrag_id');
|
||||
$result = $this->ProjektbetreuerModel->loadWhere(['projektarbeit_id' => $projektarbeit_id, 'person_id' => $person_id]);
|
||||
$result = $this->ProjektbetreuerModel->loadWhere(
|
||||
['projektarbeit_id' => $projektarbeit_id, 'person_id' => $person_id, 'betreuerart_kurzbz' => $betreuerart_kurzbz]
|
||||
);
|
||||
|
||||
if (isError($result)) return $result;
|
||||
|
||||
// if contract exists, no deletion is possible
|
||||
if (hasData($result) && getData($result)[0]->vertrag_id != null) return error($this->p->t('projektarbeit', 'error_betreuerHatVertrag'));
|
||||
|
||||
return success();
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param
|
||||
* @return object success or error
|
||||
* Add full name to array with Betreuer.
|
||||
* @param $betreuerArr
|
||||
* @return array including Betreuer with their full names
|
||||
*/
|
||||
private function _addFullNameToBetreuer($betreuerArr)
|
||||
{
|
||||
|
||||
@@ -1078,6 +1078,24 @@ class Status extends FHCAPI_Controller
|
||||
$this->terminateWithSuccess(true);
|
||||
}
|
||||
|
||||
protected function checkForCriticalChangesBis($oldstatus)
|
||||
{
|
||||
$changedFields = array();
|
||||
$allowedFields = array('anmerkung', 'statusgrund_id');
|
||||
$oldstatus_array = get_object_vars($oldstatus);
|
||||
foreach($oldstatus_array as $key => $oldValue)
|
||||
{
|
||||
$newValue = $this->input->post($key);
|
||||
if( $newValue !== $oldValue )
|
||||
{
|
||||
$changedFields[] = $key;
|
||||
}
|
||||
}
|
||||
$criticalFieldsChanged = array_diff($changedFields, $allowedFields);
|
||||
$hasCriticalChangesBis = count($criticalFieldsChanged) > 0 ? true : false;
|
||||
return $hasCriticalChangesBis;
|
||||
}
|
||||
|
||||
/**
|
||||
* Updates a status entry
|
||||
*
|
||||
@@ -1102,6 +1120,7 @@ class Status extends FHCAPI_Controller
|
||||
|
||||
$oldstatus = current($oldstatus);
|
||||
|
||||
$hasCriticalChangesBis = $this->checkForCriticalChangesBis($oldstatus);
|
||||
|
||||
$isBerechtigtNoStudstatusCheck = $this->permissionlib->isBerechtigt('student/keine_studstatuspruefung');
|
||||
$isBerechtigtBasisPrestudentstatus = $this->permissionlib->isBerechtigt('basis/prestudentstatus');
|
||||
@@ -1112,7 +1131,6 @@ class Status extends FHCAPI_Controller
|
||||
$ausbildungssemester = $this->input->post('ausbildungssemester') ?: $oldstatus->ausbildungssemester;
|
||||
$datum = $this->input->post('datum') ?: $oldstatus->datum;
|
||||
|
||||
|
||||
//Form Validation
|
||||
$this->load->library('form_validation');
|
||||
|
||||
@@ -1135,9 +1153,15 @@ class Status extends FHCAPI_Controller
|
||||
$this->p->t('global', 'datum'),
|
||||
[
|
||||
'is_valid_date',
|
||||
['meldestichtag_not_exceeded', function ($value) use ($isBerechtigtNoStudstatusCheck) {
|
||||
['meldestichtag_not_exceeded', function ($value) use ($isBerechtigtNoStudstatusCheck, $hasCriticalChangesBis){
|
||||
if ($isBerechtigtNoStudstatusCheck)
|
||||
return true; // Skip if access right says so
|
||||
{
|
||||
return true; // Skip if access right says so*/
|
||||
}
|
||||
if (!$hasCriticalChangesBis) {
|
||||
return true; // Skip if no critical changes were made
|
||||
}
|
||||
|
||||
if (!$value)
|
||||
return true; // Error will be handled by the required statement above
|
||||
|
||||
|
||||
@@ -215,6 +215,7 @@ class Verband extends FHCAPI_Controller
|
||||
$this->StudienordnungModel->addDistinct();
|
||||
$this->StudienordnungModel->addSelect("CONCAT(studiengang_kz, '/', p.orgform_kurzbz) AS link");
|
||||
$this->StudienordnungModel->addSelect("p.orgform_kurzbz AS name");
|
||||
$this->StudienordnungModel->addSelect("studiengang_kz AS stg_kz");
|
||||
|
||||
$this->StudienordnungModel->addJoin('lehre.tbl_studienplan p', 'studienordnung_id');
|
||||
|
||||
|
||||
@@ -200,13 +200,14 @@ class AntragJob extends JOB_Controller
|
||||
}
|
||||
|
||||
/**
|
||||
* Send reminder to Assistant for Wiedereinstieg Unterbrecher
|
||||
* Send reminder to Assistant and to Student for Wiedereinstieg Unterbrecher
|
||||
*
|
||||
*/
|
||||
public function sendReminderWiedereinstieg()
|
||||
{
|
||||
$now = new DateTime();
|
||||
$modifier = $this->config->item('unterbrechung_job_remind_wiedereinstieg_date_modifier');
|
||||
|
||||
if (!$modifier)
|
||||
return $this->logError('Konnte Job nicht starten: Config "unterbrechung_job_remind_wiedereinstieg_date_modifiers" nicht gesetzt');
|
||||
|
||||
@@ -230,6 +231,7 @@ class AntragJob extends JOB_Controller
|
||||
|
||||
$antraege = getData($result) ?: [];
|
||||
$count = 0;
|
||||
$countReminderStudent = 0;
|
||||
foreach ($antraege as $antrag)
|
||||
{
|
||||
$res = $this->StudierendenantragModel->getStgAndSem($antrag->studierendenantrag_id);
|
||||
@@ -257,10 +259,92 @@ class AntragJob extends JOB_Controller
|
||||
$data['UID'] = $student->student_uid;
|
||||
}
|
||||
|
||||
// NOTE(chris): Sancho mail
|
||||
if(sendSanchoMail('Sancho_Mail_Antrag_U_Reminder', $data, $antrag->email, 'Reminder: Unterbrechung Wiedereinstieg'))
|
||||
//Data für Email Student
|
||||
$result = $this->PrestudentModel->load($antrag->prestudent_id);
|
||||
$dataPrestudent = current(getData($result));
|
||||
$person_id = $dataPrestudent->person_id;
|
||||
|
||||
$this->KontaktModel->addSelect('kontakt');
|
||||
|
||||
$result = $this->KontaktModel->loadWhere([
|
||||
'person_id'=> $person_id,
|
||||
'zustellung' => true,
|
||||
'kontakttyp' => 'email'
|
||||
]);
|
||||
|
||||
$email_student_privat = null;
|
||||
$dataKontakt = getData($result);
|
||||
if ($dataKontakt) {
|
||||
$stud_private_zustell_emails = array_map(function($kontakt) {
|
||||
return $kontakt->kontakt;
|
||||
}, $dataKontakt);
|
||||
$email_student_privat = implode(', ', $stud_private_zustell_emails);
|
||||
}
|
||||
|
||||
$email_student_FH = $this->StudentModel->getEmailFH($this->StudentModel->getUID($antrag->prestudent_id));
|
||||
|
||||
//studiensemester
|
||||
$result = $this->StudiensemesterModel->getByDate($datum->format('Y-m-d'));
|
||||
if (hasData($result)) {
|
||||
$dataSem = current(getData($result));
|
||||
}
|
||||
|
||||
$studiensemester = $dataSem->studiensemester_kurzbz;
|
||||
$studsemShort = substr($studiensemester, 0, 2);
|
||||
|
||||
if($studsemShort == "SS")
|
||||
{
|
||||
$data['studSemShort_Eng'] = "summer semester";
|
||||
$data['meldenBis'] = "15.1.";
|
||||
$data['meldenBis_Eng'] = "January 15";
|
||||
}
|
||||
elseif ($studsemShort == "WS") {
|
||||
$data['studSemShort_Eng'] = "winter semester";
|
||||
$data['meldenBis'] = "1.8.";
|
||||
$data['meldenBis_Eng'] = "August 1";
|
||||
}
|
||||
else
|
||||
{
|
||||
$studsemShort = "SS/WS";
|
||||
$data['studSemShort_Eng'] = "summer/winter semester";
|
||||
$data['meldenBis'] = "15.1. (bei Einstieg ins SS) / 1.8. (bei Einstieg ins WS)";
|
||||
$data['meldenBis_Eng'] = "January 15 (for sommer semester enrollment) / August 1 (for winter semester enrollment)";
|
||||
}
|
||||
|
||||
$data['studSemShort'] = $studsemShort;
|
||||
|
||||
// NOTE(chris): Sancho mail Assistant
|
||||
$sancho_assistant_sent = sendSanchoMail('Sancho_Mail_Antrag_U_Reminder', $data, $antrag->email, 'Reminder: Unterbrechung Wiedereinstieg');
|
||||
if($sancho_assistant_sent)
|
||||
{
|
||||
$count++;
|
||||
}
|
||||
else
|
||||
{
|
||||
$this->logError('Error: failed to send Assistant Reminder studierendenantrag_id: ' . $antrag->studierendenantrag_id);
|
||||
}
|
||||
//Mail to Student
|
||||
$sancho_student_sent = sendSanchoMail(
|
||||
'Sancho_Mail_Antrag_U_Remind_Stud',
|
||||
$data,
|
||||
$email_student_FH,
|
||||
'Reminder: Unterbrechung Wiedereinstieg',
|
||||
'',
|
||||
'',
|
||||
'',
|
||||
$email_student_privat);
|
||||
|
||||
if($sancho_student_sent)
|
||||
{
|
||||
$countReminderStudent++;
|
||||
}
|
||||
else
|
||||
{
|
||||
$this->logError('Error: failed to send Student Reminder studierendenantrag_id: ' . $antrag->studierendenantrag_id);
|
||||
}
|
||||
|
||||
if($sancho_assistant_sent && $sancho_student_sent)
|
||||
{
|
||||
$this->StudierendenantragstatusModel->insert([
|
||||
'studierendenantrag_id' => $antrag->studierendenantrag_id,
|
||||
'studierendenantrag_statustyp_kurzbz' => Studierendenantragstatus_model::STATUS_REMINDERSENT,
|
||||
@@ -268,7 +352,7 @@ class AntragJob extends JOB_Controller
|
||||
]);
|
||||
}
|
||||
}
|
||||
$this->logInfo($count . ' Reminder gesendet - Ende Job sendReminderWiedereinstieg');
|
||||
$this->logInfo($count . ' Reminder an Assistenz und ' . $countReminderStudent . ' Reminder an Student gesendet - Ende Job sendReminderWiedereinstieg');
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -68,7 +68,8 @@ class PrestudentLib
|
||||
$this->_ci->PrestudentModel->addOrder('zgv_code', 'DESC');
|
||||
$this->_ci->PrestudentModel->addLimit(1);
|
||||
$result = $this->_ci->PrestudentModel->loadWhere([
|
||||
'person_id' => $person_id
|
||||
'person_id' => $person_id,
|
||||
'zgv_code IS NOT NULL' => null
|
||||
]);
|
||||
|
||||
if (isError($result)) return $result;
|
||||
@@ -686,9 +687,6 @@ class PrestudentLib
|
||||
$now = date('c');
|
||||
$today = date('Y-m-d');
|
||||
|
||||
$jahr = mb_substr($studiensemester_kurzbz, 4, 2);
|
||||
|
||||
|
||||
// Genererate Personenkennzeichen
|
||||
$personenkennzeichen = $this->_ci->StudentModel->generateMatrikelnummer2(
|
||||
$student_data->studiengang_kz,
|
||||
@@ -698,8 +696,9 @@ class PrestudentLib
|
||||
if (isError($personenkennzeichen))
|
||||
return $personenkennzeichen;
|
||||
$personenkennzeichen = getData($personenkennzeichen);
|
||||
|
||||
|
||||
|
||||
$jahr = mb_substr($personenkennzeichen, 0, 2);
|
||||
|
||||
// Generate UID
|
||||
$uid = $this->_ci->StudentModel->generateUID(
|
||||
$student_data->kurzbz,
|
||||
|
||||
@@ -169,7 +169,7 @@ class Student_model extends DB_Model
|
||||
|
||||
$max = 0;
|
||||
if ($matrikelnrres && hasData($matrikelnrres)) {
|
||||
$max = mb_substr(getData($matrikelnrres)[0]->matrikelnr, 7);
|
||||
$max = mb_substr(trim(getData($matrikelnrres)[0]->matrikelnr), -3);
|
||||
if (!is_numeric($max)) {
|
||||
$max = (int)$max;
|
||||
}
|
||||
|
||||
@@ -24,17 +24,28 @@ class Projektarbeit_model extends DB_Model
|
||||
public function getProjektarbeit($student_uid, $studiengang_kz = null, $studiensemester_kurzbz = null, $projekttyp = null, $final = null)
|
||||
{
|
||||
$qry = "SELECT
|
||||
tbl_projektarbeit.*, tbl_projekttyp.bezeichnung,
|
||||
pa.*, tbl_projekttyp.bezeichnung,
|
||||
tbl_lehreinheit.studiensemester_kurzbz, tbl_lehrveranstaltung.lehrveranstaltung_id,
|
||||
tbl_firma.name AS firma_name
|
||||
tbl_firma.name AS firma_name,
|
||||
(
|
||||
SELECT
|
||||
STRING_AGG(trim(COALESCE(titelpre,'')||' '||COALESCE(vorname,'')||' '||COALESCE(nachname,'')||' '||COALESCE(titelpost,'')), ', ')
|
||||
FROM
|
||||
lehre.tbl_projektbetreuer
|
||||
JOIN public.tbl_person USING (person_id)
|
||||
WHERE
|
||||
projektarbeit_id = pa.projektarbeit_id
|
||||
AND student_uid = pa.student_uid
|
||||
GROUP BY projektarbeit_id
|
||||
) AS projektbetreuer
|
||||
FROM
|
||||
lehre.tbl_projektarbeit
|
||||
lehre.tbl_projektarbeit pa
|
||||
JOIN lehre.tbl_projekttyp USING (projekttyp_kurzbz)
|
||||
JOIN lehre.tbl_lehreinheit USING (lehreinheit_id)
|
||||
JOIN lehre.tbl_lehrveranstaltung USING (lehrveranstaltung_id)
|
||||
LEFT JOIN public.tbl_firma USING (firma_id)
|
||||
WHERE
|
||||
tbl_projektarbeit.student_uid = ?";
|
||||
pa.student_uid = ?";
|
||||
|
||||
$params = array($student_uid);
|
||||
|
||||
|
||||
@@ -135,7 +135,8 @@ class Profil_update_model extends DB_Model
|
||||
attachment_id,
|
||||
UPPER(public.tbl_studiengang.typ || public.tbl_studiengang.kurzbz) AS studiengang,
|
||||
COALESCE(of.orgform_kurzbz, public.tbl_studiengang.orgform_kurzbz) AS orgform,
|
||||
NULL as oezuordnung
|
||||
NULL as oezuordnung,
|
||||
tbl_student.semester
|
||||
FROM public.tbl_profil_update
|
||||
JOIN public.tbl_profil_update_status ON public.tbl_profil_update_status.status_kurzbz = public.tbl_profil_update.status
|
||||
JOIN public.tbl_student ON public.tbl_student.student_uid=public.tbl_profil_update.uid
|
||||
|
||||
@@ -47,7 +47,6 @@ class Stundensatz_model extends DB_Model
|
||||
{
|
||||
$this->load->config('stv');
|
||||
|
||||
$useFixangestelltStundensatz = $this->config->item('tabs')['projektarbeit']['lvLektroinnenzuteilungFixangestelltStundensatz'];
|
||||
$defaultStundensatz = $this->config->item('tabs')['projektarbeit']['defaultProjektbetreuerStundensatz'];
|
||||
|
||||
$stundensatz = '';
|
||||
@@ -63,7 +62,7 @@ class Stundensatz_model extends DB_Model
|
||||
{
|
||||
$studiensemester = getData($result)[0];
|
||||
|
||||
if (isset($useFixangestelltStundensatz) && !$useFixangestelltStundensatz)
|
||||
if (defined('FAS_LV_LEKTORINNENZUTEILUNG_FIXANGESTELLT_STUNDENSATZ') && !FAS_LV_LEKTORINNENZUTEILUNG_FIXANGESTELLT_STUNDENSATZ)
|
||||
{
|
||||
// load Mitarbeiter
|
||||
$params = [$person_id];
|
||||
@@ -83,19 +82,30 @@ class Stundensatz_model extends DB_Model
|
||||
|
||||
if (hasData($result))
|
||||
{
|
||||
foreach (getData($result) as $ma)
|
||||
{
|
||||
if (!$ma->fixangestellt)
|
||||
{
|
||||
$stundensatzRes = $this->getStundensatzByDatum(
|
||||
$ma->mitarbeiter_uid, $studiensemester->start, $studiensemester->ende, 'lehre'
|
||||
);
|
||||
$ma = getData($result)[0];
|
||||
|
||||
if (hasData($stundensatzRes))
|
||||
$stundensatz = getData($stundensatzRes)[0]->stundensatz;
|
||||
else
|
||||
$stundensatz = '0.00';
|
||||
}
|
||||
$this->load->model('vertragsbestandteil/Dienstverhaeltnis_model','DienstverhaeltnisModel');
|
||||
$echterdv_result = $this->DienstverhaeltnisModel->existsDienstverhaeltnis(
|
||||
$ma->mitarbeiter_uid,
|
||||
$studiensemester->start,
|
||||
$studiensemester->ende,
|
||||
'echterdv'
|
||||
);
|
||||
|
||||
if (hasData($echterdv_result))
|
||||
{
|
||||
$stundensatz = null;
|
||||
}
|
||||
else
|
||||
{
|
||||
$stundensatzRes = $this->getStundensatzByDatum(
|
||||
$ma->mitarbeiter_uid, $studiensemester->start, $studiensemester->ende, 'lehre'
|
||||
);
|
||||
|
||||
if (hasData($stundensatzRes))
|
||||
$stundensatz = getData($stundensatzRes)[0]->stundensatz;
|
||||
else
|
||||
$stundensatz = '0.00';
|
||||
}
|
||||
}
|
||||
else
|
||||
|
||||
@@ -447,14 +447,6 @@ if (isset($_POST['save']) && isset($_SESSION['prestudent_id']))
|
||||
{
|
||||
e.preventDefault();
|
||||
});
|
||||
// If Browser is any other than Mozilla Firefox and the test includes any MathML,
|
||||
// show message to use Mozilla Firefox
|
||||
var ua = navigator.userAgent;
|
||||
if ((ua.indexOf("Firefox") > -1) == false)
|
||||
{
|
||||
$("#alertmsgdiv").html("<div class='alert alert-danger'>BITTE VERWENDEN SIE DEN MOZILLA FIREFOX BROWSER!<br>(Manche Prüfungsfragen werden sonst nicht korrekt dargestellt.<br><br>PLEASE USE MOZILLA FIREFOX BROWSER!<br>(Otherwise some exam items will not be displayed correctly</div>");
|
||||
//alert('BITTE VERWENDEN SIE DEN MOZILLA FIREFOX BROWSER!\n(Manche Prüfungsfragen werden sonst nicht korrekt dargestellt.\n\nPLEASE USE MOZILLA FIREFOX BROWSER!\n(Ohterwise some exam items will not be displayed correctly.)');
|
||||
}
|
||||
});
|
||||
</script>
|
||||
<?php
|
||||
|
||||
@@ -425,28 +425,6 @@ else
|
||||
e.preventDefault();
|
||||
});
|
||||
});
|
||||
// Get users Browser
|
||||
var ua = navigator.userAgent;
|
||||
|
||||
// If Browser is any other than Mozilla Firefox and the test includes any MathML,
|
||||
// show message to use Mozilla Firefox
|
||||
if ((ua.indexOf("Firefox") > -1) == false)
|
||||
{
|
||||
let hasMathML = "<?php echo (isset($gebiet_hasMathML)?$gebiet_hasMathML:''); ?>";
|
||||
let userLang = "<?php echo $sprache_user; ?>";
|
||||
if (hasMathML == true)
|
||||
{
|
||||
if (userLang == 'German')
|
||||
{
|
||||
alert('BITTE VERWENDEN SIE DEN MOZILLA FIREFOX BROWSER!\n(Manche Prüfungsfragen werden sonst nicht korrekt dargestellt.)');
|
||||
}
|
||||
else if(userLang == 'English')
|
||||
{
|
||||
alert('PLEASE USE MOZILLA FIREFOX BROWSER!\n(Ohterwise some exam items will not be displayed correctly.)');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Error massage if check_gebiet function returns false
|
||||
$(function() {
|
||||
var invalid_gebiete = "<?php echo (isset($invalid_gebiete)?$invalid_gebiete:''); ?>";
|
||||
|
||||
@@ -101,7 +101,7 @@ export default {
|
||||
deleteMobilityPurpose(params) {
|
||||
return {
|
||||
method: 'post',
|
||||
url: 'api/frontend/v1/stv/mobility/deleteMobilityPurpose/',
|
||||
url: 'api/frontend/v1/stv/mobility/deleteMobilityPurpose/' + params.bisio_id,
|
||||
params
|
||||
};
|
||||
},
|
||||
|
||||
@@ -49,6 +49,12 @@ export default {
|
||||
url: 'api/frontend/v1/stv/projektarbeit/getNoten'
|
||||
};
|
||||
},
|
||||
getStudiensemester() {
|
||||
return {
|
||||
method: 'get',
|
||||
url: 'api/frontend/v1/stv/projektarbeit/getStudiensemester'
|
||||
};
|
||||
},
|
||||
loadProjektarbeit(projektarbeit_id) {
|
||||
return {
|
||||
method: 'get',
|
||||
|
||||
@@ -46,7 +46,6 @@ export default {
|
||||
loading: false,
|
||||
filter: "Pending",
|
||||
profil_update_id: Number(this.id),
|
||||
|
||||
};
|
||||
},
|
||||
computed: {
|
||||
@@ -60,6 +59,10 @@ export default {
|
||||
},
|
||||
profilUpdateOptions: function () {
|
||||
return {
|
||||
persistence: {
|
||||
columns: ["width", "visible", "frozen"],
|
||||
},
|
||||
persistenceID: 'cis-profilupdate-2025121702',
|
||||
ajaxURL: 'dummy',
|
||||
ajaxRequestFunc: (url, config, params) => {
|
||||
return this.$api.call(ApiProfilUpdate.getProfilUpdateWithPermission(params.filter));
|
||||
@@ -205,7 +208,7 @@ export default {
|
||||
//responsive:0,
|
||||
},
|
||||
{
|
||||
title: this.$p.t("lehre", "studiengang") + ' (' + this.$p.t("profil", "studentIn") + ')',
|
||||
title: this.$p.t("profil", "stg_short") + ' (' + this.$p.t("profil", "studentIn") + ')',
|
||||
field: "studiengang",
|
||||
minWidth: 50,
|
||||
resizable: true,
|
||||
@@ -213,8 +216,14 @@ export default {
|
||||
headerFilterParams: {valuesLookup:true, listOnEmpty:true, autocomplete:true, sort:"asc"},
|
||||
//responsive:0,
|
||||
},
|
||||
{
|
||||
title: this.$p.t("lehre", "organisationsform") + ' (' + this.$p.t("profil", "studentIn") + ')',
|
||||
{
|
||||
title: this.$p.t("profil", "sem_short") + ' (' + this.$p.t("profil", "studentIn") + ')',
|
||||
field: "semester",
|
||||
headerFilter: "list",
|
||||
headerFilterParams: {valuesLookup:true, listOnEmpty:true, autocomplete:true, sort:"asc"}
|
||||
},
|
||||
{
|
||||
title: this.$p.t("profil", "orgform_short") + ' (' + this.$p.t("profil", "studentIn") + ')',
|
||||
field: "orgform",
|
||||
minWidth: 50,
|
||||
resizable: true,
|
||||
@@ -222,8 +231,8 @@ export default {
|
||||
headerFilterParams: {valuesLookup:true, listOnEmpty:true, autocomplete:true, sort:"asc"},
|
||||
//responsive:0,
|
||||
},
|
||||
{
|
||||
title: this.$p.t("lehre", "organisationseinheit") + ' (' + this.$p.t("profil", "mitarbeiterIn") + ')',
|
||||
{
|
||||
title: this.$p.t("profil", "orgeinheit_short") + ' (' + this.$p.t("profil", "mitarbeiterIn") + ')',
|
||||
field: "oezuordnung",
|
||||
minWidth: 200,
|
||||
resizable: true,
|
||||
@@ -231,7 +240,7 @@ export default {
|
||||
headerFilterParams: {valuesLookup:true, listOnEmpty:true, autocomplete:true, sort:"asc"},
|
||||
//responsive:0,
|
||||
},
|
||||
{
|
||||
{
|
||||
title: this.$p.t("profilUpdate", "Topic"),
|
||||
field: "topic",
|
||||
resizable: true,
|
||||
@@ -240,7 +249,7 @@ export default {
|
||||
headerFilterParams: {valuesLookup:true, listOnEmpty:true, autocomplete:true, sort:"asc"},
|
||||
//responsive:0,
|
||||
},
|
||||
{
|
||||
{
|
||||
title: this.$p.t("profilUpdate", "insertamum"),
|
||||
field: "insertamum_iso",
|
||||
resizable: true,
|
||||
@@ -251,7 +260,7 @@ export default {
|
||||
formatterParams: this.datetimeFormatterParams(),
|
||||
//responsive:0,
|
||||
},
|
||||
{
|
||||
{
|
||||
title: this.$p.t("profilUpdate", "Status"),
|
||||
field: "status_translated",
|
||||
hozAlign: "center",
|
||||
@@ -273,7 +282,6 @@ export default {
|
||||
}
|
||||
return `<div class='row justify-content-center'><div class='col-2'><i class='${iconClasses}'></i></div> <div class='col-4'><span>${cell.getValue()}</span></div></div>`;
|
||||
},
|
||||
|
||||
resizable: true,
|
||||
minWidth: 200,
|
||||
//responsive:0,
|
||||
@@ -309,7 +317,6 @@ export default {
|
||||
],
|
||||
};
|
||||
}
|
||||
|
||||
},
|
||||
methods: {
|
||||
denyProfilUpdate: function (data) {
|
||||
@@ -351,7 +358,6 @@ export default {
|
||||
this.showModal = false;
|
||||
this.modalData = null;
|
||||
},
|
||||
|
||||
showAcceptDenyModal(value) {
|
||||
this.modalData = value;
|
||||
if (!this.modalData) {
|
||||
@@ -364,7 +370,6 @@ export default {
|
||||
this.$refs.AcceptDenyModal.show();
|
||||
});
|
||||
},
|
||||
|
||||
updateData: function (event) {
|
||||
this.$refs.UpdatesTable.tabulator.setData();
|
||||
//? store the selected view in the session storage of the browser
|
||||
@@ -415,22 +420,30 @@ export default {
|
||||
},
|
||||
template: /*html*/ `
|
||||
<div>
|
||||
|
||||
<accept-deny-update :title="$p.t('profilUpdate','profilUpdateRequest')" v-if="showModal" ref="AcceptDenyModal" @hideBsModal="hideAcceptDenyModal" :value="JSON.parse(JSON.stringify(modalData))" :setLoading="setLoading" ></accept-deny-update>
|
||||
<div class="form-underline flex-fill ">
|
||||
<div class="form-underline-titel">{{$p.t('ui','anzeigen')}} </div>
|
||||
|
||||
<select class="mb-4 form-select" v-model="filter" @change="updateData" aria-label="Profil updates display selection">
|
||||
<option :selected="true" :value="profilUpdateStates['Pending']" >{{$p.t('profilUpdate','pendingRequests')}}</option>
|
||||
<option :value="profilUpdateStates['Accepted']">{{$p.t('profilUpdate','acceptedRequests')}}</option>
|
||||
<option :value="profilUpdateStates['Rejected']">{{$p.t('profilUpdate','rejectedRequests')}}</option>
|
||||
<option :value="'Alle'">{{$p.t('profilUpdate','allRequests')}}</option>
|
||||
</select>
|
||||
|
||||
</div>
|
||||
<loading ref="loadingModalRef" :timeout="0"></loading>
|
||||
|
||||
<core-filter-cmpt v-if="profilUpdateStates && categoryLoaded" :title="$p.t('profilUpdate','profilUpdateRequests')" ref="UpdatesTable" :tabulatorEvents="profilUpdateEvents" :tabulator-options="profilUpdateOptions" tableOnly :sideMenu="false" />
|
||||
<accept-deny-update :title="$p.t('profilUpdate','profilUpdateRequest')" v-if="showModal" ref="AcceptDenyModal" @hideBsModal="hideAcceptDenyModal" :value="JSON.parse(JSON.stringify(modalData))" :setLoading="setLoading" ></accept-deny-update>
|
||||
<h3>{{$p.t('profilUpdate', 'profilUpdateRequests')}}</h3>
|
||||
<loading ref="loadingModalRef" :timeout="0"></loading>
|
||||
|
||||
</div>`,
|
||||
<core-filter-cmpt
|
||||
v-if="profilUpdateStates && categoryLoaded"
|
||||
ref="UpdatesTable"
|
||||
:tabulatorEvents="profilUpdateEvents"
|
||||
:tabulator-options="profilUpdateOptions"
|
||||
table-only
|
||||
:sideMenu="false">
|
||||
<template #actions>
|
||||
<div style="width: 94vw;" class="d-flex justify-content-end">
|
||||
<div>
|
||||
<select class="mb-4 form-select" v-model="filter" @change="updateData" aria-label="Profil updates display selection">
|
||||
<option :selected="true" :value="profilUpdateStates['Pending']" >{{$p.t('profilUpdate','pendingRequests')}}</option>
|
||||
<option :value="profilUpdateStates['Accepted']">{{$p.t('profilUpdate','acceptedRequests')}}</option>
|
||||
<option :value="profilUpdateStates['Rejected']">{{$p.t('profilUpdate','rejectedRequests')}}</option>
|
||||
<option :value="'Alle'">{{$p.t('profilUpdate','allRequests')}}</option>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
</core-filter-cmpt>
|
||||
|
||||
</div>`,
|
||||
};
|
||||
|
||||
@@ -192,7 +192,15 @@ export default {
|
||||
<option value="textLong_plageat">{{$p.t('studierendenantrag', 'dropdown_plageat')}}
|
||||
</option>
|
||||
<option value="textLong_MissingZgv">{{$p.t('studierendenantrag', 'dropdown_MissingZgv')}}
|
||||
</option>
|
||||
</option>
|
||||
<option value="textLong_Studienwechsel">{{$p.t('studierendenantrag', 'dropdown_Studienwechsel')}}
|
||||
</option>
|
||||
<option value="textLong_Studienabbruch_allgemein">{{$p.t('studierendenantrag', 'dropdown_Studienabbruch_allgemein')}}
|
||||
</option>
|
||||
<option value="textLong_vsCodeOfConduct">{{$p.t('studierendenantrag', 'dropdown_vsCodeOfConduct')}}
|
||||
</option>
|
||||
<option value="textLong_additionalReason">{{$p.t('studierendenantrag', 'dropdown_additionalReason')}}
|
||||
</option>
|
||||
<!--
|
||||
<option value="textLong_unruly">{{$p.t('studierendenantrag', 'dropdown_unruly')}}
|
||||
</option>
|
||||
|
||||
@@ -169,6 +169,11 @@ export default {
|
||||
{
|
||||
this.localData.push(newEntry);
|
||||
|
||||
// reload tabulator mit tabulator method
|
||||
if (this.$refs.table?.tabulator) {
|
||||
this.$refs.table.tabulator.replaceData(this.localData);
|
||||
}
|
||||
|
||||
this.$emit('setMobilityPurposeToNewMobility', {
|
||||
zweck_code: this.formData.zweck_code,
|
||||
});
|
||||
@@ -198,7 +203,6 @@ export default {
|
||||
<br>
|
||||
|
||||
<div class="override_filtercmpt_actions_style">
|
||||
|
||||
<core-filter-cmpt
|
||||
ref="table"
|
||||
:tabulator-options="tabulatorOptions"
|
||||
|
||||
@@ -157,6 +157,11 @@ export default {
|
||||
{
|
||||
this.localData.push(newEntry);
|
||||
|
||||
// reload tabulator mit tabulator method
|
||||
if (this.$refs.table?.tabulator) {
|
||||
this.$refs.table.tabulator.replaceData(this.localData);
|
||||
}
|
||||
|
||||
this.$emit('setMobilitySupportToNewMobility', {
|
||||
aufenthaltfoerderung_code: this.formData.aufenthaltfoerderung_code,
|
||||
});
|
||||
|
||||
@@ -207,8 +207,8 @@ export default{
|
||||
button.addEventListener('click', () =>
|
||||
this.actionEditStatus(data.status_kurzbz, data.studiensemester_kurzbz, data.ausbildungssemester)
|
||||
);
|
||||
if (this.dataMeldestichtag && this.dataMeldestichtag > data.datum && !this.hasPermissionToSkipStatusCheck)
|
||||
button.disabled = true;
|
||||
/* if (this.dataMeldestichtag && this.dataMeldestichtag > data.datum && !this.hasPermissionToSkipStatusCheck)
|
||||
button.disabled = true;*/
|
||||
container.append(button);
|
||||
|
||||
button = document.createElement('button');
|
||||
|
||||
@@ -69,10 +69,13 @@ export default {
|
||||
final: true,
|
||||
anmerkung: null
|
||||
},
|
||||
studiensemester: null,
|
||||
arrTypen: [],
|
||||
arrFirmen: [],
|
||||
arrLvs: [],
|
||||
arrNoten: [],
|
||||
arrStudiensemester: [],
|
||||
additional_lehrveranstaltung_id: null,
|
||||
filteredFirmen: [],
|
||||
abortController: {
|
||||
firma: null
|
||||
@@ -103,7 +106,11 @@ export default {
|
||||
this.formData.anmerkung = null;
|
||||
this.$refs.formDetails.clearValidation();
|
||||
},
|
||||
getFormData(statusNew, studiensemester_kurzbz, additional_lehrveranstaltung_id) {
|
||||
getFormData(newProjektarbeit, studiensemester_kurzbz, additional_lehrveranstaltung_id) {
|
||||
|
||||
this.additional_lehrveranstaltung_id = additional_lehrveranstaltung_id;
|
||||
this.studiensemester = studiensemester_kurzbz || this.defaultSemester;
|
||||
this.newProjektarbeit = newProjektarbeit;
|
||||
|
||||
this.$api
|
||||
.call(ApiStvProjektarbeit.getTypenProjektarbeit())
|
||||
@@ -112,18 +119,7 @@ export default {
|
||||
})
|
||||
.catch(this.$fhcAlert.handleSystemError);
|
||||
|
||||
this.$api
|
||||
.call(ApiStvProjektarbeit.getLehrveranstaltungen(
|
||||
this.student.uid,
|
||||
statusNew ? this.student.studiengang_kz : null,
|
||||
studiensemester_kurzbz ?? this.defaultSemester,
|
||||
additional_lehrveranstaltung_id
|
||||
))
|
||||
.then(result => {
|
||||
this.arrLvs = result.data
|
||||
}
|
||||
)
|
||||
.catch(this.$fhcAlert.handleSystemError);
|
||||
this.getLehrveranstaltungen();
|
||||
|
||||
this.$api
|
||||
.call(ApiStvProjektarbeit.getNoten())
|
||||
@@ -132,7 +128,14 @@ export default {
|
||||
})
|
||||
.catch(this.$fhcAlert.handleSystemError);
|
||||
|
||||
if (statusNew) this.resetForm();
|
||||
this.$api
|
||||
.call(ApiStvProjektarbeit.getStudiensemester())
|
||||
.then(result => {
|
||||
this.arrStudiensemester = result.data;
|
||||
})
|
||||
.catch(this.$fhcAlert.handleSystemError);
|
||||
|
||||
if (this.newProjektarbeit) this.resetForm();
|
||||
},
|
||||
loadProjektarbeit(projektarbeit_id) {
|
||||
|
||||
@@ -178,9 +181,30 @@ export default {
|
||||
this.filteredFirmen = result.data;
|
||||
});
|
||||
},
|
||||
getLehrveranstaltungen() {
|
||||
return this.$api
|
||||
.call(ApiStvProjektarbeit.getLehrveranstaltungen(
|
||||
this.student.uid,
|
||||
this.newProjektarbeit ? this.student.studiengang_kz : null,
|
||||
this.studiensemester,
|
||||
this.additional_lehrveranstaltung_id
|
||||
))
|
||||
.then(result => {
|
||||
this.arrLvs = result.data
|
||||
}
|
||||
)
|
||||
.catch(this.$fhcAlert.handleSystemError);
|
||||
},
|
||||
lvChanged(event) {
|
||||
this.formData.lehreinheit_id = null;
|
||||
},
|
||||
studiensemesterChanged() {
|
||||
this.formData.lehreinheit_id = null;
|
||||
this.getLehrveranstaltungen();
|
||||
},
|
||||
gesperrtBisChanged(newSperrdatum) {
|
||||
this.formData.freigegeben = newSperrdatum == null || newSperrdatum == '';
|
||||
},
|
||||
// enrich and modify data before sending
|
||||
getPreparedFormData() {
|
||||
let preparedFormData = JSON.parse(JSON.stringify(this.formData)); // deep copy
|
||||
@@ -281,7 +305,7 @@ export default {
|
||||
|
||||
<div class="row mb-3">
|
||||
<form-input
|
||||
container-class="stv-details-projektarbeit-lv"
|
||||
container-class="stv-details-projektarbeit-lv col-10"
|
||||
:label="$p.t('projektarbeit', 'lehrveranstaltung')"
|
||||
type="select"
|
||||
v-model="formData.lehrveranstaltung_id"
|
||||
@@ -297,6 +321,23 @@ export default {
|
||||
{{lv.bezeichnung + (lv.orgform_kurzbz ? ' ' + lv.orgform_kurzbz : '') + ' (' + lv.semester + ' Sem) ID: ' + lv.lehrveranstaltung_id}}
|
||||
</option>
|
||||
</form-input>
|
||||
<form-input
|
||||
container-class="col-2"
|
||||
:label="$p.t('lehre', 'studiensemester')"
|
||||
type="select"
|
||||
v-model="studiensemester"
|
||||
name="studiensemester"
|
||||
@change="studiensemesterChanged"
|
||||
>
|
||||
<option :value="null"> -- {{$p.t('fehlermonitoring', 'keineAuswahl')}} -- </option>
|
||||
<option
|
||||
v-for="sem in arrStudiensemester"
|
||||
:key="sem.studiensemester_kurzbz"
|
||||
:value="sem.studiensemester_kurzbz"
|
||||
>
|
||||
{{sem.studiensemester_kurzbz}}
|
||||
</option>
|
||||
</form-input>
|
||||
</div>
|
||||
|
||||
<div class="row mb-3">
|
||||
@@ -362,6 +403,7 @@ export default {
|
||||
format="dd.MM.yyyy"
|
||||
model-type="yyyy-MM-dd"
|
||||
name="gesperrtbis"
|
||||
@update:model-value="gesperrtBisChanged"
|
||||
>
|
||||
</form-input>
|
||||
<div class="col-4">
|
||||
|
||||
+20
-3
@@ -47,16 +47,25 @@ export default {
|
||||
{
|
||||
event: 'tableBuilt',
|
||||
handler: async() => {
|
||||
await this.$p.loadCategory(['global', 'person', 'stv', 'ui', 'projektarbeit']);
|
||||
await this.$p.loadCategory(['global', 'person', 'lehre', 'stv', 'ui', 'projektarbeit']);
|
||||
|
||||
let cm = this.$refs.table.tabulator.columnManager;
|
||||
|
||||
cm.getColumnByField('projekttyp_kurzbz').component.updateDefinition({
|
||||
title: this.$p.t('projektarbeit', 'typ_kurzbz')
|
||||
});
|
||||
cm.getColumnByField('bezeichnung').component.updateDefinition({
|
||||
title: this.$p.t('projektarbeit', 'typ')
|
||||
});
|
||||
cm.getColumnByField('studiensemester_kurzbz').component.updateDefinition({
|
||||
title: this.$p.t('lehre', 'studiensemester')
|
||||
});
|
||||
cm.getColumnByField('titel').component.updateDefinition({
|
||||
title: this.$p.t('projektarbeit', 'titel')
|
||||
});
|
||||
cm.getColumnByField('note').component.updateDefinition({
|
||||
title: this.$p.t('projektarbeit', 'gesamtnote')
|
||||
});
|
||||
cm.getColumnByField('beginn').component.updateDefinition({
|
||||
title: this.$p.t('projektarbeit', 'beginn')
|
||||
});
|
||||
@@ -78,6 +87,12 @@ export default {
|
||||
cm.getColumnByField('firma_id').component.updateDefinition({
|
||||
title: this.$p.t('projektarbeit', 'firmaId')
|
||||
});
|
||||
cm.getColumnByField('abgabedatum').component.updateDefinition({
|
||||
title: this.$p.t('projektarbeit', 'abgabeEndupload')
|
||||
});
|
||||
cm.getColumnByField('actions').component.updateDefinition({
|
||||
title: this.$p.t('global', 'aktionen')
|
||||
});
|
||||
}
|
||||
},
|
||||
],
|
||||
@@ -101,6 +116,7 @@ export default {
|
||||
{title: "Typ Kurzbz", field: "projekttyp_kurzbz", visible: false},
|
||||
{title: "Studiensemester", field: "studiensemester_kurzbz"},
|
||||
{title: "Titel", field: "titel"},
|
||||
{title: "Gesamtnote", field: "note"},
|
||||
{
|
||||
title: "Abgabe Enduplad",
|
||||
field: "abgabedatum",
|
||||
@@ -183,6 +199,7 @@ export default {
|
||||
{title: "Anmerkung", field: "anmerkung", visible: false},
|
||||
{title: "Lehreinheit ID", field: "lehreinheit_id", visible: false},
|
||||
{title: "Student UID", field: "student_uid", visible: false},
|
||||
{title: "Projektbetreuer", field: "projektbetreuer"},
|
||||
{
|
||||
title:"Final",
|
||||
field:"final",
|
||||
@@ -258,7 +275,7 @@ export default {
|
||||
this.statusNew = true;
|
||||
this.editedProjektarbeit = null;
|
||||
this.toggleMenu('details');
|
||||
this.$refs.projektarbeitDetails.getFormData(this.statusNew);
|
||||
this.$refs.projektarbeitDetails.getFormData(this.statusNew, null, null);
|
||||
this.$refs.projektarbeitModal.show();
|
||||
},
|
||||
actionEditProjektarbeit() {
|
||||
@@ -388,7 +405,7 @@ export default {
|
||||
<div class="tab-pane fade show" :class="activeTab == 'betreuer' ? 'active' : ''" id="betreuer" role="tabpanel" aria-labelledby="betreuer-tab">
|
||||
<div class="row">
|
||||
<div class="col-12">
|
||||
<projektbetreuer ref="projektbetreuer" :config="config"></projektbetreuer>
|
||||
<projektbetreuer ref="projektbetreuer" :config="config" @betreuer-saved="reload"></projektbetreuer>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
+96
-56
@@ -20,6 +20,7 @@ export default {
|
||||
Contact,
|
||||
Vertrag
|
||||
},
|
||||
emits: ['betreuerSaved'],
|
||||
provide() {
|
||||
return {
|
||||
configShowVertragsdetails: this.config.showVertragsdetails
|
||||
@@ -115,7 +116,7 @@ export default {
|
||||
frozen: true
|
||||
},
|
||||
],
|
||||
layout: 'fitDataStretchFrozen',
|
||||
layout: 'fitData',
|
||||
layoutColumnsOnNewData: false,
|
||||
height: 'auto',
|
||||
minHeight: '100',
|
||||
@@ -125,13 +126,49 @@ export default {
|
||||
persistence:{
|
||||
columns: true, //persist column layout
|
||||
},
|
||||
persistenceID: 'stv-details-projektbetreuer-2025112401'
|
||||
persistenceID: 'stv-details-projektbetreuer-2025121201'
|
||||
},
|
||||
tabulatorEvents: [
|
||||
{
|
||||
event: 'tableBuilt',
|
||||
handler: async() => {
|
||||
await this.$p.loadCategory(['global', 'person', 'stv', 'projektarbeit', 'ui']);
|
||||
await this.$p.loadCategory(['global', 'person', 'lehre', 'stv', 'projektarbeit', 'ui']);
|
||||
|
||||
let cm = this.$refs.projektbetreuerTable.tabulator.columnManager;
|
||||
|
||||
cm.getColumnByField('nachname').component.updateDefinition({
|
||||
title: this.$p.t('person', 'nachname')
|
||||
});
|
||||
cm.getColumnByField('vorname').component.updateDefinition({
|
||||
title: this.$p.t('person', 'vorname')
|
||||
});
|
||||
cm.getColumnByField('note').component.updateDefinition({
|
||||
title: this.$p.t('projektarbeit', 'note')
|
||||
});
|
||||
cm.getColumnByField('punkte').component.updateDefinition({
|
||||
title: this.$p.t('projektarbeit', 'punkte')
|
||||
});
|
||||
cm.getColumnByField('stunden').component.updateDefinition({
|
||||
title: this.$p.t('projektarbeit', 'stunden')
|
||||
});
|
||||
cm.getColumnByField('stundensatz').component.updateDefinition({
|
||||
title: this.$p.t('projektarbeit', 'stundensatz')
|
||||
});
|
||||
cm.getColumnByField('betreuerart_kurzbz').component.updateDefinition({
|
||||
title: this.$p.t('projektarbeit', 'betreuerart_kurzbz')
|
||||
});
|
||||
cm.getColumnByField('person_id').component.updateDefinition({
|
||||
title: this.$p.t('person', 'person_id')
|
||||
});
|
||||
cm.getColumnByField('vertrag_id').component.updateDefinition({
|
||||
title: this.$p.t('projektarbeit', 'vertrag_id')
|
||||
});
|
||||
cm.getColumnByField('projektarbeit_id').component.updateDefinition({
|
||||
title: this.$p.t('projektarbeit', 'projektarbeit_id')
|
||||
});
|
||||
cm.getColumnByField('actions').component.updateDefinition({
|
||||
title: this.$p.t('global', 'actions')
|
||||
});
|
||||
|
||||
// Force layout recalculation for handling overflow text
|
||||
this.$refs.projektbetreuerTable.tabulator.redraw(true);
|
||||
@@ -152,6 +189,7 @@ export default {
|
||||
stunden: null,
|
||||
stundensatz: null
|
||||
},
|
||||
defaultStundensatz: null,
|
||||
newMode: false,
|
||||
editMode: false,
|
||||
initialFormData: null,
|
||||
@@ -171,53 +209,49 @@ export default {
|
||||
},
|
||||
methods: {
|
||||
actionNewProjektbetreuer() {
|
||||
this.resetForm();
|
||||
this.newMode = !this.newMode;
|
||||
this.editMode = false;
|
||||
this.resetForm();
|
||||
this.defaultStundensatz = this.config.defaultProjektbetreuerStundensatz;
|
||||
this.captureFormData();
|
||||
},
|
||||
actionEditProjektbetreuer(projektarbeit_id, person_id, betreuerart_kurzbz) {
|
||||
this.editMode = true;
|
||||
this.newMode = false;
|
||||
this.$api
|
||||
.call(ApiStvProjektbetreuer.getDefaultStundensaetze(person_id, this.studiensemester_kurzbz))
|
||||
.then(result => {
|
||||
this.resetForm();
|
||||
this.resetForm();
|
||||
this.getDefaultStundensaetze(person_id).finally(() => {
|
||||
|
||||
// get betreuer from tabulator list
|
||||
let projektbetreuerListe = this.$refs.projektbetreuerTable.tabulator.getData();
|
||||
const idx = projektbetreuerListe.findIndex(
|
||||
betr =>
|
||||
betr.person_id === person_id &&
|
||||
betr.projektarbeit_id === projektarbeit_id &&
|
||||
betr.betreuerart_kurzbz === betreuerart_kurzbz
|
||||
);
|
||||
// get betreuer from tabulator list
|
||||
let projektbetreuerListe = this.$refs.projektbetreuerTable.tabulator.getData();
|
||||
const idx = projektbetreuerListe.findIndex(
|
||||
betr =>
|
||||
betr.person_id === person_id &&
|
||||
betr.projektarbeit_id === projektarbeit_id &&
|
||||
betr.betreuerart_kurzbz === betreuerart_kurzbz
|
||||
);
|
||||
|
||||
if (idx >= 0) { // if betreuer found
|
||||
if (idx >= 0) { // if betreuer found
|
||||
|
||||
// set currently edited betreuer (deep copy)
|
||||
this.formData = JSON.parse(JSON.stringify(projektbetreuerListe[idx]));
|
||||
// set currently edited betreuer (deep copy)
|
||||
this.formData = JSON.parse(JSON.stringify(projektbetreuerListe[idx]));
|
||||
|
||||
// set download link
|
||||
if (this.formData.beurteilungDownloadLink !== null) this.beurteilungDownloadLink = this.formData.beurteilungDownloadLink;
|
||||
// set download link
|
||||
if (this.formData.beurteilungDownloadLink !== null) this.beurteilungDownloadLink = this.formData.beurteilungDownloadLink;
|
||||
|
||||
// set betreuer for autocomplete field
|
||||
this.autocompleteSelectedBetreuer = {
|
||||
person_id: this.formData.person_id,
|
||||
name: this.formData.name,
|
||||
vorname: this.formData.vorname,
|
||||
nachname: this.formData.nachname,
|
||||
vertrag_id: this.formData.vertrag_id
|
||||
};
|
||||
}
|
||||
// set betreuer for autocomplete field
|
||||
this.autocompleteSelectedBetreuer = {
|
||||
person_id: this.formData.person_id,
|
||||
name: this.formData.name,
|
||||
vorname: this.formData.vorname,
|
||||
nachname: this.formData.nachname,
|
||||
vertrag_id: this.formData.vertrag_id
|
||||
};
|
||||
}
|
||||
|
||||
// set default stundensatz (if no other is set yet)
|
||||
if (this.formData.stundensatz == null) this.formData.stundensatz = result.data;
|
||||
// capture initial form data for detecting changes
|
||||
this.captureFormData();
|
||||
});
|
||||
|
||||
// capture initial form data for detecting changes
|
||||
this.captureFormData();
|
||||
})
|
||||
.catch(this.$fhcAlert.handleSystemError);
|
||||
},
|
||||
actionDeleteProjektbetreuer(betreuer_id, projektarbeit_id, person_id, betreuerart_kurzbz) {
|
||||
this.$fhcAlert
|
||||
@@ -239,6 +273,7 @@ export default {
|
||||
// default Stundensätze from config
|
||||
this.defaultFormDataValues.stunden = this.getDefaultStunden(projekttyp_kurzbz);
|
||||
this.defaultFormDataValues.stundensatz = this.config.defaultProjektbetreuerStundensatz;
|
||||
this.defaultStundensatz = this.config.defaultProjektbetreuerStundensatz;
|
||||
|
||||
// get other initial data
|
||||
this.$api
|
||||
@@ -271,7 +306,7 @@ export default {
|
||||
})
|
||||
.catch(this.$fhcAlert.handleSystemError);
|
||||
} else {
|
||||
this.emptyBetreuer();
|
||||
this.emptyBetreuerList();
|
||||
}
|
||||
},
|
||||
saveProjektbetreuer() {
|
||||
@@ -282,6 +317,7 @@ export default {
|
||||
this.$fhcAlert.alertSuccess(this.$p.t('ui', 'successSave'));
|
||||
this.getProjektbetreuer(this.projektarbeit_id, this.studiensemester_kurzbz);
|
||||
this.resetModes();
|
||||
this.$emit('betreuerSaved');
|
||||
})
|
||||
.catch(this.$fhcAlert.handleSystemError);
|
||||
},
|
||||
@@ -297,11 +333,12 @@ export default {
|
||||
this.filteredBetreuer = result.data;
|
||||
});
|
||||
},
|
||||
emptyBetreuer() {
|
||||
emptyBetreuerList() {
|
||||
this.$refs.projektbetreuerTable.tabulator.clearData();
|
||||
},
|
||||
resetForm() {
|
||||
this.formData = this.getDefaultFormData();
|
||||
const defaultFormData = this.getDefaultFormData();
|
||||
this.formData = defaultFormData;
|
||||
if (this.beurteilungDownloadLink !== null) this.beurteilungDownloadLink = '';
|
||||
this.autocompleteSelectedBetreuer = null;
|
||||
this.initialFormData = null;
|
||||
@@ -360,25 +397,22 @@ export default {
|
||||
},
|
||||
setDefaultStunden(projekttyp_kurzbz) {
|
||||
this.projekttyp_kurzbz = projekttyp_kurzbz;
|
||||
// if form data has not already been modified by user, set the default stunden
|
||||
if (!this.formDataModified()) {
|
||||
// set default stunden if not in edit mode (so hours of editen person are not overwritten)
|
||||
if (!this.editMode)
|
||||
{
|
||||
let defaultStunden = this.getDefaultStunden(projekttyp_kurzbz);
|
||||
// adapt initial form data so it does not count as modified
|
||||
if (this.initialFormData) this.initialFormData.stunden = defaultStunden;
|
||||
// set default Stunden
|
||||
this.formData.stunden = defaultStunden;
|
||||
}
|
||||
},
|
||||
// check if form data has been modified since initial data has been captured
|
||||
formDataModified() {
|
||||
if (this.autocompleteSelectedBetreuer != null) return true;
|
||||
|
||||
for (const prop in this.initialFormData) {
|
||||
if (typeof this.formData[prop] == 'undefined') return true;
|
||||
if (this.formData[prop] != this.initialFormData[prop]) return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
getDefaultStundensaetze(person_id) {
|
||||
return this.$api
|
||||
.call(ApiStvProjektbetreuer.getDefaultStundensaetze(person_id, this.studiensemester_kurzbz))
|
||||
.then(result => {
|
||||
// set default stundensatz (if no other is set yet)
|
||||
this.defaultStundensatz = result.data;
|
||||
this.formData.stundensatz = result.data;
|
||||
})
|
||||
.catch(this.$fhcAlert.handleSystemError);
|
||||
},
|
||||
actionNewPerson() {
|
||||
this.$refs.newPersonModal.open();
|
||||
@@ -394,12 +428,16 @@ export default {
|
||||
.then(response => {
|
||||
// set the new person in Betreuer autocomplete field
|
||||
this.autocompleteSelectedBetreuer = response.data;
|
||||
this.getDefaultStundensaetze(this.autocompleteSelectedBetreuer.person_id);
|
||||
})
|
||||
.catch(this.$fhcAlert.handleSystemError)
|
||||
},
|
||||
// disable fields which are dependent on Vertrag status
|
||||
disableVertragFields(statusAkzeptiert) {
|
||||
this.vertragFieldsDisabled = statusAkzeptiert;
|
||||
},
|
||||
onBetreuerSelected(ev) {
|
||||
this.getDefaultStundensaetze(ev.value.person_id);
|
||||
}
|
||||
},
|
||||
template: `
|
||||
@@ -421,7 +459,7 @@ export default {
|
||||
>
|
||||
</core-filter-cmpt>
|
||||
|
||||
<form-form ref="formProjektbetreuer" v-show="betreuerFormOpened" @submit.prevent>
|
||||
<form-form ref="formProjektbetreuer" v-show="betreuerFormOpened" class="mt-3" @submit.prevent >
|
||||
<div class="row mb-3">
|
||||
<form-input
|
||||
container-class="stv-details-projektarbeit-betreuer"
|
||||
@@ -432,6 +470,8 @@ export default {
|
||||
name="person_id"
|
||||
:suggestions="filteredBetreuer"
|
||||
@complete="searchBetreuer"
|
||||
@item-select="onBetreuerSelected"
|
||||
@option-select="onBetreuerSelected"
|
||||
:min-length="3"
|
||||
:disabled="vertragFieldsDisabled"
|
||||
>
|
||||
@@ -501,7 +541,7 @@ export default {
|
||||
container-class="stv-details-projektarbeit-stundensatz"
|
||||
type="text"
|
||||
name="stundensatz"
|
||||
:label="$p.t('projektarbeit', 'stundensatz')"
|
||||
:label="$p.t('projektarbeit', 'stundensatz') + (defaultStundensatz ? ' (Default ' + defaultStundensatz + ')' : '')"
|
||||
:disabled="vertragFieldsDisabled"
|
||||
v-model="formData.stundensatz"
|
||||
>
|
||||
|
||||
@@ -185,24 +185,10 @@ export default{
|
||||
.then(result => this.statusgruende = result.data)
|
||||
.catch(this.$fhcAlert.handleSystemError);
|
||||
|
||||
//TODO(Manu) check why it is/was hard coded
|
||||
this.$api
|
||||
.call(ApiStvStatus.getStati())
|
||||
.then(result => this.stati = result.data)
|
||||
.catch(this.$fhcAlert.handleSystemError);
|
||||
/* this.stati = [
|
||||
{ status_kurzbz: 'Interessent', bezeichnung: 'Interessent'},
|
||||
{ status_kurzbz: 'Bewerber', bezeichnung: 'Bewerber'},
|
||||
{ status_kurzbz: 'Aufgenommener', bezeichnung: 'Aufgenommener'},
|
||||
{ status_kurzbz: 'Student', bezeichnung: 'Student'},
|
||||
{ status_kurzbz: 'Unterbrecher', bezeichnung: 'Unterbrecher'},
|
||||
{ status_kurzbz: 'Diplomand', bezeichnung: 'Diplomand'},
|
||||
{ status_kurzbz: 'Incoming', bezeichnung: 'Incoming'},
|
||||
{ status_kurzbz: 'Absolvent', bezeichnung: 'Absolvent'},
|
||||
{ status_kurzbz: 'Abbrecher', bezeichnung: 'Abbrecher'},
|
||||
{ status_kurzbz: 'Abgewiesener', bezeichnung: 'Abgewiesener'},
|
||||
{ status_kurzbz: 'Wartender', bezeichnung: 'Wartender'}
|
||||
];*/
|
||||
},
|
||||
template: `
|
||||
<bs-modal class="stv-status-modal" ref="modal" dialog-class="modal-dialog-scrollable">
|
||||
@@ -220,7 +206,7 @@ export default{
|
||||
<p v-if="bisLocked && isStatusBeforeStudent">
|
||||
<b>{{$p.t('bismeldestichtag', 'info_MeldestichtagStatusgrundSemester')}}</b>
|
||||
</p>
|
||||
|
||||
|
||||
<form-input
|
||||
container-class="mb-3"
|
||||
type="select"
|
||||
@@ -353,7 +339,6 @@ export default{
|
||||
v-model="formData.anmerkung"
|
||||
name="anmerkung"
|
||||
:label="$p.t('global/anmerkung')"
|
||||
:disabled="bisLocked"
|
||||
>
|
||||
</form-input>
|
||||
<form-input
|
||||
|
||||
@@ -13,7 +13,7 @@ function parseFilterExpression(expression)
|
||||
|
||||
andParts.forEach(term => {
|
||||
|
||||
const comparisonMatch = term.match(/^(<=|>=|<|>|=|!=)\s*(\d+(?:[.,]\d+)?)$/);
|
||||
const comparisonMatch = term.match(/^(<=|>=|<|>|=|!=)\s*(-?\d+(?:[.,]\d+)?)$/);
|
||||
|
||||
if (comparisonMatch)
|
||||
{
|
||||
|
||||
@@ -85,6 +85,7 @@ require_once('dbupdate_3.4/66982_berufsschule.php');
|
||||
require_once('dbupdate_3.4/40314_electronic_onboarding_anbindung_ida.php');
|
||||
require_once('dbupdate_3.4/47972_pruefungsverwaltung_ects_angabe.php');
|
||||
require_once('dbupdate_3.4/67490_studstatus_suche_abort_controller_haengt.php');
|
||||
require_once('dbupdate_3.4/69065_Projektarbeiten_Firmen_verwalten.php');
|
||||
require_once('dbupdate_3.4/68744_StV_settings.php');
|
||||
|
||||
// *** Pruefung und hinzufuegen der neuen Attribute und Tabellen
|
||||
|
||||
@@ -0,0 +1,20 @@
|
||||
<?php
|
||||
if (! defined('DB_NAME')) exit('No direct script access allowed');
|
||||
|
||||
// Add permission: paarbeit/beurteilung_loeschen
|
||||
if($result = @$db->db_query("SELECT 1 FROM system.tbl_berechtigung WHERE berechtigung_kurzbz = 'paarbeit/beurteilung_loeschen';"))
|
||||
{
|
||||
if($db->db_num_rows($result) == 0)
|
||||
{
|
||||
$qry = "INSERT INTO system.tbl_berechtigung(berechtigung_kurzbz, beschreibung) VALUES('paarbeit/beurteilung_loeschen', 'Berechtigung zum Löschen von Projektarbeitsbeurteilung');";
|
||||
|
||||
if(!$db->db_query($qry))
|
||||
{
|
||||
echo '<strong>system.tbl_berechtigung '.$db->db_last_error().'</strong><br>';
|
||||
}
|
||||
else
|
||||
{
|
||||
echo 'system.tbl_berechtigung: Added permission for paarbeit/beurteilung_loeschen<br>';
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1581,7 +1581,6 @@ $filters = array(
|
||||
}',
|
||||
'oe_kurzbz' => null,
|
||||
),
|
||||
|
||||
);
|
||||
|
||||
// Loop through the filters array
|
||||
|
||||
+431
-12
@@ -25419,13 +25419,13 @@ array(
|
||||
'phrases' => array(
|
||||
array(
|
||||
'sprache' => 'German',
|
||||
'text' => 'Zugangsvoraussetzung BA (bzw. MA) nicht erfüllt',
|
||||
'text' => 'Die Zugangsvoraussetzung zum Studium wurde nicht erfüllt.',
|
||||
'description' => '',
|
||||
'insertvon' => 'system'
|
||||
),
|
||||
array(
|
||||
'sprache' => 'English',
|
||||
'text' => 'Entry requirements BA (resp. MA) not fulfilled)',
|
||||
'text' => 'The entry requirements for the course were not met.',
|
||||
'description' => '',
|
||||
'insertvon' => 'system'
|
||||
)
|
||||
@@ -25459,13 +25459,13 @@ array(
|
||||
'phrases' => array(
|
||||
array(
|
||||
'sprache' => 'German',
|
||||
'text' => 'Student*in hat nicht bezahlt',
|
||||
'text' => 'Studierende*r hat Studienbeitrag nicht bezahlt',
|
||||
'description' => '',
|
||||
'insertvon' => 'system'
|
||||
),
|
||||
array(
|
||||
'sprache' => 'English',
|
||||
'text' => 'Student has not paid',
|
||||
'text' => 'Student has not paid their tuition fees.',
|
||||
'description' => '',
|
||||
'insertvon' => 'system'
|
||||
)
|
||||
@@ -25499,13 +25499,13 @@ array(
|
||||
'phrases' => array(
|
||||
array(
|
||||
'sprache' => 'German',
|
||||
'text' => 'Student*in hat Prüfunstermine nicht eingehalten',
|
||||
'text' => 'Nichteinhalten von Prüfungsterminen bzw. Abgabeterminen',
|
||||
'description' => '',
|
||||
'insertvon' => 'system'
|
||||
),
|
||||
array(
|
||||
'sprache' => 'English',
|
||||
'text' => 'Student failed to meet exam dates',
|
||||
'text' => 'Failure to meet exam or submission deadlines',
|
||||
'description' => '',
|
||||
'insertvon' => 'system'
|
||||
)
|
||||
@@ -25579,13 +25579,13 @@ array(
|
||||
'phrases' => array(
|
||||
array(
|
||||
'sprache' => 'German',
|
||||
'text' => 'Zugangsvoraussetzung BA (bzw. MA) nicht erfüllt',
|
||||
'text' => 'Zugangsvoraussetzungen',
|
||||
'description' => '',
|
||||
'insertvon' => 'system'
|
||||
),
|
||||
array(
|
||||
'sprache' => 'English',
|
||||
'text' => 'Entry requirements BA (resp. MA) not fulfilled',
|
||||
'text' => 'Entry requirements',
|
||||
'description' => '',
|
||||
'insertvon' => 'system'
|
||||
)
|
||||
@@ -25671,6 +25671,166 @@ array(
|
||||
)
|
||||
)
|
||||
),
|
||||
array(
|
||||
'app' => 'core',
|
||||
'category' => 'studierendenantrag',
|
||||
'phrase' => 'dropdown_Studienwechsel',
|
||||
'insertvon' => 'system',
|
||||
'phrases' => array(
|
||||
array(
|
||||
'sprache' => 'German',
|
||||
'text' => 'Studienwechsel',
|
||||
'description' => '',
|
||||
'insertvon' => 'system'
|
||||
),
|
||||
array(
|
||||
'sprache' => 'English',
|
||||
'text' => 'Change of studies',
|
||||
'description' => '',
|
||||
'insertvon' => 'system'
|
||||
)
|
||||
)
|
||||
),
|
||||
array(
|
||||
'app' => 'core',
|
||||
'category' => 'studierendenantrag',
|
||||
'phrase' => 'textLong_Studienwechsel',
|
||||
'insertvon' => 'system',
|
||||
'phrases' => array(
|
||||
array(
|
||||
'sprache' => 'German',
|
||||
'text' => 'Studienwechsel: Der*Die Studierende hat uns mitgeteilt, dass er*sie das Studium wechseln wird und bittet um Abmeldung vom Studium.',
|
||||
'description' => '',
|
||||
'insertvon' => 'system'
|
||||
),
|
||||
array(
|
||||
'sprache' => 'English',
|
||||
'text' => 'Change of studies: The student has informed us that he/she will be changing his/her studies and requests to be deregistered from his/her studies.',
|
||||
'description' => '',
|
||||
'insertvon' => 'system'
|
||||
)
|
||||
)
|
||||
),
|
||||
array(
|
||||
'app' => 'core',
|
||||
'category' => 'studierendenantrag',
|
||||
'phrase' => 'dropdown_Studienabbruch_allgemein',
|
||||
'insertvon' => 'system',
|
||||
'phrases' => array(
|
||||
array(
|
||||
'sprache' => 'German',
|
||||
'text' => 'Allgemeiner Studienabbruch',
|
||||
'description' => '',
|
||||
'insertvon' => 'system'
|
||||
),
|
||||
array(
|
||||
'sprache' => 'English',
|
||||
'text' => 'General withdrawal from studies',
|
||||
'description' => '',
|
||||
'insertvon' => 'system'
|
||||
)
|
||||
)
|
||||
),
|
||||
array(
|
||||
'app' => 'core',
|
||||
'category' => 'studierendenantrag',
|
||||
'phrase' => 'textLong_Studienabbruch_allgemein',
|
||||
'insertvon' => 'system',
|
||||
'phrases' => array(
|
||||
array(
|
||||
'sprache' => 'German',
|
||||
'text' => 'Allgemeiner Studienabbruch: Der*Die Studierende hat uns mitgeteilt, dass er*sie das Studium abbrechen wird und bittet um Abmeldung vom Studium.',
|
||||
'description' => '',
|
||||
'insertvon' => 'system'
|
||||
),
|
||||
array(
|
||||
'sprache' => 'English',
|
||||
'text' => 'General withdrawal from studies: The student has informed us that he/she will be dropping out of his/her studies and requests to be deregistered from the program.',
|
||||
'description' => '',
|
||||
'insertvon' => 'system'
|
||||
)
|
||||
)
|
||||
),
|
||||
array(
|
||||
'app' => 'core',
|
||||
'category' => 'studierendenantrag',
|
||||
'phrase' => 'dropdown_vsCodeOfConduct',
|
||||
'insertvon' => 'system',
|
||||
'phrases' => array(
|
||||
array(
|
||||
'sprache' => 'German',
|
||||
'text' => 'Verstoß gegen Code of Conduct',
|
||||
'description' => '',
|
||||
'insertvon' => 'system'
|
||||
),
|
||||
array(
|
||||
'sprache' => 'English',
|
||||
'text' => 'Violation of the Code of Conduct',
|
||||
'description' => '',
|
||||
'insertvon' => 'system'
|
||||
)
|
||||
)
|
||||
),
|
||||
array(
|
||||
'app' => 'core',
|
||||
'category' => 'studierendenantrag',
|
||||
'phrase' => 'textLong_vsCodeOfConduct',
|
||||
'insertvon' => 'system',
|
||||
'phrases' => array(
|
||||
array(
|
||||
'sprache' => 'German',
|
||||
'text' => 'Verstoß gegen Code of Conduct',
|
||||
'description' => '',
|
||||
'insertvon' => 'system'
|
||||
),
|
||||
array(
|
||||
'sprache' => 'English',
|
||||
'text' => 'Violation of the Code of Conduct',
|
||||
'description' => '',
|
||||
'insertvon' => 'system'
|
||||
)
|
||||
)
|
||||
),
|
||||
array(
|
||||
'app' => 'core',
|
||||
'category' => 'studierendenantrag',
|
||||
'phrase' => 'dropdown_additionalReason',
|
||||
'insertvon' => 'system',
|
||||
'phrases' => array(
|
||||
array(
|
||||
'sprache' => 'German',
|
||||
'text' => 'Kein Grund zutreffend, Details:',
|
||||
'description' => '',
|
||||
'insertvon' => 'system'
|
||||
),
|
||||
array(
|
||||
'sprache' => 'English',
|
||||
'text' => 'No reason applies, details:',
|
||||
'description' => '',
|
||||
'insertvon' => 'system'
|
||||
)
|
||||
)
|
||||
),
|
||||
array(
|
||||
'app' => 'core',
|
||||
'category' => 'studierendenantrag',
|
||||
'phrase' => 'textLong_additionalReason',
|
||||
'insertvon' => 'system',
|
||||
'phrases' => array(
|
||||
array(
|
||||
'sprache' => 'German',
|
||||
'text' => 'Kein Grund zutreffend, Details:',
|
||||
'description' => '',
|
||||
'insertvon' => 'system'
|
||||
),
|
||||
array(
|
||||
'sprache' => 'English',
|
||||
'text' => 'No reason applies, details:',
|
||||
'description' => '',
|
||||
'insertvon' => 'system'
|
||||
)
|
||||
)
|
||||
),
|
||||
array(
|
||||
'app' => 'core',
|
||||
'category' => 'notiz',
|
||||
@@ -29056,6 +29216,85 @@ array(
|
||||
)
|
||||
)
|
||||
),
|
||||
array(
|
||||
'app' => 'core',
|
||||
'category' => 'profil',
|
||||
'phrase' => 'stg_short',
|
||||
'insertvon' => 'system',
|
||||
'phrases' => array(
|
||||
array(
|
||||
'sprache' => 'German',
|
||||
'text' => 'StG',
|
||||
'description' => '',
|
||||
'insertvon' => 'system'
|
||||
),
|
||||
array(
|
||||
'sprache' => 'English',
|
||||
'text' => 'degree Progr',
|
||||
'description' => '',
|
||||
'insertvon' => 'system'
|
||||
)
|
||||
)
|
||||
),
|
||||
array(
|
||||
'app' => 'core',
|
||||
'category' => 'profil',
|
||||
'phrase' => 'orgform_short',
|
||||
'insertvon' => 'system',
|
||||
'phrases' => array(
|
||||
array(
|
||||
'sprache' => 'German',
|
||||
'text' => 'OrgForm',
|
||||
'description' => '',
|
||||
'insertvon' => 'system'
|
||||
),
|
||||
array(
|
||||
'sprache' => 'English',
|
||||
'text' => 'org Form',
|
||||
'description' => '',
|
||||
'insertvon' => 'system'
|
||||
)
|
||||
)
|
||||
),
|
||||
array(
|
||||
'app' => 'core',
|
||||
'category' => 'profil',
|
||||
'phrase' => 'orgeinheit_short',
|
||||
'insertvon' => 'system',
|
||||
'phrases' => array(
|
||||
array(
|
||||
'sprache' => 'German',
|
||||
'text' => 'OrgEH',
|
||||
'description' => '',
|
||||
'insertvon' => 'system'
|
||||
),
|
||||
array(
|
||||
'sprache' => 'English',
|
||||
'text' => 'org Unit',
|
||||
'description' => '',
|
||||
'insertvon' => 'system'
|
||||
)
|
||||
)
|
||||
), array(
|
||||
'app' => 'core',
|
||||
'category' => 'profil',
|
||||
'phrase' => 'sem_short',
|
||||
'insertvon' => 'system',
|
||||
'phrases' => array(
|
||||
array(
|
||||
'sprache' => 'German',
|
||||
'text' => 'Sem',
|
||||
'description' => '',
|
||||
'insertvon' => 'system'
|
||||
),
|
||||
array(
|
||||
'sprache' => 'English',
|
||||
'text' => 'sem',
|
||||
'description' => '',
|
||||
'insertvon' => 'system'
|
||||
)
|
||||
)
|
||||
),
|
||||
//Profil Phrasen ende
|
||||
// LvPlan Phrasen start
|
||||
array(
|
||||
@@ -41300,13 +41539,13 @@ array(
|
||||
'phrases' => array(
|
||||
array(
|
||||
'sprache' => 'German',
|
||||
'text' => 'Meldestichtag erreicht - ausschließlich Bearbeiten Statusgrund möglich',
|
||||
'text' => 'Meldestichtag erreicht - ausschließlich Bearbeiten Statusgrund und Anmerkung möglich',
|
||||
'description' => '',
|
||||
'insertvon' => 'system'
|
||||
),
|
||||
array(
|
||||
'sprache' => 'English',
|
||||
'text' => 'Reporting deadline reached - only editing status reason possible',
|
||||
'text' => 'Reporting deadline reached - only editing status reason and note possible',
|
||||
'description' => '',
|
||||
'insertvon' => 'system'
|
||||
)
|
||||
@@ -41320,13 +41559,13 @@ array(
|
||||
'phrases' => array(
|
||||
array(
|
||||
'sprache' => 'German',
|
||||
'text' => 'Meldestichtag erreicht - Bearbeiten Ausbildungssemester und Statusgrund möglich',
|
||||
'text' => 'Meldestichtag erreicht - Bearbeiten Ausbildungssemester, Statusgrund und Anmerkung möglich',
|
||||
'description' => '',
|
||||
'insertvon' => 'system'
|
||||
),
|
||||
array(
|
||||
'sprache' => 'English',
|
||||
'text' => 'Edit education semester and status reason possible',
|
||||
'text' => 'Edit education semester, status reason and note possible',
|
||||
'description' => '',
|
||||
'insertvon' => 'system'
|
||||
)
|
||||
@@ -52245,6 +52484,186 @@ I have been informed that I am under no obligation to consent to the transmissio
|
||||
)
|
||||
)
|
||||
),
|
||||
array(
|
||||
'app' => 'core',
|
||||
'category' => 'projektarbeit',
|
||||
'phrase' => 'punkte',
|
||||
'insertvon' => 'system',
|
||||
'phrases' => array(
|
||||
array(
|
||||
'sprache' => 'German',
|
||||
'text' => 'Punkte',
|
||||
'description' => '',
|
||||
'insertvon' => 'system'
|
||||
),
|
||||
array(
|
||||
'sprache' => 'English',
|
||||
'text' => 'points',
|
||||
'description' => '',
|
||||
'insertvon' => 'system'
|
||||
)
|
||||
)
|
||||
),
|
||||
array(
|
||||
'app' => 'core',
|
||||
'category' => 'projektarbeit',
|
||||
'phrase' => 'gesamtnote',
|
||||
'insertvon' => 'system',
|
||||
'phrases' => array(
|
||||
array(
|
||||
'sprache' => 'German',
|
||||
'text' => 'Gesamtnote',
|
||||
'description' => '',
|
||||
'insertvon' => 'system'
|
||||
),
|
||||
array(
|
||||
'sprache' => 'English',
|
||||
'text' => 'final grade',
|
||||
'description' => '',
|
||||
'insertvon' => 'system'
|
||||
)
|
||||
)
|
||||
),
|
||||
array(
|
||||
'app' => 'core',
|
||||
'category' => 'projektarbeit',
|
||||
'phrase' => 'abgabeEndupload',
|
||||
'insertvon' => 'system',
|
||||
'phrases' => array(
|
||||
array(
|
||||
'sprache' => 'German',
|
||||
'text' => 'Abgabe Endupload',
|
||||
'description' => '',
|
||||
'insertvon' => 'system'
|
||||
),
|
||||
array(
|
||||
'sprache' => 'English',
|
||||
'text' => 'final submission upload',
|
||||
'description' => '',
|
||||
'insertvon' => 'system'
|
||||
)
|
||||
)
|
||||
),
|
||||
array(
|
||||
'app' => 'core',
|
||||
'category' => 'projektarbeit',
|
||||
'phrase' => 'vertrag_id',
|
||||
'insertvon' => 'system',
|
||||
'phrases' => array(
|
||||
array(
|
||||
'sprache' => 'German',
|
||||
'text' => 'Vertrag ID',
|
||||
'description' => '',
|
||||
'insertvon' => 'system'
|
||||
),
|
||||
array(
|
||||
'sprache' => 'English',
|
||||
'text' => 'contract ID',
|
||||
'description' => '',
|
||||
'insertvon' => 'system'
|
||||
)
|
||||
)
|
||||
),
|
||||
array(
|
||||
'app' => 'core',
|
||||
'category' => 'projektarbeit',
|
||||
'phrase' => 'projektarbeit_id',
|
||||
'insertvon' => 'system',
|
||||
'phrases' => array(
|
||||
array(
|
||||
'sprache' => 'German',
|
||||
'text' => 'Projektarbeit ID',
|
||||
'description' => '',
|
||||
'insertvon' => 'system'
|
||||
),
|
||||
array(
|
||||
'sprache' => 'English',
|
||||
'text' => 'project work ID',
|
||||
'description' => '',
|
||||
'insertvon' => 'system'
|
||||
)
|
||||
)
|
||||
),
|
||||
array(
|
||||
'app' => 'core',
|
||||
'category' => 'projektarbeit',
|
||||
'phrase' => 'betreuerart_kurzbz',
|
||||
'insertvon' => 'system',
|
||||
'phrases' => array(
|
||||
array(
|
||||
'sprache' => 'German',
|
||||
'text' => 'Betreuerart Kurzbezeichnung',
|
||||
'description' => '',
|
||||
'insertvon' => 'system'
|
||||
),
|
||||
array(
|
||||
'sprache' => 'English',
|
||||
'text' => 'project assessor short name',
|
||||
'description' => '',
|
||||
'insertvon' => 'system'
|
||||
)
|
||||
)
|
||||
),
|
||||
array(
|
||||
'app' => 'core',
|
||||
'category' => 'projektarbeit',
|
||||
'phrase' => 'typ_kurzbz',
|
||||
'insertvon' => 'system',
|
||||
'phrases' => array(
|
||||
array(
|
||||
'sprache' => 'German',
|
||||
'text' => 'Typ Kurzbezeichnung',
|
||||
'description' => '',
|
||||
'insertvon' => 'system'
|
||||
),
|
||||
array(
|
||||
'sprache' => 'English',
|
||||
'text' => 'type short name',
|
||||
'description' => '',
|
||||
'insertvon' => 'system'
|
||||
)
|
||||
)
|
||||
),
|
||||
array(
|
||||
'app' => 'core',
|
||||
'category' => 'projektarbeit',
|
||||
'phrase' => 'betreuerZugewiesen',
|
||||
'insertvon' => 'system',
|
||||
'phrases' => array(
|
||||
array(
|
||||
'sprache' => 'German',
|
||||
'text' => 'Betreuer*In ist bereits zugewiesen',
|
||||
'description' => '',
|
||||
'insertvon' => 'system'
|
||||
),
|
||||
array(
|
||||
'sprache' => 'English',
|
||||
'text' => 'This project assessor is already assigned',
|
||||
'description' => '',
|
||||
'insertvon' => 'system'
|
||||
)
|
||||
)
|
||||
),
|
||||
array(
|
||||
'app' => 'core',
|
||||
'category' => 'projektarbeit',
|
||||
'phrase' => 'error_paarbeitHatBeurteilung',
|
||||
'insertvon' => 'system',
|
||||
'phrases' => array(
|
||||
array(
|
||||
'sprache' => 'German',
|
||||
'text' => 'Für diese Projektarbeit ist bereits eine Projektarbeitsbeurteilung eingetragen',
|
||||
'description' => '',
|
||||
'insertvon' => 'system'
|
||||
),
|
||||
array(
|
||||
'sprache' => 'English',
|
||||
'text' => 'This project work has already been assessed',
|
||||
'description' => '',
|
||||
'insertvon' => 'system'
|
||||
)
|
||||
)
|
||||
),
|
||||
// FHC-4 Projektarbeiten & Vertraege ENDE
|
||||
// ### DOKUMENTE ERSTELLEN PHRASEN START ###
|
||||
array(
|
||||
|
||||
Reference in New Issue
Block a user