252 lines
10 KiB
PHP
252 lines
10 KiB
PHP
<style>
|
|
details {
|
|
border: 1px solid #aaa;
|
|
border-radius: 4px;
|
|
padding: 0.5em 0.5em 0;
|
|
margin: 0.5em 0;
|
|
}
|
|
|
|
summary {
|
|
font-weight: bold;
|
|
margin: -0.5em -0.5em 0;
|
|
padding: 0.5em;
|
|
}
|
|
|
|
details[open] {
|
|
padding: 0.5em;
|
|
}
|
|
|
|
details[open] summary {
|
|
border-bottom: 1px solid #aaa;
|
|
margin-bottom: 0.5em;
|
|
}
|
|
|
|
table {
|
|
width: 100%;
|
|
border-collapse: collapse;
|
|
margin: 20px 0;
|
|
}
|
|
|
|
th,
|
|
td {
|
|
padding: 8px;
|
|
border: 1px solid #ccc;
|
|
text-align: left;
|
|
}
|
|
|
|
th {
|
|
background-color: #f2f2f2;
|
|
}
|
|
|
|
tr:nth-child(even):not(.empty):not(.area-comun) {
|
|
background-color: #f9f9f9;
|
|
}
|
|
|
|
.json-container {
|
|
white-space: pre-wrap;
|
|
/* Since JSON is formatted with whitespace, this will keep formatting */
|
|
word-break: break-word;
|
|
/* To prevent horizontal scrolling */
|
|
max-height: 150px;
|
|
/* Set a max-height and add scroll to prevent very long JSON from cluttering the table */
|
|
overflow-y: auto;
|
|
}
|
|
|
|
.empty {
|
|
/* rosa pastel */
|
|
background-color: #ffe8f4;
|
|
}
|
|
|
|
.area-comun {
|
|
/* naranja pastel */
|
|
background-color: #ffe9d4;
|
|
}
|
|
</style>
|
|
<?php
|
|
/*
|
|
idPeriodo: identificador del periodo a consultar (obligatorio, número entero)
|
|
claveFacultad: clave de la facultad a consultar (opcional, cadena)
|
|
claveCarrera: clave de la carrera a consultar (opcional, cadena)
|
|
claveProfesor: clave del empleado a consultar (opcional, cadena)
|
|
fecha: fecha de la clase (opcional, cadena en formato yyyy-MM-dd)
|
|
*/
|
|
ini_set('display_errors', 1);
|
|
ini_set('display_startup_errors', 1);
|
|
ini_set('post_max_size', 1);
|
|
ini_set('max_execution_time', 8 * 60);
|
|
error_reporting(E_ALL);
|
|
date_default_timezone_set('America/Mexico_City');
|
|
|
|
$ruta = "../";
|
|
$ruta_superior = dirname(__DIR__);
|
|
require_once $ruta_superior . "/include/bd_pdo.php";
|
|
require_once __DIR__ . "/token.php";
|
|
require_once __DIR__ . "/LogCambios.php";
|
|
|
|
$fecha = isset($_GET["fecha"]) ? $_GET["fecha"] : date("Y-m-d");
|
|
$periodos = $db
|
|
->where("id_periodo_sgu", 0, ">")
|
|
->where("periodo_fecha_inicio", $fecha, "<=")
|
|
->where("periodo_fecha_fin", $fecha, ">=")
|
|
->orderBy("periodo_id")
|
|
->get("periodo");
|
|
?>
|
|
<nav>
|
|
<form action="" method="get">
|
|
<label for="fecha">Fecha</label>
|
|
<input type="date" name="fecha" id="fecha" value="<?= $fecha ?>">
|
|
<button type="submit">Buscar</button>
|
|
</form>
|
|
<details>
|
|
<summary>Periodos</summary>
|
|
<pre>
|
|
<code><?= json_encode($periodos, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES) ?></code>
|
|
</pre>
|
|
</details>
|
|
<?php
|
|
$horarios = array();
|
|
foreach (array_column($periodos, "id_periodo_sgu") as $idPeriodo) {
|
|
$curl = curl_init();
|
|
$params = array(
|
|
'idPeriodo' => $idPeriodo,
|
|
'fecha' => $fecha,
|
|
);
|
|
curl_setopt_array($curl, [
|
|
CURLOPT_URL => 'https://portal.ulsa.edu.mx/servicios/AuditoriaAsistencialRest/AuditoriaAsistencialService.svc/auditoriaAsistencial/seleccionar',
|
|
CURLOPT_RETURNTRANSFER => true,
|
|
CURLOPT_POSTFIELDS => json_encode($params),
|
|
CURLOPT_HTTPHEADER => [
|
|
"token: $token",
|
|
'username: SGU_APSA_AUD_ASIST',
|
|
'Content-Type: application/json',
|
|
],
|
|
]);
|
|
|
|
$response = curl_exec($curl);
|
|
$err = curl_error($curl);
|
|
|
|
curl_close($curl);
|
|
$response = json_decode($response, true, 512, JSON_THROW_ON_ERROR | JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES);
|
|
$horarios = array_merge($horarios, $response);
|
|
?>
|
|
<details>
|
|
<summary>Periodo
|
|
<?= $idPeriodo ?>
|
|
</summary>
|
|
<pre><code><?= json_encode($response, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES) ?></code></pre>
|
|
</details>
|
|
<?php } ?>
|
|
</nav>
|
|
<main>
|
|
<p>
|
|
<?= count($horarios) ?> horarios encontrados para
|
|
<?= $fecha ?>
|
|
</p>
|
|
<table>
|
|
<thead>
|
|
<tr>
|
|
<th>Materia en SGU</th>
|
|
<th>Materia en Postgres</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<?php
|
|
// $horarios with unique "NombreMateria" field
|
|
$horarios = array_map("unserialize", array_unique(array_map("serialize", $horarios)));
|
|
foreach ($horarios as $horario) {
|
|
$materias = $db
|
|
->where("materia_nombre", trim($horario["NombreMateria"]), "ILIKE")
|
|
->join("carrera", "carrera.carrera_id = materia.carrera_id")
|
|
->join("facultad", "facultad.facultad_id = carrera.facultad_id")
|
|
->get("materia");
|
|
if (
|
|
count(array_filter($materias, fn($m) =>
|
|
$m["clave_materia"] == trim($horario["ClaveMateria"]) and
|
|
$m["clave_carrera"] == trim($horario["ClaveCarrera"]))) > 0
|
|
) {
|
|
continue;
|
|
}
|
|
|
|
// si de las materias alguna tiene carrera_id entre 1 y 4 entonces es de área común
|
|
$area_comun = count(array_filter($materias, fn($m) => $m["carrera_id"] >= 1 and $m["carrera_id"] <= 4)) > 0;
|
|
$vacío = count($materias) == 0;
|
|
?>
|
|
<!-- si es vacío ponle la clase empty y si es área común ponle la clase area-comun -->
|
|
<tr class="<?= $vacío ? "empty" : "" ?> <?= $area_comun ? "area-comun" : "" ?>">
|
|
<td class="json-container">
|
|
<details>
|
|
<summary>Horario</summary>
|
|
<pre><code><?= json_encode($horario, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES) ?></code></pre>
|
|
</details>
|
|
<?= json_encode(array_intersect_key($horario, array_flip(["ClaveMateria", "NombreMateria", "ClaveCarrera", "Dependencia"])), JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES) ?>
|
|
</td>
|
|
<td class="json-container">
|
|
<?php if ($vacío) { ?>
|
|
<p>No se encontraron materias</p>
|
|
<?php } else { ?>
|
|
<details>
|
|
<summary>Materias</summary>
|
|
<pre><code><?= json_encode($materias, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES) ?></code></pre>
|
|
</details>
|
|
<table>
|
|
<thead>
|
|
<tr>
|
|
<th>Materia</th>
|
|
<th>Carrera</th>
|
|
<th>Facultad</th>
|
|
<th>Acciones</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<script>
|
|
async function copiar_seleccionados() {
|
|
// en mi clipboard quiero (join con ,)
|
|
const materias_seleccionadas = Array.from(document.querySelectorAll("input[name='materia_id']:checked"))
|
|
.map(input => input.value)
|
|
.join(",");
|
|
// copiar al clipboard
|
|
await navigator.clipboard.writeText(materias_seleccionadas);
|
|
// mostrar mensaje de éxito
|
|
alert("Copiado al portapapeles");
|
|
}
|
|
</script>
|
|
<?php foreach ($materias as $materia) { ?>
|
|
<tr>
|
|
<td>
|
|
<input type="checkbox" name="materia_id" id="materia_id"
|
|
value="<?= $materia["materia_id"] ?>">
|
|
</td>
|
|
<td>
|
|
<?= $materia["materia_id"] ?>
|
|
<small>
|
|
(
|
|
<?= $materia["clave_materia"] ?>)
|
|
</small>
|
|
<?= $materia["materia_nombre"] ?>
|
|
</td>
|
|
<td>
|
|
<small>
|
|
(
|
|
<?= $materia["clave_carrera"] ?>)
|
|
</small>
|
|
<?= $materia["carrera_nombre"] ?>
|
|
</td>
|
|
<td>
|
|
<small>
|
|
(
|
|
<?= $materia["clave_dependencia"] ?>)
|
|
</small>
|
|
<?= $materia["facultad_nombre"] ?>
|
|
</td>
|
|
</tr>
|
|
<?php } ?>
|
|
</tbody>
|
|
</table>
|
|
<?php } ?>
|
|
</td>
|
|
</tr>
|
|
<?php } ?>
|
|
</tbody>
|
|
</table>
|
|
|
|
</main>
|