carreras.php 40 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813
  1. <?php
  2. require_once 'class/c_login.php';
  3. require_once 'include/bd_pdo.php';
  4. if (!isset($_SESSION['user'])){
  5. header('Location: index.php');
  6. exit;
  7. }
  8. else
  9. $user = unserialize($_SESSION['user']);
  10. $user->access('facultades');
  11. if(!$user->admin && $user->acceso == 'n'){
  12. header('Location: main.php?error=1');
  13. }else{
  14. $user->print_to_log('Carreras');
  15. }
  16. if(!$user->admin && $user->facultad['facultad_id']!=$_GET['facultad']){
  17. header('Location: carreras.php?facultad='.$user->facultad['facultad_id']);
  18. $mal=true;
  19. }
  20. $mal=false;
  21. ?>
  22. <!DOCTYPE html>
  23. <html lang="en">
  24. <head>
  25. <meta charset="UTF-8">
  26. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  27. <title>Carreras</title>
  28. <link rel="stylesheet" href="css/jquery-ui.css">
  29. <link rel="stylesheet" href="css/calendar.css">
  30. <link rel="stylesheet" href="css/toggle.css" type="text/css">
  31. <?php
  32. include 'import/html_css_files.php';
  33. ?>
  34. </head>
  35. <body>
  36. <?php
  37. if(isset($_GET['facultad'])){
  38. $facultad=query("SELECT facultad_nombre FROM facultad WHERE facultad_id = :facultad", array(":facultad" => $_GET['facultad']), true);
  39. $fs_carreras = query(
  40. "SELECT * FROM fs_carreras(:idfacultad, null, null)",
  41. array(':idfacultad' => $_GET['facultad']),
  42. single:false
  43. );
  44. }
  45. include "import/html_header.php";
  46. html_header(
  47. "CARRERAS | " . $facultad['facultad_nombre'],
  48. "Gestión de Checador "
  49. );
  50. $user->access('facultades');
  51. $fs_niveles = query(
  52. "SELECT * FROM nivel", null, false
  53. );
  54. $fs_periodos = query(
  55. "SELECT * FROM fs_periodos(:idfacultad) WHERE estado = 'Activo' ",
  56. array(':idfacultad' => $_GET['facultad']),
  57. false
  58. );
  59. $fs_tiempoLic = query(
  60. "SELECT * FROM fs_tiempo_checado(:idfacultad, 1)",
  61. array(':idfacultad' => $_GET['facultad']),
  62. true
  63. );
  64. $fs_tiempoPos = query(
  65. "SELECT * FROM fs_tiempo_checado(:idfacultad, 2)",
  66. array(':idfacultad' => $_GET['facultad']),
  67. true
  68. );
  69. ?>
  70. <main class="content marco">
  71. <?php #if($mal==true){ ?>
  72. <div class="row">
  73. <div class="col-12 text-left">
  74. <a href="facultades.php" title="Volver">
  75. <button type="button" class="btn btn-outline-secondary"><span class="ing-regresar ing-fw"></span>Volver</button>
  76. </a>
  77. </div>
  78. </div>
  79. <?php #} ?>
  80. <div id="message"></div>
  81. <ul class="nav nav-tabs mt-3" id="myTab" role="tablist">
  82. <li class="nav-item" role="presentation">
  83. <button class="nav-link active" id="periodo-tab" data-toggle="tab" data-target="#periodo" type="button" role="tab" aria-controls="periodo" aria-selected="true">Periodo</button>
  84. </li>
  85. <li class="nav-item" role="presentation">
  86. <button class="nav-link" id="carrera-tab" data-toggle="tab" data-target="#carrera" type="button" role="tab" aria-controls="carrera" aria-selected="false">Carrera</button>
  87. </li>
  88. <li class="nav-item" role="presentation">
  89. <button class="nav-link" id="carrera-tab" data-toggle="tab" data-target="#tiempos" type="button" role="tab" aria-controls="tiempos" aria-selected="false">Tiempos</button>
  90. </li>
  91. </ul>
  92. <div class="tab-content" id="myTabContent">
  93. <!-- PERIODOS -->
  94. <div class="tab-pane fade show active" id="periodo" role="tabpanel" aria-labelledby="periodo-tab">
  95. <div class="row mt-3">
  96. <?php if($user->acceso == 'w') {?>
  97. <div class="col-12 text-right">
  98. <button type="button" class="btn btn-outline-secondary" data-toggle="modal" data-target="#modal_periodo" data-tipo="1"><span class="ing-mas ing-fw"></span>Agregar periodo</button>
  99. </div>
  100. <?php }?>
  101. </div>
  102. <!-- Tabla -->
  103. <div class="row mt-3">
  104. <div class="col-12 table-responsive">
  105. <table class="table table-sm table-striped table-white">
  106. <thead class="thead-dark">
  107. <tr>
  108. <th>Estado</th>
  109. <th>Nivel</th>
  110. <th>Periodo</th>
  111. <th>Inicio</th>
  112. <th>Fin</th>
  113. <?php if($user->acceso == 'w') {?>
  114. <th>Acciones</th>
  115. <?php }?>
  116. </tr>
  117. </thead>
  118. <tbody>
  119. <?php foreach($fs_periodos as $periodo){
  120. $title=$periodo['estado'];
  121. if($title=='Activo')
  122. $color="success";
  123. else
  124. $color="danger";
  125. ?>
  126. <tr data-id="<?= $periodo['id']?>" id="<?= $periodo['id']?>" >
  127. <td class="text-<?= $color ?> text-center" title="<?= $title?>">
  128. <span class="ing-bullet"></span>
  129. </td>
  130. <td class="text-primary">
  131. <?= $periodo['nivel']?>
  132. </td>
  133. <td class="text-primary">
  134. <?= $periodo['periodo']?>
  135. </td>
  136. <td class="text-primary">
  137. <?= $periodo['inicio']?>
  138. </td>
  139. <td class="text-primary">
  140. <?= $periodo['fin']?>
  141. </td>
  142. <?php if($user->acceso == 'w') {?>
  143. <td class="text-center icono-acciones">
  144. <a href="#" data-toggle="modal" data-target="#modal_periodo" data-tipo="2" title="Editar"><span class="ing-editar ing-fw"></span></a>
  145. </td>
  146. <?php }?>
  147. </tr>
  148. <?php } ?>
  149. </tbody>
  150. </table>
  151. </div>
  152. </div>
  153. </div>
  154. <!-- CARRERAS -->
  155. <div class="tab-pane fade" id="carrera" role="tabpanel" aria-labelledby="carrera-tab">
  156. <div class="row mt-3">
  157. <?php if($user->acceso == 'w') {?>
  158. <div class="col-12 text-right">
  159. <button type="button" class="btn btn-outline-secondary" data-toggle="modal" data-target="#modal" data-tipo="1"><span class="ing-mas ing-fw"></span>Crear carrera</button>
  160. </div>
  161. <?php }?>
  162. </div>
  163. <!-- Tabla -->
  164. <div class="row mt-3">
  165. <div class="col-12 table-responsive">
  166. <table class="table table-sm table-striped table-white">
  167. <thead class="thead-dark">
  168. <tr>
  169. <th>Estado</th>
  170. <th>Nivel</th>
  171. <th>Carrera</th>
  172. <?php if($user->acceso == 'w') {?>
  173. <th>Acciones</th>
  174. <?php }?>
  175. </tr>
  176. </thead>
  177. <tbody>
  178. <?php
  179. foreach($fs_carreras as $carrera){
  180. $color = "danger";
  181. $title = "Inactiva";
  182. if($carrera["carrera_activa"]==1){
  183. $color ="success";
  184. $title="Activa";
  185. }
  186. $nivel='Licenciatura';
  187. if($carrera['nivel_id']==2)
  188. $nivel='Posgrado';
  189. ?>
  190. <tr data-id="<?php echo $carrera['carrera_id'];?>" id="<?php echo $carrera['carrera_id'];?>">
  191. <td class="text-<?php echo $color;?> text-center" title="<?php echo $title;?>">
  192. <span class="ing-bullet"></span>
  193. </td>
  194. <td class="text-primary"><?php echo $nivel;?></td>
  195. <td class="text-primary"><?php echo $carrera["carrera_nombre"];?></td>
  196. <?php if($user->acceso == 'w') {?>
  197. <td class="text-center icono-acciones">
  198. <a href="#" data-toggle="modal" data-target="#modal" data-tipo="2" title="Editar"><span class="ing-editar ing-fw"></span></a>
  199. </td>
  200. <?php }?>
  201. </tr>
  202. <?php }?>
  203. </tbody>
  204. </table>
  205. </div>
  206. </div>
  207. </div>
  208. <!-- Tiempos -->
  209. <div class="tab-pane fade" id="tiempos" role="tabpanel" aria-labelledby="tiempos-tab">
  210. <p class="mt-4">Asigna los minutos de tolerancia antes y después del horario de clase</p>
  211. <form action="" method="post" id="formaModalTiempos" onsubmit="return valida_camposT()">
  212. <input type="hidden" name="facultadT" id="facultadT">
  213. <h3 class="text-center">Licenciatura</h3>
  214. <div class="row mt-3" style="border:solid 2px; border-radius: 8px;">
  215. <div class="offset-1 col-2 text-center">
  216. Antes
  217. <input id="antesL" name="antesL" type="number" class="form-control text-center" maxlenth="10">
  218. <div class="invalid-feedback">
  219. Debe ser un numero mayor que 0
  220. </div>
  221. min
  222. </div>
  223. <div class="col-2 text-center bg-light mt-4 mb-4">
  224. <h5 class="mt-2">Hora de clase</h5>
  225. </div>
  226. <div class="col-2 text-center">
  227. Despues
  228. <input id="despuesL" name="despuesL" type="number" class="form-control text-center" maxlenth="10">
  229. <div class="invalid-feedback">
  230. Debe ser un numero mayor que 0
  231. </div>
  232. min
  233. </div>
  234. <div class="col-2 text-center retardoLic">
  235. Retardos
  236. <input id="retardoL" name="retardoL" type="number" class="form-control text-center" maxlenth="10">
  237. <div class="invalid-feedback">
  238. Debe ser un numero mayor que 0
  239. </div>
  240. min
  241. </div>
  242. <div class="col-3 text-center">
  243. ¿Tiene retardos?<br>
  244. <div class="custom-control custom-switch mt-2">
  245. <input type="checkbox" class="custom-control-input tipo-switch" name="retardoLic" id="retardoLic" value="1">
  246. <label class="custom-control-label" for="retardoLic">Si</label>
  247. </div>
  248. </div>
  249. </div>
  250. <br><br>
  251. <h3 class="text-center">Posgrado</h3>
  252. <div class="row mt-3" style="border:solid 2px; border-radius: 8px;">
  253. <div class="offset-1 col-2 text-center">
  254. Antes
  255. <input id="antesP" name="antesP" type="number" class="form-control text-center" maxlenth="10">
  256. <div class="invalid-feedback">
  257. Debe ser un numero mayor que 0
  258. </div>
  259. min
  260. </div>
  261. <div class="col-2 text-center bg-light mt-4 mb-4">
  262. <h5 class="mt-2">Hora de clase</h5>
  263. </div>
  264. <div class="col-2 text-center">
  265. Despues
  266. <input id="despuesP" name="despuesP" type="number" class="form-control text-center" maxlenth="10">
  267. <div class="invalid-feedback">
  268. Debe ser un numero mayor que 0
  269. </div>
  270. min
  271. </div>
  272. <div class="col-2 text-center retardoPos">
  273. Retardo
  274. <input id="retardoP" name="retardoP" type="number" class="form-control text-center" maxlenth="10">
  275. <div class="invalid-feedback">
  276. Debe ser un numero mayor que 0
  277. </div>
  278. min
  279. </div>
  280. <div class="col-3 text-center">
  281. ¿Tiene retardos?<br>
  282. <div class="custom-control custom-switch mt-2">
  283. <input type="checkbox" class="custom-control-input tipo-switch" name="retardoPos" id="retardoPos" value="1">
  284. <label class="custom-control-label" for="retardoPos"></label>
  285. </div>
  286. </div>
  287. </div>
  288. <br>
  289. </form>
  290. <div class="form-group row mt-3">
  291. <div class="offset-4 col-8">
  292. <button class="btn btn-outline-primary" id="submitBtnT">
  293. <span class="ing-aceptar ing-fw"></span> Guardar
  294. </button>
  295. <button type="reset" id="reset" class="btn btn-outline-danger" data-dismiss="modal">
  296. <span class="ing-cancelar ing-fw"></span> Limpiar
  297. </button>
  298. </div>
  299. </div>
  300. </div>
  301. </div>
  302. </main>
  303. <!-- Footer -->
  304. <?php
  305. include "import/html_footer.php";
  306. ?>
  307. <!-- Modal -->
  308. <div class="modal fade" id="modal_periodo" tabindex="-1" role="dialog" arialabelledby="modal" aria-hidden="true">
  309. <div class="modal-dialog modal-dialog-centered" role="document">
  310. <div class="modal-content">
  311. <div class="modal-header">
  312. <h4 class="col-12 modal-title text-center">
  313. <span id="modalLabelP">
  314. Editar periodo
  315. </span>
  316. <button type="button" class="close text-white" data-dismiss="modal" aria-label="close">
  317. <span aria-hidden="true">&times;</span>
  318. </button>
  319. </h4>
  320. </div>
  321. <div class="modal-body">
  322. <form action="" method="post" id="formaModalP" onsubmit="return valida_camposP()">
  323. <input type="hidden" name="idP" id="idP">
  324. <input type="hidden" name="facultadP" id="facultadP" value="<?php echo $_GET['facultad']; ?>">
  325. <div class="form-box">
  326. <div class="form-group row">
  327. <label for="nombreP" class="col-4 col-form-label">Nombre *</label>
  328. <div class="col-8">
  329. <input id="nombreP" name="nombreP" type="text" class="form-control" maxlength="100">
  330. <div class="invalid-feedback" id="nombreP-error">Campo obligatorio</div>
  331. </div>
  332. </div>
  333. <div class="form-group row">
  334. <label for="inicio" class="col-4 col-form-label">Fecha de inicio *</label>
  335. <div class="col-8">
  336. <input id="fecha_inicial" name="fecha_inicial" type="text" class="form-control date-picker" placeholder="dd/mm/aaaa" maxlength="10" required="required" readonly="">
  337. <div class="invalid-feedback">Debe seleccionar una fecha</div>
  338. </div>
  339. </div>
  340. <div class="form-group row">
  341. <label for="fin" class="col-4 col-form-label">Fecha de fin *</label>
  342. <div class="col-8">
  343. <input id="fecha_final" name="fecha_final" type="text" class="form-control date-picker" placeholder="dd/mm/aaaa" maxlength="10" required="required" readonly="">
  344. <div class="invalid-feedback">Debe seleccionar una fecha</div>
  345. </div>
  346. </div>
  347. <div class="form-group row">
  348. <label for="nivelP" class="col-4 col-form-label">Nivel *</label>
  349. <div class="col-8">
  350. <div class="datalist datalist-select mb-1 w-100">
  351. <div class="datalist-input">Mostrar todos</div>
  352. <span class="ing-buscar icono"></span>
  353. <ul style="display:none">
  354. <?php foreach($fs_niveles as $pnivel){?>
  355. <li data-id="<?php echo $pnivel['nivel_id']?>" class="pl-4"><?php echo $pnivel['nivel_nombre'] ?></li>
  356. <?php }?>
  357. </ul>
  358. <input type="hidden" id="nivelP" name="nivelP" value="">
  359. </div>
  360. <div class="invalid-feedback">Debe seleccionar un nivel</div>
  361. </div>
  362. </div>
  363. <div class="form-group row">
  364. <label for="estadoP" class="col-4 col-form-label">Estado *</label>
  365. <div class="col-4">
  366. <div class="form-check form-check-inline">
  367. <input class="form-check-input radio-lg" type="radio" id="estado_activoP" name="estadoP" value="1" checked="checked">
  368. <label for="estado_activoP" class="col-form-label">Activo</label>
  369. </div>
  370. </div>
  371. <div class="col-4">
  372. <div class="form-check form-check-inline">
  373. <input class="form-check-input radio-lg" type="radio" id="estado_inactivoP" name="estadoP" value="2">
  374. <label for="estado_inactivoP" class="col-form-label">Inactivo</label>
  375. </div>
  376. </div>
  377. </div>
  378. <div class="from-group row">
  379. <div class="offset-4 col-8">
  380. <button type="submit" class="btn btn-outline-primary" id="submitBtnP" data-tipo="1">
  381. <span class="ing-aceptar ing-fw"></span> Guardar
  382. </button>
  383. <button type="reset" class="btn btn-outline-danger" data-dismiss="modal">
  384. <span class="ing-cancelar ing-fw"></span> Cancelar
  385. </button>
  386. </div>
  387. </div>
  388. </div>
  389. </form>
  390. </div>
  391. </div>
  392. </div>
  393. </div>
  394. <div class="modal fade" id="modal" tabindex="-1" role="dialog" arialabelledby="modal" aria-hidden="true">
  395. <div class="modal-dialog modal-dialog-centered" role="document">
  396. <div class="modal-content">
  397. <div class="modal-header">
  398. <h4 class="col-12 modal-title text-center">
  399. <span id="modalLabel">
  400. Editar nombre de Carrera
  401. </span>
  402. <button type="button" class="close text-white" data-dismiss="modal" aria-label="close">
  403. <span aria-hidden="true">&times;</span>
  404. </button>
  405. </h4>
  406. </div>
  407. <div class="modal-body">
  408. <form action="" method="post" id="formaModal" onsubmit="return valida_campos()">
  409. <input type="hidden" name="id" id="id">
  410. <input type="hidden" name="facultad" id="facultad" value="<?php echo $_GET['facultad']; ?>">
  411. <div class="form-box">
  412. <div class="form-group row">
  413. <label for="nivel" class="col-4 col-form-label">Nivel *</label>
  414. <div class="col-8">
  415. <div class="datalist datalist-select mb-1 w-100">
  416. <div class="datalist-input">Mostrar todos</div>
  417. <span class="ing-buscar icono"></span>
  418. <ul style="display:none">
  419. <?php foreach($fs_niveles as $pnivel){?>
  420. <li data-id="<?php echo $pnivel['nivel_id']?>" class="pl-4"><?php echo $pnivel['nivel_nombre'] ?></li>
  421. <?php }?>
  422. </ul>
  423. <input type="hidden" id="nivel" name="nivel" value="">
  424. </div>
  425. </div>
  426. </div>
  427. <div class="form-group row">
  428. <label for="nombre" class="col-4 col-form-label">Nombre *</label>
  429. <div class="col-8">
  430. <input id="nombre" name="nombre" type="text" class="form-control" maxlength="100">
  431. <div class="invalid-feedback" id="nombre-error">Campo obligatorio</div>
  432. </div>
  433. </div>
  434. <div class="form-group row">
  435. <label for="estado" class="col-4 col-form-label">Estado *</label>
  436. <div class="col-4">
  437. <div class="form-check form-check-inline">
  438. <input class="form-check-input radio-lg" type="radio" id="estado_activo" name="estado" value="1" checked="checked">
  439. <label for="estado_activo" class="col-form-label">Activo</label>
  440. </div>
  441. </div>
  442. <div class="col-4">
  443. <div class="form-check form-check-inline">
  444. <input class="form-check-input radio-lg" type="radio" id="estado_inactivo" name="estado" value="0">
  445. <label for="estado_inactivo" class="col-form-label">Inactivo</label>
  446. </div>
  447. </div>
  448. </div>
  449. <div class="from-group row">
  450. <div class="offset-4 col-8">
  451. <button type="submit" class="btn btn-outline-primary" id="submitBtn" data-tipo="1">
  452. <span class="ing-aceptar ing-fw"></span> Guardar
  453. </button>
  454. <button type="reset" class="btn btn-outline-danger" id="reset" data-dismiss="modal">
  455. <span class="ing-cancelar ing-fw"></span> Cancelar
  456. </button>
  457. </div>
  458. </div>
  459. </div>
  460. </form>
  461. </div>
  462. </div>
  463. </div>
  464. </div>
  465. <script src="js/jquery.min.js"></script>
  466. <script src="js/jquery-ui.js"></script>
  467. <script src="js/bootstrap/bootstrap.min.js"></script>
  468. <script src="js/datalist.js"></script>
  469. <script src="js/datepicker-es.js"></script>
  470. <script src="js/toggle.js"></script>
  471. <?php
  472. require_once 'js/messages.php';
  473. ?>
  474. <script>
  475. $('#retardoLic').change(function(){
  476. if($(this).is(':checked')){
  477. $('.retardoLic').show();
  478. }
  479. else{
  480. $('.retardoLic').hide();
  481. $('#retardoL').val("0");
  482. }
  483. });
  484. $('#retardoPos').change(function(){
  485. if($(this).is(':checked')){
  486. $('.retardoPos').show();
  487. }
  488. else{
  489. $('.retardoPos').hide();
  490. $('#retardoP').val("0");
  491. }
  492. });
  493. $('#reset').on('click', function(){
  494. $('#antesL').val("<?= -1*($fs_tiempoLic['desde_asistencia'] ?? 0) ?>");
  495. $('#despuesL').val("<?= ($fs_tiempoLic['hasta_asistencia'] ?? 1)-1 ?>");
  496. $('#retardoL').val("<?= ($fs_tiempoLic['hasta_retardo'] ?? 0) - ($fs_tiempoLic['hasta_asistencia'] ?? 0) ?>");
  497. $('#antesP').val("<?= -1*($fs_tiempoPos['desde_asistencia'] ?? 0) ?>");
  498. $('#despuesP').val("<?= ($fs_tiempoPos['hasta_asistencia'] ?? 1)-1 ?>");
  499. $('#retardoP').val("<?= ($fs_tiempoPos['hasta_retardo'] ?? 0) - ($fs_tiempoPos['hasta_asistencia'] ?? 0) ?>");
  500. <?php
  501. if(($fs_tiempoLic['hasta_asistencia'] ?? 0) == ($fs_tiempoLic['hasta_retardo'] ?? 0)){ ?>
  502. $('.retardoLic').hide();
  503. $('#retardoL').val("0");
  504. $('#retardoLic').prop("checked", false).change();
  505. <?php }
  506. else{ ?>
  507. $('#retardoLic').prop("checked", true).change();
  508. <?php }
  509. if(($fs_tiempoPos['hasta_asistencia'] ?? 0) == ($fs_tiempoPos['hasta_retardo'] ?? 0)){ ?>
  510. $('.retardoPos').hide();
  511. $('#retardoP').val("0");
  512. $('#retardoPos').prop("checked", false).change();
  513. <?php }
  514. else{ ?>
  515. $('#retardoPos').prop("checked", true).change();
  516. <?php }
  517. ?>
  518. $('#antesL').removeClass("is-invalid");
  519. $('#despuesL').removeClass("is-invalid");
  520. $('#retardoL').removeClass("is-invalid");
  521. $('#antesP').removeClass("is-invalid");
  522. $('#despuesP').removeClass("is-invalid");
  523. $('#retardoP').removeClass("is-invalid");
  524. });
  525. $(".date-picker").datepicker($.datepicker.regional["es"]);
  526. $(".date-picker").datepicker({
  527. dateFormat: "dd/mm/yyyy",
  528. changeMonth: true,
  529. });
  530. $('#submitBtnT').on('click', function(){
  531. //$('#antesL').addClass("is-invalid");
  532. $('#formaModalTiempos').submit();
  533. });
  534. var today = new Date();
  535. function valida_camposT(){
  536. var error=false;
  537. if($('#antesL').val()==""){
  538. $('#antesL').addClass("is-invalid");
  539. error=true;
  540. }
  541. if($('#antesL').val()<0){
  542. $('#antesL').addClass("is-invalid");
  543. error=true;
  544. }
  545. if(isNaN($('#antesL').val())){
  546. $('#antesL').addClass("is-invalid");
  547. error=true;
  548. }
  549. if($('#despuesL').val()==""){
  550. $('#despuesL').addClass("is-invalid");
  551. error=true;
  552. }
  553. if($('#despuesL').val()<0){
  554. $('#despuesL').addClass("is-invalid");
  555. error=true;
  556. }
  557. if(isNaN($('#despuesL').val())){
  558. $('#despuesL').addClass("is-invalid");
  559. error=true;
  560. }
  561. if($('#retardoL').val()==""){
  562. $('#retardoL').addClass("is-invalid");
  563. error=true;
  564. }
  565. if($('#retardoL').val()<0){
  566. $('#retardoL').addClass("is-invalid");
  567. error=true;
  568. }
  569. if(isNaN($('#retardoL').val())){
  570. $('#retardoL').addClass("is-invalid");
  571. error=true;
  572. }
  573. if($('#antesP').val()==""){
  574. $('#antesP').addClass("is-invalid");
  575. error=true;
  576. }
  577. if(isNaN($('#antesP').val())){
  578. $('#antesP').addClass("is-invalid");
  579. error=true;
  580. }
  581. if($('#despuesP').val()==""){
  582. $('#despuesP').addClass("is-invalid");
  583. error=true;
  584. }
  585. if(isNaN($('#despuesP').val())){
  586. $('#despuesP').addClass("is-invalid");
  587. error=true;
  588. }
  589. if($('#retardoP').val()==""){
  590. $('#retardoP').addClass("is-invalid");
  591. error=true;
  592. }
  593. if(isNaN($('#retardoP').val())){
  594. $('#retardoP').addClass("is-invalid");
  595. error=true;
  596. }
  597. if(!error){
  598. $('#formaModalTiempos').prop("action", "./action/action_tiempos_update.php");
  599. }else{
  600. return false;
  601. }
  602. }
  603. function valida_camposP(){
  604. var error=false;
  605. if($("#fecha_inicial").val()==""){
  606. $("#fecha_inicial").addClass("is-invalid");
  607. error=true;
  608. }
  609. if($("#fecha_final").val()==""){
  610. $("#fecha_final").addClass("is-invalid");
  611. error=true;
  612. }
  613. if($("#nombreP").val()==""){
  614. $("#nombreP").addClass("is-invalid");
  615. $("#nombreP-error").html("Campo obligatorio");
  616. error=true;
  617. }
  618. if($("#nombreP").val()[0]==" "){
  619. $("#nombreP").addClass("is-invalid");
  620. $("#nombreP-error").html("No puede haber espacios al inicio");
  621. error=true;
  622. }
  623. if($("#nivelP").val()==""){
  624. error=true;
  625. $("#nivelP").addClass("is-invalid");
  626. }
  627. if(error){
  628. return false;
  629. }else{
  630. var btn = $("#submitBtnP");
  631. if(btn.data("tipo")==2)//update
  632. $("#formaModalP").prop("action", "./action/action_periodos_update.php");
  633. else{//insert
  634. $("#formaModalP").prop("action", "./action/action_periodos_insert.php");
  635. }
  636. }
  637. }
  638. <?php if(!$fs_carreras && !$fs_periodos){ ?>
  639. triggerMessage("No se encontraron carreras ni periodos en esta facultad", "Error");
  640. <?php } else if(!$fs_carreras){?>
  641. triggerMessage("No se encontraron carreras en esta facultad", "Error");
  642. <?php } else if(!$fs_periodos){?>
  643. triggerMessage("No se encontraron periodos en esta facultad", "Error");
  644. <?php }?>
  645. function valida_campos(){
  646. var error=false;
  647. if($("#nombre").val()==""){
  648. $("#nombre").addClass("is-invalid");
  649. $("#nombre-error").html("Campo obligatorio");
  650. error=true;
  651. }
  652. if($("#nombre").val()[0]==" "){
  653. $("#nombre").addClass("is-invalid");
  654. $("#nombre-error").html("No puede haber espacios al inicio");
  655. error=true;
  656. }
  657. if($("#nivel").val()==""){
  658. error=true;
  659. }
  660. if($('#estado_activo').prop('checked') == false && $('#estado_inactivo').prop('checked') == false){
  661. error=true;
  662. }
  663. if(error){
  664. return false;
  665. }else{
  666. var btn = $('#submitBtn');
  667. if(btn.data("tipo")==2)//update
  668. $("#formaModal").prop("action", "./action/action_carreras_update.php");
  669. else//insert
  670. $("#formaModal").prop("action", "./action/action_carreras_insert.php");
  671. }
  672. }
  673. $('#modal_periodo').on('show.bs.modal', function(event){//datos periodo
  674. var button = $(event.relatedTarget);
  675. var tipo = button.data('tipo');
  676. $("#nombreP").removeClass("is-invalid");
  677. if(tipo==1){//crear
  678. $('#modalLabelP').html("Agregar periodo");
  679. $("#submitBtnP").data("tipo", 1);
  680. $("#fecha_inicial").datepicker("setDate", today);
  681. $("#fecha_final").datepicker("setDate", today);
  682. $("#nombreP").val("");
  683. $("#estado_activoP").prop("checked", true);
  684. setDatalist("#nivelP",1);
  685. $("li").removeClass("selected");
  686. var fi = $("#fecha_inicial").datepicker("getDate");
  687. //$("#fecha_final").datepicker("option", "minDate", fi);
  688. }else{//editar
  689. $('#modalLabelP').html("Editar periodo");
  690. $("#submitBtnP").data("tipo", 2);
  691. var id = $(event.relatedTarget).parents("tr").data("id");
  692. var fac = $("#facultadP").val();
  693. $.ajax({
  694. url:"action/action_periodos_select.php",
  695. type:"post",
  696. dataType:"json",
  697. data:{idfacultad: fac, idperiodo: id},
  698. success:function(result){
  699. //console.log(result);
  700. $("#idP").val(result["id"]);
  701. $("#facultadP").val(result["facultad_id"]);
  702. $("#nombreP").val(result["periodo"]);
  703. var date = new Date(result["inicio"])
  704. date.setDate(date.getDate() + 1);
  705. $("#fecha_inicial").datepicker("setDate", date);
  706. date = new Date(result["fin"])
  707. date.setDate(date.getDate() + 1);
  708. $("#fecha_final").datepicker("setDate", date);
  709. //$(".datalist-input").html(result["nivel"]);
  710. setDatalist("#nivelP",result["nivel_id"]);
  711. var fi = $("#fecha_inicial").datepicker("getDate");
  712. //$("#fecha_final").datepicker("option", "minDate", fi);
  713. var ff = $("#fecha_final").datepicker("getDate");
  714. //$("#fecha_inicial").datepicker("option", "maxDate", ff);
  715. if(result['estado']=="Activo"){
  716. $('#estado_activoP').prop('checked', true);
  717. }else{
  718. $('#estado_inactivoP').prop('checked', true);
  719. }
  720. },
  721. error: function(){console.log("Error")}
  722. });
  723. }
  724. })
  725. $('#modal').on('show.bs.modal', function(event){
  726. var button = $(event.relatedTarget);
  727. var tipo = button.data('tipo');
  728. var modal = $(this);
  729. $("#nombre").removeClass("is-invalid");
  730. if(tipo == 1){//crear
  731. $("#submitBtn").data('tipo', 1);
  732. $("#modalLabel").html("Crear Carrera");
  733. $("#nombre").val("");
  734. $('#estado_activo').prop('checked', true);
  735. $('li').removeClass('selected');
  736. $(".datalist-input").html("Mostrar todas");
  737. $("#nivel").val("");
  738. }else{//editar
  739. $("#submitBtn").data('tipo', 2);
  740. $("#modalLabel").html("Editar Carrera");
  741. $("#nombre").val("");
  742. $('#estado_activo').prop('checked', true);
  743. var id = $(event.relatedTarget).parents("tr").data("id");
  744. var fac = $("#facultad").val();
  745. $.ajax({
  746. url:"action/action_carreras_select.php",
  747. type:"post",
  748. dataType:"json",
  749. data:{idfacultad: fac, idcarrera: id},
  750. success:function(result){
  751. //console.log(result);
  752. $("#id").val(result["carrera_id"]);
  753. $("#nombre").val(result["carrera_nombre"])
  754. if(result['carrera_activa']==1){
  755. $('#estado_activo').prop('checked', true);
  756. }else{
  757. $('#estado_inactivo').prop('checked', true);
  758. }
  759. setDatalist("#nivel", result["nivel_id"]);
  760. },
  761. error: function(){console.log("Error")}
  762. });
  763. }
  764. });
  765. $(document).ready(function(){
  766. $('#antesL').val("<?= -1*($fs_tiempoLic['desde_asistencia'] ?? 0) ?>");
  767. $('#despuesL').val("<?= ($fs_tiempoLic['hasta_asistencia'] ?? 1)-1 ?>");
  768. $('#retardoL').val("<?= ($fs_tiempoLic['hasta_retardo'] ?? 1) - ($fs_tiempoLic['hasta_asistencia'] ?? 0) ?>");
  769. $('#antesP').val("<?= -1*($fs_tiempoPos['desde_asistencia'] ?? 0) ?>");
  770. $('#despuesP').val("<?= ($fs_tiempoPos['hasta_asistencia'] ?? 1) -1 ?>");
  771. $('#retardoP').val("<?= ($fs_tiempoPos['hasta_retardo'] ?? 1) - ($fs_tiempoPos['hasta_asistencia'] ?? 0) ?>");
  772. $('#facultadT').val("<?= $_GET['facultad'] ?>");
  773. <?php
  774. if(($fs_tiempoLic['hasta_asistencia'] ?? 0) == ($fs_tiempoLic['hasta_retardo'] ?? 0)){ ?>
  775. $('.retardoLic').hide();
  776. $('#retardoL').val("0");
  777. $('#retardoLic').prop("checked", false).change();
  778. <?php }
  779. else{ ?>
  780. $('#retardoLic').prop("checked", true).change();
  781. <?php }
  782. if(($fs_tiempoPos['hasta_asistencia'] ?? 0) == ($fs_tiempoPos['hasta_retardo'] ?? 0)){ ?>
  783. $('.retardoPos').hide();
  784. $('#retardoP').val("0");
  785. $('#retardoPos').prop("checked", false).change();
  786. <?php }
  787. else{ ?>
  788. $('#retardoPos').prop("checked", true).change();
  789. <?php }
  790. ?>
  791. });
  792. </script>
  793. </body>
  794. </html>