Redistribución de periodo a periodo_id
This commit is contained in:
@@ -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([
|
||||||
|
|||||||
@@ -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
44
action/periodo_datos.php
Normal 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;
|
||||||
|
}
|
||||||
@@ -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));
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
275
auditoría.php
275
auditoría.php
@@ -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>
|
<?php include "import/periodo.php" ?>
|
||||||
<p>Aww yeah, you successfully read this important alert message. This example text is going to run a bit
|
<div class="form-box">
|
||||||
longer so that you can see how spacing within an alert works with this kind of content.</p>
|
<div class="form-group row">
|
||||||
<hr>
|
<? if (!$user->facultad['facultad_id']) { ?>
|
||||||
<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" ?>
|
|
||||||
<div class="form-box">
|
|
||||||
<div class="form-group row">
|
|
||||||
<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,124 +80,147 @@
|
|||||||
<input type="hidden" id="facultad_id" name="id">
|
<input type="hidden" id="facultad_id" name="id">
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
<? } ?>
|
||||||
|
</div>
|
||||||
|
<div class="form-group row align-items-center">
|
||||||
|
<label for="switchFecha" class="col-4 col-form-label">
|
||||||
|
{{store.filters.switchFecha ? 'Rango de fechas' : 'Fecha'}}
|
||||||
|
<!-- switch -->
|
||||||
|
<div class="custom-control custom-switch">
|
||||||
|
<input type="checkbox" class="custom-control-input" id="switchFecha"
|
||||||
|
v-model="store.filters.switchFecha" @input="store.filters.switchFechas">
|
||||||
|
<label class="custom-control-label" for="switchFecha"></label>
|
||||||
|
</div>
|
||||||
|
</label>
|
||||||
|
<div class="col-3" v-if="store.filters.switchFecha">
|
||||||
|
<div class="form-row">
|
||||||
|
<input id="fecha_inicio" name="fecha_inicio" class="form-control date-picker"
|
||||||
|
placeholder="Seleccione una fecha de inicio" readonly v-model="store.filters.fecha_inicio">
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="form-group row align-items-center">
|
<div class="col-3" v-if="store.filters.switchFecha">
|
||||||
<label for="switchFecha" class="col-4 col-form-label">
|
<div class="form-row">
|
||||||
{{store.filters.switchFecha ? 'Rango de fechas' : 'Fecha'}}
|
<input id="fecha_fin" name="fecha_fin" class="form-control date-picker"
|
||||||
<!-- switch -->
|
placeholder="Seleccione una fecha final" readonly v-model="store.filters.fecha_fin">
|
||||||
<div class="custom-control custom-switch">
|
|
||||||
<input type="checkbox" class="custom-control-input" id="switchFecha"
|
|
||||||
v-model="store.filters.switchFecha" @input="store.filters.switchFechas">
|
|
||||||
<label class="custom-control-label" for="switchFecha"></label>
|
|
||||||
</div>
|
|
||||||
</label>
|
|
||||||
<div class="col-3" v-if="store.filters.switchFecha">
|
|
||||||
<div class="form-row">
|
|
||||||
<input id="fecha_inicio" name="fecha_inicio" class="form-control date-picker"
|
|
||||||
placeholder="Seleccione una fecha de inicio" readonly
|
|
||||||
v-model="store.filters.fecha_inicio">
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="col-3" v-if="store.filters.switchFecha">
|
|
||||||
<div class="form-row">
|
|
||||||
<input id="fecha_fin" name="fecha_fin" class="form-control date-picker"
|
|
||||||
placeholder="Seleccione una fecha final" readonly v-model="store.filters.fecha_fin">
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
<div class="col-6" v-if="!store.filters.switchFecha">
|
<div class="col-6" v-if="!store.filters.switchFecha">
|
||||||
<div class="form-row">
|
<div class="form-row">
|
||||||
<input id="fecha" name="fecha" class="form-control date-picker"
|
<input id="fecha" name="fecha" class="form-control date-picker"
|
||||||
placeholder="Seleccione una fecha" readonly v-model="store.filters.fecha">
|
placeholder="Seleccione una fecha" readonly v-model="store.filters.fecha">
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="form-group row" v-if="store.bloques_horario.data.length > 0">
|
</div>
|
||||||
<label for="dlBloqueHorarios" class="col-4 col-form-label">Bloque horarios</label>
|
<div class="form-group row" v-if="store.bloques_horario.data.length > 0">
|
||||||
<div class="col-6">
|
<label for="dlBloqueHorarios" class="col-4 col-form-label">Bloque horarios</label>
|
||||||
<div id="dlBloqueHorarios" class="datalist datalist-select mb-1 w-100">
|
<div class="col-6">
|
||||||
<div class="datalist-input">
|
<div id="dlBloqueHorarios" class="datalist datalist-select mb-1 w-100">
|
||||||
Seleccione un bloque horario
|
<div class="datalist-input">
|
||||||
</div>
|
Seleccione un bloque horario
|
||||||
|
</div>
|
||||||
|
<span class="ing-buscar icono"></span>
|
||||||
|
<ul style="display:none">
|
||||||
|
<li class="datalist-option" data-id="0"
|
||||||
|
@click="store.filters.bloque_horario = null; store.current.page = 1;">
|
||||||
|
Todos los bloques horarios
|
||||||
|
</li>
|
||||||
|
</li>
|
||||||
|
<li class="datalist-option not-selectable">
|
||||||
|
Mañana
|
||||||
|
</li>
|
||||||
|
|
||||||
|
<li class="datalist-option"
|
||||||
|
v-for="bloque in store.bloques_horario.data.filter(bloque => bloque.hora_inicio < '13:00:00')"
|
||||||
|
:key="bloque.id" :data-id="bloque.id"
|
||||||
|
@click="store.filters.bloque_horario = bloque.id ; store.current.page = 1;">
|
||||||
|
{{ bloque.hora_inicio.substr(0,5) }} - {{ bloque.hora_fin.substr(0,5) }}
|
||||||
|
</li>
|
||||||
|
<li class="datalist-option not-selectable">
|
||||||
|
Tarde
|
||||||
|
</li>
|
||||||
|
<li class="datalist-option"
|
||||||
|
v-for="bloque in store.bloques_horario.data.filter(bloque => bloque.hora_inicio >= '13:00:00')"
|
||||||
|
:key="bloque.id" :data-id="bloque.id"
|
||||||
|
@click="store.filters.bloque_horario = bloque.id ; store.current.page = 1;">
|
||||||
|
{{ bloque.hora_inicio.substr(0,5) }} - {{ bloque.hora_fin.substr(0,5) }}
|
||||||
|
</li>
|
||||||
|
|
||||||
|
</ul>
|
||||||
|
<input type="hidden" id="bloque_id" name="id">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="form-group row">
|
||||||
|
<label for="profesor" class="col-4 col-form-label">Profesor</label>
|
||||||
|
<div class="col-6">
|
||||||
|
<div class="form-row justify-content-around align-items-center">
|
||||||
|
<input id="profesor" name="profesor" class="form-control col-11 mr-1 px-2"
|
||||||
|
placeholder="Seleccione una profesor" list="dlProfesor" v-model="store.filters.profesor"
|
||||||
|
@input="store.current.page = 1">
|
||||||
|
<button type="button" class="btn btn-info btn-sm form-control col ml-auto"
|
||||||
|
@click="store.filters.profesor = null; store.current.page = 1;">
|
||||||
|
<i class="ing-borrar"></i>
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
<datalist id="dlProfesor">
|
||||||
|
<option v-for="profesor in profesores" :key="profesor.profesor_id"
|
||||||
|
:value="`(${profesor.profesor_clave}) ${profesor.profesor_nombre}`">
|
||||||
|
</datalist>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="form-group row align-items-center">
|
||||||
|
<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="form-row justify-content-around align-items-center">
|
||||||
|
<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>
|
||||||
<span class="ing-buscar icono"></span>
|
<span class="ing-buscar icono"></span>
|
||||||
<ul style="display:none">
|
<ul style="display:none">
|
||||||
<li class="datalist-option" data-id="0"
|
<li class="datalist-option" data-id="0"
|
||||||
@click="store.filters.bloque_horario = null; store.current.page = 1;">
|
@click="store.filters.estados = []; store.current.page = 1;">
|
||||||
Todos los bloques horarios
|
Todos los registros
|
||||||
</li>
|
</li>
|
||||||
|
<li class="datalist-option" v-for="estado in store.estados.data"
|
||||||
|
:key="estado.estado_supervisor_id" :data-id="estado.estado_supervisor_id"
|
||||||
|
@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)}">
|
||||||
|
<span class="badge"
|
||||||
|
:class="`badge-${store.filters.estados.includes(estado.estado_supervisor_id) ? 'dark' : estado.estado_color}`">
|
||||||
|
<i :class="estado.estado_icon"></i> {{estado.nombre}}
|
||||||
|
</span>
|
||||||
</li>
|
</li>
|
||||||
<li class="datalist-option not-selectable">
|
|
||||||
Mañana
|
|
||||||
</li>
|
|
||||||
|
|
||||||
<li class="datalist-option"
|
|
||||||
v-for="bloque in store.bloques_horario.data.filter(bloque => bloque.hora_inicio < '13:00:00')"
|
|
||||||
:key="bloque.id" :data-id="bloque.id"
|
|
||||||
@click="store.filters.bloque_horario = bloque.id ; store.current.page = 1;">
|
|
||||||
{{ bloque.hora_inicio.substr(0,5) }} - {{ bloque.hora_fin.substr(0,5) }}
|
|
||||||
</li>
|
|
||||||
<li class="datalist-option not-selectable">
|
|
||||||
Tarde
|
|
||||||
</li>
|
|
||||||
<li class="datalist-option"
|
|
||||||
v-for="bloque in store.bloques_horario.data.filter(bloque => bloque.hora_inicio >= '13:00:00')"
|
|
||||||
:key="bloque.id" :data-id="bloque.id"
|
|
||||||
@click="store.filters.bloque_horario = bloque.id ; store.current.page = 1;">
|
|
||||||
{{ bloque.hora_inicio.substr(0,5) }} - {{ bloque.hora_fin.substr(0,5) }}
|
|
||||||
</li>
|
|
||||||
|
|
||||||
</ul>
|
</ul>
|
||||||
<input type="hidden" id="bloque_id" name="id">
|
<input type="hidden" id="estado_id" name="estado_id">
|
||||||
</div>
|
</div>
|
||||||
</div>
|
|
||||||
</div>
|
<div id="dlAsistencia" :class="{'d-none': !store.filters.sin_registro}"
|
||||||
<div class="form-group row">
|
class="datalist datalist-select mb-1 w-100">
|
||||||
<label for="profesor" class="col-4 col-form-label">Profesor</label>
|
<div class="datalist-input" id="estados">
|
||||||
<div class="col-6">
|
<span class="badge badge-dark">
|
||||||
<div class="form-row justify-content-around align-items-center">
|
<i class="ing-cancelar mr-3"></i>
|
||||||
<input id="profesor" name="profesor" class="form-control col-11 mr-1 px-2"
|
<span class="text-uppercase">
|
||||||
placeholder="Seleccione una profesor" list="dlProfesor" v-model="store.filters.profesor"
|
|
||||||
@input="store.current.page = 1">
|
Sin registro
|
||||||
<button type="button" class="btn btn-info btn-sm form-control col ml-auto"
|
</span>
|
||||||
@click="store.filters.profesor = null; store.current.page = 1;">
|
</span>
|
||||||
<i class="ing-borrar"></i>
|
|
||||||
</button>
|
|
||||||
</div>
|
|
||||||
<datalist id="dlProfesor">
|
|
||||||
<option v-for="profesor in profesores" :key="profesor.profesor_id"
|
|
||||||
:value="`(${profesor.profesor_clave}) ${profesor.profesor_nombre}`">
|
|
||||||
</datalist>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="form-group row">
|
|
||||||
<label for="dlAsistencia" class="col-4 col-form-label">Asistencia</label>
|
|
||||||
<div class="col-6">
|
|
||||||
<div class="form-row justify-content-around align-items-center">
|
|
||||||
<div id="dlAsistencia" class="datalist datalist-select mb-1 w-100">
|
|
||||||
<div class="datalist-input" id="estados">Selecciona un estado de asistencia</div>
|
|
||||||
<span class="ing-buscar icono"></span>
|
|
||||||
<ul style="display:none">
|
|
||||||
<li class="datalist-option" data-id="0"
|
|
||||||
@click="store.filters.estados = []; store.current.page = 1;">
|
|
||||||
Todos los registros
|
|
||||||
</li>
|
|
||||||
<li class="datalist-option" v-for="estado in store.estados.data"
|
|
||||||
:key="estado.estado_supervisor_id" :data-id="estado.estado_supervisor_id"
|
|
||||||
@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)}">
|
|
||||||
<span class="badge"
|
|
||||||
:class="`badge-${store.filters.estados.includes(estado.estado_supervisor_id) ? 'dark' : estado.estado_color}`"><i
|
|
||||||
:class="estado.estado_icon"></i> {{estado.nombre}}</span>
|
|
||||||
</li>
|
|
||||||
</ul>
|
|
||||||
<input type="hidden" id="estado_id" name="estado_id">
|
|
||||||
</div>
|
</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>
|
||||||
@@ -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
|
||||||
@@ -111,7 +111,7 @@ class Login
|
|||||||
$periodo = $fs_validaclaveulsa["periodo_id"];
|
$periodo = $fs_validaclaveulsa["periodo_id"];
|
||||||
|
|
||||||
return new Login($user, $facultad, $rol, $admin, $periodo, $supervisor, $jefe_carrera, false);
|
return new Login($user, $facultad, $rol, $admin, $periodo, $supervisor, $jefe_carrera, false);
|
||||||
} else if ($db->where('profesor_clave', preg_replace('/^do0*/', '', $user), 'ilike')->has("profesor")) {
|
} else if ($db->where('profesor_clave', preg_replace('/^do0*/', '', $user), 'ilike')->has("profesor")) {
|
||||||
$profesor = $db->where('profesor_clave', preg_replace('/^do0*/', '', $user), 'ilike')->getOne("profesor");
|
$profesor = $db->where('profesor_clave', preg_replace('/^do0*/', '', $user), 'ilike')->getOne("profesor");
|
||||||
$user = array(
|
$user = array(
|
||||||
'id' => $profesor["profesor_clave"],
|
'id' => $profesor["profesor_clave"],
|
||||||
@@ -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
395
consultar_horario_old.php
Normal 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">×</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">×</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">×</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>
|
||||||
@@ -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">
|
||||||
|
|||||||
@@ -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>
|
||||||
|
|||||||
@@ -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";
|
||||||
?>
|
?>
|
||||||
|
|||||||
@@ -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">
|
||||||
|
|||||||
@@ -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 () {
|
||||||
|
|||||||
@@ -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');
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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}/, ''),
|
||||||
|
|||||||
@@ -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>
|
||||||
|
|||||||
@@ -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')
|
||||||
|
|||||||
@@ -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>
|
||||||
|
|||||||
Reference in New Issue
Block a user