mirror of
https://github.com/FH-Complete/FHC-Core.git
synced 2026-07-20 00:12:15 +00:00
Merge branch 'feature-29144/Prestudent_status_nach_Bismeldung_sperren_2'
This commit is contained in:
@@ -31,6 +31,14 @@ $config['navigation_header'] = array(
|
||||
'expand' => true,
|
||||
'sort' => 20,
|
||||
'requiredPermissions' => 'admin:w'
|
||||
),
|
||||
'bismeldestichtagsverwaltung' => array(
|
||||
'link' => site_url('codex/Bismeldestichtag'),
|
||||
'icon' => '',
|
||||
'description' => 'BIS-Meldestichtagsverwaltung',
|
||||
'expand' => true,
|
||||
'sort' => 30,
|
||||
'requiredPermissions' => 'admin:w'
|
||||
)
|
||||
)
|
||||
),
|
||||
|
||||
@@ -0,0 +1,140 @@
|
||||
<?php
|
||||
|
||||
if (! defined('BASEPATH')) exit('No direct script access allowed');
|
||||
|
||||
/**
|
||||
* Overview on Bismeldestichtage
|
||||
*/
|
||||
class Bismeldestichtag extends Auth_Controller
|
||||
{
|
||||
/**
|
||||
* Constructor
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
parent::__construct(
|
||||
array(
|
||||
'index' => 'admin:r',
|
||||
'getStudiensemester' => 'admin:r',
|
||||
'getBismeldestichtage' => 'admin:r',
|
||||
'addBismeldestichtag' => 'admin:rw',
|
||||
'deleteBismeldestichtag' => 'admin:rw'
|
||||
)
|
||||
);
|
||||
|
||||
// Load models
|
||||
$this->load->model('codex/Bismeldestichtag_model', 'BismeldestichtagModel');
|
||||
$this->load->model('organisation/Studiensemester_model', 'StudiensemesterModel');
|
||||
|
||||
// Loads phrases system
|
||||
$this->loadPhrases(
|
||||
array(
|
||||
'bismeldestichtag'
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
// -----------------------------------------------------------------------------------------------------------------
|
||||
// Public methods
|
||||
|
||||
/**
|
||||
* Everything has a beginning
|
||||
*/
|
||||
public function index()
|
||||
{
|
||||
$this->load->view('codex/bismeldestichtag.php');
|
||||
}
|
||||
|
||||
public function getStudiensemester()
|
||||
{
|
||||
// load semester list
|
||||
$semList = array();
|
||||
$this->StudiensemesterModel->addSelect('studiensemester_kurzbz');
|
||||
$this->StudiensemesterModel->addOrder('start', 'DESC');
|
||||
$semRes = $this->StudiensemesterModel->load();
|
||||
|
||||
if (hasData($semRes))
|
||||
{
|
||||
$semList = getData($semRes);
|
||||
}
|
||||
|
||||
// load current semester
|
||||
$currSem = null;
|
||||
$semRes = $this->StudiensemesterModel->getAkt();
|
||||
|
||||
if (hasData($semRes))
|
||||
{
|
||||
$currSem = getData($semRes)[0]->studiensemester_kurzbz;
|
||||
}
|
||||
|
||||
// output data
|
||||
$this->outputJsonSuccess(
|
||||
array('semList' => $semList, 'currSem' => $currSem)
|
||||
);
|
||||
}
|
||||
|
||||
public function getBismeldestichtage()
|
||||
{
|
||||
$this->BismeldestichtagModel->addSelect(
|
||||
'meldestichtag_id, meldestichtag,
|
||||
tbl_bismeldestichtag.studiensemester_kurzbz, sem.start AS semester_start,
|
||||
tbl_bismeldestichtag.insertamum, tbl_bismeldestichtag.insertvon, tbl_bismeldestichtag.updateamum, tbl_bismeldestichtag.updatevon'
|
||||
);
|
||||
$this->BismeldestichtagModel->addJoin('public.tbl_studiensemester sem', 'studiensemester_kurzbz', 'LEFT');
|
||||
$this->BismeldestichtagModel->addOrder('semester_start');
|
||||
$this->BismeldestichtagModel->addOrder('meldestichtag', 'DESC');
|
||||
$this->BismeldestichtagModel->addOrder('meldestichtag_id', 'DESC');
|
||||
$this->outputJson($this->BismeldestichtagModel->load());
|
||||
}
|
||||
|
||||
public function addBismeldestichtag()
|
||||
{
|
||||
// get request data
|
||||
$request = $this->getPostJSON();
|
||||
|
||||
// check request data
|
||||
if (!property_exists($request, 'meldestichtag') || isEmptyString($request->meldestichtag))
|
||||
$this->terminateWithJsonError('Error occured: Meldestichtag missing');
|
||||
if (!property_exists($request, 'studiensemester_kurzbz') || isEmptyString($request->studiensemester_kurzbz))
|
||||
$this->terminateWithJsonError('Error occured: Studiensemester missing');
|
||||
|
||||
$meldestichtag = $request->meldestichtag;
|
||||
$studiensemester_kurzbz = $request->studiensemester_kurzbz;
|
||||
|
||||
// check if Bismeldestichtag already exists
|
||||
$this->BismeldestichtagModel->addSelect('1');
|
||||
$bismeldestichtagRes = $this->BismeldestichtagModel->loadWhere(
|
||||
array('meldestichtag' => $meldestichtag, 'studiensemester_kurzbz' => $studiensemester_kurzbz)
|
||||
);
|
||||
|
||||
// return success if already exists
|
||||
if (hasData($bismeldestichtagRes))
|
||||
$this->outputJsonSuccess('Bismeldestichtag already exists');
|
||||
else
|
||||
{
|
||||
// insert new if Stichtag does not exist
|
||||
$this->outputJson($this->BismeldestichtagModel->insert(
|
||||
array(
|
||||
'meldestichtag' => $request->meldestichtag,
|
||||
'studiensemester_kurzbz' => $request->studiensemester_kurzbz,
|
||||
'insertvon' => getAuthUID()
|
||||
)
|
||||
));
|
||||
}
|
||||
}
|
||||
|
||||
public function deleteBismeldestichtag()
|
||||
{
|
||||
// get request data
|
||||
$request = $this->getPostJSON();
|
||||
|
||||
// check request data
|
||||
if (!property_exists($request, 'meldestichtag_id'))
|
||||
$this->terminateWithJsonError('Error occured: Meldestichtag Id missing');
|
||||
|
||||
$meldestichtag_id = $request->meldestichtag_id;
|
||||
|
||||
// deletetion
|
||||
$this->outputJson($this->BismeldestichtagModel->delete($meldestichtag_id));
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
<?php
|
||||
class Bismeldestichtag_model extends DB_Model
|
||||
{
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
parent::__construct();
|
||||
$this->dbTable = 'bis.tbl_bismeldestichtag';
|
||||
$this->pk = 'meldestichtag_id';
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,75 @@
|
||||
<?php
|
||||
$includesArray = array(
|
||||
'title' => 'Bismeldestichtage',
|
||||
'axios027' => true,
|
||||
'bootstrap5' => true,
|
||||
'fontawesome6' => true,
|
||||
'vue3' => true,
|
||||
'filtercomponent' => true,
|
||||
'navigationcomponent' => true,
|
||||
'tabulator5' => true,
|
||||
'customCSSs' => array('vendor/vuejs/vuedatepicker_css/main.css'),
|
||||
'customJSs' => array('vendor/vuejs/vuedatepicker_js/vue-datepicker.iife.js'),
|
||||
'customJSModules' => array('public/js/apps/Bismeldestichtag/Bismeldestichtag.js')
|
||||
);
|
||||
|
||||
$this->load->view('templates/FHC-Header', $includesArray);
|
||||
?>
|
||||
<div id="main">
|
||||
|
||||
<!-- Navigation component -->
|
||||
<core-navigation-cmpt></core-navigation-cmpt>
|
||||
|
||||
<!-- Fetch component -->
|
||||
<core-fetch-cmpt
|
||||
v-bind:api-function="fetchCmptApiFunction"
|
||||
v-bind:api-function-parameters="fetchCmptApiFunctionParams"
|
||||
v-bind:refresh="fetchCmptRefresh"
|
||||
@data-fetched="fetchCmptDataFetched">
|
||||
</core-fetch-cmpt>
|
||||
|
||||
<div id="content">
|
||||
<!-- input fields -->
|
||||
<div class="row">
|
||||
<div class="col-5">
|
||||
<datepicker v-model="meldestichtag"
|
||||
v-bind:enable-time-picker="false"
|
||||
v-bind:placeholder="'Meldestichtag'"
|
||||
v-bind:text-input="true"
|
||||
v-bind:auto-apply="true"
|
||||
locale="de"
|
||||
format="dd.MM.yyyy"
|
||||
model-type="yyyy-MM-dd">
|
||||
</datepicker>
|
||||
</div>
|
||||
<div class="col-4">
|
||||
<select class="form-select" name="studiensemester_kurzbz" v-model="currSem">
|
||||
<option v-for="sem in semList" :value="sem.studiensemester_kurzbz">
|
||||
{{ sem.studiensemester_kurzbz }}
|
||||
</option>
|
||||
</select>
|
||||
</div>
|
||||
<div class="col-3">
|
||||
<button type="button" class="btn btn-primary" @click="handlerAddBismeldestichtag">
|
||||
<?php echo $this->p->t('bismeldestichtag', 'stichtagHinzufuegen') ?>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
<br />
|
||||
<!-- Filter component -->
|
||||
<div class="row">
|
||||
<div class="col">
|
||||
<core-filter-cmpt
|
||||
title="<?php echo $this->p->t('bismeldestichtag', 'stichtageVerwalten') ?>"
|
||||
ref="bismeldestichtageTable"
|
||||
:side-menu="false"
|
||||
:tabulator-options="bismeldestichtagTabulatorOptions"
|
||||
:tabulator-events="bismeldestichtagTabulatorEventHandlers"
|
||||
:table-only="true">
|
||||
</core-filter-cmpt>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<?php $this->load->view('templates/FHC-Footer', $includesArray); ?>
|
||||
+22
-22
@@ -337,28 +337,28 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "package",
|
||||
"package": {
|
||||
"name": "vuejs/vuedatepicker_js",
|
||||
"version": "5.4.0",
|
||||
"dist": {
|
||||
"url": "https://unpkg.com/@vuepic/vue-datepicker@5.4.0/dist/vue-datepicker.iife.js",
|
||||
"type": "file"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "package",
|
||||
"package": {
|
||||
"name": "vuejs/vuedatepicker_css",
|
||||
"version": "5.4.0",
|
||||
"dist": {
|
||||
"url": "https://unpkg.com/@vuepic/vue-datepicker@5.4.0/dist/main.css",
|
||||
"type": "file"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "package",
|
||||
"package": {
|
||||
"name": "vuejs/vuedatepicker_js",
|
||||
"version": "5.4.0",
|
||||
"dist": {
|
||||
"url": "https://unpkg.com/@vuepic/vue-datepicker@4.2.3/dist/vue-datepicker.iife.js",
|
||||
"type": "file"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "package",
|
||||
"package": {
|
||||
"name": "vuejs/vuedatepicker_css",
|
||||
"version": "5.4.0",
|
||||
"dist": {
|
||||
"url": "https://unpkg.com/@vuepic/vue-datepicker@4.2.3/dist/main.css",
|
||||
"type": "file"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "composer",
|
||||
"url": "https://asset-packagist.org"
|
||||
|
||||
@@ -74,6 +74,7 @@ require_once('../../include/reihungstest.class.php');
|
||||
require_once('../../include/studienplan.class.php');
|
||||
require_once('../../include/mobilitaet.class.php');
|
||||
require_once('../../include/studienordnung.class.php');
|
||||
require_once('../../include/bismeldestichtag.class.php');
|
||||
|
||||
$user = get_uid();
|
||||
$db = new basis_db();
|
||||
@@ -383,7 +384,7 @@ function isBuchungAllowedToChange($buchung_obj)
|
||||
* @param $new_status_ausbildungssemester Ausbildungssemester des neuen/zu ändernen Status
|
||||
* @param $old_status_studiensemester Studiensemester des alten Status, leer wenn neuer Status
|
||||
* @param $old_status_ausbildungssemester Ausbildungssemester des alten Status, leer wenn neuer Status
|
||||
* @return array
|
||||
* @return array mit error = true und Fehlerbeschreibung wenn ungültig, andernfalls error = false
|
||||
*/
|
||||
function checkStatusaenderung(
|
||||
$prestudent_id, $status_kurzbz, $new_status_studiensemester, $new_status_datum, $new_status_ausbildungssemester,
|
||||
@@ -417,7 +418,7 @@ function checkStatusaenderung(
|
||||
$studiensemester->load($new_status_studiensemester);
|
||||
$new_status_semesterstart = new DateTime($studiensemester->start);
|
||||
|
||||
// Alle bisherigen prestudentstatus nach Datum sortiert
|
||||
// Alle prestudentstatus nach Datum sortiert
|
||||
$qry = "SELECT status_kurzbz, studiensemester_kurzbz, ausbildungssemester, datum, sem.start AS studiensemester_start
|
||||
FROM public.tbl_prestudentstatus pss
|
||||
JOIN public.tbl_studiensemester sem USING (studiensemester_kurzbz)
|
||||
@@ -464,7 +465,7 @@ function checkStatusaenderung(
|
||||
// Gültige Zeitabfolge, bestehenden Status hinzufügen
|
||||
$statusArr[] = $row;
|
||||
}
|
||||
// oder Neuer/editierter Statuseintrag nach bestehendem Statuseintrag
|
||||
// oder Neuer/editierter Statuseintrag vor bestehendem Statuseintrag
|
||||
elseif ($new_status_datum <= $status_datum && $new_status_semesterstart <= $studiensemester_start)
|
||||
{
|
||||
// Gültige Zeitabfolge, bestehenden Status hinzufügen
|
||||
@@ -475,8 +476,7 @@ function checkStatusaenderung(
|
||||
// Zeitabfolge ungültig, Fehler
|
||||
return array(
|
||||
'error' => true,
|
||||
'errormsg' => 'Datum des Statuseintrags muss nach dem Statusdatum,'
|
||||
.' Semesterstartdatum nach Semesterstartdatum des vorherigen Statuseintrags sein'
|
||||
'errormsg' => 'Ungültige Zeitabfolge der Statuseinträge (Statusdatum oder Semester)'
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -994,6 +994,18 @@ if(!$error)
|
||||
{
|
||||
$new_status_datum = isset($_POST['datum']) ? $_POST['datum'] : date('Y-m-d');
|
||||
|
||||
$bismeldestichtag = new bismeldestichtag();
|
||||
|
||||
$meldestichtag_erreicht = $bismeldestichtag->checkMeldestichtagErreicht($new_status_datum);
|
||||
|
||||
if ($meldestichtag_erreicht === true)
|
||||
{
|
||||
$return = false;
|
||||
$error = true;
|
||||
$errormsg .= 'Studentstatus mit Datum oder Semesterende vor erreichtem Meldestichtag können nicht hinzugefügt werden.';
|
||||
$anzahl_fehler++;
|
||||
}
|
||||
|
||||
$check_statusaenderung_result = checkStatusaenderung(
|
||||
$prestudent_id,
|
||||
$_POST['status_kurzbz'],
|
||||
@@ -1204,13 +1216,24 @@ if(!$error)
|
||||
|
||||
if(isset($_POST['studiensemester_kurzbz']) && isset($_POST['status_kurzbz']) &&
|
||||
isset($_POST['prestudent_id']) && is_numeric($_POST['prestudent_id']) &&
|
||||
isset($_POST['ausbildungssemester']) && is_numeric($_POST['ausbildungssemester']))
|
||||
isset($_POST['ausbildungssemester']) && is_numeric($_POST['ausbildungssemester']) &&
|
||||
isset($_POST['datum']))
|
||||
{
|
||||
if($_POST['status_kurzbz']=='Student' && !$rechte->isBerechtigt('admin', null, 'suid') && !$rechte->isBerechtigt('student/keine_studstatuspruefung', null, 'suid'))
|
||||
$erweiterteBerechtigungen = $rechte->isBerechtigt('admin', null, 'suid') || $rechte->isBerechtigt('student/keine_studstatuspruefung', null, 'suid');
|
||||
|
||||
$bismeldestichtag = new bismeldestichtag();
|
||||
$meldestichtag_erreicht = $bismeldestichtag->checkMeldestichtagErreicht($_POST['datum']);
|
||||
|
||||
if($_POST['status_kurzbz']=='Student' && !$erweiterteBerechtigungen)
|
||||
{
|
||||
$return = false;
|
||||
$errormsg = 'Studentenrolle kann nur durch den Administrator geloescht werden';
|
||||
}
|
||||
elseif ($meldestichtag_erreicht && !$erweiterteBerechtigungen)
|
||||
{
|
||||
$return = false;
|
||||
$errormsg = 'Studentstatus mit Datum oder Semesterende vor erreichtem Meldestichtag können nicht gelöscht werden.';
|
||||
}
|
||||
else
|
||||
{
|
||||
$qry = "SELECT count(*) as anzahl FROM public.tbl_prestudentstatus WHERE prestudent_id=".$db->db_add_param($_POST['prestudent_id'], FHC_INTEGER);
|
||||
@@ -1530,6 +1553,17 @@ if(!$error)
|
||||
$error = true;
|
||||
$errormsg = isset($check_statusaenderung_result['errormsg']) ? $check_statusaenderung_result['errormsg'] : '';
|
||||
}
|
||||
|
||||
// Prüfung, ob Meldestichtag erreicht ist
|
||||
$bismeldestichtag = new bismeldestichtag();
|
||||
$meldestichtag_erreicht = $bismeldestichtag->checkMeldestichtagErreicht($_POST['datum']);
|
||||
|
||||
if ($meldestichtag_erreicht === true)
|
||||
{
|
||||
$return = false;
|
||||
$error = true;
|
||||
$errormsg = 'Studentstatus mit Datum oder Semesterende vor erreichtem Meldestichtag können nicht hinzugefügt werden.';
|
||||
}
|
||||
}
|
||||
|
||||
if(!$error)
|
||||
|
||||
@@ -806,24 +806,24 @@ echo '<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>';
|
||||
<treechildren flex="1" >
|
||||
<treeitem uri="rdf:*">
|
||||
<treerow>
|
||||
<treecell label="rdf:http://www.technikum-wien.at/prestudentrolle/rdf#status_kurzbz"/>
|
||||
<treecell label="rdf:http://www.technikum-wien.at/prestudentrolle/rdf#studiensemester_kurzbz"/>
|
||||
<treecell label="rdf:http://www.technikum-wien.at/prestudentrolle/rdf#ausbildungssemester"/>
|
||||
<treecell label="rdf:http://www.technikum-wien.at/prestudentrolle/rdf#lehrverband"/>
|
||||
<treecell label="rdf:http://www.technikum-wien.at/prestudentrolle/rdf#datum"/>
|
||||
<treecell label="rdf:http://www.technikum-wien.at/prestudentrolle/rdf#orgform_kurzbz"/>
|
||||
<treecell label="rdf:http://www.technikum-wien.at/prestudentrolle/rdf#prestudent_id"/>
|
||||
<treecell label="rdf:http://www.technikum-wien.at/prestudentrolle/rdf#studienplan_id"/>
|
||||
<treecell label="rdf:http://www.technikum-wien.at/prestudentrolle/rdf#studienplan_bezeichnung"/>
|
||||
<treecell label="rdf:http://www.technikum-wien.at/prestudentrolle/rdf#anmerkung"/>
|
||||
<treecell label="rdf:http://www.technikum-wien.at/prestudentrolle/rdf#bestaetigt_von"/>
|
||||
<treecell label="rdf:http://www.technikum-wien.at/prestudentrolle/rdf#bestaetigt_am"/>
|
||||
<treecell label="rdf:http://www.technikum-wien.at/prestudentrolle/rdf#bewerbung_abgeschicktamum"/>
|
||||
<treecell label="rdf:http://www.technikum-wien.at/prestudentrolle/rdf#statusgrund"/>
|
||||
<treecell label="rdf:http://www.technikum-wien.at/prestudentrolle/rdf#insertamum"/>
|
||||
<treecell label="rdf:http://www.technikum-wien.at/prestudentrolle/rdf#insertvon"/>
|
||||
<treecell label="rdf:http://www.technikum-wien.at/prestudentrolle/rdf#updateamum"/>
|
||||
<treecell 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#status_kurzbz"/>
|
||||
<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#studiensemester_kurzbz"/>
|
||||
<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#ausbildungssemester"/>
|
||||
<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#lehrverband"/>
|
||||
<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#datum"/>
|
||||
<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#orgform_kurzbz"/>
|
||||
<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#prestudent_id"/>
|
||||
<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#studienplan_id"/>
|
||||
<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#studienplan_bezeichnung"/>
|
||||
<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#anmerkung"/>
|
||||
<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#bestaetigt_von"/>
|
||||
<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#bestaetigt_am"/>
|
||||
<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#bewerbung_abgeschicktamum"/>
|
||||
<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#statusgrund"/>
|
||||
<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#insertamum"/>
|
||||
<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#updatevon"/>
|
||||
</treerow>
|
||||
</treeitem>
|
||||
</treechildren>
|
||||
|
||||
@@ -1876,7 +1876,6 @@ function StudentPrestudentDisableFields(val)
|
||||
|
||||
document.getElementById('student-prestudent-menulist-aufnahmeschluessel').disabled=val;
|
||||
document.getElementById('student-prestudent-checkbox-facheinschlberuf').disabled=val;
|
||||
document.getElementById('student-prestudent-checkbox-bismelden').disabled=val;
|
||||
document.getElementById('student-prestudent-menulist-foerderrelevant').disabled=val;
|
||||
document.getElementById('student-prestudent-checkbox-dual').disabled=val;
|
||||
document.getElementById('student-prestudent-button-save').disabled=val;
|
||||
@@ -1923,6 +1922,20 @@ function StudentPrestudentDisableFields(val)
|
||||
document.getElementById('student-prestudent-menulist-zgvmastercode').disabled=true;
|
||||
}
|
||||
|
||||
// bismelden checkbox deaktivieren wenn Recht nicht vorhanden ist
|
||||
<?php
|
||||
$editBismelden = $rechte->isBerechtigt('student/editBismelden') ? 'true' : 'false';
|
||||
echo ' var editBismelden = '.$editBismelden.';';
|
||||
?>
|
||||
if (editBismelden == true)
|
||||
{
|
||||
document.getElementById('student-prestudent-checkbox-bismelden').disabled=val;
|
||||
}
|
||||
else
|
||||
{
|
||||
document.getElementById('student-prestudent-checkbox-bismelden').disabled=true;
|
||||
}
|
||||
|
||||
//Status Tree leeren
|
||||
rollentree = document.getElementById('student-prestudent-tree-rolle');
|
||||
|
||||
@@ -2080,6 +2093,7 @@ function StudentPrestudentRolleDelete()
|
||||
var studiensemester_kurzbz = getTreeCellText(tree, 'student-prestudent-tree-rolle-studiensemester_kurzbz', tree.currentIndex);
|
||||
var prestudent_id = getTreeCellText(tree, 'student-prestudent-tree-rolle-prestudent_id', tree.currentIndex);
|
||||
var ausbildungssemester = getTreeCellText(tree, 'student-prestudent-tree-rolle-ausbildungssemester', tree.currentIndex);
|
||||
var datum = getTreeCellText(tree, 'student-prestudent-tree-rolle-datum', tree.currentIndex);
|
||||
|
||||
studiengang_kz = document.getElementById('student-prestudent-menulist-studiengang_kz').value;
|
||||
if(confirm('Diese Rolle wirklich loeschen?'))
|
||||
@@ -2108,6 +2122,7 @@ function StudentPrestudentRolleDelete()
|
||||
req.add('studiensemester_kurzbz', studiensemester_kurzbz);
|
||||
req.add('ausbildungssemester', ausbildungssemester);
|
||||
req.add('studiengang_kz', studiengang_kz);
|
||||
req.add('datum', datum);
|
||||
|
||||
var response = req.executePOST();
|
||||
|
||||
@@ -2139,6 +2154,7 @@ function StudentPrestudentRolleDelete()
|
||||
req.add('studiensemester_kurzbz', studiensemester_kurzbz);
|
||||
req.add('ausbildungssemester', ausbildungssemester);
|
||||
req.add('studiengang_kz', studiengang_kz);
|
||||
req.add('datum', datum);
|
||||
|
||||
var response = req.executePOST();
|
||||
|
||||
@@ -2231,8 +2247,9 @@ function StudentRolleBearbeiten()
|
||||
var studiensemester_kurzbz = getTreeCellText(tree, 'student-prestudent-tree-rolle-studiensemester_kurzbz', tree.currentIndex);
|
||||
var prestudent_id = getTreeCellText(tree, 'student-prestudent-tree-rolle-prestudent_id', tree.currentIndex);
|
||||
var ausbildungssemester = getTreeCellText(tree, 'student-prestudent-tree-rolle-ausbildungssemester', tree.currentIndex);
|
||||
var datum = getTreeCellText(tree, 'student-prestudent-tree-rolle-datum', tree.currentIndex);
|
||||
|
||||
window.open('<?php echo APP_ROOT?>content/student/studentrolledialog.xul.php?prestudent_id='+prestudent_id+'&status_kurzbz='+status_kurzbz+'&studiensemester_kurzbz='+studiensemester_kurzbz+'&ausbildungssemester='+ausbildungssemester,"Status","status=no, width=500, height=450, centerscreen, resizable");
|
||||
window.open('<?php echo APP_ROOT?>content/student/studentrolledialog.xul.php?prestudent_id='+prestudent_id+'&status_kurzbz='+status_kurzbz+'&studiensemester_kurzbz='+studiensemester_kurzbz+'&ausbildungssemester='+ausbildungssemester+'&datum='+datum,"Status","status=no, width=500, height=450, centerscreen, resizable");
|
||||
}
|
||||
|
||||
// ****
|
||||
@@ -2290,7 +2307,7 @@ function StudentRolleSpeichern(dialog, studiensemester_old, ausbildungssemester_
|
||||
timepart_arr[i] = '00';
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
arr = datepart.split('.');
|
||||
|
||||
if(arr[0].length==1)
|
||||
|
||||
@@ -31,6 +31,7 @@ require_once('../../include/person.class.php');
|
||||
require_once('../../include/prestudent.class.php');
|
||||
require_once('../../include/studienplan.class.php');
|
||||
require_once('../../include/benutzerberechtigung.class.php');
|
||||
require_once('../../include/bismeldestichtag.class.php');
|
||||
|
||||
echo '<?xml version="1.0" encoding="UTF-8"?>'."\n";
|
||||
|
||||
@@ -58,8 +59,17 @@ if(isset($_GET['ausbildungssemester']))
|
||||
else
|
||||
$ausbildungssemester='';
|
||||
|
||||
if(isset($_GET['datum']))
|
||||
$datum=$_GET['datum'];
|
||||
else
|
||||
$datum='';
|
||||
|
||||
$vorname = '';
|
||||
$nachname = '';
|
||||
|
||||
$user=get_uid();
|
||||
$db = new basis_db();
|
||||
|
||||
if($prestudent_id!='')
|
||||
{
|
||||
$prestudent = new prestudent();
|
||||
@@ -67,9 +77,16 @@ if($prestudent_id!='')
|
||||
|
||||
$vorname = $prestudent->vorname;
|
||||
$nachname = $prestudent->nachname;
|
||||
|
||||
// Prüfen, ob Studnetrolle vor dem aktuellen Meldestichtag ist. In diesem Fall darf die Rolle nicht mehr bearbeitet werden.
|
||||
$rechte = new benutzerberechtigung();
|
||||
$rechte->getBerechtigungen($user);
|
||||
|
||||
$bismeldestichtag = new bismeldestichtag();
|
||||
$disabled = $bismeldestichtag->checkMeldestichtagErreicht($datum) && !$rechte->isBerechtigt('student/keine_studstatuspruefung', null, 'suid')
|
||||
? ' disabled="true"'
|
||||
: '';
|
||||
}
|
||||
$db = new basis_db();
|
||||
$user=get_uid();
|
||||
?>
|
||||
|
||||
<window id="student-rolle-dialog" title="Status"
|
||||
@@ -83,6 +100,9 @@ $user=get_uid();
|
||||
<vbox>
|
||||
<textbox id="student-rolle-textbox-prestudent_id" value="" hidden="true" />
|
||||
<groupbox id="student-rolle-groupbox" flex="1">
|
||||
<?php if ($disabled): ?>
|
||||
<label class="warning">Meldestichtag erreicht - Bearbeiten nicht mehr möglich</label>
|
||||
<?php endif; ?>
|
||||
<caption label="Details<?php echo ($nachname!=''?" $nachname $vorname":'');?>"/>
|
||||
<grid id="student-rolle-grid-detail" style="margin:4px;" flex="1">
|
||||
<columns >
|
||||
@@ -112,7 +132,7 @@ $user=get_uid();
|
||||
<label value="Studiensemester" control="student-rolle-menulist-studiensemester"/>
|
||||
<menulist id="student-rolle-menulist-studiensemester"
|
||||
datasources="<?php echo APP_ROOT ?>rdf/studiensemester.rdf.php?order=desc" flex="1"
|
||||
ref="http://www.technikum-wien.at/studiensemester/liste" >
|
||||
ref="http://www.technikum-wien.at/studiensemester/liste"<?php echo $disabled ?> >
|
||||
<template>
|
||||
<menupopup>
|
||||
<menuitem value="rdf:http://www.technikum-wien.at/studiensemester/rdf#kurzbz"
|
||||
@@ -124,7 +144,7 @@ $user=get_uid();
|
||||
</row>
|
||||
<row>
|
||||
<label value="Ausbildungssemester" control="student-rolle-menulist-ausbildungssemester"/>
|
||||
<menulist id="student-rolle-menulist-ausbildungssemester" >
|
||||
<menulist id="student-rolle-menulist-ausbildungssemester"<?php echo $disabled ?> >
|
||||
<menupopup>
|
||||
<?php
|
||||
|
||||
@@ -163,7 +183,7 @@ $user=get_uid();
|
||||
?>
|
||||
<row hidden="<?php echo $hidden; ?>">
|
||||
<label value="Organisationsform" control="student-rolle-menulist-orgform_kurzbz"/>
|
||||
<menulist id="student-rolle-menulist-orgform_kurzbz" >
|
||||
<menulist id="student-rolle-menulist-orgform_kurzbz"<?php echo $disabled ?> >
|
||||
<menupopup>
|
||||
<menuitem value="" label="-- keine Auswahl --"/>
|
||||
<?php
|
||||
@@ -181,13 +201,13 @@ $user=get_uid();
|
||||
</row>
|
||||
<row>
|
||||
<label value="Datum" control="student-rolle-datum-datum"/>
|
||||
<box class='Datum' id="student-rolle-datum-datum" />
|
||||
<box class='Datum' id="student-rolle-datum-datum"<?php echo $disabled ?>/>
|
||||
</row>
|
||||
<row>
|
||||
<label value="Bestätigt am" control="student-rolle-datum-bestaetigt_datum"/>
|
||||
<box class='Datum' id="student-rolle-datum-bestaetigt_datum" />
|
||||
<box class='Datum' id="student-rolle-datum-bestaetigt_datum"<?php echo $disabled ?> />
|
||||
</row>
|
||||
<?php
|
||||
<?php
|
||||
$readonly = 'readonly="true"';
|
||||
$rechte = new benutzerberechtigung();
|
||||
$rechte->getBerechtigungen($user);
|
||||
@@ -196,11 +216,11 @@ $user=get_uid();
|
||||
?>
|
||||
<row>
|
||||
<label value="Bewerbung abgeschickt am" control="student-rolle-datum-bewerbung_abgeschicktamum"/>
|
||||
<textbox id="student-rolle-datum-bewerbung_abgeschicktamum" <?php echo $readonly ?>/>
|
||||
<textbox id="student-rolle-datum-bewerbung_abgeschicktamum" <?php echo $readonly ?><?php echo $disabled ?>/>
|
||||
</row>
|
||||
<row>
|
||||
<label value="Studienplan" control="student-rolle-menulist-studienplan"/>
|
||||
<menulist id="student-rolle-menulist-studienplan" >
|
||||
<menulist id="student-rolle-menulist-studienplan"<?php echo $disabled ?> >
|
||||
<menupopup>
|
||||
<menuitem value="" label="-- keine Auswahl --"/>
|
||||
<?php
|
||||
@@ -217,11 +237,11 @@ $user=get_uid();
|
||||
</row>
|
||||
<row>
|
||||
<label value="Anmerkung"/>
|
||||
<textbox id="student-rolle-textbox-anmerkung" multiline="true" />
|
||||
<textbox id="student-rolle-textbox-anmerkung" multiline="true"<?php echo $disabled ?> />
|
||||
</row>
|
||||
<row>
|
||||
<label value="Aufnahmestufe"/>
|
||||
<menulist id="student-rolle-menulist-stufe" disabled="false">
|
||||
<menulist id="student-rolle-menulist-stufe" <?php echo empty($disabled) ? 'disabled="false"' : $disabled ?>>
|
||||
<menupopup>
|
||||
<menuitem value="" label="-- keine Auswahl --"/>
|
||||
<menuitem value="1" label="1"/>
|
||||
@@ -234,7 +254,7 @@ $user=get_uid();
|
||||
<label value="Grund"/>
|
||||
<menulist id="student-rolle-menulist-statusgrund"
|
||||
datasources="rdf:null" flex="1"
|
||||
ref="http://www.technikum-wien.at/statusgrund" >
|
||||
ref="http://www.technikum-wien.at/statusgrund"<?php echo $disabled ?> >
|
||||
<template>
|
||||
<menupopup>
|
||||
<menuitem value="rdf:http://www.technikum-wien.at/statusgrund/rdf#statusgrund_id"
|
||||
@@ -248,7 +268,7 @@ $user=get_uid();
|
||||
</grid>
|
||||
<hbox>
|
||||
<spacer flex="1" />
|
||||
<button id="student-rolle-button-speichern" oncommand="StudentRolleSpeichern()" label="Speichern" />
|
||||
<button id="student-rolle-button-speichern" oncommand="StudentRolleSpeichern()" label="Speichern"<?php echo $disabled ?> />
|
||||
</hbox>
|
||||
</groupbox>
|
||||
</vbox>
|
||||
|
||||
@@ -0,0 +1,185 @@
|
||||
<?php
|
||||
/* Copyright (C) 2007 Technikum-Wien
|
||||
*
|
||||
* 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 2 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, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||
*
|
||||
* Authors: Alexei Karpenko <karpenko@technikum-wien.at>,
|
||||
*/
|
||||
require_once(dirname(__FILE__).'/basis_db.class.php');
|
||||
require_once(dirname(__FILE__).'/studiensemester.class.php');
|
||||
|
||||
class bismeldestichtag extends basis_db
|
||||
{
|
||||
//Tabellenspalten
|
||||
public $meldestichtag_id; // integer
|
||||
public $meldestichtag; // date
|
||||
public $studiensemester_kurzbz; // varchar(16)
|
||||
public $insertamum; // timestamp
|
||||
public $insertvon; // varchar(32)
|
||||
public $updateamum; // timestamp
|
||||
public $updatevon; // varchar(32)
|
||||
|
||||
// ErgebnisArray
|
||||
public $result=array();
|
||||
|
||||
/**
|
||||
* Konstruktor - Uebergibt die Connection und laedt optional einen Meldestichtag
|
||||
* @param $meldestichtag_id Stichtag der geladen werden soll (default=null)
|
||||
*/
|
||||
public function __construct($meldestichtag_id=null)
|
||||
{
|
||||
parent::__construct();
|
||||
|
||||
if(!is_null($meldestichtag_id))
|
||||
$this->load($meldestichtag_id);
|
||||
}
|
||||
|
||||
/**
|
||||
* Laedt Meldestichtag mit der uebergebenen ID
|
||||
* @param $meldestichtag_id ID des Stichtags der geladen werden soll
|
||||
*/
|
||||
public function load($meldestichtag_id)
|
||||
{
|
||||
$qry = "SELECT * FROM bis.tbl_bismeldestichtag WHERE meldestichtag_id=".$this->db_add_param($meldestichtag_id, FHC_INTEGER);
|
||||
|
||||
if($this->db_query($qry))
|
||||
{
|
||||
if($row = $this->db_fetch_object())
|
||||
{
|
||||
$this->meldestichtag_id = $row->meldestichtag_id;
|
||||
$this->meldestichtag = $row->meldestichtag;
|
||||
$this->studiensemester_kurzbz = $row->studiensemester_kurzbz;
|
||||
$this->insertamum = $row->insertamum;
|
||||
$this->insertvon = $row->insertvon;
|
||||
$this->updateamum = $row->updateamum;
|
||||
$this->updatevon = $row->updatevon;
|
||||
return true;
|
||||
}
|
||||
else
|
||||
{
|
||||
$this->errormsg = 'Kein Eintrag gefunden';
|
||||
return false;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
$this->errormsg = "Fehler beim Laden des Stichtags";
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Prueft die Variablen vor dem Speichern
|
||||
* auf Gueltigkeit.
|
||||
* @return true wenn ok, false im Fehlerfall
|
||||
*/
|
||||
protected function validate()
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Liefert zuletzt erreichten Meldestichtag
|
||||
*
|
||||
* @param $studiensemester_kurzbz
|
||||
* @return boolean
|
||||
*/
|
||||
public function getLastReachedMeldestichtag($studiensemester_kurzbz = null)
|
||||
{
|
||||
$qry = "SELECT
|
||||
meldestichtag_id, meldestichtag, studiensemester_kurzbz, insertamum, insertvon, updateamum, updatevon
|
||||
FROM
|
||||
bis.tbl_bismeldestichtag
|
||||
WHERE
|
||||
meldestichtag < NOW()";
|
||||
|
||||
if (isset($studiensemester_kurzbz))
|
||||
{
|
||||
$qry .= "
|
||||
AND
|
||||
studiensemester_kurzbz=".$this->db_add_param($studiensemester_kurzbz);
|
||||
}
|
||||
|
||||
$qry .= "
|
||||
ORDER BY
|
||||
meldestichtag DESC
|
||||
LIMIT 1;";
|
||||
|
||||
if($this->db_query($qry))
|
||||
{
|
||||
while($row = $this->db_fetch_object())
|
||||
{
|
||||
$obj = new bismeldestichtag();
|
||||
|
||||
$obj->meldestichtag_id = $row->meldestichtag_id;
|
||||
$obj->meldestichtag = $row->meldestichtag;
|
||||
$obj->studiensemester_kurzbz = $row->studiensemester_kurzbz;
|
||||
$obj->insertamum = $row->insertamum;
|
||||
$obj->insertvon = $row->insertvon;
|
||||
$obj->updateamum = $row->updateamum;
|
||||
$obj->updatevon = $row->updatevon;
|
||||
|
||||
$this->result[] = $obj;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
else
|
||||
{
|
||||
$this->errormsg = 'Meldestichtag konnte nicht geladen werden';
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Prüft, ob Meldestichtag für ein bestimmtes Statusdatum und Studiensemester erreicht ist.
|
||||
*
|
||||
* @param $status_datum
|
||||
* @param $studiensemester_kurzbz
|
||||
* @return boolean true wenn erreicht, oder false
|
||||
*/
|
||||
public function checkMeldestichtagErreicht($status_datum, $studiensemester_kurzbz = null)
|
||||
{
|
||||
$erreicht = false;
|
||||
|
||||
if (isset($studiensemester_kurzbz))
|
||||
{
|
||||
// Studiensemester ende holen
|
||||
$studiensemester = new studiensemester();
|
||||
if ($studiensemester->load($studiensemester_kurzbz))
|
||||
$studiensemester_ende = new DateTime($studiensemester->ende);
|
||||
}
|
||||
|
||||
// letztes erreichtes Bismeldedatum holen
|
||||
if ($this->getLastReachedMeldestichtag() && isset($this->result[0]))
|
||||
$lastReachedMeldestichtag = new DateTime($this->result[0]->meldestichtag);
|
||||
|
||||
$statusDatum = new DateTime($status_datum);
|
||||
|
||||
// Prüfen, ob Studentstatusdatum oder Studiensemester vor dem Stichtagsdatum liegen
|
||||
if (isset($statusDatum))
|
||||
{
|
||||
if (isset($lastReachedMeldestichtag))
|
||||
$erreicht = $statusDatum < $lastReachedMeldestichtag;
|
||||
|
||||
if (isset($studiensemester_ende))
|
||||
$erreicht = $erreicht || $studiensemester_ende < $lastReachedMeldestichtag;
|
||||
|
||||
}
|
||||
|
||||
return $erreicht;
|
||||
}
|
||||
}
|
||||
?>
|
||||
@@ -0,0 +1,72 @@
|
||||
/**
|
||||
* Copyright (C) 2022 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 {CoreRESTClient} from '../../RESTClient.js';
|
||||
|
||||
//
|
||||
const CORE_BISMELDESTICHTAG_CMPT_TIMEOUT = 2000;
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
export const BismeldestichtagAPIs = {
|
||||
/**
|
||||
*
|
||||
*/
|
||||
getStudiensemester: function() {
|
||||
return CoreRESTClient.get(
|
||||
'codex/Bismeldestichtag/getStudiensemester',
|
||||
null,
|
||||
{
|
||||
timeout: CORE_BISMELDESTICHTAG_CMPT_TIMEOUT
|
||||
}
|
||||
);
|
||||
},
|
||||
getBismeldestichtage: function() {
|
||||
return CoreRESTClient.get(
|
||||
'codex/Bismeldestichtag/getBismeldestichtage',
|
||||
null,
|
||||
{
|
||||
timeout: CORE_BISMELDESTICHTAG_CMPT_TIMEOUT
|
||||
}
|
||||
);
|
||||
},
|
||||
addBismeldestichtag: function(wsParams) {
|
||||
return CoreRESTClient.post(
|
||||
'codex/Bismeldestichtag/addBismeldestichtag',
|
||||
{
|
||||
meldestichtag: wsParams.meldestichtag,
|
||||
studiensemester_kurzbz: wsParams.studiensemester_kurzbz
|
||||
},
|
||||
{
|
||||
timeout: CORE_BISMELDESTICHTAG_CMPT_TIMEOUT
|
||||
}
|
||||
);
|
||||
},
|
||||
deleteBismeldestichtag: function(wsParams) {
|
||||
return CoreRESTClient.post(
|
||||
'codex/Bismeldestichtag/deleteBismeldestichtag',
|
||||
{
|
||||
meldestichtag_id: wsParams.meldestichtag_id
|
||||
},
|
||||
{
|
||||
timeout: CORE_BISMELDESTICHTAG_CMPT_TIMEOUT
|
||||
}
|
||||
);
|
||||
}
|
||||
};
|
||||
|
||||
@@ -0,0 +1,190 @@
|
||||
/**
|
||||
* Copyright (C) 2022 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 {BismeldestichtagTabulatorOptions} from './TabulatorSetup.js';
|
||||
import {BismeldestichtagTabulatorEventHandlers} from './TabulatorSetup.js';
|
||||
|
||||
import {CoreFilterCmpt} from '../../components/filter/Filter.js';
|
||||
import {CoreNavigationCmpt} from '../../components/navigation/Navigation.js';
|
||||
import {CoreRESTClient} from '../../RESTClient.js';
|
||||
import {CoreFetchCmpt} from '../../components/Fetch.js';
|
||||
import {BismeldestichtagAPIs} from './API.js';
|
||||
|
||||
const bismeldestichtagApp = Vue.createApp({
|
||||
data: function() {
|
||||
return {
|
||||
bismeldestichtagTabulatorOptions: BismeldestichtagTabulatorOptions,
|
||||
bismeldestichtagTabulatorEventHandlers: BismeldestichtagTabulatorEventHandlers,
|
||||
meldestichtag: null, // date of Meldestichtag
|
||||
semList: null, // all Studiensemester for dropdown
|
||||
currSem: null, // selected Studiensemester
|
||||
fetchCmptApiFunction: {}, // api function call
|
||||
fetchCmptApiFunctionParams: null, // parameters for api function call
|
||||
fetchCmptDataFetched: null, // function to execute after call
|
||||
fetchCmptRefresh: true // for refreshing
|
||||
};
|
||||
},
|
||||
components: {
|
||||
CoreNavigationCmpt,
|
||||
CoreFilterCmpt,
|
||||
BismeldestichtagAPIs,
|
||||
CoreFetchCmpt,
|
||||
"datepicker": VueDatePicker
|
||||
},
|
||||
created() {
|
||||
this.handlerStudiensemester();
|
||||
},
|
||||
methods: {
|
||||
/**
|
||||
* Define Studiensemester call and method to be executed after the call
|
||||
*/
|
||||
handlerStudiensemester: function() {
|
||||
this.startFetchCmpt(
|
||||
BismeldestichtagAPIs.getStudiensemester,
|
||||
null,
|
||||
this.fetchCmptDataFetchedStudiensemester
|
||||
);
|
||||
},
|
||||
/**
|
||||
* Define Studiensemester call and method to be executed after the call
|
||||
*/
|
||||
handlerBismeldestichtage: function() {
|
||||
this.startFetchCmpt(
|
||||
BismeldestichtagAPIs.getBismeldestichtage,
|
||||
null,
|
||||
this.fetchCmptDataFetchedBismeldestichtage
|
||||
);
|
||||
},
|
||||
/**
|
||||
* Define add Bismeldestichtag call and method to be executed after the call
|
||||
*/
|
||||
handlerAddBismeldestichtag: function(event) {
|
||||
this.startFetchCmpt(
|
||||
BismeldestichtagAPIs.addBismeldestichtag,
|
||||
{
|
||||
meldestichtag: this.meldestichtag,
|
||||
studiensemester_kurzbz: this.currSem
|
||||
},
|
||||
this.fetchCmptDataFetchedAddBismeldestichtag
|
||||
);
|
||||
},
|
||||
/**
|
||||
* Define delete Bismeldestichtag call and method to be executed after the call
|
||||
*/
|
||||
handlerDeleteBismeldestichtag: function(meldestichtag_id) {
|
||||
this.startFetchCmpt(
|
||||
BismeldestichtagAPIs.deleteBismeldestichtag,
|
||||
{
|
||||
meldestichtag_id: meldestichtag_id
|
||||
},
|
||||
this.fetchCmptDataFetchedDeleteBismeldestichtag
|
||||
);
|
||||
},
|
||||
/**
|
||||
* Called after Studiensemester response is received
|
||||
*/
|
||||
fetchCmptDataFetchedStudiensemester: function(data) {
|
||||
if (CoreRESTClient.isError(data)) alert(CoreRESTClient.getError(data));
|
||||
if (CoreRESTClient.hasData(data))
|
||||
{
|
||||
let semRes = CoreRESTClient.getData(data);
|
||||
this.semList = semRes.semList;
|
||||
this.currSem = semRes.currSem;
|
||||
this.handlerBismeldestichtage();
|
||||
}
|
||||
else
|
||||
alert("No Studiensemester data");
|
||||
},
|
||||
/**
|
||||
* Called after Bismeldestichtage response is received
|
||||
*/
|
||||
fetchCmptDataFetchedBismeldestichtage: function(data) {
|
||||
if (CoreRESTClient.isError(data)) alert(CoreRESTClient.getError(data));
|
||||
if (CoreRESTClient.hasData(data))
|
||||
{
|
||||
// set the Meldestichtagedata
|
||||
this.$refs.bismeldestichtageTable.tabulator.setData(CoreRESTClient.getData(data));
|
||||
|
||||
// save delete Bismeldestichtag function
|
||||
let funcDeleteBismeldestichtag = this.handlerDeleteBismeldestichtag;
|
||||
|
||||
let btns = document.getElementsByClassName('delete-btn');
|
||||
|
||||
// add click events for deletion
|
||||
for (let btn in btns)
|
||||
{
|
||||
if (btns[btn].addEventListener)
|
||||
{
|
||||
btns[btn].addEventListener('click',
|
||||
function(){
|
||||
funcDeleteBismeldestichtag(btns[btn].getAttribute('data-meldestichtag-id'));
|
||||
}
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
this.$refs.bismeldestichtageTable.tabulator.setData([]);
|
||||
},
|
||||
/**
|
||||
* Called after Add Bismeldestichtag response is received
|
||||
*/
|
||||
fetchCmptDataFetchedAddBismeldestichtag: function(data) {
|
||||
if (CoreRESTClient.isError(data))
|
||||
alert(CoreRESTClient.getError(data));
|
||||
else if (CoreRESTClient.hasData(data))
|
||||
{
|
||||
this.handlerBismeldestichtage();
|
||||
}
|
||||
else
|
||||
alert("No response data");
|
||||
},
|
||||
/**
|
||||
* Called after Add Bismeldestichtag response is received
|
||||
*/
|
||||
fetchCmptDataFetchedDeleteBismeldestichtag: function(data) {
|
||||
if (CoreRESTClient.isError(data))
|
||||
alert(CoreRESTClient.getError(data));
|
||||
else if (CoreRESTClient.hasData(data))
|
||||
{
|
||||
this.handlerBismeldestichtage();
|
||||
}
|
||||
else
|
||||
alert("No response data");
|
||||
},
|
||||
/**
|
||||
* Used to start/refresh the FetchCmpt
|
||||
*/
|
||||
startFetchCmpt: function(apiFunction, apiFunctionParameters, dataFetchedCallback) {
|
||||
// Assign the function api of the FetchCmpt binded property
|
||||
this.fetchCmptApiFunction = apiFunction;
|
||||
|
||||
// In case a null value is provided set the parameters as an empty object
|
||||
if (apiFunctionParameters == null) apiFunctionParameters = {};
|
||||
|
||||
// Assign parameters to the FetchCmpt binded properties
|
||||
this.fetchCmptApiFunctionParams = apiFunctionParameters;
|
||||
// Assign data fetch callback to the FetchCmpt binded properties
|
||||
this.fetchCmptDataFetched = dataFetchedCallback;
|
||||
// Set the FetchCmpt binded property refresh to have the component to refresh
|
||||
// NOTE: this should be the last one to be called because it triggers the FetchCmpt to start to refresh
|
||||
this.fetchCmptRefresh === true ? this.fetchCmptRefresh = false : this.fetchCmptRefresh = true;
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
bismeldestichtagApp.mount('#main');
|
||||
@@ -0,0 +1,75 @@
|
||||
/**
|
||||
* Copyright (C) 2022 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 const BismeldestichtagTabulatorOptions = {
|
||||
maxHeight: "100%",
|
||||
minHeight: 50,
|
||||
layout: 'fitColumns',
|
||||
index: 'meldestichtag_id',
|
||||
columns: [
|
||||
{title: 'Meldestichtag',field: 'meldestichtag', headerFilter: true, formatter: function(cell){
|
||||
return BismeldestichtagTabulatorHelperFunctions._formatDate(cell.getValue());
|
||||
}
|
||||
},
|
||||
{title: 'Studiensemester', field: 'studiensemester_kurzbz', headerFilter: true, sorter:function(a, b, aRow, bRow, column, dir, sorterParams) {
|
||||
|
||||
//aRow, bRow - the row components for the values being compared
|
||||
let semesterStartA = new Date(aRow.getData().semester_start);
|
||||
let semesterStartB = new Date(bRow.getData().semester_start);
|
||||
|
||||
return semesterStartA - semesterStartB; // difference between studiensemester start dates
|
||||
}
|
||||
},
|
||||
{title: 'Semesterstart',field: 'semester_start', headerFilter: true, visible: false, formatter: function(cell){
|
||||
return BismeldestichtagTabulatorHelperFunctions._formatDate(cell.getValue());
|
||||
}
|
||||
},
|
||||
{title: 'ID', field: 'meldestichtag_id', headerFilter: true, visible: false},
|
||||
{title: 'Insertamum', field: 'insertamum', headerFilter: true, visible: false},
|
||||
{title: 'Insertvon', field: 'insertvon', headerFilter: true, visible: false},
|
||||
{title: 'Löschen', field: 'loeschen', headerFilter: false, formatter:function(cell){
|
||||
return '<button class="btn btn-outline-secondary delete-btn" data-meldestichtag-id="'+cell.getRow().getIndex()+'">'+
|
||||
'<i class="fa fa-xmark"></i>'+
|
||||
'</button>';
|
||||
}
|
||||
}
|
||||
]
|
||||
};
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
export const BismeldestichtagTabulatorEventHandlers = [
|
||||
{
|
||||
event: "rowClick",
|
||||
handler: function(e, row) {
|
||||
if (e.target.nodeName == 'DIV') {
|
||||
let data = row.getData();
|
||||
alert(data.studiensemester_kurzbz + ': ' + BismeldestichtagTabulatorHelperFunctions._formatDate(data.meldestichtag));
|
||||
}
|
||||
}
|
||||
}
|
||||
];
|
||||
|
||||
let BismeldestichtagTabulatorHelperFunctions = {
|
||||
_formatDate: function(date) {
|
||||
return date.replace(/(.*)-(.*)-(.*)/, '$3.$2.$1');
|
||||
}
|
||||
}
|
||||
@@ -35,6 +35,7 @@ require_once('../include/prestudent.class.php');
|
||||
require_once('../include/datum.class.php');
|
||||
require_once('../include/statusgrund.class.php');
|
||||
require_once('../include/student.class.php');
|
||||
require_once('../include/bismeldestichtag.class.php');
|
||||
|
||||
$rdf_url='http://www.technikum-wien.at/prestudentrolle';
|
||||
$datum = new datum();
|
||||
@@ -80,6 +81,8 @@ foreach($statusgrund->result as $row)
|
||||
$studentlehrverband = new student();
|
||||
$uid = $studentlehrverband->getUid($prestudent_id);
|
||||
|
||||
|
||||
$erstes_stichtag_inaktiv = true;
|
||||
foreach($ps->result as $row)
|
||||
{
|
||||
$lehrverband = '-';
|
||||
@@ -99,6 +102,21 @@ foreach($ps->result as $row)
|
||||
}
|
||||
}
|
||||
|
||||
// prüfen, ob Meldestichtag erreicht
|
||||
$bismeldestichtag = new bismeldestichtag();
|
||||
$stichtag_erreicht = $bismeldestichtag->checkMeldestichtagErreicht($row->datum);
|
||||
|
||||
// Variablen für layout von prestudentstatus Anzeige
|
||||
$stichtagsaktiv = $stichtag_erreicht ? 'stichtagsinaktiv' : 'stichtagsaktiv';
|
||||
$aktiv = $stichtag_erreicht ? 'false' : 'true';
|
||||
|
||||
// erstes mal stichtag erreicht -> anderes layout
|
||||
if ($stichtag_erreicht && $erstes_stichtag_inaktiv)
|
||||
{
|
||||
$stichtagsaktiv = 'erstes_stichtagsinaktiv';
|
||||
$erstes_stichtag_inaktiv = false;
|
||||
}
|
||||
|
||||
echo '
|
||||
<RDF:li>
|
||||
<RDF:Description id="'.$row->prestudent_id.'/'.$row->status_kurzbz.'/'.$row->studiensemester_kurzbz.'/'.$row->ausbildungssemester.'" about="'.$rdf_url.'/'.$row->prestudent_id.'/'.$row->status_kurzbz.'/'.$row->studiensemester_kurzbz.'/'.$row->ausbildungssemester.'" >
|
||||
@@ -123,6 +141,8 @@ foreach($ps->result as $row)
|
||||
<ROLLE:insertvon><![CDATA['.$row->insertvon.']]></ROLLE:insertvon>
|
||||
<ROLLE:updateamum><![CDATA['.$datum->formatDatum($row->updateamum,'d.m.Y H:i:s').']]></ROLLE:updateamum>
|
||||
<ROLLE:updatevon><![CDATA['.$row->updatevon.']]></ROLLE:updatevon>
|
||||
<ROLLE:stichtagsaktiv><![CDATA['.$stichtagsaktiv.']]></ROLLE:stichtagsaktiv>
|
||||
<ROLLE:aktiv><![CDATA['.$aktiv.']]></ROLLE:aktiv>
|
||||
</RDF:Description>
|
||||
</RDF:li>
|
||||
';
|
||||
|
||||
@@ -234,3 +234,19 @@ treechildren::-moz-tree-row(makeItMarked)
|
||||
width: 25px;
|
||||
height:25px;
|
||||
}
|
||||
|
||||
treechildren::-moz-tree-cell(stichtagsinaktiv)
|
||||
{
|
||||
background-color: #e6e6e6;
|
||||
}
|
||||
|
||||
treechildren::-moz-tree-cell(erstes_stichtagsinaktiv)
|
||||
{
|
||||
background-color: #e6e6e6;
|
||||
border-top: 1px solid grey;
|
||||
}
|
||||
|
||||
label.warning
|
||||
{
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
@@ -40,6 +40,7 @@ require_once('dbupdate_3.4/27107_vilesci_erfassung_abwesenheiten_reinigung.php')
|
||||
require_once('dbupdate_3.4/24913_tabelle_raumtyp_neues_attribut_aktiv.php');
|
||||
require_once('dbupdate_3.4/28089_plausichecks_in_extension_hinzufuegen.php');
|
||||
require_once('dbupdate_3.4/29133_einzelne_studiengaenge_aus_issuechecks_ausnehmen.php');
|
||||
require_once('dbupdate_3.4/29144_prestudent_status_nach_bismeldung_sperren.php');
|
||||
require_once('dbupdate_3.4/27351_digitalisierung_formulare.php');
|
||||
require_once('dbupdate_3.4/30537_anmerkung_in_tbl_rolleberechtigung.php');
|
||||
require_once('dbupdate_3.4/30181_tabelle_anrechnung_neue_attribute_fuer_begruendung.php');
|
||||
@@ -65,6 +66,7 @@ $tabellen=array(
|
||||
"bis.tbl_bisfunktion" => array("bisverwendung_id","studiengang_kz","sws","updateamum","updatevon","insertamum","insertvon","ext_id"),
|
||||
"bis.tbl_bisio" => array("bisio_id","mobilitaetsprogramm_code","nation_code","von","bis","zweck_code","student_uid","updateamum","updatevon","insertamum","insertvon","ext_id","ort","universitaet","lehreinheit_id","ects_erworben","ects_angerechnet","herkunftsland_code"),
|
||||
"bis.tbl_bisio_zweck" => array("bisio_id","zweck_code"),
|
||||
"bis.tbl_bismeldestichtag" => array("meldestichtag_id", "meldestichtag", "studiensemester_kurzbz", "insertamum", "insertvon", "updateamum", "updatevon"),
|
||||
"bis.tbl_bisstandort" => array("standort_code","bezeichnung","aktiv","insertamum","insertvon","updateamum","updatevon"),
|
||||
"bis.tbl_bisverwendung" => array("bisverwendung_id","ba1code","ba2code","vertragsstunden","beschausmasscode","verwendung_code","mitarbeiter_uid","hauptberufcode","hauptberuflich","habilitation","beginn","ende","updateamum","updatevon","insertamum","insertvon","ext_id","dv_art","inkludierte_lehre","zeitaufzeichnungspflichtig","azgrelevant", "homeoffice"),
|
||||
"bis.tbl_bundesland" => array("bundesland_code","kurzbz","bezeichnung"),
|
||||
|
||||
@@ -0,0 +1,73 @@
|
||||
<?php
|
||||
|
||||
if (! defined('DB_NAME')) exit('No direct script access allowed');
|
||||
|
||||
// Creates table bis.tbl_bismeldestichtag if it doesn't exist and grants privileges
|
||||
if (!$result = @$db->db_query('SELECT 1 FROM bis.tbl_bismeldestichtag LIMIT 1'))
|
||||
{
|
||||
$qry = "CREATE TABLE bis.tbl_bismeldestichtag (
|
||||
meldestichtag_id integer,
|
||||
meldestichtag date NOT NULL,
|
||||
studiensemester_kurzbz varchar(16) NOT NULL,
|
||||
insertamum timestamp DEFAULT NOW(),
|
||||
insertvon varchar(32),
|
||||
updateamum timestamp,
|
||||
updatevon varchar(32)
|
||||
);
|
||||
|
||||
COMMENT ON TABLE bis.tbl_bismeldestichtag IS 'Deadline Dates for BIS reporting';
|
||||
|
||||
ALTER TABLE bis.tbl_bismeldestichtag ADD CONSTRAINT pk_bismeldestichtag PRIMARY KEY (meldestichtag_id);
|
||||
|
||||
CREATE SEQUENCE bis.tbl_meldestichtag_meldestichtag_id_seq
|
||||
INCREMENT BY 1
|
||||
NO MAXVALUE
|
||||
NO MINVALUE
|
||||
CACHE 1;
|
||||
|
||||
ALTER TABLE bis.tbl_bismeldestichtag ALTER COLUMN meldestichtag_id SET DEFAULT nextval('bis.tbl_meldestichtag_meldestichtag_id_seq');
|
||||
ALTER TABLE bis.tbl_bismeldestichtag ADD CONSTRAINT fk_bismeldestichtag_studiensemester_kurzbz FOREIGN KEY (studiensemester_kurzbz) REFERENCES public.tbl_studiensemester(studiensemester_kurzbz) ON UPDATE CASCADE ON DELETE RESTRICT;";
|
||||
|
||||
if (!$db->db_query($qry))
|
||||
echo '<strong>bis.tbl_bismeldestichtag: '.$db->db_last_error().'</strong><br>';
|
||||
else
|
||||
echo '<br>bis.tbl_bismeldestichtag table created';
|
||||
|
||||
$qry = 'GRANT SELECT ON TABLE bis.tbl_bismeldestichtag TO web;';
|
||||
if (!$db->db_query($qry))
|
||||
echo '<strong>bis.tbl_bismeldestichtag: '.$db->db_last_error().'</strong><br>';
|
||||
else
|
||||
echo '<br>Granted privileges to <strong>web</strong> on bis.tbl_bismeldestichtag';
|
||||
|
||||
$qry = 'GRANT SELECT, UPDATE, INSERT, DELETE ON TABLE bis.tbl_bismeldestichtag TO vilesci;';
|
||||
if (!$db->db_query($qry))
|
||||
echo '<strong>bis.tbl_bismeldestichtag: '.$db->db_last_error().'</strong><br>';
|
||||
else
|
||||
echo '<br>Granted privileges to <strong>vilesci</strong> on bis.tbl_bismeldestichtag';
|
||||
|
||||
$qry = 'GRANT SELECT, UPDATE ON SEQUENCE bis.tbl_meldestichtag_meldestichtag_id_seq TO web;';
|
||||
if (!$db->db_query($qry))
|
||||
echo '<strong>bis.tbl_meldestichtag_meldestichtag_id_seq: '.$db->db_last_error().'</strong><br>';
|
||||
else
|
||||
echo '<br>Granted privileges to <strong>web</strong> on bis.tbl_meldestichtag_meldestichtag_id_seq';
|
||||
|
||||
$qry = 'GRANT SELECT, UPDATE ON SEQUENCE bis.tbl_meldestichtag_meldestichtag_id_seq TO vilesci;';
|
||||
if (!$db->db_query($qry))
|
||||
echo '<strong>bis.tbl_meldestichtag_meldestichtag_id_seq: '.$db->db_last_error().'</strong><br>';
|
||||
else
|
||||
echo '<br>Granted privileges to <strong>vilesci</strong> on bis.tbl_meldestichtag_meldestichtag_id_seq';
|
||||
}
|
||||
|
||||
// Add permission for edit Bismelden flag
|
||||
if($result = @$db->db_query("SELECT 1 FROM system.tbl_berechtigung WHERE berechtigung_kurzbz = 'student/editBismelden';"))
|
||||
{
|
||||
if($db->db_num_rows($result) == 0)
|
||||
{
|
||||
$qry = "INSERT INTO system.tbl_berechtigung(berechtigung_kurzbz, beschreibung) VALUES('student/editBismelden', 'Ändern des Bismelden Attributs pro Student');";
|
||||
|
||||
if(!$db->db_query($qry))
|
||||
echo '<strong>system.tbl_berechtigung '.$db->db_last_error().'</strong><br>';
|
||||
else
|
||||
echo ' system.tbl_berechtigung: Added permission editBismelden<br>';
|
||||
}
|
||||
}
|
||||
@@ -4488,7 +4488,7 @@ When on hold, the date is only a reminder.',
|
||||
)
|
||||
)
|
||||
),
|
||||
|
||||
|
||||
array(
|
||||
'app' => 'infocenter',
|
||||
'category' => 'infocenter',
|
||||
@@ -4818,7 +4818,7 @@ Die Rechnung wird Ihnen erneut zugesendet. <u><strong>Erst nach Erhalt der Rechn
|
||||
)
|
||||
)
|
||||
),
|
||||
|
||||
|
||||
array(
|
||||
'app' => 'core',
|
||||
'category' => 'password',
|
||||
@@ -22567,6 +22567,66 @@ array(
|
||||
)
|
||||
)
|
||||
),
|
||||
array(
|
||||
'app' => 'core',
|
||||
'category' => 'bismeldestichtag',
|
||||
'phrase' => 'stichtagHinzufuegen',
|
||||
'insertvon' => 'system',
|
||||
'phrases' => array(
|
||||
array(
|
||||
'sprache' => 'German',
|
||||
'text' => 'Meldestichtag hinzufügen',
|
||||
'description' => '',
|
||||
'insertvon' => 'system'
|
||||
),
|
||||
array(
|
||||
'sprache' => 'English',
|
||||
'text' => 'Add report target date',
|
||||
'description' => '',
|
||||
'insertvon' => 'system'
|
||||
)
|
||||
)
|
||||
),
|
||||
array(
|
||||
'app' => 'core',
|
||||
'category' => 'bismeldestichtag',
|
||||
'phrase' => 'stichtageVerwalten',
|
||||
'insertvon' => 'system',
|
||||
'phrases' => array(
|
||||
array(
|
||||
'sprache' => 'German',
|
||||
'text' => 'BIS-Meldestichtage verwalten',
|
||||
'description' => '',
|
||||
'insertvon' => 'system'
|
||||
),
|
||||
array(
|
||||
'sprache' => 'English',
|
||||
'text' => 'Manage report target dates',
|
||||
'description' => '',
|
||||
'insertvon' => 'system'
|
||||
)
|
||||
)
|
||||
),
|
||||
array(
|
||||
'app' => 'core',
|
||||
'category' => 'bismeldestichtag',
|
||||
'phrase' => 'stichtagLoeschen',
|
||||
'insertvon' => 'system',
|
||||
'phrases' => array(
|
||||
array(
|
||||
'sprache' => 'German',
|
||||
'text' => 'Meldestichtag löschen',
|
||||
'description' => '',
|
||||
'insertvon' => 'system'
|
||||
),
|
||||
array(
|
||||
'sprache' => 'English',
|
||||
'text' => 'Delete report target date',
|
||||
'description' => '',
|
||||
'insertvon' => 'system'
|
||||
)
|
||||
)
|
||||
)
|
||||
);
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user