From 99dc36b50165fafe4e7e9150b5cddba13c47c4f3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andreas=20=C3=96sterreicher?= Date: Fri, 14 Feb 2020 13:54:06 +0100 Subject: [PATCH 01/40] =?UTF-8?q?Stundensatz=20wird=20bei=20Fixangestellte?= =?UTF-8?q?n=20mit=20voller=20inkludierter=20Lehre=20(-1)=20immer=20auf=20?= =?UTF-8?q?NULL=20gesetzt.=20(abh=C3=A4ngig=20von=20Config)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- config/global.config-default.inc.php | 3 + content/lvplanung/lehrveranstaltungDBDML.php | 92 +++++++++++++++----- include/bisverwendung.class.php | 75 ++++++++++++++-- 3 files changed, 144 insertions(+), 26 deletions(-) diff --git a/config/global.config-default.inc.php b/config/global.config-default.inc.php index 82dcbda10..bb619586d 100644 --- a/config/global.config-default.inc.php +++ b/config/global.config-default.inc.php @@ -128,6 +128,9 @@ define('FAS_REIHUNGSTEST_AUFNAHMEGRUPPEN',false); // Legt fest, ob Vertragsdetails zum Lehrauftrag im Reiter LektorInnenzuteilung angezeigt werden define('FAS_LV_LEKTORINNENZUTEILUNG_VERTRAGSDETAILS_ANZEIGEN', false); +// Legt fest ob bei Fixangestellten Lektoren der Stundensatz vorgeschlagen wird +define('FAS_LV_LEKTORINNENZUTEILUNG_FIXANGESTELLT_STUNDENSATZ', true); + // Legt fest, ob Vertragsdetails zum Projektauftrag im Reiter Projektarbeit angezeigt werden define('FAS_STUDIERENDE_PROJEKTARBEIT_VERTRAGSDETAILS_ANZEIGEN', false); diff --git a/content/lvplanung/lehrveranstaltungDBDML.php b/content/lvplanung/lehrveranstaltungDBDML.php index 5e4a3ba61..5972c4b4f 100644 --- a/content/lvplanung/lehrveranstaltungDBDML.php +++ b/content/lvplanung/lehrveranstaltungDBDML.php @@ -36,6 +36,7 @@ // **************************************** require_once('../../config/vilesci.config.inc.php'); +require_once('../../config/global.config.inc.php'); require_once('../../include/functions.inc.php'); require_once('../../include/lehreinheit.class.php'); require_once('../../include/lehreinheitmitarbeiter.class.php'); @@ -52,6 +53,7 @@ require_once('../../include/lehrveranstaltung.class.php'); require_once('../../include/datum.class.php'); require_once('../../include/vertrag.class.php'); require_once('../../include/benutzergruppe.class.php'); +require_once('../../include/bisverwendung.class.php'); $user = get_uid(); $db = new basis_db(); @@ -440,11 +442,18 @@ if(!$error) elseif(isset($_POST['type']) && $_POST['type']=='lehreinheit_mitarbeiter_add') { //neue Lehreinheitmitarbeiterzuteilung anlegen - $qry = "SELECT tbl_lehrveranstaltung.studiengang_kz, tbl_lehrveranstaltung.lehrveranstaltung_id, - (SELECT fachbereich_kurzbz FROM public.tbl_fachbereich WHERE oe_kurzbz=lehrfach.oe_kurzbz) as fachbereich_kurzbz - FROM lehre.tbl_lehrveranstaltung, lehre.tbl_lehreinheit, lehre.tbl_lehrveranstaltung as lehrfach - WHERE tbl_lehrveranstaltung.lehrveranstaltung_id=tbl_lehreinheit.lehrveranstaltung_id AND - tbl_lehreinheit.lehrfach_id=lehrfach.lehrveranstaltung_id AND lehreinheit_id=".$db->db_add_param($_POST['lehreinheit_id'], FHC_INTEGER); + $qry = "SELECT + tbl_lehrveranstaltung.studiengang_kz, tbl_lehrveranstaltung.lehrveranstaltung_id, + lehrfach.oe_kurzbz as lehrfach_oe_kurzbz + FROM + lehre.tbl_lehrveranstaltung, + lehre.tbl_lehreinheit, + lehre.tbl_lehrveranstaltung as lehrfach + WHERE + tbl_lehrveranstaltung.lehrveranstaltung_id = tbl_lehreinheit.lehrveranstaltung_id + AND tbl_lehreinheit.lehrfach_id = lehrfach.lehrveranstaltung_id + AND lehreinheit_id = ".$db->db_add_param($_POST['lehreinheit_id'], FHC_INTEGER); + if($db->db_query($qry)) { if($row = $db->db_fetch_object()) @@ -454,8 +463,8 @@ if(!$error) if(!$rechte->isBerechtigtMultipleOe('admin', $lva->getAllOe(), 'suid') && !$rechte->isBerechtigtMultipleOe('assistenz', $lva->getAllOe(), 'suid') && !$rechte->isBerechtigtMultipleOe('lv-plan', $lva->getAllOe(), 'suid') && - !$rechte->isBerechtigtMultipleOe('assistenz', $lva->getAllOe(), 'suid', $row->fachbereich_kurzbz) && - !$rechte->isBerechtigtMultipleOe('admin', $lva->getAllOe(), 'suid', $row->fachbereich_kurzbz)) + !$rechte->isBerechtigtMultipleOe('assistenz', $row->lehrfach_oe_kurzbz, 'suid') && + !$rechte->isBerechtigtMultipleOe('admin', $row->lehrfach_oe_kurzbz, 'suid')) { $error = true; $return = false; @@ -496,29 +505,47 @@ if(!$error) $fixangestellt=false; //Stundensatz aus tbl_mitarbeiter holen - $qry = "SELECT stundensatz, fixangestellt FROM public.tbl_mitarbeiter WHERE mitarbeiter_uid=".$db->db_add_param($_POST['mitarbeiter_uid']); - if($result = $db->db_query($qry)) + $mitarbeiter = new mitarbeiter(); + if ($mitarbeiter->load($_POST['mitarbeiter_uid'])) { - if($row = $db->db_fetch_object($result)) + $fixangestellt = $mitarbeiter->fixangestellt; + $lem->stundensatz = $mitarbeiter->stundensatz; + + if (defined('FAS_LV_LEKTORINNENZUTEILUNG_FIXANGESTELLT_STUNDENSATZ') + && !FAS_LV_LEKTORINNENZUTEILUNG_FIXANGESTELLT_STUNDENSATZ) { - if($row->stundensatz!='') - $lem->stundensatz = $row->stundensatz; - else - $lem->stundensatz = '0'; - $fixangestellt = ($row->fixangestellt=='t'?true:false); + $stsem = new studiensemester(); + $stsem->load($semester_aktuell); + $bisverwendung = new bisverwendung(); + $data = $mitarbeiter->stundensatz; + if(!$bisverwendung->getVerwendungRange($mitarbeiter->uid, $stsem->start, $stsem->ende)) + { + $bisverwendung->getLastAktVerwendung($mitarbeiter->uid); + $bisverwendung->result[] = $bisverwendung; + } + + foreach($bisverwendung->result as $row_verwendung) + { + // Bei echten Dienstvertraegen mit voller inkludierter Lehre wird kein Stundensatz + // geliefert da dies im Vertrag inkludiert ist. + if ($row_verwendung->ba1code == 3 && $row_verwendung->inkludierte_lehre == -1) + { + $fixangestellt = true; + $lem->stundensatz = ''; + break; + } + } } else { - $error=true; - $return=false; - $errormsg='Mitarbeiter '.$db->convert_html_chars($_POST['mitarbeiter_uid']).' wurde nicht gefunden'; + $lem->stundensatz = $mitarbeiter->stundensatz; } } else { $error=true; $return=false; - $errormsg='Fehler bei einer Datenbankabfrage:'.$db->db_last_error(); + $errormsg='Mitarbeiter '.$db->convert_html_chars($_POST['mitarbeiter_uid']).' wurde nicht gefunden'; } $maxstunden=9999; @@ -1381,7 +1408,32 @@ if(!$error) $mitarbeiter = new mitarbeiter(); if($mitarbeiter->load($_POST['mitarbeiter_uid'])) { - $data = $mitarbeiter->stundensatz; + if (defined('FAS_LV_LEKTORINNENZUTEILUNG_FIXANGESTELLT_STUNDENSATZ') + && !FAS_LV_LEKTORINNENZUTEILUNG_FIXANGESTELLT_STUNDENSATZ) + { + $stsem = new studiensemester(); + $stsem->load($semester_aktuell); + $bisverwendung = new bisverwendung(); + $data = $mitarbeiter->stundensatz; + if(!$bisverwendung->getVerwendungRange($mitarbeiter->uid, $stsem->start, $stsem->ende)) + { + $bisverwendung->getLastAktVerwendung($mitarbeiter->uid); + $bisverwendung->result[] = $bisverwendung; + } + + foreach($bisverwendung->result as $row_verwendung) + { + // Bei echten Dienstvertraegen mit voller inkludierter Lehre wird kein Stundensatz + // geliefert da dies im Vertrag inkludiert ist. + if ($row_verwendung->ba1code == 3 && $row_verwendung->inkludierte_lehre == -1) + { + $data = ''; + break; + } + } + } + else + $data = $mitarbeiter->stundensatz; $return = true; } else diff --git a/include/bisverwendung.class.php b/include/bisverwendung.class.php index 0e4e4fc06..6417e9a86 100644 --- a/include/bisverwendung.class.php +++ b/include/bisverwendung.class.php @@ -404,8 +404,8 @@ class bisverwendung extends basis_db $obj->verwendung_code = $row->verwendung_code; $obj->mitarbeiter_uid = $row->mitarbeiter_uid; $obj->hauptberufcode = $row->hauptberufcode; - $obj->hauptberuflich = $this->db_parse_bool($row->hauptberuflich); - $obj->habilitation = $this->db_parse_bool($row->habilitation); + $obj->hauptberuflich = $this->db_parse_bool($row->hauptberuflich); + $obj->habilitation = $this->db_parse_bool($row->habilitation); $obj->beginn = $row->beginn; $obj->ende = $row->ende; $obj->updatevon = $row->updatevon; @@ -513,8 +513,8 @@ class bisverwendung extends basis_db $this->verwendung_code = $row->verwendung_code; $this->mitarbeiter_uid = $row->mitarbeiter_uid; $this->hauptberufcode = $row->hauptberufcode; - $this->hauptberuflich = $this->db_parse_bool($row->hauptberuflich); - $this->habilitation = $this->db_parse_bool($row->habilitation); + $this->hauptberuflich = $this->db_parse_bool($row->hauptberuflich); + $this->habilitation = $this->db_parse_bool($row->habilitation); $this->beginn = $row->beginn; $this->ende = $row->ende; $this->updatevon = $row->updatevon; @@ -566,8 +566,8 @@ class bisverwendung extends basis_db $this->verwendung_code = $row->verwendung_code; $this->mitarbeiter_uid = $row->mitarbeiter_uid; $this->hauptberufcode = $row->hauptberufcode; - $this->hauptberuflich = $this->db_parse_bool($row->hauptberuflich); - $this->habilitation = $this->db_parse_bool($row->habilitation); + $this->hauptberuflich = $this->db_parse_bool($row->hauptberuflich); + $this->habilitation = $this->db_parse_bool($row->habilitation); $this->beginn = $row->beginn; $this->ende = $row->ende; $this->updatevon = $row->updatevon; @@ -587,5 +587,68 @@ class bisverwendung extends basis_db return false; } } + + /** + * Laedt alle Verwendungen eines Mitarbeiters die in einen Datumsbereich fallen + * @param $uid UID des Mitarbeiters + * @param $von + * @param $bis + * @return true wenn ok, false wenn Fehler + */ + public function getVerwendungRange($uid, $von, $bis) + { + $datum_obj = new datum(); + //laden des Datensatzes + $qry = " + SELECT + * + FROM + bis.tbl_bisverwendung + WHERE + mitarbeiter_uid=".$this->db_add_param($uid)." + AND + ( + ".$this->db_add_param($datum_obj->formatDatum($von,'Y-m-d'))." BETWEEN COALESCE(beginn,'1970-01-01') AND COALESCE(ende,'2999-12-31') + OR + ".$this->db_add_param($datum_obj->formatDatum($bis,'Y-m-d'))." BETWEEN COALESCE(beginn,'1970-01-01') AND COALESCE(ende,'2999-12-31') + ) + ORDER BY ende desc;"; + + if($this->db_query($qry)) + { + while($row = $this->db_fetch_object()) + { + $obj = new bisverwendung(); + + $obj->bisverwendung_id = $row->bisverwendung_id; + $obj->ba1code = $row->ba1code; + $obj->ba2code = $row->ba2code; + $obj->beschausmasscode = $row->beschausmasscode; + $obj->verwendung_code = $row->verwendung_code; + $obj->mitarbeiter_uid = $row->mitarbeiter_uid; + $obj->hauptberufcode = $row->hauptberufcode; + $obj->hauptberuflich = $this->db_parse_bool($row->hauptberuflich); + $obj->habilitation = $this->db_parse_bool($row->habilitation); + $obj->beginn = $row->beginn; + $obj->ende = $row->ende; + $obj->updatevon = $row->updatevon; + $obj->updateamum = $row->updateamum; + $obj->insertamum = $row->insertamum; + $obj->insertvon = $row->insertvon; + $obj->vertragsstunden = $row->vertragsstunden; + $obj->dv_art = $row->dv_art; + $obj->inkludierte_lehre = $row->inkludierte_lehre; + $obj->zeitaufzeichnungspflichtig = $this->db_parse_bool($row->zeitaufzeichnungspflichtig); + + $this->result[] = $obj; + } + return true; + } + else + { + $this->errormsg = 'Fehler bei der Datenbankabfrage'; + return false; + } + } } ?> From 119a2b200adac77613c1541e884ae4970961236e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andreas=20=C3=96sterreicher?= Date: Fri, 14 Feb 2020 14:46:54 +0100 Subject: [PATCH 02/40] =?UTF-8?q?Neuen=20Modus=20f=C3=BCr=20Lehreinheitenv?= =?UTF-8?q?orr=C3=BCckung=20hinzugef=C3=BCgt=20bei=20dem=20die=20Stundens?= =?UTF-8?q?=C3=A4tze=20abh=C3=A4ngig=20von=20der=20Beschaeftigungsart=20ak?= =?UTF-8?q?tualisiert=20werden?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- config/global.config-default.inc.php | 4 ++ vilesci/lehre/lehreinheiten_vorrueckung.php | 44 +++++++++++++++++++++ 2 files changed, 48 insertions(+) diff --git a/config/global.config-default.inc.php b/config/global.config-default.inc.php index bb619586d..7c9d7b1c0 100644 --- a/config/global.config-default.inc.php +++ b/config/global.config-default.inc.php @@ -251,6 +251,10 @@ define('FAS_KONTO_SHOW_CREDIT_POINTS','false'); // Bei "default" wird der Standard-Stundensatz des Lektors (aus tbl_mitarbeiter) ermittelt, und dieser eingetragen. // Wenn numerisch, wird dieser Wert bei allen LektorInnen eingetragen. // Wenn nicht definiert, wird der Stundensatz des Vorjahres übernommen. +// Bei "nachbeschaeftigungsart" wird +// bei echten Dienstvertraegen mit voller inkludierter Lehre (-1) der Stundensatz auf null gesetzt +// bei echten Dienstvertraegen mit teilweise oder nicht inkludierter Lehre der Default Stundensatz gesetzt +// bei sonstigen Dienstvertraegen der Default Stundensatz gesetzt define('VILESCI_STUNDENSATZ_VORRUECKUNG', ''); // Wenn true, werden die Content-Aufrufe des CIS in der tbl_webservicelog mitgeloggt. Zuvor manuell einen neuen Webservicetyp "content" anlegen! diff --git a/vilesci/lehre/lehreinheiten_vorrueckung.php b/vilesci/lehre/lehreinheiten_vorrueckung.php index af12376ae..31a51c003 100644 --- a/vilesci/lehre/lehreinheiten_vorrueckung.php +++ b/vilesci/lehre/lehreinheiten_vorrueckung.php @@ -32,6 +32,7 @@ require_once('../../include/lehreinheitgruppe.class.php'); require_once('../../include/benutzerberechtigung.class.php'); require_once('../../include/mitarbeiter.class.php'); require_once('../../include/gruppe.class.php'); +require_once('../../include/bisverwendung.class.php'); if (!$db = new basis_db()) die('Es konnte keine Verbindung zum Server aufgebaut werden.'); @@ -162,6 +163,14 @@ elseif (defined('VILESCI_STUNDENSATZ_VORRUECKUNG') Alle Lehraufträge werden mit dem aktuell hinterlegten Standard-Stundensatz der/des Lehrenden vorgerückt '; } +elseif (defined('VILESCI_STUNDENSATZ_VORRUECKUNG') + && VILESCI_STUNDENSATZ_VORRUECKUNG != '' + && VILESCI_STUNDENSATZ_VORRUECKUNG == 'nachbeschaeftigungsart') +{ + echo '
+ Stundensätze werden abhängig von der Beschaeftigungsart aktualisiert. + '; +} else { echo '
@@ -219,6 +228,9 @@ if ($studiengang_kz != '' && $stsem_von != '' && $stsem_nach != '') } } + $stsem_nach_obj = new studiensemester(); + $stsem_nach_obj->load($stsem_nach); + if ($result = $db->db_query($qry)) { while($row = $db->db_fetch_object($result)) @@ -314,6 +326,38 @@ if ($studiengang_kz != '' && $stsem_von != '' && $stsem_nach != '') $stundensatz = new mitarbeiter($row_lem->mitarbeiter_uid); $lem_obj->stundensatz = $stundensatz->stundensatz; } + // Wenn VILESCI_STUNDENSATZ_VORRUECKUNG nachbeschaeftigungsart ist, wird + // bei echten Dienstvertraegen mit voller inkludierter Lehre (-1) der Stundensatz auf null gesetzt + // bei echten Dienstvertraegen mit teilweise oder nicht inkludierter Lehre der Default Stundensatz gesetzt + // bei sonstigen Dienstvertraegen der Default Stundensatz gesetzt + elseif (defined('VILESCI_STUNDENSATZ_VORRUECKUNG') + && VILESCI_STUNDENSATZ_VORRUECKUNG != '' + && VILESCI_STUNDENSATZ_VORRUECKUNG == 'nachbeschaeftigungsart') + { + if ($lem_obj->stundensatz != '0') + { + $stundensatz = new mitarbeiter($row_lem->mitarbeiter_uid); + $lem_obj->stundensatz = $stundensatz->stundensatz; + + $bisverwendung = new bisverwendung(); + if(!$bisverwendung->getVerwendungRange($row_lem->mitarbeiter_uid, $stsem_nach_obj->start, $stsem_nach_obj->ende)) + { + $bisverwendung->getLastAktVerwendung($row_lem->mitarbeiter_uid); + $bisverwendung->result[] = $bisverwendung; + } + + foreach($bisverwendung->result as $row_verwendung) + { + // Bei echten Dienstvertraegen mit voller inkludierter Lehre wird kein Stundensatz + // geliefert da dies im Vertrag inkludiert ist. + if ($row_verwendung->ba1code == 3 && $row_verwendung->inkludierte_lehre == -1) + { + $lem_obj->stundensatz = ''; + break; + } + } + } + } $lem_obj->insertamum = date('Y-m-d H:i:s'); $lem_obj->insertvon = 'Vorrueckung_'.$user; $lem_obj->ext_id = ''; From f072cc4f3dc7007fca49bcae51354022cee62433 Mon Sep 17 00:00:00 2001 From: alex Date: Wed, 26 Feb 2020 14:08:26 +0100 Subject: [PATCH 03/40] =?UTF-8?q?Studienerfolgsbest=C3=A4tigung:=20-=20add?= =?UTF-8?q?ed=20studiengangtyp=20englisch=20in=20RDF=20-=20added=20bezeich?= =?UTF-8?q?nung=5Fmehrsprachig=20in=20tbl=5Fstudiengangstyp?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- rdf/studienerfolg.rdf.php | 32 ++++++++------------------------ system/dbupdate_3.3.php | 27 +++++++++++++++++++++++++++ 2 files changed, 35 insertions(+), 24 deletions(-) diff --git a/rdf/studienerfolg.rdf.php b/rdf/studienerfolg.rdf.php index 700611c36..9d686cf51 100644 --- a/rdf/studienerfolg.rdf.php +++ b/rdf/studienerfolg.rdf.php @@ -48,12 +48,16 @@ function draw_studienerfolg($uid, $studiensemester_kurzbz) tbl_person.vorname, tbl_person.nachname,tbl_person.gebdatum, tbl_studiensemester.bezeichnung as sembezeichnung, tbl_studiengang.english as bezeichnung_englisch, - tbl_studiengang.typ, tbl_studiengang.orgform_kurzbz, tbl_person.matr_nr + tbl_studiengang.typ, tbl_studiengang.orgform_kurzbz, + tbl_studiengangstyp.bezeichnung_mehrsprachig[(SELECT index FROM public.tbl_sprache WHERE sprache='German')] as studiengangstypbezeichnung, + tbl_studiengangstyp.bezeichnung_mehrsprachig[(SELECT index FROM public.tbl_sprache WHERE sprache='English')] as studiengangstypbezeichnung_englisch, + tbl_person.matr_nr FROM - public.tbl_person, public.tbl_student, public.tbl_studiengang, public.tbl_benutzer, + public.tbl_person, public.tbl_student, public.tbl_studiengang, public.tbl_studiengangstyp, public.tbl_benutzer, public.tbl_studentlehrverband, public.tbl_studiensemester WHERE tbl_student.studiengang_kz = tbl_studiengang.studiengang_kz + and tbl_studiengang.typ = tbl_studiengangstyp.typ and tbl_student.student_uid = tbl_benutzer.uid and tbl_benutzer.person_id = tbl_person.person_id and tbl_student.student_uid = ".$db->db_add_param($uid)." @@ -69,27 +73,6 @@ function draw_studienerfolg($uid, $studiensemester_kurzbz) else return false; - switch($row->typ) - { - case 'b': - $studTyp = 'Bachelor'; - break; - case 'm': - $studTyp = 'Master'; - break; - case 'd': - $studTyp = 'Diplom'; - break; - case 'l': - $studTyp = 'Lehrgang'; - break; - case 'k': - $studTyp = 'Kurzstudium'; - break; - default: - $studTyp =''; - } - $studiensemester = new studiensemester(); $studiensemester_aktuell = $studiensemester->getNearest(); $student = new student(); @@ -180,7 +163,8 @@ function draw_studienerfolg($uid, $studiensemester_kurzbz) $xml .= " bezeichnung_englisch."]]>"; $xml .= " "; $xml .= " "; - $xml .= " ".$studTyp.""; + $xml .= " ".$row->studiengangstypbezeichnung.""; + $xml .= " ".$row->studiengangstypbezeichnung_englisch.""; $xml .= " ".$studiengang_kz.""; $xml .= " titelpre."]]>"; $xml .= " titelpost."]]>"; diff --git a/system/dbupdate_3.3.php b/system/dbupdate_3.3.php index 623ea7ac7..115e70fb3 100644 --- a/system/dbupdate_3.3.php +++ b/system/dbupdate_3.3.php @@ -3842,6 +3842,33 @@ if ($result = $db->db_query("SELECT 1 FROM pg_class WHERE relname = 'unq_idx_abl } } +// Spalte bezeichnung_mehrsprachig in public.tbl_studiengangstyp +if(!$result = @$db->db_query("SELECT bzeichnung_mehrsprachig FROM public.tbl_studiengangstyp LIMIT 1")) +{ + $qry = "ALTER TABLE public.tbl_studiengangstyp ADD COLUMN bezeichnung_mehrsprachig varchar(255)[];"; + + if(!$db->db_query($qry)) + echo 'public.tbl_studiengangstyp '.$db->db_last_error().'
'; + else + echo 'public.tbl_studiengangstyp: Spalte bezeichnung_mehrsprachig hinzugefuegt!
'; + + // Bezeichnung_mehrsprachig aus existierender Bezeichnung vorausfuellen. Ein Eintrag fuer jede Sprache mit Content aktiv. + $qry_help = "SELECT index FROM public.tbl_sprache WHERE content=TRUE;"; + if(!$result = $db->db_query($qry_help)) + echo 'tbl_studiengangstyp bezeichnung_mehrsprachig: Fehler beim ermitteln der Sprachen: '.$db->db_last_error().''; + else + { + $qry=''; + while($row = $db->db_fetch_object($result)) + $qry.= "UPDATE public.tbl_studiengangstyp set bezeichnung_mehrsprachig[".$row->index."] = bezeichnung;"; + + if(!$db->db_query($qry)) + echo 'Setzen der bezeichnung_mehrsprachig fehlgeschlagen: '.$db->db_last_error().'
'; + else + echo 'bis.tbl_studiengangstyp: bezeichnung_mehrprachig automatisch aus existierender Bezeichnung uebernommen
'; + } +} + // *** Pruefung und hinzufuegen der neuen Attribute und Tabellen echo '

Pruefe Tabellen und Attribute!

'; From 47f33ed930d01076271957c7a3d81597935aecb9 Mon Sep 17 00:00:00 2001 From: Cris Date: Wed, 26 Feb 2020 17:11:00 +0100 Subject: [PATCH 04/40] Added function getLehreinheiten_SWS_BISMeldung This function retrieves semesterwochenstunden of a given studiensemester for all employees who should be BIS reported. --- include/lehreinheitmitarbeiter.class.php | 35 ++++++++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/include/lehreinheitmitarbeiter.class.php b/include/lehreinheitmitarbeiter.class.php index 48d0de485..d7d469c2f 100644 --- a/include/lehreinheitmitarbeiter.class.php +++ b/include/lehreinheitmitarbeiter.class.php @@ -495,6 +495,41 @@ class lehreinheitmitarbeiter extends basis_db return $ret; } + public function getLehreinheiten_SWS_BISMeldung($uid, $studiensemester) + { + $qry = ' + SELECT + round(sum(semesterstunden) / 15) AS sws + FROM ( + SELECT DISTINCT lehreinheit_id, studiensemester_kurzbz, mitarbeiter_uid, semesterstunden + FROM lehre.tbl_lehreinheitmitarbeiter + JOIN public.tbl_mitarbeiter ma USING (mitarbeiter_uid) + JOIN public.tbl_benutzer ON (mitarbeiter_uid = uid) + JOIN public.tbl_person USING (person_id) + JOIN bis.tbl_bisverwendung USING (mitarbeiter_uid) + JOIN lehre.tbl_lehreinheit USING (lehreinheit_id) + JOIN public.tbl_studiensemester ss USING (studiensemester_kurzbz) + WHERE mitarbeiter_uid = '. $this->db_add_param($uid).' + AND ma.bismelden + AND studiensemester_kurzbz = '. $this->db_add_param($studiensemester).' + ) tbl_semesterstunden + '; + + if($this->db_query($qry)) + { + while($row = $this->db_fetch_object()) + { + $this->result[] = $row->sws; + } + return true; + } + else + { + $this->errormsg = 'Fehler bei der Datenbankabfrage'; + return false; + } + } + /** * Laedt die Lektoren einer Lehrveranstaltung in einem Studiensemester * @param lehrveranstaltung_id From cfb56b5adbffa26304675a74e4167e07e0b4e4d4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andreas=20=C3=96sterreicher?= Date: Thu, 5 Mar 2020 11:57:11 +0100 Subject: [PATCH 05/40] =?UTF-8?q?Datenbankanpassungen=20f=C3=BCr=20BIS=20S?= =?UTF-8?q?chnittstelle=20V.=206.8=20hinzugef=C3=BCgt?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Kodextabellen fuer Beschaeftigungsart1 angepasst (Möglichkeit zum Hinzufügen von multiplen Einträgen für die selbe Beschaeftigungsart) - Kodextabellen für Verwendung angepasst an die neue Version - Aktualisierung der Verwendungsplausibilitätsprüfungen - Script zur Generierung für neue Verwendungen an neuen Meldezeitraum angepasst - Funktionen Block im FAS entfernt/ausgeblendet. --- .../mitarbeiterfunktionoverlay.xul.php | 4 +- .../mitarbeiterverwendungdialog.js.php | 4 +- rdf/beschaeftigungsart1.rdf.php | 4 +- system/dbupdate_3.3.php | 98 ++++++++++++++++++- vilesci/bis/checkverwendung.php | 83 ++++++++-------- .../bis/personal_lektorenohnelehrauftrag.php | 2 +- vilesci/bis/personalmeldung_uebersicht.php | 4 - 7 files changed, 147 insertions(+), 52 deletions(-) diff --git a/content/mitarbeiter/mitarbeiterfunktionoverlay.xul.php b/content/mitarbeiter/mitarbeiterfunktionoverlay.xul.php index dff657cf6..6a50145eb 100644 --- a/content/mitarbeiter/mitarbeiterfunktionoverlay.xul.php +++ b/content/mitarbeiter/mitarbeiterfunktionoverlay.xul.php @@ -179,7 +179,7 @@ echo ''; - + - \ No newline at end of file + diff --git a/content/mitarbeiter/mitarbeiterverwendungdialog.js.php b/content/mitarbeiter/mitarbeiterverwendungdialog.js.php index 2b3bcfafd..841f167e9 100644 --- a/content/mitarbeiter/mitarbeiterverwendungdialog.js.php +++ b/content/mitarbeiter/mitarbeiterverwendungdialog.js.php @@ -87,12 +87,12 @@ function MitarbeiterVerwendungInit(mitarbeiter_uid, bisverwendung_id) var predicateNS = "http://www.technikum-wien.at/mitarbeiter/rdf"; fixangestellt = getTargetHelper(dsource,subject,rdfService.GetResource( predicateNS + "#fixangestellt" )); - + //neuer Datensatz wird angelegt MitarbeiterVerwendungDetailNeu='true'; //Defaultwerte - ba1code=3; //fixer Dienstvertrag + ba1code=103; //fixer Dienstvertrag ba2code=1; //unbefristet beschausmasscode=1; //Vollzeit verwendung_code=1; //Lehr- und Forschungspersonal diff --git a/rdf/beschaeftigungsart1.rdf.php b/rdf/beschaeftigungsart1.rdf.php index a18e4b26f..bacb36890 100644 --- a/rdf/beschaeftigungsart1.rdf.php +++ b/rdf/beschaeftigungsart1.rdf.php @@ -43,7 +43,7 @@ echo ' '; -$qry = "SELECT * FROM bis.tbl_beschaeftigungsart1 ORDER BY ba1code"; +$qry = "SELECT * FROM bis.tbl_beschaeftigungsart1 ORDER BY ba1kurzbz"; $db = new basis_db(); if($db->db_query($qry)) @@ -62,4 +62,4 @@ if($db->db_query($qry)) } ?> - \ No newline at end of file + diff --git a/system/dbupdate_3.3.php b/system/dbupdate_3.3.php index f100f2115..455ee4cb6 100644 --- a/system/dbupdate_3.3.php +++ b/system/dbupdate_3.3.php @@ -3525,6 +3525,102 @@ if($result = $db->db_query("SELECT * FROM pg_proc WHERE proname = 'transform_ges echo '
Function transform_geschlecht hinzugefügt.'; } } + +/** + * Anpassungen fuer BIS Personalmeldung 6.8 + */ +if (!$result = @$db->db_query("SELECT ba1bis_code FROM bis.tbl_beschaeftigungsart1 LIMIT 1")) +{ + /* + Beschaeftigungsausmass Kodextabelle aktualisieren + + BA1Code alt 1 => BA1Code neu 1 + BA1Code alt 2 => BA1Code neu 2 + BA1Code alt 3 => BA1Code neu 3 (Echter DV) + BA1Code alt 4 => BA1Code neu 5 (Freier DV -> Sonstiges) + BA1Code alt 5 => BA1Code neu 4 + BA1Code alt 6 => BA1Code neu 5 (Werkvertrag -> Sonstiges) + + BA1Code ist nicht mehr der Code der gemeldet wird. + BA1code wird um 100 erhöht damit klar ist, dass es sich um einen anderen Code handelt. + */ + $qry = " + ALTER TABLE bis.tbl_beschaeftigungsart1 ADD COLUMN ba1bis_code smallint; + UPDATE bis.tbl_beschaeftigungsart1 SET ba1bis_code=1, ba1code=101 WHERE ba1code=1; + UPDATE bis.tbl_beschaeftigungsart1 SET ba1bis_code=2, ba1code=102 WHERE ba1code=2; + UPDATE bis.tbl_beschaeftigungsart1 SET ba1bis_code=3, ba1code=103 WHERE ba1code=3; + UPDATE bis.tbl_beschaeftigungsart1 SET ba1bis_code=5, ba1code=105 WHERE ba1code=4; + UPDATE bis.tbl_beschaeftigungsart1 SET ba1bis_code=4, ba1code=104 WHERE ba1code=5; + UPDATE bis.tbl_beschaeftigungsart1 SET ba1bis_code=6, ba1code=106 WHERE ba1code=6; + "; + + /* + Für Werkvertraege wird eine eigene Beschaeftigungsart erstellt. + Die alten Eintraege für "Sonstiges (Werkvertrag)" werden auf diese neue Beschaeftigungsart umgehaengt + da diese bei uns alles Werkvertraege sind. + Fuer Studentische Hilfskraefte wird ebenfalls eine eigene Beschaeftigungsart erstellt. + Diese werden als Echter DV gemeldet aber getrennt verwaltet. + Alle Personen mit einer Funktion als Hilfskraft werden auf diese Beschaeftigungsart geaendert. + */ + $qry .= " + INSERT INTO bis.tbl_beschaeftigungsart1(ba1code, ba1bez, ba1kurzbz, ba1bis_code) VALUES(107,'Werkvertrag (Sonstiges)','Werkvertrag (Sonstiges)', 5); + INSERT INTO bis.tbl_beschaeftigungsart1(ba1code, ba1bez, ba1kurzbz, ba1bis_code) VALUES(108,'Studentische Hilfskraft (Echter DV)','Stud. Hilfskraft (Echter DV)', 3); + UPDATE bis.tbl_bisverwendung SET ba1code=107 WHERE ba1code=106; + UPDATE bis.tbl_bisverwendung SET ba1code=108 WHERE ba1code=103 AND EXISTS( + SELECT 1 FROM public.tbl_benutzerfunktion + WHERE uid=tbl_bisverwendung.mitarbeiter_uid AND funktion_kurzbz='hilfskraft' AND + ( + datum_von BETWEEN tbl_bisverwendung.beginn AND tbl_bisverwendung.ende + OR + datum_bis BETWEEN tbl_bisverwendung.beginn AND tbl_bisverwendung.ende + ) + ); + "; + + $qry .= " + UPDATE bis.tbl_beschaeftigungsart1 SET ba1bez='Dienstverhältnis zur postsekundären Bildungseinrichtung oder deren Träger' WHERE ba1code=103; + UPDATE bis.tbl_beschaeftigungsart1 SET ba1kurzbz='Lehr- oder Ausbildungsverhältnis', ba1bez='Lehr- oder Ausbildungsverhältnis' WHERE ba1code=104; + UPDATE bis.tbl_beschaeftigungsart1 SET ba1kurzbz='Freier Dienstvertrag (Sonstiges)', ba1bez='Sonstiges Beschäftigungsverhältnis' WHERE ba1code=105; + UPDATE bis.tbl_beschaeftigungsart1 SET ba1kurzbz='Andere Bildungseinrichtung', ba1bez='Dienstverhältnis zu einer anderen Bildungseinrichtung oder einem anderen Träger' WHERE ba1code=106; + "; + + /* + Verwendungs Kodextabelle aktualisieren + + VerwendungCode alt 1 => VerwendungsCode neu 1 + VerwendungCode alt 2 => VerwendungsCode neu 2 + VerwendungCode alt 3 => VerwendungsCode neu 3 + VerwendungCode alt 4 => VerwendungsCode neu 4 + VerwendungCode alt 5 => VerwendungsCode neu 5 + VerwendungCode alt 6 => VerwendungsCode neu 5 + VerwendungCode alt 7 => VerwendungsCode neu 5 + VerwendungCode alt 8 => VerwendungsCode neu 6 + VerwendungCode alt 9 => VerwendungsCode neu 7 + */ + + $qry .= " + UPDATE bis.tbl_bisverwendung SET verwendung_code=5 WHERE verwendung_code=6; + UPDATE bis.tbl_bisverwendung SET verwendung_code=5 WHERE verwendung_code=7; + UPDATE bis.tbl_bisverwendung SET verwendung_code=6 WHERE verwendung_code=8; + UPDATE bis.tbl_bisverwendung SET verwendung_code=7 WHERE verwendung_code=9; + + UPDATE bis.tbl_verwendung SET verwendungbez='wissenschaftliche Lehre und Forschung' WHERE verwendung_code=1; + UPDATE bis.tbl_verwendung SET verwendungbez='wissenschaftliche Mitarbeit in Lehre und Forschung' WHERE verwendung_code=2; + UPDATE bis.tbl_verwendung SET verwendungbez='professionelle Unterstützung der Studierenden in akademischen Belangen' WHERE verwendung_code=3; + UPDATE bis.tbl_verwendung SET verwendungbez='professionelle Unterstützung der Studierenden in Gesundheits- und Sozialbelangen' WHERE verwendung_code=4; + UPDATE bis.tbl_verwendung SET verwendungbez='Management' WHERE verwendung_code=5; + UPDATE bis.tbl_verwendung SET verwendungbez='Verwaltung' WHERE verwendung_code=6; + UPDATE bis.tbl_verwendung SET verwendungbez='Wartung und Betrieb' WHERE verwendung_code=7; + + DELETE FROM bis.tbl_verwendung WHERE verwendung_code=8; + DELETE FROM bis.tbl_verwendung WHERE verwendung_code=9; + "; + + if(!$db->db_query($qry)) + echo 'bis.tbl_verwendung und bis.tbl_beschaeftigungsart: '.$db->db_last_error().'
'; + else + echo '
Verwendung und Beschaeftigungsart für BIS Version 6.8 aktualisiert.'; +} // *** Pruefung und hinzufuegen der neuen Attribute und Tabellen echo '

Pruefe Tabellen und Attribute!

'; @@ -3535,7 +3631,7 @@ $tabellen=array( "bis.tbl_bisio_aufenthaltfoerderung" => array("bisio_id","aufenthaltfoerderung_code"), "bis.tbl_ausbildung" => array("ausbildungcode","ausbildungbez","ausbildungbeschreibung"), "bis.tbl_berufstaetigkeit" => array("berufstaetigkeit_code","berufstaetigkeit_bez","berufstaetigkeit_kurzbz"), - "bis.tbl_beschaeftigungsart1" => array("ba1code","ba1bez","ba1kurzbz"), + "bis.tbl_beschaeftigungsart1" => array("ba1code","ba1bez","ba1kurzbz","ba1bis_code"), "bis.tbl_beschaeftigungsart2" => array("ba2code","ba2bez"), "bis.tbl_beschaeftigungsausmass" => array("beschausmasscode","beschausmassbez","min","max"), "bis.tbl_besqual" => array("besqualcode","besqualbez"), diff --git a/vilesci/bis/checkverwendung.php b/vilesci/bis/checkverwendung.php index faf0e500e..5c6917110 100644 --- a/vilesci/bis/checkverwendung.php +++ b/vilesci/bis/checkverwendung.php @@ -40,19 +40,19 @@ $rechte->getBerechtigungen($uid); if(!$rechte->isBerechtigt('mitarbeiter/stammdaten', null,'suid')) die('Sie haben keine Berechtigung für diese Seite'); -$error_log=''; -$fehler=0; +$error_log = ''; +$fehler = 0; $text = ''; -$anzahl_quelle=0; -$anzahl_eingefuegt=0; -$anzahl_update=0; -$anzahl_fehler=0; -$ausgabe=''; -$error_log_fas=''; -$update=false; -$bismeldedatum=date("Y-m-d", mktime(0, 0, 0, 9, 1, date("Y"))); -$bismeldedatumvorjahr=date("Y-m-d", mktime(0, 0, 0, 9, 1, date("Y")-1)); +$anzahl_quelle = 0; +$anzahl_eingefuegt = 0; +$anzahl_update = 0; +$anzahl_fehler = 0; +$ausgabe = ''; +$error_log_fas = ''; +$update = false; +$bismeldedatum_start = date("Y-m-d", mktime(0, 0, 0, 1, 1, date("Y")-1)); +$bismeldedatum_ende = date("Y-m-d", mktime(0, 0, 0, 12, 31, date("Y")-1)); $ba1_arr = array(); $qry = "SELECT * FROM bis.tbl_beschaeftigungsart1"; @@ -141,14 +141,14 @@ if($resultall = $db->db_query($qryall)) AND mitarbeiter_uid=".$db->db_add_param($rowall->uid)." ORDER BY beginn"; - if($result = $db->db_query($qry)) + if ($result = $db->db_query($qry)) { - $num_rows=$db->db_num_rows($result); - if($num_rows>1) + $num_rows = $db->db_num_rows($result); + if ($num_rows > 1) { - while($row=$db->db_fetch_object($result)) + while ($row = $db->db_fetch_object($result)) { - if($i==0) + if ($i == 0) { echo "
@@ -165,7 +165,7 @@ if($resultall = $db->db_query($qryall)) $row->beginn." - ".$row->ende."
"; } } - elseif($num_rows==0) + elseif ($num_rows == 0) echo "
Aktive(r) Mitarbeiter(in): ".$rowall->nachname." ".$rowall->vorname." hat ".$num_rows." aktuelle Verwendungen:
"; } @@ -188,14 +188,14 @@ $qryall = ' ) GROUP BY uid, nachname, vorname ORDER by nachname, vorname;'; -if($resultall = $db->db_query($qryall)) +if ($resultall = $db->db_query($qryall)) { - $num_rows_all=$db->db_num_rows($resultall); + $num_rows_all = $db->db_num_rows($resultall); echo "

Bei $num_rows_all aktiven Fixangestellten Mitarbeitern sind keine aktuellen Verwendungen eingetragen

"; - while($rowall=$db->db_fetch_object($resultall)) + while ($rowall = $db->db_fetch_object($resultall)) { - $i=0; - $qry=" + $i = 0; + $qry = " SELECT * FROM @@ -207,12 +207,12 @@ if($resultall = $db->db_query($qryall)) AND mitarbeiter_uid=".$db->db_add_param($rowall->uid)." ORDER by beginn"; - if($result = $db->db_query($qry)) + if ($result = $db->db_query($qry)) { $num_rows=$db->db_num_rows($result); - while($row=$db->db_fetch_object($result)) + while ($row=$db->db_fetch_object($result)) { - if($i==0) + if ($i == 0) { echo "
@@ -233,7 +233,7 @@ if($resultall = $db->db_query($qryall)) } //3 - nicht aktive mitarbeiter mitarbeiter mit aktueller verwendung -$qryall=' +$qryall = ' SELECT uid, nachname, vorname FROM @@ -246,14 +246,14 @@ $qryall=' GROUP BY uid, nachname, vorname ORDER by nachname, vorname;'; -if($resultall = $db->db_query($qryall)) +if ($resultall = $db->db_query($qryall)) { $num_rows_all=$db->db_num_rows($resultall); echo "

Bei $num_rows_all nicht aktiven Mitarbeitern sind die aktuellen Verwendungen nicht plausibel (inaktiv aber aktuelle Verwendung)

"; - while($rowall=$db->db_fetch_object($resultall)) + while ($rowall = $db->db_fetch_object($resultall)) { - $i=0; - $qry=" + $i = 0; + $qry = " SELECT * FROM @@ -263,12 +263,12 @@ if($resultall = $db->db_query($qryall)) AND mitarbeiter_uid=".$db->db_add_param($rowall->uid)." ORDER BY beginn"; - if($result = $db->db_query($qry)) + if ($result = $db->db_query($qry)) { - $num_rows=$db->db_num_rows($result); - while($row=$db->db_fetch_object($result)) + $num_rows = $db->db_num_rows($result); + while ($row = $db->db_fetch_object($result)) { - if($i==0) + if ($i == 0) { echo "
@@ -287,16 +287,17 @@ if($resultall = $db->db_query($qryall)) } } } -//4 - wenn hauptberuf=j dann sollte verwendung=1,5,6 sein - check -$qryall=" +//4 - wenn hauptberufcode gesetzt ist, muss die Verwendung 1 sein +$qryall = " SELECT uid, nachname, vorname FROM campus.vw_mitarbeiter JOIN bis.tbl_bisverwendung ON (uid=mitarbeiter_uid) WHERE - verwendung_code NOT IN ('1','5','6') + verwendung_code NOT IN ('1') AND hauptberuflich=true + AND (tbl_bisverwendung.ende>".$db->db_add_param($bismeldedatum_start)." or tbl_bisverwendung.ende is null) GROUP BY uid, nachname, vorname ORDER by nachname, vorname, uid;"; @@ -304,8 +305,7 @@ if($resultall = $db->db_query($qryall)) { $num_rows_all=$db->db_num_rows($resultall); echo "

Bei $num_rows_all Mitarbeitern sind die Eintragungen 'hauptberuflich' nicht plausibel

"; - echo "hauptberuflich=ja, aber Verwendung nicht ". - $verwendung_arr[1].", ".$verwendung_arr[5]." oder ".$verwendung_arr[6]; + echo "hauptberuflich=ja, aber Verwendung nicht ".$verwendung_arr[1]; while($rowall=$db->db_fetch_object($resultall)) { @@ -316,9 +316,10 @@ if($resultall = $db->db_query($qryall)) FROM bis.tbl_bisverwendung WHERE - verwendung_code NOT IN ('1','5','6') + verwendung_code NOT IN ('1') AND hauptberuflich=true AND mitarbeiter_uid=".$db->db_add_param($rowall->uid)." + AND (tbl_bisverwendung.ende>".$db->db_add_param($bismeldedatum_start)." or tbl_bisverwendung.ende is null) ORDER BY beginn"; if($result = $db->db_query($qry)) @@ -342,6 +343,7 @@ if($resultall = $db->db_query($qryall)) } } //5 - stimmt beschausmasscode mit vertragsstunden überein? +/* Beschaeftigungsausmass nicht mehr relevant $qryall=" SELECT uid, nachname, vorname @@ -403,6 +405,7 @@ if($resultall = $db->db_query($qryall)) } } } +*/ //6 - aktive, freie lektoren auf verwendung 1 oder 2 prüfen $qryall=" SELECT diff --git a/vilesci/bis/personal_lektorenohnelehrauftrag.php b/vilesci/bis/personal_lektorenohnelehrauftrag.php index ab75e6a90..1cc1fbe0f 100644 --- a/vilesci/bis/personal_lektorenohnelehrauftrag.php +++ b/vilesci/bis/personal_lektorenohnelehrauftrag.php @@ -219,7 +219,7 @@ if ($result = $db->db_query($qry)) echo '

Anzahl:'.$db->db_num_rows($result); echo '
Beendingungsdatum der Verwendung: - +


diff --git a/vilesci/bis/personalmeldung_uebersicht.php b/vilesci/bis/personalmeldung_uebersicht.php index c640d09d3..7f14dd4ef 100644 --- a/vilesci/bis/personalmeldung_uebersicht.php +++ b/vilesci/bis/personalmeldung_uebersicht.php @@ -42,10 +42,6 @@ echo 'Plausibilitätsprüfungen Verwendungen
Diverse Prüfungen auf inkonsistente Daten

-
  • - Funktionen generieren
    - Funktionen zu den Verwendungen generieren (SWS pro Studiengang)

    -
  • Meldung generieren
    Abschließende Plausibilitätsprüfungen durchführen und Meldung generieren

    From 59cc8b78f90a0d0afd54713a22c5986c9d7a39fc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andreas=20=C3=96sterreicher?= Date: Thu, 5 Mar 2020 12:05:47 +0100 Subject: [PATCH 06/40] Spaltenbezeichnung fuer BIS Code korrigiert --- system/dbupdate_3.3.php | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/system/dbupdate_3.3.php b/system/dbupdate_3.3.php index 455ee4cb6..2700bf43d 100644 --- a/system/dbupdate_3.3.php +++ b/system/dbupdate_3.3.php @@ -3529,7 +3529,7 @@ if($result = $db->db_query("SELECT * FROM pg_proc WHERE proname = 'transform_ges /** * Anpassungen fuer BIS Personalmeldung 6.8 */ -if (!$result = @$db->db_query("SELECT ba1bis_code FROM bis.tbl_beschaeftigungsart1 LIMIT 1")) +if (!$result = @$db->db_query("SELECT ba1code_bis FROM bis.tbl_beschaeftigungsart1 LIMIT 1")) { /* Beschaeftigungsausmass Kodextabelle aktualisieren @@ -3545,13 +3545,13 @@ if (!$result = @$db->db_query("SELECT ba1bis_code FROM bis.tbl_beschaeftigungsar BA1code wird um 100 erhöht damit klar ist, dass es sich um einen anderen Code handelt. */ $qry = " - ALTER TABLE bis.tbl_beschaeftigungsart1 ADD COLUMN ba1bis_code smallint; - UPDATE bis.tbl_beschaeftigungsart1 SET ba1bis_code=1, ba1code=101 WHERE ba1code=1; - UPDATE bis.tbl_beschaeftigungsart1 SET ba1bis_code=2, ba1code=102 WHERE ba1code=2; - UPDATE bis.tbl_beschaeftigungsart1 SET ba1bis_code=3, ba1code=103 WHERE ba1code=3; - UPDATE bis.tbl_beschaeftigungsart1 SET ba1bis_code=5, ba1code=105 WHERE ba1code=4; - UPDATE bis.tbl_beschaeftigungsart1 SET ba1bis_code=4, ba1code=104 WHERE ba1code=5; - UPDATE bis.tbl_beschaeftigungsart1 SET ba1bis_code=6, ba1code=106 WHERE ba1code=6; + ALTER TABLE bis.tbl_beschaeftigungsart1 ADD COLUMN ba1code_bis smallint; + UPDATE bis.tbl_beschaeftigungsart1 SET ba1code_bis=1, ba1code=101 WHERE ba1code=1; + UPDATE bis.tbl_beschaeftigungsart1 SET ba1code_bis=2, ba1code=102 WHERE ba1code=2; + UPDATE bis.tbl_beschaeftigungsart1 SET ba1code_bis=3, ba1code=103 WHERE ba1code=3; + UPDATE bis.tbl_beschaeftigungsart1 SET ba1code_bis=5, ba1code=105 WHERE ba1code=4; + UPDATE bis.tbl_beschaeftigungsart1 SET ba1code_bis=4, ba1code=104 WHERE ba1code=5; + UPDATE bis.tbl_beschaeftigungsart1 SET ba1code_bis=6, ba1code=106 WHERE ba1code=6; "; /* @@ -3563,8 +3563,8 @@ if (!$result = @$db->db_query("SELECT ba1bis_code FROM bis.tbl_beschaeftigungsar Alle Personen mit einer Funktion als Hilfskraft werden auf diese Beschaeftigungsart geaendert. */ $qry .= " - INSERT INTO bis.tbl_beschaeftigungsart1(ba1code, ba1bez, ba1kurzbz, ba1bis_code) VALUES(107,'Werkvertrag (Sonstiges)','Werkvertrag (Sonstiges)', 5); - INSERT INTO bis.tbl_beschaeftigungsart1(ba1code, ba1bez, ba1kurzbz, ba1bis_code) VALUES(108,'Studentische Hilfskraft (Echter DV)','Stud. Hilfskraft (Echter DV)', 3); + INSERT INTO bis.tbl_beschaeftigungsart1(ba1code, ba1bez, ba1kurzbz, ba1code_bis) VALUES(107,'Werkvertrag (Sonstiges)','Werkvertrag (Sonstiges)', 5); + INSERT INTO bis.tbl_beschaeftigungsart1(ba1code, ba1bez, ba1kurzbz, ba1code_bis) VALUES(108,'Studentische Hilfskraft (Echter DV)','Stud. Hilfskraft (Echter DV)', 3); UPDATE bis.tbl_bisverwendung SET ba1code=107 WHERE ba1code=106; UPDATE bis.tbl_bisverwendung SET ba1code=108 WHERE ba1code=103 AND EXISTS( SELECT 1 FROM public.tbl_benutzerfunktion @@ -3631,7 +3631,7 @@ $tabellen=array( "bis.tbl_bisio_aufenthaltfoerderung" => array("bisio_id","aufenthaltfoerderung_code"), "bis.tbl_ausbildung" => array("ausbildungcode","ausbildungbez","ausbildungbeschreibung"), "bis.tbl_berufstaetigkeit" => array("berufstaetigkeit_code","berufstaetigkeit_bez","berufstaetigkeit_kurzbz"), - "bis.tbl_beschaeftigungsart1" => array("ba1code","ba1bez","ba1kurzbz","ba1bis_code"), + "bis.tbl_beschaeftigungsart1" => array("ba1code","ba1bez","ba1kurzbz","ba1code_bis"), "bis.tbl_beschaeftigungsart2" => array("ba2code","ba2bez"), "bis.tbl_beschaeftigungsausmass" => array("beschausmasscode","beschausmassbez","min","max"), "bis.tbl_besqual" => array("besqualcode","besqualbez"), From 040dfccf7d4d38db1f17b08dc538455fc8c3ba3c Mon Sep 17 00:00:00 2001 From: Cris Date: Thu, 5 Mar 2020 14:23:09 +0100 Subject: [PATCH 07/40] BIS Personalmeldung NEU: Container Person und Container Verwendung * Einholen von BIS relevanten Personen- und deren Verwendungsdaten * Konstruktion von Container Person * Konstruktion von Verwendung Container - Berechnung von JVZAE - Berechnung von VZAE - Beruecksichtigung von . Karenzen / TZ-Bildungskarenzen . Echten Dienstvertraegen (mit und ohne inkludierte Lehrtaetigkeit) . Freie Lektoren auf SWS Stundenbasis --- vilesci/bis/personalmeldung.php | 843 ++++++++++++++------------------ 1 file changed, 369 insertions(+), 474 deletions(-) diff --git a/vilesci/bis/personalmeldung.php b/vilesci/bis/personalmeldung.php index 534b54ed9..2f5745dd7 100644 --- a/vilesci/bis/personalmeldung.php +++ b/vilesci/bis/personalmeldung.php @@ -1,32 +1,14 @@ - * Andreas Oesterreicher < andreas.oesterreicher@technikum-wien.at > - * Rudolf Hangl < rudolf.hangl@technikum-wien.at > - * Gerald Simane-Sequens < gerald.simane-sequens@technikum-wien.at > - */ require_once('../../config/vilesci.config.inc.php'); require_once('../../include/studiensemester.class.php'); require_once('../../include/datum.class.php'); require_once('../../include/benutzerberechtigung.class.php'); require_once('../../include/functions.inc.php'); +require_once('../../include/bisverwendung.class.php'); +require_once('../../include/mitarbeiter.class.php'); require_once('../../include/studiengang.class.php'); +require_once('../../include/lehreinheitmitarbeiter.class.php'); $uid = get_uid(); @@ -39,510 +21,423 @@ if(!$rechte->isBerechtigt('mitarbeiter/stammdaten',null,'suid')) if (!$db = new basis_db()) die('Es konnte keine Verbindung zum Server aufgebaut werden.'); -$error_log=''; -$error_log1=''; -$error_log_all=""; -$mitarbeiter_data=array(); -$mitarbeiter_gesamt=array(); -$stgart=''; -$fehler=''; -$v=''; -$erhalter=''; -$zaehl=0; -$eteam=array(); -$studiensemester=new studiensemester(); -if(isset($_GET['stsem'])) - $stsem = $_GET['stsem']; -else - $stsem=$studiensemester->getaktorNext(1); //aktuelles Semester +if (!defined('BIS_VOLLZEIT_ARBEITSSTUNDEN') || empty('BIS_VOLLZEIT_ARBEITSSTUNDEN')) +{ + die('config var BIS_VOLLZEIT_ARBEITSSTUNDEN fehlt'); +} -$datei=''; -$mitarbeiterzahl=0; -$echt=0; -$frei=0; +if (!defined('BIS_VOLLZEIT_SWS_EINZELSTUNDENBASIS') || empty('BIS_VOLLZEIT_SWS_EINZELSTUNDENBASIS')) +{ + die('config var BIS_VOLLZEIT_SWS_EINZELSTUNDENBASIS fehlt'); +} -$nichtmelden = array(11,91,92,94,999,203,145,204,308,182,222); +if (!defined('BIS_VOLLZEIT_SWS_INKLUDIERTE_LEHRE') || empty('BIS_VOLLZEIT_SWS_INKLUDIERTE_LEHRE')) +{ + die('config var BIS_VOLLZEIT_SWS_INKLUDIERTE_LEHRE fehlt'); +} -$datumobj=new datum(); +if (!defined('BIS_EXCLUDE_STG') || empty('BIS_EXCLUDE_STG')) +{ + die('config var BIS_EXCLUDE_STG fehlt'); +} -if(mb_strstr($stsem,"WS")) +if (!defined('BIS_HALBJAHRES_GEWICHTUNG_SWS') || empty('BIS_HALBJAHRES_GEWICHTUNG_SWS')) +{ + die('config var BIS_HALBJAHRES_GEWICHTUNG_SWS fehlt'); +} + + +// Prüfe Zeitraum zur Erstellung einer BIS-Meldung +$studiensemester = new studiensemester(); +$stsem = (isset($_GET['stsem'])) ? $_GET['stsem'] : $studiensemester->getaktorNext(1); // aktuelles Studiensemester + +$datum_obj = new datum(); +if(mb_strstr($stsem,'SS')) { $studiensemester->load($stsem); - $jahr = $datumobj->formatDatum($studiensemester->start, 'Y'); - $bisdatum=date("Y-m-d", mktime(0, 0, 0, 9, 1, $jahr)); - $bisprevious=date("Y-m-d", mktime(0, 0, 0, 9, 1, $jahr-1)); + $jahr = $datum_obj->formatDatum($studiensemester->start, 'Y'); + $stichtag = date("Y-m-d", mktime(0, 0, 0, 12, 31, $jahr - 1)); // 31.12. des vorangehenden Kalenderjahres zur BIS Meldung TODO: oder Abfragetag mitgeben? } else { - echo "Fehler: Studiensemester muss ein Wintersemester sein"; + echo "Fehler: Studiensemester muss ein Sommersemester sein"; exit; } -$qry="SELECT * FROM public.tbl_erhalter"; -if($result = $db->db_query($qry)) +$beginn_imJahr = new DateTime(($jahr - 1). '-01-01'); +$ende_imJahr = new DateTime(($jahr - 1). '-12-31'); + +$tage_imJahr = $ende_imJahr->diff($beginn_imJahr)->days + 1; + +// Sommer- und Wintersemester im BIS Meldungsjahr +$ss_kurzbz = $studiensemester->getBeforePrevious(); +$ws_kurzbz = $studiensemester->getStudienjahrStudiensemester($stsem); +$ss = new studiensemester($ss_kurzbz); +$ws = new studiensemester($ws_kurzbz); + +// Alle gemeldeten Mitarbeiter holen +$mitarbeiter = new mitarbeiter(); +$mitarbeiter->getMitarbeiterBISMeldung($beginn_imJahr->format('Y-m-d')); +$mitarbeiter_arr = $mitarbeiter->result; + +// ********************************************************************************************************************* +// Container Person generieren +// ********************************************************************************************************************* +$person_arr = array(); + +foreach ($mitarbeiter_arr as $mitarbeiter) { - if($row = $db->db_fetch_object($result)) + $person_obj = new StdClass(); + + $person_obj->personalnummer = $mitarbeiter->personalnummer; + $person_obj->uid = $mitarbeiter->uid; + $person_obj->geschlecht = $mitarbeiter->geschlecht; + $person_obj->geschlechtX = $mitarbeiter->geschlechtX; + $person_obj->geburtsjahr = $datum_obj->formatDatum($mitarbeiter->gebdatum, 'Y'); + $person_obj->staatsangehoerigkeit = $mitarbeiter->staatsbuergerschaft; + $person_obj->hoechste_abgeschlossene_ausbildung = $mitarbeiter->ausbildungcode; + + // Habilitation + $bisverwendung = new bisverwendung(); + $person_obj->habilitation = $bisverwendung->isHabilitiert($mitarbeiter->uid) ? 'j' : 'n'; + + // Alle im FAS gemeldeten BIS-Verwendungen holen + $bisverwendung = new bisverwendung(); + $bisverwendung->getVerwendungenBISMeldung($mitarbeiter->uid, $stichtag); + $bisverwendung_arr = $bisverwendung->result; // alle im FAS gemeldeten BIS Verwendungen + + // BIS Verwendungsdauer und -gewichtung ergaenzen + $bisverwendung_arr = _addDauerGewichtung_imBISMeldungsjahr($bisverwendung_arr); + + // Hauptberufcode: wenn Hauptberuf / Nebenberuf im gleichen Jahr - laengere Dauer entscheidet + // ----------------------------------------------------------------------------------------------------------------- + $is_hauptberuflich = $bisverwendung_arr[count($bisverwendung_arr) - 1]->hauptberuflich; // default: hauptberuflich der letzten BIS-Verwendung + + // Wenn im selben Jahr hauptberuflich UND nebenberuflich -> laengere Dauer wird gemeldet (Ueberwiegenheitprinzip) + if (in_array(true, array_column($bisverwendung_arr, 'hauptberuflich')) && // hauptberuflich UND + in_array(false, array_column($bisverwendung_arr, 'hauptberuflich'))) // nebenberuflich { - $erhalter = sprintf("%03s",trim($row->erhalter_kz)); + $is_hauptberuflich = _getUeberwiegendeTaetigkeit_HauptNebenberuf($bisverwendung_arr); } -} -$ba1_arr = array(); -$qry = "SELECT * FROM bis.tbl_beschaeftigungsart1"; -if($result = $db->db_query($qry)) - while($row = $db->db_fetch_object($result)) - $ba1_arr[$row->ba1code]=$row->ba1kurzbz; + /** + * Hauptberufcode + * - hauptberuflich Lehrender: NULL, + * - nebenberuflich Lehrender: Hauptberufscode der letzten BIS-Verwendung + */ + $person_obj->hauptberufcode = ($is_hauptberuflich == true) ? NULL : $bisverwendung_arr[count($bisverwendung_arr) - 1]->hauptberufcode; -$ba2_arr = array(); -$qry = "SELECT * FROM bis.tbl_beschaeftigungsart2"; -if($result = $db->db_query($qry)) - while($row = $db->db_fetch_object($result)) - $ba2_arr[$row->ba2code]=$row->ba2bez; + // ----------------------------------------------------------------------------------------------------------------- + // Relatives Beschaeftigungsausmass / Anteilige JVZAE ermitteln + // ----------------------------------------------------------------------------------------------------------------- -$verwendung_arr = array(); -$qry = "SELECT * FROM bis.tbl_verwendung"; -if($result = $db->db_query($qry)) - while($row = $db->db_fetch_object($result)) - $verwendung_arr[$row->verwendung_code]=$row->verwendungbez; + // Lehrtaetigkeit ermitteln + $lema = new lehreinheitmitarbeiter(); + $lema->getLehreinheiten_SWS_BISMeldung($person_obj->uid, $ss_kurzbz); + $lehre_ss_sws = $lema->result[0]; // Anzahl SS - Semesterwochenstunden -$ausmass_arr = array(); -$qry = "SELECT * FROM bis.tbl_beschaeftigungsausmass"; -if($result = $db->db_query($qry)) - while($row = $db->db_fetch_object($result)) - $ausmass_arr[$row->beschausmasscode]=$row->beschausmassbez; + $lema = new lehreinheitmitarbeiter(); + $lema->getLehreinheiten_SWS_BISMeldung($person_obj->uid, $ws_kurzbz); + $lehre_ws_sws = $lema->result[0]; // Anzahl WS - Semesterwochenstunden -$stg_obj = new studiengang(); -$stg_obj->getAll(null,false); + $has_lehrtaetigkeit = !is_null($lehre_ss_sws) || !is_null($lehre_ws_sws); -$qry=" - SELECT DISTINCT ON (UID) *, transform_geschlecht(tbl_person.geschlecht, tbl_person.gebdatum) as geschlecht_imputiert - FROM - public.tbl_mitarbeiter - JOIN public.tbl_benutzer ON(mitarbeiter_uid=uid) - JOIN public.tbl_person USING(person_id) - JOIN bis.tbl_bisverwendung USING(mitarbeiter_uid) - WHERE - bismelden - AND personalnummer>0 - AND (tbl_bisverwendung.ende is NULL OR tbl_bisverwendung.ende>".$db->db_add_param($bisprevious).") - ORDER BY uid, nachname,vorname - "; - -if($result = $db->db_query($qry)) -{ - - $datei.=" - - ".$erhalter." - ".date("dmY", mktime(0, 0, 0, 11, 15, $jahr))." - "; - while($row = $db->db_fetch_object($result)) + foreach ($bisverwendung_arr as $index => $bisverwendung) { - $mitarbeiter_data=array(); + $has_vertragsstunden = !is_null($bisverwendung->vertragsstunden) && !empty($bisverwendung->vertragsstunden); + $is_lektor = $bisverwendung->verwendung_code == 1 || $bisverwendung->verwendung_code == 2; - $error_person = false; - $person_content=''; - $qryet="SELECT * FROM bis.tbl_entwicklungsteam WHERE mitarbeiter_uid=".$db->db_add_param($row->mitarbeiter_uid).";"; - if($resultet=$db->db_query($qryet)) + /** + * NOTE: is_karenziert ist ein boolean fuer Vollzeit-Karenz, nicht fuer Teilzeit-(Bildungs-)Karenz! + * Die Unterscheidung ist wichtig fuer die weitere Ermittlung der JVZAE. + * Vollzeitkarenz: Anteiliger Beschaeftigungsausmass und JVZAE wird auf 0 gesetzt. + * Bildungs-Teilzeitkarenz: entspricht im System + */ + $is_karenziert_VZ = $bisverwendung->beschausmasscode == 5 && !$has_vertragsstunden; // VZ-Kinder- und Bildungskarenz + $is_karenziert_TZ = $bisverwendung->beschausmasscode == 5 && $has_vertragsstunden; // TZ-Bildungskarenz + + // Karenzzeit + // ------------------------------------------------------------------------------------------------------------- + if ($is_karenziert_VZ) { - while($rowet=$db->db_fetch_object($resultet)) + // Relatives Beschaeftigungsausmass / Anteilige JVZAE ermitteln + $bisverwendung->beschaeftigungsausmass_relativ = number_format(0.00, 2); + $bisverwendung->jvzae_anteilig = 0; + continue; + } + + // Echter Dienstvertrag - d.h. Vertragsstunden sind vorhanden + // Bsp. angestellte Lektoren, angestellte MA in Verwaltung/Management/Wartung + // ------------------------------------------------------------------------------------------------------------- + else if ($has_vertragsstunden) + { + // Vertragsstunden koennen max. VZ Aequivalenz-Basiswert haben + if ($bisverwendung->vertragsstunden > BIS_VOLLZEIT_ARBEITSSTUNDEN) { - $eteam[$rowet->studiengang_kz]=$rowet->besqualcode; + $bisverwendung->vertragsstunden = BIS_VOLLZEIT_ARBEITSSTUNDEN; } - } - $error_log=''; - if($row->gebdatum=='' || $row->gebdatum==NULL) - { - $error_log.=($error_log!=''?', ':'')."Geburtsdatum ('".$row->gebdatum."')"; - } - if($row->geschlecht=='' || $row->geschlecht==NULL) - { - $error_log.=($error_log!=''?', ':'')."Geschlecht ('".$row->geschlecht."')"; - } - if($row->ausbildungcode=='' || $row->ausbildungcode==NULL) - { - $error_log.=($error_log!=''?', ':'')."HoechsteAbgeschlosseneAusbildung ('".$row->ausbildungcode."')"; - } - $mitarbeiter_data['uid']=$row->uid; - $mitarbeiter_data['personalnummer']=sprintf("%015s",$row->personalnummer); - $mitarbeiter_data['vorname']=$row->vorname; - $mitarbeiter_data['nachname']=$row->nachname; - $mitarbeiter_data['fixangestellt']=($row->fixangestellt=='t'?true:false); - $mitarbeiter_data['lektor']=($row->lektor=='t'?true:false); + // Relatives Beschaeftigungsausmass / Anteilige JVZAE ermitteln + $bisverwendung->beschaeftigungsausmass_relativ = round($bisverwendung->vertragsstunden / BIS_VOLLZEIT_ARBEITSSTUNDEN, 2); + $bisverwendung->jvzae_anteilig = round($bisverwendung->beschaeftigungsausmass_relativ * $bisverwendung->gewichtung, 2); + + // Echter Dienstvertrag - mit Lehrtaetigkeit, jedoch kein Lektor. + // Bsp. STG-Leiter mit Lehrtaetigkeit + // --------------------------------------------------------------------------------------------------------- + if (!$is_lektor && $has_lehrtaetigkeit) + { + /** + * Verwendungen ergänzen, wenn Mitarbeiter in Verwaltung/Managment/Wartung (jedenfalls nicht in Lehre) + * zugeteilt ist und dennoch lehrt. + * Die SWS werden sowohl fuer Sommer- als auch Wintersemster ermittelt und jeweils in einer eigenen + * Verwendung mit dem Verwendungscode 1 ergaenzt. + */ + $bisverwendung_beginn_BIS = new DateTime($bisverwendung->beginn_imBISMeldungsJahr); + $bisverwendung_ende_BIS = new DateTime($bisverwendung->ende_imBISMeldungsJahr); - $person_content.=" - - ".sprintf("%015s",$row->personalnummer)." - ".date("dmY", $datumobj->mktime_fromdate($row->gebdatum))." - ".strtoupper($row->geschlecht).""; - if ($row->geschlecht == 'x') - $person_content.=" - ".strtoupper($row->geschlecht_imputiert).""; - - $person_content.=" - ".$row->ausbildungcode.""; - $qryvw="SELECT * FROM bis.tbl_bisverwendung WHERE mitarbeiter_uid=".$db->db_add_param($row->mitarbeiter_uid)." AND habilitation=true;"; - if($resultvw=$db->db_query($qryvw)) - { - if($db->db_num_rows($resultvw)>0) - { - $person_content.=" - J"; - } - else - { - $person_content.=" - N"; - } - } - $qryvw="SELECT * FROM bis.tbl_bisverwendung WHERE mitarbeiter_uid=".$db->db_add_param($row->mitarbeiter_uid)." AND (ende is null OR ende>".$db->db_add_param($bisprevious).") AND (beginn<".$db->db_add_param($bisdatum)." OR beginn is null);"; - if($resultvw=$db->db_query($qryvw)) - { - if($db->db_num_rows($resultvw)>0) - { - $verwendung_data=array(); - while($rowvw=$db->db_fetch_object($resultvw)) + foreach (array($ss_kurzbz => $lehre_ss_sws, $ws_kurzbz => $lehre_ws_sws) as $studsem_kurzbz => $lehre_sws) { - if($rowvw->ba1code=='' || $rowvw->ba1code==NULL) - { - $error_log.=($error_log!=''?', ':'')."Beschaeftigungsart1 ('".$rowvw->ba1code."')"; - } - if($rowvw->ba2code=='' || $rowvw->ba2code==NULL) - { - $error_log.=($error_log!=''?', ':'')."Beschaeftigungsart2 ('".$rowvw->ba2code."')"; - } - if($rowvw->beschausmasscode=='' || $rowvw->beschausmasscode==NULL) - { - $error_log.=($error_log!=''?', ':'')."BeschaeftigungsAusmass ('".$rowvw->beschausmasscode."')"; - } - if($rowvw->verwendung_code=='' || $rowvw->verwendung_code==NULL) - { - $error_log.=($error_log!=''?', ':'')."VerwendungsCode ('".$rowvw->verwendung_code."')"; - } - if(!$rowvw->hauptberuflich && ($rowvw->hauptberufcode=='' || $rowvw->hauptberufcode==NULL)) - { - $error_log.=($error_log!=''?', ':'')."Hauptberuf ('".$rowvw->hauptberufcode."')"; - } - if($rowvw->ba1code==3) - { - $echt++; - } - if($rowvw->ba1code==4) - { - $frei++; - } - $key = $rowvw->ba1code.'/'.$rowvw->ba2code.'/'.$rowvw->beschausmasscode.'/'.$rowvw->verwendung_code; - $verwendung_data[$key]['ba1code']=$rowvw->ba1code; - $verwendung_data[$key]['ba2code']=$rowvw->ba2code; - $verwendung_data[$key]['beschausmasscode']=$rowvw->beschausmasscode; - $verwendung_data[$key]['verwendung_code']=$rowvw->verwendung_code; + $studsem = new studiensemester($studsem_kurzbz); + $studsem_start = new DateTime($studsem->start); + $studsem_ende = new DateTime($studsem->ende); - - - //Studiengangsleiter - $qryslt="SELECT - tbl_benutzerfunktion.*, tbl_studiengang.studiengang_kz - FROM public.tbl_benutzerfunktion JOIN public.tbl_studiengang USING(oe_kurzbz) - WHERE - uid=".$db->db_add_param($row->mitarbeiter_uid)." - AND funktion_kurzbz='Leitung' - AND (datum_von<".$db->db_add_param($bisdatum)." OR datum_von is null) - AND (datum_bis>".$db->db_add_param($bisprevious)." OR datum_bis is NULL) - AND studiengang_kz>0 - AND studiengang_kz<10000;"; - if($resultslt=$db->db_query($qryslt)) + // Wenn Lehrzeit in die BIS Verwendungszeit hineinfaellt, Verwendung erstellen + if (!is_null($lehre_sws) && + (!($studsem_start > $bisverwendung_ende_BIS) && + !($studsem_ende < $bisverwendung_beginn_BIS))) { - while($rowslt=$db->db_fetch_object($resultslt)) - { - if($rowslt->studiengang_kz=='' || $rowslt->studiengang_kz==NULL) - { - $error_log=($error_log!=''?', ':'')."StgKz(Leitung) ('".$rowslt->studiengang_kz."')"; - } - if(!in_array($rowslt->studiengang_kz, $nichtmelden)) - { - $verwendung_data[$key]['stgltg'][]=$rowslt->studiengang_kz; - } - } - } - //Funktionen - $qryfkt="SELECT * FROM bis.tbl_bisfunktion WHERE bisverwendung_id=".$db->db_add_param($rowvw->bisverwendung_id)." AND studiengang_kz>0 AND studiengang_kz<10000;"; - if($resultfkt=$db->db_query($qryfkt)) - { - while($rowfkt=$db->db_fetch_object($resultfkt)) - { - if($rowfkt->studiengang_kz=='' || $rowfkt->studiengang_kz==NULL) - { - $error_log.=($error_log!=''?', ':'')."StgKz(Funktion) ('".$rowfkt->studiengang_kz."')"; - } - if($rowfkt->sws=='' || $rowfkt->sws==NULL) - { - $error_log.=($error_log!=''?', ':'')."SWS ('".$rowfkt->sws."')"; - } - if($rowvw->hauptberuflich=='' || $rowvw->hauptberuflich==NULL) - { - $error_log.=($error_log!=''?', ':'')."Hauptberuflich ('".$rowvw->hauptberuflich."')"; - } - if(($rowvw->hauptberufcode=='' || $rowvw->hauptberufcode==NULL) && $rowvw->hauptberuflich=='f') - { - $error_log.=($error_log!=''?', ':'')."HauptberufCode ('".$rowvw->hauptberufcode."')"; - } - if (isset($eteam[$rowfkt->studiengang_kz])) - { - if(($eteam[$rowfkt->studiengang_kz]=='' || $eteam[$rowfkt->studiengang_kz]==NULL)) - { - $error_log.=($error_log!=''?', ':'')."BesondereQualifikationCode ('".$eteam[$rowfkt->studiengang_kz]."')"; - } - } + // Verwendung erstellen + list($tage_lehre_imSemester, $verwendung_lehre_obj) = _addVerwendung_fuerLehre_inkludiert($studsem, $bisverwendung); - $verwfkt_found=false; + // Relatives Beschaeftigungsausmass / Anteilige JVZAE ermitteln + $verwendung_lehre_obj->beschaeftigungsausmass_relativ = round($lehre_sws / BIS_VOLLZEIT_SWS_INKLUDIERTE_LEHRE, 2); // VZ-Basis fuer inkludierte Lehre + $verwendung_lehre_obj->gewichtung = ($tage_lehre_imSemester == 182) ? BIS_HALBJAHRES_GEWICHTUNG_SWS : round(BIS_HALBJAHRES_GEWICHTUNG_SWS / ($tage_imJahr / 2) * $tage_lehre_imSemester, 2); + $verwendung_lehre_obj->jvzae_anteilig = round($verwendung_lehre_obj->beschaeftigungsausmass_relativ * $verwendung_lehre_obj->gewichtung, 3); - // Wenn mehrere Verwendungen vorhanden sind fuer und funktionen fuer die gleichen Studiengaenge - // dann muessen diese zusammengezaehlt werden - if(isset($verwendung_data[$key]['fkt']) && is_array($verwendung_data[$key]['fkt'])) - { - foreach($verwendung_data[$key]['fkt'] as $key_verwfkt=>$row_verwfkt) - { - if($row_verwfkt['stgkz']==$rowfkt->studiengang_kz) - { - $verwendung_data[$key]['fkt'][$key_verwfkt]['sws']+=$rowfkt->sws; - $verwfkt_found=true; - break; - } - } - } - if(!$verwfkt_found) - { - $verwendung_data[$key]['fkt'][] = array( - 'stgkz'=>$rowfkt->studiengang_kz, - 'sws'=>$rowfkt->sws, - 'hauptberuflich'=>$rowvw->hauptberuflich, - 'hauptberufcode'=>$rowvw->hauptberufcode); - } - } + /** + * Relativen Beschaeftigungsausmass der BIS-Verwendung berichtigen + * (durch Abzug des eben erstellten relativen Beschaeftigungsausmass fuer Lehrtaetigkeiten) + * */ + $bisverwendung->beschaeftigungsausmass_relativ -= $verwendung_lehre_obj->beschaeftigungsausmass_relativ; + + /** + * Anteilige JVZAE der BIS-Verwendung berichtigen + * (durch Abzug der eben erstellten anteiligen JVZAE fuer Lehrtaetigkeiten) + */ + $bisverwendung->jvzae_anteilig -= $verwendung_lehre_obj->jvzae_anteilig; + $bisverwendung_arr [] = $verwendung_lehre_obj; } } - $mitarbeiter_data['verwendung']=$verwendung_data; - //Verwendungen ausgeben - foreach($verwendung_data as $row_verwendung) - { - $person_content.=" - - ".$row_verwendung['ba1code']." - ".$row_verwendung['ba2code']." - ".$row_verwendung['beschausmasscode']." - ".$row_verwendung['verwendung_code'].""; - - if(isset($row_verwendung['stgltg']) && isset($row_verwendung['verwendung_code']) && $row_verwendung['verwendung_code']==5) - { - foreach($row_verwendung['stgltg'] as $row_stgl) - { - $person_content.=" - - ".sprintf("%04s",$row_stgl)." - "; - } - } - if(isset($row_verwendung['fkt'])) - { - foreach($row_verwendung['fkt'] as $row_fkt) - { - $person_content.=" - - ".sprintf("%04s",$row_fkt['stgkz'])." - ".number_format($row_fkt['sws'],2).""; - if($row_fkt['hauptberuflich']=='t') - { - $person_content.=" - J"; - } - else - { - $person_content.=" - N - ".$row_fkt['hauptberufcode'].""; - } - if(isset($eteam[$row_fkt['stgkz']])) - { - $person_content.=" - J - ".$eteam[$row_fkt['stgkz']].""; - } - else - { - $person_content.=" - N"; - } - $person_content.=" - "; - } - } - $person_content.=" - "; - } - } - else + // TODO: Interner Check: if ($bisverwendung->jvzae_anteilig < 0) -> Anteil für 'Nicht-Lehre'-Teil muss gegeben sein. + } + + // Sonstige Beschaeftigungsverhaeltnisse ohne Vertragsstunden + // Freie Dienstvertraege auf Stundenbasis + // ------------------------------------------------------------------------------------------------------------- + else if (!$has_vertragsstunden && $has_lehrtaetigkeit) + { + foreach (array($ss_kurzbz => $lehre_ss_sws, $ws_kurzbz => $lehre_ws_sws) as $studsem => $lehre_sws) { - $qry_count="SELECT 1 FROM bis.tbl_bisverwendung WHERE mitarbeiter_uid=".$db->db_add_param($row->mitarbeiter_uid); - if($result_count=$db->db_query($qry_count)) + if (!is_null($lehre_sws)) { - if($db->db_num_rows($result_count)==0) + // Verwendungen erstellen + $verwendung_lehre_obj = _addVerwendung_fuerLehre_Stundenbasis($bisverwendung); + + // Relatives Beschaeftigungsausmass / Anteilige JVZAE ermitteln + $verwendung_lehre_obj->beschaeftigungsausmass_relativ = round($lehre_sws / BIS_VOLLZEIT_SWS_EINZELSTUNDENBASIS, 2); // VZ-Basis nach BIS-Vorgabe fuer Stundenbasis + $verwendung_lehre_obj->gewichtung = BIS_HALBJAHRES_GEWICHTUNG_SWS; + $verwendung_lehre_obj->jvzae_anteilig = round($verwendung_lehre_obj->beschaeftigungsausmass_relativ * $verwendung_lehre_obj->gewichtung, 2); + $bisverwendung_arr []= $verwendung_lehre_obj; + } + } + } + } + + // ***************************************************************************************************************** + // JVZAE und VZAE ermitteln (Jahresvollzeitaequivalenz, Vollzeitaequivalenz) + // ***************************************************************************************************************** + + // Container Verwendung aus dem bisverwendung_arr generieren, formatieren und dem Container Person anhängen + $verwendung_arr = array(); + foreach ($bisverwendung_arr as $bisverwendung) + { + if (empty($verwendung_arr) || // wenn erster Durchlauf ODER + (!(in_array($bisverwendung->ba1code, array_column($verwendung_arr, 'ba1code')) && // im verwendung_arr Beschaeftigungsart1 UND + in_array($bisverwendung->ba2code, array_column($verwendung_arr, 'ba2code')) && // Beschaeftigungsart2 UND + in_array($bisverwendung->verwendung_code, array_column($verwendung_arr, 'verwendung_code'))))) // Verwendung_code noch NICHT vorhanden + { + + // Temporaeren array mit Verwendungen mit gleichem Beschaeftigungsverhaeltnis und gleichem Verwendungscode erstellen + $verwendung_tmp_arr = array_filter($bisverwendung_arr, function ($obj) use ($bisverwendung) { + return + $obj->ba1code == $bisverwendung->ba1code && + $obj->ba2code == $bisverwendung->ba2code && + $obj->verwendung_code == $bisverwendung->verwendung_code; + }); + + // Neue Verwendung fuer Container Verwendung erstellen + $verwendung_obj = new StdClass(); + $verwendung_obj->ba1code = $bisverwendung->ba1code; + $verwendung_obj->ba2code = $bisverwendung->ba2code; + $verwendung_obj->verwendung_code = $bisverwendung->verwendung_code; + $verwendung_obj->jvzae = 0; + $verwendung_obj->vzae = -1; // default + + // Loop innerhalb Verwendungen mit selben Beschaeftigungsverhaeltnissen und Verwendung_codes + foreach ($verwendung_tmp_arr as $verwendung_tmp) + { + + // Jahresvollzeitaequivalenz JVZAE ermitteln + // --------------------------------------------------------------------------------------------------------- + /** + * Berechnung: + * JVZAE wird aus der Summe aller anteiligen JVZE gebildet. + */ + $verwendung_obj->jvzae += (isset($verwendung_tmp->jvzae_anteilig)) ? $verwendung_tmp->jvzae_anteilig * 100 : NULL; // TODO: not null... + + + // Vollzeitaequivalenz VZAE ermitteln (Beschaeftigungsausmass zum Stichtag 31.12) + // --------------------------------------------------------------------------------------------------------- + /** + * Berechnung: + * - Wenn Karenz zum Stichtag 31.12. vorhanden: VZAE = 0.00 + * - Wenn Beschaeftigung zum Stichtag 31.12. vorhanden: VZAE = Beschaeftigungsausmass relativ zu VZ + * - Wenn keine Beschaeftigung zum Stichtag 31.12 vorhanden: VZAE = -1; + */ + $ende_imBISMeldungsJahr = new DateTime($verwendung_tmp->ende_imBISMeldungsJahr); + $is_karenziert_VZ = $verwendung_tmp->beschausmasscode == 5 && $verwendung_tmp->jvzae_anteilig == 0; + if ($ende_imBISMeldungsJahr == $ende_imJahr) + { + if ($is_karenziert_VZ) { - //Keine Verwendung - $v.="$row->mitarbeiter_uid hat keine Verwendung und wird ausgelassen
    "; - $error_person = true; + $verwendung_obj->vzae = number_format(0.00, 2); + break; } else { - //Keine Verwendung im Meldezeitraum - //$v.="$row->mitarbeiter_uid hat keine Verwendung und wird ausgelassen
    "; - $error_person = true; + $verwendung_obj->vzae = (isset($verwendung_tmp->beschaeftigungsausmass_relativ)) ? $verwendung_tmp->beschaeftigungsausmass_relativ * 100 : NULL; // TODO: not null... } } - } } - $mitarbeiterzahl++; - $person_content.=" -
    "; - if($error_log!='' || $error_log1!='') - { - if($error_person) - $v.=''; - $v.="Bei Mitarbeiter (PersNr, UID, Vorname, Nachname) '".$row->personalnummer."','".$row->mitarbeiter_uid."', '".$row->nachname."', '".$row->vorname."': \n"; - if($error_log!='') - { - $v.="     Es fehlt: ".$error_log."\n"; - } - $zaehl++; - $v.="\n"; - $error_log=''; - if($error_person) - $v.=''; - } - else - { - if(!$error_person) - { - $datei.=$person_content; - $mitarbeiter_gesamt[]=$mitarbeiter_data; } + + // Neue Verwendung im finalen Verwendungcontainer speichern + $verwendung_arr [] = $verwendung_obj; } } - $datei.=" -
    -
    "; + + // Container Verwendung dem Container Person anhaengen + // ----------------------------------------------------------------------------------------------------------------- + $person_obj->verwendung_arr = $verwendung_arr; + $person_arr []= $person_obj; } -echo ' BIS - Meldung Mitarbeiter - - '; - include('../../include/meta/jquery.php'); - include('../../include/meta/jquery-tablesorter.php'); -echo ' - '; -echo "

    BIS - Mitarbeiterdaten werden überprüft (für Meldung ".$stsem." / $bisprevious - $bisdatum)


    "; -echo "Anzahl Mitarbeiter: Gesamt: ".$mitarbeiterzahl." / echter Dienstvertrag: ".$echt." / freier Dienstvertrag: ".$frei."

    "; -echo "

    Nicht plausible BIS-Daten


    "; -echo nl2br($v."

    "); - -//Tabelle mit Ergebnissen ausgeben - -$ddd='bisdaten/bismeldung_mitarbeiter.xml'; -$dateiausgabe=fopen($ddd,'w'); -fwrite($dateiausgabe,$datei); -fclose($dateiausgabe); - -echo '

    Folgende Personen werden gemeldet

    -Anzahl:'.count($mitarbeiter_gesamt).' - -
  • - - - - - - - - - - - - - - - -'; - -foreach($mitarbeiter_gesamt as $row) +// --------------------------------------------------------------------------------------------------------------------- +// Private Functions +// --------------------------------------------------------------------------------------------------------------------- +/** + * Funktion ermittelt fuer jede BIS-Verwendung die Dauer (in Tagen) und Gewichtung (Dauer / Tage im Jahr) + * @param array $bisverwendung_arr Array mit BIS-Verwendungsobjekten + * @return array + */ +function _addDauerGewichtung_imBISMeldungsjahr($bisverwendung_arr) { - echo ''; - echo ''; - echo ''; - echo ''; - echo ''; - echo ''; - echo ''; - foreach($row['verwendung'] as $row_verwendung) + global $tage_imJahr; + + foreach ($bisverwendung_arr as &$bisverwendung) { - // Ba1Code - if(isset($ba1_arr[$row_verwendung['ba1code']])) - echo ''; - else - echo ''; + $bisverwendung_beginn_imBISMeldungsJahr = new DateTime($bisverwendung->beginn_imBISMeldungsJahr); + $bisverwendung_ende_imBISMeldungsJahr = new DateTime($bisverwendung->ende_imBISMeldungsJahr); - // Ba2Code - if(isset($ba2_arr[$row_verwendung['ba2code']])) - echo ''; - else - echo ''; - - // Ausmass - if(isset($ausmass_arr[$row_verwendung['beschausmasscode']])) - echo ''; - else - echo ''; - - // Verwendung - if(isset($verwendung_arr[$row_verwendung['verwendung_code']])) - echo ''; - else - echo ''; - - echo ''; + $bisverwendung->dauer_imBISMeldungsJahr = $bisverwendung_ende_imBISMeldungsJahr->diff($bisverwendung_beginn_imBISMeldungsJahr)->days + 1; + $bisverwendung->gewichtung = round($bisverwendung->dauer_imBISMeldungsJahr / $tage_imJahr, 2); } - echo ''; + + return $bisverwendung_arr; } -echo '
    UIDVornameNachnamePersonalnummerFixangestelltLektorBeschaeftigungsArt1BeschaeftigungsArt2AusmassVerwendungDetails (Funktion/Lehre)
    '.$row['uid'].''.$row['vorname'].''.$row['nachname'].''.$row['personalnummer'].''.($row['fixangestellt']?'Ja':'Nein').''.($row['lektor']?'Ja':'Nein').''.$ba1_arr[$row_verwendung['ba1code']].''.$row_verwendung['ba1code'].''.$ba2_arr[$row_verwendung['ba2code']].''.$row_verwendung['ba2code'].''.$ausmass_arr[$row_verwendung['beschausmasscode']].''.$row_verwendung['beschausmasscode'].''.$verwendung_arr[$row_verwendung['verwendung_code']].''.$row_verwendung['verwendung_code'].''; - // Details - if(isset($row_verwendung['stgltg'])) - { - - foreach($row_verwendung['stgltg'] as $row_stgl) - { - echo 'Leitung:'.$stg_obj->kuerzel_arr[$row_stgl]; - echo '
    '; - } - } - - if(isset($row_verwendung['fkt'])) - { - foreach($row_verwendung['fkt'] as $row_fkt) - { - echo $stg_obj->kuerzel_arr[$row_fkt['stgkz']].': '.$row_fkt['sws'].' SWS'; - echo '
    '; - } - } - - echo '

    '; -echo 'Mitarbeiter-BIS-Meldung archivieren
    '; -echo "XML-Datei für Mitarbeiter-BIS-Meldung

    "; -?> + +/** + * Funktion ermittelt, ob Person im BIS Meldungsjahr vorwiegend haupt- oder nebenberuflich taetig war. + * @param $bisverwendung_arr Array mit BIS-Verwendungsobjekten + * @return boolean True wenn vorwiegend hauptberuflich + */ +function _getUeberwiegendeTaetigkeit_HauptNebenberuf($bisverwendung_arr) +{ + // Zeiten vergleichen + $sum_dauer_hauptberuflich = 0; + $sum_dauer_nebenberuflich = 0; + + foreach ($bisverwendung_arr as $bisverwendung) + { + if ($bisverwendung->hauptberuflich == true) + { + $sum_dauer_hauptberuflich += $bisverwendung->dauer_imBISMeldungsJahr; + } + else + { + $sum_dauer_nebenberuflich += $bisverwendung->dauer_imBISMeldungsJahr; + } + } + + // Laengere Dauer bestimmt Haupt- oder Nebenberuf + $is_hauptberuflich = $sum_dauer_hauptberuflich > $sum_dauer_nebenberuflich; + + return array($is_hauptberuflich); +} + +/** + * Funktion erstellt Verwendung fuer Lehrtaetigkeiten fuer Personen mit echtem Dienstvertrag. + * (zB STG Leiter mit Lehrtaetigkeit) + * @param object $studiensemester Sommer- / Winterstudiensemester + * @param object $bisverwendung + * @return array + */ +function _addVerwendung_fuerLehre_inkludiert($studiensemester, $bisverwendung) +{ + $verwendung_lehre_obj = new StdClass(); + + $verwendung_lehre_obj->ba1code = $bisverwendung->ba1code; + $verwendung_lehre_obj->ba2code = $bisverwendung->ba2code; + $verwendung_lehre_obj->beschausmasscode = $bisverwendung->beschausmasscode; + $verwendung_lehre_obj->verwendung_code = 1; + $verwendung_lehre_obj->beginn_imBISMeldungsJahr = $bisverwendung->beginn_imBISMeldungsJahr; + $verwendung_lehre_obj->ende_imBISMeldungsJahr = $bisverwendung->ende_imBISMeldungsJahr; + + /** + * Anteilige Lehrtage im Studiensemester ermitteln + * NOTE: Da die gesamte Lehrtaetigkeit fuer SS und WS im BIS Meldungsjahr gemeldet wird, muss die WS Lehrtaetigkeit + * jahresuebergreifend erfasst werden. Daher Datumsvergleiche mit dem tatsaechlichen BIS-Verwendungsende. + * */ + $tage_lehre_imSemester = 182; // default Tage im Halbjahr entsprechend der default Gewichtung von 0.5 + $studsem_start = new DateTime($studiensemester->start); + $studsem_ende = new DateTime($studiensemester->ende); + $bisverwendung_beginn_BIS = new DateTime($bisverwendung->beginn_imBISMeldungsJahr); + $bisverwendung_ende = new DateTime($bisverwendung->ende); + + $beginn_im_semester = ($bisverwendung_beginn_BIS < $studsem_start) ? $studsem_start : $bisverwendung_beginn_BIS; + $ende_im_semester = (!is_null($bisverwendung_ende) && $bisverwendung_ende > $studsem_ende) ? $studsem_ende : $bisverwendung_ende; + $tage_lehre_imSemester = $beginn_im_semester->diff($ende_im_semester)->days + 1; + + return array($tage_lehre_imSemester, $verwendung_lehre_obj); +} + +/** + * Funktion erstellt Verwendung fuer Lehrtaetigkeiten fuer freie Lektoren. + * @param object $bisverwendung + * @return object Verwendung fuer Lehrtaetigkeit + */ +function _addVerwendung_fuerLehre_Stundenbasis($bisverwendung) +{ + $verwendung_lehre_obj = new StdClass(); + + $verwendung_lehre_obj->ba1code = $bisverwendung->ba1code; + $verwendung_lehre_obj->ba2code = $bisverwendung->ba2code; + $verwendung_lehre_obj->beschausmasscode = $bisverwendung->beschausmasscode; + $verwendung_lehre_obj->verwendung_code = 1; + $verwendung_lehre_obj->beginn_imBISMeldungsJahr =$bisverwendung->beginn_imBISMeldungsJahr; + $verwendung_lehre_obj->ende_imBISMeldungsJahr = $bisverwendung->ende_imBISMeldungsJahr; + + return $verwendung_lehre_obj; +} + + From 3d663cdbd715534210d6775a822cc32f6a4e2c14 Mon Sep 17 00:00:00 2001 From: Cris Date: Thu, 5 Mar 2020 14:29:56 +0100 Subject: [PATCH 08/40] Added getVerwendungenBISMeldung() + isHabilitiert() . getVerwendungenBISMeldung: Holt alle Verwendungen eines Mitarbeiters innerhalb des BIS Meldungszeitraums . isHabilitiert: Prueft, ob Mitarbeiter habilitiert ist --- include/bisverwendung.class.php | 91 +++++++++++++++++++++++++++++++++ 1 file changed, 91 insertions(+) diff --git a/include/bisverwendung.class.php b/include/bisverwendung.class.php index 0e4e4fc06..ab8b5a4e4 100644 --- a/include/bisverwendung.class.php +++ b/include/bisverwendung.class.php @@ -587,5 +587,96 @@ class bisverwendung extends basis_db return false; } } + + /** + * Prueft, ob Mitarbeiter habilitiert ist + * @param $uid UID des Mitarbeiters + * @return bool + */ + public function isHabilitiert($uid) + { + $qry = ' + SELECT + * + FROM + bis.tbl_bisverwendung + WHERE + mitarbeiter_uid = '. $this->db_add_param($uid). ' + AND + habilitation = true; + '; + + if ($this->db_query($qry)) + { + return $this->db_num_rows() > 0; + } + } + + /** + * Holt alle Verwendungen eines Mitarbeiters innerhalb des BIS Meldungszeitraums + * @param $uid UID des Mitarbeiters + * @param $stichtag + * @return bool + */ + public function getVerwendungenBISMeldung($uid, $stichtag) + { + $datetime = new DateTime($stichtag); + $stichtag = $datetime->format('Y-m-d'); + $bismeldung_jahr = $datetime->format('Y'); + + $qry = ' + SELECT + *, + CASE + WHEN (beginn is null OR beginn < make_date('. $this->db_add_param($bismeldung_jahr). '::INTEGER, 1, 1)) + THEN make_date('. $this->db_add_param($bismeldung_jahr). '::INTEGER, 1, 1) + ELSE beginn + END as beginn_imBISMeldungsJahr, + CASE + WHEN (ende is null OR ende > make_date('. $this->db_add_param($bismeldung_jahr). '::INTEGER, 12, 31)) + THEN make_date('. $this->db_add_param($bismeldung_jahr). '::INTEGER, 12, 31) + ELSE ende + END as ende_imBISMeldungsJahr + FROM + bis.tbl_bisverwendung + WHERE + mitarbeiter_uid = '. $this->db_add_param($uid).' + AND (beginn <= '. $this->db_add_param($stichtag).' OR beginn is null) + AND (ende >= make_date('. $this->db_add_param($bismeldung_jahr). '::INTEGER, 1, 1) OR ende is null) + ORDER BY ende + '; + + if($this->db_query($qry)) + { + while($row = $this->db_fetch_object()) + { + $obj = new StdClass(); + + $obj->bisverwendung_id = $row->bisverwendung_id; + $obj->mitarbeiter_uid = $row->mitarbeiter_uid; + $obj->vertragsstunden = $row->vertragsstunden; + $obj->ba1code = $row->ba1code; + $obj->ba2code = $row->ba2code; + $obj->verwendung_code = $row->verwendung_code; + $obj->beschausmasscode = $row->beschausmasscode; + $obj->hauptberufcode = $row->hauptberufcode; + $obj->hauptberuflich = $this->db_parse_bool($row->hauptberuflich); + $obj->beginn = $row->beginn; + $obj->ende = $row->ende; + $obj->beginn_imBISMeldungsJahr = $row->beginn_imbismeldungsjahr; + $obj->ende_imBISMeldungsJahr = $row->ende_imbismeldungsjahr; + + + + $this->result[] = $obj; + } + return true; + } + else + { + $this->errormsg = 'Fehler bei der Datenbankabfrage'; + return false; + } + } } ?> From afb5cc3205c56f6684e59cb8925b07ccdc9b1091 Mon Sep 17 00:00:00 2001 From: Cris Date: Thu, 5 Mar 2020 14:31:20 +0100 Subject: [PATCH 09/40] Added getMitarbeiterBISMeldung() MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit getMitarbeiterBISMeldung: Gibt alle Mitarbeiter zurück, die im BIS Meldungszeitraum bisgemeldet sind --- include/mitarbeiter.class.php | 51 +++++++++++++++++++++++++++++++++++ 1 file changed, 51 insertions(+) diff --git a/include/mitarbeiter.class.php b/include/mitarbeiter.class.php index 467bff8f8..78bc1a439 100644 --- a/include/mitarbeiter.class.php +++ b/include/mitarbeiter.class.php @@ -1539,5 +1539,56 @@ class mitarbeiter extends benutzer } } + /** + * Gibt alle Mitarbeiter zurück, die im BIS Meldungszeitraum bisgemeldet sind + * @param String $stichtag BIS Meldung Stichtag + * @return boolean + */ + public function getMitarbeiterBISMeldung($stichtag) + { + $datetime = new DateTime($stichtag); + $bismeldung_jahr = $datetime->format('Y'); + + $qry = ' + SELECT DISTINCT ON (UID) *, + transform_geschlecht(tbl_person.geschlecht, tbl_person.gebdatum) as geschlecht_imputiert + FROM + public.tbl_mitarbeiter + JOIN public.tbl_benutzer ON(mitarbeiter_uid=uid) + JOIN public.tbl_person USING(person_id) + JOIN bis.tbl_bisverwendung USING(mitarbeiter_uid) + JOIN bis.tbl_beschaeftigungsausmass USING(beschausmasscode) + WHERE + bismelden + AND personalnummer > 0 + AND (beginn <= make_date('. $this->db_add_param($bismeldung_jahr). '::INTEGER, 12, 31) OR beginn is null) + AND (tbl_bisverwendung.ende is NULL OR tbl_bisverwendung.ende >= make_date('. $this->db_add_param($bismeldung_jahr). '::INTEGER, 1, 1)) + ORDER BY uid, nachname, vorname + '; + + if($result = $this->db_query($qry)) + { + while($row = $this->db_fetch_object($result)) + { + $obj = new StdClass(); + + $obj->uid = $row->uid; + $obj->vorname = $row->vorname; + $obj->vornamen = $row->vornamen; + $obj->nachname = $row->nachname; + $obj->gebdatum = $row->gebdatum; + $obj->geschlecht = $row->geschlecht; + $obj->geschlechtX = $row->geschlecht_imputiert; + $obj->staatsbuergerschaft = $row->staatsbuergerschaft; + $obj->personalnummer = $row->personalnummer; + $obj->ausbildungcode = $row->ausbildungcode; + + $this->result []= $obj; + } + return true; + } + return false; + } + } ?> From 88fc901bf7a3383fa447e62911bd38243d8d5ac2 Mon Sep 17 00:00:00 2001 From: Paolo Date: Fri, 6 Mar 2020 16:56:27 +0100 Subject: [PATCH 10/40] - Added new config entry ou_function_whitelist in message.php - Added new constant CFG_OU_FUNCTION_WHITELIST in library MessageLib - MessageLib->getOeKurzbz now filters out organization units based on config entry ou_function_whitelist - Removed redundant templates in Vorlage_widget --- application/config/message.php | 2 + application/libraries/MessageLib.php | 10 ++- .../Organisationseinheit_model.php | 14 ++-- application/widgets/Vorlage_widget.php | 65 +++++++++++++------ 4 files changed, 62 insertions(+), 29 deletions(-) diff --git a/application/config/message.php b/application/config/message.php index 35d34124b..3a9629279 100644 --- a/application/config/message.php +++ b/application/config/message.php @@ -18,6 +18,8 @@ $config['ou_receivers'] = array('ass'); $config['ou_receivers_no_notice'] = array('infocenter'); // Organization units that will not send the notice email to the internal account, but to the private one $config['ou_receivers_private'] = array('eac', 'ewu', 'scs'); +// +$config['ou_function_whitelist'] = array('ass', 'Leitung'); $config['message_redirect_url'] = array(); $config['message_redirect_url']['fallback'] = site_url('system/messages/ViewMessage/writeReply'); diff --git a/application/libraries/MessageLib.php b/application/libraries/MessageLib.php index b97ef4bae..fd2051f48 100644 --- a/application/libraries/MessageLib.php +++ b/application/libraries/MessageLib.php @@ -15,6 +15,7 @@ class MessageLib const CFG_OU_RECEIVERS = 'ou_receivers'; const CFG_OU_RECEIVERS_NO_NOTICE = 'ou_receivers_no_notice'; const CFG_OU_RECEIVERS_PRIVATE = 'ou_receivers_private'; + const CFG_OU_FUNCTION_WHITELIST = 'ou_function_whitelist'; const CFG_REDIRECT_VIEW_MESSAGE_URL = 'redirect_view_message_url'; // Templates names @@ -229,7 +230,14 @@ class MessageLib $ouArray = array(); // Copies organisation units in $ouArray array - foreach (getData($benutzer) as $val) $ouArray[] = $val->oe_kurzbz; + foreach (getData($benutzer) as $val) + { + // If the function is in the white list then get the organisation unit + if (in_array($val->funktion_kurzbz, $this->_ci->config->item(self::CFG_OU_FUNCTION_WHITELIST))) + { + $ouArray[] = $val->oe_kurzbz; + } + } return success($ouArray); } diff --git a/application/models/organisation/Organisationseinheit_model.php b/application/models/organisation/Organisationseinheit_model.php index 3efc8472a..6439bc8d6 100644 --- a/application/models/organisation/Organisationseinheit_model.php +++ b/application/models/organisation/Organisationseinheit_model.php @@ -125,12 +125,12 @@ class Organisationseinheit_model extends DB_Model public function getChilds($oe_kurzbz, $includeinactive = false) { $query = " - WITH RECURSIVE oes(oe_kurzbz, oe_parent_kurzbz) as + WITH RECURSIVE oes(oe_kurzbz, oe_parent_kurzbz) as ( - SELECT oe_kurzbz, oe_parent_kurzbz FROM public.tbl_organisationseinheit + SELECT oe_kurzbz, oe_parent_kurzbz FROM public.tbl_organisationseinheit WHERE oe_kurzbz=? %s UNION ALL - SELECT o.oe_kurzbz, o.oe_parent_kurzbz FROM public.tbl_organisationseinheit o, oes + SELECT o.oe_kurzbz, o.oe_parent_kurzbz FROM public.tbl_organisationseinheit o, oes WHERE o.oe_parent_kurzbz=oes.oe_kurzbz %s ) SELECT oe_kurzbz @@ -150,12 +150,12 @@ class Organisationseinheit_model extends DB_Model public function getParents($oe_kurzbz, $includeinactive = false) { $query= - "WITH RECURSIVE oes(oe_kurzbz, oe_parent_kurzbz) as + "WITH RECURSIVE oes(oe_kurzbz, oe_parent_kurzbz) as ( - SELECT oe_kurzbz, oe_parent_kurzbz FROM public.tbl_organisationseinheit + SELECT oe_kurzbz, oe_parent_kurzbz FROM public.tbl_organisationseinheit WHERE oe_kurzbz=? %s UNION ALL - SELECT o.oe_kurzbz, o.oe_parent_kurzbz FROM public.tbl_organisationseinheit o, oes + SELECT o.oe_kurzbz, o.oe_parent_kurzbz FROM public.tbl_organisationseinheit o, oes WHERE o.oe_kurzbz=oes.oe_parent_kurzbz %s ) SELECT oe_kurzbz @@ -177,7 +177,7 @@ class Organisationseinheit_model extends DB_Model { $condition = ' oe_kurzbz = ( - SELECT + SELECT oe_parent_kurzbz FROM public.tbl_organisationseinheit diff --git a/application/widgets/Vorlage_widget.php b/application/widgets/Vorlage_widget.php index 9ec13250f..2ba685edc 100644 --- a/application/widgets/Vorlage_widget.php +++ b/application/widgets/Vorlage_widget.php @@ -11,9 +11,9 @@ class Vorlage_widget extends DropdownWidget $vorlage = null; // If the user is an admin - if ($idAdmin === true) + if ($idAdmin) { - // Get all the vorlage with mimetype = text/html + // Get all the vorlage with mimetype = text/html $vorlage = $this->_getAllHTMLVorlage(); } else @@ -39,7 +39,7 @@ class Vorlage_widget extends DropdownWidget private function _getAllHTMLVorlage() { $this->load->model('system/Vorlage_model', 'VorlageModel'); - $this->VorlageModel->addOrder('vorlage_kurzbz'); + $this->VorlageModel->addOrder('bezeichnung'); $this->addSelectToModel($this->VorlageModel, 'vorlage_kurzbz', 'bezeichnung'); @@ -59,15 +59,31 @@ class Vorlage_widget extends DropdownWidget $vorlage = success(array()); // Default value $table = '( - SELECT v.vorlage_kurzbz, v.bezeichnung, vs.version, vs.oe_kurzbz, vs.aktiv, vs.subject, vs.text, v.mimetype - FROM tbl_vorlagestudiengang vs INNER JOIN tbl_vorlage v USING(vorlage_kurzbz) + SELECT v.vorlage_kurzbz, + v.bezeichnung, + vs.version, + vs.oe_kurzbz, + vs.aktiv, + vs.subject, + vs.text, + v.mimetype + FROM tbl_vorlagestudiengang vs + JOIN tbl_vorlage v USING(vorlage_kurzbz) ) templates'; + $alias = 'templates'; - $fields = array("templates.vorlage_kurzbz AS id", "templates.bezeichnung AS description"); + + $fields = array( + 'templates.vorlage_kurzbz AS id', + 'templates.bezeichnung || \' (\' || UPPER(templates.oe_kurzbz) || \')\' AS description' + ); + $where = 'templates.aktiv = TRUE - AND templates.subject IS NOT NULL - AND templates.text IS NOT NULL - AND templates.mimetype = \'text/html\''; + AND templates.subject IS NOT NULL + AND templates.text IS NOT NULL + AND templates.mimetype = \'text/html\' + GROUP BY 1, 2, 3'; + $order_by = 'description ASC'; if (!is_array($oe_kurzbz)) @@ -99,30 +115,37 @@ class Vorlage_widget extends DropdownWidget if (hasData($tmpVorlage)) { // If it's the first vorlage copy it - if (count($vorlage->retval) == 0) + if (!hasData($vorlage)) { - for ($j = 0; $j < count($tmpVorlage->retval); $j++) + for ($j = 0; $j < count(getData($tmpVorlage)); $j++) { - if ($tmpVorlage->retval[$j]->id != '') + if (getData($tmpVorlage)[$j]->id != '') { - array_push($vorlage->retval, $tmpVorlage->retval[$j]); + array_push($vorlage->retval, getData($tmpVorlage)[$j]); } } } - else // checks for duplicates, if it's not already present push it into the array $vorlage->retval + else // checks for duplicates, if it's not already present push it into the array getData($vorlage) { - for ($i = 0; $i < count($vorlage->retval); $i++) + for ($j = 0; $j < count(getData($tmpVorlage)); $j++) { - for ($j = 0; $j < count($tmpVorlage->retval); $j++) + $found = false; + $currentTmpVorlageData = null; + + for ($i = 0; $i < count(getData($vorlage)); $i++) { - if ($tmpVorlage->retval[$j]->id != '' - && $vorlage->retval[$i]->_pk != $tmpVorlage->retval[$j]->_pk - && $vorlage->retval[$i]->_ppk != $tmpVorlage->retval[$j]->_ppk - && $vorlage->retval[$i]->_jtpk != $tmpVorlage->retval[$j]->_jtpk) + $currentTmpVorlageData = getData($tmpVorlage)[$j]; + + if (getData($vorlage)[$i]->_pk == getData($tmpVorlage)[$j]->_pk + && getData($vorlage)[$i]->_ppk == getData($tmpVorlage)[$j]->_ppk + && getData($vorlage)[$i]->_jtpk == getData($tmpVorlage)[$j]->_jtpk) { - array_push($vorlage->retval, $tmpVorlage->retval[$j]); + $found = true; + break; } } + + if (!$found && $currentTmpVorlageData->id != '') array_push($vorlage->retval, $currentTmpVorlageData); } } } From da201df53430b1250f3461c75400297fe45ed5c3 Mon Sep 17 00:00:00 2001 From: Cris Date: Mon, 9 Mar 2020 12:23:47 +0100 Subject: [PATCH 11/40] Added Berechnung fuer Studentische Hilfskraefte Die Jahres-/Vollzeitaequivalenz fuer Studentische Hilfskraefte werden ueber eine kalkulatorische Stundenpauschale berechnet. --- vilesci/bis/personalmeldung.php | 37 +++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) diff --git a/vilesci/bis/personalmeldung.php b/vilesci/bis/personalmeldung.php index 2f5745dd7..c41c3fdd8 100644 --- a/vilesci/bis/personalmeldung.php +++ b/vilesci/bis/personalmeldung.php @@ -9,6 +9,7 @@ require_once('../../include/bisverwendung.class.php'); require_once('../../include/mitarbeiter.class.php'); require_once('../../include/studiengang.class.php'); require_once('../../include/lehreinheitmitarbeiter.class.php'); +require_once('../../include/benutzerfunktion.class.php'); $uid = get_uid(); @@ -46,6 +47,11 @@ if (!defined('BIS_HALBJAHRES_GEWICHTUNG_SWS') || empty('BIS_HALBJAHRES_GEWICHTUN die('config var BIS_HALBJAHRES_GEWICHTUNG_SWS fehlt'); } +if (!defined('BIS_PAUSCHALE_STUDENTISCHE_HILFSKRAFT') || empty('BIS_PAUSCHALE_STUDENTISCHE_HILFSKRAFT')) +{ + die('config var BIS_PAUSCHALE_STUDENTISCHE_HILFSKRAFT fehlt'); +} + // Prüfe Zeitraum zur Erstellung einer BIS-Meldung $studiensemester = new studiensemester(); @@ -68,6 +74,7 @@ $beginn_imJahr = new DateTime(($jahr - 1). '-01-01'); $ende_imJahr = new DateTime(($jahr - 1). '-12-31'); $tage_imJahr = $ende_imJahr->diff($beginn_imJahr)->days + 1; +$wochen_imJahr = $tage_imJahr / 7; // Sommer- und Wintersemester im BIS Meldungsjahr $ss_kurzbz = $studiensemester->getBeforePrevious(); @@ -252,6 +259,36 @@ foreach ($mitarbeiter_arr as $mitarbeiter) } } } + else + { + // Studentische Hilfskraft + // --------------------------------------------------------------------------------------------------------- + $benutzerfunktion = new Benutzerfunktion(); + $is_studentische_hilfskraft = $benutzerfunktion->getBenutzerFunktionByUid( + $person_obj->uid, + 'hilfskraft', + $beginn_imJahr->format('Y-m-d'), + $ende_imJahr->format('Y-m-d') + ); + + if ($is_studentische_hilfskraft) + { + // Kalkulatorische Umrechnung der Jahrespauschale + $pauschale_hilfskraft_inStunden = BIS_PAUSCHALE_STUDENTISCHE_HILFSKRAFT; // Pauschale pro Jahr und Person (in Stunden) + $pauschale_hilfskraft_relativImJahr = $pauschale_hilfskraft_inStunden / 1; // Stundenpauschale in Verhaeltnis zu 1 Jahr + $vollzeit_arbeitsstunden_imJahr = BIS_VOLLZEIT_ARBEITSSTUNDEN * $wochen_imJahr; + + // Relatives Beschaeftigungsausmass / Anteilige JVZAE ermitteln + $bisverwendung->beschaeftigungsausmass_relativ = round($pauschale_hilfskraft_relativImJahr / $vollzeit_arbeitsstunden_imJahr, 4); + $bisverwendung->jvzae_anteilig =round($pauschale_hilfskraft_relativImJahr / $vollzeit_arbeitsstunden_imJahr, 4); + } + // Mitarbeiter ohne Vertragsstunden und keine SWS + // --------------------------------------------------------------------------------------------------------- + else + { + // TODO: Plausicheck + } + } } // ***************************************************************************************************************** From 9bb4e2507a2056fdede0f4c7ac39f7fd56fccdd9 Mon Sep 17 00:00:00 2001 From: Paolo Date: Mon, 9 Mar 2020 13:41:17 +0100 Subject: [PATCH 12/40] - Added two new functions to config entry ou_function_whitelist - Fixed Vorlage_widget to retrieve univocally templates --- application/config/message.php | 2 +- application/widgets/Vorlage_widget.php | 8 ++++++-- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/application/config/message.php b/application/config/message.php index 3a9629279..8232cdfb7 100644 --- a/application/config/message.php +++ b/application/config/message.php @@ -19,7 +19,7 @@ $config['ou_receivers_no_notice'] = array('infocenter'); // Organization units that will not send the notice email to the internal account, but to the private one $config['ou_receivers_private'] = array('eac', 'ewu', 'scs'); // -$config['ou_function_whitelist'] = array('ass', 'Leitung'); +$config['ou_function_whitelist'] = array('ass', 'Leitung', 'fachzuordnung', 'oezuordnung'); $config['message_redirect_url'] = array(); $config['message_redirect_url']['fallback'] = site_url('system/messages/ViewMessage/writeReply'); diff --git a/application/widgets/Vorlage_widget.php b/application/widgets/Vorlage_widget.php index 2ba685edc..f1898eb09 100644 --- a/application/widgets/Vorlage_widget.php +++ b/application/widgets/Vorlage_widget.php @@ -136,7 +136,8 @@ class Vorlage_widget extends DropdownWidget { $currentTmpVorlageData = getData($tmpVorlage)[$j]; - if (getData($vorlage)[$i]->_pk == getData($tmpVorlage)[$j]->_pk + if (getData($vorlage)[$i]->id == getData($tmpVorlage)[$j]->id + && getData($vorlage)[$i]->_pk == getData($tmpVorlage)[$j]->_pk && getData($vorlage)[$i]->_ppk == getData($tmpVorlage)[$j]->_ppk && getData($vorlage)[$i]->_jtpk == getData($tmpVorlage)[$j]->_jtpk) { @@ -145,7 +146,10 @@ class Vorlage_widget extends DropdownWidget } } - if (!$found && $currentTmpVorlageData->id != '') array_push($vorlage->retval, $currentTmpVorlageData); + if (!$found && $currentTmpVorlageData->id != '') + { + array_push($vorlage->retval, $currentTmpVorlageData); + } } } } From 40915ba3e160c3c6cdd31fb1442a64e2fa912bac Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andreas=20=C3=96sterreicher?= Date: Tue, 10 Mar 2020 16:36:21 +0100 Subject: [PATCH 13/40] =?UTF-8?q?Neue=20Funktionen=20f=C3=BCr=20BIS-Meldun?= =?UTF-8?q?g=20erg=C3=A4nzt?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- system/dbupdate_3.3.php | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/system/dbupdate_3.3.php b/system/dbupdate_3.3.php index 2700bf43d..00d075dfd 100644 --- a/system/dbupdate_3.3.php +++ b/system/dbupdate_3.3.php @@ -3616,6 +3616,12 @@ if (!$result = @$db->db_query("SELECT ba1code_bis FROM bis.tbl_beschaeftigungsar DELETE FROM bis.tbl_verwendung WHERE verwendung_code=9; "; + $qry.=" + INSERT INTO public.tbl_funktion(funktion_kurzbz, beschreibung, aktiv, fachbereich, semester) VALUES('vertrBefugter','Vertretungsbefugte/r des Erhalters',true,false,false); + INSERT INTO public.tbl_funktion(funktion_kurzbz, beschreibung, aktiv, fachbereich, semester) VALUES('kollegium_Ltg','Leiter/in des Kollegiums',true,false,false); + INSERT INTO public.tbl_funktion(funktion_kurzbz, beschreibung, aktiv, fachbereich, semester) VALUES('kollegium_stvLtg','Stellv. Leiter/in des Kollegiums',true,false,false); + "; + if(!$db->db_query($qry)) echo 'bis.tbl_verwendung und bis.tbl_beschaeftigungsart: '.$db->db_last_error().'
    '; else From 72c2ce6410a1e0ed43154a6cdb7587f43229359f Mon Sep 17 00:00:00 2001 From: Cris Date: Wed, 11 Mar 2020 14:42:07 +0100 Subject: [PATCH 14/40] Added Container Funktion . FunktionsCode . BesondereQualifikationsCode . Studiengang - StgKz --- vilesci/bis/personalmeldung.php | 191 ++++++++++++++++++++++++++++++++ 1 file changed, 191 insertions(+) diff --git a/vilesci/bis/personalmeldung.php b/vilesci/bis/personalmeldung.php index c41c3fdd8..5bd0a0e89 100644 --- a/vilesci/bis/personalmeldung.php +++ b/vilesci/bis/personalmeldung.php @@ -10,6 +10,8 @@ require_once('../../include/mitarbeiter.class.php'); require_once('../../include/studiengang.class.php'); require_once('../../include/lehreinheitmitarbeiter.class.php'); require_once('../../include/benutzerfunktion.class.php'); +require_once('../../include/organisationseinheit.class.php'); +require_once('../../include/entwicklungsteam.class.php'); $uid = get_uid(); @@ -52,6 +54,21 @@ if (!defined('BIS_PAUSCHALE_STUDENTISCHE_HILFSKRAFT') || empty('BIS_PAUSCHALE_ST die('config var BIS_PAUSCHALE_STUDENTISCHE_HILFSKRAFT fehlt'); } +if (!defined('BIS_FUNKTIONSCODE_1234_ARR') || empty('BIS_FUNKTIONSCODE_1234_ARR')) +{ + die('config var BIS_FUNKTIONSCODE_1234_ARR fehlt'); +} + +if (!defined('BIS_FUNKTIONSCODE_5_ARR') || empty('BIS_FUNKTIONSCODE_5_ARR')) +{ + die('config var BIS_FUNKTIONSCODE_5_ARR fehlt'); +} + +if (!defined('BIS_FUNKTIONSCODE_6_ARR') || empty('BIS_FUNKTIONSCODE_6_ARR')) +{ + die('config var BIS_FUNKTIONSCODE_6_ARR fehlt'); +} + // Prüfe Zeitraum zur Erstellung einer BIS-Meldung $studiensemester = new studiensemester(); @@ -366,6 +383,43 @@ foreach ($mitarbeiter_arr as $mitarbeiter) // Container Verwendung dem Container Person anhaengen // ----------------------------------------------------------------------------------------------------------------- $person_obj->verwendung_arr = $verwendung_arr; + + + // ********************************************************************************************************************* + // Container Funktion und Lehre werden nur für STG generiert (nicht für Lehrgaenge) + // ********************************************************************************************************************* + // ----------------------------------------------------------------------------------------------------------------- + // Container Funktion generieren + // ----------------------------------------------------------------------------------------------------------------- + $funktion_arr = array(); + + // Alle Benutzerfunktionen im BIS Meldungsjahr holen + $benutzerfunktion = new Benutzerfunktion(); + $benutzerfunktion->getBenutzerFunktionByUid( + $person_obj->uid, null, + $beginn_imJahr->format('Y-m-d'), + $ende_imJahr->format('Y-m-d') + ); + $bisfunktion_arr = $benutzerfunktion->result; + + /** + * Funktionscode 1 - 6 anhand Benutzerfunktionen ermitteln + * Exkludiert Funktionen, die einem Lehrgang bzw. STG, die nicht BIS-gemeldet werden, zugeordnet sind. + */ + // ------------------------------------------------------------------------------------------------------------- + $funktion_arr = _getFunktionscontainer_Funktionscode123456($bisfunktion_arr); + + /** + * Funktionscode 7 aus Entwicklungsteam-Tabelle ermitteln + * Exkludiert Funktionen, die einem Lehrgang bzw. STG, die nicht BIS-gemeldet werden, zugeordnet sind. + */ + // ------------------------------------------------------------------------------------------------------------- + $funktion_arr = _addFunktionscontainer_Funktionscode7($person_obj->uid, $funktion_arr); + + // Container Funktion dem Container Person anhaengen + // ----------------------------------------------------------------------------------------------------------------- + $person_obj->funktion_arr = $funktion_arr; + $person_arr []= $person_obj; } @@ -477,4 +531,141 @@ function _addVerwendung_fuerLehre_Stundenbasis($bisverwendung) return $verwendung_lehre_obj; } +/** + * Funktionscode 1 - 6 anhand Benutzerfunktionen ermitteln + * @param array $bisfunktion_arr + * @return array + */ +function _getFunktionscontainer_Funktionscode123456($bisfunktion_arr) +{ + $funktion_arr = array(); + + foreach ($bisfunktion_arr as $bisfunktion) + { + $funktion_code = NULL; + $has_oe_lehrgang = false; // default + + $studiengang = new Studiengang(); + $studiengang->getStudiengangFromOe($bisfunktion->oe_kurzbz); + + // Wenn OE der Funktion eine STG-Kennzahl ist + if (!is_null($studiengang->studiengang_kz)) + { + // Pruefen ob STG-Kennzahl STG oder Lehrgang + $has_oe_lehrgang = !($studiengang->studiengang_kz > 0 && $studiengang->studiengang_kz < 10000); + + // STG, die nicht BIS-bemeldet werden, ueberspringen + if (in_array($studiengang->studiengang_kz, BIS_EXCLUDE_STG)) + { + continue; + } + } + + // Funktionscode 1 - 6 anhand Benutzerfunktionen ermitteln + // ------------------------------------------------------------------------------------------------------------- + // Wenn OE der Funktion nicht einem Lehrgang zugeordnet ist + if (!$has_oe_lehrgang) + { + // FunktionsCode 1-4 + if (array_key_exists($bisfunktion->funktion_kurzbz, BIS_FUNKTIONSCODE_1234_ARR)) + { + $funktion_code = BIS_FUNKTIONSCODE_1234_ARR[$bisfunktion->funktion_kurzbz]; + } + + if (in_array($bisfunktion->funktion_kurzbz, BIS_FUNKTIONSCODE_5_ARR)) // Leitung + { + // FunktionsCode 5 : STG-Leitung + if (!is_null($studiengang->studiengang_kz)) + { + $funktion_code = 5; + } + + // FunktionsCode 6 : Leitung Organisationseinheit der postsekundaeren Bildungseinrichtung + $organisationseinheit = new Organisationseinheit($bisfunktion->oe_kurzbz); + if (is_null($studiengang->studiengang_kz) && + !in_array($organisationseinheit->oetyp_bezeichnung, BIS_FUNKTIONSCODE_6_ARR)) // nicht Teamleitung + { + $funktion_code = 6; + } + } + } + + // Funktionsobjekt generieren + if (!is_null($funktion_code) && // Funktionscode vorhanden UND + (empty($funktion_arr) || // (Erster Durchlauf ODER + !in_array($funktion_code, array_column($funktion_arr, 'funktionscode')))) // Funktionsobjekt mit diesem Funktionscode nicht vorhanden) + { + $funktion_obj = new StdClass(); + $funktion_obj->funktionscode = $funktion_code; + $funktion_obj->besondereQualifikationCode = NULL; + $funktion_obj->studiengang = ($funktion_code == 5) + ? array(setLeadingZero(intval($studiengang->studiengang_kz), 4)) // STG bei Funktionscode 5 melden + : NULL; + + // Funktionsobjekt dem Funktionscontainer anhaengen + $funktion_arr []= $funktion_obj; + } + else if ($funktion_code == 5) // Funktionscontainer vorhanden und Funktionscode 5 + { + $funktion_obj_arr = array_filter($funktion_arr, function (&$obj) { + return $obj->funktionscode == 5; + }); + + $funktion_obj_arr[0]->studiengang[]= setLeadingZero(intval($studiengang->studiengang_kz), 4); // STG ergaenzen + } + } + + return $funktion_arr; +} + +/** + * Funktionscode 7 aus Entwicklungsteam-Tabelle ermitteln + * @param String $uid + * @param array $funktion_arr Object-Array + * @return array + * + */ +function _addFunktionscontainer_Funktionscode7($uid, $funktion_arr) +{ + $entwicklungsteam = new Entwicklungsteam(); + $entwicklungsteam->getEntwicklungsteam($uid); + $entwicklungsteam_arr = $entwicklungsteam->result; + + if (!empty($entwicklungsteam_arr)) + { + // Lehrgaenge und STG, die nicht BIS gemeldet werden, extrahieren + $entwicklungsteam_arr = array_filter($entwicklungsteam_arr, function ($obj) + { + return + !in_array($obj->studiengang_kz, BIS_EXCLUDE_STG) && + $obj->studiengang_kz > 0 && + $obj->studiengang_kz < 10000; + }); + } + + if (!empty($entwicklungsteam_arr)) + { + // Hoechste besondere Qualifikation + $besondere_qualifikation_code_arr = array_values(array_column($entwicklungsteam_arr, 'besqualcode')); + $besondere_qualifikation_code = max($besondere_qualifikation_code_arr); + + // Studiengaenge, wo Person Teil des Entwicklungsteams gewesen ist + $studiengang_kz_arr = array_values(array_column($entwicklungsteam_arr, 'studiengang_kz')); + sort($studiengang_kz_arr); // sortieren + foreach($studiengang_kz_arr as &$studiengang_kz) // fuehrende Nullen fuer STG + { + $studiengang_kz = setLeadingZero(intval($studiengang_kz), 4); + } + + // Funktionsobjekt generieren und dem Funktionscontainer anhaengen + $funktion_obj = new StdClass(); + $funktion_obj->funktionscode = 7; + $funktion_obj->besondereQualifikationCode = $besondere_qualifikation_code; + $funktion_obj->studiengang = $studiengang_kz_arr; + $funktion_arr []= $funktion_obj; + } + + return $funktion_arr; +} + From a5884127f7f933ccf01efa782db463c897137c86 Mon Sep 17 00:00:00 2001 From: Cris Date: Wed, 11 Mar 2020 14:54:09 +0100 Subject: [PATCH 15/40] Corrected Realtives Beschaeftigungsausmass Fuer Verwendungen von angestellten Personen in der Admin/Verwaltung, jedoch mit Lehrtaetigkeit, werden fuer die Lehre eigene Verwendungen mit Verwendungscode 1 erstellt. Das relative Beschaeftigungsausmass muss dann entsprechend angepasst werden. Zuvor wurden dem rel BA der Hauptverwendung die rel BA von Sommer- und Wintersemester abgezogen. Fuer die richtige Berechnung der VZAE darf jedoch nur das rel BA Wintersemester abgezogen werden. (Faellt in den Stichtag 31.12) --- vilesci/bis/personalmeldung.php | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/vilesci/bis/personalmeldung.php b/vilesci/bis/personalmeldung.php index 5bd0a0e89..a6fde06ea 100644 --- a/vilesci/bis/personalmeldung.php +++ b/vilesci/bis/personalmeldung.php @@ -241,8 +241,13 @@ foreach ($mitarbeiter_arr as $mitarbeiter) /** * Relativen Beschaeftigungsausmass der BIS-Verwendung berichtigen * (durch Abzug des eben erstellten relativen Beschaeftigungsausmass fuer Lehrtaetigkeiten) + * NOTE: Abzug nur fuer Lehrtaetigkeiten im WS, da nur diese das Beschaeftigungsausmass der + * BIS-Verwendung (und in Folge die VZAE ) zum Stichtag 31.12. bestimmen. * */ - $bisverwendung->beschaeftigungsausmass_relativ -= $verwendung_lehre_obj->beschaeftigungsausmass_relativ; + if(substr($studsem_kurzbz, 0, 2) == 'WS') + { + $bisverwendung->beschaeftigungsausmass_relativ -= $verwendung_lehre_obj->beschaeftigungsausmass_relativ; + } /** * Anteilige JVZAE der BIS-Verwendung berichtigen From 9c8312f880b978c84f7cfc9256dd899a5c590370 Mon Sep 17 00:00:00 2001 From: Cris Date: Thu, 12 Mar 2020 13:20:30 +0100 Subject: [PATCH 16/40] Added Lehre-Container Lehrecontainer mit . StgKz . SommersemesterSWS . WintersemesterSWS Lehrtaetigkeit an Lehrgaengen bzw. Lehrtaetigkeit an STG, die nicht BIS-gemeldet werden, werden exkludiert. --- vilesci/bis/personalmeldung.php | 92 +++++++++++++++++++++++++++++++++ 1 file changed, 92 insertions(+) diff --git a/vilesci/bis/personalmeldung.php b/vilesci/bis/personalmeldung.php index a6fde06ea..6437f24a5 100644 --- a/vilesci/bis/personalmeldung.php +++ b/vilesci/bis/personalmeldung.php @@ -425,6 +425,34 @@ foreach ($mitarbeiter_arr as $mitarbeiter) // ----------------------------------------------------------------------------------------------------------------- $person_obj->funktion_arr = $funktion_arr; + + // ----------------------------------------------------------------------------------------------------------------- + // Container Lehre generieren + // ----------------------------------------------------------------------------------------------------------------- + $lehre_arr = array(); + + // Alle Semesterwochenstunden, summiert nach STG und Studiensemester + $lehreinheitmitarbeiter = new Lehreinheitmitarbeiter(); + $lehreinheitmitarbeiter->get_SWS_groupByStg( + $person_obj->uid, + $beginn_imJahr->format('Y-m-d'), + $ende_imJahr->format('Y-m-d') + ); + $sws_proStg_arr = $lehreinheitmitarbeiter->result; + + /** + * Lehrtaetigkeit (Semesterwochenstunden) pro STG ermitteln. + * Exkludiert Lehrtaetigkeit an Lehrgaengen bzw. Lehrtaetigkeit an STG, die nicht BIS-gemeldet werden. + */ + $lehre_arr = _getLehrecontainer($sws_proStg_arr); + + // Container Lehre dem Container Person anhaengen + // ----------------------------------------------------------------------------------------------------------------- + $person_obj->lehre_arr = $lehre_arr; + + + // Container Person dem Gesamt-Container anhaengen + // ----------------------------------------------------------------------------------------------------------------- $person_arr []= $person_obj; } @@ -673,4 +701,68 @@ function _addFunktionscontainer_Funktionscode7($uid, $funktion_arr) return $funktion_arr; } +/** + * Lehrecontainer fuer Lehrtaetigkeit (Semesterwochenstunden) pro STG erstellen. + * @param array $sws_proStg_arr Object-Array + * @return array + */ +function _getLehrecontainer($sws_proStg_arr) +{ + $lehre_arr = array(); + + if (!empty($sws_proStg_arr)) + { + // Lehrgaenge und STG, die nicht BIS gemeldet werden, extrahieren + $sws_proStg_arr = array_filter($sws_proStg_arr, function ($obj) + { + return + !in_array($obj->studiengang_kz, BIS_EXCLUDE_STG) && + $obj->studiengang_kz > 0 && + $obj->studiengang_kz < 10000; + }); + } + + if (!empty($sws_proStg_arr)) + { + foreach ($sws_proStg_arr as $sws_proStg) + { + $is_sommersemester = substr($sws_proStg->studiensemester_kurzbz, 0, 2) == 'SS'; + $is_wintersemester = substr($sws_proStg->studiensemester_kurzbz, 0, 2) == 'WS'; + + // Lehreobjekt generieren + if (empty($lehre_arr) || // Erster Durchlauf ODER + !in_array($sws_proStg->studiengang_kz, array_column($lehre_arr, 'StgKz'))) // Neu + { + $lehre_obj = new StdClass(); + + $lehre_obj->StgKz = $sws_proStg->studiengang_kz; + $lehre_obj->SommersemesterSWS = $is_sommersemester ? $sws_proStg->sws : NULL; + $lehre_obj->WintersemesterSWS = $is_wintersemester ? $sws_proStg->sws : NULL; + + // Lehreobjekt dem Lehrecontainer anhaengen + $lehre_arr []= $lehre_obj; + } + else // Lehrecontainer mit STG schon vorhanden + { + $lehre_obj_arr = array_filter($lehre_arr, function (&$obj) use ($sws_proStg) { + return $obj->StgKz == $sws_proStg->studiengang_kz; + }); + + // SWS ergaenzen + if ($is_sommersemester) + { + current($lehre_obj_arr)->SommersemesterSWS = $sws_proStg->sws; + } + else if ($is_wintersemester) + { + current($lehre_obj_arr)->WintersemesterSWS = $sws_proStg->sws; + } + } + } + } + + + return $lehre_arr; +} + From 588f2996b3f71207f1bbe42d1cce137448654592 Mon Sep 17 00:00:00 2001 From: Cris Date: Thu, 12 Mar 2020 13:22:57 +0100 Subject: [PATCH 17/40] Added get_SWS_groupByStg() Ladet Semesterwochenstunden-Summe gruppiert nach Studiengang und Studiensemester. Es werden die Studiensemester herangezogen, die im Zeitraum zwischen beginn und ende beginnen. --- include/lehreinheitmitarbeiter.class.php | 68 ++++++++++++++++++++++++ 1 file changed, 68 insertions(+) diff --git a/include/lehreinheitmitarbeiter.class.php b/include/lehreinheitmitarbeiter.class.php index d7d469c2f..64140a174 100644 --- a/include/lehreinheitmitarbeiter.class.php +++ b/include/lehreinheitmitarbeiter.class.php @@ -530,6 +530,74 @@ class lehreinheitmitarbeiter extends basis_db } } + /** + * Ladet Semesterwochenstunden-Summe gruppiert nach Studiengang und Studiensemester. + * Es werden die Studiensemester herangezogen, die im Zeitraum zwischen beginn und ende beginnen. + * @param String $uid + * @param String $beginn + * @param String $ende + * @return bool + */ + public function get_SWS_groupByStg($uid, $beginn, $ende) + { + $beginn = new DateTime($beginn); + $ende = new DateTime($ende); + + $qry = ' + WITH semester_sws_tbl AS ( + SELECT DISTINCT lehreinheit_id, studiensemester_kurzbz, lema.semesterstunden, stg.studiengang_kz + FROM lehre.tbl_lehreinheitmitarbeiter lema + JOIN lehre.tbl_lehreinheit USING (lehreinheit_id) + JOIN lehre.tbl_lehrveranstaltung lv USING (lehrveranstaltung_id) + JOIN lehre.tbl_studienplan_lehrveranstaltung USING (lehrveranstaltung_id) + JOIN lehre.tbl_studienplan USING (studienplan_id) + JOIN lehre.tbl_studienordnung sto USING (studienordnung_id) + JOIN public.tbl_studiengang stg ON stg.studiengang_kz = sto.studiengang_kz + JOIN public.tbl_studiensemester ss USING (studiensemester_kurzbz) + WHERE mitarbeiter_uid = '. $this->db_add_param($uid). ' + AND ( + ss.start BETWEEN + '. $this->db_add_param($beginn->format('Y-m-d')). ' AND + '. $this->db_add_param($ende->format('Y-m-d')). ') + -- nur lehre, die bisgemeldet wird + AND lema.bismelden + -- keine lehreinheiten ohne semesterstunden + AND lema.semesterstunden != 0 + ) + + SELECT + studiengang_kz, + studiensemester_kurzbz, + sum(semesterstunden) AS summe, + round(sum(semesterstunden) / 15, 2) AS sws + FROM + semester_sws_tbl + GROUP BY + studiengang_kz, + studiensemester_kurzbz + ORDER BY + studiengang_kz; + '; + + if ($this->db_query($qry)) + { + while($row = $this->db_fetch_object()) + { + $obj = new StdClass(); + $obj->studiengang_kz = $row->studiengang_kz; + $obj->studiensemester_kurzbz = $row->studiensemester_kurzbz; + $obj->sws = $row->sws; + $this->result []= $obj; + } + return true; + } + else + { + $this->errormsg = 'Fehler bei der Datenbankabfrage'; + return false; + } + } + /** * Laedt die Lektoren einer Lehrveranstaltung in einem Studiensemester * @param lehrveranstaltung_id From a03e3f3355793ca1e4095ad3bb8cd41f4686adc2 Mon Sep 17 00:00:00 2001 From: Cris Date: Thu, 12 Mar 2020 13:24:17 +0100 Subject: [PATCH 18/40] Added result array to properties of Lehreinheitmitarbeiter class --- include/lehreinheitmitarbeiter.class.php | 2 ++ 1 file changed, 2 insertions(+) diff --git a/include/lehreinheitmitarbeiter.class.php b/include/lehreinheitmitarbeiter.class.php index 64140a174..9941a7e12 100644 --- a/include/lehreinheitmitarbeiter.class.php +++ b/include/lehreinheitmitarbeiter.class.php @@ -44,6 +44,8 @@ class lehreinheitmitarbeiter extends basis_db public $ext_id; // bigint public $vertrag_id; + public $result = array(); + /** * Konstruktor - Laedt optional einee LEMitarbeiterzuordnung * @param $lehreinheit_id From 67a100ea50d2a9e1854d83df1e22d3f3abd2ad86 Mon Sep 17 00:00:00 2001 From: Cris Date: Thu, 12 Mar 2020 13:29:48 +0100 Subject: [PATCH 19/40] Corrected BIS-meldungsrelevante SWS in getLehreinheiten_SWS_BISMeldung Zuvor wurde boolean bismelden der Mitarbeiter-Tabelle geprueft. Nun wird der korrekte boolean bismelden der Lehreinheitmitarbeiter-Tabelle geprueft, da nur die bisrelevanten Lehreinheiten herangezogen werden sollen. --- include/lehreinheitmitarbeiter.class.php | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/include/lehreinheitmitarbeiter.class.php b/include/lehreinheitmitarbeiter.class.php index 9941a7e12..6be66bb77 100644 --- a/include/lehreinheitmitarbeiter.class.php +++ b/include/lehreinheitmitarbeiter.class.php @@ -497,6 +497,13 @@ class lehreinheitmitarbeiter extends basis_db return $ret; } + /** + * Ladet Semesterwochenstunden-Summe eines Mitarbeiters eines Semesters. + * Nur bisrelevante SWS. + * @param String $uid + * @param String $studiensemester + * @return bool + */ public function getLehreinheiten_SWS_BISMeldung($uid, $studiensemester) { $qry = ' @@ -504,7 +511,7 @@ class lehreinheitmitarbeiter extends basis_db round(sum(semesterstunden) / 15) AS sws FROM ( SELECT DISTINCT lehreinheit_id, studiensemester_kurzbz, mitarbeiter_uid, semesterstunden - FROM lehre.tbl_lehreinheitmitarbeiter + FROM lehre.tbl_lehreinheitmitarbeiter lema JOIN public.tbl_mitarbeiter ma USING (mitarbeiter_uid) JOIN public.tbl_benutzer ON (mitarbeiter_uid = uid) JOIN public.tbl_person USING (person_id) @@ -512,7 +519,7 @@ class lehreinheitmitarbeiter extends basis_db JOIN lehre.tbl_lehreinheit USING (lehreinheit_id) JOIN public.tbl_studiensemester ss USING (studiensemester_kurzbz) WHERE mitarbeiter_uid = '. $this->db_add_param($uid).' - AND ma.bismelden + AND lema.bismelden AND studiensemester_kurzbz = '. $this->db_add_param($studiensemester).' ) tbl_semesterstunden '; From a65c5076be7243761844f994df2a4829ee5374f4 Mon Sep 17 00:00:00 2001 From: Cris Date: Thu, 12 Mar 2020 15:45:07 +0100 Subject: [PATCH 20/40] Started XML generieren - NOT COMPLETED - --- vilesci/bis/personalmeldung.php | 80 +++++++++++++++++++++++++++++++++ 1 file changed, 80 insertions(+) diff --git a/vilesci/bis/personalmeldung.php b/vilesci/bis/personalmeldung.php index 6437f24a5..324a181e8 100644 --- a/vilesci/bis/personalmeldung.php +++ b/vilesci/bis/personalmeldung.php @@ -456,6 +456,16 @@ foreach ($mitarbeiter_arr as $mitarbeiter) $person_arr []= $person_obj; } +// ********************************************************************************************************************* +// XML generieren +// ********************************************************************************************************************* +$xml = ''; +$xml = _generateXML($person_arr); + +echo '
    ', print_r($xml, 1), '
    '; + + + // --------------------------------------------------------------------------------------------------------------------- // Private Functions // --------------------------------------------------------------------------------------------------------------------- @@ -765,4 +775,74 @@ function _getLehrecontainer($sws_proStg_arr) return $lehre_arr; } +function _generateXML($person_arr) +{ + $xml = ''; + $xml .= ''; + + $xml .= ''; + + foreach ($person_arr as $person) + { + $xml .= ''; + + $xml .= 'personalnummer. ']]>'; + $xml .= 'geschlecht. ']]>'; + $xml .= 'geschlechtX. ']]>'; + $xml .= 'geburtsjahr. ']]>'; + $xml .= 'staatsangehoerigkeit. ']]>'; + $xml .= 'hoechste_abgeschlossene_ausbildung. ']]>'; + $xml .= 'habilitation. ']]>'; + $xml .= 'hauptberufcode. ']]>'; + + foreach ($person->verwendung_arr as $verwendung) + { + $xml .= ''; + $xml .= 'verwendung_code. ']]>'; + $xml .= 'ba1code. ']]>'; + $xml .= 'ba2code. ']]>'; + $xml .= 'vzae. ']]>'; + $xml .= 'jvzae. ']]>'; + $xml .= ''; + } + + foreach ($person->funktion_arr as $funktion) + { + $xml .= ''; + $xml .= 'funktionscode. ']]>'; + $xml .= 'besondereQualifikationCode. ']]>'; + $xml .= ''; + if (is_array($funktion->studiengang)) + { + foreach ($funktion->studiengang as $studiengang) + { + $xml .= ''; + } + } + else if (!is_null($funktion->studiengang)) + { + $xml .= 'studiengang. ']]>'; + + } + $xml .= ''; + $xml .= ''; + } + + foreach ($person->lehre_arr as $lehre) + { + $xml .= ''; + $xml .= 'StgKz. ']]>'; + $xml .= 'SommersemesterSWS. ']]>'; + $xml .= 'WintersemesterSWS. ']]>'; + $xml .= ''; + } + + $xml .= ''; + } + + $xml .= ''; + + return $xml; +} + From 2767dcde9fc688fd1a26dc5490301d662c1937ca Mon Sep 17 00:00:00 2001 From: Cris Date: Thu, 12 Mar 2020 15:48:41 +0100 Subject: [PATCH 21/40] Added BIS configs --- config/vilesci.config-default.inc.php | 39 +++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) diff --git a/config/vilesci.config-default.inc.php b/config/vilesci.config-default.inc.php index 1d68cfdb3..e737fc58a 100644 --- a/config/vilesci.config-default.inc.php +++ b/config/vilesci.config-default.inc.php @@ -208,4 +208,43 @@ define('DVB_PASSWORD','passwort'); define('CI_ENVIRONMENT', 'development'); // Code igniter environment variable +// BIS Personalmeldung + +// Studiengaenge, die nicht gemeldet werden +define('BIS_EXCLUDE_STG', array()); + +// Basis Vollzeit Arbeitsstunden für Berechnung von Jahresvollzeitaequivalenz JVZAE (echte Dienstverträge) +define('BIS_VOLLZEIT_ARBEITSSTUNDEN', '0'); + +// Basis Vollzeit Semesterwochenstunden für Berechnung von Jahresvollzeitaequivalenz JVZAE auf Stundenbasis (freie Dienstverträge) +define('BIS_VOLLZEIT_SWS_EINZELSTUNDENBASIS', '0'); + +// Basis Vollzeit Semesterwochenstunden für Berechnung von Jahresvollzeitaequivalenz JVZAE für inkludierte Lehre bei echten Dienstverträgen +define('BIS_VOLLZEIT_SWS_INKLUDIERTE_LEHRE', '0'); + +// Semester Gewichtung für Berechnung von Jahresvollzeitaequivalenz JVZAE +define('BIS_HALBJAHRES_GEWICHTUNG_SWS', 0.5); + +// Jahrespauschale fuer studentische Hilfskraefte (in Stunden) +define('BIS_PAUSCHALE_STUDENTISCHE_HILFSKRAFT', 0); + +// Jahrespauschale fuer sonstige Dienstverhaeltnisse, zb Werkvertrag (in Stunden) +define('BIS_PAUSCHALE_SONSTIGES_DIENSTVERHAELTNIS', 0); + +define('BIS_FUNKTIONSCODE_1234_ARR', array( + 'vertrBefugter' => 1, // Vertretungsbefugte/r des Erhalters (GF, Prokura) + 'kollegium_Ltg' => 2, // Leiter/in des Kollegiums + 'kollegium_Ltg' => 2, // Leiter/in des Kollegiums + 'kollegium_stvLtg' => 3, // stellv. Leiter/In des Kollegiums + 'kollegium' => 4 // Mitglied des Kollegiums +)); + +define('BIS_FUNKTIONSCODE_5_ARR', array( + 'Leitung' +)); + +define('BIS_FUNKTIONSCODE_6_ARR', array( + 'Team' +)); + ?> From c171ba3de67c340853e76068ba46e93ba5c4faa1 Mon Sep 17 00:00:00 2001 From: Cris Date: Thu, 12 Mar 2020 15:59:09 +0100 Subject: [PATCH 22/40] Added Berechnung Sonstiges Dienstverhaeltnis (zB. Werkvertraege) --- vilesci/bis/personalmeldung.php | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/vilesci/bis/personalmeldung.php b/vilesci/bis/personalmeldung.php index 324a181e8..06e7fcd52 100644 --- a/vilesci/bis/personalmeldung.php +++ b/vilesci/bis/personalmeldung.php @@ -54,6 +54,11 @@ if (!defined('BIS_PAUSCHALE_STUDENTISCHE_HILFSKRAFT') || empty('BIS_PAUSCHALE_ST die('config var BIS_PAUSCHALE_STUDENTISCHE_HILFSKRAFT fehlt'); } +if (!defined('BIS_PAUSCHALE_SONSTIGES_DIENSTVERHAELTNIS') || empty('BIS_PAUSCHALE_SONSTIGES_DIENSTVERHAELTNIS')) +{ + die('config var BIS_PAUSCHALE_SONSTIGES_DIENSTVERHAELTNIS fehlt'); +} + if (!defined('BIS_FUNKTIONSCODE_1234_ARR') || empty('BIS_FUNKTIONSCODE_1234_ARR')) { die('config var BIS_FUNKTIONSCODE_1234_ARR fehlt'); @@ -258,7 +263,6 @@ foreach ($mitarbeiter_arr as $mitarbeiter) } } } - // TODO: Interner Check: if ($bisverwendung->jvzae_anteilig < 0) -> Anteil für 'Nicht-Lehre'-Teil muss gegeben sein. } // Sonstige Beschaeftigungsverhaeltnisse ohne Vertragsstunden @@ -304,11 +308,17 @@ foreach ($mitarbeiter_arr as $mitarbeiter) $bisverwendung->beschaeftigungsausmass_relativ = round($pauschale_hilfskraft_relativImJahr / $vollzeit_arbeitsstunden_imJahr, 4); $bisverwendung->jvzae_anteilig =round($pauschale_hilfskraft_relativImJahr / $vollzeit_arbeitsstunden_imJahr, 4); } - // Mitarbeiter ohne Vertragsstunden und keine SWS + // Mitarbeiter mit sonstigem Dienstverhaeltnis (zB. Werkvertrag) // --------------------------------------------------------------------------------------------------------- else { - // TODO: Plausicheck + $pauschale_sonstigeDV_inStunden = BIS_PAUSCHALE_SONSTIGES_DIENSTVERHAELTNIS; // Pauschale pro Jahr und Person (in Stunden) + $pauschale_sonstigeDV_relativImJahr = $pauschale_sonstigeDV_inStunden / 1; // Stundenpauschale in Verhaeltnis zu 1 Jahr + $vollzeit_arbeitsstunden_imJahr = BIS_VOLLZEIT_ARBEITSSTUNDEN * $wochen_imJahr; + + // Relatives Beschaeftigungsausmass / Anteilige JVZAE ermitteln + $bisverwendung->beschaeftigungsausmass_relativ = round($pauschale_sonstigeDV_relativImJahr / $vollzeit_arbeitsstunden_imJahr, 4); + $bisverwendung->jvzae_anteilig =round($pauschale_sonstigeDV_relativImJahr / $vollzeit_arbeitsstunden_imJahr, 4); } } } From e99112dc64b54dc9025658f555b7d7981bb0e09f Mon Sep 17 00:00:00 2001 From: Cris Date: Thu, 12 Mar 2020 16:35:24 +0100 Subject: [PATCH 23/40] Enhanced code readability (structure) --- vilesci/bis/personalmeldung.php | 388 +++++++++++++++++--------------- 1 file changed, 205 insertions(+), 183 deletions(-) diff --git a/vilesci/bis/personalmeldung.php b/vilesci/bis/personalmeldung.php index 06e7fcd52..5c214e730 100644 --- a/vilesci/bis/personalmeldung.php +++ b/vilesci/bis/personalmeldung.php @@ -138,11 +138,11 @@ foreach ($mitarbeiter_arr as $mitarbeiter) // BIS Verwendungsdauer und -gewichtung ergaenzen $bisverwendung_arr = _addDauerGewichtung_imBISMeldungsjahr($bisverwendung_arr); - // Hauptberufcode: wenn Hauptberuf / Nebenberuf im gleichen Jahr - laengere Dauer entscheidet + // Hauptberufcode // ----------------------------------------------------------------------------------------------------------------- - $is_hauptberuflich = $bisverwendung_arr[count($bisverwendung_arr) - 1]->hauptberuflich; // default: hauptberuflich der letzten BIS-Verwendung + $is_hauptberuflich = $bisverwendung_arr[count($bisverwendung_arr) - 1]->hauptberuflich; - // Wenn im selben Jahr hauptberuflich UND nebenberuflich -> laengere Dauer wird gemeldet (Ueberwiegenheitprinzip) + // wenn Hauptberuf / Nebenberuf im gleichen Jahr - laengere Dauer melden (Ueberwiegenheitprinzip) if (in_array(true, array_column($bisverwendung_arr, 'hauptberuflich')) && // hauptberuflich UND in_array(false, array_column($bisverwendung_arr, 'hauptberuflich'))) // nebenberuflich { @@ -154,181 +154,22 @@ foreach ($mitarbeiter_arr as $mitarbeiter) * - hauptberuflich Lehrender: NULL, * - nebenberuflich Lehrender: Hauptberufscode der letzten BIS-Verwendung */ - $person_obj->hauptberufcode = ($is_hauptberuflich == true) ? NULL : $bisverwendung_arr[count($bisverwendung_arr) - 1]->hauptberufcode; + $person_obj->hauptberufcode = ($is_hauptberuflich == true) + ? NULL + : $bisverwendung_arr[count($bisverwendung_arr) - 1]->hauptberufcode; + + + // ***************************************************************************************************************** + // Container Verwendung generieren (mit JVZAE und VZAE) + // ***************************************************************************************************************** + $verwendung_arr = array(); - // ----------------------------------------------------------------------------------------------------------------- // Relatives Beschaeftigungsausmass / Anteilige JVZAE ermitteln // ----------------------------------------------------------------------------------------------------------------- + $bisverwendung_arr = _add_relativesBA_und_anteiligeJVZAE($person_obj->uid, $bisverwendung_arr); - // Lehrtaetigkeit ermitteln - $lema = new lehreinheitmitarbeiter(); - $lema->getLehreinheiten_SWS_BISMeldung($person_obj->uid, $ss_kurzbz); - $lehre_ss_sws = $lema->result[0]; // Anzahl SS - Semesterwochenstunden - - $lema = new lehreinheitmitarbeiter(); - $lema->getLehreinheiten_SWS_BISMeldung($person_obj->uid, $ws_kurzbz); - $lehre_ws_sws = $lema->result[0]; // Anzahl WS - Semesterwochenstunden - - $has_lehrtaetigkeit = !is_null($lehre_ss_sws) || !is_null($lehre_ws_sws); - - foreach ($bisverwendung_arr as $index => $bisverwendung) - { - $has_vertragsstunden = !is_null($bisverwendung->vertragsstunden) && !empty($bisverwendung->vertragsstunden); - $is_lektor = $bisverwendung->verwendung_code == 1 || $bisverwendung->verwendung_code == 2; - - /** - * NOTE: is_karenziert ist ein boolean fuer Vollzeit-Karenz, nicht fuer Teilzeit-(Bildungs-)Karenz! - * Die Unterscheidung ist wichtig fuer die weitere Ermittlung der JVZAE. - * Vollzeitkarenz: Anteiliger Beschaeftigungsausmass und JVZAE wird auf 0 gesetzt. - * Bildungs-Teilzeitkarenz: entspricht im System - */ - $is_karenziert_VZ = $bisverwendung->beschausmasscode == 5 && !$has_vertragsstunden; // VZ-Kinder- und Bildungskarenz - $is_karenziert_TZ = $bisverwendung->beschausmasscode == 5 && $has_vertragsstunden; // TZ-Bildungskarenz - - // Karenzzeit - // ------------------------------------------------------------------------------------------------------------- - if ($is_karenziert_VZ) - { - // Relatives Beschaeftigungsausmass / Anteilige JVZAE ermitteln - $bisverwendung->beschaeftigungsausmass_relativ = number_format(0.00, 2); - $bisverwendung->jvzae_anteilig = 0; - continue; - } - - // Echter Dienstvertrag - d.h. Vertragsstunden sind vorhanden - // Bsp. angestellte Lektoren, angestellte MA in Verwaltung/Management/Wartung - // ------------------------------------------------------------------------------------------------------------- - else if ($has_vertragsstunden) - { - // Vertragsstunden koennen max. VZ Aequivalenz-Basiswert haben - if ($bisverwendung->vertragsstunden > BIS_VOLLZEIT_ARBEITSSTUNDEN) - { - $bisverwendung->vertragsstunden = BIS_VOLLZEIT_ARBEITSSTUNDEN; - } - - // Relatives Beschaeftigungsausmass / Anteilige JVZAE ermitteln - $bisverwendung->beschaeftigungsausmass_relativ = round($bisverwendung->vertragsstunden / BIS_VOLLZEIT_ARBEITSSTUNDEN, 2); - $bisverwendung->jvzae_anteilig = round($bisverwendung->beschaeftigungsausmass_relativ * $bisverwendung->gewichtung, 2); - - // Echter Dienstvertrag - mit Lehrtaetigkeit, jedoch kein Lektor. - // Bsp. STG-Leiter mit Lehrtaetigkeit - // --------------------------------------------------------------------------------------------------------- - if (!$is_lektor && $has_lehrtaetigkeit) - { - /** - * Verwendungen ergänzen, wenn Mitarbeiter in Verwaltung/Managment/Wartung (jedenfalls nicht in Lehre) - * zugeteilt ist und dennoch lehrt. - * Die SWS werden sowohl fuer Sommer- als auch Wintersemster ermittelt und jeweils in einer eigenen - * Verwendung mit dem Verwendungscode 1 ergaenzt. - */ - $bisverwendung_beginn_BIS = new DateTime($bisverwendung->beginn_imBISMeldungsJahr); - $bisverwendung_ende_BIS = new DateTime($bisverwendung->ende_imBISMeldungsJahr); - - foreach (array($ss_kurzbz => $lehre_ss_sws, $ws_kurzbz => $lehre_ws_sws) as $studsem_kurzbz => $lehre_sws) - { - $studsem = new studiensemester($studsem_kurzbz); - $studsem_start = new DateTime($studsem->start); - $studsem_ende = new DateTime($studsem->ende); - - // Wenn Lehrzeit in die BIS Verwendungszeit hineinfaellt, Verwendung erstellen - if (!is_null($lehre_sws) && - (!($studsem_start > $bisverwendung_ende_BIS) && - !($studsem_ende < $bisverwendung_beginn_BIS))) - { - // Verwendung erstellen - list($tage_lehre_imSemester, $verwendung_lehre_obj) = _addVerwendung_fuerLehre_inkludiert($studsem, $bisverwendung); - - // Relatives Beschaeftigungsausmass / Anteilige JVZAE ermitteln - $verwendung_lehre_obj->beschaeftigungsausmass_relativ = round($lehre_sws / BIS_VOLLZEIT_SWS_INKLUDIERTE_LEHRE, 2); // VZ-Basis fuer inkludierte Lehre - $verwendung_lehre_obj->gewichtung = ($tage_lehre_imSemester == 182) ? BIS_HALBJAHRES_GEWICHTUNG_SWS : round(BIS_HALBJAHRES_GEWICHTUNG_SWS / ($tage_imJahr / 2) * $tage_lehre_imSemester, 2); - $verwendung_lehre_obj->jvzae_anteilig = round($verwendung_lehre_obj->beschaeftigungsausmass_relativ * $verwendung_lehre_obj->gewichtung, 3); - - /** - * Relativen Beschaeftigungsausmass der BIS-Verwendung berichtigen - * (durch Abzug des eben erstellten relativen Beschaeftigungsausmass fuer Lehrtaetigkeiten) - * NOTE: Abzug nur fuer Lehrtaetigkeiten im WS, da nur diese das Beschaeftigungsausmass der - * BIS-Verwendung (und in Folge die VZAE ) zum Stichtag 31.12. bestimmen. - * */ - if(substr($studsem_kurzbz, 0, 2) == 'WS') - { - $bisverwendung->beschaeftigungsausmass_relativ -= $verwendung_lehre_obj->beschaeftigungsausmass_relativ; - } - - /** - * Anteilige JVZAE der BIS-Verwendung berichtigen - * (durch Abzug der eben erstellten anteiligen JVZAE fuer Lehrtaetigkeiten) - */ - $bisverwendung->jvzae_anteilig -= $verwendung_lehre_obj->jvzae_anteilig; - $bisverwendung_arr [] = $verwendung_lehre_obj; - } - } - } - } - - // Sonstige Beschaeftigungsverhaeltnisse ohne Vertragsstunden - // Freie Dienstvertraege auf Stundenbasis - // ------------------------------------------------------------------------------------------------------------- - else if (!$has_vertragsstunden && $has_lehrtaetigkeit) - { - foreach (array($ss_kurzbz => $lehre_ss_sws, $ws_kurzbz => $lehre_ws_sws) as $studsem => $lehre_sws) - { - if (!is_null($lehre_sws)) - { - // Verwendungen erstellen - $verwendung_lehre_obj = _addVerwendung_fuerLehre_Stundenbasis($bisverwendung); - - // Relatives Beschaeftigungsausmass / Anteilige JVZAE ermitteln - $verwendung_lehre_obj->beschaeftigungsausmass_relativ = round($lehre_sws / BIS_VOLLZEIT_SWS_EINZELSTUNDENBASIS, 2); // VZ-Basis nach BIS-Vorgabe fuer Stundenbasis - $verwendung_lehre_obj->gewichtung = BIS_HALBJAHRES_GEWICHTUNG_SWS; - $verwendung_lehre_obj->jvzae_anteilig = round($verwendung_lehre_obj->beschaeftigungsausmass_relativ * $verwendung_lehre_obj->gewichtung, 2); - $bisverwendung_arr []= $verwendung_lehre_obj; - } - } - } - else - { - // Studentische Hilfskraft - // --------------------------------------------------------------------------------------------------------- - $benutzerfunktion = new Benutzerfunktion(); - $is_studentische_hilfskraft = $benutzerfunktion->getBenutzerFunktionByUid( - $person_obj->uid, - 'hilfskraft', - $beginn_imJahr->format('Y-m-d'), - $ende_imJahr->format('Y-m-d') - ); - - if ($is_studentische_hilfskraft) - { - // Kalkulatorische Umrechnung der Jahrespauschale - $pauschale_hilfskraft_inStunden = BIS_PAUSCHALE_STUDENTISCHE_HILFSKRAFT; // Pauschale pro Jahr und Person (in Stunden) - $pauschale_hilfskraft_relativImJahr = $pauschale_hilfskraft_inStunden / 1; // Stundenpauschale in Verhaeltnis zu 1 Jahr - $vollzeit_arbeitsstunden_imJahr = BIS_VOLLZEIT_ARBEITSSTUNDEN * $wochen_imJahr; - - // Relatives Beschaeftigungsausmass / Anteilige JVZAE ermitteln - $bisverwendung->beschaeftigungsausmass_relativ = round($pauschale_hilfskraft_relativImJahr / $vollzeit_arbeitsstunden_imJahr, 4); - $bisverwendung->jvzae_anteilig =round($pauschale_hilfskraft_relativImJahr / $vollzeit_arbeitsstunden_imJahr, 4); - } - // Mitarbeiter mit sonstigem Dienstverhaeltnis (zB. Werkvertrag) - // --------------------------------------------------------------------------------------------------------- - else - { - $pauschale_sonstigeDV_inStunden = BIS_PAUSCHALE_SONSTIGES_DIENSTVERHAELTNIS; // Pauschale pro Jahr und Person (in Stunden) - $pauschale_sonstigeDV_relativImJahr = $pauschale_sonstigeDV_inStunden / 1; // Stundenpauschale in Verhaeltnis zu 1 Jahr - $vollzeit_arbeitsstunden_imJahr = BIS_VOLLZEIT_ARBEITSSTUNDEN * $wochen_imJahr; - - // Relatives Beschaeftigungsausmass / Anteilige JVZAE ermitteln - $bisverwendung->beschaeftigungsausmass_relativ = round($pauschale_sonstigeDV_relativImJahr / $vollzeit_arbeitsstunden_imJahr, 4); - $bisverwendung->jvzae_anteilig =round($pauschale_sonstigeDV_relativImJahr / $vollzeit_arbeitsstunden_imJahr, 4); - } - } - } - - // ***************************************************************************************************************** - // JVZAE und VZAE ermitteln (Jahresvollzeitaequivalenz, Vollzeitaequivalenz) - // ***************************************************************************************************************** - - // Container Verwendung aus dem bisverwendung_arr generieren, formatieren und dem Container Person anhängen - $verwendung_arr = array(); + // JVZAE und VZAE ermitteln und Container Verwendung generieren + // ----------------------------------------------------------------------------------------------------------------- foreach ($bisverwendung_arr as $bisverwendung) { if (empty($verwendung_arr) || // wenn erster Durchlauf ODER @@ -400,12 +241,9 @@ foreach ($mitarbeiter_arr as $mitarbeiter) $person_obj->verwendung_arr = $verwendung_arr; - // ********************************************************************************************************************* - // Container Funktion und Lehre werden nur für STG generiert (nicht für Lehrgaenge) - // ********************************************************************************************************************* - // ----------------------------------------------------------------------------------------------------------------- - // Container Funktion generieren - // ----------------------------------------------------------------------------------------------------------------- + // ***************************************************************************************************************** + // Container Funktion generieren (nicht für Lehrgaenge) + // ***************************************************************************************************************** $funktion_arr = array(); // Alle Benutzerfunktionen im BIS Meldungsjahr holen @@ -436,9 +274,9 @@ foreach ($mitarbeiter_arr as $mitarbeiter) $person_obj->funktion_arr = $funktion_arr; - // ----------------------------------------------------------------------------------------------------------------- - // Container Lehre generieren - // ----------------------------------------------------------------------------------------------------------------- + // ***************************************************************************************************************** + // Container Lehre generieren (nicht für Lehrgaenge) + // ***************************************************************************************************************** $lehre_arr = array(); // Alle Semesterwochenstunden, summiert nach STG und Studiensemester @@ -479,6 +317,190 @@ echo '
    ', print_r($xml, 1), '
    '; // --------------------------------------------------------------------------------------------------------------------- // Private Functions // --------------------------------------------------------------------------------------------------------------------- + +/** + * Funktion ermittelt relatives Beschaeftigungsausmass und anteilige Jahresvollzeitaequivalenz + * @param String $uid + * @param array $bisverwendung_arr Object-Array + * @return array + */ +function _add_relativesBA_und_anteiligeJVZAE($uid, $bisverwendung_arr) +{ + global $beginn_imJahr; + global $ende_imJahr; + global $wochen_imJahr; + global $tage_imJahr; + global $ss_kurzbz; + global $ws_kurzbz; + + // Lehrtaetigkeit ermitteln + $lema = new lehreinheitmitarbeiter(); + $lema->getLehreinheiten_SWS_BISMeldung($uid, $ss_kurzbz); + $lehre_ss_sws = $lema->result[0]; // Anzahl SS - Semesterwochenstunden + + $lema = new lehreinheitmitarbeiter(); + $lema->getLehreinheiten_SWS_BISMeldung($uid, $ws_kurzbz); + $lehre_ws_sws = $lema->result[0]; // Anzahl WS - Semesterwochenstunden + + $has_lehrtaetigkeit = !is_null($lehre_ss_sws) || !is_null($lehre_ws_sws); + + foreach ($bisverwendung_arr as $index => $bisverwendung) + { + $has_vertragsstunden = !is_null($bisverwendung->vertragsstunden) && !empty($bisverwendung->vertragsstunden); + $is_lektor = $bisverwendung->verwendung_code == 1 || $bisverwendung->verwendung_code == 2; + + /** + * NOTE: is_karenziert ist ein boolean fuer Vollzeit-Karenz, nicht fuer Teilzeit-(Bildungs-)Karenz! + * Die Unterscheidung ist wichtig fuer die weitere Ermittlung der JVZAE. + * Vollzeitkarenz: Anteiliger Beschaeftigungsausmass und JVZAE wird auf 0 gesetzt. + * Bildungs-Teilzeitkarenz: entspricht im System + */ + $is_karenziert_VZ = $bisverwendung->beschausmasscode == 5 && !$has_vertragsstunden; // VZ-Kinder- und Bildungskarenz + $is_karenziert_TZ = $bisverwendung->beschausmasscode == 5 && $has_vertragsstunden; // TZ-Bildungskarenz + + // Karenzzeit + // ------------------------------------------------------------------------------------------------------------- + if ($is_karenziert_VZ) + { + // Relatives Beschaeftigungsausmass / Anteilige JVZAE ermitteln + $bisverwendung->beschaeftigungsausmass_relativ = number_format(0.00, 2); + $bisverwendung->jvzae_anteilig = 0; + continue; + } + + // Echter Dienstvertrag - d.h. Vertragsstunden sind vorhanden + // Bsp. angestellte Lektoren, angestellte MA in Verwaltung/Management/Wartung + // ------------------------------------------------------------------------------------------------------------- + else if ($has_vertragsstunden) + { + // Vertragsstunden koennen max. VZ Aequivalenz-Basiswert haben + if ($bisverwendung->vertragsstunden > BIS_VOLLZEIT_ARBEITSSTUNDEN) + { + $bisverwendung->vertragsstunden = BIS_VOLLZEIT_ARBEITSSTUNDEN; + } + + // Relatives Beschaeftigungsausmass / Anteilige JVZAE ermitteln + $bisverwendung->beschaeftigungsausmass_relativ = round($bisverwendung->vertragsstunden / BIS_VOLLZEIT_ARBEITSSTUNDEN, 2); + $bisverwendung->jvzae_anteilig = round($bisverwendung->beschaeftigungsausmass_relativ * $bisverwendung->gewichtung, 2); + + // Echter Dienstvertrag - mit Lehrtaetigkeit, jedoch kein Lektor. + // Bsp. STG-Leiter mit Lehrtaetigkeit + // --------------------------------------------------------------------------------------------------------- + if (!$is_lektor && $has_lehrtaetigkeit) + { + /** + * Verwendungen ergänzen, wenn Mitarbeiter in Verwaltung/Managment/Wartung (jedenfalls nicht in Lehre) + * zugeteilt ist und dennoch lehrt. + * Die SWS werden sowohl fuer Sommer- als auch Wintersemster ermittelt und jeweils in einer eigenen + * Verwendung mit dem Verwendungscode 1 ergaenzt. + */ + $bisverwendung_beginn_BIS = new DateTime($bisverwendung->beginn_imBISMeldungsJahr); + $bisverwendung_ende_BIS = new DateTime($bisverwendung->ende_imBISMeldungsJahr); + + foreach (array($ss_kurzbz => $lehre_ss_sws, $ws_kurzbz => $lehre_ws_sws) as $studsem_kurzbz => $lehre_sws) + { + $studsem = new studiensemester($studsem_kurzbz); + $studsem_start = new DateTime($studsem->start); + $studsem_ende = new DateTime($studsem->ende); + + // Wenn Lehrzeit in die BIS Verwendungszeit hineinfaellt, Verwendung erstellen + if (!is_null($lehre_sws) && + (!($studsem_start > $bisverwendung_ende_BIS) && + !($studsem_ende < $bisverwendung_beginn_BIS))) + { + // Verwendung erstellen + list($tage_lehre_imSemester, $verwendung_lehre_obj) = _addVerwendung_fuerLehre_inkludiert($studsem, $bisverwendung); + + // Relatives Beschaeftigungsausmass / Anteilige JVZAE ermitteln + $verwendung_lehre_obj->beschaeftigungsausmass_relativ = round($lehre_sws / BIS_VOLLZEIT_SWS_INKLUDIERTE_LEHRE, 2); // VZ-Basis fuer inkludierte Lehre + $verwendung_lehre_obj->gewichtung = ($tage_lehre_imSemester == 182) + ? BIS_HALBJAHRES_GEWICHTUNG_SWS + : round(BIS_HALBJAHRES_GEWICHTUNG_SWS / ($tage_imJahr / 2) * $tage_lehre_imSemester, 2); + $verwendung_lehre_obj->jvzae_anteilig = round($verwendung_lehre_obj->beschaeftigungsausmass_relativ * $verwendung_lehre_obj->gewichtung, 3); + + /** + * Relativen Beschaeftigungsausmass der BIS-Verwendung berichtigen + * (durch Abzug des eben erstellten relativen Beschaeftigungsausmass fuer Lehrtaetigkeiten) + * NOTE: Abzug nur fuer Lehrtaetigkeiten im WS, da nur diese das Beschaeftigungsausmass der + * BIS-Verwendung (und in Folge die VZAE ) zum Stichtag 31.12. bestimmen. + * */ + if(substr($studsem_kurzbz, 0, 2) == 'WS') + { + $bisverwendung->beschaeftigungsausmass_relativ -= $verwendung_lehre_obj->beschaeftigungsausmass_relativ; + } + + /** + * Anteilige JVZAE der BIS-Verwendung berichtigen + * (durch Abzug der eben erstellten anteiligen JVZAE fuer Lehrtaetigkeiten) + */ + $bisverwendung->jvzae_anteilig -= $verwendung_lehre_obj->jvzae_anteilig; + $bisverwendung_arr [] = $verwendung_lehre_obj; + } + } + } + } + + // Sonstige Beschaeftigungsverhaeltnisse ohne Vertragsstunden + // Freie Dienstvertraege auf Stundenbasis + // ------------------------------------------------------------------------------------------------------------- + else if (!$has_vertragsstunden && $has_lehrtaetigkeit) + { + foreach (array($ss_kurzbz => $lehre_ss_sws, $ws_kurzbz => $lehre_ws_sws) as $studsem => $lehre_sws) + { + if (!is_null($lehre_sws)) + { + // Verwendungen erstellen + $verwendung_lehre_obj = _addVerwendung_fuerLehre_Stundenbasis($bisverwendung); + + // Relatives Beschaeftigungsausmass / Anteilige JVZAE ermitteln + $verwendung_lehre_obj->beschaeftigungsausmass_relativ = round($lehre_sws / BIS_VOLLZEIT_SWS_EINZELSTUNDENBASIS, 2); // VZ-Basis nach BIS-Vorgabe fuer Stundenbasis + $verwendung_lehre_obj->gewichtung = BIS_HALBJAHRES_GEWICHTUNG_SWS; + $verwendung_lehre_obj->jvzae_anteilig = round($verwendung_lehre_obj->beschaeftigungsausmass_relativ * $verwendung_lehre_obj->gewichtung, 2); + $bisverwendung_arr []= $verwendung_lehre_obj; + } + } + } + else + { + // Studentische Hilfskraft + // --------------------------------------------------------------------------------------------------------- + $benutzerfunktion = new Benutzerfunktion(); + $is_studentische_hilfskraft = $benutzerfunktion->getBenutzerFunktionByUid( + $uid, + 'hilfskraft', + $beginn_imJahr->format('Y-m-d'), + $ende_imJahr->format('Y-m-d') + ); + + if ($is_studentische_hilfskraft) + { + // Kalkulatorische Umrechnung der Jahrespauschale + $pauschale_hilfskraft_inStunden = BIS_PAUSCHALE_STUDENTISCHE_HILFSKRAFT; // Pauschale pro Jahr und Person (in Stunden) + $pauschale_hilfskraft_relativImJahr = $pauschale_hilfskraft_inStunden / 1; // Stundenpauschale in Verhaeltnis zu 1 Jahr + $vollzeit_arbeitsstunden_imJahr = BIS_VOLLZEIT_ARBEITSSTUNDEN * $wochen_imJahr; + + // Relatives Beschaeftigungsausmass / Anteilige JVZAE ermitteln + $bisverwendung->beschaeftigungsausmass_relativ = round($pauschale_hilfskraft_relativImJahr / $vollzeit_arbeitsstunden_imJahr, 4); + $bisverwendung->jvzae_anteilig =round($pauschale_hilfskraft_relativImJahr / $vollzeit_arbeitsstunden_imJahr, 4); + } + // Mitarbeiter mit sonstigem Dienstverhaeltnis (zB. Werkvertrag) + // --------------------------------------------------------------------------------------------------------- + else + { + $pauschale_sonstigeDV_inStunden = BIS_PAUSCHALE_SONSTIGES_DIENSTVERHAELTNIS; // Pauschale pro Jahr und Person (in Stunden) + $pauschale_sonstigeDV_relativImJahr = $pauschale_sonstigeDV_inStunden / 1; // Stundenpauschale in Verhaeltnis zu 1 Jahr + $vollzeit_arbeitsstunden_imJahr = BIS_VOLLZEIT_ARBEITSSTUNDEN * $wochen_imJahr; + + // Relatives Beschaeftigungsausmass / Anteilige JVZAE ermitteln + $bisverwendung->beschaeftigungsausmass_relativ = round($pauschale_sonstigeDV_relativImJahr / $vollzeit_arbeitsstunden_imJahr, 4); + $bisverwendung->jvzae_anteilig =round($pauschale_sonstigeDV_relativImJahr / $vollzeit_arbeitsstunden_imJahr, 4); + } + } + } + + return $bisverwendung_arr; +} + /** * Funktion ermittelt fuer jede BIS-Verwendung die Dauer (in Tagen) und Gewichtung (Dauer / Tage im Jahr) * @param array $bisverwendung_arr Array mit BIS-Verwendungsobjekten From a25851613b3cd1881a41599a2ea04a195fdf026f Mon Sep 17 00:00:00 2001 From: Cris Date: Thu, 12 Mar 2020 18:50:03 +0100 Subject: [PATCH 24/40] Changed ba1code to ba1code_bis in getVerwendungenBISMeldung() --- include/bisverwendung.class.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/include/bisverwendung.class.php b/include/bisverwendung.class.php index ab8b5a4e4..44c70eb21 100644 --- a/include/bisverwendung.class.php +++ b/include/bisverwendung.class.php @@ -639,6 +639,7 @@ class bisverwendung extends basis_db END as ende_imBISMeldungsJahr FROM bis.tbl_bisverwendung + JOIN bis.tbl_beschaeftigungsart1 USING (ba1code) WHERE mitarbeiter_uid = '. $this->db_add_param($uid).' AND (beginn <= '. $this->db_add_param($stichtag).' OR beginn is null) @@ -655,7 +656,7 @@ class bisverwendung extends basis_db $obj->bisverwendung_id = $row->bisverwendung_id; $obj->mitarbeiter_uid = $row->mitarbeiter_uid; $obj->vertragsstunden = $row->vertragsstunden; - $obj->ba1code = $row->ba1code; + $obj->ba1code = $row->ba1code_bis; $obj->ba2code = $row->ba2code; $obj->verwendung_code = $row->verwendung_code; $obj->beschausmasscode = $row->beschausmasscode; From 54dd6734ba365b5d3b7ed13de40b664810e32d4c Mon Sep 17 00:00:00 2001 From: Cris Date: Thu, 12 Mar 2020 18:53:21 +0100 Subject: [PATCH 25/40] Added XML Output --- vilesci/bis/personalmeldung.php | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/vilesci/bis/personalmeldung.php b/vilesci/bis/personalmeldung.php index 5c214e730..61f59b603 100644 --- a/vilesci/bis/personalmeldung.php +++ b/vilesci/bis/personalmeldung.php @@ -310,7 +310,15 @@ foreach ($mitarbeiter_arr as $mitarbeiter) $xml = ''; $xml = _generateXML($person_arr); -echo '
    ', print_r($xml, 1), '
    '; +$xml_datei = 'bisdaten/bismeldung_mitarbeiter.xml'; +$dateiausgabe = fopen($xml_datei,'w'); +fwrite($dateiausgabe, $xml); +fclose($dateiausgabe); + +echo 'Herunterladen'; + +//header("Content-Type: text/xml"); +//echo $xml; From d1e47ad73e4e5a52183f1a246316cea0982b67cf Mon Sep 17 00:00:00 2001 From: Cris Date: Thu, 12 Mar 2020 18:55:28 +0100 Subject: [PATCH 26/40] Corrected: erste Korrekturen nach BIS Uplaod und Validierung, -- ACHTUNG: TODO ! - . kleine Korrekturen (Typen-, Semantikecheck) . TODO!!!: Meldedatum und ErhKz ersetzen! --- vilesci/bis/personalmeldung.php | 62 +++++++++++++++++++++------------ 1 file changed, 40 insertions(+), 22 deletions(-) diff --git a/vilesci/bis/personalmeldung.php b/vilesci/bis/personalmeldung.php index 61f59b603..9d0f92894 100644 --- a/vilesci/bis/personalmeldung.php +++ b/vilesci/bis/personalmeldung.php @@ -12,6 +12,7 @@ require_once('../../include/lehreinheitmitarbeiter.class.php'); require_once('../../include/benutzerfunktion.class.php'); require_once('../../include/organisationseinheit.class.php'); require_once('../../include/entwicklungsteam.class.php'); +require_once('../../include/erhalter.class.php'); $uid = get_uid(); @@ -118,7 +119,7 @@ foreach ($mitarbeiter_arr as $mitarbeiter) { $person_obj = new StdClass(); - $person_obj->personalnummer = $mitarbeiter->personalnummer; + $person_obj->personalnummer = setLeadingZero(intval($mitarbeiter->personalnummer), 15); $person_obj->uid = $mitarbeiter->uid; $person_obj->geschlecht = $mitarbeiter->geschlecht; $person_obj->geschlechtX = $mitarbeiter->geschlechtX; @@ -191,7 +192,7 @@ foreach ($mitarbeiter_arr as $mitarbeiter) $verwendung_obj->ba1code = $bisverwendung->ba1code; $verwendung_obj->ba2code = $bisverwendung->ba2code; $verwendung_obj->verwendung_code = $bisverwendung->verwendung_code; - $verwendung_obj->jvzae = 0; + $verwendung_obj->jvzae = 0.00; $verwendung_obj->vzae = -1; // default // Loop innerhalb Verwendungen mit selben Beschaeftigungsverhaeltnissen und Verwendung_codes @@ -204,7 +205,9 @@ foreach ($mitarbeiter_arr as $mitarbeiter) * Berechnung: * JVZAE wird aus der Summe aller anteiligen JVZE gebildet. */ - $verwendung_obj->jvzae += (isset($verwendung_tmp->jvzae_anteilig)) ? $verwendung_tmp->jvzae_anteilig * 100 : NULL; // TODO: not null... + $verwendung_obj->jvzae += (isset($verwendung_tmp->jvzae_anteilig)) + ? number_format($verwendung_tmp->jvzae_anteilig * 100, 2) + : NULL; // TODO: not null... // Vollzeitaequivalenz VZAE ermitteln (Beschaeftigungsausmass zum Stichtag 31.12) @@ -785,9 +788,9 @@ function _getLehrecontainer($sws_proStg_arr) { $lehre_obj = new StdClass(); - $lehre_obj->StgKz = $sws_proStg->studiengang_kz; - $lehre_obj->SommersemesterSWS = $is_sommersemester ? $sws_proStg->sws : NULL; - $lehre_obj->WintersemesterSWS = $is_wintersemester ? $sws_proStg->sws : NULL; + $lehre_obj->StgKz = setLeadingZero(intval($sws_proStg->studiengang_kz), 4); + $lehre_obj->SommersemesterSWS = $is_sommersemester ? $sws_proStg->sws : 0.00; + $lehre_obj->WintersemesterSWS = $is_wintersemester ? $sws_proStg->sws : 0.00; // Lehreobjekt dem Lehrecontainer anhaengen $lehre_arr []= $lehre_obj; @@ -820,6 +823,10 @@ function _generateXML($person_arr) $xml = ''; $xml .= ''; +// TODO: ErhKz und Meldedatum aendern + $xml .= ''; + $xml .= '005'; + $xml .= '15042020'; $xml .= ''; foreach ($person_arr as $person) @@ -830,15 +837,17 @@ function _generateXML($person_arr) $xml .= 'geschlecht. ']]>'; $xml .= 'geschlechtX. ']]>'; $xml .= 'geburtsjahr. ']]>'; - $xml .= 'staatsangehoerigkeit. ']]>'; + $xml .= 'staatsangehoerigkeit. ']]>'; $xml .= 'hoechste_abgeschlossene_ausbildung. ']]>'; $xml .= 'habilitation. ']]>'; - $xml .= 'hauptberufcode. ']]>'; + $xml .= (!is_null($person->hauptberufcode)) + ? 'hauptberufcode. ']]>' + : ''; foreach ($person->verwendung_arr as $verwendung) { $xml .= ''; - $xml .= 'verwendung_code. ']]>'; + $xml .= 'verwendung_code. ']]>'; $xml .= 'ba1code. ']]>'; $xml .= 'ba2code. ']]>'; $xml .= 'vzae. ']]>'; @@ -850,21 +859,29 @@ function _generateXML($person_arr) { $xml .= ''; $xml .= 'funktionscode. ']]>'; - $xml .= 'besondereQualifikationCode. ']]>'; - $xml .= ''; - if (is_array($funktion->studiengang)) - { - foreach ($funktion->studiengang as $studiengang) - { - $xml .= ''; - } - } - else if (!is_null($funktion->studiengang)) - { - $xml .= 'studiengang. ']]>'; + $xml .= (!is_null($funktion->besondereQualifikationCode)) + ? 'besondereQualifikationCode. ']]>' + : ''; + if ($funktion->funktionscode == 5 || $funktion->funktionscode == 7) + { + $xml .= ''; + + if (is_array($funktion->studiengang)) + { + foreach ($funktion->studiengang as $studiengang) + { + $xml .= ''; + } + } + else if (!is_null($funktion->studiengang)) + { + $xml .= 'studiengang. ']]>'; + + } + $xml .= ''; } - $xml .= ''; + $xml .= ''; } @@ -881,6 +898,7 @@ function _generateXML($person_arr) } $xml .= ''; + $xml .= ''; return $xml; } From 1f4722b7a0b30227b1ae4a3a0476d543f5bd5bfd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andreas=20=C3=96sterreicher?= Date: Thu, 12 Mar 2020 19:24:47 +0100 Subject: [PATCH 27/40] =?UTF-8?q?-=20Config=20hinzugef=C3=BCgt=20um=20Lekt?= =?UTF-8?q?orenzuordnungen=20im=20CIS=20nur=20anzuzeigen=20wenn=20der=20Ve?= =?UTF-8?q?rtrag=20erteilt=20wurde=20-=20Vertr=C3=A4ge=20werden=20erst=20a?= =?UTF-8?q?b=20Status=20erteilt=20f=C3=BCr=20Lektoren=20angezeigt?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../lehre/lehrauftrag/acceptLehrauftrag.php | 7 +- .../lehrauftrag/acceptLehrauftragData.php | 10 +-- cis/private/lehre/anwesenheitsliste.php | 13 +++- cis/private/lehre/lesson.php | 18 ++++- cis/private/profile/lva_liste.php | 13 ++++ cms/menu/menu_addon_meinelv.inc.php | 13 ++++ config/global.config-default.inc.php | 4 + include/vertrag.class.php | 77 +++++++++++++++++++ .../js/lehre/lehrauftrag/acceptLehrauftrag.js | 20 ++++- 9 files changed, 157 insertions(+), 18 deletions(-) diff --git a/application/views/lehre/lehrauftrag/acceptLehrauftrag.php b/application/views/lehre/lehrauftrag/acceptLehrauftrag.php index 3f2575ec1..a4116e8d0 100644 --- a/application/views/lehre/lehrauftrag/acceptLehrauftrag.php +++ b/application/views/lehre/lehrauftrag/acceptLehrauftrag.php @@ -69,13 +69,11 @@ $this->load->view( - - @@ -148,9 +146,6 @@ $this->load->view( - @@ -196,7 +191,7 @@ $this->load->view(
    - +
    diff --git a/application/views/lehre/lehrauftrag/acceptLehrauftragData.php b/application/views/lehre/lehrauftrag/acceptLehrauftragData.php index 2a9cc4245..6ac3abbdc 100644 --- a/application/views/lehre/lehrauftrag/acceptLehrauftragData.php +++ b/application/views/lehre/lehrauftrag/acceptLehrauftragData.php @@ -170,7 +170,7 @@ FROM /* filter active organisationseinheiten */ AND oe.aktiv = TRUE /* filter vertragsstatus to avoid showing before status is bestellt */ - AND vvs.vertragsstatus_kurzbz IN (\'bestellt\', \'erteilt\', \'akzeptiert\') + AND vvs.vertragsstatus_kurzbz IN (\'erteilt\', \'akzeptiert\') ) tmp_lehrauftraege UNION @@ -182,8 +182,8 @@ FROM (SELECT uid FROM - public.tbl_benutzer JOIN public.tbl_mitarbeiter ma - ON tbl_benutzer.uid = ma.mitarbeiter_uid + public.tbl_benutzer JOIN public.tbl_mitarbeiter ma + ON tbl_benutzer.uid = ma.mitarbeiter_uid WHERE person_id = tmp_projektbetreuung.person_id ORDER BY aktiv DESC, updateaktivam DESC -- accept inactive as some person_ids have no active, but order them last @@ -285,8 +285,8 @@ FROM AND lv.aktiv = TRUE /* filter active organisationseinheiten */ AND oe.aktiv = TRUE - /* filter vertragsstatus to avoid showing before status is bestellt */ - AND vvs.vertragsstatus_kurzbz IN (\'bestellt\', \'erteilt\', \'akzeptiert\') + /* filter vertragsstatus to avoid showing before status is erteilt */ + AND vvs.vertragsstatus_kurzbz IN (\'erteilt\', \'akzeptiert\') ) tmp_projektbetreuung ) auftraege ORDER BY "akzeptiert" NULLS FIRST, "erteilt" NULLS LAST, "bestellt" diff --git a/cis/private/lehre/anwesenheitsliste.php b/cis/private/lehre/anwesenheitsliste.php index 4e328f5f2..bc7d96083 100644 --- a/cis/private/lehre/anwesenheitsliste.php +++ b/cis/private/lehre/anwesenheitsliste.php @@ -33,7 +33,7 @@ require_once('../../../include/studiengang.class.php'); require_once('../../../include/lehrveranstaltung.class.php'); require_once('../../../include/phrasen.class.php'); - + require_once('../../../include/vertrag.class.php'); $sprache = getSprache(); $p=new phrasen($sprache); @@ -134,6 +134,17 @@ { while($row_lkt = $db->db_fetch_object($result_lkt)) { + // Lektor wird erst angezeigt wenn der Auftrag erteilt wurde + if (defined('CIS_LV_LEKTORINNENZUTEILUNG_VERTRAGSPRUEFUNG_VON') + && CIS_LV_LEKTORINNENZUTEILUNG_VERTRAGSPRUEFUNG_VON != '') + { + $vertrag = new vertrag(); + if (!$vertrag->isVertragErteiltLV($lvid, $stsem, $row_lkt->mitarbeiter_uid)) + { + continue; + } + } + if($lektoren!='') $lektoren.=', '; $lektoren .= $row_lkt->kurzbz; diff --git a/cis/private/lehre/lesson.php b/cis/private/lehre/lesson.php index 6d35e46c7..4d8c872a1 100644 --- a/cis/private/lehre/lesson.php +++ b/cis/private/lehre/lesson.php @@ -33,6 +33,7 @@ require_once('../../../include/lvangebot.class.php'); require_once('../../../include/benutzergruppe.class.php'); require_once('../../../include/lehreinheit.class.php'); require_once('../../../include/variable.class.php'); +require_once('../../../include/vertrag.class.php'); $sprache = getSprache(); $p = new phrasen($sprache); @@ -316,6 +317,17 @@ $( document ).ready(function() $i=0; while($row_lector = $db->db_fetch_object($result)) { + // Lektor wird erst angezeigt wenn der Auftrag erteilt wurde + if (defined('CIS_LV_LEKTORINNENZUTEILUNG_VERTRAGSPRUEFUNG_VON') + && CIS_LV_LEKTORINNENZUTEILUNG_VERTRAGSPRUEFUNG_VON != '') + { + $vertrag = new vertrag(); + if (!$vertrag->isVertragErteiltLV($lvid, $angezeigtes_stsem, $row_lector->uid)) + { + continue; + } + } + $i++; if($user==$row_lector->uid) { @@ -327,9 +339,11 @@ $( document ).ready(function() $style='style="font-weight: bold"'; else $style=''; - echo ''.$row_lector->vorname.' '.$row_lector->nachname.''; - if($i!=$num_rows_result) + + if ($i != 1) echo ', '; + echo ''.$row_lector->vorname.' '.$row_lector->nachname.''; + } } } diff --git a/cis/private/profile/lva_liste.php b/cis/private/profile/lva_liste.php index c4f54ce94..8b8829099 100644 --- a/cis/private/profile/lva_liste.php +++ b/cis/private/profile/lva_liste.php @@ -37,6 +37,7 @@ require_once('../../../include/datum.class.php'); require_once('../../../include/lvangebot.class.php'); require_once('../../../include/addon.class.php'); require_once('../../../include/benutzerberechtigung.class.php'); +require_once('../../../include/vertrag.class.php'); if (!$db = new basis_db()) die('Fehler beim Oeffnen der Datenbankverbindung'); @@ -211,6 +212,18 @@ require_once('../../../include/benutzerberechtigung.class.php'); for ($i=0; $i<$num_rows; $i++) { $row=$db->db_fetch_object($result); + + // Nur erteilte Vertraege anzeigen wenn dies im Config hinterlegt ist. + if (defined('CIS_LV_LEKTORINNENZUTEILUNG_VERTRAGSPRUEFUNG_VON') + && CIS_LV_LEKTORINNENZUTEILUNG_VERTRAGSPRUEFUNG_VON != '') + { + $vertrag = new vertrag(); + if (!$vertrag->isVertragErteiltLV($row->lehrveranstaltung_id, $stdsem, $user)) + { + continue; + } + } + $lvangebot = new lvangebot(); echo ''; if(!defined('CIS_LVALISTE_NOTENEINGABE_ANZEIGEN') || CIS_LVALISTE_NOTENEINGABE_ANZEIGEN) diff --git a/cms/menu/menu_addon_meinelv.inc.php b/cms/menu/menu_addon_meinelv.inc.php index 89eecf088..b27029586 100644 --- a/cms/menu/menu_addon_meinelv.inc.php +++ b/cms/menu/menu_addon_meinelv.inc.php @@ -24,11 +24,13 @@ */ require_once(dirname(__FILE__).'/menu_addon.class.php'); require_once(dirname(__FILE__).'/../../config/cis.config.inc.php'); +require_once(dirname(__FILE__).'/../../config/global.config.inc.php'); require_once(dirname(__FILE__).'/../../include/functions.inc.php'); require_once(dirname(__FILE__).'/../../include/phrasen.class.php'); require_once(dirname(__FILE__).'/../../include/studiensemester.class.php'); require_once(dirname(__FILE__).'/../../include/studiengang.class.php'); require_once(dirname(__FILE__).'/../../include/lehrveranstaltung.class.php'); +require_once(dirname(__FILE__).'/../../include/vertrag.class.php'); class menu_addon_meinelv extends menu_addon { @@ -187,6 +189,17 @@ class menu_addon_meinelv extends menu_addon $lv_obj = new lehrveranstaltung(); $lv_obj->load($row->lehrveranstaltung_id); + // Nur erteilte Vertraege anzeigen wenn dies im Config hinterlegt ist. + if (defined('CIS_LV_LEKTORINNENZUTEILUNG_VERTRAGSPRUEFUNG_VON') + && CIS_LV_LEKTORINNENZUTEILUNG_VERTRAGSPRUEFUNG_VON != '') + { + $vertrag = new vertrag(); + if (!$vertrag->isVertragErteiltLV($lv_obj->lehrveranstaltung_id, $stsem, $user)) + { + continue; + } + } + if($row->studiengang_kz==0 AND $row->semester==0) { $this->items[] = array('title'=>$lv_obj->bezeichnung_arr[$sprache], diff --git a/config/global.config-default.inc.php b/config/global.config-default.inc.php index 05da2cb94..a888ee57e 100644 --- a/config/global.config-default.inc.php +++ b/config/global.config-default.inc.php @@ -132,6 +132,10 @@ define('FAS_REIHUNGSTEST_AUFNAHMEGRUPPEN',false); // Legt fest, ob Vertragsdetails zum Lehrauftrag im Reiter LektorInnenzuteilung angezeigt werden define('FAS_LV_LEKTORINNENZUTEILUNG_VERTRAGSDETAILS_ANZEIGEN', false); +// Gibt an, ob/ab welchen Studiensemester eine zusätzliche Vertragspruefung der Lektoren erfolgt. +// Ab diesem Semester wird die Lektorenzuordnung nur angezeigt wenn ein erteilter Vertrag vorhanden ist +define('CIS_LV_LEKTORINNENZUTEILUNG_VERTRAGSPRUEFUNG_VON', ''); + // Legt fest, ob Vertragsdetails zum Projektauftrag im Reiter Projektarbeit angezeigt werden define('FAS_STUDIERENDE_PROJEKTARBEIT_VERTRAGSDETAILS_ANZEIGEN', false); diff --git a/include/vertrag.class.php b/include/vertrag.class.php index 01b10c2b0..37c2fc9e2 100644 --- a/include/vertrag.class.php +++ b/include/vertrag.class.php @@ -1168,5 +1168,82 @@ class vertrag extends basis_db return false; } } + + /** + * Prueft ob ein Mitarbeiter einen erteilten Vertrag zu einer Lehrveranstaltung besitzt. + * @param $lehrveranstaltung_id ID der Lehrveranstaltung + * @param $studiensemester_kurzbz Studiensemester das geprueft wird + * @param $mitarbeiter_uid UID des Mitarbeiters + */ + public function isVertragErteiltLV($lehrveranstaltung_id, $studiensemester_kurzbz, $mitarbeiter_uid) + { + if (defined('CIS_LV_LEKTORINNENZUTEILUNG_VERTRAGSPRUEFUNG_VON') + && CIS_LV_LEKTORINNENZUTEILUNG_VERTRAGSPRUEFUNG_VON != '') + { + // Liegt das Studiensemester vor dem Pruefdatum, wird die LV immer als Erteilt angezeigt + $qry = " + SELECT + tbl_studiensemester.start + FROM + public.tbl_studiensemester + WHERE + studiensemester_kurzbz=".$this->db_add_param($studiensemester_kurzbz)." + AND tbl_studiensemester.start < (SELECT start + FROM public.tbl_studiensemester stsem WHERE + stsem.studiensemester_kurzbz=".$this->db_add_param(CIS_LV_LEKTORINNENZUTEILUNG_VERTRAGSPRUEFUNG_VON)." + )"; + + if ($result = $this->db_query($qry)) + { + if ($this->db_num_rows($result)>0) + { + // Wenn das Studiensemester vor dem Pruefdatum liegt, gilt der Vertrag immer als erteilt. + return true; + } + } + else + { + $this->errormsg = 'Fehler beim Laden des Studiensemesters'; + return false; + } + } + + $qry = " + SELECT + 1 + FROM + lehre.tbl_lehreinheitmitarbeiter + JOIN lehre.tbl_lehreinheit USING(lehreinheit_id) + JOIN lehre.tbl_vertrag USING(vertrag_id) + JOIN lehre.tbl_vertrag_vertragsstatus USING(vertrag_id) + WHERE + tbl_lehreinheitmitarbeiter.mitarbeiter_uid=".$this->db_add_param($mitarbeiter_uid)." + AND tbl_lehreinheit.studiensemester_kurzbz=".$this->db_add_param($studiensemester_kurzbz)." + AND tbl_lehreinheit.lehrveranstaltung_id=".$this->db_add_param($lehrveranstaltung_id)." + AND tbl_vertrag_vertragsstatus.vertragsstatus_kurzbz='erteilt' + AND NOT EXISTS( + SELECT 1 FROM lehre.tbl_vertrag_vertragsstatus vstatus + WHERE vstatus.vertrag_id = tbl_vertrag.vertrag_id + AND vstatus.vertragsstatus_kurzbz='storno' + ) + "; + + if ($result = $this->db_query($qry)) + { + if ($this->db_num_rows($result) > 0) + { + return true; + } + else + { + return false; + } + } + else + { + $this->errormsg = 'Fehler beim Laden der Daten'; + return false; + } + } } ?> diff --git a/public/js/lehre/lehrauftrag/acceptLehrauftrag.js b/public/js/lehre/lehrauftrag/acceptLehrauftrag.js index fffed4f87..da041c232 100644 --- a/public/js/lehre/lehrauftrag/acceptLehrauftrag.js +++ b/public/js/lehre/lehrauftrag/acceptLehrauftrag.js @@ -294,11 +294,12 @@ function footer_downloadCSV(){ */ function footer_selectAll(){ $('#tableWidgetTabulator').tabulator('getRows', true) - .filter(row => row.getData().bestellt != null && // bestellt + .filter(function(row){ return row.getData().bestellt != null && // bestellt row.getData().erteilt != null && // AND erteilt row.getData().akzeptiert == null && // AND NOT akzeptiert - row.getData().status != 'Geändert') // AND NOT geändert - .forEach((row => row.select())); + row.getData().status != 'Geändert' + ;}) // AND NOT geändert + .forEach((function(row){ return row.select();})); } /* @@ -464,6 +465,17 @@ storniert_tooltip = function(cell){ } $(function() { + + // Pruefen ob Promise unterstuetzt wird + // Tabulator funktioniert nicht mit IE + var canPromise = !! window.Promise; + if(!canPromise) + { + alert("Diese Seite kann mit ihrem Browser nicht angezeigt werden. Bitte verwenden Sie Firefox, Chrome oder Edge um die Seite anzuzeigen"); + window.location.href='about:blank'; + return; + } + // Show all rows $("#show-all").click(function(){ $('#tableWidgetTabulator').tabulator('clearFilter'); @@ -582,7 +594,7 @@ $(function() { // Print error message FHC_DialogLib.alertWarning(data.retval); } - + if (!data.error && data.retval != null) { // Update status 'Erteilt' From dd2c384de04dc089c1d5fc0ae8d9fc14b826cfc4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andreas=20=C3=96sterreicher?= Date: Mon, 16 Mar 2020 11:04:40 +0100 Subject: [PATCH 28/40] =?UTF-8?q?Personalmeldung=20angepasst:=20=20=20=20?= =?UTF-8?q?=C3=9Cbersichtstabelle=20hinzugef=C3=BCgt=20=20=20=20Erhalterke?= =?UTF-8?q?nnzahl=20und=20Meldedatum=20wird=20dynamisch=20ermittelt?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- vilesci/bis/personalmeldung.php | 233 ++++++++++++++++++++++++++++++-- 1 file changed, 221 insertions(+), 12 deletions(-) diff --git a/vilesci/bis/personalmeldung.php b/vilesci/bis/personalmeldung.php index 9d0f92894..2e2910247 100644 --- a/vilesci/bis/personalmeldung.php +++ b/vilesci/bis/personalmeldung.php @@ -1,5 +1,22 @@ + */ require_once('../../config/vilesci.config.inc.php'); require_once('../../include/studiensemester.class.php'); require_once('../../include/datum.class.php'); @@ -78,7 +95,7 @@ if (!defined('BIS_FUNKTIONSCODE_6_ARR') || empty('BIS_FUNKTIONSCODE_6_ARR')) // Prüfe Zeitraum zur Erstellung einer BIS-Meldung $studiensemester = new studiensemester(); -$stsem = (isset($_GET['stsem'])) ? $_GET['stsem'] : $studiensemester->getaktorNext(1); // aktuelles Studiensemester +$stsem = (isset($_GET['stsem'])) ? $_GET['stsem'] : $studiensemester->getaktorNext(); // aktuelles Studiensemester $datum_obj = new datum(); if(mb_strstr($stsem,'SS')) @@ -121,6 +138,8 @@ foreach ($mitarbeiter_arr as $mitarbeiter) $person_obj->personalnummer = setLeadingZero(intval($mitarbeiter->personalnummer), 15); $person_obj->uid = $mitarbeiter->uid; + $person_obj->vorname = $mitarbeiter->vorname; + $person_obj->nachname = $mitarbeiter->nachname; $person_obj->geschlecht = $mitarbeiter->geschlecht; $person_obj->geschlechtX = $mitarbeiter->geschlechtX; $person_obj->geburtsjahr = $datum_obj->formatDatum($mitarbeiter->gebdatum, 'Y'); @@ -311,6 +330,8 @@ foreach ($mitarbeiter_arr as $mitarbeiter) // XML generieren // ********************************************************************************************************************* $xml = ''; + +_outputHTML($person_arr); $xml = _generateXML($person_arr); $xml_datei = 'bisdaten/bismeldung_mitarbeiter.xml'; @@ -318,12 +339,7 @@ $dateiausgabe = fopen($xml_datei,'w'); fwrite($dateiausgabe, $xml); fclose($dateiausgabe); -echo 'Herunterladen'; - -//header("Content-Type: text/xml"); -//echo $xml; - - +echo 'XML Herunterladen'; // --------------------------------------------------------------------------------------------------------------------- // Private Functions @@ -823,10 +839,19 @@ function _generateXML($person_arr) $xml = ''; $xml .= ''; -// TODO: ErhKz und Meldedatum aendern + $erhalter = new erhalter(); + $erhalter->getAll(); + + if(isset($erhalter->result[0])) + { + $erhalter = sprintf("%03s",trim($erhalter->result[0]->erhalter_kz)); + } + else + $erhalter = ''; + $xml .= ''; - $xml .= '005'; - $xml .= '15042020'; + $xml .= ''.$erhalter.''; + $xml .= '1504'.date('Y').''; $xml .= ''; foreach ($person_arr as $person) @@ -835,7 +860,8 @@ function _generateXML($person_arr) $xml .= 'personalnummer. ']]>'; $xml .= 'geschlecht. ']]>'; - $xml .= 'geschlechtX. ']]>'; + if ($person->geschlecht == 'x') + $xml .= 'geschlechtX. ']]>'; $xml .= 'geburtsjahr. ']]>'; $xml .= 'staatsangehoerigkeit. ']]>'; $xml .= 'hoechste_abgeschlossene_ausbildung. ']]>'; @@ -903,4 +929,187 @@ function _generateXML($person_arr) return $xml; } +/** + * Prints the HTML Table with all Persons + * @param $person_arr Array of PersonData + */ +function _outputHTML($person_arr) +{ + echo ' + + BIS - Meldung Personal + + '; + include('../../include/meta/jquery.php'); + include('../../include/meta/jquery-tablesorter.php'); + echo ' + + +

    Personalmeldung

    '; + echo ' + + '; + + echo "Anzahl der gemeldeten Personen: ".count($person_arr); + + echo ' +
    Alle
    Alle Lehraufträge mit jedem Status
    Bestellt
    Nur bestellte UND bestellte Lehraufträge, die in Bearbeitung sind
    Erteilt
    Nur erteilte UND geänderte Lehraufträge, die in Bearbeitung sind
    Angenommen
    Nur von Ihnen angenommene Lehraufträge
    + + + + + + + + + + + + + + + + + + '; + + + foreach ($person_arr as $person) + { + echo ' + + + + + + + + + + + '; + + echo ''; + + echo ''; + + echo ' + '; + } + + echo ' +
    PersNrVornameNachnameUIDGeschlecht (X)Geb.JahrStaatHöchste Ausb.Habil.HautpberufcodeVerwendungFunktionLehre
    '.$person->personalnummer.''.$person->vorname.''.$person->nachname.''.$person->uid.''.$person->geschlecht.($person->geschlecht=='x'?'('.$person->geschlechtX.')':'').''.$person->geburtsjahr.''.$person->staatsangehoerigkeit.''.$person->hoechste_abgeschlossene_ausbildung.''.$person->habilitation.''.$person->hauptberufcode.''; + + if (count($person->verwendung_arr) > 0) + { + echo ' + + + + + + + + + + + + '; + + foreach ($person->verwendung_arr as $verwendung) + { + echo ' + + + + + + + '; + } + echo ' +
    VerwendungBa1CodeBa2CodeVZÄJVZÄ
    '.$verwendung->verwendung_code.''.$verwendung->ba1code.''.$verwendung->ba2code.''.$verwendung->vzae.''.$verwendung->jvzae.'
    '; + } + echo '
    '; + + if (count($person->funktion_arr) > 0) + { + echo ' + + + + + + + + + + '; + + foreach ($person->funktion_arr as $funktion) + { + echo ' + + + + + '; + } + echo ' +
    FunktionBes.QualStgKZ
    '. $funktion->funktionscode. ''. $funktion->besondereQualifikationCode. ''; + + if ($funktion->funktionscode == 5 || $funktion->funktionscode == 7) + { + if (is_array($funktion->studiengang)) + { + foreach ($funktion->studiengang as $studiengang) + { + echo $studiengang.' '; + } + } + else if (!is_null($funktion->studiengang)) + { + echo $funktion->studiengang.' '; + } + } + echo '
    '; + } + echo '
    '; + if ($person->lehre_arr > 0) + { + echo ' + + + + + + + + + '; + + foreach ($person->lehre_arr as $lehre) + { + echo ' + + + + + '; + } + + echo ' +
    StgKZSommerSWSWinterSWS
    '. $lehre->StgKz. ''. $lehre->SommersemesterSWS. ''. $lehre->WintersemesterSWS. '
    '; + } + echo '
    '; +} From fd95f0f67c28df15daa62adf0692b9cf51866bd2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andreas=20=C3=96sterreicher?= Date: Mon, 16 Mar 2020 13:11:16 +0100 Subject: [PATCH 29/40] Firmenhandys werden immer angezeigt auch wenn eine normale Klappe vorhanden ist --- cis/private/profile/index.php | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/cis/private/profile/index.php b/cis/private/profile/index.php index dbef13bfd..17593ec15 100644 --- a/cis/private/profile/index.php +++ b/cis/private/profile/index.php @@ -341,16 +341,16 @@ if ($type == 'mitarbeiter') echo $p->t('profil/telefonTw').": $vorwahl - $user->telefonklappe
    "; //echo $p->t('profil/faxTw').": $vorwahl - 99 $user->telefonklappe
    "; } - else { - $kontakt = new kontakt(); - $kontakt->load_pers($user->person_id); - foreach($kontakt->result as $k) - { - if ($k->kontakttyp == 'firmenhandy') - echo $p->t('profil/telefonTw').': '.$k->kontakt.'
    '; - } + $kontakt = new kontakt(); + $kontakt->load_pers($user->person_id); + foreach($kontakt->result as $k) + { + if ($k->kontakttyp == 'firmenhandy') + echo 'Firmenhandy: '.$k->kontakt.'
    '; } + + if ($user->ort_kurzbz != '') echo $p->t('profil/buero').': '.$user->ort_kurzbz.'
    '; } From 7b9b5e0dd59e957a64985bbdd39dd013c0534cab Mon Sep 17 00:00:00 2001 From: Nikolaus Krondraf Date: Mon, 16 Mar 2020 13:36:52 +0100 Subject: [PATCH 30/40] ohne Angabe des Studiensemesters werden nun alle LVs exportiert --- include/lehreinheit.class.php | 54 +++++++++++++++++++++++++++++++++++ rdf/lehreinheit.rdf.php | 6 +++- 2 files changed, 59 insertions(+), 1 deletion(-) diff --git a/include/lehreinheit.class.php b/include/lehreinheit.class.php index 3d754d7ec..23677a6e3 100644 --- a/include/lehreinheit.class.php +++ b/include/lehreinheit.class.php @@ -257,6 +257,60 @@ class lehreinheit extends basis_db } } + /** + * Laedt alle vorhandenen Lehreinheiten zu einer Lehrveranstaltung + * + * @param $lehrveranstaltung_id + * @return bool + */ + public function load_all_lehreinheiten($lehrveranstaltung_id) + { + $this->lehreinheiten = array(); + $this->errormsg =''; + + $qry = "SELECT * FROM lehre.tbl_lehreinheit WHERE + lehrveranstaltung_id=".$this->db_add_param($lehrveranstaltung_id, FHC_INTEGER)." + ORDER BY lehreinheit_id;"; + + if($this->db_query($qry)) + { + while($row = $this->db_fetch_object()) + { + $le_obj = new lehreinheit(); + + $le_obj->lehreinheit_id = $row->lehreinheit_id; + $le_obj->lehrveranstaltung_id = $row->lehrveranstaltung_id; + $le_obj->studiensemester_kurzbz = $row->studiensemester_kurzbz; + $le_obj->lehrfach_id = $row->lehrfach_id; + $le_obj->lehrform_kurzbz = $row->lehrform_kurzbz; + $le_obj->stundenblockung = $row->stundenblockung; + $le_obj->wochenrythmus = $row->wochenrythmus; + $le_obj->start_kw = $row->start_kw; + $le_obj->raumtyp = $row->raumtyp; + $le_obj->raumtypalternativ = $row->raumtypalternativ; + $le_obj->lehre = $this->db_parse_bool($row->lehre); + $le_obj->anmerkung = $row->anmerkung; + $le_obj->unr = $row->unr; + $le_obj->lvnr = $row->lvnr; + $le_obj->sprache = $row->sprache; + $le_obj->insertamum = $row->insertamum; + $le_obj->insertvon = $row->insertvon; + $le_obj->updateamum = $row->updateamum; + $le_obj->updatevon = $row->updatevon; + $le_obj->ext_id = $row->ext_id; + $le_obj->gewicht = $row->gewicht; + + $this->lehreinheiten[] = $le_obj; + } + return true; + } + else + { + $this->errormsg = 'Fehler beim Laden der Lehreinheiten'; + return false; + } + } + /** * Prueft die Variablen vor dem Speichern * auf Gueltigkeit. diff --git a/rdf/lehreinheit.rdf.php b/rdf/lehreinheit.rdf.php index e010768d5..b0e668290 100644 --- a/rdf/lehreinheit.rdf.php +++ b/rdf/lehreinheit.rdf.php @@ -86,7 +86,11 @@ else { if($lehrveranstaltung_id!='') { - $lehreinheit->load_lehreinheiten($lehrveranstaltung_id, $studiensemester_kurzbz); + if($studiensemester_kurzbz=!'') + $lehreinheit->load_lehreinheiten($lehrveranstaltung_id, $studiensemester_kurzbz); + else + $lehreinheit->load_all_lehreinheiten($lehrveranstaltung_id); + foreach ($lehreinheit->lehreinheiten as $row) draw_row($row); } From 8c76f38b4d29b956ef7cfa36b3c3fb0c79caf8a7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andreas=20=C3=96sterreicher?= Date: Mon, 16 Mar 2020 13:52:29 +0100 Subject: [PATCH 31/40] =?UTF-8?q?Plausibilit=C3=A4tspr=C3=BCfungen=20f?= =?UTF-8?q?=C3=BCr=20Personalmeldung=20erg=C3=A4nzt.=20Anpassungen=20f?= =?UTF-8?q?=C3=BCr=20Studiengang-Container?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- vilesci/bis/personalmeldung.php | 105 ++++++++++++++++++++++++++++++-- 1 file changed, 101 insertions(+), 4 deletions(-) diff --git a/vilesci/bis/personalmeldung.php b/vilesci/bis/personalmeldung.php index 2e2910247..3b2a43411 100644 --- a/vilesci/bis/personalmeldung.php +++ b/vilesci/bis/personalmeldung.php @@ -891,21 +891,21 @@ function _generateXML($person_arr) if ($funktion->funktionscode == 5 || $funktion->funktionscode == 7) { - $xml .= ''; - if (is_array($funktion->studiengang)) { foreach ($funktion->studiengang as $studiengang) { + $xml .= ''; $xml .= ''; + $xml .= ''; } } else if (!is_null($funktion->studiengang)) { + $xml .= ''; $xml .= 'studiengang. ']]>'; - + $xml .= ''; } - $xml .= ''; } $xml .= ''; @@ -947,6 +947,7 @@ function _outputHTML($person_arr)

    Personalmeldung

    '; + outputPlausibilitaetschecks($person_arr); echo ' '; + echo "

    Meldedaten

    "; echo "Anzahl der gemeldeten Personen: ".count($person_arr); echo ' @@ -1113,3 +1115,98 @@ function _outputHTML($person_arr) echo ' '; } + +function outputPlausibilitaetschecks($person_arr) +{ + echo "

    Plausibilitätsprüfung

    "; + + foreach ($person_arr as $row) + { + $msg = array(); + if ($row->personalnummer == '') + { + $msg[] = 'Personalnummer fehlt '; + } + if ($row->geschlecht == '') + { + $msg[] = 'Geschlecht fehlt '; + } + if ($row->geburtsjahr == '') + { + $msg[] = 'Geburtsjahr fehlt '; + } + if (date('Y') - $row->geburtsjahr >= 100) + { + $msg[] = 'Person darf nicht älter als 100 sein '; + } + if (date('Y') - $row->geburtsjahr <= 10) + { + $msg[] = 'Person darf nicht jünger als 10 sein '; + } + if ($row->staatsangehoerigkeit == '') + { + $msg[] = 'Staatsangehoerigkeit fehlt '; + } + if ($row->hoechste_abgeschlossene_ausbildung == '') + { + $msg[] = 'Höchste Abgeschlossene Ausbildung fehlt '; + } + if ($row->habilitation == '') + { + $msg[] = 'Habilitation fehlt '; + } + + if (isset($row->verwendung_arr) && is_array($row->verwendung_arr) && count($row->verwendung_arr) > 0) + { + foreach ($row->verwendung_arr as $verwendung) + { + if($verwendung->vzae < -1) + { + $msg[] = 'VZAE ist zu klein -> Vertragsstunden prüfen'; + } + if($verwendung->vzae > 100) + { + $msg[] = 'VZAE ist zu gross -> Vertragsstunden prüfen'; + } + + if($verwendung->jvzae < -1) + { + $msg[] = 'JVZAE ist zu klein -> Vertragsstunden prüfen'; + } + if($verwendung->jvzae > 100) + { + $msg[] = 'JVZAE ist zu gross -> Vertragsstunden prüfen'; + } + } + } + + if (isset($row->lehre_arr) && is_array($row->lehre_arr) && count($row->lehre_arr) > 0) + { + foreach ($row->lehre_arr as $lehre) + { + if ($lehre->SommersemesterSWS > 40) + { + $msg[] = 'Sommersemester SWS zu groß '.$lehre->SommersemesterSWS; + } + if ($lehre->WintersemesterSWS < 0) + { + $msg[] = 'Wintersemester SWS zu groß '.$lehre->WintersemesterSWS; + } + if ($lehre->SommersemesterSWS < 0) + { + $msg[] = 'Sommersemester SWS zu klein '.$lehre->SommersemesterSWS; + } + if ($lehre->WintersemesterSWS < 0) + { + $msg[] = 'Wintersemester SWS zu klein '.$lehre->WintersemesterSWS; + } + } + } + + if (count($msg) > 0) + { + echo "Fehler bei ".$row->vorname.' '.$row->nachname.' : '.implode($msg,', '); + echo "\n
    "; + } + } +} From 77e2db5a7c7844fba4f5004d09dab9723f394ff7 Mon Sep 17 00:00:00 2001 From: Nikolaus Krondraf Date: Mon, 16 Mar 2020 15:24:48 +0100 Subject: [PATCH 32/40] Bugfix --- rdf/lehreinheit.rdf.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rdf/lehreinheit.rdf.php b/rdf/lehreinheit.rdf.php index b0e668290..d6bd47411 100644 --- a/rdf/lehreinheit.rdf.php +++ b/rdf/lehreinheit.rdf.php @@ -86,7 +86,7 @@ else { if($lehrveranstaltung_id!='') { - if($studiensemester_kurzbz=!'') + if($studiensemester_kurzbz!='') $lehreinheit->load_lehreinheiten($lehrveranstaltung_id, $studiensemester_kurzbz); else $lehreinheit->load_all_lehreinheiten($lehrveranstaltung_id); From 91ab79d6ebe35c6a960d12b5ad8e6ffae1c8fa37 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andreas=20=C3=96sterreicher?= Date: Tue, 17 Mar 2020 12:09:36 +0100 Subject: [PATCH 33/40] =?UTF-8?q?Config=20Eintr=C3=A4ge=20f=C3=BCr=20BIS?= =?UTF-8?q?=20Meldung=20aktualisiert?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- config/vilesci.config-default.inc.php | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/config/vilesci.config-default.inc.php b/config/vilesci.config-default.inc.php index e737fc58a..1647cb59a 100644 --- a/config/vilesci.config-default.inc.php +++ b/config/vilesci.config-default.inc.php @@ -214,13 +214,13 @@ define('CI_ENVIRONMENT', 'development'); // Code igniter environment variable define('BIS_EXCLUDE_STG', array()); // Basis Vollzeit Arbeitsstunden für Berechnung von Jahresvollzeitaequivalenz JVZAE (echte Dienstverträge) -define('BIS_VOLLZEIT_ARBEITSSTUNDEN', '0'); +define('BIS_VOLLZEIT_ARBEITSSTUNDEN', '40'); // Basis Vollzeit Semesterwochenstunden für Berechnung von Jahresvollzeitaequivalenz JVZAE auf Stundenbasis (freie Dienstverträge) -define('BIS_VOLLZEIT_SWS_EINZELSTUNDENBASIS', '0'); +define('BIS_VOLLZEIT_SWS_EINZELSTUNDENBASIS', '15'); // Basis Vollzeit Semesterwochenstunden für Berechnung von Jahresvollzeitaequivalenz JVZAE für inkludierte Lehre bei echten Dienstverträgen -define('BIS_VOLLZEIT_SWS_INKLUDIERTE_LEHRE', '0'); +define('BIS_VOLLZEIT_SWS_INKLUDIERTE_LEHRE', '25'); // Semester Gewichtung für Berechnung von Jahresvollzeitaequivalenz JVZAE define('BIS_HALBJAHRES_GEWICHTUNG_SWS', 0.5); @@ -239,10 +239,12 @@ define('BIS_FUNKTIONSCODE_1234_ARR', array( 'kollegium' => 4 // Mitglied des Kollegiums )); +// Liste der Leitungsfunktionen define('BIS_FUNKTIONSCODE_5_ARR', array( 'Leitung' )); +// Organisationseinheitstypen bei denen KEINE Leiter gemeldet werden define('BIS_FUNKTIONSCODE_6_ARR', array( 'Team' )); From 44fc614f67f047760522d42c2e2ebbc2657d7ab1 Mon Sep 17 00:00:00 2001 From: Nikolaus Krondraf Date: Tue, 17 Mar 2020 14:19:22 +0100 Subject: [PATCH 34/40] =?UTF-8?q?Durchschnitt=20und=20gewichteter=20Durchs?= =?UTF-8?q?chnitt=20k=C3=B6nnen=20per=20config=20in=20Notenliste=20ausgebl?= =?UTF-8?q?endet=20werden?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- cis/private/lehre/notenliste.php | 11 ++++++++--- config/global.config-default.inc.php | 3 +++ 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/cis/private/lehre/notenliste.php b/cis/private/lehre/notenliste.php index 56fd4a36d..e7e7ae90f 100644 --- a/cis/private/lehre/notenliste.php +++ b/cis/private/lehre/notenliste.php @@ -417,10 +417,15 @@ else $tblFoot .= ""; - $tbl .= $tblHead.$tblFoot.$tblBody; + if (!defined('CIS_NOTENLISTE_DURCHSCHNITT_ANZEIGEN') || (defined('CIS_NOTENLISTE_DURCHSCHNITT_ANZEIGEN') && CIS_NOTENLISTE_DURCHSCHNITT_ANZEIGEN)) + { + $tbl .= $tblHead.$tblFoot.$tblBody; + $tbl .= ""; + $tbl .= ""; + } + else + $tbl .= $tblHead.$tblBody; - $tbl .= "
    *" . $p->t('tools/legendeNotendurchschnitt') . "
    **" . $p->t('tools/legendeGewichteterNotendurchschnitt') . "
    "; - $tbl .= ""; if ($legende) { $tbl .= ""; diff --git a/config/global.config-default.inc.php b/config/global.config-default.inc.php index 05da2cb94..dff96bc38 100644 --- a/config/global.config-default.inc.php +++ b/config/global.config-default.inc.php @@ -101,6 +101,9 @@ define('CIS_GESAMTNOTE_FREIGABEMAIL_NOTE', false); // Gibt an ob in der Notenliste der Studierenden nur offizielle Noten oder alle angezeigt werden define('CIS_NOTENLISTE_OFFIZIELL_ANZEIGEN', false); +// Gibt an ob in der Notenliste der Durchschnitt und der gewichtete Durchschnitt angezeigt werden +define('CIS_NOTENLISTE_DURCHSCHNITT_ANZEIGEN', true); + // Grenzwerte für Anwesenheit define('FAS_ANWESENHEIT_ROT', 70); define('FAS_ANWESENHEIT_GELB', 90); From 1a9ac9e1fa8d33ffca73d6da8e5a44cbf2de141a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andreas=20=C3=96sterreicher?= Date: Wed, 18 Mar 2020 13:44:36 +0100 Subject: [PATCH 35/40] =?UTF-8?q?LVA=20Liste=20anzeige=20der=20Anzahl=20de?= =?UTF-8?q?r=20Lehrauftr=C3=A4ge=20korrigiert?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- cis/private/profile/lva_liste.php | 827 +++++++++++++++--------------- 1 file changed, 422 insertions(+), 405 deletions(-) diff --git a/cis/private/profile/lva_liste.php b/cis/private/profile/lva_liste.php index 8b8829099..f2d175dbf 100644 --- a/cis/private/profile/lva_liste.php +++ b/cis/private/profile/lva_liste.php @@ -39,45 +39,49 @@ require_once('../../../include/addon.class.php'); require_once('../../../include/benutzerberechtigung.class.php'); require_once('../../../include/vertrag.class.php'); - if (!$db = new basis_db()) - die('Fehler beim Oeffnen der Datenbankverbindung'); +if (!$db = new basis_db()) + die('Fehler beim Oeffnen der Datenbankverbindung'); - $adress=MAIL_ADMIN; +$adress = MAIL_ADMIN; - $user=get_uid(); - $studiensemester = new studiensemester(); +$user=get_uid(); +$studiensemester = new studiensemester(); - if (isset($_GET['uid'])) - $uid=$_GET['uid']; - else - $uid = $user; +if (isset($_GET['uid'])) + $uid = $_GET['uid']; +else + $uid = $user; - if (isset($_GET['stdsem'])) - $stdsem=$_GET['stdsem']; - else - $stdsem=$studiensemester->getaktorNext(); +if (isset($_GET['stdsem'])) + $stdsem = $_GET['stdsem']; +else + $stdsem = $studiensemester->getaktorNext(); - $rechte = new benutzerberechtigung(); - $rechte->getBerechtigungen($user); - if(!$rechte->isBerechtigt('admin') && $uid!=$user) - die('Sie haben keine Berechtigung für diesen Vorgang'); +$rechte = new benutzerberechtigung(); +$rechte->getBerechtigungen($user); +if (!$rechte->isBerechtigt('admin') && $uid != $user) + die('Sie haben keine Berechtigung für diesen Vorgang'); - $datum = new datum(); +$datum = new datum(); - $addon = new addon(); - if(in_array('lvinfo',$addon->aktive_addons)) - $lvinfo=true; - else - $lvinfo=false; +$addon = new addon(); +if (in_array('lvinfo',$addon->aktive_addons)) + $lvinfo=true; +else + $lvinfo=false; - //Studiensemester abfragen. Letzten 5, aktuelles und naechstes. - $sql_query='SELECT * FROM public.tbl_studiensemester WHERE (start<=(now()::date+240) AND ende>=(now()::date-900)) ORDER BY start'; - $result_stdsem=$db->db_query($sql_query); - $num_rows_stdsem=$db->db_num_rows($result_stdsem); - //if (!isset($stdsem)) - //$stdsem=$db->db_result($result_stdsem,0,"studiensemester_kurzbz"); +//Studiensemester abfragen. Letzten 5, aktuelles und naechstes. +$sql_query = ' + SELECT + * + FROM + public.tbl_studiensemester + WHERE (start<=(now()::date+240) AND ende>=(now()::date-900)) + ORDER BY start'; +$result_stdsem = $db->db_query($sql_query); +$num_rows_stdsem = $db->db_num_rows($result_stdsem); - $p = new phrasen(getSprache()); +$p = new phrasen(getSprache()); /* 0000453: Sortierung von LVs - Meine LV 1. Bachelor @@ -90,413 +94,426 @@ require_once('../../../include/vertrag.class.php'); 8. Name der LV */ - //Lehrveranstaltungen abfragen. - $sql_query=" - SELECT - *, UPPER(tbl_studiengang.typ::varchar(1) || tbl_studiengang.kurzbz) as stg_kurzbz, - tbl_lehrveranstaltung.semester as lv_semester, - lehrfach.kurzbz as lehrfach, - lehrfach.bezeichnung as lehrfach_bez, - tbl_lehreinheitmitarbeiter.semesterstunden as semesterstunden, - tbl_lehrveranstaltung.bezeichnung as lv_bezeichnung, - tbl_lehreinheit.anmerkung as le_anmerkung, - tbl_lehreinheit.lehrform_kurzbz as le_lehrform_kurzbz, - (SELECT kurzbz FROM public.tbl_mitarbeiter WHERE mitarbeiter_uid=tbl_lehreinheitmitarbeiter.mitarbeiter_uid) as lektor, - tbl_lehrveranstaltung.lehrveranstaltung_id - FROM +//Lehrveranstaltungen abfragen. +$sql_query = " + SELECT + *, UPPER(tbl_studiengang.typ::varchar(1) || tbl_studiengang.kurzbz) as stg_kurzbz, + tbl_lehrveranstaltung.semester as lv_semester, + lehrfach.kurzbz as lehrfach, + lehrfach.bezeichnung as lehrfach_bez, + tbl_lehreinheitmitarbeiter.semesterstunden as semesterstunden, + tbl_lehrveranstaltung.bezeichnung as lv_bezeichnung, + tbl_lehreinheit.anmerkung as le_anmerkung, + tbl_lehreinheit.lehrform_kurzbz as le_lehrform_kurzbz, + (SELECT kurzbz FROM public.tbl_mitarbeiter + WHERE mitarbeiter_uid=tbl_lehreinheitmitarbeiter.mitarbeiter_uid) as lektor, + tbl_lehrveranstaltung.lehrveranstaltung_id + FROM lehre.tbl_lehreinheit JOIN lehre.tbl_lehreinheitmitarbeiter USING(lehreinheit_id) JOIN lehre.tbl_lehrveranstaltung USING(lehrveranstaltung_id) JOIN public.tbl_studiengang USING(studiengang_kz) JOIN lehre.tbl_lehrveranstaltung as lehrfach ON(tbl_lehreinheit.lehrfach_id=lehrfach.lehrveranstaltung_id) - WHERE tbl_lehreinheit.studiensemester_kurzbz=".$db->db_add_param($stdsem)." AND mitarbeiter_uid=".$db->db_add_param($uid); - $sql_query.=" ORDER BY stg_kurzbz,lv_semester,lv_bezeichnung"; - $result=$db->db_query($sql_query); - $num_rows=$db->db_num_rows($result); + WHERE + tbl_lehreinheit.studiensemester_kurzbz = ".$db->db_add_param($stdsem)." + AND mitarbeiter_uid = ".$db->db_add_param($uid)." + ORDER BY stg_kurzbz,lv_semester,lv_bezeichnung"; - echo ' - - - - '.$p->t('lvaliste/titel').' - - - - - - - - - - - - -

    '.$p->t('lvaliste/titel').' ( '.$stdsem.' )

    '; - echo '
    *" . $p->t('tools/legendeNotendurchschnitt') . "
    **" . $p->t('tools/legendeGewichteterNotendurchschnitt') . "
    " . $p->t('tools/hinweistextMarkierung') . "
    '; - for ($i=0;$i<$num_rows_stdsem;$i++) - { - $row=$db->db_fetch_object($result_stdsem); - if ($stdsem==$row->studiensemester_kurzbz) - echo ''.$row->studiensemester_kurzbz.' - '; - else - echo ''.$row->studiensemester_kurzbz.' - '; - } - echo ''; - echo ''.$p->t('lvaliste/hilfeAnzeigen').''; - echo '

    '; - if ($num_rows>0) - { - - echo '

    '.$p->t('lvaliste/lehrveranstaltungen').'

    '; - echo $p->t('lvaliste/anzahl').': '.$num_rows; - echo ' - - - '; - if(!defined('CIS_LVALISTE_NOTENEINGABE_ANZEIGEN') || CIS_LVALISTE_NOTENEINGABE_ANZEIGEN) - echo ''; - - - if($lvinfo) - echo ''; - - echo ' - - - - - - - - - - - - - - - - '; - // Lektoren sollen die Anmerkung dzt. nicht sehen, da nur für intern gedacht - - echo ' - '; - $stg_obj = new studiengang(); - $stg_obj->getAll(null,null); - $summe_std=0; - - for ($i=0; $i<$num_rows; $i++) + $("#t2").tablesorter( { - $row=$db->db_fetch_object($result); - - // Nur erteilte Vertraege anzeigen wenn dies im Config hinterlegt ist. - if (defined('CIS_LV_LEKTORINNENZUTEILUNG_VERTRAGSPRUEFUNG_VON') - && CIS_LV_LEKTORINNENZUTEILUNG_VERTRAGSPRUEFUNG_VON != '') - { - $vertrag = new vertrag(); - if (!$vertrag->isVertragErteiltLV($row->lehrveranstaltung_id, $stdsem, $user)) - { - continue; - } - } - - $lvangebot = new lvangebot(); - echo ''; - if(!defined('CIS_LVALISTE_NOTENEINGABE_ANZEIGEN') || CIS_LVALISTE_NOTENEINGABE_ANZEIGEN) - echo ''; - - if($lvinfo) - echo ''; - - echo ''; - echo ''; - echo ''; - if ($row->lehrfach_bez!=$row->lv_bezeichnung) - echo ''; - else - echo ''; - echo ''; - echo ''; - echo ''; - - $qry ="SELECT * FROM lehre.tbl_lehreinheitgruppe WHERE lehreinheit_id=".$db->db_add_param($row->lehreinheit_id); - $gruppe=''; - if($result_grp = $db->db_query($qry)) - { - while($row_grp = $db->db_fetch_object($result_grp)) - { - if($row_grp->gruppe_kurzbz!='') - $gruppe.= $row_grp->gruppe_kurzbz.'
    '; - else - $gruppe.= $stg_obj->kuerzel_arr[$row->studiengang_kz].'-'.$row_grp->semester.$row_grp->verband.$row_grp->gruppe.'
    '; - } - } - echo ''; - echo ''; - echo ''; - echo ''; - echo ''; - if(getSprache()=='German') - { - echo ''; - } - else - { - echo ''; - } - echo ''; - - $lvangebot->getAllFromLvId($row->lehrveranstaltung_id, $row->studiensemester_kurzbz); - if(!empty($lvangebot->result)) - { - echo ''; - echo ''; - } - else - { - echo ' - '; - } - //echo ''; Lektoren sollen die Anmerkung dzt. nicht sehen, da nur für intern gedacht - - echo ''; - $summe_std+=$row->semesterstunden; - } - echo ''; - echo ''; - echo ''; - if(!defined('CIS_LVALISTE_NOTENEINGABE_ANZEIGEN') || CIS_LVALISTE_NOTENEINGABE_ANZEIGEN) - echo ''; - if($lvinfo) - echo ''; - - echo ''; - echo ''; - echo ''; - echo ''; - echo ''; - echo ''; - echo ''; - echo ''; - echo ''; - echo ''; - echo ''; - echo ''; - if(getSprache()=='German') + sortList: [[0,0],[1,0],[3,0]], + widgets: ["zebra"] + }); + $("#t3").tablesorter( { - echo ''; - } - else - { - echo ''; - } - echo ''; - echo ''; - echo ''; - echo '
    '.$p->t('lvaliste/gesamtnote').''.$p->t('lvaliste/lvinfo').''.$p->t('lvaliste/id').''.$p->t('lvaliste/lehrfach').''.$p->t('lvaliste/lehrform').''.$p->t('lvaliste/lvBezeichnung').''.$p->t('lvaliste/lektor').''.$p->t('lvaliste/studiengang').''.$p->t('lvaliste/semester').''.$p->t('lvaliste/gruppen').''.$p->t('lvaliste/raumtyp').''.$p->t('lvaliste/raumtypalternativ').''.$p->t('lvaliste/blockung').''.$p->t('lvaliste/wochenrythmus').''.$p->t('lvaliste/stunden').''.$p->t('lvaliste/kalenderwoche').'Anm. vonAnm. bis'.$p->t('lvaliste/anmerkung').'
    '.$p->t('lvaliste/gesamtnote').''.$p->t('lvaliste/lvinfo').''.$row->lehreinheit_id.''.$row->lehrfach.''.$row->le_lehrform_kurzbz.''.$row->lv_bezeichnung.' ('.$p->t('lvaliste/lehrfach').': '.$row->lehrfach_bez.')'.$row->lv_bezeichnung.''.$row->lektor.''.$row->stg_kurzbz.''.$row->semester.''.$gruppe.''.$row->raumtyp.''.$row->raumtypalternativ.''.$row->stundenblockung.''.$row->wochenrythmus.''.number_format($row->semesterstunden,2,$dec_point=",",$thousands_sep=".").''.number_format($row->semesterstunden,2,$dec_point=".",$thousands_sep=",").''.$row->start_kw.''.$datum->formatDatum($lvangebot->result[0]->anmeldefenster_start, "d.m.Y").''.$datum->formatDatum($lvangebot->result[0]->anmeldefenster_ende, "d.m.Y").'  '.$row->le_anmerkung.'
                 '.$p->t('lvaliste/summe').''.number_format($summe_std,2,$dec_point=",",$thousands_sep=".").''.number_format($summe_std,2,$dec_point=".",$thousands_sep=",").' 
    '; - } + sortList: [[0,0],[1,0],[3,0]], + widgets: ["zebra"] + }); + }); + --> + + + +

    '.$p->t('lvaliste/titel').' ( '.$stdsem.' )

    '; +echo '
    '; +for ($i = 0;$i < $num_rows_stdsem;$i++) +{ + $row = $db->db_fetch_object($result_stdsem); + if ($stdsem == $row->studiensemester_kurzbz) + echo ''.$row->studiensemester_kurzbz.' - '; else - echo $p->t('lvaliste/keineDatensaetze').'
    '; + echo ''.$row->studiensemester_kurzbz.' - '; +} +echo '
    '; +echo ''.$p->t('lvaliste/hilfeAnzeigen').''; +echo '

    '; +if ($num_rows > 0) +{ + $anzahl_lvs = 0; + $lvtable = ' + + + '; + if (!defined('CIS_LVALISTE_NOTENEINGABE_ANZEIGEN') || CIS_LVALISTE_NOTENEINGABE_ANZEIGEN) + $lvtable .= ''; - //Betreuungen - - $mitarbeiter = new benutzer(); - $mitarbeiter->load($uid); - - $qry = "SELECT - tbl_lehrveranstaltung.bezeichnung, tbl_projektarbeit.titel, - (SELECT nachname || ' ' || vorname FROM public.tbl_benutzer JOIN public.tbl_person USING(person_id) - WHERE uid=student_uid) as student, tbl_lehrveranstaltung.studiengang_kz, tbl_lehrveranstaltung.semester, - tbl_studiengang.email, tbl_betreuerart.beschreibung AS beutreuerart_beschreibung, tbl_projektbetreuer.stunden - FROM - lehre.tbl_lehreinheit, lehre.tbl_lehrveranstaltung, lehre.tbl_projektarbeit, lehre.tbl_projektbetreuer, public.tbl_studiengang, lehre.tbl_betreuerart - WHERE - tbl_lehreinheit.lehreinheit_id=tbl_projektarbeit.lehreinheit_id AND - tbl_lehreinheit.lehrveranstaltung_id=tbl_lehrveranstaltung.lehrveranstaltung_id AND - tbl_lehreinheit.studiensemester_kurzbz=".$db->db_add_param($stdsem)." AND - tbl_projektarbeit.projektarbeit_id=tbl_projektbetreuer.projektarbeit_id AND - tbl_lehrveranstaltung.studiengang_kz=tbl_studiengang.studiengang_kz AND - tbl_projektbetreuer.betreuerart_kurzbz=tbl_betreuerart.betreuerart_kurzbz AND - tbl_projektbetreuer.person_id=".$db->db_add_param($mitarbeiter->person_id, FHC_INTEGER); + if ($lvinfo) + $lvtable .= ''; + $lvtable .= ' + + + + + + + + + + + + + + + + + + '; $stg_obj = new studiengang(); $stg_obj->getAll(null,null); $summe_std = 0; - if($result = $db->db_query($qry)) + for ($i = 0; $i < $num_rows; $i++) { - if($db->db_num_rows($result)>0) + $row = $db->db_fetch_object($result); + + // Nur erteilte Vertraege anzeigen wenn dies im Config hinterlegt ist. + if (defined('CIS_LV_LEKTORINNENZUTEILUNG_VERTRAGSPRUEFUNG_VON') + && CIS_LV_LEKTORINNENZUTEILUNG_VERTRAGSPRUEFUNG_VON != '') { - echo '

    '.$p->t('lvaliste/betreuungen').'

    '; - echo $p->t('lvaliste/anzahl').': '.$db->db_num_rows($result); - echo '
    '.$p->t('lvaliste/gesamtnote').''.$p->t('lvaliste/lvinfo').''.$p->t('lvaliste/id').''.$p->t('lvaliste/lehrfach').''.$p->t('lvaliste/lehrform').''.$p->t('lvaliste/lvBezeichnung').''.$p->t('lvaliste/lektor').''.$p->t('lvaliste/studiengang').''.$p->t('lvaliste/semester').''.$p->t('lvaliste/gruppen').''.$p->t('lvaliste/raumtyp').''.$p->t('lvaliste/raumtypalternativ').''.$p->t('lvaliste/blockung').''.$p->t('lvaliste/wochenrythmus').''.$p->t('lvaliste/stunden').''.$p->t('lvaliste/kalenderwoche').'Anm. vonAnm. bis
    '; - echo ''; - echo ''; - echo ''; - echo ''; - echo ''; - echo ''; - echo ''; - echo ''; - echo ''; - while($row = $db->db_fetch_object($result)) + $vertrag = new vertrag(); + if (!$vertrag->isVertragErteiltLV($row->lehrveranstaltung_id, $stdsem, $user)) { - echo ''; - echo ''; - echo ''; - if(getSprache()=='German') - { - echo ''; - } + continue; + } + } + $anzahl_lvs++; + + $lvangebot = new lvangebot(); + $lvtable .= ''; + if (!defined('CIS_LVALISTE_NOTENEINGABE_ANZEIGEN') || CIS_LVALISTE_NOTENEINGABE_ANZEIGEN) + $lvtable .= ''; + + if ($lvinfo) + $lvtable .= ''; + + $lvtable .= ''; + $lvtable .= ''; + $lvtable .= ''; + if ($row->lehrfach_bez != $row->lv_bezeichnung) + $lvtable .= ''; + else + $lvtable .= ''; + $lvtable .= ''; + $lvtable .= ''; + $lvtable .= ''; + + $qry = " + SELECT * FROM lehre.tbl_lehreinheitgruppe + WHERE lehreinheit_id=".$db->db_add_param($row->lehreinheit_id); + + $gruppe = ''; + if ($result_grp = $db->db_query($qry)) + { + while ($row_grp = $db->db_fetch_object($result_grp)) + { + if ($row_grp->gruppe_kurzbz != '') + $gruppe .= $row_grp->gruppe_kurzbz.'
    '; else - { - echo ''; - } - echo ''; - echo ''; - echo ''; - echo ''; - - $summe_std+=$row->stunden; + $gruppe .= $stg_obj->kuerzel_arr[$row->studiengang_kz].'-'.$row_grp->semester.$row_grp->verband.$row_grp->gruppe.'
    '; } - echo ''; - echo ''; + } + $lvtable .= ''; + $lvtable .= ''; + $lvtable .= ''; + $lvtable .= ''; + $lvtable .= ''; + if (getSprache() == 'German') + { + $lvtable .= ''; + } + else + { + $lvtable .= ''; + } + $lvtable .= ''; + + $lvangebot->getAllFromLvId($row->lehrveranstaltung_id, $row->studiensemester_kurzbz); + if (!empty($lvangebot->result)) + { + $lvtable .= ''; + $lvtable .= ''; + } + else + { + $lvtable .= ' + '; + } + + $lvtable .= ''; + $summe_std += $row->semesterstunden; + } + $lvtable .= ''; + $lvtable .= ''; + $lvtable .= ''; + if (!defined('CIS_LVALISTE_NOTENEINGABE_ANZEIGEN') || CIS_LVALISTE_NOTENEINGABE_ANZEIGEN) + $lvtable .= ''; + if ($lvinfo) + $lvtable .= ''; + + $lvtable .= ''; + $lvtable .= ''; + $lvtable .= ''; + $lvtable .= ''; + $lvtable .= ''; + $lvtable .= ''; + $lvtable .= ''; + $lvtable .= ''; + $lvtable .= ''; + $lvtable .= ''; + $lvtable .= ''; + $lvtable .= ''; + if (getSprache() == 'German') + { + $lvtable .= ''; + } + else + { + $lvtable .= ''; + } + $lvtable .= ''; + $lvtable .= ''; + $lvtable .= ''; + $lvtable .= '
    '.$p->t('lvaliste/studiengang').''.$p->t('lvaliste/semester').''.$p->t('lvaliste/stunden').''.$p->t('lvaliste/lvBezeichnung').''.$p->t('lvaliste/student').''.$p->t('lvaliste/betreuungsart').''.$p->t('lvaliste/titelProjektarbeit').'
    '.$stg_obj->kuerzel_arr[$row->studiengang_kz].''.$row->semester.''.number_format($row->stunden,2,$dec_point =",", $thousands_sep ="."). '
    '.$p->t('lvaliste/gesamtnote').''.$p->t('lvaliste/lvinfo').''.$row->lehreinheit_id.''.$row->lehrfach.''.$row->le_lehrform_kurzbz.''.$row->lv_bezeichnung.' ('.$p->t('lvaliste/lehrfach').': '.$row->lehrfach_bez.')'.$row->lv_bezeichnung.''.$row->lektor.''.$row->stg_kurzbz.''.$row->semester.''.number_format($row->stunden,2,$dec_point =".", $thousands_sep =","). ''.$row->bezeichnung.''.$row->student.''.$row->beutreuerart_beschreibung.''.$row->titel.'
    '.$gruppe.''.$row->raumtyp.''.$row->raumtypalternativ.''.$row->stundenblockung.''.$row->wochenrythmus.''.number_format($row->semesterstunden,2,$dec_point=",",$thousands_sep=".").''.number_format($row->semesterstunden,2,$dec_point=".",$thousands_sep=",").''.$row->start_kw.''.$datum->formatDatum($lvangebot->result[0]->anmeldefenster_start, "d.m.Y").''.$datum->formatDatum($lvangebot->result[0]->anmeldefenster_ende, "d.m.Y").'  
                 '.$p->t('lvaliste/summe').''.number_format($summe_std, 2, $dec_point = ",", $thousands_sep = ".").''.number_format($summe_std, 2, $dec_point = ".", $thousands_sep = ",").' 
    '; + + if($anzahl_lvs > 0) + { + echo '

    '.$p->t('lvaliste/lehrveranstaltungen').'

    '; + echo $p->t('lvaliste/anzahl').': '.$anzahl_lvs; + echo $lvtable; + } + else + { + echo $p->t('lvaliste/keineDatensaetze').'
    '; + } +} +else + echo $p->t('lvaliste/keineDatensaetze').'
    '; + +//Betreuungen +$mitarbeiter = new benutzer(); +$mitarbeiter->load($uid); + +$qry = "SELECT + tbl_lehrveranstaltung.bezeichnung, tbl_projektarbeit.titel, + (SELECT nachname || ' ' || vorname FROM public.tbl_benutzer JOIN public.tbl_person USING(person_id) + WHERE uid=student_uid) as student, tbl_lehrveranstaltung.studiengang_kz, tbl_lehrveranstaltung.semester, + tbl_studiengang.email, tbl_betreuerart.beschreibung AS beutreuerart_beschreibung, tbl_projektbetreuer.stunden + FROM + lehre.tbl_lehreinheit, lehre.tbl_lehrveranstaltung, lehre.tbl_projektarbeit, lehre.tbl_projektbetreuer, public.tbl_studiengang, lehre.tbl_betreuerart + WHERE + tbl_lehreinheit.lehreinheit_id=tbl_projektarbeit.lehreinheit_id AND + tbl_lehreinheit.lehrveranstaltung_id=tbl_lehrveranstaltung.lehrveranstaltung_id AND + tbl_lehreinheit.studiensemester_kurzbz=".$db->db_add_param($stdsem)." AND + tbl_projektarbeit.projektarbeit_id=tbl_projektbetreuer.projektarbeit_id AND + tbl_lehrveranstaltung.studiengang_kz=tbl_studiengang.studiengang_kz AND + tbl_projektbetreuer.betreuerart_kurzbz=tbl_betreuerart.betreuerart_kurzbz AND + tbl_projektbetreuer.person_id=".$db->db_add_param($mitarbeiter->person_id, FHC_INTEGER); + +$stg_obj = new studiengang(); +$stg_obj->getAll(null,null); +$summe_std = 0; + +if ($result = $db->db_query($qry)) +{ + if ($db->db_num_rows($result) > 0) + { + echo '
    '; + echo '

    '.$p->t('lvaliste/betreuungen').'

    '; + echo $p->t('lvaliste/anzahl').': '.$db->db_num_rows($result); + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + while ($row = $db->db_fetch_object($result)) + { echo ''; - if(!defined('CIS_LVALISTE_NOTENEINGABE_ANZEIGEN') || CIS_LVALISTE_NOTENEINGABE_ANZEIGEN) + echo ''; + echo ''; + if (getSprache() == 'German') { - echo ''; - } - if($lvinfo) - - echo ''; - - if(getSprache()=='German') - { - echo ''; + echo ''; } else { - echo ''; + echo ''; } + echo ''; + echo ''; + echo ''; + echo ''; - - echo ''; - - echo ''; - - echo '
    '.$p->t('lvaliste/studiengang').''.$p->t('lvaliste/semester').''.$p->t('lvaliste/stunden').''.$p->t('lvaliste/lvBezeichnung').''.$p->t('lvaliste/student').''.$p->t('lvaliste/betreuungsart').''.$p->t('lvaliste/titelProjektarbeit').'
    '.$stg_obj->kuerzel_arr[$row->studiengang_kz].''.$row->semester.' '.$p->t('lvaliste/summe').''.number_format($summe_std,2,$dec_point=",",$thousands_sep=".").''.number_format($row->stunden,2,$dec_point =",", $thousands_sep ="."). ''.number_format($summe_std,2,$dec_point=".",$thousands_sep=",").''.number_format($row->stunden,2,$dec_point =".", $thousands_sep =","). ''.$row->bezeichnung.''.$row->student.''.$row->beutreuerart_beschreibung.''.$row->titel.' 
    '; + $summe_std += $row->stunden; } - } - - - //Koordination - - $qry = "SELECT - distinct - tbl_lehrveranstaltung.studiengang_kz, tbl_fachbereich.fachbereich_kurzbz, tbl_lehrveranstaltung.bezeichnung, - tbl_lehrveranstaltung.lehrveranstaltung_id, tbl_lehrveranstaltung.semester,tbl_lehrveranstaltung.koordinator, - tbl_studiengang.email - FROM - lehre.tbl_lehrveranstaltung, - lehre.tbl_lehreinheit, - lehre.tbl_lehrveranstaltung as lehrfach, - public.tbl_studiengang, - public.tbl_fachbereich - WHERE - tbl_lehrveranstaltung.lehrveranstaltung_id=tbl_lehreinheit.lehrveranstaltung_id AND - tbl_lehreinheit.lehrfach_id = lehrfach.lehrveranstaltung_id AND - tbl_fachbereich.oe_kurzbz=lehrfach.oe_kurzbz AND - tbl_lehreinheit.studiensemester_kurzbz=".$db->db_add_param($stdsem)." AND - (tbl_lehrveranstaltung.koordinator=".$db->db_add_param($uid)." - OR - ( tbl_lehrveranstaltung.koordinator is null and (tbl_lehrveranstaltung.studiengang_kz, fachbereich_kurzbz) IN (SELECT studiengang_kz, fachbereich_kurzbz - FROM public.tbl_benutzerfunktion JOIN public.tbl_studiengang USING(oe_kurzbz) - WHERE funktion_kurzbz='fbk' AND uid=".$db->db_add_param($uid)." - and ( tbl_benutzerfunktion.datum_bis is null or now() between tbl_benutzerfunktion.datum_von and tbl_benutzerfunktion.datum_bis ) - )) - ) AND - tbl_lehrveranstaltung.studiengang_kz=tbl_studiengang.studiengang_kz - order by tbl_lehrveranstaltung.studiengang_kz,tbl_lehrveranstaltung.semester ,tbl_lehrveranstaltung.bezeichnung - "; - - - if($result = $db->db_query($qry)) - { - if($db->db_num_rows($result)>0) + echo ''; + echo ''; + echo ''; + if (!defined('CIS_LVALISTE_NOTENEINGABE_ANZEIGEN') || CIS_LVALISTE_NOTENEINGABE_ANZEIGEN) { - echo '

    '.$p->t('lvaliste/koordination').'

    '; - echo $p->t('lvaliste/anzahl').': '.$db->db_num_rows($result); - echo ''; - echo ''; - echo ''; - echo ''; - echo ''; - echo ''; - echo ''; - echo ''; - while($row = $db->db_fetch_object($result)) - { - //Fachbereichskoordinatoren holen - $qry = "SELECT distinct - uid,titelpre, titelpost, vorname, nachname - FROM - lehre.tbl_lehreinheitmitarbeiter, - public.tbl_benutzer, - public.tbl_person, - lehre.tbl_lehreinheit - WHERE - tbl_lehreinheitmitarbeiter.lehreinheit_id=tbl_lehreinheit.lehreinheit_id AND - tbl_lehreinheit.lehrveranstaltung_id=".$db->db_add_param($row->lehrveranstaltung_id, FHC_INTEGER)." AND - tbl_lehreinheitmitarbeiter.mitarbeiter_uid=tbl_benutzer.uid AND - tbl_benutzer.person_id=tbl_person.person_id AND - tbl_lehreinheit.studiensemester_kurzbz=".$db->db_add_param($stdsem); - $lektoren=''; - if($result_lkt = $db->db_query($qry)) - { - while($row_lkt = $db->db_fetch_object($result_lkt)) - { - if($lektoren!='') - $lektoren.=','; - $lektoren.=trim($row_lkt->titelpre.' '.$row_lkt->vorname.' '.$row_lkt->nachname.' '.$row_lkt->titelpost); - } - } - - echo ''; - echo ''; - echo ''; - echo ''; - echo ''; - echo ''; - echo ''; - echo ''; - } - echo '
    '.$p->t('lvaliste/studiengang').''.$p->t('lvaliste/semester').''.$p->t('lvaliste/institut').''.$p->t('lvaliste/lvBezeichnung').''.$p->t('lvaliste/lektor').'
    '.$stg_obj->kuerzel_arr[$row->studiengang_kz].''.$row->semester.''.$row->stunden.''.$row->fachbereich_kurzbz.''.$row->bezeichnung.''.$lektoren.'
    '; + echo ' '; } + if ($lvinfo) + + echo ''.$p->t('lvaliste/summe').''; + + if (getSprache() == 'German') + { + echo ''.number_format($summe_std, 2, $dec_point = ",", $thousands_sep = ".").''; + } + else + { + echo ''.number_format($summe_std, 2, $dec_point = ".", $thousands_sep = ",").''; + } + + echo ' '; + echo ''; + echo ''; } +} + +//Koordination +$qry = "SELECT + distinct + tbl_lehrveranstaltung.studiengang_kz, tbl_fachbereich.fachbereich_kurzbz, tbl_lehrveranstaltung.bezeichnung, + tbl_lehrveranstaltung.lehrveranstaltung_id, tbl_lehrveranstaltung.semester,tbl_lehrveranstaltung.koordinator, + tbl_studiengang.email + FROM + lehre.tbl_lehrveranstaltung, + lehre.tbl_lehreinheit, + lehre.tbl_lehrveranstaltung as lehrfach, + public.tbl_studiengang, + public.tbl_fachbereich + WHERE + tbl_lehrveranstaltung.lehrveranstaltung_id=tbl_lehreinheit.lehrveranstaltung_id AND + tbl_lehreinheit.lehrfach_id = lehrfach.lehrveranstaltung_id AND + tbl_fachbereich.oe_kurzbz=lehrfach.oe_kurzbz AND + tbl_lehreinheit.studiensemester_kurzbz=".$db->db_add_param($stdsem)." AND + ( + tbl_lehrveranstaltung.koordinator=".$db->db_add_param($uid)." + OR + ( tbl_lehrveranstaltung.koordinator is null + AND (tbl_lehrveranstaltung.studiengang_kz, fachbereich_kurzbz) IN ( + SELECT studiengang_kz, fachbereich_kurzbz + FROM public.tbl_benutzerfunktion JOIN public.tbl_studiengang USING(oe_kurzbz) + WHERE funktion_kurzbz='fbk' AND uid=".$db->db_add_param($uid)." + AND ( + tbl_benutzerfunktion.datum_bis is null + OR now() between tbl_benutzerfunktion.datum_von and tbl_benutzerfunktion.datum_bis ) + ) + ) + ) + AND tbl_lehrveranstaltung.studiengang_kz=tbl_studiengang.studiengang_kz + ORDER BY + tbl_lehrveranstaltung.studiengang_kz, + tbl_lehrveranstaltung.semester, + tbl_lehrveranstaltung.bezeichnung + "; + + +if ($result = $db->db_query($qry)) +{ + if ($db->db_num_rows($result) > 0) + { + echo '

    '.$p->t('lvaliste/koordination').'

    '; + echo $p->t('lvaliste/anzahl').': '.$db->db_num_rows($result); + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + while ($row = $db->db_fetch_object($result)) + { + //Fachbereichskoordinatoren holen + $qry = "SELECT distinct + uid,titelpre, titelpost, vorname, nachname + FROM + lehre.tbl_lehreinheitmitarbeiter, + public.tbl_benutzer, + public.tbl_person, + lehre.tbl_lehreinheit + WHERE + tbl_lehreinheitmitarbeiter.lehreinheit_id=tbl_lehreinheit.lehreinheit_id AND + tbl_lehreinheit.lehrveranstaltung_id=".$db->db_add_param($row->lehrveranstaltung_id, FHC_INTEGER)." AND + tbl_lehreinheitmitarbeiter.mitarbeiter_uid=tbl_benutzer.uid AND + tbl_benutzer.person_id=tbl_person.person_id AND + tbl_lehreinheit.studiensemester_kurzbz=".$db->db_add_param($stdsem); + $lektoren=''; + if($result_lkt = $db->db_query($qry)) + { + while($row_lkt = $db->db_fetch_object($result_lkt)) + { + if($lektoren!='') + $lektoren.=','; + $lektoren.=trim($row_lkt->titelpre.' '.$row_lkt->vorname.' '.$row_lkt->nachname.' '.$row_lkt->titelpost); + } + } + + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + } + echo '
    '.$p->t('lvaliste/studiengang').''.$p->t('lvaliste/semester').''.$p->t('lvaliste/institut').''.$p->t('lvaliste/lvBezeichnung').''.$p->t('lvaliste/lektor').'
    '.$stg_obj->kuerzel_arr[$row->studiengang_kz].''.$row->semester.''.$row->stunden.''.$row->fachbereich_kurzbz.''.$row->bezeichnung.''.$lektoren.'
    '; + } +} echo '
    '.$p->t('lvaliste/fehlerAnStudiengang').'


    '; ?> From 96fff5b7590cb33994ac73909dc9112bfcb032c6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andreas=20=C3=96sterreicher?= Date: Fri, 20 Mar 2020 15:40:59 +0100 Subject: [PATCH 36/40] BACodes an neue BIS Codes angepasst --- content/lvplanung/lehrveranstaltungDBDML.php | 2 +- vilesci/lehre/lehreinheiten_vorrueckung.php | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/content/lvplanung/lehrveranstaltungDBDML.php b/content/lvplanung/lehrveranstaltungDBDML.php index 5972c4b4f..acab0c6ad 100644 --- a/content/lvplanung/lehrveranstaltungDBDML.php +++ b/content/lvplanung/lehrveranstaltungDBDML.php @@ -1425,7 +1425,7 @@ if(!$error) { // Bei echten Dienstvertraegen mit voller inkludierter Lehre wird kein Stundensatz // geliefert da dies im Vertrag inkludiert ist. - if ($row_verwendung->ba1code == 3 && $row_verwendung->inkludierte_lehre == -1) + if ($row_verwendung->ba1code == 103 && $row_verwendung->inkludierte_lehre == -1) { $data = ''; break; diff --git a/vilesci/lehre/lehreinheiten_vorrueckung.php b/vilesci/lehre/lehreinheiten_vorrueckung.php index 31a51c003..7d48c4778 100644 --- a/vilesci/lehre/lehreinheiten_vorrueckung.php +++ b/vilesci/lehre/lehreinheiten_vorrueckung.php @@ -350,7 +350,7 @@ if ($studiengang_kz != '' && $stsem_von != '' && $stsem_nach != '') { // Bei echten Dienstvertraegen mit voller inkludierter Lehre wird kein Stundensatz // geliefert da dies im Vertrag inkludiert ist. - if ($row_verwendung->ba1code == 3 && $row_verwendung->inkludierte_lehre == -1) + if ($row_verwendung->ba1code == 103 && $row_verwendung->inkludierte_lehre == -1) { $lem_obj->stundensatz = ''; break; From 70bfb1fd3abde590334525f64112fecd4098f550 Mon Sep 17 00:00:00 2001 From: Cris Date: Mon, 23 Mar 2020 13:54:35 +0100 Subject: [PATCH 37/40] Changed error message for Vertragsstorno Changed error message for better understanding of the issue. --- content/lvplanung/lehrveranstaltungDBDML.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/lvplanung/lehrveranstaltungDBDML.php b/content/lvplanung/lehrveranstaltungDBDML.php index 5e4a3ba61..7d7d45fea 100644 --- a/content/lvplanung/lehrveranstaltungDBDML.php +++ b/content/lvplanung/lehrveranstaltungDBDML.php @@ -1814,7 +1814,7 @@ if(!$error) } else { - $errormsg = 'VertragsID und MitarbeiterUID müssen uebergeben werden'; + $errormsg = 'Sie haben keine Berechtigung für diese Aktion.'; $return = false; } } From 0ba7d3fc9473f34bd0b42d5e89bae74d704410ed Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andreas=20=C3=96sterreicher?= Date: Wed, 25 Mar 2020 14:58:21 +0100 Subject: [PATCH 38/40] Profil zeigt Infotext an wenn der Notfallkontakt fehlt --- cis/private/profile/index.php | 6 ++++++ locale/de-AT/profil.php | 2 ++ locale/en-US/profil.php | 2 ++ 3 files changed, 10 insertions(+) diff --git a/cis/private/profile/index.php b/cis/private/profile/index.php index 17593ec15..3117aec55 100644 --- a/cis/private/profile/index.php +++ b/cis/private/profile/index.php @@ -427,6 +427,7 @@ if (!$ansicht) usort($kontakt->result, "sortKontakt"); echo ''; + $has_notfallkontakt = false; foreach($kontakt->result as $k) { if ($k->kontakttyp != 'firmenhandy' && $k->kontakttyp != 'hidden') @@ -441,6 +442,8 @@ if (!$ansicht) echo ''; echo ''; echo ''; + if ($k->kontakttyp == 'notfallkontakt') + $has_notfallkontakt = true; } /* if ($k->zustellung === TRUE) @@ -462,6 +465,9 @@ if (!$ansicht) } */ } + if (!$has_notfallkontakt) + echo ''; + echo '
    '.$k->anmerkung.''.$zustellung.'
    '.$p->t('profil/notfallkontakt').''.$p->t('profil/notfallkontaktBekanntgeben').'
    '; } diff --git a/locale/de-AT/profil.php b/locale/de-AT/profil.php index 074379601..b8dcadcdd 100644 --- a/locale/de-AT/profil.php +++ b/locale/de-AT/profil.php @@ -84,4 +84,6 @@ $this->phrasen['profil/gueltigbis']='Gültig bis'; $this->phrasen['profil/wochenstunden']='Wochenstunden'; $this->phrasen['profil/vertragsstunden']='Vertragsstunden'; $this->phrasen['profil/zukuenftigeFunktionen']='Zukünftige Funktionen'; +$this->phrasen['profil/notfallkontakt']='Notfallkontakt'; +$this->phrasen['profil/notfallkontaktBekanntgeben']='Bitte geben Sie einen Notfallkontakt bekannt!'; ?> diff --git a/locale/en-US/profil.php b/locale/en-US/profil.php index 660936381..e94f180cd 100644 --- a/locale/en-US/profil.php +++ b/locale/en-US/profil.php @@ -82,4 +82,6 @@ $this->phrasen['profil/gueltigbis']='Valid to'; $this->phrasen['profil/wochenstunden']='week hours'; $this->phrasen['profil/vertragsstunden']='contract hours'; $this->phrasen['profil/zukuenftigeFunktionen']='Future functions'; +$this->phrasen['profil/notfallkontakt']='Emergency contact'; +$this->phrasen['profil/notfallkontaktBekanntgeben']='Please provide an emergency contact!'; ?> From 2d1baebf1f148ecf92e2780d487eaa7856cac02b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andreas=20=C3=96sterreicher?= Date: Wed, 25 Mar 2020 15:31:24 +0100 Subject: [PATCH 39/40] BACode korrigiert --- content/lvplanung/lehrveranstaltungDBDML.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/lvplanung/lehrveranstaltungDBDML.php b/content/lvplanung/lehrveranstaltungDBDML.php index acab0c6ad..709b3f2c8 100644 --- a/content/lvplanung/lehrveranstaltungDBDML.php +++ b/content/lvplanung/lehrveranstaltungDBDML.php @@ -528,7 +528,7 @@ if(!$error) { // Bei echten Dienstvertraegen mit voller inkludierter Lehre wird kein Stundensatz // geliefert da dies im Vertrag inkludiert ist. - if ($row_verwendung->ba1code == 3 && $row_verwendung->inkludierte_lehre == -1) + if ($row_verwendung->ba1code == 103 && $row_verwendung->inkludierte_lehre == -1) { $fixangestellt = true; $lem->stundensatz = ''; From 384a086188a607ef7e483b5b8f531107fe43aa17 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andreas=20=C3=96sterreicher?= Date: Wed, 25 Mar 2020 15:58:02 +0100 Subject: [PATCH 40/40] =?UTF-8?q?Gegencheck=20f=C3=BCr=20bezeichnung=5Fmeh?= =?UTF-8?q?rsprachig=20in=20tbl=5Fstudiengangstyp=20hinzugef=C3=BCgt=20Pr?= =?UTF-8?q?=C3=BCfung=20fuer=20Spaltenexistenz=20korrigert?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- system/dbupdate_3.3.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/system/dbupdate_3.3.php b/system/dbupdate_3.3.php index 115e70fb3..82488dc96 100644 --- a/system/dbupdate_3.3.php +++ b/system/dbupdate_3.3.php @@ -3843,7 +3843,7 @@ if ($result = $db->db_query("SELECT 1 FROM pg_class WHERE relname = 'unq_idx_abl } // Spalte bezeichnung_mehrsprachig in public.tbl_studiengangstyp -if(!$result = @$db->db_query("SELECT bzeichnung_mehrsprachig FROM public.tbl_studiengangstyp LIMIT 1")) +if(!$result = @$db->db_query("SELECT bezeichnung_mehrsprachig FROM public.tbl_studiengangstyp LIMIT 1")) { $qry = "ALTER TABLE public.tbl_studiengangstyp ADD COLUMN bezeichnung_mehrsprachig varchar(255)[];"; @@ -4097,7 +4097,7 @@ $tabellen=array( "public.tbl_student" => array("student_uid","matrikelnr","prestudent_id","studiengang_kz","semester","verband","gruppe","updateamum","updatevon","insertamum","insertvon","ext_id"), "public.tbl_studentlehrverband" => array("student_uid","studiensemester_kurzbz","studiengang_kz","semester","verband","gruppe","updateamum","updatevon","insertamum","insertvon","ext_id"), "public.tbl_studiengang" => array("studiengang_kz","kurzbz","kurzbzlang","typ","bezeichnung","english","farbe","email","telefon","max_semester","max_verband","max_gruppe","erhalter_kz","bescheid","bescheidbgbl1","bescheidbgbl2","bescheidgz","bescheidvom","orgform_kurzbz","titelbescheidvom","aktiv","ext_id","zusatzinfo_html","moodle","sprache","testtool_sprachwahl","studienplaetze","oe_kurzbz","lgartcode","mischform","projektarbeit_note_anzeige", "onlinebewerbung"), - "public.tbl_studiengangstyp" => array("typ","bezeichnung","beschreibung"), + "public.tbl_studiengangstyp" => array("typ","bezeichnung","beschreibung","bezeichnung_mehrsprachig"), "public.tbl_studienjahr" => array("studienjahr_kurzbz","bezeichnung"), "public.tbl_studiensemester" => array("studiensemester_kurzbz","bezeichnung","start","ende","studienjahr_kurzbz","ext_id","beschreibung","onlinebewerbung"), "public.tbl_tag" => array("tag"),