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/Lektor.php b/application/controllers/api/frontend/v1/lv/Lektor.php
index d13bb94dd..64cfd3f1c 100644
--- a/application/controllers/api/frontend/v1/lv/Lektor.php
+++ b/application/controllers/api/frontend/v1/lv/Lektor.php
@@ -149,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));
diff --git a/application/libraries/LektorLib.php b/application/libraries/LektorLib.php
index 6cc58d3ba..7deed3a11 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,85 +157,78 @@ 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();
+
+ 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('');
-
- $old_semesterstunden = $lehreinheit->semesterstunden ?: 0;
-
- if ($alte_stunden_eingerechnet && $neue_stunden_eingerechnet)
- $this->_ci->LehreinheitmitarbeiterModel->addSelect("(SUM(tbl_lehreinheitmitarbeiter.semesterstunden) - ($old_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) - ($old_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;
@@ -253,10 +274,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');
@@ -360,4 +395,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/models/ressource/Reservierung_model.php b/application/models/ressource/Reservierung_model.php
index 0c391ea20..8049838eb 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/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/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/components/LVVerwaltung/LVVerwaltung.js b/public/js/components/LVVerwaltung/LVVerwaltung.js
index 070d14c13..65746ca3a 100644
--- a/public/js/components/LVVerwaltung/LVVerwaltung.js
+++ b/public/js/components/LVVerwaltung/LVVerwaltung.js
@@ -10,6 +10,8 @@ import ApiDetails from "../../api/lehrveranstaltung/details.js";
import ApiLektor from "../../api/lehrveranstaltung/lektor.js";
import ApiStudiengangTree from "../../api/lehrveranstaltung/studiengangtree.js";
import ApiSearchbar from "../../api/factory/searchbar.js";
+import AppConfig from "../AppConfig.js";
+import ApiLvConfig from "../../api/lehrveranstaltung/config.js";
export default {
@@ -22,6 +24,7 @@ export default {
StvStudiensemester,
LvTable,
LvTabs,
+ AppConfig
},
props: {
defaultSemester: String,
@@ -31,7 +34,9 @@ export default {
stg: { type: String, required: false },
semester: { type: [Number, 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() {
@@ -43,7 +48,6 @@ export default {
lehreinheitAnmerkungDefault: (this.config.lehreinheitAnmerkungDefault || '').replace(/\\n/g, '\n'),
lehreinheitRaumtypDefault: this.config.lehreinheitRaumtypDefault,
lehreinheitRaumtypAlternativeDefault: this.config.lehreinheitRaumtypAlternativeDefault,
-
permissionLehrveranstaltung: this.permissions['lehre/lehrveranstaltung'],
permissionGruppenEntfernen: this.permissions['lv-plan/gruppenentfernen'],
permissionLektorEntfernen: this.permissions['lv-plan/lektorentfernen'],
@@ -71,6 +75,8 @@ export default {
},
data() {
return {
+ appconfig:{},
+ configEndpoints: ApiLvConfig,
selected: [],
studiengang: "",
filter: {},
@@ -268,6 +274,51 @@ export default {