Stundengrenze für Fixe und Externe Lektoren wird jetzt ueber den OE-Baum verwaltet.

Es können unterschiedliche Grenzen für Abteilungen festgelegt werden.
Die Lehrauftragsliste kann jetzt getrennt für einzelen Organisationseinheiten-Bäume erstellt werden
This commit is contained in:
oesi
2015-06-09 08:12:17 +02:00
parent 525bd30b61
commit a923efdbd5
6 changed files with 264 additions and 63 deletions
+67 -36
View File
@@ -136,26 +136,27 @@ function LehrauftragAufFirma($mitarbeiter_uid)
* @param $studiensemester_kurzbz
* @return string
*/
function getStundenproInstitut($mitarbeiter_uid, $studiensemester_kurzbz)
function getStundenproInstitut($mitarbeiter_uid, $studiensemester_kurzbz, $oe_arr)
{
global $db;
$ret="Der Lektor ist in folgenden Organisationseinheiten zugeteilt:\n";
//Liste mit den Stunden in den jeweiligen Instituten anzeigen
$qry = "SELECT sum(tbl_lehreinheitmitarbeiter.semesterstunden) as summe, tbl_organisationseinheit.bezeichnung
$qry = "SELECT sum(tbl_lehreinheitmitarbeiter.semesterstunden) as summe, tbl_studiengang.bezeichnung
FROM
lehre.tbl_lehreinheitmitarbeiter
JOIN lehre.tbl_lehreinheit USING(lehreinheit_id)
JOIN lehre.tbl_lehrveranstaltung as lehrfach ON(lehrfach_id=lehrfach.lehrveranstaltung_id)
JOIN public.tbl_organisationseinheit USING(oe_kurzbz)
JOIN lehre.tbl_lehrveranstaltung USING(lehrveranstaltung_id)
JOIN public.tbl_studiengang USING(studiengang_kz)
WHERE
mitarbeiter_uid=".$db->db_add_param($mitarbeiter_uid)." AND
studiensemester_kurzbz=".$db->db_add_param($studiensemester_kurzbz)." AND
faktor>0 AND
stundensatz>0 AND
bismelden
GROUP BY tbl_organisationseinheit.bezeichnung";
bismelden AND
tbl_studiengang.oe_kurzbz in(".$db->db_implode4SQL($oe_arr).")
GROUP BY tbl_studiengang.bezeichnung";
if($result = $db->db_query($qry))
{
@@ -180,17 +181,19 @@ if(!$error)
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($result = $db->db_query($qry))
{
if($row = $db->db_fetch_object($result))
{
$lva = new lehrveranstaltung($row->lehrveranstaltung_id);
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))
$oe_arr = $lva->getAllOe();
if(!$rechte->isBerechtigtMultipleOe('admin', $oe_arr, 'suid') &&
!$rechte->isBerechtigtMultipleOe('assistenz', $oe_arr, 'suid') &&
!$rechte->isBerechtigtMultipleOe('lv-plan', $oe_arr, 'suid') &&
!$rechte->isBerechtigtMultipleOe('assistenz', $oe_arr, 'suid', $row->fachbereich_kurzbz) &&
!$rechte->isBerechtigtMultipleOe('admin', $oe_arr, 'suid', $row->fachbereich_kurzbz))
{
$error = true;
$return = false;
@@ -280,14 +283,18 @@ if(!$error)
$ma = new mitarbeiter();
$ma->load($lem->mitarbeiter_uid);
$fixangestellt=$ma->fixangestellt;
$oe_obj = new organisationseinheit();
$stunden_oe_kurzbz=null;
$stg_obj = new studiengang();
$stg_obj->load($lva->studiengang_kz);
//Maximale Stundenanzahl ermitteln
if($fixangestellt)
$max_stunden = WARN_SEMESTERSTD_FIX;
list($stunden_oe_kurzbz, $max_stunden) = $oe_obj->getStundengrenze($stg_obj->oe_kurzbz, true);
else
{
$max_stunden = WARN_SEMESTERSTD_FREI;
}
list($stunden_oe_kurzbz, $max_stunden) = $oe_obj->getStundengrenze($stg_obj->oe_kurzbz, false);
//Summe der Stunden ermitteln
$le = new lehreinheit();
@@ -306,23 +313,31 @@ if(!$error)
//Stundenreduzierung immer moeglich
if(($lem->semesterstunden>$semesterstunden_alt) || $neue_stunden_eingerechnet)
{
$oe_obj = new organisationseinheit();
$oe_arr = $oe_obj->getChilds($stunden_oe_kurzbz);
$qry = "SELECT ";
if($alte_stunden_eingerechnet && $neue_stunden_eingerechnet)
$qry.=" (sum(semesterstunden)-($semesterstunden_alt)+($lem->semesterstunden)) as summe";
$qry.=" (sum(tbl_lehreinheitmitarbeiter.semesterstunden)-($semesterstunden_alt)+($lem->semesterstunden)) as summe";
elseif($alte_stunden_eingerechnet && !$neue_stunden_eingerechnet)
$qry.=" (sum(semesterstunden)-($semesterstunden_alt)) as summe";
$qry.=" (sum(tbl_lehreinheitmitarbeiter.semesterstunden)-($semesterstunden_alt)) as summe";
elseif(!$alte_stunden_eingerechnet && $neue_stunden_eingerechnet)
$qry.=" (sum(semesterstunden)+($lem->semesterstunden)) as summe";
$qry.=" (sum(tbl_lehreinheitmitarbeiter.semesterstunden)+($lem->semesterstunden)) as summe";
elseif(!$alte_stunden_eingerechnet && !$neue_stunden_eingerechnet)
$qry.=" (sum(semesterstunden)) as summe";
$qry.=" (sum(tbl_lehreinheitmitarbeiter.semesterstunden)) as summe";
$qry.=" FROM
lehre.tbl_lehreinheitmitarbeiter JOIN lehre.tbl_lehreinheit USING(lehreinheit_id)
lehre.tbl_lehreinheitmitarbeiter
JOIN lehre.tbl_lehreinheit USING(lehreinheit_id)
JOIN lehre.tbl_lehrveranstaltung USING(lehrveranstaltung_id)
JOIN public.tbl_studiengang USING(studiengang_kz)
WHERE
mitarbeiter_uid=".$db->db_add_param($lem->mitarbeiter_uid)." AND
studiensemester_kurzbz=".$db->db_add_param($le->studiensemester_kurzbz)." AND
faktor>0 AND
stundensatz>0 AND
bismelden";
if(count($oe_arr)>0)
$qry.=" AND tbl_studiengang.oe_kurzbz in(".$db->db_implode4SQL($oe_arr).")";
if($db->db_query($qry))
{
@@ -337,7 +352,7 @@ if(!$error)
//Warnung wenn die Stundenzahl ueberschritten wurde
$return = false;
$error = true;
$errormsg = "ACHTUNG: Die maximal erlaubte Semesterstundenanzahl des Lektors von $max_stunden Stunden wurde ueberschritten!\n Daten wurden NICHT gespeichert!\n\n";
$errormsg = "ACHTUNG: Die maximal erlaubte Semesterstundenanzahl des Lektors von $max_stunden Stunden ($stunden_oe_kurzbz) wurde ueberschritten!\n Daten wurden NICHT gespeichert!\n\n";
}
}
else
@@ -345,10 +360,10 @@ if(!$error)
$return = true;
$error = false;
$warnung = true;
$errormsg = "Hinweis: Die maximal erlaubte Semesterstundenanzahl des Lektors von $max_stunden Stunden wurde ueberschritten!\n Daten wurden gespeichert!\n\n";
$errormsg = "Hinweis: Die maximal erlaubte Semesterstundenanzahl des Lektors von $max_stunden Stunden ($stunden_oe_kurzbz) wurde ueberschritten!\n Daten wurden gespeichert!\n\n";
}
$errormsg.=getStundenproInstitut($lem->mitarbeiter_uid, $le->studiensemester_kurzbz);
$errormsg.=getStundenproInstitut($lem->mitarbeiter_uid, $le->studiensemester_kurzbz, $oe_arr);
}
}
else
@@ -480,46 +495,62 @@ if(!$error)
}
$maxstunden=9999;
$oe_obj = new organisationseinheit();
$stunden_oe_kurzbz=null;
$stg_obj = new studiengang();
$stg_obj->load($lva->studiengang_kz);
//Maximale Stundenanzahl ermitteln
if($fixangestellt)
$max_stunden = WARN_SEMESTERSTD_FIX;
list($stunden_oe_kurzbz, $max_stunden) = $oe_obj->getStundengrenze($stg_obj->oe_kurzbz, true);
else
{
$max_stunden = WARN_SEMESTERSTD_FREI;
}
list($stunden_oe_kurzbz, $max_stunden) = $oe_obj->getStundengrenze($stg_obj->oe_kurzbz, false);
//Bei freien Lektoren muss geprueft werden ob die Stundengrenze erreicht wurde
if(!$fixangestellt && !LehrauftragAufFirma($lem->mitarbeiter_uid))
{
//Summe der Stunden ermitteln
$le = new lehreinheit();
$le->load($lem->lehreinheit_id);
$oe_obj = new organisationseinheit();
$oe_arr = $oe_obj->getChilds($stunden_oe_kurzbz);
$qry = "SELECT
sum(semesterstunden) as summe
sum(tbl_lehreinheitmitarbeiter.semesterstunden) as summe
FROM
lehre.tbl_lehreinheitmitarbeiter JOIN lehre.tbl_lehreinheit USING(lehreinheit_id)
lehre.tbl_lehreinheitmitarbeiter
JOIN lehre.tbl_lehreinheit USING(lehreinheit_id)
JOIN lehre.tbl_lehrveranstaltung USING(lehrveranstaltung_id)
JOIN public.tbl_studiengang USING(studiengang_kz)
WHERE
mitarbeiter_uid=".$db->db_add_param($lem->mitarbeiter_uid)." AND
studiensemester_kurzbz=".$db->db_add_param($le->studiensemester_kurzbz)." AND
faktor>0 AND
stundensatz>0 AND
bismelden";
if(count($oe_arr)>0)
$qry.=" AND tbl_studiengang.oe_kurzbz in(".$db->db_implode4SQL($oe_arr).")";
if($result_std = $db->db_query($qry))
{
if($row_std = $db->db_fetch_object($result_std))
{
//Grenze ueberschritten
if($row_std->summe>=WARN_SEMESTERSTD_FREI)
if($row_std->summe>=$max_stunden)
{
$return = false;
$error = true;
$errormsg = "ACHTUNG: Die maximal erlaubte Semesterstundenanzahl des Lektors von $max_stunden Stunden wurde ueberschritten!\n Daten wurden NICHT gespeichert!\n\n";
$errormsg.=getStundenproInstitut($lem->mitarbeiter_uid, $le->studiensemester_kurzbz);
$errormsg = "ACHTUNG: Die maximal erlaubte Semesterstundenanzahl des Lektors von $max_stunden Stunden ($stunden_oe_kurzbz) wurde ueberschritten!\n Daten wurden NICHT gespeichert!\n\n";
$errormsg.=getStundenproInstitut($lem->mitarbeiter_uid, $le->studiensemester_kurzbz,$oe_arr);
}
else
{
//Stunden berechnen die noch maximal unterrichtet werden darf
$maxstunden = WARN_SEMESTERSTD_FREI-$row_std->summe;
$maxstunden = $max_stunden-$row_std->summe;
}
}
}
@@ -43,7 +43,25 @@ if(isset($_GET['stsem']))
else
$semester_aktuell = $stsem->getaktorNext();
//UID als Kommandozeilenparameter
if(isset($_SERVER['argv']) && isset($_SERVER['argv'][1]) && !strstr($_SERVER['argv'][1],'='))
{
$oe_kurzbz = $_SERVER['argv'][1];
}
else
{
if(isset($_GET['oe_kurzbz']))
$oe_kurzbz = $_GET['oe_kurzbz'];
else
{
$stg = new studiengang();
$stg->load('0');
$oe_kurzbz = $stg->oe_kurzbz;
}
}
$file = 'lehrauftragsliste.xls';
$file = tempnam('/tmp','lehrauftragsliste_').'.xls';
// Creating a workbook
echo 'Lehrauftragslisten werden erstellt. Bitte warten!<BR>';
@@ -51,6 +69,17 @@ flush();
$workbook = new Spreadsheet_Excel_Writer($file);
$workbook->setVersion(8);
$db = new basis_db();
$stg = new studiengang();
$stg->getStudiengaengeFromOe($oe_kurzbz);
$stg_arr=array();
if(count($stg->result)>0)
{
foreach($stg->result as $row)
{
$stg_arr[] = $row->studiengang_kz;
}
}
//Studiengaenge ermitteln bei denen sich die lektorzuordnung innerhalb der letzten 31 Tage geaendert haben
$qry_stg = "SELECT distinct studiengang_kz
FROM (
@@ -77,13 +106,37 @@ $qry_stg = "SELECT distinct studiengang_kz
tbl_lehreinheit.lehrveranstaltung_id = tbl_lehrveranstaltung.lehrveranstaltung_id
) as foo
";
if(count($stg_arr)>0)
$qry_stg.=" WHERE studiengang_kz in (".$db->db_implode4SQL($stg_arr).")";
$liste_gesamt = array();
$gesamt =& $workbook->addWorksheet('Gesamt');
$gesamt->setInputEncoding('utf-8');
$gesamtsheet_row=1;
//Formate Definieren
$format_bold =& $workbook->addFormat();
$format_bold->setBold();
$workbook->setCustomColor(10, 255, 186, 179);
$format_colored =& $workbook->addFormat();
$format_colored->setFgColor(10);
$format_number_colored =& $workbook->addFormat();
$format_number_colored->setNumFormat('0,0.00');
//$format_number_colored->setNumFormat('0.00');
$format_number_colored->setFgColor(10);
$format_number =& $workbook->addFormat();
$format_number->setNumFormat('0,0.00');
$format_number_bold =& $workbook->addFormat();
$format_number_bold->setNumFormat('0,0.00');
//$format_number_bold->setNumFormat('0.00');
$format_number_bold->setBold();
$format_normal = & $workbook->addFormat();
if($result_stg = $db->db_query($qry_stg))
{
while($row_stg = $db->db_fetch_object($result_stg))
@@ -96,28 +149,6 @@ if($result_stg = $db->db_query($qry_stg))
$worksheet =& $workbook->addWorksheet($studiengang->kuerzel);
$worksheet->setInputEncoding('utf-8');
//echo "Writing $studiengang->kuerzel ...".microtime()."<br>";
//Formate Definieren
$format_bold =& $workbook->addFormat();
$format_bold->setBold();
$workbook->setCustomColor(10, 255, 186, 179);
$format_colored =& $workbook->addFormat();
$format_colored->setFgColor(10);
$format_number_colored =& $workbook->addFormat();
$format_number_colored->setNumFormat('0,0.00');
//$format_number_colored->setNumFormat('0.00');
$format_number_colored->setFgColor(10);
$format_number =& $workbook->addFormat();
$format_number->setNumFormat('0,0.00');
$format_number_bold =& $workbook->addFormat();
$format_number_bold->setNumFormat('0,0.00');
//$format_number_bold->setNumFormat('0.00');
$format_number_bold->setBold();
$format_normal = & $workbook->addFormat();
$i=0;
$gesamtsheet_row++;
@@ -449,9 +480,15 @@ if($result_stg = $db->db_query($qry_stg))
public.tbl_person JOIN lehre.tbl_projektbetreuer USING (person_id)
JOIN lehre.tbl_projektarbeit USING (projektarbeit_id)
JOIN lehre.tbl_lehreinheit USING (lehreinheit_id)
JOIN lehre.tbl_lehrveranstaltung USING(lehrveranstaltung_id)
WHERE
studiensemester_kurzbz=".$db->db_add_param($semester_aktuell)." AND
stunden>0
stunden>0";
if(count($stg_arr)>0)
$qry.=" AND tbl_lehrveranstaltung.studiengang_kz IN(".$db->db_implode4SQL($stg_arr).")";
$qry.="
GROUP BY
studiensemester_kurzbz,person_id,nachname,vorname, titelpre
ORDER BY
@@ -469,6 +506,8 @@ if($result_stg = $db->db_query($qry_stg))
$worksheet->write(2,++$i,"Stunden", $format_bold);
$worksheet->write(2,++$i,"Kosten", $format_bold);
$format = $format_normal;
$formatnb = $format_number;
if($result = $db->db_query($qry))
{
$zeile=3;
@@ -503,11 +542,15 @@ if($result_stg = $db->db_query($qry_stg))
$fileatttype = "application/xls";
$fileattname = "lehrauftragsliste_".date('Y_m_d').".xls";
$mail = new mail(MAIL_GST, 'noreply@'.DOMAIN, $subject, $message);
$empfaenger = MAIL_GST;
if($oe_kurzbz=='lehrgang')
$empfaenger = MAIL_LG;
$mail = new mail($empfaenger, 'noreply@'.DOMAIN, $subject, $message);
$mail->addAttachmentBinary($file, $fileatttype, $fileattname);
if($mail->send())
echo 'Email mit Lehrauftragslisten wurde an '.MAIL_GST.' versandt!';
echo 'Email mit Lehrauftragslisten wurde an '.$empfaenger.' versandt!';
else
echo "Fehler beim Versenden der Lehrauftragsliste";
}