Permitir registrar mas de un Encargado de Taller por horario.
[CLab.git] / contenido / usuario+horarios.php
blob33f1fdc7dbfff65c34ff1cfae46e1eade7e504dd
1 <?php
2 function MOSTRAR_SELECCION_TALLER() {
3 echo
5 <form action="./?accion=horarios" method="post">
6 <table border=0>
7 <tr><td>Taller a asignar: </td><td>
8 <select name="taller">
9 ';
10 if ($_SESSION['dpto'] == 0) {
11 echo
13 <option value="LSA">'."LSA".'
14 <option value="LID">'."LID".'
15 <option value="LAI">'."LAI".'
16 <option value="LIV">'."LIV".'
18 } else {
19 echo
21 <option value="TPP">'."TPP".'
22 <option value="TIS">'."TIS".'
23 <option value="TAS">'."TAS".'
24 <option value="TEC">'."TEC".'
27 echo
29 </select>
30 </td></tr>
31 </table>
32 <input type="hidden" name="HORARIO_registrar" value="insertar">
33 <input type="submit" name="continuar" value="Continuar" />
34 </form>
38 /*****************************************************************************************************************************************************/
39 //Se nos pide registrar un instructor?
40 function HORARIO_registrar_instructor() {
41 global $session, $link, $base, $motor, $usuario, $clave;
42 if (!$session->isAdmin()) {die("Lo siento, Ud. esta intentando registrar un Instructor sin ser administrador");}
44 echo "<h2>Visor de Horarios - Procesando la asignación de horarios para ".$_SESSION['user']."<br /><hr />";
46 $link = @mysql_connect($motor, $usuario, $clave) or die('Por favor revise sus datos, puesto que se produjo el siguiente error:<br /><pre>' . mysql_error() . '</pre>');
47 mysql_select_db($base, $link) or die('!->La base de datos seleccionada "'.$base.'" no existe');
49 //Si es encargado de taller no importa si tiene otro laboratorio
50 $num_rows = 0;
51 if ( $_SESSION['tipo'] != 2 ) {
52 //Verificamos que no tenga otro laboratorio al mismo tiempo.
53 $q = "SELECT * FROM horarios WHERE username='". $_SESSION['user'] ."' AND dia='".$_SESSION['dia']."' AND posicion='".$_SESSION['posicion']."';";
54 //echo $q."<br />";
55 $resultados = @mysql_query($q, $link) or die('!->Ocurrió un error mientras se revisaba la disponibilidad del instructor.');
56 $num_rows = mysql_numrows($resultados);
57 //$num_rows > 0 significa que el muchacho ya tiene asignado otro laboratorio a la misma hora :)
58 if ($num_rows > 0) {
59 echo
61 <h3>Registro de Intructor abortado</h3><hr />
62 Lo sentimos, pero este Instructor ya tiene otros laboratorios asignados el mismo día y hora.
64 echo CONTINUAR;
65 return;
69 //Ok, no tiene otro laboratorio simultaneo, entonces verificamos que no haya nadie mas ya asignado a ese taller
70 //Si no es asistente, entonces contar todos los que hay que NO sean asistentes.
71 //Tampoco hay que contar los Encargados de Taller
72 switch ( $_SESSION['tipo'] ) {
73 //Asistente de Catedratico, contar solo asistentes en ese taller.
74 case 0:
75 $q = "SELECT * FROM horarios, users WHERE horarios.username = users.username AND tipo = 0 AND taller='". $_SESSION['taller'] ."' AND dia='".$_SESSION['dia']."' AND posicion='".$_SESSION['posicion']."';";
76 break;
77 //Asistente de Taller + Instructor, contar todo menos asistentes y encargados.
78 case 1:
79 case 3:
80 $q = "SELECT * FROM horarios, users WHERE horarios.username = users.username AND tipo != 0 AND tipo != 2 AND taller='". $_SESSION['taller'] ."' AND dia='".$_SESSION['dia']."' AND posicion='".$_SESSION['posicion']."';";
81 break;
82 //Encargado de Taller, verificar si EL esta.
83 case 2:
84 //Si ya hay uno: $q = "SELECT * FROM horarios, users WHERE horarios.username = users.username AND tipo = 2 AND taller='". $_SESSION['taller'] ."' AND dia='".$_SESSION['dia']."' AND posicion='".$_SESSION['posicion']."';";
85 $q = "SELECT * FROM horarios, users WHERE horarios.username = '".$_SESSION['user']. "' AND users.username = '" .$_SESSION['user']. "' AND tipo = 2 AND taller='". $_SESSION['taller'] ."' AND dia='".$_SESSION['dia']."' AND posicion='".$_SESSION['posicion']."';";
86 break;
88 echo $q.'<br />';
89 $resultados = @mysql_query($q, $link) or die('!->Ocurrió un error mientras se revisaba la disponibilidad del instructor. (2)');
90 $num_rows = mysql_numrows($resultados);
92 //Umm si >0 es que hay alguien ahi, y podemos proceder solo si ese numero es menor a 8 y somos asistentes...
93 if ( $num_rows > 0 && ($_SESSION['tipo'] != 0 && $num_rows < 8) ) {
94 echo '<h3>Registro de Intructor abortado</h3><hr />';
96 switch ( $_SESSION['tipo'] ) {
97 case 0:
98 echo 'Lo sentimos, pero ya hay 8 ' . TI_0 . ' en este taller a esta hora<br />';
99 break;
100 case 1:
101 case 3:
102 echo 'Lo sentimos, pero este Instructor ya tiene otros laboratorios asignados el mismo día y hora.<br />';
103 break;
104 case 2:
105 echo 'Lo sentimos, pero este Encargado de taller ya esta asignado a este horario.<br />';
106 break;
108 echo CONTINUAR;
109 return;
111 //Finalmente, si no estabamos ocupados y no lo estaban ocupando, nos insertamos.
112 //Insertamos al instructor en el horario.
114 if ( $_SESSION['tipo'] == 2 ) {
115 $tempTaller = "";
116 } else {
117 $tempTaller = $_SESSION['taller'];
119 $q = "INSERT INTO horarios VALUES ('".$_SESSION['user'] ."', ' " . $tempTaller . "','".$_SESSION['dia']."','".$_SESSION['posicion']."')";
120 @mysql_query($q, $link) or die('!->Ocurrió un error en la ultima etapa de la adición de usuarios.');
121 echo
123 <h3>Registro exitoso</h3><br />
125 echo CONTINUAR;
126 return;
128 function HORARIO__DESCRIBIR_ELEMENTO_EN_POS_UNICO($dia, $hora) {
129 global $session, $link;
130 // 1. Tengo ocupada esa hora?
131 switch ( $_SESSION['tipo'] ) {
132 case 0:
133 case 1:
134 case 3:
135 case 2:
136 $q = "SELECT users.username, nombre, horarios.taller FROM users,horarios WHERE horarios.username = '".$_SESSION['user'] . "' AND users.username = '".$_SESSION['user']."' AND tipo = '".$_SESSION['tipo']."' AND dia='$dia' AND posicion='$hora'";
137 break;
139 //echo $q;
140 $resultados = @mysql_query($q, $link);
141 $num_rows = mysql_numrows($resultados);
143 if($num_rows > 0){
144 //Los encargados estan ocupados y punto.
145 if ( $_SESSION['tipo'] == 2 ) {
146 $msj = $msj.'<FONT COLOR="#800000">'."Ocupado"."</font><br />";
147 } else {
148 //Si, la tengo ocupada, ¿en que taller estoy?
149 //Hacemos for para mostrar si hay mas de un taller (error)!
150 for($i=0; $i<$num_rows; $i++){
151 $msj = $msj.'<FONT COLOR="#800000">'.mysql_result($resultados,$i,"taller")."</font><br />";
154 }else {
155 //No, no la tengo ocupada!, entonces dejemos ponerle trabajo, claro, si somos admins...
156 if ($session->isAdmin()){
157 $msj=$msj .'<a href="./?accion=horarios&amp;o=a&amp;d='.$dia.'&amp;p='.$hora.'">Asignar</a>';
158 } else {
159 $msj="";
163 return "<td>".$msj."</td>";
166 function HORARIO__DESCRIBIR_ELEMENTO_EN_POS($taller,$dia, $hora) {
167 global $session, $link;
168 //Si existe un nombre en $_GET entonces mostrar solo ese nombre o asignar.
169 if ( isset($_GET['user']) )
170 {$userExtra = "horarios.username = '".$_GET['user'] . "' AND users.username = '".$_GET['user']."'";}
171 else
172 {$userExtra = "horarios.username = users.username";}
174 // ¿Hay alguien(es) en esa posición?
175 $q = "SELECT users.username, nombre FROM users,horarios WHERE $userExtra AND taller LIKE '%$taller%' AND tipo = '".$_SESSION['tipo']."' AND dia='$dia' AND posicion='$hora'";
176 //echo $q;
177 $resultados = @mysql_query($q, $link);
178 $num_rows = mysql_numrows($resultados);
180 if($num_rows > 0){
181 $msj="";
182 for($i=0; $i<$num_rows; $i++){
183 $uname = mysql_result($resultados,$i,"nombre");
184 $uinfo = mysql_result($resultados,$i,"username");
185 /* Por petición solo el primer nombre es mostrado */
186 unset ($nombre);
187 ereg("([^ ]*)", $uname, $nombre);
188 $msj = $msj.'<a href="./?'._ACC_.'=usuario+info&amp;usr='.$uinfo.'">'.$nombre[1].'</a>[<a href="./?accion=horarios&amp;o=e&amp;t='.$taller.'&amp;d='.$dia.'&amp;p='.$hora.'&amp;user='.$uinfo.'">X</a>]<br />';
192 if($num_rows == 0 || ($_SESSION['tipo'] == 0 && $num_rows < 9) || $_SESSION['tipo'] == 2){
193 if ( isset($_SESSION['user']) ) { $u = "&amp;nombre=".$_SESSION['user']; } else { $u = ""; }
194 $msj=$msj .'<a href="./?accion=horarios&amp;t='.$taller.'&amp;d='.$dia.'&amp;p='.$hora.'&amp;o=a&amp;tipo='.$_SESSION['tipo'].$u.'">Asignar</a>';
197 return "<td>".$msj."</td>";
200 function MOSTRAR_HORARIOS_UNICO() {
201 /* Muestra la tabla de horario en base a las opciones de filtro establecidas */
202 global $link, $base, $motor, $usuario, $clave;
203 $link = @mysql_connect($motor, $usuario, $clave) or die('Por favor revise sus datos, puesto que se produjo el siguiente error:<br /><pre>' . mysql_error() . '</pre>');
204 @mysql_select_db($base, $link) or die('!->La base de datos seleccionada "'.$base.'" no existe');
205 echo "<h3>";
206 switch ($_SESSION['dpto'])
208 case 0: echo DE_0; break;
209 case 1: echo DE_1; break;
211 echo
212 ' </h3>
213 <hr />
214 <table border="1" cellspacing="0" cellpadding="3">
215 <tr><th>Horario</th><th>Lunes</th><th>Martes</th><th>Miercoles</th><th>Jueves</th><th>Viernes</th><th>Sabado</th></tr>
217 for ($i=450; $i<=1170; $i+=60){
218 echo "<tr><td><b>". date("h:ia", mktime(0,$i)) . "</b></td>". HORARIO__DESCRIBIR_ELEMENTO_EN_POS_UNICO(1, $i).HORARIO__DESCRIBIR_ELEMENTO_EN_POS_UNICO(2, $i).HORARIO__DESCRIBIR_ELEMENTO_EN_POS_UNICO(3, $i).HORARIO__DESCRIBIR_ELEMENTO_EN_POS_UNICO(4, $i).HORARIO__DESCRIBIR_ELEMENTO_EN_POS_UNICO(5, $i).HORARIO__DESCRIBIR_ELEMENTO_EN_POS_UNICO(6, $i)."</tr>";
220 echo "</table>";
221 mysql_close($link);
224 function MOSTRAR_HORARIOS() {
225 /* Muestra la tabla de horario en base a las opciones de filtro establecidas */
226 global $link, $base, $motor, $usuario, $clave;
227 $link = @mysql_connect($motor, $usuario, $clave) or die('Por favor revise sus datos, puesto que se produjo el siguiente error:<br /><pre>' . mysql_error() . '</pre>');
228 @mysql_select_db($base, $link) or die('!->La base de datos seleccionada "'.$base.'" no existe');
229 echo "<h3>";
230 switch ($_SESSION['dpto'])
232 case 0: echo DE_0; break;
233 case 1: echo DE_1; break;
235 echo ' - Taller '.$_SESSION['taller'].' - ';
236 switch ($_SESSION['tipo'])
238 case 0: echo TI_0; break;
239 case 1: echo TI_1; break;
240 case 2: echo TI_2; break;
241 case 3: echo TI_3; break;
244 echo
245 ' </h3>
246 <hr />
247 <table border="1" cellspacing="0" cellpadding="3">
248 <tr><th>Horario</th><th>Lunes</th><th>Martes</th><th>Miercoles</th><th>Jueves</th><th>Viernes</th><th>Sabado</th></tr>
250 for ($i=450; $i<=1170; $i+=60){
251 echo "<tr><td><b>". date("h:ia", mktime(0,$i)) . "</b></td>". HORARIO__DESCRIBIR_ELEMENTO_EN_POS($_SESSION['taller'], 1, $i).HORARIO__DESCRIBIR_ELEMENTO_EN_POS($_SESSION['taller'], 2, $i).HORARIO__DESCRIBIR_ELEMENTO_EN_POS($_SESSION['taller'], 3, $i).HORARIO__DESCRIBIR_ELEMENTO_EN_POS($_SESSION['taller'], 4, $i).HORARIO__DESCRIBIR_ELEMENTO_EN_POS($_SESSION['taller'], 5, $i).HORARIO__DESCRIBIR_ELEMENTO_EN_POS($_SESSION['taller'], 6, $i)."</tr>";
253 echo "</table>";
254 mysql_close($link);
257 function CONTENIDO_horarios() {
258 /* Esta es la función principal que muta dependiendo de la acción requerida */
259 global $session, $database, $link, $base, $motor, $usuario, $clave;
261 /*****************************************************************************************************************************************************/
263 //Tenemos un nombre y somos admins, o somos instructores? - Y no estamos procesando un (o)bjectivo.
264 if ( !$session->isAdmin() || ($session->isAdmin() && isset($_GET['user'])) && !isset($_GET['o']) ) {
265 if ( $session->isAdmin() ) {
266 $_SESSION['user']=$_GET['user'];
267 } else {
268 $_SESSION['user'] = $session->username;
270 //echo "We've got a name: " . $_SESSION['user'];
271 $req_user_info = $database->getUserInfo($_SESSION['user']);
273 $_SESSION['tipo'] = $req_user_info['tipo'];
274 $_SESSION['dpto'] = $req_user_info['departamento'];
275 unset($_SESSION['taller']);
277 MOSTRAR_HORARIOS_UNICO();
278 return;
280 /*****************************************************************************************************************************************************/
281 /* Teoricamente solo un Admin puede pasar de esta linea. */
282 if (!$session->isAdmin()) {die("Lo siento, Ud. esta intentando ingresar a un área especial sin ser administrador");}
283 /*****************************************************************************************************************************************************/
285 /* Necesitamos saber el día y la posición en la que lo quieren registrar */
286 $_SESSION['dia'] = $_GET['d'];
287 $_SESSION['posicion'] = $_GET['p'];
289 /* Se nos pide registrar a un instructor */ /*Entramos si somos Encargados de Taller */
290 if ( isset($_POST['HORARIO_registrar']) || ($_GET['o'] == 'a' && $_SESSION['tipo'] == 2 && $_SESSION['user'] != "")) {
291 if ( !isset($_SESSION['taller']) ) { $_SESSION['taller'] = $_POST['taller']; }
292 if ( isset($_POST['user']) ) { $_SESSION['user'] = $_POST['user']; }
293 if ($_GET['o'] == 'a' && $_SESSION['tipo'] == 2) { $_SESSION['taller'] = ""; }
294 HORARIO_registrar_instructor();
295 return;
298 /* Se nos pide ir a la pantalla de ingresar o registrar usuario */
299 if ( isset($_GET['d']) && isset($_GET['p'])&& isset($_GET['o'])) {
301 $link = @mysql_connect($motor, $usuario, $clave) or die('Por favor revise sus datos, puesto que se produjo el siguiente error:<br /><pre>' . mysql_error() . '</pre>');
302 mysql_select_db($base, $link) or die('!->La base de datos seleccionada "'.$base.'" no existe');
303 echo '<h2>Visor de Horarios - Filtro de instructores</h2><hr>';
305 // ¿Quieren agregar?
306 if ($_GET['o'] == 'a') {
307 if ( !isset($_SESSION['taller']) ) {
308 // Si entro por nombre, entonces no tiene taller preseleccionado: mandar a seleccion de Taller
309 MOSTRAR_SELECCION_TALLER();
310 return;
313 //Sino busquemos al elegido: ¿Hay alguien(es) en ese departamente y con ese cargo?
314 $q = "SELECT username, nombre FROM users WHERE departamento='".$_SESSION['dpto'] ."' AND tipo='" . $_SESSION['tipo'] . "'";
315 $resultados = @mysql_query($q, $link);
316 $num_rows = mysql_numrows($resultados);
318 //Si hay personal entonces mostrar.
319 if($num_rows > 0){
320 echo
322 <form action="./?'._ACC_.'=horarios" method="post">
323 <table border=0>
324 <tr><td>Instructores disponibles para el filtro actual: </td><td>
325 <select name="user">
329 for($i=0; $i<$num_rows; $i++){
330 $uname = mysql_result($resultados,$i,"username");
331 $unombre = mysql_result($resultados,$i,"nombre");
332 echo '<option value="' . $uname . '">'.$unombre;
334 echo
336 </select>
337 </td></tr>
338 </table>
339 <input type="hidden" name="HORARIO_registrar" value="insertar">
340 <input type="submit" name="continuar" value="Continuar" />
341 </form>
343 } else {
344 echo '<h3>Error<h3><hr />';
345 echo 'No se encontró ningún instructor que cumpliera con su criterio<br />';
348 //Quieren eliminar
349 } else {
350 $req_user_info = $database->getUserInfo($_GET['user']);
351 //eliminar
352 if ( $req_user_info['tipo'] == 2 ) {
353 $q = "DELETE FROM horarios WHERE username LIKE '%".$_GET['user']."%' AND dia = ".$_GET['d']." AND posicion = ".$_GET['p'].";";
354 } else {
355 $q = "DELETE FROM horarios WHERE username LIKE '%".$_GET['user']."%' AND taller LIKE '%".$_GET['t']."%' AND dia = ".$_GET['d']." AND posicion = ".$_GET['p'].";";
357 //echo $q;
358 $resultado = mysql_query($q, $link) or die('!->La operación de eliminación no pudo ser completada');
359 echo "<h3>Operación de eliminación completada</h3><hr />".$_GET['user']." ha sido removido del horario.<hr />";
360 echo CONTINUAR;
362 return;
365 /*****************************************************************************************************************************************************/
366 /* Acción por defecto de Administrador: Se nos pide filtrar los horarios.*/
367 $paso = $_POST['paso'];
369 0. Selección de departamento.
370 $_POST['dpto']
371 1. Selección de ocupacion del instructor
372 $_POST['tipo']
373 1.1 Salta paso 2 si $_POST['tipo'] = 2 -> Encargado de Taller
374 2. Selección de taller.
375 $_POST['taller']
377 //¿alguien tiene cuello y nos han pedido que lo asignemos de una vez sin pasar por licitación de Instructores XD?:
378 if (isset($_GET['user'])) { $_SESSION['user'] = $_GET['user']; } else { unset ($_SESSION['user']); }
379 echo '<h2>Visor de Horarios</h2></b><hr />';
380 switch ($paso) {
381 case 0:
382 if (!isset($_GET['dpto'])) {
383 echo
385 <form action="./?accion=horarios" method="post">
386 <table border=0>
387 <tr><td>Departamento a administrar: </td><td>
388 <select name="dpto">
389 <option value="0">'.DE_0.'
390 <option value="1">'.DE_1.'
391 </select>
392 </td></tr>
393 </table>
394 <input type="hidden" name="paso" value="1">
395 <input type="submit" name="continuar" value="Continuar" />
396 </form>
398 break;
399 } else {
400 $_SESSION['dpto'] = $_GET['dpto'];
402 case 1:
403 if (!isset($_GET['tipo'])) {
404 $_SESSION['dpto'] = $_POST['dpto'];
406 echo
408 <form action="./?accion=horarios" method="post">
409 <table border=0>
410 <tr><td>Tipo de instructor a administrar: </td><td>
411 <select name="tipo">
412 <option value="0">'.TI_0.'
413 <option value="1">'.TI_1.'
414 <option value="2">'.TI_2.'
415 <option value="3">'.TI_3.'
416 </select>
417 </td></tr>
418 </table>
419 <input type="hidden" name="paso" value="2">
420 <input type="submit" name="continuar" value="Continuar" />
421 </form>
423 echo '<hr />';
424 switch ($_SESSION['dpto'])
426 case 0: echo DE_0; break;
427 case 1: echo DE_1; break;
429 break;
430 } else {
431 $_POST['tipo'] = $_GET['tipo'];
433 case 2:
434 $_SESSION['tipo'] = $_POST['tipo'];
435 //Si es encargado de Taller nos saltamos la seleccion.
436 if ($_SESSION['tipo'] != 2) {
437 if ( isset($_GET['user'] ) ) { $ChinearGet = "&amp;user=".$_GET['user']; } else { $ChinearGet = ""; }
438 echo
440 <form action="./?accion=horarios'.$ChinearGet.'" method="post">
441 <table border=0>
442 <tr><td>Taller a administrar: </td><td>
443 <select name="taller">
445 if ($_SESSION['dpto'] == 0) {
446 echo
448 <option value="LSA">'."LSA".'
449 <option value="LID">'."LID".'
450 <option value="LAI">'."LAI".'
451 <option value="LIV">'."LIV".'
453 } else {
454 echo
456 <option value="TPP">'."TPP".'
457 <option value="TIS">'."TIS".'
458 <option value="TAS">'."TAS".'
459 <option value="TEC">'."TEC".'
462 echo
464 </select>
465 </td></tr>
466 </table>
467 <input type="hidden" name="paso" value="3">
468 <input type="submit" name="continuar" value="Continuar" />
469 </form>
471 echo '<hr />';
472 switch ($_SESSION['dpto'])
474 case 0: echo DE_0; break;
475 case 1: echo DE_1; break;
477 echo " -> ";
478 switch ($_SESSION['tipo'])
480 case 0: echo TI_0; break;
481 case 1: echo TI_1; break;
482 case 2: echo TI_2; break;
483 case 3: echo TI_3; break;
485 break;
486 } else {
487 $_POST['taller'] = "";
489 case 3:
490 $_SESSION['taller'] = $_POST['taller'];
491 MOSTRAR_HORARIOS();
492 break;
493 default:
494 return;