fechas.php 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375
  1. <?php
  2. session_start();
  3. require_once 'classes/Template.php';
  4. require_once 'classes/MainMenu.php';
  5. require_once 'classes/Concurso.php';
  6. require_once 'classes/Etapa.php';
  7. require_once 'classes/Proyecto.php';
  8. require_once 'classes/Asignacion.php';
  9. require_once 'classes/ValidaSesion.php';
  10. require_once 'include/bd_pdo.php';
  11. //CONSTANTES Y VARIABLES GLOBALES
  12. $menu = 21;
  13. $submenu = 213;
  14. $titulo = 'Fechas del concurso ';
  15. $errorBD = false;
  16. $actual = null;
  17. $etapaRevision['idetapa'] = 0;
  18. function fecha2Array($fecha_str){
  19. $tmp = str_replace(array("{", "}"), array("","") ,$fecha_str);
  20. return explode(",", $tmp);
  21. }
  22. function imprimeFecha($fechas_rs, $row, $j = 0){
  23. if($row < count($fechas_rs)){
  24. if(isset($fechas_rs[$row]) && is_array($fechas_rs[$row])){
  25. $fechasArr = fecha2Array($fechas_rs[$row]["fecha"]);
  26. if($j < count($fechasArr) && isset($fechasArr[$j])){
  27. $temp = new DateTime( $fechasArr[$j] );
  28. return date($temp->format('d/m/Y'));
  29. }
  30. }
  31. }
  32. return "";
  33. }
  34. if (is_null($pdo) || !isset($_SESSION['usuario_id']))
  35. ValidaSesion::salirPagina();
  36. else{
  37. if (is_null($pdo))
  38. $errorBD = true;
  39. if (isset($_SESSION['actual']))
  40. $actual = unserialize($_SESSION['actual']);
  41. if (!$errorBD)
  42. $etapaRevision = Etapa::buscaEtapaXClave($pdo, 'REVISION');
  43. /*if (isset($etapaRevision)){
  44. $fechasRevision = Concurso::getFechaXEtapa($pdo, $actual->getId(), $etapaRevision);
  45. if (isset($fechasRevision['fechas'])){
  46. date_default_timezone_set('America/Mexico_City');
  47. $hoy = strtotime(date('Y-m-d'));
  48. if ($hoy <= strtotime(date($fechasRevision['fechas'][1]->format('Y/n/d'))))
  49. $revisionVisible = true;
  50. else
  51. $revisionVisible = false;
  52. }
  53. }*/
  54. if(isset($_SESSION['usuario_id'])){
  55. if (!$errorBD)
  56. $objSesion = new ValidaSesion($pdo,$submenu);
  57. } else
  58. ValidaSesion::salirPagina();
  59. }
  60. ?>
  61. <!doctype html>
  62. <html lang="es">
  63. <head>
  64. <title><?php echo $titulo . ' - '; ?>CIDIT</title>
  65. <?php Template::getCSS(array('elementos.css', 'jquery-ui.css', 'calendar.css', 'secciones/fechas.css')); ?>
  66. <style>
  67. </style>
  68. </head>
  69. <body>
  70. <?php Template::agregaLoading();
  71. $menuObj = new MainMenu($_SESSION["usuario_id"], $menu, $pdo);
  72. $menuObj->printMenu();
  73. Template::getNavInfo(); ?>
  74. <main class="margen-principal mb-4">
  75. <div class="d-flex flex-row justify-content-between align-items-center my-3">
  76. <h1 class="mb-0"><?php echo $titulo; ?><span class="small text-azul6 ml-1"><?php if(isset($actual)) echo '(' . $actual->getNombre() . ' CIDIT)'; ?></span></h1>
  77. </div>
  78. <?php if (isset($objSesion) && $objSesion->tieneAcceso()){
  79. $etapas = Etapa::getEtapaXID($pdo);
  80. $rangos = array(true, false, true, false, false, false, true, false);
  81. $multiples = array(true, true, false, false,false, false, false, false);
  82. ?>
  83. <div class="p-4">
  84. <div class="row">
  85. <div class="col-12 mt-3">
  86. <form action="" method="post" id="formFechas">
  87. <input type="hidden" id="concurso" value="<?php echo $actual->getId();?>">
  88. <div class="accordeon">
  89. <?php
  90. $cont = 0;
  91. foreach($etapas as $etapa) {
  92. $fecha_rs = Etapa::getFechasXEtapa($pdo, $actual->getId(), $etapa["idetapa"]);
  93. ?>
  94. <div class="form-group row border-bottom border-primary">
  95. <label class="col-12 col-sm-4 col-form-label titulo text-right"><?php echo $etapa["etapa"];?></label>
  96. <div class="col-12 col-sm-8 etapa" id="etapa_<?php echo $etapa["idetapa"];?>" data-id="<?php echo $etapa["idetapa"];?>">
  97. <div class="d-flex flex-column mb-3 fechas-list">
  98. <?php
  99. $i=0;
  100. do{
  101. ?>
  102. <div class="d-flex flex-row fechas-data">
  103. <div class="input-group date-picker-box">
  104. <input type="text" name="fecha_ini_<?php echo strtolower($etapa["clave"]);?>" class="form-control fecha_ini date-picker" placeholder="dd/mm/aaaa" maxlength="10" required="required" readonly="readonly" value="<?php echo imprimeFecha($fecha_rs, $i, 0);?>" data-orden="1">
  105. <div class="input-group-append">
  106. <button class="btn btn-outline-primary btn-borrar px-3" type="button"><span class="ing-borrar"></span></button>
  107. </div>
  108. </div>
  109. <?php if($rangos[$cont]){ ?>
  110. <div class="px-4 pt-2 titulo">al</div>
  111. <div class="input-group date-picker-box">
  112. <input type="text" name="fecha_fin_<?php echo strtolower($etapa["clave"]);?>" class="form-control fecha_fin date-picker" placeholder="dd/mm/aaaa" maxlength="10" required="required" readonly="readonly" value="<?php echo imprimeFecha($fecha_rs, $i, 1);?>" data-orden="2">
  113. <div class="input-group-append">
  114. <button class="btn btn-outline-primary btn-borrar px-3" type="button"><span class="ing-borrar"></span></button>
  115. </div>
  116. </div>
  117. <?php } ?>
  118. <?php if($multiples[$cont]){ ?>
  119. <div class="ml-4 btnList">
  120. <div class="d-inline-flex flex-column justify-content-center align-items-center btnIcon pointer mt-2 mx-1 btn-quitar invisible">
  121. <label class="ing-menos navIcon text-danger mb-0 mx-2 pointer"></label>
  122. <label class="text-primary small pointer mb-0">Quitar</label>
  123. </div>
  124. </div>
  125. <?php } ?>
  126. </div>
  127. <?php
  128. $i++;
  129. }while($i<count($fecha_rs));
  130. ?>
  131. </div>
  132. <?php if($multiples[$cont]){ ?>
  133. <div class="d-inline-flex flex-column justify-content-center align-items-center btnIcon pointer mb-2 mx-1 btn-agregar">
  134. <label class="ing-mas navIcon text-success mb-0 mx-2 pointer"></label>
  135. <label class="text-primary small pointer mb-0">Agregar</label>
  136. </div>
  137. <?php }?>
  138. </div>
  139. </div>
  140. <?php
  141. $cont ++;
  142. }//foreach ?>
  143. </div>
  144. <div class="form-group row">
  145. <div class="col-12 text-center">
  146. <button type="button" class="btn btn-outline-primary btn-enviar"><span class="ing-aceptar navIcon ing-fw"></span> Guardar</button>
  147. </div>
  148. </div>
  149. </form>
  150. </div>
  151. </div>
  152. </div>
  153. <div class="modal fade modalMarco" id="modalAviso">
  154. <div class="modal-dialog modal-dialog-centered">
  155. <div class="modal-content p-3">
  156. <div class="modal-body d-flex flex-column justify-content-center align-items-center">
  157. <button type="button" class="cerrar align-self-end m-0" data-dismiss="modal"><div class="ing-cancelar"></div></button>
  158. <div id="avisoMsg" class="text-primary display-5 text-center mb-3"></div>
  159. <div id="avisoIcon" class="display-1 mb-4"></div>
  160. </div>
  161. </div>
  162. </div>
  163. </div>
  164. <?php } else { ?>
  165. <div class="w-100 text-left my-3">
  166. <h1 class="mb-0"><?php echo $titulo; ?></h1>
  167. </div>
  168. <div class="fondoAnuncio mt-5">
  169. <div class="d-flex flex-column justify-content-center align-items-center">
  170. <div class="d-flex flex-column justify-content-center align-items-center">
  171. <div class="text-primary text-center mt-5 tit">¡Lo sentimos!</div>
  172. <div class="text-primary text-center small my-3 msg">No tienes accceso a éste sitio</div>
  173. <div class="ing-negar display-1 text-danger mb-4"></div>
  174. </div>
  175. </div>
  176. <?php } ?>
  177. </main>
  178. <div style="isolation: isolate;">
  179. <?php Template::footer(); ?>
  180. </div>
  181. <?php Template::getJS(array("jquery-ui.js", "datepicker-es.js")); ?>
  182. <script>
  183. var datepickerOptions = { dateFormat: "dd/mm/yy", changeMonth: true};
  184. $(document).ready(function(){
  185. actualizaQuitar();
  186. $(".date-picker" ).datepicker(datepickerOptions);
  187. $(".date-picker" ).datepicker( $.datepicker.regional[ "es" ] );
  188. $(".btn-borrar").click(function(){
  189. $(this).parents(".input-group").find(".date-picker").val("");
  190. });
  191. //agrega nueva fecha
  192. $(".btn-agregar").click(function(){
  193. var fechas_list = $(this).parent().find(".fechas-list");
  194. fechas_list.find(".fechas-data:first-child").find('.date-picker.hasDatepicker').removeClass('hasDatepicker');
  195. var cloned = fechas_list.find(".fechas-data:first-child").clone(true).appendTo(fechas_list);
  196. cloned.find("input").val("");
  197. cloned.find("input.date-picker").prop("id", "");//el id se genera solo, se debe quitar para que no se repita
  198. cloned.find(".date-picker" ).datepicker(datepickerOptions);
  199. cloned.find(".date-picker" ).datepicker( $.datepicker.regional[ "es" ] );
  200. fechas_list.find(".fechas-data:first-child").find('.date-picker').datepicker(datepickerOptions);
  201. fechas_list.find(".fechas-data:first-child").find('.date-picker').datepicker($.datepicker.regional[ "es" ]);
  202. fechas_list.find(".btnList .btn-quitar").removeClass("invisible");
  203. });
  204. $(".btn-quitar").click(function(){
  205. var fechas_list = $(this).parents(".fechas-data");
  206. var etapa = $(this).parents(".etapa");
  207. fechas_list.remove();
  208. if(etapa.find(".fechas-data").length - 1 < 1){
  209. etapa.find(".btn-quitar").addClass("invisible");
  210. }
  211. });
  212. $(".btn-enviar").click(function(){
  213. var etapasObj = [];
  214. if(validaFechas()){
  215. //recorre cada etapa
  216. $.each($('.etapa'), function(){
  217. var id = $(this).data("id");
  218. var fechasArr = [];
  219. $.each($(this).find('.fechas-data'), function(){
  220. var rango = [];
  221. var fecha_ini = $(this).find(".fecha_ini").val();
  222. if(fecha_ini != "")
  223. rango.push(fecha_ini);
  224. var fecha_fin = $(this).find(".fecha_fin").val();
  225. if(fecha_fin !== undefined && fecha_fin != ""){
  226. rango.push(fecha_fin);
  227. }
  228. fechasArr.push(rango);
  229. });
  230. //ordena fechas Ascendente
  231. fechasArr.sort(function(a,b){
  232. return new Date(a[0]) - new Date(b[0]);
  233. });
  234. var etapa = {
  235. "id": id,
  236. "fechas": fechasArr
  237. }
  238. etapasObj.push(etapa);
  239. });
  240. $.ajax({
  241. url: "./action/fechas_action.php",
  242. type: 'POST',
  243. dataType: 'json',
  244. data: { concurso: $("#concurso").val(), json: JSON.stringify(etapasObj)},
  245. beforeSend: function(x) {
  246. if (x && x.overrideMimeType) {
  247. x.overrideMimeType("application/j-son;charset=UTF-8");
  248. }
  249. },
  250. success: function(result) {
  251. if(result["error"]!= "" && result["error"] !== undefined){
  252. $("#avisoMsg").text(result["error"]);
  253. $("#avisoMsg").removeClass("text-primary").addClass("text-danger");
  254. }else{
  255. $("#avisoMsg").text(result["ok"]);
  256. $("#avisoMsg").addClass("text-primary").removeClass("text-danger");
  257. }
  258. $("#modalAviso").modal("show");
  259. },
  260. error: function(jqXHR, textStatus, errorThrown ){
  261. $("#avisoMsg").text("Ocurrió un error al guardar las fechas");
  262. $("#avisoMsg").removeClass("text-primary").addClass("text-danger");
  263. }
  264. });//ajax
  265. }
  266. });
  267. });
  268. function actualizaQuitar(){
  269. $.each($('.etapa'), function(){
  270. if($(this).find(".fechas-data").length <= 1){
  271. $(this).find(".btn-quitar").addClass("invisible");
  272. }else{
  273. $(this).find(".btn-quitar").removeClass("invisible");
  274. }
  275. });
  276. }
  277. function diaAAno(fecha_str){//de dd/mm/yyyy a yyyy-mm-dd
  278. if(fecha_str.charAt(2) == "/" && fecha_str.charAt(5) == "/"){//dd/mm/yyyy
  279. var fecha_arr = fecha_str.split("/");
  280. return fecha_arr[2]+"-"+fecha_arr[1]+"-"+fecha_arr[0];
  281. }
  282. return fecha_str;
  283. }
  284. function fechaMayor(fechaI, fechaF) {//cual es mayor >0 I mayor <0 F mayor
  285. return (Date.parse(diaAAno(fechaI)) - Date.parse(diaAAno(fechaF)));
  286. }
  287. function validaRangos(row){
  288. var fechas = row.find(".date-picker");
  289. if(fechas.length > 1){
  290. var fecha_ini = row.find(".fecha_ini");
  291. var fecha_fin = row.find(".fecha_fin");
  292. $(fecha_ini).removeClass('is-invalid');
  293. $(fecha_fin).removeClass('is-invalid');
  294. if($(fecha_ini).val() != "" && $(fecha_fin).val()!= ""){
  295. if( fechaMayor($(fecha_ini).val(), $(fecha_fin).val() ) > 0){
  296. $(fecha_ini).addClass('is-invalid');
  297. $(fecha_fin).addClass('is-invalid');
  298. return false;
  299. }
  300. }else if( !($(fecha_ini).val() == "" && $(fecha_fin).val()== "")){
  301. if($(fecha_ini).val() == "")
  302. $(fecha_ini).addClass('is-invalid');
  303. if($(fecha_fin).val() == "")
  304. $(fecha_fin).addClass('is-invalid');
  305. return false;
  306. }
  307. }
  308. return true;
  309. }
  310. function validaFechas(){
  311. var ok = true;
  312. $.each($('.fechas-data'), function(){
  313. ok = validaRangos($(this)) && ok;
  314. });
  315. var fecha_creacion = $("#etapa_5").find(".date-picker");
  316. var fecha_apertura = $("#etapa_6").find(".date-picker");
  317. fecha_creacion.removeClass('is-invalid');
  318. fecha_apertura.removeClass('is-invalid');
  319. if(fecha_creacion.val() != "" && fecha_apertura.val() != ""){
  320. if(fechaMayor(fecha_apertura.val(), fecha_creacion.val()) <= 0 ){
  321. fecha_creacion.addClass('is-invalid');
  322. fecha_apertura.addClass('is-invalid');
  323. ok = false;
  324. }
  325. }
  326. return ok;
  327. }
  328. </script>
  329. </body>
  330. </html>