From d542cf7720b9c0651d8510a18a73916e3200a6ae Mon Sep 17 00:00:00 2001 From: cgfhtw Date: Wed, 14 Aug 2024 16:20:47 +0200 Subject: [PATCH 01/39] s&d --- application/libraries/AntragLib.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/application/libraries/AntragLib.php b/application/libraries/AntragLib.php index c1649587d..1a96eadf1 100644 --- a/application/libraries/AntragLib.php +++ b/application/libraries/AntragLib.php @@ -126,7 +126,7 @@ class AntragLib return $this->_ci->StudierendenantragstatusModel->resumeAntraegeForAbmeldungStgl($antrag_id); } // NOTE(chris): get last status that is not pause - $this->_ci->StudierendenantragstatusModel->addOrder('insertamum'); + $this->_ci->StudierendenantragstatusModel->addOrder('insertamum', 'DESC'); $this->_ci->StudierendenantragstatusModel->addLimit(1); $result = $this->_ci->StudierendenantragstatusModel->loadWhere([ 'studierendenantrag_id' => $antrag_id, From ba6224bc788e83894627d8fc5770af3c3f97053f Mon Sep 17 00:00:00 2001 From: ma0048 Date: Tue, 2 Sep 2025 11:18:24 +0200 Subject: [PATCH 02/39] oeh betrag aus der eigener tabelle holen studentenverwaltung bei jedem studiensemester wechsel fas nur einmalig ueber die variable --- .../controllers/api/frontend/v1/stv/Konto.php | 45 ++++++++++++++++++- include/konto.class.php | 45 ++++++++++++++++++- public/js/api/factory/stv/konto.js | 10 +++-- .../Studentenverwaltung/Details/Konto/New.js | 18 +++++++- 4 files changed, 110 insertions(+), 8 deletions(-) diff --git a/application/controllers/api/frontend/v1/stv/Konto.php b/application/controllers/api/frontend/v1/stv/Konto.php index a33680ea0..c7c1aa1d5 100644 --- a/application/controllers/api/frontend/v1/stv/Konto.php +++ b/application/controllers/api/frontend/v1/stv/Konto.php @@ -48,7 +48,8 @@ class Konto extends FHCAPI_Controller // Load language phrases $this->loadPhrases([ - 'konto' + 'konto', + 'lehre' ]); } @@ -112,7 +113,7 @@ class Konto extends FHCAPI_Controller * * @return void */ - public function getBuchungstypen() + public function getBuchungstypen($studiensemester_kurzbz = null) { $this->load->model('crm/Buchungstyp_model', 'BuchungstypModel'); @@ -122,6 +123,7 @@ class Konto extends FHCAPI_Controller $data = $this->getDataOrTerminateWithError($result); + $this->_getOEHBeitrag($data, $studiensemester_kurzbz); $this->terminateWithSuccess($data); } @@ -494,4 +496,43 @@ class Konto extends FHCAPI_Controller $this->terminateWithSuccess(); } + + private function _getOEHBeitrag(&$data, $studiensemester_kurzbz = null) + { + if (is_null($studiensemester_kurzbz)) + { + $this->load->library('VariableLib', ['uid' => getAuthUID()]); + $studiensemester_akt = $this->variablelib->getVar('semester_aktuell'); + } + else + { + $this->load->model('organisation/Studiensemester_model', 'StudiensemesterModel'); + if ($this->StudiensemesterModel->isValidStudiensemester($studiensemester_kurzbz)) + $studiensemester_akt = $studiensemester_kurzbz; + else + $this->terminateWithError($this->p->t('lehre', 'error_noStudiensemester')); + } + + $this->load->model('codex/Oehbeitrag_model', 'OehbeitragModel'); + $oehBeitrag = $this->OehbeitragModel->getByStudiensemester($studiensemester_akt); + + $oehStandardbetrag = null; + if (hasData($oehBeitrag)) + { + $oeh = getData($oehBeitrag)[0]; + $summe = ($oeh->studierendenbeitrag + $oeh->versicherung) * -1; + $oehStandardbetrag = number_format((float)$summe, 2, '.', ''); + } + + if ($oehStandardbetrag !== null) + { + $data = array_map(function ($buchungstyp) use ($oehStandardbetrag) { + if (isset($buchungstyp->buchungstyp_kurzbz) && (strtolower($buchungstyp->buchungstyp_kurzbz) === 'oeh')) + { + $buchungstyp->standardbetrag = $oehStandardbetrag; + } + return $buchungstyp; + }, $data); + } + } } diff --git a/include/konto.class.php b/include/konto.class.php index 51f79200b..da76c147f 100644 --- a/include/konto.class.php +++ b/include/konto.class.php @@ -25,6 +25,7 @@ */ require_once(dirname(__FILE__).'/basis_db.class.php'); require_once(dirname(__FILE__).'/'.EXT_FKT_PATH.'/generateZahlungsreferenz.inc.php'); +require_once(dirname(__FILE__).'/variable.class.php'); class konto extends basis_db { @@ -432,6 +433,8 @@ class konto extends basis_db $qry.=" ORDER BY beschreibung"; + $oehBeitrag = $this->_getOEHBeitrag(); + if($this->db_query($qry)) { while($row = $this->db_fetch_object()) @@ -440,7 +443,15 @@ class konto extends basis_db $typ->buchungstyp_kurzbz = $row->buchungstyp_kurzbz; $typ->beschreibung = $row->beschreibung; - $typ->standardbetrag = $row->standardbetrag; + if (strtolower($typ->buchungstyp_kurzbz) === 'oeh' && $oehBeitrag) + { + $typ->standardbetrag = $oehBeitrag; + } + else + { + $typ->standardbetrag = $row->standardbetrag; + } + $typ->standardtext = $row->standardtext; $typ->credit_points = $row->credit_points; $typ->aktiv = $this->db_parse_bool($row->aktiv); @@ -990,6 +1001,38 @@ class konto extends basis_db return false; } } + + private function _getOEHBeitrag() + { + $variablen_obj = new variable(); + $variablen_obj->loadVariables(get_uid()); + + $qry = "WITH semstart AS ( + SELECT start FROM public.tbl_studiensemester + WHERE studiensemester_kurzbz = '". $this->db_escape($variablen_obj->variable->semester_aktuell) . "' + ) + SELECT * FROM bis.tbl_oehbeitrag oehb + JOIN public.tbl_studiensemester semvon ON oehb.von_studiensemester_kurzbz = semvon.studiensemester_kurzbz + LEFT JOIN public.tbl_studiensemester sembis ON oehb.bis_studiensemester_kurzbz = sembis.studiensemester_kurzbz + JOIN semstart ON semstart.start::date >= semvon.start::date AND (sembis.studiensemester_kurzbz IS NULL OR semstart.start::date <= sembis.start::date) + ORDER BY semvon.start + LIMIT 1"; + + if ($this->db_query($qry)) + { + if($row = $this->db_fetch_object()) + { + $summe = ($row->studierendenbeitrag + $row->versicherung) * -1; + return number_format((float)$summe, 2, '.', ''); + } + return false; + } + else + { + $this->errormsg = 'Fehler bei der Abfrage aufgetreten'; + return false; + } + } } ?> diff --git a/public/js/api/factory/stv/konto.js b/public/js/api/factory/stv/konto.js index 6c17d460d..adfc0c44e 100644 --- a/public/js/api/factory/stv/konto.js +++ b/public/js/api/factory/stv/konto.js @@ -65,10 +65,14 @@ export default { params: { buchungsnr } }; }, - getBuchungstypen() { + getBuchungstypen(studiensemester_kurzbz) { + let url = 'api/frontend/v1/stv/konto/getBuchungstypen' + if (!!studiensemester_kurzbz) + url = url + '/' + encodeURIComponent(studiensemester_kurzbz); + return { method: 'get', - url: 'api/frontend/v1/stv/konto/getBuchungstypen' + url: url }; - } + }, }; \ No newline at end of file diff --git a/public/js/components/Stv/Studentenverwaltung/Details/Konto/New.js b/public/js/components/Stv/Studentenverwaltung/Details/Konto/New.js index cdb32de99..4060b5961 100644 --- a/public/js/components/Stv/Studentenverwaltung/Details/Konto/New.js +++ b/public/js/components/Stv/Studentenverwaltung/Details/Konto/New.js @@ -83,6 +83,8 @@ export default { }); }, open() { + + this.getBuchungstypen(this.currentSemester); this.data = { buchungstyp_kurzbz: '', betrag: '-0.00', @@ -105,7 +107,7 @@ export default { const text = typ.standardtext || ''; const creditpoints = typ.credit_points || ''; - if (!this.data.betrag || this.data.betrag == '-0.00') + if (!this.data.betrag || this.data.betrag == '-0.00' || this.data.betrag !== amount) this.data.betrag = amount; if (!this.data.buchungstext) @@ -113,7 +115,18 @@ export default { if (this.config.showCreditpoints && (this.data.credit_points == '0.00' || this.data.credit_points === null)) this.data.credit_points = creditpoints; - } + }, + getBuchungstypen(studiensemester_kurzbz) + { + this.$api + .call(ApiKonto.getBuchungstypen(studiensemester_kurzbz)) + .then(result => { + this.lists.buchungstypen = result.data; + if (this.data.buchungstyp_kurzbz) + this.checkDefaultBetrag(this.data.buchungstyp_kurzbz); + }) + .catch(this.$fhcAlert.handleSystemError); + }, }, template: ` @@ -166,6 +179,7 @@ export default { From 38e8f91fdf404ce565f06205cd567c9bc7d5354b Mon Sep 17 00:00:00 2001 From: ma0068 Date: Tue, 25 Nov 2025 10:48:57 +0100 Subject: [PATCH 03/39] add kurzbzlang to studentDropdown suggestion --- application/models/organisation/Studiengang_model.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/application/models/organisation/Studiengang_model.php b/application/models/organisation/Studiengang_model.php index 02f972690..08f40f6d4 100644 --- a/application/models/organisation/Studiengang_model.php +++ b/application/models/organisation/Studiengang_model.php @@ -594,7 +594,8 @@ class Studiengang_model extends DB_Model $this->addSelect('p.prestudent_id'); $this->addSelect('pers.vorname'); $this->addSelect('pers.nachname'); - $this->addSelect("CONCAT(UPPER(pers.nachname), ' ', pers.vorname, ' (', " . $this->dbTable . ".bezeichnung, ')') AS name"); + $this->addSelect("CONCAT(UPPER(pers.nachname), ' ', pers.vorname, + ' (', " . $this->dbTable . ".bezeichnung, ', ', " . $this->dbTable . ".kurzbzlang,')') AS name"); $this->addJoin('public.tbl_prestudent p', 'studiengang_kz'); $this->addJoin( From e054f1222bcde63bfe60bc2ae9249038a05e99d3 Mon Sep 17 00:00:00 2001 From: Werner Masik Date: Tue, 3 Mar 2026 11:50:45 +0100 Subject: [PATCH 04/39] basic model and factory for lohnguide --- .../VertragsbestandteilFactory.php | 12 ++ .../VertragsbestandteilLohnguide.php | 137 ++++++++++++++++++ .../VertragsbestandteilLohnguide_model.php | 11 ++ 3 files changed, 160 insertions(+) create mode 100644 application/libraries/vertragsbestandteil/VertragsbestandteilLohnguide.php create mode 100644 application/models/vertragsbestandteil/VertragsbestandteilLohnguide_model.php diff --git a/application/libraries/vertragsbestandteil/VertragsbestandteilFactory.php b/application/libraries/vertragsbestandteil/VertragsbestandteilFactory.php index 6e7b0af06..2a7955a45 100644 --- a/application/libraries/vertragsbestandteil/VertragsbestandteilFactory.php +++ b/application/libraries/vertragsbestandteil/VertragsbestandteilFactory.php @@ -22,6 +22,7 @@ class VertragsbestandteilFactory const VERTRAGSBESTANDTEIL_URLAUBSANSPRUCH = 'urlaubsanspruch'; const VERTRAGSBESTANDTEIL_ZEITAUFZEICHNUNG = 'zeitaufzeichnung'; const VERTRAGSBESTANDTEIL_LEHRE = 'lehre'; + const VERTRAGSBESTANDTEIL_LOHNGUIDE = 'lohnguide'; public static function getVertragsbestandteil($data, $fromdb=false) { @@ -69,6 +70,11 @@ class VertragsbestandteilFactory $vertragsbestandteil = new VertragsbestandteilZeitaufzeichnung(); $vertragsbestandteil->hydrateByStdClass($data, $fromdb); break; + + case self::VERTRAGSBESTANDTEIL_LOHNGUIDE: + $vertragsbestandteil = new VertragsbestandteilLohnguide(); + $vertragsbestandteil->hydrateByStdClass($data, $fromdb); + break; default: throw new Exception('Unknown vertragsbestandteiltyp_kurzbz ' @@ -127,6 +133,12 @@ class VertragsbestandteilFactory $vertragsbestandteildbmodel = $CI->VertragsbestandteilZeitaufzeichnung_model; break; + case self::VERTRAGSBESTANDTEIL_LOHNGUIDE: + $CI->load->model('vertragsbestandteil/VertragsbestandteilLohnguide_model', + 'VertragsbestandteilLohnguide_model'); + $vertragsbestandteildbmodel = $CI->VertragsbestandteilLohnguide_model; + break; + default: throw new Exception('Unknown vertragsbestandteil_kurzbz ' . $vertragsbestandteil_kurzbz); diff --git a/application/libraries/vertragsbestandteil/VertragsbestandteilLohnguide.php b/application/libraries/vertragsbestandteil/VertragsbestandteilLohnguide.php new file mode 100644 index 000000000..ef87e35e9 --- /dev/null +++ b/application/libraries/vertragsbestandteil/VertragsbestandteilLohnguide.php @@ -0,0 +1,137 @@ +stellenbezeichnung; + } + + public function setStellenbezeichnung($stellenbezeichnung): self + { + $this->markDirty('stellenbezeichnung', $this->stellenbezeichnung, $stellenbezeichnung); + $this->stellenbezeichnung = $stellenbezeichnung; + return $this; + } + + public function getFachrichtung_kurzbz() + { + return $this->fachrichtung_kurzbz; + } + + public function setFachrichtung_kurzbz($fachrichtung_kurzbz): self + { + $this->markDirty('fachrichtung_kurzbz', $this->fachrichtung_kurzbz, $fachrichtung_kurzbz); + $this->fachrichtung_kurzbz = $fachrichtung_kurzbz; + return $this; + } + + public function getModellstelle_kurzbz() + { + return $this->modellstelle_kurzbz; + } + + public function setModellstelle_kurzbz($modellstelle_kurzbz): self + { + $this->markDirty('modellstelle_kurzbz', $this->modellstelle_kurzbz, $modellstelle_kurzbz); + $this->modellstelle_kurzbz = $modellstelle_kurzbz; + return $this; + } + + public function getKommentar_person() + { + return $this->kommentar_person; + } + + public function setKommentar_person($kommentar_person): self + { + $this->markDirty('kommentar_person', $this->kommentar_person, $kommentar_person); + $this->kommentar_person = $kommentar_person; + return $this; + } + + public function getKommentar_modellstelle() + { + return $this->kommentar_modellstelle; + } + + public function setKommentar_modellstelle($kommentar_modellstelle): self + { + $this->markDirty('kommentar_modellstelle', $this->kommentar_modellstelle, $kommentar_modellstelle); + $this->kommentar_modellstelle = $kommentar_modellstelle; + return $this; + } + + + public function __construct() + { + parent::__construct(); + $this->setVertragsbestandteiltyp_kurzbz( + VertragsbestandteilFactory::VERTRAGSBESTANDTEIL_LOHNGUIDE); + } + + public function hydrateByStdClass($data, $fromdb=false) + { + parent::hydrateByStdClass($data, $fromdb); + $this->fromdb = $fromdb; + isset($data->fachrichtung_kurzbz) && $this->setFachrichtung_kurzbz($data->fachrichtung_kurzbz); + isset($data->stellenbezeichnung) && $this->setStellenbezeichnung($data->stellenbezeichnung); + isset($data->modellstelle_kurzbz) && $this->setModellstelle_kurzbz($data->modellstelle_kurzbz); + isset($data->kommentar_person) && $this->setKommentar_person($data->kommentar_person); + isset($data->kommentar_modellstelle) && $this->setKommentar_modellstelle($data->kommentar_modellstelle); + $this->fromdb = false; + } + + public function toStdClass(): \stdClass + { + $tmp = array( + 'vertragsbestandteil_id' => $this->getVertragsbestandteil_id(), + 'stellenbezeichnung' => $this->getStellenbezeichnung(), + 'fachrichtung' => $this->getFachrichtung_kurzbz(), + 'modellstelle' => $this->getModellstelle_kurzbz(), + 'kommentar_person' => $this->getKommentar_person(), + 'kommentar_modellstelle' => $this->getKommentar_modellstelle(), + ); + + $tmp = array_filter($tmp, function($k) { + return in_array($k, $this->modifiedcolumns); + }, ARRAY_FILTER_USE_KEY); + + return (object) $tmp; + } + + public function __toString() + { + $txt = <<getModellstelle_kurzbz()} + +EOTXT; + return parent::__toString() . $txt; + } + + /* public function validate() + { + if( !(filter_var($this->tage, FILTER_VALIDATE_INT, + array( + 'options' => array( + 'min_range' => 1, + 'max_range' => 50 + ) + ) + )) ) { + $this->validationerrors[] = 'Urlaubsanspruch muss eine Tagesanzahl im Bereich 1 bis 50 sein.'; + } + + return parent::validate(); + } */ +} diff --git a/application/models/vertragsbestandteil/VertragsbestandteilLohnguide_model.php b/application/models/vertragsbestandteil/VertragsbestandteilLohnguide_model.php new file mode 100644 index 000000000..6f3f8e47a --- /dev/null +++ b/application/models/vertragsbestandteil/VertragsbestandteilLohnguide_model.php @@ -0,0 +1,11 @@ +dbTable = 'hr.tbl_vertragsbestandteil_lohnguide'; + $this->pk = 'vertragsbestandteil_id'; + } +} From 41b2a6d1d49b37f454313695aaa877317ae070b9 Mon Sep 17 00:00:00 2001 From: Werner Masik Date: Wed, 4 Mar 2026 10:53:30 +0100 Subject: [PATCH 05/39] added db migration for lohnguide --- system/dbupdate_3.4.php | 6 + system/dbupdate_3.4/70376_lohnguide.php | 337 ++++++++++++++++++++++++ 2 files changed, 343 insertions(+) create mode 100644 system/dbupdate_3.4/70376_lohnguide.php diff --git a/system/dbupdate_3.4.php b/system/dbupdate_3.4.php index 793930243..c6d38dddd 100644 --- a/system/dbupdate_3.4.php +++ b/system/dbupdate_3.4.php @@ -91,6 +91,7 @@ require_once('dbupdate_3.4/69065_Projektarbeiten_Firmen_verwalten.php'); require_once('dbupdate_3.4/68744_StV_settings.php'); require_once('dbupdate_3.4/62889_reihungstest_ueberwachung_mit_constructor.php'); require_once('dbupdate_3.4/71399_dashboard_update_widget_paths.php'); +require_once('dbupdate_3.4/70376_lohnguide.php'); // *** Pruefung und hinzufuegen der neuen Attribute und Tabellen echo '

Pruefe Tabellen und Attribute!

'; @@ -238,6 +239,11 @@ $tabellen=array( "hr.tbl_valorisierung_instanz" => array("updateamum", "oe_kurzbz", "valorisierungsdatum", "valorisierung_kurzbz", "beschreibung", "ausgewaehlt", "updatevon", "valorisierung_instanz_id"), "hr.tbl_valorisierung_instanz_methode" => array("valorisierung_instanz_id", "valorisierung_methode_kurzbz", "beschreibung", "valorisierung_methode_parameter"), "hr.tbl_valorisierung_methode" => array("beschreibung", "valorisierung_methode_kurzbz"), + "hr.tbl_lohnguide_jobfamilie" => array("jobfamilie_kurzbz", "bezeichnung", "aktiv", "sort", "insertvon", "insertamum", "updatevon", "updateamum"), + "hr.tbl_lohnguide_modellfunktion" => array("modellfunktion_kurzbz", "bezeichnung", "jobfamilie_kurzbz", "aktiv", "sort", "insertvon", "insertamum", "updatevon", "updateamum"), + "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", "fachrichtung_kurzbz", "modellstelle_kurzbz", "kommentar_person", "kommentar_modellstelle"), "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"), diff --git a/system/dbupdate_3.4/70376_lohnguide.php b/system/dbupdate_3.4/70376_lohnguide.php new file mode 100644 index 000000000..f99d6acd8 --- /dev/null +++ b/system/dbupdate_3.4/70376_lohnguide.php @@ -0,0 +1,337 @@ +db_query("SELECT * FROM information_schema.tables WHERE table_name='tbl_lohnguide_jobfamilie' AND table_schema='hr'")) +{ + if ($db->db_num_rows($result) == 0) + { + $qry = " +CREATE TABLE IF NOT EXISTS hr.tbl_lohnguide_jobfamilie ( + jobfamilie_kurzbz character varying(32) NOT NULL, + bezeichnung varchar(64) NOT NULL, + aktiv boolean DEFAULT FALSE, + sort smallint, + insertvon character varying(32) NOT NULL, + insertamum timestamp without time zone DEFAULT now() NOT NULL, + updatevon character varying(32), + updateamum timestamp without time zone, + CONSTRAINT tbl_lohnguide_jobfamilie_pkey PRIMARY KEY (jobfamilie_kurzbz) +); + +GRANT SELECT,INSERT,DELETE,UPDATE ON TABLE hr.tbl_lohnguide_jobfamilie TO vilesci; + +INSERT INTO hr.tbl_lohnguide_jobfamilie(jobfamilie_kurzbz, bezeichnung,aktiv, sort, insertvon, insertamum) VALUES +('FÜHRUNG','Führung',true,1,'system',NOW()), +('ALLGEMEIN','Allgemein',true,2,'system',NOW()), +('TECHNIK','Technik',true,3,'system',NOW()), +('IT','IT',true,4,'system',NOW()), +('PRODUKTION','Produktion',true,5,'system',NOW()), +('HANDW_IH_LOG','Handwerk, Instandhaltung + Logistik',true,6,'system',NOW()) +ON CONFLICT (jobfamilie_kurzbz) DO NOTHING; + "; + + if (! $db->db_query($qry)) + echo 'Lohnguide Jobfamilie: ' . $db->db_last_error() . '
'; + else + echo 'hr.tbl_lohnguide_jobfamilie wurde neu erstellt
'; + } +} + +if ($result = $db->db_query("SELECT * FROM information_schema.tables WHERE table_name='tbl_lohnguide_modellfunktion' AND table_schema='hr'")) +{ + if ($db->db_num_rows($result) == 0) + { + $qry = " +CREATE TABLE IF NOT EXISTS hr.tbl_lohnguide_modellfunktion ( + modellfunktion_kurzbz character varying(32) NOT NULL, + bezeichnung varchar(64) NOT NULL, + jobfamilie_kurzbz character varying(32) NOT NULL, + aktiv boolean DEFAULT FALSE, + sort smallint, + insertvon character varying(32) NOT NULL, + insertamum timestamp without time zone DEFAULT now() NOT NULL, + updatevon character varying(32), + updateamum timestamp without time zone, + CONSTRAINT tbl_lohnguide_modellfunktion_pkey PRIMARY KEY (modellfunktion_kurzbz), + CONSTRAINT tbl_lohnguide_modellfunktion_jobfamilie_fk FOREIGN KEY (jobfamilie_kurzbz) REFERENCES hr.tbl_lohnguide_jobfamilie (jobfamilie_kurzbz) MATCH FULL ON DELETE RESTRICT ON UPDATE CASCADE +); + +GRANT SELECT,INSERT,DELETE,UPDATE ON TABLE hr.tbl_lohnguide_modellfunktion TO vilesci; + +INSERT INTO hr.tbl_lohnguide_modellfunktion(modellfunktion_kurzbz, bezeichnung, jobfamilie_kurzbz, aktiv, sort, insertvon, insertamum) VALUES +('FÜHRUNG_I','Führung I','FÜHRUNG',true,1,'system',NOW()), +('FÜHRUNG_II','Führung I','FÜHRUNG',true,2,'system',NOW()), +('FÜHRUNG_III','Führung I','FÜHRUNG',true,3,'system',NOW()), +('GF','Geschäftsführung','FÜHRUNG',true,4,'system',NOW()), +/* Allgemein */ +('FK_ALLGM','Fachkraft Allgemein','ALLGEMEIN',true,5,'system',NOW()), +('SFK_ALLGM','Spezial-Fachkraft Allgemein','ALLGEMEIN',true,6,'system',NOW()), +('SP_ALLGM','Spezialist:in Allgemein','ALLGEMEIN',true,7,'system',NOW()), +('EXP_ALLGM','Expert:in Allgemein','ALLGEMEIN',true,8,'system',NOW()), +('TOP_EXP_ALLGM','Top-Expert:in Allgemein','ALLGEMEIN',true,9,'system',NOW()), +/* Technik */ +('FK_TECH','Fachkraft Technik','TECHNIK',true,10,'system',NOW()), +('SFK_TECH','Spezial-Fachkraft Technik','TECHNIK',true,11,'system',NOW()), +('SP_TECH','Spezialist:in Technik','TECHNIK',true,12,'system',NOW()), +('EXP_TECH','Expert:in Technik','TECHNIK',true,13,'system',NOW()), +('TOP_EXP_TECH','Top-Expert:in Technik','TECHNIK',true,14,'system',NOW()), +/* IT */ +('FK_IT','Fachkraft IT','IT',true,15,'system',NOW()), +('SFK_IT','Spezial-Fachkraft IT','IT',true,16,'system',NOW()), +('SP_IT','Spezialist:in IT','IT',true,17,'system',NOW()), +('EXP_IT','Expert:in IT','IT',true,18,'system',NOW()), +('TOP_EXP_IT','Top-Expert:in IT','IT',true,19,'system',NOW()), +/* Produktion */ +('HK_PROD','Hilfskraft Produktion','PRODUKTION',true,20,'system',NOW()), +('FK_PROD','Fachkraft Produktion','PRODUKTION',true,21,'system',NOW()), +('SFK_PROD','Spezial-Fachkraft Produktion','PRODUKTION',true,22,'system',NOW()), +('SP_PROD','Spezialist:in Produktion','PRODUKTION',true,23,'system',NOW()), +/* Handwerk, Instandhaltung, Logistik */ +('HK_HIL','Hilfskraft Handwerk, Instandhaltung + Logistik','HANDW_IH_LOG',true,24,'system',NOW()), +('FK_HIL','Fachkraft Handwerk, Instandhaltung + Logistik','HANDW_IH_LOG',true,25,'system',NOW()), +('SFK_HIL','Spezial-Fachkraft Handwerk, Instandhaltung + Logistik','HANDW_IH_LOG',true,26,'system',NOW()), +('SP_HIL','Spezialist:in Handwerk, Instandhaltung + Logistik','HANDW_IH_LOG',true,27,'system',NOW()) +ON CONFLICT (modellfunktion_kurzbz) DO NOTHING; + + + "; + + if (! $db->db_query($qry)) + echo 'Lohnguide Modellfunktion: ' . $db->db_last_error() . '
'; + else + echo 'hr.tbl_lohnguide_modellfunktion wurde neu erstellt
'; + } +} + +if ($result = $db->db_query("SELECT * FROM information_schema.tables WHERE table_name='tbl_lohnguide_modellstelle' AND table_schema='hr'")) +{ + if ($db->db_num_rows($result) == 0) + { + $qry = " +CREATE TABLE IF NOT EXISTS hr.tbl_lohnguide_modellstelle ( + modellstelle_kurzbz character varying(32) NOT NULL, + bezeichnung varchar(128) NOT NULL, + grade int NOT NULL, + modellfunktion_kurzbz character varying(32) NOT NULL, + aktiv boolean DEFAULT FALSE, + sort smallint, + insertvon character varying(32) NOT NULL, + insertamum timestamp without time zone DEFAULT now() NOT NULL, + updatevon character varying(32), + updateamum timestamp without time zone, + CONSTRAINT tbl_lohnguide_modellstelle_pkey PRIMARY KEY (modellstelle_kurzbz), + CONSTRAINT tbl_lohnguide_modellstelle_modellfunktion_fk FOREIGN KEY (modellfunktion_kurzbz) REFERENCES hr.tbl_lohnguide_modellfunktion (modellfunktion_kurzbz) MATCH FULL ON DELETE RESTRICT ON UPDATE CASCADE +); + +GRANT SELECT,INSERT,DELETE,UPDATE ON TABLE hr.tbl_lohnguide_modellstelle TO vilesci; + +INSERT INTO hr.tbl_lohnguide_modellstelle(modellstelle_kurzbz, bezeichnung, grade, modellfunktion_kurzbz, aktiv, sort, insertvon, insertamum) VALUES('111','Führung III 1/5',9,'FÜHRUNG_III',true,13,'system',NOW()) ON CONFLICT (modellstelle_kurzbz) DO NOTHING; +INSERT INTO hr.tbl_lohnguide_modellstelle(modellstelle_kurzbz, bezeichnung, grade, modellfunktion_kurzbz, aktiv, sort, insertvon, insertamum) VALUES('112','Führung III 2/5',10,'FÜHRUNG_III',true,14,'system',NOW()) ON CONFLICT (modellstelle_kurzbz) DO NOTHING; +INSERT INTO hr.tbl_lohnguide_modellstelle(modellstelle_kurzbz, bezeichnung, grade, modellfunktion_kurzbz, aktiv, sort, insertvon, insertamum) VALUES('113','Führung III 3/5',11,'FÜHRUNG_III',true,15,'system',NOW()) ON CONFLICT (modellstelle_kurzbz) DO NOTHING; +INSERT INTO hr.tbl_lohnguide_modellstelle(modellstelle_kurzbz, bezeichnung, grade, modellfunktion_kurzbz, aktiv, sort, insertvon, insertamum) VALUES('114','Führung III 4/5',12,'FÜHRUNG_III',true,16,'system',NOW()) ON CONFLICT (modellstelle_kurzbz) DO NOTHING; +INSERT INTO hr.tbl_lohnguide_modellstelle(modellstelle_kurzbz, bezeichnung, grade, modellfunktion_kurzbz, aktiv, sort, insertvon, insertamum) VALUES('115','Führung III 5/5',13,'FÜHRUNG_III',true,17,'system',NOW()) ON CONFLICT (modellstelle_kurzbz) DO NOTHING; +INSERT INTO hr.tbl_lohnguide_modellstelle(modellstelle_kurzbz, bezeichnung, grade, modellfunktion_kurzbz, aktiv, sort, insertvon, insertamum) VALUES('121','Führung II 1/4',14,'FÜHRUNG_II',true,7,'system',NOW()) ON CONFLICT (modellstelle_kurzbz) DO NOTHING; +INSERT INTO hr.tbl_lohnguide_modellstelle(modellstelle_kurzbz, bezeichnung, grade, modellfunktion_kurzbz, aktiv, sort, insertvon, insertamum) VALUES('122a','Führung II 2a/4',15,'FÜHRUNG_II',true,8,'system',NOW()) ON CONFLICT (modellstelle_kurzbz) DO NOTHING; +INSERT INTO hr.tbl_lohnguide_modellstelle(modellstelle_kurzbz, bezeichnung, grade, modellfunktion_kurzbz, aktiv, sort, insertvon, insertamum) VALUES('122b','Führung II 2b/4',15,'FÜHRUNG_II',true,9,'system',NOW()) ON CONFLICT (modellstelle_kurzbz) DO NOTHING; +INSERT INTO hr.tbl_lohnguide_modellstelle(modellstelle_kurzbz, bezeichnung, grade, modellfunktion_kurzbz, aktiv, sort, insertvon, insertamum) VALUES('123a','Führung II 3a/4',16,'FÜHRUNG_II',true,10,'system',NOW()) ON CONFLICT (modellstelle_kurzbz) DO NOTHING; +INSERT INTO hr.tbl_lohnguide_modellstelle(modellstelle_kurzbz, bezeichnung, grade, modellfunktion_kurzbz, aktiv, sort, insertvon, insertamum) VALUES('123b','Führung II 3b/4',16,'FÜHRUNG_II',true,11,'system',NOW()) ON CONFLICT (modellstelle_kurzbz) DO NOTHING; +INSERT INTO hr.tbl_lohnguide_modellstelle(modellstelle_kurzbz, bezeichnung, grade, modellfunktion_kurzbz, aktiv, sort, insertvon, insertamum) VALUES('124','Führung II 4/4',17,'FÜHRUNG_II',true,12,'system',NOW()) ON CONFLICT (modellstelle_kurzbz) DO NOTHING; +INSERT INTO hr.tbl_lohnguide_modellstelle(modellstelle_kurzbz, bezeichnung, grade, modellfunktion_kurzbz, aktiv, sort, insertvon, insertamum) VALUES('131','Führung I 1/4',18,'FÜHRUNG_I',true,1,'system',NOW()) ON CONFLICT (modellstelle_kurzbz) DO NOTHING; +INSERT INTO hr.tbl_lohnguide_modellstelle(modellstelle_kurzbz, bezeichnung, grade, modellfunktion_kurzbz, aktiv, sort, insertvon, insertamum) VALUES('132a','Führung I 2a/4',19,'FÜHRUNG_I',true,2,'system',NOW()) ON CONFLICT (modellstelle_kurzbz) DO NOTHING; +INSERT INTO hr.tbl_lohnguide_modellstelle(modellstelle_kurzbz, bezeichnung, grade, modellfunktion_kurzbz, aktiv, sort, insertvon, insertamum) VALUES('132b','Führung I 2b/4',19,'FÜHRUNG_I',true,3,'system',NOW()) ON CONFLICT (modellstelle_kurzbz) DO NOTHING; +INSERT INTO hr.tbl_lohnguide_modellstelle(modellstelle_kurzbz, bezeichnung, grade, modellfunktion_kurzbz, aktiv, sort, insertvon, insertamum) VALUES('133a','Führung I 3a/4',20,'FÜHRUNG_I',true,4,'system',NOW()) ON CONFLICT (modellstelle_kurzbz) DO NOTHING; +INSERT INTO hr.tbl_lohnguide_modellstelle(modellstelle_kurzbz, bezeichnung, grade, modellfunktion_kurzbz, aktiv, sort, insertvon, insertamum) VALUES('133b','Führung I 3b/4',20,'FÜHRUNG_I',true,5,'system',NOW()) ON CONFLICT (modellstelle_kurzbz) DO NOTHING; +INSERT INTO hr.tbl_lohnguide_modellstelle(modellstelle_kurzbz, bezeichnung, grade, modellfunktion_kurzbz, aktiv, sort, insertvon, insertamum) VALUES('134','Führung I 4/4',21,'FÜHRUNG_I',true,6,'system',NOW()) ON CONFLICT (modellstelle_kurzbz) DO NOTHING; + +-- GF +INSERT INTO hr.tbl_lohnguide_modellstelle(modellstelle_kurzbz, bezeichnung, grade, modellfunktion_kurzbz, aktiv, sort, insertvon, insertamum) VALUES('141','Geschäftsführung 1/5',22,'GF',true,18,'system',NOW()) ON CONFLICT (modellstelle_kurzbz) DO NOTHING; +INSERT INTO hr.tbl_lohnguide_modellstelle(modellstelle_kurzbz, bezeichnung, grade, modellfunktion_kurzbz, aktiv, sort, insertvon, insertamum) VALUES('142a','Geschäftsführung 2a/5',23,'GF',true,19,'system',NOW()) ON CONFLICT (modellstelle_kurzbz) DO NOTHING; +INSERT INTO hr.tbl_lohnguide_modellstelle(modellstelle_kurzbz, bezeichnung, grade, modellfunktion_kurzbz, aktiv, sort, insertvon, insertamum) VALUES('142b','Geschäftsführung 2b/5',23,'GF',true,20,'system',NOW()) ON CONFLICT (modellstelle_kurzbz) DO NOTHING; +INSERT INTO hr.tbl_lohnguide_modellstelle(modellstelle_kurzbz, bezeichnung, grade, modellfunktion_kurzbz, aktiv, sort, insertvon, insertamum) VALUES('143a','Geschäftsführung 3a/5',24,'GF',true,21,'system',NOW()) ON CONFLICT (modellstelle_kurzbz) DO NOTHING; +INSERT INTO hr.tbl_lohnguide_modellstelle(modellstelle_kurzbz, bezeichnung, grade, modellfunktion_kurzbz, aktiv, sort, insertvon, insertamum) VALUES('143b','Geschäftsführung 3b/5',24,'GF',true,22,'system',NOW()) ON CONFLICT (modellstelle_kurzbz) DO NOTHING; +INSERT INTO hr.tbl_lohnguide_modellstelle(modellstelle_kurzbz, bezeichnung, grade, modellfunktion_kurzbz, aktiv, sort, insertvon, insertamum) VALUES('144a','Geschäftsführung 4a/5',25,'GF',true,23,'system',NOW()) ON CONFLICT (modellstelle_kurzbz) DO NOTHING; +INSERT INTO hr.tbl_lohnguide_modellstelle(modellstelle_kurzbz, bezeichnung, grade, modellfunktion_kurzbz, aktiv, sort, insertvon, insertamum) VALUES('144b','Geschäftsführung 4b/5',25,'GF',true,24,'system',NOW()) ON CONFLICT (modellstelle_kurzbz) DO NOTHING; +INSERT INTO hr.tbl_lohnguide_modellstelle(modellstelle_kurzbz, bezeichnung, grade, modellfunktion_kurzbz, aktiv, sort, insertvon, insertamum) VALUES('145','Geschäftsführung 5/5',26,'GF',true,25,'system',NOW()) ON CONFLICT (modellstelle_kurzbz) DO NOTHING; + +-- Allgemein +INSERT INTO hr.tbl_lohnguide_modellstelle(modellstelle_kurzbz, bezeichnung, grade, modellfunktion_kurzbz, aktiv, sort, insertvon, insertamum) VALUES('211','Fachkraft Allgemein 1/3',4,'FK_ALLGM',true,26,'system',NOW()) ON CONFLICT (modellstelle_kurzbz) DO NOTHING; +INSERT INTO hr.tbl_lohnguide_modellstelle(modellstelle_kurzbz, bezeichnung, grade, modellfunktion_kurzbz, aktiv, sort, insertvon, insertamum) VALUES('212a','Fachkraft Allgemein 2a/3',5,'FK_ALLGM',true,27,'system',NOW()) ON CONFLICT (modellstelle_kurzbz) DO NOTHING; +INSERT INTO hr.tbl_lohnguide_modellstelle(modellstelle_kurzbz, bezeichnung, grade, modellfunktion_kurzbz, aktiv, sort, insertvon, insertamum) VALUES('212b','Fachkraft Allgemein 2b/3',5,'FK_ALLGM',true,28,'system',NOW()) ON CONFLICT (modellstelle_kurzbz) DO NOTHING; +INSERT INTO hr.tbl_lohnguide_modellstelle(modellstelle_kurzbz, bezeichnung, grade, modellfunktion_kurzbz, aktiv, sort, insertvon, insertamum) VALUES('213','Fachkraft Allgemein 3/3',6,'FK_ALLGM',true,29,'system',NOW()) ON CONFLICT (modellstelle_kurzbz) DO NOTHING; +INSERT INTO hr.tbl_lohnguide_modellstelle(modellstelle_kurzbz, bezeichnung, grade, modellfunktion_kurzbz, aktiv, sort, insertvon, insertamum) VALUES('221','Spezial-Fachkraft Allgemein 1/4', 7,'SFK_ALLGM',true,30,'system',NOW()) ON CONFLICT (modellstelle_kurzbz) DO NOTHING; +INSERT INTO hr.tbl_lohnguide_modellstelle(modellstelle_kurzbz, bezeichnung, grade, modellfunktion_kurzbz, aktiv, sort, insertvon, insertamum) VALUES('222a','Spezial-Fachkraft Allgemein 2a/4',8,'SFK_ALLGM',true,31,'system',NOW()) ON CONFLICT (modellstelle_kurzbz) DO NOTHING; +INSERT INTO hr.tbl_lohnguide_modellstelle(modellstelle_kurzbz, bezeichnung, grade, modellfunktion_kurzbz, aktiv, sort, insertvon, insertamum) VALUES('222b','Spezial-Fachkraft Allgemein 2b/4',8,'SFK_ALLGM',true,32,'system',NOW()) ON CONFLICT (modellstelle_kurzbz) DO NOTHING; +INSERT INTO hr.tbl_lohnguide_modellstelle(modellstelle_kurzbz, bezeichnung, grade, modellfunktion_kurzbz, aktiv, sort, insertvon, insertamum) VALUES('223a','Spezial-Fachkraft Allgemein 3a/4',9,'SFK_ALLGM',true,33,'system',NOW()) ON CONFLICT (modellstelle_kurzbz) DO NOTHING; +INSERT INTO hr.tbl_lohnguide_modellstelle(modellstelle_kurzbz, bezeichnung, grade, modellfunktion_kurzbz, aktiv, sort, insertvon, insertamum) VALUES('223b','Spezial-Fachkraft Allgemein 3b/4',9,'SFK_ALLGM',true,34,'system',NOW()) ON CONFLICT (modellstelle_kurzbz) DO NOTHING; +INSERT INTO hr.tbl_lohnguide_modellstelle(modellstelle_kurzbz, bezeichnung, grade, modellfunktion_kurzbz, aktiv, sort, insertvon, insertamum) VALUES('224','Spezial-Fachkraft Allgemein 4/4',10,'SFK_ALLGM',true,35,'system',NOW()) ON CONFLICT (modellstelle_kurzbz) DO NOTHING; +INSERT INTO hr.tbl_lohnguide_modellstelle(modellstelle_kurzbz, bezeichnung, grade, modellfunktion_kurzbz, aktiv, sort, insertvon, insertamum) VALUES('231','Spezialist:in Allgemein 1/4',11,'SP_ALLGM',true,36,'system',NOW()) ON CONFLICT (modellstelle_kurzbz) DO NOTHING; +INSERT INTO hr.tbl_lohnguide_modellstelle(modellstelle_kurzbz, bezeichnung, grade, modellfunktion_kurzbz, aktiv, sort, insertvon, insertamum) VALUES('232a','Spezialist:in Allgemein 2a/4',12,'SP_ALLGM',true,37,'system',NOW()) ON CONFLICT (modellstelle_kurzbz) DO NOTHING; +INSERT INTO hr.tbl_lohnguide_modellstelle(modellstelle_kurzbz, bezeichnung, grade, modellfunktion_kurzbz, aktiv, sort, insertvon, insertamum) VALUES('232b','Spezialist:in Allgemein 2b/4',12,'SP_ALLGM',true,38,'system',NOW()) ON CONFLICT (modellstelle_kurzbz) DO NOTHING; +INSERT INTO hr.tbl_lohnguide_modellstelle(modellstelle_kurzbz, bezeichnung, grade, modellfunktion_kurzbz, aktiv, sort, insertvon, insertamum) VALUES('233a','Spezialist:in Allgemein 3a/4',13,'SP_ALLGM',true,39,'system',NOW()) ON CONFLICT (modellstelle_kurzbz) DO NOTHING; +INSERT INTO hr.tbl_lohnguide_modellstelle(modellstelle_kurzbz, bezeichnung, grade, modellfunktion_kurzbz, aktiv, sort, insertvon, insertamum) VALUES('233b','Spezialist:in Allgemein 3b/4',13,'SP_ALLGM',true,40,'system',NOW()) ON CONFLICT (modellstelle_kurzbz) DO NOTHING; +INSERT INTO hr.tbl_lohnguide_modellstelle(modellstelle_kurzbz, bezeichnung, grade, modellfunktion_kurzbz, aktiv, sort, insertvon, insertamum) VALUES('234','Spezialist:in Allgemein 4/4',14,'SP_ALLGM',true,41,'system',NOW()) ON CONFLICT (modellstelle_kurzbz) DO NOTHING; +INSERT INTO hr.tbl_lohnguide_modellstelle(modellstelle_kurzbz, bezeichnung, grade, modellfunktion_kurzbz, aktiv, sort, insertvon, insertamum) VALUES('241','Expert:in Allgemein 1/4',15,'EXP_ALLGM',true,42,'system',NOW()) ON CONFLICT (modellstelle_kurzbz) DO NOTHING; +INSERT INTO hr.tbl_lohnguide_modellstelle(modellstelle_kurzbz, bezeichnung, grade, modellfunktion_kurzbz, aktiv, sort, insertvon, insertamum) VALUES('242a','Expert:in Allgemein 2a/4',16,'EXP_ALLGM',true,43,'system',NOW()) ON CONFLICT (modellstelle_kurzbz) DO NOTHING; +INSERT INTO hr.tbl_lohnguide_modellstelle(modellstelle_kurzbz, bezeichnung, grade, modellfunktion_kurzbz, aktiv, sort, insertvon, insertamum) VALUES('242b','Expert:in Allgemein 2b/4',16,'EXP_ALLGM',true,44,'system',NOW()) ON CONFLICT (modellstelle_kurzbz) DO NOTHING; +INSERT INTO hr.tbl_lohnguide_modellstelle(modellstelle_kurzbz, bezeichnung, grade, modellfunktion_kurzbz, aktiv, sort, insertvon, insertamum) VALUES('243a','Expert:in Allgemein 3a/4',17,'EXP_ALLGM',true,45,'system',NOW()) ON CONFLICT (modellstelle_kurzbz) DO NOTHING; +INSERT INTO hr.tbl_lohnguide_modellstelle(modellstelle_kurzbz, bezeichnung, grade, modellfunktion_kurzbz, aktiv, sort, insertvon, insertamum) VALUES('243b','Expert:in Allgemein 3b/4',17,'EXP_ALLGM',true,46,'system',NOW()) ON CONFLICT (modellstelle_kurzbz) DO NOTHING; +INSERT INTO hr.tbl_lohnguide_modellstelle(modellstelle_kurzbz, bezeichnung, grade, modellfunktion_kurzbz, aktiv, sort, insertvon, insertamum) VALUES('244','Expert:in Allgemein 4/4',18,'EXP_ALLGM',true,47,'system',NOW()) ON CONFLICT (modellstelle_kurzbz) DO NOTHING; +INSERT INTO hr.tbl_lohnguide_modellstelle(modellstelle_kurzbz, bezeichnung, grade, modellfunktion_kurzbz, aktiv, sort, insertvon, insertamum) VALUES('251','Top-Expert:in Allgemein 1/1',19,'TOP_EXP_ALLGM',true,48,'system',NOW()) ON CONFLICT (modellstelle_kurzbz) DO NOTHING; + +-- Technik +INSERT INTO hr.tbl_lohnguide_modellstelle(modellstelle_kurzbz, bezeichnung, grade, modellfunktion_kurzbz, aktiv, sort, insertvon, insertamum) VALUES('311','Fachkraft Technik 1/3',4,'FK_TECH',true,49,'system',NOW()) ON CONFLICT (modellstelle_kurzbz) DO NOTHING; +INSERT INTO hr.tbl_lohnguide_modellstelle(modellstelle_kurzbz, bezeichnung, grade, modellfunktion_kurzbz, aktiv, sort, insertvon, insertamum) VALUES('312a','Fachkraft Technik 2a/3',5,'FK_TECH',true,50,'system',NOW()) ON CONFLICT (modellstelle_kurzbz) DO NOTHING; +INSERT INTO hr.tbl_lohnguide_modellstelle(modellstelle_kurzbz, bezeichnung, grade, modellfunktion_kurzbz, aktiv, sort, insertvon, insertamum) VALUES('312b','Fachkraft Technik 2b/3',5,'FK_TECH',true,51,'system',NOW()) ON CONFLICT (modellstelle_kurzbz) DO NOTHING; +INSERT INTO hr.tbl_lohnguide_modellstelle(modellstelle_kurzbz, bezeichnung, grade, modellfunktion_kurzbz, aktiv, sort, insertvon, insertamum) VALUES('313','Fachkraft Technik 3/3',6,'FK_TECH',true,52,'system',NOW()) ON CONFLICT (modellstelle_kurzbz) DO NOTHING; +INSERT INTO hr.tbl_lohnguide_modellstelle(modellstelle_kurzbz, bezeichnung, grade, modellfunktion_kurzbz, aktiv, sort, insertvon, insertamum) VALUES('321','Spezial-Fachkraft Technik 1/4',7,'SFK_TECH',true,53,'system',NOW()) ON CONFLICT (modellstelle_kurzbz) DO NOTHING; +INSERT INTO hr.tbl_lohnguide_modellstelle(modellstelle_kurzbz, bezeichnung, grade, modellfunktion_kurzbz, aktiv, sort, insertvon, insertamum) VALUES('322a','Spezial-Fachkraft Technik 2a/4',8,'SFK_TECH',true,54,'system',NOW()) ON CONFLICT (modellstelle_kurzbz) DO NOTHING; +INSERT INTO hr.tbl_lohnguide_modellstelle(modellstelle_kurzbz, bezeichnung, grade, modellfunktion_kurzbz, aktiv, sort, insertvon, insertamum) VALUES('322b','Spezial-Fachkraft Technik 2b/4',8,'SFK_TECH',true,55,'system',NOW()) ON CONFLICT (modellstelle_kurzbz) DO NOTHING; +INSERT INTO hr.tbl_lohnguide_modellstelle(modellstelle_kurzbz, bezeichnung, grade, modellfunktion_kurzbz, aktiv, sort, insertvon, insertamum) VALUES('323a','Spezial-Fachkraft Technik 3a/4',9,'SFK_TECH',true,56,'system',NOW()) ON CONFLICT (modellstelle_kurzbz) DO NOTHING; +INSERT INTO hr.tbl_lohnguide_modellstelle(modellstelle_kurzbz, bezeichnung, grade, modellfunktion_kurzbz, aktiv, sort, insertvon, insertamum) VALUES('323b','Spezial-Fachkraft Technik 3b/4',9,'SFK_TECH',true,57,'system',NOW()) ON CONFLICT (modellstelle_kurzbz) DO NOTHING; +INSERT INTO hr.tbl_lohnguide_modellstelle(modellstelle_kurzbz, bezeichnung, grade, modellfunktion_kurzbz, aktiv, sort, insertvon, insertamum) VALUES('324','Spezial-Fachkraft Technik 4/4',10,'SFK_TECH',true,58,'system',NOW()) ON CONFLICT (modellstelle_kurzbz) DO NOTHING; +INSERT INTO hr.tbl_lohnguide_modellstelle(modellstelle_kurzbz, bezeichnung, grade, modellfunktion_kurzbz, aktiv, sort, insertvon, insertamum) VALUES('331','Spezialist:in Technik 1/4',11,'SP_TECH',true,59,'system',NOW()) ON CONFLICT (modellstelle_kurzbz) DO NOTHING; +INSERT INTO hr.tbl_lohnguide_modellstelle(modellstelle_kurzbz, bezeichnung, grade, modellfunktion_kurzbz, aktiv, sort, insertvon, insertamum) VALUES('332a','Spezialist:in Technik 2a/4',12,'SP_TECH',true,60,'system',NOW()) ON CONFLICT (modellstelle_kurzbz) DO NOTHING; +INSERT INTO hr.tbl_lohnguide_modellstelle(modellstelle_kurzbz, bezeichnung, grade, modellfunktion_kurzbz, aktiv, sort, insertvon, insertamum) VALUES('332b','Spezialist:in Technik 2b/4',12,'SP_TECH',true,61,'system',NOW()) ON CONFLICT (modellstelle_kurzbz) DO NOTHING; +INSERT INTO hr.tbl_lohnguide_modellstelle(modellstelle_kurzbz, bezeichnung, grade, modellfunktion_kurzbz, aktiv, sort, insertvon, insertamum) VALUES('333a','Spezialist:in Technik 3a/4',13,'SP_TECH',true,62,'system',NOW()) ON CONFLICT (modellstelle_kurzbz) DO NOTHING; +INSERT INTO hr.tbl_lohnguide_modellstelle(modellstelle_kurzbz, bezeichnung, grade, modellfunktion_kurzbz, aktiv, sort, insertvon, insertamum) VALUES('333b','Spezialist:in Technik 3b/4',13,'SP_TECH',true,63,'system',NOW()) ON CONFLICT (modellstelle_kurzbz) DO NOTHING; +INSERT INTO hr.tbl_lohnguide_modellstelle(modellstelle_kurzbz, bezeichnung, grade, modellfunktion_kurzbz, aktiv, sort, insertvon, insertamum) VALUES('334','Spezialist:in Technik 4/4',14,'SP_TECH',true,64,'system',NOW()) ON CONFLICT (modellstelle_kurzbz) DO NOTHING; +INSERT INTO hr.tbl_lohnguide_modellstelle(modellstelle_kurzbz, bezeichnung, grade, modellfunktion_kurzbz, aktiv, sort, insertvon, insertamum) VALUES('341','Expert:in Technik 1/4',15,'EXP_TECH',true,65,'system',NOW()) ON CONFLICT (modellstelle_kurzbz) DO NOTHING; +INSERT INTO hr.tbl_lohnguide_modellstelle(modellstelle_kurzbz, bezeichnung, grade, modellfunktion_kurzbz, aktiv, sort, insertvon, insertamum) VALUES('342a','Expert:in Technik 2a/4',16,'EXP_TECH',true,66,'system',NOW()) ON CONFLICT (modellstelle_kurzbz) DO NOTHING; +INSERT INTO hr.tbl_lohnguide_modellstelle(modellstelle_kurzbz, bezeichnung, grade, modellfunktion_kurzbz, aktiv, sort, insertvon, insertamum) VALUES('342b','Expert:in Technik 2b/4',16,'EXP_TECH',true,67,'system',NOW()) ON CONFLICT (modellstelle_kurzbz) DO NOTHING; +INSERT INTO hr.tbl_lohnguide_modellstelle(modellstelle_kurzbz, bezeichnung, grade, modellfunktion_kurzbz, aktiv, sort, insertvon, insertamum) VALUES('343a','Expert:in Technik 3a/4',17,'EXP_TECH',true,68,'system',NOW()) ON CONFLICT (modellstelle_kurzbz) DO NOTHING; +INSERT INTO hr.tbl_lohnguide_modellstelle(modellstelle_kurzbz, bezeichnung, grade, modellfunktion_kurzbz, aktiv, sort, insertvon, insertamum) VALUES('343b','Expert:in Technik 3b/4',17,'EXP_TECH',true,69,'system',NOW()) ON CONFLICT (modellstelle_kurzbz) DO NOTHING; +INSERT INTO hr.tbl_lohnguide_modellstelle(modellstelle_kurzbz, bezeichnung, grade, modellfunktion_kurzbz, aktiv, sort, insertvon, insertamum) VALUES('344','Expert:in Technik 4/4',18,'EXP_TECH',true,70,'system',NOW()) ON CONFLICT (modellstelle_kurzbz) DO NOTHING; +INSERT INTO hr.tbl_lohnguide_modellstelle(modellstelle_kurzbz, bezeichnung, grade, modellfunktion_kurzbz, aktiv, sort, insertvon, insertamum) VALUES('351','Top-Expert:in Technik 1/1',19,'TOP_EXP_TECH',true,71,'system',NOW()) ON CONFLICT (modellstelle_kurzbz) DO NOTHING; + +-- IT +INSERT INTO hr.tbl_lohnguide_modellstelle(modellstelle_kurzbz, bezeichnung, grade, modellfunktion_kurzbz, aktiv, sort, insertvon, insertamum) VALUES('411','Fachkraft IT 1/2',5,'FK_IT',true,72,'system',NOW()) ON CONFLICT (modellstelle_kurzbz) DO NOTHING; +INSERT INTO hr.tbl_lohnguide_modellstelle(modellstelle_kurzbz, bezeichnung, grade, modellfunktion_kurzbz, aktiv, sort, insertvon, insertamum) VALUES('412','Fachkraft IT 2/2',6,'FK_IT',true,73,'system',NOW()) ON CONFLICT (modellstelle_kurzbz) DO NOTHING; +INSERT INTO hr.tbl_lohnguide_modellstelle(modellstelle_kurzbz, bezeichnung, grade, modellfunktion_kurzbz, aktiv, sort, insertvon, insertamum) VALUES('421','Spezial-Fachkraft IT 1/4',7,'SFK_IT',true,74,'system',NOW()) ON CONFLICT (modellstelle_kurzbz) DO NOTHING; +INSERT INTO hr.tbl_lohnguide_modellstelle(modellstelle_kurzbz, bezeichnung, grade, modellfunktion_kurzbz, aktiv, sort, insertvon, insertamum) VALUES('422','Spezial-Fachkraft IT 2/4',8,'SFK_IT',true,75,'system',NOW()) ON CONFLICT (modellstelle_kurzbz) DO NOTHING; +INSERT INTO hr.tbl_lohnguide_modellstelle(modellstelle_kurzbz, bezeichnung, grade, modellfunktion_kurzbz, aktiv, sort, insertvon, insertamum) VALUES('423','Spezial-Fachkraft IT 3/4',9,'SFK_IT',true,76,'system',NOW()) ON CONFLICT (modellstelle_kurzbz) DO NOTHING; +INSERT INTO hr.tbl_lohnguide_modellstelle(modellstelle_kurzbz, bezeichnung, grade, modellfunktion_kurzbz, aktiv, sort, insertvon, insertamum) VALUES('424','Spezial-Fachkraft IT 4/4',10,'SFK_IT',true,77,'system',NOW()) ON CONFLICT (modellstelle_kurzbz) DO NOTHING; +INSERT INTO hr.tbl_lohnguide_modellstelle(modellstelle_kurzbz, bezeichnung, grade, modellfunktion_kurzbz, aktiv, sort, insertvon, insertamum) VALUES('431','Spezialist:in IT 1/4',11,'SP_IT',true,78,'system',NOW()) ON CONFLICT (modellstelle_kurzbz) DO NOTHING; +INSERT INTO hr.tbl_lohnguide_modellstelle(modellstelle_kurzbz, bezeichnung, grade, modellfunktion_kurzbz, aktiv, sort, insertvon, insertamum) VALUES('432a','Spezialist:in IT 2a/4',12,'SP_IT',true,79,'system',NOW()) ON CONFLICT (modellstelle_kurzbz) DO NOTHING; +INSERT INTO hr.tbl_lohnguide_modellstelle(modellstelle_kurzbz, bezeichnung, grade, modellfunktion_kurzbz, aktiv, sort, insertvon, insertamum) VALUES('432b','Spezialist:in IT 2b/4',12,'SP_IT',true,80,'system',NOW()) ON CONFLICT (modellstelle_kurzbz) DO NOTHING; +INSERT INTO hr.tbl_lohnguide_modellstelle(modellstelle_kurzbz, bezeichnung, grade, modellfunktion_kurzbz, aktiv, sort, insertvon, insertamum) VALUES('433a','Spezialist:in IT 3a/4',13,'SP_IT',true,81,'system',NOW()) ON CONFLICT (modellstelle_kurzbz) DO NOTHING; +INSERT INTO hr.tbl_lohnguide_modellstelle(modellstelle_kurzbz, bezeichnung, grade, modellfunktion_kurzbz, aktiv, sort, insertvon, insertamum) VALUES('433b','Spezialist:in IT 3b/4',13,'SP_IT',true,82,'system',NOW()) ON CONFLICT (modellstelle_kurzbz) DO NOTHING; +INSERT INTO hr.tbl_lohnguide_modellstelle(modellstelle_kurzbz, bezeichnung, grade, modellfunktion_kurzbz, aktiv, sort, insertvon, insertamum) VALUES('434','Spezialist:in IT 4/4',14,'SP_IT',true,83,'system',NOW()) ON CONFLICT (modellstelle_kurzbz) DO NOTHING; +INSERT INTO hr.tbl_lohnguide_modellstelle(modellstelle_kurzbz, bezeichnung, grade, modellfunktion_kurzbz, aktiv, sort, insertvon, insertamum) VALUES('441','Expert:in IT 1/4',15,'EXP_IT',true,84,'system',NOW()) ON CONFLICT (modellstelle_kurzbz) DO NOTHING; +INSERT INTO hr.tbl_lohnguide_modellstelle(modellstelle_kurzbz, bezeichnung, grade, modellfunktion_kurzbz, aktiv, sort, insertvon, insertamum) VALUES('442','Expert:in IT 2/4',16,'EXP_IT',true,85,'system',NOW()) ON CONFLICT (modellstelle_kurzbz) DO NOTHING; +INSERT INTO hr.tbl_lohnguide_modellstelle(modellstelle_kurzbz, bezeichnung, grade, modellfunktion_kurzbz, aktiv, sort, insertvon, insertamum) VALUES('443','Expert:in IT 3/4',17,'EXP_IT',true,86,'system',NOW()) ON CONFLICT (modellstelle_kurzbz) DO NOTHING; +INSERT INTO hr.tbl_lohnguide_modellstelle(modellstelle_kurzbz, bezeichnung, grade, modellfunktion_kurzbz, aktiv, sort, insertvon, insertamum) VALUES('444','Expert:in IT 4/4',18,'EXP_IT',true,87,'system',NOW()) ON CONFLICT (modellstelle_kurzbz) DO NOTHING; +INSERT INTO hr.tbl_lohnguide_modellstelle(modellstelle_kurzbz, bezeichnung, grade, modellfunktion_kurzbz, aktiv, sort, insertvon, insertamum) VALUES('451','Top-Expert:in IT 1/1',19,'TOP_EXP_IT',true,88,'system',NOW()) ON CONFLICT (modellstelle_kurzbz) DO NOTHING; + +-- Produktion +INSERT INTO hr.tbl_lohnguide_modellstelle(modellstelle_kurzbz, bezeichnung, grade, modellfunktion_kurzbz, aktiv, sort, insertvon, insertamum) VALUES('511','Hilfskraft Produktion 1/4',1,'HK_PROD',true,89,'system',NOW()) ON CONFLICT (modellstelle_kurzbz) DO NOTHING; +INSERT INTO hr.tbl_lohnguide_modellstelle(modellstelle_kurzbz, bezeichnung, grade, modellfunktion_kurzbz, aktiv, sort, insertvon, insertamum) VALUES('512','Hilfskraft Produktion 2/4',2,'HK_PROD',true,90,'system',NOW()) ON CONFLICT (modellstelle_kurzbz) DO NOTHING; +INSERT INTO hr.tbl_lohnguide_modellstelle(modellstelle_kurzbz, bezeichnung, grade, modellfunktion_kurzbz, aktiv, sort, insertvon, insertamum) VALUES('513','Hilfskraft Produktion 3/4',3,'HK_PROD',true,91,'system',NOW()) ON CONFLICT (modellstelle_kurzbz) DO NOTHING; +INSERT INTO hr.tbl_lohnguide_modellstelle(modellstelle_kurzbz, bezeichnung, grade, modellfunktion_kurzbz, aktiv, sort, insertvon, insertamum) VALUES('514','Hilfskraft Produktion 4/4',4,'HK_PROD',true,92,'system',NOW()) ON CONFLICT (modellstelle_kurzbz) DO NOTHING; +INSERT INTO hr.tbl_lohnguide_modellstelle(modellstelle_kurzbz, bezeichnung, grade, modellfunktion_kurzbz, aktiv, sort, insertvon, insertamum) VALUES('521','Fachkraft Produktion 1/2',5,'FK_PROD',true,93,'system',NOW()) ON CONFLICT (modellstelle_kurzbz) DO NOTHING; +INSERT INTO hr.tbl_lohnguide_modellstelle(modellstelle_kurzbz, bezeichnung, grade, modellfunktion_kurzbz, aktiv, sort, insertvon, insertamum) VALUES('522','Fachkraft Produktion 2/2',6,'FK_PROD',true,94,'system',NOW()) ON CONFLICT (modellstelle_kurzbz) DO NOTHING; +INSERT INTO hr.tbl_lohnguide_modellstelle(modellstelle_kurzbz, bezeichnung, grade, modellfunktion_kurzbz, aktiv, sort, insertvon, insertamum) VALUES('531','Spezial-Fachkraft Produktion 1/4',7,'SFK_PROD',true,95,'system',NOW()) ON CONFLICT (modellstelle_kurzbz) DO NOTHING; +INSERT INTO hr.tbl_lohnguide_modellstelle(modellstelle_kurzbz, bezeichnung, grade, modellfunktion_kurzbz, aktiv, sort, insertvon, insertamum) VALUES('532','Spezial-Fachkraft Produktion 2/4',8,'SFK_PROD',true,96,'system',NOW()) ON CONFLICT (modellstelle_kurzbz) DO NOTHING; +INSERT INTO hr.tbl_lohnguide_modellstelle(modellstelle_kurzbz, bezeichnung, grade, modellfunktion_kurzbz, aktiv, sort, insertvon, insertamum) VALUES('533','Spezial-Fachkraft Produktion 3/4',9,'SFK_PROD',true,97,'system',NOW()) ON CONFLICT (modellstelle_kurzbz) DO NOTHING; +INSERT INTO hr.tbl_lohnguide_modellstelle(modellstelle_kurzbz, bezeichnung, grade, modellfunktion_kurzbz, aktiv, sort, insertvon, insertamum) VALUES('534','Spezial-Fachkraft Produktion 4/4',10,'SFK_PROD',true,98,'system',NOW()) ON CONFLICT (modellstelle_kurzbz) DO NOTHING; +INSERT INTO hr.tbl_lohnguide_modellstelle(modellstelle_kurzbz, bezeichnung, grade, modellfunktion_kurzbz, aktiv, sort, insertvon, insertamum) VALUES('541','Spezialist:in Produktion 1/4',11,'SP_PROD',true,99,'system',NOW()) ON CONFLICT (modellstelle_kurzbz) DO NOTHING; +INSERT INTO hr.tbl_lohnguide_modellstelle(modellstelle_kurzbz, bezeichnung, grade, modellfunktion_kurzbz, aktiv, sort, insertvon, insertamum) VALUES('542a','Spezialist:in Produktion 2a/4',12,'SP_PROD',true,100,'system',NOW()) ON CONFLICT (modellstelle_kurzbz) DO NOTHING; +INSERT INTO hr.tbl_lohnguide_modellstelle(modellstelle_kurzbz, bezeichnung, grade, modellfunktion_kurzbz, aktiv, sort, insertvon, insertamum) VALUES('542b','Spezialist:in Produktion 2b/4',12,'SP_PROD',true,101,'system',NOW()) ON CONFLICT (modellstelle_kurzbz) DO NOTHING; +INSERT INTO hr.tbl_lohnguide_modellstelle(modellstelle_kurzbz, bezeichnung, grade, modellfunktion_kurzbz, aktiv, sort, insertvon, insertamum) VALUES('543a','Spezialist:in Produktion 3a/4',13,'SP_PROD',true,102,'system',NOW()) ON CONFLICT (modellstelle_kurzbz) DO NOTHING; +INSERT INTO hr.tbl_lohnguide_modellstelle(modellstelle_kurzbz, bezeichnung, grade, modellfunktion_kurzbz, aktiv, sort, insertvon, insertamum) VALUES('543b','Spezialist:in Produktion 3b/4',13,'SP_PROD',true,103,'system',NOW()) ON CONFLICT (modellstelle_kurzbz) DO NOTHING; +INSERT INTO hr.tbl_lohnguide_modellstelle(modellstelle_kurzbz, bezeichnung, grade, modellfunktion_kurzbz, aktiv, sort, insertvon, insertamum) VALUES('544','Spezialist:in Produktion 4/4',14,'SP_PROD',true,104,'system',NOW()) ON CONFLICT (modellstelle_kurzbz) DO NOTHING; + +-- Handwerk, Logistik, .. +INSERT INTO hr.tbl_lohnguide_modellstelle(modellstelle_kurzbz, bezeichnung, grade, modellfunktion_kurzbz, aktiv, sort, insertvon, insertamum) VALUES('611','Hilfskraft Handwerk, Instandhaltung + Logistik 1/4',1,'HK_HIL',true,105,'system',NOW()) ON CONFLICT (modellstelle_kurzbz) DO NOTHING; +INSERT INTO hr.tbl_lohnguide_modellstelle(modellstelle_kurzbz, bezeichnung, grade, modellfunktion_kurzbz, aktiv, sort, insertvon, insertamum) VALUES('612','Hilfskraft Handwerk, Instandhaltung + Logistik 2/4',2,'HK_HIL',true,106,'system',NOW()) ON CONFLICT (modellstelle_kurzbz) DO NOTHING; +INSERT INTO hr.tbl_lohnguide_modellstelle(modellstelle_kurzbz, bezeichnung, grade, modellfunktion_kurzbz, aktiv, sort, insertvon, insertamum) VALUES('613','Hilfskraft Handwerk, Instandhaltung + Logistik 3/4',3,'HK_HIL',true,107,'system',NOW()) ON CONFLICT (modellstelle_kurzbz) DO NOTHING; +INSERT INTO hr.tbl_lohnguide_modellstelle(modellstelle_kurzbz, bezeichnung, grade, modellfunktion_kurzbz, aktiv, sort, insertvon, insertamum) VALUES('614','Hilfskraft Handwerk, Instandhaltung + Logistik 4/4',4,'HK_HIL',true,108,'system',NOW()) ON CONFLICT (modellstelle_kurzbz) DO NOTHING; +INSERT INTO hr.tbl_lohnguide_modellstelle(modellstelle_kurzbz, bezeichnung, grade, modellfunktion_kurzbz, aktiv, sort, insertvon, insertamum) VALUES('621','Fachkraft Handwerk, Instandhaltung + Logistik 1/2',5,'FK_HIL',true,109,'system',NOW()) ON CONFLICT (modellstelle_kurzbz) DO NOTHING; +INSERT INTO hr.tbl_lohnguide_modellstelle(modellstelle_kurzbz, bezeichnung, grade, modellfunktion_kurzbz, aktiv, sort, insertvon, insertamum) VALUES('622','Fachkraft Handwerk, Instandhaltung + Logistik 2/2',6,'FK_HIL',true,110,'system',NOW()) ON CONFLICT (modellstelle_kurzbz) DO NOTHING; +INSERT INTO hr.tbl_lohnguide_modellstelle(modellstelle_kurzbz, bezeichnung, grade, modellfunktion_kurzbz, aktiv, sort, insertvon, insertamum) VALUES('631','Spezial-Fachkraft Handwerk, Instandhaltung + Logistik 1/4',7,'SFK_HIL',true,111,'system',NOW()) ON CONFLICT (modellstelle_kurzbz) DO NOTHING; +INSERT INTO hr.tbl_lohnguide_modellstelle(modellstelle_kurzbz, bezeichnung, grade, modellfunktion_kurzbz, aktiv, sort, insertvon, insertamum) VALUES('632','Spezial-Fachkraft Handwerk, Instandhaltung + Logistik 2/4',8,'SFK_HIL',true,112,'system',NOW()) ON CONFLICT (modellstelle_kurzbz) DO NOTHING; +INSERT INTO hr.tbl_lohnguide_modellstelle(modellstelle_kurzbz, bezeichnung, grade, modellfunktion_kurzbz, aktiv, sort, insertvon, insertamum) VALUES('633','Spezial-Fachkraft Handwerk, Instandhaltung + Logistik 3/4',9,'SFK_HIL',true,113,'system',NOW()) ON CONFLICT (modellstelle_kurzbz) DO NOTHING; +INSERT INTO hr.tbl_lohnguide_modellstelle(modellstelle_kurzbz, bezeichnung, grade, modellfunktion_kurzbz, aktiv, sort, insertvon, insertamum) VALUES('634','Spezial-Fachkraft Handwerk, Instandhaltung + Logistik 4/4',10,'SFK_HIL',true,114,'system',NOW()) ON CONFLICT (modellstelle_kurzbz) DO NOTHING; + + "; + + if (! $db->db_query($qry)) + echo 'Lohnguide Modellstelle: ' . $db->db_last_error() . '
'; + else + echo 'hr.tbl_lohnguide_modellstelle wurde neu erstellt
'; + } +} + +if ($result = $db->db_query("SELECT * FROM information_schema.tables WHERE table_name='tbl_lohnguide_fachrichtung' AND table_schema='hr'")) +{ + if ($db->db_num_rows($result) == 0) + { + $qry = " +CREATE TABLE IF NOT EXISTS hr.tbl_lohnguide_fachrichtung ( + fachrichtung_kurzbz character varying(32) NOT NULL, + bezeichnung varchar(32) NOT NULL, + aktiv boolean DEFAULT FALSE, + insertvon character varying(32) NOT NULL, + insertamum timestamp without time zone DEFAULT now() NOT NULL, + updatevon character varying(32), + updateamum timestamp without time zone, + CONSTRAINT tbl_lohnguide_fachrichtung_pkey PRIMARY KEY (fachrichtung_kurzbz) +); + +GRANT SELECT,INSERT,DELETE,UPDATE ON TABLE hr.tbl_lohnguide_fachrichtung TO vilesci; + +INSERT INTO hr.tbl_lohnguide_fachrichtung(fachrichtung_kurzbz,bezeichnung,aktiv,insertvon,insertamum) VALUES +('FA00','Keine Berücksichtigung',true,'system',NOW()), +('FA01','Administration allgemein',true,'system',NOW()), +('FA02','Dienste Infrastruktur',true,'system',NOW()), +('FA03','Finanzwesen & Controlling',true,'system',NOW()), +('FA04','IT',true,'system',NOW()), +('FA05','Logistik',true,'system',NOW()), +('FA06','Marketing & Digitales Marketing',true,'system',NOW()), +('FA07','Produktion',true,'system',NOW()), +('FA08','Technik',true,'system',NOW()), +('FA09','Verkauf',true,'system',NOW()) +ON CONFLICT (fachrichtung_kurzbz) DO NOTHING; + + "; + + if (! $db->db_query($qry)) + echo 'Lohnguide Fachrichtung: ' . $db->db_last_error() . '
'; + else + echo 'hr.tbl_lohnguide_fachrichtung wurde neu erstellt
'; + } +} + + + +if ($result = $db->db_query("SELECT * FROM information_schema.tables WHERE table_name='tbl_vertragsbestandteil_lohnguide' AND table_schema='hr'")) +{ + if ($db->db_num_rows($result) == 0) + { + $qry = " +CREATE TABLE IF NOT EXISTS hr.tbl_vertragsbestandteil_lohnguide ( + vertragsbestandteil_id integer NOT NULL, + stellenbezeichnung varchar(255), + fachrichtung_kurzbz character varying(32) NOT NULL, + modellstelle_kurzbz character varying(32) NOT NULL, + kommentar_person varchar(255), + kommentar_modellstelle varchar(255), + CONSTRAINT tbl_vertragsbestandteil_lohnguide_pk PRIMARY KEY (vertragsbestandteil_id), + CONSTRAINT tbl_vertragsbestandteil_fk FOREIGN KEY (vertragsbestandteil_id) REFERENCES hr.tbl_vertragsbestandteil (vertragsbestandteil_id) MATCH FULL ON DELETE RESTRICT ON UPDATE CASCADE, + CONSTRAINT tbl_vertragsbestandteil_lohnguide_fachrichtung_fk FOREIGN KEY (fachrichtung_kurzbz) REFERENCES hr.tbl_lohnguide_fachrichtung (fachrichtung_kurzbz) MATCH FULL ON DELETE RESTRICT ON UPDATE CASCADE, + CONSTRAINT tbl_vertragsbestandteil_modellstelle_fachrichtung_fk FOREIGN KEY (modellstelle_kurzbz) REFERENCES hr.tbl_lohnguide_modellstelle (modellstelle_kurzbz) MATCH FULL ON DELETE RESTRICT ON UPDATE CASCADE +); + +COMMENT ON TABLE hr.tbl_vertragsbestandteil_lohnguide IS E'Zuordnung für EU-Entgelttransparenzrichtlinie'; + +GRANT SELECT,INSERT,DELETE,UPDATE ON TABLE hr.tbl_vertragsbestandteil_lohnguide TO vilesci; + + + "; + + if (! $db->db_query($qry)) + echo 'Vertragsbestandteil Lohnguide: ' . $db->db_last_error() . '
'; + else + echo 'hr.tbl_vertragsbestandteil_lohnguide wurde neu erstellt
'; + } +} + \ No newline at end of file From 5fbcf588ed8a975250098212e925fb7f87d4b48e Mon Sep 17 00:00:00 2001 From: Werner Masik Date: Thu, 5 Mar 2026 14:29:56 +0100 Subject: [PATCH 06/39] fix vertragsbestandteil lohnguide --- .../VertragsbestandteilFactory.php | 1 + .../VertragsbestandteilLib.php | 1 + .../VertragsbestandteilLohnguide.php | 19 +++++++++++-------- system/dbupdate_3.4/70376_lohnguide.php | 13 +++++++++++++ 4 files changed, 26 insertions(+), 8 deletions(-) diff --git a/application/libraries/vertragsbestandteil/VertragsbestandteilFactory.php b/application/libraries/vertragsbestandteil/VertragsbestandteilFactory.php index 2a7955a45..50504099a 100644 --- a/application/libraries/vertragsbestandteil/VertragsbestandteilFactory.php +++ b/application/libraries/vertragsbestandteil/VertragsbestandteilFactory.php @@ -3,6 +3,7 @@ namespace vertragsbestandteil; use Exception; use vertragsbestandteil\VertragsbestandteilStunden; +use vertragsbestandteil\VertragsbestandteilLohnguide; /** * Description of VertragsbestandteilFactory diff --git a/application/libraries/vertragsbestandteil/VertragsbestandteilLib.php b/application/libraries/vertragsbestandteil/VertragsbestandteilLib.php index 1ecb9ac60..61208eda0 100644 --- a/application/libraries/vertragsbestandteil/VertragsbestandteilLib.php +++ b/application/libraries/vertragsbestandteil/VertragsbestandteilLib.php @@ -10,6 +10,7 @@ require_once __DIR__ . '/VertragsbestandteilKuendigungsfrist.php'; require_once __DIR__ . '/VertragsbestandteilUrlaubsanspruch.php'; require_once __DIR__ . '/VertragsbestandteilFreitext.php'; require_once __DIR__ . '/VertragsbestandteilKarenz.php'; +require_once __DIR__ . '/VertragsbestandteilLohnguide.php'; require_once __DIR__ . '/VertragsbestandteilFactory.php'; require_once __DIR__ . '/OverlapChecker.php'; diff --git a/application/libraries/vertragsbestandteil/VertragsbestandteilLohnguide.php b/application/libraries/vertragsbestandteil/VertragsbestandteilLohnguide.php index ef87e35e9..5a61cc5db 100644 --- a/application/libraries/vertragsbestandteil/VertragsbestandteilLohnguide.php +++ b/application/libraries/vertragsbestandteil/VertragsbestandteilLohnguide.php @@ -12,6 +12,14 @@ class VertragsbestandteilLohnguide extends Vertragsbestandteil protected $kommentar_person; protected $kommentar_modellstelle; + + public function __construct() + { + parent::__construct(); + $this->setVertragsbestandteiltyp_kurzbz( + VertragsbestandteilFactory::VERTRAGSBESTANDTEIL_LOHNGUIDE); + } + public function getStellenbezeichnung() { return $this->stellenbezeichnung; @@ -73,12 +81,7 @@ class VertragsbestandteilLohnguide extends Vertragsbestandteil } - public function __construct() - { - parent::__construct(); - $this->setVertragsbestandteiltyp_kurzbz( - VertragsbestandteilFactory::VERTRAGSBESTANDTEIL_LOHNGUIDE); - } + public function hydrateByStdClass($data, $fromdb=false) { @@ -97,8 +100,8 @@ class VertragsbestandteilLohnguide extends Vertragsbestandteil $tmp = array( 'vertragsbestandteil_id' => $this->getVertragsbestandteil_id(), 'stellenbezeichnung' => $this->getStellenbezeichnung(), - 'fachrichtung' => $this->getFachrichtung_kurzbz(), - 'modellstelle' => $this->getModellstelle_kurzbz(), + 'fachrichtung_kurzbz' => $this->getFachrichtung_kurzbz(), + 'modellstelle_kurzbz' => $this->getModellstelle_kurzbz(), 'kommentar_person' => $this->getKommentar_person(), 'kommentar_modellstelle' => $this->getKommentar_modellstelle(), ); diff --git a/system/dbupdate_3.4/70376_lohnguide.php b/system/dbupdate_3.4/70376_lohnguide.php index f99d6acd8..33052023a 100644 --- a/system/dbupdate_3.4/70376_lohnguide.php +++ b/system/dbupdate_3.4/70376_lohnguide.php @@ -334,4 +334,17 @@ GRANT SELECT,INSERT,DELETE,UPDATE ON TABLE hr.tbl_vertragsbestandteil_lohnguide echo 'hr.tbl_vertragsbestandteil_lohnguide wurde neu erstellt
'; } } + +if($result = $db->db_query("SELECT 1 FROM hr.tbl_vertragsbestandteiltyp WHERE vertragsbestandteiltyp_kurzbz = 'lohnguide'")) +{ + if($db->db_num_rows($result) === 0) + { + $qry = "insert into hr.tbl_vertragsbestandteiltyp (vertragsbestandteiltyp_kurzbz,bezeichnung,ueberlappend) values('lohnguide','Lohnguide',false)"; + + if(!$db->db_query($qry)) + echo 'Public Tabelle person: '.$db->db_last_error().'
'; + else + echo "
Vertragsbestandteiltyp 'lohnguide' hinzugefuegt"; + } +} \ No newline at end of file From 6b816def3107fa7d782e0ec16603011f12fa1035 Mon Sep 17 00:00:00 2001 From: Werner Masik Date: Thu, 5 Mar 2026 15:34:51 +0100 Subject: [PATCH 07/39] add lohnguide to vertragsbestandteil SQL --- .../models/vertragsbestandteil/Vertragsbestandteil_model.php | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/application/models/vertragsbestandteil/Vertragsbestandteil_model.php b/application/models/vertragsbestandteil/Vertragsbestandteil_model.php index ce741268d..fe6823293 100644 --- a/application/models/vertragsbestandteil/Vertragsbestandteil_model.php +++ b/application/models/vertragsbestandteil/Vertragsbestandteil_model.php @@ -37,7 +37,8 @@ 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, + lg.stellenbezeichnung, lg.fachrichtung_kurzbz, lg.modellstelle_kurzbz, lg.kommentar_person, lg.kommentar_modellstelle FROM hr.tbl_vertragsbestandteil v LEFT JOIN @@ -63,6 +64,8 @@ class Vertragsbestandteil_model extends DB_Model hr.tbl_vertragsbestandteil_urlaubsanspruch u USING(vertragsbestandteil_id) LEFT JOIN hr.tbl_vertragsbestandteil_zeitaufzeichnung z USING(vertragsbestandteil_id) + LEFT JOIN + hr.tbl_vertragsbestandteil_lohnguide lg USING(vertragsbestandteil_id) EOSQL; return $sql; } From 298dbbf400ba7301f6e664446ccfeb3e52c7c0b4 Mon Sep 17 00:00:00 2001 From: ma0068 Date: Thu, 2 Apr 2026 10:58:49 +0200 Subject: [PATCH 08/39] use context vm for tabulator event, refactor function toggleRowClick, delete unused commented sections --- public/js/components/Vertraege/Vertraege.js | 142 +++----------------- 1 file changed, 15 insertions(+), 127 deletions(-) diff --git a/public/js/components/Vertraege/Vertraege.js b/public/js/components/Vertraege/Vertraege.js index d4d65e428..30dc593c7 100644 --- a/public/js/components/Vertraege/Vertraege.js +++ b/public/js/components/Vertraege/Vertraege.js @@ -20,9 +20,6 @@ export default { ContractStati }, inject: { -/* cisRoot: { - from: 'cisRoot' - },*/ hasSchreibrechte: { from: 'hasSchreibrechte', default: false @@ -145,6 +142,8 @@ export default { return options; }, tabulatorEvents() { + const vm = this; + const events = [ { event: 'tableBuilt', @@ -177,28 +176,11 @@ export default { setHeader('actions', this.$p.t('global', 'aktionen')); } }, -/* { - //is just enabled for ADDON Injection KU: MultiprintHonorarvertrag - //(maybe enable also for ADDON FH Burgenland: MultiAccept later) - event: 'rowClick', - handler: (e, row) => { - if (this.dataPrintHonorar != null && this.dataPrintHonorar.multiselect != null) { - const selectedContract = row.getData().vertrag_id; - const status = row.getData().status; - const bezeichnung = row.getData().bezeichnung; - - this.toggleRowClick(selectedContract, status, bezeichnung); - } - } - },*/ { event: 'rowClick', - handler: (e, row) => { - if (!this.dataPrintHonorar?.multiselect) return; - + handler: function (e, row) { const { vertrag_id, status, bezeichnung, vertragstyp_bezeichnung } = row.getData(); - - this.toggleRowClick(e, vertrag_id, status, bezeichnung, vertragstyp_bezeichnung); + vm.toggleRowClick(e, vertrag_id, status, bezeichnung, vertragstyp_bezeichnung); } }, { @@ -242,8 +224,6 @@ export default { person_id() { this.$refs.table.reloadTable(); this.arraySelectedContracts = []; -/* if(this.dataPrintHonorar?.multiselect) - this.dataPrintHonorar.multiselect = [];*/ }, }, methods: { @@ -270,7 +250,6 @@ export default { ) .then(result => { this.$fhcAlert.alertSuccess(this.$p.t('ui', 'successDelete')); - //window.scrollTo(0, 0); this.reload(); this.contractSelected.vertrag_id = null; }) @@ -518,19 +497,9 @@ export default { 'content/pdfExport.php?xml=' + this.dataPrintHonorar.xml + '&xsl=' + this.dataPrintHonorar.xsl + '&mitarbeiter_uid=' + this.mitarbeiter_uid + vertragString + '&output=pdf&uid=' + this.mitarbeiter_uid; window.open(linkToPdf, '_blank'); }, -/* toggleRowClick(contractId, status, bezeichnung) { - const index = this.arraySelectedContracts.findIndex( - ([id]) => id === contractId - ); - if (index !== -1) { - this.arraySelectedContracts.splice(index, 1); - } else { - this.arraySelectedContracts.push([contractId, status, bezeichnung]); - } - },*/ toggleRowClick(event, vertrag_id, status, bezeichnung, vertragstyp_bezeichnung) { - if (!this.dataPrintHonorar?.multiselect) return; + const isMulti = this.dataPrintHonorar?.multiselect === true; const isCtrl = event.ctrlKey || event.metaKey; const entry = { @@ -540,28 +509,29 @@ export default { vertragstyp_bezeichnung }; - // Single click - if (!isCtrl) { + // allow MultiSelect just in case event multiActionPrintHonorarvertrag + const allowMultiClick = isMulti && isCtrl; + + if (!allowMultiClick) { this.arraySelectedContracts = [entry]; + + //just mark last selected row as selected + this.$refs.table.tabulator.deselectRow(); + this.$refs.table.tabulator.selectRow(vertrag_id); return; } - // CTRL / CMD → toggle const index = this.arraySelectedContracts.findIndex( e => e.vertrag_id === vertrag_id ); if (index === -1) { this.arraySelectedContracts.push(entry); - //this.arraySelectedContracts.push([entry.vertrag_id, entry.status, entry.bezeichnung, entry.vertragstyp_bezeichnung]); } else { this.arraySelectedContracts.splice(index, 1); } - }, -/* clearSelection(){ - this.arraySelectedContracts = []; - this.$refs.table.tabulator.deselectRow(); - }*/ + + } }, created() { Promise.all([ @@ -587,88 +557,6 @@ export default { }); this.getFormattedDate(); }, - /* - TODO(Manu) delete after check - -
- - -
- -
- - -
-
- - - - -
-
- - -
-
- - -
-
- - -
-
- - -
- */ template: `
From 423bbd95a68885b751cf444ac4c474fa0fef106b Mon Sep 17 00:00:00 2001 From: Werner Masik Date: Mon, 6 Apr 2026 19:30:32 +0200 Subject: [PATCH 09/39] add vordienstzeit to lohnguide --- system/dbupdate_3.4/70376_lohnguide.php | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/system/dbupdate_3.4/70376_lohnguide.php b/system/dbupdate_3.4/70376_lohnguide.php index 33052023a..61486b10d 100644 --- a/system/dbupdate_3.4/70376_lohnguide.php +++ b/system/dbupdate_3.4/70376_lohnguide.php @@ -310,6 +310,7 @@ if ($result = $db->db_query("SELECT * FROM information_schema.tables WHERE table $qry = " CREATE TABLE IF NOT EXISTS hr.tbl_vertragsbestandteil_lohnguide ( vertragsbestandteil_id integer NOT NULL, + vordienstzeit int, stellenbezeichnung varchar(255), fachrichtung_kurzbz character varying(32) NOT NULL, modellstelle_kurzbz character varying(32) NOT NULL, @@ -347,4 +348,23 @@ if($result = $db->db_query("SELECT 1 FROM hr.tbl_vertragsbestandteiltyp WHERE ve echo "
Vertragsbestandteiltyp 'lohnguide' hinzugefuegt"; } } + + +if ($result = $db->db_query("SELECT * FROM information_schema.columns WHERE column_name='vordienstzeit' AND table_name='tbl_vertragsbestandteil_lohnguide' AND table_schema='hr'")) +{ + if ($db->db_num_rows($result) == 0) + { + $qry = " + ALTER TABLE + hr.tbl_vertragsbestandteil_lohnguide + ADD COLUMN + vordienstzeit int; + "; + if (! $db->db_query($qry)) + echo 'Lohnguide: ' . $db->db_last_error() . '
'; + else + echo 'Spalte vordienstzeit wurde in hr.tbl_vertragsbestandteil_lohnguide neu erstellt
'; + + } +} \ No newline at end of file From 5c463c086693ce00b2fe6e5b67e48548e6144d4d Mon Sep 17 00:00:00 2001 From: Werner Masik Date: Mon, 6 Apr 2026 21:49:53 +0200 Subject: [PATCH 10/39] add vordienstzeit to lohnguide --- .../VertragsbestandteilLohnguide.php | 15 +++++++++++++++ .../Vertragsbestandteil_model.php | 2 +- system/dbupdate_3.4.php | 2 +- 3 files changed, 17 insertions(+), 2 deletions(-) diff --git a/application/libraries/vertragsbestandteil/VertragsbestandteilLohnguide.php b/application/libraries/vertragsbestandteil/VertragsbestandteilLohnguide.php index 5a61cc5db..0e071f36b 100644 --- a/application/libraries/vertragsbestandteil/VertragsbestandteilLohnguide.php +++ b/application/libraries/vertragsbestandteil/VertragsbestandteilLohnguide.php @@ -7,6 +7,7 @@ use vertragsbestandteil\VertragsbestandteilFactory; class VertragsbestandteilLohnguide extends Vertragsbestandteil { protected $stellenbezeichnung; + protected $vordienstzeit; protected $fachrichtung_kurzbz; protected $modellstelle_kurzbz; protected $kommentar_person; @@ -32,6 +33,18 @@ class VertragsbestandteilLohnguide extends Vertragsbestandteil return $this; } + public function getVordienstzeit() + { + return $this->vordienstzeit; + } + + public function setVordienstzeit($vordienstzeit): self + { + $this->markDirty('vordienstzeit', $this->vordienstzeit, $vordienstzeit); + $this->vordienstzeit = $vordienstzeit; + return $this; + } + public function getFachrichtung_kurzbz() { return $this->fachrichtung_kurzbz; @@ -89,6 +102,7 @@ class VertragsbestandteilLohnguide extends Vertragsbestandteil $this->fromdb = $fromdb; isset($data->fachrichtung_kurzbz) && $this->setFachrichtung_kurzbz($data->fachrichtung_kurzbz); isset($data->stellenbezeichnung) && $this->setStellenbezeichnung($data->stellenbezeichnung); + isset($data->vordienstzeit) && $this->setVordienstzeit($data->vordienstzeit); isset($data->modellstelle_kurzbz) && $this->setModellstelle_kurzbz($data->modellstelle_kurzbz); isset($data->kommentar_person) && $this->setKommentar_person($data->kommentar_person); isset($data->kommentar_modellstelle) && $this->setKommentar_modellstelle($data->kommentar_modellstelle); @@ -100,6 +114,7 @@ class VertragsbestandteilLohnguide extends Vertragsbestandteil $tmp = array( 'vertragsbestandteil_id' => $this->getVertragsbestandteil_id(), 'stellenbezeichnung' => $this->getStellenbezeichnung(), + 'vordienstzeit' => $this->getVordienstzeit(), 'fachrichtung_kurzbz' => $this->getFachrichtung_kurzbz(), 'modellstelle_kurzbz' => $this->getModellstelle_kurzbz(), 'kommentar_person' => $this->getKommentar_person(), diff --git a/application/models/vertragsbestandteil/Vertragsbestandteil_model.php b/application/models/vertragsbestandteil/Vertragsbestandteil_model.php index fe6823293..334a29dfd 100644 --- a/application/models/vertragsbestandteil/Vertragsbestandteil_model.php +++ b/application/models/vertragsbestandteil/Vertragsbestandteil_model.php @@ -38,7 +38,7 @@ class Vertragsbestandteil_model extends DB_Model s.wochenstunden, s.teilzeittyp_kurzbz, u.tage, z.zeitaufzeichnung, z.azgrelevant, z.homeoffice, - lg.stellenbezeichnung, lg.fachrichtung_kurzbz, lg.modellstelle_kurzbz, lg.kommentar_person, lg.kommentar_modellstelle + lg.stellenbezeichnung, lg.vordienstzeit, lg.fachrichtung_kurzbz, lg.modellstelle_kurzbz, lg.kommentar_person, lg.kommentar_modellstelle FROM hr.tbl_vertragsbestandteil v LEFT JOIN diff --git a/system/dbupdate_3.4.php b/system/dbupdate_3.4.php index 174034398..78dec16d3 100644 --- a/system/dbupdate_3.4.php +++ b/system/dbupdate_3.4.php @@ -244,7 +244,7 @@ $tabellen=array( "hr.tbl_lohnguide_modellfunktion" => array("modellfunktion_kurzbz", "bezeichnung", "jobfamilie_kurzbz", "aktiv", "sort", "insertvon", "insertamum", "updatevon", "updateamum"), "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", "fachrichtung_kurzbz", "modellstelle_kurzbz", "kommentar_person", "kommentar_modellstelle"), + "hr.tbl_vertragsbestandteil_lohnguide" => array("vertragsbestandteil_id", "stellenbezeichnung", "vordienstzeit", "fachrichtung_kurzbz", "modellstelle_kurzbz", "kommentar_person", "kommentar_modellstelle"), "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"), From 8fddbc3a32655b4455b0ffc8df11ed351e6925b4 Mon Sep 17 00:00:00 2001 From: ma0068 Date: Fri, 10 Apr 2026 09:15:34 +0200 Subject: [PATCH 11/39] delete watcher for formData fields, add setContent for loading Vorlage --- .../Messages/Details/NewMessage/Modal.js | 19 +------------------ 1 file changed, 1 insertion(+), 18 deletions(-) diff --git a/public/js/components/Messages/Details/NewMessage/Modal.js b/public/js/components/Messages/Details/NewMessage/Modal.js index 47187de89..ed013b0d3 100644 --- a/public/js/components/Messages/Details/NewMessage/Modal.js +++ b/public/js/components/Messages/Details/NewMessage/Modal.js @@ -133,6 +133,7 @@ export default { return this.$api .call(ApiMessages.getDataVorlage(vorlage_kurzbz)) .then(response => { + this.editor.setContent(response.data.text); this.formData.body = response.data.text; this.formData.subject = response.data.subject; }).catch(this.$fhcAlert.handleSystemError); @@ -203,24 +204,6 @@ export default { }, }, watch: { - 'formData.body': { - handler(newVal) { - const tinymcsVal = this.editor.getContent(); - - if (newVal && tinymcsVal != newVal) { - //Inhalt des Editors aktualisieren - this.editor.setContent(newVal); - } - } - }, - 'formData.vorlage_kurzbz': { - handler(newVal){ - if (newVal && newVal != null) { - this.formData.subject = newVal; - return this.getDataVorlage(newVal); - } - } - }, messageId: { immediate: true, handler: async function (newMessageId) { From 843894405e8816c6f74faefd430202f7378b398c Mon Sep 17 00:00:00 2001 From: ma0068 Date: Fri, 10 Apr 2026 13:03:24 +0200 Subject: [PATCH 12/39] changes for NewDiv remove Watcher for formData Fields add predefault settings for tabulator fields add setContent for Editor change text for closing window/tab show alertSuccess for sending Message just in case of inSamePage --- .../Messages/Details/NewMessage/NewDiv.js | 61 ++++++------------- 1 file changed, 18 insertions(+), 43 deletions(-) diff --git a/public/js/components/Messages/Details/NewMessage/NewDiv.js b/public/js/components/Messages/Details/NewMessage/NewDiv.js index b0c52f0f7..51da7bf94 100644 --- a/public/js/components/Messages/Details/NewMessage/NewDiv.js +++ b/public/js/components/Messages/Details/NewMessage/NewDiv.js @@ -64,7 +64,16 @@ export default { target: this.$refs.editor.$refs.input, //Important: not selector: to enable multiple import of component //height: 800, //plugins: ['lists'], - toolbar: 'styleselect | bold italic underline | alignleft aligncenter alignright alignjustify', + toolbar: 'styleselect | bold italic underline | alignleft aligncenter alignright alignjustify | link', + plugins: 'link', + link_context_toolbar: true, + automatic_uploads: true, + default_link_target: "_blank", + link_title: true, + target_list: [ + { title: 'New tab', value: '_blank' }, + { title: 'Same tab', value: '_self' } + ], style_formats: [ {title: 'Blocks', block: 'div'}, {title: 'Paragraph', block: 'p'}, @@ -98,7 +107,8 @@ export default { return this.$api .call(ApiMessages.sendMessage(this.typeId, data)) .then(response => { - this.$fhcAlert.alertSuccess(this.$p.t('ui', 'successSent')); + if(this.openMode == "inSamePage") + this.$fhcAlert.alertSuccess(this.$p.t('ui', 'successSent')); this.hideTemplate(); this.resetForm(); this.messageSent = true; @@ -114,19 +124,17 @@ export default { return this.$api .call(ApiMessages.getDataVorlage(vorlage_kurzbz)) .then(response => { + this.editor.setContent(response.data.text); this.formData.body = response.data.text; this.formData.subject = response.data.subject; }).catch(this.$fhcAlert.handleSystemError); }, getPreviewText(){ - console.log("subj" + this.formData.subject); const data = new FormData(); data.append('data', JSON.stringify(this.formData.body)); data.append('ids', JSON.stringify(this.id)); - console.log("subj" + this.formData.subject); - return this.$api .call(ApiMessages.getPreviewText( this.typeId, data)) @@ -190,38 +198,6 @@ export default { this.previewBody = this.previewText; }); }, - loadReplyData(messageId){ - this.$api - .call(ApiMessages.getReplyData(messageId)) - .then(result => { - this.replyData = result.data; - this.formData.subject = this.replyData[0].replySubject; - this.formData.body = this.replyData[0].replyBody; - this.formData.relationmessage_id = messageId; - }) - .catch(this.$fhcAlert.handleSystemError); - } - }, - watch: { - 'formData.body': { - handler(newVal) { - const tinymcsVal = this.editor.getContent(); - - if (newVal && tinymcsVal != newVal) { - //Inhalt des Editors aktualisieren - this.editor.setContent(newVal); - } - } - }, - 'formData.vorlage_kurzbz': { - handler(newVal){ - - if (newVal && newVal != null) { - this.formData.subject = newVal; - return this.getDataVorlage(newVal); - } - } - }, }, created(){ const missingparamsmsgs = []; @@ -291,9 +267,8 @@ export default { .catch(this.$fhcAlert.handleSystemError); //case of reply - if(this.messageId != null) { - this.loadReplyData(this.messageId); -/* this.$api + if(this.messageId) { + this.$api .call(ApiMessages.getReplyData(this.messageId)) .then(result => { this.replyData = result.data; @@ -301,7 +276,7 @@ export default { this.formData.body = this.replyData[0].replyBody; this.formData.relationmessage_id = this.messageId; }) - .catch(this.$fhcAlert.handleSystemError);*/ + .catch(this.$fhcAlert.handleSystemError); } }, @@ -499,10 +474,10 @@ export default {
- You can safely close this window. + You can safely close this window/tab.
- Sie können dieses Fenster schließen. + Fenster/Reiter kann geschlossen werden!
From ea0a24961286506e77f70554bb51278167b5847d Mon Sep 17 00:00:00 2001 From: ma0048 Date: Mon, 13 Apr 2026 09:14:27 +0200 Subject: [PATCH 13/39] micro degree abschlussdokumente hinzugefuegt --- .../components/Stv/Studentenverwaltung/Details/Archiv.js | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/public/js/components/Stv/Studentenverwaltung/Details/Archiv.js b/public/js/components/Stv/Studentenverwaltung/Details/Archiv.js index 9d8104ba5..ca5a5a0ca 100644 --- a/public/js/components/Stv/Studentenverwaltung/Details/Archiv.js +++ b/public/js/components/Stv/Studentenverwaltung/Details/Archiv.js @@ -84,6 +84,14 @@ export default { 'microcredential_2', 'microcredential_3', 'microcredential_4', + 'microdegree_1', + 'microdegree_2', + 'microdegree_3', + 'microdegree_4', + 'microdegreeabschluss_1', + 'microdegreeabschluss_2', + 'microdegreeabschluss_3', + 'microdegreeabschluss_4', ] }, documentDropdownObject: {} From 21d80905a23337bb4f6157737f89236d305c8e60 Mon Sep 17 00:00:00 2001 From: ma0048 Date: Mon, 13 Apr 2026 13:04:46 +0200 Subject: [PATCH 14/39] akzeptierte dokumente anzeigen, auch wenn kein dokument vorhanden ist --- .../api/frontend/v1/stv/Dokumente.php | 46 ++++++------------- 1 file changed, 13 insertions(+), 33 deletions(-) diff --git a/application/controllers/api/frontend/v1/stv/Dokumente.php b/application/controllers/api/frontend/v1/stv/Dokumente.php index b8c7830bd..913a57dc4 100644 --- a/application/controllers/api/frontend/v1/stv/Dokumente.php +++ b/application/controllers/api/frontend/v1/stv/Dokumente.php @@ -78,52 +78,32 @@ class Dokumente extends FHCAPI_Controller $this->terminateWithError($this->p->t('ui', 'errorMissingValue', ['value' => 'Studiengang_kz']), self::ERROR_TYPE_GENERAL); $resultPreDoc = $this->_getPrestudentDokumente($prestudent_id); - - $arrayAccepted = []; $person_id = $this->_getPersonId($prestudent_id); - $docNames = array_map(function ($item) { - return $item->dokument_kurzbz; - }, $resultPreDoc); + $mergedArray = []; - foreach($docNames as $doc) + foreach ($resultPreDoc as $pre) { - $result = $this->AkteModel->getAktenFAS($person_id, $doc, $studiengang_kz, $prestudent_id, true); + $result = $this->AkteModel->getAktenFAS($person_id, $pre->dokument_kurzbz, $studiengang_kz, $prestudent_id, true); if (isError($result)) - { return $this->terminateWithError($result, self::ERROR_TYPE_GENERAL); - } + if (hasData($result)) { - $data = getData($result); - foreach ($data as $value) + foreach (getData($result) as $doc) { - array_push($arrayAccepted, $value); + $merged = clone $doc; + $merged->docdatum = $pre->docdatum; + $merged->insertvonma = $pre->insertvonma; + $merged->bezeichnung = $pre->bezeichnung; + $mergedArray[] = $merged; } } - } - - //Mapping with document_kurzbz - $preDocMap = []; - foreach ($resultPreDoc as $pre) { - $preDocMap[$pre->dokument_kurzbz] = $pre; - } - - $mergedArray = []; - foreach ($arrayAccepted as $doc) { - $merged = clone $doc; - - if (isset($preDocMap[$doc->dokument_kurzbz])) { - $merged->docdatum = $preDocMap[$doc->dokument_kurzbz]->docdatum; - $merged->insertvonma = $preDocMap[$doc->dokument_kurzbz]->insertvonma; - $merged->bezeichnung = $preDocMap[$doc->dokument_kurzbz]->bezeichnung; - } else { - $merged->akzeptiertdatum = null; - $merged->akzeptiertvon = null; + else + { + $mergedArray[] = $pre; } - - $mergedArray[] = $merged; } $this->terminateWithSuccess($mergedArray); From 3ce3eff0221374d76a5227ee610f6eb16ea70423 Mon Sep 17 00:00:00 2001 From: ma0048 Date: Tue, 14 Apr 2026 09:30:45 +0200 Subject: [PATCH 15/39] fehlendes mapping hinzugefuegt --- content/student/studentoverlay.js.php | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/content/student/studentoverlay.js.php b/content/student/studentoverlay.js.php index 9ebe73cfe..1e40960ca 100644 --- a/content/student/studentoverlay.js.php +++ b/content/student/studentoverlay.js.php @@ -3555,6 +3555,14 @@ function StudentZeugnisDokumentArchivieren() case 'microcredential_2': case 'microcredential_3': case 'microcredential_4': + case 'microdegree_1': + case 'microdegree_2': + case 'microdegree_3': + case 'microdegree_4': + case 'microdegreeabschluss_1': + case 'microdegreeabschluss_2': + case 'microdegreeabschluss_3': + case 'microdegreeabschluss_4': xml = 'microcredential.xml.php'; break; From 95a7797ae9f8ed9a8fe25af9e9188409f5dc5c7d Mon Sep 17 00:00:00 2001 From: ma0068 Date: Tue, 14 Apr 2026 15:46:34 +0200 Subject: [PATCH 16/39] delete unused apicall for mode modal add editor.setContent to function getReplyData readd loadReplyData and use v-show for visibleDiv for mode inSamePage --- .../Messages/Details/NewMessage/Modal.js | 14 +----------- .../Messages/Details/NewMessage/NewDiv.js | 22 +++++++++++-------- public/js/components/Messages/Messages.js | 4 ++-- 3 files changed, 16 insertions(+), 24 deletions(-) diff --git a/public/js/components/Messages/Details/NewMessage/Modal.js b/public/js/components/Messages/Details/NewMessage/Modal.js index ed013b0d3..eeda421e6 100644 --- a/public/js/components/Messages/Details/NewMessage/Modal.js +++ b/public/js/components/Messages/Details/NewMessage/Modal.js @@ -214,6 +214,7 @@ export default { this.replyData = result.data; if (this.replyData.length > 0) { + this.editor.setContent(this.replyData[0].replyBody); this.formData.subject = this.replyData[0].replySubject; this.formData.body = this.replyData[0].replyBody; this.formData.relationmessage_id = newMessageId; @@ -273,19 +274,6 @@ export default { }) .catch(this.$fhcAlert.handleSystemError); - - //case of reply - if(this.messageId) { - this.$api - .call(ApiMessages.getReplyData(this.messageId)) - .then(result => { - this.replyData = result.data; - this.formData.subject = this.replyData[0].replySubject; - this.formData.body = this.replyData[0].replyBody; - this.formData.relationmessage_id = this.messageId; - }) - .catch(this.$fhcAlert.handleSystemError); - } }, async mounted() { this.initTinyMCE(); diff --git a/public/js/components/Messages/Details/NewMessage/NewDiv.js b/public/js/components/Messages/Details/NewMessage/NewDiv.js index 51da7bf94..2e6ef30c5 100644 --- a/public/js/components/Messages/Details/NewMessage/NewDiv.js +++ b/public/js/components/Messages/Details/NewMessage/NewDiv.js @@ -198,6 +198,18 @@ export default { this.previewBody = this.previewText; }); }, + loadReplyData(messageId){ + this.$api + .call(ApiMessages.getReplyData(messageId)) + .then(result => { + this.replyData = result.data; + this.editor.setContent(this.replyData[0].replyBody); + this.formData.subject = this.replyData[0].replySubject; + this.formData.body = this.replyData[0].replyBody; + this.formData.relationmessage_id = messageId; + }) + .catch(this.$fhcAlert.handleSystemError); + } }, created(){ const missingparamsmsgs = []; @@ -268,15 +280,7 @@ export default { //case of reply if(this.messageId) { - this.$api - .call(ApiMessages.getReplyData(this.messageId)) - .then(result => { - this.replyData = result.data; - this.formData.subject = this.replyData[0].replySubject; - this.formData.body = this.replyData[0].replyBody; - this.formData.relationmessage_id = this.messageId; - }) - .catch(this.$fhcAlert.handleSystemError); + this.loadReplyData(this.messageId); } }, diff --git a/public/js/components/Messages/Messages.js b/public/js/components/Messages/Messages.js index e1fb69dc3..3b02c4af6 100644 --- a/public/js/components/Messages/Messages.js +++ b/public/js/components/Messages/Messages.js @@ -82,8 +82,8 @@ export default { this.$refs.modalMsg.show(); } else if (this.openMode == "inSamePage"){ - console.log("in same Page"); this.isVisibleDiv = true; + if(messageId) this.$refs.templateNewDivMessage.loadReplyData(messageId); else @@ -170,7 +170,7 @@ export default { -
+
Date: Wed, 15 Apr 2026 10:44:03 +0200 Subject: [PATCH 17/39] =?UTF-8?q?Gehaltstyp=20=C3=9Cberstundenpauschale=20?= =?UTF-8?q?und=20Sachbezug=20PKW?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- system/dbupdate_3.4/70376_lohnguide.php | 54 +++++++++++++++++++++++++ 1 file changed, 54 insertions(+) diff --git a/system/dbupdate_3.4/70376_lohnguide.php b/system/dbupdate_3.4/70376_lohnguide.php index 61486b10d..2c1eb1845 100644 --- a/system/dbupdate_3.4/70376_lohnguide.php +++ b/system/dbupdate_3.4/70376_lohnguide.php @@ -367,4 +367,58 @@ if ($result = $db->db_query("SELECT * FROM information_schema.columns WHERE colu } } + +if ($result = $db->db_query("SELECT * FROM hr.tbl_gehaltstyp WHERE gehaltstyp_kurzbz='ueberstundenpauschale'")) +{ + if ($db->db_num_rows($result) == 0) + { + $qry = " + INSERT INTO hr.tbl_gehaltstyp + (gehaltstyp_kurzbz, bezeichnung, valorisierung, sort, aktiv, lvexport) + VALUES + ('ueberstundenpauschale','Überstundenpauschale', true, 8, true); + "; + + if (! $db->db_query($qry)) + echo 'Gehaltstyp: ' . $db->db_last_error() . '
'; + else + echo 'Gehaltstyp "Überstundenpauschale" erstellt.
'; + } +} + +if ($result = $db->db_query("SELECT * FROM hr.tbl_gehaltstyp WHERE gehaltstyp_kurzbz='ueberstundenpauschale'")) +{ + if ($db->db_num_rows($result) == 0) + { + $qry = " + INSERT INTO hr.tbl_gehaltstyp + (gehaltstyp_kurzbz, bezeichnung, valorisierung, sort, aktiv, lvexport) + VALUES + ('ueberstundenpauschale','Überstundenpauschale', true, 8, true, true); + "; + + if (! $db->db_query($qry)) + echo 'Gehaltstyp: ' . $db->db_last_error() . '
'; + else + echo 'Gehaltstyp "Überstundenpauschale" erstellt.
'; + } +} + +if ($result = $db->db_query("SELECT * FROM hr.tbl_gehaltstyp WHERE gehaltstyp_kurzbz='sachbezug_pkw'")) +{ + if ($db->db_num_rows($result) == 0) + { + $qry = " + INSERT INTO hr.tbl_gehaltstyp + (gehaltstyp_kurzbz, bezeichnung, valorisierung, sort, aktiv, lvexport) + VALUES + ('sachbezug_pkw','Sachbezug PKW', true, 9, true, true); + "; + + if (! $db->db_query($qry)) + echo 'Gehaltstyp: ' . $db->db_last_error() . '
'; + else + echo 'Gehaltstyp "Sachbezug PKW" erstellt.
'; + } +} \ No newline at end of file From c701d9277922b85e4302582781bd8e2e3de61c51 Mon Sep 17 00:00:00 2001 From: Werner Masik Date: Wed, 15 Apr 2026 11:15:10 +0200 Subject: [PATCH 18/39] fix db_update --- system/dbupdate_3.4/70376_lohnguide.php | 17 ----------------- 1 file changed, 17 deletions(-) diff --git a/system/dbupdate_3.4/70376_lohnguide.php b/system/dbupdate_3.4/70376_lohnguide.php index 2c1eb1845..5a31c8568 100644 --- a/system/dbupdate_3.4/70376_lohnguide.php +++ b/system/dbupdate_3.4/70376_lohnguide.php @@ -368,23 +368,6 @@ if ($result = $db->db_query("SELECT * FROM information_schema.columns WHERE colu } } -if ($result = $db->db_query("SELECT * FROM hr.tbl_gehaltstyp WHERE gehaltstyp_kurzbz='ueberstundenpauschale'")) -{ - if ($db->db_num_rows($result) == 0) - { - $qry = " - INSERT INTO hr.tbl_gehaltstyp - (gehaltstyp_kurzbz, bezeichnung, valorisierung, sort, aktiv, lvexport) - VALUES - ('ueberstundenpauschale','Überstundenpauschale', true, 8, true); - "; - - if (! $db->db_query($qry)) - echo 'Gehaltstyp: ' . $db->db_last_error() . '
'; - else - echo 'Gehaltstyp "Überstundenpauschale" erstellt.
'; - } -} if ($result = $db->db_query("SELECT * FROM hr.tbl_gehaltstyp WHERE gehaltstyp_kurzbz='ueberstundenpauschale'")) { From d499619cf341c82467f78a9cafab26dabfe46ce7 Mon Sep 17 00:00:00 2001 From: Cristina Date: Wed, 15 Apr 2026 13:39:06 +0200 Subject: [PATCH 19/39] Added phrase endedatumMussInZukunftLiegen --- system/phrasesupdate.php | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/system/phrasesupdate.php b/system/phrasesupdate.php index cc97b6eb3..0476db2c9 100644 --- a/system/phrasesupdate.php +++ b/system/phrasesupdate.php @@ -57889,6 +57889,26 @@ I have been informed that I am under no obligation to consent to the transmissio ) ) ), + array( + 'app' => 'lvevaluierung', + 'category' => 'global', + 'phrase' => 'endedatumMussInZukunftLiegen', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => 'Das Endedatum muss mindestens {minutes} Minuten in der Zukunft liegen', + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => 'The end date must be at least {minutes} minutes in the future', + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), // ### DOKUMENTE ERSTELLEN PHRASEN END ### // ### Personen zusammenlegen Phrasen BEGIN array( From 88b22f5490813070e9bc5a4f0ce56412e0d2ae90 Mon Sep 17 00:00:00 2001 From: Harald Bamberger Date: Wed, 15 Apr 2026 17:02:58 +0200 Subject: [PATCH 20/39] revert to v-if to not render element when not necessary and use Vue.nextTick for dependent code --- public/js/components/Messages/Messages.js | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/public/js/components/Messages/Messages.js b/public/js/components/Messages/Messages.js index 3b02c4af6..bb69d2139 100644 --- a/public/js/components/Messages/Messages.js +++ b/public/js/components/Messages/Messages.js @@ -84,12 +84,14 @@ export default { else if (this.openMode == "inSamePage"){ this.isVisibleDiv = true; - if(messageId) - this.$refs.templateNewDivMessage.loadReplyData(messageId); - else - this.$refs.templateNewDivMessage.resetForm(); + this.$nextTick(() => { + if(messageId) + this.$refs.templateNewDivMessage.loadReplyData(messageId); + else + this.$refs.templateNewDivMessage.resetForm(); - this.$refs.templateNewDivMessage.showTemplate(); + this.$refs.templateNewDivMessage.showTemplate(); + }); } else console.log("no valid openMode"); @@ -170,7 +172,7 @@ export default { -
+
Date: Thu, 16 Apr 2026 11:23:57 +0200 Subject: [PATCH 21/39] deactivate pagination - since potentially msg threads are not shown completely --- .../api/frontend/v1/messages/Messages.php | 14 ++++++++++--- application/models/system/Message_model.php | 10 +++++---- public/js/api/factory/messages/messages.js | 13 +++++++----- .../Messages/Details/TableMessages.js | 21 ++++++++++++++++--- 4 files changed, 43 insertions(+), 15 deletions(-) diff --git a/application/controllers/api/frontend/v1/messages/Messages.php b/application/controllers/api/frontend/v1/messages/Messages.php index 3035e532d..77b46f97b 100644 --- a/application/controllers/api/frontend/v1/messages/Messages.php +++ b/application/controllers/api/frontend/v1/messages/Messages.php @@ -42,14 +42,22 @@ class Messages extends FHCAPI_Controller ]); } - public function getMessages($id, $type_id, $size, $page) + public function getMessages($id, $type_id, $size=null, $page=null) { if($type_id != 'person_id'){ $id = $this->_getPersonId($id, $type_id); } - $offset = $size * ($page - 1); - $limit = $size; + if(!(is_null($size) && is_null($page))) + { + $offset = $size * ($page - 1); + $limit = $size; + } + else + { + $offset = null; + $limit = null; + } $result = $this->MessageModel->getMessagesForTable($id, $offset, $limit); diff --git a/application/models/system/Message_model.php b/application/models/system/Message_model.php index 3e59d7250..ba51e514e 100644 --- a/application/models/system/Message_model.php +++ b/application/models/system/Message_model.php @@ -242,6 +242,7 @@ class Message_model extends DB_Model */ public function getMessagesForTable($person_id, $offset, $limit) { + $limitoffset = (!is_null($offset) && !is_null($limit)) ? 'limit ? offset ?' : ''; $sql = <<execQuery($sql, $parametersArray); @@ -325,7 +327,7 @@ EOSQL; $data = getData($data); if($data) { - $count = ceil($data[0]->total_msgs / $limit); + $count = is_null($limit) ? 1 : ceil($data[0]->total_msgs / $limit); } return success(['data' => $data, 'count' => $count]); diff --git a/public/js/api/factory/messages/messages.js b/public/js/api/factory/messages/messages.js index b7b21dd8a..fb752cfb4 100644 --- a/public/js/api/factory/messages/messages.js +++ b/public/js/api/factory/messages/messages.js @@ -17,13 +17,16 @@ export default { getMessages(params) { + let url = 'api/frontend/v1/messages/messages/getMessages' + + '/' + params.id + + '/' + params.type; + if(params.size && params.page) { + url += '/' + params.size + + '/' + params.page; + } return { method: 'get', - url: 'api/frontend/v1/messages/messages/getMessages/' - + params.id + '/' - + params.type + '/' - + params.size + '/' - + params.page + url: url }; }, getVorlagen(){ diff --git a/public/js/components/Messages/Details/TableMessages.js b/public/js/components/Messages/Details/TableMessages.js index d2101e2cb..aefa8bb2a 100644 --- a/public/js/components/Messages/Details/TableMessages.js +++ b/public/js/components/Messages/Details/TableMessages.js @@ -65,7 +65,14 @@ export default { buildTreemap(messages) { if (!messages || !messages.data || messages.data.length === 0) { - return {data: [], last_page: 0}; + if(this.tabulatorOptions.pagination) + { + return {data: [], last_page: 0}; + } + else + { + return []; + } } const last_page = messages.meta.count; @@ -106,7 +113,15 @@ export default { // to avoid endless loop if (iteration > messages.length) break; } - return {data: messageNested, last_page: last_page}; + + if(this.tabulatorOptions.pagination) + { + return {data: messageNested, last_page: last_page}; + } + else + { + return messageNested; + } }, loadAjaxCall(url, config, params){ return this.$api.call( @@ -252,7 +267,7 @@ export default { frozen: true } ], - pagination: true, + pagination: false, paginationMode: "remote", paginationSize: 15, paginationInitialPage: 1, From e48b94b858c35cc0d20e248c305f2b54079b4400 Mon Sep 17 00:00:00 2001 From: Harald Bamberger Date: Fri, 17 Apr 2026 12:35:55 +0200 Subject: [PATCH 22/39] studiengangskuerzel statt kurzbzlang --- application/models/organisation/Studiengang_model.php | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/application/models/organisation/Studiengang_model.php b/application/models/organisation/Studiengang_model.php index 08f40f6d4..9e51dc561 100644 --- a/application/models/organisation/Studiengang_model.php +++ b/application/models/organisation/Studiengang_model.php @@ -594,8 +594,10 @@ class Studiengang_model extends DB_Model $this->addSelect('p.prestudent_id'); $this->addSelect('pers.vorname'); $this->addSelect('pers.nachname'); - $this->addSelect("CONCAT(UPPER(pers.nachname), ' ', pers.vorname, - ' (', " . $this->dbTable . ".bezeichnung, ', ', " . $this->dbTable . ".kurzbzlang,')') AS name"); + $this->addSelect("CONCAT(UPPER(pers.nachname), ' ', pers.vorname, ' (', " + . $this->dbTable . ".bezeichnung, ', ', " + . "UPPER(" . $this->dbTable . ".typ), " + . "UPPER(" . $this->dbTable . ".kurzbz),')') AS name"); $this->addJoin('public.tbl_prestudent p', 'studiengang_kz'); $this->addJoin( From 26db4a5e7a17ed9f21ac9b99ba1198199f8df4fb Mon Sep 17 00:00:00 2001 From: ma0068 Date: Mon, 20 Apr 2026 09:31:52 +0200 Subject: [PATCH 23/39] adding redraw tabulator and fallback to avoid empty column --- public/js/components/Messages/Details/TableMessages.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/public/js/components/Messages/Details/TableMessages.js b/public/js/components/Messages/Details/TableMessages.js index aefa8bb2a..02b941fcf 100644 --- a/public/js/components/Messages/Details/TableMessages.js +++ b/public/js/components/Messages/Details/TableMessages.js @@ -195,7 +195,7 @@ export default { ], formatter: (cell, formatterParams) => { const key = formatterParams[cell.getValue()]; - return this.$p.t('messages', key); + return this.$p?.t?.('messages', key) || key; }, }, { @@ -307,6 +307,7 @@ export default { handler: async() => { await this.$p.loadCategory(['global', 'person', 'stv', 'messages', 'ui', 'notiz']); + this.$refs.table.tabulator.redraw(true); //for immediate translation of status const setHeader = (field, text) => { const col = this.$refs.table.tabulator.getColumn(field); if (!col) return; From 3a646ffe77b1078f4f8d6490ee693dba2d972bb7 Mon Sep 17 00:00:00 2001 From: Johann Hoffmann Date: Mon, 20 Apr 2026 11:06:06 +0200 Subject: [PATCH 24/39] adapt AbgabeJob relevant queries so they compare with the pgsql date function CURRENT_DATE instead of NOW() to avoid the cutoff from uploads the happened "yesterday but more than 24 hours ago"; also added another "abgabedatum < CURRENT_DATE" condition, to avoid sending this exact case as updates 2 days in a row; --- application/models/education/Paabgabe_model.php | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/application/models/education/Paabgabe_model.php b/application/models/education/Paabgabe_model.php index be42b7660..d59b7cf62 100644 --- a/application/models/education/Paabgabe_model.php +++ b/application/models/education/Paabgabe_model.php @@ -79,10 +79,16 @@ class Paabgabe_model extends DB_Model JOIN public.tbl_benutzer ON (public.tbl_benutzer.uid = student_uid) JOIN public.tbl_person USING (person_id) - WHERE (campus.tbl_paabgabe.insertamum >= NOW() - INTERVAL ? - OR campus.tbl_paabgabe.updateamum >= NOW() - INTERVAL ?) - AND campus.tbl_paabgabe.paabgabetyp_kurzbz IN ?"; - + WHERE ( + (campus.tbl_paabgabe.insertamum >= CURRENT_DATE - INTERVAL ? + AND campus.tbl_paabgabe.insertamum < CURRENT_DATE + ) + OR + (campus.tbl_paabgabe.updateamum >= CURRENT_DATE - INTERVAL ? + AND campus.tbl_paabgabe.updateamum < CURRENT_DATE + ) + AND campus.tbl_paabgabe.paabgabetyp_kurzbz IN ?"; + return $this->execQuery($query, [$interval, $interval, $relevantTypes]); } @@ -108,7 +114,8 @@ class Paabgabe_model extends DB_Model JOIN public.tbl_person ON (public.tbl_benutzer.person_id = public.tbl_person.person_id) WHERE campus.tbl_paabgabe.abgabedatum IS NOT NULL - AND campus.tbl_paabgabe.abgabedatum >= NOW() - INTERVAL ?"; + AND campus.tbl_paabgabe.abgabedatum >= CURRENT_DATE - INTERVAL ? + AND campus.tbl_paabgabe.abgabedatum < CURRENT_DATE"; if($relevantTypes !== null) { $query .= " AND campus.tbl_paabgabe.paabgabetyp_kurzbz IN ?"; From dac71f597a2fd7d7e02d01428102d254ac0e5976 Mon Sep 17 00:00:00 2001 From: kindlm Date: Mon, 20 Apr 2026 11:24:59 +0200 Subject: [PATCH 25/39] =?UTF-8?q?Spalte=20Anmeldedatum=20in=20RT-=C3=9Cber?= =?UTF-8?q?sicht?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Spalte Frage_ID in RT-Administration JQuery und Tabelsorter aus Include in Service_Uebersicht --- cis/private/info/service_uebersicht.php | 10 +++--- .../reihungstest_administration.php | 6 +++- vilesci/stammdaten/reihungstestverwaltung.php | 31 +++++++++++++++++-- 3 files changed, 40 insertions(+), 7 deletions(-) diff --git a/cis/private/info/service_uebersicht.php b/cis/private/info/service_uebersicht.php index 348a82b0d..ef2516bf7 100644 --- a/cis/private/info/service_uebersicht.php +++ b/cis/private/info/service_uebersicht.php @@ -46,12 +46,13 @@ echo ' - - '; + include('../../../include/meta/jquery.php'); + include('../../../include/meta/jquery-tablesorter.php'); + const MOODLE_ADDON_KURZBZ = 'moodle'; // Load Addons to get Moodle_Path @@ -71,7 +72,7 @@ echo ' $("#myTable").tablesorter( { sortList: [[0,0],[1,0]], - widgets: [\'zebra\'] + widgets: [\'zebra\',\'filter\'] }); } ); @@ -151,8 +152,9 @@ foreach($service->result as $row) $person = new person(); $person->getPersonFromBenutzer($row->operativ_uid); $operativ = $person->nachname.' '.$person->vorname; + $oeBez = new organisationseinheit($row->oe_kurzbz); echo ''; - echo '',$row->oe_kurzbz,''; + echo '',$oeBez->bezeichnung,''; echo ''.$row->bezeichnung.''; echo '',$row->beschreibung,''; echo '',$design,''; diff --git a/vilesci/stammdaten/reihungstest_administration.php b/vilesci/stammdaten/reihungstest_administration.php index 3b59e1961..6fbf3e5c0 100644 --- a/vilesci/stammdaten/reihungstest_administration.php +++ b/vilesci/stammdaten/reihungstest_administration.php @@ -588,7 +588,9 @@ if(isset($_POST['testergebnisanzeigen']) && isset($_POST['prestudent_id'])) { if(is_numeric($_POST['prestudent_id']) && $_POST['prestudent_id']!='') { - $qry="SELECT nachname,vorname,person_id,prestudent_id,tbl_pruefling.pruefling_id,tbl_pruefling_frage.begintime,bezeichnung,kurzbz,tbl_frage.nummer,level, tbl_vorschlag.nummer as antwortnummer, tbl_vorschlag.punkte + $qry="SELECT nachname,vorname,person_id,prestudent_id,tbl_pruefling.pruefling_id, + tbl_pruefling_frage.begintime,bezeichnung,kurzbz,tbl_frage.nummer,level, + tbl_vorschlag.nummer as antwortnummer, tbl_vorschlag.punkte, tbl_frage.frage_id FROM testtool.tbl_antwort JOIN testtool.tbl_vorschlag USING(vorschlag_id) JOIN testtool.tbl_frage USING (frage_id) @@ -615,6 +617,7 @@ if(isset($_POST['testergebnisanzeigen']) && isset($_POST['prestudent_id'])) Level Antwort # Punkte + FrageID '; @@ -632,6 +635,7 @@ if(isset($_POST['testergebnisanzeigen']) && isset($_POST['prestudent_id'])) echo "$row->level"; echo "$row->antwortnummer"; echo "$row->punkte"; + echo "$row->frage_id"; echo ''; } echo ''; diff --git a/vilesci/stammdaten/reihungstestverwaltung.php b/vilesci/stammdaten/reihungstestverwaltung.php index 990b3e129..f415f33cd 100644 --- a/vilesci/stammdaten/reihungstestverwaltung.php +++ b/vilesci/stammdaten/reihungstestverwaltung.php @@ -837,6 +837,25 @@ if(isset($_GET['excel']))