mirror of
https://github.com/FH-Complete/FHC-Core.git
synced 2026-06-05 14:19:27 +00:00
Personalmeldung: Plausibilitätsprüfungen erweitert
Rundungsfehler behoben bei sehr kleinen SWS wodurch keine Lehre Funktion erstellt wurde
This commit is contained in:
@@ -507,8 +507,8 @@ class lehreinheitmitarbeiter extends basis_db
|
||||
public function getLehreinheiten_SWS_BISMeldung($uid, $studiensemester)
|
||||
{
|
||||
$qry = '
|
||||
SELECT
|
||||
round(sum(semesterstunden) / 15) AS sws
|
||||
SELECT
|
||||
round(sum(semesterstunden) / 15, 2) AS sws
|
||||
FROM (
|
||||
SELECT DISTINCT lehreinheit_id, studiensemester_kurzbz, mitarbeiter_uid, semesterstunden
|
||||
FROM lehre.tbl_lehreinheitmitarbeiter lema
|
||||
@@ -565,8 +565,8 @@ class lehreinheitmitarbeiter extends basis_db
|
||||
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
|
||||
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
|
||||
|
||||
@@ -103,7 +103,7 @@ $stsem_obj = new studiensemester();
|
||||
$lastss = $stsem_obj->getPrevious();
|
||||
$lastws = $stsem_obj->getBeforePrevious();
|
||||
|
||||
//1 - aktive mitarbeiter und bismelden mit keiner verwendung oder mehr als einer aktuellen verwendung
|
||||
//**** aktive mitarbeiter und bismelden mit keiner verwendung
|
||||
$qryall='
|
||||
SELECT
|
||||
uid, nachname, vorname, count(bisverwendung_id)
|
||||
@@ -116,13 +116,14 @@ $qryall='
|
||||
AND (ende>now() OR ende IS NULL)
|
||||
GROUP BY
|
||||
uid, nachname, vorname
|
||||
HAVING count(bisverwendung_id)!=1
|
||||
HAVING count(bisverwendung_id)=0
|
||||
ORDER by nachname, vorname;';
|
||||
if($resultall = $db->db_query($qryall))
|
||||
{
|
||||
$num_rows_all=$db->db_num_rows($resultall);
|
||||
echo "<H2>Bei $num_rows_all aktiven Mitarbeitern sind die aktuellen Verwendungen nicht plausibel</H2>";
|
||||
echo "Es ist keine oder es sind mehrere aktive Verwendungen vorhanden.<br>";
|
||||
echo "<H2>Bei $num_rows_all aktiven Mitarbeitern sind die keine aktuellen Verwendungen vorhanden</H2>";
|
||||
echo "Es ist keine aktiven Verwendungen vorhanden. (unabhängig vom Meldezeitraum)<br>";
|
||||
|
||||
while($rowall=$db->db_fetch_object($resultall))
|
||||
{
|
||||
$i=0;
|
||||
@@ -141,6 +142,55 @@ if($resultall = $db->db_query($qryall))
|
||||
AND mitarbeiter_uid=".$db->db_add_param($rowall->uid)."
|
||||
ORDER BY beginn";
|
||||
|
||||
if ($result = $db->db_query($qry))
|
||||
{
|
||||
echo "<br><u>Aktive(r) Mitarbeiter(in): <b>".$rowall->nachname." ".$rowall->vorname."</b>
|
||||
hat keine aktuelle Verwendung</u><br>";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//**** 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 "<H2>Bei $num_rows_all aktiven Mitarbeitern sind überlappende Verwendungen im Meldezeitraum vorhanden</H2>";
|
||||
|
||||
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);
|
||||
@@ -153,7 +203,7 @@ if($resultall = $db->db_query($qryall))
|
||||
echo "
|
||||
<br>
|
||||
<u>Aktive(r) Mitarbeiter(in) <b>".$row->nachname." ".$row->vorname."</b>".
|
||||
" hat ".$num_rows." aktuelle Verwendungen (möglicherweise korrekt):
|
||||
" hat überlappende Verwendungen im Meldezeitraum:
|
||||
</u>
|
||||
<br>";
|
||||
$i++;
|
||||
@@ -166,12 +216,12 @@ if($resultall = $db->db_query($qryall))
|
||||
}
|
||||
}
|
||||
elseif ($num_rows == 0)
|
||||
echo "<br><u>Aktive(r) Mitarbeiter(in): <b>".$rowall->nachname." ".$rowall->vorname."</b>
|
||||
hat ".$num_rows." aktuelle Verwendungen:</u><br>";
|
||||
echo "<br><u>ELSE ZWeig: ".$rowall->uid."</u><br>";
|
||||
}
|
||||
}
|
||||
}
|
||||
//2 - aktive fixe mitarbeiter mit keiner aktuellen verwendung
|
||||
|
||||
//**** aktive fixe mitarbeiter mit keiner aktuellen verwendung
|
||||
$qryall = '
|
||||
SELECT
|
||||
uid, nachname, vorname, count(bisverwendung_id)
|
||||
@@ -232,7 +282,7 @@ if ($resultall = $db->db_query($qryall))
|
||||
}
|
||||
}
|
||||
|
||||
//3 - nicht aktive mitarbeiter mitarbeiter mit aktueller verwendung
|
||||
//**** nicht aktive mitarbeiter mit aktueller verwendung
|
||||
$qryall = '
|
||||
SELECT
|
||||
uid, nachname, vorname
|
||||
@@ -250,6 +300,8 @@ if ($resultall = $db->db_query($qryall))
|
||||
{
|
||||
$num_rows_all=$db->db_num_rows($resultall);
|
||||
echo "<br><br><H2>Bei $num_rows_all nicht aktiven Mitarbeitern sind die aktuellen Verwendungen nicht plausibel (inaktiv aber aktuelle Verwendung)</H2>";
|
||||
echo "Diese Personen werden trotzdem gemeldet!";
|
||||
|
||||
while ($rowall = $db->db_fetch_object($resultall))
|
||||
{
|
||||
$i = 0;
|
||||
@@ -287,7 +339,7 @@ if ($resultall = $db->db_query($qryall))
|
||||
}
|
||||
}
|
||||
}
|
||||
//4 - wenn hauptberufcode gesetzt ist, muss die Verwendung 1 sein
|
||||
//**** - wenn hauptberufcode gesetzt ist, muss die Verwendung 1 sein
|
||||
$qryall = "
|
||||
SELECT
|
||||
uid, nachname, vorname
|
||||
@@ -342,71 +394,8 @@ if($resultall = $db->db_query($qryall))
|
||||
}
|
||||
}
|
||||
}
|
||||
//5 - stimmt beschausmasscode mit vertragsstunden überein?
|
||||
/* Beschaeftigungsausmass nicht mehr relevant
|
||||
$qryall="
|
||||
SELECT
|
||||
uid, nachname, vorname
|
||||
FROM
|
||||
campus.vw_mitarbeiter
|
||||
JOIN bis.tbl_bisverwendung ON (uid=mitarbeiter_uid)
|
||||
WHERE
|
||||
(beschausmasscode='1' AND vertragsstunden<='35')
|
||||
OR (beschausmasscode='2' AND vertragsstunden>'15')
|
||||
OR (beschausmasscode='3' AND vertragsstunden<'16')
|
||||
OR (beschausmasscode='3' AND vertragsstunden>'25')
|
||||
OR (beschausmasscode='4' AND vertragsstunden<'26')
|
||||
OR (beschausmasscode='4' AND vertragsstunden>'35')
|
||||
OR (beschausmasscode='5' AND vertragsstunden>'0')
|
||||
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 "<br><br><H2>Bei $num_rows_all Mitarbeitern ist das Beschäftigungsausmaß nicht plausibel</H2>";
|
||||
echo "Vertragsstunden passen nicht mit Beschäftigungsausmass überein<br><br>";
|
||||
while($rowall=$db->db_fetch_object($resultall))
|
||||
{
|
||||
$i=0;
|
||||
$qry="
|
||||
SELECT
|
||||
*
|
||||
FROM
|
||||
bis.tbl_bisverwendung
|
||||
WHERE
|
||||
((beschausmasscode='1' AND vertragsstunden<'38.5')
|
||||
OR (beschausmasscode='2' AND vertragsstunden>'15')
|
||||
OR (beschausmasscode='3' AND vertragsstunden<'16')
|
||||
OR (beschausmasscode='3' AND vertragsstunden>'25')
|
||||
OR (beschausmasscode='4' AND vertragsstunden<'26')
|
||||
OR (beschausmasscode='4' AND vertragsstunden>'35')
|
||||
OR (beschausmasscode='5' AND vertragsstunden>'0'))
|
||||
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 "<br><u>Mitarbeiter(in) ".$rowall->nachname." ".$rowall->vorname.":</u><br>";
|
||||
$i++;
|
||||
}
|
||||
echo $ausmass_arr[$row->beschausmasscode].
|
||||
", Vertragsstunden ".$row->vertragsstunden.
|
||||
", ".$verwendung_arr[$row->verwendung_code].
|
||||
", ".$ba1_arr[$row->ba1code].
|
||||
", ".$ba2_arr[$row->ba2code].
|
||||
", ".$row->beginn." - ".$row->ende."<br>";
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
*/
|
||||
//6 - aktive, freie lektoren auf verwendung 1 oder 2 prüfen
|
||||
//**** aktive, freie lektoren auf verwendung 1 oder 2 prüfen
|
||||
$qryall="
|
||||
SELECT
|
||||
uid, nachname, vorname
|
||||
@@ -421,6 +410,7 @@ $qryall="
|
||||
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);
|
||||
@@ -459,7 +449,7 @@ if($resultall = $db->db_query($qryall))
|
||||
}
|
||||
}
|
||||
|
||||
// Echter Dienstvertrag ohne Vertragsstunden
|
||||
//**** Echter Dienstvertrag ohne Vertragsstunden
|
||||
$qryall="
|
||||
SELECT
|
||||
distinct mitarbeiter_uid as uid, vorname, nachname
|
||||
@@ -473,6 +463,7 @@ $qryall="
|
||||
and (ende is null or ende>=".$db->db_add_param($bismeldedatum_start).")
|
||||
and ba1code=103
|
||||
and vertragsstunden is null
|
||||
and beschausmasscode!=5
|
||||
ORDER by nachname, vorname, mitarbeiter_uid;";
|
||||
if($resultall = $db->db_query($qryall))
|
||||
{
|
||||
@@ -487,7 +478,7 @@ if($resultall = $db->db_query($qryall))
|
||||
}
|
||||
}
|
||||
|
||||
//7 - Lehrauftrag aber keine aktuelle Verwendung
|
||||
//**** - Lehrauftrag aber keine aktuelle Verwendung
|
||||
$i=0;
|
||||
$qryall="
|
||||
SELECT
|
||||
@@ -543,7 +534,7 @@ if($resultall = $db->db_query($qryall))
|
||||
}
|
||||
}
|
||||
}
|
||||
//8 - Verwendung Habil. und Entwicklungsteam Habil.=1
|
||||
//**** - Verwendung Habil. und Entwicklungsteam Habil.=1
|
||||
$i=0;
|
||||
$qryall="
|
||||
SELECT
|
||||
@@ -591,7 +582,7 @@ if($resultall = $db->db_query($qryall))
|
||||
}
|
||||
}
|
||||
|
||||
//9 - inaktive mitarbeiter und bismelden ohne verwendung
|
||||
//**** inaktive mitarbeiter und bismelden ohne verwendung
|
||||
$qryall='
|
||||
SELECT
|
||||
uid, nachname, vorname, count(bisverwendung_id)
|
||||
|
||||
@@ -257,19 +257,20 @@ foreach ($mitarbeiter_arr as $mitarbeiter)
|
||||
foreach ($verwendung_tmp_arr as $verwendung_tmp)
|
||||
{
|
||||
|
||||
// Jahresvollzeitaequivalenz JVZAE ermitteln
|
||||
// ---------------------------------------------------------------------------------------------------------
|
||||
// Jahresvollzeitaequivalenz JVZAE ermitteln
|
||||
// -----------------------------------------------------------------------------------------------------
|
||||
/**
|
||||
* Berechnung:
|
||||
* JVZAE wird aus der Summe aller anteiligen JVZE gebildet.
|
||||
*/
|
||||
$verwendung_obj->jvzae += (isset($verwendung_tmp->jvzae_anteilig))
|
||||
? number_format($verwendung_tmp->jvzae_anteilig * 100, 2)
|
||||
: NULL; // TODO: not null...
|
||||
if (isset($verwendung_tmp->jvzae_anteilig))
|
||||
{
|
||||
$verwendung_obj->jvzae += number_format($verwendung_tmp->jvzae_anteilig * 100, 2);
|
||||
}
|
||||
|
||||
|
||||
// Vollzeitaequivalenz VZAE ermitteln (Beschaeftigungsausmass zum Stichtag 31.12)
|
||||
// ---------------------------------------------------------------------------------------------------------
|
||||
// Vollzeitaequivalenz VZAE ermitteln (Beschaeftigungsausmass zum Stichtag 31.12)
|
||||
// -----------------------------------------------------------------------------------------------------
|
||||
/**
|
||||
* Berechnung:
|
||||
* - Wenn Karenz zum Stichtag 31.12. vorhanden: VZAE = 0.00
|
||||
@@ -287,7 +288,10 @@ foreach ($mitarbeiter_arr as $mitarbeiter)
|
||||
}
|
||||
else
|
||||
{
|
||||
$verwendung_obj->vzae = (isset($verwendung_tmp->beschaeftigungsausmass_relativ)) ? $verwendung_tmp->beschaeftigungsausmass_relativ * 100 : NULL; // TODO: not null...
|
||||
if (isset($verwendung_tmp->beschaeftigungsausmass_relativ))
|
||||
{
|
||||
$verwendung_obj->vzae = $verwendung_tmp->beschaeftigungsausmass_relativ * 100;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1247,8 +1251,10 @@ function outputPlausibilitaetschecks($person_arr)
|
||||
|
||||
if (isset($row->verwendung_arr) && is_array($row->verwendung_arr) && count($row->verwendung_arr) > 0)
|
||||
{
|
||||
$jvzaesumme = 0;
|
||||
foreach ($row->verwendung_arr as $verwendung)
|
||||
{
|
||||
$jvzaesumme += $verwendung->jvzae;
|
||||
if($verwendung->vzae < -1)
|
||||
{
|
||||
$msg[] = 'VZAE ist zu klein -> Vertragsstunden prüfen';
|
||||
@@ -1267,6 +1273,10 @@ function outputPlausibilitaetschecks($person_arr)
|
||||
$msg[] = 'JVZAE ist zu gross -> Vertragsstunden prüfen';
|
||||
}
|
||||
}
|
||||
if($jvzaesumme>125)
|
||||
{
|
||||
$msg[] = 'JVZAE Summe ist zu gross';
|
||||
}
|
||||
}
|
||||
|
||||
if (isset($row->lehre_arr) && is_array($row->lehre_arr) && count($row->lehre_arr) > 0)
|
||||
|
||||
Reference in New Issue
Block a user