mirror of
https://github.com/FH-Complete/FHC-Core.git
synced 2026-06-01 12:19:28 +00:00
Merge remote-tracking branch 'origin/master' into feature-61164/AbgabetoolQualityGates
# Conflicts: # system/phrasesupdate.php
This commit is contained in:
@@ -0,0 +1,11 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
/*It defines which tags are available in LVVerwaltung and whether they are editable
|
||||||
|
|
||||||
|
$config['lvverwaltung_tags'] = [
|
||||||
|
'tag_1' => ['readonly' => false],
|
||||||
|
'tag_1' => ['readonly' => true]
|
||||||
|
];
|
||||||
|
*/
|
||||||
|
|
||||||
|
$config['lvverwaltung_tags'] = [];
|
||||||
@@ -64,7 +64,7 @@ $config['navigation_header'] = array(
|
|||||||
'lehrveranstaltungen' => array(
|
'lehrveranstaltungen' => array(
|
||||||
'link' => site_url('lehre/lvplanung/LvTemplateUebersicht'),
|
'link' => site_url('lehre/lvplanung/LvTemplateUebersicht'),
|
||||||
'icon' => '',
|
'icon' => '',
|
||||||
'description' => 'Lehrveranstaltungen',
|
'description' => 'Lehrveranstaltungen Templates',
|
||||||
'sort' => 15
|
'sort' => 15
|
||||||
),
|
),
|
||||||
'reihungstest' => array(
|
'reihungstest' => array(
|
||||||
@@ -81,6 +81,16 @@ $config['navigation_header'] = array(
|
|||||||
'sort' => 30,
|
'sort' => 30,
|
||||||
'requiredPermissions' => 'infocenter:r'
|
'requiredPermissions' => 'infocenter:r'
|
||||||
),
|
),
|
||||||
|
'lvverwaltung' => array(
|
||||||
|
'link' => site_url('LVVerwaltung'),
|
||||||
|
'icon' => '',
|
||||||
|
'description' => 'LV Verwaltung',
|
||||||
|
'requiredPermissions' => array(
|
||||||
|
'admin:r',
|
||||||
|
'assistenz:r'
|
||||||
|
),
|
||||||
|
'sort' => 35
|
||||||
|
),
|
||||||
'lehrauftrag' => array(
|
'lehrauftrag' => array(
|
||||||
'link' => site_url('lehre/lehrauftrag/Lehrauftrag/Dashboard'),
|
'link' => site_url('lehre/lehrauftrag/Lehrauftrag/Dashboard'),
|
||||||
'description' => 'Lehrauftrag',
|
'description' => 'Lehrauftrag',
|
||||||
|
|||||||
@@ -72,7 +72,7 @@ class Documents extends Auth_Controller
|
|||||||
|
|
||||||
$stgs = [];
|
$stgs = [];
|
||||||
$stsemArray = [];
|
$stsemArray = [];
|
||||||
$buchungstypen = implode('\',\'', defined("CIS_DOKUMENTE_STUDIENBEITRAG_TYPEN") ? unserialize(CIS_DOKUMENTE_STUDIENBEITRAG_TYPEN) : []);
|
$buchungstypen = defined("CIS_DOKUMENTE_STUDIENBEITRAG_TYPEN") ? unserialize(CIS_DOKUMENTE_STUDIENBEITRAG_TYPEN) : [];
|
||||||
$person_ids = [];
|
$person_ids = [];
|
||||||
foreach ($stati as $status) {
|
foreach ($stati as $status) {
|
||||||
$person_ids[] = $status->person_id;
|
$person_ids[] = $status->person_id;
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ class ProfilUpdate extends Auth_Controller
|
|||||||
{
|
{
|
||||||
parent::__construct([
|
parent::__construct([
|
||||||
'index' => ['student/stammdaten:r', 'mitarbeiter/stammdaten:r'],
|
'index' => ['student/stammdaten:r', 'mitarbeiter/stammdaten:r'],
|
||||||
'show' => ['basis/cis:r'],
|
'show' => ['student/stammdaten:r', 'mitarbeiter/stammdaten:r', 'basis/cis:r'],
|
||||||
'id' => ['student/stammdaten:r', 'mitarbeiter/stammdaten:r']
|
'id' => ['student/stammdaten:r', 'mitarbeiter/stammdaten:r']
|
||||||
]);
|
]);
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,42 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
if (! defined('BASEPATH')) exit('No direct script access allowed');
|
||||||
|
|
||||||
|
class LVVerwaltung extends Auth_Controller
|
||||||
|
{
|
||||||
|
public function __construct()
|
||||||
|
{
|
||||||
|
$permissions = [];
|
||||||
|
|
||||||
|
$router = load_class('Router');
|
||||||
|
$permissions[$router->method] = ['admin:r', 'assistenz:r'];
|
||||||
|
parent::__construct($permissions);
|
||||||
|
|
||||||
|
$this->load->library('VariableLib', ['uid' => getAuthUID()]);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function _remap()
|
||||||
|
{
|
||||||
|
$this->load->view('LVVerwaltung', [
|
||||||
|
'permissions' => [
|
||||||
|
'lehre/lehrveranstaltung' => $this->permissionlib->isBerechtigt('lehre/lehrveranstaltung'),
|
||||||
|
'lv-plan/gruppenentfernen' => $this->permissionlib->isBerechtigt('lv-plan/gruppenentfernen'),
|
||||||
|
'lv-plan/lektorentfernen' => $this->permissionlib->isBerechtigt('lv-plan/lektorentfernen'),
|
||||||
|
],
|
||||||
|
'variables' => [
|
||||||
|
'semester_aktuell' => $this->variablelib->getVar('semester_aktuell')
|
||||||
|
],
|
||||||
|
'configs' => [
|
||||||
|
'showVertragsdetails' => defined('FAS_LV_LEKTORINNENZUTEILUNG_VERTRAGSDETAILS_ANZEIGEN') && FAS_LV_LEKTORINNENZUTEILUNG_VERTRAGSDETAILS_ANZEIGEN,
|
||||||
|
'showGewichtung' => defined('CIS_GESAMTNOTE_GEWICHTUNG') && CIS_GESAMTNOTE_GEWICHTUNG,
|
||||||
|
'lehreinheitAnmerkungDefault' => defined('LEHREINHEIT_ANMERKUNG_DEFAULT') ? LEHREINHEIT_ANMERKUNG_DEFAULT : '',
|
||||||
|
'lehreinheitRaumtypDefault' => defined('DEFAULT_LEHREINHEIT_RAUMTYP') ? DEFAULT_LEHREINHEIT_RAUMTYP : '',
|
||||||
|
'lehreinheitRaumtypAlternativeDefault' => defined('DEFAULT_LEHREINHEIT_RAUMTYP_ALTERNATIV') ? DEFAULT_LEHREINHEIT_RAUMTYP_ALTERNATIV : ''
|
||||||
|
]
|
||||||
|
]);
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,265 @@
|
|||||||
|
<?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');
|
||||||
|
|
||||||
|
class Lehrveranstaltung extends FHCAPI_Controller
|
||||||
|
{
|
||||||
|
private $_ci;
|
||||||
|
private $_uid;
|
||||||
|
|
||||||
|
public function __construct()
|
||||||
|
{
|
||||||
|
parent::__construct([
|
||||||
|
'getByEmp' => ['admin:r', 'assistenz:r'],
|
||||||
|
'getByStg' => ['admin:r', 'assistenz:r'],
|
||||||
|
'loadByLV' => ['admin:r', 'assistenz:r'],
|
||||||
|
]);
|
||||||
|
|
||||||
|
$this->_ci = &get_instance();
|
||||||
|
$this->_setAuthUID();
|
||||||
|
|
||||||
|
$this->_ci->load->model('education/Lehreinheit_model', 'LehreinheitModel');
|
||||||
|
$this->_ci->load->model('education/Lehrveranstaltung_model', 'LehrveranstaltungModel');
|
||||||
|
$this->_ci->load->model('organisation/Studiensemester_model', 'StudiensemesterModel');
|
||||||
|
|
||||||
|
$this->_ci->load->library('VariableLib', ['uid' => $this->_uid]);
|
||||||
|
|
||||||
|
$this->loadPhrases(
|
||||||
|
array(
|
||||||
|
'ui'
|
||||||
|
)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getByEmp($studiensemester_kurzbz = null, $mitarbeiter_uid = null, $stg_kz = null)
|
||||||
|
{
|
||||||
|
|
||||||
|
if (is_null($mitarbeiter_uid))
|
||||||
|
$this->terminateWithError($this->p->t('ui', 'ungueltigeParameter'), self::ERROR_TYPE_GENERAL);
|
||||||
|
|
||||||
|
$studiensemester_kurzbz = $this->getStudiensemesterKurzbz($studiensemester_kurzbz);
|
||||||
|
|
||||||
|
$lehrveranstaltungen = $this->_ci->LehreinheitModel->getLvsByEmployee($mitarbeiter_uid, $studiensemester_kurzbz, $stg_kz);
|
||||||
|
$lehrveranstaltungen_data = $this->getDataOrTerminateWithError($lehrveranstaltungen);
|
||||||
|
|
||||||
|
$tree = [];
|
||||||
|
|
||||||
|
foreach ($lehrveranstaltungen_data as $lehrveranstaltung)
|
||||||
|
{
|
||||||
|
$lehreinheiten = $this->_ci->LehreinheitModel->getByLvidStudiensemester($lehrveranstaltung->lehrveranstaltung_id, $studiensemester_kurzbz, $mitarbeiter_uid);
|
||||||
|
$lehreinheiten_data = $this->getDataOrTerminateWithError($lehreinheiten);
|
||||||
|
|
||||||
|
if (!isset($lehrveranstaltung->_children))
|
||||||
|
{
|
||||||
|
$lehrveranstaltung->_children = $lehreinheiten_data;
|
||||||
|
}
|
||||||
|
$tree[] = $lehrveranstaltung;
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->terminateWithSuccess($tree);
|
||||||
|
}
|
||||||
|
public function getByStg($studiensemester_kurzbz = null, $studiengang_kz = null, $semester = null)
|
||||||
|
{
|
||||||
|
if (is_null($studiengang_kz) || !preg_match("/^-?[1-9][0-9]*$/", (string)$studiengang_kz))
|
||||||
|
$this->terminateWithError($this->p->t('ui', 'ungueltigeParameter'), self::ERROR_TYPE_GENERAL);
|
||||||
|
|
||||||
|
$verband = null;
|
||||||
|
if (!is_null($semester) && !is_numeric($semester))
|
||||||
|
{
|
||||||
|
$verband = $semester;
|
||||||
|
$semester = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->_ci->load->model('organisation/Studienplan_model', 'StudienplanModel');
|
||||||
|
|
||||||
|
$studiensemester_kurzbz = $this->getStudiensemesterKurzbz($studiensemester_kurzbz);
|
||||||
|
$studienplan_data = $this->_ci->StudienplanModel->getStudienplaeneBySemester($studiengang_kz, $studiensemester_kurzbz, $semester, $verband);
|
||||||
|
|
||||||
|
$studienplan_ids = array();
|
||||||
|
$only_ids = array();
|
||||||
|
$placeholders = array();
|
||||||
|
|
||||||
|
if (hasData($studienplan_data))
|
||||||
|
{
|
||||||
|
foreach (getData($studienplan_data) as $studienplan) {
|
||||||
|
$placeholders[] = "(?, ?)";
|
||||||
|
$studienplan_ids[] = $studienplan->studienplan_id;
|
||||||
|
$studienplan_ids[] = $studienplan->semester;
|
||||||
|
$only_ids[] = $studienplan->studienplan_id;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$lehrveranstaltungen_data = $this->_ci->LehrveranstaltungModel->getLvsByStudiengang($studienplan_ids, $placeholders, $only_ids, $studiengang_kz, $studiensemester_kurzbz, $semester, $verband);
|
||||||
|
$lehrveranstaltungen_data = hasData($lehrveranstaltungen_data) ? getData($lehrveranstaltungen_data) : array();
|
||||||
|
|
||||||
|
$tree = [];
|
||||||
|
foreach ($lehrveranstaltungen_data as $row)
|
||||||
|
{
|
||||||
|
$rowData = $row;
|
||||||
|
|
||||||
|
$lehreinheiten_data = $this->_ci->LehreinheitModel->getByLvidStudiensemester($row->lehrveranstaltung_id, $studiensemester_kurzbz);
|
||||||
|
|
||||||
|
if (hasData($lehreinheiten_data))
|
||||||
|
{
|
||||||
|
$lehreinheiten = getData($lehreinheiten_data);
|
||||||
|
$rowData->_children = $lehreinheiten;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!isEmptyString($row->studienplan_lehrveranstaltung_id_parent))
|
||||||
|
{
|
||||||
|
$child = $this->_ci->StudienplanModel->loadStudienplanLehrveranstaltung($row->studienplan_lehrveranstaltung_id_parent);
|
||||||
|
|
||||||
|
if (hasData($child))
|
||||||
|
{
|
||||||
|
$child = getData($child)[0];
|
||||||
|
$searchId = $child->lehrveranstaltung_id;
|
||||||
|
|
||||||
|
foreach ($lehrveranstaltungen_data as &$searchParent)
|
||||||
|
{
|
||||||
|
if ($searchParent->lehrveranstaltung_id === $searchId)
|
||||||
|
{
|
||||||
|
if (!isset($searchParent->_children))
|
||||||
|
{
|
||||||
|
$searchParent->_children = [];
|
||||||
|
}
|
||||||
|
|
||||||
|
if (is_array($searchParent->_children))
|
||||||
|
{
|
||||||
|
$searchParent->_children[] = $row;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
$searchParent->_children = [$searchParent->_children, $row];
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
$tree[] = $rowData;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$counter = 0;
|
||||||
|
$this->assignUniqueIndex($tree, $counter);
|
||||||
|
$this->terminateWithSuccess($tree);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public function loadByLV($lehrveranstaltung_id = null)
|
||||||
|
{
|
||||||
|
if (is_null($lehrveranstaltung_id) || !ctype_digit((string)$lehrveranstaltung_id))
|
||||||
|
$this->terminateWithError( $this->p->t('ui', 'ungueltigeParameter'), self::ERROR_TYPE_GENERAL);
|
||||||
|
|
||||||
|
$this->_ci->LehrveranstaltungModel->addSelect('lehrveranstaltung_id, lehrform_kurzbz, lehre, bezeichnung as lvbezeichnung, sprache');
|
||||||
|
$lehrveranstaltung_result = $this->_ci->LehrveranstaltungModel->loadWhere(array('lehrveranstaltung_id' => $lehrveranstaltung_id));
|
||||||
|
$lehrveranstaltung_result = $this->getDataOrTerminateWithError($lehrveranstaltung_result);
|
||||||
|
$lehrveranstaltung = $lehrveranstaltung_result[0];
|
||||||
|
|
||||||
|
$this->_ci->LehreinheitModel->addSelect('lehrveranstaltung_id_kompatibel');
|
||||||
|
$this->_ci->LehreinheitModel->addJoin('lehre.tbl_lehrveranstaltung_kompatibel', 'lehrveranstaltung_id');
|
||||||
|
$lehrfaecher = $this->_ci->LehreinheitModel->loadWhere(array('lehrveranstaltung_id' => $lehrveranstaltung->lehrveranstaltung_id));
|
||||||
|
|
||||||
|
$lehrfaecher_array = [];
|
||||||
|
if (hasData($lehrfaecher))
|
||||||
|
$lehrfaecher_array = array_merge($lehrfaecher_array, array_column(getData($lehrfaecher), 'lehrveranstaltung_id_kompatibel'));
|
||||||
|
|
||||||
|
$lehrfaecher_array[] = $lehrveranstaltung->lehrveranstaltung_id;
|
||||||
|
|
||||||
|
$this->_ci->LehrveranstaltungModel->addDistinct('lehrfach_id');
|
||||||
|
$this->_ci->LehrveranstaltungModel->addSelect("tbl_lehrveranstaltung.lehrveranstaltung_id, CONCAT(tbl_lehrveranstaltung.bezeichnung || '(' || tbl_lehrveranstaltung.oe_kurzbz || ')') as lehrfach");
|
||||||
|
$this->_ci->LehrveranstaltungModel->db->where_in('tbl_lehrveranstaltung.lehrveranstaltung_id', $lehrfaecher_array);
|
||||||
|
$lehrfaecher_result = $this->_ci->LehrveranstaltungModel->load();
|
||||||
|
|
||||||
|
$lehrfaecher_array = hasData($lehrfaecher_result) ? getData($lehrfaecher_result) : array();
|
||||||
|
|
||||||
|
$lehrveranstaltung->lehrfaecher = $lehrfaecher_array;
|
||||||
|
$this->terminateWithSuccess($lehrveranstaltung);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* (david) ggf. im naechsten release
|
||||||
|
* public function loadByOrganization($oe_kurzbz)
|
||||||
|
{
|
||||||
|
$studiensemester_kurzbz = $this->variablelib->getVar('semester_aktuell');
|
||||||
|
|
||||||
|
$lehrveranstaltungen = $this->LehrveranstaltungModel->getLvsByOrganization($oe_kurzbz);
|
||||||
|
$lehrveranstaltungen_data = $this->getDataOrTerminateWithError($lehrveranstaltungen);
|
||||||
|
$tree = [];
|
||||||
|
|
||||||
|
foreach ($lehrveranstaltungen_data as $lehrveranstaltung)
|
||||||
|
{
|
||||||
|
$lehreinheiten = $this->LehreinheitModel->getByLvidStudiensemester($lehrveranstaltung->lehrveranstaltung_id, $studiensemester_kurzbz);
|
||||||
|
$lehreinheiten_data = $this->getDataOrTerminateWithError($lehreinheiten);
|
||||||
|
|
||||||
|
if (!isset($lehrveranstaltung->_children))
|
||||||
|
{
|
||||||
|
|
||||||
|
$lehrveranstaltung->_children = $lehreinheiten_data;
|
||||||
|
}
|
||||||
|
$tree[] = $lehrveranstaltung;
|
||||||
|
}
|
||||||
|
$this->terminateWithSuccess($tree);
|
||||||
|
}*/
|
||||||
|
|
||||||
|
/*public function loadByFachbereich($fachbereich, $mitarbeiter_uid = null)
|
||||||
|
{
|
||||||
|
$studiensemester_kurzbz = $this->variablelib->getVar('semester_aktuell');
|
||||||
|
|
||||||
|
$this->LehreinheitModel->getLvsByFachbereich($fachbereich, $studiensemester_kurzbz, $mitarbeiter_uid);
|
||||||
|
}*/
|
||||||
|
private function _setAuthUID()
|
||||||
|
{
|
||||||
|
$this->_uid = getAuthUID();
|
||||||
|
|
||||||
|
if (!$this->_uid)
|
||||||
|
show_error('User authentification failed');
|
||||||
|
}
|
||||||
|
|
||||||
|
private function assignUniqueIndex(&$nodes, &$counter)
|
||||||
|
{
|
||||||
|
foreach ($nodes as &$node)
|
||||||
|
{
|
||||||
|
$node->uniqueindex = $counter++;
|
||||||
|
if (!empty($node->_children) && is_array($node->_children))
|
||||||
|
{
|
||||||
|
$this->assignUniqueIndex($node->_children, $counter);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private function getStudiensemesterKurzbz($studiensemester_kurzbz = null)
|
||||||
|
{
|
||||||
|
if (!is_null($studiensemester_kurzbz))
|
||||||
|
{
|
||||||
|
$studiensemester_result = $this->_ci->StudiensemesterModel->load($studiensemester_kurzbz);
|
||||||
|
|
||||||
|
if (isError($studiensemester_result) || !hasData($studiensemester_result))
|
||||||
|
$this->terminateWithError( $this->p->t('ui', 'ungueltigeParameter'), self::ERROR_TYPE_GENERAL);
|
||||||
|
|
||||||
|
return getData($studiensemester_result)[0]->studiensemester_kurzbz;
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->terminateWithError($this->p->t('ui', 'ungueltigeParameter'), self::ERROR_TYPE_GENERAL);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -637,7 +637,7 @@ class ProfilUpdate extends FHCAPI_Controller
|
|||||||
//? Send email to the Studiengangsassistentinnen
|
//? Send email to the Studiengangsassistentinnen
|
||||||
$this->StudentModel->addSelect(["public.tbl_studiengang.email"]);
|
$this->StudentModel->addSelect(["public.tbl_studiengang.email"]);
|
||||||
$this->StudentModel->addJoin("public.tbl_benutzer", "public.tbl_benutzer.uid = public.tbl_student.student_uid");
|
$this->StudentModel->addJoin("public.tbl_benutzer", "public.tbl_benutzer.uid = public.tbl_student.student_uid");
|
||||||
$this->StudentModel->addJoin("public.tbl_prestudent", "public.tbl_benutzer.person_id = public.tbl_prestudent.person_id");
|
$this->StudentModel->addJoin("public.tbl_prestudent", "public.tbl_benutzer.person_id = public.tbl_prestudent.person_id and public.tbl_student.studiengang_kz = public.tbl_prestudent.studiengang_kz");
|
||||||
$this->StudentModel->addJoin("public.tbl_prestudentstatus", "public.tbl_prestudentstatus.prestudent_id = public.tbl_prestudent.prestudent_id");
|
$this->StudentModel->addJoin("public.tbl_prestudentstatus", "public.tbl_prestudentstatus.prestudent_id = public.tbl_prestudent.prestudent_id");
|
||||||
$this->StudentModel->addJoin("public.tbl_studiengang", "public.tbl_studiengang.studiengang_kz = public.tbl_prestudent.studiengang_kz");
|
$this->StudentModel->addJoin("public.tbl_studiengang", "public.tbl_studiengang.studiengang_kz = public.tbl_prestudent.studiengang_kz");
|
||||||
$this->StudentModel->addGroupBy(["public.tbl_studiengang.email"]);
|
$this->StudentModel->addGroupBy(["public.tbl_studiengang.email"]);
|
||||||
@@ -706,7 +706,13 @@ class ProfilUpdate extends FHCAPI_Controller
|
|||||||
|
|
||||||
private function setStatusOnUpdateRequest($id, $status, $status_message)
|
private function setStatusOnUpdateRequest($id, $status, $status_message)
|
||||||
{
|
{
|
||||||
return $this->ProfilUpdateModel->update([$id], ["status" => $status, "status_timestamp" => "NOW()", "status_message" => $status_message]);
|
return $this->ProfilUpdateModel->update([$id], [
|
||||||
|
"status" => $status,
|
||||||
|
"status_timestamp" => "NOW()",
|
||||||
|
"status_message" => $status_message,
|
||||||
|
"updateamum" => "NOW()",
|
||||||
|
"updatevon" => getAuthUID()
|
||||||
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
private function updateRequestedChange($id, $requested_change)
|
private function updateRequestedChange($id, $requested_change)
|
||||||
@@ -716,13 +722,12 @@ class ProfilUpdate extends FHCAPI_Controller
|
|||||||
|
|
||||||
private function deleteOldVersionFile($dms_id)
|
private function deleteOldVersionFile($dms_id)
|
||||||
{
|
{
|
||||||
|
if (!isset($dms_id)) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
// starting the transaction
|
// starting the transaction
|
||||||
$this->db->trans_start();
|
$this->db->trans_start();
|
||||||
|
|
||||||
|
|
||||||
if (!isset($dms_id)) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
//? delete the file from the profilUpdate first
|
//? delete the file from the profilUpdate first
|
||||||
$profilUpdateFileDelete = $this->ProfilUpdateModel->removeFileFromProfilUpdate($dms_id);
|
$profilUpdateFileDelete = $this->ProfilUpdateModel->removeFileFromProfilUpdate($dms_id);
|
||||||
@@ -777,13 +782,8 @@ class ProfilUpdate extends FHCAPI_Controller
|
|||||||
|
|
||||||
$res = $this->StudentModel->execReadOnlyQuery($query, [$student_uid]);
|
$res = $this->StudentModel->execReadOnlyQuery($query, [$student_uid]);
|
||||||
$res = $this->getDataOrTerminateWithError($res, $this->p->t('profilUpdate', 'profilUpdate_loadingOE_error'));
|
$res = $this->getDataOrTerminateWithError($res, $this->p->t('profilUpdate', 'profilUpdate_loadingOE_error'));
|
||||||
$res = array_map(
|
$oe = ($res[0])->oe_kurzbz;
|
||||||
function ($item) {
|
return $oe;
|
||||||
return $item->oe_kurzbz;
|
|
||||||
},
|
|
||||||
$res
|
|
||||||
);
|
|
||||||
return $res;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private function handleAdresse($requested_change, $personID)
|
private function handleAdresse($requested_change, $personID)
|
||||||
@@ -813,7 +813,7 @@ class ProfilUpdate extends FHCAPI_Controller
|
|||||||
$insert_adresse_id = $insertID;
|
$insert_adresse_id = $insertID;
|
||||||
$insert_adresse_id = $this->getDataOrTerminateWithError($insert_adresse_id, $this->p->t('profilUpdate', 'profilUpdate_insertAdresse_error'));
|
$insert_adresse_id = $this->getDataOrTerminateWithError($insert_adresse_id, $this->p->t('profilUpdate', 'profilUpdate_insertAdresse_error'));
|
||||||
if ($insert_adresse_id) {
|
if ($insert_adresse_id) {
|
||||||
$this->handleDupplicateZustellAdressen($requested_change['zustelladresse'], $insert_adresse_id);
|
$this->handleDupplicateZustellAdressen($requested_change['zustelladresse'], $insert_adresse_id, $personID);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
//! DELETE
|
//! DELETE
|
||||||
@@ -825,12 +825,33 @@ class ProfilUpdate extends FHCAPI_Controller
|
|||||||
}
|
}
|
||||||
//! UPDATE
|
//! UPDATE
|
||||||
else {
|
else {
|
||||||
$requested_change['updateamum'] = "NOW()";
|
$curadresse_res = $this->AdresseModel->load($adresse_id);
|
||||||
$requested_change['updatevon'] = getAuthUID();
|
$curadresse = ($this->getDataOrTerminateWithError($curadresse_res))[0];
|
||||||
$update_adresse_id = $this->AdresseModel->update($adresse_id, $requested_change);
|
|
||||||
$update_adresse_id = $this->getDataOrTerminateWithError($update_adresse_id, $this->p->t('profilUpdate', 'profilUpdate_updateAdresse_error'));
|
|
||||||
$this->handleDupplicateZustellAdressen($requested_change['zustelladresse'], $update_adresse_id);
|
|
||||||
|
|
||||||
|
if($curadresse->heimatadresse)
|
||||||
|
{
|
||||||
|
$tmpadresse = array_merge((array) $curadresse, $requested_change);
|
||||||
|
unset($tmpadresse["adresse_id"]);
|
||||||
|
$tmpadresse['insertamum'] = "NOW()";
|
||||||
|
$tmpadresse['insertvon'] = getAuthUID();
|
||||||
|
$tmpadresse['person_id'] = $personID;
|
||||||
|
unset($tmpadresse["heimatadresse"]);
|
||||||
|
unset($tmpadresse["updateamum"]);
|
||||||
|
unset($tmpadresse["updatevon"]);
|
||||||
|
|
||||||
|
$tmpadresse_res = $this->AdresseModel->insert($tmpadresse);
|
||||||
|
$tmpadresse_id = $this->getDataOrTerminateWithError($tmpadresse_res, $this->p->t('profilUpdate', 'profilUpdate_insertAdresse_error'));
|
||||||
|
$this->handleDupplicateZustellAdressen($requested_change['zustelladresse'], $tmpadresse_id, $personID);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
$requested_change['updateamum'] = "NOW()";
|
||||||
|
$requested_change['updatevon'] = getAuthUID();
|
||||||
|
|
||||||
|
$update_adresse_id = $this->AdresseModel->update($adresse_id, $requested_change);
|
||||||
|
$update_adresse_id = $this->getDataOrTerminateWithError($update_adresse_id, $this->p->t('profilUpdate', 'profilUpdate_updateAdresse_error'));
|
||||||
|
$this->handleDupplicateZustellAdressen($requested_change['zustelladresse'], $update_adresse_id, $personID);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return $insertID ?? null;
|
return $insertID ?? null;
|
||||||
}
|
}
|
||||||
@@ -852,7 +873,7 @@ class ProfilUpdate extends FHCAPI_Controller
|
|||||||
$insert_kontakt_id = $insertID;
|
$insert_kontakt_id = $insertID;
|
||||||
$insert_kontakt_id = $this->getDataOrTerminateWithError($insert_kontakt_id, $this->p->t('profilUpdate', 'profilUpdate_insertKontakt_error'));
|
$insert_kontakt_id = $this->getDataOrTerminateWithError($insert_kontakt_id, $this->p->t('profilUpdate', 'profilUpdate_insertKontakt_error'));
|
||||||
if ($insert_kontakt_id) {
|
if ($insert_kontakt_id) {
|
||||||
$this->handleDupplicateZustellKontakte($requested_change['zustellung'], $insert_kontakt_id);
|
$this->handleDupplicateZustellKontakte($requested_change['zustellung'], $insert_kontakt_id, $requested_change['kontakttyp'], $personID);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
//! DELETE
|
//! DELETE
|
||||||
@@ -869,18 +890,18 @@ class ProfilUpdate extends FHCAPI_Controller
|
|||||||
$update_kontakt_id = $this->KontaktModel->update($kontakt_id, $requested_change);
|
$update_kontakt_id = $this->KontaktModel->update($kontakt_id, $requested_change);
|
||||||
$update_kontakt_id = $this->getDataOrTerminateWithError($update_kontakt_id, $this->p->t('profilUpdate', 'profilUpdate_updateKontakt_error'));
|
$update_kontakt_id = $this->getDataOrTerminateWithError($update_kontakt_id, $this->p->t('profilUpdate', 'profilUpdate_updateKontakt_error'));
|
||||||
if ($update_kontakt_id) {
|
if ($update_kontakt_id) {
|
||||||
$this->handleDupplicateZustellKontakte($requested_change['zustellung'], $update_kontakt_id);
|
$this->handleDupplicateZustellKontakte($requested_change['zustellung'], $update_kontakt_id, $requested_change['kontakttyp'], $personID);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return isset($insertID) ? $insertID : null;
|
return isset($insertID) ? $insertID : null;
|
||||||
}
|
}
|
||||||
|
|
||||||
private function handleDupplicateZustellAdressen($zustellung, $adresse_id)
|
private function handleDupplicateZustellAdressen($zustellung, $adresse_id, $person_id)
|
||||||
{
|
{
|
||||||
if ($zustellung) {
|
if ($zustellung) {
|
||||||
$this->PersonModel->addSelect("public.tbl_adresse.adresse_id");
|
$this->PersonModel->addSelect("public.tbl_adresse.adresse_id");
|
||||||
$this->PersonModel->addJoin("public.tbl_adresse", "public.tbl_adresse.person_id = public.tbl_person.person_id");
|
$this->PersonModel->addJoin("public.tbl_adresse", "public.tbl_adresse.person_id = public.tbl_person.person_id");
|
||||||
$zustellAdressenArray = $this->PersonModel->loadWhere(["public.tbl_person.person_id" => $this->pid, "zustelladresse" => TRUE]);
|
$zustellAdressenArray = $this->PersonModel->loadWhere(["public.tbl_person.person_id" => $person_id, "zustelladresse" => TRUE]);
|
||||||
if (isError($zustellAdressenArray)) {
|
if (isError($zustellAdressenArray)) {
|
||||||
$this->terminateWithError($this->p->t('profilUpdate', 'profilUpdate_loadingZustellAdressen_error'));
|
$this->terminateWithError($this->p->t('profilUpdate', 'profilUpdate_loadingZustellAdressen_error'));
|
||||||
}
|
}
|
||||||
@@ -893,6 +914,8 @@ class ProfilUpdate extends FHCAPI_Controller
|
|||||||
return $adresse->adresse_id != $adresse_id;
|
return $adresse->adresse_id != $adresse_id;
|
||||||
});
|
});
|
||||||
|
|
||||||
|
$this->addMeta('bhzustelladressen', $zustellAdressenArray);
|
||||||
|
|
||||||
// remove the zustelladresse from all other zustelladressen
|
// remove the zustelladresse from all other zustelladressen
|
||||||
foreach ($zustellAdressenArray as $adresse) {
|
foreach ($zustellAdressenArray as $adresse) {
|
||||||
$this->AdresseModel->update($adresse->adresse_id, ["zustelladresse" => FALSE]);
|
$this->AdresseModel->update($adresse->adresse_id, ["zustelladresse" => FALSE]);
|
||||||
@@ -902,12 +925,16 @@ class ProfilUpdate extends FHCAPI_Controller
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private function handleDupplicateZustellKontakte($zustellung, $kontakt_id)
|
private function handleDupplicateZustellKontakte($zustellung, $kontakt_id, $kontakttyp, $person_id)
|
||||||
{
|
{
|
||||||
if ($zustellung) {
|
if ($zustellung) {
|
||||||
$this->PersonModel->addSelect("public.tbl_kontakt.kontakt_id");
|
$this->PersonModel->addSelect("public.tbl_kontakt.kontakt_id");
|
||||||
$this->PersonModel->addJoin("public.tbl_kontakt", "public.tbl_kontakt.person_id = public.tbl_person.person_id");
|
$this->PersonModel->addJoin("public.tbl_kontakt", "public.tbl_kontakt.person_id = public.tbl_person.person_id");
|
||||||
$zustellKontakteArray = $this->PersonModel->loadWhere(["public.tbl_person.person_id" => $this->pid, "zustellung" => TRUE]);
|
$zustellKontakteArray = $this->PersonModel->loadWhere([
|
||||||
|
"public.tbl_person.person_id" => $person_id,
|
||||||
|
"zustellung" => TRUE,
|
||||||
|
"kontakttyp" => $kontakttyp
|
||||||
|
]);
|
||||||
if (!isSuccess($zustellKontakteArray)) {
|
if (!isSuccess($zustellKontakteArray)) {
|
||||||
return error($this->p->t('profilUpdate', 'profilUpdate_loadingZustellkontakte_error'));
|
return error($this->p->t('profilUpdate', 'profilUpdate_loadingZustellkontakte_error'));
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,110 @@
|
|||||||
|
<?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');
|
||||||
|
|
||||||
|
class DirektGruppe extends FHCAPI_Controller
|
||||||
|
{
|
||||||
|
private $_ci;
|
||||||
|
public function __construct()
|
||||||
|
{
|
||||||
|
parent::__construct([
|
||||||
|
'add' => ['admin:rw', 'assistenz:rw'],
|
||||||
|
'delete' => ['admin:rw', 'assistenz:rw'],
|
||||||
|
'getByLehreinheit' => ['admin:r', 'assistenz:r'],
|
||||||
|
]);
|
||||||
|
|
||||||
|
$this->_ci = &get_instance();
|
||||||
|
|
||||||
|
$this->loadPhrases([
|
||||||
|
'ui'
|
||||||
|
]);
|
||||||
|
$this->_ci->load->model('education/Lehreinheitgruppe_model', 'LehreinheitgruppeModel');
|
||||||
|
$this->_ci->load->model('education/lehreinheit_model', 'LehreinheitModel');
|
||||||
|
$this->_ci->load->model('person/Benutzer_model', 'BenutzerModel');
|
||||||
|
}
|
||||||
|
|
||||||
|
public function add()
|
||||||
|
{
|
||||||
|
$uid = $this->input->post('uid');
|
||||||
|
$lehreinheit_id = $this->input->post('lehreinheit_id');
|
||||||
|
|
||||||
|
$this->checkPermission($lehreinheit_id, $uid);
|
||||||
|
|
||||||
|
$result = $this->_ci->LehreinheitgruppeModel->direktUserAdd($uid, $lehreinheit_id);
|
||||||
|
|
||||||
|
if (isError($result))
|
||||||
|
$this->terminateWithError(getError($result));
|
||||||
|
|
||||||
|
$this->terminateWithSuccess($result);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function delete()
|
||||||
|
{
|
||||||
|
$uid = $this->input->post('uid');
|
||||||
|
$lehreinheit_id = $this->input->post('lehreinheit_id');
|
||||||
|
|
||||||
|
$this->checkPermission($lehreinheit_id, $uid);
|
||||||
|
|
||||||
|
$result = $this->_ci->LehreinheitgruppeModel->direktUserDelete($uid, $lehreinheit_id);
|
||||||
|
|
||||||
|
if (isError($result))
|
||||||
|
$this->terminateWithError(getError($result));
|
||||||
|
|
||||||
|
$this->terminateWithSuccess($result);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getByLehreinheit($lehreinheit_id = null)
|
||||||
|
{
|
||||||
|
$this->checkPermission($lehreinheit_id);
|
||||||
|
$gruppen = $this->_ci->LehreinheitgruppeModel->getDirectGroup($lehreinheit_id);
|
||||||
|
$this->terminateWithSuccess(hasData($gruppen) ? getData($gruppen) : array());
|
||||||
|
}
|
||||||
|
|
||||||
|
private function checkPermission($lehreinheit_id, $uid = false)
|
||||||
|
{
|
||||||
|
if (is_null($lehreinheit_id) || !ctype_digit((string)$lehreinheit_id))
|
||||||
|
$this->terminateWithError( $this->p->t('ui', 'ungueltigeParameter'), self::ERROR_TYPE_GENERAL);
|
||||||
|
|
||||||
|
$lehreinheit_result = $this->_ci->LehreinheitModel->load($lehreinheit_id);
|
||||||
|
|
||||||
|
if (!hasData($lehreinheit_result) || isError($lehreinheit_result))
|
||||||
|
$this->terminateWithError( $this->p->t('ui', 'ungueltigeParameter'), self::ERROR_TYPE_GENERAL);
|
||||||
|
|
||||||
|
if ($uid)
|
||||||
|
{
|
||||||
|
$benuzuer_result = $this->_ci->BenutzerModel->load(array($uid));
|
||||||
|
if (!hasData($benuzuer_result) || isError($benuzuer_result))
|
||||||
|
$this->terminateWithError( $this->p->t('ui', 'ungueltigeParameter'), self::ERROR_TYPE_GENERAL);
|
||||||
|
}
|
||||||
|
|
||||||
|
$result = $this->_ci->LehreinheitModel->getOes($lehreinheit_id);
|
||||||
|
|
||||||
|
if (isError($result))
|
||||||
|
$this->terminateWithError(getError($result), self::ERROR_TYPE_GENERAL);
|
||||||
|
|
||||||
|
$oe_array = [];
|
||||||
|
if (hasData($result))
|
||||||
|
$oe_array = getData($result);
|
||||||
|
|
||||||
|
if (!$this->_ci->permissionlib->isBerechtigtMultipleOe('admin', $oe_array, 'suid') &&
|
||||||
|
!$this->_ci->permissionlib->isBerechtigtMultipleOe('assistenz', $oe_array, 'suid'))
|
||||||
|
$this->terminateWithError($this->p->t('ui', 'error_fieldWriteAccess'));
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,47 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
if (! defined('BASEPATH')) exit('No direct script access allowed');
|
||||||
|
|
||||||
|
class Favorites extends FHCAPI_Controller
|
||||||
|
{
|
||||||
|
public function __construct()
|
||||||
|
{
|
||||||
|
parent::__construct([
|
||||||
|
'index' => self::PERM_LOGGED,
|
||||||
|
'set' => self::PERM_LOGGED
|
||||||
|
]);
|
||||||
|
|
||||||
|
// Load models
|
||||||
|
$this->load->model('system/Variable_model', 'VariableModel');
|
||||||
|
}
|
||||||
|
|
||||||
|
public function index()
|
||||||
|
{
|
||||||
|
$result = $this->VariableModel->getVariables(getAuthUID(), ['lv_favorites']);
|
||||||
|
|
||||||
|
$data = $this->getDataOrTerminateWithError($result);
|
||||||
|
|
||||||
|
if (!$data)
|
||||||
|
$this->terminateWithSuccess(null);
|
||||||
|
else
|
||||||
|
$this->terminateWithSuccess(isset($data['lv_favorites']) ? $data['lv_favorites'] : null);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function set()
|
||||||
|
{
|
||||||
|
$this->load->library('form_validation');
|
||||||
|
|
||||||
|
$this->form_validation->set_rules('favorites', 'Favorites', 'required');
|
||||||
|
|
||||||
|
if (!$this->form_validation->run())
|
||||||
|
$this->terminateWithValidationErrors($this->form_validation->error_array());
|
||||||
|
|
||||||
|
$favorites = $this->input->post('favorites');
|
||||||
|
|
||||||
|
$result = $this->VariableModel->setVariable(getAuthUID(), 'lv_favorites', $favorites);
|
||||||
|
|
||||||
|
$this->getDataOrTerminateWithError($result);
|
||||||
|
|
||||||
|
$this->terminateWithSuccess(true);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,195 @@
|
|||||||
|
<?php
|
||||||
|
if (!defined('BASEPATH'))
|
||||||
|
exit('No direct script access allowed');
|
||||||
|
|
||||||
|
class Gruppe extends FHCAPI_Controller
|
||||||
|
{
|
||||||
|
private $_uid;
|
||||||
|
private $_ci;
|
||||||
|
public function __construct()
|
||||||
|
{
|
||||||
|
parent::__construct([
|
||||||
|
'add' => ['admin:rw', 'assistenz:rw'],
|
||||||
|
'delete' => ['admin:rw', 'assistenz:rw'],
|
||||||
|
'deleteFromLVPlan' => ['admin:rw', 'assistenz:rw'],
|
||||||
|
'getBenutzer' => ['admin:r', 'assistenz:r'],
|
||||||
|
'getAll' => ['admin:r', 'assistenz:r'],
|
||||||
|
'getByLehreinheit' => ['admin:r', 'assistenz:r'],
|
||||||
|
]);
|
||||||
|
|
||||||
|
$this->_ci = &get_instance();
|
||||||
|
$this->_setAuthUID();
|
||||||
|
$this->_ci->load->library('PhrasesLib');
|
||||||
|
$this->loadPhrases(
|
||||||
|
array(
|
||||||
|
'ui'
|
||||||
|
)
|
||||||
|
);
|
||||||
|
|
||||||
|
$this->_ci->load->model('organisation/Gruppe_model', 'GruppeModel');
|
||||||
|
$this->_ci->load->model('organisation/Lehrverband_model', 'LehrverbandModel');
|
||||||
|
$this->_ci->load->model('education/Lehreinheitgruppe_model', 'LehreinheitgruppeModel');
|
||||||
|
$this->_ci->load->model('person/Person_model', 'PersonModel');
|
||||||
|
$this->_ci->load->model('ressource/stundenplandev_model', 'StundenplandevModel');
|
||||||
|
}
|
||||||
|
|
||||||
|
public function delete()
|
||||||
|
{
|
||||||
|
$lehreinheitgruppe_id = $this->input->post('lehreinheitgruppe_id');
|
||||||
|
$lehreinheit_id = $this->input->post('lehreinheit_id');
|
||||||
|
|
||||||
|
if (is_null($lehreinheit_id) || !ctype_digit((string)$lehreinheit_id) || is_null($lehreinheitgruppe_id) || !ctype_digit((string)$lehreinheitgruppe_id))
|
||||||
|
$this->terminateWithError( $this->p->t('ui', 'ungueltigeParameter'), self::ERROR_TYPE_GENERAL);
|
||||||
|
|
||||||
|
$lehreinheitgruppe_result = $this->_ci->LehreinheitgruppeModel->loadWhere(array('lehreinheitgruppe_id' => $lehreinheitgruppe_id));
|
||||||
|
if (!hasData($lehreinheitgruppe_result) || isError($lehreinheitgruppe_result))
|
||||||
|
$this->terminateWithError( $this->p->t('ui', 'ungueltigeParameter'), self::ERROR_TYPE_GENERAL);
|
||||||
|
|
||||||
|
$this->checkPermission($lehreinheit_id);
|
||||||
|
|
||||||
|
$result = $this->_ci->LehreinheitgruppeModel->deleteGroup($lehreinheit_id, $lehreinheitgruppe_id);
|
||||||
|
|
||||||
|
if (isError($result))
|
||||||
|
$this->terminateWithError(getError($result));
|
||||||
|
|
||||||
|
$this->terminateWithSuccess($result);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function add()
|
||||||
|
{
|
||||||
|
$lehreinheit_id = $this->input->post('lehreinheit_id');
|
||||||
|
$gid = $this->input->post('gid');
|
||||||
|
$lehrverband = $this->input->post('lehrverband');
|
||||||
|
|
||||||
|
if (is_null($lehreinheit_id) || !ctype_digit((string)$lehreinheit_id) || is_null($gid) || !ctype_digit((string)$gid) || is_null($lehrverband))
|
||||||
|
$this->terminateWithError( $this->p->t('ui', 'ungueltigeParameter'), self::ERROR_TYPE_GENERAL);
|
||||||
|
|
||||||
|
$this->checkPermission($lehreinheit_id);
|
||||||
|
|
||||||
|
$result = $this->_ci->LehreinheitgruppeModel->addGroup($lehreinheit_id, $gid, !($lehrverband === 'false'));
|
||||||
|
|
||||||
|
if (isError($result))
|
||||||
|
$this->terminateWithError(getError($result));
|
||||||
|
|
||||||
|
$this->terminateWithSuccess($result);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getByLehreinheit($lehreinheit_id = null)
|
||||||
|
{
|
||||||
|
if (is_null($lehreinheit_id) || !ctype_digit((string)$lehreinheit_id))
|
||||||
|
$this->terminateWithError( $this->p->t('ui', 'ungueltigeParameter'), self::ERROR_TYPE_GENERAL);
|
||||||
|
|
||||||
|
$this->checkPermission($lehreinheit_id);
|
||||||
|
|
||||||
|
$gruppen = $this->_ci->LehreinheitgruppeModel->getByLehreinheit($lehreinheit_id);
|
||||||
|
$this->terminateWithSuccess(hasData($gruppen) ? getData($gruppen) : array());
|
||||||
|
}
|
||||||
|
|
||||||
|
public function deleteFromLVPlan()
|
||||||
|
{
|
||||||
|
$lehreinheit_id = $this->input->post('lehreinheit_id');
|
||||||
|
$lehreinheitgruppe_id = $this->input->post('lehreinheitgruppe_id');
|
||||||
|
|
||||||
|
if (is_null($lehreinheit_id) || !ctype_digit((string)$lehreinheit_id) || is_null($lehreinheitgruppe_id) || !ctype_digit((string)$lehreinheitgruppe_id))
|
||||||
|
$this->terminateWithError( $this->p->t('ui', 'ungueltigeParameter'), self::ERROR_TYPE_GENERAL);
|
||||||
|
|
||||||
|
$lehreinheitgruppe_result = $this->_ci->LehreinheitgruppeModel->loadWhere(array('lehreinheitgruppe_id' => $lehreinheitgruppe_id));
|
||||||
|
if (!hasData($lehreinheitgruppe_result) || isError($lehreinheitgruppe_result))
|
||||||
|
$this->terminateWithError( $this->p->t('ui', 'ungueltigeParameter'), self::ERROR_TYPE_GENERAL);
|
||||||
|
|
||||||
|
$this->checkPermission($lehreinheit_id);
|
||||||
|
|
||||||
|
$result = $this->_ci->StundenplandevModel->deleteGroupPlanning($lehreinheit_id, $lehreinheitgruppe_id);
|
||||||
|
|
||||||
|
if (isError($result))
|
||||||
|
$this->terminateWithError(getError($result));
|
||||||
|
|
||||||
|
$this->terminateWithSuccess($result);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public function getAll()
|
||||||
|
{
|
||||||
|
$this->_ci->GruppeModel->addSelect('gruppe_kurzbz,
|
||||||
|
studiengang_kz,
|
||||||
|
semester,
|
||||||
|
bezeichnung,
|
||||||
|
gid,
|
||||||
|
\'false\' as lehrverband');
|
||||||
|
$gruppen_result = $this->_ci->GruppeModel->loadWhere(array('sichtbar' => true, 'aktiv' => true, 'lehre' => true, 'direktinskription' => false, 'semester IS NOT NULL' => null));
|
||||||
|
|
||||||
|
$gruppen_array = array();
|
||||||
|
|
||||||
|
if (isError($gruppen_result))
|
||||||
|
$this->terminateWithError(getError($gruppen_result), self::ERROR_TYPE_GENERAL);
|
||||||
|
|
||||||
|
if (hasData($gruppen_result))
|
||||||
|
$gruppen_array = getData($gruppen_result);
|
||||||
|
|
||||||
|
$this->_ci->LehrverbandModel->addSelect('CONCAT(UPPER(CONCAT(typ, kurzbz)), \'\', semester, verband, COALESCE(gruppe,\'\')) as gruppe_kurzbz,
|
||||||
|
studiengang_kz,
|
||||||
|
semester,
|
||||||
|
tbl_lehrverband.bezeichnung,
|
||||||
|
gid,
|
||||||
|
\'true\' as lehrverband');
|
||||||
|
$this->_ci->LehrverbandModel->addJoin('public.tbl_studiengang', 'studiengang_kz');
|
||||||
|
$this->_ci->LehrverbandModel->addOrder('verband');
|
||||||
|
$this->_ci->LehrverbandModel->addOrder('gruppe');
|
||||||
|
$lehrverband_result = $this->_ci->LehrverbandModel->loadWhere(array('tbl_lehrverband.aktiv' => true));
|
||||||
|
|
||||||
|
$lehrverband_array = array();
|
||||||
|
|
||||||
|
if (isError($lehrverband_result))
|
||||||
|
$this->terminateWithError(getError($lehrverband_result), self::ERROR_TYPE_GENERAL);
|
||||||
|
|
||||||
|
if (hasData($lehrverband_result))
|
||||||
|
$lehrverband_array = getData($lehrverband_result);
|
||||||
|
|
||||||
|
$all_gruppen = array_merge($gruppen_array, $lehrverband_array);
|
||||||
|
|
||||||
|
$this->terminateWithSuccess($all_gruppen);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getBenutzer()
|
||||||
|
{
|
||||||
|
$this->_ci->PersonModel->addSelect('vorname, nachname, uid, semester, UPPER(CONCAT(tbl_studiengang.typ, tbl_studiengang.kurzbz)) as studiengang');
|
||||||
|
$this->_ci->PersonModel->addJoin('public.tbl_benutzer', 'person_id');
|
||||||
|
$this->_ci->PersonModel->addJoin('public.tbl_mitarbeiter', 'uid = mitarbeiter_uid', 'LEFT');
|
||||||
|
$this->_ci->PersonModel->addJoin('public.tbl_student', 'uid = student_uid', 'LEFT');
|
||||||
|
$this->_ci->PersonModel->addJoin('public.tbl_studiengang', 'studiengang_kz', 'LEFT');
|
||||||
|
|
||||||
|
$personen = $this->_ci->PersonModel->loadWhere(array('tbl_benutzer.aktiv' => true));
|
||||||
|
$this->terminateWithSuccess(hasData($personen) ? getData($personen) : array());
|
||||||
|
}
|
||||||
|
|
||||||
|
private function _setAuthUID()
|
||||||
|
{
|
||||||
|
$this->_uid = getAuthUID();
|
||||||
|
|
||||||
|
if (!$this->_uid)
|
||||||
|
show_error('User authentification failed');
|
||||||
|
}
|
||||||
|
|
||||||
|
private function checkPermission($lehreinheit_id)
|
||||||
|
{
|
||||||
|
$lehreinheit_result = $this->_ci->LehreinheitModel->load($lehreinheit_id);
|
||||||
|
|
||||||
|
if (!hasData($lehreinheit_result) || isError($lehreinheit_result))
|
||||||
|
$this->terminateWithError( $this->p->t('ui', 'ungueltigeParameter'), self::ERROR_TYPE_GENERAL);
|
||||||
|
|
||||||
|
$result = $this->_ci->LehreinheitModel->getOes($lehreinheit_id);
|
||||||
|
|
||||||
|
if (isError($result))
|
||||||
|
$this->terminateWithError(getError($result), self::ERROR_TYPE_GENERAL);
|
||||||
|
|
||||||
|
$oe_array = [];
|
||||||
|
if (hasData($result))
|
||||||
|
$oe_array = getData($result);
|
||||||
|
|
||||||
|
if (!$this->_ci->permissionlib->isBerechtigtMultipleOe('admin', $oe_array, 'suid') &&
|
||||||
|
!$this->_ci->permissionlib->isBerechtigtMultipleOe('assistenz', $oe_array, 'suid') &&
|
||||||
|
!$this->_ci->permissionlib->isBerechtigtMultipleOe('lv-plan', $oe_array, 'suid'))
|
||||||
|
$this->terminateWithError($this->p->t('ui', 'error_fieldWriteAccess'));
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,446 @@
|
|||||||
|
<?php
|
||||||
|
if (!defined('BASEPATH'))
|
||||||
|
exit('No direct script access allowed');
|
||||||
|
|
||||||
|
class Lehreinheit extends FHCAPI_Controller
|
||||||
|
{
|
||||||
|
private $_uid;
|
||||||
|
private $_ci;
|
||||||
|
public function __construct()
|
||||||
|
{
|
||||||
|
parent::__construct([
|
||||||
|
'add' => ['admin:rw', 'assistenz:rw'],
|
||||||
|
'copy' => ['admin:rw', 'assistenz:rw'],
|
||||||
|
'delete' => ['admin:rw', 'assistenz:rw'],
|
||||||
|
'update' => ['admin:rw', 'assistenz:rw'],
|
||||||
|
|
||||||
|
'get' => ['admin:r', 'assistenz:r'],
|
||||||
|
'getStudiensemester' => ['admin:r', 'assistenz:r'],
|
||||||
|
'getLehrfach' => ['admin:r', 'assistenz:r'],
|
||||||
|
'getSprache' => ['admin:r', 'assistenz:r'],
|
||||||
|
'getRaumtyp' => ['admin:r', 'assistenz:r'],
|
||||||
|
'getLehrform' => ['admin:r', 'assistenz:r']
|
||||||
|
]);
|
||||||
|
|
||||||
|
$this->_ci = &get_instance();
|
||||||
|
$this->_setAuthUID();
|
||||||
|
$this->_ci->load->library('VariableLib', ['uid' => $this->_uid]);
|
||||||
|
$this->_ci->load->library('PhrasesLib');
|
||||||
|
$this->loadPhrases(
|
||||||
|
array(
|
||||||
|
'global',
|
||||||
|
'ui'
|
||||||
|
)
|
||||||
|
);
|
||||||
|
|
||||||
|
$this->_ci->load->model('education/Lehreinheit_model', 'LehreinheitModel');
|
||||||
|
$this->_ci->load->model('education/Lehreinheitgruppe_model', 'LehreinheitgruppeModel');
|
||||||
|
$this->_ci->load->model('education/Lehreinheitmitarbeiter_model', 'LehreinheitmitarbeiterModel');
|
||||||
|
}
|
||||||
|
|
||||||
|
public function get($lehreinheit_id)
|
||||||
|
{
|
||||||
|
$lehreinheit = $this->checkLehreinheit($lehreinheit_id);
|
||||||
|
$lehreinheit->lehrfaecher = $this->getLehrfaecher($lehreinheit);
|
||||||
|
$this->terminateWithSuccess($lehreinheit);
|
||||||
|
}
|
||||||
|
|
||||||
|
private function getLehrfaecher($lehreinheit)
|
||||||
|
{
|
||||||
|
$lehrfacher_array = array($lehreinheit->lehrfach_id);
|
||||||
|
$this->_ci->LehreinheitModel->addSelect('lehrveranstaltung_id_kompatibel');
|
||||||
|
$this->_ci->LehreinheitModel->addJoin('lehre.tbl_lehrveranstaltung_kompatibel', 'lehrveranstaltung_id');
|
||||||
|
$lehrfaecher = $this->_ci->LehreinheitModel->loadWhere(array('lehrveranstaltung_id' => $lehreinheit->lehrveranstaltung_id));
|
||||||
|
|
||||||
|
|
||||||
|
if (hasData($lehrfaecher))
|
||||||
|
$lehrfaecher_array = array_merge($lehrfacher_array, array_column(getData($lehrfaecher), 'lehrveranstaltung_id_kompatibel'));
|
||||||
|
|
||||||
|
$lehrfaecher_array[] = $lehreinheit->lehrveranstaltung_id;
|
||||||
|
|
||||||
|
$this->_ci->LehrveranstaltungModel->addDistinct('lehrfach_id');
|
||||||
|
$this->_ci->LehrveranstaltungModel->addSelect("tbl_lehrveranstaltung.lehrveranstaltung_id, CONCAT(tbl_lehrveranstaltung.bezeichnung || '(' || tbl_lehrveranstaltung.oe_kurzbz || ')') as lehrfach");
|
||||||
|
$this->_ci->LehrveranstaltungModel->db->where_in('tbl_lehrveranstaltung.lehrveranstaltung_id', $lehrfaecher_array);
|
||||||
|
$lehrfaecher_result = $this->_ci->LehrveranstaltungModel->load();
|
||||||
|
|
||||||
|
return hasData($lehrfaecher_result) ? getData($lehrfaecher_result) : array();
|
||||||
|
}
|
||||||
|
|
||||||
|
public function add()
|
||||||
|
{
|
||||||
|
$lehrveranstaltung_id = $this->input->post('lehrveranstaltung_id');
|
||||||
|
|
||||||
|
if (is_null($lehrveranstaltung_id) || !ctype_digit((string)$lehrveranstaltung_id))
|
||||||
|
$this->terminateWithError( $this->p->t('ui', 'ungueltigeParameter'), self::ERROR_TYPE_GENERAL);
|
||||||
|
|
||||||
|
$lehrveranstaltung_result = $this->_ci->LehrveranstaltungModel->loadWhere(array('lehrveranstaltung_id' => $lehrveranstaltung_id));
|
||||||
|
|
||||||
|
if (!hasData($lehrveranstaltung_result) || isError($lehrveranstaltung_result))
|
||||||
|
$this->terminateWithError( $this->p->t('ui', 'ungueltigeParameter'), self::ERROR_TYPE_GENERAL);
|
||||||
|
|
||||||
|
$lehrveranstaltung = getData($lehrveranstaltung_result)[0];
|
||||||
|
|
||||||
|
$oe_result = $this->_ci->LehrveranstaltungModel->getAllOe($lehrveranstaltung->lehrveranstaltung_id);
|
||||||
|
$oe_array = hasData($oe_result) ? array_column(getData($oe_result), 'oe_kurzbz') : array();
|
||||||
|
|
||||||
|
if (!$this->_ci->permissionlib->isBerechtigtMultipleOe('admin', $oe_array, 'suid') &&
|
||||||
|
!$this->_ci->permissionlib->isBerechtigtMultipleOe('assistenz', $oe_array, 'suid') &&
|
||||||
|
!$this->_ci->permissionlib->isBerechtigtMultipleOe('lv-plan', $oe_array, 'suid'))
|
||||||
|
$this->terminateWithError($this->p->t('ui', 'error_fieldWriteAccess'));
|
||||||
|
|
||||||
|
$this->_ci->load->library('form_validation');
|
||||||
|
|
||||||
|
$updatableFields = array(
|
||||||
|
'lehrveranstaltung_id',
|
||||||
|
'studiensemester_kurzbz',
|
||||||
|
'lehrfach_id',
|
||||||
|
'lehrform_kurzbz',
|
||||||
|
'stundenblockung',
|
||||||
|
'wochenrythmus',
|
||||||
|
'gewicht',
|
||||||
|
'start_kw',
|
||||||
|
'raumtyp',
|
||||||
|
'raumtypalternativ',
|
||||||
|
'sprache',
|
||||||
|
'lehre',
|
||||||
|
'anmerkung',
|
||||||
|
'lvnr',
|
||||||
|
'unr',
|
||||||
|
);
|
||||||
|
|
||||||
|
foreach ($updatableFields as $field)
|
||||||
|
{
|
||||||
|
switch ($field) {
|
||||||
|
case 'lehrveranstaltung_id':
|
||||||
|
$this->form_validation->set_rules($field, 'Lehrveranstaltung ID', 'required|integer');
|
||||||
|
break;
|
||||||
|
case 'studiensemester_kurzbz':
|
||||||
|
$this->form_validation->set_rules($field, 'Studiensemester', 'required|max_length[16]');
|
||||||
|
break;
|
||||||
|
case 'lehrfach_id':
|
||||||
|
$this->form_validation->set_rules($field, 'Lehrfach ID', 'required|integer');
|
||||||
|
break;
|
||||||
|
case 'lehrform_kurzbz':
|
||||||
|
$this->form_validation->set_rules($field, 'Lehrform', 'required|max_length[8]');
|
||||||
|
break;
|
||||||
|
case 'stundenblockung':
|
||||||
|
$this->form_validation->set_rules($field, 'Stundenblockung', 'required|integer|greater_than_equal_to[0]');
|
||||||
|
break;
|
||||||
|
case 'wochenrythmus':
|
||||||
|
$this->form_validation->set_rules($field, 'Wochenrhytmus', 'required|integer|greater_than_equal_to[0]');
|
||||||
|
break;
|
||||||
|
case 'start_kw':
|
||||||
|
$this->form_validation->set_rules($field, 'Start KW', 'integer|greater_than[0]|less_than_equal_to[53]');
|
||||||
|
break;
|
||||||
|
case 'gewicht':
|
||||||
|
$this->form_validation->set_rules($field, 'Gewicht', 'numeric');
|
||||||
|
break;
|
||||||
|
case 'raumtyp':
|
||||||
|
$this->form_validation->set_rules($field, 'Raumtyp', 'required|max_length[16]');
|
||||||
|
break;
|
||||||
|
case 'raumtypalternativ':
|
||||||
|
$this->form_validation->set_rules($field, 'Raumtyp Alternativ', 'required|max_length[16]');
|
||||||
|
break;
|
||||||
|
case 'sprache':
|
||||||
|
$this->form_validation->set_rules($field, 'Sprache', 'required|max_length[16]');
|
||||||
|
break;
|
||||||
|
case 'lvnr':
|
||||||
|
$this->form_validation->set_rules($field, 'LVNR', 'integer');
|
||||||
|
break;
|
||||||
|
case 'unr':
|
||||||
|
$this->form_validation->set_rules($field, 'UNR', 'integer');
|
||||||
|
break;
|
||||||
|
case 'lehre':
|
||||||
|
$this->form_validation->set_rules($field, 'Lehre', 'trim');
|
||||||
|
break;
|
||||||
|
case 'anmerkung':
|
||||||
|
$this->form_validation->set_rules($field, 'Anmerkung', 'trim');
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($this->form_validation->run() === false)
|
||||||
|
{
|
||||||
|
$this->terminateWithValidationErrors($this->form_validation->error_array());
|
||||||
|
}
|
||||||
|
|
||||||
|
$updateData = array();
|
||||||
|
foreach ($updatableFields as $field)
|
||||||
|
{
|
||||||
|
$value = $this->input->post($field);
|
||||||
|
|
||||||
|
if ($value !== null)
|
||||||
|
{
|
||||||
|
$updateData[$field] = $value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$updateData['insertvon'] = $this->_uid;
|
||||||
|
$updateData['insertamum'] = date('Y-m-d H:i:s');
|
||||||
|
|
||||||
|
$result = $this->_ci->LehreinheitModel->insert(
|
||||||
|
$updateData
|
||||||
|
);
|
||||||
|
|
||||||
|
if (!isset($updateData['unr']))
|
||||||
|
{
|
||||||
|
$unr = getData($result);
|
||||||
|
$this->_ci->LehreinheitModel->update($unr, array('unr' => $unr));
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->terminateWithSuccess($result);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function copy()
|
||||||
|
{
|
||||||
|
$lehreinheit_id = $this->input->post('lehreinheit_id');
|
||||||
|
$art = $this->input->post('art');
|
||||||
|
|
||||||
|
$lehreinheit_old = $this->checkLehreinheit($lehreinheit_id);
|
||||||
|
$this->checkPermission($lehreinheit_old->lehreinheit_id);
|
||||||
|
|
||||||
|
$lehreinheit_new = $lehreinheit_old;
|
||||||
|
|
||||||
|
$lehreinheit_new->unr = null;
|
||||||
|
unset($lehreinheit_new->lehreinheit_id);
|
||||||
|
$lehreinheit_new->updateamum = date('Y-m-d H:i:s');
|
||||||
|
$lehreinheit_new->updatevon = $this->_uid;
|
||||||
|
$lehreinheit_new->insertamum = date('Y-m-d H:i:s');
|
||||||
|
$lehreinheit_new->insertvon = $this->_uid;
|
||||||
|
|
||||||
|
$insert_result = $this->_ci->LehreinheitModel->insert($lehreinheit_new);
|
||||||
|
|
||||||
|
if (isError($insert_result))
|
||||||
|
$this->terminateWithError(getError($insert_result), self::ERROR_TYPE_GENERAL);
|
||||||
|
|
||||||
|
$lehreinheit_id_new = getData($insert_result);
|
||||||
|
|
||||||
|
$this->_ci->LehreinheitModel->update(array('lehreinheit_id' => $lehreinheit_id_new), array('unr' => $lehreinheit_id_new));
|
||||||
|
if (in_array($art, array('gruppen', 'alle')))
|
||||||
|
{
|
||||||
|
$gruppen_result = $this->_ci->LehreinheitgruppeModel->loadWhere(array('lehreinheit_id' => $lehreinheit_id));
|
||||||
|
|
||||||
|
if (isError($gruppen_result))
|
||||||
|
$this->terminateWithError(getError($gruppen_result), self::ERROR_TYPE_GENERAL);
|
||||||
|
|
||||||
|
if (hasData($gruppen_result))
|
||||||
|
{
|
||||||
|
$gruppen = getData($gruppen_result);
|
||||||
|
|
||||||
|
foreach ($gruppen as $gruppe)
|
||||||
|
{
|
||||||
|
$gruppe_new = $gruppe;
|
||||||
|
unset($gruppe_new->lehreinheitgruppe_id);
|
||||||
|
$gruppe_new->lehreinheit_id = $lehreinheit_id_new;
|
||||||
|
$gruppe_new->insertamum = date('Y-m-d H:i:s');
|
||||||
|
$gruppe_new->insertvon = $this->_uid;
|
||||||
|
$gruppe_new->updateamum = date('Y-m-d H:i:s');
|
||||||
|
$gruppe_new->updatevon = $this->_uid;
|
||||||
|
|
||||||
|
$gruppe_new_result = $this->_ci->LehreinheitgruppeModel->insert($gruppe_new);
|
||||||
|
|
||||||
|
if (isError($gruppe_new_result))
|
||||||
|
$this->terminateWithError(getError($gruppe_new_result), self::ERROR_TYPE_GENERAL);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (in_array($art, array('lektoren', 'alle')))
|
||||||
|
{
|
||||||
|
$lektoren_result = $this->_ci->LehreinheitmitarbeiterModel->loadWhere(array('lehreinheit_id' => $lehreinheit_id));
|
||||||
|
|
||||||
|
if (isError($lektoren_result))
|
||||||
|
$this->terminateWithError(getError($lektoren_result), self::ERROR_TYPE_GENERAL);
|
||||||
|
|
||||||
|
if (hasData($lektoren_result))
|
||||||
|
{
|
||||||
|
$lektoren = getData($lektoren_result);
|
||||||
|
|
||||||
|
foreach ($lektoren as $lektor)
|
||||||
|
{
|
||||||
|
|
||||||
|
$lektor_new = $lektor;
|
||||||
|
$lektor_new->lehreinheit_id = $lehreinheit_id_new;
|
||||||
|
$lektor_new->insertamum = date('Y-m-d H:i:s');
|
||||||
|
$lektor_new->insertvon = $this->_uid;
|
||||||
|
$lektor_new->updateamum = date('Y-m-d H:i:s');
|
||||||
|
$lektor_new->updatevon = $this->_uid;
|
||||||
|
unset($lektor_new->vertrag_id);
|
||||||
|
|
||||||
|
$lektor_new_result = $this->_ci->LehreinheitmitarbeiterModel->insert((array)$lektor_new);
|
||||||
|
|
||||||
|
if (isError($lektor_new_result))
|
||||||
|
$this->terminateWithError(getError($lektor_new_result), self::ERROR_TYPE_GENERAL);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->terminateWithSuccess("Erfolgeich gespeichert");
|
||||||
|
}
|
||||||
|
|
||||||
|
public function delete()
|
||||||
|
{
|
||||||
|
$lehreinheit_id = $this->input->post('lehreinheit_id');
|
||||||
|
$lehreinheit = $this->checkLehreinheit($lehreinheit_id);
|
||||||
|
$this->checkPermission($lehreinheit->lehreinheit_id);
|
||||||
|
|
||||||
|
$result = $this->_ci->LehreinheitModel->deleteLehreinheit($lehreinheit->lehreinheit_id);
|
||||||
|
|
||||||
|
if (isError($result))
|
||||||
|
$this->terminateWithValidationErrors(getError($result));
|
||||||
|
|
||||||
|
$this->terminateWithSuccess('Erfolgreich geloescht');
|
||||||
|
}
|
||||||
|
|
||||||
|
public function update()
|
||||||
|
{
|
||||||
|
$lehreinheit = $this->checkLehreinheit($this->input->post('lehreinheit_id'));
|
||||||
|
|
||||||
|
$this->checkPermission($lehreinheit->lehreinheit_id);
|
||||||
|
|
||||||
|
$this->_ci->load->library('form_validation');
|
||||||
|
|
||||||
|
$formData = $this->input->post('formData');
|
||||||
|
|
||||||
|
$updatableFields = array(
|
||||||
|
'lehrveranstaltung_id',
|
||||||
|
'studiensemester_kurzbz',
|
||||||
|
'lehrfach_id',
|
||||||
|
'lehrform_kurzbz',
|
||||||
|
'stundenblockung',
|
||||||
|
'wochenrythmus',
|
||||||
|
'gewicht',
|
||||||
|
'start_kw',
|
||||||
|
'raumtyp',
|
||||||
|
'raumtypalternativ',
|
||||||
|
'sprache',
|
||||||
|
'lehre',
|
||||||
|
'anmerkung',
|
||||||
|
'lvnr',
|
||||||
|
'unr',
|
||||||
|
);
|
||||||
|
|
||||||
|
$this->form_validation->set_data($formData);
|
||||||
|
|
||||||
|
foreach ($updatableFields as $field)
|
||||||
|
{
|
||||||
|
if (array_key_exists($field, $formData))
|
||||||
|
{
|
||||||
|
switch ($field)
|
||||||
|
{
|
||||||
|
case 'lehrveranstaltung_id':
|
||||||
|
$this->form_validation->set_rules($field, 'Lehrveranstaltung ID', 'required|integer');
|
||||||
|
break;
|
||||||
|
case 'studiensemester_kurzbz':
|
||||||
|
$this->form_validation->set_rules($field, 'Studiensemester', 'required|max_length[16]');
|
||||||
|
break;
|
||||||
|
case 'lehrfach_id':
|
||||||
|
$this->form_validation->set_rules($field, 'Lehrfach ID', 'required|integer');
|
||||||
|
break;
|
||||||
|
case 'lehrform_kurzbz':
|
||||||
|
$this->form_validation->set_rules($field, 'Lehrform', 'required|max_length[8]');
|
||||||
|
break;
|
||||||
|
case 'stundenblockung':
|
||||||
|
$this->form_validation->set_rules($field, 'Stundenblockung', 'required|integer|greater_than_equal_to[0]');
|
||||||
|
break;
|
||||||
|
case 'wochenrythmus':
|
||||||
|
$this->form_validation->set_rules($field, 'Wochenrhytmus', 'required|integer|greater_than_equal_to[0]');
|
||||||
|
break;
|
||||||
|
case 'start_kw':
|
||||||
|
$this->form_validation->set_rules($field, 'Start KW', 'integer|greater_than[0]|less_than_equal_to[53]');
|
||||||
|
break;
|
||||||
|
case 'gewicht':
|
||||||
|
$this->form_validation->set_rules($field, 'Gewicht', 'numeric|greater_than_equal_to[0]');
|
||||||
|
break;
|
||||||
|
case 'raumtyp':
|
||||||
|
$this->form_validation->set_rules($field, 'Raumtyp', 'required|max_length[16]');
|
||||||
|
break;
|
||||||
|
case 'raumtypalternativ':
|
||||||
|
$this->form_validation->set_rules($field, 'Raumtyp Alternativ', 'required|max_length[16]');
|
||||||
|
break;
|
||||||
|
case 'sprache':
|
||||||
|
$this->form_validation->set_rules($field, 'Sprache', 'required|max_length[16]');
|
||||||
|
break;
|
||||||
|
case 'lvnr':
|
||||||
|
$this->form_validation->set_rules($field, 'LVNR', 'integer');
|
||||||
|
break;
|
||||||
|
case 'unr':
|
||||||
|
$this->form_validation->set_rules($field, 'UNR', 'integer|greater_than_equal_to[0]');
|
||||||
|
break;
|
||||||
|
case 'lehre':
|
||||||
|
$this->form_validation->set_rules($field, 'Lehre', 'trim');
|
||||||
|
break;
|
||||||
|
case 'anmerkung':
|
||||||
|
$this->form_validation->set_rules($field, 'Anmerkung', 'trim');
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($this->form_validation->run() === false)
|
||||||
|
{
|
||||||
|
$this->terminateWithValidationErrors($this->form_validation->error_array());
|
||||||
|
}
|
||||||
|
|
||||||
|
$updateData = [];
|
||||||
|
foreach ($updatableFields as $field)
|
||||||
|
{
|
||||||
|
if (array_key_exists($field, $formData))
|
||||||
|
{
|
||||||
|
$updateData[$field] = $formData[$field];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
$updateData['updatevon'] = $this->_uid;
|
||||||
|
$updateData['updateamum'] = date('Y-m-d H:i:s');
|
||||||
|
$result = $this->_ci->LehreinheitModel->update(
|
||||||
|
[
|
||||||
|
'lehreinheit_id' => $this->input->post('lehreinheit_id'),
|
||||||
|
],
|
||||||
|
$updateData
|
||||||
|
);
|
||||||
|
|
||||||
|
if (isError($result))
|
||||||
|
$this->terminateWithError(getError($result), self::ERROR_TYPE_GENERAL);
|
||||||
|
$this->terminateWithSuccess($this->p->t('global', 'gespeichert'));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private function checkPermission($lehreinheit_id)
|
||||||
|
{
|
||||||
|
$result = $this->_ci->LehreinheitModel->getOes($lehreinheit_id);
|
||||||
|
|
||||||
|
if (isError($result))
|
||||||
|
$this->terminateWithError(getError($result), self::ERROR_TYPE_GENERAL);
|
||||||
|
|
||||||
|
$oe_array = [];
|
||||||
|
if (hasData($result))
|
||||||
|
$oe_array = getData($result);
|
||||||
|
|
||||||
|
if (!$this->_ci->permissionlib->isBerechtigtMultipleOe('admin', $oe_array, 'suid') &&
|
||||||
|
!$this->_ci->permissionlib->isBerechtigtMultipleOe('assistenz', $oe_array, 'suid') &&
|
||||||
|
!$this->_ci->permissionlib->isBerechtigtMultipleOe('lv-plan', $oe_array, 'suid'))
|
||||||
|
$this->terminateWithError($this->p->t('ui', 'error_fieldWriteAccess'));
|
||||||
|
}
|
||||||
|
private function checkLehreinheit($lehreinheit_id)
|
||||||
|
{
|
||||||
|
if (is_null($lehreinheit_id) || !ctype_digit((string)$lehreinheit_id))
|
||||||
|
$this->terminateWithError( $this->p->t('ui', 'ungueltigeParameter'), self::ERROR_TYPE_GENERAL);
|
||||||
|
|
||||||
|
$lehreinheit_result = $this->_ci->LehreinheitModel->load($lehreinheit_id);
|
||||||
|
|
||||||
|
if (!hasData($lehreinheit_result) || isError($lehreinheit_result))
|
||||||
|
$this->terminateWithError( $this->p->t('ui', 'ungueltigeParameter'), self::ERROR_TYPE_GENERAL);
|
||||||
|
|
||||||
|
return getData($lehreinheit_result)[0];
|
||||||
|
}
|
||||||
|
|
||||||
|
private function _setAuthUID()
|
||||||
|
{
|
||||||
|
$this->_uid = getAuthUID();
|
||||||
|
|
||||||
|
if (!$this->_uid)
|
||||||
|
show_error('User authentification failed');
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,409 @@
|
|||||||
|
<?php
|
||||||
|
if (!defined('BASEPATH'))
|
||||||
|
exit('No direct script access allowed');
|
||||||
|
|
||||||
|
class Lektor extends FHCAPI_Controller
|
||||||
|
{
|
||||||
|
private $_uid;
|
||||||
|
private $_ci;
|
||||||
|
public function __construct()
|
||||||
|
{
|
||||||
|
parent::__construct([
|
||||||
|
'add' => ['admin:rw', 'assistenz:rw'],
|
||||||
|
'update' => ['admin:rw', 'assistenz:rw'],
|
||||||
|
'cancelVertrag' => ['admin:rw', 'assistenz:rw'],
|
||||||
|
'deleteLVPlan' => ['admin:rw', 'assistenz:rw'],
|
||||||
|
'deletePerson' => ['admin:rw', 'assistenz:rw'],
|
||||||
|
'getLehrfunktionen' => ['admin:r', 'assistenz:r'],
|
||||||
|
'getLektoren' => ['admin:r', 'assistenz:r'],
|
||||||
|
'getLektorenByLE' => ['admin:r', 'assistenz:r'],
|
||||||
|
'getLektorDaten' => ['admin:r', 'assistenz:r'],
|
||||||
|
'getLektorVertrag' => ['admin:r', 'assistenz:r'],
|
||||||
|
|
||||||
|
]);
|
||||||
|
|
||||||
|
$this->_ci = &get_instance();
|
||||||
|
$this->_setAuthUID();
|
||||||
|
$this->_ci->load->library('VariableLib', ['uid' => $this->_uid]);
|
||||||
|
$this->_ci->load->library('PermissionLib');
|
||||||
|
$this->_ci->load->library('LektorLib');
|
||||||
|
$this->_ci->load->library('form_validation');
|
||||||
|
$this->loadPhrases([
|
||||||
|
'ui'
|
||||||
|
]);
|
||||||
|
|
||||||
|
$this->_ci->load->model('accounting/Vertrag_model', 'VertragModel');
|
||||||
|
$this->_ci->load->model('ressource/Mitarbeiter_model', 'MitarbeiterModel');
|
||||||
|
$this->_ci->load->model('education/lehreinheit_model', 'LehreinheitModel');
|
||||||
|
$this->_ci->load->model('education/Lehreinheitmitarbeiter_model', 'LehreinheitmitarbeiterModel');
|
||||||
|
$this->_ci->load->model('ressource/stundenplandev_model', 'StundenplandevModel');
|
||||||
|
$this->_ci->load->model('ressource/Stundensatz_model', 'StundensatzModel');
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private function checkMitarbeiter($mitarbeiter_uid)
|
||||||
|
{
|
||||||
|
if (is_null($mitarbeiter_uid))
|
||||||
|
$this->terminateWithError($this->p->t('ui', 'ungueltigeParameter'), self::ERROR_TYPE_GENERAL);
|
||||||
|
|
||||||
|
$mitarbeiter_result = $this->_ci->MitarbeiterModel->load($mitarbeiter_uid);
|
||||||
|
|
||||||
|
if (!hasData($mitarbeiter_result) || isError($mitarbeiter_result))
|
||||||
|
$this->terminateWithError($this->p->t('ui', 'ungueltigeParameter'), self::ERROR_TYPE_GENERAL);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function add()
|
||||||
|
{
|
||||||
|
$lehreinheit_id = $this->input->post('lehreinheit_id');
|
||||||
|
$mitarbeiter_uid = $this->input->post('mitarbeiter_uid');
|
||||||
|
|
||||||
|
$this->checkLehreinheit($lehreinheit_id);
|
||||||
|
$this->checkMitarbeiter($mitarbeiter_uid);
|
||||||
|
$lehrfach_permission = $this->checkLehrfachPermission($lehreinheit_id, array('assistenz', 'admin'));
|
||||||
|
$lehreinheit_permission = $this->checkPermission($lehreinheit_id, array('admin', 'assistenz', 'lv-plan'));
|
||||||
|
|
||||||
|
if (!$lehrfach_permission && !$lehreinheit_permission)
|
||||||
|
$this->terminateWithError($this->p->t('ui', 'error_fieldWriteAccess'));
|
||||||
|
|
||||||
|
$result = $this->_ci->lektorlib->addLektorToLehreinheit($lehreinheit_id, $mitarbeiter_uid);
|
||||||
|
|
||||||
|
if (isError($result)) $this->terminateWithError(getError($result));
|
||||||
|
|
||||||
|
$this->terminateWithSuccess("Erfolgreich gespeichert");
|
||||||
|
}
|
||||||
|
|
||||||
|
public function update()
|
||||||
|
{
|
||||||
|
$formData = $this->input->post('formData');
|
||||||
|
$lehreinheit_id = $this->input->post('lehreinheit_id');
|
||||||
|
$mitarbeiter_uid = $this->input->post('mitarbeiter_uid');
|
||||||
|
|
||||||
|
$this->checkLehreinheit($lehreinheit_id);
|
||||||
|
$this->checkMitarbeiter($mitarbeiter_uid);
|
||||||
|
|
||||||
|
$updatableFields = array(
|
||||||
|
'lehrfunktion_kurzbz',
|
||||||
|
'planstunden',
|
||||||
|
'stundensatz',
|
||||||
|
'faktor',
|
||||||
|
'anmerkung',
|
||||||
|
'bismelden',
|
||||||
|
'semesterstunden',
|
||||||
|
'mitarbeiter_uid'
|
||||||
|
);
|
||||||
|
|
||||||
|
$this->form_validation->set_data($formData);
|
||||||
|
|
||||||
|
foreach ($updatableFields as $field)
|
||||||
|
{
|
||||||
|
if (array_key_exists($field, $formData))
|
||||||
|
{
|
||||||
|
switch ($field)
|
||||||
|
{
|
||||||
|
case 'lehrfunktion_kurzbz':
|
||||||
|
$this->form_validation->set_rules($field, 'Lehrfunktion', 'required|max_length[16]');
|
||||||
|
break;
|
||||||
|
case 'planstunden':
|
||||||
|
$this->form_validation->set_rules($field, 'Planstunden', 'integer|greater_than_equal_to[0]');
|
||||||
|
break;
|
||||||
|
case 'stundensatz':
|
||||||
|
$formData['stundensatz'] = str_replace(',', '.', $formData['stundensatz']);
|
||||||
|
$this->form_validation->set_rules($field, 'Stundensatz', 'callback__check_stundensatz');
|
||||||
|
break;
|
||||||
|
case 'faktor':
|
||||||
|
$this->form_validation->set_rules($field, 'Faktor', 'numeric|greater_than_equal_to[0]');
|
||||||
|
break;
|
||||||
|
case 'anmerkung':
|
||||||
|
$this->form_validation->set_rules($field, 'Anmerkung', 'max_length[256]');
|
||||||
|
break;
|
||||||
|
case 'bismelden':
|
||||||
|
$this->form_validation->set_rules($field, 'Bis Melden', 'trim');
|
||||||
|
break;
|
||||||
|
case 'semesterstunden':
|
||||||
|
$formData['semesterstunden'] = str_replace(',', '.', $formData['semesterstunden']);
|
||||||
|
$this->form_validation->set_rules($field, 'Semesterstunden', 'callback__check_semesterstunden');
|
||||||
|
break;
|
||||||
|
case 'mitarbeiter_uid':
|
||||||
|
$this->form_validation->set_rules($field, 'Semesterstunden', 'required|max_length[32]');
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!$this->form_validation->run())
|
||||||
|
{
|
||||||
|
$this->terminateWithValidationErrors($this->form_validation->error_array());
|
||||||
|
}
|
||||||
|
|
||||||
|
if (isset($formData['semesterstunden']) && (!is_numeric($formData['semesterstunden']) || $formData['semesterstunden'] === ''))
|
||||||
|
{
|
||||||
|
$formData['semesterstunden'] = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
$lehreinheit_permission = $this->checkPermission($lehreinheit_id, array('admin', 'assistenz', 'lv-plan'));
|
||||||
|
|
||||||
|
if (!$lehreinheit_permission)
|
||||||
|
$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));
|
||||||
|
$this->terminateWithSuccess($result);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function _check_stundensatz($value)
|
||||||
|
{
|
||||||
|
$value = str_replace(',', '.', $value);
|
||||||
|
|
||||||
|
if (!is_numeric($value))
|
||||||
|
{
|
||||||
|
$this->form_validation->set_message('_check_decimal', 'Das Feld {field} muss eine Zahl sein.');
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($value < 0 || $value >= 10000) {
|
||||||
|
$this->form_validation->set_message('_check_decimal', 'Das Feld {field} muss zwischen 0 und 10000 liegen.');
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
public function _check_semesterstunden($value)
|
||||||
|
{
|
||||||
|
if ($value === null || $value === '') {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!is_numeric($value))
|
||||||
|
{
|
||||||
|
$this->form_validation->set_message(
|
||||||
|
'_check_semesterstunden',
|
||||||
|
'Das Feld {field} muss eine Zahl sein.'
|
||||||
|
);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($value < 0)
|
||||||
|
{
|
||||||
|
$this->form_validation->set_message(
|
||||||
|
'_check_semesterstunden',
|
||||||
|
'Das Feld {field} muss eine Zahl größer oder gleich 0 sein.'
|
||||||
|
);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if ($value > 999.99)
|
||||||
|
{
|
||||||
|
$this->form_validation->set_message(
|
||||||
|
'_check_semesterstunden',
|
||||||
|
'Das Feld {field} darf maximal 999,99 betragen.'
|
||||||
|
);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
public function getLehrfunktionen()
|
||||||
|
{
|
||||||
|
$this->_ci->load->model('education/Lehrfunktion_model', 'LehrfunktionModel');
|
||||||
|
$this->_ci->LehrfunktionModel->addOrder('lehrfunktion_kurzbz');
|
||||||
|
$this->terminateWithSuccess(getData($this->_ci->LehrfunktionModel->load()));
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getLektoren()
|
||||||
|
{
|
||||||
|
$this->_ci->MitarbeiterModel->addSelect('uid, person_id, vorname, nachname');
|
||||||
|
$this->_ci->MitarbeiterModel->addJoin('public.tbl_benutzer', 'uid = mitarbeiter_uid');
|
||||||
|
$this->_ci->MitarbeiterModel->addJoin('public.tbl_person', 'person_id');
|
||||||
|
$this->terminateWithSuccess(getData($this->_ci->MitarbeiterModel->loadWhere(array('public.tbl_benutzer.aktiv' => true))));
|
||||||
|
}
|
||||||
|
|
||||||
|
private function checkLehreinheit($lehreinheit_id)
|
||||||
|
{
|
||||||
|
if (is_null($lehreinheit_id) || !ctype_digit((string)$lehreinheit_id))
|
||||||
|
$this->terminateWithError( $this->p->t('ui', 'ungueltigeParameter'), self::ERROR_TYPE_GENERAL);
|
||||||
|
|
||||||
|
$lehreinheit_result = $this->_ci->LehreinheitModel->load($lehreinheit_id);
|
||||||
|
|
||||||
|
if (!hasData($lehreinheit_result) || isError($lehreinheit_result))
|
||||||
|
$this->terminateWithError( $this->p->t('ui', 'ungueltigeParameter'), self::ERROR_TYPE_GENERAL);
|
||||||
|
|
||||||
|
return getData($lehreinheit_result)[0];
|
||||||
|
|
||||||
|
}
|
||||||
|
public function getLektorenByLE($lehreinheit_id = null)
|
||||||
|
{
|
||||||
|
$this->checkLehreinheit($lehreinheit_id);
|
||||||
|
$le_mitarbeiter_data = $this->_ci->LehreinheitmitarbeiterModel->getLektorenByLe($lehreinheit_id);
|
||||||
|
$this->terminateWithSuccess(hasData($le_mitarbeiter_data) ? getData($le_mitarbeiter_data) : array());
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getLektorDaten($lehreinheit_id = null, $mitarbeiter_uid = null)
|
||||||
|
{
|
||||||
|
$lehreinheit = $this->checkLehreinheit($lehreinheit_id);
|
||||||
|
|
||||||
|
if (is_null($mitarbeiter_uid))
|
||||||
|
$this->terminateWithError( $this->p->t('ui', 'ungueltigeParameter'), self::ERROR_TYPE_GENERAL);
|
||||||
|
|
||||||
|
$mitarbeiter_result = $this->_ci->MitarbeiterModel->load($mitarbeiter_uid);
|
||||||
|
|
||||||
|
if (!hasData($mitarbeiter_result) || isError($mitarbeiter_result))
|
||||||
|
$this->terminateWithError( $this->p->t('ui', 'ungueltigeParameter'), self::ERROR_TYPE_GENERAL);
|
||||||
|
|
||||||
|
$this->load->model('organisation/Studiensemester_model','StudiensemesterModel');
|
||||||
|
$studiensemester_result = $this->_ci->StudiensemesterModel->loadWhere(array('studiensemester_kurzbz' => $lehreinheit->studiensemester_kurzbz));
|
||||||
|
$studiensemester = getData($studiensemester_result)[0];
|
||||||
|
|
||||||
|
$defaultStundensatz = $this->_ci->StundensatzModel->getDefaultStundensatz($mitarbeiter_uid, $studiensemester->start, $studiensemester->ende, 'lehre');
|
||||||
|
|
||||||
|
$le_mitarbeiter_result = $this->_ci->LehreinheitmitarbeiterModel->getByLeLektor($lehreinheit_id, $mitarbeiter_uid);
|
||||||
|
|
||||||
|
$le_mitarbeiter_data = array();
|
||||||
|
if (hasData($le_mitarbeiter_result))
|
||||||
|
{
|
||||||
|
$le_mitarbeiter_data = getData($le_mitarbeiter_result)[0];
|
||||||
|
$le_mitarbeiter_data->default_stundensatz = $defaultStundensatz;
|
||||||
|
}
|
||||||
|
$vertrag = $this->getLektorVertrag($lehreinheit_id, $mitarbeiter_uid);
|
||||||
|
$le_mitarbeiter_data->vertrag = $vertrag;
|
||||||
|
$this->terminateWithSuccess($le_mitarbeiter_data);
|
||||||
|
}
|
||||||
|
|
||||||
|
private function getLektorVertrag($lehreinheit_id = null, $mitarbeiter_uid = null)
|
||||||
|
{
|
||||||
|
$this->_ci->load->model('accounting/Vertrag_model', 'VertragModel');
|
||||||
|
$vertrag = $this->_ci->VertragModel->getVertrag($mitarbeiter_uid, $lehreinheit_id);
|
||||||
|
return hasData($vertrag) ? getData($vertrag)[0] : null;
|
||||||
|
}
|
||||||
|
|
||||||
|
private function checkLehrfachPermission($lehreinheit_id, $permissions)
|
||||||
|
{
|
||||||
|
$lehrfach_oe_kurzbz = $this->_ci->LehreinheitModel->getLehrfachOe($lehreinheit_id);
|
||||||
|
|
||||||
|
if (isError($lehrfach_oe_kurzbz))
|
||||||
|
$this->terminateWithError(getError($lehrfach_oe_kurzbz), self::ERROR_TYPE_GENERAL);
|
||||||
|
|
||||||
|
$lehrfach_oe_kurzbz = array('');
|
||||||
|
if (hasData($lehrfach_oe_kurzbz))
|
||||||
|
$lehrfach_oe_kurzbz = array_column(getData($lehrfach_oe_kurzbz), 'oe_kurzbz');
|
||||||
|
|
||||||
|
|
||||||
|
return $this->checkPermissionGenerel($permissions, $lehrfach_oe_kurzbz);
|
||||||
|
}
|
||||||
|
|
||||||
|
private function checkPermissionGenerel($permissions, $oe_array)
|
||||||
|
{
|
||||||
|
$hasPermission = false;
|
||||||
|
foreach ($permissions as $permission)
|
||||||
|
{
|
||||||
|
if ($this->_ci->permissionlib->isBerechtigtMultipleOe($permission, $oe_array, 'suid'))
|
||||||
|
{
|
||||||
|
$hasPermission = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return $hasPermission;
|
||||||
|
}
|
||||||
|
|
||||||
|
private function checkPermission($lehreinheit_id, $permissions)
|
||||||
|
{
|
||||||
|
$result = $this->_ci->LehreinheitModel->getOes($lehreinheit_id);
|
||||||
|
|
||||||
|
if (isError($result))
|
||||||
|
$this->terminateWithError(getError($result), self::ERROR_TYPE_GENERAL);
|
||||||
|
|
||||||
|
$oe_array = [];
|
||||||
|
if (hasData($result))
|
||||||
|
$oe_array = getData($result);
|
||||||
|
|
||||||
|
return $this->checkPermissionGenerel($permissions, $oe_array);
|
||||||
|
}
|
||||||
|
public function cancelVertrag()
|
||||||
|
{
|
||||||
|
$vertrag_id = $this->input->post('vertrag_id');
|
||||||
|
$lehreinheit_id = $this->input->post('lehreinheit_id');
|
||||||
|
$mitarbeiter_uid = $this->input->post('mitarbeiter_uid');
|
||||||
|
|
||||||
|
$this->checkLehreinheit($lehreinheit_id);
|
||||||
|
$this->checkPermission($lehreinheit_id, array('admin', 'lehre/lehrauftrag_bestellen'));
|
||||||
|
|
||||||
|
if (is_null($vertrag_id) || !ctype_digit((string)$vertrag_id))
|
||||||
|
$this->terminateWithError( $this->p->t('ui', 'ungueltigeParameter'), self::ERROR_TYPE_GENERAL);
|
||||||
|
|
||||||
|
$vertrag_result = $this->_ci->VertragModel->load($vertrag_id);
|
||||||
|
|
||||||
|
if (!hasData($vertrag_result) || isError($vertrag_result))
|
||||||
|
$this->terminateWithError( $this->p->t('ui', 'ungueltigeParameter'), self::ERROR_TYPE_GENERAL);
|
||||||
|
|
||||||
|
if (is_null($mitarbeiter_uid))
|
||||||
|
$this->terminateWithError( $this->p->t('ui', 'ungueltigeParameter'), self::ERROR_TYPE_GENERAL);
|
||||||
|
|
||||||
|
$mitarbeiter_result = $this->_ci->MitarbeiterModel->load($mitarbeiter_uid);
|
||||||
|
|
||||||
|
if (!hasData($mitarbeiter_result) || isError($mitarbeiter_result))
|
||||||
|
$this->terminateWithError( $this->p->t('ui', 'ungueltigeParameter'), self::ERROR_TYPE_GENERAL);
|
||||||
|
|
||||||
|
$result = $this->_ci->VertragModel->cancelVertrag($vertrag_id, $mitarbeiter_uid);
|
||||||
|
|
||||||
|
if (isError($result))
|
||||||
|
$this->terminateWithError(getError($result));
|
||||||
|
|
||||||
|
$this->terminateWithSuccess($result);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function deletePerson()
|
||||||
|
{
|
||||||
|
$lehreinheit_id = $this->input->post('lehreinheit_id');
|
||||||
|
$mitarbeiter_uid = $this->input->post('mitarbeiter_uid');
|
||||||
|
|
||||||
|
$this->checkLehreinheit($lehreinheit_id);
|
||||||
|
$this->checkPermission($lehreinheit_id, array('admin', 'assistenz', 'lv-plan'));
|
||||||
|
|
||||||
|
if (is_null($mitarbeiter_uid))
|
||||||
|
$this->terminateWithError($this->p->t('ui', 'ungueltigeParameter'), self::ERROR_TYPE_GENERAL);
|
||||||
|
|
||||||
|
$mitarbeiter_result = $this->_ci->MitarbeiterModel->load($mitarbeiter_uid);
|
||||||
|
|
||||||
|
if (!hasData($mitarbeiter_result) || isError($mitarbeiter_result))
|
||||||
|
$this->terminateWithError($this->p->t('ui', 'ungueltigeParameter'), self::ERROR_TYPE_GENERAL);
|
||||||
|
|
||||||
|
$delete_result =$this->_ci->LehreinheitmitarbeiterModel->deleteLektorFromLe($lehreinheit_id, $mitarbeiter_uid);
|
||||||
|
|
||||||
|
if (isError($delete_result))
|
||||||
|
$this->terminateWithError(getError($delete_result));
|
||||||
|
|
||||||
|
$this->terminateWithSuccess($delete_result);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function deleteLVPlan()
|
||||||
|
{
|
||||||
|
$lehreinheit_id = $this->input->post('lehreinheit_id');
|
||||||
|
$mitarbeiter_uid = $this->input->post('mitarbeiter_uid');
|
||||||
|
|
||||||
|
$this->checkLehreinheit($lehreinheit_id);
|
||||||
|
$this->checkPermission($lehreinheit_id, array('lv-plan/lektorentfernen'));
|
||||||
|
|
||||||
|
if (is_null($mitarbeiter_uid))
|
||||||
|
$this->terminateWithError($this->p->t('ui', 'ungueltigeParameter'), self::ERROR_TYPE_GENERAL);
|
||||||
|
|
||||||
|
$mitarbeiter_result = $this->_ci->MitarbeiterModel->load($mitarbeiter_uid);
|
||||||
|
|
||||||
|
if (!hasData($mitarbeiter_result) || isError($mitarbeiter_result))
|
||||||
|
$this->terminateWithError($this->p->t('ui', 'ungueltigeParameter'), self::ERROR_TYPE_GENERAL);
|
||||||
|
|
||||||
|
|
||||||
|
$delete_result = $this->_ci->StundenplandevModel->deleteLektorPlanning($lehreinheit_id, $mitarbeiter_uid);
|
||||||
|
|
||||||
|
if (isError($delete_result))
|
||||||
|
$this->terminateWithError(getError($delete_result));
|
||||||
|
|
||||||
|
$this->terminateWithSuccess($delete_result);
|
||||||
|
}
|
||||||
|
|
||||||
|
private function _setAuthUID()
|
||||||
|
{
|
||||||
|
$this->_uid = getAuthUID();
|
||||||
|
|
||||||
|
if (!$this->_uid)
|
||||||
|
show_error('User authentification failed');
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,121 @@
|
|||||||
|
<?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');
|
||||||
|
|
||||||
|
class Setup extends FHCAPI_Controller
|
||||||
|
{
|
||||||
|
private $_ci;
|
||||||
|
private $_uid;
|
||||||
|
|
||||||
|
public function __construct()
|
||||||
|
{
|
||||||
|
parent::__construct([
|
||||||
|
'getTabs' => ['admin:r', 'assistenz:r'],
|
||||||
|
'getStudiensemester' => ['admin:r', 'assistenz:r'],
|
||||||
|
'getSprache' => ['admin:r', 'assistenz:r'],
|
||||||
|
'getRaumtyp' => ['admin:r', 'assistenz:r'],
|
||||||
|
'getLehrform' => ['admin:r', 'assistenz:r'],
|
||||||
|
]);
|
||||||
|
|
||||||
|
$this->_ci = &get_instance();
|
||||||
|
$this->_setAuthUID();
|
||||||
|
|
||||||
|
$this->_ci->load->model('education/Lehreinheit_model', 'LehreinheitModel');
|
||||||
|
$this->_ci->load->model('education/Lehrveranstaltung_model', 'LehrveranstaltungModel');
|
||||||
|
|
||||||
|
$this->_ci->load->library('VariableLib', ['uid' => $this->_uid]);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getTabs()
|
||||||
|
{
|
||||||
|
$tabs['details'] = array (
|
||||||
|
'title' => 'Details',
|
||||||
|
'component' => APP_ROOT . 'public/js/components/LVVerwaltung/Tabs/Details.js',
|
||||||
|
'config' => []
|
||||||
|
);
|
||||||
|
$tabs['gruppen'] = array (
|
||||||
|
'title' => 'Gruppen',
|
||||||
|
'component' => APP_ROOT . 'public/js/components/LVVerwaltung/Tabs/Gruppen.js',
|
||||||
|
'config' => []
|
||||||
|
);
|
||||||
|
$tabs['lektor'] = array (
|
||||||
|
'title' => 'LektorInnenzuteilung',
|
||||||
|
'component' => APP_ROOT . 'public/js/components/LVVerwaltung/Tabs/Lektor.js',
|
||||||
|
'config' => []
|
||||||
|
);
|
||||||
|
$tabs['notiz'] = array (
|
||||||
|
'title' => 'Notizen',
|
||||||
|
'component' => APP_ROOT . 'public/js/components/LVVerwaltung/Tabs/Notiz.js',
|
||||||
|
'config' => []
|
||||||
|
);
|
||||||
|
$this->terminateWithSuccess($tabs);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getStudiensemester()
|
||||||
|
{
|
||||||
|
$this->_ci->load->model('organisation/Studiensemester_model', 'StudiensemesterModel');
|
||||||
|
$this->_ci->StudiensemesterModel->addOrder('start', 'DESC');
|
||||||
|
$this->terminateWithSuccess(getData($this->_ci->StudiensemesterModel->load()));
|
||||||
|
}
|
||||||
|
public function getSprache()
|
||||||
|
{
|
||||||
|
$this->_ci->load->model('system/Sprache_model', 'SpracheModel');
|
||||||
|
$this->terminateWithSuccess(getData($this->_ci->SpracheModel->load()));
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getRaumtyp()
|
||||||
|
{
|
||||||
|
$this->_ci->load->model('ressource/Raumtyp_model', 'RaumtypModel');
|
||||||
|
$this->_ci->RaumtypModel->addOrder('raumtyp_kurzbz');
|
||||||
|
$this->terminateWithSuccess(getData($this->_ci->RaumtypModel->loadWhere(array('aktiv' => true))));
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getLehrform()
|
||||||
|
{
|
||||||
|
$language = $this->_getLanguageIndex();
|
||||||
|
|
||||||
|
$this->_ci->load->model('codex/lehrform_model', 'LehrformModel');
|
||||||
|
|
||||||
|
$this->_ci->LehrformModel->addSelect(
|
||||||
|
'*,
|
||||||
|
bezeichnung_kurz[('.$language.')] as bez_kurz,
|
||||||
|
bezeichnung_lang[('.$language.')] as bez
|
||||||
|
'
|
||||||
|
);
|
||||||
|
$this->terminateWithSuccess(getData($this->_ci->LehrformModel->load()));
|
||||||
|
}
|
||||||
|
|
||||||
|
private function _getLanguageIndex()
|
||||||
|
{
|
||||||
|
$this->_ci->load->model('system/Sprache_model', 'SpracheModel');
|
||||||
|
$this->_ci->SpracheModel->addSelect('index');
|
||||||
|
$result = $this->_ci->SpracheModel->loadWhere(array('sprache' => getUserLanguage()));
|
||||||
|
|
||||||
|
return hasData($result) ? getData($result)[0]->index : 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
private function _setAuthUID()
|
||||||
|
{
|
||||||
|
$this->_uid = getAuthUID();
|
||||||
|
|
||||||
|
if (!$this->_uid)
|
||||||
|
show_error('User authentification failed');
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,117 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
if (! defined('BASEPATH')) exit('No direct script access allowed');
|
||||||
|
|
||||||
|
class StgTree extends FHCAPI_Controller
|
||||||
|
{
|
||||||
|
public function __construct()
|
||||||
|
{
|
||||||
|
$permissions = [];
|
||||||
|
$router = load_class('Router');
|
||||||
|
$permissions[$router->method] = ['admin:r', 'assistenz:r'];
|
||||||
|
parent::__construct($permissions);
|
||||||
|
|
||||||
|
$this->load->model('organisation/Studiengang_model', 'StudiengangModel');
|
||||||
|
}
|
||||||
|
|
||||||
|
public function _remap($method, $params = [])
|
||||||
|
{
|
||||||
|
if ($method == '' || $method == 'index')
|
||||||
|
return $this->getBase();
|
||||||
|
|
||||||
|
if (!$this->permissionlib->isBerechtigt('assistenz', 's', $method)
|
||||||
|
&& !$this->permissionlib->isBerechtigt('admin', 's', $method)
|
||||||
|
) {
|
||||||
|
return $this->_outputAuthError([$method => ['admin:r', 'assistenz:r']]);
|
||||||
|
}
|
||||||
|
|
||||||
|
return $this->getStudiengang($method);
|
||||||
|
show_404();
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function getBase()
|
||||||
|
{
|
||||||
|
$this->StudiengangModel->addJoin('public.tbl_lehrverband v', 'studiengang_kz');
|
||||||
|
|
||||||
|
$this->StudiengangModel->addDistinct();
|
||||||
|
$this->StudiengangModel->addSelect("v.studiengang_kz AS link");
|
||||||
|
$this->StudiengangModel->addSelect(
|
||||||
|
"CONCAT(kurzbzlang, ' (', UPPER(CONCAT(typ, kurzbz)), ') - ', tbl_studiengang.bezeichnung) AS name",
|
||||||
|
false
|
||||||
|
);
|
||||||
|
$this->StudiengangModel->addSelect('erhalter_kz');
|
||||||
|
$this->StudiengangModel->addSelect('typ');
|
||||||
|
$this->StudiengangModel->addSelect('kurzbz');
|
||||||
|
$this->StudiengangModel->addSelect('studiengang_kz');
|
||||||
|
$this->StudiengangModel->addSelect('studiengang_kz AS stg_kz');
|
||||||
|
|
||||||
|
$this->StudiengangModel->addOrder('erhalter_kz');
|
||||||
|
$this->StudiengangModel->addOrder('typ');
|
||||||
|
$this->StudiengangModel->addOrder('kurzbz');
|
||||||
|
|
||||||
|
$stgs = $this->permissionlib->getSTG_isEntitledFor('admin') ?: [];
|
||||||
|
$stgs = array_merge($stgs, $this->permissionlib->getSTG_isEntitledFor('assistenz') ?: []);
|
||||||
|
|
||||||
|
if (!$stgs)
|
||||||
|
$this->terminateWithSuccess([]);
|
||||||
|
|
||||||
|
$this->StudiengangModel->db->where_in('studiengang_kz', $stgs);
|
||||||
|
|
||||||
|
$result = $this->StudiengangModel->loadWhere(['v.aktiv' => true]);
|
||||||
|
|
||||||
|
$list = $this->getDataOrTerminateWithError($result);
|
||||||
|
|
||||||
|
$this->terminateWithSuccess($list);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function getStudiengang($studiengang_kz)
|
||||||
|
{
|
||||||
|
$link = $studiengang_kz . '/';
|
||||||
|
|
||||||
|
$this->StudiengangModel->addJoin('public.tbl_lehrverband v', 'studiengang_kz');
|
||||||
|
|
||||||
|
$this->StudiengangModel->addDistinct();
|
||||||
|
$this->StudiengangModel->addSelect("CONCAT(" . $this->StudiengangModel->escape($link) . ", semester) AS link", false);
|
||||||
|
$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);
|
||||||
|
$this->StudiengangModel->addSelect("TRUE AS leaf", false);
|
||||||
|
|
||||||
|
$this->StudiengangModel->addSelect('semester');
|
||||||
|
$this->StudiengangModel->addSelect($this->StudiengangModel->escape($studiengang_kz) . '::integer AS stg_kz', false);
|
||||||
|
|
||||||
|
$this->StudiengangModel->addOrder('semester');
|
||||||
|
|
||||||
|
$result = $this->StudiengangModel->loadWhere([
|
||||||
|
'v.studiengang_kz' => $studiengang_kz,
|
||||||
|
'v.aktiv' => true
|
||||||
|
]);
|
||||||
|
$list = $this->getDataOrTerminateWithError($result);
|
||||||
|
|
||||||
|
$result = $this->StudiengangModel->load($studiengang_kz);
|
||||||
|
$result = $this->getDataOrTerminateWithError($result);
|
||||||
|
if ($result)
|
||||||
|
{
|
||||||
|
if (current($result)->mischform)
|
||||||
|
{
|
||||||
|
$this->load->model('organisation/Studienordnung_model', 'StudienordnungModel');
|
||||||
|
|
||||||
|
$this->StudienordnungModel->addDistinct();
|
||||||
|
$this->StudienordnungModel->addSelect("CONCAT(studiengang_kz, '/', p.orgform_kurzbz) AS link");
|
||||||
|
$this->StudienordnungModel->addSelect("p.orgform_kurzbz AS name");
|
||||||
|
$this->StudienordnungModel->addSelect("TRUE as leaf", false);
|
||||||
|
|
||||||
|
$this->StudienordnungModel->addJoin('lehre.tbl_studienplan p', 'studienordnung_id');
|
||||||
|
|
||||||
|
$result = $this->StudienordnungModel->loadWhere([
|
||||||
|
'aktiv' => true,
|
||||||
|
'studiengang_kz' => $studiengang_kz,
|
||||||
|
'p.orgform_kurzbz !=' => 'DDP'
|
||||||
|
]);
|
||||||
|
$result = $this->getDataOrTerminateWithError($result);
|
||||||
|
|
||||||
|
$list = array_merge($list, $result);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->terminateWithSuccess($list);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,50 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
if (!defined('BASEPATH'))
|
||||||
|
exit('No direct script access allowed');
|
||||||
|
|
||||||
|
class Tags extends Tag_Controller
|
||||||
|
{
|
||||||
|
const BERECHTIGUNG_KURZBZ = ['admin:rw', 'assistenz:rw'];
|
||||||
|
|
||||||
|
public function __construct()
|
||||||
|
{
|
||||||
|
parent::__construct([
|
||||||
|
'getTag' => self::BERECHTIGUNG_KURZBZ,
|
||||||
|
'getTags' => self::BERECHTIGUNG_KURZBZ,
|
||||||
|
'addTag' => self::BERECHTIGUNG_KURZBZ,
|
||||||
|
'updateTag' => self::BERECHTIGUNG_KURZBZ,
|
||||||
|
'doneTag' => self::BERECHTIGUNG_KURZBZ,
|
||||||
|
'deleteTag' => self::BERECHTIGUNG_KURZBZ,
|
||||||
|
'updateLehre' => self::BERECHTIGUNG_KURZBZ,
|
||||||
|
'doneLehre' => self::BERECHTIGUNG_KURZBZ,
|
||||||
|
'deleteLehre' => self::BERECHTIGUNG_KURZBZ,
|
||||||
|
]);
|
||||||
|
|
||||||
|
$this->config->load('lvverwaltung');
|
||||||
|
}
|
||||||
|
public function getTag($readonly_tags = null)
|
||||||
|
{
|
||||||
|
parent::getTag($this->config->item('lvverwaltung_tags'));
|
||||||
|
}
|
||||||
|
public function getTags($tags = null)
|
||||||
|
{
|
||||||
|
parent::getTags($this->config->item('lvverwaltung_tags'));
|
||||||
|
}
|
||||||
|
public function addTag($withZuordnung = true, $updatable_tags = null)
|
||||||
|
{
|
||||||
|
parent::addTag(true, $this->config->item('lvverwaltung_tags'));
|
||||||
|
}
|
||||||
|
public function updateTag($updatable_tags = null)
|
||||||
|
{
|
||||||
|
parent::updateTag($this->config->item('lvverwaltung_tags'));
|
||||||
|
}
|
||||||
|
public function deleteTag($withZuordnung = true, $updatable_tags = null)
|
||||||
|
{
|
||||||
|
parent::deleteTag(true, $this->config->item('lvverwaltung_tags'));
|
||||||
|
}
|
||||||
|
public function doneTag($updatable_tags = null)
|
||||||
|
{
|
||||||
|
parent::doneTag($this->config->item('lvverwaltung_tags'));
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,21 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
if (! defined('BASEPATH')) exit('No direct script access allowed');
|
||||||
|
|
||||||
|
class NotizLehreinheit extends Notiz_Controller
|
||||||
|
{
|
||||||
|
public function __construct()
|
||||||
|
{
|
||||||
|
parent::__construct([
|
||||||
|
'getUid' => ['admin:r', 'assistenz:r'],
|
||||||
|
'getNotizen' => ['admin:r', 'assistenz:r'],
|
||||||
|
'loadNotiz' => ['admin:r', 'assistenz:r'],
|
||||||
|
'addNewNotiz' => ['admin:rw', 'assistenz:rw'],
|
||||||
|
'updateNotiz' => ['admin:rw', 'assistenz:rw'],
|
||||||
|
'deleteNotiz' => ['admin:rw', 'assistenz:rw'],
|
||||||
|
'loadDokumente' => ['admin:r', 'assistenz:r'],
|
||||||
|
'getMitarbeiter' => ['admin:r', 'assistenz:r'],
|
||||||
|
'isBerechtigt' => ['admin:r', 'assistenz:r'],
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -60,17 +60,6 @@ class Favorites extends FHCAPI_Controller
|
|||||||
|
|
||||||
$favorites = $this->input->post('favorites');
|
$favorites = $this->input->post('favorites');
|
||||||
|
|
||||||
$removed = [];
|
|
||||||
while (strlen($favorites) > 64) {
|
|
||||||
$favObj = json_decode($favorites);
|
|
||||||
if (!$favObj->list)
|
|
||||||
break;
|
|
||||||
$removed[] = array_shift($favObj->list);
|
|
||||||
$favorites = json_encode($favObj);
|
|
||||||
}
|
|
||||||
if ($removed)
|
|
||||||
$this->addMeta('removed', $removed);
|
|
||||||
|
|
||||||
$result = $this->VariableModel->setVariable(getAuthUID(), 'stv_favorites', $favorites);
|
$result = $this->VariableModel->setVariable(getAuthUID(), 'stv_favorites', $favorites);
|
||||||
|
|
||||||
$this->getDataOrTerminateWithError($result);
|
$this->getDataOrTerminateWithError($result);
|
||||||
|
|||||||
@@ -434,7 +434,10 @@ class Kontakt extends FHCAPI_Controller
|
|||||||
$this->FirmaModel->addJoin('public.tbl_firma f', 'ON (f.firma_id = st.firma_id)', 'LEFT');
|
$this->FirmaModel->addJoin('public.tbl_firma f', 'ON (f.firma_id = st.firma_id)', 'LEFT');
|
||||||
$this->KontakttypModel->addJoin('public.tbl_kontakttyp kt', 'ON (public.tbl_kontakt.kontakttyp = kt.kontakttyp)');
|
$this->KontakttypModel->addJoin('public.tbl_kontakttyp kt', 'ON (public.tbl_kontakt.kontakttyp = kt.kontakttyp)');
|
||||||
$result = $this->KontaktModel->loadWhere(
|
$result = $this->KontaktModel->loadWhere(
|
||||||
array('person_id' => $person_id)
|
array(
|
||||||
|
'person_id' => $person_id,
|
||||||
|
'public.tbl_kontakt.kontakttyp !=' => 'hidden'
|
||||||
|
)
|
||||||
);
|
);
|
||||||
|
|
||||||
if (isError($result))
|
if (isError($result))
|
||||||
@@ -442,20 +445,18 @@ class Kontakt extends FHCAPI_Controller
|
|||||||
$this->terminateWithError(getError($result), self::ERROR_TYPE_GENERAL);
|
$this->terminateWithError(getError($result), self::ERROR_TYPE_GENERAL);
|
||||||
}
|
}
|
||||||
$this->terminateWithSuccess((getData($result) ?: []));
|
$this->terminateWithSuccess((getData($result) ?: []));
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getKontakttypen()
|
public function getKontakttypen()
|
||||||
{
|
{
|
||||||
$this->load->model('person/Kontakttyp_model', 'KontakttypModel');
|
$this->load->model('person/Kontakttyp_model', 'KontakttypModel');
|
||||||
|
$this->KontakttypModel->addOrder('beschreibung', 'ASC');
|
||||||
|
$result = $this->KontakttypModel->loadWhere(array('kontakttyp !=' => 'hidden'));
|
||||||
|
|
||||||
$result = $this->KontakttypModel->load();
|
$data = $this->getDataOrTerminateWithError($result);
|
||||||
if (isError($result)) {
|
|
||||||
$this->terminateWithError(getError($result), self::ERROR_TYPE_GENERAL);
|
$this->terminateWithSuccess($data);
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
$this->terminateWithSuccess(getData($result) ?: []);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public function loadContact()
|
public function loadContact()
|
||||||
|
|||||||
@@ -352,7 +352,7 @@ class Konto extends FHCAPI_Controller
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
$result = $this->KontoModel->insert([
|
$result = $this->KontoModel->insert([
|
||||||
'person_id' => $buchung['person_id'],
|
'person_id' => $buchung['person_id'],
|
||||||
'studiengang_kz' => $buchung['studiengang_kz'],
|
'studiengang_kz' => $buchung['studiengang_kz'],
|
||||||
@@ -361,7 +361,7 @@ class Konto extends FHCAPI_Controller
|
|||||||
'buchungstyp_kurzbz' => $buchung['buchungstyp_kurzbz'],
|
'buchungstyp_kurzbz' => $buchung['buchungstyp_kurzbz'],
|
||||||
'credit_points' => $buchung['credit_points'],
|
'credit_points' => $buchung['credit_points'],
|
||||||
'zahlungsreferenz' => $buchung['zahlungsreferenz'],
|
'zahlungsreferenz' => $buchung['zahlungsreferenz'],
|
||||||
'betrag' => $betrag,
|
'betrag' => number_format($betrag, 2, '.', ''),
|
||||||
'buchungsdatum' => $buchungsdatum,
|
'buchungsdatum' => $buchungsdatum,
|
||||||
'mahnspanne' => '0',
|
'mahnspanne' => '0',
|
||||||
'buchungsnr_verweis' => $buchung['buchungsnr'],
|
'buchungsnr_verweis' => $buchung['buchungsnr'],
|
||||||
|
|||||||
@@ -138,13 +138,24 @@ class Prestudent extends FHCAPI_Controller
|
|||||||
{
|
{
|
||||||
$val = $this->input->post($prop, true);
|
$val = $this->input->post($prop, true);
|
||||||
|
|
||||||
if ($val !== null || $prop === 'foerderrelevant') {
|
if ($val !== null) {
|
||||||
|
if(in_array($prop, ['dual', 'bismelden', 'foerderrelevant']))
|
||||||
|
{
|
||||||
|
$val = boolval($val);
|
||||||
|
}
|
||||||
|
elseif (
|
||||||
|
$val === ''
|
||||||
|
&& in_array($prop, ['zgvnation', 'zgvmanation', 'zgvdoktornation', 'berufstaetigkeit_code', 'ausbildungcode'])
|
||||||
|
)
|
||||||
|
{
|
||||||
|
$val = null;
|
||||||
|
}
|
||||||
$update_prestudent[$prop] = $val;
|
$update_prestudent[$prop] = $val;
|
||||||
}
|
}
|
||||||
|
|
||||||
// allowed to be null, but has to be in postparameter
|
// allowed to be null, but has to be in postparameter
|
||||||
if (
|
if (
|
||||||
in_array($prop, ['zgvdatum', 'zgvmadatum', 'zgvdoktordatum', 'zgv_code', 'zgvmas_code', 'zgvdoktor_code'])
|
in_array($prop, ['foerderrelevant', 'zgvdatum', 'zgvmadatum', 'zgvdoktordatum', 'zgv_code', 'zgvmas_code', 'zgvdoktor_code'])
|
||||||
&& !isset($update_prestudent[$prop])
|
&& !isset($update_prestudent[$prop])
|
||||||
&& array_key_exists($prop, $_POST)
|
&& array_key_exists($prop, $_POST)
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -286,11 +286,11 @@ class Status extends FHCAPI_Controller
|
|||||||
]);
|
]);
|
||||||
|
|
||||||
$this->form_validation->set_rules('_default', '', [
|
$this->form_validation->set_rules('_default', '', [
|
||||||
['meldestichtag_not_exceeded', function () use ($datum, $isBerechtigtNoStudstatusCheck) {
|
['meldestichtag_not_exceeded', function () use ($datum_string, $isBerechtigtNoStudstatusCheck) {
|
||||||
if ($isBerechtigtNoStudstatusCheck)
|
if ($isBerechtigtNoStudstatusCheck)
|
||||||
return true; // Skip if access right says so
|
return true; // Skip if access right says so
|
||||||
|
|
||||||
$result = $this->prestudentstatuschecklib->checkIfMeldestichtagErreicht($datum);
|
$result = $this->prestudentstatuschecklib->checkIfMeldestichtagErreicht($datum_string);
|
||||||
|
|
||||||
return !$this->getDataOrTerminateWithError($result);
|
return !$this->getDataOrTerminateWithError($result);
|
||||||
}],
|
}],
|
||||||
@@ -733,8 +733,9 @@ class Status extends FHCAPI_Controller
|
|||||||
);
|
);
|
||||||
|
|
||||||
$result = $this->prestudentstatuschecklib->checkIfMeldestichtagErreicht($oldstatus->datum);
|
$result = $this->prestudentstatuschecklib->checkIfMeldestichtagErreicht($oldstatus->datum);
|
||||||
|
$isMeldestichtagErreicht = $this->getDataOrTerminateWithError($result);
|
||||||
|
|
||||||
if (!$this->getDataOrTerminateWithError($result))
|
if ($isMeldestichtagErreicht)
|
||||||
$this->terminateWithError(
|
$this->terminateWithError(
|
||||||
$this->p->t('lehre', 'error_dataVorMeldestichtag'),
|
$this->p->t('lehre', 'error_dataVorMeldestichtag'),
|
||||||
self::ERROR_TYPE_GENERAL,
|
self::ERROR_TYPE_GENERAL,
|
||||||
|
|||||||
@@ -276,7 +276,17 @@ class Student extends FHCAPI_Controller
|
|||||||
$update_person = array();
|
$update_person = array();
|
||||||
foreach ($array_allowed_props_person as $prop) {
|
foreach ($array_allowed_props_person as $prop) {
|
||||||
$val = $this->input->post($prop);
|
$val = $this->input->post($prop);
|
||||||
if ($val !== null) {
|
if ($val === null)
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if($prop == 'foto')
|
||||||
|
{
|
||||||
|
$fotoval = ($val == '') ? null : str_replace('data:image/jpeg;base64,', '', $val);
|
||||||
|
$update_person[$prop] = $fotoval;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
$update_person[$prop] = $val;
|
$update_person[$prop] = $val;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,86 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
if (!defined('BASEPATH')) exit('No direct script access allowed');
|
||||||
|
|
||||||
|
class MeldezettelJob extends JOB_Controller
|
||||||
|
{
|
||||||
|
const INSERT_VON = 'meldezetteljob';
|
||||||
|
const DOKUMENT_KURZBZ = 'Meldezet';
|
||||||
|
|
||||||
|
private $_ci; // Code igniter instance
|
||||||
|
|
||||||
|
public function __construct()
|
||||||
|
{
|
||||||
|
parent::__construct();
|
||||||
|
|
||||||
|
$this->_ci =& get_instance();
|
||||||
|
|
||||||
|
$this->_ci->load->model('crm/Dokumentprestudent_model', 'DokumentprestudentModel');
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets Meldezettel to "accepted" for all students with Meldeadresse.
|
||||||
|
*/
|
||||||
|
public function acceptMeldezettel()
|
||||||
|
{
|
||||||
|
$this->logInfo('Start Meldezettel Job');
|
||||||
|
|
||||||
|
$params = array(self::DOKUMENT_KURZBZ);
|
||||||
|
|
||||||
|
$qry = "
|
||||||
|
-- get all prestudents with meldeadresse, but no accepted Meldezettel
|
||||||
|
SELECT
|
||||||
|
DISTINCT prestudent_id
|
||||||
|
FROM
|
||||||
|
public.tbl_adresse
|
||||||
|
JOIN public.tbl_person USING (person_id)
|
||||||
|
JOIN public.tbl_prestudent ps USING (person_id)
|
||||||
|
WHERE
|
||||||
|
typ = 'm'
|
||||||
|
AND NOT EXISTS (
|
||||||
|
SELECT
|
||||||
|
1
|
||||||
|
FROM
|
||||||
|
public.tbl_dokumentprestudent
|
||||||
|
WHERE
|
||||||
|
prestudent_id = ps.prestudent_id
|
||||||
|
AND dokument_kurzbz = ?
|
||||||
|
)";
|
||||||
|
|
||||||
|
// get all prestudents with Meldeadresse and no accpeted Meldezettel
|
||||||
|
$result = $this->_ci->DokumentprestudentModel->execReadOnlyQuery($qry, $params);
|
||||||
|
|
||||||
|
if (isError($result))
|
||||||
|
{
|
||||||
|
$this->logError(getError($result));
|
||||||
|
}
|
||||||
|
|
||||||
|
$count = 0;
|
||||||
|
|
||||||
|
if (hasData($result))
|
||||||
|
{
|
||||||
|
$prestudents = getData($result);
|
||||||
|
|
||||||
|
foreach ($prestudents as $prestudent)
|
||||||
|
{
|
||||||
|
// set Meldezettel to accepted
|
||||||
|
$result = $this->_ci->DokumentprestudentModel->insert(
|
||||||
|
array(
|
||||||
|
'prestudent_id' => $prestudent->prestudent_id,
|
||||||
|
'dokument_kurzbz' => self::DOKUMENT_KURZBZ,
|
||||||
|
'datum' => date('Y-m-d'),
|
||||||
|
'insertamum' => strftime('%Y-%m-%d %H:%M'),
|
||||||
|
'insertvon' => self::INSERT_VON
|
||||||
|
)
|
||||||
|
);
|
||||||
|
|
||||||
|
if (isError($result))
|
||||||
|
$this->logError(getError($result));
|
||||||
|
else
|
||||||
|
$count++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->logInfo('End Meldezettel Job', array('Number of changes ' => $count));
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -362,6 +362,8 @@ class InfoCenter extends Auth_Controller
|
|||||||
$data[self::ORIGIN_PAGE] = $origin_page;
|
$data[self::ORIGIN_PAGE] = $origin_page;
|
||||||
$data[self::PREV_FILTER_ID] = $this->input->get(self::PREV_FILTER_ID);
|
$data[self::PREV_FILTER_ID] = $this->input->get(self::PREV_FILTER_ID);
|
||||||
|
|
||||||
|
$data['studiensemester'] = $this->variablelib->getVar('infocenter_studiensemester');
|
||||||
|
|
||||||
$this->load->view('system/infocenter/infocenterDetails.php', $data);
|
$this->load->view('system/infocenter/infocenterDetails.php', $data);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -393,10 +393,10 @@ abstract class Notiz_Controller extends FHCAPI_Controller
|
|||||||
|
|
||||||
foreach ($result as $doc) {
|
foreach ($result as $doc) {
|
||||||
$res = $this->dmslib->removeAll($doc->dms_id);
|
$res = $this->dmslib->removeAll($doc->dms_id);
|
||||||
if (isError($result))
|
if (isError($res))
|
||||||
{
|
{
|
||||||
$this->db->trans_rollback();
|
$this->db->trans_rollback();
|
||||||
$this->terminateWithError(getError($result), self::ERROR_TYPE_GENERAL);
|
$this->terminateWithError(getError($res), self::ERROR_TYPE_GENERAL);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -29,13 +29,36 @@ class Tag_Controller extends FHCAPI_Controller
|
|||||||
$this->load->model('person/Notiz_model', 'NotizModel');
|
$this->load->model('person/Notiz_model', 'NotizModel');
|
||||||
$this->load->model('system/Notiztyp_model', 'NotiztypModel');
|
$this->load->model('system/Notiztyp_model', 'NotiztypModel');
|
||||||
$this->load->model('person/Notizzuordnung_model', 'NotizzuordnungModel');
|
$this->load->model('person/Notizzuordnung_model', 'NotizzuordnungModel');
|
||||||
|
|
||||||
|
$this->loadPhrases([
|
||||||
|
'ui'
|
||||||
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getTag()
|
public function getTag($readonly_tags = null)
|
||||||
{
|
{
|
||||||
$language = $this->_getLanguageIndex();
|
$language = $this->_getLanguageIndex();
|
||||||
$id = $this->input->get('id');
|
$id = $this->input->get('id');
|
||||||
|
|
||||||
|
if (is_array($readonly_tags) && !isEmptyArray($readonly_tags))
|
||||||
|
{
|
||||||
|
$readonly_tags = $this->_filterTag($readonly_tags, true);
|
||||||
|
|
||||||
|
foreach ($readonly_tags as $key => $tag)
|
||||||
|
{
|
||||||
|
$readonly_tags[$key] = $this->NotizModel->db->escape($tag);
|
||||||
|
}
|
||||||
|
$tags = '(' . implode(',', $readonly_tags) . ')';
|
||||||
|
|
||||||
|
$this->NotizModel->addSelect("
|
||||||
|
CASE
|
||||||
|
WHEN tbl_notiz_typ.typ_kurzbz IN $tags
|
||||||
|
THEN TRUE
|
||||||
|
ELSE FALSE
|
||||||
|
END as readonly
|
||||||
|
");
|
||||||
|
}
|
||||||
|
|
||||||
$this->NotizModel->addSelect(
|
$this->NotizModel->addSelect(
|
||||||
"tbl_notiz.titel,
|
"tbl_notiz.titel,
|
||||||
tbl_notiz.text,
|
tbl_notiz.text,
|
||||||
@@ -54,7 +77,7 @@ class Tag_Controller extends FHCAPI_Controller
|
|||||||
$this->NotizModel->addJoin('public.tbl_benutzer verfasserbenutzer', 'tbl_notiz.verfasser_uid = verfasserbenutzer.uid', 'LEFT');
|
$this->NotizModel->addJoin('public.tbl_benutzer verfasserbenutzer', 'tbl_notiz.verfasser_uid = verfasserbenutzer.uid', 'LEFT');
|
||||||
$this->NotizModel->addJoin('public.tbl_person verfasserperson', 'verfasserbenutzer.person_id = verfasserperson.person_id', 'LEFT');
|
$this->NotizModel->addJoin('public.tbl_person verfasserperson', 'verfasserbenutzer.person_id = verfasserperson.person_id', 'LEFT');
|
||||||
|
|
||||||
$this->NotizModel->addJoin('public.tbl_benutzer bearbeiterbenutzer', 'tbl_notiz.verfasser_uid = bearbeiterbenutzer.uid', 'LEFT');
|
$this->NotizModel->addJoin('public.tbl_benutzer bearbeiterbenutzer', 'tbl_notiz.bearbeiter_uid = bearbeiterbenutzer.uid', 'LEFT');
|
||||||
$this->NotizModel->addJoin('public.tbl_person bearbeiterperson', 'bearbeiterbenutzer.person_id = bearbeiterperson.person_id', 'LEFT');
|
$this->NotizModel->addJoin('public.tbl_person bearbeiterperson', 'bearbeiterbenutzer.person_id = bearbeiterperson.person_id', 'LEFT');
|
||||||
|
|
||||||
$notiz = $this->NotizModel->loadWhere(array('notiz_id' => $id));
|
$notiz = $this->NotizModel->loadWhere(array('notiz_id' => $id));
|
||||||
@@ -62,7 +85,7 @@ class Tag_Controller extends FHCAPI_Controller
|
|||||||
$this->terminateWithSuccess(hasData($notiz) ? getData($notiz)[0] : array());
|
$this->terminateWithSuccess(hasData($notiz) ? getData($notiz)[0] : array());
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getTags()
|
public function getTags($tags = null)
|
||||||
{
|
{
|
||||||
$this->NotiztypModel->addSelect(
|
$this->NotiztypModel->addSelect(
|
||||||
'typ_kurzbz as tag_typ_kurzbz,
|
'typ_kurzbz as tag_typ_kurzbz,
|
||||||
@@ -73,19 +96,36 @@ class Tag_Controller extends FHCAPI_Controller
|
|||||||
'
|
'
|
||||||
);
|
);
|
||||||
$this->NotiztypModel->addOrder('prioritaet');
|
$this->NotiztypModel->addOrder('prioritaet');
|
||||||
|
|
||||||
|
if (is_array($tags) && !isEmptyArray($tags))
|
||||||
|
{
|
||||||
|
$tags = $this->_filterTag($tags, false);
|
||||||
|
$this->NotiztypModel->db->where_in('typ_kurzbz', $tags);
|
||||||
|
}
|
||||||
|
|
||||||
$notiztypen = $this->NotiztypModel->loadWhere(array('aktiv' => true));
|
$notiztypen = $this->NotiztypModel->loadWhere(array('aktiv' => true));
|
||||||
$this->terminateWithSuccess(hasData($notiztypen) ? getData($notiztypen) : array());
|
$this->terminateWithSuccess(hasData($notiztypen) ? getData($notiztypen) : array());
|
||||||
}
|
}
|
||||||
|
|
||||||
public function addTag($withZuordnung = true)
|
public function addTag($withZuordnung = true, $updatable_tags = null)
|
||||||
{
|
{
|
||||||
$postData = $this->getPostJson();
|
$postData = $this->getPostJson();
|
||||||
|
|
||||||
$checkTyp = $this->NotiztypModel->loadWhere(array('typ_kurzbz' => $postData->tag_typ_kurzbz));
|
$checkTyp = $this->NotiztypModel->loadWhere(array('typ_kurzbz' => $postData->tag_typ_kurzbz));
|
||||||
|
|
||||||
if (!hasData($checkTyp))
|
if (isError($checkTyp))
|
||||||
$this->terminateWithError('Error occurred', self::ERROR_TYPE_GENERAL);
|
$this->terminateWithError($this->p->t('ui', 'fehlerBeimLesen'));
|
||||||
|
|
||||||
|
if (!hasData($checkTyp))
|
||||||
|
$this->terminateWithError($this->p->t('ui', 'fehlerBeimLesen'));
|
||||||
|
|
||||||
|
if (is_array($updatable_tags) && !isEmptyArray($updatable_tags))
|
||||||
|
{
|
||||||
|
$tags = $this->_filterTag($updatable_tags, false);
|
||||||
|
|
||||||
|
if (!in_array($postData->tag_typ_kurzbz, $tags))
|
||||||
|
$this->terminateWithError($this->p->t('ui', 'keineBerechtigung'));
|
||||||
|
}
|
||||||
|
|
||||||
if ($withZuordnung)
|
if ($withZuordnung)
|
||||||
{
|
{
|
||||||
@@ -125,48 +165,88 @@ class Tag_Controller extends FHCAPI_Controller
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private function addNotiz($postData)
|
public function updateTag($updatable_tags = null)
|
||||||
{
|
|
||||||
return $this->NotizModel->insert(array(
|
|
||||||
'titel' => 'TAG', //TODO klären
|
|
||||||
'text' => $postData->notiz,
|
|
||||||
'verfasser_uid' => $this->_uid,
|
|
||||||
'erledigt' => false,
|
|
||||||
'insertamum' => date('Y-m-d H:i:s'),
|
|
||||||
'insertvon' => $this->_uid,
|
|
||||||
'typ' => $postData->tag_typ_kurzbz
|
|
||||||
));
|
|
||||||
|
|
||||||
}
|
|
||||||
public function updateTag()
|
|
||||||
{
|
{
|
||||||
$postData = $this->getPostJson();
|
$postData = $this->getPostJson();
|
||||||
|
$post_tag = $this->NotizModel->loadWhere(array('notiz_id' => $postData->id));
|
||||||
|
|
||||||
|
if (isError($post_tag))
|
||||||
|
$this->terminateWithError($this->p->t('ui', 'fehlerBeimLesen'));
|
||||||
|
|
||||||
|
if (!hasData($post_tag))
|
||||||
|
$this->terminateWithError($this->p->t('ui', 'fehlerBeimLesen'));
|
||||||
|
|
||||||
|
if (is_array($updatable_tags) && !isEmptyArray($updatable_tags))
|
||||||
|
{
|
||||||
|
$tags = $this->_filterTag($updatable_tags, false);
|
||||||
|
|
||||||
|
$post_tag_typ = getData($post_tag)[0]->typ;
|
||||||
|
|
||||||
|
if (!in_array($post_tag_typ, $tags))
|
||||||
|
$this->terminateWithError($this->p->t('ui', 'keineBerechtigung'));
|
||||||
|
}
|
||||||
|
|
||||||
$updateData = $this->NotizModel->update(array('notiz_id' => $postData->id),
|
$updateData = $this->NotizModel->update(array('notiz_id' => $postData->id),
|
||||||
array('text' => $postData->notiz,
|
array('text' => $postData->notiz,
|
||||||
'updateamum' => date('Y-m-d H:i:s'),
|
'updateamum' => date('Y-m-d H:i:s'),
|
||||||
'updatevon' => $this->_uid,
|
'updatevon' => $this->_uid,
|
||||||
'bearbeiter_uid' => $this->_uid,
|
'bearbeiter_uid' => $this->_uid,
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
$this->terminateWithSuccess($updateData);
|
$this->terminateWithSuccess($updateData);
|
||||||
}
|
}
|
||||||
public function doneTag()
|
public function doneTag($updatable_tags = null)
|
||||||
{
|
{
|
||||||
$postData = $this->getPostJson();
|
$postData = $this->getPostJson();
|
||||||
|
$post_tag = $this->NotizModel->loadWhere(array('notiz_id' => $postData->id));
|
||||||
|
|
||||||
|
if (isError($post_tag))
|
||||||
|
$this->terminateWithError($this->p->t('ui', 'fehlerBeimLesen'));
|
||||||
|
|
||||||
|
if (!hasData($post_tag))
|
||||||
|
$this->terminateWithError($this->p->t('ui', 'fehlerBeimLesen'));
|
||||||
|
|
||||||
|
if (is_array($updatable_tags) && !isEmptyArray($updatable_tags))
|
||||||
|
{
|
||||||
|
$tags = $this->_filterTag($updatable_tags, false);
|
||||||
|
|
||||||
|
$post_tag_typ = getData($post_tag)[0]->typ;
|
||||||
|
|
||||||
|
if (!in_array($post_tag_typ, $tags))
|
||||||
|
$this->terminateWithError($this->p->t('ui', 'keineBerechtigung'));
|
||||||
|
}
|
||||||
|
|
||||||
$updateData = $this->NotizModel->update(array('notiz_id' => $postData->id),
|
$updateData = $this->NotizModel->update(array('notiz_id' => $postData->id),
|
||||||
array('erledigt' => !$postData->done,
|
array('erledigt' => !$postData->done,
|
||||||
|
'text' => $postData->notiz,
|
||||||
'updateamum' => date('Y-m-d H:i:s'),
|
'updateamum' => date('Y-m-d H:i:s'),
|
||||||
'updatevon' => $this->_uid,
|
'updatevon' => $this->_uid,
|
||||||
'bearbeiter_uid' => $this->_uid,
|
'bearbeiter_uid' => $this->_uid,
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
|
|
||||||
$this->terminateWithSuccess($updateData);
|
$this->terminateWithSuccess($updateData);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function deleteTag($withZuordnung = true)
|
public function deleteTag($withZuordnung = true, $updatable_tags = null)
|
||||||
{
|
{
|
||||||
$postData = $this->getPostJson();
|
$postData = $this->getPostJson();
|
||||||
|
$post_tag = $this->NotizModel->loadWhere(array('notiz_id' => $postData->id));
|
||||||
|
|
||||||
|
if (isError($post_tag))
|
||||||
|
$this->terminateWithError($this->p->t('ui', 'fehlerBeimLesen'));
|
||||||
|
|
||||||
|
if (!hasData($post_tag))
|
||||||
|
$this->terminateWithError($this->p->t('ui', 'fehlerBeimLesen'));
|
||||||
|
|
||||||
|
if (is_array($updatable_tags) && !isEmptyArray($updatable_tags))
|
||||||
|
{
|
||||||
|
$tags = $this->_filterTag($updatable_tags, false);
|
||||||
|
|
||||||
|
$post_tag_typ = getData($post_tag)[0]->typ;
|
||||||
|
|
||||||
|
if (!in_array($post_tag_typ, $tags))
|
||||||
|
$this->terminateWithError($this->p->t('ui', 'keineBerechtigung'));
|
||||||
|
}
|
||||||
|
|
||||||
$deleteNotiz = "";
|
$deleteNotiz = "";
|
||||||
if ($withZuordnung)
|
if ($withZuordnung)
|
||||||
@@ -208,5 +288,27 @@ class Tag_Controller extends FHCAPI_Controller
|
|||||||
return hasData($result) ? getData($result)[0]->index : 1;
|
return hasData($result) ? getData($result)[0]->index : 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private function _filterTag($tags, $readonly = true)
|
||||||
|
{
|
||||||
|
$filtered_tags = array_filter($tags, function ($tag) use ($readonly)
|
||||||
|
{
|
||||||
|
return isset($tag['readonly']) && $tag['readonly'] === $readonly;
|
||||||
|
});
|
||||||
|
|
||||||
|
return array_keys($filtered_tags);
|
||||||
|
}
|
||||||
|
|
||||||
|
private function addNotiz($postData)
|
||||||
|
{
|
||||||
|
return $this->NotizModel->insert(array(
|
||||||
|
'titel' => 'TAG', //TODO klären
|
||||||
|
'text' => $postData->notiz,
|
||||||
|
'verfasser_uid' => $this->_uid,
|
||||||
|
'erledigt' => false,
|
||||||
|
'insertamum' => date('Y-m-d H:i:s'),
|
||||||
|
'insertvon' => $this->_uid,
|
||||||
|
'typ' => $postData->tag_typ_kurzbz
|
||||||
|
));
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Copyright (C) 2022 fhcomplete.org
|
* Copyright (C) 2025 fhcomplete.org
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* 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
|
* it under the terms of the GNU General Public License as published by
|
||||||
@@ -177,7 +177,7 @@ class FilterCmptLib
|
|||||||
$session = $this->getSession();
|
$session = $this->getSession();
|
||||||
|
|
||||||
// If session is NOT empty -> a filter was already loaded
|
// If session is NOT empty -> a filter was already loaded
|
||||||
if ($session != null)
|
if (!isError($session) && $session != null)
|
||||||
{
|
{
|
||||||
// Retrieve the filterId stored in the session
|
// Retrieve the filterId stored in the session
|
||||||
$sessionFilterId = $this->_getSessionElement(FilterCmptLib::FILTER_ID);
|
$sessionFilterId = $this->_getSessionElement(FilterCmptLib::FILTER_ID);
|
||||||
@@ -219,9 +219,7 @@ class FilterCmptLib
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
else
|
||||||
// If the session is empty -> first time that this filter is loaded
|
|
||||||
if ($session == null)
|
|
||||||
{
|
{
|
||||||
// Load filter definition data from DB
|
// Load filter definition data from DB
|
||||||
$definition = $this->_loadDefinition(
|
$definition = $this->_loadDefinition(
|
||||||
@@ -602,7 +600,7 @@ class FilterCmptLib
|
|||||||
{
|
{
|
||||||
$session = getSessionElement(self::SESSION_NAME, $this->_filterUniqueId);
|
$session = getSessionElement(self::SESSION_NAME, $this->_filterUniqueId);
|
||||||
|
|
||||||
if (isset($session[$name]))
|
if (!isError($session) && isset($session[$name]))
|
||||||
{
|
{
|
||||||
return $session[$name];
|
return $session[$name];
|
||||||
}
|
}
|
||||||
@@ -623,7 +621,7 @@ class FilterCmptLib
|
|||||||
|
|
||||||
if (!$this->_ci->permissionlib->hasAtLeastOne($this->_requiredPermissions, self::PERMISSION_FILTER_METHOD, self::PERMISSION_TYPE))
|
if (!$this->_ci->permissionlib->hasAtLeastOne($this->_requiredPermissions, self::PERMISSION_FILTER_METHOD, self::PERMISSION_TYPE))
|
||||||
{
|
{
|
||||||
$this->_setSession(error('The required permission is not help by the logged user'));
|
$this->_setSession(error('The required permission is not held by the logged user'));
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -904,7 +902,7 @@ class FilterCmptLib
|
|||||||
$filterCmptsSession = getSession(self::SESSION_NAME);
|
$filterCmptsSession = getSession(self::SESSION_NAME);
|
||||||
|
|
||||||
// If something is present in session
|
// If something is present in session
|
||||||
if ($filterCmptsSession != null)
|
if (!isError($filterCmptsSession) && $filterCmptsSession != null)
|
||||||
{
|
{
|
||||||
// Loops in the session for all the filter components
|
// Loops in the session for all the filter components
|
||||||
foreach ($filterCmptsSession as $filterCmpt => $filterCmptData)
|
foreach ($filterCmptsSession as $filterCmpt => $filterCmptData)
|
||||||
@@ -951,9 +949,11 @@ class FilterCmptLib
|
|||||||
{
|
{
|
||||||
$session = getSessionElement(self::SESSION_NAME, $this->_filterUniqueId);
|
$session = getSessionElement(self::SESSION_NAME, $this->_filterUniqueId);
|
||||||
|
|
||||||
$session[$name] = $value;
|
if (!isError($session) && $session != null)
|
||||||
|
{
|
||||||
setSessionElement(self::SESSION_NAME, $this->_filterUniqueId, $session); // stores the single value
|
$session[$name] = $value;
|
||||||
|
setSessionElement(self::SESSION_NAME, $this->_filterUniqueId, $session); // stores the single value
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -965,7 +965,7 @@ class FilterCmptLib
|
|||||||
$filterCmptsSession = getSession(self::SESSION_NAME);
|
$filterCmptsSession = getSession(self::SESSION_NAME);
|
||||||
|
|
||||||
// If something is present in session
|
// If something is present in session
|
||||||
if ($filterCmptsSession != null)
|
if (!isError($filterCmptsSession) && $filterCmptsSession != null)
|
||||||
{
|
{
|
||||||
// Loops in the session for all the filter components
|
// Loops in the session for all the filter components
|
||||||
foreach ($filterCmptsSession as $filterCmpt => $filterCmptData)
|
foreach ($filterCmptsSession as $filterCmpt => $filterCmptData)
|
||||||
@@ -1174,3 +1174,4 @@ class FilterCmptLib
|
|||||||
return $filterName;
|
return $filterName;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,342 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
if (! defined('BASEPATH')) exit('No direct script access allowed');
|
||||||
|
|
||||||
|
class LektorLib
|
||||||
|
{
|
||||||
|
private $_ci; // Code igniter instance
|
||||||
|
|
||||||
|
public function __construct()
|
||||||
|
{
|
||||||
|
$this->_ci =& get_instance();
|
||||||
|
$this->_ci->load->model('education/lehreinheit_model', 'LehreinheitModel');
|
||||||
|
$this->_ci->load->model('education/Lehreinheitmitarbeiter_model', 'LehreinheitmitarbeiterModel');
|
||||||
|
$this->_ci->load->model('organisation/Studiensemester_model','StudiensemesterModel');
|
||||||
|
$this->_ci->load->model('ressource/Stundensatz_model', 'StundensatzModel');
|
||||||
|
$this->_ci->load->model('vertragsbestandteil/Dienstverhaeltnis_model','DienstverhaeltnisModel');
|
||||||
|
$this->_ci->load->model('organisation/Organisationseinheit_model', 'OrganisationseinheitModel');
|
||||||
|
$this->_ci->load->model('ressource/mitarbeiter_model', 'MitarbeiterModel');
|
||||||
|
$this->_ci->load->model('person/Benutzer_model', 'BenutzerModel');
|
||||||
|
}
|
||||||
|
|
||||||
|
public function addLektorToLehreinheit($lehreinheit_id, $mitarbeiter_uid)
|
||||||
|
{
|
||||||
|
$this->_ci->LehreinheitModel->addSelect('tbl_lehreinheit.*, tbl_lehrveranstaltung.studiengang_kz, semesterstunden');
|
||||||
|
$this->_ci->LehreinheitModel->addJoin('lehre.tbl_lehrveranstaltung', 'lehrveranstaltung_id');
|
||||||
|
$lehreinheit_result = $this->_ci->LehreinheitModel->loadWhere(array('lehreinheit_id' => $lehreinheit_id));
|
||||||
|
|
||||||
|
if (isError($lehreinheit_result)) return $lehreinheit_result;
|
||||||
|
|
||||||
|
if (!hasData($lehreinheit_result)) return error("Lehreinheit not found");
|
||||||
|
|
||||||
|
$lehreinheit = getData($lehreinheit_result)[0];
|
||||||
|
|
||||||
|
$already_assigned = $this->_ci->LehreinheitmitarbeiterModel->loadWhere(array('lehreinheit_id' => $lehreinheit->lehreinheit_id, 'mitarbeiter_uid' => $mitarbeiter_uid));
|
||||||
|
|
||||||
|
if (isError($already_assigned)) return $already_assigned;
|
||||||
|
|
||||||
|
if (hasData($already_assigned)) return error('Lektor already assigned');
|
||||||
|
|
||||||
|
$studiensemester_result = $this->_ci->StudiensemesterModel->loadWhere(array('studiensemester_kurzbz' => $lehreinheit->studiensemester_kurzbz));
|
||||||
|
if (isError($studiensemester_result)) return $studiensemester_result;
|
||||||
|
$studiensemester = getData($studiensemester_result)[0];
|
||||||
|
|
||||||
|
$stundensatz = $this->_ci->StundensatzModel->getDefaultStundensatz($mitarbeiter_uid, $studiensemester->start, $studiensemester->ende, 'lehre');
|
||||||
|
$echter_dv_result = $this->_ci->DienstverhaeltnisModel->existsDienstverhaeltnis($mitarbeiter_uid, $studiensemester->start, $studiensemester->ende, 'echterdv');
|
||||||
|
|
||||||
|
$echter_dv = false;
|
||||||
|
|
||||||
|
if (hasData($echter_dv_result))
|
||||||
|
{
|
||||||
|
$echter_dv = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
$maxstunden = $this->getMaxStunden($mitarbeiter_uid, $studiensemester->studiensemester_kurzbz, $lehreinheit->studiengang_kz, $echter_dv);
|
||||||
|
|
||||||
|
$newData['semesterstunden'] = 0;
|
||||||
|
$newData['planstunden'] = 0;
|
||||||
|
if (!is_null($lehreinheit->semesterstunden))
|
||||||
|
{
|
||||||
|
$newData['semesterstunden'] = min($lehreinheit->semesterstunden, $maxstunden);
|
||||||
|
$newData['planstunden'] = min($lehreinheit->semesterstunden, $maxstunden);
|
||||||
|
}
|
||||||
|
|
||||||
|
$newData['lehreinheit_id'] = $lehreinheit->lehreinheit_id;
|
||||||
|
$newData['mitarbeiter_uid'] = $mitarbeiter_uid;
|
||||||
|
$newData['lehrfunktion_kurzbz'] = 'Lektor';
|
||||||
|
$newData['bismelden'] = true;
|
||||||
|
$newData['insertvon'] = getAuthUID();
|
||||||
|
$newData['insertamum'] = date('Y-m-d H:i:s');
|
||||||
|
$newData['stundensatz'] = $stundensatz;
|
||||||
|
$result = $this->_ci->LehreinheitmitarbeiterModel->insert($newData);
|
||||||
|
|
||||||
|
if (isError($result)) return $result;
|
||||||
|
|
||||||
|
return success("Lektor added successfully");
|
||||||
|
}
|
||||||
|
|
||||||
|
public function updateLektorFromLehreinheit($lehreinheit_id, $mitarbeiter_uid, $new_data)
|
||||||
|
{
|
||||||
|
$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));
|
||||||
|
|
||||||
|
if (isError($lehreinheit_result)) return $lehreinheit_result;
|
||||||
|
|
||||||
|
if (!hasData($lehreinheit_result)) return error("Lehreinheit not found");
|
||||||
|
|
||||||
|
$lehreinheit = getData($lehreinheit_result)[0];
|
||||||
|
|
||||||
|
//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)
|
||||||
|
{
|
||||||
|
$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('Wechsel vom Mitarbeiter nicht möglich da er bereits verplant ist!');
|
||||||
|
}
|
||||||
|
$warning = '';
|
||||||
|
if (isset($new_data['semesterstunden']))
|
||||||
|
{
|
||||||
|
$studiengang_result = $this->_ci->StudiengangModel->loadWhere(array('studiengang_kz' => $lehreinheit->studiengang_kz));
|
||||||
|
if (isError($studiengang_result)) return $studiengang_result;
|
||||||
|
if (!hasData($studiengang_result)) return error('Studiengang not found');
|
||||||
|
$studiengang = getData($studiengang_result)[0];
|
||||||
|
|
||||||
|
$studiensemester_result = $this->_ci->StudiensemesterModel->loadWhere(array('studiensemester_kurzbz' => $lehreinheit->studiensemester_kurzbz));
|
||||||
|
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 = false;
|
||||||
|
|
||||||
|
if (hasData($echter_dv_result))
|
||||||
|
{
|
||||||
|
$echter_dv = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
$neue_stunden_eingerechnet = isset($new_data['bismelden']) ? $new_data['bismelden'] : $lehreinheit->bismelden;
|
||||||
|
$alte_stunden_eingerechnet = $lehreinheit->bismelden;
|
||||||
|
|
||||||
|
if (($new_data['semesterstunden'] > $lehreinheit->semesterstunden) || $neue_stunden_eingerechnet)
|
||||||
|
{
|
||||||
|
$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);
|
||||||
|
}
|
||||||
|
|
||||||
|
$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')))
|
||||||
|
{
|
||||||
|
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(isset($formData['mitarbeiter_uid']) ? $formData['mitarbeiter_uid'] : $mitarbeiter_uid));
|
||||||
|
|
||||||
|
if (isError($benutzer_result)) return $benutzer_result;
|
||||||
|
|
||||||
|
if (!hasData($benutzer_result)) return error('Benutzer not found');
|
||||||
|
|
||||||
|
$benutzer_aktiv = getData($benutzer_result)[0]->aktiv;
|
||||||
|
|
||||||
|
if (!$benutzer_aktiv)
|
||||||
|
$warning .= "Achtung: Der/Die Benutzer*in ist inaktiv!\nBitte informieren Sie die Personalbteilung.\nDaten wurden gespeichert.\n\n";
|
||||||
|
|
||||||
|
$updatableFields = array(
|
||||||
|
'semesterstunden',
|
||||||
|
'planstunden',
|
||||||
|
'stundensatz',
|
||||||
|
'faktor',
|
||||||
|
'anmerkung',
|
||||||
|
'lehrfunktion_kurzbz',
|
||||||
|
'mitarbeiter_uid',
|
||||||
|
'bismelden'
|
||||||
|
);
|
||||||
|
|
||||||
|
$updateData = array();
|
||||||
|
foreach ($updatableFields as $field)
|
||||||
|
{
|
||||||
|
$value = isset($new_data[$field]) ? $new_data[$field] : null;
|
||||||
|
|
||||||
|
if ($value !== null)
|
||||||
|
{
|
||||||
|
$updateData[$field] = $value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
$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);
|
||||||
|
|
||||||
|
if (isError($result)) return $result;
|
||||||
|
|
||||||
|
if ($warning !== '') return success(['warning' => $warning]);
|
||||||
|
|
||||||
|
return success('Erfolgreich geupdated');
|
||||||
|
}
|
||||||
|
|
||||||
|
private function getMaxStunden($mitarbeiter_uid, $studiensemester_kurzbz, $studiengang_kz, $echter_dv)
|
||||||
|
{
|
||||||
|
$maxstunden = 9999;
|
||||||
|
|
||||||
|
$studiengang_result = $this->_ci->StudiengangModel->loadWhere(array('studiengang_kz' => $studiengang_kz));
|
||||||
|
if (isError($studiengang_result)) return $studiengang_result;
|
||||||
|
|
||||||
|
$studiengang = getData($studiengang_result)[0];
|
||||||
|
|
||||||
|
$stundengrenze_result = $this->_ci->OrganisationseinheitModel->getStundengrenze($studiengang->oe_kurzbz, $echter_dv);
|
||||||
|
if (isError($stundengrenze_result)) return $stundengrenze_result;
|
||||||
|
|
||||||
|
$stundengrenze = getData($stundengrenze_result)[0];
|
||||||
|
$maxstunden = $stundengrenze->stunden;
|
||||||
|
|
||||||
|
$lehrauftrag_firma = $this->LehrauftragAufFirma($mitarbeiter_uid);
|
||||||
|
|
||||||
|
if (!$echter_dv && !$lehrauftrag_firma)
|
||||||
|
{
|
||||||
|
$oe_result = $this->_ci->OrganisationseinheitModel->getChilds($stundengrenze->oe_kurzbz);
|
||||||
|
$oe_array = hasData($oe_result) ? array_column(getData($oe_result), 'oe_kurzbz') : array('');
|
||||||
|
|
||||||
|
$stunden_summe_result = $this->getSumSemesterstunden($mitarbeiter_uid, $studiensemester_kurzbz, $oe_array);
|
||||||
|
|
||||||
|
$stunden_summe = hasData($stunden_summe_result) ? getData($stunden_summe_result)[0]->summe : 0;
|
||||||
|
|
||||||
|
if ($stunden_summe >= $maxstunden && (!$this->_ci->permissionlib->isBerechtigt('admin')))
|
||||||
|
{
|
||||||
|
$stunden_limit_result = $this->getStundenInstitut($mitarbeiter_uid, $studiensemester_kurzbz, $oe_array);
|
||||||
|
|
||||||
|
$error = "ACHTUNG: Die maximal erlaubte Semesterstundenanzahl des Lektors von $maxstunden Stunden ($stundengrenze->oe_kurzbz) wurde ueberschritten!\n
|
||||||
|
Daten wurden NICHT gespeichert!\n\n";
|
||||||
|
|
||||||
|
if (hasData($stunden_limit_result))
|
||||||
|
{
|
||||||
|
$stunden_limit_array = getData($stunden_limit_result);
|
||||||
|
|
||||||
|
foreach ($stunden_limit_array as $stunden_limit)
|
||||||
|
{
|
||||||
|
$error .= $stunden_limit->summe . ' Stunden ' . $stunden_limit->bezeichnung . "\n";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return error($error);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
$maxstunden =- $stunden_summe;
|
||||||
|
}
|
||||||
|
return $maxstunden;
|
||||||
|
}
|
||||||
|
|
||||||
|
private function LehrauftragAufFirma($mitarbeiter_uid)
|
||||||
|
{
|
||||||
|
$this->_ci->MitarbeiterModel->addJoin('tbl_benutzer', 'tbl_mitarbeiter.mitarbeiter_uid = tbl_benutzer.uid');
|
||||||
|
$this->_ci->MitarbeiterModel->addJoin('tbl_person', 'person_id');
|
||||||
|
$this->_ci->MitarbeiterModel->addJoin('tbl_adresse', 'person_id', 'LEFT');
|
||||||
|
$this->_ci->MitarbeiterModel->addOrder('zustelladresse', 'DESC');
|
||||||
|
$this->_ci->MitarbeiterModel->addOrder('firma_id');
|
||||||
|
$this->_ci->MitarbeiterModel->addLimit(1);
|
||||||
|
$firma_result = $this->_ci->MitarbeiterModel->loadWhere(array('mitarbeiter_uid' => $mitarbeiter_uid));
|
||||||
|
$firma = getData($firma_result)[0]->firma_id;
|
||||||
|
return !is_null($firma);
|
||||||
|
}
|
||||||
|
|
||||||
|
private function getSumSemesterstunden($mitarbeiter_uid, $studiensemester_kurzbz, $oe_array = array())
|
||||||
|
{
|
||||||
|
$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', $mitarbeiter_uid);
|
||||||
|
$this->_ci->LehreinheitmitarbeiterModel->db->where('studiensemester_kurzbz', $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);
|
||||||
|
return $this->_ci->LehreinheitmitarbeiterModel->load();
|
||||||
|
}
|
||||||
|
|
||||||
|
private function getStundenInstitut($mitarbeiter_uid, $studiensemester_kurzbz, $oe_array = array())
|
||||||
|
{
|
||||||
|
$this->_ci->LehreinheitmitarbeiterModel->addSelect('SUM(tbl_lehreinheitmitarbeiter.semesterstunden) as summe, tbl_studiengang.bezeichnung');
|
||||||
|
$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', $mitarbeiter_uid);
|
||||||
|
$this->_ci->LehreinheitmitarbeiterModel->db->where('studiensemester_kurzbz', $studiensemester_kurzbz);
|
||||||
|
$this->_ci->LehreinheitmitarbeiterModel->db->where('bismelden', true);
|
||||||
|
$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);
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->_ci->LehreinheitmitarbeiterModel->addGroupBy('tbl_studiengang.bezeichnung');
|
||||||
|
return $this->_ci->LehreinheitmitarbeiterModel->load();
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -183,7 +183,10 @@ class ProfilLib{
|
|||||||
$zutrittskarte_ausgegebenam = $zutrittskarte_ausgegebenam ? current($zutrittskarte_ausgegebenam)->ausgegebenam : null;
|
$zutrittskarte_ausgegebenam = $zutrittskarte_ausgegebenam ? current($zutrittskarte_ausgegebenam)->ausgegebenam : null;
|
||||||
|
|
||||||
//? formats date from 01-01-2000 to 01.01.2000
|
//? formats date from 01-01-2000 to 01.01.2000
|
||||||
$zutrittskarte_ausgegebenam = str_replace("-", ".", $zutrittskarte_ausgegebenam);
|
if ($zutrittskarte_ausgegebenam !== NULL)
|
||||||
|
{
|
||||||
|
$zutrittskarte_ausgegebenam = (new DateTime($zutrittskarte_ausgegebenam))->format('d.m.Y');
|
||||||
|
}
|
||||||
return $zutrittskarte_ausgegebenam;
|
return $zutrittskarte_ausgegebenam;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -196,7 +199,7 @@ class ProfilLib{
|
|||||||
private function getAdressenInfo($pid)
|
private function getAdressenInfo($pid)
|
||||||
{
|
{
|
||||||
$this->ci->load->model("person/Adresse_model","AdresseModel");
|
$this->ci->load->model("person/Adresse_model","AdresseModel");
|
||||||
$adresse_res = $this->ci->AdresseModel->addSelect(["adresse_id", "strasse", "tbl_adressentyp.bezeichnung as typ", "plz", "ort", "zustelladresse", "gemeinde", "nation"]);
|
$adresse_res = $this->ci->AdresseModel->addSelect(["adresse_id", "strasse", "tbl_adressentyp.bezeichnung as typ", "plz", "ort", "heimatadresse", "zustelladresse", "gemeinde", "nation"]);
|
||||||
$adresse_res = $this->ci->AdresseModel->addOrder("zustelladresse", "DESC");
|
$adresse_res = $this->ci->AdresseModel->addOrder("zustelladresse", "DESC");
|
||||||
$adresse_res = $this->ci->AdresseModel->addJoin("tbl_adressentyp", "typ=adressentyp_kurzbz");
|
$adresse_res = $this->ci->AdresseModel->addJoin("tbl_adressentyp", "typ=adressentyp_kurzbz");
|
||||||
|
|
||||||
@@ -214,7 +217,7 @@ class ProfilLib{
|
|||||||
* @param integer $uid the userID used to get the kontakt information
|
* @param integer $uid the userID used to get the kontakt information
|
||||||
* @return array all the kontakt information corresponding to a userID
|
* @return array all the kontakt information corresponding to a userID
|
||||||
*/
|
*/
|
||||||
private function getKontaktInfo($pid)
|
private function getKontaktInfo($pid, $includehidden=false)
|
||||||
{
|
{
|
||||||
$this->ci->load->model("person/Kontakt_model","KontaktModel");
|
$this->ci->load->model("person/Kontakt_model","KontaktModel");
|
||||||
$this->ci->KontaktModel->addSelect(['kontakttyp', 'kontakt_id', 'kontakt', 'tbl_kontakt.anmerkung', 'tbl_kontakt.zustellung']);
|
$this->ci->KontaktModel->addSelect(['kontakttyp', 'kontakt_id', 'kontakt', 'tbl_kontakt.anmerkung', 'tbl_kontakt.zustellung']);
|
||||||
@@ -222,7 +225,13 @@ class ProfilLib{
|
|||||||
$this->ci->KontaktModel->addJoin('public.tbl_firma', 'firma_id', 'LEFT');
|
$this->ci->KontaktModel->addJoin('public.tbl_firma', 'firma_id', 'LEFT');
|
||||||
$this->ci->KontaktModel->addOrder('kontakttyp, kontakt, tbl_kontakt.updateamum, tbl_kontakt.insertamum');
|
$this->ci->KontaktModel->addOrder('kontakttyp, kontakt, tbl_kontakt.updateamum, tbl_kontakt.insertamum');
|
||||||
|
|
||||||
$kontakte_res = $this->ci->KontaktModel->loadWhere(['person_id' => $pid]);
|
$params = array('person_id' => $pid);
|
||||||
|
if(!$includehidden)
|
||||||
|
{
|
||||||
|
$params['kontakttyp <>'] = 'hidden';
|
||||||
|
}
|
||||||
|
|
||||||
|
$kontakte_res = $this->ci->KontaktModel->loadWhere($params);
|
||||||
if(isError($kontakte_res)){
|
if(isError($kontakte_res)){
|
||||||
return error(getData($kontakte_res));
|
return error(getData($kontakte_res));
|
||||||
}
|
}
|
||||||
@@ -303,10 +312,22 @@ class ProfilLib{
|
|||||||
private function getBenutzerFunktion($uid)
|
private function getBenutzerFunktion($uid)
|
||||||
{
|
{
|
||||||
$this->ci->load->model("person/Benutzerfunktion_model","BenutzerfunktionModel");
|
$this->ci->load->model("person/Benutzerfunktion_model","BenutzerfunktionModel");
|
||||||
$this->ci->BenutzerfunktionModel->addSelect(["tbl_benutzerfunktion.bezeichnung as Bezeichnung", "tbl_organisationseinheit.bezeichnung as Organisationseinheit", "datum_von as Gültig_von", "datum_bis as Gültig_bis", "wochenstunden as Wochenstunden"]);
|
$this->ci->BenutzerfunktionModel->addSelect([
|
||||||
|
"CASE WHEN (tbl_benutzerfunktion.bezeichnung IS NOT NULL AND tbl_benutzerfunktion.bezeichnung <> '' AND tbl_benutzerfunktion.bezeichnung <> tbl_funktion.beschreibung) THEN tbl_funktion.beschreibung || ' - ' || tbl_benutzerfunktion.bezeichnung ELSE tbl_funktion.beschreibung END as \"Bezeichnung\"",
|
||||||
|
"tbl_organisationseinheit.bezeichnung as Organisationseinheit",
|
||||||
|
"datum_von as Gültig_von",
|
||||||
|
"datum_bis as Gültig_bis",
|
||||||
|
"COALESCE(wochenstunden, '0'::numeric(5,2)) AS \"Wochenstunden\""
|
||||||
|
]);
|
||||||
|
$this->ci->BenutzerfunktionModel->addJoin("tbl_funktion", "funktion_kurzbz");
|
||||||
$this->ci->BenutzerfunktionModel->addJoin("tbl_organisationseinheit", "oe_kurzbz");
|
$this->ci->BenutzerfunktionModel->addJoin("tbl_organisationseinheit", "oe_kurzbz");
|
||||||
|
|
||||||
$benutzer_funktion_res = $this->ci->BenutzerfunktionModel->loadWhere(array('uid' => $uid));
|
$benutzer_funktion_res = $this->ci->BenutzerfunktionModel->loadWhere(
|
||||||
|
array(
|
||||||
|
'uid' => $uid,
|
||||||
|
'NOW()::date BETWEEN COALESCE(datum_von, \'1970-01-01\'::date) AND COALESCE(datum_bis, \'2170-12-01\'::date)' => null
|
||||||
|
)
|
||||||
|
);
|
||||||
if(isError($benutzer_funktion_res)){
|
if(isError($benutzer_funktion_res)){
|
||||||
return error(getData($benutzer_funktion_res));
|
return error(getData($benutzer_funktion_res));
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -229,9 +229,10 @@ class StundenplanLib
|
|||||||
$this->_ci->load->model('ressource/Stundenplan_model', 'StundenplanModel');
|
$this->_ci->load->model('ressource/Stundenplan_model', 'StundenplanModel');
|
||||||
|
|
||||||
$is_mitarbeiter = getData($this->_ci->MitarbeiterModel->isMitarbeiter(getAuthUID()));
|
$is_mitarbeiter = getData($this->_ci->MitarbeiterModel->isMitarbeiter(getAuthUID()));
|
||||||
|
|
||||||
if ($is_mitarbeiter) {
|
if ($is_mitarbeiter && empty($ort_kurzbz)) {
|
||||||
$reservierungen = $this->_ci->ReservierungModel->getReservierungenMitarbeiter($start_date, $end_date, $ort_kurzbz);
|
// request for personal lvplan show only reservations of logged in user
|
||||||
|
$reservierungen = $this->_ci->ReservierungModel->getReservierungenMitarbeiter($start_date, $end_date);
|
||||||
} else {
|
} else {
|
||||||
// querying the reservierungen
|
// querying the reservierungen
|
||||||
$reservierungen = $this->_ci->ReservierungModel->getReservierungen($start_date, $end_date, $ort_kurzbz);
|
$reservierungen = $this->_ci->ReservierungModel->getReservierungen($start_date, $end_date, $ort_kurzbz);
|
||||||
|
|||||||
@@ -384,6 +384,60 @@ class Vertrag_model extends DB_Model
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function getVertrag($mitarbeiter_uid, $lehreinheit_id)
|
||||||
|
{
|
||||||
|
$this->addSelect('tbl_lehreinheitmitarbeiter.*, tbl_vertrag.*, status.bezeichnung as vertragsstatus, status.vertragsstatus_kurzbz');
|
||||||
|
$this->addJoin('lehre.tbl_lehreinheitmitarbeiter', 'vertrag_id');
|
||||||
|
$this->addJoin('lehre.tbl_vertragstyp', 'vertragstyp_kurzbz', 'LEFT');
|
||||||
|
$this->addJoin('
|
||||||
|
(
|
||||||
|
SELECT DISTINCT ON(vertrag_id) vertrag_id,
|
||||||
|
bezeichnung,
|
||||||
|
tbl_vertragsstatus.vertragsstatus_kurzbz
|
||||||
|
FROM lehre.tbl_vertrag_vertragsstatus
|
||||||
|
JOIN lehre.tbl_vertragsstatus USING(vertragsstatus_kurzbz)
|
||||||
|
ORDER BY vertrag_id, datum DESC
|
||||||
|
) as status', 'status.vertrag_id = lehre.tbl_vertrag.vertrag_id', 'LEFT');
|
||||||
|
|
||||||
|
return $this->loadWhere(array('mitarbeiter_uid' => $mitarbeiter_uid, 'lehreinheit_id' => $lehreinheit_id));
|
||||||
|
}
|
||||||
|
|
||||||
|
public function cancelVertrag($vertrag_id, $mitarbeiter_uid)
|
||||||
|
{
|
||||||
|
$vertrag = $this->load($vertrag_id);
|
||||||
|
|
||||||
|
if (!hasData($vertrag))
|
||||||
|
return error("Contract not found");
|
||||||
|
|
||||||
|
$vertrag = getData($vertrag)[0];
|
||||||
|
|
||||||
|
$this->_updateVertragRelevant($vertrag->vertrag_id);
|
||||||
|
|
||||||
|
return $this->VertragvertragsstatusModel->insert(array(
|
||||||
|
'vertrag_id' => $vertrag->vertrag_id,
|
||||||
|
'vertragsstatus_kurzbz' => 'storno',
|
||||||
|
'uid' => $mitarbeiter_uid,
|
||||||
|
'datum' => 'NOW()',
|
||||||
|
'insertamum' => 'NOW()',
|
||||||
|
'insertvon' => getAuthUID()
|
||||||
|
));
|
||||||
|
}
|
||||||
|
|
||||||
|
public function deleteVertrag($vertrag_id)
|
||||||
|
{
|
||||||
|
$vertrag = $this->load($vertrag_id);
|
||||||
|
|
||||||
|
if (!hasData($vertrag))
|
||||||
|
return error("Contract not found");
|
||||||
|
|
||||||
|
$vertrag = getData($vertrag)[0];
|
||||||
|
|
||||||
|
$this->_updateVertragRelevant($vertrag->vertrag_id);
|
||||||
|
|
||||||
|
$this->VertragvertragsstatusModel->delete(array('vertrag_id' => $vertrag->vertrag_id));
|
||||||
|
return $this->delete(array('vertrag_id' => $vertrag->vertrag_id));
|
||||||
|
}
|
||||||
|
|
||||||
// -----------------------------------------------------------------------------------------------------------------
|
// -----------------------------------------------------------------------------------------------------------------
|
||||||
// Private methods
|
// Private methods
|
||||||
|
|
||||||
@@ -415,4 +469,20 @@ class Vertrag_model extends DB_Model
|
|||||||
|
|
||||||
return $bezeichnung;
|
return $bezeichnung;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private function _updateVertragRelevant($vertrag_id)
|
||||||
|
{
|
||||||
|
$this->LehreinheitmitarbeiterModel->update(
|
||||||
|
array("vertrag_id" => $vertrag_id),
|
||||||
|
array(
|
||||||
|
'vertrag_id' => null
|
||||||
|
)
|
||||||
|
);
|
||||||
|
$this->ProjektbetreuerModel->update(
|
||||||
|
array("vertrag_id" => $vertrag_id),
|
||||||
|
array(
|
||||||
|
'vertrag_id' => null
|
||||||
|
)
|
||||||
|
);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,4 +1,6 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
|
use \CI3_Events as Events;
|
||||||
class Lehreinheit_model extends DB_Model
|
class Lehreinheit_model extends DB_Model
|
||||||
{
|
{
|
||||||
|
|
||||||
@@ -15,6 +17,9 @@ class Lehreinheit_model extends DB_Model
|
|||||||
$this->load->model('education/lehreinheitgruppe_model', 'LehreinheitgruppeModel');
|
$this->load->model('education/lehreinheitgruppe_model', 'LehreinheitgruppeModel');
|
||||||
$this->load->model('education/lehreinheitmitarbeiter_model', 'LehreinheitmitarbeiterModel');
|
$this->load->model('education/lehreinheitmitarbeiter_model', 'LehreinheitmitarbeiterModel');
|
||||||
$this->load->model('organisation/studiengang_model', 'StudiengangModel');
|
$this->load->model('organisation/studiengang_model', 'StudiengangModel');
|
||||||
|
$this->load->model('ressource/stundenplandev_model', 'StundenplandevModel');
|
||||||
|
$this->load->model('ressource/stundenplan_model', 'StundenplanModel');
|
||||||
|
$this->load->model('system/Log_model', 'LogModel');
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -308,4 +313,424 @@ EOSQL;
|
|||||||
|
|
||||||
return $this->execQuery($query, $params);
|
return $this->execQuery($query, $params);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public function getOes($lehreinheit_id)
|
||||||
|
{
|
||||||
|
$this->addSelect('tbl_lehrveranstaltung.studiengang_kz,
|
||||||
|
tbl_lehrveranstaltung.lehrveranstaltung_id');
|
||||||
|
$this->addJoin('lehre.tbl_lehrveranstaltung', 'tbl_lehrveranstaltung.lehrveranstaltung_id = tbl_lehreinheit.lehrveranstaltung_id');
|
||||||
|
$result = $this->loadWhere(array('lehreinheit_id' => $lehreinheit_id));
|
||||||
|
|
||||||
|
if (isError($result)) return $result;
|
||||||
|
|
||||||
|
if (hasData($result))
|
||||||
|
{
|
||||||
|
$lehrveranstaltung = getData($result)[0];
|
||||||
|
$oe_result = $this->LehrveranstaltungModel->getAllOe($lehrveranstaltung->lehrveranstaltung_id);
|
||||||
|
return success(hasData($oe_result) ? array_column(getData($oe_result), 'oe_kurzbz') : array(''));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getLehrfachOe($lehreinheit_id)
|
||||||
|
{
|
||||||
|
$this->addSelect('lehrfach.oe_kurzbz');
|
||||||
|
$this->addJoin('lehre.tbl_lehrveranstaltung lehrfach', 'lehrfach.lehrveranstaltung_id = tbl_lehreinheit.lehrfach_id', 'LEFT');
|
||||||
|
return $this->loadWhere(array('lehreinheit_id' => $lehreinheit_id));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public function getByLvidStudiensemester($lv_id, $studiensemester_kurzbz, $mitarbeiter_uid = null, $fachbereich_kurzbz = null)
|
||||||
|
{
|
||||||
|
$qry = "WITH lehreinheiten AS (
|
||||||
|
SELECT *
|
||||||
|
FROM lehre.tbl_lehreinheit
|
||||||
|
WHERE lehrveranstaltung_id = ?
|
||||||
|
AND studiensemester_kurzbz = ?
|
||||||
|
),
|
||||||
|
". $this->_getGruppenCTE() . ",
|
||||||
|
". $this->_getLektorenCTE() . ",
|
||||||
|
". $this->_getFachbereichCTE() . ",
|
||||||
|
". $this->_getTagsCTE() . "
|
||||||
|
|
||||||
|
SELECT lehreinheiten.*,
|
||||||
|
lehreinheiten.lehrform_kurzbz as lv_lehrform_kurzbz,
|
||||||
|
tbl_lehrveranstaltung.kurzbz as lv_kurzbz,
|
||||||
|
tbl_lehrveranstaltung.bezeichnung as lv_bezeichnung,
|
||||||
|
COALESCE(tag_data_agg.tags, '[]'::json) AS tags,
|
||||||
|
gruppen.gruppen,
|
||||||
|
mitarbeiter.lektoren,
|
||||||
|
mitarbeiter.le_planstunden,
|
||||||
|
mitarbeiter.vorname,
|
||||||
|
mitarbeiter.nachname,
|
||||||
|
mitarbeiter.semesterstunden,
|
||||||
|
fachbereich.bezeichnung as fachbereich,
|
||||||
|
UPPER(CONCAT(tbl_studiengang.typ,tbl_studiengang.kurzbz)) as studiengang,
|
||||||
|
semester
|
||||||
|
FROM lehreinheiten
|
||||||
|
LEFT JOIN lehre.tbl_lehrveranstaltung ON tbl_lehrveranstaltung.lehrveranstaltung_id = lehreinheiten.lehrfach_id
|
||||||
|
LEFT JOIN public.tbl_studiengang USING(studiengang_kz)
|
||||||
|
LEFT JOIN tag_data_agg ON tag_data_agg.lehreinheit_id = lehreinheiten.lehreinheit_id
|
||||||
|
LEFT JOIN mitarbeiter ON lehreinheiten.lehreinheit_id = mitarbeiter.lehreinheit_id
|
||||||
|
LEFT JOIN fachbereich ON lehreinheiten.lehreinheit_id = fachbereich.lehreinheit_id
|
||||||
|
LEFT JOIN gruppen ON lehreinheiten.lehreinheit_id = gruppen.lehreinheit_id
|
||||||
|
WHERE true
|
||||||
|
";
|
||||||
|
|
||||||
|
$params = array($lv_id, $studiensemester_kurzbz);
|
||||||
|
|
||||||
|
if ($mitarbeiter_uid !== null)
|
||||||
|
{
|
||||||
|
$qry .= " AND lehreinheiten.lehreinheit_id IN ( SELECT lehreinheit_id FROM lehre.tbl_lehreinheitmitarbeiter WHERE mitarbeiter_uid = ?) ";
|
||||||
|
$params[] = $mitarbeiter_uid;
|
||||||
|
}
|
||||||
|
|
||||||
|
if($fachbereich_kurzbz !== null)
|
||||||
|
{
|
||||||
|
$qry .= " AND EXISTS ( SELECT 1 FROM lehre.tbl_lehrveranstaltung JOIN public.tbl_fachbereich USING(oe_kurzbz) WHERE fachbereich_kurzbz= ? AND lehrveranstaltung_id=lehreinheiten.lehrfach_id)";
|
||||||
|
$params[] = $fachbereich_kurzbz;
|
||||||
|
}
|
||||||
|
$qry .= " ORDER BY lehrveranstaltung_id;";
|
||||||
|
|
||||||
|
return $this->execReadOnlyQuery($qry, $params);
|
||||||
|
}
|
||||||
|
|
||||||
|
private function getLVTmp($stg_kz = null)
|
||||||
|
{
|
||||||
|
$qry = "SELECT DISTINCT ON(lehrveranstaltung_id) *,
|
||||||
|
'' as stundenblockung,
|
||||||
|
'' as lehreinheit_id,
|
||||||
|
'' as wochenrythmus,
|
||||||
|
'' as raumtyp,
|
||||||
|
'' as raumtypalternativ,
|
||||||
|
'' as gruppen,
|
||||||
|
'' as studienplan_id,
|
||||||
|
'' as studienplan_beeichnung,
|
||||||
|
UPPER(CONCAT(vw_lehreinheit.stg_typ, vw_lehreinheit.stg_kurzbz)) as studiengang
|
||||||
|
FROM campus.vw_lehreinheit
|
||||||
|
WHERE mitarbeiter_uid = ?
|
||||||
|
AND studiensemester_kurzbz = ?";
|
||||||
|
|
||||||
|
if (!is_null($stg_kz)) {
|
||||||
|
$qry .= " AND lv_studiengang_kz = ?";
|
||||||
|
}
|
||||||
|
|
||||||
|
return $qry;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getLvsByEmployee($mitarbeiter_uid, $studiensemester_kurzbz, $stg_kz = null)
|
||||||
|
{
|
||||||
|
$qry = "WITH lvs AS (" . $this->getLVTmp($stg_kz) . ")
|
||||||
|
SELECT lvs.*
|
||||||
|
FROM lvs
|
||||||
|
";
|
||||||
|
|
||||||
|
$params = array($mitarbeiter_uid, $studiensemester_kurzbz);
|
||||||
|
if (!is_null($stg_kz))
|
||||||
|
{
|
||||||
|
$params[] = $stg_kz;
|
||||||
|
}
|
||||||
|
return $this->execReadOnlyQuery($qry, $params);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function deleteLehreinheit($lehreinheit_id)
|
||||||
|
{
|
||||||
|
$lehreinheit = $this->loadWhere(array('lehreinheit_id' => $lehreinheit_id));
|
||||||
|
|
||||||
|
if (isError($lehreinheit)) return $lehreinheit;
|
||||||
|
|
||||||
|
if (!hasData($lehreinheit))
|
||||||
|
return error("Lehreinheit not found!");
|
||||||
|
|
||||||
|
$errorReasons = [];
|
||||||
|
$addError = function ($reason = null) use (&$errorReasons)
|
||||||
|
{
|
||||||
|
if ($reason !== null)
|
||||||
|
{
|
||||||
|
$errorReasons[] = $reason;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
$stundenplandev_result = $this->StundenplandevModel->loadWhere(array('lehreinheit_id' => $lehreinheit_id));
|
||||||
|
$stundenplan_result = $this->StundenplanModel->loadWhere(array('lehreinheit_id' => $lehreinheit_id));
|
||||||
|
|
||||||
|
if (hasData($stundenplan_result) || hasData($stundenplandev_result))
|
||||||
|
$addError('Dieser LV-Teil ist bereits im LV-Plan verplant und kann daher nicht geloescht werden!');
|
||||||
|
|
||||||
|
Events::trigger(
|
||||||
|
'lehreinheit_delete_check',
|
||||||
|
$addError,
|
||||||
|
$lehreinheit_id
|
||||||
|
);
|
||||||
|
|
||||||
|
if (!empty($errorReasons)) return error($errorReasons);
|
||||||
|
|
||||||
|
$this->db->trans_begin();
|
||||||
|
|
||||||
|
Events::trigger(
|
||||||
|
'lehreinheit_delete',
|
||||||
|
$addError,
|
||||||
|
$lehreinheit_id
|
||||||
|
);
|
||||||
|
|
||||||
|
$undosql = '';
|
||||||
|
|
||||||
|
$lehreinheit_gruppe_result = $this->LehreinheitgruppeModel->loadWhere(array('lehreinheit_id' => $lehreinheit_id));
|
||||||
|
if (hasData($lehreinheit_gruppe_result))
|
||||||
|
{
|
||||||
|
foreach (getData($lehreinheit_gruppe_result) as $row)
|
||||||
|
{
|
||||||
|
$values = [
|
||||||
|
$this->db->escape($row->lehreinheitgruppe_id),
|
||||||
|
$this->db->escape($row->lehreinheit_id),
|
||||||
|
$this->db->escape($row->studiengang_kz),
|
||||||
|
$this->db->escape($row->semester),
|
||||||
|
$this->db->escape($row->verband),
|
||||||
|
$this->db->escape($row->gruppe),
|
||||||
|
$this->db->escape($row->gruppe_kurzbz),
|
||||||
|
$this->db->escape($row->updateamum),
|
||||||
|
$this->db->escape($row->updatevon),
|
||||||
|
$this->db->escape($row->insertamum),
|
||||||
|
$this->db->escape($row->insertvon)
|
||||||
|
];
|
||||||
|
|
||||||
|
$undosql .= "INSERT INTO lehre.tbl_lehreinheitgruppe (
|
||||||
|
lehreinheitgruppe_id,
|
||||||
|
lehreinheit_id,
|
||||||
|
studiengang_kz,
|
||||||
|
semester,
|
||||||
|
verband,
|
||||||
|
gruppe,
|
||||||
|
gruppe_kurzbz,
|
||||||
|
updateamum,
|
||||||
|
updatevon,
|
||||||
|
insertamum,
|
||||||
|
insertvon
|
||||||
|
) VALUES (" . implode(', ', $values) . ");\n";
|
||||||
|
}
|
||||||
|
|
||||||
|
$lehreinheit_gruppe_delete_result = $this->LehreinheitgruppeModel->delete(array('lehreinheit_id' => $lehreinheit_id));
|
||||||
|
|
||||||
|
if (isError($lehreinheit_gruppe_delete_result))
|
||||||
|
$addError(getError($lehreinheit_gruppe_delete_result));
|
||||||
|
}
|
||||||
|
|
||||||
|
$lehreinheit_mitarbeiter_result = $this->LehreinheitmitarbeiterModel->loadWhere(array('lehreinheit_id' => $lehreinheit_id));
|
||||||
|
if (hasData($lehreinheit_mitarbeiter_result))
|
||||||
|
{
|
||||||
|
foreach (getData($lehreinheit_mitarbeiter_result) as $row)
|
||||||
|
{
|
||||||
|
$values = [
|
||||||
|
$this->db->escape($row->lehreinheit_id),
|
||||||
|
$this->db->escape($row->mitarbeiter_uid),
|
||||||
|
$this->db->escape($row->lehrfunktion_kurzbz),
|
||||||
|
$this->db->escape($row->planstunden),
|
||||||
|
$this->db->escape($row->stundensatz),
|
||||||
|
$this->db->escape($row->faktor),
|
||||||
|
$this->db->escape($row->anmerkung),
|
||||||
|
$this->db->escape($row->bismelden),
|
||||||
|
$this->db->escape($row->updateamum),
|
||||||
|
$this->db->escape($row->updatevon),
|
||||||
|
$this->db->escape($row->insertamum),
|
||||||
|
$this->db->escape($row->insertvon),
|
||||||
|
$this->db->escape($row->semesterstunden)
|
||||||
|
];
|
||||||
|
|
||||||
|
$undosql .= "INSERT INTO lehre.tbl_lehreinheitmitarbeiter (
|
||||||
|
lehreinheit_id,
|
||||||
|
mitarbeiter_uid,
|
||||||
|
lehrfunktion_kurzbz,
|
||||||
|
planstunden,
|
||||||
|
stundensatz,
|
||||||
|
faktor,
|
||||||
|
anmerkung,
|
||||||
|
bismelden,
|
||||||
|
updateamum,
|
||||||
|
updatevon,
|
||||||
|
insertamum,
|
||||||
|
insertvon,
|
||||||
|
semesterstunden
|
||||||
|
) VALUES (" . implode(', ', $values) . ");\n";
|
||||||
|
}
|
||||||
|
|
||||||
|
$lehreinheit_mitarbeiter_delete_result = $this->LehreinheitmitarbeiterModel->delete(array('lehreinheit_id' => $lehreinheit_id));
|
||||||
|
if (isError($lehreinheit_mitarbeiter_delete_result))
|
||||||
|
$addError(getError($lehreinheit_mitarbeiter_delete_result));
|
||||||
|
}
|
||||||
|
|
||||||
|
foreach (getData($lehreinheit) as $row)
|
||||||
|
{
|
||||||
|
$values = [
|
||||||
|
$this->db->escape($row->lehreinheit_id),
|
||||||
|
$this->db->escape($row->lehrveranstaltung_id),
|
||||||
|
$this->db->escape($row->studiensemester_kurzbz),
|
||||||
|
$this->db->escape($row->lehrfach_id),
|
||||||
|
$this->db->escape($row->lehrform_kurzbz),
|
||||||
|
$this->db->escape($row->stundenblockung),
|
||||||
|
$this->db->escape($row->wochenrythmus),
|
||||||
|
$this->db->escape($row->start_kw),
|
||||||
|
$this->db->escape($row->raumtyp),
|
||||||
|
$this->db->escape($row->raumtypalternativ),
|
||||||
|
$this->db->escape($row->sprache),
|
||||||
|
$this->db->escape($row->lehre),
|
||||||
|
$this->db->escape($row->anmerkung),
|
||||||
|
$this->db->escape($row->unr),
|
||||||
|
$this->db->escape($row->lvnr),
|
||||||
|
$this->db->escape($row->updateamum),
|
||||||
|
$this->db->escape($row->updatevon),
|
||||||
|
$this->db->escape($row->insertamum),
|
||||||
|
$this->db->escape($row->insertvon),
|
||||||
|
];
|
||||||
|
|
||||||
|
$undosql .= "INSERT INTO lehre.tbl_lehreinheit (
|
||||||
|
lehreinheit_id,
|
||||||
|
lehrveranstaltung_id,
|
||||||
|
studiensemester_kurzbz,
|
||||||
|
lehrfach_id,
|
||||||
|
lehrform_kurzbz,
|
||||||
|
stundenblockung,
|
||||||
|
wochenrythmus,
|
||||||
|
start_kw,
|
||||||
|
raumtyp,
|
||||||
|
raumtypalternativ,
|
||||||
|
sprache,
|
||||||
|
lehre,
|
||||||
|
anmerkung,
|
||||||
|
unr,
|
||||||
|
lvnr,
|
||||||
|
updateamum,
|
||||||
|
updatevon,
|
||||||
|
insertamum,
|
||||||
|
insertvon
|
||||||
|
) VALUES (" . implode(', ', $values) . ");\n";
|
||||||
|
}
|
||||||
|
$lehreinheit_result = $this->delete($lehreinheit_id);
|
||||||
|
|
||||||
|
$deleteSql = "DELETE FROM lehre.tbl_lehreinheitmitarbeiter WHERE lehreinheit_id = " . $this->db->escape($lehreinheit_id) ."; \n
|
||||||
|
DELETE FROM lehre.tbl_lehreinheitgruppe WHERE lehreinheit_id = " . $this->db->escape($lehreinheit_id) ."; \n
|
||||||
|
DELETE FROM lehre.tbl_lehreinheit WHERE lehreinheit_id = " . $this->db->escape($lehreinheit_id) .";";
|
||||||
|
if (isError($lehreinheit_result))
|
||||||
|
$addError($lehreinheit_result);
|
||||||
|
|
||||||
|
$log_result = $this->LogModel->insert([
|
||||||
|
'sql' => $deleteSql,
|
||||||
|
'sqlundo' => $undosql,
|
||||||
|
'beschreibung' => 'Lehreinheit loeschen - ' . $lehreinheit_id,
|
||||||
|
'mitarbeiter_uid' => getAuthUID(),
|
||||||
|
]);
|
||||||
|
|
||||||
|
if (isError($log_result))
|
||||||
|
$addError($log_result);
|
||||||
|
|
||||||
|
if (!empty($errorReasons))
|
||||||
|
{
|
||||||
|
$this->db->trans_rollback();
|
||||||
|
return error($errorReasons);
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->db->trans_commit();
|
||||||
|
return success('Contract successfully updated.');
|
||||||
|
}
|
||||||
|
|
||||||
|
private function _getGruppenCTE()
|
||||||
|
{
|
||||||
|
return "gruppen AS (
|
||||||
|
SELECT
|
||||||
|
lehreinheit_id,
|
||||||
|
STRING_AGG(
|
||||||
|
CASE
|
||||||
|
WHEN (tbl_lehreinheitgruppe.gruppe_kurzbz IS NULL OR tbl_lehreinheitgruppe.gruppe_kurzbz = '')
|
||||||
|
THEN
|
||||||
|
UPPER(tbl_studiengang.typ::varchar(1) || tbl_studiengang.kurzbz) ||
|
||||||
|
COALESCE(TRIM(tbl_lehreinheitgruppe.semester::text), '') ||
|
||||||
|
COALESCE(TRIM(tbl_lehreinheitgruppe.verband), '') ||
|
||||||
|
COALESCE(TRIM(tbl_lehreinheitgruppe.gruppe), '')
|
||||||
|
ELSE
|
||||||
|
CASE
|
||||||
|
WHEN NOT tbl_gruppe.direktinskription THEN tbl_lehreinheitgruppe.gruppe_kurzbz
|
||||||
|
ELSE NULL
|
||||||
|
END
|
||||||
|
END,
|
||||||
|
' '
|
||||||
|
) AS gruppen
|
||||||
|
FROM lehre.tbl_lehreinheitgruppe
|
||||||
|
LEFT JOIN public.tbl_studiengang USING (studiengang_kz)
|
||||||
|
LEFT JOIN public.tbl_gruppe USING (gruppe_kurzbz)
|
||||||
|
JOIN lehreinheiten USING(lehreinheit_id)
|
||||||
|
GROUP BY lehreinheit_id
|
||||||
|
)";
|
||||||
|
}
|
||||||
|
private function _getLektorenCTE()
|
||||||
|
{
|
||||||
|
return "mitarbeiter AS (
|
||||||
|
SELECT
|
||||||
|
tbl_lehreinheitmitarbeiter.lehreinheit_id,
|
||||||
|
STRING_AGG(m.kurzbz, ' ') AS lektoren,
|
||||||
|
STRING_AGG(tbl_person.vorname, ' ') AS vorname,
|
||||||
|
STRING_AGG(tbl_person.nachname, ' ') AS nachname,
|
||||||
|
STRING_AGG(tbl_lehreinheitmitarbeiter.semesterstunden::text, ' ') AS semesterstunden,
|
||||||
|
STRING_AGG(tbl_lehreinheitmitarbeiter.planstunden::text, ' ') AS le_planstunden
|
||||||
|
FROM lehre.tbl_lehreinheitmitarbeiter
|
||||||
|
JOIN public.tbl_mitarbeiter m USING (mitarbeiter_uid)
|
||||||
|
JOIN lehreinheiten USING(lehreinheit_id)
|
||||||
|
JOIN public.tbl_benutzer ON mitarbeiter_uid = uid
|
||||||
|
JOIN public.tbl_person ON tbl_benutzer.person_id = tbl_person.person_id
|
||||||
|
GROUP BY tbl_lehreinheitmitarbeiter.lehreinheit_id
|
||||||
|
)";
|
||||||
|
}
|
||||||
|
|
||||||
|
private function _getFachbereichCTE()
|
||||||
|
{
|
||||||
|
return "fachbereich AS (
|
||||||
|
SELECT
|
||||||
|
CONCAT(tbl_organisationseinheit.bezeichnung, ' (', tbl_organisationseinheit.organisationseinheittyp_kurzbz, ')') as bezeichnung,
|
||||||
|
lehreinheiten.lehreinheit_id
|
||||||
|
FROM public.tbl_organisationseinheit
|
||||||
|
JOIN lehre.tbl_lehrveranstaltung AS lehrfach ON tbl_organisationseinheit.oe_kurzbz = lehrfach.oe_kurzbz
|
||||||
|
JOIN lehre.tbl_lehreinheit ON lehrfach.lehrveranstaltung_id = tbl_lehreinheit.lehrfach_id
|
||||||
|
JOIN lehreinheiten ON tbl_lehreinheit.lehreinheit_id = lehreinheiten.lehreinheit_id
|
||||||
|
)";
|
||||||
|
}
|
||||||
|
|
||||||
|
private function _getTagsCTE()
|
||||||
|
{
|
||||||
|
$this->load->config('lvverwaltung');
|
||||||
|
$tags = $this->config->item('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 tbl_notiz_typ.typ_kurzbz IN (" . implode(",", $tags) . ")";
|
||||||
|
}
|
||||||
|
|
||||||
|
return "tag_data_agg AS (
|
||||||
|
SELECT
|
||||||
|
lehreinheit_id,
|
||||||
|
COALESCE(json_agg(tag ORDER BY done), '[]'::json) AS tags
|
||||||
|
FROM (
|
||||||
|
SELECT DISTINCT ON (public.tbl_notiz.notiz_id)
|
||||||
|
tbl_notiz.notiz_id AS id,
|
||||||
|
typ_kurzbz,
|
||||||
|
array_to_json(tbl_notiz_typ.bezeichnung_mehrsprachig)->>0 AS beschreibung,
|
||||||
|
text AS notiz,
|
||||||
|
style,
|
||||||
|
erledigt AS done,
|
||||||
|
lehreinheit_id
|
||||||
|
FROM public.tbl_notizzuordnung
|
||||||
|
JOIN public.tbl_notiz ON tbl_notizzuordnung.notiz_id = tbl_notiz.notiz_id
|
||||||
|
JOIN public.tbl_notiz_typ ON tbl_notiz.typ = tbl_notiz_typ.typ_kurzbz
|
||||||
|
WHERE lehreinheit_id IN (SELECT lehreinheit_id FROM lehreinheiten)"
|
||||||
|
. $whereTags.
|
||||||
|
") AS tag
|
||||||
|
GROUP BY lehreinheit_id
|
||||||
|
)";
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -14,6 +14,7 @@ class Lehreinheitgruppe_model extends DB_Model
|
|||||||
$this->load->model('organisation/studiengang_model', 'StudiengangModel');
|
$this->load->model('organisation/studiengang_model', 'StudiengangModel');
|
||||||
$this->load->model('organisation/gruppe_model', 'GruppeModel');
|
$this->load->model('organisation/gruppe_model', 'GruppeModel');
|
||||||
$this->load->model('person/benutzergruppe_model', 'BenutzergruppeModel');
|
$this->load->model('person/benutzergruppe_model', 'BenutzergruppeModel');
|
||||||
|
$this->load->model('ressource/stundenplandev_model', 'StundenplandevModel');
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -23,7 +24,15 @@ class Lehreinheitgruppe_model extends DB_Model
|
|||||||
*/
|
*/
|
||||||
public function getDirectGroup($lehreinheit_id)
|
public function getDirectGroup($lehreinheit_id)
|
||||||
{
|
{
|
||||||
|
$this->addSelect('tbl_lehreinheitgruppe.*');
|
||||||
|
$this->addSelect('tbl_gruppe.*');
|
||||||
|
$this->addSelect('uid');
|
||||||
|
$this->addSelect('vorname');
|
||||||
|
$this->addSelect('nachname');
|
||||||
$this->addJoin('public.tbl_gruppe', 'gruppe_kurzbz');
|
$this->addJoin('public.tbl_gruppe', 'gruppe_kurzbz');
|
||||||
|
$this->addJoin('public.tbl_benutzergruppe', 'gruppe_kurzbz', 'LEFT');
|
||||||
|
$this->addJoin('public.tbl_benutzer', 'uid', 'LEFT');
|
||||||
|
$this->addJoin('public.tbl_person', 'person_id', 'LEFT');
|
||||||
return $this->loadWhere(
|
return $this->loadWhere(
|
||||||
array(
|
array(
|
||||||
'tbl_gruppe.direktinskription' => true,
|
'tbl_gruppe.direktinskription' => true,
|
||||||
@@ -264,4 +273,209 @@ class Lehreinheitgruppe_model extends DB_Model
|
|||||||
}
|
}
|
||||||
return $result;
|
return $result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function addGroup($lehreinheit_id, $gid, $verband)
|
||||||
|
{
|
||||||
|
$lehreinheit = $this->LehreinheitModel->load($lehreinheit_id);
|
||||||
|
|
||||||
|
if (!hasData($lehreinheit))
|
||||||
|
return error ('No Lehreinheit found!');
|
||||||
|
|
||||||
|
if ($verband === false)
|
||||||
|
{
|
||||||
|
$gruppen_result = $this->GruppeModel->loadWhere(array('gid' => $gid));
|
||||||
|
|
||||||
|
if (!hasData($gruppen_result))
|
||||||
|
return error('No group found for gid ' . $gid);
|
||||||
|
|
||||||
|
$gruppen_array = getData($gruppen_result)[0];
|
||||||
|
|
||||||
|
if (!isEmptyString($gruppen_array->gruppe_kurzbz))
|
||||||
|
{
|
||||||
|
$this->db->where('trim(gruppe_kurzbz)', $gruppen_array->gruppe_kurzbz);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
$this->db->group_start();
|
||||||
|
$this->db->where("trim(gruppe_kurzbz) = ''");
|
||||||
|
$this->db->or_where("gruppe_kurzbz IS NULL");
|
||||||
|
$this->db->group_end();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if ($verband === true)
|
||||||
|
{
|
||||||
|
$gruppen_result = $this->LehrverbandModel->loadWhere(array('gid' => $gid));
|
||||||
|
|
||||||
|
if (!hasData($gruppen_result))
|
||||||
|
return error('No group found for gid ' . $gid);
|
||||||
|
|
||||||
|
$gruppen_array = getData($gruppen_result)[0];
|
||||||
|
|
||||||
|
if (!isEmptyString($gruppen_array->verband))
|
||||||
|
{
|
||||||
|
$this->db->where('verband', $gruppen_array->verband);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
$this->db->group_start();
|
||||||
|
$this->db->where("trim(verband) = ''");
|
||||||
|
$this->db->or_where("verband IS NULL");
|
||||||
|
$this->db->group_end();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!isEmptyString($gruppen_array->gruppe))
|
||||||
|
{
|
||||||
|
$this->db->where('gruppe', $gruppen_array->gruppe);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
$this->db->group_start();
|
||||||
|
$this->db->where("trim(gruppe) = ''");
|
||||||
|
$this->db->or_where("gruppe IS NULL");
|
||||||
|
$this->db->group_end();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
return error('Wrong type of verband');
|
||||||
|
|
||||||
|
$this->db->where('lehreinheit_id', $lehreinheit_id);
|
||||||
|
$this->db->where('studiengang_kz', $gruppen_array->studiengang_kz);
|
||||||
|
|
||||||
|
if (!isEmptyString($gruppen_array->semester))
|
||||||
|
{
|
||||||
|
$this->db->where('semester', $gruppen_array->semester);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
$this->db->group_start();
|
||||||
|
$this->db->where("semester = ''");
|
||||||
|
$this->db->or_where("semester IS NULL");
|
||||||
|
$this->db->group_end();
|
||||||
|
}
|
||||||
|
|
||||||
|
$exist_result = $this->load();
|
||||||
|
|
||||||
|
if (!hasData($exist_result))
|
||||||
|
{
|
||||||
|
$new_group_result = $this->insert(array(
|
||||||
|
'lehreinheit_id' => $lehreinheit_id,
|
||||||
|
'studiengang_kz' => $gruppen_array->studiengang_kz,
|
||||||
|
'gruppe_kurzbz' => isset($gruppen_array->gruppe_kurzbz) ? $gruppen_array->gruppe_kurzbz : null,
|
||||||
|
'semester' => $gruppen_array->semester,
|
||||||
|
'verband' => isset($gruppen_array->verband) && !isEmptyString($gruppen_array->verband) ? $gruppen_array->verband : null,
|
||||||
|
'gruppe' => isset($gruppen_array->gruppe) && !isEmptyString($gruppen_array->gruppe) ? $gruppen_array->gruppe : null,
|
||||||
|
'insertamum' => date('Y-m-d H:i:s'),
|
||||||
|
'insertvon' => getAuthUID()
|
||||||
|
));
|
||||||
|
|
||||||
|
if (isError($new_group_result))
|
||||||
|
return error('Error when adding Group');
|
||||||
|
|
||||||
|
return success('Group assigned successfully to Lehreinheit');
|
||||||
|
}
|
||||||
|
else
|
||||||
|
return error('Group already assigned');
|
||||||
|
}
|
||||||
|
|
||||||
|
public function deleteGroup($lehreinheit_id, $lehreinheitgruppe_id)
|
||||||
|
{
|
||||||
|
$lehreinheit = $this->LehreinheitModel->load($lehreinheit_id);
|
||||||
|
|
||||||
|
if (!hasData($lehreinheit))
|
||||||
|
return error ('No Lehreinheit found!');
|
||||||
|
|
||||||
|
$lehreinheitgruppe = $this->load($lehreinheitgruppe_id);
|
||||||
|
|
||||||
|
if (!hasData($lehreinheitgruppe))
|
||||||
|
return error ('No Lehreinheitgruppe found!');
|
||||||
|
|
||||||
|
$this->addSelect('stundenplandev_id');
|
||||||
|
$this->addJoin('lehre.tbl_stundenplandev',
|
||||||
|
"tbl_stundenplandev.lehreinheit_id = tbl_lehreinheitgruppe.lehreinheit_id
|
||||||
|
AND tbl_stundenplandev.studiengang_kz = tbl_lehreinheitgruppe.studiengang_kz
|
||||||
|
AND tbl_stundenplandev.semester = tbl_lehreinheitgruppe.semester
|
||||||
|
AND trim(COALESCE(tbl_stundenplandev.verband, '')) = trim(COALESCE(tbl_lehreinheitgruppe.verband, ''))
|
||||||
|
AND trim(COALESCE(tbl_stundenplandev.gruppe, '')) = trim(COALESCE(tbl_lehreinheitgruppe.gruppe, ''))
|
||||||
|
AND trim(COALESCE(tbl_stundenplandev.gruppe_kurzbz, '')) = trim(COALESCE(tbl_lehreinheitgruppe.gruppe_kurzbz, ''))"
|
||||||
|
);
|
||||||
|
$stundenplan_result = $this->loadWhere(array('tbl_lehreinheitgruppe.lehreinheitgruppe_id' => $lehreinheitgruppe_id));
|
||||||
|
|
||||||
|
if (hasData($stundenplan_result))
|
||||||
|
return error('Gruppe already verplant');
|
||||||
|
|
||||||
|
$delete_result = $this->delete($lehreinheitgruppe_id);
|
||||||
|
|
||||||
|
if (isError($delete_result))
|
||||||
|
return error('Error deleting Group');
|
||||||
|
|
||||||
|
return success('Group deleted');
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getByLehreinheit($lehreinheit_id)
|
||||||
|
{
|
||||||
|
$lehreinheit = $this->LehreinheitModel->load($lehreinheit_id);
|
||||||
|
|
||||||
|
if (!hasData($lehreinheit))
|
||||||
|
return error ('No Lehreinheit found!');
|
||||||
|
|
||||||
|
$this->addSelect('tbl_lehreinheitgruppe.*');
|
||||||
|
$this->addSelect('tbl_gruppe.direktinskription');
|
||||||
|
$this->addSelect('tbl_gruppe.gruppe_kurzbz');
|
||||||
|
$this->addSelect("CASE
|
||||||
|
WHEN tbl_lehreinheitgruppe.gruppe_kurzbz IS NULL THEN
|
||||||
|
COALESCE (
|
||||||
|
UPPER(tbl_studiengang.typ || tbl_studiengang.kurzbz) ||
|
||||||
|
COALESCE(tbl_lehreinheitgruppe.semester::varchar, '') ||
|
||||||
|
COALESCE(tbl_lehreinheitgruppe.verband::varchar, '') ||
|
||||||
|
COALESCE(tbl_lehreinheitgruppe.gruppe, ''),
|
||||||
|
'')
|
||||||
|
ELSE tbl_lehreinheitgruppe.gruppe_kurzbz
|
||||||
|
END AS bezeichnung");
|
||||||
|
$this->addSelect("CASE
|
||||||
|
WHEN tbl_lehreinheitgruppe.gruppe_kurzbz IS NULL THEN
|
||||||
|
(
|
||||||
|
SELECT bezeichnung
|
||||||
|
FROM public.tbl_lehrverband
|
||||||
|
WHERE studiengang_kz = tbl_lehreinheitgruppe.studiengang_kz
|
||||||
|
AND semester = tbl_lehreinheitgruppe.semester
|
||||||
|
AND verband = tbl_lehreinheitgruppe.verband
|
||||||
|
AND gruppe = tbl_lehreinheitgruppe.gruppe
|
||||||
|
LIMIT 1
|
||||||
|
)
|
||||||
|
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
|
||||||
|
(
|
||||||
|
SELECT EXISTS (
|
||||||
|
SELECT 1
|
||||||
|
FROM lehre.tbl_stundenplandev
|
||||||
|
WHERE lehreinheit_id = tbl_lehreinheitgruppe.lehreinheit_id
|
||||||
|
AND gruppe_kurzbz = tbl_lehreinheitgruppe.gruppe_kurzbz
|
||||||
|
)
|
||||||
|
)
|
||||||
|
END AS verplant");
|
||||||
|
$this->addJoin('tbl_studiengang', 'studiengang_kz', 'LEFT');
|
||||||
|
$this->addJoin('public.tbl_gruppe', 'gruppe_kurzbz', 'LEFT');
|
||||||
|
|
||||||
|
$this->db->where('lehreinheit_id', $lehreinheit_id);
|
||||||
|
$this->db->group_start()
|
||||||
|
->where('tbl_gruppe.direktinskription !=', true)
|
||||||
|
->or_where('tbl_gruppe.direktinskription IS NULL')
|
||||||
|
->group_end();
|
||||||
|
return $this->load();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -10,6 +10,14 @@ class Lehreinheitmitarbeiter_model extends DB_Model
|
|||||||
parent::__construct();
|
parent::__construct();
|
||||||
$this->dbTable = 'lehre.tbl_lehreinheitmitarbeiter';
|
$this->dbTable = 'lehre.tbl_lehreinheitmitarbeiter';
|
||||||
$this->pk = array('mitarbeiter_uid', 'lehreinheit_id');
|
$this->pk = array('mitarbeiter_uid', 'lehreinheit_id');
|
||||||
|
$this->hasSequence = false;
|
||||||
|
|
||||||
|
$this->load->model('accounting/Vertrag_model', 'VertragModel');
|
||||||
|
$this->load->model('ressource/stundenplandev_model', 'StundenplandevModel');
|
||||||
|
$this->load->model('ressource/stundenplan_model', 'StundenplanModel');
|
||||||
|
$this->load->model('organisation/Studiengang_model', 'StudiengangModel');
|
||||||
|
$this->load->model('organisation/Organisationseinheit_model', 'OrganisationseinheitModel');
|
||||||
|
$this->load->model('ressource/mitarbeiter_model', 'MitarbeiterModel');
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -75,4 +83,67 @@ class Lehreinheitmitarbeiter_model extends DB_Model
|
|||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function getLektorenByLe($lehreinheit_id)
|
||||||
|
{
|
||||||
|
$this->addSelect('vorname, nachname, tbl_lehreinheitmitarbeiter.*, stundenplan.verplant');
|
||||||
|
$this->addJoin('tbl_benutzer', 'uid = mitarbeiter_uid');
|
||||||
|
$this->addJoin('tbl_person', 'person_id');
|
||||||
|
|
||||||
|
$this->addJoin('(
|
||||||
|
SELECT 1 as verplant, lehreinheit_id, mitarbeiter_uid
|
||||||
|
FROM lehre.tbl_stundenplandev
|
||||||
|
GROUP BY lehreinheit_id, mitarbeiter_uid
|
||||||
|
|
||||||
|
) stundenplan', 'stundenplan.mitarbeiter_uid = tbl_lehreinheitmitarbeiter.mitarbeiter_uid AND stundenplan.lehreinheit_id = tbl_lehreinheitmitarbeiter.lehreinheit_id', 'LEFT');
|
||||||
|
|
||||||
|
return $this->loadWhere(array('tbl_lehreinheitmitarbeiter.lehreinheit_id' => $lehreinheit_id));
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getByLeLektor($lehreinheit_id, $mitarbeiter_uid)
|
||||||
|
{
|
||||||
|
$this->addSelect('vorname, nachname, tbl_lehreinheitmitarbeiter.*');
|
||||||
|
$this->addJoin('tbl_benutzer', 'uid = mitarbeiter_uid');
|
||||||
|
$this->addJoin('tbl_person', 'person_id');
|
||||||
|
return $this->loadWhere(array('tbl_lehreinheitmitarbeiter.lehreinheit_id' => $lehreinheit_id, 'tbl_lehreinheitmitarbeiter.mitarbeiter_uid' => $mitarbeiter_uid));
|
||||||
|
}
|
||||||
|
|
||||||
|
public function deleteLektorFromLe($lehreinheit_id, $mitarbeiter_uid)
|
||||||
|
{
|
||||||
|
if (defined('FAS_LV_LEKTORINNENZUTEILUNG_VERTRAGSDETAILS_ANZEIGEN') && FAS_LV_LEKTORINNENZUTEILUNG_VERTRAGSDETAILS_ANZEIGEN)
|
||||||
|
{
|
||||||
|
$vertrag_result = $this->VertragModel->getVertrag($mitarbeiter_uid, $lehreinheit_id);
|
||||||
|
|
||||||
|
if (hasData($vertrag_result))
|
||||||
|
return error("Loeschen nur nach Stornierung des Vertrags möglich");
|
||||||
|
}
|
||||||
|
|
||||||
|
$stundenplandev_result = $this->StundenplandevModel->loadWhere(array('lehreinheit_id' => $lehreinheit_id, 'mitarbeiter_uid' => $mitarbeiter_uid));
|
||||||
|
$stundenplan_result = $this->StundenplanModel->loadWhere(array('lehreinheit_id' => $lehreinheit_id, 'mitarbeiter_uid' => $mitarbeiter_uid));
|
||||||
|
|
||||||
|
if (hasData($stundenplandev_result) || hasData($stundenplan_result))
|
||||||
|
return error("Diese/r LektorIn kann nicht gelöscht werden da er schon verplant ist");
|
||||||
|
|
||||||
|
$result = $this->loadWhere(array('lehreinheit_id' => $lehreinheit_id, 'mitarbeiter_uid' => $mitarbeiter_uid));
|
||||||
|
|
||||||
|
if (hasData($result))
|
||||||
|
{
|
||||||
|
$le_mitarbeiter_array = getData($result)[0];
|
||||||
|
|
||||||
|
if ($le_mitarbeiter_array->vertrag_id !== null)
|
||||||
|
{
|
||||||
|
$vertrag_result = $this->VertragModel->deleteVertrag($le_mitarbeiter_array->vertrag_id);
|
||||||
|
if (isError($vertrag_result))
|
||||||
|
return $vertrag_result;
|
||||||
|
}
|
||||||
|
|
||||||
|
$delete_result = $this->delete(array('lehreinheit_id' => $lehreinheit_id, 'mitarbeiter_uid' => $mitarbeiter_uid));
|
||||||
|
|
||||||
|
if (isError($delete_result))
|
||||||
|
return $delete_result;
|
||||||
|
|
||||||
|
return success($delete_result);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1019,4 +1019,240 @@ class Lehrveranstaltung_model extends DB_Model
|
|||||||
|
|
||||||
return $this->execQuery($qry, $params);
|
return $this->execQuery($qry, $params);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function getLvsByOrganization($oe_kurzbz)
|
||||||
|
{
|
||||||
|
$qry="
|
||||||
|
SELECT
|
||||||
|
distinct on (lehrveranstaltung_id)
|
||||||
|
tbl_lehrveranstaltung.studiengang_kz as lv_studiengang_kz, tbl_lehrveranstaltung.semester as lv_semester,
|
||||||
|
tbl_lehrveranstaltung.kurzbz as lv_kurzbz, tbl_lehrveranstaltung.bezeichnung as lv_bezeichnung, tbl_lehrveranstaltung.ects as lv_ects,
|
||||||
|
tbl_lehrveranstaltung.lehreverzeichnis as lv_lehreverzeichnis, tbl_lehrveranstaltung.planfaktor as lv_planfaktor,
|
||||||
|
tbl_lehrveranstaltung.planlektoren as lv_planlektoren, tbl_lehrveranstaltung.planpersonalkosten as lv_planpersonalkosten,
|
||||||
|
tbl_lehrveranstaltung.plankostenprolektor as lv_plankostenprolektor, tbl_lehrveranstaltung.orgform_kurzbz as lv_orgform_kurzbz,
|
||||||
|
tbl_lehrveranstaltung.lehrveranstaltung_id,
|
||||||
|
tbl_lehrveranstaltung.lehrform_kurzbz as lehrform_kurzbz,
|
||||||
|
tbl_lehrveranstaltung.lehrform_kurzbz as lv_lehrform_kurzbz,
|
||||||
|
tbl_lehrveranstaltung.bezeichnung_english as lv_bezeichnung_english,
|
||||||
|
tbl_lehrveranstaltung.studiengang_kz, tbl_lehrveranstaltung.semester, tbl_lehrveranstaltung.anmerkung, tbl_lehrveranstaltung.sprache, tbl_lehrveranstaltung.semesterstunden,
|
||||||
|
tbl_lehrveranstaltung.lehre, tbl_lehrveranstaltung.aktiv,
|
||||||
|
'' as studienplan_id, '' as studienplan_bezeichnung, tbl_lehrveranstaltung.lehrtyp_kurzbz
|
||||||
|
FROM
|
||||||
|
lehre.tbl_lehrveranstaltung
|
||||||
|
WHERE
|
||||||
|
tbl_lehrveranstaltung.oe_kurzbz= ?
|
||||||
|
AND tbl_lehrveranstaltung.aktiv
|
||||||
|
";
|
||||||
|
|
||||||
|
return $this->execReadOnlyQuery($qry, array($oe_kurzbz));
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getLvsByFachbereich($fachbereich, $studiensemester_kurbz, $mitarbeiter_uid = null)
|
||||||
|
{
|
||||||
|
$qry = "";
|
||||||
|
if (!is_null($mitarbeiter_uid))
|
||||||
|
{
|
||||||
|
$qry = $this->getLvsFromStudienplanByEmp();
|
||||||
|
$params = array($fachbereich, $studiensemester_kurbz);
|
||||||
|
}
|
||||||
|
|
||||||
|
$qry .= "SELECT
|
||||||
|
distinct on(lehrveranstaltung_id)
|
||||||
|
lv_studiengang_kz, lv_semester, lv_kurzbz, lv_bezeichnung, lv_ects,
|
||||||
|
lv_lehreverzeichnis, lv_planfaktor, lv_planlektoren, lv_planpersonalkosten,
|
||||||
|
lv_plankostenprolektor, lv_orgform_kurzbz, lehrveranstaltung_id,
|
||||||
|
lehrform_kurzbz, lv_lehrform_kurzbz, lv_bezeichnung_english, studiengang_kz, semester, anmerkung, sprache, semesterstunden,
|
||||||
|
lehre, aktiv,
|
||||||
|
'' as studienplan_id, '' as studienplan_bezeichnung,
|
||||||
|
(SELECT lehrtyp_kurzbz FROM lehre.tbl_lehrveranstaltung WHERE lehrveranstaltung_id=vw_lehreinheit.lehrveranstaltung_id) as lehrtyp_kurzbz
|
||||||
|
FROM
|
||||||
|
campus.vw_lehreinheit
|
||||||
|
WHERE studiensemester_kurzbz = ?
|
||||||
|
AND fachbereich_kurzbz = ?";
|
||||||
|
|
||||||
|
$params[] = array($studiensemester_kurbz, $fachbereich);
|
||||||
|
|
||||||
|
if (!is_null($mitarbeiter_uid))
|
||||||
|
{
|
||||||
|
$qry .= " AND mitarbeiter_uid = ?";
|
||||||
|
$params[] = $mitarbeiter_uid;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
$qry.=" AND lehrveranstaltung_id NOT IN (SELECT lehrveranstaltung_id
|
||||||
|
FROM
|
||||||
|
lehre.tbl_lehrveranstaltung
|
||||||
|
JOIN lehre.tbl_studienplan_lehrveranstaltung USING(lehrveranstaltung_id)
|
||||||
|
JOIN lehre.tbl_studienplan USING(studienplan_id)
|
||||||
|
JOIN lehre.tbl_studienordnung USING(studienordnung_id)
|
||||||
|
JOIN lehre.tbl_studienplan_semester USING(studienplan_id)
|
||||||
|
WHERE
|
||||||
|
tbl_lehrveranstaltung.oe_kurzbz=(Select oe_kurzbz from public.tbl_fachbereich where fachbereich_kurzbz= ?)
|
||||||
|
AND tbl_studienplan_semester.studiensemester_kurzbz= ?";
|
||||||
|
|
||||||
|
$params[] = array($fachbereich, $studiensemester_kurbz);
|
||||||
|
}
|
||||||
|
|
||||||
|
return $this->execReadOnlyQuery($qry, $params);
|
||||||
|
}
|
||||||
|
|
||||||
|
private function getLvsFromStudienplanByEmp()
|
||||||
|
{
|
||||||
|
return "
|
||||||
|
SELECT
|
||||||
|
distinct on (lehrveranstaltung_id)
|
||||||
|
tbl_lehrveranstaltung.studiengang_kz as lv_studiengang_kz,
|
||||||
|
tbl_lehrveranstaltung.semester as lv_semester,
|
||||||
|
tbl_lehrveranstaltung.kurzbz as lv_kurzbz,
|
||||||
|
tbl_lehrveranstaltung.bezeichnung as lv_bezeichnung,
|
||||||
|
tbl_lehrveranstaltung.ects as lv_ects,
|
||||||
|
tbl_lehrveranstaltung.lehreverzeichnis as lv_lehreverzeichnis,
|
||||||
|
tbl_lehrveranstaltung.planfaktor as lv_planfaktor,
|
||||||
|
tbl_lehrveranstaltung.planlektoren as lv_planlektoren,
|
||||||
|
tbl_lehrveranstaltung.planpersonalkosten as lv_planpersonalkosten,
|
||||||
|
tbl_lehrveranstaltung.plankostenprolektor as lv_plankostenprolektor,
|
||||||
|
tbl_lehrveranstaltung.orgform_kurzbz as lv_orgform_kurzbz,
|
||||||
|
tbl_lehrveranstaltung.lehrveranstaltung_id,
|
||||||
|
tbl_lehrveranstaltung.lehrform_kurzbz as lehrform_kurzbz,
|
||||||
|
tbl_lehrveranstaltung.lehrform_kurzbz as lv_lehrform_kurzbz,
|
||||||
|
tbl_lehrveranstaltung.bezeichnung_english as lv_bezeichnung_english,
|
||||||
|
tbl_lehrveranstaltung.studiengang_kz,
|
||||||
|
tbl_studienplan_lehrveranstaltung.semester,
|
||||||
|
tbl_lehrveranstaltung.anmerkung,
|
||||||
|
tbl_lehrveranstaltung.sprache,
|
||||||
|
tbl_lehrveranstaltung.semesterstunden,
|
||||||
|
tbl_lehrveranstaltung.lehre,
|
||||||
|
tbl_lehrveranstaltung.aktiv,
|
||||||
|
tbl_studienplan.studienplan_id::text,
|
||||||
|
tbl_studienplan.bezeichnung as studienplan_bezeichnung,
|
||||||
|
tbl_lehrveranstaltung.lehrtyp_kurzbz
|
||||||
|
FROM
|
||||||
|
lehre.tbl_lehrveranstaltung
|
||||||
|
JOIN lehre.tbl_studienplan_lehrveranstaltung USING(lehrveranstaltung_id)
|
||||||
|
JOIN lehre.tbl_studienplan USING(studienplan_id)
|
||||||
|
JOIN lehre.tbl_studienordnung USING(studienordnung_id)
|
||||||
|
JOIN lehre.tbl_studienplan_semester USING(studienplan_id)
|
||||||
|
WHERE
|
||||||
|
tbl_lehrveranstaltung.oe_kurzbz=(Select oe_kurzbz from public.tbl_fachbereich where fachbereich_kurzbz= ?)
|
||||||
|
AND tbl_studienplan_semester.studiensemester_kurzbz = ?
|
||||||
|
AND tbl_lehrveranstaltung.aktiv
|
||||||
|
UNION
|
||||||
|
";
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getLvsByStudiengang($studienplan_ids, $placeholders, $only_ids, $studiengang_kz, $studiensemester_kurzbz, $semester = null, $verband = null)
|
||||||
|
{
|
||||||
|
$qry = "";
|
||||||
|
$params = array();
|
||||||
|
|
||||||
|
if (!empty($studienplan_ids))
|
||||||
|
{
|
||||||
|
$qry = $this->getLvsFromStudienplanByStudienplanID($placeholders);
|
||||||
|
$params = $studienplan_ids;
|
||||||
|
}
|
||||||
|
|
||||||
|
$qry .= "
|
||||||
|
SELECT DISTINCT on(lehrveranstaltung_id) lehrveranstaltung_id,
|
||||||
|
tbl_lehrveranstaltung.kurzbz as lv_kurzbz,
|
||||||
|
tbl_lehrveranstaltung.bezeichnung as lv_bezeichnung,
|
||||||
|
tbl_lehrveranstaltung.bezeichnung_english as lv_bezeichnung_english,
|
||||||
|
studiengang_kz,
|
||||||
|
semester,
|
||||||
|
tbl_lehrveranstaltung.sprache,
|
||||||
|
ects as lv_ects,
|
||||||
|
semesterstunden,
|
||||||
|
tbl_lehrveranstaltung.anmerkung,
|
||||||
|
tbl_lehrveranstaltung.lehre,
|
||||||
|
lehreverzeichnis as lv_lehreverzeichnis,
|
||||||
|
tbl_lehrveranstaltung.aktiv,
|
||||||
|
planfaktor as lv_planfaktor,
|
||||||
|
planlektoren as lv_planlektoren,
|
||||||
|
planpersonalkosten as lv_planpersonalkosten,
|
||||||
|
plankostenprolektor as lv_plankostenprolektor,
|
||||||
|
tbl_lehrveranstaltung.lehrform_kurzbz as lv_lehrform_kurzbz,
|
||||||
|
tbl_lehrveranstaltung.orgform_kurzbz,
|
||||||
|
''::text as studienplan_id,
|
||||||
|
'' as studienplan_bezeichnung,
|
||||||
|
'' as studienplan_lehrveranstaltung_id_parent,
|
||||||
|
tbl_lehrveranstaltung.lehrtyp_kurzbz,
|
||||||
|
UPPER(CONCAT(tbl_studiengang.typ,tbl_studiengang.kurzbz)) as studiengang
|
||||||
|
FROM lehre.tbl_lehrveranstaltung
|
||||||
|
JOIN lehre.tbl_lehreinheit USING (lehrveranstaltung_id)
|
||||||
|
JOIN public.tbl_studiengang USING(studiengang_kz)
|
||||||
|
WHERE studiengang_kz = ?
|
||||||
|
AND studiensemester_kurzbz = ?
|
||||||
|
";
|
||||||
|
|
||||||
|
$params[] = $studiengang_kz;
|
||||||
|
$params[] = $studiensemester_kurzbz;
|
||||||
|
if (!is_null($semester))
|
||||||
|
{
|
||||||
|
$qry .= ' AND semester = ?';
|
||||||
|
$params[] = $semester;
|
||||||
|
}
|
||||||
|
if (!is_null($verband))
|
||||||
|
{
|
||||||
|
$qry .= ' AND (tbl_lehrveranstaltung.orgform_kurzbz = ? OR tbl_lehrveranstaltung.orgform_kurzbz IS NULL)';
|
||||||
|
$params[] = $verband;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!empty($only_ids))
|
||||||
|
{
|
||||||
|
|
||||||
|
$qry .= ' AND NOT EXISTS (SELECT 1 FROM lehre.tbl_studienplan_lehrveranstaltung where studienplan_id IN ?
|
||||||
|
AND lehrveranstaltung_id = tbl_lehrveranstaltung.lehrveranstaltung_id AND tbl_lehrveranstaltung.aktiv)';
|
||||||
|
|
||||||
|
$params[] = $only_ids;
|
||||||
|
}
|
||||||
|
|
||||||
|
return $this->execReadOnlyQuery($qry, $params);
|
||||||
|
}
|
||||||
|
private function getLvsFromStudienplanByStudienplanID($placeholders)
|
||||||
|
{
|
||||||
|
return "
|
||||||
|
SELECT
|
||||||
|
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,
|
||||||
|
plankostenprolektor as lv_plankostenprolektor, lehrform_kurzbz as lv_lehrform_kurzbz, tbl_lehrveranstaltung.orgform_kurzbz,
|
||||||
|
tbl_studienplan_lehrveranstaltung.studienplan_id::text as studienplan_id, tbl_studienplan.bezeichnung as studienplan_bezeichnung, tbl_studienplan_lehrveranstaltung.studienplan_lehrveranstaltung_id_parent::text,
|
||||||
|
tbl_lehrveranstaltung.lehrtyp_kurzbz, UPPER(CONCAT(tbl_studiengang.typ,tbl_studiengang.kurzbz)) as studiengang
|
||||||
|
FROM
|
||||||
|
lehre.tbl_lehrveranstaltung
|
||||||
|
JOIN lehre.tbl_studienplan_lehrveranstaltung USING(lehrveranstaltung_id)
|
||||||
|
JOIN lehre.tbl_studienplan USING(studienplan_id)
|
||||||
|
JOIN tbl_studiengang USING(studiengang_kz)
|
||||||
|
WHERE
|
||||||
|
tbl_lehrveranstaltung.aktiv AND ((studienplan_id, tbl_studienplan_lehrveranstaltung.semester) IN ( " . implode(',', $placeholders) . "))
|
||||||
|
UNION
|
||||||
|
";
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getAllOe($lv_id)
|
||||||
|
{
|
||||||
|
$qry = "SELECT DISTINCT oe_kurzbz
|
||||||
|
FROM lehre.tbl_studienplan_lehrveranstaltung
|
||||||
|
JOIN lehre.tbl_studienplan USING(studienplan_id)
|
||||||
|
JOIN lehre.tbl_studienordnung USING(studienordnung_id)
|
||||||
|
JOIN public.tbl_studiengang USING(studiengang_kz)
|
||||||
|
WHERE lehrveranstaltung_id = ?
|
||||||
|
|
||||||
|
UNION
|
||||||
|
|
||||||
|
(
|
||||||
|
SELECT oe_kurzbz
|
||||||
|
FROM public.tbl_studiengang
|
||||||
|
WHERE studiengang_kz = (
|
||||||
|
SELECT tbl_lehrveranstaltung.studiengang_kz
|
||||||
|
FROM lehre.tbl_lehrveranstaltung
|
||||||
|
WHERE lehrveranstaltung_id = ?
|
||||||
|
)
|
||||||
|
)
|
||||||
|
";
|
||||||
|
|
||||||
|
$params = array($lv_id, $lv_id);
|
||||||
|
|
||||||
|
return $this->execReadOnlyQuery($qry, $params);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -213,4 +213,34 @@ class Organisationseinheit_model extends DB_Model
|
|||||||
|
|
||||||
return $result;
|
return $result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Ermittelt die Stundenobergrenze fuer Lektoren
|
||||||
|
* Dabei wird im OE Baum nach oben nach Stundengrenzen gesucht und die niedrigste Stundengrenze ermittelt
|
||||||
|
* @param $oe_kurzbz Organisationseinheit
|
||||||
|
* @param $fixangestellt boolean legt fest ob die Grenze
|
||||||
|
* fuer Freie oder Fixangestellte Lektoren ermittelt werden soll
|
||||||
|
|
||||||
|
*/
|
||||||
|
public function getStundengrenze($oe_kurzbz, $fixangestellt = true)
|
||||||
|
{
|
||||||
|
$fixfrei = $fixangestellt ? 'fix' : 'frei';
|
||||||
|
|
||||||
|
$qry = "
|
||||||
|
WITH RECURSIVE oes(oe_kurzbz, oe_parent_kurzbz) as
|
||||||
|
(
|
||||||
|
SELECT oe_kurzbz, oe_parent_kurzbz FROM public.tbl_organisationseinheit
|
||||||
|
WHERE oe_kurzbz= ?
|
||||||
|
UNION ALL
|
||||||
|
SELECT o.oe_kurzbz, o.oe_parent_kurzbz FROM public.tbl_organisationseinheit o, oes
|
||||||
|
WHERE o.oe_kurzbz=oes.oe_parent_kurzbz
|
||||||
|
)
|
||||||
|
SELECT oe_kurzbz, warn_semesterstunden_{$fixfrei} AS stunden
|
||||||
|
FROM oes
|
||||||
|
JOIN public.tbl_organisationseinheit USING (oe_kurzbz)
|
||||||
|
ORDER BY warn_semesterstunden_{$fixfrei} ASC
|
||||||
|
LIMIT 1";
|
||||||
|
|
||||||
|
return $this->execReadOnlyQuery($qry, array($oe_kurzbz));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -107,6 +107,8 @@ class Studienplan_model extends DB_Model
|
|||||||
));
|
));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Deprecated
|
||||||
|
// im Lehrveranstaltung_model vorhanden
|
||||||
public function getAllOesForLv($lehrveranstaltung_id)
|
public function getAllOesForLv($lehrveranstaltung_id)
|
||||||
{
|
{
|
||||||
$this->addDistinct('oe_kurzbz');
|
$this->addDistinct('oe_kurzbz');
|
||||||
@@ -135,6 +137,27 @@ class Studienplan_model extends DB_Model
|
|||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function loadStudienplanLehrveranstaltung($lv_id)
|
||||||
|
{
|
||||||
|
$qry = "SELECT studienplan_lehrveranstaltung_id,
|
||||||
|
semester,
|
||||||
|
pflicht,
|
||||||
|
studienplan_id,
|
||||||
|
koordinator,
|
||||||
|
studienplan_lehrveranstaltung_id_parent,
|
||||||
|
lehrveranstaltung_id,
|
||||||
|
insertamum,
|
||||||
|
insertvon,
|
||||||
|
updateamum,
|
||||||
|
updatevon,
|
||||||
|
sort,
|
||||||
|
curriculum,
|
||||||
|
export
|
||||||
|
FROM lehre.tbl_studienplan_lehrveranstaltung WHERE studienplan_lehrveranstaltung_id = ? ";
|
||||||
|
return $this->execReadOnlyQuery($qry, array($lv_id));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
public function getStudienplaeneForPerson($person_id)
|
public function getStudienplaeneForPerson($person_id)
|
||||||
{
|
{
|
||||||
$this->addDistinct();
|
$this->addDistinct();
|
||||||
|
|||||||
@@ -0,0 +1,42 @@
|
|||||||
|
<?php
|
||||||
|
class Kontaktverifikation_model extends DB_Model
|
||||||
|
{
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Constructor
|
||||||
|
*/
|
||||||
|
public function __construct()
|
||||||
|
{
|
||||||
|
parent::__construct();
|
||||||
|
$this->dbTable = 'public.tbl_kontakt_verifikation';
|
||||||
|
$this->pk = 'kontakt_verifikation_id';
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets contact verification for a person and a verification code
|
||||||
|
* @param person_id
|
||||||
|
* @param kontakttyp
|
||||||
|
* @param verifikation_code
|
||||||
|
* @param expiration_days number of days after which verifikation code expires
|
||||||
|
* @return object success or error
|
||||||
|
*/
|
||||||
|
public function getKontaktVerifikation($person_id, $kontakttyp, $verifikation_code, $expiration_days = 1)
|
||||||
|
{
|
||||||
|
$qry = "
|
||||||
|
SELECT
|
||||||
|
kt.kontakt_id,
|
||||||
|
kv.verifikation_code
|
||||||
|
FROM
|
||||||
|
public.tbl_kontakt_verifikation kv
|
||||||
|
JOIN public.tbl_kontakt kt USING(kontakt_id)
|
||||||
|
WHERE kt.person_id = ?
|
||||||
|
AND kt.kontakttyp = ?
|
||||||
|
AND kv.verifikation_code = ?
|
||||||
|
AND kv.erstelldatum >= NOW() - INTERVAL '".$this->escape($expiration_days)." days'
|
||||||
|
ORDER BY
|
||||||
|
kt.kontakt_id DESC
|
||||||
|
LIMIT 1";
|
||||||
|
|
||||||
|
return $this->execQuery($qry, array($person_id, $kontakttyp, $verifikation_code));
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -151,7 +151,7 @@ class Notiz_model extends DB_Model
|
|||||||
* bestellung_id, lehreinheit_id, anrechnung_id, uid)
|
* bestellung_id, lehreinheit_id, anrechnung_id, uid)
|
||||||
* @param $id the corresponding id, part of public.tbl_notizzuordnung
|
* @param $id the corresponding id, part of public.tbl_notizzuordnung
|
||||||
*/
|
*/
|
||||||
public function getNotizWithDocEntries($id, $type)
|
public function getNotizWithDocEntries($id, $type, $withoutTags = true)
|
||||||
{
|
{
|
||||||
$qry = "
|
$qry = "
|
||||||
SELECT
|
SELECT
|
||||||
@@ -195,8 +195,12 @@ class Notiz_model extends DB_Model
|
|||||||
LEFT JOIN
|
LEFT JOIN
|
||||||
public.tbl_person person_bearbeiter ON (person_bearbeiter.person_id = p_bearbeiter.person_id)
|
public.tbl_person person_bearbeiter ON (person_bearbeiter.person_id = p_bearbeiter.person_id)
|
||||||
WHERE
|
WHERE
|
||||||
z.$type = ?
|
z.$type = ?";
|
||||||
GROUP BY
|
|
||||||
|
if ($withoutTags)
|
||||||
|
$qry .= " AND n.typ IS NULL ";
|
||||||
|
|
||||||
|
$qry .= "GROUP BY
|
||||||
notiz_id, z.notizzuordnung_id,
|
notiz_id, z.notizzuordnung_id,
|
||||||
person_verfasser.vorname, person_verfasser.nachname,
|
person_verfasser.vorname, person_verfasser.nachname,
|
||||||
person_bearbeiter.vorname, person_bearbeiter.nachname
|
person_bearbeiter.vorname, person_bearbeiter.nachname
|
||||||
|
|||||||
@@ -307,72 +307,60 @@ class Person_model extends DB_Model
|
|||||||
|
|
||||||
public function checkDuplicate($person_id)
|
public function checkDuplicate($person_id)
|
||||||
{
|
{
|
||||||
$qry = "SELECT person_id
|
$qry = "
|
||||||
FROM public.tbl_prestudent p
|
WITH person AS (
|
||||||
JOIN
|
SELECT *
|
||||||
(
|
FROM public.tbl_person
|
||||||
SELECT DISTINCT ON(prestudent_id) *
|
WHERE person_id = ?
|
||||||
FROM public.tbl_prestudentstatus
|
),
|
||||||
WHERE prestudent_id IN
|
allePersonen AS (
|
||||||
(
|
SELECT p.person_id
|
||||||
SELECT prestudent_id
|
FROM public.tbl_person p
|
||||||
FROM public.tbl_prestudent
|
JOIN person
|
||||||
WHERE person_id IN
|
ON lower(p.vorname) = lower(person.vorname)
|
||||||
(
|
AND lower(p.nachname) = lower(person.nachname)
|
||||||
SELECT p2.person_id
|
AND p.gebdatum = person.gebdatum
|
||||||
FROM public.tbl_person p
|
),
|
||||||
JOIN public.tbl_person p2
|
lastStatus AS (
|
||||||
ON lower(p.vorname) = lower(p2.vorname)
|
SELECT DISTINCT ON (tbl_prestudentstatus.prestudent_id)
|
||||||
AND lower(p.nachname) = lower(p2.nachname)
|
tbl_prestudentstatus.prestudent_id,
|
||||||
AND p.gebdatum = p2.gebdatum
|
tbl_prestudentstatus.status_kurzbz,
|
||||||
AND p.person_id = ?
|
tbl_prestudent.studiengang_kz,
|
||||||
)
|
tbl_prestudent.person_id
|
||||||
)
|
FROM public.tbl_prestudentstatus
|
||||||
ORDER BY prestudent_id, datum DESC, insertamum DESC
|
JOIN public.tbl_prestudent USING (prestudent_id)
|
||||||
) ps USING(prestudent_id)
|
WHERE tbl_prestudent.person_id IN (SELECT person_id FROM allePersonen)
|
||||||
JOIN public.tbl_status USING(status_kurzbz)
|
ORDER BY tbl_prestudentstatus.prestudent_id, tbl_prestudentstatus.datum DESC, tbl_prestudentstatus.insertamum DESC
|
||||||
|
),
|
||||||
|
interessenten AS (
|
||||||
|
SELECT *
|
||||||
|
FROM lastStatus
|
||||||
WHERE status_kurzbz = 'Interessent'
|
WHERE status_kurzbz = 'Interessent'
|
||||||
AND studiengang_kz IN
|
),
|
||||||
(
|
keineInteressenten AS (
|
||||||
SELECT studiengang_kz
|
SELECT *
|
||||||
FROM public.tbl_prestudent p
|
FROM lastStatus
|
||||||
JOIN
|
WHERE status_kurzbz != 'Interessent'
|
||||||
(
|
),
|
||||||
SELECT DISTINCT ON(prestudent_id) *
|
doppeltePerson AS (
|
||||||
FROM public.tbl_prestudentstatus
|
|
||||||
WHERE prestudent_id IN
|
|
||||||
(
|
|
||||||
SELECT prestudent_id
|
|
||||||
FROM public.tbl_prestudent
|
|
||||||
WHERE person_id IN
|
|
||||||
(
|
|
||||||
SELECT p2.person_id
|
|
||||||
FROM public.tbl_person p
|
|
||||||
JOIN public.tbl_person p2
|
|
||||||
ON lower(p.vorname) = lower(p2.vorname)
|
|
||||||
AND lower(p.nachname) = lower(p2.nachname)
|
|
||||||
AND p.gebdatum = p2.gebdatum
|
|
||||||
AND p.person_id = ?
|
|
||||||
)
|
|
||||||
)
|
|
||||||
ORDER BY prestudent_id, datum DESC, insertamum DESC
|
|
||||||
) ps USING(prestudent_id)
|
|
||||||
JOIN public.tbl_status USING(status_kurzbz)
|
|
||||||
WHERE status_kurzbz = 'Abbrecher'
|
|
||||||
)
|
|
||||||
|
|
||||||
UNION
|
|
||||||
|
|
||||||
SELECT p2.person_id
|
SELECT p2.person_id
|
||||||
FROM tbl_person p1
|
FROM public.tbl_person p1
|
||||||
JOIN tbl_prestudent ps ON p1.person_id = ps.person_id
|
JOIN public.tbl_prestudent ps1 ON ps1.person_id = p1.person_id
|
||||||
INNER JOIN (
|
JOIN public.tbl_person p2
|
||||||
SELECT vorname, nachname, gebdatum, person.person_id
|
ON lower(p1.vorname) = lower(p2.vorname)
|
||||||
FROM tbl_person person
|
AND lower(p1.nachname) = lower(p2.nachname)
|
||||||
JOIN tbl_prestudent sps ON person.person_id = sps.person_id
|
AND p1.gebdatum = p2.gebdatum
|
||||||
) p2
|
WHERE p1.person_id = ?
|
||||||
ON (lower(p1.vorname) = lower(p2.vorname) AND lower(p1.nachname) = lower(p2.nachname) AND p1.gebdatum = p2.gebdatum)
|
AND p1.person_id <> p2.person_id
|
||||||
WHERE p1.person_id != p2.person_id AND (p1.person_id = ?)";
|
)
|
||||||
|
SELECT DISTINCT(interessenten.person_id)
|
||||||
|
FROM interessenten
|
||||||
|
JOIN keineInteressenten
|
||||||
|
ON interessenten.studiengang_kz = keineInteressenten.studiengang_kz
|
||||||
|
WHERE interessenten.person_id = ?
|
||||||
|
UNION
|
||||||
|
SELECT DISTINCT person_id
|
||||||
|
FROM doppeltePerson";
|
||||||
|
|
||||||
return $this->execQuery($qry, array($person_id, $person_id, $person_id));
|
return $this->execQuery($qry, array($person_id, $person_id, $person_id));
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -63,6 +63,7 @@ class Profil_update_model extends DB_Model
|
|||||||
$this->addSelect(["public.tbl_profil_update.*", "public.tbl_person.vorname"]);
|
$this->addSelect(["public.tbl_profil_update.*", "public.tbl_person.vorname"]);
|
||||||
$this->addJoin("public.tbl_benutzer", "public.tbl_benutzer.uid = public.tbl_profil_update.uid");
|
$this->addJoin("public.tbl_benutzer", "public.tbl_benutzer.uid = public.tbl_profil_update.uid");
|
||||||
$this->addJoin("public.tbl_person", "public.tbl_person.person_id = public.tbl_benutzer.person_id");
|
$this->addJoin("public.tbl_person", "public.tbl_person.person_id = public.tbl_benutzer.person_id");
|
||||||
|
$this->db->order_by('COALESCE(public.tbl_profil_update.updateamum, public.tbl_profil_update.insertamum)', 'DESC', false);
|
||||||
$res = $this->loadWhere($whereClause);
|
$res = $this->loadWhere($whereClause);
|
||||||
if (isError($res)) {
|
if (isError($res)) {
|
||||||
return $res;
|
return $res;
|
||||||
@@ -118,13 +119,47 @@ class Profil_update_model extends DB_Model
|
|||||||
$parameters = [];
|
$parameters = [];
|
||||||
$query = "
|
$query = "
|
||||||
SELECT
|
SELECT
|
||||||
profil_update_id, tbl_profil_update.uid, (tbl_person.vorname || ' ' || tbl_person.nachname) AS name , topic, requested_change, tbl_profil_update.updateamum, tbl_profil_update.updatevon, tbl_profil_update.insertamum, tbl_profil_update.insertvon, status, public.tbl_profil_update_status.bezeichnung_mehrsprachig[(" . $lang . ")] as status_translated, status_timestamp, status_message, attachment_id
|
profil_update_id,
|
||||||
|
tbl_profil_update.uid,
|
||||||
|
(tbl_person.vorname || ' ' || tbl_person.nachname) AS name ,
|
||||||
|
topic,
|
||||||
|
requested_change,
|
||||||
|
tbl_profil_update.updateamum,
|
||||||
|
tbl_profil_update.updatevon,
|
||||||
|
tbl_profil_update.insertamum,
|
||||||
|
tbl_profil_update.insertvon,
|
||||||
|
status,
|
||||||
|
public.tbl_profil_update_status.bezeichnung_mehrsprachig[(" . $lang . ")] as status_translated,
|
||||||
|
status_timestamp,
|
||||||
|
status_message,
|
||||||
|
attachment_id,
|
||||||
|
UPPER(public.tbl_studiengang.typ || public.tbl_studiengang.kurzbz) AS studiengang,
|
||||||
|
COALESCE(of.orgform_kurzbz, public.tbl_studiengang.orgform_kurzbz) AS orgform,
|
||||||
|
NULL as oezuordnung
|
||||||
FROM public.tbl_profil_update
|
FROM public.tbl_profil_update
|
||||||
JOIN public.tbl_profil_update_status ON public.tbl_profil_update_status.status_kurzbz = public.tbl_profil_update.status
|
JOIN public.tbl_profil_update_status ON public.tbl_profil_update_status.status_kurzbz = public.tbl_profil_update.status
|
||||||
JOIN public.tbl_student ON public.tbl_student.student_uid=public.tbl_profil_update.uid
|
JOIN public.tbl_student ON public.tbl_student.student_uid=public.tbl_profil_update.uid
|
||||||
JOIN public.tbl_benutzer ON public.tbl_benutzer.uid = public.tbl_student.student_uid
|
JOIN public.tbl_benutzer ON public.tbl_benutzer.uid = public.tbl_student.student_uid
|
||||||
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
|
||||||
JOIN public.tbl_studiengang ON public.tbl_studiengang.studiengang_kz=public.tbl_student.studiengang_kz
|
JOIN public.tbl_studiengang ON public.tbl_studiengang.studiengang_kz=public.tbl_student.studiengang_kz
|
||||||
|
LEFT JOIN (
|
||||||
|
select
|
||||||
|
pss.prestudent_id, COALESCE(sp.orgform_kurzbz, pss.orgform_kurzbz) as orgform_kurzbz
|
||||||
|
from (
|
||||||
|
select
|
||||||
|
prestudent_id, max(insertamum) as insertamum
|
||||||
|
from
|
||||||
|
public.tbl_prestudentstatus
|
||||||
|
where
|
||||||
|
datum <= NOW()
|
||||||
|
group by
|
||||||
|
prestudent_id
|
||||||
|
) mpss
|
||||||
|
join
|
||||||
|
public.tbl_prestudentstatus pss on pss.prestudent_id = mpss.prestudent_id and pss.insertamum = mpss.insertamum
|
||||||
|
left join
|
||||||
|
lehre.tbl_studienplan sp on pss.studienplan_id = sp.studienplan_id
|
||||||
|
) of ON of.prestudent_id = public.tbl_student.prestudent_id
|
||||||
Where public.tbl_studiengang.oe_kurzbz IN ? ";
|
Where public.tbl_studiengang.oe_kurzbz IN ? ";
|
||||||
$parameters[] = $oe_berechtigung;
|
$parameters[] = $oe_berechtigung;
|
||||||
if ($whereClause) {
|
if ($whereClause) {
|
||||||
@@ -144,12 +179,33 @@ class Profil_update_model extends DB_Model
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if ($mitarbeiterBerechtigung) {
|
if ($mitarbeiterBerechtigung) {
|
||||||
$this->addSelect(["profil_update_id", "tbl_profil_update.uid", "(tbl_person.vorname || ' ' || tbl_person.nachname) AS name", "topic", "requested_change", "tbl_profil_update.updateamum", "tbl_profil_update.updatevon", "tbl_profil_update.insertamum", "tbl_profil_update.insertvon", "status", "public.tbl_profil_update_status.bezeichnung_mehrsprachig[(" . $lang . ")] AS status_translated", "status_timestamp", "status_message", "attachment_id"]);
|
$this->addSelect([
|
||||||
|
"profil_update_id",
|
||||||
|
"tbl_profil_update.uid",
|
||||||
|
"(tbl_person.vorname || ' ' || tbl_person.nachname) AS name",
|
||||||
|
"topic",
|
||||||
|
"requested_change",
|
||||||
|
"tbl_profil_update.updateamum",
|
||||||
|
"tbl_profil_update.updatevon",
|
||||||
|
"tbl_profil_update.insertamum",
|
||||||
|
"tbl_profil_update.insertvon",
|
||||||
|
"status",
|
||||||
|
"public.tbl_profil_update_status.bezeichnung_mehrsprachig[(" . $lang . ")] AS status_translated",
|
||||||
|
"status_timestamp",
|
||||||
|
"status_message",
|
||||||
|
"attachment_id",
|
||||||
|
"COALESCE(NULL) as studiengang",
|
||||||
|
"COALESCE(NULL) as orgform",
|
||||||
|
"oe.bezeichnung as oezuordnung"
|
||||||
|
]);
|
||||||
$this->addJoin('tbl_profil_update_status', 'tbl_profil_update_status.status_kurzbz=tbl_profil_update.status');
|
$this->addJoin('tbl_profil_update_status', 'tbl_profil_update_status.status_kurzbz=tbl_profil_update.status');
|
||||||
$this->addJoin('tbl_mitarbeiter', 'tbl_mitarbeiter.mitarbeiter_uid=tbl_profil_update.uid');
|
$this->addJoin('tbl_mitarbeiter', 'tbl_mitarbeiter.mitarbeiter_uid=tbl_profil_update.uid');
|
||||||
$this->addJoin('tbl_benutzer', 'tbl_benutzer.uid=tbl_profil_update.uid');
|
$this->addJoin('tbl_benutzer', 'tbl_benutzer.uid=tbl_profil_update.uid');
|
||||||
$this->addJoin('tbl_person', 'tbl_benutzer.person_id=tbl_person.person_id');
|
$this->addJoin('tbl_person', 'tbl_benutzer.person_id=tbl_person.person_id');
|
||||||
|
$this->addJoin('tbl_benutzerfunktion bf', 'bf.uid = tbl_benutzer.uid AND bf.funktion_kurzbz = \'oezuordnung\' AND NOW() >= COALESCE(bf.datum_von, \'1970-01-01\'::date) AND NOW() <= COALESCE(bf.datum_bis, \'2170-12-31\'::date)', 'LEFT');
|
||||||
|
$this->addJoin('tbl_organisationseinheit oe', 'oe.oe_kurzbz = bf.oe_kurzbz', 'LEFT');
|
||||||
$mitarbeiterRequests = $this->loadWhere($whereClause);
|
$mitarbeiterRequests = $this->loadWhere($whereClause);
|
||||||
|
|
||||||
if (isError($mitarbeiterRequests))
|
if (isError($mitarbeiterRequests))
|
||||||
return error("db error: " . getData($mitarbeiterRequests));
|
return error("db error: " . getData($mitarbeiterRequests));
|
||||||
$mitarbeiterRequests = getData($mitarbeiterRequests) ?: [];
|
$mitarbeiterRequests = getData($mitarbeiterRequests) ?: [];
|
||||||
@@ -179,8 +235,11 @@ class Profil_update_model extends DB_Model
|
|||||||
private function formatProfilRequest($request)
|
private function formatProfilRequest($request)
|
||||||
{
|
{
|
||||||
$request->requested_change = json_decode($request->requested_change);
|
$request->requested_change = json_decode($request->requested_change);
|
||||||
|
$request->insertamum_iso = !is_null($request->insertamum) ? date_create($request->insertamum)->format('Y-m-d') : null;
|
||||||
$request->insertamum = !is_null($request->insertamum) ? date_create($request->insertamum)->format('d.m.Y') : null;
|
$request->insertamum = !is_null($request->insertamum) ? date_create($request->insertamum)->format('d.m.Y') : null;
|
||||||
|
$request->updateamum_iso = !is_null($request->updateamum) ? date_create($request->updateamum)->format('Y-m-d') : null;
|
||||||
$request->updateamum = !is_null($request->updateamum) ? date_create($request->updateamum)->format('d.m.Y') : null;
|
$request->updateamum = !is_null($request->updateamum) ? date_create($request->updateamum)->format('d.m.Y') : null;
|
||||||
|
$request->status_timestamp_iso = !is_null($request->status_timestamp) ? date_create($request->status_timestamp)->format('Y-m-d') : null;
|
||||||
$request->status_timestamp = !is_null($request->status_timestamp) ? date_create($request->status_timestamp)->format('d.m.Y') : null;
|
$request->status_timestamp = !is_null($request->status_timestamp) ? date_create($request->status_timestamp)->format('d.m.Y') : null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -430,4 +430,18 @@ class Mitarbeiter_model extends DB_Model
|
|||||||
|
|
||||||
return $this->execQuery($qry, $parametersArray);
|
return $this->execQuery($qry, $parametersArray);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function isLehrauftragFirma($mitarbeiter_uid)
|
||||||
|
{
|
||||||
|
$this->addSelect('firma_id');
|
||||||
|
$this->addJoin('public.tbl_benutzer', 'uid = mitarbeiter_uid');
|
||||||
|
$this->addJoin('public.tbl_person', 'person_id');
|
||||||
|
$this->addJoin('public.tbl_adresse', 'person_id', 'LEFT');
|
||||||
|
$this->addOrder('zustelladresse', 'DESC');
|
||||||
|
$this->addOrder('firma_id');
|
||||||
|
$this->addLimit(1);
|
||||||
|
$firma_result = $this->loadWhere(array('mitarbeiter_uid' => $mitarbeiter_uid));
|
||||||
|
$firma = getData($firma_result)[0]->firma_id;
|
||||||
|
return !is_null($firma);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -76,7 +76,7 @@ class Reservierung_model extends DB_Model
|
|||||||
*
|
*
|
||||||
* @return stdClass
|
* @return stdClass
|
||||||
*/
|
*/
|
||||||
public function getReservierungenMitarbeiter($start_date, $end_date, $ort_kurzbz = null)
|
public function getReservierungenMitarbeiter($start_date, $end_date)
|
||||||
{
|
{
|
||||||
|
|
||||||
$raum_reservierungen_query = "SELECT res.*, beginn, ende,
|
$raum_reservierungen_query = "SELECT res.*, beginn, ende,
|
||||||
@@ -89,7 +89,6 @@ class Reservierung_model extends DB_Model
|
|||||||
JOIN lehre.tbl_stunde ON lehre.tbl_stunde.stunde = res.stunde
|
JOIN lehre.tbl_stunde ON lehre.tbl_stunde.stunde = res.stunde
|
||||||
WHERE res.uid = ? AND datum >= ? AND datum <= ?";
|
WHERE res.uid = ? AND datum >= ? AND datum <= ?";
|
||||||
|
|
||||||
// $subquery = is_null($ort_kurzbz)? $lvplan_reservierungen_query:$raum_reservierungen_query;
|
|
||||||
$subquery = $raum_reservierungen_query;
|
$subquery = $raum_reservierungen_query;
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -10,6 +10,9 @@ class Stundenplandev_model extends DB_Model
|
|||||||
parent::__construct();
|
parent::__construct();
|
||||||
$this->dbTable = 'lehre.tbl_stundenplandev';
|
$this->dbTable = 'lehre.tbl_stundenplandev';
|
||||||
$this->pk = 'stundenplandev_id';
|
$this->pk = 'stundenplandev_id';
|
||||||
|
|
||||||
|
$this->load->model('education/lehreinheit_model', 'LehreinheitModel');
|
||||||
|
$this->load->model('education/Lehreinheitgruppe_model', 'LehreinheitgruppeModel');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -157,4 +160,85 @@ class Stundenplandev_model extends DB_Model
|
|||||||
return $this->execQuery($qry, $params);
|
return $this->execQuery($qry, $params);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function deleteGroupPlanning($lehreinheit_id, $lehreinheitgruppe_id)
|
||||||
|
{
|
||||||
|
$lehreinheit = $this->LehreinheitModel->load($lehreinheit_id);
|
||||||
|
|
||||||
|
if (!hasData($lehreinheit))
|
||||||
|
return error ('No Lehreinheit found!');
|
||||||
|
|
||||||
|
$lehreinheitgruppe = $this->LehreinheitgruppeModel->load($lehreinheitgruppe_id);
|
||||||
|
|
||||||
|
if (!hasData($lehreinheitgruppe))
|
||||||
|
return error ('No Lehreinheitgruppe found!');
|
||||||
|
|
||||||
|
$this->addJoin('lehre.tbl_stundenplan_betriebsmittel', 'stundenplandev_id');
|
||||||
|
$this->addJoin('lehre.tbl_lehreinheitgruppe', 'lehreinheit_id');
|
||||||
|
$this->db->where('tbl_lehreinheitgruppe.lehreinheitgruppe_id', $lehreinheitgruppe_id);
|
||||||
|
|
||||||
|
$this->db->group_start();
|
||||||
|
$this->db->group_start();
|
||||||
|
$this->db->where('tbl_lehreinheitgruppe.gruppe_kurzbz IS NOT NULL', null, false);
|
||||||
|
$this->db->where('tbl_lehreinheitgruppe.gruppe_kurzbz = tbl_stundenplandev.gruppe_kurzbz', null, false);
|
||||||
|
$this->db->group_end();
|
||||||
|
$this->db->or_group_start();
|
||||||
|
$this->db->where('tbl_lehreinheitgruppe.gruppe_kurzbz IS NULL', null, false);
|
||||||
|
$this->db->where('tbl_lehreinheitgruppe.studiengang_kz = tbl_stundenplandev.studiengang_kz', null, false);
|
||||||
|
$this->db->where('tbl_lehreinheitgruppe.semester = tbl_stundenplandev.semester', null, false);
|
||||||
|
$this->db->where('tbl_lehreinheitgruppe.verband = tbl_stundenplandev.verband', null, false);
|
||||||
|
$this->db->where('tbl_lehreinheitgruppe.gruppe = tbl_stundenplandev.gruppe', null, false);
|
||||||
|
$this->db->group_end();
|
||||||
|
$this->db->group_end();
|
||||||
|
|
||||||
|
$betriebsmittel_result = $this->load();
|
||||||
|
$betriebsmittel_array = hasData($betriebsmittel_result) ? getData($betriebsmittel_result) : array();
|
||||||
|
if (sizeof($betriebsmittel_array) > 0)
|
||||||
|
{
|
||||||
|
return error ('Gruppe kann nicht entfernt werden da bereits Ressourcen zugeordnet wurden');
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->addSelect('stundenplandev_id');
|
||||||
|
$this->addJoin('lehre.tbl_lehreinheitgruppe',
|
||||||
|
"tbl_stundenplandev.lehreinheit_id = tbl_lehreinheitgruppe.lehreinheit_id
|
||||||
|
AND tbl_stundenplandev.studiengang_kz = tbl_lehreinheitgruppe.studiengang_kz
|
||||||
|
AND tbl_stundenplandev.semester = tbl_lehreinheitgruppe.semester
|
||||||
|
AND trim(COALESCE(tbl_stundenplandev.verband, '')) = trim(COALESCE(tbl_lehreinheitgruppe.verband, ''))
|
||||||
|
AND trim(COALESCE(tbl_stundenplandev.gruppe, '')) = trim(COALESCE(tbl_lehreinheitgruppe.gruppe, ''))
|
||||||
|
AND trim(COALESCE(tbl_stundenplandev.gruppe_kurzbz, '')) = trim(COALESCE(tbl_lehreinheitgruppe.gruppe_kurzbz, ''))"
|
||||||
|
);
|
||||||
|
$stundenplan_result = $this->loadWhere(array('tbl_lehreinheitgruppe.lehreinheitgruppe_id' => $lehreinheitgruppe_id));
|
||||||
|
|
||||||
|
if (hasData($stundenplan_result))
|
||||||
|
{
|
||||||
|
$stundenplan_ids = array_column(getData($stundenplan_result), 'stundenplandev_id');
|
||||||
|
$this->db->where_in('stundenplandev_id', $stundenplan_ids);
|
||||||
|
$delete_result = $this->db->delete('lehre.tbl_stundenplandev');
|
||||||
|
|
||||||
|
if ($delete_result)
|
||||||
|
return success('Group deleted successfully from Stundenplandev');
|
||||||
|
else
|
||||||
|
return error('Error deleting Group from Stundenplandev');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public function deleteLektorPlanning($lehreinheit_id, $mitarbeiter_uid)
|
||||||
|
{
|
||||||
|
//TODO (david) prüfen ob der check notwendig ist
|
||||||
|
/*$this->addDistinct('mitarbeiter_uid');
|
||||||
|
$this->addSelect('mitarbeiter_uid');
|
||||||
|
$stundenplan_result = $this->loadWhere(array('lehreinheit_id' => $lehreinheit_id));
|
||||||
|
$stundenplan_array = hasData($stundenplan_result) ? (getData($stundenplan_result)) : array();
|
||||||
|
|
||||||
|
if (sizeof($stundenplan_array) <= 1)
|
||||||
|
return error('Diese/r LektorIn kann nicht aus dem LVPlan entfernt werden da dies der/die letzte verplante LektorIn ist');*/
|
||||||
|
|
||||||
|
$this->addJoin('lehre.tbl_stundenplan_betriebsmittel', 'stundenplandev_id');
|
||||||
|
$betriebsmittel_result = $this->loadWhere(array('lehreinheit_id' => $lehreinheit_id, 'tbl_stundenplandev.mitarbeiter_uid' => $mitarbeiter_uid));
|
||||||
|
$betriebsmittel_array = hasData($betriebsmittel_result) ? getData($betriebsmittel_result) : array();
|
||||||
|
|
||||||
|
if (sizeof($betriebsmittel_array) > 0)
|
||||||
|
return error('Gruppe kann nicht entfernt werden da bereits Ressourcen zugeordnet wurden');
|
||||||
|
|
||||||
|
return $this->delete(array('lehreinheit_id' => $lehreinheit_id, 'mitarbeiter_uid' => $mitarbeiter_uid));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -42,4 +42,20 @@ class Stundensatz_model extends DB_Model
|
|||||||
|
|
||||||
return $this->execQuery($qry, $params);
|
return $this->execQuery($qry, $params);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function getDefaultStundensatz($mitarbeiter_uid, $beginn, $ende = null, $typ = null)
|
||||||
|
{
|
||||||
|
$stundensatz_result = $this->getStundensatzByDatum($mitarbeiter_uid, $beginn, $ende, $typ);
|
||||||
|
$default_stundensatz = hasData($stundensatz_result) ? getData($stundensatz_result)[0]->stundensatz : null;
|
||||||
|
if (defined('FAS_LV_LEKTORINNENZUTEILUNG_FIXANGESTELLT_STUNDENSATZ') && !FAS_LV_LEKTORINNENZUTEILUNG_FIXANGESTELLT_STUNDENSATZ)
|
||||||
|
{
|
||||||
|
$this->load->model('vertragsbestandteil/Dienstverhaeltnis_model','DienstverhaeltnisModel');
|
||||||
|
$echterdv_result = $this->DienstverhaeltnisModel->existsDienstverhaeltnis($mitarbeiter_uid, $beginn, $ende, 'echterdv');
|
||||||
|
if (hasData($echterdv_result))
|
||||||
|
{
|
||||||
|
$default_stundensatz = null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return $default_stundensatz;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -253,4 +253,25 @@ EOSQL;
|
|||||||
}
|
}
|
||||||
return $dvs;
|
return $dvs;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function existsDienstverhaeltnis($mitarbeiter_uid, $start, $ende = null, $vertragsart_kurzbz = null)
|
||||||
|
{
|
||||||
|
$this->addOrder('von', 'DESC');
|
||||||
|
$this->db->where('mitarbeiter_uid', $mitarbeiter_uid);
|
||||||
|
if (!is_null($vertragsart_kurzbz))
|
||||||
|
$this->db->where('vertragsart_kurzbz', $this->escape($vertragsart_kurzbz));
|
||||||
|
|
||||||
|
$this->db->where('von <=', $ende);
|
||||||
|
|
||||||
|
if (!is_null($ende))
|
||||||
|
{
|
||||||
|
$this->db->group_start();
|
||||||
|
$this->db->where('bis >=', $start);
|
||||||
|
$this->db->or_where('bis IS NULL', null, false);
|
||||||
|
$this->db->group_end();
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->addLimit(1);
|
||||||
|
return $this->load();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,10 +2,14 @@
|
|||||||
$includesArray = array(
|
$includesArray = array(
|
||||||
'title' => 'Profil Änderungen',
|
'title' => 'Profil Änderungen',
|
||||||
'vue3' => true,
|
'vue3' => true,
|
||||||
|
'primevue3' => true,
|
||||||
'bootstrap5' => true,
|
'bootstrap5' => true,
|
||||||
'fontawesome6'=> true,
|
'fontawesome6'=> true,
|
||||||
'axios027' => true,
|
'axios027' => true,
|
||||||
'tabulator5' => true,
|
'tabulator5' => true,
|
||||||
|
'customJSs' => array(
|
||||||
|
'vendor/moment/luxonjs/luxon.min.js'
|
||||||
|
),
|
||||||
'customJSModules' => array(
|
'customJSModules' => array(
|
||||||
'public/js/apps/Cis/ProfilUpdateRequests.js'
|
'public/js/apps/Cis/ProfilUpdateRequests.js'
|
||||||
),
|
),
|
||||||
|
|||||||
@@ -0,0 +1,39 @@
|
|||||||
|
<?php
|
||||||
|
$includesArray = array(
|
||||||
|
'title' => 'LVVerwaltung',
|
||||||
|
'axios027' => true,
|
||||||
|
'bootstrap5' => true,
|
||||||
|
'fontawesome6' => true,
|
||||||
|
'vue3' => true,
|
||||||
|
'primevue3' => true,
|
||||||
|
'tabulator6' => true,
|
||||||
|
'tinymce5' => true,
|
||||||
|
'tags' => true,
|
||||||
|
|
||||||
|
'customCSSs' => [
|
||||||
|
'public/css/components/vue-datepicker.css',
|
||||||
|
'public/css/components/primevue.css',
|
||||||
|
'public/css/Studentenverwaltung.css',
|
||||||
|
'public/css/Lvverwaltung.css'
|
||||||
|
|
||||||
|
],
|
||||||
|
'customJSModules' => [
|
||||||
|
'public/js/apps/LVVerwaltung.js'
|
||||||
|
]
|
||||||
|
);
|
||||||
|
|
||||||
|
$this->load->view('templates/FHC-Header', $includesArray);
|
||||||
|
|
||||||
|
?>
|
||||||
|
<div id="main">
|
||||||
|
<router-view
|
||||||
|
default-semester="<?= $variables['semester_aktuell']; ?>"
|
||||||
|
lv-root="<?= site_url('LVVerwaltung'); ?>"
|
||||||
|
:permissions="<?= htmlspecialchars(json_encode($permissions));?>"
|
||||||
|
:config="<?= htmlspecialchars(json_encode($configs)); ?>"
|
||||||
|
>
|
||||||
|
</router-view>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
<?php $this->load->view('templates/FHC-Footer', $includesArray); ?>
|
||||||
|
|
||||||
@@ -18,6 +18,9 @@
|
|||||||
<?php (!isset($notiz->kurzbzlang)) ?: print_r('(' . nl2br($notiz->kurzbzlang) . ') - ') ?>
|
<?php (!isset($notiz->kurzbzlang)) ?: print_r('(' . nl2br($notiz->kurzbzlang) . ') - ') ?>
|
||||||
<?php echo nl2br($notiz->text) ?>
|
<?php echo nl2br($notiz->text) ?>
|
||||||
</td>
|
</td>
|
||||||
|
<td>
|
||||||
|
<a href="mailto:<?php echo htmlspecialchars($notiz->email)?>?body=<?php echo rawurlencode($notiz->text);; ?>"><i class="fa fa-envelope"></i></a>
|
||||||
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
<?php endforeach; ?>
|
<?php endforeach; ?>
|
||||||
</tbody>
|
</tbody>
|
||||||
|
|||||||
@@ -57,7 +57,7 @@
|
|||||||
<div class="row<?php if ($lockedbyother) echo ' alert-danger' ?>">
|
<div class="row<?php if ($lockedbyother) echo ' alert-danger' ?>">
|
||||||
<div class="col-lg-8">
|
<div class="col-lg-8">
|
||||||
<h3 class="page-header">
|
<h3 class="page-header">
|
||||||
Infocenter Details: <?php echo $stammdaten->vorname.' '.$stammdaten->nachname ?>
|
Infocenter Details: <a target="_blank" title="Studentenverwaltung" href="<?php echo site_url('/Studentenverwaltung/' . $studiensemester . '/person/' . $stammdaten->person_id) ?>"><?php echo $stammdaten->vorname.' '.$stammdaten->nachname ?> <i class="fa fa-external-link" style="font-size:small"></i></a>
|
||||||
</h3>
|
</h3>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-lg-4">
|
<div class="col-lg-4">
|
||||||
|
|||||||
@@ -182,7 +182,7 @@
|
|||||||
</div>
|
</div>
|
||||||
<?php if (isset($stammdaten->zugangscode)): ?>
|
<?php if (isset($stammdaten->zugangscode)): ?>
|
||||||
<div class="col-xs-6 text-right">
|
<div class="col-xs-6 text-right">
|
||||||
<a href="<?php echo CIS_ROOT.'addons/bewerbung/cis/registration.php?code='.html_escape($stammdaten->zugangscode).'&emailAdresse='.$lastMailAdress ?>"
|
<a href="<?php echo CIS_ROOT.'addons/bewerbung/cis/registration.php?code='.html_escape($stammdaten->zugangscode).'&emailAdresse='.$lastMailAdress.'&keepEmailUnverified=true' ?>"
|
||||||
target='_blank'><i class="glyphicon glyphicon-new-window"></i> <?php echo $this->p->t('infocenter','zugangBewerbung') ?></a>
|
target='_blank'><i class="glyphicon glyphicon-new-window"></i> <?php echo $this->p->t('infocenter','zugangBewerbung') ?></a>
|
||||||
</div>
|
</div>
|
||||||
<?php endif; ?>
|
<?php endif; ?>
|
||||||
|
|||||||
@@ -382,7 +382,7 @@ function writePruefungsTable(e, data, anmeldung)
|
|||||||
}
|
}
|
||||||
else if(new Date() > minimumFrist)
|
else if(new Date() > minimumFrist)
|
||||||
{
|
{
|
||||||
button = "<p><a href='#' title='<?php echo $p->t('pruefung/anmeldenMoeglichBis'); ?> "+frist+"'><input style='width: 140px; background-color: green;' type='button' value='"+termin+" "+time+"' onclick='openDialog(\""+e.lehrveranstaltung[0].lehrveranstaltung_id+"\", \""+d.pruefungstermin_id+"\", \""+e.lehrveranstaltung[0].bezeichnung.replace("'", "'")+"\", \""+d.von+"\", \""+d.bis+"\");'></a></p>";
|
button = "<p><a href='#' title='<?php echo $p->t('pruefung/anmeldenMoeglichBis'); ?> "+frist+"'><input style='width: 140px; background-color: green;' type='button' value='"+termin+" "+time+"' onclick='openDialog(\""+e.lehrveranstaltung[0].lehrveranstaltung_id+"\", \""+d.pruefungstermin_id+"\", \""+e.lehrveranstaltung[0].bezeichnung.replace("'", "'")+"\", \""+d.von+"\", \""+d.bis+"\", \""+e.lehrveranstaltung[0].ects +"\");'></a></p>";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@@ -479,13 +479,15 @@ function showPruefungsDetails(prfId, lvId)
|
|||||||
* @param {type} lvBezeichnung Bezeichnung der Lehrveranstaltung
|
* @param {type} lvBezeichnung Bezeichnung der Lehrveranstaltung
|
||||||
* @param {type} terminVon Beginn der Prüfung
|
* @param {type} terminVon Beginn der Prüfung
|
||||||
* @param {type} terminBis Ende der Prüfung
|
* @param {type} terminBis Ende der Prüfung
|
||||||
|
* @param {type} ects der LV
|
||||||
* @returns {undefined}
|
* @returns {undefined}
|
||||||
*/
|
*/
|
||||||
function openDialog(lehrveranstaltung_id, termin_id, lvBezeichnung, terminVon, terminBis)
|
function openDialog(lehrveranstaltung_id, termin_id, lvBezeichnung, terminVon, terminBis, ects)
|
||||||
{
|
{
|
||||||
$("#lehrveranstaltungHidden").val(lehrveranstaltung_id);
|
$("#lehrveranstaltungHidden").val(lehrveranstaltung_id);
|
||||||
$("#terminHidden").val(termin_id);
|
$("#terminHidden").val(termin_id);
|
||||||
$("#lehrveranstaltung").html(lvBezeichnung);
|
$("#lehrveranstaltung").html(lvBezeichnung);
|
||||||
|
$("#ectsangabe").val(ects);
|
||||||
|
|
||||||
$.ajax({
|
$.ajax({
|
||||||
dataType: 'json',
|
dataType: 'json',
|
||||||
@@ -582,6 +584,12 @@ function saveAnmeldung(lehrveranstaltung_id, termin_id)
|
|||||||
if($('#prestudent_studiengang').length)
|
if($('#prestudent_studiengang').length)
|
||||||
studiengang_kz = $('#prestudent_studiengang option:selected').val();
|
studiengang_kz = $('#prestudent_studiengang option:selected').val();
|
||||||
|
|
||||||
|
var ects = null;
|
||||||
|
if ($('#ectsangabe').length)
|
||||||
|
{
|
||||||
|
ects = $('#ectsangabe').val();
|
||||||
|
}
|
||||||
|
|
||||||
$.ajax({
|
$.ajax({
|
||||||
dataType: 'json',
|
dataType: 'json',
|
||||||
url: "./pruefungsanmeldung.json.php",
|
url: "./pruefungsanmeldung.json.php",
|
||||||
@@ -593,7 +601,8 @@ function saveAnmeldung(lehrveranstaltung_id, termin_id)
|
|||||||
bemerkung: bemerkungen,
|
bemerkung: bemerkungen,
|
||||||
uid: uid,
|
uid: uid,
|
||||||
studienverpflichtung_id: studienverpflichtung_id,
|
studienverpflichtung_id: studienverpflichtung_id,
|
||||||
studiengang_kz: studiengang_kz
|
studiengang_kz: studiengang_kz,
|
||||||
|
ects: ects
|
||||||
},
|
},
|
||||||
error: loadError,
|
error: loadError,
|
||||||
success: function(data){
|
success: function(data){
|
||||||
@@ -804,6 +813,7 @@ function writeAnmeldungen(data, showMessage = true)
|
|||||||
var pruefung_id = data.result.anmeldungen[0].pruefung_id;
|
var pruefung_id = data.result.anmeldungen[0].pruefung_id;
|
||||||
var lehrveranstaltung_id = data.result.anmeldungen[0].lehrveranstaltung_id;
|
var lehrveranstaltung_id = data.result.anmeldungen[0].lehrveranstaltung_id;
|
||||||
var ort_kurzbz = data.result.ort_kurzbz;
|
var ort_kurzbz = data.result.ort_kurzbz;
|
||||||
|
var anderer_raum = data.result.anderer_raum;
|
||||||
var lv_bezeichnung = data.result.lv_bezeichnung;
|
var lv_bezeichnung = data.result.lv_bezeichnung;
|
||||||
var lv_lehrtyp = data.result.lv_lehrtyp;
|
var lv_lehrtyp = data.result.lv_lehrtyp;
|
||||||
var prf_termin = data.result.datum;
|
var prf_termin = data.result.datum;
|
||||||
@@ -816,24 +826,33 @@ function writeAnmeldungen(data, showMessage = true)
|
|||||||
count++;
|
count++;
|
||||||
var vorname = d.student.vorname !== "null" ? d.student.vorname : "";
|
var vorname = d.student.vorname !== "null" ? d.student.vorname : "";
|
||||||
var nachname = d.student.nachname !== "null" ? d.student.nachname : "";
|
var nachname = d.student.nachname !== "null" ? d.student.nachname : "";
|
||||||
|
|
||||||
|
let ects = "";
|
||||||
|
<?php if (defined('CIS_PRUEFUNGSANMELDUNG_ECTS_ANGABE') && (CIS_PRUEFUNGSANMELDUNG_ECTS_ANGABE === true)): ?>
|
||||||
|
ects = d.ects !== null ? "(" + d.ects + " ECTS) ": "";
|
||||||
|
|
||||||
|
<?php endif; ?>
|
||||||
|
|
||||||
switch(d.status_kurzbz)
|
switch(d.status_kurzbz)
|
||||||
{
|
{
|
||||||
case 'angemeldet':
|
case 'angemeldet':
|
||||||
liste += "<li class='ui-state-default' id='"+d.student.uid+"'><span class='ui-icon ui-icon-arrowthick-2-n-s'></span><a href='#' onclick='showKommentar(\""+vorname+"\",\""+nachname+"\", \""+d.pruefungsanmeldung_id+"\", \""+d.kommentar+"\", \""+terminId+"\", \""+lehrveranstaltung_id+"\");'>"+vorname+" "+nachname+"</a>";
|
liste += "<li class='ui-state-default' id='"+d.student.uid+"'><span class='ui-icon ui-icon-arrowthick-2-n-s'></span><a href='#' onclick='showKommentar(\""+vorname+"\",\""+nachname+"\", \""+d.pruefungsanmeldung_id+"\", \""+d.kommentar+"\", \""+terminId+"\", \""+lehrveranstaltung_id+"\");'>"+ects+vorname+" "+nachname+"</a>";
|
||||||
liste += "<div style='width: 3%; text-align: right;'>"+count+"</div><div style='text-align: center; width: 34%;'><input style='vertical-align: top; height: 24px;' type='button' value='<?php echo $p->t('pruefung/bestaetigen'); ?>' onclick='anmeldungBestaetigen(\""+d.pruefungsanmeldung_id+"\", \""+terminId+"\", \""+lehrveranstaltung_id+"\");'>";
|
liste += "<div style='width: 3%; text-align: right;'>"+count+"</div><div style='text-align: center; width: 34%;'><input style='vertical-align: top; height: 24px;' type='button' value='<?php echo $p->t('pruefung/bestaetigen'); ?>' onclick='anmeldungBestaetigen(\""+d.pruefungsanmeldung_id+"\", \""+terminId+"\", \""+lehrveranstaltung_id+"\");'>";
|
||||||
liste += "<input style='vertical-align: top; height: 24px; background-color: #dd514c;' type='button' value='X' onclick='anmeldungLoeschen(\""+d.pruefungsanmeldung_id+"\", \""+terminId+"\", \""+lehrveranstaltung_id+"\");'></div>";
|
liste += "<input style='vertical-align: top; height: 24px; background-color: #dd514c;' type='button' value='X' onclick='anmeldungLoeschen(\""+d.pruefungsanmeldung_id+"\", \""+terminId+"\", \""+lehrveranstaltung_id+"\");'></div>";
|
||||||
if(d.wuensche !== null)
|
if(d.wuensche !== null)
|
||||||
{
|
{
|
||||||
liste += "<div class='anmerkungInfo'><a href='#' title='<?php echo $p->t('pruefung/anmerkungDesStudenten'); ?>"+d.wuensche+"'><img style='width: 20px;' src='../../../../skin/images/button_lvinfo.png'></a></div>";
|
let msg = $('<div>').text(d.wuensche).html();
|
||||||
|
liste += `<div class='anmerkungInfo'><a href='#' data-msg="${msg}" onclick="openKommentarDialog(this.dataset.msg)"><img style='width: 20px;' src='../../../../skin/images/button_lvinfo.png'></a></div>`;
|
||||||
}
|
}
|
||||||
liste += "</li>";
|
liste += "</li>";
|
||||||
break;
|
break;
|
||||||
case 'bestaetigt':
|
case 'bestaetigt':
|
||||||
liste += "<li class='ui-state-default' id='"+d.student.uid+"'><span class='ui-icon ui-icon-arrowthick-2-n-s'></span><a href='#' onclick='showKommentar(\""+vorname+"\",\""+nachname+"\", \""+d.pruefungsanmeldung_id+"\", \""+d.kommentar+"\", \""+terminId+"\", \""+lehrveranstaltung_id+"\");'>"+vorname+" "+nachname+"</a>";
|
liste += "<li class='ui-state-default' id='"+d.student.uid+"'><span class='ui-icon ui-icon-arrowthick-2-n-s'></span><a href='#' onclick='showKommentar(\""+vorname+"\",\""+nachname+"\", \""+d.pruefungsanmeldung_id+"\", \""+d.kommentar+"\", \""+terminId+"\", \""+lehrveranstaltung_id+"\");'>"+ects+vorname+" "+nachname+"</a>";
|
||||||
liste += "<div style='width: 2%; text-align: right;'>"+count+"</div><div style='text-align: center; width: 20%;'><a href='#' title='<?php echo $p->t('pruefung/statusAenderungVon'); ?>: "+d.statusupdatevon+"'><?php echo $p->t('pruefung/bestaetigt'); ?></a></div>";
|
liste += "<div style='width: 2%; text-align: right;'>"+count+"</div><div style='text-align: center; width: 20%;'><a href='#' title='<?php echo $p->t('pruefung/statusAenderungVon'); ?>: "+d.statusupdatevon+"'><?php echo $p->t('pruefung/bestaetigt'); ?></a></div>";
|
||||||
if(d.wuensche !== null)
|
if(d.wuensche !== null)
|
||||||
{
|
{
|
||||||
liste += "<div class='anmerkungInfo'><a href='#' title='<?php echo $p->t('pruefung/anmerkungDesStudenten'); ?>"+d.wuensche+"'><img style='width: 20px;' src='../../../../skin/images/button_lvinfo.png'></a></div>";
|
let msg = $('<div>').text(d.wuensche).html();
|
||||||
|
liste += `<div class='anmerkungInfo'><a href='#' data-msg="${msg}" onclick="openKommentarDialog(this.dataset.msg)"><img style='width: 20px;' src='../../../../skin/images/button_lvinfo.png'></a></div>`;
|
||||||
}
|
}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
@@ -844,13 +863,14 @@ function writeAnmeldungen(data, showMessage = true)
|
|||||||
});
|
});
|
||||||
liste += "</ul>";
|
liste += "</ul>";
|
||||||
$("#anmeldung_hinzufuegen").html("<input id='anmeldung_hinzufuegen_uid' type='text' placeholder='StudentIn-UID' /><input type='button' value='<?php echo $p->t('global/hinzufuegen'); ?>' onclick='saveAnmeldung(\""+lehrveranstaltung_id+"\",\""+terminId+"\");'/>");
|
$("#anmeldung_hinzufuegen").html("<input id='anmeldung_hinzufuegen_uid' type='text' placeholder='StudentIn-UID' /><input type='button' value='<?php echo $p->t('global/hinzufuegen'); ?>' onclick='saveAnmeldung(\""+lehrveranstaltung_id+"\",\""+terminId+"\");'/>");
|
||||||
$("#reihungSpeichernButton").html("<input type='button' value='<?php echo $p->t('pruefung/reihungSpeichern'); ?>' onclick='saveReihung(\""+terminId+"\", \""+lehrveranstaltung_id+"\");'><input type='button' value='<?php echo $p->t('pruefung/alleBestaetigen'); ?>' onclick='alleBestaetigen(\""+terminId+"\", \""+lehrveranstaltung_id+"\");'>");
|
$("#reihungSpeichernButton").html("<label for='emails'>E-Mail: <input type='email' id='emails' multiple /> <br /><br />" +
|
||||||
|
"<input type='button' value='<?php echo $p->t('pruefung/reihungSpeichern'); ?>' onclick='saveReihung(\""+terminId+"\", \""+lehrveranstaltung_id+"\");'><input type='button' value='<?php echo $p->t('pruefung/alleBestaetigen'); ?>' onclick='alleBestaetigen(\""+terminId+"\", \""+lehrveranstaltung_id+"\");'>");
|
||||||
$("#lvdaten").html(lv_bezeichnung+" ("+prf_termin+")");
|
$("#lvdaten").html(lv_bezeichnung+" ("+prf_termin+")");
|
||||||
$("#anmeldeDaten").html(liste);
|
$("#anmeldeDaten").html(liste);
|
||||||
$("#listeDrucken").html(listenLinks);
|
$("#listeDrucken").html(listenLinks);
|
||||||
if(ort_kurzbz !== null)
|
if(ort_kurzbz !== null || anderer_raum !== null)
|
||||||
{
|
{
|
||||||
$("#raumLink").html("<span><?php echo $p->t('pruefung/pruefungsraum'); ?></span>"+ort_kurzbz);
|
$("#raumLink").html("<span><?php echo $p->t('pruefung/pruefungsraum'); ?></span>"+ (ort_kurzbz ?? anderer_raum));
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@@ -883,11 +903,17 @@ function writeAnmeldungen(data, showMessage = true)
|
|||||||
function openRaumDialog(terminId, lehrveranstaltung_id)
|
function openRaumDialog(terminId, lehrveranstaltung_id)
|
||||||
{
|
{
|
||||||
getRaeume(terminId);
|
getRaeume(terminId);
|
||||||
$("#raum").html('<h2><?php echo $p->t('pruefung/pruefungsraum'); ?></h2><input onChange="changeStateOfRaumDropdown();" type="checkbox" /><span><?php echo $p->t('pruefung/imBuero'); ?></span><br /><span style="font-weight: bold;"><?php echo $p->t('pruefung/raum'); ?>: </span><select id="raeumeDropdown"></select>');
|
$("#raum").html('<h2><?php echo $p->t('pruefung/pruefungsraum'); ?></h2><div id="raumInfos"><input onChange="changeStateOfRaumDropdown();" type="checkbox" /><span><?php echo $p->t('pruefung/imBuero'); ?></span><br /><span style="font-weight: bold;"><?php echo $p->t('pruefung/raum'); ?>: </span><select id="raeumeDropdown"></select><br /></div><input onChange="changeStateOfRaumInputs();" id="andererRaum" type="checkbox"/><span><?php echo $p->t('pruefung/andererRaum'); ?></span> <input type="text" id="andereRaumInput" placeholder="<?php echo $p->t('pruefung/andererRaum'); ?>"/><br />');
|
||||||
$("#raumSpeichernButton").html("<input type='button' value='<?php echo $p->t('pruefung/raumSpeichern'); ?>' onclick='saveRaum(\""+terminId+"\", \""+lehrveranstaltung_id+"\");'/>");
|
$("#raumSpeichernButton").html("<input type='button' value='<?php echo $p->t('pruefung/raumSpeichern'); ?>' onclick='saveRaum(\""+terminId+"\", \""+lehrveranstaltung_id+"\");'/>");
|
||||||
$("#raumDialog").dialog("open");
|
$("#raumDialog").dialog("open");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function openKommentarDialog(text)
|
||||||
|
{
|
||||||
|
$('#kommentarimDialog').text(text);
|
||||||
|
$('#kommentarDialog').dialog('open');
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* speichert die Reihung der Studenten einer Prüfungsanmeldung
|
* speichert die Reihung der Studenten einer Prüfungsanmeldung
|
||||||
* @param {type} terminId ID des Prüfungstermines
|
* @param {type} terminId ID des Prüfungstermines
|
||||||
@@ -1011,6 +1037,30 @@ function anmeldungLoeschen(pruefungsanmeldung_id, termin_id, lehrveranstaltung_i
|
|||||||
*/
|
*/
|
||||||
function alleBestaetigen(termin_id, lehrveranstaltung_id)
|
function alleBestaetigen(termin_id, lehrveranstaltung_id)
|
||||||
{
|
{
|
||||||
|
const input = $('#emails').val();
|
||||||
|
|
||||||
|
let emails = '';
|
||||||
|
if (input)
|
||||||
|
{
|
||||||
|
emails = input.split(",").map(s => s.trim());
|
||||||
|
const re = /^([\w-+]+(?:\.[\w-+]+)*)@((?:[\w-]+\.)*\w[\w-]{0,66})\.([a-z]{2,63}(?:\.[a-z]{2})?)$/i;
|
||||||
|
|
||||||
|
let valid = true;
|
||||||
|
$.each(emails, function(index, email)
|
||||||
|
{
|
||||||
|
if (re.test(email) === false)
|
||||||
|
{
|
||||||
|
alert("<?php echo $p->t('pruefung/bitteEmailAngeben')?>");
|
||||||
|
valid = false;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
if (!valid)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
$.ajax({
|
$.ajax({
|
||||||
dataType: 'json',
|
dataType: 'json',
|
||||||
url: "./pruefungsanmeldung.json.php",
|
url: "./pruefungsanmeldung.json.php",
|
||||||
@@ -1018,7 +1068,8 @@ function alleBestaetigen(termin_id, lehrveranstaltung_id)
|
|||||||
data: {
|
data: {
|
||||||
method: "alleBestaetigen",
|
method: "alleBestaetigen",
|
||||||
termin_id: termin_id,
|
termin_id: termin_id,
|
||||||
lehrveranstaltung_id: lehrveranstaltung_id
|
lehrveranstaltung_id: lehrveranstaltung_id,
|
||||||
|
emails: emails
|
||||||
},
|
},
|
||||||
error: loadError,
|
error: loadError,
|
||||||
success: function(data){
|
success: function(data){
|
||||||
@@ -1090,15 +1141,12 @@ function loadStudiengaenge()
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Lädt alle Prüfungen zu einem Studiengang
|
* Lädt alle Prüfungen zu einem Studiensemester
|
||||||
* @param {type} studiengang_kz Studiengangskennzahl
|
* @param {type} studiensemester Studiensemester
|
||||||
* @returns {undefined}
|
* @returns {undefined}
|
||||||
*/
|
*/
|
||||||
function loadPruefungStudiengang(studiengang_kz, studiensemester)
|
function loadPruefungStudiengang(studiensemester)
|
||||||
{
|
{
|
||||||
if(studiengang_kz === undefined)
|
|
||||||
studiengang_kz = $("#select_studiengang option:selected").val();
|
|
||||||
|
|
||||||
if(studiensemester === undefined)
|
if(studiensemester === undefined)
|
||||||
studiensemester = $("#filter_studiensemester option:selected").val();
|
studiensemester = $("#filter_studiensemester option:selected").val();
|
||||||
|
|
||||||
@@ -1107,8 +1155,7 @@ function loadPruefungStudiengang(studiengang_kz, studiensemester)
|
|||||||
url: "./pruefungsanmeldung.json.php",
|
url: "./pruefungsanmeldung.json.php",
|
||||||
type: "POST",
|
type: "POST",
|
||||||
data: {
|
data: {
|
||||||
method: "getPruefungenStudiengang",
|
method: "getPruefungenStudiensemester",
|
||||||
studiengang_kz: studiengang_kz,
|
|
||||||
studiensemester: studiensemester
|
studiensemester: studiensemester
|
||||||
},
|
},
|
||||||
error: loadError,
|
error: loadError,
|
||||||
@@ -1118,25 +1165,61 @@ function loadPruefungStudiengang(studiengang_kz, studiensemester)
|
|||||||
$("#pruefungenListe").empty();
|
$("#pruefungenListe").empty();
|
||||||
if(data.result.length > 0)
|
if(data.result.length > 0)
|
||||||
{
|
{
|
||||||
var liste = "";
|
$('#table4').show()
|
||||||
data.result.forEach(function(e){
|
let rows = '';
|
||||||
liste += "<ul><li>"+e.bezeichnung+"<ul>";
|
|
||||||
try
|
data.result.forEach(function(e)
|
||||||
{
|
{
|
||||||
e.pruefung[0].termine.forEach(function(d){
|
let termine = [];
|
||||||
liste += "<li> <a onclick='showAnmeldungen(\""+d.pruefungstermin_id+"\", \""+e.lehrveranstaltung_id+"\");'>"+convertDateTime(d.von)+" "+convertDateTime(d.von, "time")+" - "+convertDateTime(d.bis, "time")+"</a></li>";
|
if (e.pruefung) {
|
||||||
|
e.pruefung.forEach(p => {
|
||||||
|
if (p.termine) {
|
||||||
|
termine = termine.concat(p.termine);
|
||||||
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
catch(err)
|
|
||||||
|
if (termine.length === 0)
|
||||||
{
|
{
|
||||||
var errmsg = err.message;
|
rows += `
|
||||||
|
<tr>
|
||||||
|
<td></td>
|
||||||
|
<td>${e.bezeichnung}</td>
|
||||||
|
<td colspan="5">Keine Termine</td>
|
||||||
|
</tr>`;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
termine.forEach(function(d) {
|
||||||
|
let vonDate = convertDateTime(d.von);
|
||||||
|
let vonTime = convertDateTime(d.von, 'time');
|
||||||
|
let bisTime = convertDateTime(d.bis, 'time');
|
||||||
|
let onClick = `showAnmeldungen(${d.pruefungstermin_id}, ${e.lehrveranstaltung_id})`;
|
||||||
|
|
||||||
|
rows += `
|
||||||
|
<tr>
|
||||||
|
<td><input type="checkbox"
|
||||||
|
class="termin-checkbox"
|
||||||
|
data-termin-id="${d.pruefungstermin_id}"
|
||||||
|
data-lv-id="${e.lehrveranstaltung_id}"
|
||||||
|
data-datum="${vonDate}"
|
||||||
|
/></td>
|
||||||
|
<td>${e.studiengang}</td>
|
||||||
|
<td>${e.bezeichnung}</td>
|
||||||
|
<td>${vonDate}</td>
|
||||||
|
<td>${vonTime}</td>
|
||||||
|
<td>${bisTime}</td>
|
||||||
|
<td><a onclick="${onClick}"><?php echo $p->t('pruefung/pruefungsbewertungAnmeldungen'); ?></a></td>
|
||||||
|
</tr>`;
|
||||||
|
});
|
||||||
}
|
}
|
||||||
liste += "</ul></li></ul>";
|
|
||||||
});
|
});
|
||||||
$("#pruefungenListe").append(liste);
|
$("#pruefungenListe").html(rows);
|
||||||
|
setTablesorter('table4')
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
$('#table4').hide()
|
||||||
$("#pruefungenListe").html("<?php echo $p->t('pruefung/keinePruefungenVorhanden'); ?>");
|
$("#pruefungenListe").html("<?php echo $p->t('pruefung/keinePruefungenVorhanden'); ?>");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1148,6 +1231,42 @@ function loadPruefungStudiengang(studiengang_kz, studiensemester)
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function terminezusammenlegen(termine, lv_id)
|
||||||
|
{
|
||||||
|
if(termine.length <= 1)
|
||||||
|
return;
|
||||||
|
|
||||||
|
$.ajax({
|
||||||
|
dataType: 'json',
|
||||||
|
url: "./pruefungsanmeldung.json.php",
|
||||||
|
type: "POST",
|
||||||
|
data: {
|
||||||
|
method: "terminezusammenlegen",
|
||||||
|
'termine[]': termine,
|
||||||
|
lv_id: lv_id
|
||||||
|
},
|
||||||
|
error: loadError,
|
||||||
|
success: function(data){
|
||||||
|
if(data.error === 'false')
|
||||||
|
{
|
||||||
|
loadPruefungStudiengang()
|
||||||
|
$("#anmeldung_hinzufuegen").empty();
|
||||||
|
$("#lvdaten").empty();
|
||||||
|
$("#anmeldeDaten").empty();
|
||||||
|
$("#reihungSpeichernButton").empty();
|
||||||
|
$("#kommentar").empty();
|
||||||
|
$("#kommentarSpeichernButton").empty();
|
||||||
|
$("#raumLink").empty();
|
||||||
|
$("#listeDrucken").empty();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
messageBox("message", data.errormsg, "red", "highlight", 10000);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Zeigt das Formularfeld zur Eingabe eines Kommentars in der Anmeldungsverwaltung an.
|
* Zeigt das Formularfeld zur Eingabe eines Kommentars in der Anmeldungsverwaltung an.
|
||||||
* @param {String} vorname Vorname des Studenten
|
* @param {String} vorname Vorname des Studenten
|
||||||
@@ -1241,6 +1360,7 @@ function loadStudiensemester()
|
|||||||
data.result.forEach(function(d){
|
data.result.forEach(function(d){
|
||||||
selectData += "<option "+((d.studiensemester_kurzbz === data.aktSem) ? "selected" : "")+" value='"+d.studiensemester_kurzbz+"'>"+d.studiensemester_kurzbz+"</option>";
|
selectData += "<option "+((d.studiensemester_kurzbz === data.aktSem) ? "selected" : "")+" value='"+d.studiensemester_kurzbz+"'>"+d.studiensemester_kurzbz+"</option>";
|
||||||
});
|
});
|
||||||
|
|
||||||
$('#studiensemester').html(selectData);
|
$('#studiensemester').html(selectData);
|
||||||
loadPruefungsfenster();
|
loadPruefungsfenster();
|
||||||
loadLehrveranstaltungen();
|
loadLehrveranstaltungen();
|
||||||
@@ -1540,7 +1660,7 @@ function loadPruefungsDetails(prfId)
|
|||||||
if(data.result.length === 0)
|
if(data.result.length === 0)
|
||||||
{
|
{
|
||||||
messageBox("message", "<?php echo $p->t('pruefung/keinePruefungsfensterGespeichert'); ?>", "red", "highlight", 10000);
|
messageBox("message", "<?php echo $p->t('pruefung/keinePruefungsfensterGespeichert'); ?>", "red", "highlight", 10000);
|
||||||
$("#pruefungsfenster").html("<option value='null'></option>");
|
$("#pruefungsfenster").html("<option value='null'><?php echo $p->t('pruefung/keinePruefungsfensterGespeichert'); ?></option>");
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@@ -2188,10 +2308,28 @@ function changeStateOfRaumDropdown()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function changeStateOfRaumInputs()
|
||||||
|
{
|
||||||
|
if ($("#andererRaum").prop("checked") === true)
|
||||||
|
{
|
||||||
|
$("#raumInfos").hide();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
$("#raumInfos").show();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
function saveRaum(terminId, lehrveranstaltung_id)
|
function saveRaum(terminId, lehrveranstaltung_id)
|
||||||
{
|
{
|
||||||
var ort_kurzbz;
|
var ort_kurzbz;
|
||||||
if($("#raum input[type=checkbox]").prop("checked") === true)
|
let anderer_raum = '';
|
||||||
|
if ($("#andererRaum").prop("checked") === true && $('#andereRaumInput').val() !== '')
|
||||||
|
{
|
||||||
|
ort_kurzbz = "";
|
||||||
|
anderer_raum = $('#andereRaumInput').val();
|
||||||
|
}
|
||||||
|
else if($("#raum input[type=checkbox]").prop("checked") === true)
|
||||||
{
|
{
|
||||||
ort_kurzbz = "buero";
|
ort_kurzbz = "buero";
|
||||||
}
|
}
|
||||||
@@ -2206,7 +2344,8 @@ function saveRaum(terminId, lehrveranstaltung_id)
|
|||||||
data: {
|
data: {
|
||||||
method: "saveRaum",
|
method: "saveRaum",
|
||||||
ort_kurzbz: ort_kurzbz,
|
ort_kurzbz: ort_kurzbz,
|
||||||
terminId: terminId
|
terminId: terminId,
|
||||||
|
anderer_raum: anderer_raum
|
||||||
},
|
},
|
||||||
error: loadError
|
error: loadError
|
||||||
}).done(function(data){
|
}).done(function(data){
|
||||||
|
|||||||
@@ -106,9 +106,14 @@ switch($method)
|
|||||||
case 'getStudiengaenge':
|
case 'getStudiengaenge':
|
||||||
$data = getStudiengaenge();
|
$data = getStudiengaenge();
|
||||||
break;
|
break;
|
||||||
case 'getPruefungenStudiengang':
|
case 'getPruefungenStudiensemester':
|
||||||
$studiensemester = filter_input(INPUT_POST,"studiensemester");
|
$studiensemester = filter_input(INPUT_POST,"studiensemester");
|
||||||
$data = getPruefungenStudiengang($uid, $studiensemester);
|
$data = getPruefungenStudiengangBySemester($studiensemester);
|
||||||
|
break;
|
||||||
|
case 'terminezusammenlegen':
|
||||||
|
$termine = filter_input(INPUT_POST, 'termine', FILTER_DEFAULT, FILTER_REQUIRE_ARRAY);
|
||||||
|
$lv_id = filter_input(INPUT_POST, 'lv_id');
|
||||||
|
$data = terminezusammenlegen($termine, $lv_id);
|
||||||
break;
|
break;
|
||||||
case 'saveKommentar':
|
case 'saveKommentar':
|
||||||
$data = saveKommentar();
|
$data = saveKommentar();
|
||||||
@@ -120,7 +125,8 @@ switch($method)
|
|||||||
case 'saveRaum':
|
case 'saveRaum':
|
||||||
$terminId = $_REQUEST["terminId"];
|
$terminId = $_REQUEST["terminId"];
|
||||||
$ort_kurzbz = $_REQUEST["ort_kurzbz"];
|
$ort_kurzbz = $_REQUEST["ort_kurzbz"];
|
||||||
$data = saveRaum($terminId, $ort_kurzbz, $uid);
|
$anderer_raum = $_REQUEST["anderer_raum"];
|
||||||
|
$data = saveRaum($terminId, $ort_kurzbz, $uid, $anderer_raum);
|
||||||
break;
|
break;
|
||||||
case 'getLvKompatibel':
|
case 'getLvKompatibel':
|
||||||
$lvid = filter_input(INPUT_POST, "lehrveranstaltung_id");
|
$lvid = filter_input(INPUT_POST, "lehrveranstaltung_id");
|
||||||
@@ -397,6 +403,7 @@ function saveAnmeldung($aktStudiensemester = null, $uid = null)
|
|||||||
$lv_besucht = false;
|
$lv_besucht = false;
|
||||||
$studienverpflichtung_id = filter_input(INPUT_POST, "studienverpflichtung_id");
|
$studienverpflichtung_id = filter_input(INPUT_POST, "studienverpflichtung_id");
|
||||||
$studiengang_kz = filter_input(INPUT_POST, "studiengang_kz");
|
$studiengang_kz = filter_input(INPUT_POST, "studiengang_kz");
|
||||||
|
$ects = filter_input(INPUT_POST, "ects");
|
||||||
|
|
||||||
//Defaulteinstellung für Anzahlprüfungsversuche (wird durch Addon "ktu" überschrieben)
|
//Defaulteinstellung für Anzahlprüfungsversuche (wird durch Addon "ktu" überschrieben)
|
||||||
$maxAnzahlVersuche = 0;
|
$maxAnzahlVersuche = 0;
|
||||||
@@ -731,6 +738,10 @@ function saveAnmeldung($aktStudiensemester = null, $uid = null)
|
|||||||
else
|
else
|
||||||
$anmeldung->anrechnung_id = $anrechnung->anrechnung_id;
|
$anmeldung->anrechnung_id = $anrechnung->anrechnung_id;
|
||||||
|
|
||||||
|
if (defined('CIS_PRUEFUNGSANMELDUNG_ECTS_ANGABE') && (CIS_PRUEFUNGSANMELDUNG_ECTS_ANGABE === true))
|
||||||
|
{
|
||||||
|
$anmeldung->ects = $ects;
|
||||||
|
}
|
||||||
if($anmeldung->save(true))
|
if($anmeldung->save(true))
|
||||||
{
|
{
|
||||||
$pruefung = new pruefungCis($termin->pruefung_id);
|
$pruefung = new pruefungCis($termin->pruefung_id);
|
||||||
@@ -960,9 +971,13 @@ function alleBestaetigen($uid)
|
|||||||
global $p;
|
global $p;
|
||||||
$lehrveranstaltung_id = $_REQUEST["lehrveranstaltung_id"];
|
$lehrveranstaltung_id = $_REQUEST["lehrveranstaltung_id"];
|
||||||
$pruefungstermin_id = $_REQUEST["termin_id"];
|
$pruefungstermin_id = $_REQUEST["termin_id"];
|
||||||
|
$emails = $_REQUEST["emails"];
|
||||||
$pruefungstermin = new pruefungstermin($pruefungstermin_id);
|
$pruefungstermin = new pruefungstermin($pruefungstermin_id);
|
||||||
$pruefungsanmeldung = new pruefungsanmeldung();
|
$pruefungsanmeldung = new pruefungsanmeldung();
|
||||||
$pranmeldungen = $pruefungsanmeldung->getAnmeldungenByTermin($pruefungstermin_id, $lehrveranstaltung_id);
|
$pranmeldungen = $pruefungsanmeldung->getAnmeldungenByTermin($pruefungstermin_id, $lehrveranstaltung_id);
|
||||||
|
|
||||||
|
$mail_benutzer = [];
|
||||||
|
$mail_inhalt = [];
|
||||||
foreach($pranmeldungen as $a)
|
foreach($pranmeldungen as $a)
|
||||||
{
|
{
|
||||||
$anmeldung = new pruefungsanmeldung($a->pruefungsanmeldung_id);
|
$anmeldung = new pruefungsanmeldung($a->pruefungsanmeldung_id);
|
||||||
@@ -976,6 +991,13 @@ function alleBestaetigen($uid)
|
|||||||
$ma = new mitarbeiter($uid);
|
$ma = new mitarbeiter($uid);
|
||||||
$datum = new datum();
|
$datum = new datum();
|
||||||
$ort = new ort($termin->ort_kurzbz);
|
$ort = new ort($termin->ort_kurzbz);
|
||||||
|
|
||||||
|
$ortbezeichnung = $ort->bezeichnung;
|
||||||
|
if (is_null($termin->ort_kurzbz) && !is_null($termin->anderer_raum))
|
||||||
|
{
|
||||||
|
$ortbezeichnung = $termin->anderer_raum;
|
||||||
|
}
|
||||||
|
|
||||||
$pruefung = new pruefungCis($termin->pruefung_id);
|
$pruefung = new pruefungCis($termin->pruefung_id);
|
||||||
|
|
||||||
$to = $anm->uid."@".DOMAIN;
|
$to = $anm->uid."@".DOMAIN;
|
||||||
@@ -995,17 +1017,66 @@ function alleBestaetigen($uid)
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
$html .= $p->t('pruefung/emailBodyTermin')." ".$datum->formatDatum($termin->von, "d.m.Y")." ".$p->t('pruefung/emailBodyUm')." ".$datum->formatDatum($termin->von, "H:i")."<br>";
|
$html .= $p->t('pruefung/emailBodyTermin')." ".$datum->formatDatum($termin->von, "d.m.Y")." ".$p->t('pruefung/emailBodyUm')." ".$datum->formatDatum($termin->von, "H:i")."<br>";
|
||||||
$html .= $p->t('pruefung/anmeldungErfolgreich')." ".$ort->bezeichnung."<br>";
|
$html .= $p->t('pruefung/anmeldungErfolgreich')." ".$ortbezeichnung."<br>";
|
||||||
$html .= "<br>";
|
$html .= "<br>";
|
||||||
$html .= "<a href='".APP_ROOT."cis/private/lehre/pruefung/pruefungsanmeldung.php'>".$p->t('pruefung/emailBodyLinkZurAnmeldung')."</a><br>";
|
$html .= "<a href='".APP_ROOT."cis/private/lehre/pruefung/pruefungsanmeldung.php'>".$p->t('pruefung/emailBodyLinkZurAnmeldung')."</a><br>";
|
||||||
$html .= "<br>";
|
$html .= "<br>";
|
||||||
|
|
||||||
|
$mail_benutzer[] = [
|
||||||
|
'uid' => $anm->uid
|
||||||
|
];
|
||||||
|
|
||||||
|
if (empty($mail_inhalt))
|
||||||
|
{
|
||||||
|
$mail_inhalt = array(
|
||||||
|
'von' => $ma->vorname." ".$ma->nachname,
|
||||||
|
'lv' => $lv->bezeichnung,
|
||||||
|
'ort' => $ortbezeichnung,
|
||||||
|
'datum' => $datum->formatDatum($termin->von, "d.m.Y") . ' ' . $p->t('pruefung/emailBodyUm') . ' ' . (isset($von) ? $von : $datum->formatDatum($termin->von, "H:i")),
|
||||||
|
'dauer' => $pruefung->einzeln ? ($pruefung->pruefungsintervall . ' ' . $p->t('pruefung/emailBodyMinuten')): '');
|
||||||
|
}
|
||||||
|
|
||||||
$mail = new mail($to, $from, $subject,$p->t('pruefung/emailBodyBitteHtmlSicht'));
|
$mail = new mail($to, $from, $subject,$p->t('pruefung/emailBodyBitteHtmlSicht'));
|
||||||
$mail->setHTMLContent($html);
|
$mail->setHTMLContent($html);
|
||||||
$mail->send();
|
$mail->send();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!empty($emails) && !empty($mail_inhalt))
|
||||||
|
{
|
||||||
|
foreach ($emails as $email)
|
||||||
|
{
|
||||||
|
$from = "noreply@".DOMAIN;
|
||||||
|
$subject = $p->t('pruefung/emailSubjectAnmeldungBestaetigung');
|
||||||
|
$html = $p->t('pruefung/sammelemailBody',array($mail_inhalt['lv'], $mail_inhalt['datum'], $mail_inhalt['von']));
|
||||||
|
|
||||||
|
if ($mail_inhalt['ort'])
|
||||||
|
{
|
||||||
|
$html .= $p->t('pruefung/sammelemailBody2',array($mail_inhalt['ort']));
|
||||||
|
}
|
||||||
|
|
||||||
|
$html .= "<br /><table border='1'>
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th>UID</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>";
|
||||||
|
|
||||||
|
foreach($mail_benutzer as $benutzer)
|
||||||
|
{
|
||||||
|
$html .= "<tr>
|
||||||
|
<td>" . htmlspecialchars($benutzer['uid']) . "</td>
|
||||||
|
</tr>";
|
||||||
|
}
|
||||||
|
$html .= "</tbody></table><br />";
|
||||||
|
|
||||||
|
$mail = new mail($email, $from, $subject, $p->t('pruefung/emailBodyBitteHtmlSicht'));
|
||||||
|
$mail->setHTMLContent($html);
|
||||||
|
$mail->send();
|
||||||
|
}
|
||||||
|
}
|
||||||
$data['result']=true;
|
$data['result']=true;
|
||||||
$data['error']='false';
|
$data['error']='false';
|
||||||
$data['errormsg']='';
|
$data['errormsg']='';
|
||||||
@@ -1032,6 +1103,12 @@ function anmeldungBestaetigen($uid)
|
|||||||
$ort = new ort($termin->ort_kurzbz);
|
$ort = new ort($termin->ort_kurzbz);
|
||||||
$pruefung = new pruefungCis($termin->pruefung_id);
|
$pruefung = new pruefungCis($termin->pruefung_id);
|
||||||
|
|
||||||
|
$ortbezeichnung = $ort->bezeichnung;
|
||||||
|
if (is_null($termin->ort_kurzbz) && !is_null($termin->anderer_raum))
|
||||||
|
{
|
||||||
|
$ortbezeichnung = $termin->anderer_raum;
|
||||||
|
}
|
||||||
|
|
||||||
$to = $anmeldung->uid."@".DOMAIN;
|
$to = $anmeldung->uid."@".DOMAIN;
|
||||||
$from = "noreply@".DOMAIN;
|
$from = "noreply@".DOMAIN;
|
||||||
$subject = $p->t('pruefung/emailSubjectAnmeldungBestaetigung');
|
$subject = $p->t('pruefung/emailSubjectAnmeldungBestaetigung');
|
||||||
@@ -1049,7 +1126,7 @@ function anmeldungBestaetigen($uid)
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
$html .= $p->t('pruefung/emailBodyTermin')." ".$datum->formatDatum($termin->von, "d.m.Y")." ".$p->t('pruefung/emailBodyUm')." ".$datum->formatDatum($termin->von, "H:i")."<br>";
|
$html .= $p->t('pruefung/emailBodyTermin')." ".$datum->formatDatum($termin->von, "d.m.Y")." ".$p->t('pruefung/emailBodyUm')." ".$datum->formatDatum($termin->von, "H:i")."<br>";
|
||||||
$html .= $p->t('pruefung/anmeldungErfolgreich')." ".$ort->bezeichnung."<br>";
|
$html .= $p->t('pruefung/anmeldungErfolgreich')." ".$ortbezeichnung."<br>";
|
||||||
$html .= "<br>";
|
$html .= "<br>";
|
||||||
$html .= "<a href='".APP_ROOT."cis/private/lehre/pruefung/pruefungsanmeldung.php'>".$p->t('pruefung/emailBodyLinkZurAnmeldung')."</a><br>";
|
$html .= "<a href='".APP_ROOT."cis/private/lehre/pruefung/pruefungsanmeldung.php'>".$p->t('pruefung/emailBodyLinkZurAnmeldung')."</a><br>";
|
||||||
$html .= "<br>";
|
$html .= "<br>";
|
||||||
@@ -1166,6 +1243,258 @@ function getPruefungenStudiengang($uid, $aktStudiensemester)
|
|||||||
return $data;
|
return $data;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function getPruefungenStudiengangBySemester($aktStudiensemester)
|
||||||
|
{
|
||||||
|
$result = array();
|
||||||
|
$pruefungen = new pruefungCis();
|
||||||
|
$pruefungen->getPruefungByStudiensemester($aktStudiensemester);
|
||||||
|
|
||||||
|
if(!empty($pruefungen->lehrveranstaltungen))
|
||||||
|
{
|
||||||
|
$lehrveranstaltungen = [];
|
||||||
|
foreach ($pruefungen->lehrveranstaltungen as $prf)
|
||||||
|
{
|
||||||
|
$pruefung = new pruefungCis();
|
||||||
|
$pruefung->load($prf->pruefung_id);
|
||||||
|
|
||||||
|
if ($pruefung->storniert)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
$pruefung->getTermineByPruefung();
|
||||||
|
|
||||||
|
$lvid = $prf->lehrveranstaltung_id;
|
||||||
|
|
||||||
|
if (!isset($lehrveranstaltungen[$lvid]))
|
||||||
|
{
|
||||||
|
$lv = new stdClass();
|
||||||
|
$lehrveranstaltung = new lehrveranstaltung();
|
||||||
|
$lehrveranstaltung->load($lvid);
|
||||||
|
|
||||||
|
$studiengang = new studiengang();
|
||||||
|
$studiengang->load($lehrveranstaltung->studiengang_kz);
|
||||||
|
|
||||||
|
$lv->bezeichnung = $lehrveranstaltung->bezeichnung;
|
||||||
|
$lv->lehrveranstaltung_id = $lvid;
|
||||||
|
$lv->studiengang = $studiengang->kuerzel;
|
||||||
|
$lv->pruefung = [];
|
||||||
|
$lehrveranstaltungen[$lvid] = $lv;
|
||||||
|
}
|
||||||
|
|
||||||
|
$lehrveranstaltungen[$lvid]->pruefung[] = $pruefung;
|
||||||
|
}
|
||||||
|
$result = array_values($lehrveranstaltungen);
|
||||||
|
}
|
||||||
|
$data['result']=$result;
|
||||||
|
$data['error']='false';
|
||||||
|
$data['errormsg']='';
|
||||||
|
return $data;
|
||||||
|
}
|
||||||
|
|
||||||
|
function terminezusammenlegen($termine, $lv_id)
|
||||||
|
{
|
||||||
|
$result = array();
|
||||||
|
$alle_termine = array();
|
||||||
|
$error = false;
|
||||||
|
$terminkollision = defined('CIS_PRUEFUNGSANMELDUNG_ERLAUBE_TERMINKOLLISION') ? CIS_PRUEFUNGSANMELDUNG_ERLAUBE_TERMINKOLLISION : false;
|
||||||
|
foreach($termine as $termin)
|
||||||
|
{
|
||||||
|
$pruefungstermin = new pruefungstermin();
|
||||||
|
$pruefungstermin->load($termin);
|
||||||
|
$pruefung = new pruefungCis();
|
||||||
|
$pruefung->load($pruefungstermin->pruefung_id);
|
||||||
|
$pruefung->getLehrveranstaltungenByPruefung();
|
||||||
|
|
||||||
|
$lehrveranstaltungen = array_column($pruefung->lehrveranstaltungen, 'lehrveranstaltung_id');
|
||||||
|
if (!in_array($lv_id, $lehrveranstaltungen))
|
||||||
|
continue;
|
||||||
|
|
||||||
|
$pruefung->lehrveranstaltung_id = $lv_id;
|
||||||
|
$pruefung->termin = $pruefungstermin;
|
||||||
|
$alle_termine[] = $pruefung;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
if (count($alle_termine) >= 1)
|
||||||
|
{
|
||||||
|
usort($alle_termine, function($a, $b) {
|
||||||
|
return strcmp($a->termin->von, $b->termin->von);
|
||||||
|
});
|
||||||
|
|
||||||
|
$first_termin = $alle_termine[0];
|
||||||
|
|
||||||
|
$first_mitarbeiter = $first_termin->mitarbeiter_uid;
|
||||||
|
$first_date = date('Y-m-d', strtotime($first_termin->termin->von));
|
||||||
|
$first_studiensemester = $first_termin->studiensemester_kurzbz;
|
||||||
|
$first_sammelklausur = $first_termin->termin->sammelklausur;
|
||||||
|
$first_ort = $first_termin->termin->ort_kurzbz;
|
||||||
|
$first_raum = $first_termin->termin->anderer_raum;
|
||||||
|
$first_lv = $first_termin->lehrveranstaltung_id;
|
||||||
|
$first_titel = $first_termin->titel;
|
||||||
|
|
||||||
|
$max_von = strtotime($first_termin->termin->von);
|
||||||
|
$max_bis = strtotime($first_termin->termin->bis);
|
||||||
|
$teilnehmer_min = (int)$first_termin->termin->teilnehmer_min;
|
||||||
|
$teilnehmer_max = (int)$first_termin->termin->teilnehmer_max;
|
||||||
|
|
||||||
|
|
||||||
|
$prevEnd = $max_bis;
|
||||||
|
|
||||||
|
foreach ($alle_termine as $termin)
|
||||||
|
{
|
||||||
|
if (date('Y-m-d', strtotime($termin->termin->von)) !== $first_date)
|
||||||
|
{
|
||||||
|
$data['errormsg'] = 'Nicht der gleiche Tag!';
|
||||||
|
$error = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($termin->mitarbeiter_uid !== $first_mitarbeiter)
|
||||||
|
{
|
||||||
|
$data['errormsg'] = 'Unterschiedliche Lektoren!';
|
||||||
|
$error = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($termin->studiensemester_kurzbz !== $first_studiensemester)
|
||||||
|
{
|
||||||
|
$data['errormsg'] = 'Unterschiedliche Studiensemester!';
|
||||||
|
$error = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($termin->termin->sammelklausur !== $first_sammelklausur)
|
||||||
|
{
|
||||||
|
$data['errormsg'] = 'Sammelklausur unterschiedlich!';
|
||||||
|
$error = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!($termin->termin->ort_kurzbz === $first_ort || $first_termin->termin->anderer_raum == $first_raum))
|
||||||
|
{
|
||||||
|
$data['errormsg'] = 'Ort/Raum unterschiedlich!';
|
||||||
|
$error = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($termin->lehrveranstaltung_id !== $first_lv)
|
||||||
|
{
|
||||||
|
$data['errormsg'] = 'Lehrveranstaltungen unterscheiden sich!';
|
||||||
|
$error = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
$start = strtotime($termin->termin->von);
|
||||||
|
$max_von = min($max_von, $start);
|
||||||
|
$max_bis = max($max_bis, strtotime($termin->termin->bis));
|
||||||
|
$teilnehmer_min = min($teilnehmer_min, (int)$termin->termin->teilnehmer_min);
|
||||||
|
$teilnehmer_max = max($teilnehmer_max, (int)$termin->termin->teilnehmer_max);
|
||||||
|
|
||||||
|
if (($start - $prevEnd > 0) && $first_ort)
|
||||||
|
{
|
||||||
|
$stunde = new stunde();
|
||||||
|
|
||||||
|
$gapStartStr = date('Y-m-d H:i:s', $prevEnd);
|
||||||
|
$gapEndStr = date('Y-m-d H:i:s', $start);
|
||||||
|
|
||||||
|
$gapStartArr = explode(' ', $gapStartStr);
|
||||||
|
$gapEndArr = explode(' ', $gapEndStr);
|
||||||
|
|
||||||
|
$stunden = $stunde->getStunden($gapStartArr[1], $gapEndArr[1]);
|
||||||
|
|
||||||
|
$reservierung = new reservierung();
|
||||||
|
$reserviert = false;
|
||||||
|
|
||||||
|
$reservierungs_stunden = $reservierung->getReservierungen($first_ort, $gapStartArr[0]);
|
||||||
|
|
||||||
|
$need_stunden = array_diff($stunden, $reservierungs_stunden);
|
||||||
|
|
||||||
|
foreach ($need_stunden as $h)
|
||||||
|
{
|
||||||
|
if ($reservierung->isReserviert($first_ort, $gapStartArr[0], $h))
|
||||||
|
$reserviert = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!$terminkollision && $reserviert && !$first_sammelklausur)
|
||||||
|
{
|
||||||
|
$error = true;
|
||||||
|
$data['errormsg'] = 'Kann nicht zusammengelegt werden, da der Raum reserviert ist';
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
$reservierung->studiengang_kz = "0";
|
||||||
|
$reservierung->ort_kurzbz = $first_ort;
|
||||||
|
$reservierung->uid = $first_mitarbeiter;
|
||||||
|
$reservierung->datum = $gapStartArr[0];
|
||||||
|
$reservierung->titel = $first_titel;
|
||||||
|
if (strlen($first_titel) > 10)
|
||||||
|
{
|
||||||
|
$reservierung->titel = "Prüfung";
|
||||||
|
}
|
||||||
|
$reservierung->beschreibung = "Prüfung";
|
||||||
|
$reservierung->insertamum = date('Y-m-d G:i:s');
|
||||||
|
$reservierung->insertvon = get_uid();
|
||||||
|
$reservierungError = false;
|
||||||
|
|
||||||
|
foreach ($need_stunden as $h)
|
||||||
|
{
|
||||||
|
$reservierung->stunde = $h;
|
||||||
|
if (!$reservierungError)
|
||||||
|
{
|
||||||
|
if (!$reservierung->save(true))
|
||||||
|
{
|
||||||
|
$error = true;
|
||||||
|
$data['errormsg'] = $reservierung->errormsg;
|
||||||
|
$reservierungError = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
$prevEnd = strtotime($termin->termin->bis);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!$error)
|
||||||
|
{
|
||||||
|
$first_pruefungstermin = new pruefungstermin();
|
||||||
|
$first_pruefungstermin->load($first_termin->termin->pruefungstermin_id);
|
||||||
|
|
||||||
|
$first_pruefungstermin->von = date('Y-m-d H:i:s', $max_von);
|
||||||
|
$first_pruefungstermin->bis = date('Y-m-d H:i:s', $max_bis);
|
||||||
|
$first_pruefungstermin->teilnehmer_min = $teilnehmer_min;
|
||||||
|
$first_pruefungstermin->teilnehmer_max = $teilnehmer_max;
|
||||||
|
|
||||||
|
$first_pruefungstermin->save();
|
||||||
|
|
||||||
|
$alle_termine = array_slice($alle_termine, 1);
|
||||||
|
|
||||||
|
foreach ($alle_termine as $termin)
|
||||||
|
{
|
||||||
|
$anmeldung_termin = new pruefungsanmeldung();
|
||||||
|
$anmeldungen_termine = $anmeldung_termin->getAnmeldungenByTermin($termin->termin->pruefungstermin_id);
|
||||||
|
|
||||||
|
if (count($anmeldungen_termine) === 0)
|
||||||
|
{
|
||||||
|
$first_pruefungstermin->delete($termin->termin->pruefungstermin_id);
|
||||||
|
}
|
||||||
|
$i = 0;
|
||||||
|
$anmeldungen_termine_count = count($anmeldungen_termine);
|
||||||
|
foreach ($anmeldungen_termine as $anmeldungtermin)
|
||||||
|
{
|
||||||
|
$anmeldung = new pruefungsanmeldung();
|
||||||
|
$anmeldung->load($anmeldungtermin->pruefungsanmeldung_id);
|
||||||
|
$old_pruefuengstermin_id = $anmeldung->pruefungstermin_id;
|
||||||
|
$anmeldung->pruefungstermin_id = $first_termin->termin->pruefungstermin_id;
|
||||||
|
if ($anmeldung->save(false) && ($i === $anmeldungen_termine_count - 1))
|
||||||
|
{
|
||||||
|
$first_pruefungstermin->delete($old_pruefuengstermin_id);
|
||||||
|
}
|
||||||
|
$i ++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$data['result']= $result;
|
||||||
|
$data['error']= $error ? 'true' : 'false';
|
||||||
|
//$data['errormsg']='';
|
||||||
|
return $data;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
* @return typespeichert ein Kommentar zu einer Prüfungsanmeldung
|
* @return typespeichert ein Kommentar zu einer Prüfungsanmeldung
|
||||||
@@ -1246,7 +1575,7 @@ function compareRaeume($a, $b)
|
|||||||
return strcmp($a->ort_kurzbz, $b->ort_kurzbz);
|
return strcmp($a->ort_kurzbz, $b->ort_kurzbz);
|
||||||
}
|
}
|
||||||
|
|
||||||
function saveRaum($terminId, $ort_kurzbz, $uid)
|
function saveRaum($terminId, $ort_kurzbz, $uid, $anderer_raum = '')
|
||||||
{
|
{
|
||||||
$terminkollision = defined('CIS_PRUEFUNGSANMELDUNG_ERLAUBE_TERMINKOLLISION') ? CIS_PRUEFUNGSANMELDUNG_ERLAUBE_TERMINKOLLISION : false;
|
$terminkollision = defined('CIS_PRUEFUNGSANMELDUNG_ERLAUBE_TERMINKOLLISION') ? CIS_PRUEFUNGSANMELDUNG_ERLAUBE_TERMINKOLLISION : false;
|
||||||
$pruefungstermin = new pruefungstermin($terminId);
|
$pruefungstermin = new pruefungstermin($terminId);
|
||||||
@@ -1265,7 +1594,24 @@ function saveRaum($terminId, $ort_kurzbz, $uid)
|
|||||||
{
|
{
|
||||||
$pruefung = new pruefungCis($pruefungstermin->pruefung_id);
|
$pruefung = new pruefungCis($pruefungstermin->pruefung_id);
|
||||||
$mitarbeiter = new mitarbeiter($pruefung->mitarbeiter_uid);
|
$mitarbeiter = new mitarbeiter($pruefung->mitarbeiter_uid);
|
||||||
if($ort_kurzbz === "buero")
|
|
||||||
|
if ($ort_kurzbz === "" && $anderer_raum !== "")
|
||||||
|
{
|
||||||
|
$pruefungstermin->anderer_raum = $anderer_raum;
|
||||||
|
|
||||||
|
if($pruefungstermin->save(false))
|
||||||
|
{
|
||||||
|
$data['result']="reserviert";
|
||||||
|
$data['error']='false';
|
||||||
|
$data['errormsg']='';
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
$data['error']='true';
|
||||||
|
$data['errormsg']=$pruefungstermin->errormsg;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if($ort_kurzbz === "buero")
|
||||||
{
|
{
|
||||||
$pruefungstermin->ort_kurzbz = $mitarbeiter->ort_kurzbz;
|
$pruefungstermin->ort_kurzbz = $mitarbeiter->ort_kurzbz;
|
||||||
if($pruefungstermin->save(false))
|
if($pruefungstermin->save(false))
|
||||||
|
|||||||
@@ -321,6 +321,20 @@ $studiensemester->getAll();
|
|||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
<?php endif; ?>
|
<?php endif; ?>
|
||||||
|
|
||||||
|
<?php
|
||||||
|
if (defined('CIS_PRUEFUNGSANMELDUNG_ECTS_ANGABE')
|
||||||
|
&& CIS_PRUEFUNGSANMELDUNG_ECTS_ANGABE === true):
|
||||||
|
?>
|
||||||
|
<tr>
|
||||||
|
<td style="vertical-align: top; font-weight: bold;">
|
||||||
|
<?php echo $p->t('pruefung/ects'); ?>:
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<input type="number" size="3" id="ectsangabe" placeholder="<?php echo $p->t('pruefung/ects'); ?>"/>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<?php endif; ?>
|
||||||
<tr id="studiengang">
|
<tr id="studiengang">
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
|
|||||||
@@ -235,12 +235,18 @@ $rechte->getBerechtigungen($uid);
|
|||||||
<th><?php echo $p->t('global/datum'); ?></th>
|
<th><?php echo $p->t('global/datum'); ?></th>
|
||||||
<th><?php echo $p->t('benotungstool/note'); ?></th>
|
<th><?php echo $p->t('benotungstool/note'); ?></th>
|
||||||
<th><?php echo $p->t('global/anmerkung'); ?></th>
|
<th><?php echo $p->t('global/anmerkung'); ?></th>
|
||||||
|
|
||||||
|
<?php
|
||||||
|
if (defined('CIS_PRUEFUNGSANMELDUNG_ECTS_ANGABE') && (CIS_PRUEFUNGSANMELDUNG_ECTS_ANGABE === true)):
|
||||||
|
?>
|
||||||
|
<th><?php echo $p->t('pruefung/ects'); ?></th>
|
||||||
|
<?php endif; ?>
|
||||||
|
|
||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
<tbody>
|
<tbody>
|
||||||
<?php
|
<?php
|
||||||
$count = 0;
|
$count = 0;
|
||||||
/*@var $anmeldung pruefungsanmeldung */
|
|
||||||
foreach($anmeldungen as $anmeldung)
|
foreach($anmeldungen as $anmeldung)
|
||||||
{
|
{
|
||||||
$student = new student($anmeldung->uid);
|
$student = new student($anmeldung->uid);
|
||||||
@@ -269,6 +275,8 @@ $rechte->getBerechtigungen($uid);
|
|||||||
echo '<td>'.$date.'</td>';
|
echo '<td>'.$date.'</td>';
|
||||||
echo '<td></td>';
|
echo '<td></td>';
|
||||||
echo '<td></td>';
|
echo '<td></td>';
|
||||||
|
if (defined('CIS_PRUEFUNGSANMELDUNG_ECTS_ANGABE') && (CIS_PRUEFUNGSANMELDUNG_ECTS_ANGABE === true))
|
||||||
|
echo '<td>'. $anmeldung->ects .'</td>';
|
||||||
echo '</tr>';
|
echo '</tr>';
|
||||||
}
|
}
|
||||||
?>
|
?>
|
||||||
|
|||||||
@@ -233,6 +233,11 @@ $rechte->getBerechtigungen($uid);
|
|||||||
<th><?php echo $p->t('global/datum'); ?></th>
|
<th><?php echo $p->t('global/datum'); ?></th>
|
||||||
<th><?php echo $p->t('benotungstool/note'); ?></th>
|
<th><?php echo $p->t('benotungstool/note'); ?></th>
|
||||||
<th><?php echo $p->t('global/anmerkung'); ?></th>
|
<th><?php echo $p->t('global/anmerkung'); ?></th>
|
||||||
|
<?php
|
||||||
|
if (defined('CIS_PRUEFUNGSANMELDUNG_ECTS_ANGABE') && (CIS_PRUEFUNGSANMELDUNG_ECTS_ANGABE === true)):
|
||||||
|
?>
|
||||||
|
<th><?php echo $p->t('pruefung/ects'); ?></th>
|
||||||
|
<?php endif; ?>
|
||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
<tbody>
|
<tbody>
|
||||||
@@ -265,6 +270,8 @@ $rechte->getBerechtigungen($uid);
|
|||||||
echo '<td>'.$date.'</td>';
|
echo '<td>'.$date.'</td>';
|
||||||
echo '<td></td>';
|
echo '<td></td>';
|
||||||
echo '<td></td>';
|
echo '<td></td>';
|
||||||
|
if (defined('CIS_PRUEFUNGSANMELDUNG_ECTS_ANGABE') && (CIS_PRUEFUNGSANMELDUNG_ECTS_ANGABE === true))
|
||||||
|
echo '<td>'. $anmeldung->ects .'</td>';
|
||||||
echo '</tr>';
|
echo '</tr>';
|
||||||
}
|
}
|
||||||
?>
|
?>
|
||||||
|
|||||||
@@ -76,7 +76,7 @@ if (empty($pruefung->result) && !$rechte->isBerechtigt('lehre/pruefungsanmeldung
|
|||||||
width: 850px;
|
width: 850px;
|
||||||
padding: 1.8em 1.5em 1.8em 1em;
|
padding: 1.8em 1.5em 1.8em 1em;
|
||||||
/*border-radius: 25px;*/
|
/*border-radius: 25px;*/
|
||||||
border: 1px solid #dddddd;
|
/*border: 1px solid #dddddd;*/
|
||||||
/*box-shadow: 0em 0em 2em 0.5em #888888 inset;*/
|
/*box-shadow: 0em 0em 2em 0.5em #888888 inset;*/
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -95,7 +95,7 @@ if (empty($pruefung->result) && !$rechte->isBerechtigt('lehre/pruefungsanmeldung
|
|||||||
#prfWrapper {
|
#prfWrapper {
|
||||||
position: absolute;
|
position: absolute;
|
||||||
height: 70%;
|
height: 70%;
|
||||||
width: 300px;
|
width: 40%;
|
||||||
top: 180px;
|
top: 180px;
|
||||||
padding: 1.8em 1.5em 1.8em 1em;
|
padding: 1.8em 1.5em 1.8em 1em;
|
||||||
/*border-radius: 25px;*/
|
/*border-radius: 25px;*/
|
||||||
@@ -117,9 +117,9 @@ if (empty($pruefung->result) && !$rechte->isBerechtigt('lehre/pruefungsanmeldung
|
|||||||
#anmWrapper {
|
#anmWrapper {
|
||||||
position: absolute;
|
position: absolute;
|
||||||
/*top: 45px;*/
|
/*top: 45px;*/
|
||||||
left: 350px;
|
left: 45%;
|
||||||
top: 180px;
|
top: 180px;
|
||||||
width: 500px;
|
width: 40%;
|
||||||
height: 70%;
|
height: 70%;
|
||||||
padding: 1.8em 1.5em 1.8em 1em;
|
padding: 1.8em 1.5em 1.8em 1em;
|
||||||
/*border-radius: 25px;*/
|
/*border-radius: 25px;*/
|
||||||
@@ -228,7 +228,6 @@ if (empty($pruefung->result) && !$rechte->isBerechtigt('lehre/pruefungsanmeldung
|
|||||||
<script>
|
<script>
|
||||||
$(document).ready(function()
|
$(document).ready(function()
|
||||||
{
|
{
|
||||||
loadStudiengaenge();
|
|
||||||
$("#filter_studiensemester").css("visibility","visible");
|
$("#filter_studiensemester").css("visibility","visible");
|
||||||
|
|
||||||
$("#raumDialog").dialog({
|
$("#raumDialog").dialog({
|
||||||
@@ -236,17 +235,66 @@ if (empty($pruefung->result) && !$rechte->isBerechtigt('lehre/pruefungsanmeldung
|
|||||||
autoOpen: false,
|
autoOpen: false,
|
||||||
width: "400px"
|
width: "400px"
|
||||||
});
|
});
|
||||||
|
|
||||||
|
$("#kommentarDialog").dialog({
|
||||||
|
modal: true,
|
||||||
|
autoOpen: false,
|
||||||
|
width: "400px",
|
||||||
|
buttons: {
|
||||||
|
Ok: function() {
|
||||||
|
$(this).dialog('close');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
$("#table4").tablesorter({
|
||||||
|
widgets: ["zebra"],
|
||||||
|
headers: {
|
||||||
|
0: { sorter: false },
|
||||||
|
3: { sorter: 'shortDate',
|
||||||
|
dateFormat: 'ddmmyyyy' },
|
||||||
|
4: { sorter: 'time' },
|
||||||
|
5: { sorter: 'time' }
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
$('#zusammenlegen').on('click', function() {
|
||||||
|
let ausgewaehlte_termine = $('.termin-checkbox:checked');
|
||||||
|
|
||||||
|
if (ausgewaehlte_termine.length === 0)
|
||||||
|
return;
|
||||||
|
|
||||||
|
let erster_termin = ausgewaehlte_termine.first();
|
||||||
|
let erstes_datum = erster_termin.data('datum');
|
||||||
|
let erste_lvid = erster_termin.data('lv-id');
|
||||||
|
|
||||||
|
let termine = [];
|
||||||
|
ausgewaehlte_termine.each(function() {{
|
||||||
|
let termin = $(this);
|
||||||
|
let datum = termin.data('datum');
|
||||||
|
let lv_id = termin.data('lv-id');
|
||||||
|
|
||||||
|
if (erstes_datum !== datum)
|
||||||
|
return alert("Die ausgewählten Termine liegen nicht am selben Tag und können daher nicht zusammengelegt werden.")
|
||||||
|
if (erste_lvid !== lv_id)
|
||||||
|
return alert("Bei den ausgewählten Terminen handelt es sich um unterschiedliche Lehrveranstaltungen, die daher nicht zusammengelegt werden können.")
|
||||||
|
|
||||||
|
termine.push(termin.data('termin-id'));
|
||||||
|
}})
|
||||||
|
|
||||||
|
if (termine.length > 0)
|
||||||
|
{
|
||||||
|
terminezusammenlegen(termine, erste_lvid);
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
loadPruefungStudiengang();
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
<h1><?php echo $p->t('pruefung/anmeldungenVerwalten'); ?></h1>
|
<h1><?php echo $p->t('pruefung/anmeldungenVerwalten'); ?></h1>
|
||||||
<div id='stgWrapper'>
|
<div id='stgWrapper'>
|
||||||
<div id='studiengaenge'>
|
|
||||||
<div>
|
|
||||||
<h2><?php echo $p->t('global/studiengang'); ?></h2>
|
|
||||||
<div id='stgListe'>
|
|
||||||
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div>
|
<div>
|
||||||
<h2><?php echo $p->t('global/studiensemester'); ?></h2>
|
<h2><?php echo $p->t('global/studiensemester'); ?></h2>
|
||||||
<?php
|
<?php
|
||||||
@@ -255,7 +303,6 @@ if (empty($pruefung->result) && !$rechte->isBerechtigt('lehre/pruefungsanmeldung
|
|||||||
$studiensemester->getPlusMinus(null, 5);
|
$studiensemester->getPlusMinus(null, 5);
|
||||||
foreach($studiensemester->studiensemester as $sem)
|
foreach($studiensemester->studiensemester as $sem)
|
||||||
{
|
{
|
||||||
/*@var $sem studiensemester */
|
|
||||||
if ($aktuellesSemester == $sem->studiensemester_kurzbz)
|
if ($aktuellesSemester == $sem->studiensemester_kurzbz)
|
||||||
{
|
{
|
||||||
echo '<option selected value="'.$sem->studiensemester_kurzbz.'">'.$sem->bezeichnung.'</option>';
|
echo '<option selected value="'.$sem->studiensemester_kurzbz.'">'.$sem->bezeichnung.'</option>';
|
||||||
@@ -273,9 +320,21 @@ if (empty($pruefung->result) && !$rechte->isBerechtigt('lehre/pruefungsanmeldung
|
|||||||
<div id='prfWrapper'>
|
<div id='prfWrapper'>
|
||||||
<div id='pruefungen'>
|
<div id='pruefungen'>
|
||||||
<h2><?php echo $p->t('pruefung/pruefungPruefungenTitle'); ?></h2>
|
<h2><?php echo $p->t('pruefung/pruefungPruefungenTitle'); ?></h2>
|
||||||
<ul id="pruefungenListe">
|
<button id="zusammenlegen">Termine zusammenlegen</button>
|
||||||
|
<table id="table4" class="tablesorter" style="display:none">
|
||||||
</ul>
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th></th>
|
||||||
|
<th><?php echo $p->t('global/studiengang'); ?></th>
|
||||||
|
<th><?php echo $p->t('global/lehrveranstaltung'); ?></th>
|
||||||
|
<th><?php echo $p->t('global/datum'); ?></th>
|
||||||
|
<th><?php echo $p->t('global/von'); ?></th>
|
||||||
|
<th><?php echo $p->t('global/bis'); ?></th>
|
||||||
|
<th><?php echo $p->t('pruefung/pruefungsbewertungAnmeldungen'); ?></th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody id="pruefungenListe"></tbody>
|
||||||
|
</table>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div id='anmWrapper'>
|
<div id='anmWrapper'>
|
||||||
@@ -311,6 +370,9 @@ if (empty($pruefung->result) && !$rechte->isBerechtigt('lehre/pruefungsanmeldung
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
<div id="kommentarDialog" title="<?php echo $p->t('pruefung/anmerkungDesStudenten'); ?>" style="display:none;">
|
||||||
|
<div id="kommentarimDialog"></div>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div id="message"></div>
|
<div id="message"></div>
|
||||||
|
|||||||
@@ -69,6 +69,8 @@ if(isset($_GET['getAnmeldung']))
|
|||||||
|
|
||||||
$lehrveranstaltung_id=$_GET['lehrveranstaltung_id'];
|
$lehrveranstaltung_id=$_GET['lehrveranstaltung_id'];
|
||||||
$stsem = $_GET['stsem'];
|
$stsem = $_GET['stsem'];
|
||||||
|
$semester = $_GET['semester'];
|
||||||
|
$studienplan_id = $_GET['studienplan_id'];
|
||||||
|
|
||||||
echo $p->t('studienplan/LehrveranstalungWaehlen').'
|
echo $p->t('studienplan/LehrveranstalungWaehlen').'
|
||||||
<form action="'.$_SERVER['PHP_SELF'].'?uid='.$db->convert_html_chars($uid).'" method="POST">
|
<form action="'.$_SERVER['PHP_SELF'].'?uid='.$db->convert_html_chars($uid).'" method="POST">
|
||||||
@@ -83,6 +85,10 @@ if(isset($_GET['getAnmeldung']))
|
|||||||
$datum = new datum();
|
$datum = new datum();
|
||||||
$kompatibel[]=$lehrveranstaltung_id;
|
$kompatibel[]=$lehrveranstaltung_id;
|
||||||
$kompatibel = array_unique($kompatibel);
|
$kompatibel = array_unique($kompatibel);
|
||||||
|
$stsem_obj = new studiensemester();
|
||||||
|
$aktornext = $stsem_obj->getaktorNext();
|
||||||
|
|
||||||
|
$lvregel = new lvregel();
|
||||||
foreach($kompatibel as $lvid)
|
foreach($kompatibel as $lvid)
|
||||||
{
|
{
|
||||||
$lvangebot = new lvangebot();
|
$lvangebot = new lvangebot();
|
||||||
@@ -95,19 +101,50 @@ if(isset($_GET['getAnmeldung']))
|
|||||||
$angebot = $lvangebot->result[0];
|
$angebot = $lvangebot->result[0];
|
||||||
if($angebot->AnmeldungMoeglich())
|
if($angebot->AnmeldungMoeglich())
|
||||||
{
|
{
|
||||||
$anzahl++;
|
$kompatible_lv = $lehrveranstaltung->getStudienplanLehrveranstaltung($lvid, $studienplan_id);
|
||||||
// LV wird angeboten und Anmeldefenster ist offen
|
|
||||||
|
|
||||||
$bngruppe = new benutzergruppe();
|
$lvregelExists = false;
|
||||||
if(!$bngruppe->load($uid, $lvangebot->result[0]->gruppe_kurzbz, $stsem))
|
$abgeschlossen = false;
|
||||||
|
$semesterlock = false;
|
||||||
|
$regelerfuellt = true;
|
||||||
|
|
||||||
|
if ($kompatible_lv)
|
||||||
{
|
{
|
||||||
// User ist noch nicht angemeldet
|
$lvregelExists = $lvregel->exists($kompatible_lv);
|
||||||
echo '<br><input type="radio" value="'.$lvid.'" name="lv"/>'.$lv->bezeichnung.' (Anmeldung bis '.$datum->formatDatum($angebot->anmeldefenster_ende,"d.m.Y").')';
|
|
||||||
|
if(!$lvregel->checkSemester($kompatible_lv, $semester))
|
||||||
|
{
|
||||||
|
$semesterlock=true;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if($stsem === $aktornext)
|
||||||
|
{
|
||||||
|
$result = $lvregel->isZugangsberechtigt($uid, $kompatible_lv, $stsem);
|
||||||
|
if((is_array($result)) && ($result[0] !== true))
|
||||||
|
{
|
||||||
|
$regelerfuellt=false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else
|
|
||||||
|
if (!$semesterlock && $regelerfuellt)
|
||||||
{
|
{
|
||||||
// Bereits angemeldet
|
$anzahl++;
|
||||||
echo '<br><input type="radio" disabled="true" value="'.$lvid.'" name="lv" /><span class="ok">'.$lv->bezeichnung.'</span><img src="../../../skin/images/information.png" title="'.$p->t('studienplan/bereitsAngemeldet').'"/>';
|
// LV wird angeboten und Anmeldefenster ist offen
|
||||||
|
|
||||||
|
$bngruppe = new benutzergruppe();
|
||||||
|
if(!$bngruppe->load($uid, $lvangebot->result[0]->gruppe_kurzbz, $stsem))
|
||||||
|
{
|
||||||
|
// User ist noch nicht angemeldet
|
||||||
|
echo '<br><input type="radio" value="'.$lvid.'" name="lv"/>'.$lv->bezeichnung.' (Anmeldung bis '.$datum->formatDatum($angebot->anmeldefenster_ende,"d.m.Y").')';
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// Bereits angemeldet
|
||||||
|
echo '<br><input type="radio" disabled="true" value="'.$lvid.'" name="lv" /><span class="ok">'.$lv->bezeichnung.'</span><img src="../../../skin/images/information.png" title="'.$p->t('studienplan/bereitsAngemeldet').'"/>';
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
/* else
|
/* else
|
||||||
@@ -170,9 +207,9 @@ echo '
|
|||||||
$("#dialog").dialog({ autoOpen: false, width: "auto" });
|
$("#dialog").dialog({ autoOpen: false, width: "auto" });
|
||||||
});
|
});
|
||||||
|
|
||||||
function OpenAnmeldung(lehrveranstaltung_id, stsem)
|
function OpenAnmeldung(lehrveranstaltung_id, stsem, semester, studienplan_id)
|
||||||
{
|
{
|
||||||
$("#dialog").load("studienplan.php?getAnmeldung=true&lehrveranstaltung_id="+lehrveranstaltung_id+"&stsem="+stsem+"&uid='.$db->convert_html_chars($uid).'");
|
$("#dialog").load("studienplan.php?getAnmeldung=true&lehrveranstaltung_id="+lehrveranstaltung_id+"&stsem="+stsem+"&semester="+semester+"&studienplan_id="+studienplan_id+"&uid='.$db->convert_html_chars($uid).'");
|
||||||
$("#dialog").dialog("open");
|
$("#dialog").dialog("open");
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
@@ -359,7 +396,7 @@ drawTree($tree,0);
|
|||||||
|
|
||||||
function drawTree($tree, $depth)
|
function drawTree($tree, $depth)
|
||||||
{
|
{
|
||||||
global $uid, $stsem_arr, $noten_arr, $lvangebot_arr, $aktornext;
|
global $uid, $stsem_arr, $noten_arr, $lvangebot_arr, $aktornext, $studienplan_id;
|
||||||
global $datum_obj, $db, $lv_arr, $p, $note_pruef_arr, $student;
|
global $datum_obj, $db, $lv_arr, $p, $note_pruef_arr, $student;
|
||||||
global $anrechnung;
|
global $anrechnung;
|
||||||
|
|
||||||
@@ -639,12 +676,12 @@ function drawTree($tree, $depth)
|
|||||||
$tdclass[]='angebot';
|
$tdclass[]='angebot';
|
||||||
if($angemeldet)
|
if($angemeldet)
|
||||||
{
|
{
|
||||||
$tdinhalt.= '<a href="#" onclick="OpenAnmeldung(\''.$row_tree->lehrveranstaltung_id.'\',\''.$stsem.'\'); return false;"><img src="../../../skin/images/ja.png" title="'.$p->t('studienplan/legendeAngemeldet').'" /></a>';
|
$tdinhalt.= '<a href="#" onclick="OpenAnmeldung(\''.$row_tree->lehrveranstaltung_id.'\',\''.$stsem.'\',\''.$semester.'\',\''.$studienplan_id.'\'); return false;"><img src="../../../skin/images/ja.png" title="'.$p->t('studienplan/legendeAngemeldet').'" /></a>';
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if($anmeldungmoeglich)
|
if($anmeldungmoeglich)
|
||||||
$tdinhalt.= '<a href="#" onclick="OpenAnmeldung(\''.$row_tree->lehrveranstaltung_id.'\',\''.$stsem.'\'); return false;"><img src="../../../skin/images/anmelden.png" title="'.$p->t('studienplan/anmelden').'" height="15px" /></a>';
|
$tdinhalt.= '<a href="#" onclick="OpenAnmeldung(\''.$row_tree->lehrveranstaltung_id.'\',\''.$stsem.'\', \''.$semester.'\', \''.$studienplan_id.'\'); return false;"><img src="../../../skin/images/anmelden.png" title="'.$p->t('studienplan/anmelden').'" height="15px" /></a>';
|
||||||
else
|
else
|
||||||
$tdinhalt.= '<span title="'.$anmeldeinformation.'">-</a>';
|
$tdinhalt.= '<span title="'.$anmeldeinformation.'">-</a>';
|
||||||
|
|
||||||
|
|||||||
@@ -249,6 +249,9 @@ define('CIS_INFOSCREEN_NEWS_ANZEIGEN',false);
|
|||||||
//User, welcher für das Anlegen von Anrechnungen bei der Prüfungsanmeldung verwendet wird
|
//User, welcher für das Anlegen von Anrechnungen bei der Prüfungsanmeldung verwendet wird
|
||||||
define('CIS_PRUEFUNGSANMELDUNG_USER','p.pruefungsanmeldung');
|
define('CIS_PRUEFUNGSANMELDUNG_USER','p.pruefungsanmeldung');
|
||||||
|
|
||||||
|
//Gibt an, ob die Studierenden bei der Anmeldung zu einer Prüfung den Ausmas an ECTS angeben können
|
||||||
|
define('CIS_PRUEFUNGSANMELDUNG_ECTS_ANGABE', false);
|
||||||
|
|
||||||
// Anmeldefristen für Prüfungen in Tagen;
|
// Anmeldefristen für Prüfungen in Tagen;
|
||||||
// Wenn nicht definiert: 3
|
// Wenn nicht definiert: 3
|
||||||
//define('CIS_PRUEFUNGSANMELDUNG_FRIST',3);
|
//define('CIS_PRUEFUNGSANMELDUNG_FRIST',3);
|
||||||
|
|||||||
@@ -162,6 +162,12 @@ define('CIS_LV_LEKTORINNENZUTEILUNG_VERTRAGSPRUEFUNG_VON', '');
|
|||||||
// Legt fest, ob Vertragsdetails zum Projektauftrag im Reiter Projektarbeit angezeigt werden
|
// Legt fest, ob Vertragsdetails zum Projektauftrag im Reiter Projektarbeit angezeigt werden
|
||||||
define('FAS_STUDIERENDE_PROJEKTARBEIT_VERTRAGSDETAILS_ANZEIGEN', false);
|
define('FAS_STUDIERENDE_PROJEKTARBEIT_VERTRAGSDETAILS_ANZEIGEN', false);
|
||||||
|
|
||||||
|
// Legt default Stunden pro Projektarbeitsbetreuung für Bachelorarbeiten fest
|
||||||
|
define('FAS_STUDIERENDE_PROJEKTARBEIT_DEFAULT_BETREUER_STUNDEN_BACHELOR', '5.0');
|
||||||
|
|
||||||
|
// Legt default Stunden pro Projektarbeitsbetreuung für Masterarbeiten fest
|
||||||
|
define('FAS_STUDIERENDE_PROJEKTARBEIT_DEFAULT_BETREUER_STUNDEN_MASTER', '5.0');
|
||||||
|
|
||||||
// Anzeigeoptionen für LV-Plan Menü
|
// Anzeigeoptionen für LV-Plan Menü
|
||||||
define('CIS_LVPLAN_EXPORT_ANZEIGEN',true);
|
define('CIS_LVPLAN_EXPORT_ANZEIGEN',true);
|
||||||
define('CIS_LVPLAN_PERSONENAUSWAHL_ANZEIGEN',true);
|
define('CIS_LVPLAN_PERSONENAUSWAHL_ANZEIGEN',true);
|
||||||
|
|||||||
@@ -1165,12 +1165,14 @@ function StudentProjektbetreuerDetailReset()
|
|||||||
|
|
||||||
if(document.getElementById('student-projektarbeit-menulist-projekttyp').value=='Diplom')
|
if(document.getElementById('student-projektarbeit-menulist-projekttyp').value=='Diplom')
|
||||||
{
|
{
|
||||||
document.getElementById('student-projektbetreuer-textbox-stunden').value='5.0';
|
document.getElementById('student-projektbetreuer-textbox-stunden').value=
|
||||||
|
<?php if (defined('FAS_STUDIERENDE_PROJEKTARBEIT_DEFAULT_BETREUER_STUNDEN_MASTER') && FAS_STUDIERENDE_PROJEKTARBEIT_DEFAULT_BETREUER_STUNDEN_MASTER) echo FAS_STUDIERENDE_PROJEKTARBEIT_DEFAULT_BETREUER_STUNDEN_MASTER; else echo '5'; ?>;
|
||||||
document.getElementById('student-projektbetreuer-menulist-betreuerart').value='Erstbegutachter';
|
document.getElementById('student-projektbetreuer-menulist-betreuerart').value='Erstbegutachter';
|
||||||
}
|
}
|
||||||
else if(document.getElementById('student-projektarbeit-menulist-projekttyp').value=='Bachelor')
|
else if(document.getElementById('student-projektarbeit-menulist-projekttyp').value=='Bachelor')
|
||||||
{
|
{
|
||||||
document.getElementById('student-projektbetreuer-textbox-stunden').value='4.0';
|
document.getElementById('student-projektbetreuer-textbox-stunden').value=
|
||||||
|
<?php if (defined('FAS_STUDIERENDE_PROJEKTARBEIT_DEFAULT_BETREUER_STUNDEN_BACHELOR') && FAS_STUDIERENDE_PROJEKTARBEIT_DEFAULT_BETREUER_STUNDEN_BACHELOR) echo FAS_STUDIERENDE_PROJEKTARBEIT_DEFAULT_BETREUER_STUNDEN_BACHELOR; else echo '4'; ?>;
|
||||||
document.getElementById('student-projektbetreuer-menulist-betreuerart').value='Begutachter';
|
document.getElementById('student-projektbetreuer-menulist-betreuerart').value='Begutachter';
|
||||||
}
|
}
|
||||||
else if(document.getElementById('student-projektarbeit-menulist-projekttyp').value=='Praktikum')
|
else if(document.getElementById('student-projektarbeit-menulist-projekttyp').value=='Praktikum')
|
||||||
|
|||||||
@@ -888,9 +888,10 @@ class dokument extends basis_db
|
|||||||
* Akzeptiert ein bestimmtes Dokument
|
* Akzeptiert ein bestimmtes Dokument
|
||||||
* @param char $dokument_kurzbz Bezeichner Dokument.
|
* @param char $dokument_kurzbz Bezeichner Dokument.
|
||||||
* @param int $person_id Personenkennzeichen.
|
* @param int $person_id Personenkennzeichen.
|
||||||
|
* @param array $studiengang_typen einschränken nach Studiengang Typ.
|
||||||
* @return boolean true wenn akzeptiert bzw geprüft ohne Akzeptieren, false wenn Fehler
|
* @return boolean true wenn akzeptiert bzw geprüft ohne Akzeptieren, false wenn Fehler
|
||||||
*/
|
*/
|
||||||
public function akzeptiereDokument($dokument_kurzbz, $person_id)
|
public function akzeptiereDokument($dokument_kurzbz, $person_id, $studiengang_typen = null)
|
||||||
{
|
{
|
||||||
$db = new basis_db();
|
$db = new basis_db();
|
||||||
$arrayDoksZuAkzeptieren = array();
|
$arrayDoksZuAkzeptieren = array();
|
||||||
@@ -902,7 +903,6 @@ class dokument extends basis_db
|
|||||||
tbl_prestudent ps, tbl_studiengang sg
|
tbl_prestudent ps, tbl_studiengang sg
|
||||||
WHERE
|
WHERE
|
||||||
ps.studiengang_kz = sg.studiengang_kz
|
ps.studiengang_kz = sg.studiengang_kz
|
||||||
AND sg.typ = 'm'
|
|
||||||
AND person_id = ".$this->db_add_param($person_id)."
|
AND person_id = ".$this->db_add_param($person_id)."
|
||||||
AND not exists(
|
AND not exists(
|
||||||
SELECT *
|
SELECT *
|
||||||
@@ -910,6 +910,11 @@ class dokument extends basis_db
|
|||||||
where dok.prestudent_id = ps.prestudent_id
|
where dok.prestudent_id = ps.prestudent_id
|
||||||
and dokument_kurzbz = ".$this->db_add_param($dokument_kurzbz).")";
|
and dokument_kurzbz = ".$this->db_add_param($dokument_kurzbz).")";
|
||||||
|
|
||||||
|
if (isset($studiengang_typen) && is_array($studiengang_typen) && !empty($studiengang_typen))
|
||||||
|
{
|
||||||
|
$qry .= ' AND sg.typ IN ('. $db->db_implode4SQL($studiengang_typen).')';
|
||||||
|
}
|
||||||
|
|
||||||
//gibt ein Array von zu akzeptierenden Dokumenten zurück
|
//gibt ein Array von zu akzeptierenden Dokumenten zurück
|
||||||
if ($db->db_query($qry))
|
if ($db->db_query($qry))
|
||||||
{
|
{
|
||||||
@@ -923,11 +928,14 @@ class dokument extends basis_db
|
|||||||
}
|
}
|
||||||
|
|
||||||
//für alle prestudent_ids das Dokument akzeptieren
|
//für alle prestudent_ids das Dokument akzeptieren
|
||||||
$qry = "INSERT INTO public.tbl_dokumentprestudent(dokument_kurzbz, prestudent_id) VALUES";
|
$qry = "INSERT INTO public.tbl_dokumentprestudent(dokument_kurzbz, prestudent_id, datum, insertamum) VALUES";
|
||||||
|
|
||||||
foreach ($arrayDoksZuAkzeptieren as $prestudent_id)
|
foreach ($arrayDoksZuAkzeptieren as $prestudent_id)
|
||||||
{
|
{
|
||||||
$qry .= "(".$this->db_add_param($dokument_kurzbz). ",". $prestudent_id. ")";
|
$qry .= "(".$this->db_add_param($dokument_kurzbz).
|
||||||
|
",".$this->db_add_param($prestudent_id, FHC_INTEGER).
|
||||||
|
",".$this->db_add_param(date('Y-m-d')).
|
||||||
|
",".$this->db_add_param(strftime('%Y-%m-%d %H:%M')). ")";
|
||||||
|
|
||||||
if (next($arrayDoksZuAkzeptieren) == true)
|
if (next($arrayDoksZuAkzeptieren) == true)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -2861,5 +2861,33 @@ class lehrveranstaltung extends basis_db
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function getStudienplanLehrveranstaltung($lehrveranstaltung_id, $studienplan_id)
|
||||||
|
{
|
||||||
|
$qry = "SELECT studienplan_lehrveranstaltung_id
|
||||||
|
FROM lehre.tbl_lehrveranstaltung
|
||||||
|
JOIN lehre.tbl_studienplan_lehrveranstaltung USING(lehrveranstaltung_id)
|
||||||
|
WHERE lehrveranstaltung_id = ".$this->db_add_param($lehrveranstaltung_id)."
|
||||||
|
AND tbl_studienplan_lehrveranstaltung.studienplan_id = ".$this->db_add_param($studienplan_id);"";
|
||||||
|
|
||||||
|
if($result = $this->db_query($qry))
|
||||||
|
{
|
||||||
|
if($row = $this->db_fetch_object($result))
|
||||||
|
{
|
||||||
|
return $row->studienplan_lehrveranstaltung_id;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
$this->errormsg = 'Fehler beim Ermitteln der studienplan_lehrveranstaltung_id';
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
$this->errormsg='Fehler bei Datenbankabfrage ' .$this->db_last_error();
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
|
||||||
|
}
|
||||||
}
|
}
|
||||||
?>
|
?>
|
||||||
|
|||||||
@@ -464,6 +464,7 @@ class pruefungCis extends basis_db
|
|||||||
$obj->anmeldung_von= $row->anmeldung_von;
|
$obj->anmeldung_von= $row->anmeldung_von;
|
||||||
$obj->anmeldung_bis = $row->anmeldung_bis;
|
$obj->anmeldung_bis = $row->anmeldung_bis;
|
||||||
$obj->ort_kurzbz = $row->ort_kurzbz;
|
$obj->ort_kurzbz = $row->ort_kurzbz;
|
||||||
|
$obj->anderer_raum = $row->anderer_raum;
|
||||||
$obj->sammelklausur = $row->sammelklausur;
|
$obj->sammelklausur = $row->sammelklausur;
|
||||||
array_push($this->termine, $obj);
|
array_push($this->termine, $obj);
|
||||||
}
|
}
|
||||||
@@ -646,6 +647,37 @@ class pruefungCis extends basis_db
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function getPruefungByStudiensemester($studiensemester_kurzbz)
|
||||||
|
{
|
||||||
|
if(empty($studiensemester_kurzbz))
|
||||||
|
{
|
||||||
|
$this->errormsg = "Kein Studiensemester übergeben.</br>";
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
$qry = 'SELECT *
|
||||||
|
FROM campus.tbl_lehrveranstaltung_pruefung
|
||||||
|
JOIN lehre.tbl_lehrveranstaltung USING(lehrveranstaltung_id)
|
||||||
|
JOIN campus.tbl_pruefung USING (pruefung_id)
|
||||||
|
WHERE tbl_pruefung.studiensemester_kurzbz = ' . $this->db_add_param($studiensemester_kurzbz);
|
||||||
|
|
||||||
|
if($this->db_query($qry))
|
||||||
|
{
|
||||||
|
while($row = $this->db_fetch_object())
|
||||||
|
{
|
||||||
|
$obj = new stdClass();
|
||||||
|
$obj->lehrveranstaltung_pruefung_id = $row->lehrveranstaltung_pruefung_id;
|
||||||
|
$obj->lehrveranstaltung_id = $row->lehrveranstaltung_id;
|
||||||
|
$obj->pruefung_id = $row->pruefung_id;
|
||||||
|
$obj->storniert = $row->storniert;
|
||||||
|
$obj->bezeichnung = $row->bezeichnung;
|
||||||
|
array_push($this->lehrveranstaltungen, $obj);
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Lädt alle Prüfung-Lehrveranstaltung Kombinationen
|
* Lädt alle Prüfung-Lehrveranstaltung Kombinationen
|
||||||
* @return boolean true, wenn ok; false, im Fehlerfall
|
* @return boolean true, wenn ok; false, im Fehlerfall
|
||||||
|
|||||||
@@ -39,6 +39,7 @@ class pruefungsanmeldung extends basis_db {
|
|||||||
public $statusupdatevon; //varchar(32)
|
public $statusupdatevon; //varchar(32)
|
||||||
public $statusupdateamum; //timestamp
|
public $statusupdateamum; //timestamp
|
||||||
public $anrechnung_id; //integer
|
public $anrechnung_id; //integer
|
||||||
|
public $ects; //integer
|
||||||
public $pruefungstyp_kurzbz; //varchar(32)
|
public $pruefungstyp_kurzbz; //varchar(32)
|
||||||
public $insertamum; // timestamp
|
public $insertamum; // timestamp
|
||||||
|
|
||||||
@@ -94,7 +95,7 @@ class pruefungsanmeldung extends basis_db {
|
|||||||
|
|
||||||
if($new)
|
if($new)
|
||||||
{
|
{
|
||||||
$qry = 'INSERT INTO campus.tbl_pruefungsanmeldung (uid, pruefungstermin_id, lehrveranstaltung_id, status_kurzbz, wuensche, reihung, kommentar, anrechnung_id, pruefungstyp_kurzbz) VALUES ('
|
$qry = 'INSERT INTO campus.tbl_pruefungsanmeldung (uid, pruefungstermin_id, lehrveranstaltung_id, status_kurzbz, wuensche, reihung, kommentar, anrechnung_id, pruefungstyp_kurzbz, ects) VALUES ('
|
||||||
. $this->db_add_param($this->uid).', '
|
. $this->db_add_param($this->uid).', '
|
||||||
. $this->db_add_param($this->pruefungstermin_id).', '
|
. $this->db_add_param($this->pruefungstermin_id).', '
|
||||||
. $this->db_add_param($this->lehrveranstaltung_id).', '
|
. $this->db_add_param($this->lehrveranstaltung_id).', '
|
||||||
@@ -103,7 +104,8 @@ class pruefungsanmeldung extends basis_db {
|
|||||||
. $this->db_add_param($this->reihung).', '
|
. $this->db_add_param($this->reihung).', '
|
||||||
. $this->db_add_param($this->kommentar).', '
|
. $this->db_add_param($this->kommentar).', '
|
||||||
. $this->db_add_param($this->anrechnung_id).', '
|
. $this->db_add_param($this->anrechnung_id).', '
|
||||||
. $this->db_add_param($this->pruefungstyp_kurzbz).');';
|
. $this->db_add_param($this->pruefungstyp_kurzbz).', '
|
||||||
|
. $this->db_add_param($this->ects).');';
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@@ -116,7 +118,8 @@ class pruefungsanmeldung extends basis_db {
|
|||||||
. 'reihung='.$this->db_add_param($this->reihung).', '
|
. 'reihung='.$this->db_add_param($this->reihung).', '
|
||||||
. 'kommentar='.$this->db_add_param($this->kommentar).', '
|
. 'kommentar='.$this->db_add_param($this->kommentar).', '
|
||||||
. 'anrechnung_id='.$this->db_add_param($this->anrechnung_id).', '
|
. 'anrechnung_id='.$this->db_add_param($this->anrechnung_id).', '
|
||||||
. 'pruefungstyp_kurzbz='.$this->db_add_param($this->pruefungstyp_kurzbz)
|
. 'pruefungstyp_kurzbz='.$this->db_add_param($this->pruefungstyp_kurzbz).', '
|
||||||
|
. 'ects='.$this->db_add_param($this->ects)
|
||||||
. ' WHERE pruefungsanmeldung_id='.$this->db_add_param($this->pruefungsanmeldung_id).';';
|
. ' WHERE pruefungsanmeldung_id='.$this->db_add_param($this->pruefungsanmeldung_id).';';
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -167,6 +170,7 @@ class pruefungsanmeldung extends basis_db {
|
|||||||
$this->statusupdatevon = $row->statusupdatevon;
|
$this->statusupdatevon = $row->statusupdatevon;
|
||||||
$this->anrechnung_id = $row->anrechnung_id;
|
$this->anrechnung_id = $row->anrechnung_id;
|
||||||
$this->pruefungstyp_kurzbz = $row->pruefungstyp_kurzbz;
|
$this->pruefungstyp_kurzbz = $row->pruefungstyp_kurzbz;
|
||||||
|
$this->ects = $row->ects;
|
||||||
$this->insertamum = $row->insertamum;
|
$this->insertamum = $row->insertamum;
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
@@ -221,6 +225,7 @@ class pruefungsanmeldung extends basis_db {
|
|||||||
$anmeldung->statusupdatevon = $row->statusupdatevon;
|
$anmeldung->statusupdatevon = $row->statusupdatevon;
|
||||||
$anmeldung->anrechnung_id = $row->anrechnung_id;
|
$anmeldung->anrechnung_id = $row->anrechnung_id;
|
||||||
$anmeldung->pruefungstyp_kurzbz = $row->pruefungstyp_kurzbz;
|
$anmeldung->pruefungstyp_kurzbz = $row->pruefungstyp_kurzbz;
|
||||||
|
$anmeldung->ects = $row->ects;
|
||||||
array_push($anmeldungen, $anmeldung);
|
array_push($anmeldungen, $anmeldung);
|
||||||
}
|
}
|
||||||
return $anmeldungen;
|
return $anmeldungen;
|
||||||
@@ -280,6 +285,7 @@ class pruefungsanmeldung extends basis_db {
|
|||||||
$anmeldung->statusupdatevon = $row->statusupdatevon;
|
$anmeldung->statusupdatevon = $row->statusupdatevon;
|
||||||
$anmeldung->anrechnung_id = $row->anrechnung_id;
|
$anmeldung->anrechnung_id = $row->anrechnung_id;
|
||||||
$anmeldung->pruefungstyp_kurzbz = $row->pruefungstyp_kurzbz;
|
$anmeldung->pruefungstyp_kurzbz = $row->pruefungstyp_kurzbz;
|
||||||
|
$anmeldung->ects = $row->ects;
|
||||||
$anmeldung->datum_anmeldung = $row->datum_anmeldung;
|
$anmeldung->datum_anmeldung = $row->datum_anmeldung;
|
||||||
array_push($anmeldungen, $anmeldung);
|
array_push($anmeldungen, $anmeldung);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -37,6 +37,7 @@ class pruefungstermin extends basis_db{
|
|||||||
public $anmeldung_von; //date
|
public $anmeldung_von; //date
|
||||||
public $anmeldung_bis; //date
|
public $anmeldung_bis; //date
|
||||||
public $ort_kurzbz; //varchar(16)
|
public $ort_kurzbz; //varchar(16)
|
||||||
|
public $anderer_raum; //text
|
||||||
public $sammelklausur; //boolean
|
public $sammelklausur; //boolean
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -93,6 +94,7 @@ class pruefungstermin extends basis_db{
|
|||||||
$this->anmeldung_von= $row->anmeldung_von;
|
$this->anmeldung_von= $row->anmeldung_von;
|
||||||
$this->anmeldung_bis = $row->anmeldung_bis;
|
$this->anmeldung_bis = $row->anmeldung_bis;
|
||||||
$this->ort_kurzbz = $row->ort_kurzbz;
|
$this->ort_kurzbz = $row->ort_kurzbz;
|
||||||
|
$this->anderer_raum = $row->anderer_raum;
|
||||||
$this->sammelklausur = $row->sammelklausur;
|
$this->sammelklausur = $row->sammelklausur;
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
@@ -179,7 +181,8 @@ class pruefungstermin extends basis_db{
|
|||||||
. 'teilnehmer_min='.$this->db_add_param($this->teilnehmer_min).', '
|
. 'teilnehmer_min='.$this->db_add_param($this->teilnehmer_min).', '
|
||||||
. 'anmeldung_von='.$this->db_add_param($this->anmeldung_von).', '
|
. 'anmeldung_von='.$this->db_add_param($this->anmeldung_von).', '
|
||||||
. 'anmeldung_bis='.$this->db_add_param($this->anmeldung_bis).', '
|
. 'anmeldung_bis='.$this->db_add_param($this->anmeldung_bis).', '
|
||||||
. 'ort_kurzbz='.$this->db_add_param($this->ort_kurzbz).' '
|
. 'ort_kurzbz='.$this->db_add_param($this->ort_kurzbz).', '
|
||||||
|
. 'anderer_raum='.$this->db_add_param($this->anderer_raum).' '
|
||||||
. 'WHERE pruefungstermin_id='.$this->db_add_param($this->pruefungstermin_id).';';
|
. 'WHERE pruefungstermin_id='.$this->db_add_param($this->pruefungstermin_id).';';
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -228,6 +231,7 @@ class pruefungstermin extends basis_db{
|
|||||||
$obj->anmeldung_von= $row->anmeldung_von;
|
$obj->anmeldung_von= $row->anmeldung_von;
|
||||||
$obj->anmeldung_bis = $row->anmeldung_bis;
|
$obj->anmeldung_bis = $row->anmeldung_bis;
|
||||||
$obj->ort_kurzbz = $row->ort_kurzbz;
|
$obj->ort_kurzbz = $row->ort_kurzbz;
|
||||||
|
$obj->anderer_raum = $row->anderer_raum;
|
||||||
$obj->sammelklausur = $row->sammelklausur;
|
$obj->sammelklausur = $row->sammelklausur;
|
||||||
array_push($this->result, $obj);
|
array_push($this->result, $obj);
|
||||||
}
|
}
|
||||||
@@ -240,4 +244,20 @@ class pruefungstermin extends basis_db{
|
|||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function delete($pruefungstermin_id)
|
||||||
|
{
|
||||||
|
$qry = "DELETE FROM campus.tbl_pruefungstermin WHERE pruefungstermin_id=".$this->db_add_param($pruefungstermin_id).";";
|
||||||
|
|
||||||
|
if($this->db_query($qry))
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
$this->errormsg='Fehler beim Löschen des Eintrages';
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -322,5 +322,37 @@ class reservierung extends basis_db
|
|||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function getReservierungen($ort_kurzbz, $datum)
|
||||||
|
{
|
||||||
|
$datum_obj = new Datum();
|
||||||
|
if(!$datum_obj->checkDatum($datum))
|
||||||
|
{
|
||||||
|
$this->errormsg='Datum hat ein ungueltiges Format';
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
$qry = "SELECT stunde FROM campus.tbl_reservierung
|
||||||
|
WHERE
|
||||||
|
ort_kurzbz=".$this->db_add_param($ort_kurzbz)." AND
|
||||||
|
datum=".$this->db_add_param($datum);
|
||||||
|
|
||||||
|
|
||||||
|
if($this->db_query($qry))
|
||||||
|
{
|
||||||
|
$result = array();
|
||||||
|
while($row = $this->db_fetch_object())
|
||||||
|
{
|
||||||
|
$result[] = $row->stunde;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
$this->errormsg = "Prüfungstypen konnten nicht geladen werden.";
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return $result;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
?>
|
?>
|
||||||
|
|||||||
@@ -57,6 +57,7 @@ $this->phrasen['pruefung/listeOhneNamenDrucken'] = 'Liste ohne Namen drucken';
|
|||||||
$this->phrasen['pruefung/pruefungsraum'] = 'Prüfungsraum: ';
|
$this->phrasen['pruefung/pruefungsraum'] = 'Prüfungsraum: ';
|
||||||
$this->phrasen['pruefung/pruefungsort'] = 'Prüfungsort ';
|
$this->phrasen['pruefung/pruefungsort'] = 'Prüfungsort ';
|
||||||
$this->phrasen['pruefung/imBuero'] = ' im Büro';
|
$this->phrasen['pruefung/imBuero'] = ' im Büro';
|
||||||
|
$this->phrasen['pruefung/andererRaum'] = 'anderer Raum';
|
||||||
$this->phrasen['pruefung/raum'] = ' Raum';
|
$this->phrasen['pruefung/raum'] = ' Raum';
|
||||||
$this->phrasen['pruefung/raumSpeichern'] = ' Raum speichern';
|
$this->phrasen['pruefung/raumSpeichern'] = ' Raum speichern';
|
||||||
$this->phrasen['pruefung/reihunghErfolgreichGeaendert'] = 'Reihung erfolgreich geändert.';
|
$this->phrasen['pruefung/reihunghErfolgreichGeaendert'] = 'Reihung erfolgreich geändert.';
|
||||||
@@ -77,6 +78,7 @@ $this->phrasen['pruefung/unbegrenzt'] = 'unbegrenzt';
|
|||||||
$this->phrasen['pruefung/bewertungenZu'] = 'Bewertungen zu';
|
$this->phrasen['pruefung/bewertungenZu'] = 'Bewertungen zu';
|
||||||
$this->phrasen['pruefung/keineAuswahl'] = 'Keine Auswahl';
|
$this->phrasen['pruefung/keineAuswahl'] = 'Keine Auswahl';
|
||||||
$this->phrasen['pruefung/alleBestaetigen'] = 'Alle bestätigen';
|
$this->phrasen['pruefung/alleBestaetigen'] = 'Alle bestätigen';
|
||||||
|
$this->phrasen['pruefung/bitteEmailAngeben'] = 'Bitte geben Sie eine gültige E-Mail-Adresse ein.';
|
||||||
|
|
||||||
// pruefungsbewertung
|
// pruefungsbewertung
|
||||||
$this->phrasen['pruefung/pruefungsbewertungTitle'] = 'Prüfungsbewertung';
|
$this->phrasen['pruefung/pruefungsbewertungTitle'] = 'Prüfungsbewertung';
|
||||||
@@ -95,6 +97,7 @@ $this->phrasen['pruefung/lvVonStudiengang'] = 'Lehrveranstaltungen von Studienga
|
|||||||
$this->phrasen['pruefung/lvAlle'] = 'Alle Lehrveranstaltungen';
|
$this->phrasen['pruefung/lvAlle'] = 'Alle Lehrveranstaltungen';
|
||||||
$this->phrasen['pruefung/anmeldungSpeichern'] = 'Anmeldung speichern';
|
$this->phrasen['pruefung/anmeldungSpeichern'] = 'Anmeldung speichern';
|
||||||
$this->phrasen['pruefung/studienverpflichtung'] = 'Studienverpflichtung';
|
$this->phrasen['pruefung/studienverpflichtung'] = 'Studienverpflichtung';
|
||||||
|
$this->phrasen['pruefung/ects'] = 'ECTS';
|
||||||
|
|
||||||
// liste
|
// liste
|
||||||
$this->phrasen['pruefung/anmeldungsliste'] = 'Anmeldungsliste';
|
$this->phrasen['pruefung/anmeldungsliste'] = 'Anmeldungsliste';
|
||||||
@@ -139,6 +142,15 @@ $this->phrasen['pruefung/emailBodyOrt'] = 'Ort:';
|
|||||||
$this->phrasen['pruefung/emailBodyLinkZurAnmeldung'] = 'Link zur Anmeldung';
|
$this->phrasen['pruefung/emailBodyLinkZurAnmeldung'] = 'Link zur Anmeldung';
|
||||||
$this->phrasen['pruefung/emailBodyBitteHtmlSicht'] = 'Bitte sehen Sie sich die Nachricht in HTML Sicht an, um den Link vollständig darzustellen.';
|
$this->phrasen['pruefung/emailBodyBitteHtmlSicht'] = 'Bitte sehen Sie sich die Nachricht in HTML Sicht an, um den Link vollständig darzustellen.';
|
||||||
|
|
||||||
|
|
||||||
|
// Sammelmail
|
||||||
|
$this->phrasen['pruefung/sammelemailBody'] = 'Die Anmeldungen zur Prüfung %s am %s wurde von %s bestätigt. <br />';
|
||||||
|
$this->phrasen['pruefung/sammelemailBody2'] = 'Ort: %s<br />';
|
||||||
|
$this->phrasen['pruefung/sammelemailBodyBestaetigt'] = 'Bestätigt von';
|
||||||
|
$this->phrasen['pruefung/sammelemailBodyPruefung'] = 'Prüfung';
|
||||||
|
$this->phrasen['pruefung/sammelemailBodyTermin'] = 'Termin';
|
||||||
|
$this->phrasen['pruefung/sammelemailBodyDauer'] = 'Dauer';
|
||||||
|
|
||||||
$this->phrasen['pruefung/emailLektorSubjectAnmeldung'] = 'Anmeldung zur Prüfung';
|
$this->phrasen['pruefung/emailLektorSubjectAnmeldung'] = 'Anmeldung zur Prüfung';
|
||||||
$this->phrasen['pruefung/emailLektorStudentIn'] = 'StudentIn';
|
$this->phrasen['pruefung/emailLektorStudentIn'] = 'StudentIn';
|
||||||
$this->phrasen['pruefung/emailLektorHatSichZurPruefung'] = 'hat sich zur Prüfung';
|
$this->phrasen['pruefung/emailLektorHatSichZurPruefung'] = 'hat sich zur Prüfung';
|
||||||
|
|||||||
@@ -57,6 +57,7 @@ $this->phrasen['pruefung/listeOhneNamenDrucken'] = 'Liste ohne Namen drucken';
|
|||||||
$this->phrasen['pruefung/pruefungsraum'] = 'Prüfungsraum: ';
|
$this->phrasen['pruefung/pruefungsraum'] = 'Prüfungsraum: ';
|
||||||
$this->phrasen['pruefung/pruefungsort'] = 'Prüfungsort ';
|
$this->phrasen['pruefung/pruefungsort'] = 'Prüfungsort ';
|
||||||
$this->phrasen['pruefung/imBuero'] = ' im Büro';
|
$this->phrasen['pruefung/imBuero'] = ' im Büro';
|
||||||
|
$this->phrasen['pruefung/andererRaum'] = 'other Room';
|
||||||
$this->phrasen['pruefung/raum'] = ' Raum';
|
$this->phrasen['pruefung/raum'] = ' Raum';
|
||||||
$this->phrasen['pruefung/raumSpeichern'] = ' Raum speichern';
|
$this->phrasen['pruefung/raumSpeichern'] = ' Raum speichern';
|
||||||
$this->phrasen['pruefung/reihunghErfolgreichGeaendert'] = 'Reihung erfolgreich geändert.';
|
$this->phrasen['pruefung/reihunghErfolgreichGeaendert'] = 'Reihung erfolgreich geändert.';
|
||||||
@@ -77,6 +78,7 @@ $this->phrasen['pruefung/unbegrenzt'] = 'unlimited';
|
|||||||
$this->phrasen['pruefung/bewertungenZu'] = 'Bewertungen zu';
|
$this->phrasen['pruefung/bewertungenZu'] = 'Bewertungen zu';
|
||||||
$this->phrasen['pruefung/keineAuswahl'] = 'Keine Auswahl';
|
$this->phrasen['pruefung/keineAuswahl'] = 'Keine Auswahl';
|
||||||
$this->phrasen['pruefung/alleBestaetigen'] = 'Confirm all';
|
$this->phrasen['pruefung/alleBestaetigen'] = 'Confirm all';
|
||||||
|
$this->phrasen['pruefung/bitteEmailAngeben'] = 'Please enter a valid E-Mail Address.';
|
||||||
|
|
||||||
// pruefungsbewertung
|
// pruefungsbewertung
|
||||||
$this->phrasen['pruefung/pruefungsbewertungTitle'] = 'Prüfungsbewertung';
|
$this->phrasen['pruefung/pruefungsbewertungTitle'] = 'Prüfungsbewertung';
|
||||||
@@ -139,6 +141,14 @@ $this->phrasen['pruefung/emailBodyOrt'] = 'Ort:';
|
|||||||
$this->phrasen['pruefung/emailBodyLinkZurAnmeldung'] = 'Link zur Anmeldung';
|
$this->phrasen['pruefung/emailBodyLinkZurAnmeldung'] = 'Link zur Anmeldung';
|
||||||
$this->phrasen['pruefung/emailBodyBitteHtmlSicht'] = 'Bitte sehen Sie sich die Nachricht in HTML Sicht an, um den Link vollständig darzustellen.';
|
$this->phrasen['pruefung/emailBodyBitteHtmlSicht'] = 'Bitte sehen Sie sich die Nachricht in HTML Sicht an, um den Link vollständig darzustellen.';
|
||||||
|
|
||||||
|
// Sammelmail
|
||||||
|
$this->phrasen['pruefung/sammelemailBody'] = 'The exam registrations for %s on %s have been confirmed by %s. <br />';
|
||||||
|
$this->phrasen['pruefung/sammelemailBody2'] = 'Place: %s<br />';
|
||||||
|
$this->phrasen['pruefung/sammelemailBodyBestaetigt'] = 'Confirmed by';
|
||||||
|
$this->phrasen['pruefung/sammelemailBodyPruefung'] = 'Exam';
|
||||||
|
$this->phrasen['pruefung/sammelemailBodyTermin'] = 'Exam date';
|
||||||
|
$this->phrasen['pruefung/sammelemailBodyDauer'] = 'Duration';
|
||||||
|
|
||||||
$this->phrasen['pruefung/emailLektorSubjectAnmeldung'] = 'Anmeldung zur Prüfung';
|
$this->phrasen['pruefung/emailLektorSubjectAnmeldung'] = 'Anmeldung zur Prüfung';
|
||||||
$this->phrasen['pruefung/emailLektorStudentIn'] = 'StudentIn';
|
$this->phrasen['pruefung/emailLektorStudentIn'] = 'StudentIn';
|
||||||
$this->phrasen['pruefung/emailLektorHatSichZurPruefung'] = 'hat sich zur Prüfung';
|
$this->phrasen['pruefung/emailLektorHatSichZurPruefung'] = 'hat sich zur Prüfung';
|
||||||
|
|||||||
@@ -0,0 +1,40 @@
|
|||||||
|
textarea[name="anmerkung"] {
|
||||||
|
position: absolute;
|
||||||
|
max-height: 300px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.lv_table_icon::before
|
||||||
|
{
|
||||||
|
font-family: 'Font Awesome 6 Free';
|
||||||
|
font-weight: 900;
|
||||||
|
margin-left: 5px;
|
||||||
|
display: inline-block;
|
||||||
|
}
|
||||||
|
|
||||||
|
.lv_table_icon.icon-modul::before
|
||||||
|
{
|
||||||
|
content: '\f468';
|
||||||
|
color: #4e4ed2;
|
||||||
|
}
|
||||||
|
|
||||||
|
.lv_table_icon.icon-lv::before
|
||||||
|
{
|
||||||
|
content: '\f466';
|
||||||
|
color: black;
|
||||||
|
}
|
||||||
|
|
||||||
|
.lv_table_icon.icon-::before
|
||||||
|
{
|
||||||
|
content: '\f073';
|
||||||
|
color: #f3c541;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
.modal-dialog.modal-xxl {
|
||||||
|
max-width: 95% !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.tabulator-menu .tabulator-menu-item.tabulator-menu-item-submenu:after
|
||||||
|
{
|
||||||
|
border-color: black;
|
||||||
|
}
|
||||||
+153
-1
@@ -1 +1,153 @@
|
|||||||
@import '../../vendor/olifolkerd/tabulator6/dist/css/tabulator_simple.min.css';
|
@import '../../vendor/olifolkerd/tabulator6/dist/css/tabulator_simple.min.css';
|
||||||
|
.tabulator-row {
|
||||||
|
border-bottom: none;
|
||||||
|
}
|
||||||
|
.tabulator-row .tabulator-frozen,
|
||||||
|
.tabulator-row .tabulator-cell {
|
||||||
|
border-bottom: 1px solid #dee2e6;
|
||||||
|
}
|
||||||
|
.tabulator-row.tabulator-row-even {
|
||||||
|
background-color: transparent;
|
||||||
|
}
|
||||||
|
.tabulator-headers .tabulator-frozen,
|
||||||
|
.tabulator-row.tabulator-row-odd .tabulator-frozen,
|
||||||
|
.tabulator-row.tabulator-row-odd .tabulator-cell {
|
||||||
|
background-color: #fff;
|
||||||
|
}
|
||||||
|
.tabulator-row.tabulator-row-even .tabulator-frozen,
|
||||||
|
.tabulator-row.tabulator-row-even .tabulator-cell {
|
||||||
|
background-color: #f2f2f2;
|
||||||
|
}
|
||||||
|
.tabulator-row.tabulator-selectable:hover .tabulator-frozen,
|
||||||
|
.tabulator-row.tabulator-selectable:hover .tabulator-cell {
|
||||||
|
background-color: #ececec;
|
||||||
|
}
|
||||||
|
.tabulator-row.tabulator-selected .tabulator-frozen,
|
||||||
|
.tabulator-row.tabulator-selected .tabulator-cell {
|
||||||
|
background-color: #9abcea;
|
||||||
|
}
|
||||||
|
.tabulator-row.tabulator-selected:hover .tabulator-frozen,
|
||||||
|
.tabulator-row.tabulator-selected:hover .tabulator-cell {
|
||||||
|
background-color: #769bcc;
|
||||||
|
}
|
||||||
|
.tabulator .tabulator-col-resize-handle:last-of-type {
|
||||||
|
z-index: 999999;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* classes for rows that are not selectable in the tabulator, except for rows that are used for calculation */
|
||||||
|
.tabulator-row.tabulator-unselectable:not(.tabulator-calcs) {
|
||||||
|
color: #adb5bd !important;
|
||||||
|
pointer-events: none !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.tabulator-row.tabulator-unselectable a {
|
||||||
|
pointer-events: auto !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* using bootstrap background classes to style the background color of tabulator rows */
|
||||||
|
/* bg-warning */
|
||||||
|
/* odd-rows */
|
||||||
|
.tabulator-headers .tabulator-frozen.bg-warning,
|
||||||
|
.tabulator-row.tabulator-row-odd .tabulator-frozen.bg-warning,
|
||||||
|
.tabulator-row.tabulator-row-odd .tabulator-cell.bg-warning {
|
||||||
|
background-color: #fcf8e3;
|
||||||
|
|
||||||
|
}
|
||||||
|
/* even-rows */
|
||||||
|
.tabulator-headers .tabulator-frozen.bg-warning,
|
||||||
|
.tabulator-row.tabulator-row-even .tabulator-frozen.bg-warning,
|
||||||
|
.tabulator-row.tabulator-row-even .tabulator-cell.bg-warning {
|
||||||
|
background-color: #fcf8e3;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/* bg-success */
|
||||||
|
/* odd-rows */
|
||||||
|
.tabulator-headers .tabulator-frozen.bg-success,
|
||||||
|
.tabulator-row.tabulator-row-odd .tabulator-frozen.bg-success,
|
||||||
|
.tabulator-row.tabulator-row-odd .tabulator-cell.bg-success {
|
||||||
|
background-color: #dff0d8;
|
||||||
|
|
||||||
|
}
|
||||||
|
/* even-rows */
|
||||||
|
.tabulator-headers .tabulator-frozen.bg-success,
|
||||||
|
.tabulator-row.tabulator-row-even .tabulator-frozen.bg-success,
|
||||||
|
.tabulator-row.tabulator-row-even .tabulator-cell.bg-success {
|
||||||
|
background-color: #dff0d8;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/* bg-info */
|
||||||
|
/* odd-rows */
|
||||||
|
.tabulator-headers .tabulator-frozen.bg-info,
|
||||||
|
.tabulator-row.tabulator-row-odd .tabulator-frozen.bg-info,
|
||||||
|
.tabulator-row.tabulator-row-odd .tabulator-cell.bg-info {
|
||||||
|
background-color: #d9edf7;
|
||||||
|
|
||||||
|
}
|
||||||
|
/* even-rows */
|
||||||
|
.tabulator-headers .tabulator-frozen.bg-info,
|
||||||
|
.tabulator-row.tabulator-row-even .tabulator-frozen.bg-info,
|
||||||
|
.tabulator-row.tabulator-row-even .tabulator-cell.bg-info {
|
||||||
|
background-color: #d9edf7;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/* special bootstrap5 styling for tableWidget and their accordion-item ::after content */
|
||||||
|
.accordion-button::after{
|
||||||
|
content:none !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
.tabulator {
|
||||||
|
font-size: 1rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.tabulator-initialfontsize .tabulator {
|
||||||
|
font-size: 14px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.tabulator-row.tabulator-unselectable .tabulator-cell {
|
||||||
|
pointer-events: all;
|
||||||
|
}
|
||||||
|
|
||||||
|
.tabulator-tooltip {
|
||||||
|
color: #fff;
|
||||||
|
background-color: #000;
|
||||||
|
}
|
||||||
|
|
||||||
|
.tabulator-row.tabulator-unselectable:not(.tabulator-calcs) {
|
||||||
|
color: #777 !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.tabulator-cell .btn {
|
||||||
|
padding: 0 .375rem;
|
||||||
|
font-size: calc(1rem - 2px / 1.5); /* substract border (2 x 1px) modified by the line-height (1.5) */
|
||||||
|
border-radius: .2rem;
|
||||||
|
vertical-align: baseline;
|
||||||
|
}
|
||||||
|
|
||||||
|
.tabulator-row.tabulator-selectable:focus {
|
||||||
|
box-shadow: 0 0 0 .24rem rgba(13,110,253,.25);
|
||||||
|
z-index: 1;
|
||||||
|
outline: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.btn-select-col-selected
|
||||||
|
{
|
||||||
|
background-color: #e6e6e6;
|
||||||
|
}
|
||||||
|
|
||||||
|
.accordion-item-dark, .accordion-item-dark:focus{
|
||||||
|
background-color:#CED4DA !important;
|
||||||
|
border-color:#ADB5BD !important;
|
||||||
|
box-shadow: none !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Make keyboard-focused list items look like the mouse-hovered list items
|
||||||
|
*/
|
||||||
|
.tabulator-edit-list .tabulator-edit-list-item.focused {
|
||||||
|
color: #fff;
|
||||||
|
background: #1d68cd;
|
||||||
|
}
|
||||||
|
|||||||
@@ -16,7 +16,10 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
import person from "./notiz/person.js";
|
import person from "./notiz/person.js";
|
||||||
|
import lehreinheit from "./notiz/lehreinheit.js";
|
||||||
|
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
person
|
person,
|
||||||
|
lehreinheit
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -0,0 +1,29 @@
|
|||||||
|
/**
|
||||||
|
* 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/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
import Person from './person.js';
|
||||||
|
|
||||||
|
export default {
|
||||||
|
|
||||||
|
...Person,
|
||||||
|
getNotizen(id, type) {
|
||||||
|
return {
|
||||||
|
method: 'get',
|
||||||
|
url: 'api/frontend/v1/notiz/notizLehreinheit/getNotizen/' + encodeURIComponent(id) + '/' + encodeURIComponent(type)
|
||||||
|
};
|
||||||
|
},
|
||||||
|
};
|
||||||
@@ -0,0 +1,36 @@
|
|||||||
|
export default {
|
||||||
|
|
||||||
|
getByLV(lehrveranstaltung_id)
|
||||||
|
{
|
||||||
|
return {
|
||||||
|
method: 'get',
|
||||||
|
url: '/api/frontend/v1/Lehrveranstaltung/loadByLV/' + encodeURIComponent(lehrveranstaltung_id)
|
||||||
|
};
|
||||||
|
},
|
||||||
|
getByStg(studiensemester_kurzbz, studiengang_kz, semester = null)
|
||||||
|
{
|
||||||
|
let path = "/api/frontend/v1/Lehrveranstaltung/getByStg/" + encodeURIComponent(studiensemester_kurzbz) + "/" + encodeURIComponent(studiengang_kz);
|
||||||
|
|
||||||
|
if (semester)
|
||||||
|
path += "/" + encodeURIComponent(semester);
|
||||||
|
|
||||||
|
return path;
|
||||||
|
},
|
||||||
|
getByEmp(studiensemester_kurzbz, mitarbeiter_uid, stg = null)
|
||||||
|
{
|
||||||
|
let path = "/api/frontend/v1/Lehrveranstaltung/getByEmp/" + encodeURIComponent(studiensemester_kurzbz) + "/" + encodeURIComponent(mitarbeiter_uid);
|
||||||
|
|
||||||
|
if (stg)
|
||||||
|
path += "/" + encodeURIComponent(stg);
|
||||||
|
|
||||||
|
return path;
|
||||||
|
},
|
||||||
|
getTable(url)
|
||||||
|
{
|
||||||
|
return {
|
||||||
|
method: 'get',
|
||||||
|
url: url
|
||||||
|
};
|
||||||
|
},
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,30 @@
|
|||||||
|
export default {
|
||||||
|
getStudiensemester()
|
||||||
|
{
|
||||||
|
return {
|
||||||
|
method: 'get',
|
||||||
|
url: '/api/frontend/v1/lv/setup/getStudiensemester/'
|
||||||
|
};
|
||||||
|
},
|
||||||
|
getSprache()
|
||||||
|
{
|
||||||
|
return {
|
||||||
|
method: 'get',
|
||||||
|
url: '/api/frontend/v1/lv/setup/getSprache/'
|
||||||
|
};
|
||||||
|
},
|
||||||
|
getLehrform()
|
||||||
|
{
|
||||||
|
return {
|
||||||
|
method: 'get',
|
||||||
|
url: '/api/frontend/v1/lv/setup/getLehrform/'
|
||||||
|
};
|
||||||
|
},
|
||||||
|
getRaumtyp()
|
||||||
|
{
|
||||||
|
return {
|
||||||
|
method: 'get',
|
||||||
|
url: '/api/frontend/v1/lv/setup/getRaumtyp/'
|
||||||
|
};
|
||||||
|
},
|
||||||
|
}
|
||||||
@@ -0,0 +1,26 @@
|
|||||||
|
export default {
|
||||||
|
add(newData)
|
||||||
|
{
|
||||||
|
return {
|
||||||
|
method: 'post',
|
||||||
|
url: '/api/frontend/v1/lv/DirektGruppe/add/',
|
||||||
|
params: newData
|
||||||
|
};
|
||||||
|
},
|
||||||
|
delete(deleteData)
|
||||||
|
{
|
||||||
|
|
||||||
|
return {
|
||||||
|
method: 'post',
|
||||||
|
url: '/api/frontend/v1/lv/DirektGruppe/delete/',
|
||||||
|
params: deleteData
|
||||||
|
};
|
||||||
|
},
|
||||||
|
getByLehreinheit(lehreinheit_id)
|
||||||
|
{
|
||||||
|
return {
|
||||||
|
method: 'get',
|
||||||
|
url: '/api/frontend/v1/lv/DirektGruppe/getByLehreinheit/' + encodeURIComponent(lehreinheit_id)
|
||||||
|
};
|
||||||
|
},
|
||||||
|
}
|
||||||
@@ -0,0 +1,56 @@
|
|||||||
|
export default {
|
||||||
|
|
||||||
|
delete(deleteData)
|
||||||
|
{
|
||||||
|
|
||||||
|
return {
|
||||||
|
method: 'post',
|
||||||
|
url: '/api/frontend/v1/lv/gruppe/delete/',
|
||||||
|
params: deleteData
|
||||||
|
};
|
||||||
|
},
|
||||||
|
|
||||||
|
add(newData)
|
||||||
|
{
|
||||||
|
return {
|
||||||
|
method: 'post',
|
||||||
|
url: '/api/frontend/v1/lv/gruppe/add/',
|
||||||
|
params: newData
|
||||||
|
};
|
||||||
|
},
|
||||||
|
getByLehreinheit(lehreinheit_id)
|
||||||
|
{
|
||||||
|
return {
|
||||||
|
method: 'get',
|
||||||
|
url: '/api/frontend/v1/lv/gruppe/getByLehreinheit/' + encodeURIComponent(lehreinheit_id)
|
||||||
|
};
|
||||||
|
},
|
||||||
|
|
||||||
|
deleteFromLVPlan(deleteData)
|
||||||
|
{
|
||||||
|
return {
|
||||||
|
method: 'post',
|
||||||
|
url: '/api/frontend/v1/lv/gruppe/deleteFromLVPlan/',
|
||||||
|
params: deleteData
|
||||||
|
};
|
||||||
|
},
|
||||||
|
|
||||||
|
|
||||||
|
/*------------- details -------- */
|
||||||
|
getAll()
|
||||||
|
{
|
||||||
|
return {
|
||||||
|
method: 'get',
|
||||||
|
url: '/api/frontend/v1/lv/gruppe/getAll/'
|
||||||
|
};
|
||||||
|
},
|
||||||
|
|
||||||
|
getBenutzer()
|
||||||
|
{
|
||||||
|
return {
|
||||||
|
method: 'get',
|
||||||
|
url: '/api/frontend/v1/lv/gruppe/getBenutzer/'
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,41 @@
|
|||||||
|
export default {
|
||||||
|
copy(data)
|
||||||
|
{
|
||||||
|
return {
|
||||||
|
method: 'post',
|
||||||
|
url: '/api/frontend/v1/lv/lehreinheit/copy/',
|
||||||
|
params: data
|
||||||
|
};
|
||||||
|
},
|
||||||
|
delete(data)
|
||||||
|
{
|
||||||
|
return {
|
||||||
|
method: 'post',
|
||||||
|
url: '/api/frontend/v1/lv/lehreinheit/delete/',
|
||||||
|
params: data
|
||||||
|
};
|
||||||
|
},
|
||||||
|
add(newData)
|
||||||
|
{
|
||||||
|
return {
|
||||||
|
method: 'post',
|
||||||
|
url: '/api/frontend/v1/lv/lehreinheit/add/',
|
||||||
|
params: newData
|
||||||
|
};
|
||||||
|
},
|
||||||
|
get(lehreinheit)
|
||||||
|
{
|
||||||
|
return {
|
||||||
|
method: 'get',
|
||||||
|
url: '/api/frontend/v1/lv/lehreinheit/get/' + encodeURIComponent(lehreinheit)
|
||||||
|
};
|
||||||
|
},
|
||||||
|
update(updatedData)
|
||||||
|
{
|
||||||
|
return {
|
||||||
|
method: 'post',
|
||||||
|
url: '/api/frontend/v1/lv/lehreinheit/update/',
|
||||||
|
params: updatedData
|
||||||
|
};
|
||||||
|
},
|
||||||
|
}
|
||||||
@@ -0,0 +1,78 @@
|
|||||||
|
export default {
|
||||||
|
|
||||||
|
getLehrfunktionen()
|
||||||
|
{
|
||||||
|
return {
|
||||||
|
method: 'get',
|
||||||
|
url: '/api/frontend/v1/lv/lektor/getLehrfunktionen/'
|
||||||
|
};
|
||||||
|
},
|
||||||
|
|
||||||
|
|
||||||
|
getLektoren()
|
||||||
|
{
|
||||||
|
return {
|
||||||
|
method: 'get',
|
||||||
|
url: '/api/frontend/v1/lv/lektor/getLektoren/'
|
||||||
|
};
|
||||||
|
},
|
||||||
|
|
||||||
|
|
||||||
|
getByLehreinheit(lehreinheit_id)
|
||||||
|
{
|
||||||
|
return {
|
||||||
|
method: 'get',
|
||||||
|
url: '/api/frontend/v1/lv/lektor/getLektorenByLE/' + encodeURIComponent(lehreinheit_id)
|
||||||
|
};
|
||||||
|
},
|
||||||
|
|
||||||
|
|
||||||
|
add(newData)
|
||||||
|
{
|
||||||
|
return {
|
||||||
|
method: 'post',
|
||||||
|
url: '/api/frontend/v1/lv/lektor/add/',
|
||||||
|
params: newData
|
||||||
|
};
|
||||||
|
},
|
||||||
|
|
||||||
|
update(updatedData)
|
||||||
|
{
|
||||||
|
return {
|
||||||
|
method: 'post',
|
||||||
|
url: '/api/frontend/v1/lv/lektor/update/',
|
||||||
|
params: updatedData
|
||||||
|
};
|
||||||
|
},
|
||||||
|
|
||||||
|
|
||||||
|
deletePerson(deleteData)
|
||||||
|
{
|
||||||
|
return {
|
||||||
|
method: 'post',
|
||||||
|
url: '/api/frontend/v1/lv/lektor/deletePerson/',
|
||||||
|
params: deleteData
|
||||||
|
};
|
||||||
|
},
|
||||||
|
deleteFromLVPlan(deleteData)
|
||||||
|
{
|
||||||
|
return {
|
||||||
|
method: 'post',
|
||||||
|
url: '/api/frontend/v1/lv/lektor/deleteLVPlan/',
|
||||||
|
params: deleteData
|
||||||
|
};
|
||||||
|
},
|
||||||
|
getLektorDaten(lehreinheit_id, mitarbeiter_uid)
|
||||||
|
{
|
||||||
|
return {
|
||||||
|
method: 'get',
|
||||||
|
url: '/api/frontend/v1/lv/lektor/getLektorDaten/' + encodeURIComponent(lehreinheit_id) + '/' + encodeURIComponent(mitarbeiter_uid)
|
||||||
|
};
|
||||||
|
},
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,9 @@
|
|||||||
|
export default {
|
||||||
|
getTabs()
|
||||||
|
{
|
||||||
|
return {
|
||||||
|
method: 'get',
|
||||||
|
url: '/api/frontend/v1/lv/setup/getTabs/'
|
||||||
|
};
|
||||||
|
},
|
||||||
|
}
|
||||||
@@ -0,0 +1,43 @@
|
|||||||
|
/**
|
||||||
|
* 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 {
|
||||||
|
get(path) {
|
||||||
|
let url = 'api/frontend/v1/lv/StgTree';
|
||||||
|
if (path)
|
||||||
|
url += '/' + path;
|
||||||
|
return {
|
||||||
|
method: 'get',
|
||||||
|
url
|
||||||
|
};
|
||||||
|
},
|
||||||
|
favorites: {
|
||||||
|
get() {
|
||||||
|
return {
|
||||||
|
method: 'get',
|
||||||
|
url: 'api/frontend/v1/lv/favorites'
|
||||||
|
};
|
||||||
|
},
|
||||||
|
set(favorites) {
|
||||||
|
return {
|
||||||
|
method: 'post',
|
||||||
|
url: 'api/frontend/v1/lv/favorites/set',
|
||||||
|
params: { favorites }
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
@@ -0,0 +1,54 @@
|
|||||||
|
export default {
|
||||||
|
|
||||||
|
getTag(data)
|
||||||
|
{
|
||||||
|
return {
|
||||||
|
method: 'get',
|
||||||
|
url: 'api/frontend/v1/lv/Tags/getTag',
|
||||||
|
params: data
|
||||||
|
};
|
||||||
|
},
|
||||||
|
|
||||||
|
getTags(data)
|
||||||
|
{
|
||||||
|
return {
|
||||||
|
method: 'get',
|
||||||
|
url: 'api/frontend/v1/lv/Tags/getTags'
|
||||||
|
};
|
||||||
|
},
|
||||||
|
|
||||||
|
addTag(data)
|
||||||
|
{
|
||||||
|
return {
|
||||||
|
method: 'post',
|
||||||
|
url: 'api/frontend/v1/lv/Tags/addTag',
|
||||||
|
params: data
|
||||||
|
};
|
||||||
|
},
|
||||||
|
|
||||||
|
updateTag(data)
|
||||||
|
{
|
||||||
|
return {
|
||||||
|
method: 'post',
|
||||||
|
url: 'api/frontend/v1/lv/Tags/updateTag',
|
||||||
|
params: data
|
||||||
|
};
|
||||||
|
},
|
||||||
|
doneTag(data)
|
||||||
|
{
|
||||||
|
return {
|
||||||
|
method: 'post',
|
||||||
|
url: 'api/frontend/v1/lv/Tags/doneTag',
|
||||||
|
params: data
|
||||||
|
};
|
||||||
|
},
|
||||||
|
|
||||||
|
deleteTag(data)
|
||||||
|
{
|
||||||
|
return {
|
||||||
|
method: 'post',
|
||||||
|
url: 'api/frontend/v1/lv/Tags/deleteTag',
|
||||||
|
params: data
|
||||||
|
};
|
||||||
|
},
|
||||||
|
};
|
||||||
@@ -0,0 +1,22 @@
|
|||||||
|
export default {
|
||||||
|
|
||||||
|
getByLeEmp(lehreinheit_id, mitarbeiter_uid)
|
||||||
|
{
|
||||||
|
return {
|
||||||
|
method: 'get',
|
||||||
|
url: '/api/frontend/v1/lv/lektor/getLektorDaten/' + encodeURIComponent(lehreinheit_id) + '/' + encodeURIComponent(mitarbeiter_uid),
|
||||||
|
};
|
||||||
|
},
|
||||||
|
|
||||||
|
cancelByLeEmp(needUpdate)
|
||||||
|
{
|
||||||
|
return {
|
||||||
|
method: 'post',
|
||||||
|
url: '/api/frontend/v1/lv/lektor/cancelVertrag/',
|
||||||
|
params: needUpdate
|
||||||
|
};
|
||||||
|
},
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
@@ -50,7 +50,7 @@ const app = Vue.createApp({
|
|||||||
defaultaction: {
|
defaultaction: {
|
||||||
type: "link",
|
type: "link",
|
||||||
renderif: function(data) {
|
renderif: function(data) {
|
||||||
if(data.content_id === "N/A"){
|
if(data.content_id === null){
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
@@ -79,7 +79,7 @@ const app = Vue.createApp({
|
|||||||
icon: "fas fa-info-circle",
|
icon: "fas fa-info-circle",
|
||||||
type: "link",
|
type: "link",
|
||||||
renderif: function(data) {
|
renderif: function(data) {
|
||||||
if(data.content_id === "N/A"){
|
if(data.content_id === null){
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
|
|||||||
@@ -0,0 +1,102 @@
|
|||||||
|
import LVVerwaltung from "../components/LVVerwaltung/LVVerwaltung.js";
|
||||||
|
import Phrasen from "../plugins/Phrasen.js";
|
||||||
|
|
||||||
|
const ciPath = FHC_JS_DATA_STORAGE_OBJECT.app_root.replace(/(https:|)(^|\/\/)(.*?\/)/g, '') + FHC_JS_DATA_STORAGE_OBJECT.ci_router;
|
||||||
|
|
||||||
|
const router = VueRouter.createRouter({
|
||||||
|
history: VueRouter.createWebHistory(`/${ciPath}/LVVerwaltung`),
|
||||||
|
routes: [
|
||||||
|
{
|
||||||
|
name: 'index',
|
||||||
|
path: `/`,
|
||||||
|
component: LVVerwaltung
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: `byEmp`,
|
||||||
|
path: `/emp/:studiensemester_kurzbz/:emp/:stg?/:semester?`,
|
||||||
|
component: LVVerwaltung,
|
||||||
|
props: route => {
|
||||||
|
let {emp, stg, semester, studiensemester_kurzbz} = route.params;
|
||||||
|
|
||||||
|
if (emp === '')
|
||||||
|
emp = undefined;
|
||||||
|
|
||||||
|
if (stg === '')
|
||||||
|
stg = undefined;
|
||||||
|
|
||||||
|
if (studiensemester_kurzbz === '')
|
||||||
|
studiensemester_kurzbz = undefined;
|
||||||
|
|
||||||
|
return {
|
||||||
|
studiensemester_kurzbz: studiensemester_kurzbz,
|
||||||
|
emp: emp,
|
||||||
|
stg: stg,
|
||||||
|
semester: semester
|
||||||
|
};
|
||||||
|
},
|
||||||
|
beforeEnter: (to, from, next) => {
|
||||||
|
const { studiensemester_kurzbz } = to.params;
|
||||||
|
const isSemester = /^(SS|WS)\d{4}$/.test(studiensemester_kurzbz);
|
||||||
|
|
||||||
|
if (!isSemester)
|
||||||
|
return next({ path: '/' });
|
||||||
|
else
|
||||||
|
next();
|
||||||
|
}
|
||||||
|
},
|
||||||
|
/*{
|
||||||
|
name: `byFachbereich`,
|
||||||
|
path: `/fachbereich/:fachbereich/:emp?`,
|
||||||
|
component: LVVerwaltung
|
||||||
|
},*/
|
||||||
|
{
|
||||||
|
name: `byStg`,
|
||||||
|
path: '/stg/:studiensemester_kurzbz/:stg?/:semester?/',
|
||||||
|
component: LVVerwaltung,
|
||||||
|
props: route => {
|
||||||
|
let { studiensemester_kurzbz, stg, semester } = route.params;
|
||||||
|
|
||||||
|
if (semester === '')
|
||||||
|
semester = undefined;
|
||||||
|
|
||||||
|
if (studiensemester_kurzbz === '')
|
||||||
|
studiensemester_kurzbz = undefined;
|
||||||
|
|
||||||
|
if (stg === '')
|
||||||
|
stg = undefined;
|
||||||
|
|
||||||
|
return {
|
||||||
|
studiensemester_kurzbz: studiensemester_kurzbz,
|
||||||
|
stg: stg,
|
||||||
|
semester: semester,
|
||||||
|
};
|
||||||
|
},
|
||||||
|
beforeEnter: (to, from, next) => {
|
||||||
|
const studiensemester_kurzbz = to.params?.studiensemester_kurzbz
|
||||||
|
const isSemester = /^(SS|WS)\d{4}$/.test(studiensemester_kurzbz);
|
||||||
|
|
||||||
|
if (!isSemester)
|
||||||
|
return next({ path: '/' });
|
||||||
|
else
|
||||||
|
next();
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
path: '/:pathMatch(.*)*',
|
||||||
|
redirect: '/'
|
||||||
|
},
|
||||||
|
|
||||||
|
]
|
||||||
|
});
|
||||||
|
|
||||||
|
const app = Vue.createApp();
|
||||||
|
|
||||||
|
app
|
||||||
|
.use(router)
|
||||||
|
.use(primevue.config.default, {
|
||||||
|
zIndex: {
|
||||||
|
overlay: 1100
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.use(Phrasen)
|
||||||
|
.mount('#main');
|
||||||
@@ -2,6 +2,8 @@ import raum_contentmittitel from './Content_types/Raum_contentmittitel.js'
|
|||||||
import general from './Content_types/General.js'
|
import general from './Content_types/General.js'
|
||||||
import BsConfirm from "../../Bootstrap/Confirm.js";
|
import BsConfirm from "../../Bootstrap/Confirm.js";
|
||||||
import news_content from './Content_types/News_content.js';
|
import news_content from './Content_types/News_content.js';
|
||||||
|
import iframe_content from './Content_types/Iframe_content.js';
|
||||||
|
|
||||||
import ApiCms from '../../../api/factory/cms.js';
|
import ApiCms from '../../../api/factory/cms.js';
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
@@ -24,42 +26,23 @@ export default {
|
|||||||
raum_contentmittitel,
|
raum_contentmittitel,
|
||||||
news_content,
|
news_content,
|
||||||
general,
|
general,
|
||||||
|
iframe_content
|
||||||
},
|
},
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
|
content_type: null,
|
||||||
content: null,
|
content: null,
|
||||||
content_id_internal: this.content_id
|
content_id_internal: this.content_id
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
fetchContent(){
|
fetchContent(){
|
||||||
return this.$api
|
this.$api
|
||||||
.call(ApiCms.content(this.content_id_internal, this.version, this.sprache, this.sichtbar))
|
.call(ApiCms.content(this.content_id_internal, this.version, this.sprache, this.sichtbar))
|
||||||
.then(res => {
|
.then(res => {
|
||||||
this.content = res.data.content;
|
this.$nextTick(function() {
|
||||||
this.content_type = res.data.type;
|
this.content = res.data.content;
|
||||||
|
this.content_type = res.data.type;
|
||||||
document.querySelectorAll("#cms [data-confirm]").forEach((el) => {
|
|
||||||
el.addEventListener("click", (evt) => {
|
|
||||||
evt.preventDefault();
|
|
||||||
BsConfirm.popup(el.dataset.confirm)
|
|
||||||
.then(() => {
|
|
||||||
Axios.get(el.href)
|
|
||||||
.then((res) => {
|
|
||||||
// TODO(chris): check for success then show message and/or reload
|
|
||||||
location = location;
|
|
||||||
})
|
|
||||||
.catch((err) => console.error("ERROR:", err));
|
|
||||||
})
|
|
||||||
.catch(() => {
|
|
||||||
});
|
|
||||||
});
|
|
||||||
});
|
|
||||||
document.querySelectorAll("#cms [data-href]").forEach((el) => {
|
|
||||||
el.href = el.dataset.href.replace(
|
|
||||||
/^ROOT\//,
|
|
||||||
FHC_JS_DATA_STORAGE_OBJECT.app_root
|
|
||||||
);
|
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@@ -83,6 +66,8 @@ export default {
|
|||||||
return "raum_contentmittitel";
|
return "raum_contentmittitel";
|
||||||
case "news":
|
case "news":
|
||||||
return "news_content";
|
return "news_content";
|
||||||
|
case "iframe":
|
||||||
|
return "iframe_content";
|
||||||
default:
|
default:
|
||||||
return "general";
|
return "general";
|
||||||
};
|
};
|
||||||
@@ -91,8 +76,6 @@ export default {
|
|||||||
created() {
|
created() {
|
||||||
this.fetchContent();
|
this.fetchContent();
|
||||||
},
|
},
|
||||||
mounted() {
|
|
||||||
},
|
|
||||||
template: /*html*/ `
|
template: /*html*/ `
|
||||||
<!-- div that contains the content -->
|
<!-- div that contains the content -->
|
||||||
<div id="fhc-cms-content" v-if="content">
|
<div id="fhc-cms-content" v-if="content">
|
||||||
|
|||||||
@@ -0,0 +1,31 @@
|
|||||||
|
import { replaceRelativeLegacyLink } from "../../../../helpers/LegacyLinkReplaceHelper.js";
|
||||||
|
|
||||||
|
export default {
|
||||||
|
name: "iframe_content",
|
||||||
|
props: {
|
||||||
|
content: { type: String, required: true }
|
||||||
|
},
|
||||||
|
computed: {
|
||||||
|
srcUrl() {
|
||||||
|
const parser = new DOMParser()
|
||||||
|
const doc = parser.parseFromString(`<div>${this.content}</div>`, "text/html");
|
||||||
|
const iframe = doc.querySelector("iframe[src]");
|
||||||
|
|
||||||
|
if (!iframe)
|
||||||
|
return "";
|
||||||
|
|
||||||
|
let url = iframe.getAttribute("src") || "";
|
||||||
|
return replaceRelativeLegacyLink(url);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
template: `
|
||||||
|
<div class="w-100">
|
||||||
|
<iframe
|
||||||
|
v-if="srcUrl"
|
||||||
|
:src="srcUrl"
|
||||||
|
style="width:100%; height:90vh; border:0; display:block;"
|
||||||
|
></iframe>
|
||||||
|
<div v-else class="alert alert-warning">Keine URL gefunden.</div>
|
||||||
|
</div>
|
||||||
|
`
|
||||||
|
};
|
||||||
@@ -11,6 +11,7 @@ import RoleInformation from "./ProfilComponents/RoleInformation.js";
|
|||||||
import ProfilInformation from "./ProfilComponents/ProfilInformation.js";
|
import ProfilInformation from "./ProfilComponents/ProfilInformation.js";
|
||||||
|
|
||||||
import ApiProfilUpdate from '../../../api/factory/profilUpdate.js';
|
import ApiProfilUpdate from '../../../api/factory/profilUpdate.js';
|
||||||
|
import { dateFilter } from '../../../tabulator/filters/Dates.js';
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
components: {
|
components: {
|
||||||
@@ -40,7 +41,7 @@ export default {
|
|||||||
persistence: {
|
persistence: {
|
||||||
columns: false
|
columns: false
|
||||||
},
|
},
|
||||||
height: 300,
|
minHeight: 300,
|
||||||
layout: "fitColumns",
|
layout: "fitColumns",
|
||||||
responsiveLayout: "collapse",
|
responsiveLayout: "collapse",
|
||||||
responsiveLayoutCollapseUseFormatters: false,
|
responsiveLayoutCollapseUseFormatters: false,
|
||||||
@@ -74,18 +75,24 @@ export default {
|
|||||||
{
|
{
|
||||||
title: Vue.computed(() => this.preloadedPhrasen.gueltigVonPhrase),
|
title: Vue.computed(() => this.preloadedPhrasen.gueltigVonPhrase),
|
||||||
field: "Gültig_von",
|
field: "Gültig_von",
|
||||||
headerFilter: true,
|
headerFilterFunc: 'dates',
|
||||||
|
headerFilter: dateFilter,
|
||||||
resizable: true,
|
resizable: true,
|
||||||
minWidth: 200,
|
minWidth: 200,
|
||||||
visible: true
|
visible: true,
|
||||||
|
formatter:"datetime",
|
||||||
|
formatterParams: this.datetimeFormatterParams()
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
title: Vue.computed(() => this.preloadedPhrasen.gueltigBisPhrase),
|
title: Vue.computed(() => this.preloadedPhrasen.gueltigBisPhrase),
|
||||||
field: "Gültig_bis",
|
field: "Gültig_bis",
|
||||||
headerFilter: true,
|
headerFilterFunc: 'dates',
|
||||||
|
headerFilter: dateFilter,
|
||||||
resizable: true,
|
resizable: true,
|
||||||
minWidth: 200,
|
minWidth: 200,
|
||||||
visible: true
|
visible: true,
|
||||||
|
formatter:"datetime",
|
||||||
|
formatterParams: this.datetimeFormatterParams()
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
title: Vue.computed(() => this.preloadedPhrasen.wochenstundenPhrase),
|
title: Vue.computed(() => this.preloadedPhrasen.wochenstundenPhrase),
|
||||||
@@ -102,7 +109,7 @@ export default {
|
|||||||
persistence: {
|
persistence: {
|
||||||
columns: false
|
columns: false
|
||||||
},
|
},
|
||||||
height: 300,
|
minHeight: 300,
|
||||||
layout: "fitColumns",
|
layout: "fitColumns",
|
||||||
responsiveLayout: "collapse",
|
responsiveLayout: "collapse",
|
||||||
responsiveLayoutCollapseUseFormatters: false,
|
responsiveLayoutCollapseUseFormatters: false,
|
||||||
@@ -138,9 +145,12 @@ export default {
|
|||||||
{
|
{
|
||||||
title: Vue.computed(() => this.preloadedPhrasen.ausgabedatumPhrase),
|
title: Vue.computed(() => this.preloadedPhrasen.ausgabedatumPhrase),
|
||||||
field: "Ausgegeben_am",
|
field: "Ausgegeben_am",
|
||||||
headerFilter: true,
|
headerFilterFunc: 'dates',
|
||||||
|
headerFilter: dateFilter,
|
||||||
minWidth: 200,
|
minWidth: 200,
|
||||||
visible: true
|
visible: true,
|
||||||
|
formatter:"datetime",
|
||||||
|
formatterParams: this.datetimeFormatterParams()
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
}
|
}
|
||||||
@@ -211,6 +221,15 @@ export default {
|
|||||||
setTableColumnTitles() { // reevaluates computed phrasen
|
setTableColumnTitles() { // reevaluates computed phrasen
|
||||||
if(this.$refs.betriebsmittelTable) this.$refs.betriebsmittelTable.tabulator.setColumns(this.betriebsmittel_table_options.columns)
|
if(this.$refs.betriebsmittelTable) this.$refs.betriebsmittelTable.tabulator.setColumns(this.betriebsmittel_table_options.columns)
|
||||||
if(this.$refs.funktionenTable) this.$refs.funktionenTable.tabulator.setColumns(this.funktionen_table_options.columns)
|
if(this.$refs.funktionenTable) this.$refs.funktionenTable.tabulator.setColumns(this.funktionen_table_options.columns)
|
||||||
|
},
|
||||||
|
datetimeFormatterParams: function() {
|
||||||
|
const params = {
|
||||||
|
inputFormat:"yyyy-MM-dd",
|
||||||
|
outputFormat:"dd.MM.yyyy",
|
||||||
|
invalidPlaceholder:"(invalid date)",
|
||||||
|
timezone:FHC_JS_DATA_STORAGE_OBJECT.timezone
|
||||||
|
};
|
||||||
|
return params;
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
@@ -309,7 +328,7 @@ export default {
|
|||||||
},
|
},
|
||||||
template: /*html*/ `
|
template: /*html*/ `
|
||||||
<div class="container-fluid text-break fhc-form" >
|
<div class="container-fluid text-break fhc-form" >
|
||||||
<edit-profil v-if="showModal" ref="editModal" @hideBsModal="hideEditProfilModal" :value="JSON.parse(JSON.stringify(filteredEditData))" :titel="$p.t('profil','profilBearbeiten')"></edit-profil>
|
<edit-profil v-if="showModal" ref="editModal" :isMitarbeiter="true" @hideBsModal="hideEditProfilModal" :value="JSON.parse(JSON.stringify(filteredEditData))" :titel="$p.t('profil','profilBearbeiten')"></edit-profil>
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="d-md-none col-12 ">
|
<div class="d-md-none col-12 ">
|
||||||
<!--TODO: uncomment when implemented
|
<!--TODO: uncomment when implemented
|
||||||
|
|||||||
@@ -5,6 +5,8 @@ import RoleInformation from "./ProfilComponents/RoleInformation.js";
|
|||||||
import ProfilEmails from "./ProfilComponents/ProfilEmails.js";
|
import ProfilEmails from "./ProfilComponents/ProfilEmails.js";
|
||||||
import ProfilInformation from "./ProfilComponents/ProfilInformation.js";
|
import ProfilInformation from "./ProfilComponents/ProfilInformation.js";
|
||||||
|
|
||||||
|
import { dateFilter } from '../../../tabulator/filters/Dates.js';
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
components: {
|
components: {
|
||||||
CoreFilterCmpt,
|
CoreFilterCmpt,
|
||||||
@@ -24,7 +26,7 @@ export default {
|
|||||||
persistence: {
|
persistence: {
|
||||||
columns: false
|
columns: false
|
||||||
},
|
},
|
||||||
height: 300,
|
minHeight: 300,
|
||||||
layout: "fitColumns",
|
layout: "fitColumns",
|
||||||
responsiveLayout: "collapse",
|
responsiveLayout: "collapse",
|
||||||
responsiveLayoutCollapseUseFormatters: false,
|
responsiveLayoutCollapseUseFormatters: false,
|
||||||
@@ -60,18 +62,24 @@ export default {
|
|||||||
{
|
{
|
||||||
title: Vue.computed(() => this.$p.t('global/gueltigVon')),
|
title: Vue.computed(() => this.$p.t('global/gueltigVon')),
|
||||||
field: "Gültig_von",
|
field: "Gültig_von",
|
||||||
headerFilter: true,
|
headerFilterFunc: 'dates',
|
||||||
|
headerFilter: dateFilter,
|
||||||
resizable: true,
|
resizable: true,
|
||||||
minWidth: 200,
|
minWidth: 200,
|
||||||
visible: true
|
visible: true,
|
||||||
|
formatter:"datetime",
|
||||||
|
formatterParams: this.datetimeFormatterParams()
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
title: Vue.computed(() => this.$p.t('global/gueltigBis')),
|
title: Vue.computed(() => this.$p.t('global/gueltigBis')),
|
||||||
field: "Gültig_bis",
|
field: "Gültig_bis",
|
||||||
headerFilter: true,
|
headerFilterFunc: 'dates',
|
||||||
|
headerFilter: dateFilter,
|
||||||
resizable: true,
|
resizable: true,
|
||||||
minWidth: 200,
|
minWidth: 200,
|
||||||
visible: true
|
visible: true,
|
||||||
|
formatter:"datetime",
|
||||||
|
formatterParams: this.datetimeFormatterParams()
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
title: Vue.computed(() => this.$p.t('profil/wochenstunden')),
|
title: Vue.computed(() => this.$p.t('profil/wochenstunden')),
|
||||||
@@ -91,6 +99,15 @@ export default {
|
|||||||
funktionenTableBuilt: function () {
|
funktionenTableBuilt: function () {
|
||||||
this.$refs.funktionenTable.tabulator.setData(this.data.funktionen);
|
this.$refs.funktionenTable.tabulator.setData(this.data.funktionen);
|
||||||
},
|
},
|
||||||
|
datetimeFormatterParams: function() {
|
||||||
|
const params = {
|
||||||
|
inputFormat:"yyyy-MM-dd",
|
||||||
|
outputFormat:"dd.MM.yyyy",
|
||||||
|
invalidPlaceholder:"(invalid date)",
|
||||||
|
timezone:FHC_JS_DATA_STORAGE_OBJECT.timezone
|
||||||
|
};
|
||||||
|
return params;
|
||||||
|
}
|
||||||
},
|
},
|
||||||
watch: {
|
watch: {
|
||||||
'data.funktionen'(newVal) {
|
'data.funktionen'(newVal) {
|
||||||
|
|||||||
@@ -120,10 +120,10 @@ export const Profil = {
|
|||||||
},
|
},
|
||||||
sortProfilUpdates: (ele1, ele2) => {
|
sortProfilUpdates: (ele1, ele2) => {
|
||||||
let result = 0;
|
let result = 0;
|
||||||
if (ele1.status === "pending") {
|
if (ele1.status.toLowerCase() === "pending") {
|
||||||
result = -1;
|
result = -1;
|
||||||
} else if (ele1.status === "accepted") {
|
} else if (ele1.status.toLowerCase() === "accepted") {
|
||||||
result = ele2.status === "rejected" ? -1 : 1;
|
result = ele2.status.toLowerCase() === "rejected" ? -1 : 1;
|
||||||
} else {
|
} else {
|
||||||
result = 1;
|
result = 1;
|
||||||
}
|
}
|
||||||
@@ -226,10 +226,13 @@ export const Profil = {
|
|||||||
kontakteArray = kontakteArray.concat(
|
kontakteArray = kontakteArray.concat(
|
||||||
this.data.profilUpdates
|
this.data.profilUpdates
|
||||||
.filter((update) => {
|
.filter((update) => {
|
||||||
return update.requested_change.zustellung;
|
return update.status === 'Pending' && update.requested_change.zustellung;
|
||||||
})
|
})
|
||||||
.map((kontant) => {
|
.map((kontant) => {
|
||||||
return kontant.requested_change.kontakt_id;
|
return {
|
||||||
|
kontakt_id: kontant.requested_change.kontakt_id,
|
||||||
|
kontakttyp: kontant.requested_change.kontakttyp
|
||||||
|
};
|
||||||
})
|
})
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
@@ -241,7 +244,7 @@ export const Profil = {
|
|||||||
.every((kontakt) =>
|
.every((kontakt) =>
|
||||||
this.data.profilUpdates.some(
|
this.data.profilUpdates.some(
|
||||||
(update) =>
|
(update) =>
|
||||||
update.requested_change.kontakt_id == kontakt.kontakt_id
|
update.status === 'Pending' && update.requested_change.kontakt_id == kontakt.kontakt_id
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
) {
|
) {
|
||||||
@@ -251,7 +254,10 @@ export const Profil = {
|
|||||||
return kontakt.zustellung;
|
return kontakt.zustellung;
|
||||||
})
|
})
|
||||||
.map((kon) => {
|
.map((kon) => {
|
||||||
return kon.kontakt_id;
|
return {
|
||||||
|
kontakt_id: kon.kontakt_id,
|
||||||
|
kontakttyp: kon.kontakttyp
|
||||||
|
};
|
||||||
})
|
})
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ export default {
|
|||||||
view:String,
|
view:String,
|
||||||
withZustelladresse:{
|
withZustelladresse:{
|
||||||
type:Boolean,
|
type:Boolean,
|
||||||
default:false,
|
default:true,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
data(){
|
data(){
|
||||||
|
|||||||
@@ -10,21 +10,34 @@ export default {
|
|||||||
type: String,
|
type: String,
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
inject: [
|
inject: {
|
||||||
'studiengang_kz', // inject info that should not be displayed
|
// inject info that should not be displayed
|
||||||
],
|
'studiengang_kz': {
|
||||||
|
from: 'studiengang_kz',
|
||||||
|
default: false
|
||||||
|
},
|
||||||
|
},
|
||||||
computed: {
|
computed: {
|
||||||
getLinkGruppeListe() {
|
getLinkGruppeListe() {
|
||||||
|
if(this.studiengang_kz === false) {
|
||||||
|
return '';
|
||||||
|
}
|
||||||
return this.data.gruppe?.value && this.data.verband?.value && this.data.semester?.value ? FHC_JS_DATA_STORAGE_OBJECT.app_root
|
return this.data.gruppe?.value && this.data.verband?.value && this.data.semester?.value ? FHC_JS_DATA_STORAGE_OBJECT.app_root
|
||||||
+ 'cis/private/stud_in_grp.php?kz='+this.studiengang_kz+'&sem=' + this.data.semester.value
|
+ 'cis/private/stud_in_grp.php?kz='+this.studiengang_kz+'&sem=' + this.data.semester.value
|
||||||
+ '&verband=' + this.data.verband.value + '&grp=' + this.data.gruppe.value : ''
|
+ '&verband=' + this.data.verband.value + '&grp=' + this.data.gruppe.value : ''
|
||||||
},
|
},
|
||||||
getLinkVerbandListe() {
|
getLinkVerbandListe() {
|
||||||
|
if(this.studiengang_kz === false) {
|
||||||
|
return '';
|
||||||
|
}
|
||||||
return this.data.verband?.value && this.data.semester?.value ? FHC_JS_DATA_STORAGE_OBJECT.app_root
|
return this.data.verband?.value && this.data.semester?.value ? FHC_JS_DATA_STORAGE_OBJECT.app_root
|
||||||
+ 'cis/private/stud_in_grp.php?kz='+this.studiengang_kz+'&sem=' + this.data.semester.value
|
+ 'cis/private/stud_in_grp.php?kz='+this.studiengang_kz+'&sem=' + this.data.semester.value
|
||||||
+ '&verband=' + this.data.verband.value : ''
|
+ '&verband=' + this.data.verband.value : ''
|
||||||
},
|
},
|
||||||
getLinkSemesterListe() {
|
getLinkSemesterListe() {
|
||||||
|
if(this.studiengang_kz === false) {
|
||||||
|
return '';
|
||||||
|
}
|
||||||
return this.data.semester?.value ? FHC_JS_DATA_STORAGE_OBJECT.app_root
|
return this.data.semester?.value ? FHC_JS_DATA_STORAGE_OBJECT.app_root
|
||||||
+ 'cis/private/stud_in_grp.php?kz='+this.studiengang_kz+'&sem=' + this.data.semester.value : ''
|
+ 'cis/private/stud_in_grp.php?kz='+this.studiengang_kz+'&sem=' + this.data.semester.value : ''
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -14,6 +14,10 @@ export default {
|
|||||||
},
|
},
|
||||||
mixins: [BsModal],
|
mixins: [BsModal],
|
||||||
props: {
|
props: {
|
||||||
|
isMitarbeiter: {
|
||||||
|
type: Boolean,
|
||||||
|
default: false
|
||||||
|
},
|
||||||
value: Object,
|
value: Object,
|
||||||
titel: String,
|
titel: String,
|
||||||
zustelladressenCount: Function,
|
zustelladressenCount: Function,
|
||||||
@@ -47,6 +51,7 @@ export default {
|
|||||||
provide() {
|
provide() {
|
||||||
return {
|
return {
|
||||||
updateFileID: this.updateFileIDFunction,
|
updateFileID: this.updateFileIDFunction,
|
||||||
|
isMitarbeiter: this.isMitarbeiter
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|||||||
@@ -10,17 +10,13 @@ export default {
|
|||||||
|
|
||||||
props: {
|
props: {
|
||||||
data: Object,
|
data: Object,
|
||||||
isMitarbeiter: {
|
|
||||||
type: Boolean,
|
|
||||||
default: false,
|
|
||||||
},
|
|
||||||
files: {
|
files: {
|
||||||
type: Array,
|
type: Array,
|
||||||
default: []
|
default: []
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
|
||||||
inject: ["getZustelladressenCount", "updateFileID"],
|
inject: ["getZustelladressenCount", "updateFileID", "isMitarbeiter"],
|
||||||
|
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
@@ -164,10 +160,8 @@ export default {
|
|||||||
<div class="gy-3 row justify-content-center align-items-center">
|
<div class="gy-3 row justify-content-center align-items-center">
|
||||||
<!-- warning message for too many zustellungs Adressen -->
|
<!-- warning message for too many zustellungs Adressen -->
|
||||||
<div v-if="showZustellAdressenWarning" class="col-12 ">
|
<div v-if="showZustellAdressenWarning" class="col-12 ">
|
||||||
<div class="card bg-danger mx-2">
|
<div class="alert alert-warning mx-2">
|
||||||
<div class="card-body text-white ">
|
|
||||||
<span>{{$p.t('profilUpdate','zustell_adressen_warning')}}</span>
|
<span>{{$p.t('profilUpdate','zustell_adressen_warning')}}</span>
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<!-- End of warning -->
|
<!-- End of warning -->
|
||||||
@@ -177,7 +171,7 @@ export default {
|
|||||||
<div class="form-check mb-2">
|
<div class="form-check mb-2">
|
||||||
<input class="form-check-input" type="checkbox" @change="updateValue($event,'zustelladresse')" :checked="data.zustelladresse" id="flexCheckDefault">
|
<input class="form-check-input" type="checkbox" @change="updateValue($event,'zustelladresse')" :checked="data.zustelladresse" id="flexCheckDefault">
|
||||||
<label class="form-check-label" for="flexCheckDefault">
|
<label class="form-check-label" for="flexCheckDefault">
|
||||||
{{$p.t('person','zustelladresse')}}
|
{{$p.t('person','zustelladresse')}} {{$p.t('profilUpdate','infoZustelladresse')}}
|
||||||
</label>
|
</label>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -30,12 +30,15 @@ export default {
|
|||||||
// if the kontakt is already a zustellungskontakt when the user is editing the kontakt, then no warning is shown and the zustellung will be overwritten
|
// if the kontakt is already a zustellungskontakt when the user is editing the kontakt, then no warning is shown and the zustellung will be overwritten
|
||||||
if (JSON.parse(this.originalValue).zustellung) {
|
if (JSON.parse(this.originalValue).zustellung) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
const kontakteOfSelectedType = this.zustellKontakteCount.filter((element) => {
|
||||||
|
return element.kontakttyp === this.data?.kontakttyp
|
||||||
|
});
|
||||||
// if zustellKontakteCount is not 0 and the own kontakt has the flag zustellung set to true
|
// if zustellKontakteCount is not 0 and the own kontakt has the flag zustellung set to true
|
||||||
if (!this.zustellKontakteCount.includes(this.data.kontakt_id)) {
|
if (!this.zustellKontakteCount.some((element) => element.kontakt_id === this.data.kontakt_id)) {
|
||||||
return this.data.zustellung && this.zustellKontakteCount.length;
|
return this.data.zustellung && kontakteOfSelectedType.length;
|
||||||
}
|
}
|
||||||
return this.zustellKontakteCount.length >= 2 && this.data.zustellung;
|
return this.kontakteOfSelectedType.length >= 2 && this.data.zustellung;
|
||||||
},
|
},
|
||||||
isChanged: function () {
|
isChanged: function () {
|
||||||
//? returns true if the original passed data object was changed
|
//? returns true if the original passed data object was changed
|
||||||
@@ -57,16 +60,6 @@ export default {
|
|||||||
|
|
||||||
<div class="gy-3 row align-items-center justify-content-center">
|
<div class="gy-3 row align-items-center justify-content-center">
|
||||||
|
|
||||||
<!-- warning message for too many zustellungs Kontakte -->
|
|
||||||
<div v-if="showZustellKontakteWarning" class="col-12 ">
|
|
||||||
<div class="card bg-danger mx-2">
|
|
||||||
<div class="card-body text-white ">
|
|
||||||
<span>{{$p.t('profilUpdate','zustell_kontakte_warning')}}</span>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<!-- End of warning -->
|
|
||||||
|
|
||||||
<div v-if="!data.kontakt_id" class="col-12">
|
<div v-if="!data.kontakt_id" class="col-12">
|
||||||
|
|
||||||
|
|
||||||
@@ -108,6 +101,14 @@ export default {
|
|||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<!-- warning message for too many zustellungs Kontakte -->
|
||||||
|
<div v-if="showZustellKontakteWarning" class="col-12 ">
|
||||||
|
<div class="alert alert-warning mx-2">
|
||||||
|
<span>{{$p.t('profilUpdate','zustell_kontakte_warning')}}</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<!-- End of warning -->
|
||||||
|
|
||||||
<div class="d-flex flex-row justify-content-start col-12 allign-middle">
|
<div class="d-flex flex-row justify-content-start col-12 allign-middle">
|
||||||
<span style="opacity: 0.65; font-size: .85rem; " class="px-2">{{$p.t('profilUpdate','zustellungsKontakt')}}</span>
|
<span style="opacity: 0.65; font-size: .85rem; " class="px-2">{{$p.t('profilUpdate','zustellungsKontakt')}}</span>
|
||||||
|
|
||||||
|
|||||||
@@ -16,7 +16,7 @@ export default {
|
|||||||
mixins: [BsModal],
|
mixins: [BsModal],
|
||||||
props: {
|
props: {
|
||||||
titel: {
|
titel: {
|
||||||
type: Object,
|
type: String,
|
||||||
},
|
},
|
||||||
files: {
|
files: {
|
||||||
type: Array,
|
type: Array,
|
||||||
@@ -57,7 +57,7 @@ export default {
|
|||||||
},
|
},
|
||||||
template: /*html*/`
|
template: /*html*/`
|
||||||
|
|
||||||
<bs-modal v-show="!loading" ref="modalContainer" v-bind="$props" body-class="" dialog-class="modal-lg" class="bootstrap-alert" :backdrop="false">
|
<bs-modal ref="modalContainer" v-bind="$props" body-class="" dialog-class="modal-lg" class="bootstrap-alert" :backdrop="false">
|
||||||
<template #title>
|
<template #title>
|
||||||
<p style="opacity:0.8" class="ms-2" v-if="!updateID">{{$p.t('profilUpdate','profilBildUpdateMessage',[titel])}}</p>
|
<p style="opacity:0.8" class="ms-2" v-if="!updateID">{{$p.t('profilUpdate','profilBildUpdateMessage',[titel])}}</p>
|
||||||
</template>
|
</template>
|
||||||
|
|||||||
@@ -6,6 +6,7 @@ import Status from "./EditProfilComponents/Status.js";
|
|||||||
import TextInputDokument from "./EditProfilComponents/TextInputDokument.js";
|
import TextInputDokument from "./EditProfilComponents/TextInputDokument.js";
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
|
name: 'EditProfilSelect',
|
||||||
components: {
|
components: {
|
||||||
Kontakt,
|
Kontakt,
|
||||||
EditKontakt,
|
EditKontakt,
|
||||||
@@ -14,7 +15,7 @@ export default {
|
|||||||
Status,
|
Status,
|
||||||
TextInputDokument,
|
TextInputDokument,
|
||||||
},
|
},
|
||||||
inject: ["profilUpdateTopic"],
|
inject: ["profilUpdateTopic", "isMitarbeiter"],
|
||||||
props: {
|
props: {
|
||||||
list: Object,
|
list: Object,
|
||||||
|
|
||||||
@@ -148,15 +149,31 @@ export default {
|
|||||||
<div class="list-group">
|
<div class="list-group">
|
||||||
<template v-for="item in data">
|
<template v-for="item in data">
|
||||||
<div class="d-flex flex-row align-items-center">
|
<div class="d-flex flex-row align-items-center">
|
||||||
<button style="position:relative" type="button" class=" list-group-item list-group-item-action" @click="updateOptions($event,item)" >
|
<button
|
||||||
|
style="position:relative"
|
||||||
|
type="button" class="list-group-item list-group-item-action"
|
||||||
|
@click="updateOptions($event,item)"
|
||||||
|
:disabled="(this.isMitarbeiter === false && item.listview === 'Adresse' && item.data.heimatadresse === true)"
|
||||||
|
>
|
||||||
<!-- render title of options -->
|
<!-- render title of options -->
|
||||||
<p v-if="item.title" class="my-1" >{{item.title}}</p>
|
<p v-if="item.title" class="my-1" >{{item.title}}</p>
|
||||||
<!-- else render list view of items -->
|
<!-- else render list view of items -->
|
||||||
<div v-else class="my-2 me-4" >
|
<div v-else class="my-2 me-4" >
|
||||||
<component :is="item.listview" v-bind="item"></component>
|
<component :is="item.listview" v-bind="item"></component>
|
||||||
|
<div
|
||||||
|
v-if="(this.isMitarbeiter === false && item.listview === 'Adresse' && item.data.heimatadresse === true)"
|
||||||
|
class="gy-2 row justify-content-center align-items-center"
|
||||||
|
>
|
||||||
|
<div class="col-1"> </div>
|
||||||
|
<div class="col-11">
|
||||||
|
<div class="alert alert-info mt-4" role="alert">
|
||||||
|
{{ $p.t('profilUpdate','infoHeimatadresse') }}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</button>
|
</button>
|
||||||
<button v-if="item.listview" @click="deleteItem(item)" type="button" class="mx-3 btn btn-danger btn-circle" :aria-label="$p.t('profilUpdate','deleteItem')" :title="$p.t('profilUpdate','deleteItem')" ><i class="fa fa-trash" aria-hide="true"></i></button>
|
<button v-if="item.listview" :disabled="(this.isMitarbeiter === false && item.listview === 'Adresse' && item.data.heimatadresse === true)" @click="deleteItem(item)" type="button" class="mx-3 btn btn-danger btn-circle" :aria-label="$p.t('profilUpdate','deleteItem')" :title="$p.t('profilUpdate','deleteItem')" ><i class="fa fa-trash" aria-hide="true"></i></button>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -11,6 +11,7 @@ import FetchProfilUpdates from "./ProfilComponents/FetchProfilUpdates.js";
|
|||||||
import EditProfil from "./ProfilModal/EditProfil.js";
|
import EditProfil from "./ProfilModal/EditProfil.js";
|
||||||
|
|
||||||
import ApiProfilUpdate from '../../../api/factory/profilUpdate.js';
|
import ApiProfilUpdate from '../../../api/factory/profilUpdate.js';
|
||||||
|
import { dateFilter } from '../../../tabulator/filters/Dates.js';
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
components: {
|
components: {
|
||||||
@@ -39,7 +40,7 @@ export default {
|
|||||||
persistence: {
|
persistence: {
|
||||||
columns: false
|
columns: false
|
||||||
},
|
},
|
||||||
height: 200,
|
minHeight: 200,
|
||||||
layout: "fitColumns",
|
layout: "fitColumns",
|
||||||
columns: [{
|
columns: [{
|
||||||
title: Vue.computed(() => this.preloadedPhrasen.zutrittsGruppenPhrase),
|
title: Vue.computed(() => this.preloadedPhrasen.zutrittsGruppenPhrase),
|
||||||
@@ -51,7 +52,7 @@ export default {
|
|||||||
persistence: {
|
persistence: {
|
||||||
columns: false
|
columns: false
|
||||||
},
|
},
|
||||||
height: 300,
|
minHeight: 300,
|
||||||
layout: "fitColumns",
|
layout: "fitColumns",
|
||||||
responsiveLayout: "collapse",
|
responsiveLayout: "collapse",
|
||||||
responsiveLayoutCollapseUseFormatters: false,
|
responsiveLayoutCollapseUseFormatters: false,
|
||||||
@@ -85,9 +86,12 @@ export default {
|
|||||||
{
|
{
|
||||||
title: Vue.computed(() =>this.preloadedPhrasen.ausgabedatum) ,
|
title: Vue.computed(() =>this.preloadedPhrasen.ausgabedatum) ,
|
||||||
field: "Ausgegeben_am",
|
field: "Ausgegeben_am",
|
||||||
headerFilter: true,
|
headerFilterFunc: 'dates',
|
||||||
|
headerFilter: dateFilter,
|
||||||
minWidth: 200,
|
minWidth: 200,
|
||||||
visible: true
|
visible: true,
|
||||||
|
formatter:"datetime",
|
||||||
|
formatterParams: this.datetimeFormatterParams()
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
@@ -160,6 +164,15 @@ export default {
|
|||||||
this.$refs.editModal.show();
|
this.$refs.editModal.show();
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
|
datetimeFormatterParams: function() {
|
||||||
|
const params = {
|
||||||
|
inputFormat:"yyyy-MM-dd",
|
||||||
|
outputFormat:"dd.MM.yyyy",
|
||||||
|
invalidPlaceholder:"(invalid date)",
|
||||||
|
timezone:FHC_JS_DATA_STORAGE_OBJECT.timezone
|
||||||
|
};
|
||||||
|
return params;
|
||||||
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
computed: {
|
computed: {
|
||||||
|
|||||||
@@ -113,7 +113,17 @@ export default {
|
|||||||
},
|
},
|
||||||
template: /*html*/ `
|
template: /*html*/ `
|
||||||
|
|
||||||
<bs-modal v-show="!loading" ref="modalContainer" v-bind="$props" body-class="" dialog-class="modal-lg" class="bootstrap-alert" :backdrop="false" >
|
<bs-modal
|
||||||
|
v-show="!loading"
|
||||||
|
ref="modalContainer"
|
||||||
|
v-bind="$props"
|
||||||
|
header-class="bg-light"
|
||||||
|
footer-class="bg-light"
|
||||||
|
body-class=""
|
||||||
|
dialog-class="modal-lg"
|
||||||
|
class="bootstrap-alert"
|
||||||
|
:backdrop="false"
|
||||||
|
>
|
||||||
|
|
||||||
<template v-slot:title>
|
<template v-slot:title>
|
||||||
{{title}}
|
{{title}}
|
||||||
@@ -210,8 +220,8 @@ export default {
|
|||||||
|
|
||||||
|
|
||||||
<template v-if="data.status === profilUpdateStates['Pending']" v-slot:footer>
|
<template v-if="data.status === profilUpdateStates['Pending']" v-slot:footer>
|
||||||
<div class="form-underline flex-fill">
|
<div class="flex-fill">
|
||||||
<div class="form-underline-titel">{{$p.t('global','nachricht')}}</div>
|
<div>{{$p.t('global','nachricht')}}</div>
|
||||||
|
|
||||||
<div class="d-flex flex-row gap-2">
|
<div class="d-flex flex-row gap-2">
|
||||||
<input class="form-control " v-model="data.status_message" />
|
<input class="form-control " v-model="data.status_message" />
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ import Alert from "../../../components/Bootstrap/Alert.js";
|
|||||||
import Loading from "../../../components/Loader.js";
|
import Loading from "../../../components/Loader.js";
|
||||||
|
|
||||||
import ApiProfilUpdate from '../../../api/factory/profilUpdate.js';
|
import ApiProfilUpdate from '../../../api/factory/profilUpdate.js';
|
||||||
|
import { dateFilter } from '../../../tabulator/filters/Dates.js';
|
||||||
|
|
||||||
const sortProfilUpdates = (ele1, ele2, thisPointer) => {
|
const sortProfilUpdates = (ele1, ele2, thisPointer) => {
|
||||||
let result = 0;
|
let result = 0;
|
||||||
@@ -184,13 +185,13 @@ export default {
|
|||||||
},
|
},
|
||||||
|
|
||||||
height: 600,
|
height: 600,
|
||||||
layout: "fitColumns",
|
layout: "fitDataStretchFrozen",
|
||||||
|
|
||||||
columns: [
|
columns: [
|
||||||
{
|
{
|
||||||
title: this.$p.t("profilUpdate", "UID"),
|
title: this.$p.t("profilUpdate", "UID"),
|
||||||
field: "uid",
|
field: "uid",
|
||||||
minWidth: 200,
|
minWidth: 100,
|
||||||
resizable: true,
|
resizable: true,
|
||||||
headerFilter: true,
|
headerFilter: true,
|
||||||
//responsive:0,
|
//responsive:0,
|
||||||
@@ -203,27 +204,59 @@ export default {
|
|||||||
headerFilter: true,
|
headerFilter: true,
|
||||||
//responsive:0,
|
//responsive:0,
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
title: this.$p.t("lehre", "studiengang") + ' (' + this.$p.t("profil", "studentIn") + ')',
|
||||||
|
field: "studiengang",
|
||||||
|
minWidth: 50,
|
||||||
|
resizable: true,
|
||||||
|
headerFilter: "list",
|
||||||
|
headerFilterParams: {valuesLookup:true, listOnEmpty:true, autocomplete:true, sort:"asc"},
|
||||||
|
//responsive:0,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: this.$p.t("lehre", "organisationsform") + ' (' + this.$p.t("profil", "studentIn") + ')',
|
||||||
|
field: "orgform",
|
||||||
|
minWidth: 50,
|
||||||
|
resizable: true,
|
||||||
|
headerFilter: "list",
|
||||||
|
headerFilterParams: {valuesLookup:true, listOnEmpty:true, autocomplete:true, sort:"asc"},
|
||||||
|
//responsive:0,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: this.$p.t("lehre", "organisationseinheit") + ' (' + this.$p.t("profil", "mitarbeiterIn") + ')',
|
||||||
|
field: "oezuordnung",
|
||||||
|
minWidth: 200,
|
||||||
|
resizable: true,
|
||||||
|
headerFilter: "list",
|
||||||
|
headerFilterParams: {valuesLookup:true, listOnEmpty:true, autocomplete:true, sort:"asc"},
|
||||||
|
//responsive:0,
|
||||||
|
},
|
||||||
{
|
{
|
||||||
title: this.$p.t("profilUpdate", "Topic"),
|
title: this.$p.t("profilUpdate", "Topic"),
|
||||||
field: "topic",
|
field: "topic",
|
||||||
resizable: true,
|
resizable: true,
|
||||||
minWidth: 200,
|
minWidth: 200,
|
||||||
headerFilter: true,
|
headerFilter: "list",
|
||||||
|
headerFilterParams: {valuesLookup:true, listOnEmpty:true, autocomplete:true, sort:"asc"},
|
||||||
//responsive:0,
|
//responsive:0,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
title: this.$p.t("profilUpdate", "insertamum"),
|
title: this.$p.t("profilUpdate", "insertamum"),
|
||||||
field: "insertamum",
|
field: "insertamum_iso",
|
||||||
resizable: true,
|
resizable: true,
|
||||||
headerFilter: true,
|
headerFilterFunc: 'dates',
|
||||||
|
headerFilter: dateFilter,
|
||||||
minWidth: 200,
|
minWidth: 200,
|
||||||
|
formatter:"datetime",
|
||||||
|
formatterParams: this.datetimeFormatterParams(),
|
||||||
//responsive:0,
|
//responsive:0,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
title: this.$p.t("profilUpdate", "Status"),
|
title: this.$p.t("profilUpdate", "Status"),
|
||||||
field: "status_translated",
|
field: "status_translated",
|
||||||
hozAlign: "center",
|
hozAlign: "center",
|
||||||
headerFilter: true,
|
headerFilter: "list",
|
||||||
|
headerFilterParams: {valuesLookup:true, listOnEmpty:true, autocomplete:true, sort:"asc"},
|
||||||
formatter: (cell, para) => {
|
formatter: (cell, para) => {
|
||||||
let iconClasses = "";
|
let iconClasses = "";
|
||||||
let status = cell.getRow().getData().status;
|
let status = cell.getRow().getData().status;
|
||||||
@@ -248,20 +281,11 @@ export default {
|
|||||||
{
|
{
|
||||||
title: this.$p.t("profilUpdate", "actions"),
|
title: this.$p.t("profilUpdate", "actions"),
|
||||||
headerSort: false,
|
headerSort: false,
|
||||||
|
frozen: true,
|
||||||
formatter: (cell, params) => {
|
formatter: (cell, params) => {
|
||||||
let STATUS_PENDING =
|
let details = this.$p.t('global', 'details');
|
||||||
cell.getRow().getData().status ==
|
|
||||||
this.profilUpdateStates["Pending"];
|
|
||||||
|
|
||||||
let html = `<div class="d-flex justify-content-evenly align-items-center">
|
let html = `<div class="d-flex justify-content-evenly align-items-center">
|
||||||
<button class="btn border-primary border-2" id="showButton"><i class="fa-solid fa-eye fhc-primary-color"></i></button>
|
<button class="btn btn-secondary" id="showButton">${details}</button>
|
||||||
${
|
|
||||||
STATUS_PENDING ?
|
|
||||||
`<button class="btn border-success border-2" id="acceptButton"><i class='fa fa-lg fa-circle-check text-success'></i></button>
|
|
||||||
<button class="btn border-danger border-2" id="denyButton"><i class=' fa fa-lg fa-circle-xmark text-danger'></i></button>`
|
|
||||||
:
|
|
||||||
``
|
|
||||||
}
|
|
||||||
</div>`;
|
</div>`;
|
||||||
|
|
||||||
// Convert the HTML string to an HTML node
|
// Convert the HTML string to an HTML node
|
||||||
@@ -276,19 +300,6 @@ export default {
|
|||||||
this.showAcceptDenyModal(cell.getRow().getData());
|
this.showAcceptDenyModal(cell.getRow().getData());
|
||||||
});
|
});
|
||||||
|
|
||||||
if (STATUS_PENDING) {
|
|
||||||
node
|
|
||||||
.querySelector("#acceptButton")
|
|
||||||
.addEventListener("click", () => {
|
|
||||||
this.acceptProfilUpdate(cell.getRow().getData());
|
|
||||||
});
|
|
||||||
node
|
|
||||||
.querySelector("#denyButton")
|
|
||||||
.addEventListener("click", () => {
|
|
||||||
this.denyProfilUpdate(cell.getRow().getData());
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
return node;
|
return node;
|
||||||
},
|
},
|
||||||
minWidth: 200,
|
minWidth: 200,
|
||||||
@@ -370,6 +381,15 @@ export default {
|
|||||||
this.showAcceptDenyModal(arrayRowData[0]);
|
this.showAcceptDenyModal(arrayRowData[0]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
datetimeFormatterParams: function() {
|
||||||
|
const params = {
|
||||||
|
inputFormat:"yyyy-MM-dd",
|
||||||
|
outputFormat:"dd.MM.yyyy",
|
||||||
|
invalidPlaceholder:"(invalid date)",
|
||||||
|
timezone:FHC_JS_DATA_STORAGE_OBJECT.timezone
|
||||||
|
};
|
||||||
|
return params;
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
watch: {
|
watch: {
|
||||||
@@ -382,7 +402,7 @@ export default {
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
created() {
|
created() {
|
||||||
this.$p.loadCategory("profilUpdate").then(() => {
|
this.$p.loadCategory(["profilUpdate", "lehre", "profil", "global"]).then(() => {
|
||||||
this.categoryLoaded = true;
|
this.categoryLoaded = true;
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user