* Andreas Oesterreicher < andreas.oesterreicher@technikum-wien.at > * Rudolf Hangl < rudolf.hangl@technikum-wien.at > * Gerald Simane-Sequens < gerald.simane-sequens@technikum-wien.at > */ /** * Überprüfung der Verwendungsdatensaetze im FASonline * */ require_once('../../config/vilesci.config.inc.php'); require_once('../../include/functions.inc.php'); require_once('../../include/benutzerberechtigung.class.php'); require_once('../../include/basis_db.class.php'); require_once('../../include/studiensemester.class.php'); if (!$db = new basis_db()) die('Es konnte keine Verbindung zum Server aufgebaut werden.'); $uid = get_uid(); $rechte = new benutzerberechtigung(); $rechte->getBerechtigungen($uid); if(!$rechte->isBerechtigt('mitarbeiter/stammdaten', null,'suid')) die('Sie haben keine Berechtigung für diese Seite'); $error_log = ''; $fehler = 0; $text = ''; $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"; if($result = $db->db_query($qry)) while($row = $db->db_fetch_object($result)) $ba1_arr[$row->ba1code]=$row->ba1kurzbz; $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; $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; $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; ?> BIS-Meldung - Überprüfung von Verwendungen

BIS-Verwendungen werden überprüft


db_query($qry)) { while($row = $db->db_fetch_object($result)) { $beginn[$row->studiensemester_kurzbz]=$row->start; $ende[$row->studiensemester_kurzbz]=$row->ende; } } $stsem_obj = new studiensemester(); $lastss = $stsem_obj->getPrevious(); $lastws = $stsem_obj->getBeforePrevious(); //**** aktive mitarbeiter und bismelden mit keiner verwendung $qryall=' SELECT uid, nachname, vorname, count(bisverwendung_id) FROM campus.vw_mitarbeiter LEFT OUTER JOIN bis.tbl_bisverwendung ON (uid=mitarbeiter_uid) WHERE aktiv AND bismelden AND (ende>now() OR ende IS NULL) GROUP BY uid, nachname, vorname HAVING count(bisverwendung_id)=0 ORDER by nachname, vorname;'; if($resultall = $db->db_query($qryall)) { $num_rows_all=$db->db_num_rows($resultall); echo "

Bei $num_rows_all aktiven Mitarbeitern sind die keine aktuellen Verwendungen vorhanden

"; echo "Es ist keine aktiven Verwendungen vorhanden. (unabhängig vom Meldezeitraum)
"; while($rowall=$db->db_fetch_object($resultall)) { $i=0; $qry=" SELECT * FROM bis.tbl_bisverwendung JOIN public.tbl_benutzer ON(mitarbeiter_uid=uid) JOIN public.tbl_person USING(person_id) JOIN public.tbl_mitarbeiter USING(mitarbeiter_uid) WHERE tbl_benutzer.aktiv=TRUE AND bismelden=TRUE AND (ende>now() OR ende IS NULL) AND mitarbeiter_uid=".$db->db_add_param($rowall->uid)." ORDER BY beginn"; if ($result = $db->db_query($qry)) { echo "
Aktive(r) Mitarbeiter(in): ".$rowall->nachname." ".$rowall->vorname." hat keine aktuelle Verwendung
"; } } } //**** mehrere aktive Verwendungen im Meldezeitraum $qryall=" SELECT a.mitarbeiter_uid as uid FROM bis.tbl_bisverwendung a, bis.tbl_bisverwendung b WHERE a.mitarbeiter_uid = b.mitarbeiter_uid AND (a.ende>='$bismeldedatum_start' or a.ende is null) AND (a.beginn<'$bismeldedatum_ende' or a.beginn is null) AND a.bisverwendung_id <> b.bisverwendung_id AND (b.ende>='$bismeldedatum_start' or b.ende is null) AND (b.beginn<'$bismeldedatum_ende' or b.beginn is null) AND a.ende >= b.beginn AND a.beginn < b.beginn ORDER BY a.mitarbeiter_uid "; if($resultall = $db->db_query($qryall)) { $num_rows_all=$db->db_num_rows($resultall); echo "

Bei $num_rows_all aktiven Mitarbeitern sind überlappende Verwendungen im Meldezeitraum vorhanden

"; while($rowall=$db->db_fetch_object($resultall)) { $i=0; $qry=" SELECT * FROM bis.tbl_bisverwendung JOIN public.tbl_benutzer ON(mitarbeiter_uid=uid) JOIN public.tbl_person USING(person_id) JOIN public.tbl_mitarbeiter USING(mitarbeiter_uid) WHERE tbl_mitarbeiter.bismelden=TRUE AND (tbl_bisverwendung.ende>='$bismeldedatum_start' or tbl_bisverwendung.ende is null) AND (tbl_bisverwendung.beginn<'$bismeldedatum_ende' or tbl_bisverwendung.beginn is null) AND mitarbeiter_uid=".$db->db_add_param($rowall->uid)." ORDER BY beginn"; if ($result = $db->db_query($qry)) { $num_rows = $db->db_num_rows($result); if ($num_rows > 1) { while ($row = $db->db_fetch_object($result)) { if ($i == 0) { echo "
Aktive(r) Mitarbeiter(in) ".$row->nachname." ".$row->vorname."". " hat überlappende Verwendungen im Meldezeitraum:
"; $i++; } echo $verwendung_arr[$row->verwendung_code].", ". $ba1_arr[$row->ba1code].", ". $ba2_arr[$row->ba2code].", ". $ausmass_arr[$row->beschausmasscode].", ". $row->beginn." - ".$row->ende."
"; } } elseif ($num_rows == 0) echo "
ELSE ZWeig: ".$rowall->uid."
"; } } } //**** aktive fixe mitarbeiter mit keiner aktuellen verwendung $qryall = ' SELECT uid, nachname, vorname, count(bisverwendung_id) FROM campus.vw_mitarbeiter LEFT OUTER JOIN bis.tbl_bisverwendung ON (uid=mitarbeiter_uid) WHERE aktiv AND fixangestellt AND NOT ende>now() AND NOT ende IS NULL AND uid NOT IN ( SELECT uid FROM campus.vw_mitarbeiter LEFT OUTER JOIN bis.tbl_bisverwendung ON (uid=mitarbeiter_uid) WHERE aktiv AND fixangestellt AND (ende>now() OR ende IS NULL) ) GROUP BY uid, nachname, vorname ORDER by nachname, vorname;'; if ($resultall = $db->db_query($qryall)) { $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)) { $i = 0; $qry = " SELECT * FROM bis.tbl_bisverwendung JOIN public.tbl_benutzer ON(mitarbeiter_uid=uid) JOIN public.tbl_person USING(person_id) WHERE tbl_benutzer.aktiv=TRUE AND mitarbeiter_uid=".$db->db_add_param($rowall->uid)." ORDER by beginn"; if ($result = $db->db_query($qry)) { $num_rows=$db->db_num_rows($result); while ($row=$db->db_fetch_object($result)) { if ($i == 0) { echo "
Aktive(r) Mitarbeiter(in) ".$rowall->nachname." ".$rowall->vorname." hat keine aktuellen Verwendungen:
"; $i++; } echo $verwendung_arr[$row->verwendung_code].", ". $ba1_arr[$row->ba1code].", ". $ba2_arr[$row->ba2code].", ". $ausmass_arr[$row->beschausmasscode].", ". $row->beginn." - ".$row->ende."
"; } } } } //**** nicht aktive mitarbeiter mit aktueller verwendung $qryall = ' SELECT uid, nachname, vorname FROM campus.vw_mitarbeiter JOIN bis.tbl_bisverwendung ON (uid=mitarbeiter_uid) WHERE aktiv=false and bismelden=true AND (ende>now() OR ende IS NULL) GROUP BY uid, nachname, vorname ORDER by nachname, vorname;'; 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)

"; echo "Diese Personen werden trotzdem gemeldet!"; while ($rowall = $db->db_fetch_object($resultall)) { $i = 0; $qry = " SELECT * FROM bis.tbl_bisverwendung WHERE (ende>now() OR ende IS NULL) AND mitarbeiter_uid=".$db->db_add_param($rowall->uid)." ORDER BY beginn"; if ($result = $db->db_query($qry)) { $num_rows = $db->db_num_rows($result); while ($row = $db->db_fetch_object($result)) { if ($i == 0) { echo "
Nicht aktive(r) Mitarbeiter(in) ".$rowall->nachname." ".$rowall->vorname." hat ".$num_rows." aktuelle Verwendungen:
"; $i++; } echo $verwendung_arr[$row->verwendung_code].", ". $ba1_arr[$row->ba1code].", ". $ba2_arr[$row->ba2code].", ". $ausmass_arr[$row->beschausmasscode].", ". $row->beginn." - ".$row->ende."
"; } } } } //**** - 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') 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;"; 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]; while($rowall=$db->db_fetch_object($resultall)) { $i=0; $qry=" SELECT * FROM bis.tbl_bisverwendung WHERE 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)) { $num_rows=$db->db_num_rows($result); while($row=$db->db_fetch_object($result)) { if($i==0) { echo "
Mitarbeiter(in) ".$rowall->nachname." ".$rowall->vorname.":
"; $i++; } echo $verwendung_arr[$row->verwendung_code].", hauptberuflich ".($row->hauptberuflich=='t'?'ja':'nein').", ". $ba1_arr[$row->ba1code].", ". $ba2_arr[$row->ba2code].", ". $ausmass_arr[$row->beschausmasscode].", ". $row->beginn." - ".$row->ende."
"; } } } } //**** aktive, freie lektoren auf verwendung 1 oder 2 prüfen $qryall=" SELECT uid, nachname, vorname FROM campus.vw_mitarbeiter JOIN bis.tbl_bisverwendung ON (uid=mitarbeiter_uid) WHERE aktiv AND lektor AND fixangestellt=false AND verwendung_code NOT IN ('1','2') AND (ende>now() OR ende IS NULL) GROUP BY uid, nachname, vorname ORDER by nachname, vorname, uid;"; if($resultall = $db->db_query($qryall)) { $num_rows_all=$db->db_num_rows($resultall); echo "

Bei $num_rows_all aktiven, freien Lektoren ist die Verwendung nicht plausibel

"; echo "Verwendung darf nur '".$verwendung_arr[1]."' oder '".$verwendung_arr[2]."' sein.

"; while($rowall=$db->db_fetch_object($resultall)) { $i=0; $qry=" SELECT * FROM bis.tbl_bisverwendung WHERE verwendung_code NOT IN ('1','2') AND mitarbeiter_uid=".$db->db_add_param($rowall->uid)." ORDER BY beginn"; if($result = $db->db_query($qry)) { $num_rows=$db->db_num_rows($result); while($row=$db->db_fetch_object($result)) { if($i==0) { echo "
Mitarbeiter(in) ".$rowall->nachname." ".$rowall->vorname.":
"; $i++; } echo $verwendung_arr[$row->verwendung_code].", ". $ba1_arr[$row->ba1code].", ". $ba2_arr[$row->ba2code].", ". $row->beginn." - ".$row->ende."
"; } } } } //**** Echter Dienstvertrag ohne Vertragsstunden $arrayEchterDV= array(103, 110); if (defined('DEFAULT_ECHTER_DIENSTVERTRAG') && DEFAULT_ECHTER_DIENSTVERTRAG != '') { $arrayEchterDV = DEFAULT_ECHTER_DIENSTVERTRAG; } $str_ba1codein = trim(array_reduce($arrayEchterDV, function($c, $i) { global $db; return $c .= $db->db_add_param($i, FHC_INTEGER) . ','; }), ','); $qryall=" SELECT distinct mitarbeiter_uid as uid, vorname, nachname FROM bis.tbl_bisverwendung JOIN public.tbl_mitarbeiter using(mitarbeiter_uid) JOIN public.tbl_benutzer on(uid=mitarbeiter_uid) JOIN public.tbl_person using(person_id) WHERE (beginn is null or beginn<".$db->db_add_param($bismeldedatum_ende).") and (ende is null or ende>=".$db->db_add_param($bismeldedatum_start).") and ba1code IN (" . $str_ba1codein . ") and vertragsstunden is null and beschausmasscode!=5 ORDER by nachname, vorname, mitarbeiter_uid;"; if($resultall = $db->db_query($qryall)) { $num_rows_all=$db->db_num_rows($resultall); echo "

Bei $num_rows_all Mitarbeitern mit echtem Dienstvertrag fehlen die Vertragsstunden

"; echo "Bei der BIS-Verwendung müssen bei echtem Dienstvertrag Vertragsstunden eingetragen sein damit die JVZÄ korrekt berechnet werden.

"; while($rowall=$db->db_fetch_object($resultall)) { echo "
Mitarbeiter(in) ".$rowall->nachname." ".$rowall->vorname.":
"; } } //**** - Lehrauftrag aber keine aktuelle Verwendung $i=0; $qryall=" SELECT DISTINCT lehre.tbl_lehreinheitmitarbeiter.mitarbeiter_uid, nachname, vorname FROM lehre.tbl_lehreinheitmitarbeiter JOIN lehre.tbl_lehreinheit USING (lehreinheit_id) JOIN lehre.tbl_lehrveranstaltung USING(lehrveranstaltung_id) JOIN campus.vw_mitarbeiter ON (tbl_lehreinheitmitarbeiter.mitarbeiter_uid=uid) WHERE ( lehre.tbl_lehreinheit.studiensemester_kurzbz=".$db->db_add_param($lastss)." OR lehre.tbl_lehreinheit.studiensemester_kurzbz=".$db->db_add_param($lastws)." ) AND tbl_lehreinheitmitarbeiter.stundensatz!=0 AND tbl_lehreinheitmitarbeiter.semesterstunden!=0 AND NOT EXISTS ( SELECT * FROM bis.tbl_bisverwendung WHERE ( beginn<".$db->db_add_param($ende[$lastss])." AND (ende>".$db->db_add_param($beginn[$lastws])." OR ende is null) ) AND mitarbeiter_uid=tbl_lehreinheitmitarbeiter.mitarbeiter_uid ) ORDER BY nachname,vorname;"; if($resultall = $db->db_query($qryall)) { $num_rows_all=$db->db_num_rows($resultall); echo "

Bei $num_rows_all Lektoren mit Lehrauftrag sind die Verwendungen nicht plausibel (Lehrauftrag aber keine aktuelle Verwendung)

"; while($rowall=$db->db_fetch_object($resultall)) { $i++; echo "
Mitarbeiter(in) ".$rowall->nachname." ".$rowall->vorname.":
"; $qry=" SELECT * FROM bis.tbl_bisverwendung WHERE mitarbeiter_uid=".$db->db_add_param($rowall->mitarbeiter_uid)." ORDER BY beginn;"; if($result = $db->db_query($qry)) { while($row=$db->db_fetch_object($result)) { echo $verwendung_arr[$row->verwendung_code].", ". $ba1_arr[$row->ba1code].", ". $ba2_arr[$row->ba2code].", ". $row->beginn." - ".$row->ende."
"; } } } } //**** - Verwendung Habil. und Entwicklungsteam Habil.=1 $i=0; $qryall=" SELECT DISTINCT mitarbeiter_uid, nachname, vorname FROM bis.tbl_entwicklungsteam JOIN bis.tbl_bisverwendung USING (mitarbeiter_uid) JOIN campus.vw_mitarbeiter ON (tbl_entwicklungsteam.mitarbeiter_uid=uid) WHERE ((besqualcode!=1 AND habilitation) OR (besqualcode=1 AND habilitation=false)) ORDER BY mitarbeiter_uid;"; if($resultall = $db->db_query($qryall)) { $num_rows_all=$db->db_num_rows($resultall); echo "

Bei $num_rows_all Lektoren sind die Angaben über Habilitationen nicht plausibel

"; echo "Wenn Besondere Qualifikation beim Entwicklungsteam gleich Habilitation ist dann muss bei der Verwendung auch eine Habilitation eingetragen sein."; while($rowall=$db->db_fetch_object($resultall)) { $i++; echo "
Mitarbeiter(in) ".$rowall->nachname." ".$rowall->vorname.":
"; $qry=" SELECT mitarbeiter_uid, nachname, vorname, besqualbez, habilitation, studiengang_kz, verwendung_code, tbl_bisverwendung.beginn as anfang, tbl_bisverwendung.ende as zuende FROM bis.tbl_entwicklungsteam join bis.tbl_bisverwendung USING (mitarbeiter_uid) JOIN campus.vw_mitarbeiter ON (tbl_entwicklungsteam.mitarbeiter_uid=uid) JOIN bis.tbl_besqual USING(besqualcode) WHERE ((besqualcode!=1 AND habilitation) OR (besqualcode=1 AND habilitation=false)) AND mitarbeiter_uid=".$db->db_add_param($rowall->mitarbeiter_uid)." ORDER BY tbl_bisverwendung.beginn"; if($result = $db->db_query($qry)) { while($row=$db->db_fetch_object($result)) { echo $verwendung_arr[$row->verwendung_code].", ". $row->anfang." - ".$row->zuende.", Habilitation ".($row->habilitation=='t'?'ja':'nein'). " <-> Entwicklungsteam-bes.Qualifikation:(Stg. ".$row->studiengang_kz.") '".$row->besqualbez."'.
"; } } } } //**** inaktive mitarbeiter und bismelden ohne verwendung $qryall=' SELECT uid, nachname, vorname, count(bisverwendung_id) FROM campus.vw_mitarbeiter LEFT OUTER JOIN bis.tbl_bisverwendung ON (uid=mitarbeiter_uid) WHERE bismelden GROUP BY uid, nachname, vorname HAVING count(bisverwendung_id)=0 ORDER by nachname, vorname;'; if($resultall = $db->db_query($qryall)) { $num_rows_all=$db->db_num_rows($resultall); echo "

Bei $num_rows_all Mitarbeitern sind keine Verwendungen vorhanden - diese werden nicht BIS gemeldet

"; while($rowall=$db->db_fetch_object($resultall)) { echo '
'.$rowall->nachname.' '.$rowall->vorname."($rowall->uid)"; } } ?>