diff --git a/application/controllers/api/frontend/v1/LvPlan.php b/application/controllers/api/frontend/v1/LvPlan.php
index 2a900e92d..36054003c 100644
--- a/application/controllers/api/frontend/v1/LvPlan.php
+++ b/application/controllers/api/frontend/v1/LvPlan.php
@@ -49,6 +49,8 @@ class LvPlan extends FHCAPI_Controller
'getLehrverband' => self::PERM_LOGGED,
'permissionOtherLvPlan' => self::PERM_LOGGED,
'compactibleEventTypes' => self::PERM_LOGGED,
+ 'getLeEvents' => self::PERM_LOGGED,
+ 'getLvEvents' => self::PERM_LOGGED,
]);
$this->load->library('LogLib');
@@ -60,7 +62,13 @@ class LvPlan extends FHCAPI_Controller
'dbExecuteUser' => 'RESTful API'
));
- $this->load->library('form_validation');
+ $this->load->library('form_validation');
+ $this->load->library('PhrasesLib');
+ $this->loadPhrases(
+ array(
+ 'ui'
+ )
+ );
}
//------------------------------------------------------------------------------------------------------------------
@@ -196,6 +204,38 @@ 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
public function studiensemesterDateInterval($date)
{
diff --git a/application/controllers/api/frontend/v1/lv/Config.php b/application/controllers/api/frontend/v1/lv/Config.php
new file mode 100644
index 000000000..4f39c6b8b
--- /dev/null
+++ b/application/controllers/api/frontend/v1/lv/Config.php
@@ -0,0 +1,86 @@
+ ['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');
+ }
+}
diff --git a/application/controllers/api/frontend/v1/lv/Gruppe.php b/application/controllers/api/frontend/v1/lv/Gruppe.php
index daebe8a61..f60d3a99a 100644
--- a/application/controllers/api/frontend/v1/lv/Gruppe.php
+++ b/application/controllers/api/frontend/v1/lv/Gruppe.php
@@ -15,6 +15,7 @@ class Gruppe extends FHCAPI_Controller
'getBenutzerSearch' => ['admin:r', 'assistenz:r'],
'getAllSearch' => ['admin:r', 'assistenz:r'],
'getByLehreinheit' => ['admin:r', 'assistenz:r'],
+ 'getGruppe' => ['admin:r', 'assistenz:r'],
]);
$this->_ci = &get_instance();
@@ -67,7 +68,7 @@ class Gruppe extends FHCAPI_Controller
$this->checkPermission($lehreinheit_id);
- $result = $this->_ci->LehreinheitgruppeModel->addGroup($lehreinheit_id, $gid, !($lehrverband === 'false'));
+ $result = $this->_ci->LehreinheitgruppeModel->addGroup($lehreinheit_id, $gid, $lehrverband === true || $lehrverband === 'true');
if (isError($result))
$this->terminateWithError(getError($result));
@@ -75,6 +76,71 @@ class Gruppe extends FHCAPI_Controller
$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)
{
if (is_null($lehreinheit_id) || !ctype_digit((string)$lehreinheit_id))
diff --git a/application/controllers/api/frontend/v1/lv/Lektor.php b/application/controllers/api/frontend/v1/lv/Lektor.php
index cce7f6e8b..64cfd3f1c 100644
--- a/application/controllers/api/frontend/v1/lv/Lektor.php
+++ b/application/controllers/api/frontend/v1/lv/Lektor.php
@@ -134,9 +134,14 @@ class Lektor extends FHCAPI_Controller
$this->terminateWithValidationErrors($this->form_validation->error_array());
}
- if (isset($formData['semesterstunden']) && (!is_numeric($formData['semesterstunden']) || $formData['semesterstunden'] === ''))
+ $nullable_fields = array('semesterstunden', 'stundensatz', 'planstunden');
+
+ foreach ($nullable_fields as $nullable_field)
{
- $formData['semesterstunden'] = null;
+ if (isset($formData[$nullable_field]) && (!is_numeric($formData[$nullable_field]) || $formData[$nullable_field] === ''))
+ {
+ $formData[$nullable_field] = null;
+ }
}
$lehreinheit_permission = $this->checkPermission($lehreinheit_id, array('admin', 'assistenz', 'lv-plan'));
@@ -144,6 +149,9 @@ class Lektor extends FHCAPI_Controller
if (!$lehreinheit_permission)
$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);
if (isError($result)) $this->terminateWithError(getError($result));
@@ -154,7 +162,7 @@ class Lektor extends FHCAPI_Controller
{
$value = str_replace(',', '.', $value);
- if (!is_numeric($value))
+ if (!is_numeric($value) && $value !== "")
{
$this->form_validation->set_message('_check_decimal', 'Das Feld {field} muss eine Zahl sein.');
return false;
diff --git a/application/controllers/api/frontend/v1/lv/Noten.php b/application/controllers/api/frontend/v1/lv/Noten.php
new file mode 100644
index 000000000..614ee6609
--- /dev/null
+++ b/application/controllers/api/frontend/v1/lv/Noten.php
@@ -0,0 +1,84 @@
+ '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);
+ }
+
+}
diff --git a/application/controllers/api/frontend/v1/lv/Setup.php b/application/controllers/api/frontend/v1/lv/Setup.php
index eea4befa5..4b91b99c1 100644
--- a/application/controllers/api/frontend/v1/lv/Setup.php
+++ b/application/controllers/api/frontend/v1/lv/Setup.php
@@ -19,6 +19,8 @@
if (!defined('BASEPATH'))
exit('No direct script access allowed');
+use CI3_Events as Events;
+
class Setup extends FHCAPI_Controller
{
private $_ci;
@@ -27,7 +29,8 @@ class Setup extends FHCAPI_Controller
public function __construct()
{
parent::__construct([
- 'getTabs' => ['admin:r', 'assistenz:r'],
+ 'getLETabs' => ['admin:r', 'assistenz:r'],
+ 'getLVTabs' => ['admin:r', 'assistenz:r'],
'getStudiensemester' => ['admin:r', 'assistenz:r'],
'getSprache' => ['admin:r', 'assistenz:r'],
'getRaumtyp' => ['admin:r', 'assistenz:r'],
@@ -41,9 +44,10 @@ class Setup extends FHCAPI_Controller
$this->_ci->load->model('education/Lehrveranstaltung_model', 'LehrveranstaltungModel');
$this->_ci->load->library('VariableLib', ['uid' => $this->_uid]);
+ $this->_ci->load->helper('hlp_document');
}
- public function getTabs()
+ public function getLETabs()
{
$tabs['details'] = array (
'title' => 'Details',
@@ -60,11 +64,43 @@ class Setup extends FHCAPI_Controller
'component' => absoluteJsImportUrl('public/js/components/LVVerwaltung/Tabs/Lektor.js'),
'config' => []
);
+ $tabs['termine'] = array (
+ 'title' => 'Termine',
+ 'component' => absoluteJsImportUrl('public/js/components/LVVerwaltung/Tabs/Termine.js'),
+ 'config' => []
+ );
$tabs['notiz'] = array (
'title' => 'Notizen',
'component' => absoluteJsImportUrl('public/js/components/LVVerwaltung/Tabs/Notiz.js'),
'config' => []
);
+
+ Events::trigger('lvv_conf_tabs', function & () use (&$tabs) {
+ return $tabs;
+ });
+
+ $this->terminateWithSuccess($tabs);
+ }
+
+ public function getLVTabs()
+ {
+ $tabs['termine'] = array (
+ 'title' => 'Termine',
+ 'component' => absoluteJsImportUrl('public/js/components/LVVerwaltung/Tabs/LVTermine.js'),
+ 'config' => []
+ );
+ $tabs['noten'] = array (
+ 'title' => 'Noten',
+ 'component' => absoluteJsImportUrl('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);
}
diff --git a/application/controllers/api/frontend/v1/stv/Config.php b/application/controllers/api/frontend/v1/stv/Config.php
index bc1fbebfe..cc6c04430 100644
--- a/application/controllers/api/frontend/v1/stv/Config.php
+++ b/application/controllers/api/frontend/v1/stv/Config.php
@@ -301,6 +301,7 @@ class Config extends FHCAPI_Controller
public function student()
{
+ $this->load->helper('hlp_document');
$result = [];
$config = $this->config->item('tabs');
@@ -376,9 +377,9 @@ class Config extends FHCAPI_Controller
'config' => [
'usePoints' => defined('CIS_GESAMTNOTE_PUNKTE') && CIS_GESAMTNOTE_PUNKTE,
'edit' => 'both', // Possible values: both|header|inline
- 'delete' => 'both', // Possible values: both|header|inline
- 'documents' => 'both', // Possible values: both|header|inline
- 'documentslist' => $this->gradesDocumentsList()
+ 'delete' => 'inline', // Possible values: both|header|inline
+ 'documents' => 'inline', // Possible values: both|header|inline
+ 'documentslist' => gradesDocumentsList()
]
];
@@ -622,188 +623,6 @@ class Config extends FHCAPI_Controller
] + $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' => '',
- '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' => '',
- '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
*
diff --git a/application/controllers/api/frontend/v1/stv/LvTermine.php b/application/controllers/api/frontend/v1/stv/LvTermine.php
index c29f56964..b9e23e77d 100644
--- a/application/controllers/api/frontend/v1/stv/LvTermine.php
+++ b/application/controllers/api/frontend/v1/stv/LvTermine.php
@@ -34,7 +34,7 @@ class LvTermine extends FHCAPI_Controller
//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
- public function getStundenplan($uid, $start_date = null, $end_date = null, $groupConsecutiveHours = false, $dbStundenplanTable = "stundenplan")
+ public function getStundenplan($uid, $start_date = null, $end_date = null, $dbStundenplanTable = "stundenplan", $groupConsecutiveHours = false)
{
$student_uid = $uid;
$semester_range = $this->studienSemesterErmitteln($start_date, $end_date);
@@ -80,13 +80,6 @@ class LvTermine extends FHCAPI_Controller
$stundenplan_data = $this->getDataOrTerminateWithError($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()
diff --git a/application/helpers/hlp_document_helper.php b/application/helpers/hlp_document_helper.php
new file mode 100644
index 000000000..5b457fe82
--- /dev/null
+++ b/application/helpers/hlp_document_helper.php
@@ -0,0 +1,188 @@
+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' => '',
+ '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' => '',
+ '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;
+}
diff --git a/application/libraries/LektorLib.php b/application/libraries/LektorLib.php
index bbe630eaf..8a60e0aaa 100644
--- a/application/libraries/LektorLib.php
+++ b/application/libraries/LektorLib.php
@@ -17,7 +17,12 @@ class LektorLib
$this->_ci->load->model('organisation/Organisationseinheit_model', 'OrganisationseinheitModel');
$this->_ci->load->model('ressource/mitarbeiter_model', 'MitarbeiterModel');
$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('VariableLib', ['uid' => getAuthUID()]);
}
public function addLektorToLehreinheit($lehreinheit_id, $mitarbeiter_uid)
@@ -78,10 +83,13 @@ class LektorLib
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->addJoin('lehre.tbl_lehreinheit', 'lehreinheit_id');
$this->_ci->LehreinheitmitarbeiterModel->addJoin('lehre.tbl_lehrveranstaltung', 'lehrveranstaltung_id');
- $lehreinheit_result = $this->_ci->LehreinheitmitarbeiterModel->loadWhere(array('lehreinheit_id' => $lehreinheit_id, 'mitarbeiter_uid' => $mitarbeiter_uid));
+ $lehreinheit_result = $this->_ci->LehreinheitmitarbeiterModel->loadWhere(array('lehreinheit_id' => $lehreinheit_id, 'mitarbeiter_uid' => $old_uid));
if (isError($lehreinheit_result)) return $lehreinheit_result;
@@ -89,27 +97,47 @@ class LektorLib
$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;
- //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)
+ if ($old_uid !== $new_uid)
{
- $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));
+ $lehreinheit_data = $this->_ci->LehreinheitmitarbeiterModel->loadWhere(array('mitarbeiter_uid' => $new_uid, 'lehreinheit_id' => $lehreinheit_id));
if (hasData($lehreinheit_data))
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 = '';
- if (isset($new_data['semesterstunden']))
+ if (($semesterstunden_neu !== '' && $semesterstunden_alt !== '') && (($semesterstunden_neu > $semesterstunden_alt) || $neue_stunden_eingerechnet))
{
$studiengang_result = $this->_ci->StudiengangModel->loadWhere(array('studiengang_kz' => $lehreinheit->studiengang_kz));
if (isError($studiengang_result)) return $studiengang_result;
@@ -120,7 +148,7 @@ class LektorLib
if (isError($studiensemester_result)) return $studiensemester_result;
$studiensemester = getData($studiensemester_result)[0];
- $echter_dv_result = $this->_ci->DienstverhaeltnisModel->existsDienstverhaeltnis($mitarbeiter_uid, $studiensemester->start, $studiensemester->ende, 'echterdv');
+ $echter_dv_result = $this->_ci->DienstverhaeltnisModel->existsDienstverhaeltnis($new_uid, $studiensemester->start, $studiensemester->ende, 'echterdv');
$echter_dv = false;
@@ -129,83 +157,81 @@ class LektorLib
$echter_dv = true;
}
- $neue_stunden_eingerechnet = isset($new_data['bismelden']) ? $new_data['bismelden'] : $lehreinheit->bismelden;
- $alte_stunden_eingerechnet = $lehreinheit->bismelden;
+ $stundengrenze_result = $this->_ci->OrganisationseinheitModel->getStundengrenze($studiengang->oe_kurzbz, $echter_dv);
+ if (isError($stundengrenze_result)) return $stundengrenze_result;
- if (($new_data['semesterstunden'] > $lehreinheit->semesterstunden) || $neue_stunden_eingerechnet)
+ $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();
+
+ $semesterstunden_alt_sql = is_null($semesterstunden_alt) ? 0 : $semesterstunden_alt;
+ $semesterstunden_neu_sql = is_null($semesterstunden_neu) ? 0 : $semesterstunden_neu;
+
+ if ($alte_stunden_eingerechnet && $neue_stunden_eingerechnet)
+ $this->_ci->LehreinheitmitarbeiterModel->addSelect("(SUM(tbl_lehreinheitmitarbeiter.semesterstunden) - ($semesterstunden_alt_sql) + {$this->_ci->LehreinheitmitarbeiterModel->db->escape($semesterstunden_neu_sql)}) as summe");
+ else if ($alte_stunden_eingerechnet && !$neue_stunden_eingerechnet)
+ $this->_ci->LehreinheitmitarbeiterModel->addSelect("(SUM(tbl_lehreinheitmitarbeiter.semesterstunden) - ($semesterstunden_alt_sql)) 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_sql)})) 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);
+ }
+ 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);
+ }
- if(defined('FAS_LV_LEKTORINNENZUTEILUNG_STUNDEN_IGNORE_OE')
- && is_array(FAS_LV_LEKTORINNENZUTEILUNG_STUNDEN_IGNORE_OE)
- && count(FAS_LV_LEKTORINNENZUTEILUNG_STUNDEN_IGNORE_OE) > 0)
+ $summe_result = $this->_ci->LehreinheitmitarbeiterModel->load();
+
+ 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)
+ {
+ if (!$echter_dv && (!$this->_ci->permissionlib->isBerechtigt('admin')))
{
- $this->_ci->LehreinheitmitarbeiterModel->db->where_not_in('tbl_studiengang.oe_kurzbz', FAS_LV_LEKTORINNENZUTEILUNG_STUNDEN_IGNORE_OE);
+ if (!$this->LehrauftragAufFirma($new_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";
}
- $summe_result = $this->_ci->LehreinheitmitarbeiterModel->load();
+ $stunden_limit_result = $this->getStundenInstitut($new_uid, $lehreinheit->studiensemester_kurzbz, $oe_array);
- 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)
+ if (hasData($stunden_limit_result))
{
-
- if (!$echter_dv && (!$this->_ci->permissionlib->isBerechtigt('admin')))
+ $stunden_limit_array = getData($stunden_limit_result);
+ foreach ($stunden_limit_array as $stunden_limit)
{
- 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";
- }
+ $warning .= $stunden_limit->summe . ' Stunden ' . $stunden_limit->bezeichnung . "\n";
}
}
}
}
- $benutzer_result = $this->_ci->BenutzerModel->load(array(isset($formData['mitarbeiter_uid']) ? $formData['mitarbeiter_uid'] : $mitarbeiter_uid));
+ $benutzer_result = $this->_ci->BenutzerModel->load(array($new_uid));
if (isError($benutzer_result)) return $benutzer_result;
@@ -227,12 +253,23 @@ class LektorLib
'bismelden'
);
+ $nullable_fields = array('stundensatz', 'semesterstunden', 'planstunden');
+
$updateData = array();
foreach ($updatableFields as $field)
{
- $value = isset($new_data[$field]) ? $new_data[$field] : null;
+ if (!array_key_exists($field, $new_data))
+ {
+ continue;
+ }
- if ($value !== null)
+ $value = $new_data[$field];
+
+ if (in_array($field, $nullable_fields))
+ {
+ $updateData[$field] = $value;
+ }
+ elseif ($value !== null)
{
$updateData[$field] = $value;
}
@@ -240,10 +277,24 @@ class LektorLib
$updateData['updatevon'] = getAuthUID();
$updateData['updateamum'] = date('Y-m-d H:i:s');
- $result = $this->_ci->LehreinheitmitarbeiterModel->update(array('lehreinheit_id' => $lehreinheit_id, 'mitarbeiter_uid' => $mitarbeiter_uid), $updateData);
+ $result = $this->_ci->LehreinheitmitarbeiterModel->update(array('lehreinheit_id' => $lehreinheit_id, 'mitarbeiter_uid' => $old_uid), $updateData);
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]);
return success('Erfolgreich geupdated');
@@ -347,4 +398,52 @@ class LektorLib
$this->_ci->LehreinheitmitarbeiterModel->addGroupBy('tbl_studiengang.bezeichnung');
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;
+ }
}
diff --git a/application/libraries/StundenplanLib.php b/application/libraries/StundenplanLib.php
index a7bec61ec..0085a6b82 100644
--- a/application/libraries/StundenplanLib.php
+++ b/application/libraries/StundenplanLib.php
@@ -184,6 +184,21 @@ class StundenplanLib
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
*
diff --git a/application/models/education/Lehreinheitgruppe_model.php b/application/models/education/Lehreinheitgruppe_model.php
index dee8bbfe1..139d639cb 100644
--- a/application/models/education/Lehreinheitgruppe_model.php
+++ b/application/models/education/Lehreinheitgruppe_model.php
@@ -341,7 +341,7 @@ class Lehreinheitgruppe_model extends DB_Model
$this->db->where('lehreinheit_id', $lehreinheit_id);
$this->db->where('studiengang_kz', $gruppen_array->studiengang_kz);
- if (!isEmptyString($gruppen_array->semester))
+ if (!isEmptyString((string)$gruppen_array->semester))
{
$this->db->where('semester', $gruppen_array->semester);
}
@@ -444,30 +444,37 @@ class Lehreinheitgruppe_model extends DB_Model
)
ELSE tbl_gruppe.beschreibung
END AS beschreibung");
- $this->addSelect("CASE
- WHEN tbl_lehreinheitgruppe.gruppe_kurzbz IS NULL THEN
- (
- SELECT EXISTS (
- SELECT 1
- FROM lehre.tbl_stundenplandev
- WHERE lehreinheit_id = tbl_lehreinheitgruppe.lehreinheit_id
- AND studiengang_kz = tbl_lehreinheitgruppe.studiengang_kz
- AND semester = tbl_lehreinheitgruppe.semester
- AND TRIM(COALESCE(verband, '')) = TRIM(tbl_lehreinheitgruppe.verband)
- AND TRIM(COALESCE(gruppe, '')) = TRIM(tbl_lehreinheitgruppe.gruppe)
- AND (gruppe_kurzbz IS NULL OR gruppe_kurzbz = '')
- )
- )
- ELSE
+ $this->addSelect("
+ CASE
+ WHEN trim(COALESCE(tbl_lehreinheitgruppe.gruppe_kurzbz, '')) = '' THEN
(
SELECT EXISTS (
SELECT 1
- FROM lehre.tbl_stundenplandev
- WHERE lehreinheit_id = tbl_lehreinheitgruppe.lehreinheit_id
- AND gruppe_kurzbz = tbl_lehreinheitgruppe.gruppe_kurzbz
+ FROM lehre.tbl_stundenplandev sp
+ WHERE sp.lehreinheit_id = tbl_lehreinheitgruppe.lehreinheit_id
+ AND sp.studiengang_kz = tbl_lehreinheitgruppe.studiengang_kz
+ 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, '')) = ''
)
)
- END AS verplant");
+ ELSE
+ (
+ SELECT EXISTS (
+ SELECT 1
+ FROM lehre.tbl_stundenplandev sp
+ WHERE sp.lehreinheit_id = tbl_lehreinheitgruppe.lehreinheit_id
+ AND sp.studiengang_kz = tbl_lehreinheitgruppe.studiengang_kz
+ 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
+ ");
+
$this->addJoin('tbl_studiengang', 'studiengang_kz', 'LEFT');
$this->addJoin('public.tbl_gruppe', 'gruppe_kurzbz', 'LEFT');
diff --git a/application/models/education/Lehrveranstaltung_model.php b/application/models/education/Lehrveranstaltung_model.php
index 5422c290e..bea676b98 100644
--- a/application/models/education/Lehrveranstaltung_model.php
+++ b/application/models/education/Lehrveranstaltung_model.php
@@ -1245,7 +1245,7 @@ class Lehrveranstaltung_model extends DB_Model
{
return "
SELECT
- lehrveranstaltung_id, tbl_lehrveranstaltung.kurzbz as lv_kurzbz, tbl_lehrveranstaltung.bezeichnung as lv_bezeichnung, bezeichnung_english as lv_bezeichnung_english, studiengang_kz,
+ 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,
tbl_studienplan_lehrveranstaltung.semester, tbl_lehrveranstaltung.sprache,
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,
diff --git a/application/models/education/Lvgesamtnote_model.php b/application/models/education/Lvgesamtnote_model.php
index c30045ff0..0a7638869 100644
--- a/application/models/education/Lvgesamtnote_model.php
+++ b/application/models/education/Lvgesamtnote_model.php
@@ -29,10 +29,14 @@ class Lvgesamtnote_model extends DB_Model
$this->addSelect("lv.bezeichnung AS lehrveranstaltung_bezeichnung");
$this->addSelect("lv.studiengang_kz");
$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_lehrveranstaltung lv", "lehrveranstaltung_id");
$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);
diff --git a/application/models/education/Zeugnisnote_model.php b/application/models/education/Zeugnisnote_model.php
index f32713dec..694c5d5c0 100644
--- a/application/models/education/Zeugnisnote_model.php
+++ b/application/models/education/Zeugnisnote_model.php
@@ -148,7 +148,7 @@ class Zeugnisnote_model extends DB_Model
*
* @return object
*/
- public function getZeugnisnoten($student_uid, $studiensemester_kurzbz)
+ public function getZeugnisnoten($student_uid, $studiensemester_kurzbz, $lehrveranstaltung_id = null)
{
$params = array();
$where='';
@@ -163,6 +163,11 @@ class Zeugnisnote_model extends DB_Model
$where.=" AND vw_student_lehrveranstaltung.studiensemester_kurzbz= ?";
$params[] = $studiensemester_kurzbz;
}
+ if($lehrveranstaltung_id != null)
+ {
+ $where .= " AND vw_student_lehrveranstaltung.lehrveranstaltung_id = ?";
+ $params[] = $lehrveranstaltung_id;
+ }
$where2='';
@@ -176,6 +181,11 @@ class Zeugnisnote_model extends DB_Model
$where2 .= " AND studiensemester_kurzbz= ?";
$params[] = $studiensemester_kurzbz;
}
+ if($lehrveranstaltung_id != null)
+ {
+ $where2 .=" AND lehrveranstaltung_id = ?";
+ $params[] = $lehrveranstaltung_id;
+ }
$qry = "SELECT
a.*,
@@ -188,7 +198,10 @@ class Zeugnisnote_model extends DB_Model
lv.semester AS semester_lv,
lv.ects AS ects_lv,
lv.zeugnis,
- lv.bezeichnung_english AS lehrveranstaltung_bezeichnung_english
+ lv.bezeichnung_english AS lehrveranstaltung_bezeichnung_english,
+ s.verband,
+ person.vorname,
+ person.nachname
FROM (
SELECT vw_student_lehrveranstaltung.lehrveranstaltung_id, uid,
vw_student_lehrveranstaltung.studiensemester_kurzbz, note, punkte, uebernahmedatum, benotungsdatum,
@@ -231,6 +244,8 @@ class Zeugnisnote_model extends DB_Model
ORDER BY sort
) a
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 lehre.tbl_lehrveranstaltung lv USING (lehrveranstaltung_id)
LEFT JOIN public.tbl_studiengang stg2 ON (lv.studiengang_kz = stg2.studiengang_kz)";
diff --git a/application/models/ressource/Reservierung_model.php b/application/models/ressource/Reservierung_model.php
index cf5f1e4f9..d96fe2f6f 100644
--- a/application/models/ressource/Reservierung_model.php
+++ b/application/models/ressource/Reservierung_model.php
@@ -135,4 +135,15 @@ class Reservierung_model extends DB_Model
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]);
+ }
+
}
diff --git a/application/models/ressource/Stundenplan_model.php b/application/models/ressource/Stundenplan_model.php
index 997451243..1eddd2e2f 100644
--- a/application/models/ressource/Stundenplan_model.php
+++ b/application/models/ressource/Stundenplan_model.php
@@ -333,6 +333,68 @@ class Stundenplan_model extends DB_Model
", [$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
*
diff --git a/application/models/ressource/Stundenplandev_model.php b/application/models/ressource/Stundenplandev_model.php
index e718ba073..355283b90 100644
--- a/application/models/ressource/Stundenplandev_model.php
+++ b/application/models/ressource/Stundenplandev_model.php
@@ -241,4 +241,15 @@ class Stundenplandev_model extends DB_Model
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]);
+ }
}
diff --git a/application/models/ressource/Zeitsperre_model.php b/application/models/ressource/Zeitsperre_model.php
index 078d29d8b..50ba4cb1d 100644
--- a/application/models/ressource/Zeitsperre_model.php
+++ b/application/models/ressource/Zeitsperre_model.php
@@ -61,4 +61,40 @@ class Zeitsperre_model extends DB_Model
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();
+
+ }
}
diff --git a/application/views/LVVerwaltung.php b/application/views/LVVerwaltung.php
index 4cebae839..42d4631f1 100644
--- a/application/views/LVVerwaltung.php
+++ b/application/views/LVVerwaltung.php
@@ -31,6 +31,8 @@
lv-root="= site_url('LVVerwaltung'); ?>"
:permissions="= htmlspecialchars(json_encode($permissions));?>"
:config="= htmlspecialchars(json_encode($configs)); ?>"
+ avatar-url="= site_url('Cis/Pub/bild/person/' . getAuthPersonId()); ?>"
+ logout-url="= site_url('Cis/Auth/logout'); ?>"
>
diff --git a/content/statistik/lehrauftragsliste_gst.xls.php b/content/statistik/lehrauftragsliste_gst.xls.php
index 990216c09..d44c91e63 100644
--- a/content/statistik/lehrauftragsliste_gst.xls.php
+++ b/content/statistik/lehrauftragsliste_gst.xls.php
@@ -41,6 +41,12 @@ else
$user = get_uid();
loadVariables($user);
+if (isset($_GET['studiensemester_kurzbz']))
+{
+ if (check_stsem($_GET['studiensemester_kurzbz']))
+ $semester_aktuell = $_GET['studiensemester_kurzbz'];
+}
+
//Studiengang laden
$studiengang = new studiengang($studiengang_kz);
diff --git a/content/statistik/lvplanung.php b/content/statistik/lvplanung.php
index b0169dade..fe69e4160 100644
--- a/content/statistik/lvplanung.php
+++ b/content/statistik/lvplanung.php
@@ -50,6 +50,12 @@ else
$user = get_uid();
loadVariables($user);
+if (isset($_GET['studiensemester_kurzbz']))
+{
+ if (check_stsem($_GET['studiensemester_kurzbz']))
+ $semester_aktuell = $_GET['studiensemester_kurzbz'];
+}
+
$rechte = new benutzerberechtigung();
$rechte->getBerechtigungen($user);
diff --git a/public/css/Lvverwaltung.css b/public/css/Lvverwaltung.css
index 6e0f4c760..b8152d39a 100644
--- a/public/css/Lvverwaltung.css
+++ b/public/css/Lvverwaltung.css
@@ -38,3 +38,9 @@ textarea[name="anmerkung"] {
{
border-color: black;
}
+
+.node-verband {
+ user-select: none;
+ -webkit-user-select: none;
+ -moz-user-select: none;
+}
diff --git a/public/js/api/factory/stv/coursedates.js b/public/js/api/factory/stv/coursedates.js
index 71ded7285..dc047f815 100644
--- a/public/js/api/factory/stv/coursedates.js
+++ b/public/js/api/factory/stv/coursedates.js
@@ -16,16 +16,20 @@
*/
export default {
- getCourselist(params) {
+ getCourselist(student_uid, start_date, end_date, stundenplan) {
return {
method: 'get',
- url: 'api/frontend/v1/stv/LvTermine/getStundenplan/' + params.student_uid + '/'
- + params.start_date + '/'
- + params.end_date + '/'
- + params.group_consecutiveHours + '/'
- + params.dbStundenplanTable
+ url: 'api/frontend/v1/stv/LvTermine/getStundenplan/' + encodeURIComponent(student_uid) + '/'
+ + encodeURIComponent(start_date) + '/'
+ + encodeURIComponent(end_date) + '/'
+ + encodeURIComponent(stundenplan) + '/'
+ + encodeURIComponent(true)
};
},
+ 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(){
return {
method: 'get',
diff --git a/public/js/api/lehrveranstaltung/config.js b/public/js/api/lehrveranstaltung/config.js
new file mode 100644
index 000000000..40d275145
--- /dev/null
+++ b/public/js/api/lehrveranstaltung/config.js
@@ -0,0 +1,15 @@
+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
+ };
+ }
+};
diff --git a/public/js/api/lehrveranstaltung/gruppe.js b/public/js/api/lehrveranstaltung/gruppe.js
index 44340bec7..23db4c069 100644
--- a/public/js/api/lehrveranstaltung/gruppe.js
+++ b/public/js/api/lehrveranstaltung/gruppe.js
@@ -18,6 +18,14 @@ export default {
params: newData
};
},
+ getGruppe(gruppe)
+ {
+ return {
+ method: 'post',
+ url: '/api/frontend/v1/lv/gruppe/getGruppe/',
+ params: gruppe
+ };
+ },
getByLehreinheit(lehreinheit_id)
{
return {
diff --git a/public/js/api/lehrveranstaltung/letermine.js b/public/js/api/lehrveranstaltung/letermine.js
new file mode 100644
index 000000000..e5b3093f5
--- /dev/null
+++ b/public/js/api/lehrveranstaltung/letermine.js
@@ -0,0 +1,19 @@
+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/'
+ };
+ },
+};
diff --git a/public/js/api/lehrveranstaltung/lvtermine.js b/public/js/api/lehrveranstaltung/lvtermine.js
new file mode 100644
index 000000000..35fdc5ca8
--- /dev/null
+++ b/public/js/api/lehrveranstaltung/lvtermine.js
@@ -0,0 +1,19 @@
+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/'
+ };
+ },
+};
diff --git a/public/js/api/lehrveranstaltung/noten.js b/public/js/api/lehrveranstaltung/noten.js
new file mode 100644
index 000000000..fdcbb6f1e
--- /dev/null
+++ b/public/js/api/lehrveranstaltung/noten.js
@@ -0,0 +1,25 @@
+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
+ };
+ },
+};
\ No newline at end of file
diff --git a/public/js/api/lehrveranstaltung/setup.js b/public/js/api/lehrveranstaltung/setup.js
index 78f78b05b..dab1062a4 100644
--- a/public/js/api/lehrveranstaltung/setup.js
+++ b/public/js/api/lehrveranstaltung/setup.js
@@ -1,9 +1,16 @@
export default {
- getTabs()
+ getLETabs()
{
return {
method: 'get',
- url: '/api/frontend/v1/lv/setup/getTabs/'
+ url: '/api/frontend/v1/lv/setup/getLETabs/'
+ };
+ },
+ getLVTabs()
+ {
+ return {
+ method: 'get',
+ url: '/api/frontend/v1/lv/setup/getLVTabs/'
};
},
}
diff --git a/public/js/components/LVVerwaltung/Details/Gruppen.js b/public/js/components/LVVerwaltung/Details/Gruppen.js
index 024bf6468..5244136cc 100644
--- a/public/js/components/LVVerwaltung/Details/Gruppen.js
+++ b/public/js/components/LVVerwaltung/Details/Gruppen.js
@@ -2,6 +2,7 @@ import {CoreFilterCmpt} from "../../filter/Filter.js";
import FormForm from '../../Form/Form.js';
import FormInput from '../../Form/Input.js';
import ApiGruppe from "../../../api/lehrveranstaltung/gruppe.js";
+import drop from '../../../directives/drop.js';
export default{
name: "LVGruppen",
components: {
@@ -9,6 +10,9 @@ export default{
FormForm,
FormInput
},
+ directives: {
+ drop
+ },
props: {
lehreinheit_id: Number
},
@@ -187,28 +191,48 @@ export default{
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: `
-
{{$p.t('lehre', 'newlehreinheit')}}
- - - -{{$p.t('lehre', 'newlehreinheit')}}
+ + + +