mirror of
https://github.com/FH-Complete/FHC-Core.git
synced 2026-06-17 12:09:28 +00:00
Compare commits
88 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 0687ef72ce | |||
| 9180b9bd63 | |||
| 168fb00023 | |||
| f5d81e4a93 | |||
| b0f3fa0c46 | |||
| 6d89e95afa | |||
| 2f90112e4d | |||
| 774eb90bcc | |||
| 1def930147 | |||
| 30b8a406a5 | |||
| 093842274e | |||
| fd2f4187fa | |||
| b2bebb7fa3 | |||
| e32cce57fe | |||
| cb7a0f7669 | |||
| 68d97a5e97 | |||
| d27071528f | |||
| 17772c3738 | |||
| bbb4f8a01c | |||
| fdbb93a5c5 | |||
| b7e48633ab | |||
| 04dc1eb07b | |||
| 50b229090b | |||
| 2d27a998c4 | |||
| 090e535466 | |||
| c4d35181db | |||
| 0ac6ef4599 | |||
| 7f13c128f1 | |||
| cb60ddcc94 | |||
| bd4ced9559 | |||
| a04d2acb86 | |||
| de2aabf00b | |||
| 685fc69e5d | |||
| 58a921b500 | |||
| 552faefa51 | |||
| 954397f028 | |||
| 80faa61c91 | |||
| 961ede66a9 | |||
| 6fec8382b5 | |||
| 4eb076d115 | |||
| 7427aa87ea | |||
| 85043e57db | |||
| 5beddbccb4 | |||
| e2ae9b88c8 | |||
| ca3abf9154 | |||
| f863c6d728 | |||
| 92a2053b42 | |||
| 70602be54e | |||
| dac71f597a | |||
| 3a646ffe77 | |||
| 26db4a5e7a | |||
| 98a10a2f55 | |||
| e48b94b858 | |||
| 0ff29ba6af | |||
| ba543448ae | |||
| f121f9b5a2 | |||
| 88b22f5490 | |||
| 4b7ee9abe1 | |||
| d499619cf3 | |||
| f489153ff3 | |||
| 9b79a07fa2 | |||
| 6ce14a25d7 | |||
| c701d92779 | |||
| 73e03ba901 | |||
| 95a7797ae9 | |||
| 3ce3eff022 | |||
| 21d80905a2 | |||
| ea0a249612 | |||
| 843894405e | |||
| 8fddbc3a32 | |||
| 5c463c0866 | |||
| 423bbd95a6 | |||
| 298dbbf400 | |||
| 627a52e3d1 | |||
| 059b13938e | |||
| 6b816def31 | |||
| 5fbcf588ed | |||
| 41b2a6d1d4 | |||
| e054f1222b | |||
| c56d323cd3 | |||
| ac4cdb44de | |||
| 38e8f91fdf | |||
| 97126553f0 | |||
| da03e11071 | |||
| ba6224bc78 | |||
| 738c819272 | |||
| d542cf7720 | |||
| ed39127f31 |
@@ -63,7 +63,6 @@ $route['api/v1/system/[S|s]prache/(:any)'] = 'api/v1/system/sprache2/$1';
|
|||||||
|
|
||||||
$route['Cis/LvPlan/.*'] = 'Cis/LvPlan/index/$1';
|
$route['Cis/LvPlan/.*'] = 'Cis/LvPlan/index/$1';
|
||||||
$route['Cis/MyLvPlan/.*'] = 'Cis/MyLvPlan/index/$1';
|
$route['Cis/MyLvPlan/.*'] = 'Cis/MyLvPlan/index/$1';
|
||||||
$route['Cis/Benotungstool/.*'] = 'Cis/Benotungstool/index/$1';
|
|
||||||
$route['Cis/MyLv/.*'] = 'Cis/MyLv/index/$1';
|
$route['Cis/MyLv/.*'] = 'Cis/MyLv/index/$1';
|
||||||
|
|
||||||
$route['Abgabetool/Assistenz'] = 'Cis/Abgabetool/Assistenz';
|
$route['Abgabetool/Assistenz'] = 'Cis/Abgabetool/Assistenz';
|
||||||
|
|||||||
@@ -1,51 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
if (! defined('BASEPATH')) exit('No direct script access allowed');
|
|
||||||
|
|
||||||
/**
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
class Benotungstool extends Auth_Controller
|
|
||||||
{
|
|
||||||
/**
|
|
||||||
* Constructor
|
|
||||||
*/
|
|
||||||
public function __construct()
|
|
||||||
{
|
|
||||||
parent::__construct([
|
|
||||||
'index' => self::PERM_LOGGED
|
|
||||||
]);
|
|
||||||
|
|
||||||
$this->_ci =& get_instance();
|
|
||||||
}
|
|
||||||
|
|
||||||
// -----------------------------------------------------------------------------------------------------------------
|
|
||||||
// Public methods
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @return void
|
|
||||||
*/
|
|
||||||
public function index()
|
|
||||||
{
|
|
||||||
|
|
||||||
|
|
||||||
// TODO: check if related CIS config is also loaded when being routed in Cis4 by vuerouter
|
|
||||||
// TODO: check if new benotungstool should be configurable the exact same way?
|
|
||||||
|
|
||||||
|
|
||||||
$viewData = array(
|
|
||||||
'uid'=>getAuthUID(),
|
|
||||||
'CIS_GESAMTNOTE_UEBERSCHREIBEN' => CIS_GESAMTNOTE_UEBERSCHREIBEN,
|
|
||||||
'CIS_GESAMTNOTE_PRUEFUNG_KOMMPRUEF' => CIS_GESAMTNOTE_PRUEFUNG_KOMMPRUEF,
|
|
||||||
'CIS_GESAMTNOTE_PRUEFUNG_TERMIN3' => CIS_GESAMTNOTE_PRUEFUNG_TERMIN3,
|
|
||||||
'CIS_GESAMTNOTE_PRUEFUNG_TERMIN2' => CIS_GESAMTNOTE_PRUEFUNG_TERMIN2,
|
|
||||||
'CIS_GESAMTNOTE_PRUEFUNG_MOODLE_LE_NOTE' => CIS_GESAMTNOTE_PRUEFUNG_MOODLE_LE_NOTE,
|
|
||||||
'CIS_GESAMTNOTE_PUNKTE' => CIS_GESAMTNOTE_PUNKTE,
|
|
||||||
'CIS_GESAMTNOTE_GEWICHTUNG' => CIS_GESAMTNOTE_GEWICHTUNG,
|
|
||||||
'CIS_ANWESENHEITSLISTE_NOTENLISTE_ANZEIGEN' => CIS_ANWESENHEITSLISTE_NOTENLISTE_ANZEIGEN
|
|
||||||
);
|
|
||||||
|
|
||||||
$this->load->view('CisRouterView/CisRouterView.php', ['viewData' => $viewData, 'route' => 'Benotungstool']);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
@@ -41,9 +41,7 @@ class LvPlan extends FHCAPI_Controller
|
|||||||
'getLehreinheitStudiensemester' => self::PERM_LOGGED,
|
'getLehreinheitStudiensemester' => self::PERM_LOGGED,
|
||||||
'studiensemesterDateInterval' => self::PERM_LOGGED,
|
'studiensemesterDateInterval' => self::PERM_LOGGED,
|
||||||
'getLvPlanForStudiensemester' => self::PERM_LOGGED,
|
'getLvPlanForStudiensemester' => self::PERM_LOGGED,
|
||||||
'getLv' => self::PERM_LOGGED,
|
'getLv' => self::PERM_LOGGED
|
||||||
'getLeEvents' => self::PERM_LOGGED,
|
|
||||||
'getLvEvents' => self::PERM_LOGGED,
|
|
||||||
]);
|
]);
|
||||||
|
|
||||||
$this->load->library('LogLib');
|
$this->load->library('LogLib');
|
||||||
@@ -56,12 +54,6 @@ class LvPlan extends FHCAPI_Controller
|
|||||||
));
|
));
|
||||||
|
|
||||||
$this->load->library('form_validation');
|
$this->load->library('form_validation');
|
||||||
$this->load->library('PhrasesLib');
|
|
||||||
$this->loadPhrases(
|
|
||||||
array(
|
|
||||||
'ui'
|
|
||||||
)
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//------------------------------------------------------------------------------------------------------------------
|
//------------------------------------------------------------------------------------------------------------------
|
||||||
@@ -153,38 +145,6 @@ class LvPlan extends FHCAPI_Controller
|
|||||||
));
|
));
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getLeEvents($le_id = null, $start_date = null, $end_date = null, $stundenplan = 'stundenplandev')
|
|
||||||
{
|
|
||||||
|
|
||||||
if (is_null($le_id) || is_null($start_date) || is_null($end_date))
|
|
||||||
$this->terminateWithError($this->p->t('ui', 'ungueltigeParameter'), self::ERROR_TYPE_GENERAL);
|
|
||||||
|
|
||||||
if ($stundenplan !== 'stundenplandev' && $stundenplan !== 'stundenplan')
|
|
||||||
$this->terminateWithError($this->p->t('ui', 'ungueltigeParameter'), self::ERROR_TYPE_GENERAL);
|
|
||||||
|
|
||||||
$this->load->library('StundenplanLib');
|
|
||||||
|
|
||||||
$result = $this->stundenplanlib->getEventsByLE($le_id, $start_date, $end_date, $stundenplan);
|
|
||||||
$lvplanEvents = $this->getDataOrTerminateWithError($result);
|
|
||||||
|
|
||||||
$this->terminateWithSuccess($lvplanEvents);
|
|
||||||
}
|
|
||||||
|
|
||||||
public function getLvEvents($lv_id = null, $start_date = null, $end_date = null, $stundenplan = 'stundenplandev')
|
|
||||||
{
|
|
||||||
if (is_null($lv_id) || is_null($start_date) || is_null($end_date))
|
|
||||||
$this->terminateWithError($this->p->t('ui', 'ungueltigeParameter'), self::ERROR_TYPE_GENERAL);
|
|
||||||
|
|
||||||
if ($stundenplan !== 'stundenplandev' && $stundenplan !== 'stundenplan')
|
|
||||||
$this->terminateWithError($this->p->t('ui', 'ungueltigeParameter'), self::ERROR_TYPE_GENERAL);
|
|
||||||
|
|
||||||
$this->load->library('StundenplanLib');
|
|
||||||
|
|
||||||
$result = $this->stundenplanlib->getEventsByLV($lv_id, $start_date, $end_date, $stundenplan);
|
|
||||||
|
|
||||||
$this->terminateWithSuccess(hasData($result) ? getData($result) : []);
|
|
||||||
}
|
|
||||||
|
|
||||||
//TODO: delete this function if we don't use the old calendar export endpoints anymore
|
//TODO: delete this function if we don't use the old calendar export endpoints anymore
|
||||||
public function studiensemesterDateInterval($date){
|
public function studiensemesterDateInterval($date){
|
||||||
$this->load->model('organisation/Studiensemester_model','StudiensemesterModel');
|
$this->load->model('organisation/Studiensemester_model','StudiensemesterModel');
|
||||||
|
|||||||
@@ -1,929 +0,0 @@
|
|||||||
<?php
|
|
||||||
/**
|
|
||||||
* Copyright (C) 2024 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/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
if (! defined('BASEPATH')) exit('No direct script access allowed');
|
|
||||||
|
|
||||||
use CI3_Events as Events;
|
|
||||||
|
|
||||||
class Noten extends FHCAPI_Controller
|
|
||||||
{
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Object initialization
|
|
||||||
*/
|
|
||||||
public function __construct()
|
|
||||||
{
|
|
||||||
parent::__construct([
|
|
||||||
'getStudentenNoten' => array('lehre/benotungstool:rw'),
|
|
||||||
'getNoten' => array('lehre/benotungstool:rw'),
|
|
||||||
'saveStudentenNoten' => array('lehre/benotungstool:rw'),
|
|
||||||
'getNotenvorschlagStudent' => array('lehre/benotungstool:rw'),
|
|
||||||
'saveNotenvorschlag' => array('lehre/benotungstool:rw'),
|
|
||||||
'saveStudentPruefung' => array('lehre/benotungstool:rw'),
|
|
||||||
'createPruefungen' => array('lehre/benotungstool:rw'),
|
|
||||||
'saveNotenvorschlagBulk' => array('lehre/benotungstool:rw'),
|
|
||||||
'savePruefungenBulk' => array('lehre/benotungstool:rw')
|
|
||||||
]);
|
|
||||||
|
|
||||||
$this->load->library('AuthLib', null, 'AuthLib');
|
|
||||||
$this->load->library('PhrasesLib');
|
|
||||||
|
|
||||||
// Loads phrases system
|
|
||||||
$this->loadPhrases([
|
|
||||||
'global',
|
|
||||||
'person',
|
|
||||||
'benotungstool',
|
|
||||||
'lehre',
|
|
||||||
'ui'
|
|
||||||
]);
|
|
||||||
require_once(FHCPATH . 'include/mobilitaet.class.php');
|
|
||||||
|
|
||||||
$this->load->model('education/LePruefung_model', 'LePruefungModel');
|
|
||||||
$this->load->model('education/Lvgesamtnote_model', 'LvgesamtnoteModel');
|
|
||||||
$this->load->model('education/Lehrveranstaltung_model', 'LehrveranstaltungModel');
|
|
||||||
$this->load->model('person/Person_model', 'PersonModel');
|
|
||||||
$this->load->model('organisation/Studienplan_model', 'StudienplanModel');
|
|
||||||
$this->load->model('crm/Student_model', 'StudentModel');
|
|
||||||
|
|
||||||
$this->load->helper('hlp_sancho_helper');
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* GET METHOD
|
|
||||||
* expects 'lv_id', 'sem_kurzbz'
|
|
||||||
* returns List of all Students of given lehrveranstaltung and semester and fetches their grades.
|
|
||||||
* Loads LvGesamtnote aswell as Teilnoten from externalSources via getExternalGrades Event.
|
|
||||||
* Calculates the Notenvorschlag for every student based on averaging their Teilnoten.
|
|
||||||
* Finally also fetches all Prüfungen for every student which are linked to lva and semester.
|
|
||||||
*/
|
|
||||||
public function getStudentenNoten() {
|
|
||||||
$lv_id = $this->input->get("lv_id",TRUE);
|
|
||||||
$sem_kurzbz = $this->input->get("sem_kurzbz",TRUE);
|
|
||||||
|
|
||||||
if (!isset($lv_id) || isEmptyString($lv_id)
|
|
||||||
|| !isset($sem_kurzbz) || isEmptyString($sem_kurzbz))
|
|
||||||
$this->terminateWithError($this->p->t('global', 'wrongParameters'), 'general');
|
|
||||||
|
|
||||||
// get studenten for lva & sem with zeugnisnote if available
|
|
||||||
$studenten = $this->LehrveranstaltungModel->getStudentsByLv($sem_kurzbz, $lv_id);
|
|
||||||
$studentenData = $this->getDataOrTerminateWithError($studenten);
|
|
||||||
|
|
||||||
$func = function ($value) {
|
|
||||||
return $value->uid;
|
|
||||||
};
|
|
||||||
|
|
||||||
$grades = array();
|
|
||||||
$student_uids = array_map($func, $studentenData);
|
|
||||||
|
|
||||||
foreach($student_uids as $uid) {
|
|
||||||
$grades[$uid]['grades'] = [];
|
|
||||||
|
|
||||||
$res = $this->StudentModel->load([$uid]);
|
|
||||||
if(!isError($res) && hasData($res)) $student = getData($res)[0];
|
|
||||||
|
|
||||||
$prestudent_id = $student->prestudent_id;
|
|
||||||
|
|
||||||
|
|
||||||
// TODO: last class to get rid of but this one is complicated
|
|
||||||
$mobility = new mobilitaet();
|
|
||||||
$mobility->loadPrestudent($prestudent_id);
|
|
||||||
$output = $mobility->result;
|
|
||||||
$eintrag = '';
|
|
||||||
foreach ($output as $k)
|
|
||||||
{
|
|
||||||
if(($k->mobilitaetstyp_kurzbz == 'GS') && ($k->studiensemester_kurzbz == $sem_kurzbz))
|
|
||||||
$eintrag = ' (d.d.)';
|
|
||||||
}
|
|
||||||
$grades[$uid]['mobility'] = $eintrag;
|
|
||||||
|
|
||||||
$result = $this->LvgesamtnoteModel->getLvGesamtNoten($lv_id, $uid, $sem_kurzbz);
|
|
||||||
|
|
||||||
if(!isError($result) && hasData($result)) {
|
|
||||||
$lvgesamtnote = getData($result)[0];
|
|
||||||
$grades[$uid]['note_lv'] = $lvgesamtnote->note;
|
|
||||||
$grades[$uid]['freigabedatum'] = $lvgesamtnote->freigabedatum;
|
|
||||||
$grades[$uid]['benotungsdatum'] = $lvgesamtnote->benotungsdatum;
|
|
||||||
$grades[$uid]['punkte_lv'] = $lvgesamtnote->punkte;
|
|
||||||
} else {
|
|
||||||
$grades[$uid]['note_lv'] = null;
|
|
||||||
$grades[$uid]['freigabedatum'] = null;
|
|
||||||
$grades[$uid]['benotungsdatum'] = null;
|
|
||||||
$grades[$uid]['punkte_lv'] = null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// send $grades reference to moodle addon
|
|
||||||
Events::trigger(
|
|
||||||
'getExternalGrades',
|
|
||||||
function & () use (&$grades)
|
|
||||||
{
|
|
||||||
return $grades;
|
|
||||||
},
|
|
||||||
[
|
|
||||||
'lvid' => $lv_id,
|
|
||||||
'stsem' => $sem_kurzbz
|
|
||||||
]
|
|
||||||
);
|
|
||||||
|
|
||||||
// calculate notenvorschläge from teilnoten
|
|
||||||
foreach($studentenData as $student) {
|
|
||||||
$g = $grades[$student->uid]['grades'];
|
|
||||||
$note_lv = $grades[$student->uid]['note_lv'];
|
|
||||||
|
|
||||||
// overwrite any calculation with lv note once available
|
|
||||||
if(!is_null($note_lv)) {
|
|
||||||
$student->note_vorschlag = $note_lv;
|
|
||||||
} else if(count($g) > 0) {
|
|
||||||
|
|
||||||
$notensumme = 0;
|
|
||||||
$notensumme_gewichtet = 0;
|
|
||||||
$gewichtsumme = 0;
|
|
||||||
$punktesumme = 0;
|
|
||||||
$punktesumme_gewichtet = 0;
|
|
||||||
$anzahlnoten = 0;
|
|
||||||
foreach($g as $teilnote) {
|
|
||||||
if (is_numeric($teilnote['grade']) || (is_null($teilnote['grade']) && is_numeric($teilnote['points'])))
|
|
||||||
{
|
|
||||||
$notensumme += $teilnote['grade'];
|
|
||||||
$punktesumme += $teilnote['points'];
|
|
||||||
$notensumme_gewichtet += $teilnote['grade'] * $teilnote['weight'];
|
|
||||||
$punktesumme_gewichtet += $teilnote['points'] * $teilnote['weight'];
|
|
||||||
$gewichtsumme += $teilnote['weight'];
|
|
||||||
$anzahlnoten += 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// TODO: develop the punkte feature with models
|
|
||||||
// calculate grades points from notenschlüssel
|
|
||||||
if (CIS_GESAMTNOTE_PUNKTE)
|
|
||||||
{
|
|
||||||
if (defined('CIS_GESAMTNOTE_GEWICHTUNG') && CIS_GESAMTNOTE_GEWICHTUNG)
|
|
||||||
{
|
|
||||||
// Lehreinheitsgewichtung
|
|
||||||
$punkte_vorschlag = round($punktesumme_gewichtet / $gewichtsumme, 2);
|
|
||||||
$notenschluessel = new notenschluessel();
|
|
||||||
$note_vorschlag = $notenschluessel->getNote($punkte_vorschlag, $lv_id, $sem_kurzbz);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
$punkte_vorschlag = round($punktesumme / $anzahlnoten, 2);
|
|
||||||
$notenschluessel = new notenschluessel();
|
|
||||||
$note_vorschlag = $notenschluessel->getNote($punkte_vorschlag, $lv_id, $sem_kurzbz);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
if (defined('CIS_GESAMTNOTE_GEWICHTUNG') && CIS_GESAMTNOTE_GEWICHTUNG)
|
|
||||||
{
|
|
||||||
$note_vorschlag = round($notensumme_gewichtet / $gewichtsumme);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
$note_vorschlag = round($notensumme / $anzahlnoten);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
$student->note_vorschlag = $note_vorschlag;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// get all prüfungen with noten held in that semester in that lva
|
|
||||||
$pruefungen = $this->LePruefungModel->getPruefungenByLvStudiensemester($lv_id, $sem_kurzbz);
|
|
||||||
$pruefungenData = getData($pruefungen);
|
|
||||||
|
|
||||||
$this->terminateWithSuccess(array($studentenData, $pruefungenData, DOMAIN, $grades));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* GET METHOD
|
|
||||||
* returns List of all available & active NotenOptions
|
|
||||||
*/
|
|
||||||
public function getNoten() {
|
|
||||||
$this->load->model('education/Note_model', 'NoteModel');
|
|
||||||
|
|
||||||
$result = $this->NoteModel->getAllActive();
|
|
||||||
$noten = $this->getDataOrTerminateWithError($result);
|
|
||||||
$this->terminateWithSuccess($noten);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* POST METHOD
|
|
||||||
* expects 'lv_id', 'sem_kurzbz', 'password', 'noten'
|
|
||||||
* Notenfreigabe method which checks the users password as a security measure.
|
|
||||||
* Tries to load Lehrveranstaltung, Studiengang and Person via Model in order to validate the coherency of input parameters
|
|
||||||
* lv_id & sem_kurzbz in relation to the noten array delivered.
|
|
||||||
* Updates the LvGesamtnote note, aswell as freigabedatum, which is key in the logic of the freigegeben/offen/changed notenStatus
|
|
||||||
* Along this process builds a html table to be placed in a confirmation email (uid only and full variant depending on config)
|
|
||||||
* which is being sent to the Lektor, aswell as the assigned Assistenz.
|
|
||||||
*/
|
|
||||||
public function saveStudentenNoten() {
|
|
||||||
$result = $this->getPostJSON();
|
|
||||||
|
|
||||||
if(!property_exists($result, 'sem_kurzbz') || !property_exists($result, 'lv_id') ||
|
|
||||||
!property_exists($result, 'password') || !property_exists($result, 'noten')) {
|
|
||||||
$this->terminateWithError($this->p->t('global', 'missingParameters'), 'general');
|
|
||||||
}
|
|
||||||
|
|
||||||
if(!$this->AuthLib->checkUserAuthByUsernamePassword(getAuthUID(), $result->password)->retval) {
|
|
||||||
$this->terminateWithError($this->p->t('global', 'wrongPassword'), 'general');
|
|
||||||
}
|
|
||||||
|
|
||||||
$lv_id = $result->lv_id;
|
|
||||||
$sem_kurzbz = $result->sem_kurzbz;
|
|
||||||
|
|
||||||
$ret = [];
|
|
||||||
|
|
||||||
$res = $this->LehrveranstaltungModel->load($lv_id);
|
|
||||||
if(isError($res) || !hasData($res)) {
|
|
||||||
$this->terminateWithError($this->p->t('benotungstool', 'noValidLvFoundForId', [$lv_id]));
|
|
||||||
}
|
|
||||||
|
|
||||||
$lv = getData($res)[0];
|
|
||||||
|
|
||||||
$studiengang_kz = $lv->studiengang_kz;
|
|
||||||
$res = $this->StudiengangModel->load($studiengang_kz);
|
|
||||||
if(isError($res) || !hasData($res)) {
|
|
||||||
$this->terminateWithError($this->p->t('benotungstool', 'noValidStudiengangFoundForId', [$studiengang_kz]));
|
|
||||||
}
|
|
||||||
$sg = getData($res)[0];
|
|
||||||
$lvaFullName = $sg->kurzbzlang . ' ' . $lv->semester . '.Semester
|
|
||||||
' . $lv->bezeichnung . " - " .$lv->lehrform_kurzbz. " " . $lv->orgform_kurzbz . " - " . $sem_kurzbz;
|
|
||||||
|
|
||||||
$emails = explode(', ', $sg->email);
|
|
||||||
|
|
||||||
|
|
||||||
$res = $this->PersonModel->load(getAuthPersonId());
|
|
||||||
if(isError($res) || !hasData($res)) {
|
|
||||||
$this->terminateWithError($this->p->t('benotungstool', 'noValidPersonFoundForId', [getAuthPersonId()]));
|
|
||||||
}
|
|
||||||
$pers = getData($res)[0];
|
|
||||||
$lektorFullName = $pers->anrede.' '.$pers->vorname.' '.$pers->nachname; //.' ('.$pers->kurzbz.')';
|
|
||||||
|
|
||||||
|
|
||||||
$res = $this->StudienplanModel->getStudienplanByLvaSemKurzbz($lv_id, $sem_kurzbz);
|
|
||||||
$data = getData($res);
|
|
||||||
$studienplan_bezeichnung = '';
|
|
||||||
foreach ($data as $row) {
|
|
||||||
$studienplan_bezeichnung .= $row->bezeichnung . ' ';
|
|
||||||
}
|
|
||||||
$betreff = $this->p->t('benotungstool','notenfreigabe').' ' . $lv->bezeichnung . ' ' . $lv->orgform_kurzbz . ' - ' . $studienplan_bezeichnung;
|
|
||||||
|
|
||||||
$studlist = "<table border='1'><tr>";
|
|
||||||
|
|
||||||
if (defined('CIS_GESAMTNOTE_FREIGABEMAIL_NOTE') && CIS_GESAMTNOTE_FREIGABEMAIL_NOTE) {
|
|
||||||
$studlist .= "<td><b>" . $this->p->t('person','personenkennzeichen') . "</b></td>\n
|
|
||||||
<td><b>" . $this->p->t('lehre','studiengang') . "</b></td>\n
|
|
||||||
<td><b>" . $this->p->t('benotungstool','c4nachname') . "</b></td>\n
|
|
||||||
<td><b>" . $this->p->t('benotungstool','c4vorname') . "</b></td>\n";
|
|
||||||
$studlist .= "<td><b>" . $this->p->t('benotungstool','c4grade') . "</b></td>\n";
|
|
||||||
$studlist .= "<td><b>" . $this->p->t('ui','bearbeitetVon') . "</b></td></tr>\n";
|
|
||||||
} else {
|
|
||||||
$studlist .= "<td><b>" . $this->p->t('person','uid') . "</b></td></tr>\n";
|
|
||||||
}
|
|
||||||
|
|
||||||
foreach($result->noten as $note) {
|
|
||||||
|
|
||||||
$resultLVGes = $this->LvgesamtnoteModel->getLvGesamtNoten($lv_id, $note->uid, $sem_kurzbz);
|
|
||||||
|
|
||||||
if (!isError($resultLVGes) && hasData($resultLVGes))
|
|
||||||
{
|
|
||||||
$lvgesamtnote = getData($resultLVGes)[0];
|
|
||||||
|
|
||||||
if ($lvgesamtnote->benotungsdatum > $lvgesamtnote->freigabedatum)
|
|
||||||
{
|
|
||||||
|
|
||||||
$id = $this->LvgesamtnoteModel->update(
|
|
||||||
[$lvgesamtnote->student_uid, $lvgesamtnote->studiensemester_kurzbz, $lvgesamtnote->lehrveranstaltung_id],
|
|
||||||
array(
|
|
||||||
'note' => $note->note,
|
|
||||||
'freigabevon_uid' => getAuthUID(),
|
|
||||||
'freigabedatum' => date("Y-m-d H:i:s"),
|
|
||||||
'updateamum' => date("Y-m-d H:i:s"),
|
|
||||||
'updatevon' => getAuthUID()
|
|
||||||
)
|
|
||||||
);
|
|
||||||
|
|
||||||
if($id) {
|
|
||||||
$res = $this->LvgesamtnoteModel->load($id->retval);
|
|
||||||
if(hasData($res)) {
|
|
||||||
$lvgesamtnote = getData($res)[0];
|
|
||||||
$ret[] = array('uid' => $note->uid, 'freigabedatum' => $lvgesamtnote->freigabedatum, 'benotungsdatum' => $lvgesamtnote->benotungsdatum);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (defined('CIS_GESAMTNOTE_FREIGABEMAIL_NOTE') && CIS_GESAMTNOTE_FREIGABEMAIL_NOTE)
|
|
||||||
{
|
|
||||||
$studlist .= "<tr><td>" . trim($note->matrikelnr) . "</td>";
|
|
||||||
$studlist .= "<td>" . trim($note->kuerzel) . "</td>";
|
|
||||||
$studlist .= "<td>" . trim($note->nachname) . "</td>";
|
|
||||||
$studlist .= "<td>" . trim($note->vorname) . "</td>";
|
|
||||||
|
|
||||||
// TODO: if defined(CIS_PUNKTE) ...
|
|
||||||
$studlist .= "<td>" .$note->noteBezeichnung. "</td>";
|
|
||||||
|
|
||||||
$studlist .= "<td>" . $lvgesamtnote->mitarbeiter_uid;
|
|
||||||
if ($lvgesamtnote->updatevon != '')
|
|
||||||
$studlist .= " (" . $lvgesamtnote->updatevon . ")";
|
|
||||||
$studlist .= "</td></tr>";
|
|
||||||
} else {
|
|
||||||
$studlist .= "<tr><td>" . trim($note->uid) . "</td></tr>\n";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
$studlist .= "</table>";
|
|
||||||
|
|
||||||
// always send the mail, config toggles data contents
|
|
||||||
$this->sendEmail($lektorFullName, $lvaFullName, count($result->noten), $emails, $studlist, $betreff);
|
|
||||||
|
|
||||||
$this->terminateWithSuccess($ret);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
private function sendEmail($lektorFullName, $lvaFullName, $notenCount, $emailAdressen, $studlist, $betreff)
|
|
||||||
{
|
|
||||||
$emailAdressen[] = getAuthUID() . "@" . DOMAIN; // also send mail to lektors own adress
|
|
||||||
$adressen = implode(";", $emailAdressen);
|
|
||||||
|
|
||||||
foreach ($emailAdressen as $email)
|
|
||||||
{
|
|
||||||
// Prepare mail content
|
|
||||||
$body_fields = array(
|
|
||||||
'lektor' => $lektorFullName,
|
|
||||||
'lvaname' => $lvaFullName,
|
|
||||||
'studlist' => $studlist,
|
|
||||||
'neuenotencount' => $notenCount,
|
|
||||||
'adressen' => $adressen
|
|
||||||
);
|
|
||||||
|
|
||||||
// Send mail
|
|
||||||
sendSanchoMail(
|
|
||||||
'Notenfreigabe',
|
|
||||||
$body_fields,
|
|
||||||
$email,
|
|
||||||
$betreff
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* GET METHOD
|
|
||||||
* should return Notenvorschlag for single Students, not yet implemented since it is not needed anywhere right now,
|
|
||||||
* but could be useful later on.
|
|
||||||
*/
|
|
||||||
public function getNotenvorschlagStudent() {
|
|
||||||
// TODO: Notenvorschlag laden allgemeiner Endpunkt, der im Backend mit Logik (z.B. Moodle) angepasst werden kann.
|
|
||||||
|
|
||||||
$this->terminateWithSuccess();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* POST METHOD
|
|
||||||
* expects 'datum', 'lva_id', 'student_uid', 'note'
|
|
||||||
* Inserts or updates a pruefung for lva & student_uid at given datum (YYYY-MM-DD). When creating a new
|
|
||||||
* Pruefung, sets the provided (Prüfungs-) Note.
|
|
||||||
* Updates the LvGesamtnote of student.
|
|
||||||
* Can return 1 or 2 Prüfungen, since the original grade before the first prüfung is being saved as "Termin1" when
|
|
||||||
* a "Termin2" is being created.
|
|
||||||
*/
|
|
||||||
public function saveStudentPruefung() { // einzelne pruefung speichern
|
|
||||||
$result = $this->getPostJSON();
|
|
||||||
|
|
||||||
if(!property_exists($result, 'datum') || !property_exists($result, 'lva_id') ||
|
|
||||||
!property_exists($result, 'student_uid') || !property_exists($result, 'note')) {
|
|
||||||
$this->terminateWithError($this->p->t('global', 'missingParameters'), 'general');
|
|
||||||
}
|
|
||||||
|
|
||||||
$student_uid = $result->student_uid;
|
|
||||||
$note = $result->note;
|
|
||||||
$punkte = null;
|
|
||||||
$datum = $result->datum;
|
|
||||||
$lva_id = $result->lva_id;
|
|
||||||
$lehreinheit_id = $result->lehreinheit_id;
|
|
||||||
|
|
||||||
$stsem = $result->sem_kurzbz;
|
|
||||||
$typ = $result->typ;
|
|
||||||
|
|
||||||
$jetzt = date("Y-m-d H:i:s");
|
|
||||||
|
|
||||||
// nachpruefungeintragen.php script calls query on campus.student_lehrveranstaltung to find a
|
|
||||||
// lehreinheit_id for lva_id -> lehreinheit should be determined prior to that in new benotungstool
|
|
||||||
// by retrieving it from students row in campus.vw_student_lehrveranstaltung earlier on
|
|
||||||
|
|
||||||
// $lehreinheit_id = getLehreinheit($db, $lvid, $student_uid, $stsem);
|
|
||||||
// $lehreinheit_id = $result->lehreinheit_id;
|
|
||||||
|
|
||||||
$punkte = null;
|
|
||||||
|
|
||||||
// if($punkte!='')
|
|
||||||
// {
|
|
||||||
// // Bei Punkteeingabe wird die Note nochmals geprueft und ggf korrigiert
|
|
||||||
// $notenschluessel = new notenschluessel();
|
|
||||||
// $note_pruef = $notenschluessel->getNote($punkte, $lva_id, $stsem);
|
|
||||||
// if($note_pruef!=$note)
|
|
||||||
// {
|
|
||||||
// $note = $note_pruef;
|
|
||||||
// $note_dirty=true;
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
|
|
||||||
// TODO: more sophisticated empty check
|
|
||||||
if($note=='')
|
|
||||||
$note = 9;
|
|
||||||
|
|
||||||
|
|
||||||
$this->load->model('education/Lehrveranstaltung_model', 'LehrveranstaltungModel');
|
|
||||||
$this->load->model('organisation/Studiengang_model', 'StudiengangModel');
|
|
||||||
|
|
||||||
$res = $this->LehrveranstaltungModel->load($lva_id);
|
|
||||||
if(isError($res) || !hasData($res)) {
|
|
||||||
$this->terminateWithError('Keine gültige Lehrveranstaltung gefunden für ID: '.$lva_id);
|
|
||||||
}
|
|
||||||
|
|
||||||
$studiengang_kz = getData($res)[0]->studiengang_kz;
|
|
||||||
$res = $this->StudiengangModel->load($studiengang_kz);
|
|
||||||
if(isError($res) || !hasData($res)) {
|
|
||||||
$this->terminateWithError('Kein gültiger Studiengang gefunden für ID: '.$studiengang_kz);
|
|
||||||
}
|
|
||||||
|
|
||||||
$pruefungenChanged = $this->savePruefungstermin($typ, $student_uid, $lva_id, $stsem, $lehreinheit_id, $note, $punkte, $datum);
|
|
||||||
|
|
||||||
//Gesamtnote updaten
|
|
||||||
$result = $this->LvgesamtnoteModel->getLvGesamtNoten($lva_id, $student_uid, $stsem);
|
|
||||||
if(!isError($result) && !hasData($result)) {
|
|
||||||
|
|
||||||
$id = $this->LvgesamtnoteModel->insert(
|
|
||||||
array(
|
|
||||||
'student_uid' => $student_uid,
|
|
||||||
'lehrveranstaltung_id' => $lva_id,
|
|
||||||
'studiensemester_kurzbz' => $stsem,
|
|
||||||
'note' => $note,
|
|
||||||
'punkte' => $punkte,
|
|
||||||
'mitarbeiter_uid' => getAuthUID(),
|
|
||||||
'benotungsdatum' => $jetzt,
|
|
||||||
'freigabedatum' => null,
|
|
||||||
'freigabevon_uid' => null,
|
|
||||||
'bemerkung' => null,
|
|
||||||
'updateamum' => null,
|
|
||||||
'updatevon' => null,
|
|
||||||
'insertamum' => $jetzt,
|
|
||||||
'insertvon' => getAuthUID()
|
|
||||||
)
|
|
||||||
);
|
|
||||||
if($id) {
|
|
||||||
$res = $this->LvgesamtnoteModel->load($id->retval);
|
|
||||||
if(hasData($res)) $lvgesamtnote = getData($res)[0];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if(!isError($result) && hasData($result))
|
|
||||||
{
|
|
||||||
$lvgesamtnote = getData($result)[0];
|
|
||||||
|
|
||||||
$id = $this->LvgesamtnoteModel->update(
|
|
||||||
[$lvgesamtnote->student_uid, $lvgesamtnote->studiensemester_kurzbz, $lvgesamtnote->lehrveranstaltung_id],
|
|
||||||
array(
|
|
||||||
'note' => $note,
|
|
||||||
'punkte' => $punkte,
|
|
||||||
'benotungsdatum' => $jetzt,
|
|
||||||
'updateamum' => $jetzt,
|
|
||||||
'updatevon' => getAuthUID()
|
|
||||||
)
|
|
||||||
);
|
|
||||||
|
|
||||||
if($id) {
|
|
||||||
$res = $this->LvgesamtnoteModel->load($id->retval);
|
|
||||||
if(hasData($res)) $lvgesamtnote = getData($res)[0];
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
$savedPruefung = $pruefungenChanged['savedPruefung'] ?? null;
|
|
||||||
$extraPruefung = $pruefungenChanged['extraPruefung'] ?? null;
|
|
||||||
|
|
||||||
$savedPruefungData = count($savedPruefung) > 0 ? $savedPruefung[0] : null;
|
|
||||||
$extraPruefungData = count($extraPruefung) > 0 ? $extraPruefung[0] : null;
|
|
||||||
|
|
||||||
$this->terminateWithSuccess(array($savedPruefungData, $lvgesamtnote, $extraPruefungData));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* private helper method to update/insert pruefungstermine
|
|
||||||
*/
|
|
||||||
private function savePruefungstermin($typ, $student_uid, $lva_id, $stsem, $lehreinheit_id, $note, $punkte, $datum)
|
|
||||||
{
|
|
||||||
|
|
||||||
$status = [];
|
|
||||||
|
|
||||||
// send $grades reference to moodle addon
|
|
||||||
Events::trigger(
|
|
||||||
'getEntschuldigungsStatusForStudentOnDate',
|
|
||||||
function & () use (&$status)
|
|
||||||
{
|
|
||||||
return $status;
|
|
||||||
},
|
|
||||||
[
|
|
||||||
'student_uid' => $student_uid,
|
|
||||||
'datum' => $datum
|
|
||||||
]
|
|
||||||
);
|
|
||||||
|
|
||||||
if(count($status) > 0 && $status[0] == true) {
|
|
||||||
$note = 17; //entschuldigt
|
|
||||||
}
|
|
||||||
|
|
||||||
$jetzt = date("Y-m-d H:i:s");
|
|
||||||
|
|
||||||
$pruefungenChanged = [];
|
|
||||||
|
|
||||||
$this->load->model('education/Lvgesamtnote_model', 'LvgesamtnoteModel');
|
|
||||||
|
|
||||||
if($typ == "Termin2" && defined('CIS_GESAMTNOTE_PRUEFUNG_TERMIN2') && CIS_GESAMTNOTE_PRUEFUNG_TERMIN2)
|
|
||||||
{
|
|
||||||
|
|
||||||
// Wenn eine Nachprüfung angelegt wird, wird zuerst eine Pruefung mit 1. Termin angelegt welche für die ursprüngliche Note
|
|
||||||
// vor den Prüfungsantritten zählt
|
|
||||||
|
|
||||||
$result1 = $this->LePruefungModel->getPruefungenByUidTypLvStudiensemester($student_uid, "Termin1", $lva_id, $stsem);
|
|
||||||
|
|
||||||
// if there is a termin 1 entry already do nothing
|
|
||||||
if(!isError($result1) && hasData($result1)) {
|
|
||||||
|
|
||||||
} else if(!isError($result1) && !hasData($result1)) {
|
|
||||||
// new entry termin1
|
|
||||||
|
|
||||||
$resultLV = $this->LvgesamtnoteModel->getLvGesamtNoten($lva_id, $student_uid, $stsem);
|
|
||||||
|
|
||||||
// update Termin1 note
|
|
||||||
if (hasData($resultLV))
|
|
||||||
{
|
|
||||||
$lvgesamtnote = getData($resultLV)[0];
|
|
||||||
$pr_note = $lvgesamtnote->note;
|
|
||||||
$pr_punkte = $lvgesamtnote->punkte;
|
|
||||||
$benotungsdatum = $lvgesamtnote->benotungsdatum;
|
|
||||||
}
|
|
||||||
else if(!hasData($resultLV))// set Termin1 note to "noch nicht eingetragen"
|
|
||||||
{
|
|
||||||
$pr_note = 9;
|
|
||||||
$pr_punkte = null;
|
|
||||||
$benotungsdatum = $jetzt;
|
|
||||||
}
|
|
||||||
|
|
||||||
$id = $this->LePruefungModel->insert(
|
|
||||||
array(
|
|
||||||
'lehreinheit_id' => $lehreinheit_id,
|
|
||||||
'student_uid' => $student_uid,
|
|
||||||
'mitarbeiter_uid' => getAuthUID(),
|
|
||||||
'note' => $pr_note,
|
|
||||||
// 'punkte' => $pr_punkte,
|
|
||||||
'pruefungstyp_kurzbz' => "Termin1",
|
|
||||||
'datum' => $benotungsdatum,
|
|
||||||
'anmerkung' => "",
|
|
||||||
'insertamum' => $jetzt,
|
|
||||||
'insertvon' => getAuthUID(),
|
|
||||||
'updateamum' => null,
|
|
||||||
'updatevon' => null,
|
|
||||||
'ext_id' => null
|
|
||||||
)
|
|
||||||
);
|
|
||||||
if($id) {
|
|
||||||
$res = $this->LePruefungModel->load($id->retval);
|
|
||||||
if(hasData($res)) $pruefungenChanged['extraPruefung'] = getData($res);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// Die Pruefung wird als Termin2 eingetragen
|
|
||||||
$result2 = $this->LePruefungModel->getPruefungenByUidTypLvStudiensemester($student_uid, "Termin2", $lva_id, $stsem);
|
|
||||||
// if there is a termin 2 entry already update it
|
|
||||||
if(!isError($result2) && hasData($result2)) {
|
|
||||||
// update
|
|
||||||
$termin2 = getData($result2)[0];
|
|
||||||
$id = $this->LePruefungModel->update(
|
|
||||||
$termin2->pruefung_id,
|
|
||||||
array(
|
|
||||||
'updateamum' => $jetzt,
|
|
||||||
'updatevon' => getAuthUID(),
|
|
||||||
'note' => $note,
|
|
||||||
// 'punkte' => $punkte,
|
|
||||||
'datum' => $datum,
|
|
||||||
'anmerkung' => ""
|
|
||||||
)
|
|
||||||
);
|
|
||||||
if($id) {
|
|
||||||
$res = $this->LePruefungModel->load($id->retval);
|
|
||||||
if(hasData($res)) $pruefungenChanged['savedPruefung'] = getData($res);
|
|
||||||
}
|
|
||||||
|
|
||||||
} else if(!isError($result2) && !hasData($result2)) {
|
|
||||||
// new entry termin 2
|
|
||||||
|
|
||||||
$id = $this->LePruefungModel->insert(
|
|
||||||
array(
|
|
||||||
'lehreinheit_id' => $lehreinheit_id,
|
|
||||||
'student_uid' => $student_uid,
|
|
||||||
'mitarbeiter_uid' => getAuthUID(),
|
|
||||||
'note' => $note,
|
|
||||||
// 'punkte' => null,//$punkte,
|
|
||||||
'pruefungstyp_kurzbz' => $typ,
|
|
||||||
'datum' => $datum,
|
|
||||||
'anmerkung' => "",
|
|
||||||
'insertamum' => $jetzt,
|
|
||||||
'insertvon' => getAuthUID(),
|
|
||||||
'updateamum' => null,
|
|
||||||
'updatevon' => null,
|
|
||||||
'ext_id' => null
|
|
||||||
)
|
|
||||||
);
|
|
||||||
if($id) {
|
|
||||||
$res = $this->LePruefungModel->load($id->retval);
|
|
||||||
if(hasData($res)) $pruefungenChanged['savedPruefung'] = getData($res);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
} else if($typ == "Termin3" && defined('CIS_GESAMTNOTE_PRUEFUNG_TERMIN3') && CIS_GESAMTNOTE_PRUEFUNG_TERMIN3)
|
|
||||||
{
|
|
||||||
|
|
||||||
$result3 = $this->LePruefungModel->getPruefungenByUidTypLvStudiensemester($student_uid, "Termin3", $lva_id, $stsem);
|
|
||||||
|
|
||||||
if(!isError($result3) && hasData($result3)) {
|
|
||||||
// update
|
|
||||||
$termin3 = getData($result3)[0];
|
|
||||||
|
|
||||||
$id = $this->LePruefungModel->update(
|
|
||||||
$termin3->pruefung_id,
|
|
||||||
array(
|
|
||||||
'updateamum' => $jetzt,
|
|
||||||
'updatevon' => getAuthUID(),
|
|
||||||
'note' => $note,
|
|
||||||
// 'punkte' => $punkte,
|
|
||||||
'datum' => $datum,
|
|
||||||
'anmerkung' => ""
|
|
||||||
)
|
|
||||||
);
|
|
||||||
if($id) {
|
|
||||||
$res = $this->LePruefungModel->load($id->retval);
|
|
||||||
if(hasData($res)) $pruefungenChanged['savedPruefung'] = getData($res);
|
|
||||||
}
|
|
||||||
|
|
||||||
} else if(!isError($result3) && !hasData($result3)) {
|
|
||||||
// insert new termin3
|
|
||||||
|
|
||||||
$id = $this->LePruefungModel->insert(
|
|
||||||
array(
|
|
||||||
'lehreinheit_id' => $lehreinheit_id,
|
|
||||||
'student_uid' => $student_uid,
|
|
||||||
'mitarbeiter_uid' => getAuthUID(),
|
|
||||||
'note' => $note,
|
|
||||||
// 'punkte' => null,//$punkte,
|
|
||||||
'pruefungstyp_kurzbz' => $typ,
|
|
||||||
'datum' => $datum,
|
|
||||||
'anmerkung' => "",
|
|
||||||
'insertamum' => $jetzt,
|
|
||||||
'insertvon' => getAuthUID(),
|
|
||||||
'updateamum' => null,
|
|
||||||
'updatevon' => null,
|
|
||||||
'ext_id' => null
|
|
||||||
)
|
|
||||||
);
|
|
||||||
if($id) {
|
|
||||||
$res = $this->LePruefungModel->load($id->retval);
|
|
||||||
if(hasData($res)) $pruefungenChanged['savedPruefung'] = getData($res);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
$this->terminateWithError($this->p->t('benotungstool', 'wrongPruefungType', [$student_uid, $typ]), 'general');
|
|
||||||
}
|
|
||||||
|
|
||||||
return $pruefungenChanged;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* POST METHOD
|
|
||||||
* expects 'sem_kurzbz', 'lv_id', 'student_uid', 'note'
|
|
||||||
* Method that sets lv_note of student in lva and semester from provided Points/Grade Selection.
|
|
||||||
* Updates the note & benotungsdatum, which is key in the noten state offen/freigegeben/changed
|
|
||||||
*/
|
|
||||||
public function saveNotenvorschlag() {
|
|
||||||
$result = $this->getPostJSON();
|
|
||||||
|
|
||||||
if(!property_exists($result, 'lv_id') || !property_exists($result, 'sem_kurzbz') ||
|
|
||||||
!property_exists($result, 'student_uid') || !property_exists($result, 'note')) {
|
|
||||||
$this->terminateWithError($this->p->t('global', 'missingParameters'), 'general');
|
|
||||||
}
|
|
||||||
|
|
||||||
$lv_id = $result->lv_id;
|
|
||||||
$student_uid = $result->student_uid;
|
|
||||||
$sem_kurzbz = $result->sem_kurzbz;
|
|
||||||
$note = $result->note;
|
|
||||||
|
|
||||||
$result = $this->LvgesamtnoteModel->getLvGesamtNoten($lv_id, $student_uid, $sem_kurzbz);
|
|
||||||
|
|
||||||
if(!isError($result) && hasData($result)) {
|
|
||||||
$lvgesamtnote = getData($result)[0];
|
|
||||||
|
|
||||||
$id = $this->LvgesamtnoteModel->update(
|
|
||||||
[$lvgesamtnote->student_uid, $lvgesamtnote->studiensemester_kurzbz, $lvgesamtnote->lehrveranstaltung_id],
|
|
||||||
array(
|
|
||||||
'note' => $note,
|
|
||||||
'punkte' => null,
|
|
||||||
'benotungsdatum' => date("Y-m-d H:i:s"),
|
|
||||||
'updateamum' => date("Y-m-d H:i:s"),
|
|
||||||
'updatevon' => getAuthUID()
|
|
||||||
)
|
|
||||||
);
|
|
||||||
|
|
||||||
if($id) {
|
|
||||||
$res = $this->LvgesamtnoteModel->load($id->retval);
|
|
||||||
if(hasData($res)) $lvgesamtnote = getData($res)[0];
|
|
||||||
}
|
|
||||||
} else if(!isError($result) && !hasData($result)) {
|
|
||||||
$id = $this->LvgesamtnoteModel->insert(
|
|
||||||
array(
|
|
||||||
'student_uid' => $student_uid,
|
|
||||||
'lehrveranstaltung_id' => $lv_id,
|
|
||||||
'studiensemester_kurzbz' => $sem_kurzbz,
|
|
||||||
'note' => $note,
|
|
||||||
'punkte' => null,
|
|
||||||
'mitarbeiter_uid' => getAuthUID(),
|
|
||||||
'benotungsdatum' => date("Y-m-d H:i:s"),
|
|
||||||
'freigabedatum' => null,
|
|
||||||
'freigabevon_uid' => null,
|
|
||||||
'bemerkung' => null,
|
|
||||||
'updateamum' => null,
|
|
||||||
'updatevon' => null,
|
|
||||||
'insertamum' => date("Y-m-d H:i:s"),
|
|
||||||
'insertvon' => getAuthUID()
|
|
||||||
)
|
|
||||||
);
|
|
||||||
if($id) {
|
|
||||||
$res = $this->LvgesamtnoteModel->load($id->retval);
|
|
||||||
if(hasData($res)) $lvgesamtnote = getData($res)[0];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
$this->terminateWithSuccess(array($lvgesamtnote));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* POST METHOD
|
|
||||||
* expects 'sem_kurzbz', 'lv_id', 'noten'
|
|
||||||
* Bulk variant of saveNotenvorschlag, used when importing grades from csv.
|
|
||||||
*/
|
|
||||||
public function saveNotenvorschlagBulk() {
|
|
||||||
$result = $this->getPostJSON();
|
|
||||||
|
|
||||||
if(!property_exists($result, 'lv_id') || !property_exists($result, 'sem_kurzbz') ||
|
|
||||||
!property_exists($result, 'noten')) {
|
|
||||||
$this->terminateWithError($this->p->t('global', 'missingParameters'), 'general');
|
|
||||||
}
|
|
||||||
|
|
||||||
$lv_id = $result->lv_id;
|
|
||||||
$sem_kurzbz = $result->sem_kurzbz;
|
|
||||||
$noten = $result->noten;
|
|
||||||
|
|
||||||
$retLvNoten = [];
|
|
||||||
|
|
||||||
foreach($noten as $note)
|
|
||||||
{
|
|
||||||
|
|
||||||
$result = $this->LvgesamtnoteModel->getLvGesamtNoten($lv_id, $note->uid, $sem_kurzbz);
|
|
||||||
|
|
||||||
if(!isError($result) && hasData($result)) {
|
|
||||||
$lvgesamtnote = getData($result)[0];
|
|
||||||
|
|
||||||
$id = $this->LvgesamtnoteModel->update(
|
|
||||||
[$lvgesamtnote->student_uid, $lvgesamtnote->studiensemester_kurzbz, $lvgesamtnote->lehrveranstaltung_id],
|
|
||||||
array(
|
|
||||||
'note' => trim($note->note),
|
|
||||||
'punkte' => null,
|
|
||||||
'benotungsdatum' => date("Y-m-d H:i:s"),
|
|
||||||
'updateamum' => date("Y-m-d H:i:s"),
|
|
||||||
'updatevon' => getAuthUID()
|
|
||||||
)
|
|
||||||
);
|
|
||||||
|
|
||||||
if($id) {
|
|
||||||
$res = $this->LvgesamtnoteModel->load($id->retval);
|
|
||||||
if(hasData($res)) $lvgesamtnote = getData($res)[0];
|
|
||||||
}
|
|
||||||
} else if(!isError($result) && !hasData($result)) {
|
|
||||||
$id = $this->LvgesamtnoteModel->insert(
|
|
||||||
array(
|
|
||||||
'student_uid' => $note->uid,
|
|
||||||
'lehrveranstaltung_id' => $lv_id,
|
|
||||||
'studiensemester_kurzbz' => $sem_kurzbz,
|
|
||||||
'note' => trim($note->note),
|
|
||||||
'punkte' => null,
|
|
||||||
'mitarbeiter_uid' => getAuthUID(),
|
|
||||||
'benotungsdatum' => date("Y-m-d H:i:s"),
|
|
||||||
'freigabedatum' => null,
|
|
||||||
'freigabevon_uid' => null,
|
|
||||||
'bemerkung' => null,
|
|
||||||
'updateamum' => null,
|
|
||||||
'updatevon' => null,
|
|
||||||
'insertamum' => date("Y-m-d H:i:s"),
|
|
||||||
'insertvon' => getAuthUID()
|
|
||||||
)
|
|
||||||
);
|
|
||||||
if($id) {
|
|
||||||
$res = $this->LvgesamtnoteModel->load($id->retval);
|
|
||||||
if(hasData($res)) $lvgesamtnote = getData($res)[0];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
$retLvNoten[] = $lvgesamtnote;
|
|
||||||
}
|
|
||||||
|
|
||||||
$this->terminateWithSuccess($retLvNoten);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* POST METHOD
|
|
||||||
* expects 'uids', 'datum'
|
|
||||||
* Bulk variant of saveStudentPruefung, used when creating a new Prüfung for several students. Always sets note to
|
|
||||||
* "noch nicht eingetragen" for the created Prüfung.
|
|
||||||
*/
|
|
||||||
public function createPruefungen() {
|
|
||||||
$result = $this->getPostJSON();
|
|
||||||
|
|
||||||
if(!property_exists($result, 'uids') || !property_exists($result, 'datum')) {
|
|
||||||
$this->terminateWithError($this->p->t('global', 'missingParameters'), 'general');
|
|
||||||
}
|
|
||||||
|
|
||||||
$uids = $result->uids;
|
|
||||||
$datum = $result->datum;
|
|
||||||
$lva_id = $result->lva_id;
|
|
||||||
|
|
||||||
$stsem = $result->sem_kurzbz;
|
|
||||||
|
|
||||||
$ret = [];
|
|
||||||
|
|
||||||
foreach ($uids as $student) {
|
|
||||||
$student_uid = $student->uid;
|
|
||||||
$typ = $student->typ;
|
|
||||||
$note = 9; //$result->note; // TODO: parameterize for import maybe
|
|
||||||
$punkte = ''; // TODO: check punkte feature
|
|
||||||
|
|
||||||
$lehreinheit_id = $student->lehreinheit_id;
|
|
||||||
$ret[$student->uid] = $this->savePruefungstermin($typ, $student_uid, $lva_id, $stsem, $lehreinheit_id, $note, $punkte, $datum);
|
|
||||||
}
|
|
||||||
|
|
||||||
$this->terminateWithSuccess($ret);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* POST METHOD
|
|
||||||
* expects 'lv_id', 'sem_kurzbz', 'pruefungen'
|
|
||||||
* Bulk variant of saveStudentPruefung, used when importing pruefungsdata from csv with available noten.
|
|
||||||
*/
|
|
||||||
public function savePruefungenBulk() {
|
|
||||||
$result = $this->getPostJSON();
|
|
||||||
|
|
||||||
if(!property_exists($result, 'lv_id') || !property_exists($result, 'sem_kurzbz') ||
|
|
||||||
!property_exists($result, 'pruefungen')) {
|
|
||||||
$this->terminateWithError($this->p->t('global', 'missingParameters'), 'general');
|
|
||||||
}
|
|
||||||
|
|
||||||
$lv_id = $result->lv_id;
|
|
||||||
$sem_kurzbz = $result->sem_kurzbz;
|
|
||||||
$pruefungen = $result->pruefungen;
|
|
||||||
|
|
||||||
$ret = [];
|
|
||||||
|
|
||||||
foreach ($pruefungen as $pruefung) {
|
|
||||||
$student_uid = $pruefung->uid;
|
|
||||||
$typ = $pruefung->typ;
|
|
||||||
$note = $pruefung->note; // TODO: parameterize for import maybe
|
|
||||||
$datum = $pruefung->datum;
|
|
||||||
$punkte = ''; // TODO: check punkte feature
|
|
||||||
|
|
||||||
$lehreinheit_id = $pruefung->lehreinheit_id;
|
|
||||||
$ret[$student_uid] = $this->savePruefungstermin($typ, $student_uid, $lv_id, $sem_kurzbz, $lehreinheit_id, $note, $punkte, $datum);
|
|
||||||
}
|
|
||||||
|
|
||||||
$this->terminateWithSuccess($ret);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -1,67 +0,0 @@
|
|||||||
<?php
|
|
||||||
/**
|
|
||||||
* Copyright (C) 2024 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/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
if (! defined('BASEPATH')) exit('No direct script access allowed');
|
|
||||||
class Studiensemester extends FHCAPI_Controller
|
|
||||||
{
|
|
||||||
|
|
||||||
private $_ci;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Object initialization
|
|
||||||
*/
|
|
||||||
public function __construct()
|
|
||||||
{
|
|
||||||
parent::__construct([
|
|
||||||
'getStudiensemester'=> self::PERM_LOGGED,
|
|
||||||
|
|
||||||
]);
|
|
||||||
|
|
||||||
$this->_ci =& get_instance();
|
|
||||||
|
|
||||||
$this->_ci->load->model('organisation/Studiensemester_model', 'StudiensemesterModel');
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
//------------------------------------------------------------------------------------------------------------------
|
|
||||||
// Public methods
|
|
||||||
|
|
||||||
/**
|
|
||||||
* GET METHOD
|
|
||||||
* returns List of all studiensemester as well as current one
|
|
||||||
*/
|
|
||||||
public function getStudiensemester()
|
|
||||||
{
|
|
||||||
$this->_ci->StudiensemesterModel->addOrder("start", "DESC");
|
|
||||||
$result = $this->_ci->StudiensemesterModel->load();
|
|
||||||
|
|
||||||
$studiensemester = getData($result);
|
|
||||||
$result = $this->_ci->StudiensemesterModel->getAkt();
|
|
||||||
$aktuell = getData($result);
|
|
||||||
|
|
||||||
$this->terminateWithSuccess(array($studiensemester, $aktuell));
|
|
||||||
}
|
|
||||||
|
|
||||||
//------------------------------------------------------------------------------------------------------------------
|
|
||||||
// Private methods
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -1,86 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
if (!defined('BASEPATH'))
|
|
||||||
exit('No direct script access allowed');
|
|
||||||
|
|
||||||
class Config extends FHCAPI_Controller
|
|
||||||
{
|
|
||||||
private $_ci;
|
|
||||||
private $_uid;
|
|
||||||
|
|
||||||
public function __construct()
|
|
||||||
{
|
|
||||||
parent::__construct([
|
|
||||||
'get' => ['admin:r', 'assistenz:r'],
|
|
||||||
'set' => ['admin:r', 'assistenz:r'],
|
|
||||||
]);
|
|
||||||
|
|
||||||
$this->_ci = &get_instance();
|
|
||||||
$this->_setAuthUID();
|
|
||||||
|
|
||||||
$this->loadPhrases([
|
|
||||||
'lehre'
|
|
||||||
]);
|
|
||||||
|
|
||||||
$this->_ci->load->library('VariableLib', ['uid' => $this->_uid]);
|
|
||||||
$this->_ci->load->library('PermissionLib');
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
public function get()
|
|
||||||
{
|
|
||||||
if (!($this->permissionlib->isBerechtigt('basis/tempus')) && !($this->permissionlib->isBerechtigt('lv-plan')))
|
|
||||||
$this->terminateWithSuccess([]);
|
|
||||||
|
|
||||||
$ignore_kollision = $this->_ci->variablelib->getVar('ignore_kollision');
|
|
||||||
$ignore_zeitsperre = $this->_ci->variablelib->getVar('ignore_zeitsperre');
|
|
||||||
$ignore_reservierung = $this->_ci->variablelib->getVar('ignore_reservierung');
|
|
||||||
|
|
||||||
$config['ignore_kollision'] = [
|
|
||||||
"type" => "checkbox",
|
|
||||||
"label" => 'ignore_kollision',
|
|
||||||
"value" => $ignore_kollision,
|
|
||||||
];
|
|
||||||
|
|
||||||
$config['ignore_zeitsperre'] = [
|
|
||||||
"type" => "checkbox",
|
|
||||||
"label" => 'ignore_zeitsperre',
|
|
||||||
"value" => $ignore_zeitsperre,
|
|
||||||
];
|
|
||||||
|
|
||||||
$config['ignore_reservierung'] = [
|
|
||||||
"type" => "checkbox",
|
|
||||||
"label" => 'ignore_reservierung',
|
|
||||||
"value" => $ignore_reservierung,
|
|
||||||
];
|
|
||||||
|
|
||||||
$this->terminateWithSuccess($config);
|
|
||||||
}
|
|
||||||
public function set()
|
|
||||||
{
|
|
||||||
if (!($this->permissionlib->isBerechtigt('basis/tempus')) && !($this->permissionlib->isBerechtigt('lv-plan')))
|
|
||||||
$this->terminateWithSuccess([]);
|
|
||||||
|
|
||||||
$this->load->model('system/Variable_model', 'VariableModel');
|
|
||||||
|
|
||||||
foreach (['ignore_kollision','ignore_zeitsperre','ignore_reservierung'] as $variable)
|
|
||||||
{
|
|
||||||
if ($this->_ci->input->post($variable) !== null)
|
|
||||||
{
|
|
||||||
$this->VariableModel->update(array('uid' => $this->_uid, 'name' => $variable), array('wert' => $this->input->post($variable)));
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
$this->terminateWithSuccess();
|
|
||||||
}
|
|
||||||
|
|
||||||
private function _setAuthUID()
|
|
||||||
{
|
|
||||||
$this->_uid = getAuthUID();
|
|
||||||
|
|
||||||
if (!$this->_uid)
|
|
||||||
show_error('User authentification failed');
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -15,7 +15,6 @@ class Gruppe extends FHCAPI_Controller
|
|||||||
'getBenutzerSearch' => ['admin:r', 'assistenz:r'],
|
'getBenutzerSearch' => ['admin:r', 'assistenz:r'],
|
||||||
'getAllSearch' => ['admin:r', 'assistenz:r'],
|
'getAllSearch' => ['admin:r', 'assistenz:r'],
|
||||||
'getByLehreinheit' => ['admin:r', 'assistenz:r'],
|
'getByLehreinheit' => ['admin:r', 'assistenz:r'],
|
||||||
'getGruppe' => ['admin:r', 'assistenz:r'],
|
|
||||||
]);
|
]);
|
||||||
|
|
||||||
$this->_ci = &get_instance();
|
$this->_ci = &get_instance();
|
||||||
@@ -68,7 +67,7 @@ class Gruppe extends FHCAPI_Controller
|
|||||||
|
|
||||||
$this->checkPermission($lehreinheit_id);
|
$this->checkPermission($lehreinheit_id);
|
||||||
|
|
||||||
$result = $this->_ci->LehreinheitgruppeModel->addGroup($lehreinheit_id, $gid, $lehrverband === true || $lehrverband === 'true');
|
$result = $this->_ci->LehreinheitgruppeModel->addGroup($lehreinheit_id, $gid, !($lehrverband === 'false'));
|
||||||
|
|
||||||
if (isError($result))
|
if (isError($result))
|
||||||
$this->terminateWithError(getError($result));
|
$this->terminateWithError(getError($result));
|
||||||
@@ -76,71 +75,6 @@ class Gruppe extends FHCAPI_Controller
|
|||||||
$this->terminateWithSuccess($result);
|
$this->terminateWithSuccess($result);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getGruppe()
|
|
||||||
{
|
|
||||||
$lehrverband = $this->input->post('lehrverband');
|
|
||||||
|
|
||||||
$gruppen_result = array();
|
|
||||||
|
|
||||||
if ($lehrverband === false)
|
|
||||||
{
|
|
||||||
$gruppen_result = $this->_ci->GruppeModel->loadWhere(array(
|
|
||||||
'studiengang_kz' => $this->input->post('stg_kz'),
|
|
||||||
'gruppe_kurzbz' => $this->input->post('gruppe_kurzbz'),
|
|
||||||
'aktiv' => true
|
|
||||||
));
|
|
||||||
}
|
|
||||||
else if ($lehrverband === true)
|
|
||||||
{
|
|
||||||
|
|
||||||
if (!isEmptyString($this->input->post('verband')))
|
|
||||||
{
|
|
||||||
$this->LehrverbandModel->db->where('verband', $this->input->post('verband'));
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
$this->LehrverbandModel->db->group_start();
|
|
||||||
$this->LehrverbandModel->db->where("trim(verband) = ''");
|
|
||||||
$this->LehrverbandModel->db->or_where("verband IS NULL");
|
|
||||||
$this->LehrverbandModel->db->group_end();
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!isEmptyString($this->input->post('gruppe')))
|
|
||||||
{
|
|
||||||
$this->LehrverbandModel->db->where('gruppe', $this->input->post('gruppe'));
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
$this->LehrverbandModel->db->group_start();
|
|
||||||
$this->LehrverbandModel->db->where("trim(gruppe) = ''");
|
|
||||||
$this->LehrverbandModel->db->or_where("gruppe IS NULL");
|
|
||||||
$this->LehrverbandModel->db->group_end();
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!isEmptyString((string)$this->input->post('semester')))
|
|
||||||
{
|
|
||||||
$this->LehrverbandModel->db->where('semester', $this->input->post('semester'));
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
|
|
||||||
$this->LehrverbandModel->db->group_start();
|
|
||||||
$this->LehrverbandModel->db->where("semester = ''");
|
|
||||||
$this->LehrverbandModel->db->or_where("semester IS NULL");
|
|
||||||
$this->LehrverbandModel->db->group_end();
|
|
||||||
}
|
|
||||||
|
|
||||||
$gruppen_result = $this->LehrverbandModel->loadWhere(array('studiengang_kz' => $this->input->post('stg_kz'), 'aktiv' => true));
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!hasData($gruppen_result))
|
|
||||||
return $this->terminateWithError('No group found');
|
|
||||||
|
|
||||||
$gruppen_array = getData($gruppen_result)[0];
|
|
||||||
|
|
||||||
$this->terminateWithSuccess($gruppen_array->gid);
|
|
||||||
}
|
|
||||||
|
|
||||||
public function getByLehreinheit($lehreinheit_id = null)
|
public function getByLehreinheit($lehreinheit_id = null)
|
||||||
{
|
{
|
||||||
if (is_null($lehreinheit_id) || !ctype_digit((string)$lehreinheit_id))
|
if (is_null($lehreinheit_id) || !ctype_digit((string)$lehreinheit_id))
|
||||||
|
|||||||
@@ -134,14 +134,9 @@ class Lektor extends FHCAPI_Controller
|
|||||||
$this->terminateWithValidationErrors($this->form_validation->error_array());
|
$this->terminateWithValidationErrors($this->form_validation->error_array());
|
||||||
}
|
}
|
||||||
|
|
||||||
$nullable_fields = array('semesterstunden', 'stundensatz', 'planstunden');
|
if (isset($formData['semesterstunden']) && (!is_numeric($formData['semesterstunden']) || $formData['semesterstunden'] === ''))
|
||||||
|
|
||||||
foreach ($nullable_fields as $nullable_field)
|
|
||||||
{
|
{
|
||||||
if (isset($formData[$nullable_field]) && (!is_numeric($formData[$nullable_field]) || $formData[$nullable_field] === ''))
|
$formData['semesterstunden'] = null;
|
||||||
{
|
|
||||||
$formData[$nullable_field] = null;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
$lehreinheit_permission = $this->checkPermission($lehreinheit_id, array('admin', 'assistenz', 'lv-plan'));
|
$lehreinheit_permission = $this->checkPermission($lehreinheit_id, array('admin', 'assistenz', 'lv-plan'));
|
||||||
@@ -149,9 +144,6 @@ class Lektor extends FHCAPI_Controller
|
|||||||
if (!$lehreinheit_permission)
|
if (!$lehreinheit_permission)
|
||||||
$this->terminateWithError($this->p->t('ui', 'error_fieldWriteAccess'));
|
$this->terminateWithError($this->p->t('ui', 'error_fieldWriteAccess'));
|
||||||
|
|
||||||
if (!is_null($this->getLektorVertrag($lehreinheit_id, $mitarbeiter_uid)) && (array_key_exists('mitarbeiter_uid', $formData) && $mitarbeiter_uid !== $formData['mitarbeiter_uid']))
|
|
||||||
$this->terminateWithError($this->p->t('ui', 'error_fieldWriteAccess'));
|
|
||||||
|
|
||||||
$result = $this->_ci->lektorlib->updateLektorFromLehreinheit($lehreinheit_id, $mitarbeiter_uid, $formData);
|
$result = $this->_ci->lektorlib->updateLektorFromLehreinheit($lehreinheit_id, $mitarbeiter_uid, $formData);
|
||||||
|
|
||||||
if (isError($result)) $this->terminateWithError(getError($result));
|
if (isError($result)) $this->terminateWithError(getError($result));
|
||||||
@@ -162,7 +154,7 @@ class Lektor extends FHCAPI_Controller
|
|||||||
{
|
{
|
||||||
$value = str_replace(',', '.', $value);
|
$value = str_replace(',', '.', $value);
|
||||||
|
|
||||||
if (!is_numeric($value) && $value !== "")
|
if (!is_numeric($value))
|
||||||
{
|
{
|
||||||
$this->form_validation->set_message('_check_decimal', 'Das Feld {field} muss eine Zahl sein.');
|
$this->form_validation->set_message('_check_decimal', 'Das Feld {field} muss eine Zahl sein.');
|
||||||
return false;
|
return false;
|
||||||
|
|||||||
@@ -1,84 +0,0 @@
|
|||||||
<?php
|
|
||||||
if (! defined('BASEPATH')) exit('No direct script access allowed');
|
|
||||||
|
|
||||||
class Noten extends FHCAPI_Controller
|
|
||||||
{
|
|
||||||
public function __construct()
|
|
||||||
{
|
|
||||||
parent::__construct([
|
|
||||||
'getCertificate' => 'student/noten:r',
|
|
||||||
'getTeacherProposal' => 'student/noten:r',
|
|
||||||
]);
|
|
||||||
|
|
||||||
// Load Libraries
|
|
||||||
$this->load->library('VariableLib', ['uid' => getAuthUID()]);
|
|
||||||
|
|
||||||
// Load Phrases
|
|
||||||
$this->loadPhrases([
|
|
||||||
'stv',
|
|
||||||
'person',
|
|
||||||
'lehre'
|
|
||||||
]);
|
|
||||||
}
|
|
||||||
|
|
||||||
public function getCertificate($lv_id, $studiensemester_kurzbz = null)
|
|
||||||
{
|
|
||||||
if (is_null($lv_id) || !ctype_digit((string)$lv_id))
|
|
||||||
$this->terminateWithError( $this->p->t('ui', 'ungueltigeParameter'), self::ERROR_TYPE_GENERAL);
|
|
||||||
|
|
||||||
$this->load->model('education/lehrveranstaltung_model', 'LehrveranstaltungModel');
|
|
||||||
$this->load->model('education/Zeugnisnote_model', 'ZeugnisnoteModel');
|
|
||||||
$this->load->model('organisation/Studiensemester_model', 'StudiensemesterModel');
|
|
||||||
|
|
||||||
$result = $this->LehrveranstaltungModel->loadWhere([
|
|
||||||
'lehrveranstaltung_id' => $lv_id
|
|
||||||
]);
|
|
||||||
|
|
||||||
$lehrveranstaltung = $this->getDataOrTerminateWithError($result);
|
|
||||||
|
|
||||||
if (!$lehrveranstaltung)
|
|
||||||
$this->terminateWithSuccess([]);
|
|
||||||
|
|
||||||
if ($studiensemester_kurzbz !== null && !$this->StudiensemesterModel->isValidStudiensemester($studiensemester_kurzbz))
|
|
||||||
{
|
|
||||||
$this->terminateWithError($studiensemester_kurzbz . ' - ' . $this->p->t('lehre', 'error_noStudiensemester'));
|
|
||||||
}
|
|
||||||
|
|
||||||
$result = $this->ZeugnisnoteModel->getZeugnisnoten(null, $studiensemester_kurzbz, $lehrveranstaltung[0]->lehrveranstaltung_id);
|
|
||||||
|
|
||||||
$grades = $this->getDataOrTerminateWithError($result);
|
|
||||||
|
|
||||||
$this->terminateWithSuccess($grades);
|
|
||||||
}
|
|
||||||
|
|
||||||
public function getTeacherProposal($lv_id, $studiensemester_kurzbz = null)
|
|
||||||
{
|
|
||||||
if (is_null($lv_id) || !ctype_digit((string)$lv_id))
|
|
||||||
$this->terminateWithError( $this->p->t('ui', 'ungueltigeParameter'), self::ERROR_TYPE_GENERAL);
|
|
||||||
|
|
||||||
$this->load->model('education/lehrveranstaltung_model', 'LehrveranstaltungModel');
|
|
||||||
$this->load->model('education/Lvgesamtnote_model', 'LvgesamtnoteModel');
|
|
||||||
$this->load->model('organisation/Studiensemester_model', 'StudiensemesterModel');
|
|
||||||
|
|
||||||
$result = $this->LehrveranstaltungModel->loadWhere([
|
|
||||||
'lehrveranstaltung_id' => $lv_id
|
|
||||||
]);
|
|
||||||
|
|
||||||
$lehrveranstaltung = $this->getDataOrTerminateWithError($result);
|
|
||||||
|
|
||||||
if (!$lehrveranstaltung)
|
|
||||||
$this->terminateWithSuccess([]);
|
|
||||||
|
|
||||||
if ($studiensemester_kurzbz !== null && !$this->StudiensemesterModel->isValidStudiensemester($studiensemester_kurzbz))
|
|
||||||
{
|
|
||||||
$this->terminateWithError($studiensemester_kurzbz . ' - ' . $this->p->t('lehre', 'error_noStudiensemester'));
|
|
||||||
}
|
|
||||||
|
|
||||||
$result = $this->LvgesamtnoteModel->getLvGesamtNoten($lv_id, null, $studiensemester_kurzbz);
|
|
||||||
|
|
||||||
$grades = $this->getDataOrTerminateWithError($result);
|
|
||||||
|
|
||||||
$this->terminateWithSuccess($grades);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
@@ -27,8 +27,7 @@ class Setup extends FHCAPI_Controller
|
|||||||
public function __construct()
|
public function __construct()
|
||||||
{
|
{
|
||||||
parent::__construct([
|
parent::__construct([
|
||||||
'getLETabs' => ['admin:r', 'assistenz:r'],
|
'getTabs' => ['admin:r', 'assistenz:r'],
|
||||||
'getLVTabs' => ['admin:r', 'assistenz:r'],
|
|
||||||
'getStudiensemester' => ['admin:r', 'assistenz:r'],
|
'getStudiensemester' => ['admin:r', 'assistenz:r'],
|
||||||
'getSprache' => ['admin:r', 'assistenz:r'],
|
'getSprache' => ['admin:r', 'assistenz:r'],
|
||||||
'getRaumtyp' => ['admin:r', 'assistenz:r'],
|
'getRaumtyp' => ['admin:r', 'assistenz:r'],
|
||||||
@@ -42,10 +41,9 @@ class Setup extends FHCAPI_Controller
|
|||||||
$this->_ci->load->model('education/Lehrveranstaltung_model', 'LehrveranstaltungModel');
|
$this->_ci->load->model('education/Lehrveranstaltung_model', 'LehrveranstaltungModel');
|
||||||
|
|
||||||
$this->_ci->load->library('VariableLib', ['uid' => $this->_uid]);
|
$this->_ci->load->library('VariableLib', ['uid' => $this->_uid]);
|
||||||
$this->_ci->load->helper('hlp_document');
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getLETabs()
|
public function getTabs()
|
||||||
{
|
{
|
||||||
$tabs['details'] = array (
|
$tabs['details'] = array (
|
||||||
'title' => 'Details',
|
'title' => 'Details',
|
||||||
@@ -62,11 +60,6 @@ class Setup extends FHCAPI_Controller
|
|||||||
'component' => absoluteJsImportUrl('public/js/components/LVVerwaltung/Tabs/Lektor.js'),
|
'component' => absoluteJsImportUrl('public/js/components/LVVerwaltung/Tabs/Lektor.js'),
|
||||||
'config' => []
|
'config' => []
|
||||||
);
|
);
|
||||||
$tabs['termine'] = array (
|
|
||||||
'title' => 'Termine',
|
|
||||||
'component' => APP_ROOT . 'public/js/components/LVVerwaltung/Tabs/Termine.js',
|
|
||||||
'config' => []
|
|
||||||
);
|
|
||||||
$tabs['notiz'] = array (
|
$tabs['notiz'] = array (
|
||||||
'title' => 'Notizen',
|
'title' => 'Notizen',
|
||||||
'component' => absoluteJsImportUrl('public/js/components/LVVerwaltung/Tabs/Notiz.js'),
|
'component' => absoluteJsImportUrl('public/js/components/LVVerwaltung/Tabs/Notiz.js'),
|
||||||
@@ -75,28 +68,6 @@ class Setup extends FHCAPI_Controller
|
|||||||
$this->terminateWithSuccess($tabs);
|
$this->terminateWithSuccess($tabs);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getLVTabs()
|
|
||||||
{
|
|
||||||
$tabs['termine'] = array (
|
|
||||||
'title' => 'Termine',
|
|
||||||
'component' => APP_ROOT . 'public/js/components/LVVerwaltung/Tabs/LVTermine.js',
|
|
||||||
'config' => []
|
|
||||||
);
|
|
||||||
$tabs['noten'] = array (
|
|
||||||
'title' => 'Noten',
|
|
||||||
'component' => APP_ROOT . 'public/js/components/LVVerwaltung/Tabs/Noten.js',
|
|
||||||
'config' => [
|
|
||||||
'usePoints' => defined('CIS_GESAMTNOTE_PUNKTE') && CIS_GESAMTNOTE_PUNKTE,
|
|
||||||
'edit' => 'both', // Possible values: both|header|inline
|
|
||||||
'delete' => 'inline', // Possible values: both|header|inline
|
|
||||||
'documents' => 'inline', // Possible values: both|header|inline
|
|
||||||
'documentslist' => gradesDocumentsList(),
|
|
||||||
'semesterSelect' => false
|
|
||||||
]
|
|
||||||
);
|
|
||||||
$this->terminateWithSuccess($tabs);
|
|
||||||
}
|
|
||||||
|
|
||||||
public function getStudiensemester()
|
public function getStudiensemester()
|
||||||
{
|
{
|
||||||
$this->_ci->load->model('organisation/Studiensemester_model', 'StudiensemesterModel');
|
$this->_ci->load->model('organisation/Studiensemester_model', 'StudiensemesterModel');
|
||||||
|
|||||||
@@ -25,25 +25,7 @@ class StgTree extends FHCAPI_Controller
|
|||||||
return $this->_outputAuthError([$method => ['admin:r', 'assistenz:r']]);
|
return $this->_outputAuthError([$method => ['admin:r', 'assistenz:r']]);
|
||||||
}
|
}
|
||||||
|
|
||||||
$count = count($params);
|
return $this->getStudiengang($method);
|
||||||
if (!$count)
|
|
||||||
return $this->getStudiengang($method);
|
|
||||||
|
|
||||||
if ($count == 1) {
|
|
||||||
if (is_numeric($params[0]))
|
|
||||||
return $this->getSemester($method, $params[0]);
|
|
||||||
else
|
|
||||||
return $this->getStudiengang($method, $params[0]);
|
|
||||||
}
|
|
||||||
if ($count == 2) {
|
|
||||||
if (is_numeric($params[0]))
|
|
||||||
return $this->getVerband($method, $params[0], $params[1]);
|
|
||||||
else
|
|
||||||
return $this->getSemester($method, $params[1], $params[0]);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
show_404();
|
show_404();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -82,27 +64,16 @@ class StgTree extends FHCAPI_Controller
|
|||||||
$this->terminateWithSuccess($list);
|
$this->terminateWithSuccess($list);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected function getStudiengang($studiengang_kz, $org_form = null)
|
protected function getStudiengang($studiengang_kz)
|
||||||
{
|
{
|
||||||
$link = $studiengang_kz . '/';
|
$link = $studiengang_kz . '/';
|
||||||
if ($org_form !== null)
|
|
||||||
$link .= $org_form . '/';
|
|
||||||
|
|
||||||
$this->StudiengangModel->addJoin('public.tbl_lehrverband v', 'studiengang_kz');
|
$this->StudiengangModel->addJoin('public.tbl_lehrverband v', 'studiengang_kz');
|
||||||
|
|
||||||
$this->StudiengangModel->addDistinct();
|
$this->StudiengangModel->addDistinct();
|
||||||
$this->StudiengangModel->addSelect("CONCAT(" . $this->StudiengangModel->escape($link) . ", semester) AS link", false);
|
$this->StudiengangModel->addSelect("CONCAT(" . $this->StudiengangModel->escape($link) . ", semester) AS link", false);
|
||||||
$this->StudiengangModel->addSelect("CONCAT(
|
$this->StudiengangModel->addSelect("CONCAT(UPPER(CONCAT(typ, kurzbz)), '-', semester, (SELECT CASE WHEN bezeichnung IS NULL OR bezeichnung='' THEN ''::TEXT ELSE CONCAT(' (', bezeichnung, ')') END FROM public.tbl_lehrverband WHERE studiengang_kz=v.studiengang_kz AND semester=v.semester ORDER BY verband, gruppe LIMIT 1)) AS name", false);
|
||||||
UPPER(CONCAT(typ, kurzbz)),
|
$this->StudiengangModel->addSelect("TRUE AS leaf", false);
|
||||||
'-',
|
|
||||||
semester,
|
|
||||||
(
|
|
||||||
SELECT CASE WHEN bezeichnung IS NULL OR bezeichnung='' THEN ''::TEXT ELSE CONCAT(' (', bezeichnung, ')') END
|
|
||||||
FROM public.tbl_lehrverband
|
|
||||||
WHERE studiengang_kz=v.studiengang_kz AND semester=v.semester
|
|
||||||
ORDER BY verband, gruppe LIMIT 1
|
|
||||||
)
|
|
||||||
) AS name", false);
|
|
||||||
|
|
||||||
$this->StudiengangModel->addSelect('semester');
|
$this->StudiengangModel->addSelect('semester');
|
||||||
$this->StudiengangModel->addSelect($this->StudiengangModel->escape($studiengang_kz) . '::integer AS stg_kz', false);
|
$this->StudiengangModel->addSelect($this->StudiengangModel->escape($studiengang_kz) . '::integer AS stg_kz', false);
|
||||||
@@ -140,115 +111,6 @@ class StgTree extends FHCAPI_Controller
|
|||||||
$list = array_merge($list, $result);
|
$list = array_merge($list, $result);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
$this->terminateWithSuccess($list);
|
|
||||||
}
|
|
||||||
|
|
||||||
protected function getSemester($studiengang_kz, $semester, $org_form = null)
|
|
||||||
{
|
|
||||||
$link = $studiengang_kz . '/';
|
|
||||||
if ($org_form !== null)
|
|
||||||
$link .= $org_form . '/';
|
|
||||||
$link .= $semester . '/';
|
|
||||||
|
|
||||||
|
|
||||||
$this->load->model('organisation/Gruppe_model', 'GruppeModel');
|
|
||||||
|
|
||||||
$this->GruppeModel->addDistinct();
|
|
||||||
$this->GruppeModel->addSelect("CONCAT(" . $this->GruppeModel->escape($link . 'grp/') . ", gruppe_kurzbz) AS link", false);
|
|
||||||
$this->GruppeModel->addSelect("CONCAT(gruppe_kurzbz, ' (', bezeichnung, ')') AS name", false);
|
|
||||||
$this->GruppeModel->addSelect("TRUE AS leaf", false);
|
|
||||||
|
|
||||||
$this->GruppeModel->addSelect('sort');
|
|
||||||
$this->GruppeModel->addSelect('gruppe_kurzbz');
|
|
||||||
$this->GruppeModel->addSelect($this->GruppeModel->escape($studiengang_kz) . '::integer AS stg_kz', false);
|
|
||||||
|
|
||||||
$this->GruppeModel->addOrder('sort');
|
|
||||||
$this->GruppeModel->addOrder('gruppe_kurzbz');
|
|
||||||
|
|
||||||
$where = [
|
|
||||||
'studiengang_kz' => $studiengang_kz,
|
|
||||||
'semester' => $semester,
|
|
||||||
'lehre' => true,
|
|
||||||
'sichtbar' => true,
|
|
||||||
'aktiv' => true,
|
|
||||||
'direktinskription' => false
|
|
||||||
];
|
|
||||||
|
|
||||||
if ($org_form !== null)
|
|
||||||
$where['orgform_kurzbz'] = $org_form;
|
|
||||||
|
|
||||||
$result = $this->GruppeModel->loadWhere($where);
|
|
||||||
|
|
||||||
$list = $this->getDataOrTerminateWithError($result);
|
|
||||||
|
|
||||||
$this->StudiengangModel->addJoin('public.tbl_lehrverband v', 'studiengang_kz');
|
|
||||||
|
|
||||||
$this->StudiengangModel->addSelect("CONCAT(" . $this->StudiengangModel->escape($link) . ", verband) AS link", false);
|
|
||||||
$this->StudiengangModel->addSelect("CONCAT(UPPER(CONCAT(typ, kurzbz)), '-', semester, verband, (SELECT CASE WHEN bezeichnung IS NULL OR bezeichnung='' THEN ''::TEXT ELSE CONCAT(' (', bezeichnung, ')') END FROM public.tbl_lehrverband WHERE studiengang_kz=v.studiengang_kz AND semester=v.semester AND verband=v.verband ORDER BY gruppe LIMIT 1)) AS name", false);
|
|
||||||
$this->StudiengangModel->addSelect("CASE WHEN MAX(gruppe)='' OR MAX(gruppe)=' ' THEN TRUE ELSE FALSE END AS leaf");
|
|
||||||
|
|
||||||
$this->StudiengangModel->addSelect($this->StudiengangModel->escape($semester) . ' AS semester');
|
|
||||||
$this->StudiengangModel->addSelect('verband');
|
|
||||||
$this->StudiengangModel->addSelect($this->StudiengangModel->escape($studiengang_kz) . '::integer AS stg_kz', false);
|
|
||||||
|
|
||||||
$this->StudiengangModel->addOrder('verband');
|
|
||||||
|
|
||||||
$this->StudiengangModel->addGroupBy('link, name, verband');
|
|
||||||
|
|
||||||
$where = [
|
|
||||||
'v.studiengang_kz' => $studiengang_kz,
|
|
||||||
'v.semester' => $semester,
|
|
||||||
'v.verband !=' => '',
|
|
||||||
'v.aktiv' => true
|
|
||||||
];
|
|
||||||
|
|
||||||
if ($org_form !== null && $semester) // NOTE(chris): on semester 0 show all?
|
|
||||||
$where['v.orgform_kurzbz'] = $org_form;
|
|
||||||
|
|
||||||
$result = $this->StudiengangModel->loadWhere($where);
|
|
||||||
$result = $this->getDataOrTerminateWithError($result);
|
|
||||||
|
|
||||||
$list = array_merge($list, $result);
|
|
||||||
|
|
||||||
$this->terminateWithSuccess($list);
|
|
||||||
}
|
|
||||||
|
|
||||||
protected function getVerband($studiengang_kz, $semester, $verband, $org_form = null)
|
|
||||||
{
|
|
||||||
$link = $studiengang_kz . '/';
|
|
||||||
if ($org_form !== null)
|
|
||||||
$link .= $org_form . '/';
|
|
||||||
$link .= $semester . '/'. $verband . '/';
|
|
||||||
|
|
||||||
|
|
||||||
$this->StudiengangModel->addJoin('public.tbl_lehrverband v', 'studiengang_kz');
|
|
||||||
|
|
||||||
$this->StudiengangModel->addDistinct();
|
|
||||||
$this->StudiengangModel->addSelect("CONCAT(" . $this->StudiengangModel->escape($link) . ", gruppe) AS link", false);
|
|
||||||
$this->StudiengangModel->addSelect("CONCAT(UPPER(CONCAT(typ, kurzbz)), '-', semester, verband, gruppe, (SELECT CASE WHEN bezeichnung IS NULL OR bezeichnung='' THEN ''::TEXT ELSE CONCAT(' (', bezeichnung, ')') END FROM public.tbl_lehrverband WHERE studiengang_kz=v.studiengang_kz AND semester=v.semester AND verband=v.verband AND gruppe=v.gruppe ORDER BY gruppe LIMIT 1)) AS name", false);
|
|
||||||
$this->StudiengangModel->addSelect("TRUE AS leaf", false);
|
|
||||||
|
|
||||||
$this->StudiengangModel->addSelect('v.semester');
|
|
||||||
$this->StudiengangModel->addSelect('v.verband');
|
|
||||||
$this->StudiengangModel->addSelect('gruppe');
|
|
||||||
$this->StudiengangModel->addSelect($this->StudiengangModel->escape($studiengang_kz) . '::integer AS stg_kz', false);
|
|
||||||
|
|
||||||
$this->StudiengangModel->addOrder('gruppe');
|
|
||||||
|
|
||||||
$where = [
|
|
||||||
'v.studiengang_kz' => $studiengang_kz,
|
|
||||||
'v.semester' => $semester,
|
|
||||||
'v.verband' => $verband,
|
|
||||||
'v.gruppe !=' => '',
|
|
||||||
'v.aktiv' => true
|
|
||||||
];
|
|
||||||
|
|
||||||
if ($org_form !== null && $semester)
|
|
||||||
$where['v.orgform_kurzbz'] = $org_form;
|
|
||||||
|
|
||||||
$result = $this->StudiengangModel->loadWhere($where);
|
|
||||||
|
|
||||||
$list = $this->getDataOrTerminateWithError($result);
|
|
||||||
|
|
||||||
$this->terminateWithSuccess($list);
|
$this->terminateWithSuccess($list);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -42,14 +42,22 @@ class Messages extends FHCAPI_Controller
|
|||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getMessages($id, $type_id, $size, $page)
|
public function getMessages($id, $type_id, $size=null, $page=null)
|
||||||
{
|
{
|
||||||
if($type_id != 'person_id'){
|
if($type_id != 'person_id'){
|
||||||
$id = $this->_getPersonId($id, $type_id);
|
$id = $this->_getPersonId($id, $type_id);
|
||||||
}
|
}
|
||||||
|
|
||||||
$offset = $size * ($page - 1);
|
if(!(is_null($size) && is_null($page)))
|
||||||
$limit = $size;
|
{
|
||||||
|
$offset = $size * ($page - 1);
|
||||||
|
$limit = $size;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
$offset = null;
|
||||||
|
$limit = null;
|
||||||
|
}
|
||||||
|
|
||||||
$result = $this->MessageModel->getMessagesForTable($id, $offset, $limit);
|
$result = $this->MessageModel->getMessagesForTable($id, $offset, $limit);
|
||||||
|
|
||||||
|
|||||||
@@ -301,7 +301,6 @@ class Config extends FHCAPI_Controller
|
|||||||
|
|
||||||
public function student()
|
public function student()
|
||||||
{
|
{
|
||||||
$this->load->helper('hlp_document');
|
|
||||||
$result = [];
|
$result = [];
|
||||||
$config = $this->config->item('tabs');
|
$config = $this->config->item('tabs');
|
||||||
|
|
||||||
@@ -377,9 +376,9 @@ class Config extends FHCAPI_Controller
|
|||||||
'config' => [
|
'config' => [
|
||||||
'usePoints' => defined('CIS_GESAMTNOTE_PUNKTE') && CIS_GESAMTNOTE_PUNKTE,
|
'usePoints' => defined('CIS_GESAMTNOTE_PUNKTE') && CIS_GESAMTNOTE_PUNKTE,
|
||||||
'edit' => 'both', // Possible values: both|header|inline
|
'edit' => 'both', // Possible values: both|header|inline
|
||||||
'delete' => 'inline', // Possible values: both|header|inline
|
'delete' => 'both', // Possible values: both|header|inline
|
||||||
'documents' => 'inline', // Possible values: both|header|inline
|
'documents' => 'both', // Possible values: both|header|inline
|
||||||
'documentslist' => gradesDocumentsList()
|
'documentslist' => $this->gradesDocumentsList()
|
||||||
]
|
]
|
||||||
];
|
];
|
||||||
|
|
||||||
@@ -623,6 +622,188 @@ class Config extends FHCAPI_Controller
|
|||||||
] + $this->kontoColumns();
|
] + $this->kontoColumns();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Helper function to generate the default documentslist config for the
|
||||||
|
* grades tab.
|
||||||
|
*
|
||||||
|
* The resulting array consists of elements which are associative arrays
|
||||||
|
* that can have the following entries:
|
||||||
|
* title (required) on the first level this can be HTML code.
|
||||||
|
* permissioncheck (optional) an URL to an FHCAPI endpoint which returns
|
||||||
|
* true or false.
|
||||||
|
* link (optional) an URL that will be called if "action" and
|
||||||
|
* "children" are not defined.
|
||||||
|
* action (optional) an associative array that describes an
|
||||||
|
* POST action that will be called if "children" is
|
||||||
|
* not defined.
|
||||||
|
* It can have the following entries:
|
||||||
|
* - url (required) an URL to an FHCAPI endpoint.
|
||||||
|
* - post (optional) an associative array with the POST data to
|
||||||
|
* be sent.
|
||||||
|
* - response (optional) a string that will be displayed on success.
|
||||||
|
* children (optional) an array of child elements
|
||||||
|
*
|
||||||
|
* All strings that start with { and end with } in the URLs and the
|
||||||
|
* actions post parameter will be replaced with the corresponding
|
||||||
|
* attribute of the current dataset (e.G: {uid} will be replaced with the
|
||||||
|
* uid of the current dataset)
|
||||||
|
*
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
protected function gradesDocumentsList()
|
||||||
|
{
|
||||||
|
$permissioncheck = site_url("api/frontend/v1/documents/permissionAlternativeFormat/{studiengang_kz}");
|
||||||
|
|
||||||
|
$title_ger = $this->p->t("global", "deutsch");
|
||||||
|
$title_eng = $this->p->t("global", "englisch");
|
||||||
|
$title_ff = $this->p->t("stv", "document_certificate");
|
||||||
|
$title_lv = $this->p->t("stv", "document_coursecertificate");
|
||||||
|
|
||||||
|
$link_ff = "documents/export/" .
|
||||||
|
"zertifikat.rdf.php/" .
|
||||||
|
"Zertifikat" .
|
||||||
|
"?stg_kz={studiengang_kz_lv}" .
|
||||||
|
"&uid={uid}" .
|
||||||
|
"&ss={studiensemester_kurzbz}" .
|
||||||
|
"&lvid={lehrveranstaltung_id}";
|
||||||
|
$link_lv_ger = "documents/export/" .
|
||||||
|
"lehrveranstaltungszeugnis.rdf.php/" .
|
||||||
|
"LVZeugnis" .
|
||||||
|
"?stg_kz={studiengang_kz}" .
|
||||||
|
"&uid={uid}" .
|
||||||
|
"&ss={studiensemester_kurzbz}" .
|
||||||
|
"&lvid={lehrveranstaltung_id}";
|
||||||
|
$link_lv_eng = "documents/export/" .
|
||||||
|
"lehrveranstaltungszeugnis.rdf.php/" .
|
||||||
|
"LVZeugnisEng" .
|
||||||
|
"?stg_kz={studiengang_kz}" .
|
||||||
|
"&uid={uid}" .
|
||||||
|
"&ss={studiensemester_kurzbz}" .
|
||||||
|
"&lvid={lehrveranstaltung_id}";
|
||||||
|
|
||||||
|
$archive_url = "api/frontend/v1/documents/archiveSigned";
|
||||||
|
$archive_response = $this->p->t("stv", "document_signed_and_archived");
|
||||||
|
$archive_post_ff = [
|
||||||
|
"xml" => "zertifikat.rdf.php",
|
||||||
|
"xsl" => "Zertifikat",
|
||||||
|
"stg_kz" => "{studiengang_kz_lv}",
|
||||||
|
"uid" => "{uid}",
|
||||||
|
"ss" => "{studiensemester_kurzbz}",
|
||||||
|
"lvid" => "{lehrveranstaltung_id}"
|
||||||
|
];
|
||||||
|
$archive_post_lv_ger = [
|
||||||
|
"xml" => "lehrveranstaltungszeugnis.rdf.php",
|
||||||
|
"xsl" => "LVZeugnis",
|
||||||
|
"stg_kz" => "{studiengang_kz}",
|
||||||
|
"uid" => "{uid}",
|
||||||
|
"ss" => "{studiensemester_kurzbz}",
|
||||||
|
"lvid" => "{lehrveranstaltung_id}"
|
||||||
|
];
|
||||||
|
$archive_post_lv_eng = [
|
||||||
|
"xml" => "lehrveranstaltungszeugnis.rdf.php",
|
||||||
|
"xsl" => "LVZeugnisEng",
|
||||||
|
"stg_kz" => "{studiengang_kz}",
|
||||||
|
"uid" => "{uid}",
|
||||||
|
"ss" => "{studiensemester_kurzbz}",
|
||||||
|
"lvid" => "{lehrveranstaltung_id}"
|
||||||
|
];
|
||||||
|
|
||||||
|
$list = [
|
||||||
|
[
|
||||||
|
'title' => '<i class="fa fa-download" title="' . $this->p->t("stv", "document_download") . '"></i>',
|
||||||
|
'children' => [
|
||||||
|
[
|
||||||
|
'title' => $title_ff,
|
||||||
|
'link' => site_url($link_ff)
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'title' => $title_lv,
|
||||||
|
'children' => [
|
||||||
|
[
|
||||||
|
'title' => $title_ger,
|
||||||
|
'link' => site_url($link_lv_ger),
|
||||||
|
'children' => [
|
||||||
|
[
|
||||||
|
'title' => 'PDF',
|
||||||
|
'permissioncheck' => $permissioncheck,
|
||||||
|
'link' => site_url($link_lv_ger)
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'title' => 'DOC',
|
||||||
|
'permissioncheck' => $permissioncheck,
|
||||||
|
'link' => site_url($link_lv_ger . "&output=doc")
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'title' => 'ODT',
|
||||||
|
'permissioncheck' => $permissioncheck,
|
||||||
|
'link' => site_url($link_lv_ger . "&output=odt")
|
||||||
|
]
|
||||||
|
]
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'title' => $title_eng,
|
||||||
|
'link' => site_url($link_lv_eng),
|
||||||
|
'children' => [
|
||||||
|
[
|
||||||
|
'title' => 'PDF',
|
||||||
|
'permissioncheck' => $permissioncheck,
|
||||||
|
'link' => site_url($link_lv_eng)
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'title' => 'DOC',
|
||||||
|
'permissioncheck' => $permissioncheck,
|
||||||
|
'link' => site_url($link_lv_eng . "&output=doc")
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'title' => 'ODT',
|
||||||
|
'permissioncheck' => $permissioncheck,
|
||||||
|
'link' => site_url($link_lv_eng . "&output=odt")
|
||||||
|
]
|
||||||
|
]
|
||||||
|
]
|
||||||
|
]
|
||||||
|
]
|
||||||
|
]
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'title' => '<i class="fas fa-archive" title="' . $this->p->t("stv", "document_archive") . '"></i>',
|
||||||
|
'children' => [
|
||||||
|
[
|
||||||
|
'title' => $title_ff,
|
||||||
|
'action' => [
|
||||||
|
'url' => site_url($archive_url),
|
||||||
|
'post' => $archive_post_ff,
|
||||||
|
'response' => $archive_response
|
||||||
|
]
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'title' => $title_lv,
|
||||||
|
'children' => [
|
||||||
|
[
|
||||||
|
'title' => $title_ger,
|
||||||
|
'action' => [
|
||||||
|
'url' => site_url($archive_url),
|
||||||
|
'post' => $archive_post_lv_ger,
|
||||||
|
'response' => $archive_response
|
||||||
|
]
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'title' => $title_eng,
|
||||||
|
'action' => [
|
||||||
|
'url' => site_url($archive_url),
|
||||||
|
'post' => $archive_post_lv_eng,
|
||||||
|
'response' => $archive_response
|
||||||
|
]
|
||||||
|
]
|
||||||
|
]
|
||||||
|
]
|
||||||
|
]
|
||||||
|
]
|
||||||
|
];
|
||||||
|
|
||||||
|
return $list;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Sort tab list
|
* Sort tab list
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -78,52 +78,32 @@ class Dokumente extends FHCAPI_Controller
|
|||||||
$this->terminateWithError($this->p->t('ui', 'errorMissingValue', ['value' => 'Studiengang_kz']), self::ERROR_TYPE_GENERAL);
|
$this->terminateWithError($this->p->t('ui', 'errorMissingValue', ['value' => 'Studiengang_kz']), self::ERROR_TYPE_GENERAL);
|
||||||
|
|
||||||
$resultPreDoc = $this->_getPrestudentDokumente($prestudent_id);
|
$resultPreDoc = $this->_getPrestudentDokumente($prestudent_id);
|
||||||
|
|
||||||
$arrayAccepted = [];
|
|
||||||
$person_id = $this->_getPersonId($prestudent_id);
|
$person_id = $this->_getPersonId($prestudent_id);
|
||||||
|
|
||||||
$docNames = array_map(function ($item) {
|
$mergedArray = [];
|
||||||
return $item->dokument_kurzbz;
|
|
||||||
}, $resultPreDoc);
|
|
||||||
|
|
||||||
foreach($docNames as $doc)
|
foreach ($resultPreDoc as $pre)
|
||||||
{
|
{
|
||||||
$result = $this->AkteModel->getAktenFAS($person_id, $doc, $studiengang_kz, $prestudent_id, true);
|
$result = $this->AkteModel->getAktenFAS($person_id, $pre->dokument_kurzbz, $studiengang_kz, $prestudent_id, true);
|
||||||
|
|
||||||
if (isError($result))
|
if (isError($result))
|
||||||
{
|
|
||||||
return $this->terminateWithError($result, self::ERROR_TYPE_GENERAL);
|
return $this->terminateWithError($result, self::ERROR_TYPE_GENERAL);
|
||||||
}
|
|
||||||
if (hasData($result))
|
if (hasData($result))
|
||||||
{
|
{
|
||||||
$data = getData($result);
|
foreach (getData($result) as $doc)
|
||||||
foreach ($data as $value)
|
|
||||||
{
|
{
|
||||||
array_push($arrayAccepted, $value);
|
$merged = clone $doc;
|
||||||
|
$merged->docdatum = $pre->docdatum;
|
||||||
|
$merged->insertvonma = $pre->insertvonma;
|
||||||
|
$merged->bezeichnung = $pre->bezeichnung;
|
||||||
|
$mergedArray[] = $merged;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
else
|
||||||
|
{
|
||||||
//Mapping with document_kurzbz
|
$mergedArray[] = $pre;
|
||||||
$preDocMap = [];
|
|
||||||
foreach ($resultPreDoc as $pre) {
|
|
||||||
$preDocMap[$pre->dokument_kurzbz] = $pre;
|
|
||||||
}
|
|
||||||
|
|
||||||
$mergedArray = [];
|
|
||||||
foreach ($arrayAccepted as $doc) {
|
|
||||||
$merged = clone $doc;
|
|
||||||
|
|
||||||
if (isset($preDocMap[$doc->dokument_kurzbz])) {
|
|
||||||
$merged->docdatum = $preDocMap[$doc->dokument_kurzbz]->docdatum;
|
|
||||||
$merged->insertvonma = $preDocMap[$doc->dokument_kurzbz]->insertvonma;
|
|
||||||
$merged->bezeichnung = $preDocMap[$doc->dokument_kurzbz]->bezeichnung;
|
|
||||||
} else {
|
|
||||||
$merged->akzeptiertdatum = null;
|
|
||||||
$merged->akzeptiertvon = null;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
$mergedArray[] = $merged;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
$this->terminateWithSuccess($mergedArray);
|
$this->terminateWithSuccess($mergedArray);
|
||||||
|
|||||||
@@ -48,7 +48,8 @@ class Konto extends FHCAPI_Controller
|
|||||||
|
|
||||||
// Load language phrases
|
// Load language phrases
|
||||||
$this->loadPhrases([
|
$this->loadPhrases([
|
||||||
'konto'
|
'konto',
|
||||||
|
'lehre'
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -112,7 +113,7 @@ class Konto extends FHCAPI_Controller
|
|||||||
*
|
*
|
||||||
* @return void
|
* @return void
|
||||||
*/
|
*/
|
||||||
public function getBuchungstypen()
|
public function getBuchungstypen($studiensemester_kurzbz = null)
|
||||||
{
|
{
|
||||||
$this->load->model('crm/Buchungstyp_model', 'BuchungstypModel');
|
$this->load->model('crm/Buchungstyp_model', 'BuchungstypModel');
|
||||||
|
|
||||||
@@ -122,6 +123,7 @@ class Konto extends FHCAPI_Controller
|
|||||||
|
|
||||||
$data = $this->getDataOrTerminateWithError($result);
|
$data = $this->getDataOrTerminateWithError($result);
|
||||||
|
|
||||||
|
$this->_getOEHBeitrag($data, $studiensemester_kurzbz);
|
||||||
$this->terminateWithSuccess($data);
|
$this->terminateWithSuccess($data);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -494,4 +496,43 @@ class Konto extends FHCAPI_Controller
|
|||||||
|
|
||||||
$this->terminateWithSuccess();
|
$this->terminateWithSuccess();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private function _getOEHBeitrag(&$data, $studiensemester_kurzbz = null)
|
||||||
|
{
|
||||||
|
if (is_null($studiensemester_kurzbz))
|
||||||
|
{
|
||||||
|
$this->load->library('VariableLib', ['uid' => getAuthUID()]);
|
||||||
|
$studiensemester_akt = $this->variablelib->getVar('semester_aktuell');
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
$this->load->model('organisation/Studiensemester_model', 'StudiensemesterModel');
|
||||||
|
if ($this->StudiensemesterModel->isValidStudiensemester($studiensemester_kurzbz))
|
||||||
|
$studiensemester_akt = $studiensemester_kurzbz;
|
||||||
|
else
|
||||||
|
$this->terminateWithError($this->p->t('lehre', 'error_noStudiensemester'));
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->load->model('codex/Oehbeitrag_model', 'OehbeitragModel');
|
||||||
|
$oehBeitrag = $this->OehbeitragModel->getByStudiensemester($studiensemester_akt);
|
||||||
|
|
||||||
|
$oehStandardbetrag = null;
|
||||||
|
if (hasData($oehBeitrag))
|
||||||
|
{
|
||||||
|
$oeh = getData($oehBeitrag)[0];
|
||||||
|
$summe = ($oeh->studierendenbeitrag + $oeh->versicherung) * -1;
|
||||||
|
$oehStandardbetrag = number_format((float)$summe, 2, '.', '');
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($oehStandardbetrag !== null)
|
||||||
|
{
|
||||||
|
$data = array_map(function ($buchungstyp) use ($oehStandardbetrag) {
|
||||||
|
if (isset($buchungstyp->buchungstyp_kurzbz) && (strtolower($buchungstyp->buchungstyp_kurzbz) === 'oeh'))
|
||||||
|
{
|
||||||
|
$buchungstyp->standardbetrag = $oehStandardbetrag;
|
||||||
|
}
|
||||||
|
return $buchungstyp;
|
||||||
|
}, $data);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -34,7 +34,7 @@ class LvTermine extends FHCAPI_Controller
|
|||||||
|
|
||||||
//TODO Build own lib or combine with Controller Stundenplan.php
|
//TODO Build own lib or combine with Controller Stundenplan.php
|
||||||
//here use of logic of Stundenplan.php, extended with parameters uid, grouping, and used dbTable
|
//here use of logic of Stundenplan.php, extended with parameters uid, grouping, and used dbTable
|
||||||
public function getStundenplan($uid, $start_date = null, $end_date = null, $dbStundenplanTable = "stundenplan", $groupConsecutiveHours = false)
|
public function getStundenplan($uid, $start_date = null, $end_date = null, $groupConsecutiveHours = false, $dbStundenplanTable = "stundenplan")
|
||||||
{
|
{
|
||||||
$student_uid = $uid;
|
$student_uid = $uid;
|
||||||
$semester_range = $this->studienSemesterErmitteln($start_date, $end_date);
|
$semester_range = $this->studienSemesterErmitteln($start_date, $end_date);
|
||||||
@@ -80,6 +80,13 @@ class LvTermine extends FHCAPI_Controller
|
|||||||
|
|
||||||
$stundenplan_data = $this->getDataOrTerminateWithError($stundenplan_data) ?? [];
|
$stundenplan_data = $this->getDataOrTerminateWithError($stundenplan_data) ?? [];
|
||||||
$this->terminateWithSuccess($stundenplan_data);
|
$this->terminateWithSuccess($stundenplan_data);
|
||||||
|
|
||||||
|
$this->expand_object_information($stundenplan_data);
|
||||||
|
|
||||||
|
$this->returnObj['$stundenplan_query'] = $stundenplan_query;
|
||||||
|
$this->returnObj['$student_lehrverband'] = $student_lehrverband;
|
||||||
|
$this->returnObj['$benutzer_gruppen'] = $benutzer_gruppen;
|
||||||
|
$this->terminateWithSuccess($stundenplan_data);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getStudiensemester()
|
public function getStudiensemester()
|
||||||
|
|||||||
@@ -25,9 +25,6 @@ if (! defined('BASEPATH')) exit('No direct script access allowed');
|
|||||||
*/
|
*/
|
||||||
class Students extends FHCAPI_Controller
|
class Students extends FHCAPI_Controller
|
||||||
{
|
{
|
||||||
private $allowedStgs = [];
|
|
||||||
|
|
||||||
|
|
||||||
public function __construct()
|
public function __construct()
|
||||||
{
|
{
|
||||||
$permissions = [];
|
$permissions = [];
|
||||||
@@ -35,16 +32,17 @@ class Students extends FHCAPI_Controller
|
|||||||
$permissions[$router->method] = ['admin:r', 'assistenz:r'];
|
$permissions[$router->method] = ['admin:r', 'assistenz:r'];
|
||||||
parent::__construct($permissions);
|
parent::__construct($permissions);
|
||||||
|
|
||||||
$this->allowedStgs = $this->permissionlib->getSTG_isEntitledFor('admin') ?: [];
|
$allowedStgs = $this->permissionlib->getSTG_isEntitledFor('admin') ?: [];
|
||||||
$this->allowedStgs = array_merge($this->allowedStgs, $this->permissionlib->getSTG_isEntitledFor('assistenz') ?: []);
|
$allowedStgs = array_merge($allowedStgs, $this->permissionlib->getSTG_isEntitledFor('assistenz') ?: []);
|
||||||
|
|
||||||
if (!$this->allowedStgs) {
|
if (!$allowedStgs) {
|
||||||
$this->_outputAuthError([$router->method => ['admin:r', 'assistenz:r']]);
|
$this->_outputAuthError([$router->method => ['admin:r', 'assistenz:r']]);
|
||||||
exit;
|
exit;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Load Libraries
|
// Load Libraries
|
||||||
$this->load->library('PhrasesLib');
|
$this->load->library('PhrasesLib');
|
||||||
|
$this->load->library('stv/StudentListLib', ['allowedStgs' => $allowedStgs]);
|
||||||
$this->loadPhrases(
|
$this->loadPhrases(
|
||||||
array(
|
array(
|
||||||
'lehre'
|
'lehre'
|
||||||
@@ -111,23 +109,19 @@ class Students extends FHCAPI_Controller
|
|||||||
]);
|
]);
|
||||||
|
|
||||||
|
|
||||||
$this->load->model('crm/Prestudent_model', 'PrestudentModel');
|
$this->studentlistlib->addJoin(
|
||||||
|
|
||||||
|
|
||||||
$this->PrestudentModel->addJoin(
|
|
||||||
"(
|
"(
|
||||||
SELECT prestudent_id
|
SELECT prestudent_id
|
||||||
FROM public.tbl_prestudentstatus
|
FROM public.tbl_prestudentstatus
|
||||||
WHERE status_kurzbz = 'Incoming'
|
WHERE status_kurzbz = 'Incoming'
|
||||||
AND studiensemester_kurzbz = " . $this->PrestudentModel->escape($studiensemester_kurzbz) . "
|
AND studiensemester_kurzbz = " . $this->PrestudentModel->escape($studiensemester_kurzbz) . "
|
||||||
) test",
|
) test",
|
||||||
"prestudent_id"
|
"prestudent_id",
|
||||||
|
"",
|
||||||
|
"start"
|
||||||
);
|
);
|
||||||
|
|
||||||
|
$this->studentlistlib->addSelect("COALESCE(
|
||||||
$this->prepareQuery($studiensemester_kurzbz);
|
|
||||||
|
|
||||||
$this->PrestudentModel->addSelect("COALESCE(
|
|
||||||
v.semester::text,
|
v.semester::text,
|
||||||
CASE
|
CASE
|
||||||
WHEN pls.status_kurzbz IN ('Aufgenommener', 'Bewerber', 'Wartender', 'interessent')
|
WHEN pls.status_kurzbz IN ('Aufgenommener', 'Bewerber', 'Wartender', 'interessent')
|
||||||
@@ -135,16 +129,13 @@ class Students extends FHCAPI_Controller
|
|||||||
ELSE ''::text
|
ELSE ''::text
|
||||||
END
|
END
|
||||||
) AS semester", false);
|
) AS semester", false);
|
||||||
$this->PrestudentModel->addSelect("COALESCE(v.verband::text, ''::text)");
|
$this->studentlistlib->addSelect("COALESCE(v.verband::text, ''::text) AS verband");
|
||||||
$this->PrestudentModel->addSelect("COALESCE(v.gruppe::text, ''::text)");
|
$this->studentlistlib->addSelect("COALESCE(v.gruppe::text, ''::text) AS gruppe");
|
||||||
|
|
||||||
$this->addSelectPrioRel();
|
|
||||||
|
|
||||||
$this->addFilter($studiensemester_kurzbz);
|
$this->addFilter($studiensemester_kurzbz);
|
||||||
|
|
||||||
|
$result = $this->studentlistlib->execute($studiensemester_kurzbz);
|
||||||
$result = $this->PrestudentModel->load();
|
|
||||||
|
|
||||||
|
|
||||||
$data = $this->getDataOrTerminateWithError($result);
|
$data = $this->getDataOrTerminateWithError($result);
|
||||||
|
|
||||||
@@ -164,10 +155,7 @@ class Students extends FHCAPI_Controller
|
|||||||
]);
|
]);
|
||||||
|
|
||||||
|
|
||||||
$this->load->model('crm/Prestudent_model', 'PrestudentModel');
|
$this->studentlistlib->addJoin(
|
||||||
|
|
||||||
|
|
||||||
$this->PrestudentModel->addJoin(
|
|
||||||
"(
|
"(
|
||||||
SELECT prestudent_id
|
SELECT prestudent_id
|
||||||
FROM bis.tbl_bisio bis
|
FROM bis.tbl_bisio bis
|
||||||
@@ -187,14 +175,12 @@ class Students extends FHCAPI_Controller
|
|||||||
) AND stdsem.studiensemester_kurzbz = " . $this->PrestudentModel->escape($studiensemester_kurzbz) . "
|
) AND stdsem.studiensemester_kurzbz = " . $this->PrestudentModel->escape($studiensemester_kurzbz) . "
|
||||||
GROUP BY prestudent_id
|
GROUP BY prestudent_id
|
||||||
) test",
|
) test",
|
||||||
"prestudent_id"
|
"prestudent_id",
|
||||||
|
"",
|
||||||
|
"start"
|
||||||
);
|
);
|
||||||
|
|
||||||
|
$this->studentlistlib->addSelect("COALESCE(
|
||||||
$this->prepareQuery($studiensemester_kurzbz);
|
|
||||||
|
|
||||||
|
|
||||||
$this->PrestudentModel->addSelect("COALESCE(
|
|
||||||
v.semester::text,
|
v.semester::text,
|
||||||
CASE
|
CASE
|
||||||
WHEN pls.status_kurzbz IN ('Aufgenommener', 'Bewerber', 'Wartender', 'interessent')
|
WHEN pls.status_kurzbz IN ('Aufgenommener', 'Bewerber', 'Wartender', 'interessent')
|
||||||
@@ -202,16 +188,13 @@ class Students extends FHCAPI_Controller
|
|||||||
ELSE ''::text
|
ELSE ''::text
|
||||||
END
|
END
|
||||||
) AS semester", false);
|
) AS semester", false);
|
||||||
$this->PrestudentModel->addSelect("COALESCE(v.verband::text, ''::text)");
|
$this->studentlistlib->addSelect("COALESCE(v.verband::text, ''::text) AS verband");
|
||||||
$this->PrestudentModel->addSelect("COALESCE(v.gruppe::text, ''::text)");
|
$this->studentlistlib->addSelect("COALESCE(v.gruppe::text, ''::text) AS gruppe");
|
||||||
|
|
||||||
$this->addSelectPrioRel();
|
|
||||||
|
|
||||||
$this->addFilter($studiensemester_kurzbz);
|
$this->addFilter($studiensemester_kurzbz);
|
||||||
|
|
||||||
|
$result = $this->studentlistlib->execute($studiensemester_kurzbz);
|
||||||
$result = $this->PrestudentModel->load();
|
|
||||||
|
|
||||||
|
|
||||||
$data = $this->getDataOrTerminateWithError($result);
|
$data = $this->getDataOrTerminateWithError($result);
|
||||||
|
|
||||||
@@ -231,23 +214,18 @@ class Students extends FHCAPI_Controller
|
|||||||
]);
|
]);
|
||||||
|
|
||||||
|
|
||||||
$this->load->model('crm/Prestudent_model', 'PrestudentModel');
|
$this->studentlistlib->addJoin(
|
||||||
|
|
||||||
|
|
||||||
$this->PrestudentModel->addJoin(
|
|
||||||
"(
|
"(
|
||||||
SELECT prestudent_id
|
SELECT prestudent_id
|
||||||
FROM bis.tbl_mobilitaet
|
FROM bis.tbl_mobilitaet
|
||||||
WHERE studiensemester_kurzbz = " . $this->PrestudentModel->escape($studiensemester_kurzbz) . "
|
WHERE studiensemester_kurzbz = " . $this->PrestudentModel->escape($studiensemester_kurzbz) . "
|
||||||
) bis",
|
) bis",
|
||||||
"prestudent_id"
|
"prestudent_id",
|
||||||
|
"",
|
||||||
|
"start"
|
||||||
);
|
);
|
||||||
|
|
||||||
|
$this->studentlistlib->addSelect("COALESCE(
|
||||||
$this->prepareQuery($studiensemester_kurzbz);
|
|
||||||
|
|
||||||
|
|
||||||
$this->PrestudentModel->addSelect("COALESCE(
|
|
||||||
v.semester::text,
|
v.semester::text,
|
||||||
CASE
|
CASE
|
||||||
WHEN pls.status_kurzbz IN ('Aufgenommener', 'Bewerber', 'Wartender', 'interessent')
|
WHEN pls.status_kurzbz IN ('Aufgenommener', 'Bewerber', 'Wartender', 'interessent')
|
||||||
@@ -255,16 +233,13 @@ class Students extends FHCAPI_Controller
|
|||||||
ELSE ''::text
|
ELSE ''::text
|
||||||
END
|
END
|
||||||
) AS semester", false);
|
) AS semester", false);
|
||||||
$this->PrestudentModel->addSelect("COALESCE(v.verband::text, ''::text)");
|
$this->studentlistlib->addSelect("COALESCE(v.verband::text, ''::text) AS verband");
|
||||||
$this->PrestudentModel->addSelect("COALESCE(v.gruppe::text, ''::text)");
|
$this->studentlistlib->addSelect("COALESCE(v.gruppe::text, ''::text) AS gruppe");
|
||||||
|
|
||||||
$this->addSelectPrioRel();
|
|
||||||
|
|
||||||
$this->addFilter($studiensemester_kurzbz);
|
$this->addFilter($studiensemester_kurzbz);
|
||||||
|
|
||||||
|
$result = $this->studentlistlib->execute($studiensemester_kurzbz);
|
||||||
$result = $this->PrestudentModel->load();
|
|
||||||
|
|
||||||
|
|
||||||
$data = $this->getDataOrTerminateWithError($result);
|
$data = $this->getDataOrTerminateWithError($result);
|
||||||
|
|
||||||
@@ -313,8 +288,6 @@ class Students extends FHCAPI_Controller
|
|||||||
*/
|
*/
|
||||||
protected function fetchPrestudents($studiengang_kz, $studiensemester_kurzbz = null, $filter = null, $orgform_kurzbz = null)
|
protected function fetchPrestudents($studiengang_kz, $studiensemester_kurzbz = null, $filter = null, $orgform_kurzbz = null)
|
||||||
{
|
{
|
||||||
$this->load->model('crm/Prestudent_model', 'PrestudentModel');
|
|
||||||
|
|
||||||
$stdsemEsc = $studiensemester_kurzbz ? $this->PrestudentModel->escape($studiensemester_kurzbz) : 'NULL';
|
$stdsemEsc = $studiensemester_kurzbz ? $this->PrestudentModel->escape($studiensemester_kurzbz) : 'NULL';
|
||||||
|
|
||||||
$selectRT = "
|
$selectRT = "
|
||||||
@@ -331,38 +304,38 @@ class Students extends FHCAPI_Controller
|
|||||||
AND r.studiensemester_kurzbz=" . $stdsemEsc;
|
AND r.studiensemester_kurzbz=" . $stdsemEsc;
|
||||||
|
|
||||||
|
|
||||||
$where = ['tbl_prestudent.studiengang_kz' => $studiengang_kz];
|
$this->studentlistlib->addWhere('tbl_prestudent.studiengang_kz', $studiengang_kz);
|
||||||
|
|
||||||
if ($orgform_kurzbz) {
|
if ($orgform_kurzbz) {
|
||||||
$where['ps.orgform_kurzbz'] = $orgform_kurzbz;
|
$this->studentlistlib->addWhere('ps.orgform_kurzbz', $orgform_kurzbz);
|
||||||
}
|
}
|
||||||
|
|
||||||
switch ($filter) {
|
switch ($filter) {
|
||||||
case "interessenten":
|
case "interessenten":
|
||||||
$where['ps.status_kurzbz'] = 'Interessent';
|
$this->studentlistlib->addWhere('ps.status_kurzbz', 'Interessent');
|
||||||
break;
|
break;
|
||||||
case "bewerbungnichtabgeschickt":
|
case "bewerbungnichtabgeschickt":
|
||||||
$where['ps.status_kurzbz'] = 'Interessent';
|
$this->studentlistlib->addWhere('ps.status_kurzbz', 'Interessent');
|
||||||
$where['ps.bewerbung_abgeschicktamum'] = null;
|
$this->studentlistlib->addWhere('ps.bewerbung_abgeschicktamum IS NULL');
|
||||||
break;
|
break;
|
||||||
case "bewerbungabgeschickt":
|
case "bewerbungabgeschickt":
|
||||||
$where['ps.status_kurzbz'] = 'Interessent';
|
$this->studentlistlib->addWhere('ps.status_kurzbz', 'Interessent');
|
||||||
$where['ps.bewerbung_abgeschicktamum IS NOT NULL'] = null;
|
$this->studentlistlib->addWhere('ps.bewerbung_abgeschicktamum IS NOT NULL');
|
||||||
$where['ps.bestaetigtam'] = null;
|
$this->studentlistlib->addWhere('ps.bestaetigtam IS NULL');
|
||||||
break;
|
break;
|
||||||
case "statusbestaetigt":
|
case "statusbestaetigt":
|
||||||
$where['ps.status_kurzbz'] = 'Interessent';
|
$this->studentlistlib->addWhere('ps.status_kurzbz', 'Interessent');
|
||||||
$where['ps.bestaetigtam IS NOT NULL'] = null;
|
$this->studentlistlib->addWhere('ps.bestaetigtam IS NOT NULL');
|
||||||
break;
|
break;
|
||||||
case "statusbestaetigtrtnichtangemeldet":
|
case "statusbestaetigtrtnichtangemeldet":
|
||||||
$where['ps.status_kurzbz'] = 'Interessent';
|
$this->studentlistlib->addWhere('ps.status_kurzbz', 'Interessent');
|
||||||
$where['ps.bestaetigtam IS NOT NULL'] = null;
|
$this->studentlistlib->addWhere('ps.bestaetigtam IS NOT NULL');
|
||||||
$this->PrestudentModel->db->where('NOT EXISTS(' . $selectRT . ')', null, false);
|
$this->studentlistlib->addWhere('NOT EXISTS(' . $selectRT . ')', null, false);
|
||||||
break;
|
break;
|
||||||
case "statusbestaetigtrtangemeldet":
|
case "statusbestaetigtrtangemeldet":
|
||||||
$where['ps.status_kurzbz'] = 'Interessent';
|
$this->studentlistlib->addWhere('ps.status_kurzbz', 'Interessent');
|
||||||
$where['ps.bestaetigtam IS NOT NULL'] = null;
|
$this->studentlistlib->addWhere('ps.bestaetigtam IS NOT NULL');
|
||||||
$this->PrestudentModel->db->where('EXISTS(' . $selectRT . ')', null, false);
|
$this->studentlistlib->addWhere('EXISTS(' . $selectRT . ')', null, false);
|
||||||
break;
|
break;
|
||||||
case "zgv":
|
case "zgv":
|
||||||
$this->load->model('organisation/Studiengang_model', 'StudiengangModel');
|
$this->load->model('organisation/Studiengang_model', 'StudiengangModel');
|
||||||
@@ -374,69 +347,69 @@ class Students extends FHCAPI_Controller
|
|||||||
$this->terminateWithSuccess([]);
|
$this->terminateWithSuccess([]);
|
||||||
$stg = current($stg);
|
$stg = current($stg);
|
||||||
|
|
||||||
$where['ps.status_kurzbz'] = 'Interessent';
|
$this->studentlistlib->addWhere('ps.status_kurzbz', 'Interessent');
|
||||||
|
|
||||||
if ($stg->typ == 'm') {
|
if ($stg->typ == 'm') {
|
||||||
$where['zgvmas_code IS NOT NULL'] = null;
|
$this->studentlistlib->addWhere('zgvmas_code IS NOT NULL');
|
||||||
if (defined('ZGV_ERFUELLT_ANZEIGEN') && ZGV_ERFUELLT_ANZEIGEN)
|
if (defined('ZGV_ERFUELLT_ANZEIGEN') && ZGV_ERFUELLT_ANZEIGEN)
|
||||||
$where['zgvmas_erfuellt'] = true;
|
$this->studentlistlib->addWhere('zgvmas_erfuellt', true);
|
||||||
} elseif ($stg->typ == 'p') {
|
} elseif ($stg->typ == 'p') {
|
||||||
$where['zgvdoktor_code IS NOT NULL'] = null;
|
$this->studentlistlib->addWhere('zgvdoktor_code IS NOT NULL');
|
||||||
if (defined('ZGV_DOKTOR_ANZEIGEN') && ZGV_DOKTOR_ANZEIGEN)
|
if (defined('ZGV_DOKTOR_ANZEIGEN') && ZGV_DOKTOR_ANZEIGEN)
|
||||||
$where['zgvdoktor_erfuellt'] = true;
|
$this->studentlistlib->addWhere('zgvdoktor_erfuellt', true);
|
||||||
} else {
|
} else {
|
||||||
$where['zgv_code IS NOT NULL'] = null;
|
$this->studentlistlib->addWhere('zgv_code IS NOT NULL');
|
||||||
if (defined('ZGV_ERFUELLT_ANZEIGEN') && ZGV_ERFUELLT_ANZEIGEN)
|
if (defined('ZGV_ERFUELLT_ANZEIGEN') && ZGV_ERFUELLT_ANZEIGEN)
|
||||||
$where['zgv_erfuellt'] = true;
|
$this->studentlistlib->addWhere('zgv_erfuellt', true);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case "reihungstestangemeldet":
|
case "reihungstestangemeldet":
|
||||||
$where['ps.status_kurzbz'] = 'Interessent';
|
$this->studentlistlib->addWhere('ps.status_kurzbz', 'Interessent');
|
||||||
$this->PrestudentModel->db->where('EXISTS(' . $selectRT . ')', null, false);
|
$this->studentlistlib->addWhere('EXISTS(' . $selectRT . ')', null, false);
|
||||||
break;
|
break;
|
||||||
case "reihungstestnichtangemeldet":
|
case "reihungstestnichtangemeldet":
|
||||||
$where['ps.status_kurzbz'] = 'Interessent';
|
$this->studentlistlib->addWhere('ps.status_kurzbz', 'Interessent');
|
||||||
$this->PrestudentModel->db->where('NOT EXISTS(' . $selectRT . ')', null, false);
|
$this->studentlistlib->addWhere('NOT EXISTS(' . $selectRT . ')', null, false);
|
||||||
break;
|
break;
|
||||||
case "bewerber":
|
case "bewerber":
|
||||||
$where['ps.status_kurzbz'] = 'Bewerber';
|
$this->studentlistlib->addWhere('ps.status_kurzbz', 'Bewerber');
|
||||||
break;
|
break;
|
||||||
case "bewerberrtnichtangemeldet":
|
case "bewerberrtnichtangemeldet":
|
||||||
$where['ps.status_kurzbz'] = 'Bewerber';
|
$this->studentlistlib->addWhere('ps.status_kurzbz', 'Bewerber');
|
||||||
$this->PrestudentModel->db->where('NOT EXISTS(' . $selectRT . ')', null, false);
|
$this->studentlistlib->addWhere('NOT EXISTS(' . $selectRT . ')', null, false);
|
||||||
break;
|
break;
|
||||||
case "bewerberrtangemeldet":
|
case "bewerberrtangemeldet":
|
||||||
$where['ps.status_kurzbz'] = 'Bewerber';
|
$this->studentlistlib->addWhere('ps.status_kurzbz', 'Bewerber');
|
||||||
$this->PrestudentModel->db->where('EXISTS(' . $selectRT . ')', null, false);
|
$this->studentlistlib->addWhere('EXISTS(' . $selectRT . ')', null, false);
|
||||||
break;
|
break;
|
||||||
case "bewerberrtangemeldetteilgenommen":
|
case "bewerberrtangemeldetteilgenommen":
|
||||||
$where['ps.status_kurzbz'] = 'Bewerber';
|
$this->studentlistlib->addWhere('ps.status_kurzbz', 'Bewerber');
|
||||||
$this->PrestudentModel->db->where('EXISTS(' . $selectRT . ')', null, false);
|
$this->studentlistlib->addWhere('EXISTS(' . $selectRT . ')', null, false);
|
||||||
$where['reihungstestangetreten'] = true;
|
$this->studentlistlib->addWhere('reihungstestangetreten', true);
|
||||||
break;
|
break;
|
||||||
case "bewerberrtangemeldetnichtteilgenommen":
|
case "bewerberrtangemeldetnichtteilgenommen":
|
||||||
$where['ps.status_kurzbz'] = 'Bewerber';
|
$this->studentlistlib->addWhere('ps.status_kurzbz', 'Bewerber');
|
||||||
$this->PrestudentModel->db->where('EXISTS(' . $selectRT . ')', null, false);
|
$this->studentlistlib->addWhere('EXISTS(' . $selectRT . ')', null, false);
|
||||||
$where['reihungstestangetreten'] = false;
|
$this->studentlistlib->addWhere('reihungstestangetreten', false);
|
||||||
break;
|
break;
|
||||||
case "aufgenommen":
|
case "aufgenommen":
|
||||||
$where['ps.status_kurzbz'] = 'Aufgenommener';
|
$this->studentlistlib->addWhere('ps.status_kurzbz', 'Aufgenommener');
|
||||||
break;
|
break;
|
||||||
case "warteliste":
|
case "warteliste":
|
||||||
$where['ps.status_kurzbz'] = 'Wartender';
|
$this->studentlistlib->addWhere('ps.status_kurzbz', 'Wartender');
|
||||||
break;
|
break;
|
||||||
case "absage":
|
case "absage":
|
||||||
$where['ps.status_kurzbz'] = 'Abgewiesener';
|
$this->studentlistlib->addWhere('ps.status_kurzbz', 'Abgewiesener');
|
||||||
break;
|
break;
|
||||||
case "incoming":
|
case "incoming":
|
||||||
// NOTE(chris): in FAS it was not filtered for studiengang_kz
|
// NOTE(chris): in FAS it was not filtered for studiengang_kz
|
||||||
$where['ps.status_kurzbz'] = 'Incoming';
|
$this->studentlistlib->addWhere('ps.status_kurzbz', 'Incoming');
|
||||||
break;
|
break;
|
||||||
case "absolvent":
|
case "absolvent":
|
||||||
$where['ps.status_kurzbz'] = 'Absolvent';
|
$this->studentlistlib->addWhere('ps.status_kurzbz', 'Absolvent');
|
||||||
break;
|
break;
|
||||||
case "diplomand":
|
case "diplomand":
|
||||||
$where['ps.status_kurzbz'] = 'Diplomand';
|
$this->studentlistlib->addWhere('ps.status_kurzbz', 'Diplomand');
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
if (!$studiensemester_kurzbz) {
|
if (!$studiensemester_kurzbz) {
|
||||||
@@ -444,9 +417,9 @@ class Students extends FHCAPI_Controller
|
|||||||
* show all prestudents in this stg who don't have a status
|
* show all prestudents in this stg who don't have a status
|
||||||
* $orgform_kurzbz does not change the results since orgform is stored in the status table
|
* $orgform_kurzbz does not change the results since orgform is stored in the status table
|
||||||
*/
|
*/
|
||||||
$where['ps.status_kurzbz'] = null;
|
$this->studentlistlib->addWhere('ps.status_kurzbz IS NULL');
|
||||||
} else {
|
} else {
|
||||||
$this->PrestudentModel->db->where_in('ps.status_kurzbz', [
|
$this->studentlistlib->addWhere('ps.status_kurzbz', [
|
||||||
'Interessent',
|
'Interessent',
|
||||||
'Bewerber',
|
'Bewerber',
|
||||||
'Aufgenommener',
|
'Aufgenommener',
|
||||||
@@ -457,21 +430,19 @@ class Students extends FHCAPI_Controller
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
$this->prepareQuery($studiensemester_kurzbz);
|
$this->studentlistlib->addSelect("
|
||||||
|
|
||||||
$this->PrestudentModel->addSelect("
|
|
||||||
CASE
|
CASE
|
||||||
WHEN pls.status_kurzbz IN ('Aufgenommener', 'Bewerber', 'Wartender', 'interessent')
|
WHEN pls.status_kurzbz IN ('Aufgenommener', 'Bewerber', 'Wartender', 'interessent')
|
||||||
THEN ps.ausbildungssemester::text
|
THEN ps.ausbildungssemester::text
|
||||||
ELSE ''::text
|
ELSE ''::text
|
||||||
END AS semester", false);
|
END AS semester", false);
|
||||||
$this->PrestudentModel->addSelect("'' AS verband");
|
$this->studentlistlib->addSelect("'' AS verband");
|
||||||
$this->PrestudentModel->addSelect("'' AS gruppe");
|
$this->studentlistlib->addSelect("'' AS gruppe");
|
||||||
$this->addSelectPrioRel();
|
|
||||||
|
|
||||||
$this->addFilter($studiensemester_kurzbz);
|
$this->addFilter($studiensemester_kurzbz);
|
||||||
|
|
||||||
$result = $this->PrestudentModel->loadWhere($where);
|
$result = $this->studentlistlib->execute($studiensemester_kurzbz);
|
||||||
|
|
||||||
$data = $this->getDataOrTerminateWithError($result);
|
$data = $this->getDataOrTerminateWithError($result);
|
||||||
|
|
||||||
@@ -574,7 +545,6 @@ class Students extends FHCAPI_Controller
|
|||||||
$gruppe_kurzbz = null,
|
$gruppe_kurzbz = null,
|
||||||
$orgform_kurzbz = null
|
$orgform_kurzbz = null
|
||||||
) {
|
) {
|
||||||
$this->load->model('crm/Prestudent_model', 'PrestudentModel');
|
|
||||||
$this->load->model('organisation/Studiensemester_model', 'StudiensemesterModel');
|
$this->load->model('organisation/Studiensemester_model', 'StudiensemesterModel');
|
||||||
|
|
||||||
if (!$this->StudiensemesterModel->isValidStudiensemester($studiensemester_kurzbz))
|
if (!$this->StudiensemesterModel->isValidStudiensemester($studiensemester_kurzbz))
|
||||||
@@ -582,34 +552,29 @@ class Students extends FHCAPI_Controller
|
|||||||
$this->terminateWithError($studiensemester_kurzbz . ' - ' . $this->p->t('lehre', 'error_noStudiensemester'));
|
$this->terminateWithError($studiensemester_kurzbz . ' - ' . $this->p->t('lehre', 'error_noStudiensemester'));
|
||||||
}
|
}
|
||||||
|
|
||||||
$this->prepareQuery($studiensemester_kurzbz, '');
|
// NOTE(chris): overwrite 'LEFT JOIN' with 'JOIN'
|
||||||
|
$this->studentlistlib->addJoin("public.tbl_student s", "prestudent_id");
|
||||||
|
|
||||||
$this->PrestudentModel->addSelect('v.semester');
|
$this->studentlistlib->addSelect("'' AS priorisierung_relativ");
|
||||||
$this->PrestudentModel->addSelect('v.verband');
|
|
||||||
$this->PrestudentModel->addSelect('v.gruppe');
|
|
||||||
$this->PrestudentModel->addSelect("'' AS priorisierung_relativ");
|
|
||||||
|
|
||||||
|
|
||||||
$where = [];
|
|
||||||
|
|
||||||
if ($gruppe_kurzbz !== null) {
|
if ($gruppe_kurzbz !== null) {
|
||||||
$this->PrestudentModel->addJoin('public.tbl_benutzergruppe g', 'uid');
|
$this->studentlistlib->addJoin('public.tbl_benutzergruppe g', 'uid', '', 'after_b');
|
||||||
$where['g.gruppe_kurzbz'] = $gruppe_kurzbz;
|
$this->studentlistlib->addWhere('g.gruppe_kurzbz', $gruppe_kurzbz);
|
||||||
$where['g.studiensemester_kurzbz'] = $studiensemester_kurzbz;
|
$this->studentlistlib->addWhere('g.studiensemester_kurzbz', $studiensemester_kurzbz);
|
||||||
} else {
|
} else {
|
||||||
$where['v.studiengang_kz'] = $studiengang_kz;
|
$this->studentlistlib->addWhere('v.studiengang_kz', $studiengang_kz);
|
||||||
|
|
||||||
if ($semester !== null)
|
if ($semester !== null)
|
||||||
$where['v.semester'] = $semester;
|
$this->studentlistlib->addWhere('v.semester', $semester);
|
||||||
|
|
||||||
if ($verband !== null)
|
if ($verband !== null)
|
||||||
$where['v.verband'] = $verband;
|
$this->studentlistlib->addWhere('v.verband', $verband);
|
||||||
|
|
||||||
if ($gruppe !== null)
|
if ($gruppe !== null)
|
||||||
$where['v.gruppe'] = $gruppe;
|
$this->studentlistlib->addWhere('v.gruppe', $gruppe);
|
||||||
|
|
||||||
if (!$verband && !$gruppe && $orgform_kurzbz !== null) {
|
if (!$verband && !$gruppe && $orgform_kurzbz !== null) {
|
||||||
$this->PrestudentModel->db->where(
|
$this->studentlistlib->addWhere(
|
||||||
"(
|
"(
|
||||||
SELECT orgform_kurzbz
|
SELECT orgform_kurzbz
|
||||||
FROM public.tbl_prestudentstatus
|
FROM public.tbl_prestudentstatus
|
||||||
@@ -623,9 +588,10 @@ class Students extends FHCAPI_Controller
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
$this->addFilter($studiensemester_kurzbz);
|
$this->addFilter($studiensemester_kurzbz);
|
||||||
|
|
||||||
$result = $this->PrestudentModel->loadWhere($where);
|
$result = $this->studentlistlib->execute($studiensemester_kurzbz);
|
||||||
|
|
||||||
$data = $this->getDataOrTerminateWithError($result);
|
$data = $this->getDataOrTerminateWithError($result);
|
||||||
|
|
||||||
@@ -652,11 +618,8 @@ class Students extends FHCAPI_Controller
|
|||||||
$this->terminateWithError($studiensemester_kurzbz . ' - ' . $this->p->t('lehre', 'error_noStudiensemester'));
|
$this->terminateWithError($studiensemester_kurzbz . ' - ' . $this->p->t('lehre', 'error_noStudiensemester'));
|
||||||
}
|
}
|
||||||
|
|
||||||
$this->load->model('crm/Prestudent_model', 'PrestudentModel');
|
|
||||||
|
|
||||||
$this->prepareQuery($studiensemester_kurzbz);
|
$this->studentlistlib->addSelect("COALESCE(
|
||||||
|
|
||||||
$this->PrestudentModel->addSelect("COALESCE(
|
|
||||||
v.semester::text,
|
v.semester::text,
|
||||||
CASE
|
CASE
|
||||||
WHEN pls.status_kurzbz IN ('Aufgenommener', 'Bewerber', 'Wartender', 'interessent')
|
WHEN pls.status_kurzbz IN ('Aufgenommener', 'Bewerber', 'Wartender', 'interessent')
|
||||||
@@ -664,16 +627,15 @@ class Students extends FHCAPI_Controller
|
|||||||
ELSE ''::text
|
ELSE ''::text
|
||||||
END
|
END
|
||||||
) AS semester", false);
|
) AS semester", false);
|
||||||
$this->PrestudentModel->addSelect("COALESCE(v.verband::text, ''::text)");
|
$this->studentlistlib->addSelect("COALESCE(v.verband::text, ''::text) AS verband");
|
||||||
$this->PrestudentModel->addSelect("COALESCE(v.gruppe::text, ''::text)");
|
$this->studentlistlib->addSelect("COALESCE(v.gruppe::text, ''::text) AS gruppe");
|
||||||
|
|
||||||
|
$this->studentlistlib->addWhere('tbl_prestudent.prestudent_id', $prestudent_id);
|
||||||
|
|
||||||
$this->addSelectPrioRel();
|
|
||||||
|
|
||||||
$this->addFilter($studiensemester_kurzbz);
|
$this->addFilter($studiensemester_kurzbz);
|
||||||
|
|
||||||
$result = $this->PrestudentModel->loadWhere([
|
$result = $this->studentlistlib->execute($studiensemester_kurzbz);
|
||||||
'tbl_prestudent.prestudent_id' => $prestudent_id
|
|
||||||
]);
|
|
||||||
|
|
||||||
$data = $this->getDataOrTerminateWithError($result);
|
$data = $this->getDataOrTerminateWithError($result);
|
||||||
|
|
||||||
@@ -700,23 +662,13 @@ class Students extends FHCAPI_Controller
|
|||||||
$this->terminateWithError($studiensemester_kurzbz . ' - ' . $this->p->t('lehre', 'error_noStudiensemester'));
|
$this->terminateWithError($studiensemester_kurzbz . ' - ' . $this->p->t('lehre', 'error_noStudiensemester'));
|
||||||
}
|
}
|
||||||
|
|
||||||
$this->load->model('crm/Prestudent_model', 'PrestudentModel');
|
|
||||||
|
|
||||||
$this->prepareQuery($studiensemester_kurzbz);
|
|
||||||
|
|
||||||
$this->PrestudentModel->addSelect('v.semester');
|
|
||||||
$this->PrestudentModel->addSelect('v.verband');
|
|
||||||
$this->PrestudentModel->addSelect('v.gruppe');
|
|
||||||
|
|
||||||
$this->addSelectPrioRel();
|
|
||||||
|
|
||||||
|
$this->studentlistlib->addWhere('s.student_uid', $student_uid);
|
||||||
|
|
||||||
|
|
||||||
$this->addFilter($studiensemester_kurzbz);
|
$this->addFilter($studiensemester_kurzbz);
|
||||||
|
|
||||||
$result = $this->PrestudentModel->loadWhere([
|
$result = $this->studentlistlib->execute($studiensemester_kurzbz);
|
||||||
's.student_uid' => $student_uid
|
|
||||||
]);
|
|
||||||
|
|
||||||
$data = $this->getDataOrTerminateWithError($result);
|
$data = $this->getDataOrTerminateWithError($result);
|
||||||
|
|
||||||
@@ -744,21 +696,13 @@ class Students extends FHCAPI_Controller
|
|||||||
$this->terminateWithError($studiensemester_kurzbz . ' - ' . $this->p->t('lehre', 'error_noStudiensemester'));
|
$this->terminateWithError($studiensemester_kurzbz . ' - ' . $this->p->t('lehre', 'error_noStudiensemester'));
|
||||||
}
|
}
|
||||||
|
|
||||||
$this->load->model('crm/Prestudent_model', 'PrestudentModel');
|
|
||||||
|
|
||||||
$this->prepareQuery($studiensemester_kurzbz);
|
$this->studentlistlib->addWhere('p.person_id', $person_id);
|
||||||
|
|
||||||
$this->PrestudentModel->addSelect('v.semester');
|
|
||||||
$this->PrestudentModel->addSelect('v.verband');
|
|
||||||
$this->PrestudentModel->addSelect('v.gruppe');
|
|
||||||
|
|
||||||
$this->addSelectPrioRel();
|
|
||||||
|
|
||||||
$this->addFilter($studiensemester_kurzbz);
|
$this->addFilter($studiensemester_kurzbz);
|
||||||
|
|
||||||
$result = $this->PrestudentModel->loadWhere([
|
$result = $this->studentlistlib->execute($studiensemester_kurzbz);
|
||||||
'p.person_id' => $person_id
|
|
||||||
]);
|
|
||||||
|
|
||||||
$data = $this->getDataOrTerminateWithError($result);
|
$data = $this->getDataOrTerminateWithError($result);
|
||||||
|
|
||||||
@@ -790,29 +734,8 @@ class Students extends FHCAPI_Controller
|
|||||||
|
|
||||||
$data = $this->getDataOrTerminateWithError($result);
|
$data = $this->getDataOrTerminateWithError($result);
|
||||||
|
|
||||||
|
|
||||||
$this->load->model('crm/Prestudent_model', 'PrestudentModel');
|
|
||||||
|
|
||||||
$this->prepareQuery($studiensemester_kurzbz);
|
|
||||||
|
|
||||||
$this->PrestudentModel->addSelect("COALESCE(v.semester::text, CASE WHEN public.get_rolle_prestudent(tbl_prestudent.prestudent_id, NULL) IN ('Aufgenommener', 'Bewerber', 'Wartender', 'interessent') THEN public.get_absem_prestudent(tbl_prestudent.prestudent_id, NULL)::text ELSE ''::text END) AS semester", false);
|
|
||||||
$this->PrestudentModel->addSelect('v.verband');
|
|
||||||
$this->PrestudentModel->addSelect('v.gruppe');
|
|
||||||
|
|
||||||
//add status per semester
|
|
||||||
$this->PrestudentModel->addSelect(
|
|
||||||
"public.get_rolle_prestudent(public.tbl_prestudent.prestudent_id, "
|
|
||||||
. $this->PrestudentModel->escape($studiensemester_kurzbz)
|
|
||||||
. ") AS statusofsemester"
|
|
||||||
);
|
|
||||||
|
|
||||||
$this->addSelectPrioRel();
|
|
||||||
|
|
||||||
$this->addFilter($studiensemester_kurzbz);
|
|
||||||
|
|
||||||
$prestudent_ids = [];
|
$prestudent_ids = [];
|
||||||
$student_uids = [];
|
$student_uids = [];
|
||||||
$this->addMeta('data', $data);
|
|
||||||
foreach ($data as $row) {
|
foreach ($data as $row) {
|
||||||
$dataset = json_decode($row->data);
|
$dataset = json_decode($row->data);
|
||||||
if ($row->type == 'prestudent') {
|
if ($row->type == 'prestudent') {
|
||||||
@@ -822,197 +745,38 @@ class Students extends FHCAPI_Controller
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
$this->studentlistlib->addSelect("COALESCE(
|
||||||
|
v.semester::text,
|
||||||
|
CASE
|
||||||
|
WHEN public.get_rolle_prestudent(tbl_prestudent.prestudent_id, NULL) IN ('Aufgenommener', 'Bewerber', 'Wartender', 'interessent')
|
||||||
|
THEN public.get_absem_prestudent(tbl_prestudent.prestudent_id, NULL)::text
|
||||||
|
ELSE ''::text
|
||||||
|
END
|
||||||
|
) AS semester", false);
|
||||||
|
|
||||||
|
|
||||||
if ($prestudent_ids && $student_uids) {
|
if ($prestudent_ids && $student_uids) {
|
||||||
$this->PrestudentModel->db->where_in('tbl_prestudent.prestudent_id', $prestudent_ids);
|
$this->studentlistlib->addWhere('tbl_prestudent.prestudent_id', $prestudent_ids);
|
||||||
$this->PrestudentModel->db->or_where_in('s.student_uid', $student_uids);
|
$this->studentlistlib->addOrWhere('s.student_uid', $student_uids);
|
||||||
} elseif ($prestudent_ids) {
|
} elseif ($prestudent_ids) {
|
||||||
$this->PrestudentModel->db->where_in('tbl_prestudent.prestudent_id', $prestudent_ids);
|
$this->studentlistlib->addWhere('tbl_prestudent.prestudent_id', $prestudent_ids);
|
||||||
} elseif ($student_uids) {
|
} elseif ($student_uids) {
|
||||||
$this->PrestudentModel->db->where_in('s.student_uid', $student_uids);
|
$this->studentlistlib->addWhere('s.student_uid', $student_uids);
|
||||||
} else {
|
} else {
|
||||||
$this->terminateWithSuccess([]);
|
$this->terminateWithSuccess([]);
|
||||||
}
|
}
|
||||||
|
|
||||||
$result = $this->PrestudentModel->load();
|
|
||||||
|
$this->addFilter($studiensemester_kurzbz);
|
||||||
|
|
||||||
|
$result = $this->studentlistlib->execute($studiensemester_kurzbz);
|
||||||
|
|
||||||
$data = $this->getDataOrTerminateWithError($result);
|
$data = $this->getDataOrTerminateWithError($result);
|
||||||
|
|
||||||
$this->terminateWithSuccess($data);
|
$this->terminateWithSuccess($data);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* @param string|null $studiensemester_kurzbz
|
|
||||||
* @param string $type
|
|
||||||
*
|
|
||||||
* @return void
|
|
||||||
*/
|
|
||||||
protected function prepareQuery($studiensemester_kurzbz, $type = 'LEFT')
|
|
||||||
{
|
|
||||||
$stdsemEsc = $studiensemester_kurzbz ? $this->PrestudentModel->escape($studiensemester_kurzbz) : 'NULL';
|
|
||||||
|
|
||||||
$this->load->config('stv');
|
|
||||||
|
|
||||||
if(defined('STV_TAGS_ENABLED') && STV_TAGS_ENABLED)
|
|
||||||
{
|
|
||||||
$tags = $this->config->item('stv_prestudent_tags');
|
|
||||||
|
|
||||||
$whereTags = '';
|
|
||||||
if (is_array($tags) && !isEmptyArray($tags)) {
|
|
||||||
$tags = array_keys($tags);
|
|
||||||
|
|
||||||
foreach ($tags as $key => $tag) {
|
|
||||||
$tags[$key] = $this->db->escape($tag);
|
|
||||||
}
|
|
||||||
$whereTags = " AND nt.typ_kurzbz IN (" . implode(",", $tags) . ")";
|
|
||||||
}
|
|
||||||
$subQueryTag = "
|
|
||||||
(
|
|
||||||
SELECT
|
|
||||||
tag.prestudent_id,
|
|
||||||
COALESCE(json_agg(tag ORDER BY tag.done), '[]'::json) AS tags
|
|
||||||
FROM (
|
|
||||||
SELECT DISTINCT ON (n.notiz_id)
|
|
||||||
n.notiz_id AS id,
|
|
||||||
nt.typ_kurzbz,
|
|
||||||
array_to_json(nt.bezeichnung_mehrsprachig)->>0 AS beschreibung,
|
|
||||||
n.text AS notiz,
|
|
||||||
nt.style,
|
|
||||||
n.erledigt AS done,
|
|
||||||
nz.prestudent_id
|
|
||||||
FROM public.tbl_notizzuordnung AS nz
|
|
||||||
JOIN public.tbl_notiz AS n ON nz.notiz_id = n.notiz_id
|
|
||||||
JOIN public.tbl_notiz_typ AS nt ON n.typ = nt.typ_kurzbz "
|
|
||||||
. $whereTags .
|
|
||||||
"
|
|
||||||
) AS tag
|
|
||||||
GROUP BY tag.prestudent_id
|
|
||||||
) AS tag_data_agg
|
|
||||||
";
|
|
||||||
}
|
|
||||||
|
|
||||||
$this->PrestudentModel->addJoin('public.tbl_studiengang stg', 'studiengang_kz', 'LEFT');
|
|
||||||
$this->PrestudentModel->addJoin('public.tbl_person p', 'person_id');
|
|
||||||
$this->PrestudentModel->addJoin('public.tbl_student s', 'prestudent_id', $type);
|
|
||||||
$this->PrestudentModel->addJoin('public.tbl_prestudentstatus pls', '
|
|
||||||
pls.status_kurzbz=public.get_rolle_prestudent(tbl_prestudent.prestudent_id, NULL)
|
|
||||||
AND pls.prestudent_id=tbl_prestudent.prestudent_id
|
|
||||||
AND pls.studiensemester_kurzbz=public.get_stdsem_prestudent(tbl_prestudent.prestudent_id, NULL)
|
|
||||||
AND pls.ausbildungssemester=public.get_absem_prestudent(tbl_prestudent.prestudent_id, NULL)', 'LEFT');
|
|
||||||
$this->PrestudentModel->addJoin('lehre.tbl_studienplan sp', 'studienplan_id', 'LEFT');
|
|
||||||
$this->PrestudentModel->addJoin('public.tbl_benutzer b', 's.student_uid=b.uid', 'LEFT');
|
|
||||||
$this->PrestudentModel->addJoin(
|
|
||||||
'public.tbl_studentlehrverband v',
|
|
||||||
'v.student_uid=s.student_uid AND v.studiensemester_kurzbz' . ($studiensemester_kurzbz ? '=' . $stdsemEsc : ' IS NULL'),
|
|
||||||
$type
|
|
||||||
);
|
|
||||||
$this->PrestudentModel->addJoin('public.tbl_prestudentstatus ps', '
|
|
||||||
ps.status_kurzbz=public.get_rolle_prestudent(tbl_prestudent.prestudent_id, ' . $stdsemEsc . ')
|
|
||||||
AND ps.prestudent_id=tbl_prestudent.prestudent_id
|
|
||||||
AND ps.studiensemester_kurzbz=public.get_stdsem_prestudent(tbl_prestudent.prestudent_id, ' . $stdsemEsc . ')
|
|
||||||
AND ps.ausbildungssemester=public.get_absem_prestudent(tbl_prestudent.prestudent_id, ' . $stdsemEsc . ')', 'LEFT');
|
|
||||||
|
|
||||||
if(defined('STV_TAGS_ENABLED') && STV_TAGS_ENABLED)
|
|
||||||
{
|
|
||||||
$this->PrestudentModel->addJoin($subQueryTag, 'tag_data_agg.prestudent_id = tbl_prestudent.prestudent_id', 'LEFT');
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
$this->PrestudentModel->addSelect("b.uid");
|
|
||||||
if(defined('STV_TAGS_ENABLED') && STV_TAGS_ENABLED)
|
|
||||||
{
|
|
||||||
$this->PrestudentModel->addSelect('tag_data_agg.tags');
|
|
||||||
}
|
|
||||||
$this->PrestudentModel->addSelect('titelpre');
|
|
||||||
$this->PrestudentModel->addSelect('nachname');
|
|
||||||
$this->PrestudentModel->addSelect('vorname');
|
|
||||||
$this->PrestudentModel->addSelect('wahlname');
|
|
||||||
$this->PrestudentModel->addSelect('vornamen');
|
|
||||||
$this->PrestudentModel->addSelect('titelpost');
|
|
||||||
$this->PrestudentModel->addSelect('ersatzkennzeichen');
|
|
||||||
$this->PrestudentModel->addSelect('gebdatum');
|
|
||||||
$this->PrestudentModel->addSelect('geschlecht');
|
|
||||||
$this->PrestudentModel->addSelect('foto');
|
|
||||||
$this->PrestudentModel->addSelect('foto_sperre');
|
|
||||||
|
|
||||||
// semester
|
|
||||||
// verband
|
|
||||||
// gruppe
|
|
||||||
|
|
||||||
//add status per semester
|
|
||||||
$this->PrestudentModel->addSelect(
|
|
||||||
"public.get_rolle_prestudent(public.tbl_prestudent.prestudent_id, "
|
|
||||||
. $this->PrestudentModel->escape($studiensemester_kurzbz)
|
|
||||||
. ") AS statusofsemester"
|
|
||||||
);
|
|
||||||
|
|
||||||
$this->PrestudentModel->addSelect('UPPER(stg.typ || stg.kurzbz) AS studiengang');
|
|
||||||
$this->PrestudentModel->addSelect('tbl_prestudent.studiengang_kz');
|
|
||||||
$this->PrestudentModel->addSelect('stg.bezeichnung AS stg_bezeichnung');
|
|
||||||
$this->PrestudentModel->addSelect("s.matrikelnr");
|
|
||||||
$this->PrestudentModel->addSelect('p.person_id');
|
|
||||||
$this->PrestudentModel->addSelect('pls.status_kurzbz AS status');
|
|
||||||
$this->PrestudentModel->addSelect('pls.datum AS status_datum');
|
|
||||||
$this->PrestudentModel->addSelect('pls.bestaetigtam AS status_bestaetigung');
|
|
||||||
$this->PrestudentModel->addSelect(
|
|
||||||
"(SELECT kontakt FROM public.tbl_kontakt WHERE kontakttyp='email' AND person_id=p.person_id AND zustellung LIMIT 1) AS mail_privat",
|
|
||||||
false
|
|
||||||
);
|
|
||||||
$this->PrestudentModel->addSelect("
|
|
||||||
CASE WHEN b.uid IS NOT NULL AND b.uid<>''
|
|
||||||
THEN CONCAT(b.uid, '@', " . $this->PrestudentModel->escape(DOMAIN) . ")
|
|
||||||
ELSE '' END AS mail_intern", false);
|
|
||||||
$this->PrestudentModel->addSelect('p.anmerkung AS anmerkungen');
|
|
||||||
$this->PrestudentModel->addSelect('tbl_prestudent.anmerkung');
|
|
||||||
$this->PrestudentModel->addSelect('pls.orgform_kurzbz');
|
|
||||||
$this->PrestudentModel->addSelect('aufmerksamdurch_kurzbz');
|
|
||||||
$this->PrestudentModel->addSelect(
|
|
||||||
"(SELECT rt_gesamtpunkte AS punkte FROM public.tbl_prestudent WHERE prestudent_id=ps.prestudent_id) AS punkte",
|
|
||||||
false
|
|
||||||
);
|
|
||||||
$this->PrestudentModel->addSelect('tbl_prestudent.aufnahmegruppe_kurzbz');
|
|
||||||
$this->PrestudentModel->addSelect('tbl_prestudent.dual');
|
|
||||||
$this->PrestudentModel->addSelect('p.matr_nr');
|
|
||||||
$this->PrestudentModel->addSelect('sp.bezeichnung AS studienplan_bezeichnung');
|
|
||||||
$this->PrestudentModel->addSelect('tbl_prestudent.prestudent_id');
|
|
||||||
|
|
||||||
// priorisierung_relativ
|
|
||||||
|
|
||||||
$this->PrestudentModel->addSelect('mentor');
|
|
||||||
$this->PrestudentModel->addSelect('b.aktiv AS bnaktiv');
|
|
||||||
$this->PrestudentModel->addSelect('unruly');
|
|
||||||
|
|
||||||
$this->PrestudentModel->db->where_in('tbl_prestudent.studiengang_kz', $this->allowedStgs);
|
|
||||||
|
|
||||||
$this->PrestudentModel->addOrder('nachname');
|
|
||||||
$this->PrestudentModel->addOrder('vorname');
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @return void
|
|
||||||
*/
|
|
||||||
protected function addSelectPrioRel()
|
|
||||||
{
|
|
||||||
$this->PrestudentModel->addSelect("(
|
|
||||||
SELECT count(*)
|
|
||||||
FROM (
|
|
||||||
SELECT *, public.get_rolle_prestudent(pss.prestudent_id, NULL) AS laststatus
|
|
||||||
FROM public.tbl_prestudent pss
|
|
||||||
JOIN public.tbl_prestudentstatus USING (prestudent_id)
|
|
||||||
WHERE person_id = p.person_id
|
|
||||||
AND studiensemester_kurzbz = (
|
|
||||||
SELECT studiensemester_kurzbz
|
|
||||||
FROM public.tbl_prestudentstatus
|
|
||||||
WHERE prestudent_id = tbl_prestudent.prestudent_id
|
|
||||||
AND status_kurzbz = 'Interessent'
|
|
||||||
LIMIT 1
|
|
||||||
)
|
|
||||||
AND status_kurzbz = 'Interessent'
|
|
||||||
) prest
|
|
||||||
WHERE laststatus NOT IN ('Abbrecher', 'Abgewiesener', 'Absolvent')
|
|
||||||
AND priorisierung <= tbl_prestudent.priorisierung
|
|
||||||
) || ' (' || COALESCE(tbl_prestudent.priorisierung::text, ' '::text) || ')' AS priorisierung_relativ", false);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Adds additional filters to the query
|
* Adds additional filters to the query
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -417,6 +417,7 @@ abstract class Notiz_Controller extends FHCAPI_Controller
|
|||||||
$notiz_id = $this->input->post('notiz_id');
|
$notiz_id = $this->input->post('notiz_id');
|
||||||
|
|
||||||
$this->NotizModel->addSelect('campus.tbl_dms_version.*');
|
$this->NotizModel->addSelect('campus.tbl_dms_version.*');
|
||||||
|
$this->NotizModel->addSelect($this->NotizModel->escape(base_url('content/notizdokdownload.php?id=')) . ' || public.tbl_notiz_dokument.dms_id AS preview');
|
||||||
|
|
||||||
$this->NotizModel->addJoin('public.tbl_notiz_dokument', 'ON (public.tbl_notiz_dokument.notiz_id = public.tbl_notiz.notiz_id)');
|
$this->NotizModel->addJoin('public.tbl_notiz_dokument', 'ON (public.tbl_notiz_dokument.notiz_id = public.tbl_notiz.notiz_id)');
|
||||||
$this->NotizModel->addJoin('campus.tbl_dms_version', 'ON (public.tbl_notiz_dokument.dms_id = campus.tbl_dms_version.dms_id)');
|
$this->NotizModel->addJoin('campus.tbl_dms_version', 'ON (public.tbl_notiz_dokument.dms_id = campus.tbl_dms_version.dms_id)');
|
||||||
|
|||||||
@@ -1,188 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
if (!defined('BASEPATH')) exit('No direct script access allowed');
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Helper function to generate the default documentslist config for the
|
|
||||||
* grades tab.
|
|
||||||
*
|
|
||||||
* The resulting array consists of elements which are associative arrays
|
|
||||||
* that can have the following entries:
|
|
||||||
* title (required) on the first level this can be HTML code.
|
|
||||||
* permissioncheck (optional) an URL to an FHCAPI endpoint which returns
|
|
||||||
* true or false.
|
|
||||||
* link (optional) an URL that will be called if "action" and
|
|
||||||
* "children" are not defined.
|
|
||||||
* action (optional) an associative array that describes an
|
|
||||||
* POST action that will be called if "children" is
|
|
||||||
* not defined.
|
|
||||||
* It can have the following entries:
|
|
||||||
* - url (required) an URL to an FHCAPI endpoint.
|
|
||||||
* - post (optional) an associative array with the POST data to
|
|
||||||
* be sent.
|
|
||||||
* - response (optional) a string that will be displayed on success.
|
|
||||||
* children (optional) an array of child elements
|
|
||||||
*
|
|
||||||
* All strings that start with { and end with } in the URLs and the
|
|
||||||
* actions post parameter will be replaced with the corresponding
|
|
||||||
* attribute of the current dataset (e.G: {uid} will be replaced with the
|
|
||||||
* uid of the current dataset)
|
|
||||||
*
|
|
||||||
* @return array
|
|
||||||
*/
|
|
||||||
function gradesDocumentsList()
|
|
||||||
{
|
|
||||||
$ci =& get_instance();
|
|
||||||
$ci->load->library('PhrasesLib', array('stv'), 'p');
|
|
||||||
|
|
||||||
$permissioncheck = site_url("api/frontend/v1/documents/permissionAlternativeFormat/{studiengang_kz}");
|
|
||||||
|
|
||||||
$title_ger = $ci->p->t("global", "deutsch");
|
|
||||||
$title_eng = $ci->p->t("global", "englisch");
|
|
||||||
$title_ff = $ci->p->t("stv", "document_certificate");
|
|
||||||
$title_lv = $ci->p->t("stv", "document_coursecertificate");
|
|
||||||
|
|
||||||
$link_ff = "documents/export/" .
|
|
||||||
"zertifikat.rdf.php/" .
|
|
||||||
"Zertifikat" .
|
|
||||||
"?stg_kz={studiengang_kz_lv}" .
|
|
||||||
"&uid={uid}" .
|
|
||||||
"&ss={studiensemester_kurzbz}" .
|
|
||||||
"&lvid={lehrveranstaltung_id}";
|
|
||||||
$link_lv_ger = "documents/export/" .
|
|
||||||
"lehrveranstaltungszeugnis.rdf.php/" .
|
|
||||||
"LVZeugnis" .
|
|
||||||
"?stg_kz={studiengang_kz}" .
|
|
||||||
"&uid={uid}" .
|
|
||||||
"&ss={studiensemester_kurzbz}" .
|
|
||||||
"&lvid={lehrveranstaltung_id}";
|
|
||||||
$link_lv_eng = "documents/export/" .
|
|
||||||
"lehrveranstaltungszeugnis.rdf.php/" .
|
|
||||||
"LVZeugnisEng" .
|
|
||||||
"?stg_kz={studiengang_kz}" .
|
|
||||||
"&uid={uid}" .
|
|
||||||
"&ss={studiensemester_kurzbz}" .
|
|
||||||
"&lvid={lehrveranstaltung_id}";
|
|
||||||
|
|
||||||
$archive_url = "api/frontend/v1/documents/archiveSigned";
|
|
||||||
$archive_response = $ci->p->t("stv", "document_signed_and_archived");
|
|
||||||
$archive_post_ff = [
|
|
||||||
"xml" => "zertifikat.rdf.php",
|
|
||||||
"xsl" => "Zertifikat",
|
|
||||||
"stg_kz" => "{studiengang_kz_lv}",
|
|
||||||
"uid" => "{uid}",
|
|
||||||
"ss" => "{studiensemester_kurzbz}",
|
|
||||||
"lvid" => "{lehrveranstaltung_id}"
|
|
||||||
];
|
|
||||||
$archive_post_lv_ger = [
|
|
||||||
"xml" => "lehrveranstaltungszeugnis.rdf.php",
|
|
||||||
"xsl" => "LVZeugnis",
|
|
||||||
"stg_kz" => "{studiengang_kz}",
|
|
||||||
"uid" => "{uid}",
|
|
||||||
"ss" => "{studiensemester_kurzbz}",
|
|
||||||
"lvid" => "{lehrveranstaltung_id}"
|
|
||||||
];
|
|
||||||
$archive_post_lv_eng = [
|
|
||||||
"xml" => "lehrveranstaltungszeugnis.rdf.php",
|
|
||||||
"xsl" => "LVZeugnisEng",
|
|
||||||
"stg_kz" => "{studiengang_kz}",
|
|
||||||
"uid" => "{uid}",
|
|
||||||
"ss" => "{studiensemester_kurzbz}",
|
|
||||||
"lvid" => "{lehrveranstaltung_id}"
|
|
||||||
];
|
|
||||||
|
|
||||||
$list = [
|
|
||||||
[
|
|
||||||
'title' => '<i class="fa fa-download" title="' . $ci->p->t("stv", "document_download") . '"></i>',
|
|
||||||
'children' => [
|
|
||||||
[
|
|
||||||
'title' => $title_ff,
|
|
||||||
'link' => site_url($link_ff)
|
|
||||||
],
|
|
||||||
[
|
|
||||||
'title' => $title_lv,
|
|
||||||
'children' => [
|
|
||||||
[
|
|
||||||
'title' => $title_ger,
|
|
||||||
'link' => site_url($link_lv_ger),
|
|
||||||
'children' => [
|
|
||||||
[
|
|
||||||
'title' => 'PDF',
|
|
||||||
'permissioncheck' => $permissioncheck,
|
|
||||||
'link' => site_url($link_lv_ger)
|
|
||||||
],
|
|
||||||
[
|
|
||||||
'title' => 'DOC',
|
|
||||||
'permissioncheck' => $permissioncheck,
|
|
||||||
'link' => site_url($link_lv_ger . "&output=doc")
|
|
||||||
],
|
|
||||||
[
|
|
||||||
'title' => 'ODT',
|
|
||||||
'permissioncheck' => $permissioncheck,
|
|
||||||
'link' => site_url($link_lv_ger . "&output=odt")
|
|
||||||
]
|
|
||||||
]
|
|
||||||
],
|
|
||||||
[
|
|
||||||
'title' => $title_eng,
|
|
||||||
'link' => site_url($link_lv_eng),
|
|
||||||
'children' => [
|
|
||||||
[
|
|
||||||
'title' => 'PDF',
|
|
||||||
'permissioncheck' => $permissioncheck,
|
|
||||||
'link' => site_url($link_lv_eng)
|
|
||||||
],
|
|
||||||
[
|
|
||||||
'title' => 'DOC',
|
|
||||||
'permissioncheck' => $permissioncheck,
|
|
||||||
'link' => site_url($link_lv_eng . "&output=doc")
|
|
||||||
],
|
|
||||||
[
|
|
||||||
'title' => 'ODT',
|
|
||||||
'permissioncheck' => $permissioncheck,
|
|
||||||
'link' => site_url($link_lv_eng . "&output=odt")
|
|
||||||
]
|
|
||||||
]
|
|
||||||
]
|
|
||||||
]
|
|
||||||
]
|
|
||||||
]
|
|
||||||
],
|
|
||||||
[
|
|
||||||
'title' => '<i class="fas fa-archive" title="' . $ci->p->t("stv", "document_archive") . '"></i>',
|
|
||||||
'children' => [
|
|
||||||
[
|
|
||||||
'title' => $title_ff,
|
|
||||||
'action' => [
|
|
||||||
'url' => site_url($archive_url),
|
|
||||||
'post' => $archive_post_ff,
|
|
||||||
'response' => $archive_response
|
|
||||||
]
|
|
||||||
],
|
|
||||||
[
|
|
||||||
'title' => $title_lv,
|
|
||||||
'children' => [
|
|
||||||
[
|
|
||||||
'title' => $title_ger,
|
|
||||||
'action' => [
|
|
||||||
'url' => site_url($archive_url),
|
|
||||||
'post' => $archive_post_lv_ger,
|
|
||||||
'response' => $archive_response
|
|
||||||
]
|
|
||||||
],
|
|
||||||
[
|
|
||||||
'title' => $title_eng,
|
|
||||||
'action' => [
|
|
||||||
'url' => site_url($archive_url),
|
|
||||||
'post' => $archive_post_lv_eng,
|
|
||||||
'response' => $archive_response
|
|
||||||
]
|
|
||||||
]
|
|
||||||
]
|
|
||||||
]
|
|
||||||
]
|
|
||||||
]
|
|
||||||
];
|
|
||||||
|
|
||||||
return $list;
|
|
||||||
}
|
|
||||||
@@ -128,7 +128,7 @@ class AntragLib
|
|||||||
return $this->_ci->StudierendenantragstatusModel->resumeAntraegeForAbmeldungStgl($antrag_id);
|
return $this->_ci->StudierendenantragstatusModel->resumeAntraegeForAbmeldungStgl($antrag_id);
|
||||||
}
|
}
|
||||||
// NOTE(chris): get last status that is not pause
|
// NOTE(chris): get last status that is not pause
|
||||||
$this->_ci->StudierendenantragstatusModel->addOrder('insertamum');
|
$this->_ci->StudierendenantragstatusModel->addOrder('insertamum', 'DESC');
|
||||||
$this->_ci->StudierendenantragstatusModel->addLimit(1);
|
$this->_ci->StudierendenantragstatusModel->addLimit(1);
|
||||||
$result = $this->_ci->StudierendenantragstatusModel->loadWhere([
|
$result = $this->_ci->StudierendenantragstatusModel->loadWhere([
|
||||||
'studierendenantrag_id' => $antrag_id,
|
'studierendenantrag_id' => $antrag_id,
|
||||||
|
|||||||
@@ -17,12 +17,7 @@ class LektorLib
|
|||||||
$this->_ci->load->model('organisation/Organisationseinheit_model', 'OrganisationseinheitModel');
|
$this->_ci->load->model('organisation/Organisationseinheit_model', 'OrganisationseinheitModel');
|
||||||
$this->_ci->load->model('ressource/mitarbeiter_model', 'MitarbeiterModel');
|
$this->_ci->load->model('ressource/mitarbeiter_model', 'MitarbeiterModel');
|
||||||
$this->_ci->load->model('person/Benutzer_model', 'BenutzerModel');
|
$this->_ci->load->model('person/Benutzer_model', 'BenutzerModel');
|
||||||
$this->_ci->load->model('ressource/Zeitsperre_model', 'ZeitsperreModel');
|
|
||||||
$this->_ci->load->model('ressource/Reservierung_model', 'ReservierungModel');
|
|
||||||
$this->_ci->load->model('ressource/stundenplandev_model', 'StundenplandevModel');
|
|
||||||
|
|
||||||
$this->_ci->load->library('PhrasesLib', array('lehre'));
|
$this->_ci->load->library('PhrasesLib', array('lehre'));
|
||||||
$this->_ci->load->library('VariableLib', ['uid' => getAuthUID()]);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public function addLektorToLehreinheit($lehreinheit_id, $mitarbeiter_uid)
|
public function addLektorToLehreinheit($lehreinheit_id, $mitarbeiter_uid)
|
||||||
@@ -83,13 +78,10 @@ class LektorLib
|
|||||||
|
|
||||||
public function updateLektorFromLehreinheit($lehreinheit_id, $mitarbeiter_uid, $new_data)
|
public function updateLektorFromLehreinheit($lehreinheit_id, $mitarbeiter_uid, $new_data)
|
||||||
{
|
{
|
||||||
$old_uid = $mitarbeiter_uid;
|
|
||||||
$new_uid = isset($new_data['mitarbeiter_uid']) ? $new_data['mitarbeiter_uid'] : $mitarbeiter_uid;
|
|
||||||
|
|
||||||
$this->_ci->LehreinheitmitarbeiterModel->addSelect('lehre.tbl_lehreinheitmitarbeiter.*, lehre.tbl_lehreinheit.studiensemester_kurzbz, tbl_lehrveranstaltung.studiengang_kz');
|
$this->_ci->LehreinheitmitarbeiterModel->addSelect('lehre.tbl_lehreinheitmitarbeiter.*, lehre.tbl_lehreinheit.studiensemester_kurzbz, tbl_lehrveranstaltung.studiengang_kz');
|
||||||
$this->_ci->LehreinheitmitarbeiterModel->addJoin('lehre.tbl_lehreinheit', 'lehreinheit_id');
|
$this->_ci->LehreinheitmitarbeiterModel->addJoin('lehre.tbl_lehreinheit', 'lehreinheit_id');
|
||||||
$this->_ci->LehreinheitmitarbeiterModel->addJoin('lehre.tbl_lehrveranstaltung', 'lehrveranstaltung_id');
|
$this->_ci->LehreinheitmitarbeiterModel->addJoin('lehre.tbl_lehrveranstaltung', 'lehrveranstaltung_id');
|
||||||
$lehreinheit_result = $this->_ci->LehreinheitmitarbeiterModel->loadWhere(array('lehreinheit_id' => $lehreinheit_id, 'mitarbeiter_uid' => $old_uid));
|
$lehreinheit_result = $this->_ci->LehreinheitmitarbeiterModel->loadWhere(array('lehreinheit_id' => $lehreinheit_id, 'mitarbeiter_uid' => $mitarbeiter_uid));
|
||||||
|
|
||||||
if (isError($lehreinheit_result)) return $lehreinheit_result;
|
if (isError($lehreinheit_result)) return $lehreinheit_result;
|
||||||
|
|
||||||
@@ -97,47 +89,27 @@ class LektorLib
|
|||||||
|
|
||||||
$lehreinheit = getData($lehreinheit_result)[0];
|
$lehreinheit = getData($lehreinheit_result)[0];
|
||||||
|
|
||||||
$semesterstunden_alt = $lehreinheit->semesterstunden;
|
|
||||||
$semesterstunden_neu = isset($new_data['semesterstunden']) ? $new_data['semesterstunden'] : $semesterstunden_alt;
|
|
||||||
$bismelden_neu = isset($new_data['bismelden']) ? $new_data['bismelden'] : $lehreinheit->bismelden;
|
|
||||||
$neue_stunden_eingerechnet = (bool)$bismelden_neu;
|
|
||||||
$alte_stunden_eingerechnet = (bool)$lehreinheit->bismelden;
|
|
||||||
$stundenplan_update = false;
|
|
||||||
|
|
||||||
if ($old_uid !== $new_uid)
|
//TODO kollision check, wird vorerst nicht implementiert -> nur über das FAS möglich
|
||||||
|
if (isset($new_data['mitarbeiter_uid']) && $new_data['mitarbeiter_uid'] !== $mitarbeiter_uid)
|
||||||
{
|
{
|
||||||
$lehreinheit_data = $this->_ci->LehreinheitmitarbeiterModel->loadWhere(array('mitarbeiter_uid' => $new_uid, 'lehreinheit_id' => $lehreinheit_id));
|
$this->_ci->load->model('ressource/stundenplandev_model', 'StundenplandevModel');
|
||||||
|
$this->_ci->StundenplandevModel->addGroupBy('stundenplandev_id');
|
||||||
|
$this->_ci->StundenplandevModel->addGroupBy('mitarbeiter_uid');
|
||||||
|
$this->_ci->StundenplandevModel->addGroupBy('mitarbeiter_uid');
|
||||||
|
$verplant = $this->_ci->StundenplandevModel->loadWhere(array('lehreinheit_id' => $lehreinheit_id, 'mitarbeiter_uid' => $mitarbeiter_uid));
|
||||||
|
|
||||||
|
if (hasData($verplant))
|
||||||
|
return error($this->_ci->phraseslib->t("lehre", "lektorbereitsverplant"));
|
||||||
|
|
||||||
|
$lehreinheit_data = $this->_ci->LehreinheitmitarbeiterModel->loadWhere(array('mitarbeiter_uid' => $new_data['mitarbeiter_uid'], 'lehreinheit_id' => $lehreinheit_id));
|
||||||
|
|
||||||
if (hasData($lehreinheit_data))
|
if (hasData($lehreinheit_data))
|
||||||
return error($this->_ci->phraseslib->t("lehre", "bereitzugeteilt"));
|
return error($this->_ci->phraseslib->t("lehre", "bereitzugeteilt"));
|
||||||
|
|
||||||
$this->_ci->StundenplandevModel->addGroupBy('stundenplandev_id');
|
|
||||||
$this->_ci->StundenplandevModel->addGroupBy('mitarbeiter_uid');
|
|
||||||
$verplant = $this->_ci->StundenplandevModel->loadWhere(array('lehreinheit_id' => $lehreinheit_id, 'mitarbeiter_uid' => $old_uid));
|
|
||||||
|
|
||||||
if (hasData($verplant))
|
|
||||||
{
|
|
||||||
$kollision = $this->hasKollision(getData($verplant), $new_uid);
|
|
||||||
|
|
||||||
$ignore_kollision = $this->_ci->variablelib->getVar('ignore_kollision');
|
|
||||||
|
|
||||||
if ($kollision === false || $ignore_kollision == 'true')
|
|
||||||
{
|
|
||||||
$stundenplan_update = true;
|
|
||||||
}
|
|
||||||
else if (is_array($kollision))
|
|
||||||
{
|
|
||||||
return error( "Änderung fehlgeschlagen! Die Änderung des Lektors führt zu ".count($kollision)." Kollision(en) im LV-Plan. Deaktivieren Sie die Kollisionspruefung oder wenden Sie sich an die LV-Planung!\n zB. $kollision[0]");
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
return error($kollision);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
$warning = '';
|
$warning = '';
|
||||||
if (($semesterstunden_neu !== '' && $semesterstunden_alt !== '') && (($semesterstunden_neu > $semesterstunden_alt) || $neue_stunden_eingerechnet))
|
if (isset($new_data['semesterstunden']))
|
||||||
{
|
{
|
||||||
$studiengang_result = $this->_ci->StudiengangModel->loadWhere(array('studiengang_kz' => $lehreinheit->studiengang_kz));
|
$studiengang_result = $this->_ci->StudiengangModel->loadWhere(array('studiengang_kz' => $lehreinheit->studiengang_kz));
|
||||||
if (isError($studiengang_result)) return $studiengang_result;
|
if (isError($studiengang_result)) return $studiengang_result;
|
||||||
@@ -148,7 +120,7 @@ class LektorLib
|
|||||||
if (isError($studiensemester_result)) return $studiensemester_result;
|
if (isError($studiensemester_result)) return $studiensemester_result;
|
||||||
$studiensemester = getData($studiensemester_result)[0];
|
$studiensemester = getData($studiensemester_result)[0];
|
||||||
|
|
||||||
$echter_dv_result = $this->_ci->DienstverhaeltnisModel->existsDienstverhaeltnis($new_uid, $studiensemester->start, $studiensemester->ende, 'echterdv');
|
$echter_dv_result = $this->_ci->DienstverhaeltnisModel->existsDienstverhaeltnis($mitarbeiter_uid, $studiensemester->start, $studiensemester->ende, 'echterdv');
|
||||||
|
|
||||||
$echter_dv = false;
|
$echter_dv = false;
|
||||||
|
|
||||||
@@ -157,78 +129,83 @@ class LektorLib
|
|||||||
$echter_dv = true;
|
$echter_dv = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
$stundengrenze_result = $this->_ci->OrganisationseinheitModel->getStundengrenze($studiengang->oe_kurzbz, $echter_dv);
|
$neue_stunden_eingerechnet = isset($new_data['bismelden']) ? $new_data['bismelden'] : $lehreinheit->bismelden;
|
||||||
if (isError($stundengrenze_result)) return $stundengrenze_result;
|
$alte_stunden_eingerechnet = $lehreinheit->bismelden;
|
||||||
|
|
||||||
$stundengrenze = getData($stundengrenze_result)[0];
|
if (($new_data['semesterstunden'] > $lehreinheit->semesterstunden) || $neue_stunden_eingerechnet)
|
||||||
|
|
||||||
$oe_result = $this->_ci->OrganisationseinheitModel->getChilds($stundengrenze->oe_kurzbz);
|
|
||||||
$oe_array = hasData($oe_result) ? array_column(getData($oe_result), 'oe_kurzbz') : array();
|
|
||||||
|
|
||||||
if ($alte_stunden_eingerechnet && $neue_stunden_eingerechnet)
|
|
||||||
$this->_ci->LehreinheitmitarbeiterModel->addSelect("(SUM(tbl_lehreinheitmitarbeiter.semesterstunden) - ($semesterstunden_alt) + {$this->_ci->LehreinheitmitarbeiterModel->db->escape($semesterstunden_neu)}) as summe");
|
|
||||||
else if ($alte_stunden_eingerechnet && !$neue_stunden_eingerechnet)
|
|
||||||
$this->_ci->LehreinheitmitarbeiterModel->addSelect("(SUM(tbl_lehreinheitmitarbeiter.semesterstunden) - ($semesterstunden_alt)) as summe");
|
|
||||||
else if (!$alte_stunden_eingerechnet && $neue_stunden_eingerechnet)
|
|
||||||
$this->_ci->LehreinheitmitarbeiterModel->addSelect("(SUM(tbl_lehreinheitmitarbeiter.semesterstunden) + ({$this->_ci->LehreinheitmitarbeiterModel->db->escape($semesterstunden_neu)})) as summe");
|
|
||||||
else if (!$alte_stunden_eingerechnet && !$neue_stunden_eingerechnet)
|
|
||||||
$this->_ci->LehreinheitmitarbeiterModel->addSelect("(SUM(tbl_lehreinheitmitarbeiter.semesterstunden)) as summe");
|
|
||||||
|
|
||||||
$this->_ci->LehreinheitmitarbeiterModel->addJoin('lehre.tbl_lehreinheit', 'lehreinheit_id');
|
|
||||||
$this->_ci->LehreinheitmitarbeiterModel->addJoin('lehre.tbl_lehrveranstaltung', 'lehrveranstaltung_id');
|
|
||||||
$this->_ci->LehreinheitmitarbeiterModel->addJoin('public.tbl_studiengang', 'studiengang_kz');
|
|
||||||
|
|
||||||
$this->_ci->LehreinheitmitarbeiterModel->db->where('mitarbeiter_uid', $new_uid);
|
|
||||||
$this->_ci->LehreinheitmitarbeiterModel->db->where('studiensemester_kurzbz', $lehreinheit->studiensemester_kurzbz);
|
|
||||||
$this->_ci->LehreinheitmitarbeiterModel->db->where('bismelden', true);
|
|
||||||
$this->_ci->LehreinheitmitarbeiterModel->db->where('lower(mitarbeiter_uid) NOT LIKE', '_dummy%');
|
|
||||||
|
|
||||||
if (count($oe_array) > 0)
|
|
||||||
{
|
{
|
||||||
|
$stundengrenze_result = $this->_ci->OrganisationseinheitModel->getStundengrenze($studiengang->oe_kurzbz, $echter_dv);
|
||||||
|
if (isError($stundengrenze_result)) return $stundengrenze_result;
|
||||||
|
|
||||||
|
$stundengrenze = getData($stundengrenze_result)[0];
|
||||||
|
|
||||||
|
$oe_result = $this->_ci->OrganisationseinheitModel->getChilds($stundengrenze->oe_kurzbz);
|
||||||
|
$oe_array = hasData($oe_result) ? array_column(getData($oe_result), 'oe_kurzbz') : array('');
|
||||||
|
|
||||||
|
if ($alte_stunden_eingerechnet && $neue_stunden_eingerechnet)
|
||||||
|
$this->_ci->LehreinheitmitarbeiterModel->addSelect("(SUM(tbl_lehreinheitmitarbeiter.semesterstunden) - ($lehreinheit->semesterstunden) + {$this->_ci->LehreinheitmitarbeiterModel->db->escape($new_data['semesterstunden'])}) as summe");
|
||||||
|
else if ($alte_stunden_eingerechnet && !$neue_stunden_eingerechnet)
|
||||||
|
$this->_ci->LehreinheitmitarbeiterModel->addSelect("(SUM(tbl_lehreinheitmitarbeiter.semesterstunden) - ($lehreinheit->semesterstunden)) as summe");
|
||||||
|
else if (!$alte_stunden_eingerechnet && $neue_stunden_eingerechnet)
|
||||||
|
$this->_ci->LehreinheitmitarbeiterModel->addSelect("(SUM(tbl_lehreinheitmitarbeiter.semesterstunden) + ({$this->_ci->LehreinheitmitarbeiterModel->db->escape($new_data['semesterstunden'])})) as summe");
|
||||||
|
else if (!$alte_stunden_eingerechnet && !$neue_stunden_eingerechnet)
|
||||||
|
$this->_ci->LehreinheitmitarbeiterModel->addSelect("(SUM(tbl_lehreinheitmitarbeiter.semesterstunden)) as summe");
|
||||||
|
|
||||||
|
$this->_ci->LehreinheitmitarbeiterModel->addJoin('lehre.tbl_lehreinheit', 'lehreinheit_id');
|
||||||
|
$this->_ci->LehreinheitmitarbeiterModel->addJoin('lehre.tbl_lehrveranstaltung', 'lehrveranstaltung_id');
|
||||||
|
$this->_ci->LehreinheitmitarbeiterModel->addJoin('public.tbl_studiengang', 'studiengang_kz');
|
||||||
|
|
||||||
|
$this->_ci->LehreinheitmitarbeiterModel->db->where('mitarbeiter_uid', (isset($new_data['mitarbeiter_uid']) ? $new_data['mitarbeiter_uid'] : $mitarbeiter_uid));
|
||||||
|
$this->_ci->LehreinheitmitarbeiterModel->db->where('studiensemester_kurzbz', $lehreinheit->studiensemester_kurzbz);
|
||||||
|
$this->_ci->LehreinheitmitarbeiterModel->db->where('bismelden', true);
|
||||||
|
$this->_ci->LehreinheitmitarbeiterModel->db->where('lower(mitarbeiter_uid) NOT LIKE', '_dummy%');
|
||||||
|
|
||||||
$this->_ci->LehreinheitmitarbeiterModel->db->where_in('tbl_studiengang.oe_kurzbz', $oe_array);
|
$this->_ci->LehreinheitmitarbeiterModel->db->where_in('tbl_studiengang.oe_kurzbz', $oe_array);
|
||||||
}
|
|
||||||
|
|
||||||
if(defined('FAS_LV_LEKTORINNENZUTEILUNG_STUNDEN_IGNORE_OE')
|
|
||||||
&& is_array(FAS_LV_LEKTORINNENZUTEILUNG_STUNDEN_IGNORE_OE)
|
|
||||||
&& count(FAS_LV_LEKTORINNENZUTEILUNG_STUNDEN_IGNORE_OE) > 0)
|
|
||||||
{
|
|
||||||
$this->_ci->LehreinheitmitarbeiterModel->db->where_not_in('tbl_studiengang.oe_kurzbz', FAS_LV_LEKTORINNENZUTEILUNG_STUNDEN_IGNORE_OE);
|
|
||||||
}
|
|
||||||
|
|
||||||
$summe_result = $this->_ci->LehreinheitmitarbeiterModel->load();
|
if(defined('FAS_LV_LEKTORINNENZUTEILUNG_STUNDEN_IGNORE_OE')
|
||||||
|
&& is_array(FAS_LV_LEKTORINNENZUTEILUNG_STUNDEN_IGNORE_OE)
|
||||||
if (isError($summe_result)) return $summe_result;
|
&& count(FAS_LV_LEKTORINNENZUTEILUNG_STUNDEN_IGNORE_OE) > 0)
|
||||||
|
|
||||||
if (!hasData($summe_result)) return error('Fehler beim Ermitteln der Gesamtstunden');
|
|
||||||
|
|
||||||
$summe = getData($summe_result)[0]->summe;
|
|
||||||
|
|
||||||
if ($summe > $stundengrenze->stunden)
|
|
||||||
{
|
|
||||||
if (!$echter_dv && (!$this->_ci->permissionlib->isBerechtigt('admin')))
|
|
||||||
{
|
{
|
||||||
if (!$this->LehrauftragAufFirma($new_uid))
|
$this->_ci->LehreinheitmitarbeiterModel->db->where_not_in('tbl_studiengang.oe_kurzbz', FAS_LV_LEKTORINNENZUTEILUNG_STUNDEN_IGNORE_OE);
|
||||||
return error("ACHTUNG: Die maximal erlaubte Semesterstundenanzahl des Lektors von $summe Stunden ($stundengrenze->stunden) wurde ueberschritten!\nDaten wurden NICHT gespeichert!\n\n");
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
$warning .= "ACHTUNG: Die maximal erlaubte Semesterstundenanzahl des Lektors von $summe Stunden ($stundengrenze->stunden) wurde ueberschritten!\nDaten wurden gespeichert!\n\n";
|
|
||||||
}
|
}
|
||||||
|
|
||||||
$stunden_limit_result = $this->getStundenInstitut($new_uid, $lehreinheit->studiensemester_kurzbz, $oe_array);
|
$summe_result = $this->_ci->LehreinheitmitarbeiterModel->load();
|
||||||
|
|
||||||
if (hasData($stunden_limit_result))
|
if (isError($summe_result)) return $summe_result;
|
||||||
|
|
||||||
|
if (!hasData($summe_result)) return error('Fehler beim Ermitteln der Gesamtstunden');
|
||||||
|
|
||||||
|
$summe = getData($summe_result)[0]->summe;
|
||||||
|
|
||||||
|
if ($summe > $stundengrenze->stunden)
|
||||||
{
|
{
|
||||||
$stunden_limit_array = getData($stunden_limit_result);
|
|
||||||
foreach ($stunden_limit_array as $stunden_limit)
|
if (!$echter_dv && (!$this->_ci->permissionlib->isBerechtigt('admin')))
|
||||||
{
|
{
|
||||||
$warning .= $stunden_limit->summe . ' Stunden ' . $stunden_limit->bezeichnung . "\n";
|
if (!$this->LehrauftragAufFirma(isset($formData['mitarbeiter_uid']) ? $formData['mitarbeiter_uid'] : $mitarbeiter_uid))
|
||||||
|
return error("ACHTUNG: Die maximal erlaubte Semesterstundenanzahl des Lektors von $summe Stunden ($stundengrenze->stunden) wurde ueberschritten!\nDaten wurden NICHT gespeichert!\n\n");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
$warning .= "ACHTUNG: Die maximal erlaubte Semesterstundenanzahl des Lektors von $summe Stunden ($stundengrenze->stunden) wurde ueberschritten!\nDaten wurden gespeichert!\n\n";
|
||||||
|
}
|
||||||
|
|
||||||
|
$stunden_limit_result = $this->getStundenInstitut($mitarbeiter_uid, $lehreinheit->studiensemester_kurzbz, $oe_array);
|
||||||
|
|
||||||
|
if (hasData($stunden_limit_result))
|
||||||
|
{
|
||||||
|
$stunden_limit_array = getData($stunden_limit_result);
|
||||||
|
foreach ($stunden_limit_array as $stunden_limit)
|
||||||
|
{
|
||||||
|
$warning .= $stunden_limit->summe . ' Stunden ' . $stunden_limit->bezeichnung . "\n";
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
$benutzer_result = $this->_ci->BenutzerModel->load(array($new_uid));
|
$benutzer_result = $this->_ci->BenutzerModel->load(array(isset($formData['mitarbeiter_uid']) ? $formData['mitarbeiter_uid'] : $mitarbeiter_uid));
|
||||||
|
|
||||||
if (isError($benutzer_result)) return $benutzer_result;
|
if (isError($benutzer_result)) return $benutzer_result;
|
||||||
|
|
||||||
@@ -250,23 +227,12 @@ class LektorLib
|
|||||||
'bismelden'
|
'bismelden'
|
||||||
);
|
);
|
||||||
|
|
||||||
$nullable_fields = array('stundensatz', 'semesterstunden', 'planstunden');
|
|
||||||
|
|
||||||
$updateData = array();
|
$updateData = array();
|
||||||
foreach ($updatableFields as $field)
|
foreach ($updatableFields as $field)
|
||||||
{
|
{
|
||||||
if (!array_key_exists($field, $new_data))
|
$value = isset($new_data[$field]) ? $new_data[$field] : null;
|
||||||
{
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
$value = $new_data[$field];
|
if ($value !== null)
|
||||||
|
|
||||||
if (in_array($field, $nullable_fields))
|
|
||||||
{
|
|
||||||
$updateData[$field] = $value;
|
|
||||||
}
|
|
||||||
elseif ($value !== null)
|
|
||||||
{
|
{
|
||||||
$updateData[$field] = $value;
|
$updateData[$field] = $value;
|
||||||
}
|
}
|
||||||
@@ -274,24 +240,10 @@ class LektorLib
|
|||||||
$updateData['updatevon'] = getAuthUID();
|
$updateData['updatevon'] = getAuthUID();
|
||||||
$updateData['updateamum'] = date('Y-m-d H:i:s');
|
$updateData['updateamum'] = date('Y-m-d H:i:s');
|
||||||
|
|
||||||
$result = $this->_ci->LehreinheitmitarbeiterModel->update(array('lehreinheit_id' => $lehreinheit_id, 'mitarbeiter_uid' => $old_uid), $updateData);
|
$result = $this->_ci->LehreinheitmitarbeiterModel->update(array('lehreinheit_id' => $lehreinheit_id, 'mitarbeiter_uid' => $mitarbeiter_uid), $updateData);
|
||||||
|
|
||||||
if (isError($result)) return $result;
|
if (isError($result)) return $result;
|
||||||
|
|
||||||
if ($stundenplan_update)
|
|
||||||
{
|
|
||||||
$update_result = $this->_ci->StundenplandevModel->update([
|
|
||||||
'lehreinheit_id' => $lehreinheit_id,
|
|
||||||
'mitarbeiter_uid' => $old_uid,
|
|
||||||
], [
|
|
||||||
'mitarbeiter_uid' => $new_uid,
|
|
||||||
'updateamum' => date('Y-m-d H:i:s'),
|
|
||||||
'updatevon' => getAuthUID()
|
|
||||||
]);
|
|
||||||
|
|
||||||
if (isError($update_result)) return $update_result;
|
|
||||||
}
|
|
||||||
|
|
||||||
if ($warning !== '') return success(['warning' => $warning]);
|
if ($warning !== '') return success(['warning' => $warning]);
|
||||||
|
|
||||||
return success('Erfolgreich geupdated');
|
return success('Erfolgreich geupdated');
|
||||||
@@ -395,52 +347,4 @@ class LektorLib
|
|||||||
$this->_ci->LehreinheitmitarbeiterModel->addGroupBy('tbl_studiengang.bezeichnung');
|
$this->_ci->LehreinheitmitarbeiterModel->addGroupBy('tbl_studiengang.bezeichnung');
|
||||||
return $this->_ci->LehreinheitmitarbeiterModel->load();
|
return $this->_ci->LehreinheitmitarbeiterModel->load();
|
||||||
}
|
}
|
||||||
|
|
||||||
private function hasKollision($stunden, $mitarbeiter)
|
|
||||||
{
|
|
||||||
$kollision = array();
|
|
||||||
|
|
||||||
$ignore_zeitsperre = $this->_ci->variablelib->getVar('ignore_zeitsperre');
|
|
||||||
$ignore_reservierung = $this->_ci->variablelib->getVar('ignore_reservierung');
|
|
||||||
|
|
||||||
foreach ($stunden as $stunde)
|
|
||||||
{
|
|
||||||
$stundenplan_result = $this->_ci->StundenplandevModel->lektorHasStundenplandevEintrag($mitarbeiter, $stunde->datum, $stunde->stunde);
|
|
||||||
|
|
||||||
if (isError($stundenplan_result))
|
|
||||||
return $stundenplan_result;
|
|
||||||
|
|
||||||
if (hasData($stundenplan_result))
|
|
||||||
{
|
|
||||||
$stundenplan_result = getData($stundenplan_result)[0];
|
|
||||||
$kollision[] = "Kollision stundenplandev: $stundenplan_result->stundenplandev_id|$stundenplan_result->lektor|$stundenplan_result->ort_kurzbz|$stundenplan_result->stg_kurzbz-$stundenplan_result->semester$stundenplan_result->verband$stundenplan_result->gruppe$stundenplan_result->gruppe_kurzbz - $stundenplan_result->datum/$stundenplan_result->stunde";
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
if ($ignore_zeitsperre == 'false' && (!defined('KOLLISIONSFREIE_USER') || !in_array($mitarbeiter, unserialize(KOLLISIONSFREIE_USER))))
|
|
||||||
{
|
|
||||||
$zeitsperre_result = $this->_ci->ZeitsperreModel->checkIfZeitsperreExists($mitarbeiter, $stunde->datum, $stunde->stunde);
|
|
||||||
|
|
||||||
if (hasData($zeitsperre_result))
|
|
||||||
{
|
|
||||||
$zeitsperre_result = getData($zeitsperre_result)[0];
|
|
||||||
$kollision[] = "Kollision (Zeitsperre): $zeitsperre_result->zeitsperre_id|$zeitsperre_result->mitarbeiter_uid|$zeitsperre_result->zeitsperretyp_kurzbz - $zeitsperre_result->vondatum/$zeitsperre_result->vonstunde|$zeitsperre_result->bisdatum/$zeitsperre_result->bisstunde";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if ($ignore_reservierung == 'false' && (!defined('KOLLISIONSFREIE_USER') || !in_array($mitarbeiter, unserialize(KOLLISIONSFREIE_USER))))
|
|
||||||
{
|
|
||||||
$reservierung_result = $this->_ci->ReservierungModel->lektorHasReservierung($mitarbeiter, $stunde->datum, $stunde->stunde);
|
|
||||||
|
|
||||||
if (hasData($reservierung_result))
|
|
||||||
{
|
|
||||||
$reservierung_result = getData($reservierung_result)[0];
|
|
||||||
$kollision[] = "Kollision (Reservierung): $reservierung_result->reservierung_id|$reservierung_result->uid|$reservierung_result->ort_kurzbz|$reservierung_result->stg_kurzbz-$reservierung_result->semester$reservierung_result->verband$reservierung_result->gruppe$reservierung_result->gruppe_kurzbz - $reservierung_result->datum/$reservierung_result->stunde";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return isEmptyArray($kollision) ? false : $kollision;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -181,21 +181,6 @@ class StundenplanLib
|
|||||||
return success($stundenplan_data);
|
return success($stundenplan_data);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getEventsByLE($lehreinheit_id, $start, $end, $stundenplan)
|
|
||||||
{
|
|
||||||
$this->_ci =& get_instance();
|
|
||||||
|
|
||||||
$this->_ci->load->model('ressource/Stundenplan_model', 'StundenplanModel');
|
|
||||||
return $this->_ci->StundenplanModel->getStundenplanLE($lehreinheit_id, $start, $end, $stundenplan);
|
|
||||||
}
|
|
||||||
|
|
||||||
public function getEventsByLV($lehrveranstaltung_id, $start, $end, $stundenplan)
|
|
||||||
{
|
|
||||||
$this->_ci =& get_instance();
|
|
||||||
|
|
||||||
$this->_ci->load->model('ressource/Stundenplan_model', 'StundenplanModel');
|
|
||||||
return $this->_ci->StundenplanModel->getStundenplanLV($lehrveranstaltung_id, $start, $end, $stundenplan);
|
|
||||||
}
|
|
||||||
/**
|
/**
|
||||||
* Get stundenplan for a room
|
* Get stundenplan for a room
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -0,0 +1,363 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* 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/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
if (! defined('BASEPATH')) exit('No direct script access allowed');
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This generates a list of students and or prestudents used for Studierendenverwaltung
|
||||||
|
*/
|
||||||
|
class StudentListLib
|
||||||
|
{
|
||||||
|
private $_ci; // Code igniter instance
|
||||||
|
|
||||||
|
private $_allowedStgs = [];
|
||||||
|
private $_selects = [];
|
||||||
|
private $_joins = [];
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the CI instance, loads model and prepares default values
|
||||||
|
*
|
||||||
|
* @param array $params
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function __construct($params = null)
|
||||||
|
{
|
||||||
|
$this->_ci =& get_instance(); // get code igniter instance
|
||||||
|
|
||||||
|
$this->_ci->load->model('crm/Prestudent_model', 'PrestudentModel');
|
||||||
|
|
||||||
|
if (isset($params['allowedStgs']))
|
||||||
|
$this->_allowedStgs = $params['allowedStgs'];
|
||||||
|
|
||||||
|
// Add default SELECTs
|
||||||
|
$this->addSelect("b.uid");
|
||||||
|
if (defined('STV_TAGS_ENABLED') && STV_TAGS_ENABLED)
|
||||||
|
$this->addSelect('tag_data_agg.tags');
|
||||||
|
$this->addSelect('titelpre');
|
||||||
|
$this->addSelect('nachname');
|
||||||
|
$this->addSelect('vorname');
|
||||||
|
$this->addSelect('wahlname');
|
||||||
|
$this->addSelect('vornamen');
|
||||||
|
$this->addSelect('titelpost');
|
||||||
|
$this->addSelect('ersatzkennzeichen');
|
||||||
|
$this->addSelect('gebdatum');
|
||||||
|
$this->addSelect('geschlecht');
|
||||||
|
$this->addSelect('foto');
|
||||||
|
$this->addSelect('foto_sperre');
|
||||||
|
$this->addSelect('v.semester');
|
||||||
|
$this->addSelect('v.verband');
|
||||||
|
$this->addSelect('v.gruppe');
|
||||||
|
$this->addSelect("statusofsemester"); // Will be replaced later
|
||||||
|
$this->addSelect('UPPER(stg.typ || stg.kurzbz) AS studiengang');
|
||||||
|
$this->addSelect('tbl_prestudent.studiengang_kz');
|
||||||
|
$this->addSelect('stg.bezeichnung AS stg_bezeichnung');
|
||||||
|
$this->addSelect("s.matrikelnr");
|
||||||
|
$this->addSelect('p.person_id');
|
||||||
|
$this->addSelect('pls.status_kurzbz AS status');
|
||||||
|
$this->addSelect('pls.datum AS status_datum');
|
||||||
|
$this->addSelect('pls.bestaetigtam AS status_bestaetigung');
|
||||||
|
$this->addSelect(
|
||||||
|
"(SELECT kontakt FROM public.tbl_kontakt WHERE kontakttyp='email' AND person_id=p.person_id AND zustellung LIMIT 1) AS mail_privat",
|
||||||
|
false
|
||||||
|
);
|
||||||
|
$this->addSelect("
|
||||||
|
CASE WHEN b.uid IS NOT NULL AND b.uid<>''
|
||||||
|
THEN CONCAT(b.uid, '@', " . $this->_ci->PrestudentModel->escape(DOMAIN) . ")
|
||||||
|
ELSE '' END AS mail_intern", false);
|
||||||
|
$this->addSelect('p.anmerkung AS anmerkungen');
|
||||||
|
$this->addSelect('tbl_prestudent.anmerkung');
|
||||||
|
$this->addSelect('pls.orgform_kurzbz');
|
||||||
|
$this->addSelect('aufmerksamdurch_kurzbz');
|
||||||
|
$this->addSelect(
|
||||||
|
"(SELECT rt_gesamtpunkte AS punkte FROM public.tbl_prestudent WHERE prestudent_id=ps.prestudent_id) AS punkte",
|
||||||
|
false
|
||||||
|
);
|
||||||
|
$this->addSelect('tbl_prestudent.aufnahmegruppe_kurzbz');
|
||||||
|
$this->addSelect('tbl_prestudent.dual');
|
||||||
|
$this->addSelect('p.matr_nr');
|
||||||
|
$this->addSelect('sp.bezeichnung AS studienplan_bezeichnung');
|
||||||
|
$this->addSelect('tbl_prestudent.prestudent_id');
|
||||||
|
$this->addSelect("(
|
||||||
|
SELECT count(*)
|
||||||
|
FROM (
|
||||||
|
SELECT *, public.get_rolle_prestudent(pss.prestudent_id, NULL) AS laststatus
|
||||||
|
FROM public.tbl_prestudent pss
|
||||||
|
JOIN public.tbl_prestudentstatus USING (prestudent_id)
|
||||||
|
WHERE person_id = p.person_id
|
||||||
|
AND studiensemester_kurzbz = (
|
||||||
|
SELECT studiensemester_kurzbz
|
||||||
|
FROM public.tbl_prestudentstatus
|
||||||
|
WHERE prestudent_id = tbl_prestudent.prestudent_id
|
||||||
|
AND status_kurzbz = 'Interessent'
|
||||||
|
LIMIT 1
|
||||||
|
)
|
||||||
|
AND status_kurzbz = 'Interessent'
|
||||||
|
) prest
|
||||||
|
WHERE laststatus NOT IN ('Abbrecher', 'Abgewiesener', 'Absolvent')
|
||||||
|
AND priorisierung <= tbl_prestudent.priorisierung
|
||||||
|
) || ' (' || COALESCE(tbl_prestudent.priorisierung::text, ' '::text) || ')' AS priorisierung_relativ", false); // TODO(chris): overwrite in fetchStudents
|
||||||
|
$this->addSelect('mentor');
|
||||||
|
$this->addSelect('b.aktiv AS bnaktiv');
|
||||||
|
$this->addSelect('unruly');
|
||||||
|
|
||||||
|
// Add default JOINs
|
||||||
|
$this->addJoin('public.tbl_studiengang stg', 'studiengang_kz', 'LEFT');
|
||||||
|
$this->addJoin('public.tbl_person p', 'person_id');
|
||||||
|
$this->addJoin('public.tbl_student s', 'prestudent_id', 'LEFT'); // TODO(chris): overwrite in fetchStudents
|
||||||
|
$this->addJoin('public.tbl_prestudentstatus pls', '
|
||||||
|
pls.status_kurzbz=public.get_rolle_prestudent(tbl_prestudent.prestudent_id, NULL)
|
||||||
|
AND pls.prestudent_id=tbl_prestudent.prestudent_id
|
||||||
|
AND pls.studiensemester_kurzbz=public.get_stdsem_prestudent(tbl_prestudent.prestudent_id, NULL)
|
||||||
|
AND pls.ausbildungssemester=public.get_absem_prestudent(tbl_prestudent.prestudent_id, NULL)', 'LEFT');
|
||||||
|
$this->addJoin('lehre.tbl_studienplan sp', 'studienplan_id', 'LEFT');
|
||||||
|
$this->addJoin('public.tbl_benutzer b', 's.student_uid=b.uid', 'LEFT');
|
||||||
|
$this->addJoin("v", "", ""); // Will be replaced later
|
||||||
|
$this->addJoin("ps", "", ""); // Will be replaced later
|
||||||
|
if (defined('STV_TAGS_ENABLED') && STV_TAGS_ENABLED) {
|
||||||
|
$this->_ci->load->config('stv');
|
||||||
|
$tags = $this->_ci->config->item('stv_prestudent_tags');
|
||||||
|
|
||||||
|
$whereTags = '';
|
||||||
|
if (is_array($tags) && !isEmptyArray($tags)) {
|
||||||
|
$tags = array_keys($tags);
|
||||||
|
|
||||||
|
foreach ($tags as $key => $tag) {
|
||||||
|
$tags[$key] = $this->_ci->PrestudentModel->escape($tag);
|
||||||
|
}
|
||||||
|
$whereTags = " AND nt.typ_kurzbz IN (" . implode(",", $tags) . ")";
|
||||||
|
}
|
||||||
|
$subQueryTag = "(
|
||||||
|
SELECT
|
||||||
|
tag.prestudent_id,
|
||||||
|
COALESCE(json_agg(tag ORDER BY tag.done), '[]'::json) AS tags
|
||||||
|
FROM (
|
||||||
|
SELECT DISTINCT ON (n.notiz_id)
|
||||||
|
n.notiz_id AS id,
|
||||||
|
nt.typ_kurzbz,
|
||||||
|
array_to_json(nt.bezeichnung_mehrsprachig)->>0 AS beschreibung,
|
||||||
|
n.text AS notiz,
|
||||||
|
nt.style,
|
||||||
|
n.erledigt AS done,
|
||||||
|
nz.prestudent_id
|
||||||
|
FROM public.tbl_notizzuordnung AS nz
|
||||||
|
JOIN public.tbl_notiz AS n ON nz.notiz_id = n.notiz_id
|
||||||
|
JOIN public.tbl_notiz_typ AS nt ON n.typ = nt.typ_kurzbz " . $whereTags . "
|
||||||
|
) AS tag
|
||||||
|
GROUP BY tag.prestudent_id
|
||||||
|
) AS tag_data_agg";
|
||||||
|
|
||||||
|
$this->addJoin($subQueryTag, 'tag_data_agg.prestudent_id = tbl_prestudent.prestudent_id', 'LEFT');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//------------------------------------------------------------------------------------------------------------------
|
||||||
|
// Public methods
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Adds a SELECT statement to the query.
|
||||||
|
*
|
||||||
|
* @param string|array $select
|
||||||
|
* @param boolean $escape (optional)
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function addSelect($select, $escape = true)
|
||||||
|
{
|
||||||
|
if (is_array($select)) {
|
||||||
|
foreach ($select as $s)
|
||||||
|
$this->addSelect($s, $escape);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
$alias = $this->getAliasFromSelect($select);
|
||||||
|
$this->_selects[$alias] = [$select, $escape];
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Joins a table to the query.
|
||||||
|
*
|
||||||
|
* @param string $table
|
||||||
|
* @param string $cond
|
||||||
|
* @param string $type (optional)
|
||||||
|
* @param string $position (optional)
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function addJoin($table, $cond, $type = '', $position = 'end')
|
||||||
|
{
|
||||||
|
$alias = $this->getAliasFromTable($table);
|
||||||
|
|
||||||
|
if ($position == 'end') {
|
||||||
|
return $this->_joins[$alias] = [$table, $cond, $type];
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($position == 'start') {
|
||||||
|
return $this->_joins = [$alias => [$table, $cond, $type]] + $this->_joins;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (substr($position, 0, 7) == 'before_') {
|
||||||
|
$ref = substr($position, 7);
|
||||||
|
$index = 0;
|
||||||
|
} elseif (substr($position, 0, 6) == 'after_') {
|
||||||
|
$ref = substr($position, 6);
|
||||||
|
$index = 1;
|
||||||
|
} else {
|
||||||
|
return $this->addJoin($table, $cond, $type);
|
||||||
|
}
|
||||||
|
if (!isset($this->_joins[$ref]))
|
||||||
|
return $this->addJoin($table, $cond, $type);
|
||||||
|
|
||||||
|
$key_indeces = array_flip(array_keys($this->_joins));
|
||||||
|
$index += $key_indeces[$ref];
|
||||||
|
|
||||||
|
if (!$index)
|
||||||
|
return $this->addJoin($table, $cond, $type, 'start');
|
||||||
|
|
||||||
|
$front_part = array_slice($this->_joins, 0, $index, true);
|
||||||
|
$back_part = array_slice($this->_joins, $index, null, true);
|
||||||
|
|
||||||
|
if (isset($front_part[$alias])) {
|
||||||
|
unset($front_part[$alias]);
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->_joins = $front_part + [$alias => [$table, $cond, $type]] + $back_part;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Adds a WHERE clause to the query.
|
||||||
|
*
|
||||||
|
* @param string|array $key
|
||||||
|
* @param string|array $value
|
||||||
|
* @param boolean $escape
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function addWhere($key, $value = null, $escape = true)
|
||||||
|
{
|
||||||
|
if (!is_array($key) && is_array($value)) {
|
||||||
|
$this->_ci->PrestudentModel->db->where_in($key, $value, $escape);
|
||||||
|
} else {
|
||||||
|
$this->_ci->PrestudentModel->db->where($key, $value, $escape);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Adds a OR WHERE clause to the query.
|
||||||
|
*
|
||||||
|
* @param string|array $key
|
||||||
|
* @param string|array $value
|
||||||
|
* @param boolean $escape
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function addOrWhere($key, $value = null, $escape = true)
|
||||||
|
{
|
||||||
|
if (!is_array($key) && is_array($value)) {
|
||||||
|
$this->_ci->PrestudentModel->db->or_where_in($key, $value, $escape);
|
||||||
|
} else {
|
||||||
|
$this->_ci->PrestudentModel->db->or_where($key, $value, $escape);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Generates the query and executes it.
|
||||||
|
*
|
||||||
|
* @param string|null $studiensemester_kurzbz
|
||||||
|
*
|
||||||
|
* @return stdClass result of the query
|
||||||
|
*/
|
||||||
|
public function execute($studiensemester_kurzbz)
|
||||||
|
{
|
||||||
|
$stdsemEsc = $studiensemester_kurzbz ? $this->_ci->PrestudentModel->escape($studiensemester_kurzbz) : 'NULL';
|
||||||
|
|
||||||
|
|
||||||
|
$this->addSelect(
|
||||||
|
"public.get_rolle_prestudent(
|
||||||
|
public.tbl_prestudent.prestudent_id,
|
||||||
|
" . $this->_ci->PrestudentModel->escape($studiensemester_kurzbz) . "
|
||||||
|
) AS statusofsemester"
|
||||||
|
);
|
||||||
|
$this->addJoin(
|
||||||
|
'public.tbl_studentlehrverband v',
|
||||||
|
'v.student_uid=s.student_uid AND v.studiensemester_kurzbz' . ($studiensemester_kurzbz ? '=' . $stdsemEsc : ' IS NULL'),
|
||||||
|
'LEFT'
|
||||||
|
);
|
||||||
|
$this->addJoin(
|
||||||
|
'public.tbl_prestudentstatus ps',
|
||||||
|
'ps.status_kurzbz=public.get_rolle_prestudent(tbl_prestudent.prestudent_id, ' . $stdsemEsc . ')
|
||||||
|
AND ps.prestudent_id=tbl_prestudent.prestudent_id
|
||||||
|
AND ps.studiensemester_kurzbz=public.get_stdsem_prestudent(tbl_prestudent.prestudent_id, ' . $stdsemEsc . ')
|
||||||
|
AND ps.ausbildungssemester=public.get_absem_prestudent(tbl_prestudent.prestudent_id, ' . $stdsemEsc . ')
|
||||||
|
',
|
||||||
|
'LEFT'
|
||||||
|
);
|
||||||
|
|
||||||
|
$this->addWhere('tbl_prestudent.studiengang_kz', $this->_allowedStgs);
|
||||||
|
|
||||||
|
foreach ($this->_joins as $join)
|
||||||
|
$this->_ci->PrestudentModel->addJoin($join[0], $join[1], $join[2]);
|
||||||
|
|
||||||
|
foreach ($this->_selects as $select)
|
||||||
|
$this->_ci->PrestudentModel->addSelect($select[0], $select[1]);
|
||||||
|
|
||||||
|
$this->_ci->PrestudentModel->addOrder('nachname');
|
||||||
|
$this->_ci->PrestudentModel->addOrder('vorname');
|
||||||
|
|
||||||
|
return $this->_ci->PrestudentModel->load();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//------------------------------------------------------------------------------------------------------------------
|
||||||
|
// Protected methods
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get alias of a table or select statement
|
||||||
|
*
|
||||||
|
* @param string $select
|
||||||
|
*
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
final protected function getAliasFromSelect($select)
|
||||||
|
{
|
||||||
|
if (strpos($select, ' ') !== false) {
|
||||||
|
return trim(strrchr($select, ' '));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (strpos($select, '.') !== false) {
|
||||||
|
return substr(strrchr($select, '.'), 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
return $select;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get alias of a table or select statement
|
||||||
|
*
|
||||||
|
* @param string|array $table
|
||||||
|
*
|
||||||
|
* @return string|array
|
||||||
|
*/
|
||||||
|
final protected function getAliasFromTable($table)
|
||||||
|
{
|
||||||
|
if (strpos($table, ' ') !== false) {
|
||||||
|
return trim(strrchr($table, ' '));
|
||||||
|
}
|
||||||
|
|
||||||
|
return $table;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -40,6 +40,8 @@ abstract class AbstractBestandteil implements IValidation
|
|||||||
|
|
||||||
if( is_bool($new_value) && ($old_value !== $new_value) ) {
|
if( is_bool($new_value) && ($old_value !== $new_value) ) {
|
||||||
$this->modifiedcolumns[$columnname] = $columnname;
|
$this->modifiedcolumns[$columnname] = $columnname;
|
||||||
|
} else if(is_null($old_value) xor is_null($new_value)) {
|
||||||
|
$this->modifiedcolumns[$columnname] = $columnname;
|
||||||
} else if($old_value != $new_value) {
|
} else if($old_value != $new_value) {
|
||||||
$this->modifiedcolumns[$columnname] = $columnname;
|
$this->modifiedcolumns[$columnname] = $columnname;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ namespace vertragsbestandteil;
|
|||||||
|
|
||||||
use Exception;
|
use Exception;
|
||||||
use vertragsbestandteil\VertragsbestandteilStunden;
|
use vertragsbestandteil\VertragsbestandteilStunden;
|
||||||
|
use vertragsbestandteil\VertragsbestandteilLohnguide;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Description of VertragsbestandteilFactory
|
* Description of VertragsbestandteilFactory
|
||||||
@@ -22,6 +23,7 @@ class VertragsbestandteilFactory
|
|||||||
const VERTRAGSBESTANDTEIL_URLAUBSANSPRUCH = 'urlaubsanspruch';
|
const VERTRAGSBESTANDTEIL_URLAUBSANSPRUCH = 'urlaubsanspruch';
|
||||||
const VERTRAGSBESTANDTEIL_ZEITAUFZEICHNUNG = 'zeitaufzeichnung';
|
const VERTRAGSBESTANDTEIL_ZEITAUFZEICHNUNG = 'zeitaufzeichnung';
|
||||||
const VERTRAGSBESTANDTEIL_LEHRE = 'lehre';
|
const VERTRAGSBESTANDTEIL_LEHRE = 'lehre';
|
||||||
|
const VERTRAGSBESTANDTEIL_LOHNGUIDE = 'lohnguide';
|
||||||
|
|
||||||
public static function getVertragsbestandteil($data, $fromdb=false)
|
public static function getVertragsbestandteil($data, $fromdb=false)
|
||||||
{
|
{
|
||||||
@@ -70,6 +72,11 @@ class VertragsbestandteilFactory
|
|||||||
$vertragsbestandteil->hydrateByStdClass($data, $fromdb);
|
$vertragsbestandteil->hydrateByStdClass($data, $fromdb);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case self::VERTRAGSBESTANDTEIL_LOHNGUIDE:
|
||||||
|
$vertragsbestandteil = new VertragsbestandteilLohnguide();
|
||||||
|
$vertragsbestandteil->hydrateByStdClass($data, $fromdb);
|
||||||
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
throw new Exception('Unknown vertragsbestandteiltyp_kurzbz '
|
throw new Exception('Unknown vertragsbestandteiltyp_kurzbz '
|
||||||
. $vertragsbestandteiltyp_kurzbz);
|
. $vertragsbestandteiltyp_kurzbz);
|
||||||
@@ -127,6 +134,12 @@ class VertragsbestandteilFactory
|
|||||||
$vertragsbestandteildbmodel = $CI->VertragsbestandteilZeitaufzeichnung_model;
|
$vertragsbestandteildbmodel = $CI->VertragsbestandteilZeitaufzeichnung_model;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case self::VERTRAGSBESTANDTEIL_LOHNGUIDE:
|
||||||
|
$CI->load->model('vertragsbestandteil/VertragsbestandteilLohnguide_model',
|
||||||
|
'VertragsbestandteilLohnguide_model');
|
||||||
|
$vertragsbestandteildbmodel = $CI->VertragsbestandteilLohnguide_model;
|
||||||
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
throw new Exception('Unknown vertragsbestandteil_kurzbz '
|
throw new Exception('Unknown vertragsbestandteil_kurzbz '
|
||||||
. $vertragsbestandteil_kurzbz);
|
. $vertragsbestandteil_kurzbz);
|
||||||
|
|||||||
@@ -10,6 +10,7 @@ require_once __DIR__ . '/VertragsbestandteilKuendigungsfrist.php';
|
|||||||
require_once __DIR__ . '/VertragsbestandteilUrlaubsanspruch.php';
|
require_once __DIR__ . '/VertragsbestandteilUrlaubsanspruch.php';
|
||||||
require_once __DIR__ . '/VertragsbestandteilFreitext.php';
|
require_once __DIR__ . '/VertragsbestandteilFreitext.php';
|
||||||
require_once __DIR__ . '/VertragsbestandteilKarenz.php';
|
require_once __DIR__ . '/VertragsbestandteilKarenz.php';
|
||||||
|
require_once __DIR__ . '/VertragsbestandteilLohnguide.php';
|
||||||
require_once __DIR__ . '/VertragsbestandteilFactory.php';
|
require_once __DIR__ . '/VertragsbestandteilFactory.php';
|
||||||
require_once __DIR__ . '/OverlapChecker.php';
|
require_once __DIR__ . '/OverlapChecker.php';
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,161 @@
|
|||||||
|
<?php
|
||||||
|
namespace vertragsbestandteil;
|
||||||
|
|
||||||
|
use vertragsbestandteil\Vertragsbestandteil;
|
||||||
|
use vertragsbestandteil\VertragsbestandteilFactory;
|
||||||
|
|
||||||
|
class VertragsbestandteilLohnguide extends Vertragsbestandteil
|
||||||
|
{
|
||||||
|
protected $stellenbezeichnung;
|
||||||
|
protected $vordienstzeit;
|
||||||
|
protected $fachrichtung_kurzbz;
|
||||||
|
protected $modellstelle_kurzbz;
|
||||||
|
protected $kommentar_person;
|
||||||
|
protected $kommentar_modellstelle;
|
||||||
|
|
||||||
|
|
||||||
|
public function __construct()
|
||||||
|
{
|
||||||
|
parent::__construct();
|
||||||
|
$this->setVertragsbestandteiltyp_kurzbz(
|
||||||
|
VertragsbestandteilFactory::VERTRAGSBESTANDTEIL_LOHNGUIDE);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getStellenbezeichnung()
|
||||||
|
{
|
||||||
|
return $this->stellenbezeichnung;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function setStellenbezeichnung($stellenbezeichnung): self
|
||||||
|
{
|
||||||
|
$this->markDirty('stellenbezeichnung', $this->stellenbezeichnung, $stellenbezeichnung);
|
||||||
|
$this->stellenbezeichnung = $stellenbezeichnung;
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getVordienstzeit()
|
||||||
|
{
|
||||||
|
return $this->vordienstzeit;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function setVordienstzeit($vordienstzeit): self
|
||||||
|
{
|
||||||
|
$this->markDirty('vordienstzeit', $this->vordienstzeit, $vordienstzeit);
|
||||||
|
$this->vordienstzeit = $vordienstzeit;
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getFachrichtung_kurzbz()
|
||||||
|
{
|
||||||
|
return $this->fachrichtung_kurzbz;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function setFachrichtung_kurzbz($fachrichtung_kurzbz): self
|
||||||
|
{
|
||||||
|
$this->markDirty('fachrichtung_kurzbz', $this->fachrichtung_kurzbz, $fachrichtung_kurzbz);
|
||||||
|
$this->fachrichtung_kurzbz = $fachrichtung_kurzbz;
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getModellstelle_kurzbz()
|
||||||
|
{
|
||||||
|
return $this->modellstelle_kurzbz;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function setModellstelle_kurzbz($modellstelle_kurzbz): self
|
||||||
|
{
|
||||||
|
$this->markDirty('modellstelle_kurzbz', $this->modellstelle_kurzbz, $modellstelle_kurzbz);
|
||||||
|
$this->modellstelle_kurzbz = $modellstelle_kurzbz;
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getKommentar_person()
|
||||||
|
{
|
||||||
|
return $this->kommentar_person;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function setKommentar_person($kommentar_person): self
|
||||||
|
{
|
||||||
|
$this->markDirty('kommentar_person', $this->kommentar_person, $kommentar_person);
|
||||||
|
$this->kommentar_person = $kommentar_person;
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getKommentar_modellstelle()
|
||||||
|
{
|
||||||
|
return $this->kommentar_modellstelle;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function setKommentar_modellstelle($kommentar_modellstelle): self
|
||||||
|
{
|
||||||
|
$this->markDirty('kommentar_modellstelle', $this->kommentar_modellstelle, $kommentar_modellstelle);
|
||||||
|
$this->kommentar_modellstelle = $kommentar_modellstelle;
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
public function hydrateByStdClass($data, $fromdb=false)
|
||||||
|
{
|
||||||
|
parent::hydrateByStdClass($data, $fromdb);
|
||||||
|
$this->fromdb = $fromdb;
|
||||||
|
isset($data->fachrichtung_kurzbz) && $this->setFachrichtung_kurzbz($data->fachrichtung_kurzbz);
|
||||||
|
isset($data->stellenbezeichnung) && $this->setStellenbezeichnung($data->stellenbezeichnung);
|
||||||
|
isset($data->vordienstzeit) && $this->setVordienstzeit($data->vordienstzeit);
|
||||||
|
isset($data->modellstelle_kurzbz) && $this->setModellstelle_kurzbz($data->modellstelle_kurzbz);
|
||||||
|
isset($data->kommentar_person) && $this->setKommentar_person($data->kommentar_person);
|
||||||
|
isset($data->kommentar_modellstelle) && $this->setKommentar_modellstelle($data->kommentar_modellstelle);
|
||||||
|
$this->fromdb = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function toStdClass(): \stdClass
|
||||||
|
{
|
||||||
|
$tmp = array(
|
||||||
|
'vertragsbestandteil_id' => $this->getVertragsbestandteil_id(),
|
||||||
|
'stellenbezeichnung' => $this->getStellenbezeichnung(),
|
||||||
|
'vordienstzeit' => $this->getVordienstzeit(),
|
||||||
|
'fachrichtung_kurzbz' => $this->getFachrichtung_kurzbz(),
|
||||||
|
'modellstelle_kurzbz' => $this->getModellstelle_kurzbz(),
|
||||||
|
'kommentar_person' => $this->getKommentar_person(),
|
||||||
|
'kommentar_modellstelle' => $this->getKommentar_modellstelle(),
|
||||||
|
);
|
||||||
|
|
||||||
|
$tmp = array_filter($tmp, function($k) {
|
||||||
|
return in_array($k, $this->modifiedcolumns);
|
||||||
|
}, ARRAY_FILTER_USE_KEY);
|
||||||
|
|
||||||
|
return (object) $tmp;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function __toString()
|
||||||
|
{
|
||||||
|
$txt = <<<EOTXT
|
||||||
|
modellstelle_kurzbz: {$this->getModellstelle_kurzbz()}
|
||||||
|
|
||||||
|
EOTXT;
|
||||||
|
return parent::__toString() . $txt;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function validate()
|
||||||
|
{
|
||||||
|
$value = $this->vordienstzeit;
|
||||||
|
|
||||||
|
if ($value === null || $value === '') {
|
||||||
|
$result = null; // allow null value
|
||||||
|
} else {
|
||||||
|
$result = filter_var($value, FILTER_VALIDATE_INT, [
|
||||||
|
'options' => [
|
||||||
|
'min_range' => 0,
|
||||||
|
'max_range' => 100
|
||||||
|
]
|
||||||
|
]);
|
||||||
|
|
||||||
|
if ($result === false) {
|
||||||
|
$this->validationerrors[] = 'Vordienstjahre muss eine ganze Zahl (0 bis 100) enthalten oder leer sein.';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return parent::validate();
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -52,53 +52,4 @@ class LePruefung_model extends DB_Model
|
|||||||
'student_uid' => $student_uid
|
'student_uid' => $student_uid
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getPruefungenByLvStudiensemester($lv_id, $sem_kurzbz) {
|
|
||||||
$qry = "SELECT tbl_pruefung.*, tbl_lehrveranstaltung.bezeichnung as lehrveranstaltung_bezeichnung, tbl_lehrveranstaltung.lehrveranstaltung_id,
|
|
||||||
tbl_note.bezeichnung as note_bezeichnung, tbl_pruefungstyp.beschreibung as typ_beschreibung, tbl_lehreinheit.studiensemester_kurzbz as studiensemester_kurzbz
|
|
||||||
FROM lehre.tbl_pruefung, lehre.tbl_lehreinheit, lehre.tbl_lehrveranstaltung, lehre.tbl_note, lehre.tbl_pruefungstyp
|
|
||||||
WHERE tbl_pruefung.lehreinheit_id=tbl_lehreinheit.lehreinheit_id
|
|
||||||
AND tbl_lehreinheit.lehrveranstaltung_id=tbl_lehrveranstaltung.lehrveranstaltung_id
|
|
||||||
AND tbl_pruefung.note = tbl_note.note
|
|
||||||
AND tbl_pruefung.pruefungstyp_kurzbz=tbl_pruefungstyp.pruefungstyp_kurzbz
|
|
||||||
AND tbl_lehrveranstaltung.lehrveranstaltung_id = ?
|
|
||||||
AND tbl_lehreinheit.studiensemester_kurzbz = ?
|
|
||||||
ORDER BY datum DESC;";
|
|
||||||
|
|
||||||
return $this->execReadOnlyQuery($qry, array($lv_id, $sem_kurzbz));
|
|
||||||
}
|
|
||||||
|
|
||||||
public function getPruefungenByUidTypLvStudiensemester($uid, $typ = null, $lv_id = null, $sem_kurzbz = null) {
|
|
||||||
$params = [$uid];
|
|
||||||
$qry = "SELECT tbl_pruefung.*, tbl_lehrveranstaltung.bezeichnung as lehrveranstaltung_bezeichnung, tbl_lehrveranstaltung.lehrveranstaltung_id,
|
|
||||||
tbl_note.bezeichnung as note_bezeichnung, tbl_pruefungstyp.beschreibung as typ_beschreibung, tbl_lehreinheit.studiensemester_kurzbz as studiensemester_kurzbz
|
|
||||||
FROM lehre.tbl_pruefung, lehre.tbl_lehreinheit, lehre.tbl_lehrveranstaltung, lehre.tbl_note, lehre.tbl_pruefungstyp
|
|
||||||
WHERE student_uid= ?
|
|
||||||
AND tbl_pruefung.lehreinheit_id=tbl_lehreinheit.lehreinheit_id
|
|
||||||
AND tbl_lehreinheit.lehrveranstaltung_id=tbl_lehrveranstaltung.lehrveranstaltung_id
|
|
||||||
AND tbl_pruefung.note = tbl_note.note
|
|
||||||
AND tbl_pruefung.pruefungstyp_kurzbz=tbl_pruefungstyp.pruefungstyp_kurzbz";
|
|
||||||
if ($typ != null)
|
|
||||||
{
|
|
||||||
$qry .= " AND tbl_pruefungstyp.pruefungstyp_kurzbz = ?";
|
|
||||||
$params[] = $typ;
|
|
||||||
}
|
|
||||||
|
|
||||||
if ($lv_id != null)
|
|
||||||
{
|
|
||||||
$qry .= " AND tbl_lehrveranstaltung.lehrveranstaltung_id = ?";
|
|
||||||
$params[] = $lv_id;
|
|
||||||
}
|
|
||||||
|
|
||||||
if ($sem_kurzbz != null)
|
|
||||||
{
|
|
||||||
$qry .= " AND tbl_lehreinheit.studiensemester_kurzbz = ?";
|
|
||||||
$params[] = $sem_kurzbz;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
$qry .= " ORDER BY datum DESC";
|
|
||||||
|
|
||||||
return $this->execReadOnlyQuery($qry, $params);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -314,28 +314,6 @@ EOSQL;
|
|||||||
return $this->execQuery($query, $params);
|
return $this->execQuery($query, $params);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getAllLehreinheitenForLvaAndMaUid($lva_id, $ma_uid, $sem_kurzbz)
|
|
||||||
{
|
|
||||||
$query = "SELECT DISTINCT tbl_lehreinheitmitarbeiter.lehreinheit_id, tbl_lehreinheit.lehrveranstaltung_id, tbl_lehreinheit.lehrform_kurzbz,
|
|
||||||
tbl_lehreinheitmitarbeiter.mitarbeiter_uid,
|
|
||||||
tbl_lehreinheitgruppe.semester,
|
|
||||||
tbl_lehreinheitgruppe.verband,
|
|
||||||
tbl_lehreinheitgruppe.gruppe,
|
|
||||||
tbl_lehreinheitgruppe.gruppe_kurzbz,
|
|
||||||
tbl_lehrveranstaltung.kurzbz,
|
|
||||||
tbl_studiengang.kurzbzlang,
|
|
||||||
(SELECT COUNT(DISTINCT datum) FROM campus.vw_stundenplan WHERE lehreinheit_id = lehre.tbl_lehreinheit.lehreinheit_id) as termincount,
|
|
||||||
(SELECT COUNT(*) FROM campus.vw_student_lehrveranstaltung WHERE lehreinheit_id = lehre.tbl_lehreinheit.lehreinheit_id) as studentcount
|
|
||||||
FROM lehre.tbl_lehreinheit JOIN lehre.tbl_lehreinheitmitarbeiter USING(lehreinheit_id)
|
|
||||||
JOIN lehre.tbl_lehreinheitgruppe USING(lehreinheit_id)
|
|
||||||
JOIN lehre.tbl_lehrveranstaltung USING(lehrveranstaltung_id)
|
|
||||||
JOIN public.tbl_studiengang ON (tbl_lehreinheitgruppe.studiengang_kz = tbl_studiengang.studiengang_kz)
|
|
||||||
WHERE lehrveranstaltung_id = ? AND studiensemester_kurzbz = ? AND mitarbeiter_uid = ?
|
|
||||||
ORDER BY tbl_lehreinheitgruppe.gruppe_kurzbz";
|
|
||||||
|
|
||||||
return $this->execQuery($query, [$lva_id, $sem_kurzbz, $ma_uid]);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
public function getOes($lehreinheit_id)
|
public function getOes($lehreinheit_id)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -341,7 +341,7 @@ class Lehreinheitgruppe_model extends DB_Model
|
|||||||
$this->db->where('lehreinheit_id', $lehreinheit_id);
|
$this->db->where('lehreinheit_id', $lehreinheit_id);
|
||||||
$this->db->where('studiengang_kz', $gruppen_array->studiengang_kz);
|
$this->db->where('studiengang_kz', $gruppen_array->studiengang_kz);
|
||||||
|
|
||||||
if (!isEmptyString((string)$gruppen_array->semester))
|
if (!isEmptyString($gruppen_array->semester))
|
||||||
{
|
{
|
||||||
$this->db->where('semester', $gruppen_array->semester);
|
$this->db->where('semester', $gruppen_array->semester);
|
||||||
}
|
}
|
||||||
@@ -444,37 +444,30 @@ class Lehreinheitgruppe_model extends DB_Model
|
|||||||
)
|
)
|
||||||
ELSE tbl_gruppe.beschreibung
|
ELSE tbl_gruppe.beschreibung
|
||||||
END AS beschreibung");
|
END AS beschreibung");
|
||||||
$this->addSelect("
|
$this->addSelect("CASE
|
||||||
CASE
|
WHEN tbl_lehreinheitgruppe.gruppe_kurzbz IS NULL THEN
|
||||||
WHEN trim(COALESCE(tbl_lehreinheitgruppe.gruppe_kurzbz, '')) = '' THEN
|
|
||||||
(
|
(
|
||||||
SELECT EXISTS (
|
SELECT EXISTS (
|
||||||
SELECT 1
|
SELECT 1
|
||||||
FROM lehre.tbl_stundenplandev sp
|
FROM lehre.tbl_stundenplandev
|
||||||
WHERE sp.lehreinheit_id = tbl_lehreinheitgruppe.lehreinheit_id
|
WHERE lehreinheit_id = tbl_lehreinheitgruppe.lehreinheit_id
|
||||||
AND sp.studiengang_kz = tbl_lehreinheitgruppe.studiengang_kz
|
AND studiengang_kz = tbl_lehreinheitgruppe.studiengang_kz
|
||||||
AND sp.semester = tbl_lehreinheitgruppe.semester
|
AND semester = tbl_lehreinheitgruppe.semester
|
||||||
AND trim(COALESCE(sp.verband, '')) = trim(COALESCE(tbl_lehreinheitgruppe.verband, ''))
|
AND TRIM(COALESCE(verband, '')) = TRIM(tbl_lehreinheitgruppe.verband)
|
||||||
AND trim(COALESCE(sp.gruppe, '')) = trim(COALESCE(tbl_lehreinheitgruppe.gruppe, ''))
|
AND TRIM(COALESCE(gruppe, '')) = TRIM(tbl_lehreinheitgruppe.gruppe)
|
||||||
AND trim(COALESCE(sp.gruppe_kurzbz, '')) = ''
|
AND (gruppe_kurzbz IS NULL OR gruppe_kurzbz = '')
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
ELSE
|
ELSE
|
||||||
(
|
(
|
||||||
SELECT EXISTS (
|
SELECT EXISTS (
|
||||||
SELECT 1
|
SELECT 1
|
||||||
FROM lehre.tbl_stundenplandev sp
|
FROM lehre.tbl_stundenplandev
|
||||||
WHERE sp.lehreinheit_id = tbl_lehreinheitgruppe.lehreinheit_id
|
WHERE lehreinheit_id = tbl_lehreinheitgruppe.lehreinheit_id
|
||||||
AND sp.studiengang_kz = tbl_lehreinheitgruppe.studiengang_kz
|
AND gruppe_kurzbz = tbl_lehreinheitgruppe.gruppe_kurzbz
|
||||||
AND sp.semester = tbl_lehreinheitgruppe.semester
|
|
||||||
AND trim(COALESCE(sp.verband, '')) = trim(COALESCE(tbl_lehreinheitgruppe.verband, ''))
|
|
||||||
AND trim(COALESCE(sp.gruppe, '')) = trim(COALESCE(tbl_lehreinheitgruppe.gruppe, ''))
|
|
||||||
AND trim(COALESCE(sp.gruppe_kurzbz, '')) = trim(COALESCE(tbl_lehreinheitgruppe.gruppe_kurzbz, ''))
|
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
END AS verplant
|
END AS verplant");
|
||||||
");
|
|
||||||
|
|
||||||
$this->addJoin('tbl_studiengang', 'studiengang_kz', 'LEFT');
|
$this->addJoin('tbl_studiengang', 'studiengang_kz', 'LEFT');
|
||||||
$this->addJoin('public.tbl_gruppe', 'gruppe_kurzbz', 'LEFT');
|
$this->addJoin('public.tbl_gruppe', 'gruppe_kurzbz', 'LEFT');
|
||||||
|
|
||||||
|
|||||||
@@ -317,9 +317,7 @@ class Lehrveranstaltung_model extends DB_Model
|
|||||||
tbl_bisio.bisio_id, tbl_bisio.von, tbl_bisio.bis, tbl_student.studiengang_kz AS stg_kz_student,
|
tbl_bisio.bisio_id, tbl_bisio.von, tbl_bisio.bis, tbl_student.studiengang_kz AS stg_kz_student,
|
||||||
tbl_zeugnisnote.note, tbl_mitarbeiter.mitarbeiter_uid, tbl_person.matr_nr, tbl_benutzer.uid,
|
tbl_zeugnisnote.note, tbl_mitarbeiter.mitarbeiter_uid, tbl_person.matr_nr, tbl_benutzer.uid,
|
||||||
UPPER(tbl_studiengang.typ::varchar(1) || tbl_studiengang.kurzbz) as kuerzel, tbl_studiengang.orgform_kurzbz, vw_student_lehrveranstaltung.semester, vw_student_lehrveranstaltung.studiensemester_kurzbz, vw_student_lehrveranstaltung.bezeichnung,
|
UPPER(tbl_studiengang.typ::varchar(1) || tbl_studiengang.kurzbz) as kuerzel, tbl_studiengang.orgform_kurzbz, vw_student_lehrveranstaltung.semester, vw_student_lehrveranstaltung.studiensemester_kurzbz, vw_student_lehrveranstaltung.bezeichnung,
|
||||||
tbl_student.prestudent_id,
|
tbl_student.prestudent_id
|
||||||
campus.vw_student_lehrveranstaltung.lehreinheit_id
|
|
||||||
|
|
||||||
FROM
|
FROM
|
||||||
campus.vw_student_lehrveranstaltung
|
campus.vw_student_lehrveranstaltung
|
||||||
JOIN public.tbl_benutzer USING(uid)
|
JOIN public.tbl_benutzer USING(uid)
|
||||||
@@ -1056,26 +1054,6 @@ class Lehrveranstaltung_model extends DB_Model
|
|||||||
return $this->execQuery($qry, $params);
|
return $this->execQuery($qry, $params);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getLvForLektorInSemester($sem_kurzbz, $uid) {
|
|
||||||
$qry = "SELECT DISTINCT (tbl_lehrveranstaltung.lehrveranstaltung_id),
|
|
||||||
UPPER(tbl_studiengang.typ::varchar(1) || tbl_studiengang.kurzbz) as stg_kurzbz,
|
|
||||||
tbl_lehrveranstaltung.semester as lv_semester,
|
|
||||||
tbl_lehrveranstaltung.bezeichnung as lv_bezeichnung,
|
|
||||||
(SELECT kurzbz FROM public.tbl_mitarbeiter
|
|
||||||
WHERE mitarbeiter_uid=tbl_lehreinheitmitarbeiter.mitarbeiter_uid) as lektor
|
|
||||||
FROM
|
|
||||||
lehre.tbl_lehreinheit JOIN lehre.tbl_lehreinheitmitarbeiter USING(lehreinheit_id)
|
|
||||||
JOIN lehre.tbl_lehrveranstaltung USING(lehrveranstaltung_id)
|
|
||||||
JOIN public.tbl_studiengang USING(studiengang_kz)
|
|
||||||
JOIN lehre.tbl_lehrveranstaltung as lehrfach ON(tbl_lehreinheit.lehrfach_id=lehrfach.lehrveranstaltung_id)
|
|
||||||
WHERE
|
|
||||||
tbl_lehreinheit.studiensemester_kurzbz = ?
|
|
||||||
AND mitarbeiter_uid = ?
|
|
||||||
ORDER BY stg_kurzbz,lv_semester,lv_bezeichnung";
|
|
||||||
|
|
||||||
return $this->execReadOnlyQuery($qry, array($sem_kurzbz, $uid));
|
|
||||||
}
|
|
||||||
|
|
||||||
public function getLvsByOrganization($oe_kurzbz)
|
public function getLvsByOrganization($oe_kurzbz)
|
||||||
{
|
{
|
||||||
$qry="
|
$qry="
|
||||||
@@ -1267,7 +1245,7 @@ class Lehrveranstaltung_model extends DB_Model
|
|||||||
{
|
{
|
||||||
return "
|
return "
|
||||||
SELECT
|
SELECT
|
||||||
distinct on (lehrveranstaltung_id) lehrveranstaltung_id, tbl_lehrveranstaltung.kurzbz as lv_kurzbz, tbl_lehrveranstaltung.bezeichnung as lv_bezeichnung, bezeichnung_english as lv_bezeichnung_english, studiengang_kz,
|
lehrveranstaltung_id, tbl_lehrveranstaltung.kurzbz as lv_kurzbz, tbl_lehrveranstaltung.bezeichnung as lv_bezeichnung, bezeichnung_english as lv_bezeichnung_english, studiengang_kz,
|
||||||
tbl_studienplan_lehrveranstaltung.semester, tbl_lehrveranstaltung.sprache,
|
tbl_studienplan_lehrveranstaltung.semester, tbl_lehrveranstaltung.sprache,
|
||||||
ects as lv_ects, semesterstunden, anmerkung, lehre, lehreverzeichnis as lv_lehreverzeichnis, tbl_lehrveranstaltung.aktiv,
|
ects as lv_ects, semesterstunden, anmerkung, lehre, lehreverzeichnis as lv_lehreverzeichnis, tbl_lehrveranstaltung.aktiv,
|
||||||
planfaktor as lv_planfaktor, planlektoren as lv_planlektoren, planpersonalkosten as lv_planpersonalkosten,
|
planfaktor as lv_planfaktor, planlektoren as lv_planlektoren, planpersonalkosten as lv_planpersonalkosten,
|
||||||
|
|||||||
@@ -29,14 +29,10 @@ class Lvgesamtnote_model extends DB_Model
|
|||||||
$this->addSelect("lv.bezeichnung AS lehrveranstaltung_bezeichnung");
|
$this->addSelect("lv.bezeichnung AS lehrveranstaltung_bezeichnung");
|
||||||
$this->addSelect("lv.studiengang_kz");
|
$this->addSelect("lv.studiengang_kz");
|
||||||
$this->addSelect("UPPER(stg.typ || stg.kurzbz) AS studiengang");
|
$this->addSelect("UPPER(stg.typ || stg.kurzbz) AS studiengang");
|
||||||
$this->addSelect("person.vorname");
|
|
||||||
$this->addSelect("person.nachname");
|
|
||||||
|
|
||||||
$this->addJoin("lehre.tbl_note n", "note");
|
$this->addJoin("lehre.tbl_note n", "note");
|
||||||
$this->addJoin("lehre.tbl_lehrveranstaltung lv", "lehrveranstaltung_id");
|
$this->addJoin("lehre.tbl_lehrveranstaltung lv", "lehrveranstaltung_id");
|
||||||
$this->addJoin("public.tbl_studiengang stg", "studiengang_kz");
|
$this->addJoin("public.tbl_studiengang stg", "studiengang_kz");
|
||||||
$this->addJoin("public.tbl_benutzer benutzer", "uid = student_uid", "LEFT");
|
|
||||||
$this->addJoin("public.tbl_person person", "person_id", "LEFT");
|
|
||||||
|
|
||||||
$this->db->where($this->dbTable . ".freigabedatum <", "NOW()", false);
|
$this->db->where($this->dbTable . ".freigabedatum <", "NOW()", false);
|
||||||
|
|
||||||
|
|||||||
@@ -79,9 +79,9 @@ class Paabgabe_model extends DB_Model
|
|||||||
JOIN public.tbl_benutzer ON (public.tbl_benutzer.uid = student_uid)
|
JOIN public.tbl_benutzer ON (public.tbl_benutzer.uid = student_uid)
|
||||||
JOIN public.tbl_person USING (person_id)
|
JOIN public.tbl_person USING (person_id)
|
||||||
|
|
||||||
WHERE (campus.tbl_paabgabe.insertamum >= NOW() - INTERVAL ?
|
WHERE (campus.tbl_paabgabe.insertamum::date = CURRENT_DATE - INTERVAL ?
|
||||||
OR campus.tbl_paabgabe.updateamum >= NOW() - INTERVAL ?)
|
OR campus.tbl_paabgabe.updateamum::date = CURRENT_DATE - INTERVAL ?)
|
||||||
AND campus.tbl_paabgabe.paabgabetyp_kurzbz IN ?";
|
AND campus.tbl_paabgabe.paabgabetyp_kurzbz IN ?";
|
||||||
|
|
||||||
return $this->execQuery($query, [$interval, $interval, $relevantTypes]);
|
return $this->execQuery($query, [$interval, $interval, $relevantTypes]);
|
||||||
}
|
}
|
||||||
@@ -108,7 +108,7 @@ class Paabgabe_model extends DB_Model
|
|||||||
JOIN public.tbl_person ON (public.tbl_benutzer.person_id = public.tbl_person.person_id)
|
JOIN public.tbl_person ON (public.tbl_benutzer.person_id = public.tbl_person.person_id)
|
||||||
|
|
||||||
WHERE campus.tbl_paabgabe.abgabedatum IS NOT NULL
|
WHERE campus.tbl_paabgabe.abgabedatum IS NOT NULL
|
||||||
AND campus.tbl_paabgabe.abgabedatum >= NOW() - INTERVAL ?";
|
AND campus.tbl_paabgabe.abgabedatum = CURRENT_DATE - INTERVAL ?";
|
||||||
|
|
||||||
if($relevantTypes !== null) {
|
if($relevantTypes !== null) {
|
||||||
$query .= " AND campus.tbl_paabgabe.paabgabetyp_kurzbz IN ?";
|
$query .= " AND campus.tbl_paabgabe.paabgabetyp_kurzbz IN ?";
|
||||||
|
|||||||
@@ -149,8 +149,6 @@ class Projektarbeit_model extends DB_Model
|
|||||||
lehre.tbl_projektarbeit.abstract as abstract,
|
lehre.tbl_projektarbeit.abstract as abstract,
|
||||||
lehre.tbl_projektarbeit.abstract_en as abstract_en,
|
lehre.tbl_projektarbeit.abstract_en as abstract_en,
|
||||||
lehre.tbl_projektarbeit.insertamum as insertamum,
|
lehre.tbl_projektarbeit.insertamum as insertamum,
|
||||||
(SELECT abgeschicktvon FROM extension.tbl_projektarbeitsbeurteilung WHERE projektarbeit_id = tbl_projektarbeit.projektarbeit_id AND betreuer_person_id = tbl_projektbetreuer.person_id) AS babgeschickt,
|
|
||||||
(SELECT abgeschicktvon FROM extension.tbl_projektarbeitsbeurteilung WHERE projektarbeit_id = tbl_projektarbeit.projektarbeit_id AND betreuerart_kurzbz IN ('Zweitbetreuer', 'Zweitbegutachter') LIMIT 1) AS zweitbetreuer_abgeschickt,
|
|
||||||
(SELECT datum FROM campus.tbl_paabgabe WHERE paabgabetyp_kurzbz = 'end' AND abgabedatum IS NOT NULL AND projektarbeit_id = tbl_projektarbeit.projektarbeit_id LIMIT 1) AS abgegeben
|
(SELECT datum FROM campus.tbl_paabgabe WHERE paabgabetyp_kurzbz = 'end' AND abgabedatum IS NOT NULL AND projektarbeit_id = tbl_projektarbeit.projektarbeit_id LIMIT 1) AS abgegeben
|
||||||
|
|
||||||
FROM lehre.tbl_projektarbeit
|
FROM lehre.tbl_projektarbeit
|
||||||
@@ -218,12 +216,9 @@ class Projektarbeit_model extends DB_Model
|
|||||||
}
|
}
|
||||||
|
|
||||||
public function getProjektbetreuerAnrede($bperson_id) {
|
public function getProjektbetreuerAnrede($bperson_id) {
|
||||||
$qry_betr="SELECT distinct trim(COALESCE(titelpre,'')||' '||COALESCE(vorname,'')||' '||COALESCE(nachname,'')||' '||COALESCE(titelpost,'')) as first,
|
$qry_betr="SELECT DISTINCT ON(public.tbl_person.person_id) trim(COALESCE(titelpre,'')||' '||COALESCE(vorname,'')||' '||COALESCE(nachname,'')||' '||COALESCE(titelpost,'')) as first, anrede
|
||||||
public.tbl_mitarbeiter.mitarbeiter_uid, anrede
|
FROM public.tbl_person JOIN lehre.tbl_projektbetreuer ON(lehre.tbl_projektbetreuer.person_id=public.tbl_person.person_id)
|
||||||
FROM public.tbl_person JOIN lehre.tbl_projektbetreuer ON(lehre.tbl_projektbetreuer.person_id=public.tbl_person.person_id)
|
WHERE public.tbl_person.person_id= ?";
|
||||||
JOIN public.tbl_benutzer ON(public.tbl_benutzer.person_id=public.tbl_person.person_id)
|
|
||||||
JOIN public.tbl_mitarbeiter ON(public.tbl_benutzer.uid=public.tbl_mitarbeiter.mitarbeiter_uid)
|
|
||||||
WHERE public.tbl_person.person_id= ?";
|
|
||||||
|
|
||||||
return $this->execReadOnlyQuery($qry_betr, [$bperson_id]);
|
return $this->execReadOnlyQuery($qry_betr, [$bperson_id]);
|
||||||
}
|
}
|
||||||
@@ -518,123 +513,6 @@ class Projektarbeit_model extends DB_Model
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Prüft ob Projektarbeit aktuell ist (also zurzeit online bewertet wird).
|
|
||||||
* @param $projektarbeit_id
|
|
||||||
* @return boolean
|
|
||||||
*/
|
|
||||||
public function projektarbeitIsCurrent($projektarbeit_id) {
|
|
||||||
$version = $this->getVersion($projektarbeit_id);
|
|
||||||
// paarbeit sollte nur ab einem Studiensemester online bewertet werden
|
|
||||||
return $version === null ? null : $version->isCurrent;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Holt sich Version der Projektarbeit.
|
|
||||||
* Liefert auch mit, ob die Version die aktuellste ist.
|
|
||||||
* z.B.: Masterarbeiten waren ab der Änderung zur Gewichtung der Punkte aktuell,
|
|
||||||
* Bachelorarbeiten waren ab dem Umstieg auf das Online Beurteilungsformular aktuell.
|
|
||||||
* @param $projektarbeit_id
|
|
||||||
* @return objekt mit Versionsinfo, null im Fehlerfall
|
|
||||||
*/
|
|
||||||
private function getVersion($projektarbeit_id) {
|
|
||||||
$_versions_query = array(
|
|
||||||
'Diplom' => array(
|
|
||||||
'SS2025',
|
|
||||||
'SS2023',
|
|
||||||
'SS2022'
|
|
||||||
),
|
|
||||||
'Others' => array(
|
|
||||||
'SS2025',
|
|
||||||
'SS2022',
|
|
||||||
)
|
|
||||||
);
|
|
||||||
|
|
||||||
$_versions_check = array(
|
|
||||||
'Diplom' => array(
|
|
||||||
'SS2025' => 3,
|
|
||||||
'SS2023' => 2,
|
|
||||||
'SS2022' => 1
|
|
||||||
),
|
|
||||||
'Others' => array(
|
|
||||||
'SS2025' => 2,
|
|
||||||
'SS2022' => 1
|
|
||||||
)
|
|
||||||
);
|
|
||||||
|
|
||||||
// paarbeit sollte nur ab einem Studiensemester online bewertet werden
|
|
||||||
$qry="
|
|
||||||
SELECT
|
|
||||||
CASE
|
|
||||||
WHEN semesters_diplom.studiensemester_kurzbz IS NOT NULL
|
|
||||||
THEN semesters_diplom.studiensemester_kurzbz
|
|
||||||
ELSE semesters.studiensemester_kurzbz
|
|
||||||
END AS version_studiensemester_kurzbz,
|
|
||||||
pa.projekttyp_kurzbz
|
|
||||||
FROM
|
|
||||||
lehre.tbl_projektarbeit pa
|
|
||||||
JOIN lehre.tbl_lehreinheit USING(lehreinheit_id)
|
|
||||||
JOIN public.tbl_studiensemester sem USING(studiensemester_kurzbz)
|
|
||||||
LEFT JOIN (
|
|
||||||
SELECT
|
|
||||||
start, studiensemester_kurzbz
|
|
||||||
FROM
|
|
||||||
public.tbl_studiensemester
|
|
||||||
WHERE
|
|
||||||
studiensemester_kurzbz IN ?
|
|
||||||
) semesters ON sem.start >= semesters.start AND pa.projekttyp_kurzbz <> 'Diplom'
|
|
||||||
LEFT JOIN (
|
|
||||||
SELECT
|
|
||||||
start, studiensemester_kurzbz
|
|
||||||
FROM
|
|
||||||
public.tbl_studiensemester
|
|
||||||
WHERE
|
|
||||||
studiensemester_kurzbz IN ?
|
|
||||||
) semesters_diplom ON sem.start >= semesters_diplom.start AND pa.projekttyp_kurzbz = 'Diplom'
|
|
||||||
WHERE
|
|
||||||
projektarbeit_id = ?
|
|
||||||
ORDER BY
|
|
||||||
semesters.start DESC, semesters_diplom.start DESC
|
|
||||||
LIMIT 1";
|
|
||||||
|
|
||||||
$resultociniBambini = $this->execReadOnlyQuery($qry, array($_versions_query['Others'], $_versions_query['Diplom'], $projektarbeit_id));
|
|
||||||
|
|
||||||
if(hasData($resultociniBambini)) {
|
|
||||||
$data = getData($resultociniBambini);
|
|
||||||
if(count($data) > 0) {
|
|
||||||
$row = $data[0];
|
|
||||||
|
|
||||||
// known project types
|
|
||||||
if (isset($_versions_check[$row->projekttyp_kurzbz][$row->version_studiensemester_kurzbz]))
|
|
||||||
{
|
|
||||||
$row->versionNumber = $_versions_check[$row->projekttyp_kurzbz][$row->version_studiensemester_kurzbz];
|
|
||||||
$row->isCurrent =
|
|
||||||
$_versions_check[$row->projekttyp_kurzbz][$row->version_studiensemester_kurzbz]
|
|
||||||
== max($_versions_check[$row->projekttyp_kurzbz]);
|
|
||||||
|
|
||||||
}
|
|
||||||
elseif (isset($_versions_check['Others'][$row->version_studiensemester_kurzbz]))
|
|
||||||
{
|
|
||||||
$row->versionNumber = $_versions_check['Others'][$row->version_studiensemester_kurzbz];
|
|
||||||
$row->isCurrent =
|
|
||||||
$_versions_check['Others'][$row->version_studiensemester_kurzbz]
|
|
||||||
== max($_versions_check['Others']);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
$row->isCurrent = false;
|
|
||||||
$row->versionNumber = 0;
|
|
||||||
}
|
|
||||||
return $row;
|
|
||||||
|
|
||||||
} else {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
*
|
*
|
||||||
* @param
|
* @param
|
||||||
* @return object success or error
|
* @return object success or error
|
||||||
|
|||||||
@@ -306,5 +306,4 @@ class Pruefung_model extends DB_Model
|
|||||||
|
|
||||||
return $this->loadWhereCommitteeExamsFailed();
|
return $this->loadWhereCommitteeExamsFailed();
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -148,7 +148,7 @@ class Zeugnisnote_model extends DB_Model
|
|||||||
*
|
*
|
||||||
* @return object
|
* @return object
|
||||||
*/
|
*/
|
||||||
public function getZeugnisnoten($student_uid, $studiensemester_kurzbz, $lehrveranstaltung_id = null)
|
public function getZeugnisnoten($student_uid, $studiensemester_kurzbz)
|
||||||
{
|
{
|
||||||
$params = array();
|
$params = array();
|
||||||
$where='';
|
$where='';
|
||||||
@@ -163,11 +163,6 @@ class Zeugnisnote_model extends DB_Model
|
|||||||
$where.=" AND vw_student_lehrveranstaltung.studiensemester_kurzbz= ?";
|
$where.=" AND vw_student_lehrveranstaltung.studiensemester_kurzbz= ?";
|
||||||
$params[] = $studiensemester_kurzbz;
|
$params[] = $studiensemester_kurzbz;
|
||||||
}
|
}
|
||||||
if($lehrveranstaltung_id != null)
|
|
||||||
{
|
|
||||||
$where .= " AND vw_student_lehrveranstaltung.lehrveranstaltung_id = ?";
|
|
||||||
$params[] = $lehrveranstaltung_id;
|
|
||||||
}
|
|
||||||
|
|
||||||
$where2='';
|
$where2='';
|
||||||
|
|
||||||
@@ -181,11 +176,6 @@ class Zeugnisnote_model extends DB_Model
|
|||||||
$where2 .= " AND studiensemester_kurzbz= ?";
|
$where2 .= " AND studiensemester_kurzbz= ?";
|
||||||
$params[] = $studiensemester_kurzbz;
|
$params[] = $studiensemester_kurzbz;
|
||||||
}
|
}
|
||||||
if($lehrveranstaltung_id != null)
|
|
||||||
{
|
|
||||||
$where2 .=" AND lehrveranstaltung_id = ?";
|
|
||||||
$params[] = $lehrveranstaltung_id;
|
|
||||||
}
|
|
||||||
|
|
||||||
$qry = "SELECT
|
$qry = "SELECT
|
||||||
a.*,
|
a.*,
|
||||||
@@ -198,10 +188,7 @@ class Zeugnisnote_model extends DB_Model
|
|||||||
lv.semester AS semester_lv,
|
lv.semester AS semester_lv,
|
||||||
lv.ects AS ects_lv,
|
lv.ects AS ects_lv,
|
||||||
lv.zeugnis,
|
lv.zeugnis,
|
||||||
lv.bezeichnung_english AS lehrveranstaltung_bezeichnung_english,
|
lv.bezeichnung_english AS lehrveranstaltung_bezeichnung_english
|
||||||
s.verband,
|
|
||||||
person.vorname,
|
|
||||||
person.nachname
|
|
||||||
FROM (
|
FROM (
|
||||||
SELECT vw_student_lehrveranstaltung.lehrveranstaltung_id, uid,
|
SELECT vw_student_lehrveranstaltung.lehrveranstaltung_id, uid,
|
||||||
vw_student_lehrveranstaltung.studiensemester_kurzbz, note, punkte, uebernahmedatum, benotungsdatum,
|
vw_student_lehrveranstaltung.studiensemester_kurzbz, note, punkte, uebernahmedatum, benotungsdatum,
|
||||||
@@ -244,8 +231,6 @@ class Zeugnisnote_model extends DB_Model
|
|||||||
ORDER BY sort
|
ORDER BY sort
|
||||||
) a
|
) a
|
||||||
LEFT JOIN public.tbl_student s ON (a.uid = s.student_uid)
|
LEFT JOIN public.tbl_student s ON (a.uid = s.student_uid)
|
||||||
LEFT JOIN public.tbl_benutzer benutzer ON benutzer.uid = s.student_uid
|
|
||||||
LEFT JOIN public.tbl_person person ON benutzer.person_id = person.person_id
|
|
||||||
LEFT JOIN public.tbl_studiengang stg1 ON (s.studiengang_kz = stg1.studiengang_kz)
|
LEFT JOIN public.tbl_studiengang stg1 ON (s.studiengang_kz = stg1.studiengang_kz)
|
||||||
LEFT JOIN lehre.tbl_lehrveranstaltung lv USING (lehrveranstaltung_id)
|
LEFT JOIN lehre.tbl_lehrveranstaltung lv USING (lehrveranstaltung_id)
|
||||||
LEFT JOIN public.tbl_studiengang stg2 ON (lv.studiengang_kz = stg2.studiengang_kz)";
|
LEFT JOIN public.tbl_studiengang stg2 ON (lv.studiengang_kz = stg2.studiengang_kz)";
|
||||||
|
|||||||
@@ -594,7 +594,10 @@ class Studiengang_model extends DB_Model
|
|||||||
$this->addSelect('p.prestudent_id');
|
$this->addSelect('p.prestudent_id');
|
||||||
$this->addSelect('pers.vorname');
|
$this->addSelect('pers.vorname');
|
||||||
$this->addSelect('pers.nachname');
|
$this->addSelect('pers.nachname');
|
||||||
$this->addSelect("CONCAT(UPPER(pers.nachname), ' ', pers.vorname, ' (', " . $this->dbTable . ".bezeichnung, ')') AS name");
|
$this->addSelect("CONCAT(UPPER(pers.nachname), ' ', pers.vorname, ' (', "
|
||||||
|
. $this->dbTable . ".bezeichnung, ', ', "
|
||||||
|
. "UPPER(" . $this->dbTable . ".typ), "
|
||||||
|
. "UPPER(" . $this->dbTable . ".kurzbz),')') AS name");
|
||||||
|
|
||||||
$this->addJoin('public.tbl_prestudent p', 'studiengang_kz');
|
$this->addJoin('public.tbl_prestudent p', 'studiengang_kz');
|
||||||
$this->addJoin(
|
$this->addJoin(
|
||||||
|
|||||||
@@ -60,37 +60,6 @@ class Studienplan_model extends DB_Model
|
|||||||
));
|
));
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getStudienplanByLvaSemKurzbz($lehrveranstaltung_id, $studiensemester_kurzbz) {
|
|
||||||
$qry= "
|
|
||||||
SELECT
|
|
||||||
DISTINCT tbl_studienplan.*
|
|
||||||
FROM
|
|
||||||
lehre.tbl_studienplan
|
|
||||||
JOIN lehre.tbl_studienplan_lehrveranstaltung
|
|
||||||
USING(studienplan_id)
|
|
||||||
WHERE
|
|
||||||
tbl_studienplan_lehrveranstaltung.lehrveranstaltung_id IN (
|
|
||||||
SELECT
|
|
||||||
lv.lehrveranstaltung_id
|
|
||||||
FROM
|
|
||||||
lehre.tbl_lehrveranstaltung AS lv
|
|
||||||
LEFT JOIN lehre.tbl_lehrveranstaltung AS t ON t.lehrveranstaltung_id=lv.lehrveranstaltung_template_id
|
|
||||||
WHERE
|
|
||||||
lv.lehrtyp_kurzbz<>'tpl'
|
|
||||||
AND (lv.lehrveranstaltung_id= ? OR (lv.lehrveranstaltung_template_id= ? AND t.lehrtyp_kurzbz='tpl'))
|
|
||||||
)
|
|
||||||
AND EXISTS (
|
|
||||||
SELECT 1
|
|
||||||
FROM
|
|
||||||
lehre.tbl_studienplan_semester
|
|
||||||
WHERE studienplan_id=tbl_studienplan.studienplan_id
|
|
||||||
AND studiensemester_kurzbz= ?
|
|
||||||
AND semester = tbl_studienplan_lehrveranstaltung.semester)
|
|
||||||
ORDER BY bezeichnung";
|
|
||||||
|
|
||||||
return $this->execReadOnlyQuery($qry, array($lehrveranstaltung_id, $lehrveranstaltung_id, $studiensemester_kurzbz));
|
|
||||||
}
|
|
||||||
|
|
||||||
public function getStudienplanLehrveranstaltungForPrestudent($studienplan_id, $semester, $prestudent_id)
|
public function getStudienplanLehrveranstaltungForPrestudent($studienplan_id, $semester, $prestudent_id)
|
||||||
{
|
{
|
||||||
$lang = 'SELECT index FROM public.tbl_sprache WHERE sprache=' . $this->escape(getUserLanguage());
|
$lang = 'SELECT index FROM public.tbl_sprache WHERE sprache=' . $this->escape(getUserLanguage());
|
||||||
|
|||||||
@@ -206,7 +206,6 @@ class Notiz_model extends DB_Model
|
|||||||
person_bearbeiter.vorname, person_bearbeiter.nachname
|
person_bearbeiter.vorname, person_bearbeiter.nachname
|
||||||
";
|
";
|
||||||
|
|
||||||
|
|
||||||
return $this->execQuery($qry, array($type, $id));
|
return $this->execQuery($qry, array($type, $id));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -135,15 +135,4 @@ class Reservierung_model extends DB_Model
|
|||||||
return $this->execQuery($query, [$uid, $uid]);
|
return $this->execQuery($query, [$uid, $uid]);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function lektorHasReservierung($uid, $datum, $stunde)
|
|
||||||
{
|
|
||||||
$qry = "SELECT reservierung_id, uid, stg_kurzbz, ort_kurzbz, semester, verband, gruppe, gruppe_kurzbz, datum, stunde
|
|
||||||
FROM lehre.vw_reservierung
|
|
||||||
WHERE uid = ?
|
|
||||||
AND datum = ?
|
|
||||||
AND stunde = ?";
|
|
||||||
|
|
||||||
return $this->execReadOnlyQuery($qry, [$uid, $datum, $stunde]);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -333,68 +333,6 @@ class Stundenplan_model extends DB_Model
|
|||||||
", [$start_date, $end_date, $lv_id]);
|
", [$start_date, $end_date, $lv_id]);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getStundenplanLE($lehreinheit, $start_date, $end_date, $stundenplan)
|
|
||||||
{
|
|
||||||
$qry = "
|
|
||||||
WITH lehreinheiten AS (
|
|
||||||
SELECT lehreinheit_id FROM lehre.tbl_lehreinheit WHERE lehreinheit_id = ?
|
|
||||||
), " . $this->getStundenplanCTE($stundenplan) . "
|
|
||||||
SELECT *
|
|
||||||
FROM stundenplanentries
|
|
||||||
";
|
|
||||||
|
|
||||||
return $this->execReadOnlyQuery($qry, array($lehreinheit, $start_date, $end_date));
|
|
||||||
}
|
|
||||||
|
|
||||||
public function getStundenplanLV($lehrveranstaltung_id, $start_date, $end_date, $stundenplan)
|
|
||||||
{
|
|
||||||
$qry = "
|
|
||||||
WITH lehreinheiten AS (
|
|
||||||
SELECT lehreinheit_id
|
|
||||||
FROM lehre.tbl_lehreinheit
|
|
||||||
JOIN tbl_studiensemester USING(studiensemester_kurzbz)
|
|
||||||
WHERE lehrveranstaltung_id = ?
|
|
||||||
AND tbl_studiensemester.start >= ? AND tbl_studiensemester.ende <= ?
|
|
||||||
), " . $this->getStundenplanCTE($stundenplan) . "
|
|
||||||
SELECT *
|
|
||||||
FROM stundenplanentries
|
|
||||||
";
|
|
||||||
|
|
||||||
return $this->execReadOnlyQuery($qry, array($lehrveranstaltung_id, $start_date, $end_date, $start_date, $end_date));
|
|
||||||
}
|
|
||||||
|
|
||||||
private function getStundenplanCTE($stundenplan)
|
|
||||||
{
|
|
||||||
return "entries AS (
|
|
||||||
SELECT
|
|
||||||
datum, min(stunde) as stunde_beginn, max(stunde) as stunde_ende,
|
|
||||||
array_agg(DISTINCT(
|
|
||||||
CASE WHEN gruppe_kurzbz is not null THEN gruppe_kurzbz
|
|
||||||
ELSE (UPPER(stg_typ || stg_kurzbz) || COALESCE(semester,'0') || COALESCE(verband,'') || COALESCE(gruppe,''))
|
|
||||||
END)) as gruppen_kuerzel,
|
|
||||||
array_agg(DISTINCT CONCAT(vorname || ' ' || nachname)) as lektorname,
|
|
||||||
array_agg(DISTINCT stundenplan.ort_kurzbz) as ort_kurzbz,
|
|
||||||
array_agg(DISTINCT titel) as titel,
|
|
||||||
lehrfach_bez, stundenplan.lehreinheit_id, lehrveranstaltung_id
|
|
||||||
FROM lehre.vw_$stundenplan as stundenplan
|
|
||||||
JOIN public.tbl_mitarbeiter ON stundenplan.uid = tbl_mitarbeiter.mitarbeiter_uid
|
|
||||||
JOIN tbl_benutzer ON tbl_mitarbeiter.mitarbeiter_uid = tbl_benutzer.uid
|
|
||||||
JOIN tbl_person USING(person_id)
|
|
||||||
JOIN lehreinheiten ON stundenplan.lehreinheit_id = lehreinheiten.lehreinheit_id
|
|
||||||
WHERE datum >= ? AND datum <= ?
|
|
||||||
GROUP BY datum, unr, stundenplan.lehreinheit_id, lehrveranstaltung_id, lehrfach_bez, lehrfach_bez
|
|
||||||
ORDER BY datum, min(stunde), unr, lehreinheit_id
|
|
||||||
),
|
|
||||||
stundenplanentries AS (
|
|
||||||
SELECT
|
|
||||||
entries.*,
|
|
||||||
stundeb.beginn AS beginn,
|
|
||||||
stundee.ende AS ende
|
|
||||||
FROM entries
|
|
||||||
JOIN lehre.tbl_stunde stundeb ON stundeb.stunde = entries.stunde_beginn
|
|
||||||
JOIN lehre.tbl_stunde stundee ON stundee.stunde = entries.stunde_ende
|
|
||||||
)";
|
|
||||||
}
|
|
||||||
/**
|
/**
|
||||||
* queries Stundenplan and filters by assigned ma_kurzbz, very similar to get by LVA
|
* queries Stundenplan and filters by assigned ma_kurzbz, very similar to get by LVA
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -241,15 +241,4 @@ class Stundenplandev_model extends DB_Model
|
|||||||
|
|
||||||
return $this->delete(array('lehreinheit_id' => $lehreinheit_id, 'mitarbeiter_uid' => $mitarbeiter_uid));
|
return $this->delete(array('lehreinheit_id' => $lehreinheit_id, 'mitarbeiter_uid' => $mitarbeiter_uid));
|
||||||
}
|
}
|
||||||
|
|
||||||
public function lektorHasStundenplandevEintrag($uid, $datum, $stunde)
|
|
||||||
{
|
|
||||||
$qry = "SELECT stundenplandev_id, lektor, stg_kurzbz, ort_kurzbz, semester, verband, gruppe, gruppe_kurzbz, datum, stunde
|
|
||||||
FROM lehre.vw_stundenplandev
|
|
||||||
WHERE uid = ?
|
|
||||||
AND datum = ?
|
|
||||||
AND stunde = ?";
|
|
||||||
|
|
||||||
return $this->execReadOnlyQuery($qry, [$uid, $datum, $stunde]);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -61,40 +61,4 @@ class Zeitsperre_model extends DB_Model
|
|||||||
|
|
||||||
return $this->execQuery($qry);
|
return $this->execQuery($qry);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function checkIfZeitsperreExists($uid, $datum, $stunde)
|
|
||||||
{
|
|
||||||
$this->db->select("*");
|
|
||||||
|
|
||||||
$this->db->where('mitarbeiter_uid', $uid);
|
|
||||||
$this->db->where('zeitsperretyp_kurzbz !=', 'ZVerfueg');
|
|
||||||
|
|
||||||
$this->db->group_start();
|
|
||||||
|
|
||||||
$this->db->where('vondatum <', $datum);
|
|
||||||
$this->db->or_group_start();
|
|
||||||
$this->db->where('vondatum', $datum);
|
|
||||||
$this->db->group_start();
|
|
||||||
$this->db->where('vonstunde <=', $stunde);
|
|
||||||
$this->db->or_where('vonstunde IS NULL', null, false);
|
|
||||||
$this->db->group_end();
|
|
||||||
$this->db->group_end();
|
|
||||||
$this->db->group_end();
|
|
||||||
|
|
||||||
|
|
||||||
$this->db->group_start();
|
|
||||||
$this->db->where('bisdatum >', $datum);
|
|
||||||
$this->db->or_group_start();
|
|
||||||
$this->db->where('bisdatum', $datum);
|
|
||||||
$this->db->group_start();
|
|
||||||
$this->db->where('bisstunde >=', $stunde);
|
|
||||||
$this->db->or_where('bisstunde IS NULL', null, false);
|
|
||||||
$this->db->group_end();
|
|
||||||
|
|
||||||
$this->db->group_end();
|
|
||||||
$this->db->group_end();
|
|
||||||
|
|
||||||
return $this->load();
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -242,6 +242,7 @@ class Message_model extends DB_Model
|
|||||||
*/
|
*/
|
||||||
public function getMessagesForTable($person_id, $offset, $limit)
|
public function getMessagesForTable($person_id, $offset, $limit)
|
||||||
{
|
{
|
||||||
|
$limitoffset = (!is_null($offset) && !is_null($limit)) ? 'limit ? offset ?' : '';
|
||||||
$sql = <<<EOSQL
|
$sql = <<<EOSQL
|
||||||
with filtered_messages as (
|
with filtered_messages as (
|
||||||
select
|
select
|
||||||
@@ -310,11 +311,12 @@ class Message_model extends DB_Model
|
|||||||
public.tbl_person pr on pr.person_id = fm.recipient_id
|
public.tbl_person pr on pr.person_id = fm.recipient_id
|
||||||
order by
|
order by
|
||||||
m.insertamum DESC
|
m.insertamum DESC
|
||||||
limit ?
|
{$limitoffset}
|
||||||
offset ?;
|
|
||||||
EOSQL;
|
EOSQL;
|
||||||
|
|
||||||
$parametersArray = array($person_id, $person_id, $limit, $offset);
|
$parametersArray = $limitoffset
|
||||||
|
? array($person_id, $person_id, $limit, $offset)
|
||||||
|
: array($person_id, $person_id);
|
||||||
|
|
||||||
$count = 0;
|
$count = 0;
|
||||||
$data = $this->execQuery($sql, $parametersArray);
|
$data = $this->execQuery($sql, $parametersArray);
|
||||||
@@ -325,7 +327,7 @@ EOSQL;
|
|||||||
$data = getData($data);
|
$data = getData($data);
|
||||||
if($data)
|
if($data)
|
||||||
{
|
{
|
||||||
$count = ceil($data[0]->total_msgs / $limit);
|
$count = is_null($limit) ? 1 : ceil($data[0]->total_msgs / $limit);
|
||||||
}
|
}
|
||||||
|
|
||||||
return success(['data' => $data, 'count' => $count]);
|
return success(['data' => $data, 'count' => $count]);
|
||||||
|
|||||||
@@ -0,0 +1,11 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
class VertragsbestandteilLohnguide_model extends DB_Model
|
||||||
|
{
|
||||||
|
public function __construct()
|
||||||
|
{
|
||||||
|
parent::__construct();
|
||||||
|
$this->dbTable = 'hr.tbl_vertragsbestandteil_lohnguide';
|
||||||
|
$this->pk = 'vertragsbestandteil_id';
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -37,7 +37,8 @@ class Vertragsbestandteil_model extends DB_Model
|
|||||||
kf.arbeitgeber_frist, kf.arbeitnehmer_frist,
|
kf.arbeitgeber_frist, kf.arbeitnehmer_frist,
|
||||||
s.wochenstunden, s.teilzeittyp_kurzbz,
|
s.wochenstunden, s.teilzeittyp_kurzbz,
|
||||||
u.tage,
|
u.tage,
|
||||||
z.zeitaufzeichnung, z.azgrelevant, z.homeoffice
|
z.zeitaufzeichnung, z.azgrelevant, z.homeoffice,
|
||||||
|
lg.stellenbezeichnung, lg.vordienstzeit, lg.fachrichtung_kurzbz, lg.modellstelle_kurzbz, lg.kommentar_person, lg.kommentar_modellstelle
|
||||||
FROM
|
FROM
|
||||||
hr.tbl_vertragsbestandteil v
|
hr.tbl_vertragsbestandteil v
|
||||||
LEFT JOIN
|
LEFT JOIN
|
||||||
@@ -63,6 +64,8 @@ class Vertragsbestandteil_model extends DB_Model
|
|||||||
hr.tbl_vertragsbestandteil_urlaubsanspruch u USING(vertragsbestandteil_id)
|
hr.tbl_vertragsbestandteil_urlaubsanspruch u USING(vertragsbestandteil_id)
|
||||||
LEFT JOIN
|
LEFT JOIN
|
||||||
hr.tbl_vertragsbestandteil_zeitaufzeichnung z USING(vertragsbestandteil_id)
|
hr.tbl_vertragsbestandteil_zeitaufzeichnung z USING(vertragsbestandteil_id)
|
||||||
|
LEFT JOIN
|
||||||
|
hr.tbl_vertragsbestandteil_lohnguide lg USING(vertragsbestandteil_id)
|
||||||
EOSQL;
|
EOSQL;
|
||||||
return $sql;
|
return $sql;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -11,7 +11,6 @@ $includesArray = array(
|
|||||||
'skipID' => '#fhccontent',
|
'skipID' => '#fhccontent',
|
||||||
'vuedatepicker11' => true,
|
'vuedatepicker11' => true,
|
||||||
'customCSSs' => array(
|
'customCSSs' => array(
|
||||||
'vendor/vuejs/vuedatepicker_css/main.css',
|
|
||||||
'public/css/components/verticalsplit.css',
|
'public/css/components/verticalsplit.css',
|
||||||
'public/css/components/searchbar/searchbar.css',
|
'public/css/components/searchbar/searchbar.css',
|
||||||
'public/css/Fhc.css',
|
'public/css/Fhc.css',
|
||||||
@@ -33,17 +32,14 @@ $includesArray = array(
|
|||||||
'vendor/npm-asset/primevue/inputnumber/inputnumber.min.js',
|
'vendor/npm-asset/primevue/inputnumber/inputnumber.min.js',
|
||||||
'vendor/npm-asset/primevue/speeddial/speeddial.min.js',
|
'vendor/npm-asset/primevue/speeddial/speeddial.min.js',
|
||||||
'vendor/npm-asset/primevue/textarea/textarea.min.js',
|
'vendor/npm-asset/primevue/textarea/textarea.min.js',
|
||||||
'vendor/moment/luxonjs/luxon.min.js',
|
|
||||||
'vendor/npm-asset/primevue/password/password.min.js',
|
|
||||||
'vendor/npm-asset/primevue/multiselect/multiselect.min.js',
|
|
||||||
'vendor/npm-asset/primevue/timeline/timeline.min.js',
|
'vendor/npm-asset/primevue/timeline/timeline.min.js',
|
||||||
'vendor/npm-asset/primevue/inplace/inplace.min.js',
|
'vendor/npm-asset/primevue/inplace/inplace.min.js',
|
||||||
'vendor/npm-asset/primevue/message/message.min.js',
|
'vendor/npm-asset/primevue/message/message.min.js',
|
||||||
'vendor/npm-asset/primevue/tieredmenu/tieredmenu.js',
|
'vendor/npm-asset/primevue/tieredmenu/tieredmenu.js',
|
||||||
|
'vendor/moment/luxonjs/luxon.min.js'
|
||||||
),
|
),
|
||||||
'customJSModules' => array(
|
'customJSModules' => array(
|
||||||
'public/js/apps/Dashboard/Fhc.js',
|
'public/js/apps/Dashboard/Fhc.js',
|
||||||
'vendor/olifolkerd/tabulator5/src/js/modules/ColumnCalcs/ColumnCalcs.js'
|
|
||||||
),
|
),
|
||||||
|
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -31,8 +31,6 @@
|
|||||||
lv-root="<?= site_url('LVVerwaltung'); ?>"
|
lv-root="<?= site_url('LVVerwaltung'); ?>"
|
||||||
:permissions="<?= htmlspecialchars(json_encode($permissions));?>"
|
:permissions="<?= htmlspecialchars(json_encode($permissions));?>"
|
||||||
:config="<?= htmlspecialchars(json_encode($configs)); ?>"
|
:config="<?= htmlspecialchars(json_encode($configs)); ?>"
|
||||||
avatar-url="<?= site_url('Cis/Pub/bild/person/' . getAuthPersonId()); ?>"
|
|
||||||
logout-url="<?= site_url('Cis/Auth/logout'); ?>"
|
|
||||||
>
|
>
|
||||||
</router-view>
|
</router-view>
|
||||||
|
|
||||||
|
|||||||
@@ -46,12 +46,13 @@ echo '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
|
|||||||
<link rel="stylesheet" href="../../../skin/tablesort.css" type="text/css"/>
|
<link rel="stylesheet" href="../../../skin/tablesort.css" type="text/css"/>
|
||||||
<link rel="stylesheet" href="../../../skin/style.css.php" type="text/css">
|
<link rel="stylesheet" href="../../../skin/style.css.php" type="text/css">
|
||||||
<link rel="stylesheet" type="text/css" href="../../../skin/jquery-ui-1.9.2.custom.min.css">
|
<link rel="stylesheet" type="text/css" href="../../../skin/jquery-ui-1.9.2.custom.min.css">
|
||||||
<script type="text/javascript" src="../../../vendor/jquery/jquery1/jquery-1.12.4.min.js"></script>
|
|
||||||
<script type="text/javascript" src="../../../vendor/christianbach/tablesorter/jquery.tablesorter.min.js"></script>
|
|
||||||
<script type="text/javascript" src="../../../vendor/components/jqueryui/jquery-ui.min.js"></script>
|
<script type="text/javascript" src="../../../vendor/components/jqueryui/jquery-ui.min.js"></script>
|
||||||
<script type="text/javascript" src="../../../include/js/jquery.ui.datepicker.translation.js"></script>
|
<script type="text/javascript" src="../../../include/js/jquery.ui.datepicker.translation.js"></script>
|
||||||
<script type="text/javascript" src="../../../vendor/jquery/sizzle/sizzle.js"></script>';
|
<script type="text/javascript" src="../../../vendor/jquery/sizzle/sizzle.js"></script>';
|
||||||
|
|
||||||
|
include('../../../include/meta/jquery.php');
|
||||||
|
include('../../../include/meta/jquery-tablesorter.php');
|
||||||
|
|
||||||
const MOODLE_ADDON_KURZBZ = 'moodle';
|
const MOODLE_ADDON_KURZBZ = 'moodle';
|
||||||
|
|
||||||
// Load Addons to get Moodle_Path
|
// Load Addons to get Moodle_Path
|
||||||
@@ -71,7 +72,7 @@ echo '
|
|||||||
$("#myTable").tablesorter(
|
$("#myTable").tablesorter(
|
||||||
{
|
{
|
||||||
sortList: [[0,0],[1,0]],
|
sortList: [[0,0],[1,0]],
|
||||||
widgets: [\'zebra\']
|
widgets: [\'zebra\',\'filter\']
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
@@ -151,8 +152,9 @@ foreach($service->result as $row)
|
|||||||
$person = new person();
|
$person = new person();
|
||||||
$person->getPersonFromBenutzer($row->operativ_uid);
|
$person->getPersonFromBenutzer($row->operativ_uid);
|
||||||
$operativ = $person->nachname.' '.$person->vorname;
|
$operativ = $person->nachname.' '.$person->vorname;
|
||||||
|
$oeBez = new organisationseinheit($row->oe_kurzbz);
|
||||||
echo '<tr>';
|
echo '<tr>';
|
||||||
echo '<td>',$row->oe_kurzbz,'</td>';
|
echo '<td>',$oeBez->bezeichnung,'</td>';
|
||||||
echo '<td><b>'.$row->bezeichnung.'</b></td>';
|
echo '<td><b>'.$row->bezeichnung.'</b></td>';
|
||||||
echo '<td>',$row->beschreibung,'</td>';
|
echo '<td>',$row->beschreibung,'</td>';
|
||||||
echo '<td><nobr><a href="../profile/index.php?uid='.$row->design_uid.'">',$design,'</a></nobr></td>';
|
echo '<td><nobr><a href="../profile/index.php?uid='.$row->design_uid.'">',$design,'</a></nobr></td>';
|
||||||
|
|||||||
@@ -44,6 +44,27 @@ if (isset($_GET['sprache_user']) && !empty($_GET['sprache_user']))
|
|||||||
$sprache_user = (isset($_SESSION['sprache_user']) && !empty($_SESSION['sprache_user'])) ? $_SESSION['sprache_user'] : DEFAULT_LANGUAGE;
|
$sprache_user = (isset($_SESSION['sprache_user']) && !empty($_SESSION['sprache_user'])) ? $_SESSION['sprache_user'] : DEFAULT_LANGUAGE;
|
||||||
$p = new phrasen($sprache_user);
|
$p = new phrasen($sprache_user);
|
||||||
|
|
||||||
|
$showInfo = false;
|
||||||
|
if (isset($_SESSION['alleGebiete']))
|
||||||
|
{
|
||||||
|
$alleGebiete = array_map('intval', $_SESSION['alleGebiete']);
|
||||||
|
$pruefling_id = $_SESSION['pruefling_id'];
|
||||||
|
|
||||||
|
$qry = "SELECT COUNT(DISTINCT gebiet_id) as anzahl
|
||||||
|
FROM testtool.tbl_pruefling_frage
|
||||||
|
JOIN testtool.tbl_frage USING(frage_id)
|
||||||
|
WHERE gebiet_id IN (". implode(',', $alleGebiete) .")
|
||||||
|
AND pruefling_id = ". $pruefling_id ."
|
||||||
|
";
|
||||||
|
|
||||||
|
$result = $db->db_query($qry);
|
||||||
|
$anzahlGebiete = $db->db_fetch_object($result);
|
||||||
|
|
||||||
|
|
||||||
|
if ((int)$anzahlGebiete->anzahl === count($alleGebiete))
|
||||||
|
$showInfo = true;
|
||||||
|
}
|
||||||
|
|
||||||
?>
|
?>
|
||||||
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
|
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
|
||||||
<html>
|
<html>
|
||||||
@@ -69,6 +90,7 @@ $p = new phrasen($sprache_user);
|
|||||||
<body>
|
<body>
|
||||||
<br><br><br><br><br>
|
<br><br><br><br><br>
|
||||||
<center><h2><?php echo $p->t('testtool/zeitAbgelaufen');?></h2>
|
<center><h2><?php echo $p->t('testtool/zeitAbgelaufen');?></h2>
|
||||||
|
<h3><?php echo ($showInfo ? ($p->t('testtool/alleGebietGestartet') . "<br />" . $p->t('testtool/alleGebieteGestartetInfo')) : ''); ?></h3>
|
||||||
</center>
|
</center>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|||||||
+25
-1
@@ -187,6 +187,7 @@ else if (isset($_SESSION['pruefling_id']))
|
|||||||
}
|
}
|
||||||
|
|
||||||
$qry .= "
|
$qry .= "
|
||||||
|
AND ps_status.bewerbung_abgeschicktamum IS NOT NULL
|
||||||
|
|
||||||
/* Order to get last semester when using distinct on */
|
/* Order to get last semester when using distinct on */
|
||||||
ORDER BY
|
ORDER BY
|
||||||
@@ -293,7 +294,7 @@ else if (isset($_SESSION['pruefling_id']))
|
|||||||
}
|
}
|
||||||
$lastsemester = $row->semester;
|
$lastsemester = $row->semester;
|
||||||
|
|
||||||
echo '<table border="0" cellspacing="0" cellpadding="0" id="Gebiet" style="display: visible; border-collapse: separate; border-spacing: 0 3px;">';
|
echo '<table border="0" cellspacing="0" cellpadding="0" id="Gebiet" style="display: visible; border-collapse: separate; border-spacing: 0 3px; margin-top: 5px;">';
|
||||||
echo '<tr><td class="HeaderTesttool">'. ($row->semester == '1' ? $p->t('testtool/basisgebiete') : $p->t('testtool/quereinstiegsgebiete')).'</td></tr>';
|
echo '<tr><td class="HeaderTesttool">'. ($row->semester == '1' ? $p->t('testtool/basisgebiete') : $p->t('testtool/quereinstiegsgebiete')).'</td></tr>';
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -405,6 +406,29 @@ else if (isset($_SESSION['pruefling_id']))
|
|||||||
echo '</table>';
|
echo '</table>';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (isset($_SESSION['pruefling_id']) && !empty($_SESSION['alleGebiete']))
|
||||||
|
{
|
||||||
|
$alleGebiete = array_map('intval', $_SESSION['alleGebiete']);
|
||||||
|
$pruefling_id = (int)$_SESSION['pruefling_id'];
|
||||||
|
|
||||||
|
$qry = "SELECT COUNT(DISTINCT gebiet_id) AS anzahl
|
||||||
|
FROM testtool.tbl_pruefling_frage
|
||||||
|
JOIN testtool.tbl_frage USING(frage_id)
|
||||||
|
WHERE gebiet_id IN (". implode(',', $alleGebiete) .")
|
||||||
|
AND pruefling_id = ". $pruefling_id;
|
||||||
|
|
||||||
|
$result_check = $db->db_query($qry);
|
||||||
|
$row_check = $db->db_fetch_object($result_check);
|
||||||
|
|
||||||
|
if ((int)$row_check->anzahl === count($alleGebiete))
|
||||||
|
{
|
||||||
|
echo '<tr><td>
|
||||||
|
<div class="alert alert-success small" style="margin-left: 20px; width: 170px; margin-top: 3px;" role="alert">
|
||||||
|
<strong>'.$p->t('testtool/alleGebietGestartet').'</strong>
|
||||||
|
</div>
|
||||||
|
</td></tr>';
|
||||||
|
}
|
||||||
|
}
|
||||||
// Link zum Logout
|
// Link zum Logout
|
||||||
|
|
||||||
echo '<tr><td class="ItemTesttool" style="margin-left: 20px;" nowrap>
|
echo '<tr><td class="ItemTesttool" style="margin-left: 20px;" nowrap>
|
||||||
|
|||||||
@@ -342,6 +342,8 @@ echo '<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>';
|
|||||||
<vbox>
|
<vbox>
|
||||||
<checkbox id="mitarbeiter-entwicklungsteam-detail-checkbox-neu" checked="true" hidden="true" />
|
<checkbox id="mitarbeiter-entwicklungsteam-detail-checkbox-neu" checked="true" hidden="true" />
|
||||||
<textbox id="mitarbeiter-entwicklungsteam-detail-textbox-studiengang" hidden="true" />
|
<textbox id="mitarbeiter-entwicklungsteam-detail-textbox-studiengang" hidden="true" />
|
||||||
|
<textbox id="mitarbeiter-entwicklungsteam-detail-entwicklungsteam_id" hidden="true" />
|
||||||
|
|
||||||
<groupbox id="mitarbeiter-entwicklungsteam-detail-groupbox" flex="1">
|
<groupbox id="mitarbeiter-entwicklungsteam-detail-groupbox" flex="1">
|
||||||
<caption label="Details" />
|
<caption label="Details" />
|
||||||
<grid id="mitarbeiter-entwicklungsteam-detail-grid" style="margin:4px;" flex="1">
|
<grid id="mitarbeiter-entwicklungsteam-detail-grid" style="margin:4px;" flex="1">
|
||||||
|
|||||||
@@ -1708,6 +1708,7 @@ function MitarbeiterEntwicklungsteamSelect()
|
|||||||
document.getElementById('mitarbeiter-entwicklungsteam-detail-textbox-studiengang').value=studiengang_kz;
|
document.getElementById('mitarbeiter-entwicklungsteam-detail-textbox-studiengang').value=studiengang_kz;
|
||||||
document.getElementById('mitarbeiter-entwicklungsteam-detail-datum-beginn').value=beginn;
|
document.getElementById('mitarbeiter-entwicklungsteam-detail-datum-beginn').value=beginn;
|
||||||
document.getElementById('mitarbeiter-entwicklungsteam-detail-datum-ende').value=ende;
|
document.getElementById('mitarbeiter-entwicklungsteam-detail-datum-ende').value=ende;
|
||||||
|
document.getElementById('mitarbeiter-entwicklungsteam-detail-entwicklungsteam_id').value=entwicklungsteam_id;
|
||||||
MitarbeiterEntwicklungsteamDetailDisableFields(false);
|
MitarbeiterEntwicklungsteamDetailDisableFields(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1725,6 +1726,7 @@ function MitarbeiterEntwicklungsteamSpeichern()
|
|||||||
studiengang_kz_old = document.getElementById('mitarbeiter-entwicklungsteam-detail-textbox-studiengang').value;
|
studiengang_kz_old = document.getElementById('mitarbeiter-entwicklungsteam-detail-textbox-studiengang').value;
|
||||||
beginn = document.getElementById('mitarbeiter-entwicklungsteam-detail-datum-beginn').value;
|
beginn = document.getElementById('mitarbeiter-entwicklungsteam-detail-datum-beginn').value;
|
||||||
ende = document.getElementById('mitarbeiter-entwicklungsteam-detail-datum-ende').value;
|
ende = document.getElementById('mitarbeiter-entwicklungsteam-detail-datum-ende').value;
|
||||||
|
entwicklungsteam_id = document.getElementById('mitarbeiter-entwicklungsteam-detail-entwicklungsteam_id').value;
|
||||||
|
|
||||||
if(studiengang_kz=='')
|
if(studiengang_kz=='')
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -3555,6 +3555,14 @@ function StudentZeugnisDokumentArchivieren()
|
|||||||
case 'microcredential_2':
|
case 'microcredential_2':
|
||||||
case 'microcredential_3':
|
case 'microcredential_3':
|
||||||
case 'microcredential_4':
|
case 'microcredential_4':
|
||||||
|
case 'microdegree_1':
|
||||||
|
case 'microdegree_2':
|
||||||
|
case 'microdegree_3':
|
||||||
|
case 'microdegree_4':
|
||||||
|
case 'microdegreeabschluss_1':
|
||||||
|
case 'microdegreeabschluss_2':
|
||||||
|
case 'microdegreeabschluss_3':
|
||||||
|
case 'microdegreeabschluss_4':
|
||||||
xml = 'microcredential.xml.php';
|
xml = 'microcredential.xml.php';
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
|||||||
@@ -364,9 +364,10 @@ class entwicklungsteam extends basis_db
|
|||||||
$bismeldung_jahr = $datetime->format('Y');
|
$bismeldung_jahr = $datetime->format('Y');
|
||||||
|
|
||||||
//laden des Datensatzes
|
//laden des Datensatzes
|
||||||
$qry = "SELECT *
|
$qry = "SELECT tbl_entwicklungsteam.*, tbl_besqual.*, tbl_studiengang.studiengang_kz, tbl_studiengang.melderelevant
|
||||||
FROM bis.tbl_entwicklungsteam
|
FROM bis.tbl_entwicklungsteam
|
||||||
JOIN bis.tbl_besqual USING(besqualcode)
|
JOIN bis.tbl_besqual USING(besqualcode)
|
||||||
|
JOIN public.tbl_studiengang USING(studiengang_kz)
|
||||||
WHERE mitarbeiter_uid=".$this->db_add_param($mitarbeiter_uid)."
|
WHERE mitarbeiter_uid=".$this->db_add_param($mitarbeiter_uid)."
|
||||||
AND (beginn is NULL OR beginn <= make_date(". $this->db_add_param($bismeldung_jahr). "::INTEGER, 12, 31))
|
AND (beginn is NULL OR beginn <= make_date(". $this->db_add_param($bismeldung_jahr). "::INTEGER, 12, 31))
|
||||||
AND (ende is NULL OR ende >= make_date(". $this->db_add_param($bismeldung_jahr). "::INTEGER, 1, 1))";
|
AND (ende is NULL OR ende >= make_date(". $this->db_add_param($bismeldung_jahr). "::INTEGER, 1, 1))";
|
||||||
@@ -394,6 +395,7 @@ class entwicklungsteam extends basis_db
|
|||||||
$obj->insertvon = $row->insertvon;
|
$obj->insertvon = $row->insertvon;
|
||||||
$obj->ext_id = $row->ext_id;
|
$obj->ext_id = $row->ext_id;
|
||||||
$obj->besqual = $row->besqualbez;
|
$obj->besqual = $row->besqualbez;
|
||||||
|
$obj->melderelevant = $this->db_parse_bool($row->melderelevant);
|
||||||
|
|
||||||
$this->result[] = $obj;
|
$this->result[] = $obj;
|
||||||
}
|
}
|
||||||
|
|||||||
+49
-1
@@ -25,6 +25,7 @@
|
|||||||
*/
|
*/
|
||||||
require_once(dirname(__FILE__).'/basis_db.class.php');
|
require_once(dirname(__FILE__).'/basis_db.class.php');
|
||||||
require_once(dirname(__FILE__).'/'.EXT_FKT_PATH.'/generateZahlungsreferenz.inc.php');
|
require_once(dirname(__FILE__).'/'.EXT_FKT_PATH.'/generateZahlungsreferenz.inc.php');
|
||||||
|
require_once(dirname(__FILE__).'/variable.class.php');
|
||||||
|
|
||||||
class konto extends basis_db
|
class konto extends basis_db
|
||||||
{
|
{
|
||||||
@@ -432,6 +433,8 @@ class konto extends basis_db
|
|||||||
|
|
||||||
$qry.=" ORDER BY beschreibung";
|
$qry.=" ORDER BY beschreibung";
|
||||||
|
|
||||||
|
$oehBeitrag = $this->_getOEHBeitrag();
|
||||||
|
|
||||||
if($this->db_query($qry))
|
if($this->db_query($qry))
|
||||||
{
|
{
|
||||||
while($row = $this->db_fetch_object())
|
while($row = $this->db_fetch_object())
|
||||||
@@ -440,7 +443,15 @@ class konto extends basis_db
|
|||||||
|
|
||||||
$typ->buchungstyp_kurzbz = $row->buchungstyp_kurzbz;
|
$typ->buchungstyp_kurzbz = $row->buchungstyp_kurzbz;
|
||||||
$typ->beschreibung = $row->beschreibung;
|
$typ->beschreibung = $row->beschreibung;
|
||||||
$typ->standardbetrag = $row->standardbetrag;
|
if (strtolower($typ->buchungstyp_kurzbz) === 'oeh' && $oehBeitrag)
|
||||||
|
{
|
||||||
|
$typ->standardbetrag = $oehBeitrag;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
$typ->standardbetrag = $row->standardbetrag;
|
||||||
|
}
|
||||||
|
|
||||||
$typ->standardtext = $row->standardtext;
|
$typ->standardtext = $row->standardtext;
|
||||||
$typ->credit_points = $row->credit_points;
|
$typ->credit_points = $row->credit_points;
|
||||||
$typ->aktiv = $this->db_parse_bool($row->aktiv);
|
$typ->aktiv = $this->db_parse_bool($row->aktiv);
|
||||||
@@ -990,6 +1001,43 @@ class konto extends basis_db
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private function _getOEHBeitrag()
|
||||||
|
{
|
||||||
|
if(!is_user_logged_in())
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
$variablen_obj = new variable();
|
||||||
|
$variablen_obj->loadVariables(get_uid());
|
||||||
|
|
||||||
|
$qry = "WITH semstart AS (
|
||||||
|
SELECT start FROM public.tbl_studiensemester
|
||||||
|
WHERE studiensemester_kurzbz = '". $this->db_escape($variablen_obj->variable->semester_aktuell) . "'
|
||||||
|
)
|
||||||
|
SELECT * FROM bis.tbl_oehbeitrag oehb
|
||||||
|
JOIN public.tbl_studiensemester semvon ON oehb.von_studiensemester_kurzbz = semvon.studiensemester_kurzbz
|
||||||
|
LEFT JOIN public.tbl_studiensemester sembis ON oehb.bis_studiensemester_kurzbz = sembis.studiensemester_kurzbz
|
||||||
|
JOIN semstart ON semstart.start::date >= semvon.start::date AND (sembis.studiensemester_kurzbz IS NULL OR semstart.start::date <= sembis.start::date)
|
||||||
|
ORDER BY semvon.start
|
||||||
|
LIMIT 1";
|
||||||
|
|
||||||
|
if ($this->db_query($qry))
|
||||||
|
{
|
||||||
|
if($row = $this->db_fetch_object())
|
||||||
|
{
|
||||||
|
$summe = ($row->studierendenbeitrag + $row->versicherung) * -1;
|
||||||
|
return number_format((float)$summe, 2, '.', '');
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
$this->errormsg = 'Fehler bei der Abfrage aufgetreten';
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
?>
|
?>
|
||||||
|
|||||||
@@ -584,8 +584,9 @@ class lehreinheitmitarbeiter extends basis_db
|
|||||||
|
|
||||||
$qry = '
|
$qry = '
|
||||||
WITH semester_sws_tbl AS (
|
WITH semester_sws_tbl AS (
|
||||||
SELECT DISTINCT lehreinheit_id, studiensemester_kurzbz, lema.semesterstunden,
|
SELECT
|
||||||
stg.studiengang_kz, stg.melde_studiengang_kz, stg.lgartcode
|
DISTINCT lehreinheit_id, studiensemester_kurzbz, lema.semesterstunden,
|
||||||
|
stg.studiengang_kz, stg.melde_studiengang_kz, stg.lgartcode, stg.melderelevant
|
||||||
FROM lehre.tbl_lehreinheitmitarbeiter lema
|
FROM lehre.tbl_lehreinheitmitarbeiter lema
|
||||||
JOIN lehre.tbl_lehreinheit USING (lehreinheit_id)
|
JOIN lehre.tbl_lehreinheit USING (lehreinheit_id)
|
||||||
JOIN lehre.tbl_lehrveranstaltung lv USING (lehrveranstaltung_id)
|
JOIN lehre.tbl_lehrveranstaltung lv USING (lehrveranstaltung_id)
|
||||||
@@ -598,6 +599,7 @@ class lehreinheitmitarbeiter extends basis_db
|
|||||||
AND ss.studiensemester_kurzbz IN ('.$this->implode4SQL($studiensemester_kurzbz_arr).')
|
AND ss.studiensemester_kurzbz IN ('.$this->implode4SQL($studiensemester_kurzbz_arr).')
|
||||||
-- nur lehre, die bisgemeldet wird
|
-- nur lehre, die bisgemeldet wird
|
||||||
AND lema.bismelden
|
AND lema.bismelden
|
||||||
|
AND stg.melderelevant
|
||||||
-- keine lehreinheiten ohne semesterstunden
|
-- keine lehreinheiten ohne semesterstunden
|
||||||
AND lema.semesterstunden != 0
|
AND lema.semesterstunden != 0
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -32,6 +32,8 @@ $this->phrasen['testtool/keineAntwort']='Keine Antwort';
|
|||||||
$this->phrasen['testtool/speichernUndWeiter']='Speichern und weiter';
|
$this->phrasen['testtool/speichernUndWeiter']='Speichern und weiter';
|
||||||
$this->phrasen['testtool/alleFragenBeantwortet']='GLÜCKWUNSCH! \n\nSie haben alle Fragen in der zur Verfügung stehenden Zeit beantwortet. \nNutzen Sie die verbleibende Zeit, um Ihre Antworten zu kontrollieren oder fahren Sie mit dem nächsten Teilgebiet fort.';
|
$this->phrasen['testtool/alleFragenBeantwortet']='GLÜCKWUNSCH! \n\nSie haben alle Fragen in der zur Verfügung stehenden Zeit beantwortet. \nNutzen Sie die verbleibende Zeit, um Ihre Antworten zu kontrollieren oder fahren Sie mit dem nächsten Teilgebiet fort.';
|
||||||
$this->phrasen['testtool/zeitAbgelaufen']='Die Maximalzeit für dieses Gebiet ist abgelaufen, oder alle Fragen wurden beantwortet';
|
$this->phrasen['testtool/zeitAbgelaufen']='Die Maximalzeit für dieses Gebiet ist abgelaufen, oder alle Fragen wurden beantwortet';
|
||||||
|
$this->phrasen['testtool/alleGebietGestartet']='Sie haben alle Gebiete bearbeitet.';
|
||||||
|
$this->phrasen['testtool/alleGebieteGestartetInfo']='Sie können sich nun ausloggen und den Browser schließen.';
|
||||||
$this->phrasen['testtool/spracheDerTestfragen']='Gewünschte Sprache der Testfragen';
|
$this->phrasen['testtool/spracheDerTestfragen']='Gewünschte Sprache der Testfragen';
|
||||||
$this->phrasen['testtool/einleitung']='Einleitung';
|
$this->phrasen['testtool/einleitung']='Einleitung';
|
||||||
$this->phrasen['testtool/blaettern']='Blättern';
|
$this->phrasen['testtool/blaettern']='Blättern';
|
||||||
|
|||||||
@@ -32,6 +32,8 @@ $this->phrasen['testtool/keineAntwort']='No Answer';
|
|||||||
$this->phrasen['testtool/speichernUndWeiter']='Save and next';
|
$this->phrasen['testtool/speichernUndWeiter']='Save and next';
|
||||||
$this->phrasen['testtool/alleFragenBeantwortet']='CONGRATULATIONS!\n\nYou have answered all the questions in the time allowed.\n Use the remaining time to check your answers or continue to the next section.';
|
$this->phrasen['testtool/alleFragenBeantwortet']='CONGRATULATIONS!\n\nYou have answered all the questions in the time allowed.\n Use the remaining time to check your answers or continue to the next section.';
|
||||||
$this->phrasen['testtool/zeitAbgelaufen']='The time for this part has expired or you have answered all the questions.';
|
$this->phrasen['testtool/zeitAbgelaufen']='The time for this part has expired or you have answered all the questions.';
|
||||||
|
$this->phrasen['testtool/alleGebietGestartet']='You have worked on all sections.';
|
||||||
|
$this->phrasen['testtool/alleGebieteGestartetInfo']='You can now log out and close the browser.';
|
||||||
$this->phrasen['testtool/spracheDerTestfragen']='Desired language of questions';
|
$this->phrasen['testtool/spracheDerTestfragen']='Desired language of questions';
|
||||||
$this->phrasen['testtool/einleitung']='Introduction';
|
$this->phrasen['testtool/einleitung']='Introduction';
|
||||||
$this->phrasen['testtool/blaettern']='Browse';
|
$this->phrasen['testtool/blaettern']='Browse';
|
||||||
|
|||||||
@@ -407,7 +407,6 @@ html {
|
|||||||
background-color: var(--fhc-background);
|
background-color: var(--fhc-background);
|
||||||
border-color: var(--fhc-border);
|
border-color: var(--fhc-border);
|
||||||
padding: var(--fhc-cis-main-py) var(--fhc-cis-main-px);
|
padding: var(--fhc-cis-main-py) var(--fhc-cis-main-px);
|
||||||
min-width: 0; /* fix flex-grow with tabulator exceeding width */
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#cis-main .fa-arrow-up-right-from-square {
|
#cis-main .fa-arrow-up-right-from-square {
|
||||||
@@ -857,23 +856,6 @@ html {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* styling for editable dropdown column of notenvorschläge in benotungstool*/
|
|
||||||
#notentable .tabulator-tableholder .tabulator-editable {
|
|
||||||
position: relative;
|
|
||||||
background-color: rgba(255, 255, 157, 0.73);
|
|
||||||
cursor: pointer;
|
|
||||||
}
|
|
||||||
|
|
||||||
#notentable .tabulator-tableholder .tabulator-editable::after {
|
|
||||||
content: "▾";
|
|
||||||
position: absolute;
|
|
||||||
right: 6px;
|
|
||||||
color: rgba(176, 176, 106, 0.73);;
|
|
||||||
font-size: x-large;
|
|
||||||
bottom: 6px;
|
|
||||||
pointer-events: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
.bordered-modal {
|
.bordered-modal {
|
||||||
border: 1px solid rgba(0, 0, 0, 0.15);
|
border: 1px solid rgba(0, 0, 0, 0.15);
|
||||||
border-radius: 0.5rem;
|
border-radius: 0.5rem;
|
||||||
|
|||||||
@@ -38,9 +38,3 @@ textarea[name="anmerkung"] {
|
|||||||
{
|
{
|
||||||
border-color: black;
|
border-color: black;
|
||||||
}
|
}
|
||||||
|
|
||||||
.node-verband {
|
|
||||||
user-select: none;
|
|
||||||
-webkit-user-select: none;
|
|
||||||
-moz-user-select: none;
|
|
||||||
}
|
|
||||||
|
|||||||
@@ -197,10 +197,6 @@ html.fs_huge {
|
|||||||
margin-bottom: -1px;
|
margin-bottom: -1px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.tiny-90 div.tox.tox-tinymce {
|
|
||||||
height: 90% !important;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* slim begin */
|
/* slim begin */
|
||||||
.stv .form-label {
|
.stv .form-label {
|
||||||
margin-bottom: .15rem;
|
margin-bottom: .15rem;
|
||||||
|
|||||||
@@ -35,19 +35,5 @@ export default {
|
|||||||
method: 'get',
|
method: 'get',
|
||||||
url: `/api/frontend/v1/Lehre/Pruefungen/${lehrveranstaltung_id}`
|
url: `/api/frontend/v1/Lehre/Pruefungen/${lehrveranstaltung_id}`
|
||||||
};
|
};
|
||||||
},
|
|
||||||
getZugewieseneLv(uid, sem_kurzbz){
|
|
||||||
return {
|
|
||||||
method: 'get',
|
|
||||||
url: '/api/frontend/v1/Lehre/getZugewieseneLv',
|
|
||||||
params: { uid, sem_kurzbz}
|
|
||||||
};
|
|
||||||
},
|
|
||||||
getLeForLv(lv_id, sem_kurzbz) {
|
|
||||||
return {
|
|
||||||
method: 'get',
|
|
||||||
url: '/api/frontend/v1/Lehre/getLeForLv',
|
|
||||||
params: { lv_id, sem_kurzbz }
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
@@ -17,13 +17,16 @@
|
|||||||
|
|
||||||
export default {
|
export default {
|
||||||
getMessages(params) {
|
getMessages(params) {
|
||||||
|
let url = 'api/frontend/v1/messages/messages/getMessages'
|
||||||
|
+ '/' + params.id
|
||||||
|
+ '/' + params.type;
|
||||||
|
if(params.size && params.page) {
|
||||||
|
url += '/' + params.size
|
||||||
|
+ '/' + params.page;
|
||||||
|
}
|
||||||
return {
|
return {
|
||||||
method: 'get',
|
method: 'get',
|
||||||
url: 'api/frontend/v1/messages/messages/getMessages/'
|
url: url
|
||||||
+ params.id + '/'
|
|
||||||
+ params.type + '/'
|
|
||||||
+ params.size + '/'
|
|
||||||
+ params.page
|
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
getVorlagen(){
|
getVorlagen(){
|
||||||
|
|||||||
@@ -1,74 +0,0 @@
|
|||||||
/**
|
|
||||||
* 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 {
|
|
||||||
getStudentenNoten(lv_id, sem_kurzbz) {
|
|
||||||
return {
|
|
||||||
method: 'get',
|
|
||||||
url: '/api/frontend/v1/Noten/getStudentenNoten',
|
|
||||||
params: { lv_id, sem_kurzbz }
|
|
||||||
};
|
|
||||||
},
|
|
||||||
getNoten(){
|
|
||||||
return {
|
|
||||||
method: 'get',
|
|
||||||
url: '/api/frontend/v1/Noten/getNoten'
|
|
||||||
};
|
|
||||||
},
|
|
||||||
saveStudentenNoten(password, noten, lv_id, sem_kurzbz) {
|
|
||||||
return {
|
|
||||||
method: 'post',
|
|
||||||
url: '/api/frontend/v1/Noten/saveStudentenNoten',
|
|
||||||
params: { password, noten, lv_id, sem_kurzbz }
|
|
||||||
};
|
|
||||||
},
|
|
||||||
saveNotenvorschlag(lv_id, sem_kurzbz, student_uid, note) {
|
|
||||||
return {
|
|
||||||
method: 'post',
|
|
||||||
url: '/api/frontend/v1/Noten/saveNotenvorschlag',
|
|
||||||
params: { lv_id, sem_kurzbz, student_uid, note }
|
|
||||||
};
|
|
||||||
},
|
|
||||||
saveStudentPruefung(student_uid, note, punkte, datum, lva_id, lehreinheit_id, sem_kurzbz, typ){
|
|
||||||
return {
|
|
||||||
method: 'post',
|
|
||||||
url: '/api/frontend/v1/Noten/saveStudentPruefung',
|
|
||||||
params: { student_uid, note, punkte, datum, lva_id, lehreinheit_id, sem_kurzbz, typ }
|
|
||||||
};
|
|
||||||
},
|
|
||||||
createPruefungen(uids, datum, lva_id, sem_kurzbz){
|
|
||||||
return {
|
|
||||||
method: 'post',
|
|
||||||
url: '/api/frontend/v1/Noten/createPruefungen',
|
|
||||||
params: { uids, datum, lva_id, sem_kurzbz }
|
|
||||||
};
|
|
||||||
},
|
|
||||||
saveNotenvorschlagBulk(lv_id, sem_kurzbz, noten) {
|
|
||||||
return {
|
|
||||||
method: 'post',
|
|
||||||
url: '/api/frontend/v1/Noten/saveNotenvorschlagBulk',
|
|
||||||
params: { lv_id, sem_kurzbz, noten }
|
|
||||||
};
|
|
||||||
},
|
|
||||||
saveStudentPruefungBulk(lv_id, sem_kurzbz, pruefungen) {
|
|
||||||
return {
|
|
||||||
method: 'post',
|
|
||||||
url: '/api/frontend/v1/Noten/savePruefungenBulk',
|
|
||||||
params: { lv_id, sem_kurzbz, pruefungen }
|
|
||||||
};
|
|
||||||
}
|
|
||||||
};
|
|
||||||
@@ -16,12 +16,6 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
getStudiensemester() {
|
|
||||||
return {
|
|
||||||
method: 'get',
|
|
||||||
url: '/api/frontend/v1/Studiensemester/getStudiensemester'
|
|
||||||
};
|
|
||||||
},
|
|
||||||
getAllStudiensemesterAndAktOrNext() {
|
getAllStudiensemesterAndAktOrNext() {
|
||||||
return {
|
return {
|
||||||
method: 'get',
|
method: 'get',
|
||||||
|
|||||||
@@ -16,20 +16,16 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
getCourselist(student_uid, start_date, end_date, stundenplan) {
|
getCourselist(params) {
|
||||||
return {
|
return {
|
||||||
method: 'get',
|
method: 'get',
|
||||||
url: 'api/frontend/v1/stv/LvTermine/getStundenplan/' + encodeURIComponent(student_uid) + '/'
|
url: 'api/frontend/v1/stv/LvTermine/getStundenplan/' + params.student_uid + '/'
|
||||||
+ encodeURIComponent(start_date) + '/'
|
+ params.start_date + '/'
|
||||||
+ encodeURIComponent(end_date) + '/'
|
+ params.end_date + '/'
|
||||||
+ encodeURIComponent(stundenplan) + '/'
|
+ params.group_consecutiveHours + '/'
|
||||||
+ encodeURIComponent(true)
|
+ params.dbStundenplanTable
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
exportCalendar(student_uid, stundenplan)
|
|
||||||
{
|
|
||||||
return FHC_JS_DATA_STORAGE_OBJECT.app_root + 'content/statistik/termine.xls.php?student_uid=' + encodeURIComponent(student_uid) + '&db_stpl_table='+encodeURIComponent(stundenplan);
|
|
||||||
},
|
|
||||||
getStudiensemester(){
|
getStudiensemester(){
|
||||||
return {
|
return {
|
||||||
method: 'get',
|
method: 'get',
|
||||||
|
|||||||
@@ -38,6 +38,10 @@ export default {
|
|||||||
};
|
};
|
||||||
},
|
},
|
||||||
insert(params) {
|
insert(params) {
|
||||||
|
if(params.betrag)
|
||||||
|
{
|
||||||
|
params.betrag = params.betrag.replace(',', '.');
|
||||||
|
}
|
||||||
return {
|
return {
|
||||||
method: 'post',
|
method: 'post',
|
||||||
url: 'api/frontend/v1/stv/konto/insert',
|
url: 'api/frontend/v1/stv/konto/insert',
|
||||||
@@ -52,6 +56,10 @@ export default {
|
|||||||
};
|
};
|
||||||
},
|
},
|
||||||
edit(params) {
|
edit(params) {
|
||||||
|
if(params.betrag)
|
||||||
|
{
|
||||||
|
params.betrag = params.betrag.replace(',', '.');
|
||||||
|
}
|
||||||
return {
|
return {
|
||||||
method: 'post',
|
method: 'post',
|
||||||
url: 'api/frontend/v1/stv/konto/update',
|
url: 'api/frontend/v1/stv/konto/update',
|
||||||
@@ -65,10 +73,14 @@ export default {
|
|||||||
params: { buchungsnr }
|
params: { buchungsnr }
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
getBuchungstypen() {
|
getBuchungstypen(studiensemester_kurzbz) {
|
||||||
|
let url = 'api/frontend/v1/stv/konto/getBuchungstypen'
|
||||||
|
if (!!studiensemester_kurzbz)
|
||||||
|
url = url + '/' + encodeURIComponent(studiensemester_kurzbz);
|
||||||
|
|
||||||
return {
|
return {
|
||||||
method: 'get',
|
method: 'get',
|
||||||
url: 'api/frontend/v1/stv/konto/getBuchungstypen'
|
url: url
|
||||||
};
|
};
|
||||||
}
|
},
|
||||||
};
|
};
|
||||||
@@ -1,15 +0,0 @@
|
|||||||
export default {
|
|
||||||
get() {
|
|
||||||
return {
|
|
||||||
method: 'get',
|
|
||||||
url: '/api/frontend/v1/lv/config/get'
|
|
||||||
};
|
|
||||||
},
|
|
||||||
set(params) {
|
|
||||||
return {
|
|
||||||
method: 'post',
|
|
||||||
url: 'api/frontend/v1/lv/config/set',
|
|
||||||
params
|
|
||||||
};
|
|
||||||
}
|
|
||||||
};
|
|
||||||
@@ -18,14 +18,6 @@ export default {
|
|||||||
params: newData
|
params: newData
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
getGruppe(gruppe)
|
|
||||||
{
|
|
||||||
return {
|
|
||||||
method: 'post',
|
|
||||||
url: '/api/frontend/v1/lv/gruppe/getGruppe/',
|
|
||||||
params: gruppe
|
|
||||||
};
|
|
||||||
},
|
|
||||||
getByLehreinheit(lehreinheit_id)
|
getByLehreinheit(lehreinheit_id)
|
||||||
{
|
{
|
||||||
return {
|
return {
|
||||||
|
|||||||
@@ -1,19 +0,0 @@
|
|||||||
export default {
|
|
||||||
getCourselist(le_id, start_date, end_date, stundenplan)
|
|
||||||
{
|
|
||||||
return {
|
|
||||||
method: 'get',
|
|
||||||
url: '/api/frontend/v1/lvPlan/getLeEvents/' + encodeURIComponent(le_id) + "/" + encodeURIComponent(start_date) + "/" + encodeURIComponent(end_date) + "/" + encodeURIComponent(stundenplan),
|
|
||||||
};
|
|
||||||
},
|
|
||||||
exportCalendar(le_id, stundenplan)
|
|
||||||
{
|
|
||||||
return FHC_JS_DATA_STORAGE_OBJECT.app_root + 'content/statistik/termine.xls.php?lehreinheit_id=' + encodeURIComponent(le_id) + '&db_stpl_table='+encodeURIComponent(stundenplan);
|
|
||||||
},
|
|
||||||
getStudiensemester(){
|
|
||||||
return {
|
|
||||||
method: 'get',
|
|
||||||
url: '/api/frontend/v1/lv/setup/getStudiensemester/'
|
|
||||||
};
|
|
||||||
},
|
|
||||||
};
|
|
||||||
@@ -1,19 +0,0 @@
|
|||||||
export default {
|
|
||||||
getCourselist(lv_id, start_date, end_date, stundenplan)
|
|
||||||
{
|
|
||||||
return {
|
|
||||||
method: 'get',
|
|
||||||
url: '/api/frontend/v1/lvPlan/getLvEvents/' + encodeURIComponent(lv_id) + "/" + encodeURIComponent(start_date) + "/" + encodeURIComponent(end_date) + "/" + encodeURIComponent(stundenplan),
|
|
||||||
};
|
|
||||||
},
|
|
||||||
exportCalendar(lv_id, stundenplan)
|
|
||||||
{
|
|
||||||
return FHC_JS_DATA_STORAGE_OBJECT.app_root + 'content/statistik/termine.xls.php?lehrveranstaltung_id=' + encodeURIComponent(lv_id) + '&db_stpl_table='+encodeURIComponent(stundenplan);
|
|
||||||
},
|
|
||||||
getStudiensemester(){
|
|
||||||
return {
|
|
||||||
method: 'get',
|
|
||||||
url: '/api/frontend/v1/lv/setup/getStudiensemester/'
|
|
||||||
};
|
|
||||||
},
|
|
||||||
};
|
|
||||||
@@ -1,25 +0,0 @@
|
|||||||
import Grades from '../factory/stv/grades.js';
|
|
||||||
|
|
||||||
export default {
|
|
||||||
...Grades,
|
|
||||||
getCertificate(lv_id, studiensemester_kurzbz) {
|
|
||||||
let url = 'api/frontend/v1/lv/noten/getCertificate/' + encodeURIComponent(lv_id);
|
|
||||||
if (!!studiensemester_kurzbz) {
|
|
||||||
url = url + '/' + encodeURIComponent(studiensemester_kurzbz);
|
|
||||||
}
|
|
||||||
return {
|
|
||||||
method: 'get',
|
|
||||||
url: url
|
|
||||||
};
|
|
||||||
},
|
|
||||||
getTeacherProposal(lv_id, studiensemester_kurzbz) {
|
|
||||||
let url = 'api/frontend/v1/lv/noten/getTeacherProposal/' + encodeURIComponent(lv_id);
|
|
||||||
if (!!studiensemester_kurzbz) {
|
|
||||||
url = url + '/' + encodeURIComponent(studiensemester_kurzbz);
|
|
||||||
}
|
|
||||||
return {
|
|
||||||
method: 'get',
|
|
||||||
url: url
|
|
||||||
};
|
|
||||||
},
|
|
||||||
};
|
|
||||||
@@ -1,16 +1,9 @@
|
|||||||
export default {
|
export default {
|
||||||
getLETabs()
|
getTabs()
|
||||||
{
|
{
|
||||||
return {
|
return {
|
||||||
method: 'get',
|
method: 'get',
|
||||||
url: '/api/frontend/v1/lv/setup/getLETabs/'
|
url: '/api/frontend/v1/lv/setup/getTabs/'
|
||||||
};
|
|
||||||
},
|
|
||||||
getLVTabs()
|
|
||||||
{
|
|
||||||
return {
|
|
||||||
method: 'get',
|
|
||||||
url: '/api/frontend/v1/lv/setup/getLVTabs/'
|
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -20,7 +20,6 @@ import Studium from "../../components/Cis/Studium/Studium.js";
|
|||||||
|
|
||||||
import ApiRenderers from '../../api/factory/renderers.js';
|
import ApiRenderers from '../../api/factory/renderers.js';
|
||||||
import ApiRouteInfo from '../../api/factory/routeinfo.js';
|
import ApiRouteInfo from '../../api/factory/routeinfo.js';
|
||||||
import Benotungstool from "../../components/Cis/Benotungstool/Benotungstool.js";
|
|
||||||
import {capitalize} from "../../helpers/StringHelpers.js";
|
import {capitalize} from "../../helpers/StringHelpers.js";
|
||||||
|
|
||||||
const ciPath = FHC_JS_DATA_STORAGE_OBJECT.app_root.replace(/(https:|)(^|\/\/)(.*?\/)/g, '') + FHC_JS_DATA_STORAGE_OBJECT.ci_router;
|
const ciPath = FHC_JS_DATA_STORAGE_OBJECT.app_root.replace(/(https:|)(^|\/\/)(.*?\/)/g, '') + FHC_JS_DATA_STORAGE_OBJECT.ci_router;
|
||||||
@@ -76,12 +75,6 @@ const router = VueRouter.createRouter({
|
|||||||
component: Raumsuche,
|
component: Raumsuche,
|
||||||
props: true
|
props: true
|
||||||
},
|
},
|
||||||
{
|
|
||||||
path: `/Cis/Benotungstool/:lv_id/:sem_kurzbz`,
|
|
||||||
name: 'Benotungstool',
|
|
||||||
component: Benotungstool,
|
|
||||||
props: true
|
|
||||||
},
|
|
||||||
// Redirect old links to new format
|
// Redirect old links to new format
|
||||||
{
|
{
|
||||||
path: "/CisVue/Cms/getRoomInformation/:ort_kurzbz",
|
path: "/CisVue/Cms/getRoomInformation/:ort_kurzbz",
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@@ -1,71 +0,0 @@
|
|||||||
import ApiLehre from "../../api/factory/lehre.js";
|
|
||||||
|
|
||||||
const options = Vue.ref([]);
|
|
||||||
const params = Vue.ref({});
|
|
||||||
let appContext = null;
|
|
||||||
|
|
||||||
export function setupContext(globalProps) {
|
|
||||||
appContext = globalProps
|
|
||||||
}
|
|
||||||
|
|
||||||
// bind and watch api params via reference
|
|
||||||
export function bindParams(paramsRef) {
|
|
||||||
Vue.watch(
|
|
||||||
paramsRef,
|
|
||||||
(newVal) => {
|
|
||||||
params.value = { ...newVal };
|
|
||||||
fetchLehreinheiten(newVal.lv_id, newVal.sem_kurzbz);
|
|
||||||
},
|
|
||||||
{ immediate: true, deep: true }
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
async function fetchLehreinheiten(lv_id, sem_kurzbz) {
|
|
||||||
appContext.$api.call(ApiLehre.getLeForLv(lv_id, sem_kurzbz)).then(res => {
|
|
||||||
|
|
||||||
const data = []
|
|
||||||
// TODO: could be done on server in some shared function, copied from anw extension for now
|
|
||||||
res.data?.retval?.forEach(entry => {
|
|
||||||
|
|
||||||
const existing = data.find(e => e.lehreinheit_id === entry.lehreinheit_id)
|
|
||||||
if (existing) {
|
|
||||||
// supplement info
|
|
||||||
existing.infoString += ', '
|
|
||||||
if (entry.gruppe_kurzbz !== null && entry.direktinskription == false) {
|
|
||||||
existing.infoString += entry.gruppe_kurzbz
|
|
||||||
} else {
|
|
||||||
existing.infoString += entry.kurzbzlang + '-' + entry.semester
|
|
||||||
+ (entry.verband ? entry.verband : '')
|
|
||||||
+ (entry.gruppe ? entry.gruppe : '')
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
// entries are supposed to be fetched ordered by non null gruppe_kurzbz first
|
|
||||||
// so a new entry will always start with those groups, others are appended afterwards
|
|
||||||
entry.infoString = entry.kurzbz + ' - ' + entry.lehrform_kurzbz + ' - '
|
|
||||||
if (entry.gruppe_kurzbz !== null && entry.direktinskription == false) {
|
|
||||||
entry.infoString += entry.gruppe_kurzbz
|
|
||||||
} else {
|
|
||||||
entry.infoString += entry.kurzbzlang + '-' + entry.semester
|
|
||||||
+ (entry.verband ? entry.verband : '')
|
|
||||||
+ (entry.gruppe ? entry.gruppe : '')
|
|
||||||
}
|
|
||||||
|
|
||||||
data.push(entry)
|
|
||||||
}
|
|
||||||
})
|
|
||||||
|
|
||||||
options.value = [...data]
|
|
||||||
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
// export the module and relevant fields via reactive
|
|
||||||
const LehreinheitenModule = Vue.reactive({
|
|
||||||
options,
|
|
||||||
optionLabel: 'infoString',
|
|
||||||
placeholder: Vue.computed(()=>appContext?.$p.t('lehre/lehreinheit')),
|
|
||||||
setupContext,
|
|
||||||
bindParams
|
|
||||||
});
|
|
||||||
|
|
||||||
export default LehreinheitenModule;
|
|
||||||
@@ -2,7 +2,6 @@ import {CoreFilterCmpt} from "../../filter/Filter.js";
|
|||||||
import FormForm from '../../Form/Form.js';
|
import FormForm from '../../Form/Form.js';
|
||||||
import FormInput from '../../Form/Input.js';
|
import FormInput from '../../Form/Input.js';
|
||||||
import ApiGruppe from "../../../api/lehrveranstaltung/gruppe.js";
|
import ApiGruppe from "../../../api/lehrveranstaltung/gruppe.js";
|
||||||
import drop from '../../../directives/drop.js';
|
|
||||||
export default{
|
export default{
|
||||||
name: "LVGruppen",
|
name: "LVGruppen",
|
||||||
components: {
|
components: {
|
||||||
@@ -10,9 +9,6 @@ export default{
|
|||||||
FormForm,
|
FormForm,
|
||||||
FormInput
|
FormInput
|
||||||
},
|
},
|
||||||
directives: {
|
|
||||||
drop
|
|
||||||
},
|
|
||||||
props: {
|
props: {
|
||||||
lehreinheit_id: Number
|
lehreinheit_id: Number
|
||||||
},
|
},
|
||||||
@@ -191,48 +187,28 @@ export default{
|
|||||||
this.reload();
|
this.reload();
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
onDropVerband(node, gruppe) {
|
|
||||||
this.$api.call(ApiGruppe.getGruppe(gruppe))
|
|
||||||
.then(result => result.data)
|
|
||||||
.then(result => {
|
|
||||||
|
|
||||||
let newData = {
|
|
||||||
'gid': result,
|
|
||||||
'lehreinheit_id': this.lehreinheit_id,
|
|
||||||
'lehrverband': gruppe.lehrverband,
|
|
||||||
}
|
|
||||||
this.$api.call(ApiGruppe.add(newData))
|
|
||||||
.then(result => {
|
|
||||||
this.reload()
|
|
||||||
})
|
|
||||||
});
|
|
||||||
|
|
||||||
},
|
|
||||||
|
|
||||||
},
|
},
|
||||||
template: `
|
template: `
|
||||||
<div v-drop:link-strict.verband="(evt, gruppe) => onDropVerband(node, gruppe)">
|
<core-filter-cmpt
|
||||||
<core-filter-cmpt
|
ref="table"
|
||||||
ref="table"
|
:tabulator-options="tabulatorOptions"
|
||||||
:tabulator-options="tabulatorOptions"
|
:tabulator-events="tabulatorEvents"
|
||||||
:tabulator-events="tabulatorEvents"
|
table-only
|
||||||
table-only
|
:side-menu="false"
|
||||||
:side-menu="false"
|
:reload=true
|
||||||
:reload=true
|
>
|
||||||
>
|
<template #search> <!--TODO (david) Slot prüfen -->
|
||||||
<template #search> <!--TODO (david) Slot prüfen -->
|
<form-input
|
||||||
<form-input
|
type="autocomplete"
|
||||||
type="autocomplete"
|
:suggestions="filteredGroups"
|
||||||
:suggestions="filteredGroups"
|
:placeholder="$p.t('lehre', 'addGroup')"
|
||||||
:placeholder="$p.t('lehre', 'addGroup')"
|
v-model="selectedGroup"
|
||||||
v-model="selectedGroup"
|
field="label"
|
||||||
field="label"
|
@item-select="addGroup"
|
||||||
@item-select="addGroup"
|
@complete="searchGroup"
|
||||||
@complete="searchGroup"
|
></form-input>
|
||||||
></form-input>
|
</template>
|
||||||
</template>
|
|
||||||
|
|
||||||
</core-filter-cmpt>
|
</core-filter-cmpt>
|
||||||
</div>
|
|
||||||
`
|
`
|
||||||
};
|
};
|
||||||
@@ -8,10 +8,9 @@ import LvTabs from "./Setup/Tabs.js";
|
|||||||
|
|
||||||
import ApiDetails from "../../api/lehrveranstaltung/details.js";
|
import ApiDetails from "../../api/lehrveranstaltung/details.js";
|
||||||
import ApiLektor from "../../api/lehrveranstaltung/lektor.js";
|
import ApiLektor from "../../api/lehrveranstaltung/lektor.js";
|
||||||
|
import ApiGruppe from "../../api/lehrveranstaltung/gruppe.js";
|
||||||
import ApiStudiengangTree from "../../api/lehrveranstaltung/studiengangtree.js";
|
import ApiStudiengangTree from "../../api/lehrveranstaltung/studiengangtree.js";
|
||||||
import ApiSearchbar from "../../api/factory/searchbar.js";
|
import ApiSearchbar from "../../api/factory/searchbar.js";
|
||||||
import AppConfig from "../AppConfig.js";
|
|
||||||
import ApiLvConfig from "../../api/lehrveranstaltung/config.js";
|
|
||||||
|
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
@@ -24,7 +23,6 @@ export default {
|
|||||||
StvStudiensemester,
|
StvStudiensemester,
|
||||||
LvTable,
|
LvTable,
|
||||||
LvTabs,
|
LvTabs,
|
||||||
AppConfig
|
|
||||||
},
|
},
|
||||||
props: {
|
props: {
|
||||||
defaultSemester: String,
|
defaultSemester: String,
|
||||||
@@ -34,9 +32,7 @@ export default {
|
|||||||
stg: { type: String, required: false },
|
stg: { type: String, required: false },
|
||||||
semester: { type: [Number, String], required: false, default: null },
|
semester: { type: [Number, String], required: false, default: null },
|
||||||
studiensemester_kurzbz: { type: String, required: false, default: null },
|
studiensemester_kurzbz: { type: String, required: false, default: null },
|
||||||
emp: { type: String, required: false, default: null },
|
emp: { type: String, required: false, default: null }
|
||||||
avatarUrl: String,
|
|
||||||
logoutUrl: String,
|
|
||||||
},
|
},
|
||||||
|
|
||||||
provide() {
|
provide() {
|
||||||
@@ -48,6 +44,7 @@ export default {
|
|||||||
lehreinheitAnmerkungDefault: (this.config.lehreinheitAnmerkungDefault || '').replace(/\\n/g, '\n'),
|
lehreinheitAnmerkungDefault: (this.config.lehreinheitAnmerkungDefault || '').replace(/\\n/g, '\n'),
|
||||||
lehreinheitRaumtypDefault: this.config.lehreinheitRaumtypDefault,
|
lehreinheitRaumtypDefault: this.config.lehreinheitRaumtypDefault,
|
||||||
lehreinheitRaumtypAlternativeDefault: this.config.lehreinheitRaumtypAlternativeDefault,
|
lehreinheitRaumtypAlternativeDefault: this.config.lehreinheitRaumtypAlternativeDefault,
|
||||||
|
|
||||||
permissionLehrveranstaltung: this.permissions['lehre/lehrveranstaltung'],
|
permissionLehrveranstaltung: this.permissions['lehre/lehrveranstaltung'],
|
||||||
permissionGruppenEntfernen: this.permissions['lv-plan/gruppenentfernen'],
|
permissionGruppenEntfernen: this.permissions['lv-plan/gruppenentfernen'],
|
||||||
permissionLektorEntfernen: this.permissions['lv-plan/lektorentfernen'],
|
permissionLektorEntfernen: this.permissions['lv-plan/lektorentfernen'],
|
||||||
@@ -75,8 +72,6 @@ export default {
|
|||||||
},
|
},
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
appconfig:{},
|
|
||||||
configEndpoints: ApiLvConfig,
|
|
||||||
selected: [],
|
selected: [],
|
||||||
studiengang: "",
|
studiengang: "",
|
||||||
filter: {},
|
filter: {},
|
||||||
@@ -274,51 +269,6 @@ export default {
|
|||||||
<span class="fa-solid fa-table-list"></span>
|
<span class="fa-solid fa-table-list"></span>
|
||||||
</button>
|
</button>
|
||||||
<core-searchbar :searchoptions="searchbaroptions" :searchfunction=searchfunction class="searchbar w-100"></core-searchbar>
|
<core-searchbar :searchoptions="searchbaroptions" :searchfunction=searchfunction class="searchbar w-100"></core-searchbar>
|
||||||
<div id="nav-user" class="dropdown">
|
|
||||||
<button
|
|
||||||
id="nav-user-btn"
|
|
||||||
class="btn btn-link rounded-0 py-0"
|
|
||||||
type="button"
|
|
||||||
data-bs-toggle="dropdown"
|
|
||||||
data-bs-target="#nav-user-menu"
|
|
||||||
aria-expanded="false"
|
|
||||||
aria-controls="nav-user-menu"
|
|
||||||
>
|
|
||||||
<img
|
|
||||||
:src="avatarUrl"
|
|
||||||
:alt="$p.t('profilUpdate/profilBild')"
|
|
||||||
class="bg-light avatar rounded-circle border border-light"
|
|
||||||
/>
|
|
||||||
</button>
|
|
||||||
<ul
|
|
||||||
ref="navUserDropdown"
|
|
||||||
class="dropdown-menu dropdown-menu-dark dropdown-menu-end rounded-0 text-center m-0"
|
|
||||||
aria-labelledby="nav-user-btn"
|
|
||||||
>
|
|
||||||
<li>
|
|
||||||
<button
|
|
||||||
type="button"
|
|
||||||
class="dropdown-item"
|
|
||||||
data-bs-toggle="modal"
|
|
||||||
data-bs-target="#configModal"
|
|
||||||
>
|
|
||||||
{{ $p.t('ui/settings') }}
|
|
||||||
</button>
|
|
||||||
</li>
|
|
||||||
<li><hr class="dropdown-divider m-0"/></li>
|
|
||||||
<li>
|
|
||||||
<nav-language
|
|
||||||
item-class="dropdown-item border-left-dark"
|
|
||||||
/>
|
|
||||||
</li>
|
|
||||||
<li><hr class="dropdown-divider m-0"/></li>
|
|
||||||
<li>
|
|
||||||
<a class="dropdown-item" :href="logoutUrl">
|
|
||||||
{{ $p.t('ui/logout') }}
|
|
||||||
</a>
|
|
||||||
</li>
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
</header>
|
</header>
|
||||||
<div class="container-fluid overflow-hidden">
|
<div class="container-fluid overflow-hidden">
|
||||||
<div class="row h-100">
|
<div class="row h-100">
|
||||||
@@ -335,7 +285,7 @@ export default {
|
|||||||
<div class="offcanvas-header justify-content-end px-1 d-md-none">
|
<div class="offcanvas-header justify-content-end px-1 d-md-none">
|
||||||
<button type="button" class="btn-close text-reset" data-bs-dismiss="offcanvas" :aria-label="$p.t('ui/schliessen')"></button>
|
<button type="button" class="btn-close text-reset" data-bs-dismiss="offcanvas" :aria-label="$p.t('ui/schliessen')"></button>
|
||||||
</div>
|
</div>
|
||||||
<stv-verband :preselectedKey="selectedStudiengang" :dragEnabled=true :endpoint="endpoint" @select-verband="onSelectVerband" class="col" style="height:0%"></stv-verband>
|
<stv-verband :preselectedKey="selectedStudiengang" :endpoint="endpoint" @select-verband="onSelectVerband" class="col" style="height:0%"></stv-verband>
|
||||||
<stv-studiensemester v-model:studiensemester-kurzbz="selectedStudiensemester" @update:studiensemester-kurzbz="studiensemesterChanged"></stv-studiensemester>
|
<stv-studiensemester v-model:studiensemester-kurzbz="selectedStudiensemester" @update:studiensemester-kurzbz="studiensemesterChanged"></stv-studiensemester>
|
||||||
</nav>
|
</nav>
|
||||||
|
|
||||||
@@ -377,6 +327,5 @@ export default {
|
|||||||
</main>
|
</main>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<app-config ref="config" v-model="appconfig" :endpoints="configEndpoints"></app-config>
|
|
||||||
</div>`
|
</div>`
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -140,7 +140,7 @@ export default{
|
|||||||
{
|
{
|
||||||
this.$emit('changedLektor', this.changed.mitarbeiter_uid);
|
this.$emit('changedLektor', this.changed.mitarbeiter_uid);
|
||||||
}
|
}
|
||||||
else if (this.changed.semesterstunden || this.changed.stundensatz)
|
if (this.changed.semesterstunden || this.changed.stundensatz)
|
||||||
{
|
{
|
||||||
this.$emit('changedCosts');
|
this.$emit('changedCosts');
|
||||||
}
|
}
|
||||||
@@ -183,6 +183,9 @@ export default{
|
|||||||
},
|
},
|
||||||
|
|
||||||
},
|
},
|
||||||
|
created() {
|
||||||
|
this.getLektorData()
|
||||||
|
},
|
||||||
template: `
|
template: `
|
||||||
<core-form ref="form" @submit.prevent="updateDaten">
|
<core-form ref="form" @submit.prevent="updateDaten">
|
||||||
<div class="position-sticky top-0 z-1">
|
<div class="position-sticky top-0 z-1">
|
||||||
|
|||||||
@@ -140,8 +140,7 @@ export default {
|
|||||||
headerFilterFunc: extendedHeaderFilter,
|
headerFilterFunc: extendedHeaderFilter,
|
||||||
},
|
},
|
||||||
layout: 'fitDataStretch',
|
layout: 'fitDataStretch',
|
||||||
height: '100%',
|
persistenceID: 'lehrveranstaltungen_2025_07_31_v1',
|
||||||
persistenceID: 'lehrveranstaltungen_2025_12_02_v1',
|
|
||||||
selectableRowsRangeMode: 'click',
|
selectableRowsRangeMode: 'click',
|
||||||
selectableRows: true,
|
selectableRows: true,
|
||||||
rowContextMenu: (component, e) => {
|
rowContextMenu: (component, e) => {
|
||||||
@@ -305,13 +304,14 @@ export default {
|
|||||||
|
|
||||||
if (data[0]?.lehreinheit_id !== undefined && this.selectedColumnValues.length === 1)
|
if (data[0]?.lehreinheit_id !== undefined && this.selectedColumnValues.length === 1)
|
||||||
{
|
{
|
||||||
|
this.$emit('update:selected', [data[0]]);
|
||||||
this.lv_info = false
|
this.lv_info = false
|
||||||
}
|
}
|
||||||
else if (data[0]?.lehrveranstaltung_id)
|
else if (data[0]?.lehrveranstaltung_id)
|
||||||
{
|
{
|
||||||
|
this.$emit('update:selected', {});
|
||||||
this.getLVInfos(data[0]);
|
this.getLVInfos(data[0]);
|
||||||
}
|
}
|
||||||
this.$emit('update:selected', [data[0]]);
|
|
||||||
},
|
},
|
||||||
getLVInfos(data)
|
getLVInfos(data)
|
||||||
{
|
{
|
||||||
@@ -518,50 +518,47 @@ export default {
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
template: `
|
template: `
|
||||||
<div class="lv-list h-100 pt-3">
|
<core-filter-cmpt
|
||||||
<div class="tabulator-container d-flex flex-column h-100">
|
ref="table"
|
||||||
<core-filter-cmpt
|
:tabulator-options="tabulatorOptions"
|
||||||
ref="table"
|
:tabulator-events="tabulatorEvents"
|
||||||
:tabulator-options="tabulatorOptions"
|
table-only
|
||||||
:tabulator-events="tabulatorEvents"
|
:side-menu="false"
|
||||||
table-only
|
:reload=true
|
||||||
:side-menu="false"
|
new-btn-label="LV-Teil hinzufügen"
|
||||||
:reload=true
|
new-btn-show
|
||||||
new-btn-label="LV-Teil hinzufügen"
|
:new-btn-disabled="!lv_info"
|
||||||
new-btn-show
|
@click:new="showLehreinheitModal">
|
||||||
:new-btn-disabled="!lv_info"
|
|
||||||
@click:new="showLehreinheitModal">
|
|
||||||
|
|
||||||
<template #actions>
|
<template #actions>
|
||||||
<button @click="expandTree" class="btn btn-outline-secondary" type="button" :title="$p.t('lehre', 'aufklappen')"><i class="fa-solid fa-maximize"></i></button>
|
<button @click="expandTree" class="btn btn-outline-secondary" type="button" :title="$p.t('lehre', 'aufklappen')"><i class="fa-solid fa-maximize"></i></button>
|
||||||
<button @click="resetTree" class="btn btn-outline-secondary" type="button" :title="$p.t('lehre', 'zuklappen')"><i id="togglegroup" class="fa-solid fa-minimize"></i></button>
|
<button @click="resetTree" class="btn btn-outline-secondary" type="button" :title="$p.t('lehre', 'zuklappen')"><i id="togglegroup" class="fa-solid fa-minimize"></i></button>
|
||||||
<core-tag ref="tagComponent"
|
<core-tag ref="tagComponent"
|
||||||
:endpoint="tagEndpoint"
|
:endpoint="tagEndpoint"
|
||||||
:values="selectedColumnValues"
|
:values="selectedColumnValues"
|
||||||
@added="addedTag"
|
@added="addedTag"
|
||||||
@deleted="deletedTag"
|
@deleted="deletedTag"
|
||||||
@updated="updatedTag"
|
@updated="updatedTag"
|
||||||
zuordnung_typ="lehreinheit_id"
|
zuordnung_typ="lehreinheit_id"
|
||||||
></core-tag>
|
></core-tag>
|
||||||
</template>
|
</template>
|
||||||
<template #search>
|
<template #search>
|
||||||
<slot name="filterzuruecksetzen"></slot>
|
<slot name="filterzuruecksetzen"></slot>
|
||||||
</template>
|
</template>
|
||||||
</core-filter-cmpt>
|
</core-filter-cmpt>
|
||||||
</div>
|
<bs-modal ref="lehreinheitModal" dialogClass="modal-xxl">
|
||||||
<bs-modal ref="lehreinheitModal" dialogClass="modal-xxl">
|
<template #title>
|
||||||
<template #title>
|
<p class="fw-bold mt-3">{{$p.t('lehre', 'newlehreinheit')}}</p>
|
||||||
<p class="fw-bold mt-3">{{$p.t('lehre', 'newlehreinheit')}}</p>
|
</template>
|
||||||
</template>
|
|
||||||
|
|
||||||
<template v-if="lv_info">
|
<template v-if="lv_info">
|
||||||
<details-form :data="lv_info"/>
|
<details-form :data="lv_info"/>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
|
<template #footer>
|
||||||
|
<button type="button" class="btn btn-primary" @click="addNewLehreinheit">{{$p.t('ui', 'speichern')}}</button>
|
||||||
|
</template>
|
||||||
|
</bs-modal>
|
||||||
|
|
||||||
<template #footer>
|
|
||||||
<button type="button" class="btn btn-primary" @click="addNewLehreinheit">{{$p.t('ui', 'speichern')}}</button>
|
|
||||||
</template>
|
|
||||||
</bs-modal>
|
|
||||||
</div>
|
|
||||||
`
|
`
|
||||||
};
|
};
|
||||||
@@ -8,7 +8,6 @@ export default {
|
|||||||
},
|
},
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
configLETabs: {},
|
|
||||||
configLVTabs: {},
|
configLVTabs: {},
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
@@ -20,7 +19,7 @@ export default {
|
|||||||
if (!this.lv || !this.lv.length)
|
if (!this.lv || !this.lv.length)
|
||||||
return {};
|
return {};
|
||||||
|
|
||||||
return this.configLETabs;
|
return this.configLVTabs;
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
@@ -32,42 +31,26 @@ export default {
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
created() {
|
created() {
|
||||||
this.$api.call(Setup.getLETabs())
|
this.$api.call(Setup.getTabs())
|
||||||
.then(result => {
|
|
||||||
this.configLETabs = result.data;
|
|
||||||
})
|
|
||||||
.catch(this.$fhcAlert.handleSystemError);
|
|
||||||
|
|
||||||
this.$api.call(Setup.getLVTabs())
|
|
||||||
.then(result => {
|
.then(result => {
|
||||||
this.configLVTabs = result.data;
|
this.configLVTabs = result.data;
|
||||||
})
|
})
|
||||||
.catch(this.$fhcAlert.handleSystemError);
|
.catch(this.$fhcAlert.handleSystemError);
|
||||||
|
|
||||||
},
|
},
|
||||||
template: `
|
template: `
|
||||||
<div class="stv-details h-100 pb-3 d-flex flex-column">
|
<div class="stv-details h-100 pb-3 d-flex flex-column">
|
||||||
<div v-if="!lv?.length" class="justify-content-center d-flex h-100 align-items-center">
|
<div v-if="!lv?.length" class="justify-content-center d-flex h-100 align-items-center">
|
||||||
Bitte eine Lehreinheit auswählen!
|
Bitte eine Lehreinheit auswählen!
|
||||||
</div>
|
</div>
|
||||||
<div v-else-if="configLETabs && configLVTabs" class="d-flex flex-column h-100 pb-3">
|
<div v-else-if="configLVTabs" class="d-flex flex-column h-100 pb-3">
|
||||||
<fhc-tabs
|
<fhc-tabs
|
||||||
v-if="lv.length === 1 && lv[0]?.lehreinheit_id"
|
v-if="lv.length === 1"
|
||||||
ref="tabs"
|
|
||||||
:useprimevue="true"
|
|
||||||
:modelValue="lv[0]"
|
|
||||||
:config="configLETabs"
|
|
||||||
:default="$route.params.tab"
|
|
||||||
style="flex: 1 1 0%; height: 0%"
|
|
||||||
@changed="reload"
|
|
||||||
/>
|
|
||||||
<fhc-tabs
|
|
||||||
v-else-if="lv.length === 1"
|
|
||||||
ref="tabs"
|
ref="tabs"
|
||||||
:useprimevue="true"
|
:useprimevue="true"
|
||||||
:modelValue="lv[0]"
|
:modelValue="lv[0]"
|
||||||
:config="configLVTabs"
|
:config="configLVTabs"
|
||||||
:default="$route.params.tab"
|
:default="$route.params.tab"
|
||||||
style="flex: 1 1 0%; height: 0%"
|
|
||||||
@changed="reload"
|
@changed="reload"
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -1,21 +0,0 @@
|
|||||||
import TableLvList from "../../Stv/Studentenverwaltung/Details/Lehrveranstaltungstermine/ListLehrveranstaltungstermine.js";
|
|
||||||
import ApiLVTermine from "../../../api/lehrveranstaltung/lvtermine.js";
|
|
||||||
|
|
||||||
export default {
|
|
||||||
name: "LVTabTermine",
|
|
||||||
components: {
|
|
||||||
TableLvList
|
|
||||||
},
|
|
||||||
props: {
|
|
||||||
modelValue: Object,
|
|
||||||
},
|
|
||||||
data() {
|
|
||||||
return {
|
|
||||||
endpoint: ApiLVTermine
|
|
||||||
};
|
|
||||||
},
|
|
||||||
template: `
|
|
||||||
<div class="lv-details-course-list h-100 d-flex flex-column">
|
|
||||||
<table-lv-list ref="tbl_course_list" :id="modelValue.lehrveranstaltung_id" :endpoint="endpoint"></table-lv-list>
|
|
||||||
</div>`
|
|
||||||
};
|
|
||||||
@@ -1,116 +0,0 @@
|
|||||||
import NotenZeugnis from "../../Stv/Studentenverwaltung/Details/Noten/Zeugnis.js";
|
|
||||||
import NotenTeacher from "../../Stv/Studentenverwaltung/Details/Noten/Teacher.js";
|
|
||||||
import NotenRepeater from "../../Stv/Studentenverwaltung/Details/Noten/Repeater.js";
|
|
||||||
import ApiLVNoten from "../../../api/lehrveranstaltung/noten.js";
|
|
||||||
import { highlightGesamtnote } from "../../../helpers/DocumentHelper.js";
|
|
||||||
const LOCAL_STORAGE_ID = 'lv_details_noten_2025_12_02_stdsem_all';
|
|
||||||
|
|
||||||
export default {
|
|
||||||
name: "LVTabNoten",
|
|
||||||
components: {
|
|
||||||
NotenZeugnis,
|
|
||||||
NotenTeacher,
|
|
||||||
NotenRepeater
|
|
||||||
},
|
|
||||||
provide() {
|
|
||||||
return {
|
|
||||||
config: this.config
|
|
||||||
}
|
|
||||||
},
|
|
||||||
props: {
|
|
||||||
modelValue: Object,
|
|
||||||
config: Object
|
|
||||||
},
|
|
||||||
data() {
|
|
||||||
return {
|
|
||||||
stdsem: '',
|
|
||||||
endpoint: ApiLVNoten,
|
|
||||||
tabulatorOptions: {
|
|
||||||
visibleColumns: {
|
|
||||||
vorname: true,
|
|
||||||
nachname: true,
|
|
||||||
lehrveranstaltung_bezeichnung: false
|
|
||||||
},
|
|
||||||
headerFilter: {
|
|
||||||
vorname: true,
|
|
||||||
nachname: true,
|
|
||||||
lehrveranstaltung_bezeichnung: false
|
|
||||||
},
|
|
||||||
persistenceZeugnisID: 'lv-details-noten-zeugnis-2025120401',
|
|
||||||
persistenceTeacherID: 'lv-details-noten-teacher-2025120401',
|
|
||||||
},
|
|
||||||
zeugnisLoaded: false,
|
|
||||||
teacherLoaded: false,
|
|
||||||
};
|
|
||||||
},
|
|
||||||
methods: {
|
|
||||||
reload() {
|
|
||||||
this.zeugnisLoaded = false;
|
|
||||||
this.teacherLoaded = false;
|
|
||||||
|
|
||||||
this.$refs.zeugnis.$refs.table.reloadTable();
|
|
||||||
this.$refs.teacher.$refs.table.reloadTable();
|
|
||||||
},
|
|
||||||
saveStdsem(event) {
|
|
||||||
window.localStorage.setItem(LOCAL_STORAGE_ID, event.target.value);
|
|
||||||
},
|
|
||||||
onZeugnisLoaded() {
|
|
||||||
this.zeugnisLoaded = true;
|
|
||||||
this.checkHighlight();
|
|
||||||
},
|
|
||||||
onTeacherLoaded() {
|
|
||||||
this.teacherLoaded = true;
|
|
||||||
this.checkHighlight();
|
|
||||||
},
|
|
||||||
checkHighlight()
|
|
||||||
{
|
|
||||||
if (!this.zeugnisLoaded || !this.teacherLoaded)
|
|
||||||
return;
|
|
||||||
|
|
||||||
if (!this.$refs.zeugnis || !this.$refs.teacher)
|
|
||||||
return;
|
|
||||||
|
|
||||||
let zeugnisTable = this.$refs.zeugnis.$refs.table.tabulator;
|
|
||||||
let teacherTable = this.$refs.teacher.$refs.table.tabulator;
|
|
||||||
|
|
||||||
if (!zeugnisTable || !teacherTable)
|
|
||||||
return;
|
|
||||||
|
|
||||||
highlightGesamtnote(zeugnisTable, teacherTable);
|
|
||||||
}
|
|
||||||
},
|
|
||||||
created() {
|
|
||||||
const savedPath = window.localStorage.getItem(LOCAL_STORAGE_ID);
|
|
||||||
this.stdsem = savedPath || '';
|
|
||||||
},
|
|
||||||
template: `
|
|
||||||
<div class="stv-details-noten d-flex flex-column overflow-hidden">
|
|
||||||
<div class="mb-3">
|
|
||||||
<select class="form-select" v-model="stdsem" @input="saveStdsem" v-if="config?.semesterSelect ?? true">
|
|
||||||
<option value="">{{ $p.t('ui/current_semester') }}</option>
|
|
||||||
<option value="true">{{ $p.t('ui/all_semester') }}</option>
|
|
||||||
</select>
|
|
||||||
</div>
|
|
||||||
<div class="row">
|
|
||||||
<div class="col-8">
|
|
||||||
<noten-zeugnis
|
|
||||||
ref="zeugnis"
|
|
||||||
:id="modelValue.lehrveranstaltung_id"
|
|
||||||
:all-semester="!!stdsem"
|
|
||||||
:endpoint="endpoint"
|
|
||||||
:optionalTabulatorOptions="tabulatorOptions"
|
|
||||||
@loaded="onZeugnisLoaded"/>
|
|
||||||
</div>
|
|
||||||
<div class="col-4">
|
|
||||||
<noten-teacher
|
|
||||||
ref="teacher"
|
|
||||||
:id="modelValue.lehrveranstaltung_id"
|
|
||||||
:all-semester="!!stdsem"
|
|
||||||
:endpoint="endpoint"
|
|
||||||
@copied="reload"
|
|
||||||
:optionalTabulatorOptions="tabulatorOptions"
|
|
||||||
@loaded="onTeacherLoaded"/>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>`
|
|
||||||
};
|
|
||||||
@@ -1,21 +0,0 @@
|
|||||||
import TableLvList from "../../Stv/Studentenverwaltung/Details/Lehrveranstaltungstermine/ListLehrveranstaltungstermine.js";
|
|
||||||
import ApiLETermine from "../../../api/lehrveranstaltung/letermine.js";
|
|
||||||
|
|
||||||
export default {
|
|
||||||
name: "LETabTermine",
|
|
||||||
components: {
|
|
||||||
TableLvList
|
|
||||||
},
|
|
||||||
props: {
|
|
||||||
modelValue: Object,
|
|
||||||
},
|
|
||||||
data() {
|
|
||||||
return {
|
|
||||||
endpoint: ApiLETermine
|
|
||||||
};
|
|
||||||
},
|
|
||||||
template: `
|
|
||||||
<div class="le-details-course-list h-100 d-flex flex-column">
|
|
||||||
<table-lv-list ref="tbl_course_list" :id="modelValue.lehreinheit_id" :endpoint="endpoint"></table-lv-list>
|
|
||||||
</div>`
|
|
||||||
};
|
|
||||||
@@ -63,7 +63,7 @@ export default {
|
|||||||
const vm = this;
|
const vm = this;
|
||||||
tinymce.init({
|
tinymce.init({
|
||||||
target: this.$refs.editor.$refs.input, //Important: not selector: to enable multiple import of component
|
target: this.$refs.editor.$refs.input, //Important: not selector: to enable multiple import of component
|
||||||
//height: 800,
|
min_height: 300,
|
||||||
//plugins: ['lists'],
|
//plugins: ['lists'],
|
||||||
toolbar: 'styleselect | bold italic underline | alignleft aligncenter alignright alignjustify | link',
|
toolbar: 'styleselect | bold italic underline | alignleft aligncenter alignright alignjustify | link',
|
||||||
plugins: 'link',
|
plugins: 'link',
|
||||||
@@ -133,6 +133,7 @@ export default {
|
|||||||
return this.$api
|
return this.$api
|
||||||
.call(ApiMessages.getDataVorlage(vorlage_kurzbz))
|
.call(ApiMessages.getDataVorlage(vorlage_kurzbz))
|
||||||
.then(response => {
|
.then(response => {
|
||||||
|
this.editor.setContent(response.data.text);
|
||||||
this.formData.body = response.data.text;
|
this.formData.body = response.data.text;
|
||||||
this.formData.subject = response.data.subject;
|
this.formData.subject = response.data.subject;
|
||||||
}).catch(this.$fhcAlert.handleSystemError);
|
}).catch(this.$fhcAlert.handleSystemError);
|
||||||
@@ -203,24 +204,6 @@ export default {
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
watch: {
|
watch: {
|
||||||
'formData.body': {
|
|
||||||
handler(newVal) {
|
|
||||||
const tinymcsVal = this.editor.getContent();
|
|
||||||
|
|
||||||
if (newVal && tinymcsVal != newVal) {
|
|
||||||
//Inhalt des Editors aktualisieren
|
|
||||||
this.editor.setContent(newVal);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
'formData.vorlage_kurzbz': {
|
|
||||||
handler(newVal){
|
|
||||||
if (newVal && newVal != null) {
|
|
||||||
this.formData.subject = newVal;
|
|
||||||
return this.getDataVorlage(newVal);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
messageId: {
|
messageId: {
|
||||||
immediate: true,
|
immediate: true,
|
||||||
handler: async function (newMessageId) {
|
handler: async function (newMessageId) {
|
||||||
@@ -231,6 +214,7 @@ export default {
|
|||||||
this.replyData = result.data;
|
this.replyData = result.data;
|
||||||
|
|
||||||
if (this.replyData.length > 0) {
|
if (this.replyData.length > 0) {
|
||||||
|
this.editor.setContent(this.replyData[0].replyBody);
|
||||||
this.formData.subject = this.replyData[0].replySubject;
|
this.formData.subject = this.replyData[0].replySubject;
|
||||||
this.formData.body = this.replyData[0].replyBody;
|
this.formData.body = this.replyData[0].replyBody;
|
||||||
this.formData.relationmessage_id = newMessageId;
|
this.formData.relationmessage_id = newMessageId;
|
||||||
@@ -290,19 +274,6 @@ export default {
|
|||||||
|
|
||||||
})
|
})
|
||||||
.catch(this.$fhcAlert.handleSystemError);
|
.catch(this.$fhcAlert.handleSystemError);
|
||||||
|
|
||||||
//case of reply
|
|
||||||
if(this.messageId) {
|
|
||||||
this.$api
|
|
||||||
.call(ApiMessages.getReplyData(this.messageId))
|
|
||||||
.then(result => {
|
|
||||||
this.replyData = result.data;
|
|
||||||
this.formData.subject = this.replyData[0].replySubject;
|
|
||||||
this.formData.body = this.replyData[0].replyBody;
|
|
||||||
this.formData.relationmessage_id = this.messageId;
|
|
||||||
})
|
|
||||||
.catch(this.$fhcAlert.handleSystemError);
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
async mounted() {
|
async mounted() {
|
||||||
this.initTinyMCE();
|
this.initTinyMCE();
|
||||||
@@ -342,7 +313,7 @@ export default {
|
|||||||
|
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-sm-8">
|
<div class="col-sm-8">
|
||||||
<form-form class="row g-3 mt-2 h-100" ref="formMessage">
|
<form-form class="row g-3 mt-2 align-content-start" ref="formMessage">
|
||||||
|
|
||||||
<div class="row mb-3">
|
<div class="row mb-3">
|
||||||
|
|
||||||
@@ -367,7 +338,7 @@ export default {
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!--Tiny MCE-->
|
<!--Tiny MCE-->
|
||||||
<div class="row mb-3 h-100 tiny-90">
|
<div class="row mb-3 tiny-90">
|
||||||
<form-input
|
<form-input
|
||||||
ref="editor"
|
ref="editor"
|
||||||
:label="$p.t('global','nachricht') + ' *'"
|
:label="$p.t('global','nachricht') + ' *'"
|
||||||
|
|||||||
@@ -62,9 +62,18 @@ export default {
|
|||||||
const vm = this;
|
const vm = this;
|
||||||
tinymce.init({
|
tinymce.init({
|
||||||
target: this.$refs.editor.$refs.input, //Important: not selector: to enable multiple import of component
|
target: this.$refs.editor.$refs.input, //Important: not selector: to enable multiple import of component
|
||||||
//height: 800,
|
min_height: 300,
|
||||||
//plugins: ['lists'],
|
//plugins: ['lists'],
|
||||||
toolbar: 'styleselect | bold italic underline | alignleft aligncenter alignright alignjustify',
|
toolbar: 'styleselect | bold italic underline | alignleft aligncenter alignright alignjustify | link',
|
||||||
|
plugins: 'link',
|
||||||
|
link_context_toolbar: true,
|
||||||
|
automatic_uploads: true,
|
||||||
|
default_link_target: "_blank",
|
||||||
|
link_title: true,
|
||||||
|
target_list: [
|
||||||
|
{ title: 'New tab', value: '_blank' },
|
||||||
|
{ title: 'Same tab', value: '_self' }
|
||||||
|
],
|
||||||
style_formats: [
|
style_formats: [
|
||||||
{title: 'Blocks', block: 'div'},
|
{title: 'Blocks', block: 'div'},
|
||||||
{title: 'Paragraph', block: 'p'},
|
{title: 'Paragraph', block: 'p'},
|
||||||
@@ -98,7 +107,8 @@ export default {
|
|||||||
return this.$api
|
return this.$api
|
||||||
.call(ApiMessages.sendMessage(this.typeId, data))
|
.call(ApiMessages.sendMessage(this.typeId, data))
|
||||||
.then(response => {
|
.then(response => {
|
||||||
this.$fhcAlert.alertSuccess(this.$p.t('ui', 'successSent'));
|
if(this.openMode == "inSamePage")
|
||||||
|
this.$fhcAlert.alertSuccess(this.$p.t('ui', 'successSent'));
|
||||||
this.hideTemplate();
|
this.hideTemplate();
|
||||||
this.resetForm();
|
this.resetForm();
|
||||||
this.messageSent = true;
|
this.messageSent = true;
|
||||||
@@ -114,19 +124,17 @@ export default {
|
|||||||
return this.$api
|
return this.$api
|
||||||
.call(ApiMessages.getDataVorlage(vorlage_kurzbz))
|
.call(ApiMessages.getDataVorlage(vorlage_kurzbz))
|
||||||
.then(response => {
|
.then(response => {
|
||||||
|
this.editor.setContent(response.data.text);
|
||||||
this.formData.body = response.data.text;
|
this.formData.body = response.data.text;
|
||||||
this.formData.subject = response.data.subject;
|
this.formData.subject = response.data.subject;
|
||||||
}).catch(this.$fhcAlert.handleSystemError);
|
}).catch(this.$fhcAlert.handleSystemError);
|
||||||
},
|
},
|
||||||
getPreviewText(){
|
getPreviewText(){
|
||||||
console.log("subj" + this.formData.subject);
|
|
||||||
const data = new FormData();
|
const data = new FormData();
|
||||||
|
|
||||||
data.append('data', JSON.stringify(this.formData.body));
|
data.append('data', JSON.stringify(this.formData.body));
|
||||||
data.append('ids', JSON.stringify(this.id));
|
data.append('ids', JSON.stringify(this.id));
|
||||||
|
|
||||||
console.log("subj" + this.formData.subject);
|
|
||||||
|
|
||||||
return this.$api
|
return this.$api
|
||||||
.call(ApiMessages.getPreviewText(
|
.call(ApiMessages.getPreviewText(
|
||||||
this.typeId, data))
|
this.typeId, data))
|
||||||
@@ -195,6 +203,7 @@ export default {
|
|||||||
.call(ApiMessages.getReplyData(messageId))
|
.call(ApiMessages.getReplyData(messageId))
|
||||||
.then(result => {
|
.then(result => {
|
||||||
this.replyData = result.data;
|
this.replyData = result.data;
|
||||||
|
this.editor.setContent(this.replyData[0].replyBody);
|
||||||
this.formData.subject = this.replyData[0].replySubject;
|
this.formData.subject = this.replyData[0].replySubject;
|
||||||
this.formData.body = this.replyData[0].replyBody;
|
this.formData.body = this.replyData[0].replyBody;
|
||||||
this.formData.relationmessage_id = messageId;
|
this.formData.relationmessage_id = messageId;
|
||||||
@@ -202,27 +211,6 @@ export default {
|
|||||||
.catch(this.$fhcAlert.handleSystemError);
|
.catch(this.$fhcAlert.handleSystemError);
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
watch: {
|
|
||||||
'formData.body': {
|
|
||||||
handler(newVal) {
|
|
||||||
const tinymcsVal = this.editor.getContent();
|
|
||||||
|
|
||||||
if (newVal && tinymcsVal != newVal) {
|
|
||||||
//Inhalt des Editors aktualisieren
|
|
||||||
this.editor.setContent(newVal);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
'formData.vorlage_kurzbz': {
|
|
||||||
handler(newVal){
|
|
||||||
|
|
||||||
if (newVal && newVal != null) {
|
|
||||||
this.formData.subject = newVal;
|
|
||||||
return this.getDataVorlage(newVal);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
},
|
|
||||||
created(){
|
created(){
|
||||||
const missingparamsmsgs = [];
|
const missingparamsmsgs = [];
|
||||||
if(!this.typeId)
|
if(!this.typeId)
|
||||||
@@ -291,17 +279,8 @@ export default {
|
|||||||
.catch(this.$fhcAlert.handleSystemError);
|
.catch(this.$fhcAlert.handleSystemError);
|
||||||
|
|
||||||
//case of reply
|
//case of reply
|
||||||
if(this.messageId != null) {
|
if(this.messageId) {
|
||||||
this.loadReplyData(this.messageId);
|
this.loadReplyData(this.messageId);
|
||||||
/* this.$api
|
|
||||||
.call(ApiMessages.getReplyData(this.messageId))
|
|
||||||
.then(result => {
|
|
||||||
this.replyData = result.data;
|
|
||||||
this.formData.subject = this.replyData[0].replySubject;
|
|
||||||
this.formData.body = this.replyData[0].replyBody;
|
|
||||||
this.formData.relationmessage_id = this.messageId;
|
|
||||||
})
|
|
||||||
.catch(this.$fhcAlert.handleSystemError);*/
|
|
||||||
}
|
}
|
||||||
|
|
||||||
},
|
},
|
||||||
@@ -499,10 +478,10 @@ export default {
|
|||||||
|
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-6" style="border-right: 1px">
|
<div class="col-6" style="border-right: 1px">
|
||||||
You can safely close this window.
|
You can safely close this window/tab.
|
||||||
</div>
|
</div>
|
||||||
<div class="col-6">
|
<div class="col-6">
|
||||||
Sie können dieses Fenster schließen.
|
Fenster/Reiter kann geschlossen werden!
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -30,6 +30,7 @@ export default {
|
|||||||
personId: null,
|
personId: null,
|
||||||
layoutColumnsOnNewData: false,
|
layoutColumnsOnNewData: false,
|
||||||
height: '400',
|
height: '400',
|
||||||
|
arePhrasesLoaded: false
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
@@ -65,7 +66,14 @@ export default {
|
|||||||
buildTreemap(messages) {
|
buildTreemap(messages) {
|
||||||
if (!messages || !messages.data || messages.data.length === 0)
|
if (!messages || !messages.data || messages.data.length === 0)
|
||||||
{
|
{
|
||||||
return {data: [], last_page: 0};
|
if(this.tabulatorOptions.pagination)
|
||||||
|
{
|
||||||
|
return {data: [], last_page: 0};
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return [];
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const last_page = messages.meta.count;
|
const last_page = messages.meta.count;
|
||||||
@@ -106,7 +114,15 @@ export default {
|
|||||||
// to avoid endless loop
|
// to avoid endless loop
|
||||||
if (iteration > messages.length) break;
|
if (iteration > messages.length) break;
|
||||||
}
|
}
|
||||||
return {data: messageNested, last_page: last_page};
|
|
||||||
|
if(this.tabulatorOptions.pagination)
|
||||||
|
{
|
||||||
|
return {data: messageNested, last_page: last_page};
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return messageNested;
|
||||||
|
}
|
||||||
},
|
},
|
||||||
loadAjaxCall(url, config, params){
|
loadAjaxCall(url, config, params){
|
||||||
return this.$api.call(
|
return this.$api.call(
|
||||||
@@ -180,7 +196,7 @@ export default {
|
|||||||
],
|
],
|
||||||
formatter: (cell, formatterParams) => {
|
formatter: (cell, formatterParams) => {
|
||||||
const key = formatterParams[cell.getValue()];
|
const key = formatterParams[cell.getValue()];
|
||||||
return this.$p.t('messages', key);
|
return this.$p?.t?.('messages', key) || key;
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -252,7 +268,7 @@ export default {
|
|||||||
frozen: true
|
frozen: true
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
pagination: true,
|
pagination: false,
|
||||||
paginationMode: "remote",
|
paginationMode: "remote",
|
||||||
paginationSize: 15,
|
paginationSize: 15,
|
||||||
paginationInitialPage: 1,
|
paginationInitialPage: 1,
|
||||||
@@ -290,8 +306,6 @@ export default {
|
|||||||
{
|
{
|
||||||
event: 'tableBuilt',
|
event: 'tableBuilt',
|
||||||
handler: async() => {
|
handler: async() => {
|
||||||
await this.$p.loadCategory(['global', 'person', 'stv', 'messages', 'ui', 'notiz']);
|
|
||||||
|
|
||||||
const setHeader = (field, text) => {
|
const setHeader = (field, text) => {
|
||||||
const col = this.$refs.table.tabulator.getColumn(field);
|
const col = this.$refs.table.tabulator.getColumn(field);
|
||||||
if (!col) return;
|
if (!col) return;
|
||||||
@@ -342,6 +356,12 @@ export default {
|
|||||||
});*/
|
});*/
|
||||||
},
|
},
|
||||||
created(){
|
created(){
|
||||||
|
this.$p
|
||||||
|
.loadCategory(['global', 'person', 'stv', 'messages', 'ui', 'notiz'])
|
||||||
|
.then(() => {
|
||||||
|
this.arePhrasesLoaded = true;
|
||||||
|
});
|
||||||
|
|
||||||
if(this.typeId != 'person_id' && Array.isArray(this.id) && this.id.length === 1) {
|
if(this.typeId != 'person_id' && Array.isArray(this.id) && this.id.length === 1) {
|
||||||
const params = {
|
const params = {
|
||||||
id: this.id,
|
id: this.id,
|
||||||
@@ -366,6 +386,7 @@ export default {
|
|||||||
<!--table-->
|
<!--table-->
|
||||||
<div class="col-sm-6 pt-1">
|
<div class="col-sm-6 pt-1">
|
||||||
<core-filter-cmpt
|
<core-filter-cmpt
|
||||||
|
v-if="arePhrasesLoaded"
|
||||||
ref="table"
|
ref="table"
|
||||||
:tabulator-options="tabulatorOptions"
|
:tabulator-options="tabulatorOptions"
|
||||||
:tabulator-events="tabulatorEvents"
|
:tabulator-events="tabulatorEvents"
|
||||||
@@ -398,6 +419,7 @@ export default {
|
|||||||
<div class="col-sm-12 pt-6">
|
<div class="col-sm-12 pt-6">
|
||||||
<core-filter-cmpt
|
<core-filter-cmpt
|
||||||
ref="table"
|
ref="table"
|
||||||
|
v-if="arePhrasesLoaded"
|
||||||
:tabulator-options="tabulatorOptions"
|
:tabulator-options="tabulatorOptions"
|
||||||
:tabulator-events="tabulatorEvents"
|
:tabulator-events="tabulatorEvents"
|
||||||
table-only
|
table-only
|
||||||
|
|||||||
@@ -82,14 +82,16 @@ export default {
|
|||||||
this.$refs.modalMsg.show();
|
this.$refs.modalMsg.show();
|
||||||
}
|
}
|
||||||
else if (this.openMode == "inSamePage"){
|
else if (this.openMode == "inSamePage"){
|
||||||
console.log("in same Page");
|
|
||||||
this.isVisibleDiv = true;
|
this.isVisibleDiv = true;
|
||||||
if(messageId)
|
|
||||||
this.$refs.templateNewDivMessage.loadReplyData(messageId);
|
|
||||||
else
|
|
||||||
this.$refs.templateNewDivMessage.resetForm();
|
|
||||||
|
|
||||||
this.$refs.templateNewDivMessage.showTemplate();
|
this.$nextTick(() => {
|
||||||
|
if(messageId)
|
||||||
|
this.$refs.templateNewDivMessage.loadReplyData(messageId);
|
||||||
|
else
|
||||||
|
this.$refs.templateNewDivMessage.resetForm();
|
||||||
|
|
||||||
|
this.$refs.templateNewDivMessage.showTemplate();
|
||||||
|
});
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
console.log("no valid openMode");
|
console.log("no valid openMode");
|
||||||
|
|||||||
@@ -1,20 +0,0 @@
|
|||||||
|
|
||||||
export const MobilityLegende = {
|
|
||||||
name: 'MobilityLegende',
|
|
||||||
template:`
|
|
||||||
<div class="col-auto" style="max-width: 60vw">
|
|
||||||
<!-- TODO: phrasen definieren & verwenden-->
|
|
||||||
<div class="row" style="font-weight: bold"><h6>Legende</h6></div>
|
|
||||||
<div class="row"><h6>(i) ... Incoming</h6></div>
|
|
||||||
<div class="row"><h6>(o) ... Outgoing</h6></div>
|
|
||||||
<div class="row"><h6>(ar) ... angerechnet </h6></div>
|
|
||||||
<div class="row"><h6>(iar) ... intern angerechnet</h6></div>
|
|
||||||
<div class="row"><h6>(nz) ... nicht zugelassen</h6></div>
|
|
||||||
<div class="row"><h6>(ma) ... MitarbeiterIn</h6></div>
|
|
||||||
<div class="row"><h6>(a.o.) ... Außerordentliche/r HörerIn</h6></div>
|
|
||||||
<div class="row"><h6>(d.d.) ... Double Degree Program</h6></div>
|
|
||||||
</div>
|
|
||||||
`
|
|
||||||
};
|
|
||||||
|
|
||||||
export default MobilityLegende;
|
|
||||||
@@ -84,6 +84,14 @@ export default {
|
|||||||
'microcredential_2',
|
'microcredential_2',
|
||||||
'microcredential_3',
|
'microcredential_3',
|
||||||
'microcredential_4',
|
'microcredential_4',
|
||||||
|
'microdegree_1',
|
||||||
|
'microdegree_2',
|
||||||
|
'microdegree_3',
|
||||||
|
'microdegree_4',
|
||||||
|
'microdegreeabschluss_1',
|
||||||
|
'microdegreeabschluss_2',
|
||||||
|
'microdegreeabschluss_3',
|
||||||
|
'microdegreeabschluss_4',
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
documentDropdownObject: {}
|
documentDropdownObject: {}
|
||||||
|
|||||||
@@ -83,6 +83,8 @@ export default {
|
|||||||
});
|
});
|
||||||
},
|
},
|
||||||
open() {
|
open() {
|
||||||
|
|
||||||
|
this.getBuchungstypen(this.currentSemester);
|
||||||
this.data = {
|
this.data = {
|
||||||
buchungstyp_kurzbz: '',
|
buchungstyp_kurzbz: '',
|
||||||
betrag: '-0.00',
|
betrag: '-0.00',
|
||||||
@@ -105,7 +107,7 @@ export default {
|
|||||||
const text = typ.standardtext || '';
|
const text = typ.standardtext || '';
|
||||||
const creditpoints = typ.credit_points || '';
|
const creditpoints = typ.credit_points || '';
|
||||||
|
|
||||||
if (!this.data.betrag || this.data.betrag == '-0.00')
|
if (!this.data.betrag || this.data.betrag == '-0.00' || this.data.betrag !== amount)
|
||||||
this.data.betrag = amount;
|
this.data.betrag = amount;
|
||||||
|
|
||||||
if (!this.data.buchungstext)
|
if (!this.data.buchungstext)
|
||||||
@@ -113,7 +115,18 @@ export default {
|
|||||||
|
|
||||||
if (this.config.showCreditpoints && (this.data.credit_points == '0.00' || this.data.credit_points === null))
|
if (this.config.showCreditpoints && (this.data.credit_points == '0.00' || this.data.credit_points === null))
|
||||||
this.data.credit_points = creditpoints;
|
this.data.credit_points = creditpoints;
|
||||||
}
|
},
|
||||||
|
getBuchungstypen(studiensemester_kurzbz)
|
||||||
|
{
|
||||||
|
this.$api
|
||||||
|
.call(ApiKonto.getBuchungstypen(studiensemester_kurzbz))
|
||||||
|
.then(result => {
|
||||||
|
this.lists.buchungstypen = result.data;
|
||||||
|
if (this.data.buchungstyp_kurzbz)
|
||||||
|
this.checkDefaultBetrag(this.data.buchungstyp_kurzbz);
|
||||||
|
})
|
||||||
|
.catch(this.$fhcAlert.handleSystemError);
|
||||||
|
},
|
||||||
},
|
},
|
||||||
template: `
|
template: `
|
||||||
<core-form ref="form" class="stv-details-konto-edit" @submit.prevent="save">
|
<core-form ref="form" class="stv-details-konto-edit" @submit.prevent="save">
|
||||||
@@ -166,6 +179,7 @@ export default {
|
|||||||
<form-input
|
<form-input
|
||||||
type="select"
|
type="select"
|
||||||
v-model="data.studiensemester_kurzbz"
|
v-model="data.studiensemester_kurzbz"
|
||||||
|
@change="getBuchungstypen(data.studiensemester_kurzbz)"
|
||||||
name="studiensemester_kurzbz"
|
name="studiensemester_kurzbz"
|
||||||
:label="$p.t('lehre/studiensemester')"
|
:label="$p.t('lehre/studiensemester')"
|
||||||
>
|
>
|
||||||
|
|||||||
@@ -1,5 +1,4 @@
|
|||||||
import TableLvList from "./Lehrveranstaltungstermine/ListLehrveranstaltungstermine.js";
|
import TableLvList from "./Lehrveranstaltungstermine/ListLehrveranstaltungstermine.js";
|
||||||
import ApiStvCoursedates from "../../../../api/factory/stv/coursedates.js";
|
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
name: "TabCourseList",
|
name: "TabCourseList",
|
||||||
@@ -9,13 +8,11 @@ export default {
|
|||||||
props: {
|
props: {
|
||||||
modelValue: Object,
|
modelValue: Object,
|
||||||
},
|
},
|
||||||
data() {
|
data(){
|
||||||
return {
|
return {}
|
||||||
endpoint: ApiStvCoursedates
|
|
||||||
};
|
|
||||||
},
|
},
|
||||||
template: `
|
template: `
|
||||||
<div class="stv-details-course-list h-100 d-flex flex-column">
|
<div class="stv-details-course-list h-100 d-flex flex-column">
|
||||||
<table-lv-list ref="tbl_course_list" :id="modelValue.uid" :endpoint="endpoint"></table-lv-list>
|
<table-lv-list ref="tbl_course_list" :student="modelValue"></table-lv-list>
|
||||||
</div>`
|
</div>`
|
||||||
};
|
};
|
||||||
+29
-30
@@ -2,6 +2,8 @@ import {CoreFilterCmpt} from "../../../../filter/Filter.js";
|
|||||||
import FormInput from "../../../../Form/Input.js";
|
import FormInput from "../../../../Form/Input.js";
|
||||||
import FormForm from '../../../../Form/Form.js';
|
import FormForm from '../../../../Form/Form.js';
|
||||||
|
|
||||||
|
import ApiStvCoursedates from "../../../../../api/factory/stv/coursedates.js";
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
name: "TblCourseList",
|
name: "TblCourseList",
|
||||||
components: {
|
components: {
|
||||||
@@ -9,6 +11,23 @@ export default {
|
|||||||
FormInput,
|
FormInput,
|
||||||
FormForm
|
FormForm
|
||||||
},
|
},
|
||||||
|
inject: {
|
||||||
|
currentSemester: {
|
||||||
|
from: 'currentSemester',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
props: {
|
||||||
|
student: Object
|
||||||
|
},
|
||||||
|
data(){
|
||||||
|
return {
|
||||||
|
tabulatorOptions: null,
|
||||||
|
tabulatorEvents: [],
|
||||||
|
listStudiensemester: [],
|
||||||
|
dataSem: {},
|
||||||
|
showStundenplanDev: false
|
||||||
|
};
|
||||||
|
},
|
||||||
computed: {
|
computed: {
|
||||||
downloadLink: function(){
|
downloadLink: function(){
|
||||||
if(!this.dataSem.start || !this.dataSem.ende || !this.student.uid) return;
|
if(!this.dataSem.start || !this.dataSem.ende || !this.student.uid) return;
|
||||||
@@ -25,35 +44,18 @@ export default {
|
|||||||
return this.showStundenplanDev ? 'stundenplandev' : 'stundenplan';
|
return this.showStundenplanDev ? 'stundenplandev' : 'stundenplan';
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
inject: {
|
|
||||||
currentSemester: {
|
|
||||||
from: 'currentSemester',
|
|
||||||
},
|
|
||||||
},
|
|
||||||
props: {
|
|
||||||
id: {
|
|
||||||
type: [Number, String],
|
|
||||||
required: true
|
|
||||||
},
|
|
||||||
endpoint: {
|
|
||||||
type: Object,
|
|
||||||
required: true
|
|
||||||
},
|
|
||||||
},
|
|
||||||
data(){
|
|
||||||
return {
|
|
||||||
tabulatorOptions: null,
|
|
||||||
tabulatorEvents: [],
|
|
||||||
listStudiensemester: [],
|
|
||||||
dataSem: {},
|
|
||||||
showStundenplanDev: false
|
|
||||||
};
|
|
||||||
},
|
|
||||||
methods: {
|
methods: {
|
||||||
initTabulatorOptions(){
|
initTabulatorOptions(){
|
||||||
this.tabulatorOptions = {
|
this.tabulatorOptions = {
|
||||||
ajaxURL: 'dummy',
|
ajaxURL: 'dummy',
|
||||||
ajaxRequestFunc: () => this.$api.call(this.endpoint.getCourselist(this.id, this.dataSem.start, this.dataSem.ende, this.dbStundenplanTable)),
|
ajaxRequestFunc: () => this.$api.call(
|
||||||
|
ApiStvCoursedates.getCourselist({
|
||||||
|
student_uid: this.student.uid,
|
||||||
|
start_date: this.dataSem.start,
|
||||||
|
end_date: this.dataSem.ende,
|
||||||
|
group_consecutiveHours: true,
|
||||||
|
dbStundenplanTable: this.dbStundenplanTable})
|
||||||
|
),
|
||||||
ajaxResponse: (url, params, response) => {
|
ajaxResponse: (url, params, response) => {
|
||||||
return response.data;
|
return response.data;
|
||||||
},
|
},
|
||||||
@@ -129,7 +131,7 @@ export default {
|
|||||||
this.dataSem = this.listStudiensemester.find(item => item.studiensemester_kurzbz === studiensemester_kurzbz);
|
this.dataSem = this.listStudiensemester.find(item => item.studiensemester_kurzbz === studiensemester_kurzbz);
|
||||||
},
|
},
|
||||||
exportToExcel(){
|
exportToExcel(){
|
||||||
window.open(this.endpoint.exportCalendar(this.id, this.dbStundenplanTable), '_blank');
|
window.open(this.downloadLink, '_blank');
|
||||||
},
|
},
|
||||||
reload() {
|
reload() {
|
||||||
this.$refs.table.reloadTable();
|
this.$refs.table.reloadTable();
|
||||||
@@ -143,13 +145,10 @@ export default {
|
|||||||
currentSemester(newVal, oldVal) {
|
currentSemester(newVal, oldVal) {
|
||||||
this.getDatesOfSemester(newVal);
|
this.getDatesOfSemester(newVal);
|
||||||
},
|
},
|
||||||
id() {
|
|
||||||
this.reload();
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
created(){
|
created(){
|
||||||
this.$api
|
this.$api
|
||||||
.call(this.endpoint.getStudiensemester())
|
.call(ApiStvCoursedates.getStudiensemester())
|
||||||
.then(result => {
|
.then(result => {
|
||||||
this.listStudiensemester = result.data;
|
this.listStudiensemester = result.data;
|
||||||
this.getDatesOfSemester(this.currentSemester);
|
this.getDatesOfSemester(this.currentSemester);
|
||||||
|
|||||||
@@ -2,9 +2,6 @@ import NotenZeugnis from './Noten/Zeugnis.js';
|
|||||||
import NotenTeacher from './Noten/Teacher.js';
|
import NotenTeacher from './Noten/Teacher.js';
|
||||||
import NotenRepeater from './Noten/Repeater.js';
|
import NotenRepeater from './Noten/Repeater.js';
|
||||||
|
|
||||||
import ApiStvGrades from '../../../../api/factory/stv/grades.js';
|
|
||||||
import { highlightGesamtnote } from "../../../../helpers/DocumentHelper";
|
|
||||||
|
|
||||||
const LOCAL_STORAGE_ID = 'stv_details_noten_2024-11-25_stdsem_all';
|
const LOCAL_STORAGE_ID = 'stv_details_noten_2024-11-25_stdsem_all';
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
@@ -25,10 +22,7 @@ export default {
|
|||||||
},
|
},
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
stdsem: '',
|
stdsem: ''
|
||||||
endpoint: ApiStvGrades,
|
|
||||||
zeugnisLoaded: false,
|
|
||||||
teacherLoaded: false,
|
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
@@ -39,30 +33,6 @@ export default {
|
|||||||
},
|
},
|
||||||
saveStdsem(event) {
|
saveStdsem(event) {
|
||||||
window.localStorage.setItem(LOCAL_STORAGE_ID, event.target.value);
|
window.localStorage.setItem(LOCAL_STORAGE_ID, event.target.value);
|
||||||
},
|
|
||||||
onZeugnisLoaded() {
|
|
||||||
this.zeugnisLoaded = true;
|
|
||||||
this.checkHighlight();
|
|
||||||
},
|
|
||||||
onTeacherLoaded() {
|
|
||||||
this.teacherLoaded = true;
|
|
||||||
this.checkHighlight();
|
|
||||||
},
|
|
||||||
checkHighlight()
|
|
||||||
{
|
|
||||||
if (!this.zeugnisLoaded || !this.teacherLoaded)
|
|
||||||
return;
|
|
||||||
|
|
||||||
if (!this.$refs.zeugnis || !this.$refs.teacher)
|
|
||||||
return;
|
|
||||||
|
|
||||||
let zeugnisTable = this.$refs.zeugnis.$refs.table.tabulator;
|
|
||||||
let teacherTable = this.$refs.teacher.$refs.table.tabulator;
|
|
||||||
|
|
||||||
if (!zeugnisTable || !teacherTable)
|
|
||||||
return;
|
|
||||||
|
|
||||||
highlightGesamtnote(zeugnisTable, teacherTable);
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
created() {
|
created() {
|
||||||
@@ -79,10 +49,10 @@ export default {
|
|||||||
</div>
|
</div>
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-8">
|
<div class="col-8">
|
||||||
<noten-zeugnis ref="zeugnis" :id="modelValue.prestudent_id" :all-semester="!!stdsem" :endpoint="endpoint" @loaded="onZeugnisLoaded"></noten-zeugnis>
|
<noten-zeugnis ref="zeugnis" :student="modelValue" :all-semester="!!stdsem"></noten-zeugnis>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-4">
|
<div class="col-4">
|
||||||
<noten-teacher ref="teacher" :id="modelValue.prestudent_id" :endpoint="endpoint" :all-semester="!!stdsem" @copied="reload" @loaded="onTeacherLoaded"></noten-teacher>
|
<noten-teacher ref="teacher" :student="modelValue" :all-semester="!!stdsem" @copied="reload"></noten-teacher>
|
||||||
<noten-repeater class="mt-4" ref="repeater" :student="modelValue" :all-semester="!!stdsem" @copied="reload"></noten-repeater>
|
<noten-repeater class="mt-4" ref="repeater" :student="modelValue" :all-semester="!!stdsem" @copied="reload"></noten-repeater>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -1,12 +1,13 @@
|
|||||||
import {CoreFilterCmpt} from "../../../../filter/Filter.js";
|
import {CoreFilterCmpt} from "../../../../filter/Filter.js";
|
||||||
|
|
||||||
|
import ApiStvGrades from '../../../../../api/factory/stv/grades.js';
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
components: {
|
components: {
|
||||||
CoreFilterCmpt
|
CoreFilterCmpt
|
||||||
},
|
},
|
||||||
emits: [
|
emits: [
|
||||||
"copied",
|
"copied"
|
||||||
"loaded"
|
|
||||||
],
|
],
|
||||||
inject: {
|
inject: {
|
||||||
currentSemester: {
|
currentSemester: {
|
||||||
@@ -15,62 +16,30 @@ export default {
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
props: {
|
props: {
|
||||||
endpoint: {
|
student: Object,
|
||||||
type: Object,
|
allSemester: Boolean
|
||||||
required: true
|
|
||||||
},
|
|
||||||
id: {
|
|
||||||
type: [Number, String],
|
|
||||||
required: true
|
|
||||||
},
|
|
||||||
allSemester: Boolean,
|
|
||||||
optionalTabulatorOptions: Object,
|
|
||||||
},
|
},
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
tabulatorEvents: [
|
tabulatorEvents: []
|
||||||
{
|
|
||||||
event: "dataProcessed",
|
|
||||||
handler: () => this.$emit("loaded"),
|
|
||||||
},
|
|
||||||
]
|
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
computed: {
|
computed: {
|
||||||
tabulatorOptions() {
|
tabulatorOptions() {
|
||||||
return {
|
return {
|
||||||
ajaxURL: 'dummy',
|
ajaxURL: 'dummy',
|
||||||
ajaxRequestFunc: () => this.$api.call(this.endpoint.getTeacherProposal(
|
ajaxRequestFunc: () => this.$api.call(ApiStvGrades.getTeacherProposal(
|
||||||
this.id,
|
this.student.prestudent_id,
|
||||||
(!this.allSemester ? this.currentSemester : null)
|
(!this.allSemester ? this.currentSemester : null)
|
||||||
)),
|
)),
|
||||||
ajaxResponse: (url, params, response) => {
|
ajaxResponse: (url, params, response) => {
|
||||||
return response.data || [];
|
return response.data || [];
|
||||||
},
|
},
|
||||||
columns: [
|
columns: [
|
||||||
{
|
{ field: 'lehrveranstaltung_bezeichnung', title: this.$p.t('lehre/lehrveranstaltung') },
|
||||||
field: 'lehrveranstaltung_bezeichnung',
|
{ field: 'note_bezeichnung', title: this.$p.t('lehre/note') },
|
||||||
title: this.$p.t('lehre/lehrveranstaltung'),
|
{ field: 'mitarbeiter_uid', title: this.$p.t('profil/mitarbeiterIn'), visible: false },
|
||||||
visible: this.optionalTabulatorOptions?.visibleColumns?.lehrveranstaltung_bezeichnung ?? true,
|
{ field: 'benotungsdatum', title: this.$p.t('stv/grades_gradingdate'), visible: false,
|
||||||
headerFilter: this.optionalTabulatorOptions?.headerFilter?.lehrveranstaltung_bezeichnung || this.optionalTabulatorOptions?.headerFilter || false
|
|
||||||
},
|
|
||||||
{
|
|
||||||
field: 'note_bezeichnung',
|
|
||||||
title: this.$p.t('lehre/note'),
|
|
||||||
visible: this.optionalTabulatorOptions?.visibleColumns?.note_bezeichnung ?? true,
|
|
||||||
headerFilter: this.optionalTabulatorOptions?.headerFilter?.note_bezeichnung || this.optionalTabulatorOptions?.headerFilter || false
|
|
||||||
},
|
|
||||||
{
|
|
||||||
field: 'mitarbeiter_uid',
|
|
||||||
title: this.$p.t('profil/mitarbeiterIn'),
|
|
||||||
visible: this.optionalTabulatorOptions?.visibleColumns?.mitarbeiter_uid ?? false,
|
|
||||||
headerFilter: this.optionalTabulatorOptions?.headerFilter?.mitarbeiter_uid || this.optionalTabulatorOptions?.headerFilter || false
|
|
||||||
},
|
|
||||||
{
|
|
||||||
field: 'benotungsdatum',
|
|
||||||
title: this.$p.t('stv/grades_gradingdate'),
|
|
||||||
visible: this.optionalTabulatorOptions?.visibleColumns?.benotungsdatum ?? false,
|
|
||||||
headerFilter: this.optionalTabulatorOptions?.headerFilter?.benotungsdatum || this.optionalTabulatorOptions?.headerFilter || false,
|
|
||||||
formatter: function (cell) {
|
formatter: function (cell) {
|
||||||
const dateStr = cell.getValue();
|
const dateStr = cell.getValue();
|
||||||
if (!dateStr) return "";
|
if (!dateStr) return "";
|
||||||
@@ -85,13 +54,8 @@ export default {
|
|||||||
second: "2-digit",
|
second: "2-digit",
|
||||||
hour12: false
|
hour12: false
|
||||||
});
|
});
|
||||||
}
|
}},
|
||||||
},
|
{ field: 'freigabedatum', title: this.$p.t('stv/grades_approvaldate'), visible: false,
|
||||||
{
|
|
||||||
field: 'freigabedatum',
|
|
||||||
title: this.$p.t('stv/grades_approvaldate'),
|
|
||||||
visible: this.optionalTabulatorOptions?.visibleColumns?.freigabedatum ?? false,
|
|
||||||
headerFilter: this.optionalTabulatorOptions?.headerFilter?.freigabedatum || this.optionalTabulatorOptions?.headerFilter || false,
|
|
||||||
formatter: function (cell) {
|
formatter: function (cell) {
|
||||||
const dateStr = cell.getValue();
|
const dateStr = cell.getValue();
|
||||||
if (!dateStr) return "";
|
if (!dateStr) return "";
|
||||||
@@ -106,66 +70,23 @@ export default {
|
|||||||
second: "2-digit",
|
second: "2-digit",
|
||||||
hour12: false
|
hour12: false
|
||||||
});
|
});
|
||||||
}
|
}},
|
||||||
},
|
{ field: 'studiensemester_kurzbz', title: this.$p.t('lehre/studiensemester'), visible: false },
|
||||||
{
|
{ field: 'note', title: this.$p.t('stv/grades_numericgrade'), visible: false },
|
||||||
field: 'studiensemester_kurzbz',
|
{ field: 'student_uid', title: this.$p.t('profil/studentIn'), visible: false },
|
||||||
title: this.$p.t('lehre/studiensemester'),
|
{ field: 'lehrveranstaltung_id', title: this.$p.t('lehre/lehrveranstaltung_id'), visible: false },
|
||||||
visible: this.optionalTabulatorOptions?.visibleColumns?.studiensemester_kurzbz ?? false,
|
{ field: 'punkte', title: this.$p.t('stv/grades_points'), visible: false }
|
||||||
headerFilter: this.optionalTabulatorOptions?.headerFilter?.studiensemester_kurzbz || this.optionalTabulatorOptions?.headerFilter || false
|
|
||||||
},
|
|
||||||
{
|
|
||||||
field: 'note',
|
|
||||||
title: this.$p.t('stv/grades_numericgrade'),
|
|
||||||
visible: this.optionalTabulatorOptions?.visibleColumns?.note ?? false,
|
|
||||||
headerFilter: this.optionalTabulatorOptions?.headerFilter?.note || this.optionalTabulatorOptions?.headerFilter || false
|
|
||||||
},
|
|
||||||
{
|
|
||||||
field: 'student_uid',
|
|
||||||
title: this.$p.t('profil/studentIn'),
|
|
||||||
visible: this.optionalTabulatorOptions?.visibleColumns?.student_uid ?? false,
|
|
||||||
headerFilter: this.optionalTabulatorOptions?.headerFilter?.student_uid || this.optionalTabulatorOptions?.headerFilter || false
|
|
||||||
},
|
|
||||||
{
|
|
||||||
field: 'lehrveranstaltung_id',
|
|
||||||
title: this.$p.t('lehre/lehrveranstaltung_id'),
|
|
||||||
visible: this.optionalTabulatorOptions?.visibleColumns?.lehrveranstaltung_id ?? false,
|
|
||||||
headerFilter: this.optionalTabulatorOptions?.headerFilter?.lehrveranstaltung_id || this.optionalTabulatorOptions?.headerFilter || false
|
|
||||||
},
|
|
||||||
{
|
|
||||||
field: 'punkte',
|
|
||||||
title: this.$p.t('stv/grades_points'),
|
|
||||||
visible: this.optionalTabulatorOptions?.visibleColumns?.punkte ?? false,
|
|
||||||
headerFilter: this.optionalTabulatorOptions?.headerFilter?.punkte || this.optionalTabulatorOptions?.headerFilter || false
|
|
||||||
},
|
|
||||||
{
|
|
||||||
field: 'vorname',
|
|
||||||
title: this.$p.t('person/vorname'),
|
|
||||||
visible: this.optionalTabulatorOptions?.visibleColumns?.vorname ?? false,
|
|
||||||
headerFilter: this.optionalTabulatorOptions?.headerFilter?.vorname || this.optionalTabulatorOptions?.headerFilter || false
|
|
||||||
},
|
|
||||||
{
|
|
||||||
field: 'nachname',
|
|
||||||
title: this.$p.t('person/nachname'),
|
|
||||||
visible: this.optionalTabulatorOptions?.visibleColumns?.nachname ?? false,
|
|
||||||
headerFilter: this.optionalTabulatorOptions?.headerFilter?.nachname || this.optionalTabulatorOptions?.headerFilter || false
|
|
||||||
}
|
|
||||||
],
|
],
|
||||||
columnDefaults: {
|
|
||||||
headerFilter: this.optionalTabulatorOptions?.headerFilter ?? false,
|
|
||||||
},
|
|
||||||
layout: 'fitDataStretch',
|
layout: 'fitDataStretch',
|
||||||
height: '100%',
|
height: '100%',
|
||||||
selectable: true,
|
selectableRows: true,
|
||||||
selectableRows: true, // needed for Tabulator v6
|
selectableRowsRangeMode: 'click',
|
||||||
selectableRowsRangeMode: 'click', // needed for Tabulator v6
|
persistenceID: 'stv-details-noten-teacher-20260217'
|
||||||
selectableRangeMode: 'click',
|
|
||||||
persistenceID: this.optionalTabulatorOptions?.persistenceTeacherID ?? 'stv-details-noten-teacher-2025120401',
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
watch: {
|
watch: {
|
||||||
id() {
|
student(n) {
|
||||||
this.$refs.table.reloadTable();
|
this.$refs.table.reloadTable();
|
||||||
},
|
},
|
||||||
allSemester(n) {
|
allSemester(n) {
|
||||||
@@ -176,7 +97,7 @@ export default {
|
|||||||
copyGrades(selected) {
|
copyGrades(selected) {
|
||||||
const promises = selected.map(
|
const promises = selected.map(
|
||||||
grade => this.$api
|
grade => this.$api
|
||||||
.call(this.endpoint.copyTeacherProposalToCertificate(grade), {
|
.call(ApiStvGrades.copyTeacherProposalToCertificate(grade), {
|
||||||
errorHeader: grade.lehrveranstaltung_bezeichnung
|
errorHeader: grade.lehrveranstaltung_bezeichnung
|
||||||
})
|
})
|
||||||
.then(() => {
|
.then(() => {
|
||||||
|
|||||||
@@ -2,6 +2,8 @@ import {CoreFilterCmpt} from "../../../../filter/Filter.js";
|
|||||||
import ZeugnisActions from './Zeugnis/Actions.js';
|
import ZeugnisActions from './Zeugnis/Actions.js';
|
||||||
import ZeugnisDocuments from './Zeugnis/Documents.js';
|
import ZeugnisDocuments from './Zeugnis/Documents.js';
|
||||||
|
|
||||||
|
import ApiStvGrades from '../../../../../api/factory/stv/grades.js';
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
name: 'Zeugnis',
|
name: 'Zeugnis',
|
||||||
components: {
|
components: {
|
||||||
@@ -9,7 +11,6 @@ export default {
|
|||||||
ZeugnisActions,
|
ZeugnisActions,
|
||||||
ZeugnisDocuments
|
ZeugnisDocuments
|
||||||
},
|
},
|
||||||
emits: ['loaded'],
|
|
||||||
inject: {
|
inject: {
|
||||||
config: {
|
config: {
|
||||||
from: 'config',
|
from: 'config',
|
||||||
@@ -21,15 +22,7 @@ export default {
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
props: {
|
props: {
|
||||||
endpoint: {
|
student: Object,
|
||||||
type: Object,
|
|
||||||
required: true
|
|
||||||
},
|
|
||||||
id: {
|
|
||||||
type: [Number, String],
|
|
||||||
required: true
|
|
||||||
},
|
|
||||||
optionalTabulatorOptions: Object,
|
|
||||||
allSemester: Boolean
|
allSemester: Boolean
|
||||||
},
|
},
|
||||||
data() {
|
data() {
|
||||||
@@ -42,10 +35,6 @@ export default {
|
|||||||
return item;
|
return item;
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
{
|
|
||||||
event: "dataProcessed",
|
|
||||||
handler: () => this.$emit("loaded")
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
event: "rowSelected",
|
event: "rowSelected",
|
||||||
handler: row => row.getElement().style.zIndex = 12
|
handler: row => row.getElement().style.zIndex = 12
|
||||||
@@ -64,7 +53,7 @@ export default {
|
|||||||
computed: {
|
computed: {
|
||||||
tabulatorOptions() {
|
tabulatorOptions() {
|
||||||
const listPromise = this.$api
|
const listPromise = this.$api
|
||||||
.call(this.endpoint.list())
|
.call(ApiStvGrades.list())
|
||||||
.then(res => res.data.map(({bezeichnung: label, note: value}) => ({label, value})));
|
.then(res => res.data.map(({bezeichnung: label, note: value}) => ({label, value})));
|
||||||
|
|
||||||
let gradeField = {
|
let gradeField = {
|
||||||
@@ -97,7 +86,7 @@ export default {
|
|||||||
note_bezeichnung
|
note_bezeichnung
|
||||||
}))
|
}))
|
||||||
// send to backend
|
// send to backend
|
||||||
.then(data => this.$api.call(this.endpoint.updateCertificate(data)))
|
.then(data => this.$api.call(ApiStvGrades.updateCertificate(data)))
|
||||||
// get bezeichnung again
|
// get bezeichnung again
|
||||||
.then(() => listPromise)
|
.then(() => listPromise)
|
||||||
.then(list => list.find(el => el.value == note))
|
.then(list => list.find(el => el.value == note))
|
||||||
@@ -120,7 +109,7 @@ export default {
|
|||||||
if (filterTerm) {
|
if (filterTerm) {
|
||||||
return this.$api
|
return this.$api
|
||||||
.call(
|
.call(
|
||||||
this.endpoint.getGradeFromPoints(
|
ApiStvGrades.getGradeFromPoints(
|
||||||
filterTerm,
|
filterTerm,
|
||||||
cell.getData().lehrveranstaltung_id,
|
cell.getData().lehrveranstaltung_id,
|
||||||
this.currentSemester
|
this.currentSemester
|
||||||
@@ -153,31 +142,13 @@ export default {
|
|||||||
.then(() => node.innerText = this.$p.t('ui/loading'))
|
.then(() => node.innerText = this.$p.t('ui/loading'))
|
||||||
.catch(this.$fhcAlert.handleSystemError);
|
.catch(this.$fhcAlert.handleSystemError);
|
||||||
gradeField.editorParams.placeholderLoading = node;
|
gradeField.editorParams.placeholderLoading = node;
|
||||||
gradeField.visible = this.optionalTabulatorOptions?.visibleColumns?.note ?? true
|
|
||||||
gradeField.headerFiler = this.optionalTabulatorOptions?.headerFilter?.note || this.optionalTabulatorOptions?.note || false
|
|
||||||
}
|
}
|
||||||
|
|
||||||
const columns = [
|
const columns = [
|
||||||
{
|
{ field: 'zeugnis', title: this.$p.t('stv/grades_zeugnis'), formatter: 'tickCross' },
|
||||||
field: 'zeugnis',
|
{ field: 'lehrveranstaltung_bezeichnung', title: this.$p.t('lehre/lehrveranstaltung') },
|
||||||
title: this.$p.t('stv/grades_zeugnis'),
|
gradeField,
|
||||||
formatter: 'tickCross',
|
{ field: 'uebernahmedatum', title: this.$p.t('stv/grades_takeoverdate'), visible: false,
|
||||||
visible: this.optionalTabulatorOptions?.visibleColumns?.zeugnis ?? true,
|
|
||||||
headerFilter: this.optionalTabulatorOptions?.headerFilter?.zeugnis || this.optionalTabulatorOptions?.zeugnis || false
|
|
||||||
},
|
|
||||||
{
|
|
||||||
field: 'lehrveranstaltung_bezeichnung',
|
|
||||||
title: this.$p.t('lehre/lehrveranstaltung'),
|
|
||||||
visible: this.optionalTabulatorOptions?.visibleColumns?.lehrveranstaltung_bezeichnung ?? true,
|
|
||||||
headerFilter: this.optionalTabulatorOptions?.headerFilter?.lehrveranstaltung_bezeichnung || this.optionalTabulatorOptions?.lehrveranstaltung_bezeichnung || false
|
|
||||||
|
|
||||||
},
|
|
||||||
gradeField,
|
|
||||||
{
|
|
||||||
field: 'uebernahmedatum',
|
|
||||||
title: this.$p.t('stv/grades_takeoverdate'),
|
|
||||||
visible: this.optionalTabulatorOptions?.visibleColumns?.uebernahmedatum ?? false,
|
|
||||||
headerFilter: this.optionalTabulatorOptions?.headerFilter?.uebernahmedatum || this.optionalTabulatorOptions?.uebernahmedatum || false,
|
|
||||||
formatter: function (cell) {
|
formatter: function (cell) {
|
||||||
const dateStr = cell.getValue();
|
const dateStr = cell.getValue();
|
||||||
if (!dateStr) return "";
|
if (!dateStr) return "";
|
||||||
@@ -192,14 +163,8 @@ export default {
|
|||||||
second: "2-digit",
|
second: "2-digit",
|
||||||
hour12: false
|
hour12: false
|
||||||
});
|
});
|
||||||
}
|
}},
|
||||||
|
{ field: 'benotungsdatum', title: this.$p.t('stv/grades_gradingdate'), visible: false,
|
||||||
},
|
|
||||||
{
|
|
||||||
field: 'benotungsdatum',
|
|
||||||
title: this.$p.t('stv/grades_gradingdate'),
|
|
||||||
visible: this.optionalTabulatorOptions?.visibleColumns?.benotungsdatum ?? false,
|
|
||||||
headerFilter: this.optionalTabulatorOptions?.headerFilter?.benotungsdatum || this.optionalTabulatorOptions?.benotungsdatum || false,
|
|
||||||
formatter: function (cell) {
|
formatter: function (cell) {
|
||||||
const dateStr = cell.getValue();
|
const dateStr = cell.getValue();
|
||||||
if (!dateStr) return "";
|
if (!dateStr) return "";
|
||||||
@@ -214,114 +179,20 @@ export default {
|
|||||||
second: "2-digit",
|
second: "2-digit",
|
||||||
hour12: false
|
hour12: false
|
||||||
});
|
});
|
||||||
}
|
}},
|
||||||
},
|
{ field: 'studiensemester_kurzbz', title: this.$p.t('lehre/studiensemester'), visible: false },
|
||||||
{
|
{ field: 'note_number', title: this.$p.t('stv/grades_numericgrade'), visible: false, formatter: cell => cell.getData().note, tooltip: (evt, cell) => cell.getData().note },
|
||||||
field: 'studiensemester_kurzbz',
|
{ field: 'lehrveranstaltung_id', title: this.$p.t('lehre/lehrveranstaltung_id'), visible: false },
|
||||||
title: this.$p.t('lehre/studiensemester'),
|
{ field: 'studiengang', title: this.$p.t('lehre/studiengang'), visible: false },
|
||||||
visible: this.optionalTabulatorOptions?.visibleColumns?.studiensemester_kurzbz ?? false,
|
{ field: 'studiengang_kz', title: this.$p.t('lehre/studiengangskennzahlLehre'), visible: false },
|
||||||
headerFilter: this.optionalTabulatorOptions?.headerFilter?.studiensemester_kurzbz || this.optionalTabulatorOptions?.studiensemester_kurzbz || false
|
{ field: 'studiengang_lv', title: this.$p.t('stv/grades_studiengang_lv'), visible: false },
|
||||||
|
{ field: 'studiengang_kz_lv', title: this.$p.t('stv/grades_studiengang_kz_lv'), visible: false },
|
||||||
},
|
{ field: 'semester_lv', title: this.$p.t('stv/grades_semester_lv'), visible: false },
|
||||||
{
|
{ field: 'ects_lv', title: this.$p.t('lehre/ects'), visible: false },
|
||||||
field: 'note_number',
|
{ field: 'lehrform', title: this.$p.t('lehre/lehrform'), visible: false },
|
||||||
title: this.$p.t('stv/grades_numericgrade'),
|
{ field: 'kurzbz', title: this.$p.t('lehre/kurzbz'), visible: false },
|
||||||
visible: this.optionalTabulatorOptions?.visibleColumns?.note_number ?? false,
|
{ field: 'punkte', title: this.$p.t('stv/grades_points'), visible: false },
|
||||||
formatter: cell => cell.getData().note, tooltip: (evt, cell) => cell.getData().note,
|
{ field: 'lehrveranstaltung_bezeichnung_english', title: this.$p.t('stv/grades_lehrveranstaltung_bezeichnung_english'), visible: false }
|
||||||
headerFilter: this.optionalTabulatorOptions?.headerFilter?.note_number || this.optionalTabulatorOptions?.note_number || false
|
|
||||||
|
|
||||||
},
|
|
||||||
{
|
|
||||||
field: 'lehrveranstaltung_id',
|
|
||||||
title: this.$p.t('lehre/lehrveranstaltung_id'),
|
|
||||||
visible: this.optionalTabulatorOptions?.visibleColumns?.lehrveranstaltung_id ?? false,
|
|
||||||
headerFilter: this.optionalTabulatorOptions?.headerFilter?.lehrveranstaltung_id || this.optionalTabulatorOptions?.lehrveranstaltung_id || false
|
|
||||||
|
|
||||||
},
|
|
||||||
{
|
|
||||||
field: 'studiengang',
|
|
||||||
title: this.$p.t('lehre/studiengang'),
|
|
||||||
visible: this.optionalTabulatorOptions?.visibleColumns?.studiengang ?? false,
|
|
||||||
headerFilter: this.optionalTabulatorOptions?.headerFilter?.studiengang || this.optionalTabulatorOptions?.studiengang || false
|
|
||||||
|
|
||||||
},
|
|
||||||
{
|
|
||||||
field: 'studiengang_kz',
|
|
||||||
title: this.$p.t('lehre/studiengangskennzahlLehre'),
|
|
||||||
visible: this.optionalTabulatorOptions?.visibleColumns?.studiengang_kz ?? false,
|
|
||||||
headerFilter: this.optionalTabulatorOptions?.headerFilter?.studiengang_kz || this.optionalTabulatorOptions?.studiengang_kz || false
|
|
||||||
|
|
||||||
},
|
|
||||||
{
|
|
||||||
field: 'studiengang_lv',
|
|
||||||
title: this.$p.t('stv/grades_studiengang_lv'),
|
|
||||||
visible: this.optionalTabulatorOptions?.visibleColumns?.studiengang_lv ?? false,
|
|
||||||
headerFilter: this.optionalTabulatorOptions?.headerFilter?.studiengang_lv || this.optionalTabulatorOptions?.studiengang_lv || false
|
|
||||||
|
|
||||||
},
|
|
||||||
{
|
|
||||||
field: 'studiengang_kz_lv',
|
|
||||||
title: this.$p.t('stv/grades_studiengang_kz_lv'),
|
|
||||||
visible: this.optionalTabulatorOptions?.visibleColumns?.studiengang_kz_lv ?? false,
|
|
||||||
headerFilter: this.optionalTabulatorOptions?.headerFilter?.studiengang_kz_lv || this.optionalTabulatorOptions?.studiengang_kz_lv || false
|
|
||||||
|
|
||||||
},
|
|
||||||
{
|
|
||||||
field: 'semester_lv',
|
|
||||||
title: this.$p.t('stv/grades_semester_lv'),
|
|
||||||
visible: this.optionalTabulatorOptions?.visibleColumns?.semester_lv ?? false,
|
|
||||||
headerFilter: this.optionalTabulatorOptions?.headerFilter?.semester_lv || this.optionalTabulatorOptions?.semester_lv || false
|
|
||||||
|
|
||||||
},
|
|
||||||
{
|
|
||||||
field: 'ects_lv',
|
|
||||||
title: this.$p.t('lehre/ects'),
|
|
||||||
visible: this.optionalTabulatorOptions?.visibleColumns?.ects_lv ?? false,
|
|
||||||
headerFilter: this.optionalTabulatorOptions?.headerFilter?.ects_lv || this.optionalTabulatorOptions?.ects_lv || false
|
|
||||||
|
|
||||||
},
|
|
||||||
{
|
|
||||||
field: 'lehrform',
|
|
||||||
title: this.$p.t('lehre/lehrform'),
|
|
||||||
visible: this.optionalTabulatorOptions?.visibleColumns?.lehrform ?? false,
|
|
||||||
headerFilter: this.optionalTabulatorOptions?.headerFilter?.lehrform || this.optionalTabulatorOptions?.lehrform || false
|
|
||||||
|
|
||||||
},
|
|
||||||
{
|
|
||||||
field: 'kurzbz',
|
|
||||||
title: this.$p.t('lehre/kurzbz'),
|
|
||||||
visible: this.optionalTabulatorOptions?.visibleColumns?.kurzbz ?? false,
|
|
||||||
headerFilter: this.optionalTabulatorOptions?.headerFilter?.kurzbz || this.optionalTabulatorOptions?.kurzbz || false
|
|
||||||
|
|
||||||
},
|
|
||||||
{
|
|
||||||
field: 'punkte',
|
|
||||||
title: this.$p.t('stv/grades_points'),
|
|
||||||
visible: this.optionalTabulatorOptions?.visibleColumns?.punkte ?? false,
|
|
||||||
headerFilter: this.optionalTabulatorOptions?.headerFilter?.punkte || this.optionalTabulatorOptions?.punkte || false
|
|
||||||
|
|
||||||
},
|
|
||||||
{
|
|
||||||
field: 'vorname',
|
|
||||||
title: this.$p.t('person/vorname'),
|
|
||||||
visible: this.optionalTabulatorOptions?.visibleColumns?.vorname ?? false,
|
|
||||||
headerFilter: this.optionalTabulatorOptions?.headerFilter?.vorname || this.optionalTabulatorOptions?.vorname || false
|
|
||||||
|
|
||||||
},
|
|
||||||
{
|
|
||||||
field: 'nachname',
|
|
||||||
title: this.$p.t('person/nachname'),
|
|
||||||
visible: this.optionalTabulatorOptions?.visibleColumns?.nachname ?? false,
|
|
||||||
headerFilter: this.optionalTabulatorOptions?.headerFilter?.nachname || this.optionalTabulatorOptions?.nachname || false
|
|
||||||
|
|
||||||
},
|
|
||||||
{
|
|
||||||
field: 'lehrveranstaltung_bezeichnung_english',
|
|
||||||
title: this.$p.t('stv/grades_lehrveranstaltung_bezeichnung_english'),
|
|
||||||
visible: this.optionalTabulatorOptions?.visibleColumns?.lehrveranstaltung_bezeichnung_english ?? false,
|
|
||||||
headerFilter: this.optionalTabulatorOptions?.headerFilter?.lehrveranstaltung_bezeichnung_english || this.optionalTabulatorOptions?.lehrveranstaltung_bezeichnung_english || false
|
|
||||||
|
|
||||||
}
|
|
||||||
];
|
];
|
||||||
|
|
||||||
const hasDocuments = ['both', 'inline'].includes(this.config.documents);
|
const hasDocuments = ['both', 'inline'].includes(this.config.documents);
|
||||||
@@ -367,8 +238,8 @@ export default {
|
|||||||
|
|
||||||
return {
|
return {
|
||||||
ajaxURL: 'dummy',
|
ajaxURL: 'dummy',
|
||||||
ajaxRequestFunc: () => this.$api.call(this.endpoint.getCertificate(
|
ajaxRequestFunc: () => this.$api.call(ApiStvGrades.getCertificate(
|
||||||
this.id,
|
this.student.prestudent_id,
|
||||||
(!this.allSemester ? this.currentSemester : null)
|
(!this.allSemester ? this.currentSemester : null)
|
||||||
)),
|
)),
|
||||||
ajaxResponse: (url, params, response) => {
|
ajaxResponse: (url, params, response) => {
|
||||||
@@ -377,11 +248,9 @@ export default {
|
|||||||
columns,
|
columns,
|
||||||
height: '100%',
|
height: '100%',
|
||||||
layout: 'fitDataStretchFrozen',
|
layout: 'fitDataStretchFrozen',
|
||||||
selectable: true,
|
selectableRows: 1,
|
||||||
selectableRangeMode: 'click',
|
selectableRowsRangeMode: 'click',
|
||||||
selectableRowsRangeMode: 'click', //needed for Tabulator v6
|
persistenceID: 'stv-details-noten-zeugnis-20260217',
|
||||||
selectableRows: true, //needed for Tabulator v6
|
|
||||||
persistenceID: this.optionalTabulatorOptions?.persistenceZeugnisID ?? 'stv-details-noten-zeugnis-2025120302',
|
|
||||||
persistence:{
|
persistence:{
|
||||||
columns: ["width", "visible", "frozen"]
|
columns: ["width", "visible", "frozen"]
|
||||||
}
|
}
|
||||||
@@ -389,8 +258,7 @@ export default {
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
watch: {
|
watch: {
|
||||||
id()
|
student(n) {
|
||||||
{
|
|
||||||
this.$refs.table.reloadTable();
|
this.$refs.table.reloadTable();
|
||||||
},
|
},
|
||||||
allSemester(n) {
|
allSemester(n) {
|
||||||
@@ -401,7 +269,7 @@ export default {
|
|||||||
setGrade(data) {
|
setGrade(data) {
|
||||||
this.$api
|
this.$api
|
||||||
.call(
|
.call(
|
||||||
this.endpoint.updateCertificate(data),
|
ApiStvGrades.updateCertificate(data),
|
||||||
{ errorHeader: data.lehrveranstaltung_bezeichnung }
|
{ errorHeader: data.lehrveranstaltung_bezeichnung }
|
||||||
)
|
)
|
||||||
.then(this.$refs.table.reloadTable)
|
.then(this.$refs.table.reloadTable)
|
||||||
@@ -414,7 +282,7 @@ export default {
|
|||||||
.confirmDelete()
|
.confirmDelete()
|
||||||
.then(result => result ? data : Promise.reject({handled:true}))
|
.then(result => result ? data : Promise.reject({handled:true}))
|
||||||
.then(data => this.$api.call(
|
.then(data => this.$api.call(
|
||||||
this.endpoint.deleteCertificate(data),
|
ApiStvGrades.deleteCertificate(data),
|
||||||
{ errorHeader: data.lehrveranstaltung_bezeichnung }
|
{ errorHeader: data.lehrveranstaltung_bezeichnung }
|
||||||
))
|
))
|
||||||
.then(this.$refs.table.reloadTable)
|
.then(this.$refs.table.reloadTable)
|
||||||
@@ -423,7 +291,7 @@ export default {
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
created() {
|
created() {
|
||||||
this.$p.loadCategory(['global', 'stv', 'lehre', 'person'])
|
this.$p.loadCategory(['global', 'stv', 'lehre'])
|
||||||
.then(() => {
|
.then(() => {
|
||||||
if (this.$refs.table.tableBuilt)
|
if (this.$refs.table.tableBuilt)
|
||||||
this.$refs.table.tabulator.columnManager.setColumns(this.tabulatorOptions.columns);
|
this.$refs.table.tabulator.columnManager.setColumns(this.tabulatorOptions.columns);
|
||||||
|
|||||||
@@ -1,6 +1,5 @@
|
|||||||
import drop from '../../../directives/drop.js';
|
import drop from '../../../directives/drop.js';
|
||||||
import dragClick from '../../../directives/dragClick.js';
|
import dragClick from '../../../directives/dragClick.js';
|
||||||
import draggable from '../../../directives/draggable.js';
|
|
||||||
|
|
||||||
import ApiStvGroups from '../../../api/factory/stv/group.js';
|
import ApiStvGroups from '../../../api/factory/stv/group.js';
|
||||||
import ApiStvDetails from '../../../api/factory/stv/details.js';
|
import ApiStvDetails from '../../../api/factory/stv/details.js';
|
||||||
@@ -12,8 +11,7 @@ export default {
|
|||||||
},
|
},
|
||||||
directives: {
|
directives: {
|
||||||
drop,
|
drop,
|
||||||
dragClick,
|
dragClick
|
||||||
draggable
|
|
||||||
},
|
},
|
||||||
inject: {
|
inject: {
|
||||||
$reloadList: {
|
$reloadList: {
|
||||||
@@ -42,10 +40,6 @@ export default {
|
|||||||
preselectedKey: {
|
preselectedKey: {
|
||||||
type: String,
|
type: String,
|
||||||
default: null
|
default: null
|
||||||
},
|
|
||||||
dragEnabled: {
|
|
||||||
type: Boolean,
|
|
||||||
default: false
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
data() {
|
data() {
|
||||||
@@ -85,22 +79,6 @@ export default {
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
dragVerband(node) {
|
|
||||||
const gruppe = node?.data || {};
|
|
||||||
|
|
||||||
const id = gruppe.gruppe_kurzbz ?? gruppe.link ?? node?.key ?? null;
|
|
||||||
|
|
||||||
return [{
|
|
||||||
type: 'verband',
|
|
||||||
id: id,
|
|
||||||
gruppe_kurzbz: gruppe.gruppe_kurzbz ?? null,
|
|
||||||
semester: gruppe.semester ?? null,
|
|
||||||
verband: gruppe.verband ?? null,
|
|
||||||
gruppe: gruppe.gruppe ?? null,
|
|
||||||
lehrverband: gruppe.gruppe_kurzbz == null,
|
|
||||||
stg_kz: gruppe.stg_kz ?? null,
|
|
||||||
}];
|
|
||||||
},
|
|
||||||
findNodeByKey(key, arr) {
|
findNodeByKey(key, arr) {
|
||||||
if (!arr)
|
if (!arr)
|
||||||
arr = this.nodes;
|
arr = this.nodes;
|
||||||
@@ -381,9 +359,7 @@ export default {
|
|||||||
:data-tree-item-key="node.key"
|
:data-tree-item-key="node.key"
|
||||||
:title="node.data.studiengang_kz"
|
:title="node.data.studiengang_kz"
|
||||||
v-drag-click="() => toggleTreeNode(node)"
|
v-drag-click="() => toggleTreeNode(node)"
|
||||||
class="node-verband"
|
|
||||||
v-drop:link-strict.student-collection="(evt, students) => dropStudents(node, students)"
|
v-drop:link-strict.student-collection="(evt, students) => dropStudents(node, students)"
|
||||||
v-draggable:link-strict="dragEnabled && dragVerband(node)"
|
|
||||||
>
|
>
|
||||||
{{ node.data.name }}
|
{{ node.data.name }}
|
||||||
</span>
|
</span>
|
||||||
|
|||||||
@@ -22,15 +22,11 @@ export default {
|
|||||||
savepoint: {},
|
savepoint: {},
|
||||||
values: {
|
values: {
|
||||||
type: Array,
|
type: Array,
|
||||||
required: false,
|
required: true
|
||||||
},
|
},
|
||||||
confirmLimit: {
|
confirmLimit: {
|
||||||
type: Number,
|
type: Number,
|
||||||
default: 20
|
default: 20
|
||||||
},
|
|
||||||
readonly: {
|
|
||||||
type: Boolean,
|
|
||||||
default: false
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
data() {
|
data() {
|
||||||
@@ -59,7 +55,7 @@ export default {
|
|||||||
mounted() {},
|
mounted() {},
|
||||||
methods: {
|
methods: {
|
||||||
init() {
|
init() {
|
||||||
if (!this.endpoint || this.readonly)
|
if (!this.endpoint)
|
||||||
return;
|
return;
|
||||||
this.$api.call(this.endpoint.getTags())
|
this.$api.call(this.endpoint.getTags())
|
||||||
.then(response => response.data)
|
.then(response => response.data)
|
||||||
@@ -211,12 +207,12 @@ export default {
|
|||||||
},
|
},
|
||||||
template: `
|
template: `
|
||||||
<div class="plus_button_container" @mouseleave="hideList">
|
<div class="plus_button_container" @mouseleave="hideList">
|
||||||
<span v-if="!readonly" :title="values.length === 0 ? 'Bitte Zeilen markieren' : ''">
|
<span :title="values.length === 0 ? 'Bitte Zeilen markieren' : ''">
|
||||||
<button @mouseover="showList = true"
|
<button @mouseover="showList = true"
|
||||||
:disabled="!values || values.length === 0"
|
:disabled="!values || values.length === 0"
|
||||||
class="btn btn-sm">
|
class="btn btn-sm">
|
||||||
<i class="fa-solid fa-tag fa-xl"></i>
|
<i class="fa-solid fa-tag fa-xl"></i>
|
||||||
</button>
|
</button>
|
||||||
</span>
|
</span>
|
||||||
<ul v-if="showList" class="dropdown_list">
|
<ul v-if="showList" class="dropdown_list">
|
||||||
<li v-for="(item, index) in tags" :key="index" @click="openModal(item)" :title="item.bezeichnung">
|
<li v-for="(item, index) in tags" :key="index" @click="openModal(item)" :title="item.bezeichnung">
|
||||||
@@ -240,7 +236,7 @@ export default {
|
|||||||
v-model="tagData.notiz"
|
v-model="tagData.notiz"
|
||||||
type="textarea"
|
type="textarea"
|
||||||
field="notiz"
|
field="notiz"
|
||||||
:readonly="tagData.readonly || readonly"
|
:readonly="tagData.readonly"
|
||||||
placeholder="Notiz..."
|
placeholder="Notiz..."
|
||||||
@keyup.stop=""
|
@keyup.stop=""
|
||||||
@keydown.stop=""
|
@keydown.stop=""
|
||||||
@@ -265,7 +261,7 @@ export default {
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
<template #footer v-if="!readonly && !tagData.readonly">
|
<template #footer v-if="!tagData.readonly">
|
||||||
<div class="d-flex justify-content-between w-100">
|
<div class="d-flex justify-content-between w-100">
|
||||||
<div>
|
<div>
|
||||||
<button
|
<button
|
||||||
|
|||||||
@@ -41,8 +41,8 @@ export default {
|
|||||||
),
|
),
|
||||||
ajaxResponse: (url, params, response) => response.data,
|
ajaxResponse: (url, params, response) => response.data,
|
||||||
columns: [
|
columns: [
|
||||||
{title: "Typ", field: "type"},
|
{title: "Typ", field: "type", headerFilter: "list", headerFilterParams: {valuesLookup:true, listOnEmpty:true, autocomplete:true, sort:"asc"}},
|
||||||
{title: "Betrag", field: "betrag",
|
{title: "Betrag", field: "betrag", headerFilter: true,
|
||||||
formatter: function(cell) {
|
formatter: function(cell) {
|
||||||
let value = cell.getValue();
|
let value = cell.getValue();
|
||||||
if (value == null) {
|
if (value == null) {
|
||||||
@@ -51,14 +51,14 @@ export default {
|
|||||||
return parseFloat(value).toFixed(2);
|
return parseFloat(value).toFixed(2);
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{title: "Bezeichnung", field: "bezeichnung"},
|
{title: "Bezeichnung", field: "bezeichnung", headerFilter: true},
|
||||||
{title: "Studiensemester", field: "studiensemester_kurzbz"},
|
{title: "Studiensemester", field: "studiensemester_kurzbz", headerFilter: "list", headerFilterParams: {valuesLookup:true, listOnEmpty:true, autocomplete:true, sort:"asc"}},
|
||||||
{title: "Pruefung_id", field: "pruefung_id", visible: false},
|
{title: "Pruefung_id", field: "pruefung_id", visible: false, headerFilter: true},
|
||||||
{title: "mitarbeiter_uid", field: "mitarbeiter_uid", visible: false},
|
{title: "mitarbeiter_uid", field: "mitarbeiter_uid", visible: false, headerFilter: true},
|
||||||
{title: "projektarbeit_id", field: "projektarbeit_id", visible: false},
|
{title: "projektarbeit_id", field: "projektarbeit_id", visible: false, headerFilter: true},
|
||||||
{title: "lehreinheit_id", field: "lehreinheit_id", visible: true},
|
{title: "lehreinheit_id", field: "lehreinheit_id", visible: true, headerFilter: true},
|
||||||
{title: "betreuerart_kurzbz", field: "betreuerart_kurzbz", visible: false},
|
{title: "betreuerart_kurzbz", field: "betreuerart_kurzbz", visible: false, headerFilter: true},
|
||||||
{title: "vertrag_id", field: "vertrag_id", visible: false}, //just for testing
|
{title: "vertrag_id", field: "vertrag_id", visible: false, headerFilter: true}, //just for testing
|
||||||
{
|
{
|
||||||
title: 'Aktionen', field: 'actions',
|
title: 'Aktionen', field: 'actions',
|
||||||
minWidth: 50,
|
minWidth: 50,
|
||||||
@@ -110,10 +110,10 @@ export default {
|
|||||||
],
|
],
|
||||||
layout: 'fitColumns',
|
layout: 'fitColumns',
|
||||||
layoutColumnsOnNewData: false,
|
layoutColumnsOnNewData: false,
|
||||||
height: '200',
|
height: '250',
|
||||||
selectableRowsRangeMode: 'click',
|
selectableRowsRangeMode: 'click',
|
||||||
selectableRows: true,
|
selectableRows: true,
|
||||||
persistenceID: 'core-contracts-details-2026021701'
|
persistenceID: 'core-contracts-details-2026050501'
|
||||||
},
|
},
|
||||||
tabulatorEvents: [
|
tabulatorEvents: [
|
||||||
{
|
{
|
||||||
@@ -137,7 +137,7 @@ export default {
|
|||||||
|
|
||||||
setHeader('type', this.$p.t('global', 'typ'));
|
setHeader('type', this.$p.t('global', 'typ'));
|
||||||
setHeader('bezeichnung', this.$p.t('ui', 'bezeichnung'));
|
setHeader('bezeichnung', this.$p.t('ui', 'bezeichnung'));
|
||||||
setHeader('lehreinheit_id', this.$p.t('ui', 'lehreinheit_id'));
|
setHeader('lehreinheit_id', this.$p.t('lehre', 'lehreinheit_id'));
|
||||||
setHeader('betrag', this.$p.t('ui', 'betrag'));
|
setHeader('betrag', this.$p.t('ui', 'betrag'));
|
||||||
setHeader('studiensemester_kurzbz', this.$p.t('lehre', 'studiensemester'));
|
setHeader('studiensemester_kurzbz', this.$p.t('lehre', 'studiensemester'));
|
||||||
setHeader('mitarbeiter_uid', this.$p.t('ui', 'mitarbeiter_uid'));
|
setHeader('mitarbeiter_uid', this.$p.t('ui', 'mitarbeiter_uid'));
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user