Urlaubstool

This commit is contained in:
Andreas Österreicher
2008-06-02 15:46:28 +00:00
parent f1c44435ea
commit fb5575f96b
12 changed files with 847 additions and 55 deletions
+15 -14
View File
@@ -9,8 +9,6 @@
</center>
<h2>News</h2>
<ul>
<li>Spellcheck und Formatierungen <br>
</li>
<li>News FEED um die News mit einem Newsreader lesen zu k&ouml;nnen<br>
</li>
</ul>
@@ -22,8 +20,6 @@ Lektor</li>
<li>Ma&szlig;nahme zur Weiterentwicklung</li>
<li>Leistungsbeurteilung</li>
</ul>
<li style="font-weight: bold; color: rgb(51, 255, 51);">Benotungstool
mit Kreuzerltool verschmelzen</li>
<li style="font-weight: bold; color: rgb(51, 255, 51);">Lektor kann
sich Rechnung zur LV erstellen lassen<br>
</li>
@@ -50,25 +46,15 @@ werden. Genaue Umsetzung ist noch unklar.</li>
f&uuml;r Semesterplan</li>
<li style="font-weight: bold; color: rgb(51, 255, 51);">direkte
Verlinkung zum Lehrebereich.</li>
<li style="font-weight: bold; color: rgb(51, 255, 51);">Suche nach
freien S&auml;len - Darstellung auch beim Portier</li>
<li style="font-weight: bold; color: rgb(51, 255, 51);">Ausstattung
der S&auml;le nicht sichtlich</li>
</ul>
<br>
<h2>BenotungsTool</h2>
<ul>
<li>
<h2>Kreuzerltool</h2>
</li>
</ul>
<ul>
<ul style="font-weight: bold; color: rgb(51, 255, 51);">
<li>Statistik: Berechnung aufgrund der
Gesamtgruppengr&ouml;&szlig;e,
nicht nur der beteiligten Studenten.</li>
</ul>
</ul>
<ul>
<li>
<h2>Upload</h2>
@@ -112,6 +98,21 @@ Hausordnung, Brandschutzordnung, ...), WebMail, Bibliothek</span></li>
<br>
<h2>Erledigte Anforderungen</h2>
<ul>
<li>Urlaubsverwaltung mit Best&auml;tigung des Vorgesetzen und
automatischer Berechnung der verbleibenden Urlaubstage</li>
<ul>
<li>Mai 2008 oesi<br>
</li>
</ul>
<li>Suche nach
freien S&auml;len</li>
<ul>
<li>Mai 2008 oesi<br>
</li>
</ul>
<li>Benotungstool
mit Kreuzerltool verschmelzen<br>
<span style="font-weight: bold; color: rgb(51, 255, 51);"></span></li>
<li><span style="font-weight: bold; color: rgb(51, 255, 51);">Studiengangsbestaetigung
erstellen (Ausdruck nur m&ouml;glich wenn Studienbeitrag bezahlt wurde)</span></li>
<li>eMailverteiler
+235
View File
@@ -0,0 +1,235 @@
<?php
/* Copyright (C) 2008 Technikum-Wien
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as
* published by the Free Software Foundation; either version 2 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
*
* Authors: Christian Paminger <[email protected]>,
* Andreas Oesterreicher <[email protected]>,
* Rudolf Hangl <[email protected]> and
*/
require_once('../../config.inc.php');
require_once('../../../include/functions.inc.php');
require_once('../../../include/datum.class.php');
require_once('../../../include/zeitsperre.class.php');
if(!$conn = pg_pconnect(CONN_STRING))
die('Fehler beim Connecten zur Datenbank');
$user = get_uid();
if(isset($_GET['year']) && is_numeric($_GET['year']))
$year = $_GET['year'];
else
{
//Bis August das aktuelle Jahr anzeigen
//Ab September das naechste
if(date('m')<9)
$year = date('Y');
else
$year = date('Y')+1;
}
if(isset($_GET['uid']))
$uid=$_GET['uid'];
else
$uid='';
$datum_obj = new datum();
echo '<html>
<head>
<title>Urlaubsfreigabe</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-15">
<link rel="stylesheet" href="../../../skin/style.css.php" type="text/css">
</head>
<body id="inhalt">
<table class="tabcontent" id="inhalt">
<tr>
<td class="tdwidth10">&nbsp;</td>
<td>
<table class="tabcontent">
<tr>
<td class="ContentHeader"><font class="ContentHeader">&nbsp;Urlaubsfreigabe</font></td>
</tr>
</table>
<br>
';
//Untergebene holen
$qry = "SELECT * FROM public.tbl_benutzerfunktion WHERE (funktion_kurzbz='fbl' OR funktion_kurzbz='stgl') AND uid='".addslashes($user)."'";
if($result = pg_query($conn, $qry))
{
$institut='';
$stge='';
while($row = pg_fetch_object($result))
{
if($row->funktion_kurzbz=='fbl')
{
if($institut!='')
$institut.=',';
$institut.="'".addslashes($row->fachbereich_kurzbz)."'";
}
elseif($row->funktion_kurzbz=='stgl')
{
if($stge!='')
$stge.=',';
$stge.="'".$row->studiengang_kz."'";
}
}
}
$qry = "SELECT distinct uid FROM public.tbl_benutzerfunktion WHERE funktion_kurzbz='Institut' AND (false ";
if($institut!='')
$qry.=" OR fachbereich_kurzbz in($institut)";
if($stge!='')
$qry.=" OR studiengang_kz in($stge)";
$qry.=")";
$untergebene='';
if($result = pg_query($conn, $qry))
{
while($row = pg_fetch_object($result))
{
if($untergebene!='')
$untergebene.=',';
$untergebene.="'".addslashes($row->uid)."'";
}
}
if($untergebene=='')
die('Es sind Ihnen keine Mitarbeiter zugeteilt für die sie den Urlaub freigeben dürfen');
$qry = "SELECT * FROM public.tbl_person JOIN public.tbl_benutzer USING(person_id) WHERE uid in($untergebene)";
$mitarbeiter = array();
if($result = pg_query($conn, $qry))
{
while($row = pg_fetch_object($result))
{
$mitarbeiter[$row->uid]['vorname']=$row->vorname;
$mitarbeiter[$row->uid]['nachname']=$row->nachname;
$mitarbeiter[$row->uid]['titelpre']=$row->titelpre;
$mitarbeiter[$row->uid]['titelpost']=$row->titelpost;
}
}
if($uid!='' && !isset($mitarbeiter[$uid]) && $uid!=$user)
die('Sie haben keine Berechtigung fuer diesen Mitarbeiter');
//Freigeben eines Urlaubes
if(isset($_GET['action']) && $_GET['action']=='freigabe')
{
$zeitsperre = new zeitsperre($conn);
if($zeitsperre->load($_GET['id']))
{
if(isset($mitarbeiter[$zeitsperre->mitarbeiter_uid]))
{
$zeitsperre->freigabeamum = date('Y-m-d H:i:s');
$zeitsperre->freigabevon = $user;
if(!$zeitsperre->save(false))
echo "<b>Fehler bei der Freigabe: $zeitsperre->errormsg</b>";
}
else
{
echo '<b>Sie haben keine Berechtigung den Urlaub für diesen Mitarbeiter freizugeben</b>';
}
}
else
{
echo '<b>Die Zeitsperre konnte nicht geladen werden</b>';
}
}
//Monat zeichenen
function draw_monat($monat)
{
global $untergebene, $mitarbeiter, $conn, $year, $datum_obj, $uid;
echo '<td style="border: 1px solid black; height:100px; width: 30%" valign="top">';
echo '<center><b>';
echo date('F',mktime(0,0,0,$monat,1,date('Y')));
echo '</b></center>';
//Alle Anzeigen bei denen das von- oder bisdatum in dieses monat fallen
$qry = "SELECT * FROM campus.tbl_zeitsperre WHERE zeitsperretyp_kurzbz='Urlaub'
AND
(
(date_part('month', vondatum)='$monat' AND date_part('year', vondatum)='".($monat>8?$year-1:$year)."')
OR
(date_part('month', bisdatum)='$monat' AND date_part('year', bisdatum)='".($monat>8?$year-1:$year)."')
)";
if($uid=='')
$qry.=" AND mitarbeiter_uid in($untergebene)";
else
$qry.=" AND mitarbeiter_uid='".addslashes($uid)."'";
$qry.="ORDER BY vondatum, mitarbeiter_uid";
if($result = pg_query($conn, $qry))
{
while($row = pg_fetch_object($result))
{
echo $mitarbeiter[$row->mitarbeiter_uid]['nachname'].' '.$datum_obj->formatDatum($row->vondatum,'d.m.Y')." - ".$datum_obj->formatDatum($row->bisdatum,'d.m.Y');
if($row->freigabeamum=='')
echo " <a href='".$_SERVER['PHP_SELF']."?action=freigabe&id=$row->zeitsperre_id&year=$year&uid=$uid' class='Item'>Freigabe</a>";
echo '<br>';
}
}
echo '</td>';
}
//Jahr mit Pfeilen zum blaettern anzeigen
echo '<center>';
echo "<a href='".$_SERVER['PHP_SELF']."?uid=$uid&year=".($year-1)."' class='Item' title='Ein Jahr zurück'><img src='../../../skin/images/left.gif'></a>";
echo '&nbsp;<font size="+1"><b>';
echo ($year-1).'/'.$year;
echo '</b></font>&nbsp;';
echo "<a href='".$_SERVER['PHP_SELF']."?uid=$uid&year=".($year+1)."' class='Item' title='Ein Jahr vor'><img src='../../../skin/images/right.gif'></a>";
echo '</center>';
if($uid!='')
{
echo "<a href='".$_SERVER['PHP_SELF']."?year=$year' class='Item'>Alle Mitarbeiter anzeigen</a><br>";
}
echo '<br>';
//Tabelle mit den Monaten ausgeben
echo '<table cellspacing=0 width="100%" style="border: 1px solid black;"><tr>';
$monat=9;
for($i=0;$i<12;$i++)
{
if($i%3==0)
{
echo '</tr><tr>';
}
draw_monat($monat);
$monat++;
if($monat>12)
$monat=1;
}
echo '</tr></table>
</td>
</tr>
</table>
</body>
</html>';
?>
+120 -23
View File
@@ -28,6 +28,8 @@
require_once('../../../include/zeitsperre.class.php');
require_once('../../../include/datum.class.php');
require_once('../../../include/resturlaub.class.php');
require_once('../../../include/person.class.php');
require_once('../../../include/benutzer.class.php');
$uid = get_uid();
@@ -47,7 +49,8 @@
$num_rows_stunde=pg_num_rows($result_stunde);
?>
<html>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd"><html>
<head>
<title>Zeitsperre</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
@@ -93,7 +96,7 @@ function checkdatum()
</head>
<body id="inhalt">
<H2><table class="tabcontent">
<!--<H2><table class="tabcontent">
<tr>
<td>
&nbsp;<a class="Item" href="index.php">Userprofil</a> &gt;&gt;
@@ -102,11 +105,34 @@ function checkdatum()
<td align="right"></td>
</tr>
</table>
</H2>
</H2>-->
<table class="tabcontent" id="inhalt">
<tr>
<td class="tdwidth10">&nbsp;</td>
<td>
<table class="tabcontent">
<tr>
<td class="ContentHeader"><font class="ContentHeader">&nbsp;Zeitsperren</font></td>
</tr>
</table>
<br>
<!-- ************* ZEITSPERREN *****************-->
<H3>Zeitsperren</h3>
<?php
function getVorgesetzten($uid)
{
global $conn;
$qry = "SELECT CASE WHEN fachbereich_kurzbz is not null THEN (SELECT uid FROM public.tbl_benutzerfunktion WHERE fachbereich_kurzbz=a.fachbereich_kurzbz AND funktion_kurzbz='fbl' LIMIT 1)
WHEN studiengang_kz is not null THEN (SELECT uid FROM public.tbl_benutzerfunktion WHERE studiengang_kz=a.studiengang_kz AND funktion_kurzbz='stgl' LIMIT 1)
ELSE ''
END as vorgesetzter
FROM public.tbl_benutzerfunktion a WHERE funktion_kurzbz='Institut' AND uid='$uid'";
$result = pg_query($conn, $qry);
$row = pg_fetch_object($result);
return (isset($row->vorgesetzter)?$row->vorgesetzter:'');
}
//Zeitsperre Speichern
if(isset($_GET['type']) && ($_GET['type']=='edit_sperre' || $_GET['type']=='new_sperre'))
{
@@ -153,6 +179,11 @@ if(isset($_GET['type']) && ($_GET['type']=='edit_sperre' || $_GET['type']=='new_
$zeitsperre->insertvon = $uid;
}
if(!$error && $zeitsperre->freigabeamum!='')
{
$error = true;
$error_msg.='Dieser Urlaub kann nicht mehr editiert werden, da er schon freigegeben wurde';
}
if(!$error)
{
$zeitsperre->zeitsperretyp_kurzbz = $_POST['zeitsperretyp_kurzbz'];
@@ -170,6 +201,35 @@ if(isset($_GET['type']) && ($_GET['type']=='edit_sperre' || $_GET['type']=='new_
if($zeitsperre->save())
{
echo "Daten wurden erfolgreich gespeichert";
if($zeitsperre->new && $zeitsperre->zeitsperretyp_kurzbz=='Urlaub')
{
//Beim Anlegen von neuen Urlauben wird ein Mail an den Vorgesetzten versendet um diesen Freizugeben
$vorgesetzter = getVorgesetzten($uid);
if($vorgesetzter!='')
{
$to = $vorgesetzter.'@'.DOMAIN;
//$to = '[email protected]';
$benutzer = new benutzer($conn);
$benutzer->load($uid);
$message = "Dies ist eine automatische Mail! \n".
"$benutzer->nachname $benutzer->vorname hat einen neuen Urlaub eingetragen:\n".
"$zeitsperre->bezeichnung von $zeitsperre->vondatum bis $zeitsperre->bisdatum\n\n".
"Sie können diesen unter folgender Adresse freigeben:\n".
"https://cis.technikum-wien.at/cis/private/profile/urlaubsfreigabe.php?uid=$uid&year=".$datum_obj->formatDatum($zeitsperre->vondatum, 'Y');
if(mail($to, 'Freigabeansuchen', $message,'From: vilesci@'.DOMAIN))
{
echo "<br><b>Freigabemail wurde an $to versandt</b>";
}
else
{
echo "<br><span class='error'>Fehler beim Senden des Freigabemails an $to</span>";
}
}
else
{
echo "<br><span class='error'>Es konnte keine Freigabemail versendet werden da kein Vorgesetzter eingetragen ist</span>";
}
}
}
else
echo "<span class='error'>Fehler beim Speichern der Daten</span>";
@@ -201,11 +261,21 @@ if(isset($_GET['type']) && $_GET['type']=='delete_sperre')
//zeitsperren des users laden
$zeit = new zeitsperre($conn);
$zeit->getzeitsperren($uid);
$content_table='';
$content_table='<br><br>';
$qry = "SELECT * FROM campus.tbl_erreichbarkeit";
$erreichbarkeit_arr=array();
if($result = pg_query($conn, $qry))
{
while($row = pg_fetch_object($result))
{
$erreichbarkeit_arr[$row->erreichbarkeit_kurzbz]=$row->beschreibung;
}
}
//liste aller zeitsperren ausgeben
if(count($zeit->result)>0)
{
$content_table.= '<table><tr class="liste"><th>Bezeichnung</th><th>Grund</th><th>Von</th><th>Bis</th><th>Vertretung</th><th>Erreichbarkeit</th></tr>';
$content_table.= '<table><tr class="liste"><th>Bezeichnung</th><th>Grund</th><th>Von</th><th>Bis</th><th>Vertretung</th><th>Erreichbarkeit</th><th>Freigegeben</th></tr>';
$i=0;
foreach ($zeit->result as $row)
{
@@ -214,7 +284,20 @@ if(count($zeit->result)>0)
$qry = "SELECT vorname || ' ' || nachname as kurzbz FROM public.tbl_mitarbeiter, public.tbl_benutzer, public.tbl_person WHERE tbl_benutzer.uid=tbl_mitarbeiter.mitarbeiter_uid AND tbl_benutzer.person_id=tbl_person.person_id AND mitarbeiter_uid='$row->vertretung_uid'";
$result_vertretung = pg_query($conn, $qry);
$row_vertretung = pg_fetch_object($result_vertretung);
$content_table.= "<tr class='liste".($i%2)."'><td>$row->bezeichnung</td><td>$row->zeitsperretyp_kurzbz</td><td nowrap>".$datum_obj->convertISODate($row->vondatum)." ".($row->vonstunde!=''?'('.$row->vonstunde.')':'')."</td><td nowrap>".$datum_obj->convertISODate($row->bisdatum)." ".($row->bisstunde!=''?'('.$row->bisstunde.')':'')."</td><td>".(isset($row_vertretung->kurzbz)?$row_vertretung->kurzbz:'')."</td><td>$row->erreichbarkeit</td><td><a href='$PHP_SELF?type=edit&id=$row->zeitsperre_id' class='Item'>edit</a></td><td><a href='$PHP_SELF?type=delete_sperre&id=$row->zeitsperre_id' onclick='return conf_del()' class='Item'>delete</a></td></tr>";
$content_table.= "<tr class='liste".($i%2)."'>
<td>$row->bezeichnung</td>
<td>$row->zeitsperretyp_kurzbz</td>
<td nowrap>".$datum_obj->convertISODate($row->vondatum)." ".($row->vonstunde!=''?'('.$row->vonstunde.')':'')."</td>
<td nowrap>".$datum_obj->convertISODate($row->bisdatum)." ".($row->bisstunde!=''?'('.$row->bisstunde.')':'')."</td>
<td>".(isset($row_vertretung->kurzbz)?$row_vertretung->kurzbz:'')."</td>
<td>".$erreichbarkeit_arr[$row->erreichbarkeit]."</td>
<td align='center'>".($row->freigabeamum!=''?'Ja':'')."</td>";
if($row->freigabeamum=='' || $row->zeitsperretyp_kurzbz!='Urlaub')
{
$content_table.="<td><a href='$PHP_SELF?type=edit&id=$row->zeitsperre_id' class='Item'>edit</a></td>
<td><a href='$PHP_SELF?type=delete_sperre&id=$row->zeitsperre_id' onclick='return conf_del()' class='Item'>delete</a></td>";
}
$content_table.="</tr>";
}
$content_table.= '</table>';
}
@@ -304,19 +387,14 @@ for($i=0;$i<$num_rows_stunde;$i++)
$content_form.= "</SELECT></td></tr>";
$content_form.= "<tr><td>Erreichbarkeit</td><td><SELECT name='erreichbarkeit'>";
//dropdown fuer vertretung
$qry = "SELECT * FROM campus.tbl_erreichbarkeit";
if($result = pg_query($conn, $qry))
foreach ($erreichbarkeit_arr as $erreichbarkeit_key=>$erreichbarkeit_beschreibung)
{
while($row = pg_fetch_object($result))
{
if($zeitsperre->erreichbarkeit == $row->erreichbarkeit_kurzbz)
$content_form.= "<OPTION value='$row->erreichbarkeit_kurzbz' selected>$row->beschreibung</OPTION>\n";
else
$content_form.= "<OPTION value='$row->erreichbarkeit_kurzbz'>$row->beschreibung</OPTION>\n";
}
if($zeitsperre->erreichbarkeit == $erreichbarkeit_key)
$content_form.= "<OPTION value='$erreichbarkeit_key' selected>$erreichbarkeit_beschreibung</OPTION>\n";
else
$content_form.= "<OPTION value='$erreichbarkeit_key'>$erreichbarkeit_beschreibung</OPTION>\n";
}
$content_form.= '</SELECT></td></tr>';
$content_form.= "<tr><td>Vertretung</td><td><SELECT name='vertretung_uid' id='vertretung_uid'>";
@@ -350,7 +428,7 @@ $content_resturlaub = '';
$resturlaubstage = '0';
$mehrarbeitsstunden = '0';
$anspruch = '25';
/*
if(isset($_GET['type']) && $_GET['type']=='save_resturlaub')
{
$_POST['mehrarbeitsstunden'] = str_replace(',','.',$_POST['mehrarbeitsstunden']);
@@ -389,7 +467,7 @@ if(isset($_GET['type']) && $_GET['type']=='save_resturlaub')
$anspruch = htmlspecialchars($resturlaub->urlaubstageprojahr,ENT_QUOTES);
}
else
{
{*/
$resturlaub = new resturlaub($conn);
if($resturlaub->load($uid))
@@ -398,20 +476,21 @@ else
$mehrarbeitsstunden = $resturlaub->mehrarbeitsstunden;
$anspruch = $resturlaub->urlaubstageprojahr;
}
}
/*}
if($anspruch=='')
$anspruch=25;
//Eingabefelder am 15.12.2007 deaktivieren
if((date('d')>=15 && date('m')>=12 && date('Y')>=2007) || date('Y')>2007)
$disabled='disabled="true"';
else
$disabled='';
*/
//Den Bereich fuer die Resturlaubstage nur anzeigen wenn dies
//im config angegeben ist
if(URLAUB_TOOLS)
{
/*
$content_resturlaub.='<form method="POST" action="'.$PHP_SELF.'?type=save_resturlaub"><table>';
$content_resturlaub.='<tr><td>Resturlaubstage (31.08.)</td><td><input type="text" size="6" '.$disabled.' id="resturlaubstage" name="resturlaubstage" value="'.$resturlaubstage.'" oninput="berechnen()"/></td></tr>';
$content_resturlaub.='<tr><td>Anspruch (01.09.)</td><td><input type="text" size="6" '.$disabled.' id="anspruch" name="anspruch" value="'.$anspruch.'" oninput="berechnen()"/></td></tr>';
@@ -419,6 +498,23 @@ if(URLAUB_TOOLS)
$content_resturlaub.='<tr><td>&nbsp;</td></tr>';
$content_resturlaub.='<tr><td>Aktuelle Mehrarbeitsstunden:</td><td><input type="text" size="6" name="mehrarbeitsstunden" value="'.$mehrarbeitsstunden.'" /></td></tr>';
$content_resturlaub.='<tr><td></td><td><input type="submit" name="save_resturlaub" value="Speichern" /></td></tr></table>';
*/
$content_resturlaub.="<table><tr><td>Anspruch</td><td align='right'>$anspruch Tage</td></tr>";
$content_resturlaub.="<tr><td>+ Resturlaub</td><td align='right'>$resturlaubstage Tage</td></tr>";
$gebuchterurlaub=0;
//Urlaub berechnen
$qry = "SELECT sum(bisdatum-vondatum+1) as anzahltage FROM campus.tbl_zeitsperre
WHERE zeitsperretyp_kurzbz='Urlaub' AND mitarbeiter_uid='$uid' AND
(
(date_part('month', vondatum)>9 AND date_part('year', vondatum)='".(date('Y')-1)."') OR
(date_part('month', vondatum)<9 AND date_part('year', vondatum)='".date('Y')."')
)";
$result = pg_query($conn, $qry);
$row = pg_fetch_object($result);
$gebuchterurlaub = $row->anzahltage;
$content_resturlaub.="<tr><td>- aktuell gebuchter Urlaub&nbsp;</td><td align='right'>$gebuchterurlaub Tage</td></tr>";
$content_resturlaub.="<tr><td style='border-top: 1px solid black;'>aktueller Stand</td><td style='border-top: 1px solid black;' align='right'>".($anspruch+$resturlaubstage-$gebuchterurlaub)." Tage</td></tr>";
$content_resturlaub.="</table>";
}
echo '<table width="100%">';
echo '<tr>';
@@ -433,5 +529,6 @@ echo '</tr>';
echo '</table>';
?>
</td></tr></table>
<body>
</html>