Alejandro Rosales 2 vuotta sitten
vanhempi
commit
0e400cb745
5 muutettua tiedostoa jossa 88 lisäystä ja 39 poistoa
  1. 7 1
      action/action_auditoria.php
  2. 30 16
      action/rutas_salón_horario.php
  3. 26 8
      auditoria.php
  4. 7 4
      reposiciones_crear.php
  5. 18 10
      supervisor.php

+ 7 - 1
action/action_auditoria.php

@@ -68,7 +68,7 @@ try {
                 comentario,
                 registro_fecha_justificacion,
                 profesor.profesor_id, profesor_nombre, profesor_clave, profesor_correo,
-                materia, carrera, horarios.facultad_id, facultad, nivel, horario_hora, horario_fin, horario_grupo, salon,
+                materia, carrera, horarios.facultad_id, facultad, nivel, horario_hora, horario_fin, horario_grupo, horarios.salon,
                 fechas.registro_fecha_ideal,
                 estado_supervisor.estado_supervisor_id as estado_supervisor_id,
                 estado_supervisor.nombre as nombre,
@@ -78,12 +78,18 @@ try {
                 justificador.usuario_clave as justificador_clave,
                 facultad.facultad_nombre as justificador_facultad,
                 rol.rol_titulo as justificador_rol,
+                registro.reposicion_id,
+                reposicion_fecha,
+                reposicion_hora,
+                salon_reposicion.salon as reposicion_salon,
                 CASE WHEN registro_retardo THEN 'warning' ELSE 'primary' END as color
             FROM horarios
             JOIN fechas using (horario_id)
             JOIN horario_profesor using (horario_id)
             JOIN profesor using (profesor_id)
             LEFT JOIN registro USING (horario_id, registro_fecha_ideal, profesor_id)
+            LEFT JOIN reposicion USING (reposicion_id)
+            LEFT JOIN salon as salon_reposicion ON salon_reposicion.salon_id = reposicion.salon_id
             join estado_supervisor ON estado_supervisor.estado_supervisor_id = COALESCE(registro.estado_supervisor_id, 0)
             LEFT JOIN USUARIO ON USUARIO.usuario_id = REGISTRO.supervisor_id
             LEFT JOIN USUARIO JUSTIFICADOR ON JUSTIFICADOR.usuario_id = REGISTRO.justificador_id

+ 30 - 16
action/rutas_salón_horario.php

@@ -1,4 +1,8 @@
 <?
+ini_set('display_errors', 1);
+ini_set('display_startup_errors', 1);
+error_reporting(E_ALL);
+
 #input $_GET['id_espacio_sgu']
 $information = [
     'GET' => [
@@ -6,6 +10,7 @@ $information = [
         'bloque_horario_id',
     ],
 ];
+
 #output rutas: [ ...ruta, salones: [{...salon}] ]
 header('Content-Type: application/json charset=utf-8');
 $ruta = "../";
@@ -28,7 +33,6 @@ try {
             ->where("{$_GET['id_espacio_sgu']} = ANY(id_espacio_sgu_array)")
             ->get('salon_view', columns: 'id_espacio_sgu, salon, salon_id, salon_array');
 
-        // step 3: get horario
         $columns = [
             // horario
             'horario_view.horario_id',
@@ -56,7 +60,7 @@ try {
             'reposicion_hora',
             'salon_reposicion.salon as reposicion_salon',
         ];
-        $fecha = "'2023-09-01'::DATE";
+
         $data = array_map(
             fn($ruta) => array_merge(
                 [
@@ -66,24 +70,34 @@ try {
                         ->join('salon_view', 'salon_view.salon_id = horario_view.salon_id')
                         ->join('horario_profesor', 'horario_profesor.horario_id = horario_view.horario_id')
                         ->join('profesor', 'profesor.profesor_id = horario_profesor.profesor_id')
-                        ->join('registro', "(registro.profesor_id, registro.horario_id, registro.registro_fecha_ideal) = (profesor.profesor_id, horario_view.horario_id, $fecha)", 'LEFT')
+                        ->join('registro', '(registro.profesor_id, registro.horario_id, registro.registro_fecha_ideal) = (profesor.profesor_id, horario_view.horario_id, CURRENT_DATE)', 'LEFT')
                         ->join('reposicion', 'reposicion.reposicion_id = registro.reposicion_id', 'LEFT')
                         ->join('salon as salon_reposicion', 'salon_reposicion.salon_id = reposicion.salon_id', 'LEFT')
-                        ->where("$fecha BETWEEN periodo.periodo_fecha_inicio AND periodo.periodo_fecha_fin")
-                        ->where("horario_dia = EXTRACT(DOW FROM $fecha)")
+                        ->where('CURRENT_DATE BETWEEN periodo.periodo_fecha_inicio AND periodo.periodo_fecha_fin')
+                        ->where('horario_dia = EXTRACT(DOW FROM CURRENT_DATE)')
                         ->where('bloque_horario.id', $_GET['bloque_horario_id'])
                         ->where('salon_view.id_espacio_padre', $ruta['id_espacio_sgu'])
-                        ->get('horario_view', columns: $columns),
-                    'reposiciones' => $db
-                        ->join('periodo', 'periodo.periodo_id = horario_view.periodo_id')
-                        ->join('registro', 'registro.horario_id = horario_view.horario_id')
-                        ->join('reposicion', 'registro.reposicion_id = reposicion.reposicion_id')
-                        ->join('bloque_horario', '(bloque_horario.hora_inicio, bloque_horario.hora_fin) OVERLAPS (reposicion_hora, reposicion_hora + horario_view.duracion)')
-                        ->join('profesor', 'profesor.profesor_id = registro.profesor_id')
-                        ->join('salon as salon_reposicion', 'salon_reposicion.salon_id = reposicion.salon_id', 'LEFT')
-                        ->where("$fecha BETWEEN periodo.periodo_fecha_inicio AND periodo.periodo_fecha_fin")
-                        ->where("reposicion_fecha = $fecha")
-                        ->get('horario_view', columns: $columns),
+                        ->get(
+                            'horario_view',
+                            columns: $columns
+                        ),
+                    'query' => $db->getLastQuery(),
+                'reposiciones' => $db
+                    ->join('periodo', 'periodo.periodo_id = horario_view.periodo_id')
+                    ->join('registro', 'registro.horario_id = horario_view.horario_id')
+                    ->join('reposicion', 'registro.reposicion_id = reposicion.reposicion_id')
+                    ->join('bloque_horario', '(bloque_horario.hora_inicio, bloque_horario.hora_fin) OVERLAPS (reposicion_hora, reposicion_hora + horario_view.duracion)')
+                    ->join('profesor', 'profesor.profesor_id = registro.profesor_id')
+                    ->join('salon_view', 'salon_view.salon_id = reposicion.salon_id', 'LEFT')
+                    ->join('salon as salon_reposicion', 'salon_reposicion.salon_id = horario_view.salon_id', 'LEFT')
+                    ->where("CURRENT_DATE BETWEEN periodo.periodo_fecha_inicio AND periodo.periodo_fecha_fin")
+                    ->where("reposicion_fecha = CURRENT_DATE")
+                    ->where('bloque_horario.id', $_GET['bloque_horario_id'])
+                    ->where('salon_view.id_espacio_padre', $ruta['id_espacio_sgu'])
+                    ->get(
+                        'horario_view',
+                        columns: $columns
+                    ),
                 ],
                 $ruta,
             ),

+ 26 - 8
auditoria.php

@@ -271,7 +271,8 @@
                             <td colspan="7" class="text-center">No hay clases en este horario</td>
                         </tr>
                         <tr v-for="registro in store.registros.relevant?.slice((store.current.page - 1) * store.current.perPage, store.current.page * store.current.perPage)"
-                            :key="`${registro.registro_id}-${registro.registro_fecha_ideal}-${registro.horario_id}-${registro.profesor_id}-${registro.salon_id}`">
+                            :key="`${registro.registro_id}-${registro.registro_fecha_ideal}-${registro.horario_id}-${registro.profesor_id}-${registro.salon_id}`"
+                            :class="{ 'table-warning': registro.reposicion_id }">
                             <td class="text-center align-middle px-2">{{ registro.registro_fecha_ideal }}
                             </td>
                             <td class="text-center align-middle px-2">{{ registro.salon }}</td>
@@ -313,7 +314,8 @@
                                             <span class="mr-2" :class="`text-${registro.estado_color}`">
                                                 <i :class="`${registro.estado_icon} ing-2x`"></i>
                                             </span>
-                                            <strong v-if="registro.usuario_nombre">{{ registro.usuario_nombre }}</strong>
+                                            <strong v-if="registro.usuario_nombre">{{ registro.usuario_nombre
+                                                }}</strong>
                                         </div>
                                         <div class="col-12" v-if="registro.registro_fecha_supervisor">
                                             Hora
@@ -452,8 +454,7 @@
                                         </div>
                                         <div class="col-12">
                                             <strong>Horario:</strong>
-                                            {{ clase_vista.horario_hora?.slice(0, 5) }} - {{
-                                            clase_vista.horario_fin?.slice(0, 5) }}
+                                            {{ clase_vista.horario_hora?.slice(0, 5) }} - {{clase_vista.horario_fin?.slice(0, 5) }}
                                         </div>
                                         <div class="col-12">
                                             <strong>Salón:</strong>
@@ -537,6 +538,19 @@
                                             </strong>
                                         </div>
                                 </section>
+
+
+                                <section class="col-12" v-if="clase_vista.reposicion_id">
+                                    <h4 class="h4 mt-4">Reposición</h4>
+
+                                    <div class="row">
+                                        <div class="col-12 text-center">
+                                            Esta clase se reprogramó para el día
+                                            {{ clase_vista.reposicion_fecha }} a las
+                                            {{ clase_vista.reposicion_hora?.slice(0, 5) }}
+                                        </div>
+                                    </div>
+                                </section>
                             </div>
                         </div>
                     </div>
@@ -580,10 +594,14 @@
                                 <br>
                                 <div class="row">
                                     <div class="col-12 text-center">
-                                        Justificar <strong :class="`text-${store.current.justificada.estado_color}`" class="text-uppercase">
-                                            {{store.current.justificada.nombre}}</strong> del día <span class="text-muted">{{store.current.justificada.registro_fecha_ideal}}</span> a
-                                        las <span class="text-muted">{{store.current.justificada.horario_hora?.slice(0,5)}}</span>
-                                        para el profesor <span class="text-muted">{{store.current.justificada.profesor_nombre}}</span>
+                                        Justificar <strong :class="`text-${store.current.justificada.estado_color}`"
+                                            class="text-uppercase">
+                                            {{store.current.justificada.nombre}}</strong> del día <span
+                                            class="text-muted">{{store.current.justificada.registro_fecha_ideal}}</span> a
+                                        las <span
+                                            class="text-muted">{{store.current.justificada.horario_hora?.slice(0,5)}}</span>
+                                        para el profesor <span
+                                            class="text-muted">{{store.current.justificada.profesor_nombre}}</span>
                                     </div>
                                 </div>
                                 <div class="row mt-3">

+ 7 - 4
reposiciones_crear.php

@@ -95,6 +95,11 @@ $fecha_fin_db= date("Y-m-d", strtotime($fecha_fin));
         .wizard.active > div:first-child { background: #00A6CE;  }
         .wizard.active > div:last-child { width: 0px; height: 0px; border-style: solid; border-width: 10px 0 10px 6px; border-color: transparent transparent transparent #00a6ce; transform: rotate(0deg); }
     </style>
+    <script src="js/jquery.min.js"></script>
+    <script src="js/bootstrap/popper.min.js"></script>
+    <script src="js/bootstrap/bootstrap.min.js"></script>
+    <script src="js/jquery-ui.js"></script>
+    <script src="js/datepicker-es.js"></script>
 </head>
 
 
@@ -257,7 +262,7 @@ $fecha_fin_db= date("Y-m-d", strtotime($fecha_fin));
                                                     <li data-id="<?php echo $prof["profesor_id"];?>" <?php if($prof["profesor_id"]==$user->profesor){ echo "class='selected'";} ?> ><?php echo $prof["profesor_nombre"];?></li>
                                                 <?php } ?>
                                             </ul>
-                                            <input type="hidden" id="prof" name="prof" value="<?php echo $id_prof;?>">
+                                            <input type="hidden" id="prof" name="prof" value="">
                                         </div>
                                     </div>
                                 </div>
@@ -360,9 +365,7 @@ $fecha_fin_db= date("Y-m-d", strtotime($fecha_fin));
                                         </div>
                                     </div>
                                 </div>
-                            </div>
-
-                            <div class="form-box form-box-info prof-selected">
+                            
                                 <div class="form-group row materia-block">
                                     <label for="comentario" class="col-4 col-form-label">Comentarios</label> 
                                     <div class="col-8">

+ 18 - 10
supervisor.php

@@ -172,7 +172,7 @@
                                     </div>
                                     <div class="col-12">
                                         <button type="button" class="btn btn-outline-dark btn-sm"
-                                            @click="store.profesor_selected.horario_id = clase.horario_id; store.profesor_selected.profesor_id = clase.profesor_id"
+                                            @click="store.profesor_selected.horario_id = clase.horario_id; store.profesor_selected.profesor_id = clase.profesor_id; store.profesor_selected.es_reposicion = false"
                                             data-toggle="modal" data-target="#ver-detalle">
                                             Ver detalle <i class="ing-ojo"></i>
                                         </button>
@@ -209,8 +209,10 @@
                                     </div>
                                 </td>
                             </tr>
-
-                            <tr v-for="clase in reposiciones" :key="`${clase.horario_id}-${clase.profesor_id}`">
+                            <tr class="table-primary" v-if="reposiciones.length > 0">
+                                <th colspan="5" class="text-center align-middle">Reposiciones</th>
+                            </tr>
+                            <tr v-for="clase in reposiciones" :key="`reposicion-${clase.horario_id}-${clase.profesor_id}`">
                                 <td class="text-center align-middle">{{ clase.salon }}</td>
                                 <td class="text-center align-middle">
                                     <div class="col-12">
@@ -218,18 +220,18 @@
                                     </div>
                                     <div class="col-12">
                                         <button type="button" class="btn btn-outline-dark btn-sm"
-                                            @click="store.profesor_selected.horario_id = clase.horario_id; store.profesor_selected.profesor_id = clase.profesor_id"
+                                            @click="store.profesor_selected.horario_id = clase.horario_id; store.profesor_selected.profesor_id = clase.profesor_id; store.profesor_selected.es_reposicion = true"
                                             data-toggle="modal" data-target="#ver-detalle">
                                             Ver detalle <i class="ing-ojo"></i>
                                         </button>
                                     </div>
                                 <td class="text-center align-middle">
-                                    {{ clase.horario_hora?.slice(0, 5) }} - {{ clase.horario_fin?.slice(0, 5) }}
+                                    {{ clase.reposicion_hora?.slice(0, 5) }} - {{ clase.horario_fin?.slice(0, 5) }}
                                 </td>
                                 <td class="text-center align-middle text-nowrap">
                                     <!-- data-toggle="button" -->
                                     <button class="btn text-center mx-2" v-for="estado in estados" :key="estado.id"
-                                        @click="store.cambiarEstado(clase.horario_id, clase.profesor_id, estado.id === clase.estado_supervisor_id ? null : estado.id)"
+                                        @click="store.cambiarEstado(clase.horario_id, clase.profesor_id, estado.id === clase.estado_supervisor_id ? null : estado.id, true)"
                                         :class="[{'active': estado.id === clase.estado_supervisor_id}, `btn-outline-${estado.color}`]"
                                         :aria-pressed="estado.id === clase.estado_supervisor_id">
                                         <i :class="estado.icon"></i>
@@ -587,9 +589,9 @@
             },
 
             // estado
-            async cambiarEstado(horario_id, profesor_id, estadoId) {
+            async cambiarEstado(horario_id, profesor_id, estadoId, reposicion = false) {
                 const ruta = store.rutas.data.find(ruta => ruta.salon_id == this.rutas.selected);
-                const clase = ruta.horarios.find(clase => clase.horario_id == horario_id && clase.profesor_id == profesor_id);
+                const clase = ruta[reposicion ? 'reposiciones' : 'horarios'].find(clase => clase.horario_id == horario_id && clase.profesor_id == profesor_id);
                 clase.estado_supervisor_id = estadoId;
 
                 try {
@@ -692,6 +694,7 @@
                 return clases;
             },
             get reposiciones() {
+                console.log('Rutas: ', store.rutas.data, store.rutas.selected);
                 const reposiciones = store.rutas.data.find(ruta => ruta.salon_id == store.rutas.selected)?.reposiciones ?? [];
                 return reposiciones;
             },
@@ -783,8 +786,13 @@
 
             },
             get clase_vista() {
-                return this.clases.find(clase => clase.horario_id == store.profesor_selected.horario_id && clase.profesor_id == store.profesor_selected.profesor_id) ?? false;
-            },
+                if (!store.profesor_selected.horario_id || !store.profesor_selected.profesor_id)
+                    return false;
+
+                return store.profesor_selected.es_reposicion
+                    ? this.reposiciones.find(clase => clase.horario_id == store.profesor_selected.horario_id && clase.profesor_id == store.profesor_selected.profesor_id) ?? false
+                    : this.clases.find(clase => clase.horario_id == store.profesor_selected.horario_id && clase.profesor_id == store.profesor_selected.profesor_id) ?? false;
+        },
         }).mount('#app')
     </script>
 </body>