mirror of
https://github.com/FH-Complete/FHC-Core.git
synced 2026-07-25 08:34:29 +00:00
Merge branch 'master' into feature-71775/StudVW_ChangeSem_Behaviour
This commit is contained in:
@@ -0,0 +1,36 @@
|
|||||||
|
<?php
|
||||||
|
$filterCmptArray = array(
|
||||||
|
"app" => 'core',
|
||||||
|
'datasetName' => 'vertragsverwaltung',
|
||||||
|
'query' => '
|
||||||
|
SELECT
|
||||||
|
uid,
|
||||||
|
person_id,
|
||||||
|
vorname,
|
||||||
|
nachname,
|
||||||
|
gebdatum,
|
||||||
|
vertragsarten,
|
||||||
|
unternehmen,
|
||||||
|
ids,
|
||||||
|
aktiv
|
||||||
|
FROM
|
||||||
|
(
|
||||||
|
SELECT
|
||||||
|
b.uid , p.person_id,
|
||||||
|
p.vorname, p.nachname,
|
||||||
|
gebdatum,
|
||||||
|
STRING_AGG(DISTINCT va.bezeichnung, \', \') AS Vertragsarten,
|
||||||
|
STRING_AGG(DISTINCT u.bezeichnung, \', \') AS Unternehmen,
|
||||||
|
STRING_AGG(d.dienstverhaeltnis_id::TEXT, \', \') AS ids,
|
||||||
|
b.aktiv
|
||||||
|
FROM
|
||||||
|
hr.tbl_dienstverhaeltnis d
|
||||||
|
JOIN public.tbl_benutzer b ON d.mitarbeiter_uid = b.uid
|
||||||
|
JOIN public.tbl_person p ON p.person_id = b.person_id
|
||||||
|
JOIN public.tbl_organisationseinheit u ON d.oe_kurzbz = u.oe_kurzbz
|
||||||
|
JOIN hr.tbl_vertragsart va ON d.vertragsart_kurzbz = va.vertragsart_kurzbz
|
||||||
|
GROUP BY b.uid, p.person_id, p.vorname, p.nachname, b.aktiv
|
||||||
|
) as vertragsdaten
|
||||||
|
',
|
||||||
|
'requiredPermissions' => 'vertrag/mitarbeiter'
|
||||||
|
);
|
||||||
@@ -163,6 +163,13 @@ $config['navigation_header'] = array(
|
|||||||
'expand' => true,
|
'expand' => true,
|
||||||
'sort' => 50,
|
'sort' => 50,
|
||||||
'requiredPermissions' => 'lehre/gruppenmanager:r'
|
'requiredPermissions' => 'lehre/gruppenmanager:r'
|
||||||
|
),
|
||||||
|
'vertragsverwaltung' => array(
|
||||||
|
'link' => site_url('vertragsverwaltung'),
|
||||||
|
'description' => 'Vertragsverwaltung',
|
||||||
|
'expand' => true,
|
||||||
|
'sort' => 51,
|
||||||
|
'requiredPermissions' => 'vertrag/mitarbeiter:r'
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
),
|
),
|
||||||
@@ -335,6 +342,18 @@ $config['navigation_menu']['system/issues/Issues/*'] = array(
|
|||||||
'target' => '_blank',
|
'target' => '_blank',
|
||||||
'requiredPermissions' => array('admin:rw')
|
'requiredPermissions' => array('admin:rw')
|
||||||
),
|
),
|
||||||
|
|
||||||
|
);
|
||||||
|
|
||||||
|
$config['navigation_menu']['vertragsverwaltung/*'] = array(
|
||||||
|
'vertragsverwaltung' => array(
|
||||||
|
'link' => site_url('vertragsverwaltung'),
|
||||||
|
'description' => 'Vertragsverwaltung',
|
||||||
|
'icon' => 'home',
|
||||||
|
'sort' => 100,
|
||||||
|
'target' => '_blank',
|
||||||
|
'requiredPermissions' => array('vertrag/mitarbeiter:r')
|
||||||
|
)
|
||||||
);
|
);
|
||||||
|
|
||||||
$config['navigation_menu']['apps'] = [
|
$config['navigation_menu']['apps'] = [
|
||||||
|
|||||||
@@ -130,3 +130,16 @@ $config['students_tab_order'] = [
|
|||||||
'combinePeople',
|
'combinePeople',
|
||||||
'archive',
|
'archive',
|
||||||
];
|
];
|
||||||
|
|
||||||
|
$config['stv_prestudent_tags'] = [
|
||||||
|
'prioone' => ['readonly' => false],
|
||||||
|
'priotwo' => ['readonly' => true],
|
||||||
|
'hinweis' => ['readonly' => false],
|
||||||
|
'hinweis_assistenz' => ['readonly' => true],
|
||||||
|
'hinweis_kf' => ['readonly' => true],
|
||||||
|
'hinweis_lehrende' => ['readonly' => false],
|
||||||
|
'hinweis_stg_kf' => ['readonly' => true],
|
||||||
|
'finished_stg' => ['readonly' => true],
|
||||||
|
'finished_kf' => ['readonly' => true],
|
||||||
|
'inwork_kf' => ['readonly' => true],
|
||||||
|
];
|
||||||
|
|||||||
@@ -33,9 +33,4 @@ class MyLv extends Auth_Controller
|
|||||||
|
|
||||||
$this->load->view('CisRouterView/CisRouterView.php', ['viewData' => $viewData, 'route' => 'MyLv']);
|
$this->load->view('CisRouterView/CisRouterView.php', ['viewData' => $viewData, 'route' => 'MyLv']);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function Info($studien_semester,$lvid)
|
|
||||||
{
|
|
||||||
$this->load->view('Cis/LvInfo',['lvid'=> $lvid, 'studien_semester' => $studien_semester]);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -28,7 +28,7 @@ class Studentenverwaltung extends Auth_Controller
|
|||||||
'basis/prestudentstatus' => $this->permissionlib->isBerechtigt('basis/prestudentstatus'),
|
'basis/prestudentstatus' => $this->permissionlib->isBerechtigt('basis/prestudentstatus'),
|
||||||
'assistenz_stgs' => $this->permissionlib->getSTG_isEntitledFor('assistenz'),
|
'assistenz_stgs' => $this->permissionlib->getSTG_isEntitledFor('assistenz'),
|
||||||
'admin' => $this->permissionlib->isBerechtigt('admin'),
|
'admin' => $this->permissionlib->isBerechtigt('admin'),
|
||||||
'assistenz_schreibrechte' => $this->permissionlib->isBerechtigt('assistenz','suid'),
|
'assistenz_schreibrechte' => $this->permissionlib->isBerechtigt('assistenz', 'suid'),
|
||||||
'student/keine_studstatuspruefung' => $this->permissionlib->isBerechtigt('student/keine_studstatuspruefung'),
|
'student/keine_studstatuspruefung' => $this->permissionlib->isBerechtigt('student/keine_studstatuspruefung'),
|
||||||
'lehre/reihungstestAufsicht' => $this->permissionlib->isBerechtigt('lehre/reihungstestAufsicht'),
|
'lehre/reihungstestAufsicht' => $this->permissionlib->isBerechtigt('lehre/reihungstestAufsicht'),
|
||||||
'system/change_outputformat' => $this->permissionlib->getOE_isEntitledFor('system/change_outputformat'),
|
'system/change_outputformat' => $this->permissionlib->getOE_isEntitledFor('system/change_outputformat'),
|
||||||
@@ -43,3 +43,5 @@ class Studentenverwaltung extends Auth_Controller
|
|||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,30 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
if (! defined('BASEPATH')) exit('No direct script access allowed');
|
||||||
|
|
||||||
|
class Vertragsverwaltung extends Auth_Controller
|
||||||
|
{
|
||||||
|
public function __construct()
|
||||||
|
{
|
||||||
|
$permissions = [];
|
||||||
|
$router = load_class('Router');
|
||||||
|
$permissions[$router->method] = ['vertrag/mitarbeiter:r'];
|
||||||
|
#$permissions[$router->method] = ['admin:rw'];
|
||||||
|
parent::__construct($permissions);
|
||||||
|
|
||||||
|
// Load Libraries
|
||||||
|
$this->load->library('VariableLib', ['uid' => getAuthUID()]);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function _remap()
|
||||||
|
{
|
||||||
|
$this->load->view('Vertragsverwaltung', [
|
||||||
|
'permissions' => [
|
||||||
|
'vertragsverwaltung_schreibrechte' => $this->permissionlib->isBerechtigt('vertrag/mitarbeiter', 'suid')
|
||||||
|
]
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,53 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
if (!defined('BASEPATH')) exit('No direct script access allowed');
|
||||||
|
|
||||||
|
use \DateTime as DateTime;
|
||||||
|
|
||||||
|
class Detailheader extends FHCAPI_Controller
|
||||||
|
{
|
||||||
|
public function __construct()
|
||||||
|
{
|
||||||
|
parent::__construct([
|
||||||
|
'getHeader' => ['vertrag/mitarbeiter:r'],
|
||||||
|
'getPersonAbteilung' => ['vertrag/mitarbeiter:r'],
|
||||||
|
'getLeitungOrg' => ['vertrag/mitarbeiter:r'],
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getHeader($person_id)
|
||||||
|
{
|
||||||
|
$this->load->model('ressource/Mitarbeiter_model', 'Mitarbeitermodel');
|
||||||
|
|
||||||
|
$result = $this->Mitarbeitermodel->getHeader($person_id);
|
||||||
|
|
||||||
|
$data = $this->getDataOrTerminateWithError($result);
|
||||||
|
|
||||||
|
$this->terminateWithSuccess(current($data));
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getPersonAbteilung($mitarbeiter_uid)
|
||||||
|
{
|
||||||
|
$this->load->model('ressource/Mitarbeiter_model', 'Mitarbeitermodel');
|
||||||
|
|
||||||
|
$result = $this->Mitarbeitermodel->getPersonAbteilung($mitarbeiter_uid);
|
||||||
|
|
||||||
|
$data = $this->getDataOrTerminateWithError($result);
|
||||||
|
|
||||||
|
$this->terminateWithSuccess(current($data));
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getLeitungOrg($oekurzbz)
|
||||||
|
{
|
||||||
|
$this->load->model('ressource/Mitarbeiter_model', 'Mitarbeitermodel');
|
||||||
|
|
||||||
|
$result = $this->Mitarbeitermodel->getLeitungOrg($oekurzbz);
|
||||||
|
|
||||||
|
$data = $this->getDataOrTerminateWithError($result);
|
||||||
|
|
||||||
|
$this->terminateWithSuccess(current($data));
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -0,0 +1,237 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
if (! defined('BASEPATH')) exit('No direct script access allowed');
|
||||||
|
|
||||||
|
use \DateTime as DateTime;
|
||||||
|
|
||||||
|
class Foto extends FHCAPI_Controller
|
||||||
|
{
|
||||||
|
public function __construct()
|
||||||
|
{
|
||||||
|
parent::__construct([
|
||||||
|
'uploadFoto' => ['admin:r', 'assistenz:r'],
|
||||||
|
'deleteFoto' => ['admin:r', 'assistenz:r'],
|
||||||
|
]);
|
||||||
|
|
||||||
|
//Load Models and Libraries
|
||||||
|
$this->load->model('person/Person_model', 'PersonModel');
|
||||||
|
$this->load->model("crm/Akte_model", "AkteModel");
|
||||||
|
$this->load->model('person/Fotostatusperson_model', 'FotostatusPersonModel');
|
||||||
|
|
||||||
|
$this->loadPhrases([
|
||||||
|
'ui',
|
||||||
|
'header'
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function uploadFoto($person_id)
|
||||||
|
{
|
||||||
|
if(!$person_id)
|
||||||
|
{
|
||||||
|
return $this->terminateWithError($this->p->t('ui', 'error_missingId', ['id'=> 'Person_id']), self::ERROR_TYPE_GENERAL);
|
||||||
|
}
|
||||||
|
|
||||||
|
$data = json_decode(file_get_contents("php://input"), true);
|
||||||
|
|
||||||
|
if (!empty($data['image']))
|
||||||
|
{
|
||||||
|
$base64 = $data['image'];
|
||||||
|
$resizedImage1 = $this->_resize($base64, 827, 1063);
|
||||||
|
|
||||||
|
if (is_null($resizedImage1))
|
||||||
|
return $this->terminateWithError($this->p->t('header', 'error_fotoupload'), self::ERROR_TYPE_GENERAL);
|
||||||
|
|
||||||
|
$akte = $this->AkteModel->loadWhere(array('person_id' => $person_id, 'dokument_kurzbz' => 'Lichtbil'));
|
||||||
|
|
||||||
|
$akteUpdateData = array(
|
||||||
|
'dokument_kurzbz' => 'Lichtbil',
|
||||||
|
'person_id' => $person_id,
|
||||||
|
'inhalt' => $resizedImage1,
|
||||||
|
'mimetype' => 'image/jpg',
|
||||||
|
'erstelltam' => date('c'),
|
||||||
|
'gedruckt' => false,
|
||||||
|
'titel' => 'Lichtbild_' . $person_id . '.jpg',
|
||||||
|
'bezeichnung' => 'Lichtbild gross',
|
||||||
|
'insertamum' => date('c'),
|
||||||
|
'insertvon' => getAuthUID(),
|
||||||
|
);
|
||||||
|
|
||||||
|
if (hasData($akte)) {
|
||||||
|
$akte_id = getData($akte)[0]->akte_id;
|
||||||
|
|
||||||
|
$akteUpdateData['updateamum'] = date('c');
|
||||||
|
$akteUpdateData['updatevon'] = getAuthUID();
|
||||||
|
$akteResult = $this->AkteModel->update(array('akte_id' => $akte_id), $akteUpdateData);
|
||||||
|
} else {
|
||||||
|
$akteResult = $this->AkteModel->insert($akteUpdateData);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (isError($akteResult)) {
|
||||||
|
return $this->terminateWithError(getError($akteResult), self::ERROR_TYPE_GENERAL);
|
||||||
|
}
|
||||||
|
|
||||||
|
$resizedImage2 = $this->_resize($base64, 101, 130);
|
||||||
|
|
||||||
|
if (is_null($resizedImage2))
|
||||||
|
return $this->terminateWithError($this->p->t('header', 'error_fotoupload'), self::ERROR_TYPE_GENERAL);
|
||||||
|
|
||||||
|
$result = $this->_updateFoto($person_id, $resizedImage2);
|
||||||
|
|
||||||
|
if (!isError($result)) {
|
||||||
|
$this->FotostatusPersonModel->insert(array(
|
||||||
|
'person_id' => $person_id,
|
||||||
|
'fotostatus_kurzbz' => 'hochgeladen',
|
||||||
|
'datum' => date('Y-m-d'),
|
||||||
|
'updateamum' => date('c'),
|
||||||
|
'updatevon' => getAuthUID(),
|
||||||
|
'insertamum' => date('c'),
|
||||||
|
'insertvon' => getAuthUID(),
|
||||||
|
));
|
||||||
|
|
||||||
|
return $this->terminateWithSuccess($base64);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
$this->terminateWithError($this->p->t('header', 'error_noPhoto'), self::ERROR_TYPE_GENERAL);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public function deleteFoto($person_id)
|
||||||
|
{
|
||||||
|
if(!$person_id)
|
||||||
|
{
|
||||||
|
return $this->terminateWithError($this->p->t('ui', 'error_missingId', ['id'=> 'Person_id']), self::ERROR_TYPE_GENERAL);
|
||||||
|
}
|
||||||
|
|
||||||
|
$result = $this->_deleteFoto($person_id);
|
||||||
|
|
||||||
|
if (isError($result))
|
||||||
|
{
|
||||||
|
return $this->terminateWithError(getError($result), self::ERROR_TYPE_GENERAL);
|
||||||
|
}
|
||||||
|
return $this->terminateWithSuccess($result);
|
||||||
|
}
|
||||||
|
|
||||||
|
private function _resize($imageData, $maxwidth, $maxheight, $quality = 90)
|
||||||
|
{
|
||||||
|
$meta = getimagesize($imageData);
|
||||||
|
if (!$meta)
|
||||||
|
{
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
$src_width = $meta[0];
|
||||||
|
$src_height = $meta[1];
|
||||||
|
$mime = $meta['mime'];
|
||||||
|
|
||||||
|
switch ($mime) {
|
||||||
|
case 'image/jpeg':
|
||||||
|
case 'image/jpg':
|
||||||
|
$imagecreated = imagecreatefromjpeg($imageData);
|
||||||
|
break;
|
||||||
|
case 'image/png':
|
||||||
|
$imagecreated = imagecreatefrompng($imageData);
|
||||||
|
break;
|
||||||
|
case 'image/gif':
|
||||||
|
$imagecreated = imagecreatefromgif($imageData);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
if (!$imagecreated)
|
||||||
|
{
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
$src_aspect_ratio = $src_width / $src_height;
|
||||||
|
$thu_aspect_ratio = $maxwidth / $maxheight;
|
||||||
|
|
||||||
|
if ($src_width <= $maxwidth && $src_height <= $maxheight)
|
||||||
|
{
|
||||||
|
$thu_width = $src_width;
|
||||||
|
$thu_height = $src_height;
|
||||||
|
}
|
||||||
|
elseif ($thu_aspect_ratio > $src_aspect_ratio)
|
||||||
|
{
|
||||||
|
$thu_width = (int) ($maxheight * $src_aspect_ratio);
|
||||||
|
$thu_height = $maxheight;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
$thu_width = $maxwidth;
|
||||||
|
$thu_height = (int) ($maxwidth / $src_aspect_ratio);
|
||||||
|
}
|
||||||
|
|
||||||
|
$imageScaled = imagecreatetruecolor($thu_width, $thu_height);
|
||||||
|
|
||||||
|
if ($mime === 'image/png')
|
||||||
|
{
|
||||||
|
$background = imagecolorallocate($imageScaled , 0, 0, 0);
|
||||||
|
imagecolortransparent($imageScaled, $background);
|
||||||
|
imagealphablending($imageScaled, false);
|
||||||
|
imagesavealpha($imageScaled, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
imagecopyresampled($imageScaled, $imagecreated, 0, 0, 0, 0, $thu_width, $thu_height, $src_width, $src_height);
|
||||||
|
|
||||||
|
if ($mime === "image/gif")
|
||||||
|
{
|
||||||
|
$background = imagecolorallocate($imageScaled, 0, 0, 0);
|
||||||
|
imagecolortransparent($imageScaled, $background);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!empty($imageScaled))
|
||||||
|
{
|
||||||
|
ob_start();
|
||||||
|
|
||||||
|
if ($mime == 'image/png')
|
||||||
|
imagepng($imageScaled, NULL);
|
||||||
|
else if ($mime === 'image/gif')
|
||||||
|
imagegif($imageScaled, NULL);
|
||||||
|
else
|
||||||
|
imagejpeg($imageScaled, NULL, $quality);
|
||||||
|
|
||||||
|
$resizedImageData = ob_get_contents();
|
||||||
|
ob_end_clean();
|
||||||
|
@imagedestroy($imagecreated);
|
||||||
|
@imagedestroy($imageScaled);
|
||||||
|
|
||||||
|
|
||||||
|
if (!empty($resizedImageData))
|
||||||
|
{
|
||||||
|
return base64_encode($resizedImageData);
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
private function _updateFoto($person_id, $foto)
|
||||||
|
{
|
||||||
|
$personJson['foto'] = $foto;
|
||||||
|
$result = $this->PersonModel->update($person_id, $personJson);
|
||||||
|
|
||||||
|
if (isError($result))
|
||||||
|
{
|
||||||
|
return error($result->msg, EXIT_ERROR);
|
||||||
|
}
|
||||||
|
|
||||||
|
return $result;
|
||||||
|
}
|
||||||
|
|
||||||
|
private function _deleteFoto($person_id)
|
||||||
|
{
|
||||||
|
$personJson['foto'] = null;
|
||||||
|
$result = $this->PersonModel->update($person_id, $personJson);
|
||||||
|
|
||||||
|
if (isError($result))
|
||||||
|
{
|
||||||
|
return error($result->msg, EXIT_ERROR);
|
||||||
|
}
|
||||||
|
|
||||||
|
return $result;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,44 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
if (! defined('BASEPATH')) exit('No direct script access allowed');
|
||||||
|
|
||||||
|
use \DateTime as DateTime;
|
||||||
|
|
||||||
|
class NotizAnrechnung extends Notiz_Controller
|
||||||
|
{
|
||||||
|
public function __construct()
|
||||||
|
{
|
||||||
|
parent::__construct([
|
||||||
|
'isBerechtigt' => ['admin:r', 'assistenz:r'],
|
||||||
|
]);
|
||||||
|
|
||||||
|
//Load Models
|
||||||
|
$this->load->model('person/Notiz_model', 'NotizModel');
|
||||||
|
$this->load->model('person/Notizzuordnung_model', 'NotizzuordnungModel');
|
||||||
|
|
||||||
|
// Load Libraries
|
||||||
|
$this->load->library('VariableLib', ['uid' => getAuthUID()]);
|
||||||
|
|
||||||
|
// Load language phrases
|
||||||
|
$this->loadPhrases([
|
||||||
|
'ui'
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function isBerechtigt($id, $typeId)
|
||||||
|
{
|
||||||
|
if($typeId != "anrechnung_id")
|
||||||
|
{
|
||||||
|
$this->terminateWithError($this->p->t('ui','error_typeNotizIdIncorrect'), self::ERROR_TYPE_GENERAL);
|
||||||
|
}
|
||||||
|
|
||||||
|
//TODO define permission
|
||||||
|
if(!$this->permissionlib->isBerechtigt('admin', 'suid') && !$this->permissionlib->isBerechtigt('assistenz', 'suid'))
|
||||||
|
{
|
||||||
|
$result = $this->p->t('lehre','error_keineSchreibrechte');
|
||||||
|
|
||||||
|
$this->terminateWithError($result, self::ERROR_TYPE_GENERAL);
|
||||||
|
}
|
||||||
|
$this->terminateWithSuccess("berechtigt in überschreibender Funktion");
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,43 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
if (! defined('BASEPATH')) exit('No direct script access allowed');
|
||||||
|
|
||||||
|
use \DateTime as DateTime;
|
||||||
|
|
||||||
|
class NotizBestellung extends Notiz_Controller
|
||||||
|
{
|
||||||
|
public function __construct()
|
||||||
|
{
|
||||||
|
parent::__construct([
|
||||||
|
'isBerechtigt' => ['admin:r', 'assistenz:r'],
|
||||||
|
]);
|
||||||
|
|
||||||
|
//Load Models
|
||||||
|
$this->load->model('person/Notiz_model', 'NotizModel');
|
||||||
|
$this->load->model('person/Notizzuordnung_model', 'NotizzuordnungModel');
|
||||||
|
|
||||||
|
// Load Libraries
|
||||||
|
$this->load->library('VariableLib', ['uid' => getAuthUID()]);
|
||||||
|
|
||||||
|
// Load language phrases
|
||||||
|
$this->loadPhrases([
|
||||||
|
'ui'
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function isBerechtigt($id, $typeId)
|
||||||
|
{
|
||||||
|
if($typeId != "bestellung_id")
|
||||||
|
{
|
||||||
|
$this->terminateWithError($this->p->t('ui','error_typeNotizIdIncorrect'), self::ERROR_TYPE_GENERAL);
|
||||||
|
}
|
||||||
|
//TODO define permission
|
||||||
|
if(!$this->permissionlib->isBerechtigt('admin', 'suid') && !$this->permissionlib->isBerechtigt('assistenz', 'suid'))
|
||||||
|
{
|
||||||
|
$result = $this->p->t('lehre','error_keineSchreibrechte');
|
||||||
|
|
||||||
|
$this->terminateWithError($result, self::ERROR_TYPE_GENERAL);
|
||||||
|
}
|
||||||
|
$this->terminateWithSuccess("berechtigt in überschreibender Funktion");
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -17,5 +17,106 @@ class NotizLehreinheit extends Notiz_Controller
|
|||||||
'getMitarbeiter' => ['admin:r', 'assistenz:r'],
|
'getMitarbeiter' => ['admin:r', 'assistenz:r'],
|
||||||
'isBerechtigt' => ['admin:r', 'assistenz:r'],
|
'isBerechtigt' => ['admin:r', 'assistenz:r'],
|
||||||
]);
|
]);
|
||||||
|
|
||||||
|
//Load Models
|
||||||
|
$this->load->model('person/Notiz_model', 'NotizModel');
|
||||||
|
$this->load->model('person/Notizzuordnung_model', 'NotizzuordnungModel');
|
||||||
|
$this->load->model('education/Lehreinheit_model', 'LehreinheitModel');
|
||||||
|
|
||||||
|
// Load Libraries
|
||||||
|
$this->load->library('VariableLib', ['uid' => getAuthUID()]);
|
||||||
|
|
||||||
|
//Permission checks for allowed Oes
|
||||||
|
$allowedOes = $this->permissionlib->getOE_isEntitledFor('assistenz') ?: [];
|
||||||
|
|
||||||
|
if ($this->router->method == 'addNewNotiz')
|
||||||
|
{
|
||||||
|
$json = $this->input->post('data');
|
||||||
|
$post_data = json_decode($json, true);
|
||||||
|
$lehreinheit_id = $post_data['id'];
|
||||||
|
|
||||||
|
if(!$lehreinheit_id)
|
||||||
|
{
|
||||||
|
return $this->terminateWithError($this->p->t('ui', 'error_missingId', ['id'=> 'Lehreinheit ID']), self::ERROR_TYPE_GENERAL);
|
||||||
|
}
|
||||||
|
$this->_checkAllowedOesFromLehreinheit($lehreinheit_id, $allowedOes);
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($this->router->method == 'updateNotiz')
|
||||||
|
{
|
||||||
|
$json = $this->input->post('data');
|
||||||
|
$post_data = json_decode($json, true);
|
||||||
|
$notiz_id = $post_data['notiz_id'];
|
||||||
|
|
||||||
|
if(!$notiz_id)
|
||||||
|
{
|
||||||
|
return $this->terminateWithError($this->p->t('ui', 'error_missingId', ['id'=> 'Notiz ID']), self::ERROR_TYPE_GENERAL);
|
||||||
|
}
|
||||||
|
|
||||||
|
//get lehreinheit_id
|
||||||
|
$result = $this->NotizzuordnungModel->loadWhere(['notiz_id' => $notiz_id]);
|
||||||
|
|
||||||
|
$data = $this->getDataOrTerminateWithError($result);
|
||||||
|
$lehreinheit_id = current($data)->lehreinheit_id;
|
||||||
|
|
||||||
|
if(!$lehreinheit_id)
|
||||||
|
{
|
||||||
|
return $this->terminateWithError($this->p->t('ui', 'error_missingId', ['id'=> 'Lehreinheit ID']), self::ERROR_TYPE_GENERAL);
|
||||||
|
}
|
||||||
|
$this->_checkAllowedOesFromLehreinheit($lehreinheit_id, $allowedOes);
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($this->router->method == 'deleteNotiz')
|
||||||
|
{
|
||||||
|
$notiz_id = $this->input->post('notiz_id');
|
||||||
|
$lehreinheit_id = $this->input->post('id');
|
||||||
|
|
||||||
|
if(!$notiz_id)
|
||||||
|
{
|
||||||
|
return $this->terminateWithError($this->p->t('ui', 'error_missingId', ['id'=> 'Notiz ID']), self::ERROR_TYPE_GENERAL);
|
||||||
|
}
|
||||||
|
|
||||||
|
if(!$lehreinheit_id)
|
||||||
|
{
|
||||||
|
return $this->terminateWithError($this->p->t('ui', 'error_missingId', ['id'=> 'Lehreinheit ID']), self::ERROR_TYPE_GENERAL);
|
||||||
|
}
|
||||||
|
$this->_checkAllowedOesFromLehreinheit($lehreinheit_id, $allowedOes);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Load language phrases
|
||||||
|
$this->loadPhrases([
|
||||||
|
'ui'
|
||||||
|
]);
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
private function _checkAllowedOesFromLehreinheit($lehreinheit_id, $allowedOes)
|
||||||
|
{
|
||||||
|
//get oe from lehreinheit
|
||||||
|
$result = $this->LehreinheitModel->getOes($lehreinheit_id);
|
||||||
|
$data = $this->getDataOrTerminateWithError($result);
|
||||||
|
$oes = current($data);
|
||||||
|
|
||||||
|
if (!in_array($oes, $allowedOes))
|
||||||
|
{
|
||||||
|
return $this->terminateWithError($this->p->t('ui', 'error_keineBerechtigungStg') . " " . $oes, self::ERROR_TYPE_GENERAL);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public function isBerechtigt($id, $typeId)
|
||||||
|
{
|
||||||
|
if($typeId != "lehreinheit_id")
|
||||||
|
{
|
||||||
|
$this->terminateWithError($this->p->t('ui','error_typeNotizIdIncorrect'), self::ERROR_TYPE_GENERAL);
|
||||||
|
}
|
||||||
|
|
||||||
|
if(!$this->permissionlib->isBerechtigt('admin', 'suid') && !$this->permissionlib->isBerechtigt('assistenz', 'suid'))
|
||||||
|
{
|
||||||
|
$result = $this->p->t('lehre','error_keineSchreibrechte');
|
||||||
|
|
||||||
|
$this->terminateWithError($result, self::ERROR_TYPE_GENERAL);
|
||||||
|
}
|
||||||
|
$this->terminateWithSuccess("berechtigt in überschreibender Funktion");
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|||||||
@@ -0,0 +1,44 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
if (! defined('BASEPATH')) exit('No direct script access allowed');
|
||||||
|
|
||||||
|
use \DateTime as DateTime;
|
||||||
|
|
||||||
|
class NotizMitarbeiter extends Notiz_Controller
|
||||||
|
{
|
||||||
|
public function __construct()
|
||||||
|
{
|
||||||
|
parent::__construct([
|
||||||
|
'isBerechtigt' => ['admin:r', 'assistenz:r'],
|
||||||
|
]);
|
||||||
|
|
||||||
|
//Load Models
|
||||||
|
$this->load->model('person/Notiz_model', 'NotizModel');
|
||||||
|
$this->load->model('person/Notizzuordnung_model', 'NotizzuordnungModel');
|
||||||
|
|
||||||
|
// Load Libraries
|
||||||
|
$this->load->library('VariableLib', ['uid' => getAuthUID()]);
|
||||||
|
|
||||||
|
// Load language phrases
|
||||||
|
$this->loadPhrases([
|
||||||
|
'ui'
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function isBerechtigt($id, $typeId)
|
||||||
|
{
|
||||||
|
if($typeId != "mitarbeiter_uid")
|
||||||
|
{
|
||||||
|
$this->terminateWithError($this->p->t('ui','error_typeNotizIdIncorrect'), self::ERROR_TYPE_GENERAL);
|
||||||
|
}
|
||||||
|
|
||||||
|
//TODO define permission
|
||||||
|
if(!$this->permissionlib->isBerechtigt('admin', 'suid') && !$this->permissionlib->isBerechtigt('assistenz', 'suid'))
|
||||||
|
{
|
||||||
|
$result = $this->p->t('lehre','error_keineSchreibrechte');
|
||||||
|
|
||||||
|
$this->terminateWithError($result, self::ERROR_TYPE_GENERAL);
|
||||||
|
}
|
||||||
|
$this->terminateWithSuccess("berechtigt in überschreibender Funktion");
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -20,33 +20,123 @@ class NotizPerson extends Notiz_Controller
|
|||||||
'isBerechtigt' => ['admin:r', 'assistenz:r'],
|
'isBerechtigt' => ['admin:r', 'assistenz:r'],
|
||||||
'getCountNotes' => ['admin:r', 'assistenz:r'],
|
'getCountNotes' => ['admin:r', 'assistenz:r'],
|
||||||
]);
|
]);
|
||||||
|
|
||||||
|
//Load Models
|
||||||
|
$this->load->model('person/Benutzer_model', 'BenutzerModel');
|
||||||
|
$this->load->model('crm/Student_model', 'StudentModel');
|
||||||
|
|
||||||
|
//Permission checks for allowed Oes
|
||||||
|
if ($this->router->method == 'addNewNotiz')
|
||||||
|
{
|
||||||
|
$json = $this->input->post('data');
|
||||||
|
$post_data = json_decode($json, true);
|
||||||
|
$person_id = $post_data['id'];
|
||||||
|
|
||||||
|
$allowedStgs = $this->permissionlib->getSTG_isEntitledFor('assistenz') ?: [];
|
||||||
|
|
||||||
|
if(!$person_id)
|
||||||
|
{
|
||||||
|
return $this->terminateWithError($this->p->t('ui', 'error_missingId', ['id'=> 'Person ID']), self::ERROR_TYPE_GENERAL);
|
||||||
|
}
|
||||||
|
$this->_checkIfBerechtigungForOneUidExists($person_id, $allowedStgs);
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( $this->router->method == 'updateNotiz')
|
||||||
|
{
|
||||||
|
$json = $this->input->post('data');
|
||||||
|
$post_data = json_decode($json, true);
|
||||||
|
$notiz_id = $post_data['notiz_id'];
|
||||||
|
|
||||||
|
if(!$notiz_id)
|
||||||
|
{
|
||||||
|
return $this->terminateWithError($this->p->t('ui', 'error_missingId', ['id'=> 'Notiz ID']), self::ERROR_TYPE_GENERAL);
|
||||||
|
}
|
||||||
|
|
||||||
|
//get person_id
|
||||||
|
$result = $this->NotizzuordnungModel->loadWhere(['notiz_id' => $notiz_id]);
|
||||||
|
|
||||||
|
$data = $this->getDataOrTerminateWithError($result);
|
||||||
|
$person_id = current($data)->person_id;
|
||||||
|
|
||||||
|
$allowedStgs = $this->permissionlib->getSTG_isEntitledFor('assistenz') ?: [];
|
||||||
|
$this->_checkIfBerechtigungForOneUidExists($person_id, $allowedStgs);
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($this->router->method == 'deleteNotiz' )
|
||||||
|
{
|
||||||
|
$notiz_id = $this->input->post('notiz_id');
|
||||||
|
$person_id = $this->input->post('id');
|
||||||
|
|
||||||
|
if(!$notiz_id)
|
||||||
|
{
|
||||||
|
return $this->terminateWithError($this->p->t('ui', 'error_missingId', ['id'=> 'Notiz ID']), self::ERROR_TYPE_GENERAL);
|
||||||
|
}
|
||||||
|
|
||||||
|
if(!$person_id)
|
||||||
|
{
|
||||||
|
return $this->terminateWithError($this->p->t('ui', 'error_missingId', ['id'=> 'person ID']), self::ERROR_TYPE_GENERAL);
|
||||||
|
}
|
||||||
|
|
||||||
|
$allowedStgs = $this->permissionlib->getSTG_isEntitledFor('assistenz') ?: [];
|
||||||
|
$this->_checkIfBerechtigungForOneUidExists($person_id, $allowedStgs);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public function isBerechtigt($id, $typeId)
|
public function isBerechtigt($id, $typeId)
|
||||||
{
|
{
|
||||||
if($typeId != "person_id")
|
if($typeId != "person_id")
|
||||||
{
|
{
|
||||||
return $this->terminateWithError($this->p->t('ui', 'error_typeNotizIdIncorrect'), self::ERROR_TYPE_GENERAL);
|
$this->terminateWithError($this->p->t('ui', 'error_typeNotizIdIncorrect'), self::ERROR_TYPE_GENERAL);
|
||||||
}
|
}
|
||||||
|
|
||||||
//TODO define permission
|
|
||||||
if (!$this->permissionlib->isBerechtigt('admin', 'suid') && !$this->permissionlib->isBerechtigt('assistenz', 'suid'))
|
if (!$this->permissionlib->isBerechtigt('admin', 'suid') && !$this->permissionlib->isBerechtigt('assistenz', 'suid'))
|
||||||
{
|
{
|
||||||
$result = $this->p->t('lehre', 'error_keineSchreibrechte');
|
$result = $this->p->t('lehre', 'error_keineSchreibrechte');
|
||||||
|
$this->terminateWithError($result, self::ERROR_TYPE_GENERAL);
|
||||||
return $this->terminateWithError($result, self::ERROR_TYPE_GENERAL);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return $this->outputJsonSuccess(true);
|
$this->terminateWithSuccess("berechtigt in überschreibender Funktion");
|
||||||
}
|
}
|
||||||
|
|
||||||
public function loadDokumente()
|
//stv: if person has permission of one studiengang of person -> permission to add/update/delete Note
|
||||||
|
private function _checkIfBerechtigungForOneUidExists($person_id, $allowedStgs)
|
||||||
{
|
{
|
||||||
$notiz_id = $this->input->post('notiz_id');
|
//get all studentUids of person_id
|
||||||
|
$result = $this->BenutzerModel->loadWhere(['person_id' => $person_id]);
|
||||||
|
$data = $this->getDataOrTerminateWithError($result);
|
||||||
|
|
||||||
// TODO(chris): make CI variant of endpoint
|
$checkarray = [];
|
||||||
$this->NotizModel->addSelect($this->NotizModel->escape(base_url('content/notizdokdownload.php?id=')) . ' || campus.tbl_dms_version.dms_id AS preview');
|
foreach ($data as $item)
|
||||||
|
{
|
||||||
return parent::loadDokumente();
|
//check if isStudent
|
||||||
|
$result = $this->StudentModel->isStudent($item->uid);
|
||||||
|
|
||||||
|
$isStudent = $this->getDataOrTerminateWithError($result);
|
||||||
|
if($isStudent)
|
||||||
|
{
|
||||||
|
$checkarray[] = $this->_checkAllowedStgsFromUid($item->uid, $allowedStgs);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
if (!in_array(1, $checkarray))
|
||||||
|
return $this->terminateWithError($this->p->t('ui', 'error_keineBerechtigungStg'), self::ERROR_TYPE_GENERAL);
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
private function _checkAllowedStgsFromUid($student_uid, $allowedStgs)
|
||||||
|
{
|
||||||
|
$this->load->model('crm/Student_model', 'StudentModel');
|
||||||
|
$result = $this->StudentModel->loadWhere(['student_uid' => $student_uid]);
|
||||||
|
|
||||||
|
$data = $this->getDataOrTerminateWithError($result);
|
||||||
|
$studiengang_kz = current($data)->studiengang_kz;
|
||||||
|
|
||||||
|
if (!in_array($studiengang_kz, $allowedStgs))
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
@@ -0,0 +1,117 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
if (! defined('BASEPATH')) exit('No direct script access allowed');
|
||||||
|
|
||||||
|
use \DateTime as DateTime;
|
||||||
|
|
||||||
|
class NotizPrestudent extends Notiz_Controller
|
||||||
|
{
|
||||||
|
public function __construct()
|
||||||
|
{
|
||||||
|
parent::__construct([
|
||||||
|
'isBerechtigt' => ['admin:r', 'assistenz:r'],
|
||||||
|
]);
|
||||||
|
|
||||||
|
//Load Models
|
||||||
|
$this->load->model('person/Notiz_model', 'NotizModel');
|
||||||
|
$this->load->model('person/Notizzuordnung_model', 'NotizzuordnungModel');
|
||||||
|
$this->load->model('crm/Student_model', 'StudentModel');
|
||||||
|
|
||||||
|
// Load Libraries
|
||||||
|
$this->load->library('VariableLib', ['uid' => getAuthUID()]);
|
||||||
|
|
||||||
|
// Load language phrases
|
||||||
|
$this->loadPhrases([
|
||||||
|
'ui'
|
||||||
|
]);
|
||||||
|
|
||||||
|
//Permission checks for Studiengangsarray
|
||||||
|
$allowedStgs = $this->permissionlib->getSTG_isEntitledFor('assistenz') ?: [];
|
||||||
|
|
||||||
|
if ($this->router->method == 'addNewNotiz')
|
||||||
|
{
|
||||||
|
$json = $this->input->post('data');
|
||||||
|
$post_data = json_decode($json, true);
|
||||||
|
$prestudent_id = $post_data['id'];
|
||||||
|
|
||||||
|
if(!$prestudent_id)
|
||||||
|
{
|
||||||
|
return $this->terminateWithError($this->p->t('ui', 'error_missingId', ['id'=> 'Lehreinheit ID']), self::ERROR_TYPE_GENERAL);
|
||||||
|
}
|
||||||
|
$this->_checkAllowedOesFromPrestudent($prestudent_id, $allowedStgs);
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($this->router->method == 'updateNotiz')
|
||||||
|
{
|
||||||
|
$json = $this->input->post('data');
|
||||||
|
$post_data = json_decode($json, true);
|
||||||
|
$notiz_id = $post_data['notiz_id'];
|
||||||
|
|
||||||
|
if(!$notiz_id)
|
||||||
|
{
|
||||||
|
return $this->terminateWithError($this->p->t('ui', 'error_missingId', ['id'=> 'Notiz ID']), self::ERROR_TYPE_GENERAL);
|
||||||
|
}
|
||||||
|
|
||||||
|
//get prestudent_id
|
||||||
|
$result = $this->NotizzuordnungModel->loadWhere(['notiz_id' => $notiz_id]);
|
||||||
|
|
||||||
|
$data = $this->getDataOrTerminateWithError($result);
|
||||||
|
$prestudent_id = current($data)->prestudent_id;
|
||||||
|
|
||||||
|
if(!$prestudent_id)
|
||||||
|
{
|
||||||
|
return $this->terminateWithError($this->p->t('ui', 'error_missingId', ['id'=> 'Prestudent ID']), self::ERROR_TYPE_GENERAL);
|
||||||
|
}
|
||||||
|
$this->_checkAllowedOesFromPrestudent($prestudent_id, $allowedStgs);
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($this->router->method == 'deleteNotiz')
|
||||||
|
{
|
||||||
|
$notiz_id = $this->input->post('notiz_id');
|
||||||
|
$prestudent_id = $this->input->post('id');
|
||||||
|
|
||||||
|
if(!$notiz_id)
|
||||||
|
{
|
||||||
|
return $this->terminateWithError($this->p->t('ui', 'error_missingId', ['id'=> 'Notiz ID']), self::ERROR_TYPE_GENERAL);
|
||||||
|
}
|
||||||
|
|
||||||
|
if(!$prestudent_id)
|
||||||
|
{
|
||||||
|
return $this->terminateWithError($this->p->t('ui', 'error_missingId', ['id'=> 'Prestudent ID']), self::ERROR_TYPE_GENERAL);
|
||||||
|
}
|
||||||
|
$this->_checkAllowedOesFromPrestudent($prestudent_id, $allowedStgs);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public function isBerechtigt($id, $typeId)
|
||||||
|
{
|
||||||
|
if($typeId != "prestudent_id")
|
||||||
|
{
|
||||||
|
$this->terminateWithError($this->p->t('ui','error_typeNotizIdIncorrect'), self::ERROR_TYPE_GENERAL);
|
||||||
|
}
|
||||||
|
|
||||||
|
if(!$this->permissionlib->isBerechtigt('admin', 'suid') && !$this->permissionlib->isBerechtigt('assistenz', 'suid'))
|
||||||
|
{
|
||||||
|
$result = $this->p->t('lehre','error_keineSchreibrechte');
|
||||||
|
|
||||||
|
$this->terminateWithError($result, self::ERROR_TYPE_GENERAL);
|
||||||
|
}
|
||||||
|
$this->terminateWithSuccess("berechtigt in überschreibender Funktion");
|
||||||
|
}
|
||||||
|
|
||||||
|
private function _checkAllowedOesFromPrestudent($prestudent_id, $allowedStgs)
|
||||||
|
{
|
||||||
|
$student_uid = $this->StudentModel->getUID($prestudent_id);
|
||||||
|
|
||||||
|
$result = $this->StudentModel->loadWhere(['student_uid' => $student_uid]);
|
||||||
|
|
||||||
|
$data = $this->getDataOrTerminateWithError($result);
|
||||||
|
$studiengang_kz = current($data)->studiengang_kz;
|
||||||
|
|
||||||
|
if (!in_array($studiengang_kz, $allowedStgs))
|
||||||
|
{
|
||||||
|
return $this->terminateWithError($this->p->t('ui', 'error_keineBerechtigungStg'), self::ERROR_TYPE_GENERAL);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,32 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
if (! defined('BASEPATH')) exit('No direct script access allowed');
|
||||||
|
|
||||||
|
use \DateTime as DateTime;
|
||||||
|
|
||||||
|
class NotizProjekt extends Notiz_Controller
|
||||||
|
{
|
||||||
|
public function __construct()
|
||||||
|
{
|
||||||
|
parent::__construct([
|
||||||
|
'isBerechtigt' => ['admin:r', 'assistenz:r'],
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function isBerechtigt($id, $typeId)
|
||||||
|
{
|
||||||
|
if($typeId != "projekt_kurzbz")
|
||||||
|
{
|
||||||
|
$this->terminateWithError($this->p->t('ui','error_typeNotizIdIncorrect'), self::ERROR_TYPE_GENERAL);
|
||||||
|
}
|
||||||
|
|
||||||
|
//TODO define permission
|
||||||
|
if(!$this->permissionlib->isBerechtigt('admin', 'suid') && !$this->permissionlib->isBerechtigt('assistenz', 'suid'))
|
||||||
|
{
|
||||||
|
$result = $this->p->t('lehre','error_keineSchreibrechte');
|
||||||
|
|
||||||
|
$this->terminateWithError($result, self::ERROR_TYPE_GENERAL);
|
||||||
|
}
|
||||||
|
$this->terminateWithSuccess("berechtigt in überschreibender Funktion");
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,32 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
if (! defined('BASEPATH')) exit('No direct script access allowed');
|
||||||
|
|
||||||
|
use \DateTime as DateTime;
|
||||||
|
|
||||||
|
class NotizProjektphase extends Notiz_Controller
|
||||||
|
{
|
||||||
|
public function __construct()
|
||||||
|
{
|
||||||
|
parent::__construct([
|
||||||
|
'isBerechtigt' => ['admin:r', 'assistenz:r'],
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function isBerechtigt($id, $typeId)
|
||||||
|
{
|
||||||
|
if($typeId != "projektphase_id")
|
||||||
|
{
|
||||||
|
$this->terminateWithError($this->p->t('ui','error_typeNotizIdIncorrect'), self::ERROR_TYPE_GENERAL);
|
||||||
|
}
|
||||||
|
|
||||||
|
//TODO define permission
|
||||||
|
if(!$this->permissionlib->isBerechtigt('admin', 'suid') && !$this->permissionlib->isBerechtigt('assistenz', 'suid'))
|
||||||
|
{
|
||||||
|
$result = $this->p->t('lehre','error_keineSchreibrechte');
|
||||||
|
|
||||||
|
$this->terminateWithError($result, self::ERROR_TYPE_GENERAL);
|
||||||
|
}
|
||||||
|
$this->terminateWithSuccess("berechtigt in überschreibender Funktion");
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,32 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
if (! defined('BASEPATH')) exit('No direct script access allowed');
|
||||||
|
|
||||||
|
use \DateTime as DateTime;
|
||||||
|
|
||||||
|
class NotizProjekttask extends Notiz_Controller
|
||||||
|
{
|
||||||
|
public function __construct()
|
||||||
|
{
|
||||||
|
parent::__construct([
|
||||||
|
'isBerechtigt' => ['admin:r', 'assistenz:r'],
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function isBerechtigt($id, $typeId)
|
||||||
|
{
|
||||||
|
if($typeId != "projekttask_id")
|
||||||
|
{
|
||||||
|
$this->terminateWithError($this->p->t('ui','error_typeNotizIdIncorrect'), self::ERROR_TYPE_GENERAL);
|
||||||
|
}
|
||||||
|
|
||||||
|
//TODO define permission
|
||||||
|
if(!$this->permissionlib->isBerechtigt('admin', 'suid') && !$this->permissionlib->isBerechtigt('assistenz', 'suid'))
|
||||||
|
{
|
||||||
|
$result = $this->p->t('lehre','error_keineSchreibrechte');
|
||||||
|
|
||||||
|
$this->terminateWithError($result, self::ERROR_TYPE_GENERAL);
|
||||||
|
}
|
||||||
|
$this->terminateWithSuccess("berechtigt in überschreibender Funktion");
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -36,15 +36,44 @@ class Aufnahmetermine extends FHCAPI_Controller
|
|||||||
// Load models
|
// Load models
|
||||||
$this->load->model('crm/Reihungstest_model', 'ReihungstestModel');
|
$this->load->model('crm/Reihungstest_model', 'ReihungstestModel');
|
||||||
$this->load->model('crm/RtPerson_model', 'RtPersonModel');
|
$this->load->model('crm/RtPerson_model', 'RtPersonModel');
|
||||||
|
$this->load->model('organisation/Studienplan_model', 'StudienplanModel');
|
||||||
|
$this->load->model('organisation/Studienordnung_model', 'StudienordnungModel');
|
||||||
|
$this->load->model('organisation/Studiengang_model', 'StudiengangModel');
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getAufnahmetermine($person_id)
|
public function getAufnahmetermine($person_id)
|
||||||
{
|
{
|
||||||
$result = $this->ReihungstestModel->getReihungstestPerson($person_id);
|
$result = $this->ReihungstestModel->getReihungstestPerson($person_id);
|
||||||
|
$arrayRt = $this->getDataOrTerminateWithError($result);
|
||||||
|
|
||||||
$data = $this->getDataOrTerminateWithError($result);
|
foreach ($arrayRt as $item) {
|
||||||
|
//Studienplan
|
||||||
|
$result = $this->StudienplanModel->loadWhere([
|
||||||
|
'studienplan_id' => $item->studienplan_id
|
||||||
|
]);
|
||||||
|
$data = $this->getDataOrTerminateWithError($result);
|
||||||
|
$studienordnung_id_ber = current($data)->studienordnung_id;
|
||||||
|
|
||||||
$this->terminateWithSuccess($data);
|
//Studienordnung
|
||||||
|
$result = $this->StudienordnungModel->loadWhere([
|
||||||
|
'studienordnung_id' => $studienordnung_id_ber
|
||||||
|
]);
|
||||||
|
$data = $this->getDataOrTerminateWithError($result);
|
||||||
|
$studiengang_kz_ber = current($data)->studiengang_kz;
|
||||||
|
|
||||||
|
//Studiengang von studiengang_kz_ber
|
||||||
|
$result = $this->StudiengangModel->load($studiengang_kz_ber);
|
||||||
|
$data = $this->getDataOrTerminateWithError($result);
|
||||||
|
|
||||||
|
$studiengangkurzbzlang_ber = current($data)->kurzbzlang;
|
||||||
|
$typ_ber = current($data)->typ;
|
||||||
|
|
||||||
|
//add to Array
|
||||||
|
$item->studiengang_kz_ber = $studiengang_kz_ber;
|
||||||
|
$item->studiengangkurzbzlang_ber = $studiengangkurzbzlang_ber;
|
||||||
|
$item->studiengangtyp_ber = $typ_ber;
|
||||||
|
}
|
||||||
|
$this->terminateWithSuccess($arrayRt);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function insertAufnahmetermin()
|
public function insertAufnahmetermin()
|
||||||
@@ -60,7 +89,6 @@ class Aufnahmetermine extends FHCAPI_Controller
|
|||||||
return $this->terminateWithError($this->p->t('ui', 'error_missingId', ['id'=> 'Person ID']), self::ERROR_TYPE_GENERAL);
|
return $this->terminateWithError($this->p->t('ui', 'error_missingId', ['id'=> 'Person ID']), self::ERROR_TYPE_GENERAL);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
$rt_id = (isset($formData['rt_id']) && !empty($formData['rt_id'])) ? $formData['rt_id'] : null;
|
$rt_id = (isset($formData['rt_id']) && !empty($formData['rt_id'])) ? $formData['rt_id'] : null;
|
||||||
$anmeldedatum = (isset($formData['anmeldedatum']) && !empty($formData['anmeldedatum'])) ? $formData['anmeldedatum'] : null;
|
$anmeldedatum = (isset($formData['anmeldedatum']) && !empty($formData['anmeldedatum'])) ? $formData['anmeldedatum'] : null;
|
||||||
$teilgenommen = (isset($formData['teilgenommen']) && !empty($formData['teilgenommen'])) ? $formData['teilgenommen'] : false;
|
$teilgenommen = (isset($formData['teilgenommen']) && !empty($formData['teilgenommen'])) ? $formData['teilgenommen'] : false;
|
||||||
@@ -224,7 +252,11 @@ class Aufnahmetermine extends FHCAPI_Controller
|
|||||||
)
|
)
|
||||||
);
|
);
|
||||||
|
|
||||||
$data = $this->getDataOrTerminateWithError($result);
|
//check if existing placementtest
|
||||||
|
if(!hasData($result))
|
||||||
|
$this->terminateWithSuccess([]);
|
||||||
|
else
|
||||||
|
$data = getData($result);
|
||||||
|
|
||||||
$studienplan_arr = [];
|
$studienplan_arr = [];
|
||||||
$include_ids = [];
|
$include_ids = [];
|
||||||
@@ -233,12 +265,18 @@ class Aufnahmetermine extends FHCAPI_Controller
|
|||||||
if($item->studienplan_id != null)
|
if($item->studienplan_id != null)
|
||||||
$studienplan_arr[] = $item->studienplan_id;
|
$studienplan_arr[] = $item->studienplan_id;
|
||||||
}
|
}
|
||||||
|
if(!hasData($studienplan_arr))
|
||||||
|
$this->terminateWithSuccess([]);
|
||||||
|
|
||||||
//get Placementtests Person
|
//get Placementtests Person
|
||||||
$person_id = $this->_getPersonId($prestudent_id);
|
$person_id = $this->_getPersonId($prestudent_id);
|
||||||
$resultRt = $this->ReihungstestModel->getReihungstestPerson($person_id);
|
$resultRt = $this->ReihungstestModel->getReihungstestPerson($person_id);
|
||||||
|
|
||||||
$dataRt = $this->getDataOrTerminateWithError($resultRt);
|
//check if existing placementtest
|
||||||
|
if(!hasData($result))
|
||||||
|
$this->terminateWithSuccess([]);
|
||||||
|
else
|
||||||
|
$dataRt = getData($resultRt);
|
||||||
|
|
||||||
foreach ($dataRt as $item)
|
foreach ($dataRt as $item)
|
||||||
{
|
{
|
||||||
@@ -354,6 +392,7 @@ class Aufnahmetermine extends FHCAPI_Controller
|
|||||||
$person_id = $this->input->get('person_id');
|
$person_id = $this->input->get('person_id');
|
||||||
$punkte = $this->input->get('punkte');
|
$punkte = $this->input->get('punkte');
|
||||||
$reihungstest_id = $this->input->get('reihungstest_id');
|
$reihungstest_id = $this->input->get('reihungstest_id');
|
||||||
|
$has_excluded_gebiete = $this->input->get('hasExcludedAreas');
|
||||||
|
|
||||||
if(!$reihungstest_id)
|
if(!$reihungstest_id)
|
||||||
{
|
{
|
||||||
@@ -364,22 +403,27 @@ class Aufnahmetermine extends FHCAPI_Controller
|
|||||||
$studiengang_kz = $this->input->get('studiengang_kz');
|
$studiengang_kz = $this->input->get('studiengang_kz');
|
||||||
|
|
||||||
$this->load->model('testtool/Ablauf_model', 'AblaufModel');
|
$this->load->model('testtool/Ablauf_model', 'AblaufModel');
|
||||||
$result = $this->AblaufModel->getAblaufGebieteAndGewichte($studiengang_kz);
|
$result = $this->AblaufModel->getAblaufGebieteAndGewichte($studiengang_kz, 1);
|
||||||
$data = $this->getDataOrTerminateWithError($result);
|
$data = $this->getDataOrTerminateWithError($result);
|
||||||
|
|
||||||
$weightedArray = [];
|
$weightedArray = [];
|
||||||
|
$basis_gebiet_id_arr = [];
|
||||||
|
$basis_gebiet_id_toString = '';
|
||||||
foreach ($data as $abl)
|
foreach ($data as $abl)
|
||||||
{
|
{
|
||||||
$weightedArray[$abl->gebiet_id] = $abl->gewicht;
|
$weightedArray[$abl->gebiet_id] = $abl->gewicht;
|
||||||
|
$basis_gebiet_id_arr[]= $abl->gebiet_id;
|
||||||
}
|
}
|
||||||
|
$basis_gebiet_id_toString = implode(', ', $basis_gebiet_id_arr);
|
||||||
|
|
||||||
$result = $this->ReihungstestModel->getReihungstestErgebnisPerson($person_id, $punkte, $reihungstest_id, $weightedArray);
|
$result = $this->ReihungstestModel->getReihungstestErgebnisPerson(
|
||||||
|
$person_id,
|
||||||
/* if (isError($result))
|
$punkte,
|
||||||
{
|
$reihungstest_id,
|
||||||
$this->terminateWithError($result, self::ERROR_TYPE_GENERAL);
|
$weightedArray,
|
||||||
}*/
|
$has_excluded_gebiete,
|
||||||
|
$basis_gebiet_id_toString
|
||||||
|
);
|
||||||
$this->terminateWithSuccess($result);
|
$this->terminateWithSuccess($result);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -200,7 +200,8 @@ class Config extends FHCAPI_Controller
|
|||||||
'type' => 'select',
|
'type' => 'select',
|
||||||
'values' => $buchungstyp_kurzbz_plus_all,
|
'values' => $buchungstyp_kurzbz_plus_all,
|
||||||
'value_key' => 'buchungstyp_kurzbz',
|
'value_key' => 'buchungstyp_kurzbz',
|
||||||
'label_key' => 'beschreibung'
|
'label_key' => 'beschreibung',
|
||||||
|
'default' => 'all'
|
||||||
],
|
],
|
||||||
'samestg' => [
|
'samestg' => [
|
||||||
'type' => 'bool',
|
'type' => 'bool',
|
||||||
@@ -226,7 +227,8 @@ class Config extends FHCAPI_Controller
|
|||||||
'type' => 'select',
|
'type' => 'select',
|
||||||
'values' => $buchungstyp_kurzbz_plus_all,
|
'values' => $buchungstyp_kurzbz_plus_all,
|
||||||
'value_key' => 'buchungstyp_kurzbz',
|
'value_key' => 'buchungstyp_kurzbz',
|
||||||
'label_key' => 'beschreibung'
|
'label_key' => 'beschreibung',
|
||||||
|
'default' => 'all'
|
||||||
],
|
],
|
||||||
'samestg' => [
|
'samestg' => [
|
||||||
'type' => 'bool',
|
'type' => 'bool',
|
||||||
|
|||||||
@@ -753,6 +753,10 @@ class Dokumente extends FHCAPI_Controller
|
|||||||
);
|
);
|
||||||
|
|
||||||
$data = $this->getDataOrTerminateWithError($result);
|
$data = $this->getDataOrTerminateWithError($result);
|
||||||
|
if(!(is_array($data) && count($data) > 0))
|
||||||
|
{
|
||||||
|
return null;
|
||||||
|
}
|
||||||
$student = current($data);
|
$student = current($data);
|
||||||
|
|
||||||
return $student->student_uid;
|
return $student->student_uid;
|
||||||
|
|||||||
@@ -108,6 +108,10 @@ class Student extends FHCAPI_Controller
|
|||||||
$this->PrestudentModel->addSelect('p.matr_nr');
|
$this->PrestudentModel->addSelect('p.matr_nr');
|
||||||
$this->PrestudentModel->addSelect('p.anrede');
|
$this->PrestudentModel->addSelect('p.anrede');
|
||||||
$this->PrestudentModel->addSelect('p.zugangscode');
|
$this->PrestudentModel->addSelect('p.zugangscode');
|
||||||
|
if($this->permissionlib->isBerechtigt('student/bpk'))
|
||||||
|
{
|
||||||
|
$this->PrestudentModel->addSelect('p.bpk');
|
||||||
|
}
|
||||||
|
|
||||||
if (defined('ACTIVE_ADDONS') && strpos(ACTIVE_ADDONS, 'bewerbung') !== false) {
|
if (defined('ACTIVE_ADDONS') && strpos(ACTIVE_ADDONS, 'bewerbung') !== false) {
|
||||||
$this->PrestudentModel->addSelect(
|
$this->PrestudentModel->addSelect(
|
||||||
|
|||||||
@@ -614,7 +614,7 @@ class Students extends FHCAPI_Controller
|
|||||||
if (!$verband && !$gruppe && $orgform_kurzbz !== null) {
|
if (!$verband && !$gruppe && $orgform_kurzbz !== null) {
|
||||||
$this->PrestudentModel->db->where(
|
$this->PrestudentModel->db->where(
|
||||||
"(
|
"(
|
||||||
SELECT orgform_kurzbz
|
SELECT orgform_kurzbz
|
||||||
FROM public.tbl_prestudentstatus
|
FROM public.tbl_prestudentstatus
|
||||||
WHERE prestudent_id=tbl_prestudent.prestudent_id
|
WHERE prestudent_id=tbl_prestudent.prestudent_id
|
||||||
AND studiensemester_kurzbz=" . $this->PrestudentModel->escape($studiensemester_kurzbz) . "
|
AND studiensemester_kurzbz=" . $this->PrestudentModel->escape($studiensemester_kurzbz) . "
|
||||||
@@ -854,6 +854,41 @@ class Students extends FHCAPI_Controller
|
|||||||
{
|
{
|
||||||
$stdsemEsc = $studiensemester_kurzbz ? $this->PrestudentModel->escape($studiensemester_kurzbz) : 'NULL';
|
$stdsemEsc = $studiensemester_kurzbz ? $this->PrestudentModel->escape($studiensemester_kurzbz) : 'NULL';
|
||||||
|
|
||||||
|
$this->load->config('stv');
|
||||||
|
$tags = $this->config->item('stv_prestudent_tags');
|
||||||
|
|
||||||
|
$whereTags = '';
|
||||||
|
if (is_array($tags) && !isEmptyArray($tags)) {
|
||||||
|
$tags = array_keys($tags);
|
||||||
|
|
||||||
|
foreach ($tags as $key => $tag) {
|
||||||
|
$tags[$key] = $this->db->escape($tag);
|
||||||
|
}
|
||||||
|
$whereTags = " AND nt.typ_kurzbz IN (" . implode(",", $tags) . ")";
|
||||||
|
}
|
||||||
|
$subQueryTag = "
|
||||||
|
(
|
||||||
|
SELECT
|
||||||
|
tag.prestudent_id,
|
||||||
|
COALESCE(json_agg(tag ORDER BY tag.done), '[]'::json) AS tags
|
||||||
|
FROM (
|
||||||
|
SELECT DISTINCT ON (n.notiz_id)
|
||||||
|
n.notiz_id AS id,
|
||||||
|
nt.typ_kurzbz,
|
||||||
|
array_to_json(nt.bezeichnung_mehrsprachig)->>0 AS beschreibung,
|
||||||
|
n.text AS notiz,
|
||||||
|
nt.style,
|
||||||
|
n.erledigt AS done,
|
||||||
|
nz.prestudent_id
|
||||||
|
FROM public.tbl_notizzuordnung AS nz
|
||||||
|
JOIN public.tbl_notiz AS n ON nz.notiz_id = n.notiz_id
|
||||||
|
JOIN public.tbl_notiz_typ AS nt ON n.typ = nt.typ_kurzbz "
|
||||||
|
. $whereTags .
|
||||||
|
"
|
||||||
|
) AS tag
|
||||||
|
GROUP BY tag.prestudent_id
|
||||||
|
) AS tag_data_agg
|
||||||
|
";
|
||||||
|
|
||||||
$this->PrestudentModel->addJoin('public.tbl_studiengang stg', 'studiengang_kz', 'LEFT');
|
$this->PrestudentModel->addJoin('public.tbl_studiengang stg', 'studiengang_kz', 'LEFT');
|
||||||
$this->PrestudentModel->addJoin('public.tbl_person p', 'person_id');
|
$this->PrestudentModel->addJoin('public.tbl_person p', 'person_id');
|
||||||
@@ -876,8 +911,11 @@ class Students extends FHCAPI_Controller
|
|||||||
AND ps.studiensemester_kurzbz=public.get_stdsem_prestudent(tbl_prestudent.prestudent_id, ' . $stdsemEsc . ')
|
AND ps.studiensemester_kurzbz=public.get_stdsem_prestudent(tbl_prestudent.prestudent_id, ' . $stdsemEsc . ')
|
||||||
AND ps.ausbildungssemester=public.get_absem_prestudent(tbl_prestudent.prestudent_id, ' . $stdsemEsc . ')', 'LEFT');
|
AND ps.ausbildungssemester=public.get_absem_prestudent(tbl_prestudent.prestudent_id, ' . $stdsemEsc . ')', 'LEFT');
|
||||||
|
|
||||||
|
$this->PrestudentModel->addJoin($subQueryTag, 'tag_data_agg.prestudent_id = tbl_prestudent.prestudent_id', 'LEFT');
|
||||||
|
|
||||||
|
|
||||||
$this->PrestudentModel->addSelect("b.uid");
|
$this->PrestudentModel->addSelect("b.uid");
|
||||||
|
$this->PrestudentModel->addSelect('tag_data_agg.tags');
|
||||||
$this->PrestudentModel->addSelect('titelpre');
|
$this->PrestudentModel->addSelect('titelpre');
|
||||||
$this->PrestudentModel->addSelect('nachname');
|
$this->PrestudentModel->addSelect('nachname');
|
||||||
$this->PrestudentModel->addSelect('vorname');
|
$this->PrestudentModel->addSelect('vorname');
|
||||||
@@ -935,6 +973,7 @@ class Students extends FHCAPI_Controller
|
|||||||
|
|
||||||
$this->PrestudentModel->addSelect('mentor');
|
$this->PrestudentModel->addSelect('mentor');
|
||||||
$this->PrestudentModel->addSelect('b.aktiv AS bnaktiv');
|
$this->PrestudentModel->addSelect('b.aktiv AS bnaktiv');
|
||||||
|
$this->PrestudentModel->addSelect('unruly');
|
||||||
|
|
||||||
$this->PrestudentModel->db->where_in('tbl_prestudent.studiengang_kz', $this->allowedStgs);
|
$this->PrestudentModel->db->where_in('tbl_prestudent.studiengang_kz', $this->allowedStgs);
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,48 @@
|
|||||||
|
<?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
|
||||||
|
]);
|
||||||
|
|
||||||
|
$this->config->load('stv');
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getTag($readonly_tags = null)
|
||||||
|
{
|
||||||
|
parent::getTag($this->config->item('stv_prestudent_tags'));
|
||||||
|
}
|
||||||
|
public function getTags($tags = null)
|
||||||
|
{
|
||||||
|
parent::getTags($this->config->item('stv_prestudent_tags'));
|
||||||
|
}
|
||||||
|
public function addTag($withZuordnung = true, $updatable_tags = null)
|
||||||
|
{
|
||||||
|
parent::addTag(true, $this->config->item('stv_prestudent_tags'));
|
||||||
|
}
|
||||||
|
public function updateTag($updatable_tags = null)
|
||||||
|
{
|
||||||
|
parent::updateTag($this->config->item('stv_prestudent_tags'));
|
||||||
|
}
|
||||||
|
public function deleteTag($withZuordnung = true, $updatable_tags = null)
|
||||||
|
{
|
||||||
|
parent::deleteTag(true, $this->config->item('stv_prestudent_tags'));
|
||||||
|
}
|
||||||
|
public function doneTag($updatable_tags = null)
|
||||||
|
{
|
||||||
|
parent::doneTag($this->config->item('stv_prestudent_tags'));
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,62 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* Copyright (C) 2024 fhcomplete.org
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
if (!defined('BASEPATH')) exit('No direct script access allowed');
|
||||||
|
|
||||||
|
use CI3_Events as Events;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This controller operates between (interface) the JS (GUI) and the back-end
|
||||||
|
* Provides data to the ajax get calls about the VV Config
|
||||||
|
* This controller works with JSON calls on the HTTP GET or POST and the output is always JSON
|
||||||
|
*/
|
||||||
|
class Config extends FHCAPI_Controller
|
||||||
|
{
|
||||||
|
public function __construct()
|
||||||
|
{
|
||||||
|
parent::__construct([
|
||||||
|
'printDocument' => ['vertrag/mitarbeiter:r'],
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function printDocument()
|
||||||
|
{
|
||||||
|
$params = [];
|
||||||
|
$menu = [];
|
||||||
|
|
||||||
|
Events::trigger(
|
||||||
|
'multiActionPrintHonorarvertrag',
|
||||||
|
// passing $menu per reference
|
||||||
|
function & () use (&$menu) {
|
||||||
|
return $menu;
|
||||||
|
},
|
||||||
|
$params
|
||||||
|
);
|
||||||
|
|
||||||
|
if (is_array($menu) && isset($menu[0]))
|
||||||
|
{
|
||||||
|
$this->terminateWithSuccess($menu[0]);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// $this->terminateWithError('Error with Event 'multiActionPrintHonorarvertrag');
|
||||||
|
$this->terminateWithSuccess();
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -26,9 +26,6 @@ class Vertraege extends FHCAPI_Controller
|
|||||||
'deleteLehrauftrag' =>['vertrag/mitarbeiter:w'],
|
'deleteLehrauftrag' =>['vertrag/mitarbeiter:w'],
|
||||||
'deleteBetreuung' =>['vertrag/mitarbeiter:w'],
|
'deleteBetreuung' =>['vertrag/mitarbeiter:w'],
|
||||||
'getMitarbeiter' => ['vertrag/mitarbeiter:r'],
|
'getMitarbeiter' => ['vertrag/mitarbeiter:r'],
|
||||||
'getHeader' => ['vertrag/mitarbeiter:r'],
|
|
||||||
'getPersonAbteilung' => ['vertrag/mitarbeiter:r'],
|
|
||||||
'getLeitungOrg' => ['vertrag/mitarbeiter:r'],
|
|
||||||
]);
|
]);
|
||||||
|
|
||||||
//Load Models and Libraries
|
//Load Models and Libraries
|
||||||
@@ -241,7 +238,7 @@ class Vertraege extends FHCAPI_Controller
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
$this->db->trans_complete();
|
$this->db->trans_complete();
|
||||||
$this->terminateWithSuccess(true);
|
$this->terminateWithSuccess($vertrag_id);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function updateContract()
|
public function updateContract()
|
||||||
@@ -358,7 +355,7 @@ class Vertraege extends FHCAPI_Controller
|
|||||||
}
|
}
|
||||||
$this->db->trans_complete();
|
$this->db->trans_complete();
|
||||||
|
|
||||||
$this->terminateWithSuccess(true);
|
$this->terminateWithSuccess($vertrag_id);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function loadContract($vertrag_id)
|
public function loadContract($vertrag_id)
|
||||||
@@ -684,37 +681,4 @@ class Vertraege extends FHCAPI_Controller
|
|||||||
}
|
}
|
||||||
return $this->terminateWithSuccess(getData($result));
|
return $this->terminateWithSuccess(getData($result));
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getPersonAbteilung($mitarbeiter_uid)
|
|
||||||
{
|
|
||||||
$this->load->model('ressource/Mitarbeiter_model', 'Mitarbeitermodel');
|
|
||||||
|
|
||||||
$result = $this->Mitarbeitermodel->getPersonAbteilung($mitarbeiter_uid);
|
|
||||||
|
|
||||||
$data = $this->getDataOrTerminateWithError($result);
|
|
||||||
|
|
||||||
$this->terminateWithSuccess(current($data));
|
|
||||||
}
|
|
||||||
|
|
||||||
public function getLeitungOrg($oekurzbz)
|
|
||||||
{
|
|
||||||
$this->load->model('ressource/Mitarbeiter_model', 'Mitarbeitermodel');
|
|
||||||
|
|
||||||
$result = $this->Mitarbeitermodel->getLeitungOrg($oekurzbz);
|
|
||||||
|
|
||||||
$data = $this->getDataOrTerminateWithError($result);
|
|
||||||
|
|
||||||
$this->terminateWithSuccess(current($data));
|
|
||||||
}
|
|
||||||
|
|
||||||
public function getHeader($person_id)
|
|
||||||
{
|
|
||||||
$this->load->model('ressource/Mitarbeiter_model', 'Mitarbeitermodel');
|
|
||||||
|
|
||||||
$result = $this->Mitarbeitermodel->getHeader($person_id);
|
|
||||||
|
|
||||||
$data = $this->getDataOrTerminateWithError($result);
|
|
||||||
|
|
||||||
$this->terminateWithSuccess(current($data));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -35,7 +35,7 @@ class CI3_Events
|
|||||||
});
|
});
|
||||||
self::$eventsSorted[$event] = true;
|
self::$eventsSorted[$event] = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
foreach (self::$events[$event] as $conf) {
|
foreach (self::$events[$event] as $conf) {
|
||||||
$conf[1](...$args);
|
$conf[1](...$args);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ abstract class Notiz_Controller extends FHCAPI_Controller
|
|||||||
{
|
{
|
||||||
const DEFAULT_PERMISSION_R = 'admin:r';
|
const DEFAULT_PERMISSION_R = 'admin:r';
|
||||||
const DEFAULT_PERMISSION_RW = 'admin:rw';
|
const DEFAULT_PERMISSION_RW = 'admin:rw';
|
||||||
//public function __construct($zuordnung = 'person/Notizzuordnung_model')
|
|
||||||
public function __construct($permissions)
|
public function __construct($permissions)
|
||||||
{
|
{
|
||||||
$default_permissions = [
|
$default_permissions = [
|
||||||
@@ -97,13 +97,13 @@ abstract class Notiz_Controller extends FHCAPI_Controller
|
|||||||
if (isError($result)) {
|
if (isError($result)) {
|
||||||
$this->terminateWithError(getError($result), self::ERROR_TYPE_GENERAL);
|
$this->terminateWithError(getError($result), self::ERROR_TYPE_GENERAL);
|
||||||
}
|
}
|
||||||
return $this->terminateWithSuccess(getData($result) ?: []);
|
$this->terminateWithSuccess(getData($result) ?: []);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//Override function
|
//Override function
|
||||||
protected function isBerechtigt($id, $typeId){
|
protected function isBerechtigt($id, $typeId){
|
||||||
return $this->terminateWithError("in abstract function: define right in extension", self::ERROR_TYPE_GENERAL);
|
$this->terminateWithError("in abstract function: define right in extension", self::ERROR_TYPE_GENERAL);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function loadNotiz()
|
public function loadNotiz()
|
||||||
@@ -112,7 +112,6 @@ abstract class Notiz_Controller extends FHCAPI_Controller
|
|||||||
|
|
||||||
$notiz_id = $this->input->post('notiz_id');
|
$notiz_id = $this->input->post('notiz_id');
|
||||||
|
|
||||||
//$this->load->model('person/Notiz_model', 'NotizModel');
|
|
||||||
$this->NotizModel->addJoin('public.tbl_notiz_dokument', 'notiz_id', 'LEFT');
|
$this->NotizModel->addJoin('public.tbl_notiz_dokument', 'notiz_id', 'LEFT');
|
||||||
$this->NotizModel->addSelect('*');
|
$this->NotizModel->addSelect('*');
|
||||||
$this->NotizModel->addSelect("TO_CHAR(CASE WHEN public.tbl_notiz.updateamum >= public.tbl_notiz.insertamum
|
$this->NotizModel->addSelect("TO_CHAR(CASE WHEN public.tbl_notiz.updateamum >= public.tbl_notiz.insertamum
|
||||||
@@ -143,14 +142,9 @@ abstract class Notiz_Controller extends FHCAPI_Controller
|
|||||||
|
|
||||||
$uid = getAuthUID();
|
$uid = getAuthUID();
|
||||||
|
|
||||||
if (isset($_POST['data']))
|
$json = $this->input->post('data');
|
||||||
{
|
$post_data = json_decode($json, true);
|
||||||
$data = json_decode($_POST['data']);
|
$this->form_validation->set_data($post_data);
|
||||||
unset($_POST['data']);
|
|
||||||
foreach ($data as $k => $v) {
|
|
||||||
$_POST[$k] = $v;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
//Form Validation
|
//Form Validation
|
||||||
$this->form_validation->set_rules('titel', 'Titel', 'required', [
|
$this->form_validation->set_rules('titel', 'Titel', 'required', [
|
||||||
@@ -166,26 +160,25 @@ abstract class Notiz_Controller extends FHCAPI_Controller
|
|||||||
$this->terminateWithValidationErrors($this->form_validation->error_array());
|
$this->terminateWithValidationErrors($this->form_validation->error_array());
|
||||||
}
|
}
|
||||||
|
|
||||||
$titel = $this->input->post('titel');
|
$titel = $post_data['titel'];
|
||||||
$text = $this->input->post('text');
|
$text = $post_data['text'];
|
||||||
$erledigt = $this->input->post('erledigt');
|
$erledigt = $post_data['erledigt'];
|
||||||
$verfasser_uid = isset($_POST['verfasser']) ? $_POST['verfasser'] : $uid;
|
$bearbeiter_uid = isset($post_data['bearbeiter']) ? $post_data['bearbeiter'] : null;
|
||||||
$bearbeiter_uid = isset($_POST['bearbeiter']) ? $_POST['bearbeiter'] : null;
|
$type = $post_data['typeId'];
|
||||||
$type = $this->input->post('typeId');
|
$start = isset($post_data['start']) ? $post_data['start'] : null;
|
||||||
$start = $this->input->post('start');
|
$ende = isset($post_data['ende']) ? $post_data['ende'] : null;
|
||||||
$ende = $this->input->post('ende');
|
|
||||||
|
|
||||||
// Start DB transaction
|
// Start DB transaction
|
||||||
$this->db->trans_start();
|
$this->db->trans_start();
|
||||||
|
|
||||||
//Save note
|
//Save note
|
||||||
$result = $this->NotizModel->insert(array('titel' => $titel, 'text' => $text, 'erledigt' => $erledigt, 'verfasser_uid' => $verfasser_uid,
|
$result = $this->NotizModel->insert(array('titel' => $titel, 'text' => $text, 'erledigt' => $erledigt, 'verfasser_uid' => $uid,
|
||||||
"insertvon" => $verfasser_uid, 'start' => $start, 'ende' => $ende, 'bearbeiter_uid' => $bearbeiter_uid));
|
"insertvon" => $uid, 'start' => $start, 'ende' => $ende, 'bearbeiter_uid' => $bearbeiter_uid));
|
||||||
|
|
||||||
if (isError($result))
|
if (isError($result))
|
||||||
{
|
{
|
||||||
$this->db->trans_rollback();
|
$this->db->trans_rollback();
|
||||||
return $this->terminateWithError(getError($result), self::ERROR_TYPE_GENERAL);
|
$this->terminateWithError(getError($result), self::ERROR_TYPE_GENERAL);
|
||||||
}
|
}
|
||||||
|
|
||||||
$notiz_id = $result->retval;
|
$notiz_id = $result->retval;
|
||||||
@@ -220,7 +213,7 @@ abstract class Notiz_Controller extends FHCAPI_Controller
|
|||||||
if (isError($result))
|
if (isError($result))
|
||||||
{
|
{
|
||||||
$this->db->trans_rollback();
|
$this->db->trans_rollback();
|
||||||
return $this->terminateWithError(getError($result), self::ERROR_TYPE_GENERAL);
|
$this->terminateWithError(getError($result), self::ERROR_TYPE_GENERAL);
|
||||||
}
|
}
|
||||||
$dms_id_arr[] = $result->retval['dms_id'];
|
$dms_id_arr[] = $result->retval['dms_id'];
|
||||||
}
|
}
|
||||||
@@ -235,34 +228,28 @@ abstract class Notiz_Controller extends FHCAPI_Controller
|
|||||||
if (isError($result))
|
if (isError($result))
|
||||||
{
|
{
|
||||||
$this->db->trans_rollback();
|
$this->db->trans_rollback();
|
||||||
return $this->terminateWithError(getError($result), self::ERROR_TYPE_GENERAL);
|
$this->terminateWithError(getError($result), self::ERROR_TYPE_GENERAL);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
$this->db->trans_commit();
|
$this->db->trans_commit();
|
||||||
return $this->terminateWithSuccess($result);
|
$this->terminateWithSuccess($result);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function updateNotiz()
|
public function updateNotiz()
|
||||||
{
|
{
|
||||||
|
|
||||||
$this->load->library('form_validation');
|
$this->load->library('form_validation');
|
||||||
$this->load->library('DmsLib');
|
$this->load->library('DmsLib');
|
||||||
|
|
||||||
if (isset($_POST['data']))
|
$json = $this->input->post('data');
|
||||||
{
|
$post_data = json_decode($json, true);
|
||||||
$data = json_decode($_POST['data']);
|
|
||||||
unset($_POST['data']);
|
|
||||||
foreach ($data as $k => $v) {
|
|
||||||
$_POST[$k] = $v;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
$notiz_id = $this->input->post('notiz_id');
|
$this->form_validation->set_data($post_data);
|
||||||
|
|
||||||
if(!$notiz_id)
|
$this->form_validation->set_rules('notiz_id', 'Notiz ID', 'required', [
|
||||||
{
|
'required' => $this->p->t('ui', 'error_fieldRequired', ['field' => 'notiz_id'])
|
||||||
$this->terminateWithError($this->p->t('ui','error_missingId',['id'=>'Notiz_id']), self::ERROR_TYPE_GENERAL);
|
]);
|
||||||
}
|
|
||||||
|
|
||||||
//Form Validation
|
//Form Validation
|
||||||
$this->form_validation->set_rules('titel', 'Titel', 'required', [
|
$this->form_validation->set_rules('titel', 'Titel', 'required', [
|
||||||
@@ -280,25 +267,23 @@ abstract class Notiz_Controller extends FHCAPI_Controller
|
|||||||
|
|
||||||
//update Notiz
|
//update Notiz
|
||||||
$uid = getAuthUID();
|
$uid = getAuthUID();
|
||||||
$titel = $this->input->post('titel');
|
$titel = $post_data['titel'];
|
||||||
$text = $this->input->post('text');
|
$text = $post_data['text'];
|
||||||
$verfasser_uid = isset($_POST['verfasser']) ? $_POST['verfasser'] : $uid;
|
$bearbeiter_uid = isset($post_data['bearbeiter']) ? $post_data['bearbeiter'] : $post_data['bearbeiter_uid'];
|
||||||
$bearbeiter_uid = isset($_POST['bearbeiter']) ? $_POST['bearbeiter'] : $uid;
|
$erledigt = $post_data['erledigt'];
|
||||||
$erledigt = $this->input->post('erledigt');
|
$start = $post_data['start'];
|
||||||
$start = $this->input->post('start');
|
$ende = $post_data['ende'];
|
||||||
$ende = $this->input->post('ende');
|
|
||||||
|
|
||||||
$result = $this->NotizModel->update(
|
$result = $this->NotizModel->update(
|
||||||
[
|
[
|
||||||
'notiz_id' => $notiz_id
|
'notiz_id' => $post_data['notiz_id'],
|
||||||
],
|
],
|
||||||
[
|
[
|
||||||
'titel' => $titel,
|
'titel' => $titel,
|
||||||
'updatevon' => $uid,
|
'updatevon' => $uid,
|
||||||
'updateamum' => date('c'),
|
'updateamum' => date('c'),
|
||||||
'text' => $text,
|
'text' => $text,
|
||||||
'verfasser_uid' => $verfasser_uid,
|
'bearbeiter_uid' => isEmptyString($bearbeiter_uid) ? null : $bearbeiter_uid,
|
||||||
'bearbeiter_uid' => $bearbeiter_uid,
|
|
||||||
'start' => $start,
|
'start' => $start,
|
||||||
'ende' => $ende,
|
'ende' => $ende,
|
||||||
'erledigt' => $erledigt
|
'erledigt' => $erledigt
|
||||||
@@ -306,7 +291,7 @@ abstract class Notiz_Controller extends FHCAPI_Controller
|
|||||||
);
|
);
|
||||||
if (isError($result))
|
if (isError($result))
|
||||||
{
|
{
|
||||||
return $this->terminateWithError(getError($result), self::ERROR_TYPE_GENERAL);
|
$this->terminateWithError(getError($result), self::ERROR_TYPE_GENERAL);
|
||||||
}
|
}
|
||||||
|
|
||||||
//update(1) loading all dms-entries with this notiz_id
|
//update(1) loading all dms-entries with this notiz_id
|
||||||
@@ -314,7 +299,7 @@ abstract class Notiz_Controller extends FHCAPI_Controller
|
|||||||
$this->load->model('person/Notizdokument_model', 'NotizdokumentModel');
|
$this->load->model('person/Notizdokument_model', 'NotizdokumentModel');
|
||||||
$this->NotizdokumentModel->addJoin('campus.tbl_dms_version', 'dms_id');
|
$this->NotizdokumentModel->addJoin('campus.tbl_dms_version', 'dms_id');
|
||||||
|
|
||||||
$result = $this->NotizdokumentModel->loadWhere(array('notiz_id' => $notiz_id));
|
$result = $this->NotizdokumentModel->loadWhere(array('notiz_id' => $post_data['notiz_id']));
|
||||||
$result = $this->getDataOrTerminateWithError($result);
|
$result = $this->getDataOrTerminateWithError($result);
|
||||||
foreach ($result as $doc) {
|
foreach ($result as $doc) {
|
||||||
$dms_id_arr[$doc->dms_id] = array(
|
$dms_id_arr[$doc->dms_id] = array(
|
||||||
@@ -351,7 +336,7 @@ abstract class Notiz_Controller extends FHCAPI_Controller
|
|||||||
$result = $this->getDataOrTerminateWithError($result);
|
$result = $this->getDataOrTerminateWithError($result);
|
||||||
$dms_id = $result['dms_id'];
|
$dms_id = $result['dms_id'];
|
||||||
|
|
||||||
$result = $this->NotizdokumentModel->insert(array('notiz_id' => $notiz_id, 'dms_id' => $dms_id));
|
$result = $this->NotizdokumentModel->insert(array('notiz_id' => $post_data['notiz_id'], 'dms_id' => $dms_id));
|
||||||
|
|
||||||
$this->getDataOrTerminateWithError($result);
|
$this->getDataOrTerminateWithError($result);
|
||||||
}
|
}
|
||||||
@@ -365,7 +350,7 @@ abstract class Notiz_Controller extends FHCAPI_Controller
|
|||||||
$this->getDataOrTerminateWithError($result);
|
$this->getDataOrTerminateWithError($result);
|
||||||
}
|
}
|
||||||
|
|
||||||
return $this->terminateWithSuccess($result);
|
$this->terminateWithSuccess($result);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function deleteNotiz()
|
public function deleteNotiz()
|
||||||
@@ -416,15 +401,15 @@ abstract class Notiz_Controller extends FHCAPI_Controller
|
|||||||
if (isError($result))
|
if (isError($result))
|
||||||
{
|
{
|
||||||
$this->db->trans_rollback();
|
$this->db->trans_rollback();
|
||||||
return $this->terminateWithError($result, self::ERROR_TYPE_GENERAL);
|
$this->terminateWithError($result, self::ERROR_TYPE_GENERAL);
|
||||||
}
|
}
|
||||||
if(!hasData($result))
|
if(!hasData($result))
|
||||||
{
|
{
|
||||||
return $this->terminateWithError($this->p->t('ui','error_missingId', ['id'=> 'Notiz_id']), self::ERROR_TYPE_GENERAL);
|
$this->terminateWithError($this->p->t('ui','error_missingId', ['id'=> 'Notiz_id']), self::ERROR_TYPE_GENERAL);
|
||||||
}
|
}
|
||||||
|
|
||||||
$this->db->trans_complete();
|
$this->db->trans_complete();
|
||||||
return $this->terminateWithSuccess(getData($result));
|
$this->terminateWithSuccess(getData($result));
|
||||||
}
|
}
|
||||||
|
|
||||||
public function loadDokumente()
|
public function loadDokumente()
|
||||||
@@ -440,14 +425,14 @@ abstract class Notiz_Controller extends FHCAPI_Controller
|
|||||||
array('public.tbl_notiz.notiz_id' => $notiz_id)
|
array('public.tbl_notiz.notiz_id' => $notiz_id)
|
||||||
);
|
);
|
||||||
if (isError($result)) {
|
if (isError($result)) {
|
||||||
return $this->terminateWithError($result, self::ERROR_TYPE_GENERAL);
|
$this->terminateWithError($result, self::ERROR_TYPE_GENERAL);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(!hasData($result))
|
if(!hasData($result))
|
||||||
{
|
{
|
||||||
return $this->terminateWithError($this->p->t('ui','error_missingId', ['id'=> 'Notiz_id']), self::ERROR_TYPE_GENERAL);
|
$this->terminateWithError($this->p->t('ui','error_missingId', ['id'=> 'Notiz_id']), self::ERROR_TYPE_GENERAL);
|
||||||
}
|
}
|
||||||
return $this->terminateWithSuccess(getData($result));
|
$this->terminateWithSuccess(getData($result));
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getMitarbeiter($searchString)
|
public function getMitarbeiter($searchString)
|
||||||
@@ -457,7 +442,7 @@ abstract class Notiz_Controller extends FHCAPI_Controller
|
|||||||
if (isError($result)) {
|
if (isError($result)) {
|
||||||
$this->terminateWithError($result, self::ERROR_TYPE_GENERAL);
|
$this->terminateWithError($result, self::ERROR_TYPE_GENERAL);
|
||||||
}
|
}
|
||||||
return $this->terminateWithSuccess($result);
|
$this->terminateWithSuccess($result);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getCountNotes($person_id)
|
public function getCountNotes($person_id)
|
||||||
@@ -476,4 +461,4 @@ abstract class Notiz_Controller extends FHCAPI_Controller
|
|||||||
return $this->terminateWithSuccess($anzahl->anzahl ?: 0);
|
return $this->terminateWithSuccess($anzahl->anzahl ?: 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -269,3 +269,199 @@ function absoluteJsImportUrl($relurl)
|
|||||||
}
|
}
|
||||||
return $url;
|
return $url;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Manipulate CI views includes Array to load
|
||||||
|
* - public/js/FhcApps.js via customJSs and
|
||||||
|
* - app customisation js and/or css from extensions via customJSModules
|
||||||
|
* if customJSModules contains at least one vuejs app and customisation files
|
||||||
|
* exist in extensions
|
||||||
|
*/
|
||||||
|
class ExtendableAppsHelper
|
||||||
|
{
|
||||||
|
private static $instance = null;
|
||||||
|
|
||||||
|
protected $extensions;
|
||||||
|
|
||||||
|
protected $customCSSs;
|
||||||
|
protected $customJSs;
|
||||||
|
protected $customJSModules;
|
||||||
|
|
||||||
|
protected $initialised;
|
||||||
|
protected $appscount;
|
||||||
|
|
||||||
|
protected $extCustomCSSs;
|
||||||
|
protected $extCustomJSs;
|
||||||
|
protected $extCustomJSModules;
|
||||||
|
|
||||||
|
private function __construct()
|
||||||
|
{
|
||||||
|
$this->extensions = array();
|
||||||
|
$this->customCSSs = null;
|
||||||
|
$this->customJSs = null;
|
||||||
|
$this->customJSModules = null;
|
||||||
|
|
||||||
|
$this->initialised = false;
|
||||||
|
$this->appscount = 0;
|
||||||
|
|
||||||
|
$this->extCustomCSSs = null;
|
||||||
|
$this->extCustomJSs = null;
|
||||||
|
$this->extCustomJSModules = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static function getInstance()
|
||||||
|
{
|
||||||
|
if(self::$instance === null)
|
||||||
|
{
|
||||||
|
self::$instance = new ExtendableAppsHelper();
|
||||||
|
}
|
||||||
|
return self::$instance;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function init($customCSSs, $customJSs, $customJSModules)
|
||||||
|
{
|
||||||
|
if($this->initialised)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->customCSSs = $customCSSs;
|
||||||
|
$this->customJSs = $customJSs;
|
||||||
|
$this->customJSModules = $customJSModules;
|
||||||
|
$this->initialised = true;
|
||||||
|
|
||||||
|
if(!isset($this->customJSModules))
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(!is_array($this->customJSModules))
|
||||||
|
{
|
||||||
|
$this->customJSModules = array($this->customJSModules);
|
||||||
|
}
|
||||||
|
|
||||||
|
if(count($this->customJSModules) < 1)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->buildExtensionsList();
|
||||||
|
$this->prepareExtendedArrays();
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getCustomCSSs()
|
||||||
|
{
|
||||||
|
if(is_null($this->extCustomCSSs))
|
||||||
|
{
|
||||||
|
return $this->customCSSs;
|
||||||
|
}
|
||||||
|
return $this->extCustomCSSs;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getCustomJSs()
|
||||||
|
{
|
||||||
|
if(is_null($this->extCustomJSs))
|
||||||
|
{
|
||||||
|
return $this->customJSs;
|
||||||
|
}
|
||||||
|
return $this->extCustomJSs;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getCustomJSModules()
|
||||||
|
{
|
||||||
|
if(is_null($this->extCustomJSModules))
|
||||||
|
{
|
||||||
|
return $this->customJSModules;
|
||||||
|
}
|
||||||
|
return $this->extCustomJSModules;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function buildExtensionsList()
|
||||||
|
{
|
||||||
|
$this->extensions = array();
|
||||||
|
$fsiterator = new FilesystemIterator(FHCPATH . 'application/extensions');
|
||||||
|
foreach ($fsiterator as $fsitem)
|
||||||
|
{
|
||||||
|
if(preg_match('/^FHC-Core-/', $fsitem->getBasename()))
|
||||||
|
{
|
||||||
|
$this->extensions[] = $fsitem->getBasename();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function prepareExtendedArrays()
|
||||||
|
{
|
||||||
|
$this->appscount = 0;
|
||||||
|
$this->initExtCustomCSSs();
|
||||||
|
$this->extCustomJSModules = array();
|
||||||
|
foreach($this->customJSModules as $item)
|
||||||
|
{
|
||||||
|
$matches = array();
|
||||||
|
if(preg_match('#^public/(extensions/FHC-Core-.+)?js/apps/(.*)\.js$#', $item, $matches))
|
||||||
|
{
|
||||||
|
$this->appscount++;
|
||||||
|
|
||||||
|
$fhcextension = $matches[1];
|
||||||
|
$app = $matches[2];
|
||||||
|
|
||||||
|
$extend_js_suffix = 'js/extend_app/' . $fhcextension . $app . '.js';
|
||||||
|
$extend_css_suffix = 'css/extend_app/' . $fhcextension . $app . '.css';
|
||||||
|
|
||||||
|
foreach($this->extensions as $extension)
|
||||||
|
{
|
||||||
|
$extend_js = 'public/extensions/' . $extension . '/' . $extend_js_suffix;
|
||||||
|
$extend_css = 'public/extensions/' . $extension . '/' . $extend_css_suffix;
|
||||||
|
|
||||||
|
if(is_readable(FHCPATH . $extend_js))
|
||||||
|
{
|
||||||
|
array_push($this->extCustomJSModules, $extend_js);
|
||||||
|
}
|
||||||
|
|
||||||
|
if(is_readable(FHCPATH . $extend_css))
|
||||||
|
{
|
||||||
|
array_push($this->extCustomCSSs, $extend_css);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
array_push($this->extCustomJSModules, $item);
|
||||||
|
}
|
||||||
|
|
||||||
|
if($this->appscount > 0)
|
||||||
|
{
|
||||||
|
$this->addFhcAppsJs();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function initExtCustomCSSs()
|
||||||
|
{
|
||||||
|
if(!isset($this->customCSSs))
|
||||||
|
{
|
||||||
|
$this->extCustomCSSs = array();
|
||||||
|
}
|
||||||
|
elseif(!is_array($this->customCSSs))
|
||||||
|
{
|
||||||
|
$this->extCustomCSSs = array($this->customCSSs);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
$this->extCustomCSSs = $this->customCSSs;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function addFhcAppsJs()
|
||||||
|
{
|
||||||
|
if(!isset($this->customJSs))
|
||||||
|
{
|
||||||
|
$this->extCustomJSs = array();
|
||||||
|
}
|
||||||
|
elseif(!is_array($this->customJSs))
|
||||||
|
{
|
||||||
|
$this->extCustomJSs = array($this->customJSs);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
$this->extCustomJSs = $this->customJSs;
|
||||||
|
}
|
||||||
|
array_push($this->extCustomJSs, 'public/js/FhcApps.js');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
@@ -180,7 +180,8 @@ class DocsboxLib
|
|||||||
}
|
}
|
||||||
// Just started or still working on it
|
// Just started or still working on it
|
||||||
elseif ($getStatusResponse->body->status == self::STATUS_WORKING
|
elseif ($getStatusResponse->body->status == self::STATUS_WORKING
|
||||||
|| $getStatusResponse->body->status == self::STATUS_STARTED)
|
|| $getStatusResponse->body->status == self::STATUS_STARTED
|
||||||
|
|| $getStatusResponse->body->status == self::STATUS_QUEUED)
|
||||||
{
|
{
|
||||||
// go on!
|
// go on!
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -490,6 +490,175 @@ class Vertrag_model extends DB_Model
|
|||||||
return $bezeichnung;
|
return $bezeichnung;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Loads all Contracts of a Person
|
||||||
|
* @param $person_id
|
||||||
|
* @return array of objects
|
||||||
|
*/
|
||||||
|
public function loadContractsOfPerson($person_id)
|
||||||
|
{
|
||||||
|
$query = "
|
||||||
|
SELECT
|
||||||
|
*,
|
||||||
|
tbl_vertrag.bezeichnung as bezeichnung,
|
||||||
|
tbl_vertragstyp.bezeichnung as vertragstyp_bezeichnung,
|
||||||
|
tbl_vertrag.vertragsdatum,
|
||||||
|
(SELECT bezeichnung FROM lehre.tbl_vertragsstatus
|
||||||
|
JOIN lehre.tbl_vertrag_vertragsstatus USING(vertragsstatus_kurzbz)
|
||||||
|
WHERE vertrag_id=tbl_vertrag.vertrag_id ORDER BY datum desc limit 1) as status, anmerkung,
|
||||||
|
CASE
|
||||||
|
WHEN EXISTS (
|
||||||
|
SELECT 1
|
||||||
|
FROM lehre.tbl_vertrag_vertragsstatus
|
||||||
|
WHERE vertrag_id = tbl_vertrag.vertrag_id
|
||||||
|
AND vertragsstatus_kurzbz = 'abgerechnet'
|
||||||
|
) THEN true
|
||||||
|
ELSE false
|
||||||
|
END AS isAbgerechnet
|
||||||
|
FROM
|
||||||
|
lehre.tbl_vertrag
|
||||||
|
LEFT JOIN lehre.tbl_vertragstyp USING(vertragstyp_kurzbz)
|
||||||
|
WHERE person_id= ?";
|
||||||
|
|
||||||
|
|
||||||
|
return $this->execQuery($query, array($person_id));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Loads all Contracts of a Person that are not assigned yet
|
||||||
|
* @param $person_id
|
||||||
|
* @return array of objects
|
||||||
|
*/
|
||||||
|
public function loadContractsOfPersonNotAssigned($person_id)
|
||||||
|
{
|
||||||
|
$query = "
|
||||||
|
SELECT
|
||||||
|
'Lehrauftrag' as type,
|
||||||
|
lehreinheit_id,
|
||||||
|
mitarbeiter_uid,
|
||||||
|
null as pruefung_id,
|
||||||
|
null as projektarbeit_id,
|
||||||
|
(tbl_lehreinheitmitarbeiter.semesterstunden*tbl_lehreinheitmitarbeiter.stundensatz) as betrag1,
|
||||||
|
tbl_lehreinheit.studiensemester_kurzbz,
|
||||||
|
null as betreuerart_kurzbz,
|
||||||
|
( SELECT
|
||||||
|
upper(tbl_studiengang.typ || tbl_studiengang.kurzbz) || tbl_lehrveranstaltung.semester || '-' || tbl_lehrveranstaltung.kurzbz || '-' || tbl_lehreinheit.lehrform_kurzbz
|
||||||
|
FROM
|
||||||
|
lehre.tbl_lehrveranstaltung
|
||||||
|
JOIN public.tbl_studiengang USING(studiengang_kz)
|
||||||
|
WHERE
|
||||||
|
lehrveranstaltung_id=tbl_lehreinheit.lehrveranstaltung_id)
|
||||||
|
as bezeichnung
|
||||||
|
FROM
|
||||||
|
lehre.tbl_lehreinheitmitarbeiter
|
||||||
|
JOIN lehre.tbl_lehreinheit USING(lehreinheit_id)
|
||||||
|
WHERE
|
||||||
|
mitarbeiter_uid IN (SELECT uid FROM public.tbl_benutzer WHERE person_id=?)
|
||||||
|
AND vertrag_id IS NULL
|
||||||
|
UNION
|
||||||
|
SELECT
|
||||||
|
'Betreuung' as type,
|
||||||
|
tbl_projektarbeit.lehreinheit_id as lehreinheit_id,
|
||||||
|
null as mitarbeiter_uid,
|
||||||
|
null::integer as pruefung_id,
|
||||||
|
projektarbeit_id,
|
||||||
|
(tbl_projektbetreuer.stunden*tbl_projektbetreuer.stundensatz) as betrag1,
|
||||||
|
tbl_lehreinheit.studiensemester_kurzbz,
|
||||||
|
tbl_projektbetreuer.betreuerart_kurzbz,
|
||||||
|
(SELECT nachname || ' ' || vorname FROM public.tbl_person JOIN public.tbl_benutzer USING(person_id) WHERE uid=tbl_projektarbeit.student_uid)
|
||||||
|
as bezeichnung
|
||||||
|
FROM
|
||||||
|
lehre.tbl_projektbetreuer
|
||||||
|
JOIN lehre.tbl_projektarbeit USING(projektarbeit_id)
|
||||||
|
JOIN lehre.tbl_lehreinheit USING(lehreinheit_id)
|
||||||
|
WHERE
|
||||||
|
tbl_projektbetreuer.person_id=?
|
||||||
|
AND vertrag_id IS NULL
|
||||||
|
";
|
||||||
|
|
||||||
|
return $this->execQuery($query, array($person_id, $person_id));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Loads all Contracts of a Person that are assigned yet
|
||||||
|
* @param $person_id, $vertrag_id
|
||||||
|
* @return array of objects
|
||||||
|
*/
|
||||||
|
|
||||||
|
public function loadContractsOfPersonAssigned($person_id, $vertrag_id)
|
||||||
|
{
|
||||||
|
$query = "
|
||||||
|
SELECT
|
||||||
|
'Lehrauftrag' as type,
|
||||||
|
lehreinheit_id,
|
||||||
|
mitarbeiter_uid,
|
||||||
|
null as pruefung_id,
|
||||||
|
null as projektarbeit_id,
|
||||||
|
(tbl_lehreinheitmitarbeiter.semesterstunden * tbl_lehreinheitmitarbeiter.stundensatz) as betrag,
|
||||||
|
tbl_lehreinheit.studiensemester_kurzbz,
|
||||||
|
null as betreuerart_kurzbz,
|
||||||
|
( SELECT
|
||||||
|
upper(tbl_studiengang.typ || tbl_studiengang.kurzbz) || tbl_lehrveranstaltung.semester || '-' || tbl_lehrveranstaltung.kurzbz || '-' || tbl_lehreinheit.lehrform_kurzbz
|
||||||
|
FROM
|
||||||
|
lehre.tbl_lehrveranstaltung
|
||||||
|
JOIN public.tbl_studiengang USING(studiengang_kz)
|
||||||
|
WHERE
|
||||||
|
lehrveranstaltung_id=tbl_lehreinheit.lehrveranstaltung_id)
|
||||||
|
as bezeichnung, vertrag_id
|
||||||
|
FROM
|
||||||
|
lehre.tbl_lehreinheitmitarbeiter
|
||||||
|
JOIN lehre.tbl_lehreinheit USING(lehreinheit_id)
|
||||||
|
WHERE
|
||||||
|
mitarbeiter_uid IN (SELECT uid FROM public.tbl_benutzer WHERE person_id=?)
|
||||||
|
AND vertrag_id = ?
|
||||||
|
UNION
|
||||||
|
SELECT
|
||||||
|
'Betreuung' as type,
|
||||||
|
tbl_projektarbeit.lehreinheit_id as lehreinheit_id,
|
||||||
|
null as mitarbeiter_uid,
|
||||||
|
null::integer as pruefung_id,
|
||||||
|
projektarbeit_id,
|
||||||
|
(tbl_projektbetreuer.stunden * tbl_projektbetreuer.stundensatz) as betrag,
|
||||||
|
tbl_lehreinheit.studiensemester_kurzbz,
|
||||||
|
tbl_projektbetreuer.betreuerart_kurzbz,
|
||||||
|
(SELECT nachname || ' ' || vorname FROM public.tbl_person JOIN public.tbl_benutzer USING(person_id) WHERE uid=tbl_projektarbeit.student_uid)
|
||||||
|
as bezeichnung, vertrag_id
|
||||||
|
FROM
|
||||||
|
lehre.tbl_projektbetreuer
|
||||||
|
JOIN lehre.tbl_projektarbeit USING(projektarbeit_id)
|
||||||
|
JOIN lehre.tbl_lehreinheit USING(lehreinheit_id)
|
||||||
|
WHERE
|
||||||
|
tbl_projektbetreuer.person_id=?
|
||||||
|
AND vertrag_id = ?
|
||||||
|
";
|
||||||
|
|
||||||
|
return $this->execQuery($query, array($person_id, $vertrag_id, $person_id, $vertrag_id));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns all stati of a contract
|
||||||
|
*
|
||||||
|
* @param $vertrag_id
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
public function getStatiOfContract($vertrag_id)
|
||||||
|
{
|
||||||
|
$query = "
|
||||||
|
SELECT
|
||||||
|
*,
|
||||||
|
tbl_vertrag_vertragsstatus.datum,
|
||||||
|
tbl_vertrag_vertragsstatus.insertamum,
|
||||||
|
tbl_vertrag_vertragsstatus.updateamum
|
||||||
|
FROM
|
||||||
|
lehre.tbl_vertrag_vertragsstatus
|
||||||
|
JOIN lehre.tbl_vertragsstatus USING(vertragsstatus_kurzbz)
|
||||||
|
WHERE
|
||||||
|
tbl_vertrag_vertragsstatus.vertrag_id = ?
|
||||||
|
ORDER BY tbl_vertrag_vertragsstatus.datum DESC";
|
||||||
|
|
||||||
|
return $this->execQuery($query, array($vertrag_id));
|
||||||
|
}
|
||||||
|
|
||||||
private function _updateVertragRelevant($vertrag_id)
|
private function _updateVertragRelevant($vertrag_id)
|
||||||
{
|
{
|
||||||
$this->LehreinheitmitarbeiterModel->update(
|
$this->LehreinheitmitarbeiterModel->update(
|
||||||
|
|||||||
@@ -11,4 +11,5 @@ class Vertragstyp_model extends DB_Model
|
|||||||
$this->dbTable = 'lehre.tbl_vertragstyp';
|
$this->dbTable = 'lehre.tbl_vertragstyp';
|
||||||
$this->pk = 'vertragstyp_kurzbz';
|
$this->pk = 'vertragstyp_kurzbz';
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -190,4 +190,6 @@ class Vertragvertragsstatus_model extends DB_Model
|
|||||||
|
|
||||||
return $this->loadWhere($condition);
|
return $this->loadWhere($condition);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ class Reihungstest_model extends DB_Model
|
|||||||
parent::__construct();
|
parent::__construct();
|
||||||
$this->dbTable = 'public.tbl_reihungstest';
|
$this->dbTable = 'public.tbl_reihungstest';
|
||||||
$this->pk = 'reihungstest_id';
|
$this->pk = 'reihungstest_id';
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Gets a test from a test id only if it is available
|
* Gets a test from a test id only if it is available
|
||||||
@@ -42,8 +42,8 @@ class Reihungstest_model extends DB_Model
|
|||||||
/**
|
/**
|
||||||
* Checks if there are active studyplans which have no public placement tests assigned yet.
|
* Checks if there are active studyplans which have no public placement tests assigned yet.
|
||||||
* Only check assignment to studyplans that are
|
* Only check assignment to studyplans that are
|
||||||
* - Bachelor,
|
* - Bachelor,
|
||||||
* - active,
|
* - active,
|
||||||
* - set as online application
|
* - set as online application
|
||||||
* - valid for 1st terms
|
* - valid for 1st terms
|
||||||
* @return array Returns object array with studyplans that have no public placement tests assigned yet.
|
* @return array Returns object array with studyplans that have no public placement tests assigned yet.
|
||||||
@@ -97,7 +97,7 @@ class Reihungstest_model extends DB_Model
|
|||||||
USING (reihungstest_id)
|
USING (reihungstest_id)
|
||||||
WHERE
|
WHERE
|
||||||
datum >= now()
|
datum >= now()
|
||||||
AND
|
AND
|
||||||
oeffentlich = \'t\'
|
oeffentlich = \'t\'
|
||||||
)
|
)
|
||||||
';
|
';
|
||||||
@@ -105,7 +105,7 @@ class Reihungstest_model extends DB_Model
|
|||||||
return $this->execQuery($query);
|
return $this->execQuery($query);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Gets amount of free places.
|
* Gets amount of free places.
|
||||||
* @return array Returns object array with faculty and amount of free places
|
* @return array Returns object array with faculty and amount of free places
|
||||||
* for each public actual placement test date.
|
* for each public actual placement test date.
|
||||||
@@ -432,10 +432,10 @@ class Reihungstest_model extends DB_Model
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Loads all applicants of a placement test
|
* Loads all applicants of a placement test
|
||||||
* @param integer $reihungstest_id ID of placement test
|
* @param integer $reihungstest_id ID of placement test
|
||||||
* @return array Returns object array with data of applicants.
|
* @return array Returns object array with data of applicants.
|
||||||
*/
|
*/
|
||||||
public function getApplicantsOfPlacementTest($reihungstest_id)
|
public function getApplicantsOfPlacementTest($reihungstest_id)
|
||||||
{
|
{
|
||||||
$query = '
|
$query = '
|
||||||
@@ -556,13 +556,22 @@ class Reihungstest_model extends DB_Model
|
|||||||
* Calculates Result of Placement Test for a given Person and given placementtest
|
* Calculates Result of Placement Test for a given Person and given placementtest
|
||||||
* and with taking account of weighting per area
|
* and with taking account of weighting per area
|
||||||
*
|
*
|
||||||
* @param $person_id ID of Person
|
* @param Number $person_id ID of Person
|
||||||
* @param $punkte if true result is points else result is percentage of sum
|
* @param Boolean $punkte if true result is points else result is percentage of sum
|
||||||
* @param $reihungstest_id ID of Placementtest
|
* @param Number $reihungstest_id ID of Placementtest
|
||||||
* @param $weightedArray array of weighting per area (gewicht per gebiet_id)
|
* @param Array $weightedArray array of weighting per area (gewicht per gebiet_id)
|
||||||
* @return float result
|
* @param Boolean $has_excluded_gebiete if true, areas in the configArray will be excluded
|
||||||
|
* @param Array $basis_gebiet_id_toString areas to exclude
|
||||||
|
* @return float result points of RT
|
||||||
*/
|
*/
|
||||||
public function getReihungstestErgebnisPerson($person_id, $punkte, $reihungstest_id, $weightedArray = null)
|
public function getReihungstestErgebnisPerson(
|
||||||
|
$person_id,
|
||||||
|
$punkte,
|
||||||
|
$reihungstest_id,
|
||||||
|
$weightedArray = null,
|
||||||
|
$has_excluded_gebiete = false,
|
||||||
|
$basis_gebiet_id_toString = null
|
||||||
|
)
|
||||||
{
|
{
|
||||||
$parametersArray = array($reihungstest_id);
|
$parametersArray = array($reihungstest_id);
|
||||||
|
|
||||||
@@ -577,6 +586,35 @@ class Reihungstest_model extends DB_Model
|
|||||||
WHERE
|
WHERE
|
||||||
reihungstest_id = ? ";
|
reihungstest_id = ? ";
|
||||||
|
|
||||||
|
//areas of Studiengang
|
||||||
|
if (!empty($basis_gebiet_id_toString))
|
||||||
|
{
|
||||||
|
$qry .= "
|
||||||
|
AND
|
||||||
|
gebiet_id IN (". $basis_gebiet_id_toString. ")
|
||||||
|
";
|
||||||
|
}
|
||||||
|
|
||||||
|
//areas to exclude
|
||||||
|
if($has_excluded_gebiete)
|
||||||
|
{
|
||||||
|
if (defined('FAS_REIHUNGSTEST_EXCLUDE_GEBIETE') && !empty(FAS_REIHUNGSTEST_EXCLUDE_GEBIETE))
|
||||||
|
{
|
||||||
|
$excluded_gebiete = unserialize(FAS_REIHUNGSTEST_EXCLUDE_GEBIETE);
|
||||||
|
$exclude_gebiet_id_arr = $excluded_gebiete;
|
||||||
|
if (is_array($exclude_gebiet_id_arr) && count($exclude_gebiet_id_arr) > 0)
|
||||||
|
{
|
||||||
|
$exclude_gebiet_id_toString = implode(', ', $exclude_gebiet_id_arr);
|
||||||
|
$qry .= "
|
||||||
|
AND
|
||||||
|
gebiet_id NOT IN (". $exclude_gebiet_id_toString. ")
|
||||||
|
-- AND
|
||||||
|
-- typ = 'b'
|
||||||
|
";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
//using prestudent Status to avoid to get the sum of more than 1 placement tests
|
//using prestudent Status to avoid to get the sum of more than 1 placement tests
|
||||||
$qry .= "
|
$qry .= "
|
||||||
AND prestudent_id = (
|
AND prestudent_id = (
|
||||||
|
|||||||
@@ -209,7 +209,7 @@ class Mitarbeiter_model extends DB_Model
|
|||||||
{
|
{
|
||||||
$qry = "
|
$qry = "
|
||||||
SELECT
|
SELECT
|
||||||
titelpre, vorname, nachname, titelpost, foto, foto_sperre, person_id, alias, telefonklappe
|
titelpre, vorname, nachname, titelpost, foto, foto_sperre, person_id, alias, telefonklappe, personalnummer, mitarbeiter_uid
|
||||||
FROM
|
FROM
|
||||||
public.tbl_person
|
public.tbl_person
|
||||||
JOIN public.tbl_benutzer b USING(person_id)
|
JOIN public.tbl_benutzer b USING(person_id)
|
||||||
@@ -363,14 +363,14 @@ class Mitarbeiter_model extends DB_Model
|
|||||||
$returnwert .= ", ma.mitarbeiter_uid, CONCAT(p.nachname, ' ', p.vorname, ' (', ma.mitarbeiter_uid , ')') as mitarbeiter";
|
$returnwert .= ", ma.mitarbeiter_uid, CONCAT(p.nachname, ' ', p.vorname, ' (', ma.mitarbeiter_uid , ')') as mitarbeiter";
|
||||||
|
|
||||||
$qry = "
|
$qry = "
|
||||||
SELECT " . $returnwert . "
|
SELECT " . $returnwert . "
|
||||||
FROM
|
FROM
|
||||||
public.tbl_mitarbeiter ma
|
public.tbl_mitarbeiter ma
|
||||||
JOIN
|
JOIN
|
||||||
public.tbl_benutzer b on (ma.mitarbeiter_uid = b.uid)
|
public.tbl_benutzer b on (ma.mitarbeiter_uid = b.uid)
|
||||||
JOIN
|
JOIN
|
||||||
public.tbl_person p on (p.person_id = b.person_id)
|
public.tbl_person p on (p.person_id = b.person_id)
|
||||||
WHERE
|
WHERE
|
||||||
lower (p.nachname) LIKE '%". $this->db->escape_like_str($filter)."%'
|
lower (p.nachname) LIKE '%". $this->db->escape_like_str($filter)."%'
|
||||||
OR
|
OR
|
||||||
lower (p.vorname) LIKE '%". $this->db->escape_like_str($filter)."%'
|
lower (p.vorname) LIKE '%". $this->db->escape_like_str($filter)."%'
|
||||||
@@ -393,14 +393,14 @@ class Mitarbeiter_model extends DB_Model
|
|||||||
public function getMitarbeiterFromLV($lehrveranstaltung_id)
|
public function getMitarbeiterFromLV($lehrveranstaltung_id)
|
||||||
{
|
{
|
||||||
$qry = "SELECT DISTINCT
|
$qry = "SELECT DISTINCT
|
||||||
lehrveranstaltung_id, uid, vorname, wahlname, vornamen, nachname, titelpre, titelpost, kurzbz, mitarbeiter_uid
|
lehrveranstaltung_id, uid, vorname, wahlname, vornamen, nachname, titelpre, titelpost, kurzbz, mitarbeiter_uid
|
||||||
FROM
|
FROM
|
||||||
lehre.tbl_lehreinheitmitarbeiter, campus.vw_mitarbeiter, lehre.tbl_lehreinheit
|
lehre.tbl_lehreinheitmitarbeiter, campus.vw_mitarbeiter, lehre.tbl_lehreinheit
|
||||||
WHERE
|
WHERE
|
||||||
lehrveranstaltung_id= ?
|
lehrveranstaltung_id= ?
|
||||||
AND
|
AND
|
||||||
mitarbeiter_uid=uid
|
mitarbeiter_uid=uid
|
||||||
AND
|
AND
|
||||||
tbl_lehreinheitmitarbeiter.lehreinheit_id=tbl_lehreinheit.lehreinheit_id;";
|
tbl_lehreinheitmitarbeiter.lehreinheit_id=tbl_lehreinheit.lehreinheit_id;";
|
||||||
|
|
||||||
$parametersArray = array($lehrveranstaltung_id);
|
$parametersArray = array($lehrveranstaltung_id);
|
||||||
|
|||||||
@@ -1,15 +0,0 @@
|
|||||||
<?php
|
|
||||||
$includesArray = array(
|
|
||||||
'title' => 'LvInfo',
|
|
||||||
'customJSModules' => ['public/js/apps/Cis/LvInfo.js']
|
|
||||||
);
|
|
||||||
|
|
||||||
$this->load->view('templates/CISVUE-Header', $includesArray);
|
|
||||||
?>
|
|
||||||
|
|
||||||
<div id="content">
|
|
||||||
<Info studien_semester="<?= $studien_semester ?>" lehrveranstaltung_id="<?= $lvid ?>"></Info>
|
|
||||||
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<?php $this->load->view('templates/CISVUE-Footer', $includesArray); ?>
|
|
||||||
@@ -1,18 +0,0 @@
|
|||||||
<?php
|
|
||||||
$includesArray = array(
|
|
||||||
'title' => 'Profil',
|
|
||||||
'customJSModules' => ['public/js/apps/Cis/Profil.js'],
|
|
||||||
'tabulator5' => true,
|
|
||||||
'primevue3' => true,
|
|
||||||
'customCSSs' => ['public/css/components/calendar.css', 'public/css/components/FilterComponent.css','public/css/components/Profil.css','public/css/components/FormUnderline.css'],
|
|
||||||
|
|
||||||
);
|
|
||||||
|
|
||||||
$this->load->view('templates/CISVUE-Header', $includesArray);
|
|
||||||
?>
|
|
||||||
|
|
||||||
<div id="content" >
|
|
||||||
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<?php $this->load->view('templates/CISVUE-Footer', $includesArray); ?>
|
|
||||||
@@ -7,19 +7,21 @@
|
|||||||
'vue3' => true,
|
'vue3' => true,
|
||||||
'primevue3' => true,
|
'primevue3' => true,
|
||||||
#'filtercomponent' => true,
|
#'filtercomponent' => true,
|
||||||
'tabulator5' => true,
|
'tabulator6' => true,
|
||||||
'tinymce5' => true,
|
'tinymce5' => true,
|
||||||
'phrases' => array(
|
'phrases' => array(
|
||||||
'global',
|
'global',
|
||||||
'ui',
|
'ui',
|
||||||
'notiz',
|
'notiz',
|
||||||
),
|
),
|
||||||
|
'tags' => true,
|
||||||
'customCSSs' => [
|
'customCSSs' => [
|
||||||
#datepicker fuer component functions
|
#datepicker fuer component functions
|
||||||
'public/css/components/vue-datepicker.css',
|
'public/css/components/vue-datepicker.css',
|
||||||
'public/css/components/primevue.css',
|
'public/css/components/primevue.css',
|
||||||
'public/css/Studentenverwaltung.css',
|
'public/css/Studentenverwaltung.css',
|
||||||
'public/css/components/function.css'
|
'public/css/components/function.css',
|
||||||
|
'public/css/components/Detailheader.css'
|
||||||
],
|
],
|
||||||
'customJSs' => [
|
'customJSs' => [
|
||||||
'vendor/vuejs/vuedatepicker_js/vue-datepicker.iife.js',
|
'vendor/vuejs/vuedatepicker_js/vue-datepicker.iife.js',
|
||||||
@@ -45,6 +47,8 @@ $configArray = [
|
|||||||
'showAufnahmegruppen' => !defined('FAS_REIHUNGSTEST_AUFNAHMEGRUPPEN') ? false : FAS_REIHUNGSTEST_AUFNAHMEGRUPPEN,
|
'showAufnahmegruppen' => !defined('FAS_REIHUNGSTEST_AUFNAHMEGRUPPEN') ? false : FAS_REIHUNGSTEST_AUFNAHMEGRUPPEN,
|
||||||
'allowUebernahmePunkte' => !defined('FAS_REIHUNGSTEST_PUNKTEUEBERNAHME') ? true : FAS_REIHUNGSTEST_PUNKTEUEBERNAHME,
|
'allowUebernahmePunkte' => !defined('FAS_REIHUNGSTEST_PUNKTEUEBERNAHME') ? true : FAS_REIHUNGSTEST_PUNKTEUEBERNAHME,
|
||||||
'useReihungstestPunkte' => !defined('FAS_REIHUNGSTEST_PUNKTE') ? true : FAS_REIHUNGSTEST_PUNKTE,
|
'useReihungstestPunkte' => !defined('FAS_REIHUNGSTEST_PUNKTE') ? true : FAS_REIHUNGSTEST_PUNKTE,
|
||||||
|
'hasExcludedAreas' => defined('FAS_REIHUNGSTEST_EXCLUDE_GEBIETE') && !empty(FAS_REIHUNGSTEST_EXCLUDE_GEBIETE),
|
||||||
|
'stvTagsEnabled' => defined('STV_TAGS_ENABLED') ? STV_TAGS_ENABLED : false,
|
||||||
];
|
];
|
||||||
?>
|
?>
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,50 @@
|
|||||||
|
<?php
|
||||||
|
$includesArray = array(
|
||||||
|
'title' => 'Vertragsverwaltung',
|
||||||
|
'axios027' => true,
|
||||||
|
'bootstrap5' => true,
|
||||||
|
'fontawesome6' => true,
|
||||||
|
'vue3' => true,
|
||||||
|
'primevue3' => true,
|
||||||
|
'filtercomponent' => true,
|
||||||
|
'navigationcomponent' => true,
|
||||||
|
'tabulator6' => true,
|
||||||
|
'tinymce5' => true,
|
||||||
|
'phrases' => array(
|
||||||
|
'global',
|
||||||
|
'ui',
|
||||||
|
),
|
||||||
|
'customCSSs' => [
|
||||||
|
'public/css/components/vue-datepicker.css',
|
||||||
|
'public/css/components/primevue.css',
|
||||||
|
'public/css/Vertragsverwaltung.css',
|
||||||
|
'public/css/components/Detailheader.css'
|
||||||
|
],
|
||||||
|
'customJSs' => [
|
||||||
|
#'vendor/npm-asset/primevue/tree/tree.min.js',
|
||||||
|
#'vendor/npm-asset/primevue/toast/toast.min.js'
|
||||||
|
],
|
||||||
|
'customJSModules' => [
|
||||||
|
'public/js/apps/Vertragsverwaltung.js'
|
||||||
|
]
|
||||||
|
);
|
||||||
|
|
||||||
|
$this->load->view('templates/FHC-Header', $includesArray);
|
||||||
|
?>
|
||||||
|
|
||||||
|
<?php
|
||||||
|
$configArray = [
|
||||||
|
'domain' => !defined('DOMAIN') ? 'notDefined' : DOMAIN,
|
||||||
|
];
|
||||||
|
?>
|
||||||
|
|
||||||
|
<div id="main">
|
||||||
|
<router-view
|
||||||
|
:permissions="<?= htmlspecialchars(json_encode($permissions)); ?>"
|
||||||
|
:config="<?= htmlspecialchars(json_encode($configArray)); ?>"
|
||||||
|
>
|
||||||
|
</router-view>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<?php $this->load->view('templates/FHC-Footer', $includesArray); ?>
|
||||||
|
|
||||||
@@ -17,6 +17,7 @@
|
|||||||
$use_vuejs_dev_version = $this->config->item('use_vuejs_dev_version');
|
$use_vuejs_dev_version = $this->config->item('use_vuejs_dev_version');
|
||||||
|
|
||||||
// By default set the parameters to null
|
// By default set the parameters to null
|
||||||
|
$customCSSs = isset($customCSSs) ? $customCSSs : null;
|
||||||
$customJSs = isset($customJSs) ? $customJSs : null;
|
$customJSs = isset($customJSs) ? $customJSs : null;
|
||||||
$customJSModules = isset($customJSModules) ? $customJSModules : null;
|
$customJSModules = isset($customJSModules) ? $customJSModules : null;
|
||||||
|
|
||||||
@@ -191,12 +192,13 @@
|
|||||||
// NOTE: keep it as the last but one
|
// NOTE: keep it as the last but one
|
||||||
if ($addons === true) generateAddonsJSsInclude($calledPath.'/'.$calledMethod);
|
if ($addons === true) generateAddonsJSsInclude($calledPath.'/'.$calledMethod);
|
||||||
|
|
||||||
|
$extapphelper = ExtendableAppsHelper::getInstance();
|
||||||
|
$extapphelper->init($customCSSs, $customJSs, $customJSModules);
|
||||||
|
|
||||||
// Eventually required JS
|
// Eventually required JS
|
||||||
// NOTE: keep it as the latest
|
// NOTE: keep it as the latest
|
||||||
generateJSsInclude($customJSs);
|
generateJSsInclude($extapphelper->getCustomJSs());
|
||||||
generateJSModulesInclude($customJSModules);
|
generateJSModulesInclude($extapphelper->getCustomJSModules());
|
||||||
?>
|
?>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|||||||
@@ -9,6 +9,8 @@
|
|||||||
$title = isset($title) ? $title : null;
|
$title = isset($title) ? $title : null;
|
||||||
$refresh = isset($refresh) ? $refresh : null;
|
$refresh = isset($refresh) ? $refresh : null;
|
||||||
$customCSSs = isset($customCSSs) ? $customCSSs : null;
|
$customCSSs = isset($customCSSs) ? $customCSSs : null;
|
||||||
|
$customJSs = isset($customJSs) ? $customJSs : null;
|
||||||
|
$customJSModules = isset($customJSModules) ? $customJSModules : null;
|
||||||
$skipID = isset($skipID) ? $skipID : null;
|
$skipID = isset($skipID) ? $skipID : null;
|
||||||
?>
|
?>
|
||||||
<!-- Header start -->
|
<!-- Header start -->
|
||||||
@@ -132,8 +134,11 @@
|
|||||||
//Tags
|
//Tags
|
||||||
if ($tags === true) generateCSSsInclude('public/css/tags.css');
|
if ($tags === true) generateCSSsInclude('public/css/tags.css');
|
||||||
|
|
||||||
|
$extapphelper = ExtendableAppsHelper::getInstance();
|
||||||
|
$extapphelper->init($customCSSs, $customJSs, $customJSModules);
|
||||||
|
|
||||||
// Eventually required CSS
|
// Eventually required CSS
|
||||||
generateCSSsInclude($customCSSs); // Eventually required CSS
|
generateCSSsInclude($extapphelper->getCustomCSSs()); // Eventually required CSS
|
||||||
?>
|
?>
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
|
|||||||
@@ -264,7 +264,7 @@ else
|
|||||||
tbl_bisio.bisio_id, tbl_bisio.bis, tbl_bisio.von,
|
tbl_bisio.bisio_id, tbl_bisio.bis, tbl_bisio.von,
|
||||||
tbl_zeugnisnote.note,tbl_mobilitaet.mobilitaetstyp_kurzbz,
|
tbl_zeugnisnote.note,tbl_mobilitaet.mobilitaetstyp_kurzbz,
|
||||||
(CASE WHEN bis.tbl_mobilitaet.studiensemester_kurzbz = vw_student_lehrveranstaltung.studiensemester_kurzbz THEN '1' ELSE '' END) as doubledegree,
|
(CASE WHEN bis.tbl_mobilitaet.studiensemester_kurzbz = vw_student_lehrveranstaltung.studiensemester_kurzbz THEN '1' ELSE '' END) as doubledegree,
|
||||||
tbl_note.lkt_ueberschreibbar, tbl_note.anmerkung
|
tbl_note.lkt_ueberschreibbar, tbl_note.anmerkung, tbl_zeugnisnote.punkte
|
||||||
FROM
|
FROM
|
||||||
campus.vw_student_lehrveranstaltung JOIN public.tbl_benutzer USING(uid)
|
campus.vw_student_lehrveranstaltung JOIN public.tbl_benutzer USING(uid)
|
||||||
JOIN public.tbl_person USING(person_id) JOIN public.tbl_student ON(uid=student_uid)
|
JOIN public.tbl_person USING(person_id) JOIN public.tbl_student ON(uid=student_uid)
|
||||||
@@ -306,7 +306,14 @@ else
|
|||||||
&& $elem->von < $stsemdatumbis && (anzahlTage($elem->von, $elem->bis) >= 30))
|
&& $elem->von < $stsemdatumbis && (anzahlTage($elem->von, $elem->bis) >= 30))
|
||||||
$inc.=' (o)';
|
$inc.=' (o)';
|
||||||
|
|
||||||
$note = $elem->note;
|
if(defined('CIS_GESAMTNOTE_PUNKTE') && CIS_GESAMTNOTE_PUNKTE==true)
|
||||||
|
{
|
||||||
|
$note = $elem->punkte;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
$note = $elem->note;
|
||||||
|
}
|
||||||
|
|
||||||
if($elem->lkt_ueberschreibbar == 'f') // angerechnet / intern angerechnet / nicht zugelassen
|
if($elem->lkt_ueberschreibbar == 'f') // angerechnet / intern angerechnet / nicht zugelassen
|
||||||
{
|
{
|
||||||
@@ -339,20 +346,23 @@ else
|
|||||||
{
|
{
|
||||||
$worksheet->write($lines,8, trim($elem->matrikelnr), $format_highlight);
|
$worksheet->write($lines,8, trim($elem->matrikelnr), $format_highlight);
|
||||||
$pr = new Pruefung();
|
$pr = new Pruefung();
|
||||||
$pr->getPruefungen($elem->uid, "Termin2", $lvid, $sem);
|
$pr->getPruefungen($elem->uid, "Termin2", $lvid, $stsem);
|
||||||
$output2 = $pr->result;
|
$output2 = $pr->result;
|
||||||
|
|
||||||
if ($output2)
|
if ($output2)
|
||||||
{
|
{
|
||||||
$resultPr = $output2[0];
|
$resultPr = $output2[0];
|
||||||
$worksheet->write($lines,9, date('d.m.Y', strtotime($resultPr->datum)), $format_highlightright_date);
|
$worksheet->write($lines,9, date('d.m.Y', strtotime($resultPr->datum)), $format_highlightright_date);
|
||||||
$worksheet->write($lines,10, $resultPr->note, $format_highlightright);
|
if(defined('CIS_GESAMTNOTE_PUNKTE') && CIS_GESAMTNOTE_PUNKTE==true)
|
||||||
|
$worksheet->write($lines,10, $resultPr->punkte, $format_highlightright);
|
||||||
|
else
|
||||||
|
$worksheet->write($lines,10, $resultPr->note, $format_highlightright);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
$worksheet->write($lines,9, '', $format_highlightright_date);
|
||||||
|
$worksheet->write($lines,10, '', $format_highlightright);
|
||||||
}
|
}
|
||||||
else
|
|
||||||
{
|
|
||||||
$worksheet->write($lines,9, '', $format_highlightright_date);
|
|
||||||
$worksheet->write($lines,10, '', $format_highlightright);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Nachprüfung
|
// Nachprüfung
|
||||||
@@ -360,20 +370,23 @@ else
|
|||||||
{
|
{
|
||||||
$worksheet->write($lines,12, trim($elem->matrikelnr), $format_highlight);
|
$worksheet->write($lines,12, trim($elem->matrikelnr), $format_highlight);
|
||||||
$pr = new Pruefung();
|
$pr = new Pruefung();
|
||||||
$pr->getPruefungen($elem->uid, "Termin3", $lvid, $sem);
|
$pr->getPruefungen($elem->uid, "Termin3", $lvid, $stsem);
|
||||||
$output3 = $pr->result;
|
$output3 = $pr->result;
|
||||||
|
|
||||||
if ($output3)
|
if ($output3)
|
||||||
{
|
{
|
||||||
$resultPr = $output3[0];
|
$resultPr = $output3[0];
|
||||||
$worksheet->write($lines,13, date('d.m.Y', strtotime($resultPr->datum)), $format_highlightright_date);
|
$worksheet->write($lines,13, date('d.m.Y', strtotime($resultPr->datum)), $format_highlightright_date);
|
||||||
$worksheet->write($lines,14, $resultPr->note, $format_highlightright);
|
if(defined('CIS_GESAMTNOTE_PUNKTE') && CIS_GESAMTNOTE_PUNKTE==true)
|
||||||
|
$worksheet->write($lines,14, $resultPr->punkte, $format_highlightright);
|
||||||
|
else
|
||||||
|
$worksheet->write($lines,14, $resultPr->note, $format_highlightright);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
$worksheet->write($lines,13, '', $format_highlightright_date);
|
||||||
|
$worksheet->write($lines,14, '', $format_highlightright);
|
||||||
}
|
}
|
||||||
else
|
|
||||||
{
|
|
||||||
$worksheet->write($lines,13, '', $format_highlightright_date);
|
|
||||||
$worksheet->write($lines,14, '', $format_highlightright);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
$i++;
|
$i++;
|
||||||
|
|||||||
@@ -371,4 +371,6 @@ define('STATUS_VORRUECKEN_ANZEIGEN', true);
|
|||||||
//externe Ueberwachung im Testtool erlauben
|
//externe Ueberwachung im Testtool erlauben
|
||||||
define('TESTTOOL_EXTERNE_UEBERWACHUNG_ALLOWED', false);
|
define('TESTTOOL_EXTERNE_UEBERWACHUNG_ALLOWED', false);
|
||||||
|
|
||||||
|
//enable tags in StudVW
|
||||||
|
define('STV_TAGS_ENABLED', false);
|
||||||
?>
|
?>
|
||||||
|
|||||||
@@ -798,6 +798,10 @@ echo '<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>';
|
|||||||
class="sortDirectionIndicator"
|
class="sortDirectionIndicator"
|
||||||
sort="rdf:http://www.technikum-wien.at/prestudentrolle/rdf#updatevon" />
|
sort="rdf:http://www.technikum-wien.at/prestudentrolle/rdf#updatevon" />
|
||||||
<splitter class="tree-splitter"/>
|
<splitter class="tree-splitter"/>
|
||||||
|
<treecol id="student-prestudent-tree-rolle-fgm" label="FGM" flex="1" hidden="true" persist="hidden, width, ordinal"
|
||||||
|
class="sortDirectionIndicator"
|
||||||
|
sort="rdf:http://www.technikum-wien.at/prestudentrolle/rdf#fgm" />
|
||||||
|
<splitter class="tree-splitter"/>
|
||||||
</treecols>
|
</treecols>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
@@ -823,6 +827,7 @@ echo '<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>';
|
|||||||
<treecell properties="Aktiv_rdf:http://www.technikum-wien.at/prestudentrolle/rdf#aktiv rdf:http://www.technikum-wien.at/prestudentrolle/rdf#stichtagsaktiv" label="rdf:http://www.technikum-wien.at/prestudentrolle/rdf#insertvon"/>
|
<treecell properties="Aktiv_rdf:http://www.technikum-wien.at/prestudentrolle/rdf#aktiv rdf:http://www.technikum-wien.at/prestudentrolle/rdf#stichtagsaktiv" label="rdf:http://www.technikum-wien.at/prestudentrolle/rdf#insertvon"/>
|
||||||
<treecell properties="Aktiv_rdf:http://www.technikum-wien.at/prestudentrolle/rdf#aktiv rdf:http://www.technikum-wien.at/prestudentrolle/rdf#stichtagsaktiv" label="rdf:http://www.technikum-wien.at/prestudentrolle/rdf#updateamum"/>
|
<treecell properties="Aktiv_rdf:http://www.technikum-wien.at/prestudentrolle/rdf#aktiv rdf:http://www.technikum-wien.at/prestudentrolle/rdf#stichtagsaktiv" label="rdf:http://www.technikum-wien.at/prestudentrolle/rdf#updateamum"/>
|
||||||
<treecell properties="Aktiv_rdf:http://www.technikum-wien.at/prestudentrolle/rdf#aktiv rdf:http://www.technikum-wien.at/prestudentrolle/rdf#stichtagsaktiv" label="rdf:http://www.technikum-wien.at/prestudentrolle/rdf#updatevon"/>
|
<treecell properties="Aktiv_rdf:http://www.technikum-wien.at/prestudentrolle/rdf#aktiv rdf:http://www.technikum-wien.at/prestudentrolle/rdf#stichtagsaktiv" label="rdf:http://www.technikum-wien.at/prestudentrolle/rdf#updatevon"/>
|
||||||
|
<treecell properties="Aktiv_rdf:http://www.technikum-wien.at/prestudentrolle/rdf#aktiv rdf:http://www.technikum-wien.at/prestudentrolle/rdf#stichtagsaktiv" label="rdf:http://www.technikum-wien.at/prestudentrolle/rdf#fgm"/>
|
||||||
</treerow>
|
</treerow>
|
||||||
</treeitem>
|
</treeitem>
|
||||||
</treechildren>
|
</treechildren>
|
||||||
|
|||||||
@@ -705,6 +705,7 @@ class prestudent extends person
|
|||||||
$rolle->studienplan_bezeichnung = $row->studienplan_bezeichnung;
|
$rolle->studienplan_bezeichnung = $row->studienplan_bezeichnung;
|
||||||
$rolle->bestaetigtam = $row->bestaetigtam;
|
$rolle->bestaetigtam = $row->bestaetigtam;
|
||||||
$rolle->bestaetigtvon = $row->bestaetigtvon;
|
$rolle->bestaetigtvon = $row->bestaetigtvon;
|
||||||
|
$rolle->fgm = $row->fgm;
|
||||||
$rolle->anmerkung_status = $row->anmerkung;
|
$rolle->anmerkung_status = $row->anmerkung;
|
||||||
$rolle->bewerbung_abgeschicktamum = $row->bewerbung_abgeschicktamum;
|
$rolle->bewerbung_abgeschicktamum = $row->bewerbung_abgeschicktamum;
|
||||||
$rolle->rt_stufe = $row->rt_stufe;
|
$rolle->rt_stufe = $row->rt_stufe;
|
||||||
|
|||||||
@@ -12,22 +12,22 @@ html {
|
|||||||
font-size: .875em;
|
font-size: .875em;
|
||||||
}
|
}
|
||||||
html.fs_xx-small {
|
html.fs_xx-small {
|
||||||
font-size: .5em;
|
font-size: .625em;
|
||||||
}
|
}
|
||||||
html.fs_x-small {
|
html.fs_x-small {
|
||||||
font-size: .625em;
|
font-size: .6875em;
|
||||||
}
|
}
|
||||||
html.fs_small {
|
html.fs_small {
|
||||||
font-size: .75em;
|
font-size: .75em;
|
||||||
}
|
}
|
||||||
html.fs_normal {
|
html.fs_normal {
|
||||||
font-size: .875em;
|
font-size: .8125em;
|
||||||
}
|
}
|
||||||
html.fs_big {
|
html.fs_big {
|
||||||
font-size: 1em;
|
font-size: .875em;
|
||||||
}
|
}
|
||||||
html.fs_huge {
|
html.fs_huge {
|
||||||
font-size: 1.125em;
|
font-size: 1em;
|
||||||
}
|
}
|
||||||
|
|
||||||
#appMenu {
|
#appMenu {
|
||||||
@@ -74,6 +74,12 @@ html.fs_huge {
|
|||||||
color: var(--gray-500);
|
color: var(--gray-500);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Aufnahme Termine: background color green*/
|
||||||
|
.stv-details-admission-table .row-green{
|
||||||
|
background-color: lightgreen !important;
|
||||||
|
//color: var(--green-200);
|
||||||
|
}
|
||||||
|
|
||||||
/* Dropdown Toolbar Interessent, submenu */
|
/* Dropdown Toolbar Interessent, submenu */
|
||||||
.dropend .dropdown-toggle.d-flex::after {
|
.dropend .dropdown-toggle.d-flex::after {
|
||||||
height: 0;
|
height: 0;
|
||||||
@@ -116,6 +122,15 @@ html.fs_huge {
|
|||||||
position: inherit;
|
position: inherit;
|
||||||
z-index: 1;
|
z-index: 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.sidebar-collapsed #sidebarMenu {
|
||||||
|
display: none !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.sidebar-collapsed .container-fluid > .row > main {
|
||||||
|
flex: 0 0 100%;
|
||||||
|
max-width: 100%;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -168,7 +183,7 @@ html.fs_huge {
|
|||||||
}
|
}
|
||||||
|
|
||||||
.has-filter .fa-filter {
|
.has-filter .fa-filter {
|
||||||
color: var(--bs-success);
|
color: var(--bs-danger);
|
||||||
}
|
}
|
||||||
.override_filtercmpt_actions_style div.d-flex.align-items-baseline {
|
.override_filtercmpt_actions_style div.d-flex.align-items-baseline {
|
||||||
align-items: end !important;
|
align-items: end !important;
|
||||||
@@ -185,3 +200,84 @@ html.fs_huge {
|
|||||||
.tiny-90 div.tox.tox-tinymce {
|
.tiny-90 div.tox.tox-tinymce {
|
||||||
height: 90% !important;
|
height: 90% !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* slim begin */
|
||||||
|
.stv .form-label {
|
||||||
|
margin-bottom: .15rem;
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
.stv .form-control,
|
||||||
|
.stv .form-select,
|
||||||
|
.stv .input-group-text {
|
||||||
|
padding-top: .15rem;
|
||||||
|
padding-bottom: .15rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
:root {
|
||||||
|
--bs-body-line-height: 1.2;
|
||||||
|
}
|
||||||
|
|
||||||
|
.stv .tabulator-row .tabulator-cell,
|
||||||
|
.stv .tabulator-header-filter input {
|
||||||
|
padding-top: 1px !important;
|
||||||
|
padding-bottom: 1px !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.stv .tabulator-row {
|
||||||
|
min-height: 18px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.stv .btn {
|
||||||
|
--bs-btn-padding-y: 0.25rem;
|
||||||
|
--bs-btn-line-height: 1.2;
|
||||||
|
}
|
||||||
|
|
||||||
|
.stv .p-button.p-button-icon-only {
|
||||||
|
padding-top: 0;
|
||||||
|
padding-bottom: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.stv .p-tabview .p-tabview-nav li .p-tabview-nav-link {
|
||||||
|
padding: 0.25rem .5rem;
|
||||||
|
}
|
||||||
|
/*
|
||||||
|
.stv .p-tabview .p-tabview-panels {
|
||||||
|
background-color: #e5eff5;
|
||||||
|
}
|
||||||
|
|
||||||
|
.stv .p-tabview .p-tabview-nav li.p-highlight .p-tabview-nav-link {
|
||||||
|
background: #e5eff5;
|
||||||
|
border-color: #dee2e6 #dee2e6 #e5eff5 #dee2e6;
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
.stv-details-details-foto img {
|
||||||
|
max-height: 120px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.stv .tabulator-row .tabulator-frozen,
|
||||||
|
.stv .tabulator-row .tabulator-cell {
|
||||||
|
border-bottom: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
.stv .p-treetable .p-treetable-thead > tr > th,
|
||||||
|
.stv .p-treetable .p-treetable-tbody > tr {
|
||||||
|
background-color: #e5eff5;
|
||||||
|
}
|
||||||
|
|
||||||
|
.stv .p-treetable .p-treetable-tbody > tr.p-highlight {
|
||||||
|
background: #007bff;
|
||||||
|
color: #fff;
|
||||||
|
}
|
||||||
|
|
||||||
|
.stv .p-treetable.p-treetable-hoverable-rows .p-treetable-tbody > tr:not(.p-highlight):hover {
|
||||||
|
background: #fff;
|
||||||
|
color: #212529;
|
||||||
|
}
|
||||||
|
|
||||||
|
.tabulator-row.tabulator-row-even .tabulator-cell {
|
||||||
|
background-color: #e5eff5;
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
/* slim ende */
|
||||||
|
|||||||
@@ -0,0 +1,20 @@
|
|||||||
|
@import './components/verticalsplit.css';
|
||||||
|
|
||||||
|
html {
|
||||||
|
font-size: .875em;
|
||||||
|
}
|
||||||
|
.vv{
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
height: 100vh;
|
||||||
|
}
|
||||||
|
.vv> header {
|
||||||
|
flex: 0 0 auto;
|
||||||
|
}
|
||||||
|
.vv> div {
|
||||||
|
flex: 1 1 auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
.vv {
|
||||||
|
margin-left: 0 !important;
|
||||||
|
}
|
||||||
@@ -0,0 +1,64 @@
|
|||||||
|
.foto-container:hover .fotoedit {
|
||||||
|
opacity: 1 !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.bg-unruly {
|
||||||
|
background-color: #ad1010 !important;
|
||||||
|
color: white;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*.fotosperre {
|
||||||
|
z-index: 1;
|
||||||
|
font-size: 1rem;
|
||||||
|
width: 1.25rem;
|
||||||
|
height: 1.25rem;
|
||||||
|
}*/
|
||||||
|
|
||||||
|
.foto-container .fotoedit {
|
||||||
|
opacity: 0;
|
||||||
|
transition: opacity 0.3s;
|
||||||
|
backdrop-filter: blur(2px);
|
||||||
|
}
|
||||||
|
|
||||||
|
.fotoedit {
|
||||||
|
background-color: rgba(0, 0, 0, 0.4);
|
||||||
|
color: white;
|
||||||
|
border: none;
|
||||||
|
z-index: 4;
|
||||||
|
font-size: 1rem;
|
||||||
|
width: 1.8rem;
|
||||||
|
height: 1.8rem;
|
||||||
|
opacity:0;
|
||||||
|
transition: opacity 0.2s;
|
||||||
|
top:20%;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* fotoeditMa {
|
||||||
|
background-color: rgba(0, 0, 0, 0.4);
|
||||||
|
color: white;
|
||||||
|
border: none;
|
||||||
|
z-index: 4;
|
||||||
|
font-size: 1rem;
|
||||||
|
opacity:0;
|
||||||
|
transition: opacity 0.2s;
|
||||||
|
top:20%;
|
||||||
|
}*/
|
||||||
|
|
||||||
|
.buttonleft {
|
||||||
|
margin-left: .25rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.buttonright {
|
||||||
|
margin-right: .25rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*.fotoEditMa {
|
||||||
|
z-index: 104;
|
||||||
|
font-size: 1rem;
|
||||||
|
width: 2.5rem;
|
||||||
|
height: 2.5rem;
|
||||||
|
opacity:0;
|
||||||
|
transition: opacity 0.2s;
|
||||||
|
top:13%;"
|
||||||
|
z-index: 104; font-size: 1rem; width: 2.5rem; height: 2.5rem; opacity:0; transition: opacity 0.2s; top:13%;"
|
||||||
|
}*/
|
||||||
@@ -3578,6 +3578,12 @@
|
|||||||
transition: box-shadow 0.15s;
|
transition: box-shadow 0.15s;
|
||||||
margin-right: 0.5rem;
|
margin-right: 0.5rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.p-treetable .p-treetable-tbody > tr > td .p-treetable-toggler > svg,
|
||||||
|
.p-treetable .p-treetable-tbody > tr > td .p-treetable-toggler > svg * {
|
||||||
|
pointer-events: none;
|
||||||
|
}
|
||||||
|
|
||||||
.p-treetable .p-treetable-tbody > tr > td .p-treetable-toggler:enabled:hover {
|
.p-treetable .p-treetable-tbody > tr > td .p-treetable-toggler:enabled:hover {
|
||||||
color: #495057;
|
color: #495057;
|
||||||
border-color: transparent;
|
border-color: transparent;
|
||||||
|
|||||||
@@ -0,0 +1,50 @@
|
|||||||
|
/**
|
||||||
|
* 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/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
const FhcApps = (function() {
|
||||||
|
// Logic to extend app here (like adding components, plugins, ...)
|
||||||
|
|
||||||
|
function makeExtendable(app) {
|
||||||
|
// apply extensions here
|
||||||
|
return app;
|
||||||
|
}
|
||||||
|
|
||||||
|
return {
|
||||||
|
makeExtendable
|
||||||
|
};
|
||||||
|
})();
|
||||||
|
|
||||||
|
FhcApps.router = (() => {
|
||||||
|
const extraRoutes = [];
|
||||||
|
|
||||||
|
function addRoute(...route) {
|
||||||
|
extraRoutes.push(route);
|
||||||
|
}
|
||||||
|
|
||||||
|
function makeExtendable(router) {
|
||||||
|
while (extraRoutes.length) {
|
||||||
|
router.addRoute(...extraRoutes.shift());
|
||||||
|
}
|
||||||
|
router.replace(router.currentRoute.value.fullPath);
|
||||||
|
}
|
||||||
|
|
||||||
|
return {
|
||||||
|
addRoute,
|
||||||
|
makeExtendable
|
||||||
|
};
|
||||||
|
})();
|
||||||
@@ -19,19 +19,19 @@ export default {
|
|||||||
getHeader(person_id){
|
getHeader(person_id){
|
||||||
return {
|
return {
|
||||||
method: 'get',
|
method: 'get',
|
||||||
url: 'api/frontend/v1/vertraege/vertraege/getHeader/' + person_id,
|
url: 'api/frontend/v1/detailheader/detailheader/getHeader/' + person_id,
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
getPersonAbteilung(mitarbeiter_uid){
|
getPersonAbteilung(mitarbeiter_uid){
|
||||||
return {
|
return {
|
||||||
method: 'get',
|
method: 'get',
|
||||||
url: 'api/frontend/v1/vertraege/vertraege/getPersonAbteilung/' + mitarbeiter_uid,
|
url: 'api/frontend/v1/detailheader/detailheader/getPersonAbteilung/' + mitarbeiter_uid,
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
getLeitungOrg(oekurzbz){
|
getLeitungOrg(oekurzbz){
|
||||||
return {
|
return {
|
||||||
method: 'get',
|
method: 'get',
|
||||||
url: 'api/frontend/v1/vertraege/vertraege/getLeitungOrg/' + oekurzbz,
|
url: 'api/frontend/v1/detailheader/detailheader/getLeitungOrg/' + oekurzbz,
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
getSemesterStati(prestudent_id){
|
getSemesterStati(prestudent_id){
|
||||||
|
|||||||
@@ -0,0 +1,32 @@
|
|||||||
|
/**
|
||||||
|
* 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 {
|
||||||
|
uploadFoto(person_id, params) {
|
||||||
|
return {
|
||||||
|
method: 'post',
|
||||||
|
url: 'api/frontend/v1/fotoHandling/Foto/uploadFoto/' + person_id,
|
||||||
|
params
|
||||||
|
};
|
||||||
|
},
|
||||||
|
deleteFoto(person_id){
|
||||||
|
return {
|
||||||
|
method: 'post',
|
||||||
|
url: 'api/frontend/v1/fotoHandling/Foto/deleteFoto/' + person_id
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -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/notizAnrechnung/getNotizen/' + encodeURIComponent(id) + '/' + encodeURIComponent(type)
|
||||||
|
};
|
||||||
|
},
|
||||||
|
};
|
||||||
@@ -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/notizBestellung/getNotizen/' + encodeURIComponent(id) + '/' + encodeURIComponent(type)
|
||||||
|
};
|
||||||
|
},
|
||||||
|
};
|
||||||
@@ -26,4 +26,29 @@ export default {
|
|||||||
url: 'api/frontend/v1/notiz/notizLehreinheit/getNotizen/' + encodeURIComponent(id) + '/' + encodeURIComponent(type)
|
url: 'api/frontend/v1/notiz/notizLehreinheit/getNotizen/' + encodeURIComponent(id) + '/' + encodeURIComponent(type)
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
|
addNewNotiz(lehreinheit_id, params) {
|
||||||
|
return {
|
||||||
|
method: 'post',
|
||||||
|
url: 'api/frontend/v1/notiz/notizLehreinheit/addNewNotiz/' + lehreinheit_id,
|
||||||
|
params
|
||||||
|
};
|
||||||
|
},
|
||||||
|
updateNotiz(notiz_id, params) {
|
||||||
|
return {
|
||||||
|
method: 'post',
|
||||||
|
url: 'api/frontend/v1/notiz/notizLehreinheit/updateNotiz/' + notiz_id,
|
||||||
|
params
|
||||||
|
};
|
||||||
|
},
|
||||||
|
deleteNotiz(notiz_id, type_id, id) {
|
||||||
|
return {
|
||||||
|
method: 'post',
|
||||||
|
url: 'api/frontend/v1/notiz/notizLehreinheit/deleteNotiz/',
|
||||||
|
params: {
|
||||||
|
notiz_id,
|
||||||
|
type_id,
|
||||||
|
id
|
||||||
|
}
|
||||||
|
};
|
||||||
|
},
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -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/notizMitarbeiter/getNotizen/' + encodeURIComponent(id) + '/' + encodeURIComponent(type)
|
||||||
|
};
|
||||||
|
},
|
||||||
|
};
|
||||||
@@ -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/notizPrestudent/getNotizen/' + encodeURIComponent(id) + '/' + encodeURIComponent(type)
|
||||||
|
};
|
||||||
|
},
|
||||||
|
};
|
||||||
@@ -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/notizProjekt/getNotizen/' + encodeURIComponent(id) + '/' + encodeURIComponent(type)
|
||||||
|
};
|
||||||
|
},
|
||||||
|
};
|
||||||
@@ -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/notizProjektphase/getNotizen/' + encodeURIComponent(id) + '/' + encodeURIComponent(type)
|
||||||
|
};
|
||||||
|
},
|
||||||
|
};
|
||||||
@@ -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/notizProjekttask/getNotizen/' + encodeURIComponent(id) + '/' + encodeURIComponent(type)
|
||||||
|
};
|
||||||
|
},
|
||||||
|
};
|
||||||
@@ -0,0 +1,54 @@
|
|||||||
|
export default {
|
||||||
|
|
||||||
|
getTag(data)
|
||||||
|
{
|
||||||
|
return {
|
||||||
|
method: 'get',
|
||||||
|
url: 'api/frontend/v1/stv/Tags/getTag',
|
||||||
|
params: data
|
||||||
|
};
|
||||||
|
},
|
||||||
|
|
||||||
|
getTags(data)
|
||||||
|
{
|
||||||
|
return {
|
||||||
|
method: 'get',
|
||||||
|
url: 'api/frontend/v1/stv/Tags/getTags'
|
||||||
|
};
|
||||||
|
},
|
||||||
|
|
||||||
|
addTag(data)
|
||||||
|
{
|
||||||
|
return {
|
||||||
|
method: 'post',
|
||||||
|
url: 'api/frontend/v1/stv/Tags/addTag',
|
||||||
|
params: data
|
||||||
|
};
|
||||||
|
},
|
||||||
|
|
||||||
|
updateTag(data)
|
||||||
|
{
|
||||||
|
return {
|
||||||
|
method: 'post',
|
||||||
|
url: 'api/frontend/v1/stv/Tags/updateTag',
|
||||||
|
params: data
|
||||||
|
};
|
||||||
|
},
|
||||||
|
doneTag(data)
|
||||||
|
{
|
||||||
|
return {
|
||||||
|
method: 'post',
|
||||||
|
url: 'api/frontend/v1/stv/Tags/doneTag',
|
||||||
|
params: data
|
||||||
|
};
|
||||||
|
},
|
||||||
|
|
||||||
|
deleteTag(data)
|
||||||
|
{
|
||||||
|
return {
|
||||||
|
method: 'post',
|
||||||
|
url: 'api/frontend/v1/stv/Tags/deleteTag',
|
||||||
|
params: data
|
||||||
|
};
|
||||||
|
},
|
||||||
|
};
|
||||||
@@ -0,0 +1,136 @@
|
|||||||
|
/**
|
||||||
|
* 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 {
|
||||||
|
getAllVertraege(person_id) {
|
||||||
|
return {
|
||||||
|
method: 'get',
|
||||||
|
url: 'api/frontend/v1/vertraege/Vertraege/getAllVertraege/' + person_id
|
||||||
|
};
|
||||||
|
},
|
||||||
|
getAllContractsNotAssigned(person_id) {
|
||||||
|
return {
|
||||||
|
method: 'get',
|
||||||
|
url: 'api/frontend/v1/vertraege/Vertraege/getAllContractsNotAssigned/' + person_id
|
||||||
|
};
|
||||||
|
},
|
||||||
|
getAllContractsAssigned(person_id, vertrag_id) {
|
||||||
|
return {
|
||||||
|
method: 'get',
|
||||||
|
url: 'api/frontend/v1/vertraege/Vertraege/getAllContractsAssigned/' + person_id + '/' + vertrag_id + ''
|
||||||
|
};
|
||||||
|
},
|
||||||
|
getAllContractTypes() {
|
||||||
|
return {
|
||||||
|
method: 'get',
|
||||||
|
url: 'api/frontend/v1/vertraege/Vertraege/getAllContractTypes/'
|
||||||
|
};
|
||||||
|
},
|
||||||
|
getStatiOfContract(person_id, vertrag_id){
|
||||||
|
return {
|
||||||
|
method: 'get',
|
||||||
|
url: 'api/frontend/v1/vertraege/Vertraege/getStatiOfContract/' + person_id + '/' + vertrag_id
|
||||||
|
};
|
||||||
|
},
|
||||||
|
configPrintDocument() {
|
||||||
|
return {
|
||||||
|
method: 'get',
|
||||||
|
url: 'api/frontend/v1/vertraege/Config/printDocument/'
|
||||||
|
};
|
||||||
|
},
|
||||||
|
getAllContractStati() {
|
||||||
|
return {
|
||||||
|
method: 'get',
|
||||||
|
url: 'api/frontend/v1/vertraege/vertraege/getAllContractStati/'
|
||||||
|
};
|
||||||
|
},
|
||||||
|
deleteContract(vertrag_id) {
|
||||||
|
return {
|
||||||
|
method: 'post',
|
||||||
|
url: 'api/frontend/v1/vertraege/vertraege/deleteContract/' + vertrag_id
|
||||||
|
};
|
||||||
|
},
|
||||||
|
addNewContract(params) {
|
||||||
|
return {
|
||||||
|
method: 'post',
|
||||||
|
url: 'api/frontend/v1/vertraege/vertraege/addNewContract/',
|
||||||
|
params
|
||||||
|
};
|
||||||
|
},
|
||||||
|
loadContract(vertrag_id){
|
||||||
|
return {
|
||||||
|
method: 'get',
|
||||||
|
url: 'api/frontend/v1/vertraege/vertraege/loadContract/' + vertrag_id
|
||||||
|
};
|
||||||
|
},
|
||||||
|
updateContract(params) {
|
||||||
|
return {
|
||||||
|
method: 'post',
|
||||||
|
url: 'api/frontend/v1/vertraege/vertraege/updateContract/',
|
||||||
|
params
|
||||||
|
};
|
||||||
|
},
|
||||||
|
loadContractStatus(params){
|
||||||
|
return {
|
||||||
|
method: 'get',
|
||||||
|
url: 'api/frontend/v1/vertraege/vertraege/loadContractStatus/',
|
||||||
|
params
|
||||||
|
};
|
||||||
|
},
|
||||||
|
insertContractStatus(params) {
|
||||||
|
return {
|
||||||
|
method: 'post',
|
||||||
|
url: 'api/frontend/v1/vertraege/vertraege/insertContractStatus/',
|
||||||
|
params
|
||||||
|
};
|
||||||
|
},
|
||||||
|
updateContractStatus(params) {
|
||||||
|
return {
|
||||||
|
method: 'post',
|
||||||
|
url: 'api/frontend/v1/vertraege/vertraege/updateContractStatus/',
|
||||||
|
params
|
||||||
|
};
|
||||||
|
},
|
||||||
|
deleteContractStatus(params) {
|
||||||
|
return {
|
||||||
|
method: 'post',
|
||||||
|
url: 'api/frontend/v1/vertraege/vertraege/deleteContractStatus/',
|
||||||
|
params
|
||||||
|
};
|
||||||
|
},
|
||||||
|
deleteLehrauftrag(params) {
|
||||||
|
return {
|
||||||
|
method: 'post',
|
||||||
|
url: 'api/frontend/v1/vertraege/vertraege/deleteLehrauftrag/',
|
||||||
|
params
|
||||||
|
};
|
||||||
|
},
|
||||||
|
deleteBetreuung(params) {
|
||||||
|
return {
|
||||||
|
method: 'post',
|
||||||
|
url: 'api/frontend/v1/vertraege/vertraege/deleteBetreuung/',
|
||||||
|
params
|
||||||
|
};
|
||||||
|
},
|
||||||
|
//loaded by mitarbeiter_header_js
|
||||||
|
getMitarbeiter(){
|
||||||
|
return {
|
||||||
|
method: 'get',
|
||||||
|
url: 'api/frontend/v1/vertraege/vertraege/getMitarbeiter/',
|
||||||
|
};
|
||||||
|
},
|
||||||
|
};
|
||||||
@@ -39,6 +39,7 @@ import studiengang from "./studiengang.js";
|
|||||||
import menu from "./menu.js";
|
import menu from "./menu.js";
|
||||||
import dashboard from "./dashboard.js";
|
import dashboard from "./dashboard.js";
|
||||||
import authinfo from "./authinfo.js";
|
import authinfo from "./authinfo.js";
|
||||||
|
import vertraege from "./vertraege.js";
|
||||||
import studium from "./studium.js";
|
import studium from "./studium.js";
|
||||||
import language from "./language.js";
|
import language from "./language.js";
|
||||||
|
|
||||||
@@ -68,6 +69,7 @@ export default {
|
|||||||
studiengang,
|
studiengang,
|
||||||
menu,
|
menu,
|
||||||
authinfo,
|
authinfo,
|
||||||
|
vertraege,
|
||||||
studium,
|
studium,
|
||||||
language
|
language
|
||||||
};
|
};
|
||||||
|
|||||||
+19
-2
@@ -1,5 +1,22 @@
|
|||||||
import person from "./notiz/person.js";
|
import person from "./notiz/person.js";
|
||||||
|
import prestudent from "./notiz/prestudent.js";
|
||||||
|
import mitarbeiter from "./notiz/mitarbeiter.js";
|
||||||
|
import projekt from "./notiz/projekt.js";
|
||||||
|
import anrechnung from "./notiz/anrechnung.js";
|
||||||
|
import bestellung from "./notiz/bestellung.js";
|
||||||
|
import lehreinheit from "./notiz/lehreinheit.js";
|
||||||
|
import projektphase from "./notiz/projektphase.js";
|
||||||
|
import projekttask from "./notiz/projekttask.js";
|
||||||
|
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
person
|
person,
|
||||||
}
|
prestudent,
|
||||||
|
mitarbeiter,
|
||||||
|
anrechnung,
|
||||||
|
bestellung,
|
||||||
|
lehreinheit,
|
||||||
|
projekt,
|
||||||
|
projektphase,
|
||||||
|
projekttask,
|
||||||
|
}
|
||||||
|
|||||||
@@ -0,0 +1,38 @@
|
|||||||
|
export default {
|
||||||
|
getNotizen(url, config, params){
|
||||||
|
return this.$fhcApi.get('api/frontend/v1/notiz/notizAnrechnung/getNotizen/' + params.id + '/' + params.type);
|
||||||
|
},
|
||||||
|
getUid(){
|
||||||
|
return this.$fhcApi.get('api/frontend/v1/notiz/notizAnrechnung/getUid/');
|
||||||
|
},
|
||||||
|
addNewNotiz(id, formData) {
|
||||||
|
return this.$fhcApi.post('api/frontend/v1/notiz/notizAnrechnung/addNewNotiz/' + id,
|
||||||
|
formData
|
||||||
|
);
|
||||||
|
},
|
||||||
|
loadNotiz(notiz_id){
|
||||||
|
return this.$fhcApi.post('api/frontend/v1/notiz/notizAnrechnung/loadNotiz/', {
|
||||||
|
notiz_id
|
||||||
|
});
|
||||||
|
},
|
||||||
|
loadDokumente(notiz_id){
|
||||||
|
return this.$fhcApi.post('api/frontend/v1/notiz/notizAnrechnung/loadDokumente/', {
|
||||||
|
notiz_id
|
||||||
|
});
|
||||||
|
},
|
||||||
|
deleteNotiz(notiz_id, type_id, id){
|
||||||
|
return this.$fhcApi.post('api/frontend/v1/notiz/notizAnrechnung/deleteNotiz/', {
|
||||||
|
notiz_id,
|
||||||
|
type_id,
|
||||||
|
id
|
||||||
|
});
|
||||||
|
},
|
||||||
|
updateNotiz(notiz_id, formData){
|
||||||
|
return this.$fhcApi.post('api/frontend/v1/notiz/notizAnrechnung/updateNotiz/' + notiz_id,
|
||||||
|
formData
|
||||||
|
);
|
||||||
|
},
|
||||||
|
getMitarbeiter(event){
|
||||||
|
return this.$fhcApi.get('api/frontend/v1/notiz/notizAnrechnung/getMitarbeiter/' + event);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,38 @@
|
|||||||
|
export default {
|
||||||
|
getNotizen(url, config, params){
|
||||||
|
return this.$fhcApi.get('api/frontend/v1/notiz/notizBestellung/getNotizen/' + params.id + '/' + params.type);
|
||||||
|
},
|
||||||
|
getUid(){
|
||||||
|
return this.$fhcApi.get('api/frontend/v1/notiz/notizBestellung/getUid/');
|
||||||
|
},
|
||||||
|
addNewNotiz(id, formData) {
|
||||||
|
return this.$fhcApi.post('api/frontend/v1/notiz/notizBestellung/addNewNotiz/' + id,
|
||||||
|
formData
|
||||||
|
);
|
||||||
|
},
|
||||||
|
loadNotiz(notiz_id){
|
||||||
|
return this.$fhcApi.post('api/frontend/v1/notiz/notizBestellung/loadNotiz/', {
|
||||||
|
notiz_id
|
||||||
|
});
|
||||||
|
},
|
||||||
|
loadDokumente(notiz_id){
|
||||||
|
return this.$fhcApi.post('api/frontend/v1/notiz/notizBestellung/loadDokumente/', {
|
||||||
|
notiz_id
|
||||||
|
});
|
||||||
|
},
|
||||||
|
deleteNotiz(notiz_id, type_id, id){
|
||||||
|
return this.$fhcApi.post('api/frontend/v1/notiz/notizBestellung/deleteNotiz/', {
|
||||||
|
notiz_id,
|
||||||
|
type_id,
|
||||||
|
id
|
||||||
|
});
|
||||||
|
},
|
||||||
|
updateNotiz(notiz_id, formData){
|
||||||
|
return this.$fhcApi.post('api/frontend/v1/notiz/notizBestellung/updateNotiz/' + notiz_id,
|
||||||
|
formData
|
||||||
|
);
|
||||||
|
},
|
||||||
|
getMitarbeiter(event){
|
||||||
|
return this.$fhcApi.get('api/frontend/v1/notiz/notizBestellung/getMitarbeiter/' + event);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,38 @@
|
|||||||
|
export default {
|
||||||
|
getNotizen(url, config, params){
|
||||||
|
return this.$fhcApi.get('api/frontend/v1/notiz/notizLehreinheit/getNotizen/' + params.id + '/' + params.type);
|
||||||
|
},
|
||||||
|
getUid(){
|
||||||
|
return this.$fhcApi.get('api/frontend/v1/notiz/notizLehreinheit/getUid/');
|
||||||
|
},
|
||||||
|
addNewNotiz(id, formData) {
|
||||||
|
return this.$fhcApi.post('api/frontend/v1/notiz/notizLehreinheit/addNewNotiz/' + id,
|
||||||
|
formData
|
||||||
|
);
|
||||||
|
},
|
||||||
|
loadNotiz(notiz_id){
|
||||||
|
return this.$fhcApi.post('api/frontend/v1/notiz/notizLehreinheit/loadNotiz/', {
|
||||||
|
notiz_id
|
||||||
|
});
|
||||||
|
},
|
||||||
|
loadDokumente(notiz_id){
|
||||||
|
return this.$fhcApi.post('api/frontend/v1/notiz/notizLehreinheit/loadDokumente/', {
|
||||||
|
notiz_id
|
||||||
|
});
|
||||||
|
},
|
||||||
|
deleteNotiz(notiz_id, type_id, id){
|
||||||
|
return this.$fhcApi.post('api/frontend/v1/notiz/notizLehreinheit/deleteNotiz/', {
|
||||||
|
notiz_id,
|
||||||
|
type_id,
|
||||||
|
id
|
||||||
|
});
|
||||||
|
},
|
||||||
|
updateNotiz(notiz_id, formData){
|
||||||
|
return this.$fhcApi.post('api/frontend/v1/notiz/notizLehreinheit/updateNotiz/' + notiz_id,
|
||||||
|
formData
|
||||||
|
);
|
||||||
|
},
|
||||||
|
getMitarbeiter(event){
|
||||||
|
return this.$fhcApi.get('api/frontend/v1/notiz/notizLehreinheit/getMitarbeiter/' + event);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,38 @@
|
|||||||
|
export default {
|
||||||
|
getNotizen(url, config, params){
|
||||||
|
return this.$fhcApi.get('api/frontend/v1/notiz/notizMitarbeiter/getNotizen/' + params.id + '/' + params.type);
|
||||||
|
},
|
||||||
|
getUid(){
|
||||||
|
return this.$fhcApi.get('api/frontend/v1/notiz/notizMitarbeiter/getUid/');
|
||||||
|
},
|
||||||
|
addNewNotiz(id, formData) {
|
||||||
|
return this.$fhcApi.post('api/frontend/v1/notiz/notizMitarbeiter/addNewNotiz/' + id,
|
||||||
|
formData
|
||||||
|
);
|
||||||
|
},
|
||||||
|
loadNotiz(notiz_id){
|
||||||
|
return this.$fhcApi.post('api/frontend/v1/notiz/notizMitarbeiter/loadNotiz/', {
|
||||||
|
notiz_id
|
||||||
|
});
|
||||||
|
},
|
||||||
|
loadDokumente(notiz_id){
|
||||||
|
return this.$fhcApi.post('api/frontend/v1/notiz/notizMitarbeiter/loadDokumente/', {
|
||||||
|
notiz_id
|
||||||
|
});
|
||||||
|
},
|
||||||
|
deleteNotiz(notiz_id, type_id, id){
|
||||||
|
return this.$fhcApi.post('api/frontend/v1/notiz/notizMitarbeiter/deleteNotiz/', {
|
||||||
|
notiz_id,
|
||||||
|
type_id,
|
||||||
|
id
|
||||||
|
});
|
||||||
|
},
|
||||||
|
updateNotiz(notiz_id, formData){
|
||||||
|
return this.$fhcApi.post('api/frontend/v1/notiz/notizMitarbeiter/updateNotiz/' + notiz_id,
|
||||||
|
formData
|
||||||
|
);
|
||||||
|
},
|
||||||
|
getMitarbeiter(event){
|
||||||
|
return this.$fhcApi.get('api/frontend/v1/notiz/notizMitarbeiter/getMitarbeiter/' + event);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -38,4 +38,4 @@ export default {
|
|||||||
isBerechtigt(id, type_id){
|
isBerechtigt(id, type_id){
|
||||||
return this.$fhcApi.get('api/frontend/v1/notiz/notizPerson/isBerechtigt/');
|
return this.$fhcApi.get('api/frontend/v1/notiz/notizPerson/isBerechtigt/');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,38 @@
|
|||||||
|
export default {
|
||||||
|
getNotizen(url, config, params){
|
||||||
|
return this.$fhcApi.get('api/frontend/v1/notiz/notizPrestudent/getNotizen/' + params.id + '/' + params.type);
|
||||||
|
},
|
||||||
|
getUid(){
|
||||||
|
return this.$fhcApi.get('api/frontend/v1/notiz/notizPrestudent/getUid/');
|
||||||
|
},
|
||||||
|
addNewNotiz(id, formData) {
|
||||||
|
return this.$fhcApi.post('api/frontend/v1/notiz/notizPrestudent/addNewNotiz/' + id,
|
||||||
|
formData
|
||||||
|
);
|
||||||
|
},
|
||||||
|
loadNotiz(notiz_id){
|
||||||
|
return this.$fhcApi.post('api/frontend/v1/notiz/notizPrestudent/loadNotiz/', {
|
||||||
|
notiz_id
|
||||||
|
});
|
||||||
|
},
|
||||||
|
loadDokumente(notiz_id){
|
||||||
|
return this.$fhcApi.post('api/frontend/v1/notiz/notizPrestudent/loadDokumente/', {
|
||||||
|
notiz_id
|
||||||
|
});
|
||||||
|
},
|
||||||
|
deleteNotiz(notiz_id, type_id, id){
|
||||||
|
return this.$fhcApi.post('api/frontend/v1/notiz/notizPrestudent/deleteNotiz/', {
|
||||||
|
notiz_id,
|
||||||
|
type_id,
|
||||||
|
id
|
||||||
|
});
|
||||||
|
},
|
||||||
|
updateNotiz(notiz_id, formData){
|
||||||
|
return this.$fhcApi.post('api/frontend/v1/notiz/notizPrestudent/updateNotiz/' + notiz_id,
|
||||||
|
formData
|
||||||
|
);
|
||||||
|
},
|
||||||
|
getMitarbeiter(event){
|
||||||
|
return this.$fhcApi.get('api/frontend/v1/notiz/notizPrestudent/getMitarbeiter/' + event);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,38 @@
|
|||||||
|
export default {
|
||||||
|
getNotizen(url, config, params){
|
||||||
|
return this.$fhcApi.get('api/frontend/v1/notiz/NotizProjekt/getNotizen/' + params.id + '/' + params.type);
|
||||||
|
},
|
||||||
|
getUid(){
|
||||||
|
return this.$fhcApi.get('api/frontend/v1/notiz/NotizProjekt/getUid/');
|
||||||
|
},
|
||||||
|
addNewNotiz(id, formData) {
|
||||||
|
return this.$fhcApi.post('api/frontend/v1/notiz/NotizProjekt/addNewNotiz/' + id,
|
||||||
|
formData
|
||||||
|
);
|
||||||
|
},
|
||||||
|
loadNotiz(notiz_id){
|
||||||
|
return this.$fhcApi.post('api/frontend/v1/notiz/NotizProjekt/loadNotiz/', {
|
||||||
|
notiz_id
|
||||||
|
});
|
||||||
|
},
|
||||||
|
loadDokumente(notiz_id){
|
||||||
|
return this.$fhcApi.post('api/frontend/v1/notiz/NotizProjekt/loadDokumente/', {
|
||||||
|
notiz_id
|
||||||
|
});
|
||||||
|
},
|
||||||
|
deleteNotiz(notiz_id, type_id, id){
|
||||||
|
return this.$fhcApi.post('api/frontend/v1/notiz/NotizProjekt/deleteNotiz/', {
|
||||||
|
notiz_id,
|
||||||
|
type_id,
|
||||||
|
id
|
||||||
|
});
|
||||||
|
},
|
||||||
|
updateNotiz(notiz_id, formData){
|
||||||
|
return this.$fhcApi.post('api/frontend/v1/notiz/NotizProjekt/updateNotiz/' + notiz_id,
|
||||||
|
formData
|
||||||
|
);
|
||||||
|
},
|
||||||
|
getMitarbeiter(event){
|
||||||
|
return this.$fhcApi.get('api/frontend/v1/notiz/NotizProjekt/getMitarbeiter/' + event);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,38 @@
|
|||||||
|
export default {
|
||||||
|
getNotizen(url, config, params){
|
||||||
|
return this.$fhcApi.get('api/frontend/v1/notiz/notizProjektphase/getNotizen/' + params.id + '/' + params.type);
|
||||||
|
},
|
||||||
|
getUid(){
|
||||||
|
return this.$fhcApi.get('api/frontend/v1/notiz/notizProjektphase/getUid/');
|
||||||
|
},
|
||||||
|
addNewNotiz(id, formData) {
|
||||||
|
return this.$fhcApi.post('api/frontend/v1/notiz/notizProjektphase/addNewNotiz/' + id,
|
||||||
|
formData
|
||||||
|
);
|
||||||
|
},
|
||||||
|
loadNotiz(notiz_id){
|
||||||
|
return this.$fhcApi.post('api/frontend/v1/notiz/notizProjektphase/loadNotiz/', {
|
||||||
|
notiz_id
|
||||||
|
});
|
||||||
|
},
|
||||||
|
loadDokumente(notiz_id){
|
||||||
|
return this.$fhcApi.post('api/frontend/v1/notiz/notizProjektphase/loadDokumente/', {
|
||||||
|
notiz_id
|
||||||
|
});
|
||||||
|
},
|
||||||
|
deleteNotiz(notiz_id, type_id, id){
|
||||||
|
return this.$fhcApi.post('api/frontend/v1/notiz/notizProjektphase/deleteNotiz/', {
|
||||||
|
notiz_id,
|
||||||
|
type_id,
|
||||||
|
id
|
||||||
|
});
|
||||||
|
},
|
||||||
|
updateNotiz(notiz_id, formData){
|
||||||
|
return this.$fhcApi.post('api/frontend/v1/notiz/notizProjektphase/updateNotiz/' + notiz_id,
|
||||||
|
formData
|
||||||
|
);
|
||||||
|
},
|
||||||
|
getMitarbeiter(event){
|
||||||
|
return this.$fhcApi.get('api/frontend/v1/notiz/notizProjektphase/getMitarbeiter/' + event);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,38 @@
|
|||||||
|
export default {
|
||||||
|
getNotizen(url, config, params){
|
||||||
|
return this.$fhcApi.get('api/frontend/v1/notiz/notizProjekttask/getNotizen/' + params.id + '/' + params.type);
|
||||||
|
},
|
||||||
|
getUid(){
|
||||||
|
return this.$fhcApi.get('api/frontend/v1/notiz/notizProjekttask/getUid/');
|
||||||
|
},
|
||||||
|
addNewNotiz(id, formData) {
|
||||||
|
return this.$fhcApi.post('api/frontend/v1/notiz/notizProjekttask/addNewNotiz/' + id,
|
||||||
|
formData
|
||||||
|
);
|
||||||
|
},
|
||||||
|
loadNotiz(notiz_id){
|
||||||
|
return this.$fhcApi.post('api/frontend/v1/notiz/notizProjekttask/loadNotiz/', {
|
||||||
|
notiz_id
|
||||||
|
});
|
||||||
|
},
|
||||||
|
loadDokumente(notiz_id){
|
||||||
|
return this.$fhcApi.post('api/frontend/v1/notiz/notizProjekttask/loadDokumente/', {
|
||||||
|
notiz_id
|
||||||
|
});
|
||||||
|
},
|
||||||
|
deleteNotiz(notiz_id, type_id, id){
|
||||||
|
return this.$fhcApi.post('api/frontend/v1/notiz/notizProjekttask/deleteNotiz/', {
|
||||||
|
notiz_id,
|
||||||
|
type_id,
|
||||||
|
id
|
||||||
|
});
|
||||||
|
},
|
||||||
|
updateNotiz(notiz_id, formData){
|
||||||
|
return this.$fhcApi.post('api/frontend/v1/notiz/notizProjekttask/updateNotiz/' + notiz_id,
|
||||||
|
formData
|
||||||
|
);
|
||||||
|
},
|
||||||
|
getMitarbeiter(event){
|
||||||
|
return this.$fhcApi.get('api/frontend/v1/notiz/notizProjekttask/getMitarbeiter/' + event);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,8 @@
|
|||||||
|
import person from "./vertraege/person.js";
|
||||||
|
|
||||||
|
export default {
|
||||||
|
person,
|
||||||
|
configPrintDocument() {
|
||||||
|
return this.$fhcApi.get('api/frontend/v1/vertraege/config/printDocument');
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,69 @@
|
|||||||
|
export default {
|
||||||
|
getAllVertraege(url, config, params){
|
||||||
|
return this.$fhcApi.get('api/frontend/v1/vertraege/vertraege/getAllVertraege/' + params.person_id);
|
||||||
|
},
|
||||||
|
getAllContractsNotAssigned(url, config, params){
|
||||||
|
return this.$fhcApi.get('api/frontend/v1/vertraege/vertraege/getAllContractsNotAssigned/' + params.person_id);
|
||||||
|
},
|
||||||
|
getAllContractsAssigned(url, config, params){
|
||||||
|
return this.$fhcApi.get('api/frontend/v1/vertraege/vertraege/getAllContractsAssigned/' + params.person_id + '/' + params.vertrag_id);
|
||||||
|
},
|
||||||
|
getAllContractsNotAssigned2(person_id){
|
||||||
|
return this.$fhcApi.get('api/frontend/v1/vertraege/vertraege/getAllContractsNotAssigned/' + person_id);
|
||||||
|
},
|
||||||
|
getStatiOfContract(url, config, params){
|
||||||
|
return this.$fhcApi.get('api/frontend/v1/vertraege/vertraege/getStatiOfContract/' + params.vertrag_id);
|
||||||
|
},
|
||||||
|
getAllContractTypes(){
|
||||||
|
return this.$fhcApi.get('api/frontend/v1/vertraege/vertraege/getAllContractTypes/');
|
||||||
|
},
|
||||||
|
getAllContractStati(){
|
||||||
|
return this.$fhcApi.get('api/frontend/v1/vertraege/vertraege/getAllContractStati/');
|
||||||
|
},
|
||||||
|
addNewContract(form, data) {
|
||||||
|
return this.$fhcApi.post(form,'api/frontend/v1/vertraege/vertraege/addNewContract/', data);
|
||||||
|
},
|
||||||
|
loadContract(vertrag_id){
|
||||||
|
return this.$fhcApi.post('api/frontend/v1/vertraege/vertraege/loadContract/' + vertrag_id);
|
||||||
|
},
|
||||||
|
updateContract(form, data) {
|
||||||
|
return this.$fhcApi.post(form,'api/frontend/v1/vertraege/vertraege/updateContract/', data);
|
||||||
|
},
|
||||||
|
deleteContract(vertrag_id){
|
||||||
|
return this.$fhcApi.post('api/frontend/v1/vertraege/vertraege/deleteContract/' + vertrag_id);
|
||||||
|
},
|
||||||
|
loadContractStatus(params){
|
||||||
|
return this.$fhcApi.post('api/frontend/v1/vertraege/vertraege/loadContractStatus/' + params.vertrag_id, params);
|
||||||
|
},
|
||||||
|
insertContractStatus(form, params) {
|
||||||
|
return this.$fhcApi.post(form,'api/frontend/v1/vertraege/vertraege/insertContractStatus/' + params.vertrag_id, params);
|
||||||
|
},
|
||||||
|
updateContractStatus(form, params) {
|
||||||
|
return this.$fhcApi.post(form,'api/frontend/v1/vertraege/vertraege/updateContractStatus/' + params.vertrag_id, params);
|
||||||
|
},
|
||||||
|
deleteContractStatus(params) {
|
||||||
|
return this.$fhcApi.post('api/frontend/v1/vertraege/vertraege/deleteContractStatus/' + params.vertrag_id, params);
|
||||||
|
},
|
||||||
|
deleteLehrauftrag(params) {
|
||||||
|
return this.$fhcApi.post('api/frontend/v1/vertraege/vertraege/deleteLehrauftrag/' + params.vertrag_id, params);
|
||||||
|
},
|
||||||
|
deleteBetreuung(params) {
|
||||||
|
return this.$fhcApi.post('api/frontend/v1/vertraege/vertraege/deleteBetreuung/' + params.vertrag_id, params);
|
||||||
|
},
|
||||||
|
getMitarbeiter(params){
|
||||||
|
return this.$fhcApi.post('api/frontend/v1/vertraege/vertraege/getMitarbeiter/');
|
||||||
|
},
|
||||||
|
getHeader(person_id){
|
||||||
|
return this.$fhcApi.post('api/frontend/v1/vertraege/vertraege/getHeader/' + person_id);
|
||||||
|
},
|
||||||
|
getPersonAbteilung(person_id){
|
||||||
|
return this.$fhcApi.post('api/frontend/v1/vertraege/vertraege/getPersonAbteilung/' + person_id);
|
||||||
|
},
|
||||||
|
getLeitungOrg(oekurzbz){
|
||||||
|
return this.$fhcApi.post('api/frontend/v1/vertraege/vertraege/getLeitungOrg/' + oekurzbz);
|
||||||
|
},
|
||||||
|
getMitarbeiterUid(person_id){
|
||||||
|
return this.$fhcApi.get('api/frontend/v1/vertraege/vertraege/getMitarbeiterUid/' + person_id);
|
||||||
|
},
|
||||||
|
|
||||||
|
}
|
||||||
@@ -237,4 +237,6 @@ const bismeldestichtagApp = Vue.createApp({
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
FhcApps.makeExtendable(bismeldestichtagApp);
|
||||||
|
|
||||||
bismeldestichtagApp.use(PluginsPhrasen).mount('#main');
|
bismeldestichtagApp.use(PluginsPhrasen).mount('#main');
|
||||||
|
|||||||
@@ -142,6 +142,9 @@ const app = Vue.createApp({
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
FhcApps.makeExtendable(app);
|
||||||
|
|
||||||
app.use(primevue.config.default, {
|
app.use(primevue.config.default, {
|
||||||
zIndex: {
|
zIndex: {
|
||||||
overlay: 9000,
|
overlay: 9000,
|
||||||
|
|||||||
@@ -87,6 +87,8 @@ const app = Vue.createApp({
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
FhcApps.makeExtendable(app);
|
||||||
|
|
||||||
setScrollbarWidth();
|
setScrollbarWidth();
|
||||||
|
|
||||||
app.use(PluginsPhrasen);
|
app.use(PluginsPhrasen);
|
||||||
|
|||||||
@@ -34,4 +34,7 @@ const app = Vue.createApp({
|
|||||||
});
|
});
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
|
FhcApps.makeExtendable(app);
|
||||||
|
|
||||||
app.use(PluginsPhrasen).mount("#content");
|
app.use(PluginsPhrasen).mount("#content");
|
||||||
@@ -334,6 +334,10 @@ const app = Vue.createApp({
|
|||||||
// kind of a bandaid for bad css on some pages to avoid horizontal scroll
|
// kind of a bandaid for bad css on some pages to avoid horizontal scroll
|
||||||
setScrollbarWidth();
|
setScrollbarWidth();
|
||||||
app.config.globalProperties.$capitalize = capitalize;
|
app.config.globalProperties.$capitalize = capitalize;
|
||||||
|
|
||||||
|
FhcApps.router.makeExtendable(router);
|
||||||
|
FhcApps.makeExtendable(app);
|
||||||
|
|
||||||
app.use(router);
|
app.use(router);
|
||||||
app.use(primevue.config.default, {
|
app.use(primevue.config.default, {
|
||||||
zIndex: {
|
zIndex: {
|
||||||
|
|||||||
@@ -89,8 +89,12 @@ const router = VueRouter.createRouter({
|
|||||||
]
|
]
|
||||||
});
|
});
|
||||||
|
|
||||||
|
FhcApps.router.makeExtendable(router);
|
||||||
|
|
||||||
const app = Vue.createApp();
|
const app = Vue.createApp();
|
||||||
|
|
||||||
|
FhcApps.makeExtendable(app);
|
||||||
|
|
||||||
app
|
app
|
||||||
.use(router)
|
.use(router)
|
||||||
.use(primevue.config.default, {
|
.use(primevue.config.default, {
|
||||||
|
|||||||
@@ -42,5 +42,7 @@ const logsViewerApp = Vue.createApp({
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
FhcApps.makeExtendable(logsViewerApp);
|
||||||
|
|
||||||
logsViewerApp.use(PluginsPhrasen).mount('#main');
|
logsViewerApp.use(PluginsPhrasen).mount('#main');
|
||||||
|
|
||||||
|
|||||||
@@ -206,10 +206,14 @@ router.afterEach((to, from, failure) => {
|
|||||||
document.title = title;
|
document.title = title;
|
||||||
});
|
});
|
||||||
|
|
||||||
|
FhcApps.router.makeExtendable(router);
|
||||||
|
|
||||||
const app = Vue.createApp({
|
const app = Vue.createApp({
|
||||||
name: 'StudentenverwaltungApp'
|
name: 'StudentenverwaltungApp'
|
||||||
});
|
});
|
||||||
|
|
||||||
|
FhcApps.makeExtendable(app);
|
||||||
|
|
||||||
app
|
app
|
||||||
.use(router)
|
.use(router)
|
||||||
.use(primevue.config.default, {
|
.use(primevue.config.default, {
|
||||||
|
|||||||
@@ -0,0 +1,25 @@
|
|||||||
|
import Vertragsverwaltung from "../components/Vertraege/Vertragsverwaltung.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(),
|
||||||
|
routes: [
|
||||||
|
{ path: `/${ciPath}/vertragsverwaltung`, component: Vertragsverwaltung },
|
||||||
|
]
|
||||||
|
});
|
||||||
|
|
||||||
|
const app = Vue.createApp({
|
||||||
|
name: 'VertragsverwaltungApp'
|
||||||
|
});
|
||||||
|
|
||||||
|
app
|
||||||
|
.use(router)
|
||||||
|
.use(primevue.config.default, {
|
||||||
|
zIndex: {
|
||||||
|
overlay: 1100
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.use(Phrasen)
|
||||||
|
.mount('#main');
|
||||||
@@ -20,6 +20,9 @@ const app = Vue.createApp({
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
FhcApps.makeExtendable(app);
|
||||||
|
|
||||||
app
|
app
|
||||||
.use(PluginsPhrasen)
|
.use(PluginsPhrasen)
|
||||||
.mount('#wrapper');
|
.mount('#wrapper');
|
||||||
@@ -7,6 +7,9 @@ const app = Vue.createApp({
|
|||||||
StudierendenantragLeitung
|
StudierendenantragLeitung
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
FhcApps.makeExtendable(app);
|
||||||
|
|
||||||
app
|
app
|
||||||
.use(PluginsPhrasen)
|
.use(PluginsPhrasen)
|
||||||
.use(primevue.config.default,{zIndex: {overlay: 9999}})
|
.use(primevue.config.default,{zIndex: {overlay: 9999}})
|
||||||
|
|||||||
@@ -12,6 +12,9 @@ const app = Vue.createApp({
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
FhcApps.makeExtendable(app);
|
||||||
|
|
||||||
app
|
app
|
||||||
.use(PluginsPhrasen)
|
.use(PluginsPhrasen)
|
||||||
.mount('#wrapper');
|
.mount('#wrapper');
|
||||||
@@ -7,6 +7,9 @@ const app = Vue.createApp({
|
|||||||
LvPopup
|
LvPopup
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
FhcApps.makeExtendable(app);
|
||||||
|
|
||||||
app
|
app
|
||||||
.use(PluginsPhrasen)
|
.use(PluginsPhrasen)
|
||||||
.mount('#wrapper');
|
.mount('#wrapper');
|
||||||
@@ -28,6 +28,8 @@ const lvTemplatesApp = Vue.createApp({
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
FhcApps.makeExtendable(lvTemplatesApp);
|
||||||
|
|
||||||
lvTemplatesApp
|
lvTemplatesApp
|
||||||
.use(primevue.config.default,{zIndex: {overlay: 9999}})
|
.use(primevue.config.default,{zIndex: {overlay: 9999}})
|
||||||
.use(PluginsPhrasen)
|
.use(PluginsPhrasen)
|
||||||
|
|||||||
@@ -43,12 +43,28 @@ export default {
|
|||||||
},
|
},
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
tabulatorOptions: {
|
listBetriebsmitteltyp: [],
|
||||||
|
formData: {
|
||||||
|
ausgegebenam : new Date(),
|
||||||
|
betriebsmitteltyp: 'Zutrittskarte'
|
||||||
|
},
|
||||||
|
statusNew: true,
|
||||||
|
filteredInventar: [],
|
||||||
|
layout: 'fitColumns',
|
||||||
|
layoutColumnsOnNewData: false,
|
||||||
|
height: '550',
|
||||||
|
}
|
||||||
|
},
|
||||||
|
computed: {
|
||||||
|
tabulatorOptions() {
|
||||||
|
const options = {
|
||||||
ajaxURL: 'dummy',
|
ajaxURL: 'dummy',
|
||||||
ajaxRequestFunc: () => this.$api.call(
|
ajaxRequestFunc: () => this.$api.call(
|
||||||
this.endpoint.getAllBetriebsmittel(this.typeId, this.id, (this.filterByProvidedTypes ? this.betriebsmittelTypes : null))
|
this.endpoint.getAllBetriebsmittel(this.typeId, this.id, (this.filterByProvidedTypes ? this.betriebsmittelTypes : null))
|
||||||
),
|
),
|
||||||
ajaxResponse: (url, params, response) => response.data,
|
ajaxResponse: (url, params, response) => response.data,
|
||||||
|
persistenceID: 'core-betriebsmittel-20260217',
|
||||||
|
selectableRows: true,
|
||||||
columns: [
|
columns: [
|
||||||
{title: "Nummer", field: "nummer", width: 150},
|
{title: "Nummer", field: "nummer", width: 150},
|
||||||
{title: "PersonId", field: "person_id", visible: false},
|
{title: "PersonId", field: "person_id", visible: false},
|
||||||
@@ -115,7 +131,7 @@ export default {
|
|||||||
'/content/pdfExport.php?xml=betriebsmittelperson.rdf.php&xsl=Uebernahme&id=' + cellData.betriebsmittelperson_id + '&output=pdf';
|
'/content/pdfExport.php?xml=betriebsmittelperson.rdf.php&xsl=Uebernahme&id=' + cellData.betriebsmittelperson_id + '&output=pdf';
|
||||||
|
|
||||||
window.open(linkToPdf, '_blank');
|
window.open(linkToPdf, '_blank');
|
||||||
});
|
});
|
||||||
container.append(button);
|
container.append(button);
|
||||||
|
|
||||||
button = document.createElement('button');
|
button = document.createElement('button');
|
||||||
@@ -143,64 +159,47 @@ export default {
|
|||||||
return container;
|
return container;
|
||||||
},
|
},
|
||||||
frozen: true
|
frozen: true
|
||||||
}],
|
}
|
||||||
layout: 'fitColumns',
|
],
|
||||||
layoutColumnsOnNewData: false,
|
};
|
||||||
height: '550',
|
return options;
|
||||||
persistenceID: 'core-betriebsmittel'
|
},
|
||||||
},
|
tabulatorEvents() {
|
||||||
tabulatorEvents: [
|
const events = [
|
||||||
{
|
{
|
||||||
event: 'tableBuilt',
|
event: 'tableBuilt',
|
||||||
handler: async() => {
|
handler: async() => {
|
||||||
|
|
||||||
await this.$p.loadCategory(['wawi', 'global', 'infocenter', 'betriebsmittel', 'person']);
|
await this.$p.loadCategory(['wawi', 'global', 'infocenter', 'betriebsmittel', 'person']);
|
||||||
|
|
||||||
let cm = this.$refs.table.tabulator.columnManager;
|
const setHeader = (field, text) => {
|
||||||
|
const col = this.$refs.table.tabulator.getColumn(field);
|
||||||
|
if (!col) return;
|
||||||
|
|
||||||
cm.getColumnByField('nummer').component.updateDefinition({
|
const el = col.getElement();
|
||||||
title: this.$p.t('wawi', 'nummer')
|
if (!el || !el.querySelector) return;
|
||||||
});
|
|
||||||
cm.getColumnByField('betriebsmitteltyp').component.updateDefinition({
|
const titleEl = el.querySelector('.tabulator-col-title');
|
||||||
title: this.$p.t('global', 'typ')
|
if (titleEl) {
|
||||||
});
|
titleEl.textContent = text;
|
||||||
cm.getColumnByField('anmerkung').component.updateDefinition({
|
}
|
||||||
title: this.$p.t('global', 'anmerkung')
|
};
|
||||||
});
|
|
||||||
cm.getColumnByField('retouram').component.updateDefinition({
|
setHeader('nummer', this.$p.t('wawi', 'nummer'));
|
||||||
title: this.$p.t('wawi', 'retourdatum')
|
setHeader('betriebsmitteltyp', this.$p.t('global', 'typ'));
|
||||||
});
|
setHeader('anmerkung', this.$p.t('global', 'anmerkung'));
|
||||||
cm.getColumnByField('beschreibung').component.updateDefinition({
|
setHeader('retouram', this.$p.t('wawi', 'retourdatum'));
|
||||||
title: this.$p.t('global', 'beschreibung')
|
setHeader('beschreibung', this.$p.t('global', 'beschreibung'));
|
||||||
});
|
setHeader('kaution', this.$p.t('infocenter', 'kaution'));
|
||||||
cm.getColumnByField('kaution').component.updateDefinition({
|
setHeader('ausgegebenam', this.$p.t('wawi', 'ausgabedatum'));
|
||||||
title: this.$p.t('infocenter', 'kaution')
|
setHeader('betriebsmittel_id', this.$p.t('ui', 'betriebsmittel_id'));
|
||||||
});
|
setHeader('betriebsmittelperson_id', this.$p.t('ui', 'betriebsmittelperson_id'));
|
||||||
cm.getColumnByField('ausgegebenam').component.updateDefinition({
|
setHeader('person_id', this.$p.t('person', 'person_id'));
|
||||||
title: this.$p.t('wawi', 'ausgabedatum')
|
setHeader('uid', this.$p.t('person', 'uid'));
|
||||||
});
|
|
||||||
cm.getColumnByField('betriebsmittel_id').component.updateDefinition({
|
|
||||||
title: this.$p.t('ui', 'betriebsmittel_id')
|
|
||||||
});
|
|
||||||
cm.getColumnByField('betriebsmittelperson_id').component.updateDefinition({
|
|
||||||
title: this.$p.t('ui', 'betriebsmittelperson_id')
|
|
||||||
});
|
|
||||||
cm.getColumnByField('person_id').component.updateDefinition({
|
|
||||||
title: this.$p.t('person', 'person_id')
|
|
||||||
});
|
|
||||||
cm.getColumnByField('uid').component.updateDefinition({
|
|
||||||
title: this.$p.t('person', 'uid')
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
],
|
];
|
||||||
listBetriebsmitteltyp: [],
|
return events;
|
||||||
formData: {
|
|
||||||
ausgegebenam : new Date(),
|
|
||||||
betriebsmitteltyp: 'Zutrittskarte'
|
|
||||||
},
|
|
||||||
statusNew: true,
|
|
||||||
filteredInventar: []
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
watch: {
|
watch: {
|
||||||
@@ -466,5 +465,4 @@ export default {
|
|||||||
</template>
|
</template>
|
||||||
</bs-modal>
|
</bs-modal>
|
||||||
</div>`
|
</div>`
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1,15 +1,11 @@
|
|||||||
import ApiDetailHeader from "../../api/factory/detailHeader.js";
|
import ApiDetailHeader from "../../api/factory/detailHeader.js";
|
||||||
|
import ApiHandleFoto from "../../api/factory/fotoHandling.js";
|
||||||
|
import ModalUploadFoto from "./Modal/UploadFoto.js";
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
name: 'DetailHeader',
|
name: 'DetailHeader',
|
||||||
inject: {
|
components: {
|
||||||
domain: {
|
ModalUploadFoto
|
||||||
from: 'configDomain',
|
|
||||||
default: 'technikum-wien.at'
|
|
||||||
},
|
|
||||||
currentSemester: {
|
|
||||||
from: 'currentSemester',
|
|
||||||
},
|
|
||||||
},
|
},
|
||||||
props: {
|
props: {
|
||||||
headerData: {
|
headerData: {
|
||||||
@@ -20,6 +16,19 @@ export default {
|
|||||||
type: Number,
|
type: Number,
|
||||||
required: false
|
required: false
|
||||||
},
|
},
|
||||||
|
mitarbeiter_uid: {
|
||||||
|
type: String,
|
||||||
|
required: false
|
||||||
|
},
|
||||||
|
fotoEditable: {
|
||||||
|
type: Boolean,
|
||||||
|
required: false,
|
||||||
|
default: false
|
||||||
|
},
|
||||||
|
domain: {
|
||||||
|
type: String,
|
||||||
|
required: false
|
||||||
|
},
|
||||||
typeHeader: {
|
typeHeader: {
|
||||||
type: String,
|
type: String,
|
||||||
default: 'student',
|
default: 'student',
|
||||||
@@ -29,6 +38,10 @@ export default {
|
|||||||
'mitarbeiter',
|
'mitarbeiter',
|
||||||
].includes(value)
|
].includes(value)
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
currentSemester: {
|
||||||
|
type: String,
|
||||||
|
default: ''
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
computed: {
|
computed: {
|
||||||
@@ -39,49 +52,39 @@ export default {
|
|||||||
if (this.typeHeader === 'student') return this.headerData;
|
if (this.typeHeader === 'student') return this.headerData;
|
||||||
if (this.typeHeader === 'mitarbeiter') return this.person_id;
|
if (this.typeHeader === 'mitarbeiter') return this.person_id;
|
||||||
return null;
|
return null;
|
||||||
|
},
|
||||||
|
hasTileAlphaSlot() {
|
||||||
|
return !!this.$slots.titleAlphaTile
|
||||||
|
},
|
||||||
|
hasTileBetaSlot() {
|
||||||
|
return !!this.$slots.titleBetaTile
|
||||||
|
},
|
||||||
|
hasTileGammaSlot() {
|
||||||
|
return !!this.$slots.titleGammaTile
|
||||||
|
},
|
||||||
|
hasTileUIDSlot() {
|
||||||
|
return !!this.$slots.uid
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
created(){
|
created(){
|
||||||
if(this.person_id) {
|
if (this.typeHeader === 'student') {
|
||||||
this.getHeader(this.person_id);
|
if (!this.headerData) {
|
||||||
|
throw new Error('[DetailHeader] "headerData" is required.')
|
||||||
this.loadDepartmentData(this.mitarbeiter_uid)
|
}
|
||||||
.then(() => {
|
} else if (this.typeHeader === 'mitarbeiter') {
|
||||||
// Call getLeitungOrg only after departmentData is loaded
|
if (!this.person_id || !this.mitarbeiter_uid || !this.domain) {
|
||||||
this.getLeitungOrg(this.departmentData.oe_kurzbz);
|
throw new Error(
|
||||||
})
|
'[DetailHeader] "person_id", "mitarbeiter_uid", and "domain" are requried.'
|
||||||
.catch((error) => {
|
)
|
||||||
console.error("Error loading department data:", error);
|
}
|
||||||
});
|
this.loadHeaderData(this.person_id, this.mitarbeiter_uid);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* if (this.headerData && this.headerData.length) { //bereits im watcher
|
|
||||||
this.getSemesterStati(this.headerData[0].prestudent_id);
|
|
||||||
}*/
|
|
||||||
},
|
},
|
||||||
watch: {
|
watch: {
|
||||||
person_id: {
|
person_id: {
|
||||||
handler(newVal) {
|
handler(newVal) {
|
||||||
if (newVal) {
|
if (newVal) {
|
||||||
this.getHeader(this.person_id);
|
this.loadHeaderData(newVal, this.mitarbeiter_uid);
|
||||||
this.loadDepartmentData(this.person_id).
|
|
||||||
then(() => {
|
|
||||||
this.getLeitungOrg(this.departmentData.oe_kurzbz);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
},
|
|
||||||
deep: true,
|
|
||||||
},
|
|
||||||
currentSemester: {
|
|
||||||
handler(newVal) {
|
|
||||||
if (newVal) {
|
|
||||||
if(!this.semesterStati.some(item => item.studiensemester_kurzbz === this.currentSemester)) {
|
|
||||||
this.noCurrentStatus = true;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
this.noCurrentStatus = false;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
deep: true,
|
deep: true,
|
||||||
@@ -95,166 +98,331 @@ export default {
|
|||||||
immediate: true
|
immediate: true
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
data(){
|
data(){
|
||||||
return{
|
return{
|
||||||
headerDataMa: {},
|
headerDataMa: {},
|
||||||
departmentData: {},
|
departmentData: {},
|
||||||
leitungData: {},
|
leitungData: {},
|
||||||
noCurrentStatus: false
|
isFetchingIssues: false,
|
||||||
};
|
noCurrentStatus: false,
|
||||||
},
|
semesterStatiLoading: false
|
||||||
methods: {
|
};
|
||||||
getHeader(person_id) {
|
},
|
||||||
return this.$api
|
methods: {
|
||||||
.call(ApiDetailHeader.getHeader(person_id))
|
loadHeaderData(person_id, mitarbeiter_uid){
|
||||||
.then(result => {
|
this.getHeader(person_id);
|
||||||
this.headerDataMa = result.data;
|
this.loadDepartmentData(mitarbeiter_uid)
|
||||||
|
.then(() => {
|
||||||
|
// Call getLeitungOrg only after departmentData is loaded
|
||||||
|
this.getLeitungOrg(this.departmentData.oe_kurzbz);
|
||||||
|
})
|
||||||
|
.catch((error) => {
|
||||||
|
console.error("Error loading header data: ", error);
|
||||||
|
});
|
||||||
|
},
|
||||||
|
getHeader(person_id) {
|
||||||
|
return this.$api
|
||||||
|
.call(ApiDetailHeader.getHeader(person_id))
|
||||||
|
.then(result => {
|
||||||
|
this.headerDataMa = result.data;
|
||||||
|
|
||||||
})
|
})
|
||||||
.catch(this.$fhcAlert.handleSystemError);
|
.catch(this.$fhcAlert.handleSystemError);
|
||||||
},
|
},
|
||||||
loadDepartmentData(mitarbeiter_uid) {
|
loadDepartmentData(mitarbeiter_uid) {
|
||||||
return this.$api
|
return this.$api
|
||||||
.call(ApiDetailHeader.getPersonAbteilung(mitarbeiter_uid))
|
.call(ApiDetailHeader.getPersonAbteilung(mitarbeiter_uid))
|
||||||
.then(result => {
|
.then(result => {
|
||||||
this.departmentData = result.data;
|
this.departmentData = result.data;
|
||||||
})
|
})
|
||||||
.catch(this.$fhcAlert.handleSystemError);
|
.catch(this.$fhcAlert.handleSystemError);
|
||||||
},
|
},
|
||||||
getLeitungOrg(oekurzbz){
|
getLeitungOrg(oekurzbz){
|
||||||
return this.$api
|
return this.$api
|
||||||
.call(ApiDetailHeader.getLeitungOrg(oekurzbz))
|
.call(ApiDetailHeader.getLeitungOrg(oekurzbz))
|
||||||
.then(result => {
|
.then(result => {
|
||||||
this.leitungData = result.data;
|
this.leitungData = result.data;
|
||||||
})
|
})
|
||||||
.catch(this.$fhcAlert.handleSystemError);
|
.catch(this.$fhcAlert.handleSystemError);
|
||||||
},
|
},
|
||||||
redirectToLeitung(){
|
async goToLeitung() {
|
||||||
this.$emit('redirectToLeitung', {
|
this.loadHeaderData(this.leitungData.person_id, this.leitungData.uid);
|
||||||
person_id: this.leitungData.person_id});
|
this.redirectToLeitung();
|
||||||
},
|
},
|
||||||
getFotoSrc(foto) {
|
redirectToLeitung() {
|
||||||
if(foto === null) {
|
this.$emit('redirectToLeitung', {
|
||||||
return FHC_JS_DATA_STORAGE_OBJECT.app_root + 'skin/images/profilbild_dummy.jpg';
|
person_id: this.leitungData.person_id,
|
||||||
} else {
|
uid: this.leitungData.uid
|
||||||
return 'data:image/jpeg;base64,' + foto;
|
});
|
||||||
}
|
},
|
||||||
},
|
showModal(person_id){
|
||||||
getSemesterStati(prestudent_id){
|
this.$refs.modalFoto.open(person_id);
|
||||||
return this.$api
|
},
|
||||||
.call(ApiDetailHeader.getSemesterStati(prestudent_id))
|
showDeleteModal(person_id){
|
||||||
.then(result => {
|
this.$fhcAlert
|
||||||
this.semesterStati = result.data;
|
.confirmDelete()
|
||||||
})
|
.then(result => result
|
||||||
.catch(this.$fhcAlert.handleSystemError);
|
? person_id
|
||||||
}
|
: Promise.reject({handled: true}))
|
||||||
},
|
.then(this.deleteFoto)
|
||||||
template: `
|
.catch(this.$fhcAlert.handleSystemError);
|
||||||
<div class="core-header d-flex justify-content-start align-items-center w-100 overflow-auto pb-3 gap-3" style="max-height:9rem; min-width: 37.5rem;">
|
},
|
||||||
|
deleteFoto(person_id){
|
||||||
|
return this.$api
|
||||||
|
.call(ApiHandleFoto.deleteFoto(person_id))
|
||||||
|
.then(result => {
|
||||||
|
this.$fhcAlert.alertSuccess(this.$p.t('ui', 'successDelete'));
|
||||||
|
})
|
||||||
|
.catch(this.$fhcAlert.handleSystemError)
|
||||||
|
.finally(()=> {
|
||||||
|
this.reload();
|
||||||
|
});
|
||||||
|
},
|
||||||
|
reload() {
|
||||||
|
if(this.person_id) {
|
||||||
|
this.loadHeaderData(this.person_id, this.mitarbeiter_uid);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
this.$emit('reload');
|
||||||
|
}
|
||||||
|
},
|
||||||
|
getFotoSrc(foto) {
|
||||||
|
if(foto === null) {
|
||||||
|
return FHC_JS_DATA_STORAGE_OBJECT.app_root + 'skin/images/profilbild_dummy.jpg';
|
||||||
|
} else {
|
||||||
|
return 'data:image/jpeg;base64,' + foto;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
getSemesterStati(prestudent_id){
|
||||||
|
this.semesterStatiLoading = true;
|
||||||
|
this.$api
|
||||||
|
.call(ApiDetailHeader.getSemesterStati(prestudent_id))
|
||||||
|
.then(result => {
|
||||||
|
this.semesterStati = result.data;
|
||||||
|
this.setNoCurrentStatus();
|
||||||
|
})
|
||||||
|
.catch(this.$fhcAlert.handleSystemError)
|
||||||
|
.finally(() => {
|
||||||
|
this.semesterStatiLoading = false
|
||||||
|
});
|
||||||
|
},
|
||||||
|
setNoCurrentStatus() {
|
||||||
|
if(!Array.isArray(this.semesterStati))
|
||||||
|
{
|
||||||
|
this.noCurrentStatus = false;
|
||||||
|
}
|
||||||
|
|
||||||
<template v-if="typeHeader==='student'">
|
if(!this.semesterStati.some(item => item.studiensemester_kurzbz === this.currentSemester)) {
|
||||||
<div
|
this.noCurrentStatus = true;
|
||||||
v-for="person in headerData"
|
}
|
||||||
:key="person.person_id"
|
else
|
||||||
class="d-flex flex-column align-items-center h-100 position-relative d-inline-block"
|
{
|
||||||
|
this.noCurrentStatus = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
template: `
|
||||||
|
<div class="core-header d-flex justify-content-start align-items-center w-100 overflow-auto pb-2 gap-3" style="max-height:9rem; min-width: 37.5rem;">
|
||||||
|
|
||||||
|
<modal-upload-foto
|
||||||
|
v-if="person_id"
|
||||||
|
ref="modalFoto"
|
||||||
|
:person_id="person_id"
|
||||||
|
@reload="reload"
|
||||||
>
|
>
|
||||||
<img
|
</modal-upload-foto>
|
||||||
class="d-block rounded"
|
<modal-upload-foto
|
||||||
style="height: 84px;"
|
v-else
|
||||||
alt="Profilbild"
|
ref="modalFoto"
|
||||||
:src="getFotoSrc(person.foto)"
|
:person_id="headerData[0].person_id"
|
||||||
/>
|
@reload="reload"
|
||||||
|
>
|
||||||
|
</modal-upload-foto>
|
||||||
|
|
||||||
<template v-if="person.foto_sperre">
|
<template v-if="typeHeader==='student'">
|
||||||
<i
|
|
||||||
class=" fa fa-lock text-secondary bg-light rounded d-flex justify-content-center align-items-center position-absolute top-0 end-0"
|
|
||||||
style="z-index: 1; font-size: 1rem; width: 1.25rem; height: 1.25rem;"
|
|
||||||
></i>
|
|
||||||
</template>
|
|
||||||
<small class="text-muted">{{person.uid}}</small>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div v-if="headerData.length == 1">
|
<div
|
||||||
<h2 class="h4">
|
v-for="person in headerData"
|
||||||
{{headerData[0].titelpre}}
|
:key="person.person_id"
|
||||||
{{headerData[0].vorname}}
|
class="foto-container d-flex flex-column align-items-center h-100 position-relative d-inline-block"
|
||||||
{{headerData[0].nachname}}<span v-if="headerData[0].titelpost">, </span>
|
>
|
||||||
{{headerData[0].titelpost}}
|
<img
|
||||||
</h2>
|
class="d-block rounded"
|
||||||
|
style="height: 75px;"
|
||||||
|
alt="Profilbild"
|
||||||
|
:src="getFotoSrc(person.foto)"
|
||||||
|
/>
|
||||||
|
|
||||||
<h5 class="h6">
|
<template v-if="person.foto_sperre">
|
||||||
<strong class="text-muted">Person ID </strong>
|
<i class="fa fa-lock text-secondary bg-light rounded d-flex justify-content-center align-items-center position-absolute top-0 end-0"
|
||||||
{{headerData[0].person_id}}
|
style="z-index: 1; font-size: 1rem; width: 1.25rem; height: 1.25rem;"
|
||||||
<strong class="text-muted">| {{$p.t('lehre', 'studiengang')}} </strong>
|
>
|
||||||
{{headerData[0].stg_bezeichnung}} ({{headerData[0].studiengang}})
|
</i>
|
||||||
<strong v-if="headerData[0].semester != null" class="text-muted"> | {{$p.t('lehre', 'semester')}} </strong>
|
</template>
|
||||||
{{headerData[0].semester}}
|
<template v-if="fotoEditable">
|
||||||
<strong v-if="headerData[0].verband" class="text-muted"> | {{$p.t('lehre', 'verband')}}</strong>
|
<button
|
||||||
{{headerData[0].verband}}
|
type="button"
|
||||||
<strong v-if="headerData[0].gruppe !== ' ' && headerData[0].gruppe != null" class="text-muted"> | {{$p.t('lehre', 'gruppe')}} </strong>
|
class="fotoedit buttonleft btn btn-outline-dark btn-sm d-flex justify-content-center align-items-center position-absolute start-0"
|
||||||
{{headerData[0].gruppe}}
|
@click="showDeleteModal(headerData[0].person_id)">
|
||||||
</h5>
|
<i class="fa fa-xmark"></i>
|
||||||
|
</button>
|
||||||
|
<button
|
||||||
|
type="button"
|
||||||
|
class="fotoedit buttonright btn btn-outline-dark btn-sm d-flex justify-content-center align-items-center position-absolute end-0"
|
||||||
|
@click="showModal(headerData[0].person_id)">
|
||||||
|
<i class="fa fa-pen"></i>
|
||||||
|
</button>
|
||||||
|
</template>
|
||||||
|
<small class="text-muted">{{person.uid}}</small>
|
||||||
|
</div>
|
||||||
|
|
||||||
<h5 class="h6">
|
<div v-if="headerData.length == 1">
|
||||||
<strong class="text-muted">Email </strong>
|
<div class="d-flex align-items-center gap-3">
|
||||||
<span>
|
<h2 class="h4">
|
||||||
<a :href="'mailto:'+headerData[0]?.mail_intern">{{headerData[0].mail_intern}}</a>
|
{{headerData[0].titelpre}}
|
||||||
</span>
|
{{headerData[0].vorname}}
|
||||||
<strong class="text-muted"> | Status </strong>
|
{{headerData[0].nachname}}
|
||||||
<span v-if="noCurrentStatus">
|
<span v-if="headerData[0].titelpost">, </span>
|
||||||
<strong class="text-danger">{{$p.t('lehre', 'textNoStatus')}}</strong>
|
{{headerData[0].titelpost}}
|
||||||
</span>
|
</h2>
|
||||||
<span v-else>
|
<h6 v-if="headerData[0].unruly" class="badge" :class="'bg-unruly rounded-0'"><strong>unruly</strong></h6>
|
||||||
{{headerData[0].statusofsemester}}
|
</div>
|
||||||
</span>
|
|
||||||
<strong class="text-muted"> | {{$p.t('person', 'matrikelnummer')}} </strong>
|
|
||||||
{{headerData[0].matr_nr}}
|
|
||||||
</h5>
|
|
||||||
</div>
|
|
||||||
</template>
|
|
||||||
|
|
||||||
<template v-if="typeHeader==='mitarbeiter'">
|
<h5 class="h6" v-if="!semesterStatiLoading">
|
||||||
<div class="row">
|
<strong class="text-muted">{{$p.t('lehre', 'studiengang')}} </strong>
|
||||||
<div class="col-md-2 d-flex justify-content-start align-items-center w-30 pb-3 gap-3 position-relative"
|
{{headerData[0].stg_bezeichnung}} ({{headerData[0].studiengang}})
|
||||||
style="max-height: 8rem; max-width: 6rem; overflow: hidden;">
|
<strong v-if="headerData[0].semester != null" class="text-muted"> | {{$p.t('lehre', 'semester')}} </strong>
|
||||||
<img
|
{{headerData[0].semester}}
|
||||||
class="d-block rounded"
|
<strong v-if="headerData[0].verband" class="text-muted"> | {{$p.t('lehre', 'verband')}}</strong>
|
||||||
style="height: 84px;"
|
{{headerData[0].verband}}
|
||||||
alt="Profilbild"
|
<strong v-if="headerData[0].gruppe !== ' ' && headerData[0].gruppe != null" class="text-muted"> | {{$p.t('lehre', 'gruppe')}} </strong>
|
||||||
:src="'data:image/jpeg;base64,' + headerDataMa.foto"
|
{{headerData[0].gruppe}}
|
||||||
/>
|
</h5>
|
||||||
<template v-if="headerDataMa.foto_sperre">
|
|
||||||
<i
|
|
||||||
class=" fa fa-lock text-secondary bg-light rounded d-flex justify-content-center align-items-center position-absolute top-0 end-0"
|
|
||||||
style="z-index: 1; font-size: 1rem; width: 1.25rem; height: 1.25rem;"
|
|
||||||
></i>
|
|
||||||
</template>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<!--show Ma-Details-->
|
<h5 class="h6">
|
||||||
<div class="col-md-10">
|
<strong class="text-muted">Email </strong>
|
||||||
<h5>{{headerDataMa.titelpre}} {{headerDataMa.vorname}} {{headerDataMa.nachname}}<span v-if="headerDataMa?.titelpost">, </span> {{headerDataMa.titelpost}}
|
<span>
|
||||||
</h5>
|
<a :href="'mailto:'+headerData[0]?.mail_intern">{{headerData[0].mail_intern}}</a>
|
||||||
<strong class="text-muted">{{departmentData.organisationseinheittyp_kurzbz}}</strong>
|
</span>
|
||||||
{{departmentData.bezeichnung}}
|
<strong class="text-muted"> | Status </strong>
|
||||||
<span v-if="leitungData.uid"> | </span>
|
<span v-if="noCurrentStatus">
|
||||||
<strong v-if="leitungData.uid" class="text-muted">Vorgesetzte*r </strong>
|
<strong class="text-danger">{{$p.t('lehre', 'textNoStatus')}}</strong>
|
||||||
<a href="#" @click.prevent="redirectToLeitung">
|
</span>
|
||||||
{{leitungData.titelpre}} {{leitungData.vorname}} {{leitungData.nachname}}
|
<span v-else>
|
||||||
</a>
|
{{headerData[0].statusofsemester}}
|
||||||
<p>
|
</span>
|
||||||
<strong class="text-muted">Email </strong>
|
</h5>
|
||||||
<span v-if="!headerDataMa?.alias">
|
|
||||||
<a :href="'mailto:'+headerDataMa?.uid+'@'+domain">{{headerDataMa.uid}}@{{domain}}</a>
|
</div>
|
||||||
</span>
|
<div v-if="headerData.length == 1" class="col-md-1 d-flex flex-column align-items-end justify-content-start ms-auto">
|
||||||
<span v-if="headerDataMa?.alias">
|
<div class="d-flex py-1">
|
||||||
<a :href="'mailto:'+headerDataMa?.alias+'@'+domain">{{headerDataMa.alias}}@{{domain}}</a>
|
<div class="px-2" style="min-width: 100px;">
|
||||||
</span>
|
<slot name="issues"></slot>
|
||||||
<span v-if="headerDataMa?.telefonklappe" class="mb-2"> | <strong class="text-muted">DW </strong>{{headerDataMa?.telefonklappe}}</span>
|
</div>
|
||||||
</p>
|
<div v-if="hasTileGammaSlot" class="px-2" style="border-left: 1px solid #EEE">
|
||||||
</div>
|
<h4 class="mb-1 text-center"><slot name="titleGammaTile"></slot></h4>
|
||||||
|
<h6 class="text-muted text-center"><slot name="valueGammaTile"></slot></h6>
|
||||||
|
</div>
|
||||||
|
<div v-if="hasTileBetaSlot" class="px-2" style="border-left: 1px solid #EEE">
|
||||||
|
<h4 class="mb-1 text-center"><slot name="titleBetaTile"></slot></h4>
|
||||||
|
<h6 class="text-muted text-center"><slot name="valueBetaTile"></slot></h6>
|
||||||
|
</div>
|
||||||
|
<div v-if="hasTileAlphaSlot" class="px-2" style="border-left: 1px solid #EEE">
|
||||||
|
<h4 class="mb-1 text-center"><slot name="titleAlphaTile"></slot></h4>
|
||||||
|
<h6 class="text-muted text-center"><slot name="valueAlphaTile"></slot></h6>
|
||||||
|
</div>
|
||||||
|
<div v-if="hasTileUIDSlot" class="px-2" style="border-left: 1px solid #EEE">
|
||||||
|
<h4 class="mb-1 text-center">UID</h4>
|
||||||
|
<h6 class="text-muted text-center"><slot name="uid"></slot></h6>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<template v-if="typeHeader==='mitarbeiter'">
|
||||||
|
|
||||||
|
<div class="foto-container col-md-2 d-flex justify-content-start align-items-center w-30 pb-3 gap-3 mt-3 position-relative" style="max-height: 8rem; max-width: 6rem; overflow: hidden;">
|
||||||
|
<img
|
||||||
|
class="d-block w-100 h-100 rounded"
|
||||||
|
style="height: 84px; object-fit: contain;"
|
||||||
|
alt="Profilbild"
|
||||||
|
:src="getFotoSrc(headerDataMa.foto)"
|
||||||
|
/>
|
||||||
|
<template v-if="headerDataMa.foto_sperre">
|
||||||
|
<i
|
||||||
|
class=" fa fa-lock text-secondary bg-light rounded d-flex justify-content-center align-items-center position-absolute top-0 end-0"
|
||||||
|
style="z-index: 1; font-size: 1rem; width: 1.25rem; height: 1.25rem;"
|
||||||
|
></i>
|
||||||
|
</template>
|
||||||
|
<template v-if="fotoEditable">
|
||||||
|
<button
|
||||||
|
type="button"
|
||||||
|
class="fotoedit btn btn-outline-dark btn-sm d-flex justify-content-center align-items-center position-absolute start-0"
|
||||||
|
style="z-index: 104; font-size: 1rem; width: 2.5rem; height: 2.5rem; opacity:0; transition: opacity 0.2s; top:13%;"
|
||||||
|
@click="showDeleteModal(person_id)">
|
||||||
|
<i class="fa fa-xmark"></i>
|
||||||
|
</button>
|
||||||
|
<button
|
||||||
|
type="button"
|
||||||
|
class="fotoedit btn btn-outline-dark btn-sm d-flex justify-content-center align-items-center position-absolute end-0"
|
||||||
|
style="z-index: 104; font-size: 1rem; width: 2.5rem; height: 2.5rem; opacity:0; transition: opacity 0.2s; top:13%;"
|
||||||
|
@click="showModal(person_id)">
|
||||||
|
<i class="fa fa-pen"></i>
|
||||||
|
</button>
|
||||||
|
</template>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!--show Ma-Details-->
|
||||||
|
<div class="col-md-9 text-nowrap mt-2">
|
||||||
|
<h4>{{headerDataMa.titelpre}} {{headerDataMa.vorname}} {{headerDataMa.nachname}}<span v-if="headerDataMa?.titelpost">, </span> {{headerDataMa.titelpost}}</h4>
|
||||||
|
<strong class="text-muted">{{departmentData.organisationseinheittyp_kurzbz}}</strong>
|
||||||
|
{{departmentData.bezeichnung}}
|
||||||
|
<span v-if="leitungData.uid"> | </span>
|
||||||
|
<strong v-if="leitungData.uid" class="text-muted">Vorgesetzte*r </strong>
|
||||||
|
<a href="#" @click.prevent="goToLeitung">
|
||||||
|
{{leitungData.titelpre}} {{leitungData.vorname}} {{leitungData.nachname}}
|
||||||
|
</a>
|
||||||
|
<p>
|
||||||
|
<strong class="text-muted">Email </strong>
|
||||||
|
<span v-if="headerDataMa && (headerDataMa.alias === undefined || headerDataMa.alias === null || headerDataMa.alias === '')">
|
||||||
|
<a :href="'mailto:' + mitarbeiter_uid + '@' + domain">
|
||||||
|
{{ mitarbeiter_uid }}@{{ domain }}
|
||||||
|
</a>
|
||||||
|
</span>
|
||||||
|
<span v-else>
|
||||||
|
<a :href="'mailto:'+headerDataMa?.alias+'@'+domain">{{headerDataMa.alias}}@{{domain}}</a>
|
||||||
|
</span>
|
||||||
|
<span v-if="headerDataMa?.telefonklappe" class="mb-2"> | <strong class="text-muted">DW </strong>{{headerDataMa?.telefonklappe}}</span>
|
||||||
|
</p>
|
||||||
|
<slot name="tag"></slot>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="col-md-1 d-flex flex-column align-items-end justify-content-start ms-auto">
|
||||||
|
<div class="d-flex py-1">
|
||||||
|
<div class="px-2" style="min-width: 100px;">
|
||||||
|
<slot name="issues"></slot>
|
||||||
|
</div>
|
||||||
|
<div v-if="hasTileGammaSlot" class="px-2" style="border-left: 1px solid #EEE">
|
||||||
|
<h4 class="mb-1 text-center"><slot name="titleGammaTile"></slot></h4>
|
||||||
|
<h6 class="text-muted text-center"><slot name="valueGammaTile"></slot></h6>
|
||||||
|
</div>
|
||||||
|
<div v-if="hasTileBetaSlot" class="px-2" style="border-left: 1px solid #EEE">
|
||||||
|
<h4 class="mb-1 text-center"><slot name="titleBetaTile"></slot></h4>
|
||||||
|
<h6 class="text-muted text-center"><slot name="valueBetaTile" :valueBetaTile="valueBetaTile"></slot></h6>
|
||||||
|
</div>
|
||||||
|
<div v-if="hasTileAlphaSlot" class="px-2" style="border-left: 1px solid #EEE">
|
||||||
|
<h4 class="mb-1 text-center"><slot name="titleAlphaTile"></slot></h4>
|
||||||
|
<h6 class="text-muted text-center"><slot name="valueAlphaTile"></slot></h6>
|
||||||
|
</div>
|
||||||
|
<div v-if="hasTileUIDSlot" class="px-2" style="border-left: 1px solid #EEE">
|
||||||
|
<h4 class="mb-1 text-center">UID</h4>
|
||||||
|
<h6 class="text-muted text-center"><slot name="uid"></slot></h6>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</template>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
`
|
||||||
</div>
|
|
||||||
`
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,103 @@
|
|||||||
|
import BsModal from "../../Bootstrap/Modal.js";
|
||||||
|
import FormForm from "../../Form/Form.js";
|
||||||
|
import FormInput from "../../Form/Input.js";
|
||||||
|
|
||||||
|
import ApiHandleFoto from "../../../../js/api/factory/fotoHandling.js";
|
||||||
|
|
||||||
|
export default {
|
||||||
|
name: "modalUploadFoto",
|
||||||
|
components: {
|
||||||
|
BsModal,
|
||||||
|
FormForm,
|
||||||
|
FormInput,
|
||||||
|
},
|
||||||
|
props: {
|
||||||
|
person_id: {
|
||||||
|
type: Number,
|
||||||
|
required: true
|
||||||
|
}
|
||||||
|
},
|
||||||
|
data(){
|
||||||
|
return{
|
||||||
|
base64Image: null,
|
||||||
|
file: null,
|
||||||
|
preview: null,
|
||||||
|
}
|
||||||
|
},
|
||||||
|
methods:{
|
||||||
|
open(person_id){
|
||||||
|
this.$refs.modalUploadFoto.show(person_id);
|
||||||
|
},
|
||||||
|
onFileChange(e) {
|
||||||
|
this.file = e.target.files[0];
|
||||||
|
if (!this.file) return;
|
||||||
|
|
||||||
|
// convert File in base64
|
||||||
|
const reader = new FileReader();
|
||||||
|
|
||||||
|
reader.onload = (event) => {
|
||||||
|
this.base64Image = event.target.result;
|
||||||
|
this.preview = this.base64Image;
|
||||||
|
};
|
||||||
|
reader.readAsDataURL(this.file);
|
||||||
|
},
|
||||||
|
|
||||||
|
async uploadImage(person_id) {
|
||||||
|
if (!this.base64Image) {
|
||||||
|
this.$fhcAlert.alertInfo(this.$p.t('header', 'alert_chooseFoto'));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
return this.$api
|
||||||
|
.call(ApiHandleFoto.uploadFoto(person_id, {
|
||||||
|
image: this.base64Image,
|
||||||
|
filename: this.file.name
|
||||||
|
}))
|
||||||
|
.then(result => {
|
||||||
|
this.$fhcAlert.alertSuccess(this.$p.t('ui', 'successFotoUpload'));
|
||||||
|
this.closeModal();
|
||||||
|
this.$emit('reload');
|
||||||
|
})
|
||||||
|
.catch(this.$fhcAlert.handleSystemError);
|
||||||
|
},
|
||||||
|
resetModal(){
|
||||||
|
this.base64Image = [];
|
||||||
|
this.file = null;
|
||||||
|
},
|
||||||
|
closeModal(){
|
||||||
|
this.resetModal();
|
||||||
|
this.$refs.modalUploadFoto.hide();
|
||||||
|
}
|
||||||
|
},
|
||||||
|
template: `
|
||||||
|
<bs-modal
|
||||||
|
ref="modalUploadFoto"
|
||||||
|
dialog-class="modal-dialog-scrollable"
|
||||||
|
>
|
||||||
|
<template #title>
|
||||||
|
Upload Foto
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<form-form
|
||||||
|
ref="formUploadFoto"
|
||||||
|
>
|
||||||
|
<div>
|
||||||
|
<input class="form-control" type="file" @change="onFileChange" accept="image/*" />
|
||||||
|
<div class="mt-3">
|
||||||
|
<div>
|
||||||
|
<img :src="base64Image" style="width:100px"/>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</form-form>
|
||||||
|
|
||||||
|
<template #footer>
|
||||||
|
<div class="d-grid gap-2 d-md-flex justify-content-md-end">
|
||||||
|
<button class="btn btn-secondary" @click="closeModal()">{{$p.t('ui', 'cancel')}}</button>
|
||||||
|
<button type="button" class="btn btn-primary" @click="uploadImage(person_id)">{{$p.t('ui', 'hochladen')}}</button>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
</bs-modal>
|
||||||
|
`,
|
||||||
|
}
|
||||||
@@ -33,26 +33,71 @@ export default {
|
|||||||
},
|
},
|
||||||
data(){
|
data(){
|
||||||
return {
|
return {
|
||||||
tabulatorOptions: {
|
isFilterSet: true,
|
||||||
|
listOrgHeads: [],
|
||||||
|
listOrgUnits: [], //Old
|
||||||
|
listAllOrgUnits: [],
|
||||||
|
listOrgUnits_GST: [],
|
||||||
|
listOrgUnits_GMBH: [],
|
||||||
|
formData: {
|
||||||
|
head: 'gst',
|
||||||
|
oe_kurzbz: '',
|
||||||
|
funktion_kurzbz: null,
|
||||||
|
label:'',
|
||||||
|
//funktion_label: '',
|
||||||
|
funktion: null,
|
||||||
|
},
|
||||||
|
statusNew: true,
|
||||||
|
listAllFunctions: [],
|
||||||
|
abortController: {
|
||||||
|
oes: null,
|
||||||
|
functions: null
|
||||||
|
},
|
||||||
|
filteredOes: [],
|
||||||
|
filteredFunctions: [],
|
||||||
|
newBtnStyle: '',
|
||||||
|
selectedFunction: null,
|
||||||
|
selectedOe: null,
|
||||||
|
layout: 'fitDataFill',
|
||||||
|
layoutColumnsOnNewData: false,
|
||||||
|
height: '300'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
computed: {
|
||||||
|
tabulatorOptions() {
|
||||||
|
const options = {
|
||||||
ajaxURL: 'dummy',
|
ajaxURL: 'dummy',
|
||||||
ajaxRequestFunc: () => this.$api.call(
|
ajaxRequestFunc: () => this.$api.call(
|
||||||
ApiCoreFunktion.getAllUserFunctions(this.personUID)
|
ApiCoreFunktion.getAllUserFunctions(this.personUID)
|
||||||
),
|
),
|
||||||
ajaxResponse: (url, params, response) => response.data,
|
ajaxResponse: (url, params, response) => response.data,
|
||||||
|
persistenceID: 'core-functions-20260217',
|
||||||
columns: [
|
columns: [
|
||||||
{
|
{
|
||||||
title: "dienstverhaeltnis_unternehmen",
|
title: "dienstverhaeltnis_unternehmen",
|
||||||
field: "dienstverhaeltnis_unternehmen",
|
field: "dienstverhaeltnis_unternehmen",
|
||||||
headerFilter: "list",
|
headerFilter: "list",
|
||||||
headerFilterParams: {valuesLookup: true, autocomplete: true, sort: "asc"},
|
headerFilterParams: {
|
||||||
|
valuesLookup: true, autocomplete: true, sort: "asc"
|
||||||
|
},
|
||||||
|
width: 140,
|
||||||
|
//Field Company: if visible show link to dv
|
||||||
|
visible: this.showDvCompany,
|
||||||
|
formatter: this.companyLinkFormatter
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
title: "funktion_beschreibung", field: "funktion_beschreibung", headerFilter: "list",
|
title: "funktion_beschreibung", field: "funktion_beschreibung", headerFilter: "list",
|
||||||
headerFilterParams: {valuesLookup: true, autocomplete: true, sort: "asc"},
|
headerFilterParams: {
|
||||||
|
valuesLookup: true, autocomplete: true, sort: "asc"
|
||||||
|
},
|
||||||
|
width: 140
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
title: "funktion_oebezeichnung", field: "funktion_oebezeichnung", headerFilter: "list",
|
title: "funktion_oebezeichnung", field: "funktion_oebezeichnung", headerFilter: "list",
|
||||||
headerFilterParams: {valuesLookup: true, autocomplete: true, sort: "asc"}
|
headerFilterParams: {
|
||||||
|
valuesLookup: true, autocomplete: true, sort: "asc"
|
||||||
|
},
|
||||||
|
width: 140
|
||||||
},
|
},
|
||||||
{title: "wochenstunden", field: "wochenstunden", headerFilter: true},
|
{title: "wochenstunden", field: "wochenstunden", headerFilter: true},
|
||||||
{
|
{
|
||||||
@@ -87,7 +132,7 @@ export default {
|
|||||||
});
|
});
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
{title: "bezeichnung", field: "bezeichnung", headerFilter: true},
|
{title: "bezeichnung", field: "bezeichnung", headerFilter: true, width: 140},
|
||||||
{title: "aktiv", field: "aktiv", visible: false},
|
{title: "aktiv", field: "aktiv", visible: false},
|
||||||
{title: "benutzerfunktion_id", field: "benutzerfunktion_id", visible: false},
|
{title: "benutzerfunktion_id", field: "benutzerfunktion_id", visible: false},
|
||||||
{title: "uid", field: "uid", visible: false},
|
{title: "uid", field: "uid", visible: false},
|
||||||
@@ -142,87 +187,41 @@ export default {
|
|||||||
frozen: true
|
frozen: true
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
layout: 'fitDataFill',
|
};
|
||||||
layoutColumnsOnNewData: false,
|
return options;
|
||||||
height: '300',
|
},
|
||||||
persistenceID: 'core-functions',
|
tabulatorEvents() {
|
||||||
},
|
const events = [
|
||||||
tabulatorEvents: [
|
|
||||||
{
|
{
|
||||||
event: 'tableBuilt',
|
event: 'tableBuilt',
|
||||||
handler: async () => {
|
handler: async () => {
|
||||||
await this.$p.loadCategory(['global', 'lehre', 'person', 'ui']);
|
await this.$p.loadCategory(['global', 'lehre', 'person', 'ui']);
|
||||||
let cm = this.$refs.table.tabulator.columnManager;
|
|
||||||
|
|
||||||
//Field Company: if visible show link to dv
|
const setHeader = (field, text) => {
|
||||||
const column = cm.getColumnByField('dienstverhaeltnis_unternehmen');
|
const col = this.$refs.table.tabulator.getColumn(field);
|
||||||
const companyDv = {
|
if (!col) return;
|
||||||
title: this.$p.t('person', 'dv_unternehmen'),
|
|
||||||
width: 140,
|
|
||||||
visible: this.showDvCompany,
|
|
||||||
formatter: this.companyLinkFormatter
|
|
||||||
};
|
|
||||||
column.component.updateDefinition(companyDv);
|
|
||||||
|
|
||||||
cm.getColumnByField('funktion_beschreibung').component.updateDefinition({
|
const el = col.getElement();
|
||||||
title: this.$p.t('person', 'zuordnung_taetigkeit'),
|
if (!el || !el.querySelector) return;
|
||||||
width: 140
|
|
||||||
});
|
|
||||||
cm.getColumnByField('funktion_oebezeichnung').component.updateDefinition({
|
|
||||||
title: this.$p.t('lehre', 'organisationseinheit'),
|
|
||||||
width: 140
|
|
||||||
});
|
|
||||||
cm.getColumnByField('wochenstunden').component.updateDefinition({
|
|
||||||
title: this.$p.t('person', 'wochenstunden')
|
|
||||||
});
|
|
||||||
|
|
||||||
const columnDatumVon = cm.getColumnByField('datum_von');
|
const titleEl = el.querySelector('.tabulator-col-title');
|
||||||
const fieldVonDatum = {
|
if (titleEl) {
|
||||||
title: this.$p.t('ui', 'from')
|
titleEl.textContent = text;
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
columnDatumVon.component.updateDefinition(fieldVonDatum);
|
setHeader('dienstverhaeltnis_unternehmen', this.$p.t('person', 'dv_unternehmen'));
|
||||||
|
setHeader('funktion_beschreibung', this.$p.t('person', 'zuordnung_taetigkeit'));
|
||||||
const columnDatumBis = cm.getColumnByField('datum_bis');
|
setHeader('funktion_oebezeichnung', this.$p.t('lehre', 'organisationseinheit'));
|
||||||
const fieldBisDatum = {
|
setHeader('wochenstunden', this.$p.t('person', 'wochenstunden'));
|
||||||
title: this.$p.t('global', 'bis'),
|
setHeader('datum_von', this.$p.t('ui', 'from'));
|
||||||
};
|
setHeader('datum_bis', this.$p.t('global', 'bis'));
|
||||||
columnDatumBis.component.updateDefinition(fieldBisDatum);
|
setHeader('bezeichnung', this.$p.t('ui', 'bezeichnung'));
|
||||||
|
|
||||||
cm.getColumnByField('bezeichnung').component.updateDefinition({
|
|
||||||
title: this.$p.t('ui', 'bezeichnung'),
|
|
||||||
width: 140
|
|
||||||
});
|
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
],
|
];
|
||||||
isFilterSet: true,
|
return events;
|
||||||
listOrgHeads: [],
|
},
|
||||||
listOrgUnits: [], //Old
|
|
||||||
listAllOrgUnits: [],
|
|
||||||
listOrgUnits_GST: [],
|
|
||||||
listOrgUnits_GMBH: [],
|
|
||||||
formData: {
|
|
||||||
head: 'gst',
|
|
||||||
oe_kurzbz: '',
|
|
||||||
funktion_kurzbz: null,
|
|
||||||
label:'',
|
|
||||||
//funktion_label: '',
|
|
||||||
funktion: null,
|
|
||||||
},
|
|
||||||
statusNew: true,
|
|
||||||
listAllFunctions: [],
|
|
||||||
abortController: {
|
|
||||||
oes: null,
|
|
||||||
functions: null
|
|
||||||
},
|
|
||||||
filteredOes: [],
|
|
||||||
filteredFunctions: [],
|
|
||||||
newBtnStyle: '',
|
|
||||||
selectedFunction: null,
|
|
||||||
selectedOe: null
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
watch: {
|
watch: {
|
||||||
selectedFunction(newVal) {
|
selectedFunction(newVal) {
|
||||||
@@ -340,6 +339,8 @@ export default {
|
|||||||
this.formData.head = 'gst';
|
this.formData.head = 'gst';
|
||||||
this.formData.oe_kurzbz = '';
|
this.formData.oe_kurzbz = '';
|
||||||
this.formData.funktion_kurzbz = '';
|
this.formData.funktion_kurzbz = '';
|
||||||
|
this.selectedFunction = null;
|
||||||
|
this.selectedOe= null;
|
||||||
},
|
},
|
||||||
filterFunctions(event) {
|
filterFunctions(event) {
|
||||||
const query = event.query.toLowerCase();
|
const query = event.query.toLowerCase();
|
||||||
@@ -460,14 +461,12 @@ export default {
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<form-form class="row pt-3" ref="functionData">
|
<form-form class="row pt-3" ref="functionData">
|
||||||
|
|
||||||
<form-input
|
<form-input
|
||||||
container-class="mb-3 col-8"
|
container-class="mb-3 col-8"
|
||||||
type="select"
|
type="select"
|
||||||
name="companies"
|
name="companies"
|
||||||
:label="$p.t('core/unternehmen')"
|
:label="$p.t('core/unternehmen')"
|
||||||
v-model="formData.head"
|
v-model="formData.head"
|
||||||
@change="getOrgetsForCompanyOld"
|
|
||||||
>
|
>
|
||||||
<option
|
<option
|
||||||
v-for="org in listOrgHeads"
|
v-for="org in listOrgHeads"
|
||||||
|
|||||||
@@ -4,6 +4,8 @@ import DetailsForm from "../Details/Form.js";
|
|||||||
import CoreTag from '../../Tag/Tag.js';
|
import CoreTag from '../../Tag/Tag.js';
|
||||||
import { tagHeaderFilter } from '../../../../js/tabulator/filters/extendedHeaderFilter.js';
|
import { tagHeaderFilter } from '../../../../js/tabulator/filters/extendedHeaderFilter.js';
|
||||||
import { extendedHeaderFilter } from "../../../../js/tabulator/filters/extendedHeaderFilter.js";
|
import { extendedHeaderFilter } from "../../../../js/tabulator/filters/extendedHeaderFilter.js";
|
||||||
|
import { tagFormatter } from "../../../../js/tabulator/formatter/tags.js";
|
||||||
|
import { addTagInTable, deleteTagInTable, updateTagInTable } from "../../../../js/helpers/TagHelper.js";
|
||||||
|
|
||||||
import ApiLv from "../../../api/lehrveranstaltung.js";
|
import ApiLv from "../../../api/lehrveranstaltung.js";
|
||||||
import ApiTag from "../../../api/lehrveranstaltung/tag.js";
|
import ApiTag from "../../../api/lehrveranstaltung/tag.js";
|
||||||
@@ -223,72 +225,7 @@ export default {
|
|||||||
headerFilter: "input",
|
headerFilter: "input",
|
||||||
headerFilterFunc: tagHeaderFilter,
|
headerFilterFunc: tagHeaderFilter,
|
||||||
headerFilterFuncParams: {field: 'tags'},
|
headerFilterFuncParams: {field: 'tags'},
|
||||||
formatter: (cell) => {
|
formatter: (cell) => tagFormatter(cell, this.$refs.tagComponent),
|
||||||
let tags = cell.getValue();
|
|
||||||
if (!tags) return;
|
|
||||||
|
|
||||||
let container = document.createElement('div');
|
|
||||||
container.className = "d-flex gap-1";
|
|
||||||
|
|
||||||
let parsedTags = JSON.parse(tags);
|
|
||||||
let maxVisibleTags = 2;
|
|
||||||
|
|
||||||
const rowData = cell.getRow().getData();
|
|
||||||
if (rowData._tagExpanded === undefined) {
|
|
||||||
rowData._tagExpanded = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
const renderTags = () => {
|
|
||||||
container.innerHTML = '';
|
|
||||||
parsedTags = parsedTags.filter(item => item !== null);
|
|
||||||
|
|
||||||
parsedTags.sort((a, b) => {
|
|
||||||
let adone = a.done ? 1 : 0;
|
|
||||||
let bbone = b.done ? 1 : 0;
|
|
||||||
|
|
||||||
if (adone !== bbone)
|
|
||||||
{
|
|
||||||
return adone - bbone;
|
|
||||||
}
|
|
||||||
return b.id - a.id;
|
|
||||||
});
|
|
||||||
const tagsToShow = rowData._tagExpanded ? parsedTags : parsedTags.slice(0, maxVisibleTags);
|
|
||||||
|
|
||||||
tagsToShow.forEach(tag => {
|
|
||||||
if (!tag) return;
|
|
||||||
let tagElement = document.createElement('span');
|
|
||||||
tagElement.innerText = tag.beschreibung;
|
|
||||||
tagElement.title = tag.notiz;
|
|
||||||
tagElement.className = "tag " + tag.style;
|
|
||||||
if (tag.done) tagElement.className += " tag_done";
|
|
||||||
|
|
||||||
tagElement.addEventListener('click', (event) => {
|
|
||||||
event.stopPropagation();
|
|
||||||
event.preventDefault();
|
|
||||||
this.$refs.tagComponent.editTag(tag.id);
|
|
||||||
});
|
|
||||||
|
|
||||||
container.appendChild(tagElement);
|
|
||||||
});
|
|
||||||
|
|
||||||
if (parsedTags.length > maxVisibleTags) {
|
|
||||||
let toggle = document.createElement('button');
|
|
||||||
toggle.innerText = (rowData._tagExpanded ? '- ' : '+ ') + (parsedTags.length - maxVisibleTags);
|
|
||||||
toggle.className = "display_all";
|
|
||||||
toggle.title = rowData._tagExpanded ? "Tags ausblenden" : "Tags einblenden";
|
|
||||||
|
|
||||||
toggle.addEventListener('click', () => {
|
|
||||||
rowData._tagExpanded = !rowData._tagExpanded;
|
|
||||||
renderTags();
|
|
||||||
});
|
|
||||||
|
|
||||||
container.appendChild(toggle);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
renderTags();
|
|
||||||
return container;
|
|
||||||
},
|
|
||||||
width: 150,
|
width: 150,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -444,104 +381,16 @@ export default {
|
|||||||
},
|
},
|
||||||
addedTag(addedTag)
|
addedTag(addedTag)
|
||||||
{
|
{
|
||||||
const table = this.$refs.table.tabulator;
|
addTagInTable(addedTag, this.allRows, 'lehreinheit_id')
|
||||||
|
|
||||||
this.selectedRows.forEach(row =>
|
|
||||||
{
|
|
||||||
if (Array.isArray(addedTag.response))
|
|
||||||
{
|
|
||||||
addedTag.response.forEach(tag => {
|
|
||||||
const targetRow = this.allRows.find(row => row.getData().lehreinheit_id === tag.lehreinheit_id);
|
|
||||||
if (targetRow)
|
|
||||||
{
|
|
||||||
const rowData = targetRow.getData();
|
|
||||||
let tags = [];
|
|
||||||
try {
|
|
||||||
tags = JSON.parse(rowData.tags || '[]');
|
|
||||||
} catch (e) {}
|
|
||||||
|
|
||||||
const tagExists = tags.some((t) => t.id === tag.id);
|
|
||||||
if (!tagExists)
|
|
||||||
{
|
|
||||||
addedTag.id = tag.id;
|
|
||||||
tags.unshift({ ...addedTag });
|
|
||||||
targetRow.update({ tags: JSON.stringify(tags) });
|
|
||||||
targetRow.reformat();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
});
|
|
||||||
},
|
},
|
||||||
deletedTag(deletedTag) {
|
deletedTag(deletedTag)
|
||||||
const targetRow = this.allRows.find(row => {
|
{
|
||||||
const rowData = row.getData();
|
deleteTagInTable(deletedTag, this.allRows);
|
||||||
|
|
||||||
let tags = [];
|
|
||||||
try {
|
|
||||||
tags = JSON.parse(rowData.tags || '[]');
|
|
||||||
} catch (e) {}
|
|
||||||
|
|
||||||
return tags.some(tag => tag.id === deletedTag);
|
|
||||||
});
|
|
||||||
|
|
||||||
if (targetRow) {
|
|
||||||
const rowData = targetRow.getData();
|
|
||||||
let tags = [];
|
|
||||||
|
|
||||||
try {
|
|
||||||
tags = JSON.parse(rowData.tags || '[]');
|
|
||||||
} catch (e) {}
|
|
||||||
|
|
||||||
const filteredTags = tags.filter(t => t.id !== deletedTag);
|
|
||||||
const updatedTags = JSON.stringify(filteredTags);
|
|
||||||
|
|
||||||
if (updatedTags !== rowData.tags) {
|
|
||||||
targetRow.update({
|
|
||||||
tags: updatedTags
|
|
||||||
});
|
|
||||||
|
|
||||||
targetRow.reformat();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
|
|
||||||
updatedTag(updatedTag) {
|
updatedTag(updatedTag)
|
||||||
const targetRow = this.allRows.find(row => {
|
{
|
||||||
const rowData = row.getData();
|
updateTagInTable(updatedTag, this.allRows);
|
||||||
let tags = [];
|
|
||||||
|
|
||||||
try {
|
|
||||||
tags = JSON.parse(rowData.tags || '[]');
|
|
||||||
} catch (e) {}
|
|
||||||
|
|
||||||
return tags.some(t => t?.id === updatedTag.id);
|
|
||||||
});
|
|
||||||
|
|
||||||
if (targetRow)
|
|
||||||
{
|
|
||||||
const rowData = targetRow.getData();
|
|
||||||
let tags = [];
|
|
||||||
try {
|
|
||||||
tags = JSON.parse(rowData.tags || '[]');
|
|
||||||
} catch (e) {}
|
|
||||||
|
|
||||||
let changed = false;
|
|
||||||
|
|
||||||
const tagIndex = tags.findIndex(tag => tag?.id === updatedTag.id);
|
|
||||||
if (tagIndex !== -1) {
|
|
||||||
tags[tagIndex] = { ...updatedTag };
|
|
||||||
changed = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (changed)
|
|
||||||
{
|
|
||||||
targetRow.update({
|
|
||||||
tags: JSON.stringify(tags),
|
|
||||||
});
|
|
||||||
targetRow.reformat();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
async copyLehreinheit(row, art)
|
async copyLehreinheit(row, art)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -47,6 +47,7 @@ export default {
|
|||||||
<fhc-tabs
|
<fhc-tabs
|
||||||
v-if="lv.length === 1"
|
v-if="lv.length === 1"
|
||||||
ref="tabs"
|
ref="tabs"
|
||||||
|
:useprimevue="true"
|
||||||
:modelValue="lv[0]"
|
:modelValue="lv[0]"
|
||||||
:config="configLVTabs"
|
:config="configLVTabs"
|
||||||
:default="$route.params.tab"
|
:default="$route.params.tab"
|
||||||
|
|||||||
@@ -25,247 +25,11 @@ export default {
|
|||||||
},
|
},
|
||||||
data(){
|
data(){
|
||||||
return {
|
return {
|
||||||
tabulatorOptions: {
|
|
||||||
ajaxURL: 'dummy',
|
|
||||||
ajaxRequestFunc: this.loadAjaxCall,
|
|
||||||
ajaxParams: () => {
|
|
||||||
return {
|
|
||||||
id: this.id,
|
|
||||||
type: this.typeId
|
|
||||||
};
|
|
||||||
},
|
|
||||||
ajaxResponse: (url, params, response) => this.buildTreemap(response),
|
|
||||||
columns: [
|
|
||||||
{title: "subject", field: "subject", headerFilter: true},
|
|
||||||
{title: "body", field: "body", formatter: "html", visible: false, headerFilter: true},
|
|
||||||
{title: "message_id", field: "message_id", visible: false, headerFilter: true},
|
|
||||||
{
|
|
||||||
title: "Datum",
|
|
||||||
field: "insertamum",
|
|
||||||
headerFilter: true,
|
|
||||||
formatter: function (cell) {
|
|
||||||
const dateStr = cell.getValue();
|
|
||||||
const date = new Date(dateStr); // Convert to Date object
|
|
||||||
return date.toLocaleString("de-DE", {
|
|
||||||
day: "2-digit",
|
|
||||||
month: "2-digit",
|
|
||||||
year: "numeric",
|
|
||||||
hour: "2-digit",
|
|
||||||
minute: "2-digit",
|
|
||||||
hour12: false
|
|
||||||
});
|
|
||||||
},
|
|
||||||
headerFilterFunc(headerValue, rowValue) {
|
|
||||||
const matches = headerValue.match(/^(([0-9]{2})\.)?([0-9]{2})\.([0-9]{4})?$/);
|
|
||||||
let comparestr = headerValue;
|
|
||||||
if(matches !== null) {
|
|
||||||
const year = (matches[4] !== undefined) ? matches[4] : '';
|
|
||||||
const month = matches[3];
|
|
||||||
const day = (matches[2] !== undefined) ? matches[2] : '';
|
|
||||||
comparestr = year + '-' + month + '-' + day;
|
|
||||||
}
|
|
||||||
return rowValue.match(comparestr);
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{title: "sender", field: "sender", headerFilter: true},
|
|
||||||
{title: "recipient", field: "recipient", headerFilter: true},
|
|
||||||
{title: "senderId", field: "sender_id", headerFilter: true},
|
|
||||||
{title: "recipientId", field: "recipient_id", headerFilter: true},
|
|
||||||
{title: "Relationmessage ID", field: "relationmessage_id", headerFilter: true},
|
|
||||||
{
|
|
||||||
title: "Status",
|
|
||||||
field: "status",
|
|
||||||
headerFilter: true,
|
|
||||||
formatterParams: [
|
|
||||||
"unread",
|
|
||||||
"read",
|
|
||||||
"archived",
|
|
||||||
"deleted"
|
|
||||||
],
|
|
||||||
formatter: (cell, formatterParams) => {
|
|
||||||
return formatterParams[cell.getValue()];
|
|
||||||
},
|
|
||||||
},
|
|
||||||
{
|
|
||||||
title: "letzte Änderung",
|
|
||||||
field: "statusdatum",
|
|
||||||
headerFilter: true,
|
|
||||||
formatter: function (cell) {
|
|
||||||
const dateStr = cell.getValue();
|
|
||||||
const date = new Date(dateStr); // Convert to Date object
|
|
||||||
return date.toLocaleString("de-DE", {
|
|
||||||
day: "2-digit",
|
|
||||||
month: "2-digit",
|
|
||||||
year: "numeric",
|
|
||||||
hour: "2-digit",
|
|
||||||
minute: "2-digit",
|
|
||||||
hour12: false
|
|
||||||
});
|
|
||||||
},
|
|
||||||
headerFilterFunc(headerValue, rowValue) {
|
|
||||||
const matches = headerValue.match(/^(([0-9]{2})\.)?([0-9]{2})\.([0-9]{4})?$/);
|
|
||||||
let comparestr = headerValue;
|
|
||||||
if(matches !== null) {
|
|
||||||
const year = (matches[4] !== undefined) ? matches[4] : '';
|
|
||||||
const month = matches[3];
|
|
||||||
const day = (matches[2] !== undefined) ? matches[2] : '';
|
|
||||||
comparestr = year + '-' + month + '-' + day;
|
|
||||||
}
|
|
||||||
return rowValue.match(comparestr);
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
title: 'Aktionen', field: 'actions',
|
|
||||||
width: 100,
|
|
||||||
formatter: (cell, formatterParams, onRendered) => {
|
|
||||||
let container = document.createElement('div');
|
|
||||||
container.className = "d-flex gap-2";
|
|
||||||
|
|
||||||
let button = document.createElement('button');
|
|
||||||
if (this.personId != cell.getData().sender_id) {
|
|
||||||
button.disabled = true;
|
|
||||||
button.style = "visibility: hidden";
|
|
||||||
button.ariaHidden = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
button.className = 'btn btn-outline-secondary btn-action';
|
|
||||||
button.title = this.$p.t('global', 'reply');
|
|
||||||
button.innerHTML = '<i class="fa fa-reply"></i>';
|
|
||||||
button.addEventListener(
|
|
||||||
'click',
|
|
||||||
(event) =>
|
|
||||||
this.actionReplyToMessage(cell.getData().message_id)
|
|
||||||
);
|
|
||||||
|
|
||||||
container.append(button);
|
|
||||||
|
|
||||||
button = document.createElement('button');
|
|
||||||
button.className = 'btn btn-outline-secondary btn-action';
|
|
||||||
button.title = this.$p.t('ui', 'loeschen');
|
|
||||||
button.innerHTML = '<i class="fa fa-xmark"></i>';
|
|
||||||
button.addEventListener(
|
|
||||||
'click',
|
|
||||||
() =>
|
|
||||||
this.actionDeleteMessage(cell.getData().message_id)
|
|
||||||
);
|
|
||||||
container.append(button);
|
|
||||||
|
|
||||||
return container;
|
|
||||||
},
|
|
||||||
frozen: true
|
|
||||||
}
|
|
||||||
],
|
|
||||||
layout: 'fitDataStretchFrozen',
|
|
||||||
layoutColumnsOnNewData: false,
|
|
||||||
height: '400',
|
|
||||||
selectable: 1,
|
|
||||||
selectableRangeMode: 'click',
|
|
||||||
index: 'message_id',
|
|
||||||
pagination: true,
|
|
||||||
paginationMode: "remote",
|
|
||||||
paginationSize: 15,
|
|
||||||
paginationInitialPage: 1,
|
|
||||||
dataTree: true,
|
|
||||||
headerSort: true,
|
|
||||||
dataTreeChildField: "children",
|
|
||||||
dataTreeCollapseElement:"<i class='fas fa-minus-square'></i>",
|
|
||||||
dataTreeChildIndent: 15,
|
|
||||||
dataTreeStartExpanded: false,
|
|
||||||
persistenceID: 'core-message-2025112401',
|
|
||||||
locale: 'de',
|
|
||||||
"langs": {
|
|
||||||
"de":{ //German language definition
|
|
||||||
"data":{
|
|
||||||
"loading":"Lädt", //data loader text
|
|
||||||
"error":"Fehler", //data error text
|
|
||||||
},
|
|
||||||
"pagination":{
|
|
||||||
"first":"Erste",
|
|
||||||
"first_title":"Erste Seite",
|
|
||||||
"last":"Letzte",
|
|
||||||
"last_title":"Letzte Seite",
|
|
||||||
"prev":"Vorige",
|
|
||||||
"prev_title":"Vorige Seite",
|
|
||||||
"next":"Nächste",
|
|
||||||
"next_title":"Nächste Seite",
|
|
||||||
"all":"Alle"
|
|
||||||
},
|
|
||||||
},
|
|
||||||
}
|
|
||||||
},
|
|
||||||
tabulatorEvents: [
|
|
||||||
{
|
|
||||||
event: 'tableBuilt',
|
|
||||||
handler: async() => {
|
|
||||||
await this.$p.loadCategory(['global', 'person', 'stv', 'messages', 'ui', 'notiz']);
|
|
||||||
|
|
||||||
|
|
||||||
let cm = this.$refs.table.tabulator.columnManager;
|
|
||||||
|
|
||||||
cm.getColumnByField('subject').component.updateDefinition({
|
|
||||||
title: this.$p.t('global', 'betreff')
|
|
||||||
});
|
|
||||||
cm.getColumnByField('body').component.updateDefinition({
|
|
||||||
title: this.$p.t('messages', 'body')
|
|
||||||
});
|
|
||||||
cm.getColumnByField('message_id').component.updateDefinition({
|
|
||||||
title: this.$p.t('messages', 'message_id')
|
|
||||||
});
|
|
||||||
cm.getColumnByField('insertamum').component.updateDefinition({
|
|
||||||
title: this.$p.t('global', 'datum')
|
|
||||||
});
|
|
||||||
cm.getColumnByField('sender').component.updateDefinition({
|
|
||||||
title: this.$p.t('messages', 'sender')
|
|
||||||
});
|
|
||||||
cm.getColumnByField('recipient').component.updateDefinition({
|
|
||||||
title: this.$p.t('messages', 'recipient')
|
|
||||||
});
|
|
||||||
cm.getColumnByField('sender_id').component.updateDefinition({
|
|
||||||
title: this.$p.t('messages', 'senderId')
|
|
||||||
});
|
|
||||||
cm.getColumnByField('recipient_id').component.updateDefinition({
|
|
||||||
title: this.$p.t('messages', 'recipientId')
|
|
||||||
});
|
|
||||||
cm.getColumnByField('statusdatum').component.updateDefinition({
|
|
||||||
title: this.$p.t('notiz', 'letzte_aenderung')
|
|
||||||
});
|
|
||||||
cm.getColumnByField('status').component.updateDefinition({
|
|
||||||
formatterParams: [
|
|
||||||
this.$p.t('messages/unread'),
|
|
||||||
this.$p.t('messages/read'),
|
|
||||||
this.$p.t('messages/archived'),
|
|
||||||
this.$p.t('messages/deleted')
|
|
||||||
]
|
|
||||||
});
|
|
||||||
this.$refs.table.tabulator.rowManager.getDisplayRows();
|
|
||||||
/*
|
|
||||||
cm.getColumnByField('actions').component.updateDefinition({
|
|
||||||
title: this.$p.t('global', 'aktionen')
|
|
||||||
});
|
|
||||||
*/
|
|
||||||
this.$emit('tabulator_tablebuilt');
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
event: 'rowClick',
|
|
||||||
handler: (e, row) => {
|
|
||||||
const selectedMessage = row.getData().message_id;
|
|
||||||
const body = row.getData().body;
|
|
||||||
this.previewBody = body;
|
|
||||||
}
|
|
||||||
},
|
|
||||||
/*
|
|
||||||
{
|
|
||||||
event: 'pageLoaded',
|
|
||||||
handler: (pageno) => {
|
|
||||||
this.pageNo = pageno+1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
],
|
|
||||||
previewBody: "",
|
previewBody: "",
|
||||||
open: false,
|
open: false,
|
||||||
personId: null,
|
personId: null,
|
||||||
|
layoutColumnsOnNewData: false,
|
||||||
|
height: '400',
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
@@ -339,10 +103,10 @@ export default {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
// to avoid endless loop
|
// to avoid endless loop
|
||||||
if (iteration > messages.length) break;
|
if (iteration > messages.length) break;
|
||||||
}
|
}
|
||||||
return {data: messageNested, last_page: last_page};
|
return {data: messageNested, last_page: last_page};
|
||||||
},
|
},
|
||||||
loadAjaxCall(url, config, params){
|
loadAjaxCall(url, config, params){
|
||||||
return this.$api.call(
|
return this.$api.call(
|
||||||
@@ -351,24 +115,231 @@ export default {
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
computed: {
|
computed: {
|
||||||
statusText(){
|
tabulatorOptions() {
|
||||||
return {
|
const options = {
|
||||||
0: this.$p.t('messsages', 'unread'),
|
ajaxURL: 'dummy',
|
||||||
1: this.$p.t('messsages', 'read'),
|
ajaxRequestFunc: this.loadAjaxCall,
|
||||||
2: this.$p.t('messsages', 'archived'),
|
ajaxParams: () => {
|
||||||
3: this.$p.t('messsages', 'deleted')
|
return {
|
||||||
}
|
id: this.id,
|
||||||
|
type: this.typeId
|
||||||
|
};
|
||||||
|
},
|
||||||
|
ajaxResponse: (url, params, response) => this.buildTreemap(response),
|
||||||
|
layout: 'fitDataStretchFrozen',
|
||||||
|
index: 'message_id',
|
||||||
|
persistenceID: 'core-message-20260217',
|
||||||
|
selectableRows: 1,
|
||||||
|
selectableRowsRangeMode: 'click',
|
||||||
|
columns: [
|
||||||
|
{title: "subject", field: "subject", headerFilter: true},
|
||||||
|
{title: "body", field: "body", formatter: "html", visible: false, headerFilter: true},
|
||||||
|
{title: "message_id", field: "message_id", visible: false, headerFilter: true},
|
||||||
|
{
|
||||||
|
title: "Datum",
|
||||||
|
field: "insertamum",
|
||||||
|
headerFilter: true,
|
||||||
|
formatter: function (cell) {
|
||||||
|
const dateStr = cell.getValue();
|
||||||
|
const date = new Date(dateStr); // Convert to Date object
|
||||||
|
return date.toLocaleString("de-DE", {
|
||||||
|
day: "2-digit",
|
||||||
|
month: "2-digit",
|
||||||
|
year: "numeric",
|
||||||
|
hour: "2-digit",
|
||||||
|
minute: "2-digit",
|
||||||
|
hour12: false
|
||||||
|
});
|
||||||
|
},
|
||||||
|
headerFilterFunc(headerValue, rowValue) {
|
||||||
|
const matches = headerValue.match(/^(([0-9]{2})\.)?([0-9]{2})\.([0-9]{4})?$/);
|
||||||
|
let comparestr = headerValue;
|
||||||
|
if(matches !== null) {
|
||||||
|
const year = (matches[4] !== undefined) ? matches[4] : '';
|
||||||
|
const month = matches[3];
|
||||||
|
const day = (matches[2] !== undefined) ? matches[2] : '';
|
||||||
|
comparestr = year + '-' + month + '-' + day;
|
||||||
|
}
|
||||||
|
return rowValue.match(comparestr);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{title: "sender", field: "sender", headerFilter: true},
|
||||||
|
{title: "recipient", field: "recipient", headerFilter: true},
|
||||||
|
{title: "senderId", field: "sender_id", headerFilter: true},
|
||||||
|
{title: "recipientId", field: "recipient_id", headerFilter: true},
|
||||||
|
{title: "Relationmessage ID", field: "relationmessage_id", headerFilter: true},
|
||||||
|
{
|
||||||
|
title: "Status",
|
||||||
|
field: "status",
|
||||||
|
headerFilter: true,
|
||||||
|
formatterParams: [
|
||||||
|
"unread",
|
||||||
|
"read",
|
||||||
|
"archived",
|
||||||
|
"deleted"
|
||||||
|
],
|
||||||
|
formatter: (cell, formatterParams) => {
|
||||||
|
const key = formatterParams[cell.getValue()];
|
||||||
|
return this.$p.t('messages', key);
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: "letzte Änderung",
|
||||||
|
field: "statusdatum",
|
||||||
|
headerFilter: true,
|
||||||
|
formatter: function (cell) {
|
||||||
|
const dateStr = cell.getValue();
|
||||||
|
const date = new Date(dateStr); // Convert to Date object
|
||||||
|
return date.toLocaleString("de-DE", {
|
||||||
|
day: "2-digit",
|
||||||
|
month: "2-digit",
|
||||||
|
year: "numeric",
|
||||||
|
hour: "2-digit",
|
||||||
|
minute: "2-digit",
|
||||||
|
hour12: false
|
||||||
|
});
|
||||||
|
},
|
||||||
|
headerFilterFunc(headerValue, rowValue) {
|
||||||
|
const matches = headerValue.match(/^(([0-9]{2})\.)?([0-9]{2})\.([0-9]{4})?$/);
|
||||||
|
let comparestr = headerValue;
|
||||||
|
if(matches !== null) {
|
||||||
|
const year = (matches[4] !== undefined) ? matches[4] : '';
|
||||||
|
const month = matches[3];
|
||||||
|
const day = (matches[2] !== undefined) ? matches[2] : '';
|
||||||
|
comparestr = year + '-' + month + '-' + day;
|
||||||
|
}
|
||||||
|
return rowValue.match(comparestr);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: 'Aktionen', field: 'actions',
|
||||||
|
width: 100,
|
||||||
|
formatter: (cell, formatterParams, onRendered) => {
|
||||||
|
let container = document.createElement('div');
|
||||||
|
container.className = "d-flex gap-2";
|
||||||
|
|
||||||
|
let button = document.createElement('button');
|
||||||
|
if (this.personId != cell.getData().sender_id) {
|
||||||
|
button.disabled = true;
|
||||||
|
button.style = "visibility: hidden";
|
||||||
|
button.ariaHidden = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
button.className = 'btn btn-outline-secondary btn-action';
|
||||||
|
button.title = this.$p.t('global', 'reply');
|
||||||
|
button.innerHTML = '<i class="fa fa-reply"></i>';
|
||||||
|
button.addEventListener(
|
||||||
|
'click',
|
||||||
|
(event) =>
|
||||||
|
this.actionReplyToMessage(cell.getData().message_id)
|
||||||
|
);
|
||||||
|
|
||||||
|
container.append(button);
|
||||||
|
|
||||||
|
button = document.createElement('button');
|
||||||
|
button.className = 'btn btn-outline-secondary btn-action';
|
||||||
|
button.title = this.$p.t('ui', 'loeschen');
|
||||||
|
button.innerHTML = '<i class="fa fa-xmark"></i>';
|
||||||
|
button.addEventListener(
|
||||||
|
'click',
|
||||||
|
() =>
|
||||||
|
this.actionDeleteMessage(cell.getData().message_id)
|
||||||
|
);
|
||||||
|
container.append(button);
|
||||||
|
|
||||||
|
return container;
|
||||||
|
},
|
||||||
|
frozen: true
|
||||||
|
}
|
||||||
|
],
|
||||||
|
pagination: true,
|
||||||
|
paginationMode: "remote",
|
||||||
|
paginationSize: 15,
|
||||||
|
paginationInitialPage: 1,
|
||||||
|
dataTree: true,
|
||||||
|
headerSort: true,
|
||||||
|
dataTreeChildField: "children",
|
||||||
|
dataTreeCollapseElement:"<i class='fas fa-minus-square'></i>",
|
||||||
|
dataTreeChildIndent: 15,
|
||||||
|
dataTreeStartExpanded: false,
|
||||||
|
locale: 'de',
|
||||||
|
"langs": {
|
||||||
|
"de":{ //German language definition
|
||||||
|
"data":{
|
||||||
|
"loading":"Lädt", //data loader text
|
||||||
|
"error":"Fehler", //data error text
|
||||||
|
},
|
||||||
|
"pagination":{
|
||||||
|
"first":"Erste",
|
||||||
|
"first_title":"Erste Seite",
|
||||||
|
"last":"Letzte",
|
||||||
|
"last_title":"Letzte Seite",
|
||||||
|
"prev":"Vorige",
|
||||||
|
"prev_title":"Vorige Seite",
|
||||||
|
"next":"Nächste",
|
||||||
|
"next_title":"Nächste Seite",
|
||||||
|
"all":"Alle"
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
};
|
||||||
|
return options;
|
||||||
|
},
|
||||||
|
tabulatorEvents() {
|
||||||
|
const events = [
|
||||||
|
{
|
||||||
|
event: 'tableBuilt',
|
||||||
|
handler: async() => {
|
||||||
|
await this.$p.loadCategory(['global', 'person', 'stv', 'messages', 'ui', 'notiz']);
|
||||||
|
|
||||||
|
const setHeader = (field, text) => {
|
||||||
|
const col = this.$refs.table.tabulator.getColumn(field);
|
||||||
|
if (!col) return;
|
||||||
|
|
||||||
|
const el = col.getElement();
|
||||||
|
if (!el || !el.querySelector) return;
|
||||||
|
|
||||||
|
const titleEl = el.querySelector('.tabulator-col-title');
|
||||||
|
if (titleEl) {
|
||||||
|
titleEl.textContent = text;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
setHeader('subject', this.$p.t('global', 'betreff'));
|
||||||
|
setHeader('body', this.$p.t('messages', 'body'));
|
||||||
|
setHeader('message_id', this.$p.t('messages', 'message_id'));
|
||||||
|
setHeader('insertamum', this.$p.t('global', 'datum'));
|
||||||
|
setHeader('sender', this.$p.t('messages', 'sender'));
|
||||||
|
setHeader('recipient', this.$p.t('messages', 'recipient'));
|
||||||
|
setHeader('sender_id', this.$p.t('messages', 'senderId'));
|
||||||
|
setHeader('recipient_id', this.$p.t('messages', 'recipientId'));
|
||||||
|
setHeader('statusdatum', this.$p.t('notiz', 'letzte_aenderung'));
|
||||||
|
|
||||||
|
this.$refs.table.tabulator.rowManager.getDisplayRows();
|
||||||
|
this.$emit('tabulator_tablebuilt');
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
event: 'rowClick',
|
||||||
|
handler: (e, row) => {
|
||||||
|
const selectedMessage = row.getData().message_id;
|
||||||
|
const body = row.getData().body;
|
||||||
|
this.previewBody = body;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
];
|
||||||
|
return events;
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
mounted() {
|
mounted() {
|
||||||
// change to target="_blank"
|
// change to target="_blank"
|
||||||
/* this.$nextTick(() => {
|
/* this.$nextTick(() => {
|
||||||
const links = document.querySelectorAll('.preview a');
|
const links = document.querySelectorAll('.preview a');
|
||||||
links.forEach(link => {
|
links.forEach(link => {
|
||||||
link.setAttribute('target', '_blank');
|
link.setAttribute('target', '_blank');
|
||||||
link.setAttribute('rel', 'noopener noreferrer'); // Sicherheitsmaßnahme
|
link.setAttribute('rel', 'noopener noreferrer'); // Sicherheitsmaßnahme
|
||||||
});
|
});
|
||||||
});*/
|
});*/
|
||||||
},
|
},
|
||||||
created(){
|
created(){
|
||||||
if(this.typeId != 'person_id' && Array.isArray(this.id) && this.id.length === 1) {
|
if(this.typeId != 'person_id' && Array.isArray(this.id) && this.id.length === 1) {
|
||||||
@@ -383,6 +354,7 @@ export default {
|
|||||||
})
|
})
|
||||||
.catch(this.$fhcAlert.handleSystemError);
|
.catch(this.$fhcAlert.handleSystemError);
|
||||||
}
|
}
|
||||||
|
|
||||||
},
|
},
|
||||||
template: `
|
template: `
|
||||||
<div class="messages-detail-table">
|
<div class="messages-detail-table">
|
||||||
@@ -392,7 +364,7 @@ export default {
|
|||||||
|
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<!--table-->
|
<!--table-->
|
||||||
<div class="col-sm-6 pt-6">
|
<div class="col-sm-6 pt-1">
|
||||||
<core-filter-cmpt
|
<core-filter-cmpt
|
||||||
ref="table"
|
ref="table"
|
||||||
:tabulator-options="tabulatorOptions"
|
:tabulator-options="tabulatorOptions"
|
||||||
@@ -408,9 +380,9 @@ export default {
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!--preview wysiwyg-window-->
|
<!--preview wysiwyg-window-->
|
||||||
<div class="col-sm-6 pt-6">
|
<div class="col-sm-6 pt-5">
|
||||||
<br><br><br><br>
|
<div class="msg-preview-spacer pt-2" aria-hidden="true"></div>
|
||||||
<div ref="preview">
|
<div ref="preview" class="bg-white">
|
||||||
<div v-html="previewBody" class="p-3 border rounded overflow-scroll twoColumns"></div>
|
<div v-html="previewBody" class="p-3 border rounded overflow-scroll twoColumns"></div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@@ -452,4 +424,4 @@ export default {
|
|||||||
</div>
|
</div>
|
||||||
`
|
`
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
+138
-200
@@ -1,5 +1,4 @@
|
|||||||
import VueDatePicker from '../vueDatepicker.js.php';
|
import VueDatePicker from '../vueDatepicker.js.php';
|
||||||
import PvAutoComplete from "../../../../index.ci.php/public/js/components/primevue/autocomplete/autocomplete.esm.min.js";
|
|
||||||
import FormUploadDms from '../Form/Upload/Dms.js';
|
import FormUploadDms from '../Form/Upload/Dms.js';
|
||||||
import {CoreFilterCmpt} from "../filter/Filter.js";
|
import {CoreFilterCmpt} from "../filter/Filter.js";
|
||||||
import BsModal from "../Bootstrap/Modal.js";
|
import BsModal from "../Bootstrap/Modal.js";
|
||||||
@@ -11,7 +10,6 @@ export default {
|
|||||||
components: {
|
components: {
|
||||||
CoreFilterCmpt,
|
CoreFilterCmpt,
|
||||||
VueDatePicker,
|
VueDatePicker,
|
||||||
PvAutoComplete,
|
|
||||||
FormUploadDms,
|
FormUploadDms,
|
||||||
FormForm,
|
FormForm,
|
||||||
FormInput,
|
FormInput,
|
||||||
@@ -50,7 +48,49 @@ export default {
|
|||||||
},
|
},
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
tabulatorOptions: {
|
notizen: [],
|
||||||
|
multiupload: true,
|
||||||
|
mitarbeiter: [],
|
||||||
|
filteredMitarbeiter: [],
|
||||||
|
zwischenvar: '',
|
||||||
|
editorInitialized: false,
|
||||||
|
editor: null,
|
||||||
|
notizData: {
|
||||||
|
typeId: this.typeId,
|
||||||
|
id: this.id,
|
||||||
|
titel: null,
|
||||||
|
statusNew: true,
|
||||||
|
text: '',
|
||||||
|
lastUpdate: null,
|
||||||
|
von: null,
|
||||||
|
bis: null,
|
||||||
|
document: null,
|
||||||
|
erledigt: false,
|
||||||
|
verfasser: null,
|
||||||
|
bearbeiter: null,
|
||||||
|
anhang: []
|
||||||
|
},
|
||||||
|
showVariables: {
|
||||||
|
showTitel: false,
|
||||||
|
showText: false,
|
||||||
|
showVerfasser: false,
|
||||||
|
showBearbeiter: false,
|
||||||
|
showVon: false,
|
||||||
|
showBis: false,
|
||||||
|
showDokumente: false,
|
||||||
|
showErledigt: false,
|
||||||
|
showNotiz_id: false,
|
||||||
|
showNotizzuordnung_id: false,
|
||||||
|
showType_id: false,
|
||||||
|
showId: false,
|
||||||
|
showLastupdate: false
|
||||||
|
},
|
||||||
|
currentVerfasserUid: null
|
||||||
|
}
|
||||||
|
},
|
||||||
|
computed: {
|
||||||
|
tabulatorOptions: function() {
|
||||||
|
return {
|
||||||
ajaxURL: 'dummy',
|
ajaxURL: 'dummy',
|
||||||
ajaxRequestFunc: () => this.$api.call(this.endpoint.getNotizen(this.id, this.typeId)),
|
ajaxRequestFunc: () => this.$api.call(this.endpoint.getNotizen(this.id, this.typeId)),
|
||||||
ajaxParams: () => {
|
ajaxParams: () => {
|
||||||
@@ -65,6 +105,7 @@ export default {
|
|||||||
title: "Titel",
|
title: "Titel",
|
||||||
field: "titel",
|
field: "titel",
|
||||||
width: 100,
|
width: 100,
|
||||||
|
visible: this.showVariables.showTitel,
|
||||||
tooltip:function(e, cell, onRendered){
|
tooltip:function(e, cell, onRendered){
|
||||||
var el = document.createElement("div");
|
var el = document.createElement("div");
|
||||||
el.style.backgroundColor = "white";
|
el.style.backgroundColor = "white";
|
||||||
@@ -87,6 +128,7 @@ export default {
|
|||||||
width: 250,
|
width: 250,
|
||||||
formatter: "html",
|
formatter: "html",
|
||||||
//clipContents: true,
|
//clipContents: true,
|
||||||
|
visible: this.showVariables.showText,
|
||||||
tooltip:function(e, cell, onRendered){
|
tooltip:function(e, cell, onRendered){
|
||||||
var el = document.createElement("div");
|
var el = document.createElement("div");
|
||||||
el.style.backgroundColor = "white";
|
el.style.backgroundColor = "white";
|
||||||
@@ -101,18 +143,18 @@ export default {
|
|||||||
return el;
|
return el;
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
{title: "VerfasserIn", field: "verfasser", width: 124},
|
{title: "VerfasserIn", field: "verfasser", width: 124, visible: this.showVariables.showVerfasser},
|
||||||
{title: "BearbeiterIn", field: "bearbeiter", width: 126},
|
{title: "BearbeiterIn", field: "bearbeiter", width: 126, visible: this.showVariables.showBearbeiter},
|
||||||
{title: "Verfasser UID", field: "verfasser_uid", width: 124, visible: false},
|
{title: "Verfasser UID", field: "verfasser_uid", width: 124, visible: false},
|
||||||
{title: "Bearbeiter UID", field: "bearbeiter_uid", width: 126, visible: false},
|
{title: "Bearbeiter UID", field: "bearbeiter_uid", width: 126, visible: false},
|
||||||
{title: "Start", field: "start_format", width: 86, visible: false},
|
{title: "Start", field: "start_format", width: 86, visible: this.showVariables.showVon},
|
||||||
{title: "Ende", field: "ende_format", width: 86, visible: false},
|
{title: "Ende", field: "ende_format", width: 86, visible: this.showVariables.showBis},
|
||||||
{title: "Dokumente", field: "countdoc", width: 100, visible: false},
|
{title: "Dokumente", field: "countdoc", width: 100, visible: this.showVariables.showDokumente},
|
||||||
{
|
{
|
||||||
title: "Erledigt",
|
title: "Erledigt",
|
||||||
field: "erledigt",
|
field: "erledigt",
|
||||||
width: 97,
|
width: 97,
|
||||||
visible: false,
|
visible: this.showVariables.showErledigt,
|
||||||
formatter:"tickCross",
|
formatter:"tickCross",
|
||||||
hozAlign:"center",
|
hozAlign:"center",
|
||||||
formatterParams: {
|
formatterParams: {
|
||||||
@@ -120,15 +162,15 @@ export default {
|
|||||||
crossElement: '<i class="fa fa-xmark text-danger"></i>'
|
crossElement: '<i class="fa fa-xmark text-danger"></i>'
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{title: "Notiz_id", field: "notiz_id", width: 92, visible: false},
|
{title: "Notiz_id", field: "notiz_id", width: 92, visible: this.showVariables.showNotiz_id},
|
||||||
{title: "Notizzuordnung_id", field: "notizzuordnung_id", width: 164, visible: false},
|
{title: "Notizzuordnung_id", field: "notizzuordnung_id", width: 164, visible: this.showVariables.showNotizzuordnung_id},
|
||||||
{title: "type_id", field: "type_id", width: 164, visible: false},
|
{title: "type_id", field: "type_id", width: 164, visible: this.showVariables.showType_id},
|
||||||
{title: "extension_id", field: "id", width: 135, visible: false},
|
{title: "extension_id", field: "id", width: 135, visible: this.showVariables.showId},
|
||||||
{
|
{
|
||||||
title: "letzte Änderung",
|
title: "letzte Änderung",
|
||||||
field: "lastupdate",
|
field: "lastupdate",
|
||||||
width: 146,
|
width: 146,
|
||||||
visible: false,
|
visible: this.showVariables.showLastupdate,
|
||||||
formatter: function (cell) {
|
formatter: function (cell) {
|
||||||
const dateStr = cell.getValue();
|
const dateStr = cell.getValue();
|
||||||
if (!dateStr) return "";
|
if (!dateStr) return "";
|
||||||
@@ -185,129 +227,60 @@ export default {
|
|||||||
index: 'notiz_id',
|
index: 'notiz_id',
|
||||||
persistenceID: this.tabulatorPersistenceId,
|
persistenceID: this.tabulatorPersistenceId,
|
||||||
persistence: {
|
persistence: {
|
||||||
sort: false,
|
sort: true,
|
||||||
columns: ["width", "visible", "frozen"],
|
columns: ["width", "visible", "frozen"],
|
||||||
filter: false,
|
filter: false,
|
||||||
headerFilter: false,
|
headerFilter: false,
|
||||||
group: false,
|
group: false,
|
||||||
page: false,
|
page: false,
|
||||||
}
|
}
|
||||||
},
|
};
|
||||||
tabulatorEvents: [
|
},
|
||||||
|
tabulatorEvents: function () {
|
||||||
|
return [
|
||||||
{
|
{
|
||||||
event: 'tableBuilt',
|
event: 'tableBuilt',
|
||||||
handler: async () => {
|
handler: async () => {
|
||||||
|
|
||||||
|
//to avoid js error
|
||||||
|
if (!this.$refs.table) return;
|
||||||
|
|
||||||
await this.$p.loadCategory(['notiz', 'global', 'ui']);
|
await this.$p.loadCategory(['notiz', 'global', 'ui']);
|
||||||
|
|
||||||
let cm = this.$refs.table.tabulator.columnManager;
|
const setHeader = (field, text) => {
|
||||||
|
const col = this.$refs.table.tabulator.getColumn(field);
|
||||||
|
if (!col) return;
|
||||||
|
|
||||||
cm.getColumnByField('verfasser').component.updateDefinition({
|
const el = col.getElement();
|
||||||
title: this.$p.t('notiz', 'verfasser'),
|
if (!el || !el.querySelector) return;
|
||||||
visible: this.showVariables.showVerfasser
|
|
||||||
});
|
|
||||||
cm.getColumnByField('verfasser_uid').component.updateDefinition({
|
|
||||||
title: this.$p.t('ui', 'verfasser_uid'),
|
|
||||||
});
|
|
||||||
cm.getColumnByField('titel').component.updateDefinition({
|
|
||||||
title: this.$p.t('global', 'titel'),
|
|
||||||
//visible: this.showVariables.showTitel
|
|
||||||
});
|
|
||||||
cm.getColumnByField('bearbeiter').component.updateDefinition({
|
|
||||||
title: this.$p.t('notiz', 'bearbeiter'),
|
|
||||||
visible: this.showVariables.showBearbeiter
|
|
||||||
});
|
|
||||||
cm.getColumnByField('bearbeiter_uid').component.updateDefinition({
|
|
||||||
title: this.$p.t('ui', 'bearbeiter_uid'),
|
|
||||||
});
|
|
||||||
cm.getColumnByField('start_format').component.updateDefinition({
|
|
||||||
title: this.$p.t('global', 'gueltigVon'),
|
|
||||||
visible: this.showVariables.showVon
|
|
||||||
});
|
|
||||||
cm.getColumnByField('ende_format').component.updateDefinition({
|
|
||||||
title: this.$p.t('global', 'gueltigBis'),
|
|
||||||
visible: this.showVariables.showBis
|
|
||||||
});
|
|
||||||
cm.getColumnByField('countdoc').component.updateDefinition({
|
|
||||||
title: this.$p.t('notiz', 'document'),
|
|
||||||
visible: this.showVariables.showDokumente
|
|
||||||
});
|
|
||||||
cm.getColumnByField('erledigt').component.updateDefinition({
|
|
||||||
title: this.$p.t('notiz', 'erledigt'),
|
|
||||||
visible: this.showVariables.showErledigt
|
|
||||||
});
|
|
||||||
cm.getColumnByField('lastupdate').component.updateDefinition({
|
|
||||||
title: this.$p.t('notiz', 'letzte_aenderung'),
|
|
||||||
visible: this.showVariables.showLastupdate
|
|
||||||
});
|
|
||||||
cm.getColumnByField('notiz_id').component.updateDefinition({
|
|
||||||
visible: this.showVariables.showNotiz_id,
|
|
||||||
title: this.$p.t('ui', 'notiz_id')
|
|
||||||
});
|
|
||||||
cm.getColumnByField('notizzuordnung_id').component.updateDefinition({
|
|
||||||
visible: this.showVariables.showNotizzuordnung_id,
|
|
||||||
title: this.$p.t('ui', 'notizzuordnung_id')
|
|
||||||
});
|
|
||||||
cm.getColumnByField('type_id').component.updateDefinition({
|
|
||||||
visible: this.showVariables.showType_id,
|
|
||||||
title: this.$p.t('ui', 'type_id')
|
|
||||||
});
|
|
||||||
cm.getColumnByField('id').component.updateDefinition({
|
|
||||||
visible: this.showVariables.showId,
|
|
||||||
title: this.$p.t('ui', 'extension_id')
|
|
||||||
});
|
|
||||||
cm.getColumnByField('actions').component.updateDefinition({
|
|
||||||
title: this.$p.t('global', 'aktionen')
|
|
||||||
});
|
|
||||||
|
|
||||||
cm.getColumnByField('text_stripped').component.updateDefinition({
|
const titleEl = el.querySelector('.tabulator-col-title');
|
||||||
title: this.$p.t('global', 'text'),
|
if (titleEl) {
|
||||||
width: 250,
|
titleEl.textContent = text;
|
||||||
tooltip: true,
|
}
|
||||||
//clipContents: true,
|
};
|
||||||
});
|
|
||||||
|
setHeader('verfasser', this.$p.t('notiz', 'verfasser'));
|
||||||
|
setHeader('verfasser_uid', this.$p.t('ui', 'verfasser_uid'));
|
||||||
|
setHeader('titel', this.$p.t('global', 'titel'));
|
||||||
|
setHeader('bearbeiter', this.$p.t('notiz', 'bearbeiter'));
|
||||||
|
setHeader('bearbeiter_uid', this.$p.t('ui', 'bearbeiter_uid'));
|
||||||
|
setHeader('start_format', this.$p.t('global', 'gueltigVon'));
|
||||||
|
setHeader('ende_format', this.$p.t('global', 'gueltigBis'));
|
||||||
|
setHeader('countdoc', this.$p.t('notiz', 'document'));
|
||||||
|
setHeader('erledigt', this.$p.t('notiz', 'erledigt'));
|
||||||
|
setHeader('lastupdate', this.$p.t('notiz', 'letzte_aenderung'));
|
||||||
|
setHeader('notiz_id', this.$p.t('ui', 'notiz_id'));
|
||||||
|
setHeader('notizzuordnung_id', this.$p.t('ui', 'notizzuordnung_id'));
|
||||||
|
setHeader('type_id', this.$p.t('ui', 'type_id'));
|
||||||
|
setHeader('id', this.$p.t('ui', 'extension_id'));
|
||||||
|
setHeader('text_stripped', this.$p.t('global', 'text'));
|
||||||
|
|
||||||
// Force layout recalculation for handling overflow text
|
// Force layout recalculation for handling overflow text
|
||||||
this.$refs.table.tabulator.redraw(true);
|
this.$refs.table.tabulator.redraw(true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
],
|
];
|
||||||
notizen: [],
|
|
||||||
multiupload: true,
|
|
||||||
mitarbeiter: [],
|
|
||||||
filteredMitarbeiter: [],
|
|
||||||
zwischenvar: '',
|
|
||||||
editorInitialized: false,
|
|
||||||
editor: null,
|
|
||||||
notizData: {
|
|
||||||
typeId: this.typeId,
|
|
||||||
titel: null,
|
|
||||||
statusNew: true,
|
|
||||||
text: '',
|
|
||||||
lastUpdate: null,
|
|
||||||
von: null,
|
|
||||||
bis: null,
|
|
||||||
document: null,
|
|
||||||
erledigt: false,
|
|
||||||
verfasser: null,
|
|
||||||
bearbeiter: null,
|
|
||||||
anhang: []
|
|
||||||
},
|
|
||||||
showVariables: {
|
|
||||||
showTitel: false,
|
|
||||||
showText: false,
|
|
||||||
showVerfasser: false,
|
|
||||||
showBearbeiter: false,
|
|
||||||
showVon: false,
|
|
||||||
showBis: false,
|
|
||||||
showDokumente: false,
|
|
||||||
showErledigt: false,
|
|
||||||
showNotiz_id: false,
|
|
||||||
showNotizzuordnung_id: false,
|
|
||||||
showType_id: false,
|
|
||||||
showId: false,
|
|
||||||
showLastupdate: false
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
@@ -335,8 +308,6 @@ export default {
|
|||||||
this.notizData.bis = this.notizen.ende;
|
this.notizData.bis = this.notizen.ende;
|
||||||
this.notizData.document = this.notizen.dms_id;
|
this.notizData.document = this.notizen.dms_id;
|
||||||
this.notizData.erledigt = this.notizen.erledigt;
|
this.notizData.erledigt = this.notizen.erledigt;
|
||||||
this.notizData.verfasser = this.notizen.verfasser_uid;
|
|
||||||
this.notizData.intVerfasser = this.notizen.verfasser_uid;
|
|
||||||
this.notizData.intBearbeiter = this.notizen.bearbeiter_uid;
|
this.notizData.intBearbeiter = this.notizen.bearbeiter_uid;
|
||||||
this.notizData.bearbeiter = this.notizen.bearbeiter_uid;
|
this.notizData.bearbeiter = this.notizen.bearbeiter_uid;
|
||||||
}
|
}
|
||||||
@@ -359,6 +330,7 @@ export default {
|
|||||||
},
|
},
|
||||||
addNewNotiz() {
|
addNewNotiz() {
|
||||||
const formData = new FormData();
|
const formData = new FormData();
|
||||||
|
this.notizData.id = this.id;
|
||||||
|
|
||||||
formData.append('data', JSON.stringify(this.notizData));
|
formData.append('data', JSON.stringify(this.notizData));
|
||||||
Object.entries(this.notizData.anhang).forEach(([k, v]) => formData.append(k, v));
|
Object.entries(this.notizData.anhang).forEach(([k, v]) => formData.append(k, v));
|
||||||
@@ -402,6 +374,7 @@ export default {
|
|||||||
this.notizData = result.data;
|
this.notizData = result.data;
|
||||||
this.notizData.typeId = this.typeId;
|
this.notizData.typeId = this.typeId;
|
||||||
this.notizData.anhang = [];
|
this.notizData.anhang = [];
|
||||||
|
this.currentVerfasserUid = result.data.verfasser_uid;
|
||||||
return result;
|
return result;
|
||||||
})
|
})
|
||||||
.catch(this.$fhcAlert.handleSystemError);
|
.catch(this.$fhcAlert.handleSystemError);
|
||||||
@@ -455,16 +428,17 @@ export default {
|
|||||||
bis: null,
|
bis: null,
|
||||||
document: null,
|
document: null,
|
||||||
erledigt: false,
|
erledigt: false,
|
||||||
verfasser: this.uid,
|
|
||||||
bearbeiter: null,
|
bearbeiter: null,
|
||||||
anhang: []
|
anhang: [],
|
||||||
};
|
};
|
||||||
|
this.currentVerfasserUid = this.uid
|
||||||
},
|
},
|
||||||
getUid() {
|
getUid() {
|
||||||
return this.$api
|
return this.$api
|
||||||
.call(this.endpoint.getUid())
|
.call(this.endpoint.getUid())
|
||||||
.then(result => {
|
.then(result => {
|
||||||
this.notizData.intVerfasser = result.data;
|
this.currentVerfasserUid = result.data;
|
||||||
|
this.uid = result.data;
|
||||||
})
|
})
|
||||||
.catch(this.$fhcAlert.handleSystemError);
|
.catch(this.$fhcAlert.handleSystemError);
|
||||||
},
|
},
|
||||||
@@ -547,14 +521,7 @@ export default {
|
|||||||
},
|
},
|
||||||
deep: true
|
deep: true
|
||||||
},
|
},
|
||||||
'notizData.intVerfasser': {
|
|
||||||
handler(newVal) {
|
|
||||||
if (typeof newVal === 'object') {
|
|
||||||
this.notizData.verfasser = newVal.mitarbeiter_uid;
|
|
||||||
}
|
|
||||||
},
|
|
||||||
deep: true
|
|
||||||
},
|
|
||||||
id() {
|
id() {
|
||||||
this.reload();
|
this.reload();
|
||||||
}
|
}
|
||||||
@@ -654,24 +621,23 @@ export default {
|
|||||||
<div class="row mb-3">
|
<div class="row mb-3">
|
||||||
<label for="bis" class="form-label col-sm-2">{{$p.t('notiz','verfasser')}}</label>
|
<label for="bis" class="form-label col-sm-2">{{$p.t('notiz','verfasser')}}</label>
|
||||||
|
|
||||||
<div v-if="notizData.verfasser_uid" class="col-sm-3">
|
<div class="col-sm-3">
|
||||||
<input type="text" :readonly="readonly" class="form-control" id="name" v-model="notizData.verfasser_uid">
|
<input type="text" readonly="readonly" class="form-control" id="name" v-model="currentVerfasserUid">
|
||||||
</div>
|
|
||||||
<div v-else class="col-sm-3">
|
|
||||||
<PvAutoComplete v-model="notizData.intVerfasser" optionLabel="mitarbeiter" :suggestions="filteredMitarbeiter" @complete="search" minLength="3"/>
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<label for="von" class="form-label col-sm-1">{{$p.t('global','gueltigVon')}}</label>
|
<label for="von" class="form-label col-sm-1">{{$p.t('global','gueltigVon')}}</label>
|
||||||
<div class="col-sm-3">
|
<div class="col-sm-3">
|
||||||
<vue-date-picker
|
<form-input
|
||||||
id="von"
|
type="DatePicker"
|
||||||
v-model="notizData.start"
|
v-model="notizData['start']"
|
||||||
clearable="false"
|
name="von"
|
||||||
auto-apply
|
auto-apply
|
||||||
:enable-time-picker="false"
|
:enable-time-picker="false"
|
||||||
format="dd.MM.yyyy"
|
format="dd.MM.yyyy"
|
||||||
|
preview-format="dd.MM.yyyy"
|
||||||
:teleport="true"
|
:teleport="true"
|
||||||
preview-format="dd.MM.yyyy"></vue-date-picker>
|
>
|
||||||
|
</form-input>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@@ -679,26 +645,35 @@ export default {
|
|||||||
<label for="bis" class="form-label col-sm-2">{{$p.t('notiz','bearbeiter')}}</label>
|
<label for="bis" class="form-label col-sm-2">{{$p.t('notiz','bearbeiter')}}</label>
|
||||||
|
|
||||||
<div v-if="notizData.bearbeiter_uid" class="col-sm-3">
|
<div v-if="notizData.bearbeiter_uid" class="col-sm-3">
|
||||||
<input type="text" :readonly="readonly" class="form-control" id="name" v-model="notizData.bearbeiter_uid">
|
<input type="text" class="form-control" id="name" v-model="notizData.bearbeiter_uid">
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div v-else class="col-sm-3">
|
<div v-else class="col-sm-3">
|
||||||
<PvAutoComplete v-model="notizData.intBearbeiter" optionLabel="mitarbeiter" :suggestions="filteredMitarbeiter" @complete="search" minlength="3"/>
|
<form-input
|
||||||
|
type="autocomplete"
|
||||||
|
v-model="notizData.intBearbeiter"
|
||||||
|
:suggestions="filteredMitarbeiter"
|
||||||
|
@complete="search"
|
||||||
|
optionLabel="mitarbeiter"
|
||||||
|
minlength="3"
|
||||||
|
>
|
||||||
|
</form-input>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
||||||
<label for="bis" class="form-label col-sm-1">{{$p.t('global','gueltigBis')}}</label>
|
<label for="bis" class="form-label col-sm-1">{{$p.t('global','gueltigBis')}}</label>
|
||||||
<div class="col-sm-3">
|
<div class="col-sm-3">
|
||||||
<vue-date-picker
|
<form-input
|
||||||
id="bis"
|
type="DatePicker"
|
||||||
v-model="notizData.ende"
|
v-model="notizData.ende"
|
||||||
clearable="false"
|
name="bis"
|
||||||
auto-apply
|
auto-apply
|
||||||
:enable-time-picker="false"
|
:enable-time-picker="false"
|
||||||
format="dd.MM.yyyy"
|
format="dd.MM.yyyy"
|
||||||
|
preview-format="dd.MM.yyyy"
|
||||||
:teleport="true"
|
:teleport="true"
|
||||||
preview-format="dd.MM.yyyy">
|
>
|
||||||
</vue-date-picker>
|
</form-input>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@@ -842,28 +817,15 @@ export default {
|
|||||||
|
|
||||||
<div class="row mb-3">
|
<div class="row mb-3">
|
||||||
<form-input
|
<form-input
|
||||||
v-if="notizData.verfasser_uid"
|
|
||||||
container-class="col-6"
|
container-class="col-6"
|
||||||
:label="$p.t('notiz', 'verfasser')"
|
:label="$p.t('notiz', 'verfasser')"
|
||||||
type="text"
|
type="text"
|
||||||
v-model="notizData.verfasser_uid"
|
readonly="readonly"
|
||||||
name="titel"
|
v-model="currentVerfasserUid"
|
||||||
|
name="verfasser"
|
||||||
>
|
>
|
||||||
</form-input>
|
</form-input>
|
||||||
|
|
||||||
<form-input
|
|
||||||
v-else
|
|
||||||
container-class="col-6"
|
|
||||||
:label="$p.t('notiz', 'verfasser')"
|
|
||||||
type="autocomplete"
|
|
||||||
v-model="notizData.intVerfasser"
|
|
||||||
:suggestions="filteredMitarbeiter"
|
|
||||||
@complete="search"
|
|
||||||
optionLabel="mitarbeiter"
|
|
||||||
minLength="3"
|
|
||||||
>
|
|
||||||
</form-input>
|
|
||||||
|
|
||||||
<form-input
|
<form-input
|
||||||
v-if="notizData.bearbeiter_uid"
|
v-if="notizData.bearbeiter_uid"
|
||||||
container-class="col-6"
|
container-class="col-6"
|
||||||
@@ -1008,25 +970,12 @@ export default {
|
|||||||
|
|
||||||
<div class="row mb-3">
|
<div class="row mb-3">
|
||||||
<form-input
|
<form-input
|
||||||
v-if="notizData.verfasser_uid"
|
|
||||||
container-class="col-6"
|
container-class="col-6"
|
||||||
:label="$p.t('notiz', 'verfasser')"
|
:label="$p.t('notiz', 'verfasser')"
|
||||||
type="text"
|
type="text"
|
||||||
v-model="notizData.verfasser_uid"
|
readonly="readonly"
|
||||||
name="titel"
|
v-model="currentVerfasserUid"
|
||||||
>
|
name="verfasser"
|
||||||
</form-input>
|
|
||||||
|
|
||||||
<form-input
|
|
||||||
v-else
|
|
||||||
container-class="col-6"
|
|
||||||
:label="$p.t('notiz', 'verfasser')"
|
|
||||||
type="autocomplete"
|
|
||||||
v-model="notizData.intVerfasser"
|
|
||||||
:suggestions="filteredMitarbeiter"
|
|
||||||
@complete="search"
|
|
||||||
optionLabel="mitarbeiter"
|
|
||||||
minLength="3"
|
|
||||||
>
|
>
|
||||||
</form-input>
|
</form-input>
|
||||||
|
|
||||||
@@ -1195,33 +1144,21 @@ export default {
|
|||||||
|
|
||||||
<div class="row mb-3">
|
<div class="row mb-3">
|
||||||
<form-input
|
<form-input
|
||||||
v-if="notizData.verfasser_uid"
|
|
||||||
container-class="col-6"
|
container-class="col-6"
|
||||||
:label="$p.t('notiz', 'verfasser')"
|
:label="$p.t('notiz', 'verfasser')"
|
||||||
type="text"
|
type="text"
|
||||||
v-model="notizData.verfasser_uid"
|
readonly="readonly"
|
||||||
name="titel"
|
v-model="currentVerfasserUid"
|
||||||
|
name="verfasser"
|
||||||
>
|
>
|
||||||
</form-input>
|
</form-input>
|
||||||
|
|
||||||
<form-input
|
|
||||||
v-else
|
|
||||||
container-class="col-6"
|
|
||||||
:label="$p.t('notiz', 'verfasser')"
|
|
||||||
type="autocomplete"
|
|
||||||
v-model="notizData.intVerfasser"
|
|
||||||
:suggestions="filteredMitarbeiter"
|
|
||||||
@complete="search"
|
|
||||||
optionLabel="mitarbeiter"
|
|
||||||
minLength="3"
|
|
||||||
>
|
|
||||||
</form-input>
|
|
||||||
|
|
||||||
<form-input
|
<form-input
|
||||||
v-if="notizData.bearbeiter_uid"
|
v-if="notizData.bearbeiter_uid"
|
||||||
container-class="col-6"
|
container-class="col-6"
|
||||||
:label="$p.t('notiz', 'bearbeiter')"
|
:label="$p.t('notiz', 'bearbeiter')"
|
||||||
v-model="notizData.bearbeiter_uid"
|
v-model="notizData.bearbeiter_uid"
|
||||||
|
name="bearbeiter"
|
||||||
minlength="3"
|
minlength="3"
|
||||||
>
|
>
|
||||||
</form-input>
|
</form-input>
|
||||||
@@ -1235,6 +1172,7 @@ export default {
|
|||||||
:suggestions="filteredMitarbeiter"
|
:suggestions="filteredMitarbeiter"
|
||||||
@complete="search"
|
@complete="search"
|
||||||
optionLabel="mitarbeiter"
|
optionLabel="mitarbeiter"
|
||||||
|
name="bearbeiter"
|
||||||
minlength="3"
|
minlength="3"
|
||||||
>
|
>
|
||||||
</form-input>
|
</form-input>
|
||||||
@@ -1292,4 +1230,4 @@ export default {
|
|||||||
<p v-else>Kein Layout übergeben</p>
|
<p v-else>Kein Layout übergeben</p>
|
||||||
</div>
|
</div>
|
||||||
</div>`,
|
</div>`,
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -84,6 +84,8 @@ export default {
|
|||||||
configShowAufnahmegruppen: this.config.showAufnahmegruppen,
|
configShowAufnahmegruppen: this.config.showAufnahmegruppen,
|
||||||
configAllowUebernahmePunkte: this.config.allowUebernahmePunkte,
|
configAllowUebernahmePunkte: this.config.allowUebernahmePunkte,
|
||||||
configUseReihungstestPunkte: this.config.useReihungstestPunkte,
|
configUseReihungstestPunkte: this.config.useReihungstestPunkte,
|
||||||
|
configHasExcludedAreas: this.config.hasExcludedAreas,
|
||||||
|
configStvTagsEnabled: this.config.stvTagsEnabled,
|
||||||
appConfig: Vue.computed(() => this.appconfig),
|
appConfig: Vue.computed(() => this.appconfig),
|
||||||
hasZGVBakkPermission: this.permissions['student/editBakkZgv'],
|
hasZGVBakkPermission: this.permissions['student/editBakkZgv'],
|
||||||
hasZGVMasterPermission: this.permissions['student/editMakkZgv'],
|
hasZGVMasterPermission: this.permissions['student/editMakkZgv'],
|
||||||
@@ -94,6 +96,7 @@ export default {
|
|||||||
},
|
},
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
|
sidebarCollapsed: false,
|
||||||
appconfig: {},
|
appconfig: {},
|
||||||
configEndpoints: ApiStvConfig,
|
configEndpoints: ApiStvConfig,
|
||||||
selected: [],
|
selected: [],
|
||||||
@@ -146,7 +149,8 @@ export default {
|
|||||||
sprachen: [],
|
sprachen: [],
|
||||||
geschlechter: []
|
geschlechter: []
|
||||||
},
|
},
|
||||||
verbandEndpoint: ApiStvVerband
|
verbandEndpoint: ApiStvVerband,
|
||||||
|
filter: []
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
computed: {
|
computed: {
|
||||||
@@ -393,6 +397,7 @@ export default {
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
onSearch(e) {
|
onSearch(e) {
|
||||||
|
this.deleteCustomFilter();
|
||||||
const searchsettings = { ...this.$refs.searchbar.searchsettings };
|
const searchsettings = { ...this.$refs.searchbar.searchsettings };
|
||||||
if (searchsettings.searchstr.length >= 2) {
|
if (searchsettings.searchstr.length >= 2) {
|
||||||
this.blurSearchbar();
|
this.blurSearchbar();
|
||||||
@@ -422,6 +427,12 @@ export default {
|
|||||||
this.$refs.searchbar.abort();
|
this.$refs.searchbar.abort();
|
||||||
this.$refs.searchbar.hideresult();
|
this.$refs.searchbar.hideresult();
|
||||||
},
|
},
|
||||||
|
handleCustomFilter(filter){
|
||||||
|
this.filter = filter;
|
||||||
|
},
|
||||||
|
deleteCustomFilter(){
|
||||||
|
this.$refs.stvList.resetFilter();
|
||||||
|
}
|
||||||
},
|
},
|
||||||
created() {
|
created() {
|
||||||
if (!this.url_studiensemester_kurzbz) {
|
if (!this.url_studiensemester_kurzbz) {
|
||||||
@@ -495,12 +506,10 @@ export default {
|
|||||||
.catch(this.$fhcAlert.handleSystemError);
|
.catch(this.$fhcAlert.handleSystemError);
|
||||||
},
|
},
|
||||||
mounted() {
|
mounted() {
|
||||||
//Test manu Systemerror
|
|
||||||
//FHC_JS_DATA_STORAGE_OBJECT.systemerror_mailto = '[email protected]';this.$fhcAlert.handleSystemError(1);
|
|
||||||
this.handlePersonUrl();
|
this.handlePersonUrl();
|
||||||
},
|
},
|
||||||
template: /* html */`
|
template: /* html */`
|
||||||
<div class="stv">
|
<div class="stv" :class="{ 'sidebar-collapsed': sidebarCollapsed }">
|
||||||
<header class="navbar navbar-expand-lg navbar-dark bg-dark flex-md-nowrap p-0 shadow">
|
<header class="navbar navbar-expand-lg navbar-dark bg-dark flex-md-nowrap p-0 shadow">
|
||||||
<div class="col-md-4 col-lg-3 col-xl-2 d-flex align-items-center">
|
<div class="col-md-4 col-lg-3 col-xl-2 d-flex align-items-center">
|
||||||
<button
|
<button
|
||||||
@@ -515,6 +524,14 @@ export default {
|
|||||||
<span class="svg-icon svg-icon-apps"></span>
|
<span class="svg-icon svg-icon-apps"></span>
|
||||||
</button>
|
</button>
|
||||||
<a class="navbar-brand me-0" :href="stvRoot">StudVw: {{studiensemesterKurzbz}} {{studiengangKuerzel}}</a>
|
<a class="navbar-brand me-0" :href="stvRoot">StudVw: {{studiensemesterKurzbz}} {{studiengangKuerzel}}</a>
|
||||||
|
<button
|
||||||
|
class="btn btn-outline-light border-0 d-none d-md-inline-flex m-1 ms-auto"
|
||||||
|
type="button"
|
||||||
|
@click="sidebarCollapsed = !sidebarCollapsed"
|
||||||
|
:aria-label="$p.t('ui/toggle_nav')"
|
||||||
|
>
|
||||||
|
<span class="fa-solid fa-list"></span>
|
||||||
|
</button>
|
||||||
</div>
|
</div>
|
||||||
<button
|
<button
|
||||||
class="btn btn-outline-light border-0 d-md-none m-1 collapsed"
|
class="btn btn-outline-light border-0 d-md-none m-1 collapsed"
|
||||||
@@ -626,10 +643,10 @@ export default {
|
|||||||
<main class="col-md-8 ms-sm-auto col-lg-9 col-xl-10">
|
<main class="col-md-8 ms-sm-auto col-lg-9 col-xl-10">
|
||||||
<vertical-split>
|
<vertical-split>
|
||||||
<template #top>
|
<template #top>
|
||||||
<stv-list ref="stvList" v-model:selected="selected" :studiengang-kz="studiengangKz" :studiensemester-kurzbz="studiensemesterKurzbz"></stv-list>
|
<stv-list ref="stvList" v-model:selected="selected" :studiengang-kz="studiengangKz" :studiensemester-kurzbz="studiensemesterKurzbz" @filterActive="handleCustomFilter"></stv-list>
|
||||||
</template>
|
</template>
|
||||||
<template #bottom>
|
<template #bottom>
|
||||||
<stv-details ref="details" :students="selected"></stv-details>
|
<stv-details ref="details" :students="selected" @reload="reloadList"></stv-details>
|
||||||
</template>
|
</template>
|
||||||
</vertical-split>
|
</vertical-split>
|
||||||
</main>
|
</main>
|
||||||
|
|||||||
@@ -46,7 +46,19 @@ export default {
|
|||||||
return Object.fromEntries(Object.entries(this.configStudents).filter(([ , value ]) => !value.showOnlyWithUid));
|
return Object.fromEntries(Object.entries(this.configStudents).filter(([ , value ]) => !value.showOnlyWithUid));
|
||||||
}
|
}
|
||||||
return Object.fromEntries(Object.entries(this.configStudents).filter(([ , value ]) => !value.showOnlyWithUid && !value.showOnlyWithUid));
|
return Object.fromEntries(Object.entries(this.configStudents).filter(([ , value ]) => !value.showOnlyWithUid && !value.showOnlyWithUid));
|
||||||
}
|
},
|
||||||
|
tile_PersId(){
|
||||||
|
let tile = this.students[0].person_id != null ? this.students[0].person_id : '-';
|
||||||
|
return tile;
|
||||||
|
},
|
||||||
|
tile_MatrNr(){
|
||||||
|
let tile = this.students[0].matr_nr != null ? this.students[0].matr_nr : '-';
|
||||||
|
return tile;
|
||||||
|
},
|
||||||
|
tile_PersKz(){
|
||||||
|
let tile = this.students[0].matrikelnr != null ? this.students[0].matrikelnr : '-';
|
||||||
|
return tile;
|
||||||
|
},
|
||||||
},
|
},
|
||||||
watch: {
|
watch: {
|
||||||
'$p.user_language.value'(n, o) {
|
'$p.user_language.value'(n, o) {
|
||||||
@@ -89,23 +101,22 @@ export default {
|
|||||||
this.$refs.tabs.$refs.current.reload();
|
this.$refs.tabs.$refs.current.reload();
|
||||||
},
|
},
|
||||||
reloadDataStudent(){
|
reloadDataStudent(){
|
||||||
//TODO(check)
|
|
||||||
this.localStudent = null;
|
this.localStudent = null;
|
||||||
const studentArr = this.students;
|
const studentArr = this.students;
|
||||||
|
|
||||||
if (!studentArr || !studentArr.length) {
|
if (!studentArr || !studentArr.length) {
|
||||||
console.log("no data");
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
console.log("uid " + studentArr[0].uid);
|
|
||||||
|
|
||||||
this.$api
|
this.$api
|
||||||
.call(ApiStudent.uid(studentArr[0].uid, this.currentSemester))
|
.call(ApiStudent.uid(studentArr[0].uid, this.currentSemester))
|
||||||
.then(result => {
|
.then(result => {
|
||||||
this.localStudent = result.data;
|
this.localStudent = result.data;
|
||||||
});
|
});
|
||||||
}
|
},
|
||||||
|
reloadList() {
|
||||||
|
this.$emit('reload');
|
||||||
|
},
|
||||||
},
|
},
|
||||||
created() {
|
created() {
|
||||||
this.loadConfig();
|
this.loadConfig();
|
||||||
@@ -118,8 +129,18 @@ export default {
|
|||||||
<div v-else-if="configStudent && configStudents" class="d-flex flex-column h-100">
|
<div v-else-if="configStudent && configStudents" class="d-flex flex-column h-100">
|
||||||
<fhc-header
|
<fhc-header
|
||||||
:headerData="localStudent || students"
|
:headerData="localStudent || students"
|
||||||
|
:currentSemester="currentSemester"
|
||||||
typeHeader="student"
|
typeHeader="student"
|
||||||
|
@reload="reloadList"
|
||||||
|
fotoEditable
|
||||||
>
|
>
|
||||||
|
<template #uid>{{students[0].uid}}</template>
|
||||||
|
<template #titleAlphaTile>PersID</template>
|
||||||
|
<template #valueAlphaTile>{{tile_PersId}}</template>
|
||||||
|
<template #titleBetaTile>MatrNr</template>
|
||||||
|
<template #valueBetaTile>{{tile_MatrNr}}</template>
|
||||||
|
<template #titleGammaTile>PersKz</template>
|
||||||
|
<template #valueGammaTile>{{tile_PersKz}}</template>
|
||||||
</fhc-header>
|
</fhc-header>
|
||||||
<fhc-tabs
|
<fhc-tabs
|
||||||
v-if="students.length == 1"
|
v-if="students.length == 1"
|
||||||
|
|||||||
+107
-121
@@ -34,43 +34,61 @@ export default {
|
|||||||
default: false
|
default: false
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
computed: {
|
|
||||||
studentUids() {
|
|
||||||
if (this.student.uid)
|
|
||||||
{
|
|
||||||
return [this.student.uid];
|
|
||||||
}
|
|
||||||
return this.student.map(e => e.uid);
|
|
||||||
},
|
|
||||||
studentKzs(){
|
|
||||||
if (this.student.uid)
|
|
||||||
{
|
|
||||||
return [this.student.studiengang_kz];
|
|
||||||
}
|
|
||||||
return this.student.map(e => e.studiengang_kz);
|
|
||||||
},
|
|
||||||
stg_kz(){
|
|
||||||
return this.studentKzs[0];
|
|
||||||
},
|
|
||||||
showAllFormats() {
|
|
||||||
if( this.isBerechtigtDocAndOdt === false
|
|
||||||
|| !Array.isArray(this.isBerechtigtDocAndOdt) )
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
let retval = this.isBerechtigtDocAndOdt.includes(this.stgInfo.oe_kurzbz);
|
|
||||||
return retval;
|
|
||||||
}
|
|
||||||
},
|
|
||||||
props: {
|
props: {
|
||||||
student: Object
|
student: Object
|
||||||
},
|
},
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
tabulatorOptions: {
|
tabulatorData: [],
|
||||||
|
lastSelected: null,
|
||||||
|
formData: {
|
||||||
|
typStg: null,
|
||||||
|
pruefungstyp_kurzbz: null,
|
||||||
|
akadgrad_id: null,
|
||||||
|
vorsitz: null,
|
||||||
|
pruefungsantritt_kurzbz: null,
|
||||||
|
abschlussbeurteilung_kurzbz: null,
|
||||||
|
datum: null,
|
||||||
|
sponsion: null,
|
||||||
|
pruefer1: null,
|
||||||
|
pruefer2: null,
|
||||||
|
pruefer3: null,
|
||||||
|
anmerkung: null,
|
||||||
|
protokoll: null,
|
||||||
|
note: null,
|
||||||
|
link: null
|
||||||
|
},
|
||||||
|
statusNew: true,
|
||||||
|
arrTypen: [],
|
||||||
|
arrAntritte: [],
|
||||||
|
arrBeurteilungen: [],
|
||||||
|
arrAkadGrad: [],
|
||||||
|
arrNoten: [],
|
||||||
|
selectedVorsitz: null,
|
||||||
|
filteredMitarbeiter: [],
|
||||||
|
filteredPersons: [],
|
||||||
|
selectedPruefer1: null,
|
||||||
|
selectedPruefer2: null,
|
||||||
|
selectedPruefer3: null,
|
||||||
|
stgInfo: { typ: '', oe_kurzbz: '' },
|
||||||
|
abortController: {
|
||||||
|
mitarbeiter: null,
|
||||||
|
persons: null
|
||||||
|
},
|
||||||
|
layout: 'fitDataStretchFrozen',
|
||||||
|
layoutColumnsOnNewData: false,
|
||||||
|
height: 'auto',
|
||||||
|
minHeight: '200',
|
||||||
|
}
|
||||||
|
},
|
||||||
|
computed: {
|
||||||
|
tabulatorOptions() {
|
||||||
|
const options = {
|
||||||
ajaxURL: 'dummy',
|
ajaxURL: 'dummy',
|
||||||
ajaxRequestFunc: () => this.$api.call(ApiStvAbschlusspruefung.getAbschlusspruefung(this.student.uid)),
|
ajaxRequestFunc: () => this.$api.call(ApiStvAbschlusspruefung.getAbschlusspruefung(this.student.uid)),
|
||||||
ajaxResponse: (url, params, response) => response.data,
|
ajaxResponse: (url, params, response) => response.data,
|
||||||
|
index: 'abschlusspruefung_id',
|
||||||
|
persistenceID: 'stv-details-finalexam-20260217',
|
||||||
columns: [
|
columns: [
|
||||||
{title: "vorsitz", field: "vorsitz_nachname"},
|
{title: "vorsitz", field: "vorsitz_nachname"},
|
||||||
{title: "abschlussbeurteilung", field: "beurteilung_bezeichnung"},
|
{title: "abschlussbeurteilung", field: "beurteilung_bezeichnung"},
|
||||||
@@ -163,14 +181,11 @@ export default {
|
|||||||
frozen: true
|
frozen: true
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
layout: 'fitDataStretchFrozen',
|
};
|
||||||
layoutColumnsOnNewData: false,
|
return options;
|
||||||
height: 'auto',
|
},
|
||||||
minHeight: '200',
|
tabulatorEvents() {
|
||||||
index: 'abschlusspruefung_id',
|
const events = [
|
||||||
persistenceID: 'stv-details-finalexam-2025112401'
|
|
||||||
},
|
|
||||||
tabulatorEvents: [
|
|
||||||
{
|
{
|
||||||
event: 'dataLoaded',
|
event: 'dataLoaded',
|
||||||
handler: data => this.tabulatorData = data.map(item => {
|
handler: data => this.tabulatorData = data.map(item => {
|
||||||
@@ -181,94 +196,66 @@ export default {
|
|||||||
{
|
{
|
||||||
event: 'tableBuilt',
|
event: 'tableBuilt',
|
||||||
handler: async() => {
|
handler: async() => {
|
||||||
|
if (!this.$refs.table) return;
|
||||||
|
|
||||||
await this.$p.loadCategory(['global', 'person', 'stv', 'abschlusspruefung', 'ui']);
|
await this.$p.loadCategory(['global', 'person', 'stv', 'abschlusspruefung', 'ui']);
|
||||||
|
|
||||||
|
const setHeader = (field, text) => {
|
||||||
|
const col = this.$refs.table.tabulator.getColumn(field);
|
||||||
|
if (!col) return;
|
||||||
|
|
||||||
let cm = this.$refs.table.tabulator.columnManager;
|
const el = col.getElement();
|
||||||
|
if (!el || !el.querySelector) return;
|
||||||
|
|
||||||
cm.getColumnByField('vorsitz_nachname').component.updateDefinition({
|
const titleEl = el.querySelector('.tabulator-col-title');
|
||||||
title: this.$p.t('abschlusspruefung', 'vorsitz_header')
|
if (titleEl) {
|
||||||
});
|
titleEl.textContent = text;
|
||||||
cm.getColumnByField('beurteilung_bezeichnung').component.updateDefinition({
|
}
|
||||||
title: this.$p.t('abschlusspruefung', 'abschlussbeurteilung')
|
};
|
||||||
});
|
|
||||||
cm.getColumnByField('p1_nachname').component.updateDefinition({
|
setHeader('vorsitz_nachname', this.$p.t('abschlusspruefung', 'vorsitz_header'));
|
||||||
title: this.$p.t('abschlusspruefung', 'pruefer1')
|
setHeader('beurteilung_bezeichnung', this.$p.t('abschlusspruefung', 'abschlussbeurteilung'));
|
||||||
});
|
setHeader('p1_nachname', this.$p.t('abschlusspruefung', 'pruefer1'));
|
||||||
cm.getColumnByField('p2_nachname').component.updateDefinition({
|
setHeader('p2_nachname', this.$p.t('abschlusspruefung', 'pruefer2'));
|
||||||
title: this.$p.t('abschlusspruefung', 'pruefer2')
|
setHeader('p3_nachname', this.$p.t('abschlusspruefung', 'pruefer3'));
|
||||||
});
|
setHeader('datum', this.$p.t('global', 'datum'));
|
||||||
cm.getColumnByField('p3_nachname').component.updateDefinition({
|
setHeader('uhrzeit', this.$p.t('global', 'uhrzeit'));
|
||||||
title: this.$p.t('abschlusspruefung', 'pruefer3')
|
setHeader('freigabedatum', this.$p.t('abschlusspruefung', 'freigabe'));
|
||||||
});
|
setHeader('antritt_bezeichnung', this.$p.t('abschlusspruefung', 'pruefungsantritt'));
|
||||||
cm.getColumnByField('datum').component.updateDefinition({
|
setHeader('sponsion', this.$p.t('abschlusspruefung', 'sponsion'));
|
||||||
title: this.$p.t('global', 'datum')
|
setHeader('anmerkung', this.$p.t('global', 'anmerkung'));
|
||||||
});
|
setHeader('pruefungstyp_kurzbz', this.$p.t('global', 'typ'));
|
||||||
cm.getColumnByField('uhrzeit').component.updateDefinition({
|
setHeader('abschlusspruefung_id', this.$p.t('abschlusspruefung', 'abschlusspruefung_id'));
|
||||||
title: this.$p.t('global', 'uhrzeit')
|
|
||||||
});
|
|
||||||
cm.getColumnByField('freigabedatum').component.updateDefinition({
|
|
||||||
title: this.$p.t('abschlusspruefung', 'freigabe')
|
|
||||||
});
|
|
||||||
cm.getColumnByField('antritt_bezeichnung').component.updateDefinition({
|
|
||||||
title: this.$p.t('abschlusspruefung', 'pruefungsantritt')
|
|
||||||
});
|
|
||||||
cm.getColumnByField('sponsion').component.updateDefinition({
|
|
||||||
title: this.$p.t('abschlusspruefung', 'sponsion')
|
|
||||||
});
|
|
||||||
cm.getColumnByField('anmerkung').component.updateDefinition({
|
|
||||||
title: this.$p.t('global', 'anmerkung')
|
|
||||||
});
|
|
||||||
cm.getColumnByField('pruefungstyp_kurzbz').component.updateDefinition({
|
|
||||||
title: this.$p.t('global', 'typ')
|
|
||||||
});
|
|
||||||
cm.getColumnByField('abschlusspruefung_id').component.updateDefinition({
|
|
||||||
title: this.$p.t('abschlusspruefung', 'abschlusspruefung_id')
|
|
||||||
});
|
|
||||||
/*
|
|
||||||
cm.getColumnByField('actions').component.updateDefinition({
|
|
||||||
title: this.$p.t('global', 'aktionen')
|
|
||||||
});
|
|
||||||
*/
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
],
|
];
|
||||||
tabulatorData: [],
|
return events;
|
||||||
lastSelected: null,
|
},
|
||||||
formData: {
|
studentUids() {
|
||||||
typStg: null,
|
if (this.student.uid)
|
||||||
pruefungstyp_kurzbz: null,
|
{
|
||||||
akadgrad_id: null,
|
return [this.student.uid];
|
||||||
vorsitz: null,
|
}
|
||||||
pruefungsantritt_kurzbz: null,
|
return this.student.map(e => e.uid);
|
||||||
abschlussbeurteilung_kurzbz: null,
|
},
|
||||||
datum: null,
|
studentKzs(){
|
||||||
sponsion: null,
|
if (this.student.uid)
|
||||||
pruefer1: null,
|
{
|
||||||
pruefer2: null,
|
return [this.student.studiengang_kz];
|
||||||
pruefer3: null,
|
}
|
||||||
anmerkung: null,
|
return this.student.map(e => e.studiengang_kz);
|
||||||
protokoll: null,
|
},
|
||||||
note: null,
|
stg_kz(){
|
||||||
link: null
|
return this.studentKzs[0];
|
||||||
},
|
},
|
||||||
statusNew: true,
|
showAllFormats() {
|
||||||
arrTypen: [],
|
if( this.isBerechtigtDocAndOdt === false
|
||||||
arrAntritte: [],
|
|| !Array.isArray(this.isBerechtigtDocAndOdt) )
|
||||||
arrBeurteilungen: [],
|
{
|
||||||
arrAkadGrad: [],
|
return false;
|
||||||
arrNoten: [],
|
}
|
||||||
selectedVorsitz: null,
|
let retval = this.isBerechtigtDocAndOdt.includes(this.stgInfo.oe_kurzbz);
|
||||||
filteredMitarbeiter: [],
|
return retval;
|
||||||
filteredPersons: [],
|
|
||||||
selectedPruefer1: null,
|
|
||||||
selectedPruefer2: null,
|
|
||||||
selectedPruefer3: null,
|
|
||||||
stgInfo: { typ: '', oe_kurzbz: '' },
|
|
||||||
abortController: {
|
|
||||||
mitarbeiter: null,
|
|
||||||
persons: null
|
|
||||||
},
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
watch: {
|
watch: {
|
||||||
@@ -339,7 +326,7 @@ export default {
|
|||||||
},
|
},
|
||||||
getPersonLabel(titelpre, nachname, vorname, titelpost, uid) {
|
getPersonLabel(titelpre, nachname, vorname, titelpost, uid) {
|
||||||
return nachname + ' ' + vorname + (titelpre ? ' ' + titelpre : '') + (titelpost ? ' ' + titelpost : '') + (uid ? ' (' + uid + ')' : '');
|
return nachname + ' ' + vorname + (titelpre ? ' ' + titelpre : '') + (titelpost ? ' ' + titelpost : '') + (uid ? ' (' + uid + ')' : '');
|
||||||
|
|
||||||
},
|
},
|
||||||
actionDeleteAbschlusspruefung(abschlusspruefung_id) {
|
actionDeleteAbschlusspruefung(abschlusspruefung_id) {
|
||||||
this.$fhcAlert
|
this.$fhcAlert
|
||||||
@@ -841,4 +828,3 @@ export default {
|
|||||||
</div>
|
</div>
|
||||||
`
|
`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -31,12 +31,30 @@ export default {
|
|||||||
},
|
},
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
tabulatorOptions: {
|
formData: {},
|
||||||
|
listBegruendungen: [],
|
||||||
|
listNewLehrveranstaltungen: [],
|
||||||
|
listLektoren: [],
|
||||||
|
listKompatibleLehrveranstaltungen: [],
|
||||||
|
statusNew: true,
|
||||||
|
showNotizen: false,
|
||||||
|
currentAnrechnung_id: null,
|
||||||
|
endpoint: ApiNotizPerson,
|
||||||
|
}
|
||||||
|
},
|
||||||
|
computed: {
|
||||||
|
tabulatorOptions() {
|
||||||
|
const options = {
|
||||||
ajaxURL: 'dummy',
|
ajaxURL: 'dummy',
|
||||||
ajaxRequestFunc: () => this.$api.call(
|
ajaxRequestFunc: () => this.$api.call(
|
||||||
ApiStvExemptions.getAnrechnungen(this.student.prestudent_id)
|
ApiStvExemptions.getAnrechnungen(this.student.prestudent_id)
|
||||||
),
|
),
|
||||||
ajaxResponse: (url, params, response) => response.data,
|
ajaxResponse: (url, params, response) => response.data,
|
||||||
|
layout: 'fitDataStretchFrozen',
|
||||||
|
height: '500',
|
||||||
|
index: 'anrechnung_id',
|
||||||
|
persistenceID: 'stv-details-anrechnungen-20260217',
|
||||||
|
selectableRows: true,
|
||||||
columns: [
|
columns: [
|
||||||
{title: "anrechnung_id", field: "anrechnung_id", visible: false},
|
{title: "anrechnung_id", field: "anrechnung_id", visible: false},
|
||||||
{title: "lehrveranstaltung_id", field: "lehrveranstaltung_id", visible: false},
|
{title: "lehrveranstaltung_id", field: "lehrveranstaltung_id", visible: false},
|
||||||
@@ -107,63 +125,43 @@ export default {
|
|||||||
frozen: true
|
frozen: true
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
layout: 'fitDataStretchFrozen',
|
};
|
||||||
height: '500',
|
return options;
|
||||||
index: 'anrechnung_id',
|
},
|
||||||
persistenceID: 'stv-details-anrechnungen-2025112401'
|
tabulatorEvents() {
|
||||||
},
|
const events = [
|
||||||
tabulatorEvents: [
|
|
||||||
{
|
{
|
||||||
event: 'tableBuilt',
|
event: 'tableBuilt',
|
||||||
handler: async () => {
|
handler: async () => {
|
||||||
|
|
||||||
await this.$p.loadCategory(['anrechnungen', 'global', 'ui', 'lehre']);
|
await this.$p.loadCategory(['anrechnungen', 'global', 'ui', 'lehre']);
|
||||||
|
|
||||||
let cm = this.$refs.table.tabulator.columnManager;
|
const setHeader = (field, text) => {
|
||||||
|
const col = this.$refs.table.tabulator.getColumn(field);
|
||||||
|
if (!col) return;
|
||||||
|
|
||||||
cm.getColumnByField('anrechnung_id').component.updateDefinition({
|
const el = col.getElement();
|
||||||
title: this.$p.t('ui', 'anrechnung_id'),
|
if (!el || !el.querySelector) return;
|
||||||
});
|
|
||||||
cm.getColumnByField('lehrveranstaltung_id').component.updateDefinition({
|
|
||||||
title: this.$p.t('lehre', 'lehrveranstaltung_id'),
|
|
||||||
});
|
|
||||||
cm.getColumnByField('bez_lehrveranstaltung').component.updateDefinition({
|
|
||||||
title: this.$p.t('lehre', 'lehrveranstaltung'),
|
|
||||||
});
|
|
||||||
cm.getColumnByField('begruendung').component.updateDefinition({
|
|
||||||
title: this.$p.t('global', 'begruendung'),
|
|
||||||
});
|
|
||||||
cm.getColumnByField('lehrveranstaltung_id_kompatibel').component.updateDefinition({
|
|
||||||
title: this.$p.t('anrechnung', 'lehrveranstaltung_id_kompatibel'),
|
|
||||||
});
|
|
||||||
cm.getColumnByField('lehrveranstaltung_bez_kompatibel').component.updateDefinition({
|
|
||||||
title: this.$p.t('anrechnung', 'lehrveranstaltung_bez_kompatibel'),
|
|
||||||
});
|
|
||||||
cm.getColumnByField('status').component.updateDefinition({
|
|
||||||
title: this.$p.t('global', 'status'),
|
|
||||||
});
|
|
||||||
cm.getColumnByField('genehmigt_von').component.updateDefinition({
|
|
||||||
title: this.$p.t('anrechnung', 'genehmigtVon'),
|
|
||||||
});
|
|
||||||
cm.getColumnByField('notizen_anzahl').component.updateDefinition({
|
|
||||||
title: this.$p.t('anrechnung', 'existingNotes'),
|
|
||||||
});
|
|
||||||
cm.getColumnByField('insertamum').component.updateDefinition({
|
|
||||||
title: this.$p.t('global', 'datum'),
|
|
||||||
});
|
|
||||||
|
|
||||||
|
const titleEl = el.querySelector('.tabulator-col-title');
|
||||||
|
if (titleEl) {
|
||||||
|
titleEl.textContent = text;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
setHeader( 'anrechnung_id', this.$p.t('ui', 'anrechnung_id'));
|
||||||
|
setHeader( 'lehrveranstaltung_id', this.$p.t('lehre', 'lehrveranstaltung_id'));
|
||||||
|
setHeader( 'bez_lehrveranstaltung', this.$p.t('lehre', 'lehrveranstaltung'));
|
||||||
|
setHeader( 'begruendung', this.$p.t('global', 'begruendung'));
|
||||||
|
setHeader( 'lehrveranstaltung_id_kompatibel', this.$p.t('anrechnung', 'lehrveranstaltung_id_kompatibel'));
|
||||||
|
setHeader( 'lehrveranstaltung_bez_kompatibel', this.$p.t('anrechnung', 'lehrveranstaltung_bez_kompatibel'));
|
||||||
|
setHeader( 'status', this.$p.t('global', 'status'));
|
||||||
|
setHeader( 'genehmigt_von', this.$p.t('anrechnung', 'genehmigtVon'));
|
||||||
|
setHeader( 'notizen_anzahl', this.$p.t('anrechnung', 'existingNotes'));
|
||||||
|
setHeader( 'insertamum', this.$p.t('global', 'datum'));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
],
|
];
|
||||||
formData: {},
|
return events;
|
||||||
listBegruendungen: [],
|
|
||||||
listNewLehrveranstaltungen: [],
|
|
||||||
listLektoren: [],
|
|
||||||
listKompatibleLehrveranstaltungen: [],
|
|
||||||
statusNew: true,
|
|
||||||
showNotizen: false,
|
|
||||||
currentAnrechnung_id: null,
|
|
||||||
endpoint: ApiNotizPerson
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
watch: {
|
watch: {
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user