diff --git a/action/action_auditoria copy.php b/action/action_auditoria copy.php new file mode 100644 index 0000000..0604d5d --- /dev/null +++ b/action/action_auditoria copy.php @@ -0,0 +1,197 @@ + 'unauthorized'])); +} +$user = unserialize($_SESSION['user']); + +// check method +try { + if ($_SERVER['REQUEST_METHOD'] === 'GET') { + // pg_send_query($db->getConnection(), "REFRESH MATERIALIZED VIEW CONCURRENTLY PUBLIC.AUDITORIA_MAT"); + $baseDate = $_GET['fecha'] ?? $_GET['fecha_fin'] ?? null; + + $params = [ + // ':periodo_id' => $_GET['periodo_id'] > 0 ? $user->periodo_id : null, + + 'usuario_id' => $user->user['id'], + ]; + + $db->where('usuario_id', $user->user['id'])->delete('last_auditoria'); + + // Define relevant columns + $relevant_columns = [ + 'registro_id', + 'registro_fecha_ideal', + 'horario_id', + 'profesor_id', + 'salon', + 'profesor_clave', + 'profesor_nombre', + 'horario_hora', + 'horario_fin', + 'registro_fecha', + 'color', + 'estado_color', + 'estado_icon', + 'estado_supervisor_id', + 'facultad_id', + 'usuario_nombre', + 'registro_fecha_supervisor', + 'comentario', + 'registro_justificada', + 'justificacion', + 'reposicion_id' + ]; + + $relevant_columns_string = implode(', ', $relevant_columns); + + $_SESSION['fecha_inicio'] = $_GET['fecha'] ?? $_GET['fecha_inicio'] ?? date('Y-m-d'); + $_SESSION['fecha_fin'] = date('Y-m-d H:i:s', strtotime(($baseDate ?? 'now') . ' +24 hours')); + + $periodos = array_column($db->query('SELECT periodo_id FROM periodo WHERE (:fecha_inicio, :fecha_fin) OVERLAPS (periodo_fecha_inicio, periodo_fecha_fin)', [ + 'fecha_inicio' => $_SESSION['fecha_inicio'], + 'fecha_fin' => $_SESSION['fecha_fin'], + ]), 'periodo_id'); + + $daysArray = array_values(array_unique(array_map( + fn(DateTime $date) => (int) $date->format('w'), + iterator_to_array(new DatePeriod( + new DateTime($_SESSION['fecha_inicio']), + new DateInterval('P1D'), + (new DateTime($_SESSION['fecha_fin']))->modify('+1 day') + )) + ))); + $relevant_columns_string = implode(', ', $relevant_columns); + $days_array_string = implode(', ', $daysArray); + $periodos_string = implode(', ', $periodos); + + $data = $db->query( + "WITH horarios AS ( + SELECT horario.horario_id, + horario.facultad_id, + horario.horario_fecha_inicio, + horario.horario_fecha_fin, + horario.horario_grupo, + horario.horario_hora, + salon_view_mat.salon, + salon_view_mat.salon_array, + COALESCE(materia.materia_nombre, materia_asignacion.materia_asignacion_materia) AS materia, + COALESCE(carrera.carrera_nombre, materia_asignacion.materia_asignacion_carrera) AS carrera, + facultad_1.facultad_nombre AS facultad, + nivel.nivel_nombre AS nivel, + horario.horario_fin + FROM horario + LEFT JOIN materia USING (materia_id) + LEFT JOIN carrera USING (carrera_id) + LEFT JOIN materia_asignacion USING (horario_id) + JOIN facultad facultad_1 ON facultad_1.facultad_id = horario.facultad_id + JOIN nivel ON carrera.nivel_id = nivel.nivel_id + JOIN salon_view_mat USING (salon_id) + + WHERE + :fecha_inicio BETWEEN HORARIO_FECHA_INICIO AND COALESCE(HORARIO_FECHA_FIN, CURRENT_DATE) + AND HORARIO_DIA IN ($days_array_string) + AND PERIODO_ID IN ($periodos_string) + AND CARRERA.FACULTAD_ID = COALESCE(:facultad_id, CARRERA.FACULTAD_ID) + + ), fechas AS ( + SELECT fechas_clase(h.horario_id, false) AS registro_fecha_ideal, + h.horario_id + FROM horarios h + ) + SELECT usuario.usuario_id, + usuario.usuario_nombre, + registro.registro_id, + registro.registro_fecha, + registro.registro_retardo, + registro.registro_justificada, + registro.registro_fecha_supervisor, + registro.justificacion, + registro.comentario, + registro.registro_fecha_justificacion, + profesor.profesor_id, + profesor.profesor_nombre, + profesor.profesor_clave, + profesor.profesor_correo, + horarios.horario_id, + horarios.materia, + horarios.carrera, + horarios.facultad_id, + horarios.facultad, + horarios.nivel, + horarios.horario_hora, + horarios.horario_fin, + horarios.horario_grupo, + horarios.salon, + horarios.salon_array, + fechas.registro_fecha_ideal, + estado_supervisor.estado_supervisor_id, + estado_supervisor.nombre, + estado_supervisor.estado_color, + estado_supervisor.estado_icon, + justificador.usuario_nombre AS justificador_nombre, + justificador.usuario_clave AS justificador_clave, + facultad.facultad_nombre AS justificador_facultad, + rol.rol_titulo AS justificador_rol, + registro.reposicion_id, + reposicion.reposicion_fecha, + reposicion.reposicion_hora, + salon_reposicion.salon AS reposicion_salon, + salon_reposicion.salon_array AS reposicion_salon_array, + CASE + WHEN registro.registro_retardo THEN 'warning'::text + ELSE 'primary'::text + 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_view_mat 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 + LEFT JOIN rol ON rol.rol_id = justificador.rol_id + LEFT JOIN facultad ON facultad.facultad_id = justificador.facultad_id + WHERE REGISTRO_FECHA_IDEAL + HORARIO_HORA between :fecha_inicio AND :fecha_fin + ORDER BY registro_fecha_ideal, horario_fin desc", + [ + ':facultad_id' => $user->facultad['facultad_id'], + ':fecha_inicio' => $_SESSION['fecha_inicio'], + ':fecha_fin' => $_SESSION['fecha_fin'], + ] + ); + + echo json_encode($data); + } else { + http_response_code(405); + echo json_encode(['error' => 'method not allowed']); + exit; + } +} catch (PDOException $th) { + http_response_code(500); + echo json_encode([ + 'error' => $th->getMessage(), + // 'query' => $db->getLastQuery(), + ], JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES | JSON_PARTIAL_OUTPUT_ON_ERROR); + exit; +} catch (Exception $th) { + http_response_code(500); + echo json_encode([ + 'error' => $th->getMessage(), + ], JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT); + exit; +} \ No newline at end of file