Compare commits

...
Author SHA1 Message Date
Alexei Karpenko 4ae6cb8086 vertragsbestandteil_zeitaufzeichnung class: changed comment 2026-07-30 19:41:14 +02:00
Alexei Karpenko 1675d97195 added class vertragsbestandteil_zeitaufzeichnung 2026-07-30 15:09:38 +02:00
Alexei Karpenko 9e1b782c54 Zeitmodell table: added sequence, zeitmodell_kurzbz, mitarbeiter: added method to get Mitarbeiter which are zeitaufzeichnungspflichtig 2026-07-30 14:31:48 +02:00
Alexei Karpenko 2acbb6ecd0 Merge branch 'master' into feature-76677/vertragsbestandteil_zeitaufzeichung_zeitmodell 2026-07-29 13:36:50 +02:00
Harald Bamberger 5d024b3a71 Merge branch 'feature-77978/Renew_52546_and_53902' 2026-07-23 08:01:44 +02:00
Harald Bamberger 507b47e9ea add name to Udf component 2026-07-23 07:59:02 +02:00
Paolo a83fe561b9 Added the new property "readonly" to the UDF component to switch between edit and readonly mode for all the UDfs 2026-07-22 09:18:23 +02:00
Harald Bamberger c84146fcbd Merge branch 'bug-77989/StudVW_Datepicker_check_modeltype' 2026-07-17 10:36:23 +02:00
ma0068 35decf476c make fields deletable with keyboard: Konto Buchungsdatum, Prüfung Datum, Abschlussprüfung Datum und Sponsion, Mobilität von und bis 2026-07-17 09:12:02 +02:00
Harald Bamberger 6cfc4b0973 Merge branch 'master' into bug-77989/StudVW_Datepicker_check_modeltype 2026-07-16 16:01:25 +02:00
Harald Bamberger 6296b87ea5 Merge branch 'bug-77989/StudVW_Datepicker_check_modeltype' 2026-07-16 15:54:18 +02:00
Harald Bamberger 576a44838f datetime format bewerbung_abgeschickt_am 2026-07-16 15:53:32 +02:00
Harald Bamberger c00e7a182c Merge branch 'master' into bug-77989/StudVW_Datepicker_check_modeltype 2026-07-16 15:00:45 +02:00
ma0068andHarald Bamberger fd1b5daf9c enable deletion of zgv and zgv master date with null and empty string 2026-07-16 14:51:38 +02:00
Harald Bamberger c0b5f2f748 add permission to DetailHeader function for use in pv21 2026-07-16 12:58:00 +02:00
Harald Bamberger 1acb89f8b7 Merge branch 'master' into feature-76677/vertragsbestandteil_zeitaufzeichung_zeitmodell 2026-07-15 07:28:55 +02:00
ma0068 b217681ee5 use model-type for interessenten anlegen, listNew 2026-07-14 15:23:06 +02:00
ma0068 7841a73fc0 prepare field bewerbung_abgeschicktamum for showing in frontend (datestamp in database) and add also model-type to datepicker 2026-07-14 15:05:54 +02:00
ma0068 2064008f9e add model-type to fields Betriebsmittel/ausgegebenam, Betriebsmittel/retouram, Funktionen/datumvon und Funktionen/datumbis 2026-07-14 14:31:13 +02:00
ma0068 19b9906c86 Aufnahmetermine: use model-type isodate for field anmeldedatum 2026-07-14 14:23:37 +02:00
ma0068 2c3913a763 Mobility: use model-type isodate for fields von and bis 2026-07-14 14:19:25 +02:00
ma0068 9111edf442 Dokumente: use model-type isodate for field nachgereicht_am 2026-07-14 14:06:59 +02:00
ma0068 b1c47da3c3 use model-type isodate for fields in StatusModal datum and bestaetigtam 2026-07-14 14:01:12 +02:00
ma0068 67eb238876 use model-type isodate for field Details Gebdatum 2026-07-14 13:37:19 +02:00
Werner Masik 2114352d82 add missing zeitmodell_id 2026-06-01 12:39:27 +02:00
Werner Masik df6b71b9c4 add zeitmodell_id 2026-05-31 17:05:01 +02:00
Werner Masik 319c9a166c create zeitmodell db tables for zeitaufzeichnung 2026-05-31 16:21:05 +02:00
25 changed files with 408 additions and 22 deletions
@@ -259,7 +259,7 @@ class BetriebsmittelP extends FHCAPI_Controller
$kaution = $this->input->post('kaution');
if($kaution) $kaution = str_replace(',', '.', $kaution);
$ausgegebenam = $this->input->post('ausgegebenam');
$retouram = $this->input->post('retouram');
$retouram = $this->input->post('retouram') == "" ? null : $this->input->post('retouram');
// NOTE(chris): transform_kartennummer
if ($betriebsmitteltyp == 'Zutrittskarte' && $nummer)
@@ -9,9 +9,9 @@ class Detailheader extends FHCAPI_Controller
public function __construct()
{
parent::__construct([
'getHeader' => ['vertrag/mitarbeiter:r'],
'getPersonAbteilung' => ['vertrag/mitarbeiter:r'],
'getLeitungOrg' => ['vertrag/mitarbeiter:r'],
'getHeader' => ['vertrag/mitarbeiter:r', 'basis/mitarbeiter:r'],
'getPersonAbteilung' => ['vertrag/mitarbeiter:r', 'basis/mitarbeiter:r'],
'getLeitungOrg' => ['vertrag/mitarbeiter:r', 'basis/mitarbeiter:r'],
]);
}
@@ -294,6 +294,10 @@ class Funktionen extends FHCAPI_Controller
{
$this->terminateWithValidationErrors($this->form_validation->error_array());
}
if($datum_von == '')
$datum_von = null;
if($datum_bis == '')
$datum_bis = null;
$result = $this->BenutzerfunktionModel->update(
[
@@ -371,6 +371,9 @@ class Abschlusspruefung extends FHCAPI_Controller
$this->terminateWithValidationErrors($this->form_validation->error_array());
}
$datum = $formData['datum'] == '' ? null : $formData['datum'];
$sponsion = $formData['sponsion'] == '' ? null : $formData['sponsion'];
$result = $this->AbschlusspruefungModel->update(
[
'abschlusspruefung_id' => $abschlusspruefung_id
@@ -382,8 +385,8 @@ class Abschlusspruefung extends FHCAPI_Controller
'vorsitz' => $vorsitz,
'pruefungsantritt_kurzbz' => $formData['pruefungsantritt_kurzbz'],
'abschlussbeurteilung_kurzbz' => $formData['abschlussbeurteilung_kurzbz'],
'datum' => $formData['datum'],
'sponsion' => $formData['sponsion'],
'datum' => $datum,
'sponsion' => $sponsion,
'pruefer1' => $pruefer1,
'pruefer2' => $pruefer2,
'pruefer3' => $pruefer3,
@@ -170,6 +170,8 @@ class Dokumente extends FHCAPI_Controller
$this->terminateWithValidationErrors($this->form_validation->error_array());
}
$nachgereicht_am = $this->input->post('nachgereicht_am') == '' ? null : $this->input->post('nachgereicht_am');
$uid = getAuthUID();
$result = $this->AkteModel->update(
@@ -180,7 +182,7 @@ class Dokumente extends FHCAPI_Controller
'dokument_kurzbz' => $this->input->post('dokument_kurzbz'),
'anmerkung_intern' => $this->input->post('anmerkung_intern'),
'titel_intern' => $this->input->post('titel_intern'),
'nachgereicht_am' => $this->input->post('nachgereicht_am'),
'nachgereicht_am' => $nachgereicht_am,
'updateamum' => date('c'),
'updatevon' => $uid,
]
@@ -429,9 +429,12 @@ class Konto extends FHCAPI_Controller
'updateamum' => date('c'),
'updatevon' => getAuthUID()
];
foreach ($allowed as $field)
if ($this->input->post($field) !== null)
$data[$field] = $this->input->post($field);
if($data['buchungsdatum'] == '')
$data['buchungsdatum'] = null;
$result = $this->KontoModel->update($id, $data);
@@ -237,8 +237,8 @@ class Mobility extends FHCAPI_Controller
}
$formData = $this->input->post('formData');
$von = $formData['von'] ?? null;
$bis = $formData['bis'] ?? null;
$von = ($formData['von'] ?? '') ?: null;
$bis = ($formData['bis'] ?? '') ?: null;
$nation_code = $formData['nation_code'] ?? null;
$mobilitaetsprogramm_code = $formData['mobilitaetsprogramm_code'] ?? null;
$herkunftsland_code = $formData['herkunftsland_code'] ?? null;
@@ -193,7 +193,7 @@ class Prestudent extends FHCAPI_Controller
}
elseif (
$val === ''
&& in_array($prop, ['zgvnation', 'zgvmanation', 'zgvdoktornation', 'berufstaetigkeit_code', 'ausbildungcode'])
&& in_array($prop, ['zgvnation', 'zgvmanation', 'zgvdoktornation', 'berufstaetigkeit_code', 'ausbildungcode', 'zgvdatum', 'zgvmadatum'])
)
{
$val = null;
@@ -448,8 +448,10 @@ class Pruefung extends FHCAPI_Controller
}
}
$datum = $this->input->post('datum') == '' ? null : $this->input->post('datum');
if(intval($pruefung_id) > 0)
{
$result = $this->PruefungModel->update(
[
'pruefung_id' => $pruefung_id
@@ -459,7 +461,7 @@ class Pruefung extends FHCAPI_Controller
'mitarbeiter_uid' => $this->input->post('mitarbeiter_uid'),
'note' => $this->input->post('note'),
'pruefungstyp_kurzbz' => $this->input->post('pruefungstyp_kurzbz'),
'datum' => $this->input->post('datum'),
'datum' => $datum,
'anmerkung' => $this->input->post('anmerkung'),
'updatevon' => $authUID,
'updateamum' => date('c'),
@@ -472,7 +474,7 @@ class Pruefung extends FHCAPI_Controller
'lehreinheit_id' => $this->input->post('lehreinheit_id'),
'student_uid' => $this->input->post('student_uid'),
'mitarbeiter_uid' => $this->input->post('mitarbeiter_uid'),
'datum' => $this->input->post('datum'),
'datum' => $datum,
'pruefungstyp_kurzbz' => $this->input->post('pruefungstyp_kurzbz'),
'note' => $this->input->post('note'),
'anmerkung' => $this->input->post('anmerkung'),
@@ -520,7 +522,7 @@ class Pruefung extends FHCAPI_Controller
'studiensemester_kurzbz' => $studiensemester_kurzbz,
'note' => $this->input->post('note'),
'uebernahmedatum' => date('c'),
'benotungsdatum' => $this->input->post('datum'),
'benotungsdatum' => $datum,
'insertamum' => date('c'),
'insertvon' => $authUID,
'punkte' => $this->input->post('punkte') ? str_replace(',', '.', $this->input->post('punkte')) : null
@@ -555,7 +557,7 @@ class Pruefung extends FHCAPI_Controller
], [
'note' => $this->input->post('note'),
'uebernahmedatum' => date('c'),
'benotungsdatum' => $this->input->post('datum'),
'benotungsdatum' => $datum,
'updateamum' => date('c'),
'updatevon' => $authUID,
'punkte' => $this->input->post('punkte') ? str_replace(',', '.', $this->input->post('punkte')) : null
@@ -296,6 +296,10 @@ class Student extends FHCAPI_Controller
$fotoval = ($val == '') ? null : str_replace('data:image/jpeg;base64,', '', $val);
$update_person[$prop] = $fotoval;
}
else if ($prop == 'gebdatum')
{
$update_person[$prop] = ($val == '') ? null : $val;
}
else
{
$update_person[$prop] = $val;
@@ -9,6 +9,7 @@ class VertragsbestandteilZeitaufzeichnung extends Vertragsbestandteil
protected $zeitaufzeichnung;
protected $azgrelevant;
protected $homeoffice;
protected $zeitmodell_id;
public function __construct()
{
@@ -24,6 +25,7 @@ class VertragsbestandteilZeitaufzeichnung extends Vertragsbestandteil
isset($data->zeitaufzeichnung) && $this->setZeitaufzeichnung($data->zeitaufzeichnung);
isset($data->azgrelevant) && $this->setAzgrelevant($data->azgrelevant);
isset($data->homeoffice) && $this->setHomeoffice($data->homeoffice);
isset($data->zeitmodell_id) && $this->setZeitmodell_id($data->zeitmodell_id);
$this->fromdb = false;
}
@@ -83,6 +85,25 @@ class VertragsbestandteilZeitaufzeichnung extends Vertragsbestandteil
return $this;
}
/**
* Get the value of zeitmodell_id
*/
public function getZeitmodell_id()
{
return $this->zeitmodell_id;
}
/**
* Set the value of zeitmodell_id
*/
public function setZeitmodell_id($zeitmodell_id): self
{
$this->markDirty('zeitmodell_id', $this->zeitmodell_id, $zeitmodell_id);
$this->zeitmodell_id = $zeitmodell_id;
return $this;
}
public function toStdClass(): \stdClass
{
@@ -90,7 +111,8 @@ class VertragsbestandteilZeitaufzeichnung extends Vertragsbestandteil
'vertragsbestandteil_id' => $this->getVertragsbestandteil_id(),
'zeitaufzeichnung' => $this->getZeitaufzeichnung(),
'azgrelevant' => $this->getAzgrelevant(),
'homeoffice' => $this->getHomeoffice()
'homeoffice' => $this->getHomeoffice(),
'zeitmodell_id' => $this->getZeitmodell_id()
);
$tmp = array_filter($tmp, function($k) {
@@ -106,6 +128,7 @@ class VertragsbestandteilZeitaufzeichnung extends Vertragsbestandteil
zeitaufzeichnung: {$this->getZeitaufzeichnung()}
azgrelevant: {$this->getAzgrelevant()}
homeoffice: {$this->getHomeoffice()}
zeitmodell_id: {$this->getZeitmodell_id()}
EOTXT;
return parent::__toString() . $txt;
@@ -37,7 +37,7 @@ class Vertragsbestandteil_model extends DB_Model
kf.arbeitgeber_frist, kf.arbeitnehmer_frist,
s.wochenstunden, s.teilzeittyp_kurzbz,
u.tage,
z.zeitaufzeichnung, z.azgrelevant, z.homeoffice,
z.zeitaufzeichnung, z.azgrelevant, z.homeoffice, z.zeitmodell_id,
lg.stellenbezeichnung, lg.vordienstzeit, lg.fachrichtung_kurzbz, lg.modellstelle_kurzbz, lg.kommentar_person, lg.kommentar_modellstelle
FROM
hr.tbl_vertragsbestandteil v
+58
View File
@@ -28,6 +28,7 @@ class mitarbeiter extends benutzer
{
public $new;
public $result=array();
public $maData=array();
//Tabellenspalten
public $ausbildungcode; //integer
@@ -1937,6 +1938,63 @@ class mitarbeiter extends benutzer
}
}
/**
* Liefert alle zeitaufzeichnungspflichtigen Mitarbeiter*innen
*
* @param $aktiv
* @return boolean
*/
public function getZeitaufzeichnungspflichtig($aktiv=null)
{
$aktivClause = '';
if (is_bool($aktiv)) $aktivClause = 'AND b.aktiv = '.$this->db_add_param($aktiv, FHC_BOOLEAN);
$qry = "
SELECT
ma.mitarbeiter_uid, p.nachname, p.vorname, b.alias
FROM
public.tbl_mitarbeiter ma
JOIN public.tbl_benutzer b ON (mitarbeiter_uid=uid)
JOIN public.tbl_person p USING(person_id)
WHERE
EXISTS (
SELECT 1
FROM
hr.tbl_vertragsbestandteil_zeitaufzeichnung vbtza
JOIN hr.tbl_vertragsbestandteil vbt USING (vertragsbestandteil_id)
JOIN hr.tbl_dienstverhaeltnis dv USING (dienstverhaeltnis_id)
WHERE
dv.mitarbeiter_uid = b.uid
AND zeitaufzeichnung
)
{$aktivClause}
ORDER BY b.uid
";
if($this->db_query($qry))
{
$this->maData[] = array();
while($row = $this->db_fetch_object())
{
$ma_obj = new mitarbeiter();
$ma_obj->nachname = $row->nachname;
$ma_obj->vorname = $row->vorname;
$ma_obj->mitarbeiter_uid = $row->mitarbeiter_uid;
$ma_obj->alias = $row->alias;
$this->maData[] = $ma_obj;
}
return true;
}
else
{
$this->errormsg = 'Fehler beim Laden der Daten';
return false;
}
}
/**
* Generiert nächste freie Personalnummer anhand der sequence tbl_mitarbeiter_personalnummer_seq
* @return string $personalnummer
@@ -0,0 +1,161 @@
<?php
/* Copyright (C) 2006 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: Cristina Hainberger <[email protected]>,
*/
/**
* Klasse Vertragsbestandteil
* @create 29.03.2023
*/
require_once(dirname(__FILE__).'/basis_db.class.php');
class vertragsbestandteil_zeitaufzeichnung extends basis_db
{
public $new; // boolean
public $result = array();
//Tabellenspalten
public $vertragsbestandteil_id; // integer
public $zeitaufzeichnung; // bool
public $azgrelevant; // bool
public $homeoffice; // bool
public $zeitmodell_id; // integer
public $von; // date
public $bis; // date
/**
* Konstruktor
* @param $vertragsbestandteil_id ID des Vertragsbestandteils, der geladen werden soll (Default=null)
*/
public function __construct($vertragsbestandteil_id = null)
{
parent::__construct();
if($vertragsbestandteil_id != null)
$this->load($vertragsbestandteil_id);
}
/**
* Speichert den Vertragsbestandteil in die Datenbank
* Wenn $new auf true gesetzt ist wird ein neuer Datensatz
* angelegt, ansonsten der Datensatz upgedated
*
* @return true wenn erfolgreich, false im Fehlerfall
*/
public function save()
{
if($this->new)
{
$qry = "INSERT INTO hr.tbl_vertragsbestandteil_zeitaufzeichnung (zeitaufzeichnung, azgrelevant, homeoffice, zeitmodell_id)
VALUES(".
$this->db_add_param($this->zeitaufzeichnung, FHC_BOOLEAN).",".
$this->db_add_param($this->azgrelevant, FHC_BOOLEAN).",".
$this->db_add_param($this->homeoffice, FHC_BOOLEAN).",".
$this->db_add_param($this->zeitmodell_id).');';
}
else
{
$qry = 'UPDATE hr.tbl_vertragsbestandteil_zeitaufzeichnung SET'.
' zeitaufzeichnung='.$this->db_add_param($this->zeitaufzeichnung, FHC_BOOLEAN).','.
' azgrelevant='.$this->db_add_param($this->azgrelevant, FHC_BOOLEAN).','.
' homeoffice='.$this->db_add_param($this->homeoffice, FHC_BOOLEAN).','.
' zeitmodell_id='.$this->db_add_param($this->zeitmodell_id, FHC_INTEGER).
' WHERE vertragsbestandteil_id='.$this->db_add_param($this->vertragsbestandteil_id, FHC_INTEGER);
}
if($this->db_query($qry))
{
return true;
}
else
{
$this->errormsg = 'Fehler beim Speichern des Studiensemesters';
return false;
}
}
/**
* Holt alle Vertragsbestandteile ab einem bestimmten Startdatum.
*
* @param $mitarbeiter_uid
* @param $startDate
* @param $order
* @param null $limit
* @return bool
*/
public function getFromStartdate($mitarbeiter_uid, $startDate, $order = 'ASC', $limit = null)
{
if ($order !== 'ASC' && $order !== 'DESC')
{
$this->errormsg = 'Fehler beim Laden der Daten';
return false;
}
$qry = 'SELECT
vbt.vertragsbestandteil_id, vbt.dienstverhaeltnis_id, vbt.vertragsbestandteiltyp_kurzbz,
vbt.von, vbt.bis, vbt.insertamum, vbt.insertvon, vbt.updateamum, vbt.updatevon,
vbtza.zeitaufzeichnung, vbtza.azgrelevant, vbtza.homeoffice, vbtza.zeitmodell_id
FROM hr.tbl_vertragsbestandteil_zeitaufzeichnung vbtza
JOIN hr.tbl_vertragsbestandteil vbt USING (vertragsbestandteil_id)
JOIN hr.tbl_dienstverhaeltnis dv USING (dienstverhaeltnis_id)
-- Dienstverhältnis(se) des Mitarbeiters
WHERE dv.mitarbeiter_uid = '. $this->db_add_param($mitarbeiter_uid). '
-- Zeitaufzeichnungspflichtig
AND zeitaufzeichnung = TRUE
-- Vertragsbestandteile sind aktuell
AND (vbt.bis IS NULL OR vbt.bis >= '. $this->db_add_param($startDate).')
ORDER BY vbt.von ' . $order;
if (!is_null($limit))
{
$qry .= ' LIMIT ' . $this->db_add_param($limit, FHC_INTEGER);
}
if ($result = $this->db_query($qry))
{
if ($this->db_num_rows($result) > 0)
{
$this->result = array();
while ($row = $this->db_fetch_object())
{
$vtb = new vertragsbestandteil_zeitaufzeichnung();
$vtb->vertragsbestandteil_id = $row->vertragsbestandteil_id;
$vtb->zeitaufzeichnung = $vtb->db_parse_bool($row->zeitaufzeichnung);
$vtb->azgrelevant = $vtb->db_parse_bool($row->azgrelevant);
$vtb->homeoffice = $vtb->db_parse_bool($row->homeoffice);
$vtb->zeitmodell_id = $row->zeitmodell_id;
$vtb->von = $row->von;
$vtb->bis = $row->bis;
$this->result[] = $vtb;
}
return true;
}
else
{
return false;
}
}
else
{
$this->errormsg = "Fehler bei der Abfrage aufgetreten";
return false;
}
}
}
?>
@@ -433,6 +433,7 @@ export default {
:label="$p.t('wawi/ausgegebenam')"
name="ausgegebenam"
v-model="formData.ausgegebenam"
model-type="yyyy-MM-dd"
auto-apply
:enable-time-picker="false"
text-input
@@ -449,6 +450,7 @@ export default {
:label="$p.t('wawi/retouram')"
name="retouram"
v-model="formData.retouram"
model-type="yyyy-MM-dd"
auto-apply
:enable-time-picker="false"
text-input
@@ -551,6 +551,7 @@ export default {
container-class="mb-3 col-3"
type="DatePicker"
v-model="formData.datum_von"
model-type="yyyy-MM-dd"
name="datum_von"
:label="$p.t('ui/from') + ' *'"
auto-apply
@@ -566,6 +567,7 @@ export default {
container-class="mb-3 col-3"
type="DatePicker"
v-model="formData.datum_bis"
model-type="yyyy-MM-dd"
name="datum_bis"
:label="$p.t('global/bis')"
auto-apply
@@ -470,6 +470,7 @@ export default {
:label="$p.t('admission', 'anmeldundRtAm')"
type="DatePicker"
v-model="formData.anmeldedatum"
model-type="yyyy-MM-dd"
auto-apply
:enable-time-picker="false"
text-input
@@ -293,6 +293,7 @@ export default {
:label="$p.t('person', 'geburtsdatum')"
type="DatePicker"
v-model="data.gebdatum"
model-type="yyyy-MM-dd"
name="gebdatum"
:clearable="false"
no-today
@@ -103,6 +103,7 @@ export default {
<form-input
type="DatePicker"
v-model="formData.nachgereicht_am"
model-type="yyyy-MM-dd"
name="nachgereicht_am"
:label="$p.t('dokumente/nachreichungAm')"
auto-apply
@@ -467,6 +467,7 @@ export default {
:label="$p.t('ui', 'von')"
type="DatePicker"
v-model="formData.von"
model-type="yyyy-MM-dd"
auto-apply
:enable-time-picker="false"
text-input
@@ -501,6 +502,7 @@ export default {
:label="$p.t('global', 'bis')"
type="DatePicker"
v-model="formData.bis"
model-type="yyyy-MM-dd"
auto-apply
:enable-time-picker="false"
text-input
@@ -276,6 +276,7 @@ export default{
container-class="mb-3"
type="DatePicker"
v-model="formData.datum"
model-type="yyyy-MM-dd"
name="datum"
:label="$p.t('global/datum')"
auto-apply
@@ -291,6 +292,7 @@ export default{
container-class="mb-3"
type="DatePicker"
v-model="formData.bestaetigtam"
model-type="yyyy-MM-dd"
name="bestaetigtam"
:label="$p.t('lehre/bestaetigt_am')"
auto-apply
@@ -306,13 +308,14 @@ export default{
container-class="mb-3"
type="DatePicker"
v-model="formData.bewerbung_abgeschicktamum"
model-type="yyyy-MM-dd HH:mm:ss"
name="bewerbung_abgeschicktamum"
:label="$p.t('lehre/bewerbung_abgeschickt_am')"
auto-apply
:enable-time-picker="false"
format="dd.MM.yyyy"
:enable-time-picker="true"
format="dd.MM.yyyy HH:mm:ss"
text-input
preview-format="dd.MM.yyyy"
preview-format="dd.MM.yyyy HH:mm:ss"
:teleport="true"
:disabled="bisLocked || !hasPrestudentstatusPermission"
>
@@ -285,6 +285,7 @@ export default {
uid="stv-list-new-gebdatum"
name="gebdatum"
v-model="formDataPerson['gebdatum']"
model-type="yyyy-MM-dd"
:disabled="!!person"
@update:model-value="loadSuggestions"
text-input
+17 -3
View File
@@ -4,6 +4,7 @@ import FormInput from '../Form/Input.js';
import ApiUdf from '../../api/udf.js';
export default {
name: 'CoreUdfCmpt',
components: {
CoreFetchCmpt,
FormInput
@@ -26,7 +27,8 @@ export default {
// The values as associative array
modelValue: Object,
// Show only fields with a name that exists in the filter
filter: [String, Array]
filter: [String, Array],
readonly: true
},
data() {
return {
@@ -35,6 +37,13 @@ export default {
};
},
computed: {
isPkValid() {
// If the provided pk is _not_ valid
return !Object.keys(this.pk).every(key => !this.pk[key]);
},
getReadonly() {
return this.readonly;
},
filterArray() {
if (!this.filter || Array.isArray(this.filter))
return this.filter;
@@ -61,6 +70,10 @@ export default {
},
watch: {
pk(n, o) {
// If the provided pk is _not_ valid
if (Object.keys(n).every(key => !n[key])) return;
if (!this.$refs.fetch)
return; // NOTE(chris): no initial load yet
@@ -124,6 +137,7 @@ export default {
template: `
<div class="core-udf row">
<core-fetch-cmpt
v-if="isPkValid"
ref="fetch"
:api-function="loadF"
:api-function-parameters="{ ciModel, pk }"
@@ -138,7 +152,7 @@ export default {
:type="field.type"
:multiple="field.multiple"
:title="field.description"
:disabled="field.disabled"
:disabled="field.disabled || getReadonly"
:clearable="field.clearable"
:auto-apply="field.autoApply"
:enable-time-picker="field.enableTimePicker"
@@ -152,4 +166,4 @@ export default {
</template>
</core-fetch-cmpt>
</div>`
}
}
+2
View File
@@ -98,6 +98,7 @@ require_once('dbupdate_3.4/75888_reihungstest_mehrfachdurchfuehrung.php');
require_once('dbupdate_3.4/76150_perm_other_lv_plan.php');
require_once('dbupdate_3.4/68957_dashboard_bookmark_neue_Spalte_sort.php');
require_once('dbupdate_3.4/68530_Dashboard_Cleanup.php');
require_once('dbupdate_3.4/76677_zeitaufzeichnung_zeitmodell.php');
// *** Pruefung und hinzufuegen der neuen Attribute und Tabellen
echo '<H2>Pruefe Tabellen und Attribute!</H2>';
@@ -250,6 +251,7 @@ $tabellen=array(
"hr.tbl_lohnguide_modellstelle" => array("modellstelle_kurzbz", "bezeichnung", "grade", "modellfunktion_kurzbz", "aktiv", "sort", "insertvon", "insertamum", "updatevon", "updateamum"),
"hr.tbl_lohnguide_fachrichtung" => array("fachrichtung_kurzbz", "bezeichnung", "aktiv", "insertvon", "insertamum", "updatevon", "updateamum"),
"hr.tbl_vertragsbestandteil_lohnguide" => array("vertragsbestandteil_id", "stellenbezeichnung", "vordienstzeit", "fachrichtung_kurzbz", "modellstelle_kurzbz", "kommentar_person", "kommentar_modellstelle"),
"hr.tbl_zeitmodell" => array('zeitmodell_id', 'zeitmodell_kurzbz','beschreibung','aktiv', 'stundenanzahl','ext_id','sort'),
"lehre.tbl_abschlussbeurteilung" => array("abschlussbeurteilung_kurzbz","bezeichnung","bezeichnung_english","sort"),
"lehre.tbl_abschlusspruefung" => array("abschlusspruefung_id","student_uid","vorsitz","pruefer1","pruefer2","pruefer3","abschlussbeurteilung_kurzbz","akadgrad_id","pruefungstyp_kurzbz","datum","uhrzeit","sponsion","anmerkung","updateamum","updatevon","insertamum","insertvon","ext_id","note","protokoll","endezeit","pruefungsantritt_kurzbz","freigabedatum"),
"lehre.tbl_abschlusspruefung_antritt" => array("pruefungsantritt_kurzbz","bezeichnung","bezeichnung_english","sort"),
@@ -0,0 +1,97 @@
<?php
if (! defined('DB_NAME')) exit('No direct script access allowed');
//Create Sequence hr.tbl_zeitmodell and grant Rights
if ($result = @$db->db_query("SELECT * FROM pg_class WHERE relname = 'tbl_zeitmodell_zeitmodell_id_seq'"))
{
if ($db->db_num_rows($result) == 0)
{
if ($count = @$db->db_query("SELECT * FROM hr.tbl_zeitmodell"))
{
$count = $db->db_num_rows($count) + 1;
$qry = 'CREATE SEQUENCE hr.tbl_zeitmodell_zeitmodell_id_seq START ';
$qry .= $count;
if(!$db->db_query($qry))
{
echo '<strong> hr.tbl_zeitmodell '.$db->db_last_error().'</strong><br>';
}
else
{
echo '<br>hr.tbl_zeitmodell: Sequence hr.tbl_zeitmodell_zeitmodell_id_seq mit Startwert ' . $count . ' erstellt';
$qry2 = "GRANT SELECT, UPDATE ON hr.tbl_zeitmodell_zeitmodell_id_seq TO vilesci;
GRANT SELECT, UPDATE ON hr.tbl_zeitmodell_zeitmodell_id_seq TO web;";
if(!$db->db_query($qry2))
{
echo '<strong>hr.tbl_zeitmodell_zeitmodell_id_seq Berechtigungen: '.$db->db_last_error().'</strong><br>';
}
else
{
echo '<br>hr.tbl_zeitmodell: Rechte auf hr.tbl_zeitmodell_zeitmodell_id_seq fuer web user und vilesci gesetzt ';
}
}
}
}
}
//Create Table
if ($result = $db->db_query("SELECT * FROM information_schema.tables WHERE table_name='tbl_zeitmodell' AND table_schema='hr'"))
{
if ($db->db_num_rows($result) == 0)
{
$qry = "
CREATE TABLE IF NOT EXISTS hr.tbl_zeitmodell (
zeitmodell_id integer,
zeitmodell_kurzbz varchar(32) UNIQUE,
beschreibung text,
aktiv boolean NOT NULL DEFAULT FALSE,
stundenanzahl numeric(8,2),
ext_id text,
sort smallint,
insertamum TIMESTAMP DEFAULT NOW(),
insertvon VARCHAR(32),
updateamum TIMESTAMP,
updatevon VARCHAR(32),
CONSTRAINT tbl_zeitmodell_pkey PRIMARY KEY (zeitmodell_id)
);
GRANT SELECT,INSERT,DELETE,UPDATE ON TABLE hr.tbl_zeitmodell TO vilesci;";
if (! $db->db_query($qry))
echo '<strong>Zeitmodell: ' . $db->db_last_error() . '</strong><br>';
else
echo 'hr.tbl_zeitmodell wurde neu erstellt<br>';
}
}
//hr.tbl_zeitmodell DEFAULT einstellen
if ($result = @$db->db_query("SELECT column_default FROM INFORMATION_SCHEMA.COLUMNS WHERE table_name = 'tbl_zeitmodell'AND column_name = 'zeitmodell_id' and column_default is null"))
{
if($db->db_num_rows($result)==1)
{
$qry = "ALTER TABLE hr.tbl_zeitmodell ALTER COLUMN zeitmodell_id SET DEFAULT nextval('hr.tbl_zeitmodell_zeitmodell_id_seq'::regclass);";
if(!$db->db_query($qry))
echo '<strong> hr.tbl_zeitmodell '.$db->db_last_error().'</strong><br>';
else
echo '<br> hr.tbl_zeitmodell: Defaultwert bei Spalte hr.tbl_zeitmodell_id gesetzt';
}
}
//foreign key zu Vertragsbestandteil
if ($result = @$db->db_query("SELECT * FROM information_schema.columns WHERE column_name='zeitmodell_id' AND table_name='tbl_vertragsbestandteil_zeitaufzeichnung' AND table_schema='hr'"))
{
if ($db->db_num_rows($result) == 0)
{
$qry = "
ALTER TABLE
hr.tbl_vertragsbestandteil_zeitaufzeichnung
ADD COLUMN
zeitmodell_id integer;
ALTER TABLE hr.tbl_vertragsbestandteil_zeitaufzeichnung ADD CONSTRAINT vertragsbestandteil_zeitaufzeichnung_zeitmodell_fk FOREIGN KEY (zeitmodell_id) REFERENCES hr.tbl_zeitmodell (zeitmodell_id) ON DELETE RESTRICT ON UPDATE CASCADE;
";
if (! $db->db_query($qry))
echo '<strong>Zeitmodell: ' . $db->db_last_error() . '</strong><br>';
else
echo '<br>Spalte zeitmodell_id wurde in hr.tbl_vertragsbestandteil_zeitaufzeichnung neu erstellt<br>';
}
}