Redistribución de periodo a periodo_id

This commit is contained in:
2023-08-15 15:58:14 +00:00
parent 60256ec460
commit e1f3d21b83
21 changed files with 762 additions and 1731 deletions

View File

@@ -2,29 +2,24 @@
#input $_GET['id_espacio_sgu'] #input $_GET['id_espacio_sgu']
#output rutas: [ ...ruta, salones: [{...salon}] ] #output rutas: [ ...ruta, salones: [{...salon}] ]
header('Content-Type: application/json charset=utf-8'); header('Content-Type: application/json charset=utf-8');
$information = [ ini_set('display_errors', 1);
'GET' => [ ini_set('display_startup_errors', 1);
#'periodo_id', error_reporting(E_ALL);
],
];
$ruta = "../"; $ruta = "../";
require_once "../class/c_login.php"; require_once $ruta . "class/c_login.php";
if (!isset($_SESSION['user'])) {
http_response_code(401);
die(json_encode(['error' => 'unauthorized']));
}
$user = unserialize($_SESSION['user']);
// check method // check method
try { try {
if ($_SERVER['REQUEST_METHOD'] === 'GET') { if ($_SERVER['REQUEST_METHOD'] === 'GET') {
array_walk($information['GET'], function ($value) {
if (!array_key_exists($value, $_GET)) {
http_response_code(400);
echo json_encode(['error' => "$value is required"]);
exit;
}
});
$data = $db->query( $data = $db->query(
"WITH horarios AS ( "WITH horarios AS (
SELECT * FROM horario_view WHERE (periodo_id, facultad_id) = (:periodo_id, :facultad_id) SELECT * FROM horario_view WHERE (periodo_id, facultad_id) = (:periodo_id, COALESCE(:facultad_id, facultad_id))
), ),
fechas AS ( fechas AS (
SELECT fechas_clase(h.horario_id) as registro_fecha_ideal, h.horario_id SELECT fechas_clase(h.horario_id) as registro_fecha_ideal, h.horario_id
@@ -37,10 +32,11 @@ try {
JOIN profesor using (profesor_id) JOIN profesor using (profesor_id)
LEFT JOIN registro USING (horario_id, registro_fecha_ideal, profesor_id) LEFT JOIN registro USING (horario_id, registro_fecha_ideal, profesor_id)
left join estado_supervisor using (estado_supervisor_id) left join estado_supervisor using (estado_supervisor_id)
LEFT JOIN USUARIO ON USUARIO.usuario_id = REGISTRO.supervisor_id", LEFT JOIN USUARIO ON USUARIO.usuario_id = REGISTRO.supervisor_id
ORDER BY fechas.registro_fecha_ideal DESC, horarios.horario_id, profesor_nombre",
[ [
':periodo_id' => $_GET['periodo_id'], ':periodo_id' => $user->periodo_id,
':facultad_id' => $_GET['facultad_id'], ':facultad_id' => $user->facultad['facultad_id'],
] ]
); );
@@ -53,9 +49,7 @@ try {
http_response_code(405); http_response_code(405);
echo json_encode(['error' => 'method not allowed']); echo json_encode(['error' => 'method not allowed']);
exit; exit;
} }
} catch (PDOException $th) { } catch (PDOException $th) {
http_response_code(500); http_response_code(500);
echo json_encode([ echo json_encode([

View File

@@ -9,19 +9,10 @@ if (!isset($_SESSION['user'])) {
$user = unserialize($_SESSION['user']); $user = unserialize($_SESSION['user']);
$params = array(':id' => $user->user['id'], ':per' => $_POST['id']); $params = array(':id' => $user->user['id'], ':per' => $_POST['id']);
$user->print_to_log('Actualizando periodo from ' . $user->periodo . ' to ' . $_POST['id']); $user->print_to_log('Actualizando periodo from ' . $user->periodo_id . ' to ' . $_POST['id']);
query("SELECT FU_UPDATEPERIODO(:id, :per)", $params); query("SELECT FU_UPDATEPERIODO(:id, :per)", $params);
$user->periodo = $params[':per']; $user->periodo_id = $params[':per'];
# if the user is admin, also update the facultad in user object
if ($user->admin) {
$facultad = query("SELECT FACULTAD_ID id, FACULTAD f FROM FS_PERIODO WHERE ID = :id", [':id' => $user->periodo]);
$user->facultad = array(
'facultad_id' => $facultad["id"],
'facultad' => $facultad["f"],
);
}
$_SESSION['user'] = serialize($user); $_SESSION['user'] = serialize($user);
header("Location: {$_POST["target"]}"); header("Location: {$_POST["target"]}");

44
action/periodo_datos.php Normal file
View File

@@ -0,0 +1,44 @@
<?
#input $_GET['id_espacio_sgu']
#output rutas: [ ...ruta, salones: [{...salon}] ]
header('Content-Type: application/json charset=utf-8');
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);
$ruta = "../";
require_once $ruta . "class/c_login.php";
if (!isset($_SESSION['user'])) {
http_response_code(401);
die(json_encode(['error' => 'unauthorized']));
}
$user = unserialize($_SESSION['user']);
// check method
if ($_SERVER['REQUEST_METHOD'] !== 'GET') {
http_response_code(405);
die(json_encode(['error' => 'method not allowed']));
}
const JSON_OPTIONS = JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES | JSON_PARTIAL_OUTPUT_ON_ERROR;
try {
$data = $db->querySingle("SELECT *, LEAST(periodo_fecha_fin, CURRENT_DATE) as fecha_final FROM periodo WHERE periodo_id = ?", array($user->periodo_id));
$last_query = [
'query' => $db->getLastQuery(),
];
echo json_encode($data, JSON_OPTIONS);
} catch (PDOException $th) {
http_response_code(500);
echo json_encode([
'error' => $th->getMessage(),
'query' => $db->getLastQuery(),
], JSON_OPTIONS);
exit;
} catch (Exception $th) {
http_response_code(500);
echo json_encode([
'error' => $th->getMessage(),
], JSON_OPTIONS);
exit;
}

View File

@@ -41,7 +41,7 @@ $user->print_to_log('Consultar: Alta de horario');
<div class="form-group"> <div class="form-group">
<div class="form-box"> <div class="form-box">
<?php <?php
$periodo = $db->where('id', $user->periodo)->getOne('fs_periodo'); $periodo = $db->where('id', $user->periodo_id)->getOne('fs_periodo');
$carreras = $db $carreras = $db
->where('nivel', $periodo['nivel_id']) ->where('nivel', $periodo['nivel_id'])
->where('facultad', $user->facultad['facultad_id']) ->where('facultad', $user->facultad['facultad_id'])
@@ -236,7 +236,7 @@ require_once("js/messages.php")
formData.append('carrera', carrera); formData.append('carrera', carrera);
formData.append('facultad', facultad); formData.append('facultad', facultad);
formData.append('periodo', <?= $user->periodo ?>); formData.append('periodo', <?= $user->periodo_id ?>);
formData.append('data', JSON.stringify(datum)); formData.append('data', JSON.stringify(datum));

View File

@@ -13,6 +13,9 @@
display: none; display: none;
} }
</style> </style>
<script src="js/jquery.min.js"></script>
<script src="js/jquery-ui.js"></script>
<script src="js/bootstrap/bootstrap.min.js"></script>
</head> </head>
<body> <body>
@@ -25,18 +28,39 @@
"Sistema de gestión de checador", "Sistema de gestión de checador",
); );
?> ?>
<? if (!$user->periodo_id) { ?>
<script defer src="js/jquery.min.js"></script>
<script src="js/bootstrap/bootstrap.min.js"></script>
<div class="modal" id="seleccionar-periodo" tabindex="-1">
<div class="modal-dialog modal-dialog-centered modal-xl">
<div class="modal-content">
<div class="modal-header">
<h2 class="modal-title">Seleccionar periodo</h2>
</div>
<div class="modal-body container">
<? include 'import/periodo.php' ?>
</div>
</div>
</div>
</div>
<script>
$('#seleccionar-periodo').modal({
backdrop: 'static',
keyboard: false,
});
$('#seleccionar-periodo').modal('show');
</script>
<? exit;
} ?>
<main class="container-fluid px-4 mt-4" id="app" v-cloak @vue:mounted="mounted"> <main class="container-fluid px-4 mt-4" id="app" v-cloak @vue:mounted="mounted">
<!-- <div class="alert alert-success" role="alert"> <!-- {{ store }} -->
<h4 class="alert-heading">Well done!</h4>
<p>Aww yeah, you successfully read this important alert message. This example text is going to run a bit
longer so that you can see how spacing within an alert works with this kind of content.</p>
<hr>
<p class="mb-0">Whenever you need to, be sure to use margin utilities to keep things nice and tidy.</p>
</div> -->
<form action="">
<?php include "import/periodo.php" ?> <?php include "import/periodo.php" ?>
<div class="form-box"> <div class="form-box">
<div class="form-group row"> <div class="form-group row">
<? if (!$user->facultad['facultad_id']) { ?>
<label for="dlFacultad" class="col-4 col-form-label">Facultad</label> <label for="dlFacultad" class="col-4 col-form-label">Facultad</label>
<div class="col-6"> <div class="col-6">
<div id="dlFacultad" class="datalist datalist-select mb-1 w-100"> <div id="dlFacultad" class="datalist datalist-select mb-1 w-100">
@@ -56,6 +80,7 @@
<input type="hidden" id="facultad_id" name="id"> <input type="hidden" id="facultad_id" name="id">
</div> </div>
</div> </div>
<? } ?>
</div> </div>
<div class="form-group row align-items-center"> <div class="form-group row align-items-center">
<label for="switchFecha" class="col-4 col-form-label"> <label for="switchFecha" class="col-4 col-form-label">
@@ -70,8 +95,7 @@
<div class="col-3" v-if="store.filters.switchFecha"> <div class="col-3" v-if="store.filters.switchFecha">
<div class="form-row"> <div class="form-row">
<input id="fecha_inicio" name="fecha_inicio" class="form-control date-picker" <input id="fecha_inicio" name="fecha_inicio" class="form-control date-picker"
placeholder="Seleccione una fecha de inicio" readonly placeholder="Seleccione una fecha de inicio" readonly v-model="store.filters.fecha_inicio">
v-model="store.filters.fecha_inicio">
</div> </div>
</div> </div>
<div class="col-3" v-if="store.filters.switchFecha"> <div class="col-3" v-if="store.filters.switchFecha">
@@ -145,11 +169,21 @@
</datalist> </datalist>
</div> </div>
</div> </div>
<div class="form-group row"> <div class="form-group row align-items-center">
<label for="dlAsistencia" class="col-4 col-form-label">Asistencia</label> <label for="sin_registro" class="col-4 col-form-label">
{{store.filters.sin_registro ? 'Sin registro' : 'Asistencia'}}
<!-- switch -->
<div class="custom-control custom-switch">
<input type="checkbox" class="custom-control-input" id="sin_registro"
v-model="store.filters.sin_registro"
@input="disableDatalist('#estado_id', !store.filters.sin_registro)">
<label class="custom-control-label" for="sin_registro"></label>
</div>
</label>
<div class="col-6"> <div class="col-6">
<div class="form-row justify-content-around align-items-center"> <div class="form-row justify-content-around align-items-center">
<div id="dlAsistencia" class="datalist datalist-select mb-1 w-100"> <div id="dlAsistencia" :class="{'d-none': store.filters.sin_registro}"
class="datalist datalist-select mb-1 w-100">
<div class="datalist-input" id="estados">Selecciona un estado de asistencia</div> <div class="datalist-input" id="estados">Selecciona un estado de asistencia</div>
<span class="ing-buscar icono"></span> <span class="ing-buscar icono"></span>
<ul style="display:none"> <ul style="display:none">
@@ -162,18 +196,31 @@
@click="store.filters.estados = store.toggle(store.filters.estados, estado.estado_supervisor_id); setTimeout(store.estados.printEstados, 0); store.current.page = 1;" @click="store.filters.estados = store.toggle(store.filters.estados, estado.estado_supervisor_id); setTimeout(store.estados.printEstados, 0); store.current.page = 1;"
:class="{'selected': store.filters.estados.includes(estado.estado_supervisor_id)}"> :class="{'selected': store.filters.estados.includes(estado.estado_supervisor_id)}">
<span class="badge" <span class="badge"
:class="`badge-${store.filters.estados.includes(estado.estado_supervisor_id) ? 'dark' : estado.estado_color}`"><i :class="`badge-${store.filters.estados.includes(estado.estado_supervisor_id) ? 'dark' : estado.estado_color}`">
:class="estado.estado_icon"></i> {{estado.nombre}}</span> <i :class="estado.estado_icon"></i> {{estado.nombre}}
</span>
</li> </li>
</ul> </ul>
<input type="hidden" id="estado_id" name="estado_id"> <input type="hidden" id="estado_id" name="estado_id">
</div> </div>
<div id="dlAsistencia" :class="{'d-none': !store.filters.sin_registro}"
class="datalist datalist-select mb-1 w-100">
<div class="datalist-input" id="estados">
<span class="badge badge-dark">
<i class="ing-cancelar mr-3"></i>
<span class="text-uppercase">
Sin registro
</span>
</span>
</div>
</div>
</div> </div>
</div> </div>
</div> </div>
</div> </div>
</form>
<div class="mt-3 d-flex justify-content-center flex-wrap"> <div class="mt-3 d-flex justify-content-center flex-wrap">
<!-- botón descargar --> <!-- botón descargar -->
@@ -471,14 +518,12 @@
</div> </div>
</div> </div>
</main> </main>
<script src="js/jquery.min.js"></script>
<script src="js/jquery-ui.js"></script>
<script src="js/bootstrap/bootstrap.min.js"></script>
<!-- <script src="js/datalist.js"></script> --> <!-- <script src="js/datalist.js"></script> -->
<script src="js/datepicker-es.js"></script> <script src="js/datepicker-es.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/FileSaver.js/2.0.5/FileSaver.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/FileSaver.js/2.0.5/FileSaver.min.js"></script>
<script src="js/auditoría.js" type="module"></script> <script src="js/auditoría.js" type="module"></script>
<script src="js/scrollables.js"></script>
</body> </body>
</html> </html>

View File

@@ -19,7 +19,7 @@ require_once($ruta ?? '') . "vendor/autoload.php";
class Login class Login
{ {
public string $acceso; public string $acceso;
public function __construct(public array $user, public array $facultad, public array $rol, public bool $admin, public ?int $periodo, public bool $supervisor, public bool $jefe_carrera, public bool $profesor) public function __construct(public array $user, public array $facultad, public array $rol, public bool $admin, public ?int $periodo_id, public bool $supervisor, public bool $jefe_carrera, public bool $profesor)
{ {
} }
public function print_to_log(string $desc, array $old = null, array $new = null): void public function print_to_log(string $desc, array $old = null, array $new = null): void
@@ -128,7 +128,7 @@ class Login
// CREATE A COOKIE FOR THE REST OF THE day for example: 23:00 then duration will be 1 hour // CREATE A COOKIE FOR THE REST OF THE day for example: 23:00 then duration will be 1 hour
setcookie("profesor", $user["id"], strtotime('today midnight') + 86400, "/"); setcookie("profesor", $user["id"], strtotime('today midnight') + 86400, "/");
return new Login($user, $facultad, $rol, admin: false, periodo: null, supervisor: false, jefe_carrera: false, profesor: true); return new Login($user, $facultad, $rol, admin: false, periodo_id: null, supervisor: false, jefe_carrera: false, profesor: true);
} else } else
return [ return [
'error' => true, 'error' => true,

File diff suppressed because it is too large Load Diff

395
consultar_horario_old.php Normal file
View File

@@ -0,0 +1,395 @@
<?php
require_once 'class/c_login.php';
if (!isset($_SESSION['user']))
die(header('Location: index.php'));
$user = unserialize($_SESSION['user']);
$user->access();
if (!$user->admin && in_array($user->acceso, ['n']))
die(header('Location: main.php?error=1'));
$user->print_to_log('Consultar horario');
$write = $user->admin || in_array($user->acceso, ['w']);
// var_dump($user);
?>
<!DOCTYPE html>
<html lang="en">
<head>
<title>Consultar horario |
<?= $user->facultad['facultad'] ?? 'General' ?>
</title>
<meta charset="utf-8">
<meta http-equiv="content-type" content="text/plain; charset=UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<?php include_once "import/html_css_files.php"; ?>
</head>
<!-- -->
<body style="display: block;">
<?php
include('include/constantes.php');
include("import/html_header.php");
html_header("Consultar horario", "Sistema de gestión de checador");
?>
<?= "<!-- $user -->" ?>
<main class="container content marco content-margin" id="local-app">
<section id="message"></section>
<?php require('import/periodo.php') ?>
<!-- Nuevo horario -->
<form>
<div class="form-group">
<div class="form-box">
<?php
#$carreras = query("SELECT * FROM FS_CARRERA WHERE FACULTAD = :fac AND PERIODO = COALESCE(:per, PERIODO) ORDER BY CARRERA", [":fac" => $user->facultad['facultad_id'], ":per" => $user->periodo_id], single: false);
// repliaction of the query in the database with database class
$nivel = $user->periodo_id ? $db->where('id', $user->periodo_id)->getOne('fs_periodo') : false;
$carreras = $nivel ? $db
->orderBy('carrera')
->where('facultad', $nivel['facultad_id'])
->where('nivel', $nivel['nivel_id'])
->get('fs_carrera', 100, 'id, carrera') : [];
?>
<div class="form-group row">
<label for="filter_carrera" class="col-4 col-form-label">Carrera</label>
<div class="col-6 ">
<div id="dlcarrera" class="datalist datalist-select mb-1 w-100">
<div class="datalist-input">Seleccionar carrera</div>
<span class="ing-buscar icono"></span>
<ul style="display:none">
<?php
foreach ($carreras as $carrera) {
?>
<li data-id="<?= $carrera['id'] ?>">
<?= $carrera['carrera'] ?>
</li>
<?php
}
?>
</ul>
<input type="hidden" id="filter_carrera" name="carrera" value="">
</div>
</div>
</div>
<!-- Grupo -->
<div class="form-group row">
<label for="filter_grupo" class="col-4 col-form-label">Grupo</label>
<div class="col-6 ">
<div id="dlgrupo" class="datalist datalist-select mb-1 w-100">
<div class="datalist-input">Seleccionar grupo</div>
<span class="ing-buscar icono"></span>
<ul style="display:none">
</ul>
<input type="hidden" id="filter_grupo" name="grupo" value="">
</div>
</div>
</div>
<div class="form-group mt-4 row justify-content-center">
<?php if ($write) { ?>
<button type="button" id="nuevo" class="btn btn-outline-primary ml-4 d-none"
title="Nuevo horario" data-toggle="modal" data-target="#modal-editar">
<span class="ing-mas ing-fw"></span> Nuevo
</button>
<?php } ?>
</div>
</div>
</div>
</form>
<!-- Horario is a (table with one a cell) within a table
7:15 - 8:45, 8:45 - 10:15, 10:30 - 12:00, 12:00 - 13:30
de lunes a viernes, a excepción de que tenga sábado
-->
<div id="btn-excel-horario" class="mb-2 float-right hidden">
<button class="btn btn-outline-secondary " title="Exportar a Excel">
<span class="ing-descarga ing-fw"></span> Exportar a Excel
</button>
</div>
<!-- Table responsive -->
<div class="table-responsive">
<table class="table table-bordered table-sm table-responsive-sm" id="table-horario">
<thead class="thead-dark">
<tr id="headers">
<th scope="col" class="text-center">Hora</th>
<th scope="col" class="text-center">Lunes</th>
<th scope="col" class="text-center">Martes</th>
<th scope="col" class="text-center">Miércoles</th>
<th scope="col" class="text-center">Jueves</th>
<th scope="col" class="text-center">Viernes</th>
<th scope="col" class="text-center">Sábado</th>
</tr>
</thead>
<tbody id="horario"></tbody>
</table>
</div>
<div class="modal fade" id="modal-editar" tabindex="-1" aria-labelledby="modal-editar" aria-hidden="true"
data-backdrop="static" data-keyboard="false">
<div class="modal-dialog modal-dialog-centered modal-lg">
<div class="modal-content">
<div class="modal-header">
<h5 class="col-12 modal-title text-center">Horario
<button type="button" class="close text-white" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">&times;</span>
</button>
</h5>
</div>
<div class="modal-body">
<section id="message_editar"></section>
<!-- Hora inicio CLOCKPICKER -->
<div class="form-box">
<div class="form-group row">
<label for="dli-grupo" class="col-4 col-form-label">Grupo</label>
<div class="col-6">
<div id="grupoModal" class="datalist datalist-select mb-1 w-100">
<div class="datalist-input text-center"></div>
<span class="ing-buscar icono"></span>
<ul style="display:none">
<li data-id="" class="text-center">Nuevo grupo</li>
</ul>
<input type="hidden" name="dli-grupo" id="dli-grupo" value="" />
</div>
</div>
</div>
<div class="form-grupo row mb-3">
<div class="col-4"></div>
<div class="col-6">
<input type="text" id="grupo" name="grupo" value="" class="form-control"
placeholder="Grupo" required="required" hidden>
<div class="invalid-feedback">
Por favor, ingrese un grupo.
</div>
</div>
</div>
<div class="form-group row">
<label for="materia" class="col-4 col-form-label">Materia</label>
<div class="col-6">
<input list="lista_materias" name="dlMateria" id="dlMateria"
class="form-control text-center" placeholder="Materia" required="required">
<datalist id="lista_materias"></datalist>
<input type="hidden" id="materia" name="materia" value="">
<div class="invalid-feedback">
Por favor, seleccione una materia.
</div>
</div>
</div>
<div class="form-group row">
<label for="editor_hora" class="col-4 col-form-label">Hora</label>
<div class="col-3">
<div id="dlhora" class="datalist datalist-select mb-1">
<div class="datalist-input text-center"></div>
<span class="ing-buscar icono"></span>
<ul style="display:none">
<?php foreach (range(7, 21) as $hora) { ?>
<li data-id='<?= $hora ?>'><?= str_pad($hora, 2, "0", STR_PAD_LEFT) ?></li>
<?php } ?>
</ul>
<input type="hidden" id="selector_horas" name="horas" value="">
</div>
</div>
<div class="col-3">
<div id="dlminuto" class="datalist datalist-select mb-1">
<div class="datalist-input text-center"></div>
<span class="ing-buscar icono"></span>
<ul style="display:none">
<?php foreach (range(0, 45, 15) as $minuto) { ?>
<li data-id='<?= $minuto ?>'><?= str_pad($minuto, 2, "0", STR_PAD_LEFT) ?>
</li>
<?php } ?>
</ul>
<input type="hidden" id="selector_minutos" name="minutos" value="">
</div>
</div>
</div>
<!-- Día -->
<div class="form-group row">
<label for="editor_dia" class="col-4 col-form-label">Día</label>
<div class="col-6 ">
<div id="dldia" class="datalist datalist-select mb-1 w-100">
<div class="datalist-input">Seleccionar día</div>
<span class="ing-buscar icono"></span>
<ul style="display:none">
<li data-id="1">Lunes</li>
<li data-id="2">Martes</li>
<li data-id="3">Miércoles</li>
<li data-id="4">Jueves</li>
<li data-id="5">Viernes</li>
<li data-id="6">Sábado</li>
</ul>
<input type="hidden" id="editor_dia" name="dia" value="">
</div>
</div>
</div>
<!-- Duración -->
<div class="form-group row">
<label for="editor_duración" class="col-4 col-form-label">Duración</label>
<div class="col-6 ">
<div id="dlduración" class="datalist datalist-select mb-1 w-100">
<div class="datalist-input">Seleccionar duración</div>
<span class="ing-buscar icono"></span>
<ul style="display:none">
<?php
$duraciones = $db->orderBy('duracion_bloques')->get("duracion");
foreach ($duraciones as $duración) {
$nombre = $duración['duracion_nombre'];
$id = $duración['duracion_id'];
$bloques = $duración['duracion_bloques'];
?>
<li data-id="<?= $id; ?>" data-bloques="<?= $bloques; ?>"><?= $nombre; ?>
</li>
<?php
}
?>
</ul>
<input type="hidden" id="editor_duración" name="duración" value="">
</div>
<div class="invalid-feedback">
La duración supera el límite (22:00).
</div>
</div>
</div>
<!-- Profesor -->
<div class="form-group row">
<label for="editor_profesor" class="col-4 col-form-label">Profesor</label>
<div class="col-6">
<input list="lista_profesores" name="dlProfesor" id="dlProfesor"
class="form-control" placeholder="Profesor" required="required">
<div class="valid-feedback">
Profesor encontrado
</div>
<div class="invalid-feedback">
Profesor no encontrado
</div>
<datalist id="lista_profesores">
<?php
$profesores = $db->get("profesor");
foreach ($profesores as $profesor) {
?>
<option data-clave="<?= $profesor['profesor_clave'] ?>" data-profesor="<?= $profesor['profesor_nombre'] ?>" data-id="<?= $id; ?>" value="<?= "{$profesor['profesor_clave']} | {$profesor['profesor_grado']} {$profesor['profesor_nombre']}" ?>"></option>
<?php
}
?>
</datalist>
<ul class="list-group" id="profesores"></ul>
<input type="hidden" id="editor_profesor" name="profesor" value="">
</div>
</div>
<!-- Salón -->
<div class="form-group row">
<label for="editor_salón" class="col-4 col-form-label">Salón</label>
<div class="col-6">
<input type="text" class="form-control" id="editor_salón" name="salón"
placeholder="Salón" maxlength="100" required="required">
<div class="invalid-feedback">
El salón no puede estar vacío.
</div>
</div>
</div>
</div>
</div>
<div class="modal-footer">
<button data-id="" type="button" class="btn btn-primary" id="btn-guardar"><i
class="ing-guardar ing"></i> Guardar</button>
<button type="button" class="btn btn-outline-primary" data-dismiss="modal">Cancelar</button>
</div>
</div>
</div>
</div>
<div class="modal" id="modal-borrar" tabindex="-1" aria-labelledby="modal-borrar" aria-hidden="true">
<div class="modal-dialog modal-dialog-centered modal-lg">
<div class="modal-content">
<div class="modal-header">
<h5 class="col-12 modal-title text-center">Horario
<button type="button" class="close text-white" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">&times;</span>
</button>
</h5>
</div>
<div class="modal-body text-center">
<h5>¿Está seguro de eliminar el horario?</h5>
<div class="form-group mt-4 row justify-content-center" style="gap: 1rem;">
<button id="btn-borrar" type="button" class="btn btn-danger">
<i class="ing-borrar ing"></i>
Borrar
</button>
<button type="button" class="btn btn-secondary" data-dismiss="modal">Cancelar</button>
</div>
</div>
</div>
</div>
</div>
<div class="modal fade" id="modal-choose" tabindex="-1" aria-labelledby="modal-choose" aria-hidden="true">
<div class="modal-dialog modal-dialog-centered modal-lg">
<div class="modal-content">
<div class="modal-header">
<h5 class="col-12 modal-title text-center">Seleccionar horarios en conflicto
<button type="button" class="close text-white" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">&times;</span>
</button>
</h5>
</div>
<div class="modal-body">
<div class="row">
<div class="col-12">
<div class="alert alert-danger" role="alert">
<h4 class="alert-heading">
<i class="ing-importante ing"></i>
¡Atención!
</h4>
<p>Los siguientes horarios tienen conflicto con el horario que intenta guardar.</p>
</div>
</div>
</div>
<div class="row">
<div class="col-12">
<div class="table-responsive">
<table class="table table-striped table-hover">
<thead>
<tr>
<th scope="col">Hora</th>
<th scope="col">Materia</th>
<th scope="col">Profesores</th>
<th scope="col">Salón</th>
<?php if ($write == "true") { ?>
<th class="text-center" scope="col">Editar</th>
<th class="text-center" scope="col">Borrar</th>
<?php } ?>
</tr>
</thead>
<tbody id="conflictos">
</tbody>
</table>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</main>
</body>
<?php
require_once("import/html_footer.php");
?>
<script src="js/scrollables.js"></script>
</script>
</html>

View File

@@ -39,7 +39,7 @@ if (!$user->admin && in_array($user->acceso, ['r', 'n'])) {
<div class="form-group"> <div class="form-group">
<div class="form-box"> <div class="form-box">
<?php <?php
$carreras = query("SELECT * FROM FS_CARRERA WHERE FACULTAD = COALESCE(:fac, FACULTAD) AND PERIODO = COALESCE(:per, PERIODO) ORDER BY CARRERA", [":fac" => $user->facultad['facultad_id'], ":per" => $user->periodo], single: false); $carreras = query("SELECT * FROM FS_CARRERA WHERE FACULTAD = COALESCE(:fac, FACULTAD) AND PERIODO = COALESCE(:per, PERIODO) ORDER BY CARRERA", [":fac" => $user->facultad['facultad_id'], ":per" => $user->periodo_id], single: false);
#die(print_r($carreras, true)); #die(print_r($carreras, true));
?> ?>
<div class="form-group row"> <div class="form-group row">

View File

@@ -50,7 +50,7 @@ $write = $user->admin || in_array($user->acceso, ['w']);
<form id="form" class="form-horizontal"> <form id="form" class="form-horizontal">
<div class="form-group"> <div class="form-group">
<div class="form-box"> <div class="form-box">
<input type="hidden" name="periodo" value="<?= $user->periodo ?>" /> <input type="hidden" name="periodo" value="<?= $user->periodo_id ?>" />
<div class="form-group row"> <div class="form-group row">
<label for="clave_profesor" class="col-4 col-form-label">Profesor</label> <label for="clave_profesor" class="col-4 col-form-label">Profesor</label>
<div class="col-6"> <div class="col-6">
@@ -73,7 +73,7 @@ $write = $user->admin || in_array($user->acceso, ['w']);
?> ?>
</datalist> </datalist>
<ul class="list-group" id="profesores"></ul> <ul class="list-group" id="profesores"></ul>
<input type="hidden" id="periodo_id" name="periodo_id" value="<?= $user->periodo ?>"> <input type="hidden" id="periodo_id" name="periodo_id" value="<?= $user->periodo_id ?>">
<input type="hidden" id="profesor_id" name="profesor_id" value=""> <input type="hidden" id="profesor_id" name="profesor_id" value="">
</div> </div>
</div> </div>

View File

@@ -7,7 +7,7 @@ include_once "import/html_forms.php";
<div class="form-box"> <div class="form-box">
<input type="hidden" name="facultad" value="<?= $user->facultad['facultad_id']; ?>"> <input type="hidden" name="facultad" value="<?= $user->facultad['facultad_id']; ?>">
<?php <?php
$periodo = $db->where('id', $user->periodo)->getOne('fs_periodo'); $periodo = $db->where('id', $user->periodo_id)->getOne('fs_periodo');
$carreras = $db $carreras = $db
->where('nivel', $periodo['nivel_id']) ->where('nivel', $periodo['nivel_id'])
->where('facultad', $user->facultad['facultad_id']) ->where('facultad', $user->facultad['facultad_id'])
@@ -81,7 +81,7 @@ include_once "import/html_forms.php";
changeMonth: true, changeMonth: true,
}); });
<?php <?php
$periodo = query("SELECT * FROM FS_PERIODO WHERE ID = :periodo", [":periodo" => $user->periodo]); $periodo = query("SELECT * FROM FS_PERIODO WHERE ID = :periodo", [":periodo" => $user->periodo_id]);
echo "// Período: {$periodo["inicio"]} - {$periodo["fin"]}\n"; echo "// Período: {$periodo["inicio"]} - {$periodo["fin"]}\n";
echo "// Fecha inicial: " . ($fecha_inicial ?? 'n/a') . " - Fecha final: " . ($fecha_final ?? 'n/a') . "\n"; echo "// Fecha inicial: " . ($fecha_inicial ?? 'n/a') . " - Fecha final: " . ($fecha_final ?? 'n/a') . "\n";
?> ?>

View File

@@ -4,18 +4,18 @@ $target = '/checador_otros/admin_checador/reporte_de_asistencias.php';
$id = $_POST['id']; $id = $_POST['id'];
include_once "import/html_forms.php"; include_once "import/html_forms.php";
$carreras = queryAll("SELECT DISTINCT carrera, id, facultad FROM FS_CARRERA WHERE ID IN (SELECT distinct CARRERA_ID FROM FS_HORARIO_BASIC WHERE :id IN (SELECT HORARIO_ID FROM HORARIO_PROFESOR WHERE PROFESOR_ID = :id) AND PERIODO_ID = :per)", [':id' => $id, ':per' => $user->periodo]); $carreras = queryAll("SELECT DISTINCT carrera, id, facultad FROM FS_CARRERA WHERE ID IN (SELECT distinct CARRERA_ID FROM FS_HORARIO_BASIC WHERE :id IN (SELECT HORARIO_ID FROM HORARIO_PROFESOR WHERE PROFESOR_ID = :id) AND PERIODO_ID = :per)", [':id' => $id, ':per' => $user->periodo_id]);
// materia por carrera // materia por carrera
#print_r($carreras); #print_r($carreras);
$materias = queryAll("SELECT DISTINCT * FROM FS_MATERIA WHERE CARRERA = COALESCE(:car, CARRERA) AND ID IN (SELECT distinct materia_id FROM HORARIO WHERE :id IN (SELECT HORARIO_ID FROM HORARIO_PROFESOR WHERE PROFESOR_ID = :id) AND PERIODO_ID = :per) ORDER BY NOMBRE", [":car" => empty($carrera) ? null : $carrera, ':id' => $id, ':per' => $user->periodo]); $materias = queryAll("SELECT DISTINCT * FROM FS_MATERIA WHERE CARRERA = COALESCE(:car, CARRERA) AND ID IN (SELECT distinct materia_id FROM HORARIO WHERE :id IN (SELECT HORARIO_ID FROM HORARIO_PROFESOR WHERE PROFESOR_ID = :id) AND PERIODO_ID = :per) ORDER BY NOMBRE", [":car" => empty($carrera) ? null : $carrera, ':id' => $id, ':per' => $user->periodo_id]);
#exit(); #exit();
$periodo = query("SELECT inicio, fin FROM FS_PERIODO WHERE ID = :per", [':per' => $user->periodo]); $periodo = query("SELECT inicio, fin FROM FS_PERIODO WHERE ID = :per", [':per' => $user->periodo_id]);
?> ?>
<form action="#" method="post" id="form" class="form-horizontal"> <form action="#" method="post" id="form" class="form-horizontal">
<input type="hidden" name="id" value="<?= $id; ?>" /> <input type="hidden" name="id" value="<?= $id; ?>" />
<input type="hidden" name="periodo" value="<?= $user->periodo ?>" /> <input type="hidden" name="periodo" value="<?= $user->periodo_id ?>" />
<input type="hidden" name="facultad" value="<?= $user->facultad['facultad_id'] ?>" /> <input type="hidden" name="facultad" value="<?= $user->facultad['facultad_id'] ?>" />
<input type="hidden" name="clave" value="<?= $profesor['clave'] ?>" /> <input type="hidden" name="clave" value="<?= $profesor['clave'] ?>" />
<div class="form-box"> <div class="form-box">

View File

@@ -1,4 +1,4 @@
<script src="js/jquery.min.js"></script> <!-- <script src="js/jquery.min.js"></script> -->
<form action="action/action_periodousuario_update.php" method="post" id="formaPeriodo"> <form action="action/action_periodousuario_update.php" method="post" id="formaPeriodo">
<div class="row"> <div class="row">
@@ -37,7 +37,7 @@
array_walk($periodos_rs, function ($per) { array_walk($periodos_rs, function ($per) {
global $user; global $user;
?> ?>
<li data-id="<?= $per['periodo_id'] ?>" <?php if ($user->periodo == $per["periodo_id"]) { <li data-id="<?= $per['periodo_id'] ?>" <?php if ($user->periodo_id == $per["periodo_id"]) {
echo 'class="selected"'; echo 'class="selected"';
} ?>> } ?>>
<?= $per['periodo_nombre'] ?> <?= $per['periodo_nombre'] ?>
@@ -55,8 +55,8 @@
</form> </form>
<script src="./js/datalist.js"></script> <script src="./js/datalist.js"></script>
<script defer> <script>
setDatalist('#periodo', <?php echo $user->periodo; ?>) setDatalist('#periodo', <?= $user->periodo_id; ?>)
makeRequiredDatalist("#periodo", true); makeRequiredDatalist("#periodo", true);
$(document).on('click', '#dlPeriodo ul li:not(.not-selectable)', function () { $(document).on('click', '#dlPeriodo ul li:not(.not-selectable)', function () {

View File

@@ -26,14 +26,18 @@ const store = reactive({
profesor: null, profesor: null,
periodo_id: null, periodo_id: null,
bloque_horario: null, bloque_horario: null,
sin_registro: false,
estados: [], estados: [],
switchFecha: false, switchFecha: false,
switchFechas() { async switchFechas() {
const periodo = await fetch('action/periodo_datos.php');
const periodo_data = await periodo.json();
// console.log(`Fecha inicio: ${periodo_data.periodo_fecha_inicio} Fecha fin: ${periodo_data.fecha_final}`);
$(function () { $(function () {
store.filters.fecha_inicio = store.filters.fecha_fin = store.filters.fecha = null; store.filters.fecha_inicio = store.filters.fecha_fin = store.filters.fecha = null;
$("#fecha, #fecha_inicio, #fecha_fin").datepicker({ $("#fecha, #fecha_inicio, #fecha_fin").datepicker({
minDate: -15, minDate: new Date(`${periodo_data.periodo_fecha_inicio}:00:00:00`),
maxDate: new Date(), maxDate: new Date(`${periodo_data.fecha_final}:00:00:00`),
dateFormat: "yy-mm-dd", dateFormat: "yy-mm-dd",
showAnim: "slide", showAnim: "slide",
}); });
@@ -148,6 +152,10 @@ createApp({
perPage: 10, perPage: 10,
*/ */
return this.data.filter((registro) => { return this.data.filter((registro) => {
if (store.filters.sin_registro && !registro.registro_fecha_supervisor)
return true;
else if (store.filters.sin_registro)
return false;
return filters.every((filtro) => { return filters.every((filtro) => {
switch (filtro) { switch (filtro) {
case 'fecha': case 'fecha':
@@ -241,7 +249,7 @@ createApp({
await store.facultades.fetch(); await store.facultades.fetch();
await store.estados.fetch(); await store.estados.fetch();
await store.bloques_horario.fetch(); await store.bloques_horario.fetch();
store.filters.switchFechas(); await store.filters.switchFechas();
$('div.modal#cargando').modal('hide'); $('div.modal#cargando').modal('hide');
} }
}).mount('#app'); }).mount('#app');

View File

@@ -668,7 +668,7 @@ function guardarHorario() {
formData.append("salón", salon); formData.append("salón", salon);
formData.append("profesor", profesor); formData.append("profesor", profesor);
formData.append("duración", data.duración.value); formData.append("duración", data.duración.value);
formData.append("periodo", "<?= $user->periodo ?>"); formData.append("periodo", "<?= $user->periodo_id ?>");
formData.append("materia", materia); formData.append("materia", materia);
formData.append("facultad", "<?= $user->facultad['facultad_id'] ?>"); formData.append("facultad", "<?= $user->facultad['facultad_id'] ?>");
@@ -871,7 +871,7 @@ document.querySelectorAll("#dlcarrera li").forEach(async li => {
// get the data-id from the li element // get the data-id from the li element
const carrera = li.getAttribute("data-id"); const carrera = li.getAttribute("data-id");
const facultad = '<?= $user->facultad['facultad_id'] ?>'; const facultad = '<?= $user->facultad['facultad_id'] ?>';
const periodo = '<?= $user->periodo ?>'; const periodo = '<?= $user->periodo_id ?>';
const formData = new FormData(); const formData = new FormData();
formData.append("carrera", carrera); formData.append("carrera", carrera);

View File

@@ -88,8 +88,8 @@ if (!$user->admin && in_array($user->acceso, ['r', 'n'])) {
$("#scroll-up").hide(); $("#scroll-up").hide();
<?php <?php
if (isset($user->periodo)) { if (isset($user->periodo_id)) {
$periodo = query("SELECT * FROM FS_PERIODO WHERE ID = :periodo", [":periodo" => $user->periodo]); $periodo = query("SELECT * FROM FS_PERIODO WHERE ID = :periodo", [":periodo" => $user->periodo_id]);
echo "// Período: {$periodo["inicio"]} - {$periodo["fin"]}\n"; echo "// Período: {$periodo["inicio"]} - {$periodo["fin"]}\n";
?> ?>
// $periodo format = Y-m-d // $periodo format = Y-m-d

View File

@@ -1,3 +1,59 @@
2023-08-09 12:21:46||2||Permisos||Alejandro Lara 2023-08-09 12:21:46||2||Permisos||Alejandro Lara
2023-08-09 12:21:49||2||Permisos||Alejandro Lara 2023-08-09 12:21:49||2||Permisos||Alejandro Lara
2023-08-09 12:21:54||2||Avisos||Alejandro Lara 2023-08-09 12:21:54||2||Avisos||Alejandro Lara
2023-08-14 11:09:22||1||Consultar horario||Alejandro Rosales
2023-08-14 11:09:45||1||Consultar horario||Alejandro Rosales
2023-08-14 11:10:04||1||Consultar horario||Alejandro Rosales
2023-08-14 11:10:06||1||Consultar horario||Alejandro Rosales
2023-08-14 11:10:07||1||Consultar horario||Alejandro Rosales
2023-08-14 11:10:16||1||Consultar horario||Alejandro Rosales
2023-08-14 11:10:17||1||Consultar horario||Alejandro Rosales
2023-08-14 11:10:18||1||Consultar horario||Alejandro Rosales
2023-08-14 11:10:25||1||Consultar horario||Alejandro Rosales
2023-08-14 11:10:31||1||Consultar horario||Alejandro Rosales
2023-08-14 11:10:40||1||Consultar horario||Alejandro Rosales
2023-08-14 11:10:47||1||Consultar horario||Alejandro Rosales
2023-08-14 11:11:06||1||Consultar horario||Alejandro Rosales
2023-08-14 11:11:55||1||Consultar horario||Alejandro Rosales
2023-08-14 11:12:03||1||Consultar horario||Alejandro Rosales
2023-08-14 11:12:11||1||Consultar horario||Alejandro Rosales
2023-08-14 11:12:47||1||Consultar horario||Alejandro Rosales
2023-08-14 11:12:48||1||Consultar horario||Alejandro Rosales
2023-08-14 11:13:56||1||Consultar horario||Alejandro Rosales
2023-08-14 11:15:08||1||Consultar horario||Alejandro Rosales
2023-08-14 11:15:36||1||Consultar horario||Alejandro Rosales
2023-08-14 11:15:42||1||Consultar horario||Alejandro Rosales
2023-08-14 11:15:45||1||Consultar horario||Alejandro Rosales
2023-08-14 11:16:02||1||Consultar horario||Alejandro Rosales
2023-08-14 11:16:05||1||Consultar horario||Alejandro Rosales
2023-08-14 11:16:09||1||Consultar horario||Alejandro Rosales
2023-08-14 11:20:10||1||Consultar horario||Alejandro Rosales
2023-08-14 11:20:20||1||Consultar horario||Alejandro Rosales
2023-08-14 11:20:27||1||Consultar horario||Alejandro Rosales
2023-08-14 11:20:50||1||Consultar horario||Alejandro Rosales
2023-08-14 11:20:52||1||Consultar horario||Alejandro Rosales
2023-08-14 11:21:04||1||Consultar horario||Alejandro Rosales
2023-08-14 11:21:09||1||Consultar horario||Alejandro Rosales
2023-08-14 11:21:19||1||Consultar horario||Alejandro Rosales
2023-08-14 11:22:29||1||Consultar horario||Alejandro Rosales
2023-08-14 11:26:58||1||Consultar horario||Alejandro Rosales
2023-08-14 11:27:18||1||Consultar horario||Alejandro Rosales
2023-08-14 11:27:36||1||Consultar horario||Alejandro Rosales
2023-08-14 11:31:08||1||Consultar horario||Alejandro Rosales
2023-08-14 11:32:00||1||Consultar horario||Alejandro Rosales
2023-08-14 11:34:08||1||Consultar horario||Alejandro Rosales
2023-08-14 11:34:08||1||Consultar horario||Alejandro Rosales
2023-08-14 11:34:46||1||Consultar horario||Alejandro Rosales
2023-08-14 11:34:46||1||Consultar horario||Alejandro Rosales
2023-08-14 11:35:06||1||Consultar horario||Alejandro Rosales
2023-08-14 11:35:06||1||Consultar horario||Alejandro Rosales
2023-08-14 11:35:10||1||Consultar horario||Alejandro Rosales
2023-08-14 11:35:10||1||Consultar horario||Alejandro Rosales
2023-08-14 11:35:56||1||Consultar horario||Alejandro Rosales
2023-08-14 11:36:06||1||Consultar horario||Alejandro Rosales
2023-08-14 11:36:29||1||Consultar horario||Alejandro Rosales
2023-08-14 11:36:41||1||Consultar horario||Alejandro Rosales
2023-08-14 11:36:47||1||Consultar horario||Alejandro Rosales
2023-08-14 11:36:51||1||Consultar horario||Alejandro Rosales
2023-08-14 11:37:26||1||Consultar horario||Alejandro Rosales
2023-08-14 11:37:39||1||Consultar horario||Alejandro Rosales

View File

@@ -281,7 +281,7 @@ $retardos = query("SELECT FS_HAS_RETARDO(:facultad) r", [":facultad" => $user->f
// Make a form to send the data // Make a form to send the data
submit("vista_profesor.php", { submit("vista_profesor.php", {
id: $(this).attr("id").replace("profesor-", ""), id: $(this).attr("id").replace("profesor-", ""),
periodo: <?= $user->periodo ?>, periodo: <?= $user->periodo_id ?>,
facultad: <?= $user->facultad['facultad_id'] ?>, facultad: <?= $user->facultad['facultad_id'] ?>,
carrera: $('#filter_carrera').val(), carrera: $('#filter_carrera').val(),
clave: $('#filterClave').val().replace(/[a-zA-Z]{2}/, ''), clave: $('#filterClave').val().replace(/[a-zA-Z]{2}/, ''),

View File

@@ -13,8 +13,8 @@ $user->print_to_log('Consultar horario');
$write = $user->admin || in_array($user->acceso, ['w']); $write = $user->admin || in_array($user->acceso, ['w']);
$en_fecha = $db->querySingle("SELECT ESTA_EN_PERIODO(NOW()::DATE, :periodo_id)", [':periodo_id' => $user->periodo])['esta_en_periodo']; $en_fecha = $db->querySingle("SELECT ESTA_EN_PERIODO(NOW()::DATE, :periodo_id)", [':periodo_id' => $user->periodo_id])['esta_en_periodo'];
$periodo_fin = $db->querySingle("SELECT periodo_fecha_fin FROM periodo WHERE periodo_id = :periodo_id", [':periodo_id' => $user->periodo])['periodo_fecha_fin']; $periodo_fin = $db->querySingle("SELECT periodo_fecha_fin FROM periodo WHERE periodo_id = :periodo_id", [':periodo_id' => $user->periodo_id])['periodo_fecha_fin'];
?> ?>
<!DOCTYPE html> <!DOCTYPE html>
<html lang="en"> <html lang="en">
@@ -89,7 +89,7 @@ $periodo_fin = $db->querySingle("SELECT periodo_fecha_fin FROM periodo WHERE per
<?php <?php
$profesores = $db->query('SELECT * FROM fs_profesor A WHERE facultad_id = :facultad_id AND EXISTS ( $profesores = $db->query('SELECT * FROM fs_profesor A WHERE facultad_id = :facultad_id AND EXISTS (
SELECT * FROM horario join HORARIO_PROFESOR ON horario.HORARIO_ID = HORARIO_PROFESOR.horario_id WHERE HORARIO_PROFESOR.profesor_id = A.id AND HORARIO.periodo_id = :periodo_id SELECT * FROM horario join HORARIO_PROFESOR ON horario.HORARIO_ID = HORARIO_PROFESOR.horario_id WHERE HORARIO_PROFESOR.profesor_id = A.id AND HORARIO.periodo_id = :periodo_id
) ORDER BY grado, nombre', [':facultad_id' => $user->facultad['facultad_id'], ':periodo_id' => $user->periodo]); ) ORDER BY grado, nombre', [':facultad_id' => $user->facultad['facultad_id'], ':periodo_id' => $user->periodo_id]);
foreach ($profesores as $profesor) { foreach ($profesores as $profesor) {
extract($profesor); extract($profesor);
@@ -100,7 +100,7 @@ $periodo_fin = $db->querySingle("SELECT periodo_fecha_fin FROM periodo WHERE per
?> ?>
</datalist> </datalist>
<ul class="list-group" id="profesores"></ul> <ul class="list-group" id="profesores"></ul>
<input type="hidden" id="periodo_id" name="periodo_id" value="<?= $user->periodo ?>"> <input type="hidden" id="periodo_id" name="periodo_id" value="<?= $user->periodo_id ?>">
<input type="hidden" id="profesor_id" name="profesor_id" value=""> <input type="hidden" id="profesor_id" name="profesor_id" value="">
</div> </div>
</div> </div>

View File

@@ -1,3 +1,4 @@
import { Alert } from 'bootstrap';
import { createApp, reactive } from 'https://unpkg.com/petite-vue?module' import { createApp, reactive } from 'https://unpkg.com/petite-vue?module'
type Registro = { type Registro = {
@@ -55,15 +56,20 @@ type Bloque_Horario = {
selected: boolean; selected: boolean;
} }
type Periodo = {
type Filter = { created_at: Date;
type: string; estado_id: number;
value: string; fecha_final: Date;
icon: string; id_periodo_sgu: number;
field: string; nivel_id: number;
label: string; periodo_clave: string;
periodo_fecha_fin: Date;
periodo_fecha_inicio: Date;
periodo_id: number;
periodo_nombre: string;
} }
const store = reactive({ const store = reactive({
loading: false, loading: false,
current: { current: {
@@ -91,16 +97,20 @@ const store = reactive({
profesor: null, profesor: null,
periodo_id: null, periodo_id: null,
bloque_horario: null, bloque_horario: null,
sin_registro: false,
estados: [], estados: [],
switchFecha: false, switchFecha: false,
switchFechas() { async switchFechas() {
const periodo = await fetch('action/periodo_datos.php');
const periodo_data = await periodo.json() as Periodo;
// console.log(`Fecha inicio: ${periodo_data.periodo_fecha_inicio} Fecha fin: ${periodo_data.fecha_final}`);
$(function () { $(function () {
store.filters.fecha_inicio = store.filters.fecha_fin = store.filters.fecha = null store.filters.fecha_inicio = store.filters.fecha_fin = store.filters.fecha = null
$("#fecha, #fecha_inicio, #fecha_fin").datepicker({ $("#fecha, #fecha_inicio, #fecha_fin").datepicker({
minDate: -15, minDate: new Date(`${periodo_data.periodo_fecha_inicio}:00:00:00`),
maxDate: new Date(), maxDate: new Date(`${periodo_data.fecha_final}:00:00:00`),
dateFormat: "yy-mm-dd", dateFormat: "yy-mm-dd",
showAnim: "slide", showAnim: "slide",
}); });
@@ -232,8 +242,11 @@ createApp({
perPage: 10, perPage: 10,
*/ */
return this.data.filter((registro: Registro) => { return this.data.filter((registro: Registro) => {
return filters.every((filtro) => {
if (store.filters.sin_registro && !registro.registro_fecha_supervisor) return true
else if (store.filters.sin_registro) return false
return filters.every((filtro) => {
switch (filtro) { switch (filtro) {
case 'fecha': case 'fecha':
return registro.registro_fecha_ideal === store.filters[filtro]; return registro.registro_fecha_ideal === store.filters[filtro];
@@ -269,6 +282,7 @@ createApp({
async descargar() { async descargar() {
store.current.modal_state = 'Generando reporte en Excel...' store.current.modal_state = 'Generando reporte en Excel...'
$('div.modal#cargando').modal('show'); $('div.modal#cargando').modal('show');
this.loading = true; this.loading = true;
if (this.relevant.length === 0) return; if (this.relevant.length === 0) return;
try { try {
@@ -326,7 +340,8 @@ createApp({
await store.facultades.fetch() await store.facultades.fetch()
await store.estados.fetch() await store.estados.fetch()
await store.bloques_horario.fetch() await store.bloques_horario.fetch()
store.filters.switchFechas() await store.filters.switchFechas()
$('div.modal#cargando').modal('hide'); $('div.modal#cargando').modal('hide');
} }
}).mount('#app') }).mount('#app')

View File

@@ -42,7 +42,7 @@ $reporte = queryAll("SELECT * FROM fs_asistencia_profesorreporte(:carrera, :peri
WHERE materia_id = COALESCE(:materia, materia_id)", WHERE materia_id = COALESCE(:materia, materia_id)",
array( array(
":carrera" => empty($carrera) ? null : $carrera, ":carrera" => empty($carrera) ? null : $carrera,
":periodo" => $user->periodo, ":periodo" => $user->periodo_id,
":id" => $id, ":id" => $id,
":initial_date" => $fecha_inicial->format("Y-m-d"), ":initial_date" => $fecha_inicial->format("Y-m-d"),
":final_date" => $fecha_final->format("Y-m-d"), ":final_date" => $fecha_final->format("Y-m-d"),
@@ -58,7 +58,7 @@ $profesor = query(
$asistencias = query("SELECT total, asistencias, retardos, justificaciones FROM fs_asistencia_reporte(:carrera, :periodo, :clave, :nombre, :facultad, :initial_date, :final_date)", $asistencias = query("SELECT total, asistencias, retardos, justificaciones FROM fs_asistencia_reporte(:carrera, :periodo, :clave, :nombre, :facultad, :initial_date, :final_date)",
array( array(
":carrera" => empty($carrera) ? null : $carrera, ":carrera" => empty($carrera) ? null : $carrera,
":periodo" => $user->periodo, ":periodo" => $user->periodo_id,
":clave" => $profesor['clave'], ":clave" => $profesor['clave'],
":nombre" => $profesor['profesor'], ":nombre" => $profesor['profesor'],
":facultad" => $user->facultad['facultad_id'], ":facultad" => $user->facultad['facultad_id'],
@@ -100,7 +100,7 @@ $retardos = query("SELECT FS_HAS_RETARDO(:facultad) AS retardo", array(":faculta
</div> </div>
<div class="row"> <div class="row">
<div class="col-12 text-right"> <div class="col-12 text-right">
<button type="button" class="btn btn-outline-secondary" onclick="submit('reporte_de_asistencias.php', {clave: <?= $profesor['clave'] ?>, periodo: <?= $user->periodo ?>, nombre: '<?= $profesor['profesor'] ?>', fecha_inicial: '<?= $fecha_inicial->format('Y-m-d') ?>', fecha_final: '<?= $fecha_final->format('Y-m-d') ?>'})"> <button type="button" class="btn btn-outline-secondary" onclick="submit('reporte_de_asistencias.php', {clave: <?= $profesor['clave'] ?>, periodo: <?= $user->periodo_id ?>, nombre: '<?= $profesor['profesor'] ?>', fecha_inicial: '<?= $fecha_inicial->format('Y-m-d') ?>', fecha_final: '<?= $fecha_final->format('Y-m-d') ?>'})">
<span class="ing-regresar ing-fw"></span> <span class="ing-regresar ing-fw"></span>
Regresar Regresar
</button> </button>