CIS Wochenplan Reservierung update

- Mitarbeiter autocomplete for reserving one hour for multiple Mitarbeiter at same time
- possible to delete Reservations directly in Wochenplan
This commit is contained in:
alex
2019-05-16 17:32:34 +02:00
parent f7a4c5795b
commit c0b448125d
4 changed files with 231 additions and 39 deletions
@@ -21,6 +21,7 @@
require_once('../../../config/cis.config.inc.php');
require_once('../../../include/basis_db.class.php');
require_once('../../../include/benutzer.class.php');
require_once('../../../include/mitarbeiter.class.php');
require_once('../../../include/studiengang.class.php');
require_once('../../../include/functions.inc.php');
require_once('../../../include/lehrverband.class.php');
@@ -56,7 +57,30 @@ switch($_REQUEST['autocomplete'])
echo json_encode($result_obj);
}
break;
case 'mitarbeiter':
$search=trim((isset($_REQUEST['term']) ? $_REQUEST['term']:''));
if (is_null($search) ||$search=='')
exit();
$mitarbeiter = new mitarbeiter();
$searchItems = explode(' ',$search);
foreach ($searchItems as $searchItem)
{
if ($mitarbeiter->search($searchItem))
{
$result_obj = array();
foreach ($mitarbeiter->result as $row)
{
$item['vorname'] = html_entity_decode($row->vorname);
$item['nachname'] = html_entity_decode($row->nachname);
$item['uid'] = html_entity_decode($row->uid);
$result_obj[] = $item;
}
}
}
echo json_encode($result_obj);
break;
case 'getSemester':
$studiengang = new studiengang();
$data = array();
+103 -10
View File
@@ -121,7 +121,7 @@ if (isset($_POST['titel']))
<META charset="UTF-8">
<TITLE><?php echo $p->t('lvplan/lehrveranstaltungsplan').' '.CAMPUS_NAME;?></TITLE>
<?php include('../../../include/meta/jquery.php');?>
<script type="text/javascript" src="../../../vendor/components/jqueryui/jquery-ui.min.js"></script>
<script type="text/javascript">
<!--
function MM_jumpMenu(targ,selObj,restore)
@@ -144,6 +144,45 @@ if (isset($_POST['titel']))
}
$(document).ready(function() {
$("#user_uid").autocomplete({
source: "lvplan_autocomplete.php?autocomplete=mitarbeiter",
minLength:2,
response: function(event, ui)
{
//Value und Label fuer die Anzeige setzen
for(var i in ui.content)
{
ui.content[i].value=ui.content[i].vorname+" "+ui.content[i].nachname+" ("+ui.content[i].uid+")";
ui.content[i].label=ui.content[i].vorname+" "+ui.content[i].nachname+" ("+ui.content[i].uid+")";
}
},
select: function(event, ui)
{
var uid = ui.item.uid;
if ($("#lecturer_"+uid).length <= 0)
{
$("#user_uid").after("<input type='hidden' name='lecturer_uids[]' value='" + uid + "' id='lecturer_" + uid + "'>");
$("#firstinputrow").after("<tr id='lecturerrow_"+uid+"'>" +
"<td colspan='9'></td>" +
"<td class='lecturercell'>" +
"<div class='lecturercellname'>"+ui.item.value+"</div>" +
"<div class='lecturercelldelete'>" +
"<img src='../../../skin/images/delete_x.png' id='deleteLecturer_"+uid+"' width='11px' height='11px' title='<?php echo $p->t('global/löschen');?>'>" +
"</div>" +
"</td></tr>");
$("#deleteLecturer_"+uid).click(
function() {
$("#lecturer_"+uid).remove();
$("#lecturerrow_"+uid).remove();
}
);
}
$("#user_uid").val("");
return false;
}
});
$("select[name='studiengang_kz']").change(function() {
var studiengang_kz = $("select[name='studiengang_kz']").val();
$.ajax({
@@ -251,6 +290,7 @@ if (isset($_POST['titel']))
';
?>
<link rel="stylesheet" href="../../../skin/style.css.php" type="text/css">
<link href="../../../skin/jquery-ui-1.9.2.custom.min.css" rel="stylesheet" type="text/css">
</HEAD>
<BODY id="inhalt">
<h1><?php echo $p->t('lvplan/wochenplan');?></h1>
@@ -305,8 +345,51 @@ if (isset($_POST['reserve']))
$reserve=$_POST['reserve'];
else if (isset($_GET['reserve']))
$reserve=$_GET['reserve'];
if (isset($_GET['reservtodelete']))
$reservtodelete=$_GET['reservtodelete'];
// Loeschen von Reservierungen
if (isset($reservtodelete))
{
if (is_array($reservtodelete))
{
foreach ($reservtodelete as $delete_id)
{
if (!is_numeric($delete_id))
die('ungueltige ID');
}
$reservierung = new reservierung();
$reservdelcount = 0;
$reservberechtigt = $rechte->isBerechtigt('lehre/reservierung', null, 'suid');
foreach ($reservtodelete as $delete_id)
{
if ($reservierung->load($delete_id))
{
if ($reservberechtigt || $reservierung->uid==$uid || $reservierung->insertvon==$uid)
{
if($reservierung->delete($delete_id))
$reservdelcount++;
else
echo $reservierung->errormsg;
}
else
{
echo '<b>'.$p->t('global/keineBerechtigung').'</b><br>';
}
}
else
echo '<b>'.$p->t('global/fehleraufgetreten').'!</b><br>';
}
}
else
die('<b>ungueltige IDs</b><br>');
}
// Reservieren
if (isset($reserve) && $raumres)
elseif (isset($reserve) && $raumres)
{
$ort_obj = new ort();
if(!$ort_obj->load($ort_kurzbz))
@@ -358,20 +441,17 @@ if (isset($reserve) && $raumres)
$reservierung->insertamum=date('Y-m-d H:i:s');
$reservierung->insertvon=$uid;
if(isset($_REQUEST['studiengang_kz']))
if(!empty($_REQUEST['lecturer_uids'] && isset($_REQUEST['studiengang_kz'])))
{
$lecturer_uids = $_REQUEST['lecturer_uids'];
foreach ($lecturer_uids as $lecturer_uid)
{
$reservierung->studiengang_kz = $_REQUEST['studiengang_kz'];
$reservierung->semester = $_REQUEST['semester'];
$reservierung->verband = $_REQUEST['verband'];
$reservierung->gruppe = $_REQUEST['gruppe'];
$reservierung->gruppe_kurzbz = $_REQUEST['gruppe_kurzbz'];
$reservierung->uid = $_REQUEST['user_uid'];
}
else
{
$reservierung->studiengang_kz='0';
$reservierung->uid = $uid;
}
$reservierung->uid = $lecturer_uid;
if(!$reservierung->save(true))
echo $reservierung->errormsg;
@@ -380,6 +460,17 @@ if (isset($reserve) && $raumres)
}
}
else
{
$reservierung->studiengang_kz='0';
$reservierung->uid = $uid;
if(!$reservierung->save(true))
echo $reservierung->errormsg;
else
$count++;
}
}
}
else
{
echo "<br>$ort_kurzbz ".$p->t('lvplan/bereitsReserviert').": $datum_res - Stunde $stunde <br>";
}
@@ -429,6 +520,8 @@ else
if (isset($count))
echo "Es wurde".($count!=1?'n':'')." $count Stunde".($count!=1?'n':'')." reserviert!<BR>";
if (isset($reservdelcount))
echo "Es wurde".($reservdelcount!=1?'n':'')." $reservdelcount Stunde".($reservdelcount!=1?'n':'')." gel&ouml;scht!<BR>";
?>
<P><br><?php echo $p->t('lvplan/fehlerUndFeedback');?> <A class="Item" href="mailto:<?php echo MAIL_LVPLAN?>"><?php echo $p->t('lvplan/lvKoordinationsstelle');?></A>.</P>
+74 -25
View File
@@ -702,6 +702,7 @@ class wochenplan extends basis_db
$datum=$datum_mon=$this->datum;
$rechte = new benutzerberechtigung();
$rechte->getBerechtigungen($user_uid);
$reservberechtigt = $rechte->isBerechtigt('lehre/reservierung', null, 'suid');
for ($i=1; $i<=TAGE_PRO_WOCHE; $i++)
{
@@ -765,6 +766,12 @@ class wochenplan extends basis_db
$reservierung=$lehrstunde->reservierung;
}
$datum_res_lektor_start_m = date('Y-m-d', $datum_res_lektor_start);
$datum_res_lektor_ende_m = date('Y-m-d', $datum_res_lektor_ende);
$datum_m = date('Y-m-d',$datum);
$showdelete = $raumres && $this->type=='ort' && (/*$datum>=$datum_now && */$datum_m>=$datum_res_lektor_start_m && $datum_m<=$datum_res_lektor_ende_m);
if ($gruppieren)
{
// Unterrichtsnummer (Kollision?)
@@ -836,6 +843,14 @@ class wochenplan extends basis_db
if (isset($this->std_plan[$i][$j][0]->farbe))
echo 'style="background-color: #'.$this->std_plan[$i][$j][0]->farbe.';"';
echo '>'.$blink_ein.'<DIV align="center">';
$ort = $this->std_plan[$i][$j][0]->ort;
if ($showdelete)
{
$this->stpltable_deletelink($ort, $datum, $j, $user_uid, $reservberechtigt);
}
// Link zu Details setzten
echo '<A class="stpl_detail" onClick="window.open(';
echo "'stpl_detail.php";
@@ -845,7 +860,7 @@ class wochenplan extends basis_db
echo '&sem='.$this->sem;
echo '&ver='.$this->ver;
echo '&grp='.$this->grp;
echo '&ort_kurzbz='.$this->std_plan[$i][$j][0]->ort;
echo '&ort_kurzbz='.$ort;
echo "','Details', 'height=320,width=550,left=0,top=0,hotkeys=0,resizable=yes,status=no,scrollbars=no,toolbar=no,location=no,menubar=no,dependent=yes');return false;";
echo '" title="'.$this->convert_html_chars($titel).'" ';
echo ' href="#">';
@@ -902,6 +917,12 @@ class wochenplan extends basis_db
echo 'style="background-color: #'.$uEinheit['farbe'].'; margin-bottom: 3px;"';
echo '>';
// Löschlink anzeigen
if ($showdelete)
{
$this->stpltable_deletelink($uEinheit['ort'][0], $datum, $j, $user_uid, $reservberechtigt);
}
// Link zu Details setzten
echo '<A class="stpl_detail" onClick="window.open(';
echo "'stpl_detail.php";
@@ -982,37 +1003,22 @@ class wochenplan extends basis_db
{
$check_all_checkbox='';
echo '<br><table><tr>';
echo '<br><table><tr id="firstinputrow">';
echo ' <td>'.$p->t('global/titel').':</td><td><input onchange="if (this.value.length>0 && document.getElementById(\'beschreibung\').value.length<1) {document.getElementById(\'beschreibung\').value=document.getElementById(\'titel\').value;document.getElementById(\'beschreibung\').focus();};" type="text" id="titel" name="titel" size="10" maxlength="10" value="" /></td> '.$this->crlf;
echo ' <td>'.$p->t('global/beschreibung').':</td><td colspan="6"> <input onchange="if (this.value.length<1 && document.getElementById(\'titel\').value.length>0) {alert(\'Achtung! Speichern nur mit Beschreibung moeglich!\');this.focus();};" type="text" id="beschreibung" name="beschreibung" size="20" maxlength="32" value="" /> </td>'.$this->crlf;
echo ' <td>'.$p->t('global/beschreibung').':</td><td colspan="5"> <input onchange="if (this.value.length<1 && document.getElementById(\'titel\').value.length>0) {alert(\'Achtung! Speichern nur mit Beschreibung moeglich!\');this.focus();};" type="text" id="beschreibung" name="beschreibung" size="20" maxlength="32" value="" /> </td>'.$this->crlf;
//Pruefen ob die erweiterte Reservierungsrechte vorhanden sind
if ($rechte->isBerechtigt('lehre/reservierung', null, 'sui'))
{
$check_all_checkbox='';
//Lektor
echo '<td>'.$p->t('lvplan/lektor').':</td>
<td><SELECT name="user_uid">'.$this->crlf;
$qry = "SELECT uid, kurzbz, vorname, nachname FROM campus.vw_mitarbeiter
WHERE aktiv=true
ORDER BY nachname, uid";
if ($result = $this->db_query($qry))
{
while ($row = $this->db_fetch_object($result))
{
if ($row->uid==$user_uid)
$selected='selected="selected"';
else
$selected='';
echo '<OPTION value="'.$row->uid.'" '.$selected.'>'.$row->nachname.' '.$row->vorname.' - '.$row->uid.'</OPTION>'.$this->crlf;
}
}
echo '</SELECT></td>'.$this->crlf;
echo '</tr><tr>'.$this->crlf;
echo "<td>".$p->t('lvplan/lektor').":</td>
<td><input class='search' placeholder='".$p->t('lvplan/nameEingeben')."' type='text' id='user_uid' size='32' value=''>".$this->crlf;
echo '</td>'.$this->crlf;
echo '<td>&nbsp;</td>';
echo '</tr>';
echo '<tr>'.$this->crlf;
//Studiengaenge Laden fuer die eine erweiterte Reservierungsberechtigung vorhanden ist
$stg = new studiengang();
@@ -1112,7 +1118,7 @@ class wochenplan extends basis_db
echo '</td>';
echo '</tr></table></form>';
echo ' <a href="stpl_reserve_list.php">'.$p->t('lvplan/reservierungenLoeschen').' </a>';
echo ' <a href="stpl_reserve_list.php">'.$p->t('lvplan/meineReservierungenAnzeigen').' </a>';
}
elseif ($this->type=='ort' && $raumReservierbar == false)
{
@@ -2724,5 +2730,48 @@ class wochenplan extends basis_db
}
echo ' </tr></table></div></div></div></td></tr></table>'.$crlf;
}
/**
* Gibt Link zum Löschen der Reservierungen für einen Ort zu einer Zeit zuürck.
* @param $ort
* @param $datum
* @param $stunde
* @param $user_uid eingeloggter User
* @param $reservberechtigt erweiterte Reservierungsberechtigung
*/
private function stpltable_deletelink($ort, $datum, $stunde, $user_uid, $reservberechtigt)
{
global $p;
$deleteberechtigt = false;
$reservtodelete = array();
$qry = "SELECT reservierung_id, insertvon, uid FROM campus.tbl_reservierung
WHERE ort_kurzbz=" . $this->db_add_param($ort) . "
AND datum = " . $this->db_add_param(date('Y-m-d', $datum)) . "
AND stunde = " . $this->db_add_param($stunde);
if ($result = $this->db_query($qry))
{
while ($row = $this->db_fetch_object($result))
{
if ($reservberechtigt || $row->uid == $user_uid || $row->insertvon == $user_uid)
{
$deleteberechtigt = true;
$reservtodelete[] = $row->reservierung_id;
}
}
}
if ($deleteberechtigt)
{
$reservetodeleteurl = 'stpl_week.php?type=ort&ort_kurzbz='.$ort.'&datum='.$datum;
$reservetodeleteurl .= '&reservtodelete[]='.implode("&reservtodelete[]=", $reservtodelete);
echo '<div class="reservdelete">
<a href="'.$reservetodeleteurl.'" title="' . $p->t('lvplan/reservierungenLoeschen') . '">
<img src="../../../skin/images/cross.png" width="12px" height="12px"/>
</a>
</div>';
}
}
}
?>
+26
View File
@@ -642,6 +642,15 @@ TABLE.stdplan TD
{
background-color: #E9ECEE;
}
/*reservation delete-"x"*/
TABLE.stdplan div.reservdelete {
text-align: right;
margin-bottom:-4px;
padding-top: 2px;
padding-right: 2px;
}
.row-even { /*liste1*/
background-color:#f2f2f2;
}
@@ -650,6 +659,23 @@ TABLE.stdplan TD
background-color:#ffffff;
}
/*lecturer reservation rows*/
td.lecturercell {
border: 1px solid;
}
td.lecturercell div.lecturercellname {
width: 95%;
float: left;
}
td.lecturercell div.lecturercelldelete {
width: 5%;
float: left;
text-align: right;
cursor: pointer;
}
/*
==== Fonts ====
*/