diff --git a/include/lehreinheitmitarbeiter.class.php b/include/lehreinheitmitarbeiter.class.php
index 6be66bb77..80cdd0c8b 100644
--- a/include/lehreinheitmitarbeiter.class.php
+++ b/include/lehreinheitmitarbeiter.class.php
@@ -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
diff --git a/vilesci/bis/checkverwendung.php b/vilesci/bis/checkverwendung.php
index c92204e31..9c474ee50 100644
--- a/vilesci/bis/checkverwendung.php
+++ b/vilesci/bis/checkverwendung.php
@@ -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 "
Bei $num_rows_all aktiven Mitarbeitern sind die aktuellen Verwendungen nicht plausibel
";
- echo "Es ist keine oder es sind mehrere aktive Verwendungen vorhanden.
";
+ 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;
@@ -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 "
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);
@@ -153,7 +203,7 @@ if($resultall = $db->db_query($qryall))
echo "
Aktive(r) Mitarbeiter(in) ".$row->nachname." ".$row->vorname."".
- " hat ".$num_rows." aktuelle Verwendungen (möglicherweise korrekt):
+ " hat überlappende Verwendungen im Meldezeitraum:
";
$i++;
@@ -166,12 +216,12 @@ if($resultall = $db->db_query($qryall))
}
}
elseif ($num_rows == 0)
- echo "
Aktive(r) Mitarbeiter(in): ".$rowall->nachname." ".$rowall->vorname."
- hat ".$num_rows." aktuelle Verwendungen:
";
+ echo "
ELSE ZWeig: ".$rowall->uid."
";
}
}
}
-//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 "
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;
@@ -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 "
Bei $num_rows_all Mitarbeitern ist das Beschäftigungsausmaß nicht plausibel
";
- echo "Vertragsstunden passen nicht mit Beschäftigungsausmass überein
";
- 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 "
Mitarbeiter(in) ".$rowall->nachname." ".$rowall->vorname.":
";
- $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."
";
- }
- }
- }
-}
-*/
-//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)
diff --git a/vilesci/bis/personalmeldung.php b/vilesci/bis/personalmeldung.php
index 5cc7fcf8b..d237ab5ff 100644
--- a/vilesci/bis/personalmeldung.php
+++ b/vilesci/bis/personalmeldung.php
@@ -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)