Merge branch 'feature-29144/Prestudent_status_nach_Bismeldung_sperren_2'

This commit is contained in:
Andreas Österreicher
2023-12-21 13:29:02 +01:00
18 changed files with 1067 additions and 66 deletions
+8
View File
@@ -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
View File
@@ -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"
+41 -7
View File
@@ -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)
+18 -18
View File
@@ -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>
+20 -3
View File
@@ -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)
+34 -14
View File
@@ -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>
+185
View File
@@ -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;
}
}
?>
+72
View File
@@ -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');
}
}
+20
View File
@@ -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>
';
+16
View File
@@ -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;
}
+2
View File
@@ -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>';
}
}
+62 -2
View File
@@ -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'
)
)
)
);