Personalmeldung: Plausibilitätsprüfungen erweitert

Rundungsfehler behoben bei sehr kleinen SWS wodurch keine Lehre Funktion erstellt wurde
This commit is contained in:
Andreas Österreicher
2020-05-25 19:21:25 +02:00
parent 08b0a7bf08
commit ad42aece5a
3 changed files with 91 additions and 90 deletions
+4 -4
View File
@@ -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
+69 -78
View File
@@ -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&ouml;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)
+18 -8
View File
@@ -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)