EVOLUTION-MANAGER
Edit File: ccpd_lotaip_index.blade.php
@extends('layouts.backend') @section('titulo') LEY DE TRANSPARENCIA @stop @section('style') <link rel="stylesheet" type="text/css" href="{{ asset('admin/frontend/css/sweetalert2.min.css') }}"> <link href="{{asset('public/frontend/transparencia/wp-content/plugins/accordions/assets/global/css/themesTabs.style.css')}}" id="accordions_themes.Tabs.style-css" media="all" rel="stylesheet" type="text/css"/> <link href="{{asset('public/frontend/transparencia/wp-content/plugins/taqyeem-buttons/assets/style.css')}}" id="taqyeem-buttons-style-css" media="all" rel="stylesheet" type="text/css"/> <link href="{{asset('public/frontend/transparencia/wp-content/plugins/js_composer/assets/css/js_composer.min.css')}}" id="js_composer_front-css" media="all" rel="stylesheet" type="text/css"/> <link href="{{asset('public/frontend/transparencia/wp-content/themes/jannah/assets/css/taqyeem.css')}}" id="taqyeem-styles-css" media="all" rel="stylesheet" type="text/css"/> <link href="{{asset('public/frontend/transparencia/wp-content/themes/jannah/assets/css/style.css')}}" id="tie-css-styles-css" media="all" rel="stylesheet" type="text/css"/> <link href="{{asset('public/frontend/transparencia/wp-content/themes/jannah/assets/css/ilightbox/dark-skin/skin.css')}}" id="tie-css-ilightbox-css" media="all" rel="stylesheet" type="text/css"/> <link href="{{asset('public/frontend/transparencia/wp-content/themes/jannah-child/style.css')}}" id="tie-theme-child-css-css" media="all" rel="stylesheet" type="text/css"/> <script src="{{asset('public/frontend/transparencia/wp-includes/js/jquery/jquery.js')}}" type="text/javascript"> </script> <script src="{{asset('public/frontend/transparencia/wp-includes/js/jquery/jquery-migrate.min.js')}}" type="text/javascript"> </script> <link href="http://fonts.googleapis.com/css?family=Actor%3Aregular" id="vc_google_fonts_actorregular-css" media="all" rel="stylesheet" type="text/css"/> <link href="{{asset('public/frontend/transparencia/wp-content/plugins/js_composer/assets/css/js_composer_tta.min.css')}}" id="vc_tta_style-css" media="all" rel="stylesheet" type="text/css"/> @stop @section('contenido') @include('alerts.errors') @include('alerts.success') @include('alerts.request') <div class="wrapper wrapper-content animated fadeInRight"> <div class="row"> <div class="col-lg-12 "> <div class="page-template-default page page-id-1181 tribe-no-js wrapper-has-shadow block-head-1 magazine1 is-thumb-overlay-disabled is-desktop is-header-layout-1 sidebar-right has-sidebar post-layout-1 has-mobile-share hide_share_post_top hide_share_post_bottom hide_related hide_post_authorbio wpb-js-composer js-comp-ver-5.4.5 vc_responsive" id="tie-body"> <div > <div role="main"> <article class="container-wrapper post-content" id="the-post"> <header class="entry-header-outer"> <div class="entry-header"> <h1 class="post-title entry-title"> Transparencia CCPD </h1> </div> <!-- .entry-header /--> </header> <!-- .entry-header-outer /--> <div class="entry-content entry clearfix" id="itemsx"> @include('admin.consejo_cantonal.ccpd_lotaip_transparencia') </div> <!-- .entry-content /--> </article> <!-- #the-post /--> </div> <!-- .main-content --> </div> </div> </div> </div> </div> @stop @section('script') <script src="{{ asset('admin/frontend/js/sweetalert2.min.js') }}"></script> <script type="text/javascript"> function mensaje(tipo,mensaje){ swal({ type: tipo, title: 'Advertencia', text: mensaje, buttonsStyling: false, confirmButtonClass: 'btn btn-lg btn-warning' }); } function modal_añadir_anio(id_anio){ swal({ title: "Nuevo año", input: "select", inputOptions: { @foreach($arrayAnios as $anio) {{$anio}}: '{{$anio}}', @endforeach }, showCancelButton: true, inputPlaceholder: "Seleccione un año", allowOutsideClick: false, }).then(function (inputValue) { if (inputValue === false || inputValue=== ""){ swal("Seleccion vacia!", "No selecciono ningun año", "warning"); }else{ swal({ title: 'Añadiendo año...', allowOutsideClick: false, allowEscapeKey: false }); swal.showLoading(); $.ajax({ url: '{{url('administracion/transparenciaccpd/guardarnuevoanio')}}', type: 'POST', data:{_token:"{{ csrf_token() }}",anio:inputValue}, success: function(res) { console.log(inputValue); if(res != 0){ console.log(res); swal("Año guardado!", "Se guardo el año "+ inputValue, "success"); // $('#itemsx').html(res); var li=`<li class="vc_tta-tab" data-vc-tab=""> <a data-vc-container=".vc_tta" data-vc-tabs="" style="cursor: pointer;padding-top: 9px;padding-bottom: 3px;" onclick="modal_añadir_anio();"> <span class="vc_tta-title-text"> <h3>+</h3> </span> </a> </li>`; var resultArray = $.map(res, function(value, index) { return [value]; }); resultArray.sort(function(a, b){return a.anio - b.anio}); console.log(resultArray); $.each(resultArray, function(i, item){ // console.log(item); // console.log(item.anio); li += `<li class="vc_tta-tab" data-vc-tab="" id="li-${item.anio}"> <a data-vc-container=".vc_tta" data-vc-tabs="" href="#${item.anio}"> <span class="vc_tta-title-text"> ${item.anio} </span> </a> </li>`; }); $('#ul-anios').html(li); var div_anio = `<div class="vc_tta-panel" data-vc-content=".vc_tta-panel-body" id="${res.anio}"> <div class="vc_tta-panel-heading"> <h4 class="vc_tta-panel-title"> <a data-vc-accordion="" data-vc-container=".vc_tta-container" href="#${res.anio}"> <span class="vc_tta-title-text"> ${res.anio} </span> </a> </h4> </div> <div class="vc_tta-panel-body"> <button class="btn" onclick="SeguroEliminarAnio(${res.id});">Eliminar año</button> <button class="btn" onclick="modal_añadir_mes(${res.id});">Añadir mes</button> </div> </div>`; $('#div-anios').append(div_anio); location.reload(true); }else{ mensaje("error", "El "+inputValue+" año ya se encuentra registrado"); } }, error: function(error) { mensaje("error","Error al guardar"); }, }); } }); } function SeguroEliminarAnio(id){ swal({ title: 'Estas seguro?', text: "No podrás recuperar lo eliminado!", type: 'warning', showCancelButton: true, confirmButtonColor: '#0CC27E', cancelButtonColor: '#FF586B', confirmButtonText: 'Si, Eliminar!', cancelButtonText: 'No, Cancelar!', confirmButtonClass: 'btn btn-success mr-5', cancelButtonClass: 'btn btn-danger', buttonsStyling: false }).then(function () { swal({ title: 'Eliminando año...', allowOutsideClick: false, allowEscapeKey: false }); swal.showLoading(); $.ajax({ type: "DELETE", url: "{{url('administracion/transparenciaccpd/deleteanio/')}}/"+id, data: { "_token": "{{ csrf_token() }}" }, success: function (data) { if(data!=0){ swal( 'Eliminado!', 'El año fue eliminado.', 'success' ); location.reload(true); }else{ swal( 'Hubo un inconveniente', 'El año no pudo ser eleminado', 'error' ) } } }); }, function (dismiss) { // dismiss can be 'overlay', 'cancel', 'close', 'esc', 'timer' if (dismiss === 'cancel') { swal( 'Cancelado', 'Has cancelado la eliminación', 'error' ) } }); } function modal_añadir_mes(id_anio){ swal({ title: "Nuevo mes", // text: "Correo eletrónico a enviar:", input: "select", inputOptions: { Enero: 'Enero', Febrero: 'Febrero', Marzo: 'Marzo', Abril: 'Abril', Mayo: 'Mayo', Junio: 'Junio', Julio: 'Julio', Agosto: 'Agosto', Septiembre: 'Septiembre', Octubre: 'Octubre', Noviembre: 'Noviembre', Diciembre: 'Diciembre' }, showCancelButton: true, inputPlaceholder: "Seleccione un mes", allowOutsideClick: false, }).then(function (inputValue) { if (inputValue === false || inputValue=== ""){ swal("Seleccion vacia!", "No selecciono ningun mes", "warning"); }else{ swal({ title: 'Añadiendo mes...', allowOutsideClick: false, allowEscapeKey: false }); swal.showLoading(); var orden=''; if (inputValue==='Enero') {orden=1} if (inputValue==='Febrero') {orden=2} if (inputValue==='Marzo') {orden=3} if (inputValue==='Abril') {orden=4} if (inputValue==='Mayo') {orden=5} if (inputValue==='Junio') {orden=6} if (inputValue==='Julio') {orden=7} if (inputValue==='Agosto') {orden=8} if (inputValue==='Septiembre') {orden=9} if (inputValue==='Octubre') {orden=10} if (inputValue==='Noviembre') {orden=11} if (inputValue==='Diciembre') {orden=12} $.ajax({ url: '{{url('administracion/transparenciaccpd/guardarnuevames')}}', type: 'POST', data:{_token:"{{ csrf_token() }}",mes:inputValue,id_anio,orden}, success: function(response) { if (response.success) { // Actualización dinámica sin recargar //onsole.log(response.mes); //actualizarInterfaz(response.mes); swal("Mes guardado!", "Se guardo el nuevo mes", "success"); location.reload(); } else { swal("Error al guardar", 'Ese mes ya exite', "error"); } }, error: function(error) { console.log(error); swal("Error al guardar", 'Ese mes ya exite', "error"); }, }); } }); } // Función para actualizar la interfaz dinámicamente function actualizarInterfaz(nuevoMes) { // 1. Encontrar el contenedor CORRECTO - versión mejorada const contenedorAnio = $(`#accordions-${nuevoMes.anio} .items`); // Cambiado anio_id por anio // Verificación robusta del contenedor if (!contenedorAnio.length) { console.error('Contenedor no encontrado. Buscando:', `#accordions-${nuevoMes.anio} .items`); // Intentar alternativa de selección como fallback const alternativeContainer = $(`.accordions-${nuevoMes.anio} .items`); if (alternativeContainer.length) { console.warn('Usando selector alternativo'); contenedorAnio = alternativeContainer; } else { console.error('No se pudo encontrar ningún contenedor válido'); return; } } // 2. Crear el nuevo elemento del mes - versión optimizada const nuevoAcordeon = $(` <div class="accordion-item"> <h3 class="accordions-head" id="header-${nuevoMes.id}"> <div class="accordion-icons left accordion-plus fa fas fa-chevron-up"></div> <div class="accordion-icons left accordion-minus fa fas fa-chevron-down"></div> <div class="accordions-head-title">${nuevoMes.mes.toUpperCase()}</div> ${nuevoMes.nueva_estructura ? `<button class="btn-mes-action" title="Crear literales" onclick="generar_literales_estructura1(${nuevoMes.id});"><i class="fa fa-bars"></i></button> ` : `<button class="btn-mes-action" title="Añadir literal" onclick="modal_transparencia_nueva(${nuevoMes.id});"><i class="fas fa-plus"></i></button>` } <button class="btn-mes-action" title="Eliminar mes" onclick="SeguroEliminarMes(${nuevoMes.id})"><i class="fas fa-trash-alt"></i></button> </h3> <div class="accordion-content"> <ul id="ul-${nuevoMes.id}"></ul> </div> </div> `); // 3. Añadir con efecto visual contenedorAnio.append(nuevoAcordeon.hide().fadeIn(300)); // 4. Reinicializar el acordeón - PARTE CLAVE const accordionParent = $(`#accordions-${nuevoMes.anio}`); // Destruir el accordion existente si ya está inicializado if (accordionParent.hasClass('ui-accordion')) { accordionParent.accordion('destroy'); } // Volver a inicializar el accordion accordionParent.accordion({ event: "click", collapsible: true, heightStyle: "content", animate: "swing", active: false, header: "> .items > div > h3" // Selector actualizado para los headers }); } function modal_transparencia_nueva(mes_id){ swal({ title: "Literal nuevo", showCancelButton: true, allowOutsideClick: false, html:`<div class="swal2-content"> <input type="text" class="swal2-input" id="letra_literal" style="display: block;" placeholder="Ingrese literal de transparencia. Ejem: A1"> <input type="text" class="swal2-input" id="nombre_literal" style="display: block;" placeholder="Ingrese nombre de literal"> <input type="file" class="swal2-file" id="file_transp" style="display: block;" accept="application/pdf,image/*"> </div>`, showCloseButton: true, showCancelButton: true, showConfirmButton: true, cancelButtonText: 'Cerrar', preConfirm: () => { var inputFile = $('#file_transp').val(); var nombre_literal = $('#nombre_literal').val(); var letra_literal = $('#letra_literal').val(); if (inputFile === false || inputFile === ''){ swal("Seleccion vacia!", "No selecciono ningun archivo", "warning"); }else if (letra_literal === ''){ swal("Literal de transparencia vacio!", "No se ingreso ninguna letra de literal", "warning"); }else if (nombre_literal === ''){ swal("Nombre de transparencia vacio!", "No se ingreso ningun nombre de literal", "warning"); }else { var file = $("#file_transp")[0].files[0]; var dato = new FormData(); dato.append('file_transp',file); dato.append('nombre_literal',nombre_literal); dato.append('letra_literal',letra_literal); dato.append("id_mes", mes_id); dato.append("_token", "{{ csrf_token() }}"); swal({ title: 'Añadiendo literal...', allowOutsideClick: false, allowEscapeKey: false }); swal.showLoading(); $.ajax({ url: '{{url('administracion/transparenciaccpd/guardar_literal')}}', type: 'POST', processData: false, contentType: false, data:dato, // data:{_token:"{{ csrf_token() }}",mes:inputValue,id_anio}, success: function(literal) { if(literal != 0){ swal("literal guardado!", "Se guardo el nuevo literal", "success"); var nuevo_literal = `<li style="font-weight: 400;"id="li-${literal.id}" > <div class="col-md-8"> <a href="${literal.archivo}" target="_blank"> <span style="font-weight: 400;"> Literal ${literal.letra}.- ${literal.literal} </span> </a> </div> <div class="col-md-4" style="text-align: right;"> <button onclick="modal_editar_literal(${literal.id})" style="cursor: pointer;background: transparent;"> <i class="fas fa-edit"></i> </button> <button style="cursor: pointer;background: transparent;" onclick="SeguroEliminarLiteral(${literal.id})" title="Eliminar literal" class=""><i class="fas fa-trash-alt"></i> </button> </div> </li>`; $('#ul-'+mes_id).append(nuevo_literal); } }, error: function(error) { swal("Error al guardar", error, "error"); }, }); } } }).done(); } //para crear la nueva estructura function generar_literales_estructura1(mes_id){ var dato = new FormData(); dato.append("id_mes", mes_id); dato.append("_token", "{{ csrf_token() }}"); swal({ title: 'Atención?', text: "Esta seguro que desea generar todos los literales?", type: 'warning', showCancelButton: true, confirmButtonColor: '#0CC27E', cancelButtonColor: '#FF586B', confirmButtonText: 'Si, Generar!', cancelButtonText: 'No, Cancelar!', confirmButtonClass: 'btn btn-success mr-5', cancelButtonClass: 'btn btn-danger', buttonsStyling: false }).then(function () { swal({ title: 'Creando...', allowOutsideClick: false, allowEscapeKey: false }); swal.showLoading(); $.ajax({ url: "{{url('administracion/transparenciaccpd/generar_literales/1')}}/"+mes_id, type: 'POST', processData: false, contentType: false, data:dato, success: function (data) { if (data.status) { swal( '¡Éxito!', data.mensaje, // mensaje dinámico desde PHP 'success' ).then(() => { location.reload(); }); } else { swal( 'Hubo un inconveniente', data.mensaje, // mensaje de error desde PHP 'error' ); } } }); }, function (dismiss) { // dismiss can be 'overlay', 'cancel', 'close', 'esc', 'timer' if (dismiss === 'cancel') { swal( 'Cancelado', 'Has cancelado', 'error' ) } }); } function modal_editar_literal_estrucuta1(literal_id) { swal({ title: 'Cargando datos del literal...', allowOutsideClick: false, allowEscapeKey: false }); swal.showLoading(); $.ajax({ type: "GET", url: "{{url('administracion/transparenciaccpd/editar_literal/')}}/"+literal_id, data: { "_token": "{{ csrf_token() }}" }, success: function(data) { console.log(data); let modal = ` <div class="swal2-content" style="text-align: left;"> <div class="form-group"> <label>Número del literal</label> <input type="text" class="swal2-input" id="letra_literal" value="${data.letra || ''}" placeholder="Ej: A, B, 1, 2" readonly> </div> <div class="form-group"> <label>Nombre del literal</label> <input type="text" class="swal2-input" id="nombre_literal" value="${data.literal || ''}" placeholder="Nombre descriptivo" readonly> </div> <div class="form-group"> <label>Enlace Conjunto de Datos</label> <input type="url" class="swal2-input" id="link_conjunto_datos" value="${data.conjunto_datos || ''}" placeholder="https://ejemplo.com/datos.csv"> </div> <div class="form-group"> <label>Enlace Metadatos</label> <input type="url" class="swal2-input" id="link_metadatos" value="${data.metadatos || ''}" placeholder="https://ejemplo.com/metadatos.json"> </div> <div class="form-group"> <label>Enlace Diccionario</label> <input type="url" class="swal2-input" id="link_diccionario" value="${data.diccionario || ''}" placeholder="https://ejemplo.com/diccionario.pdf"> </div> </div>`; swal({ title: "Editar literal", html: modal, showCancelButton: true, confirmButtonText: 'Guardar', cancelButtonText: 'Cancelar', allowOutsideClick: false, showCloseButton: true, preConfirm: () => { // Validación básica if(!$('#letra_literal').val() || !$('#nombre_literal').val()) { swal.showValidationError('El número y nombre del literal son obligatorios'); return false; } swal({ title: 'Guardando cambios...', allowOutsideClick: false, allowEscapeKey: false }); swal.showLoading(); var formData = { letra_literal: $('#letra_literal').val(), nombre_literal: $('#nombre_literal').val(), link_conjunto_datos: $('#link_conjunto_datos').val(), link_metadatos: $('#link_metadatos').val(), link_diccionario: $('#link_diccionario').val(), id_literal: literal_id, _token: "{{ csrf_token() }}" }; $.ajax({ url: '{{url("administracion/transparenciaccpd/guardareditarliteral_nuevaestrucutra/1")}}', type: 'POST', data: formData, success: function(response) { if(response && response.success) { swal("¡Actualizado!", "El literal se ha guardado correctamente", "success"); // Actualizar la vista (ajusta según tu estructura HTML) let linksHtml = ` <a href="${response.data.conjunto_datos || '#'}" ${!response.data.conjunto_datos ? 'style="pointer-events: none; color: #ccc;"' : 'style="font-weight: 800; font-family: system-ui; color: #333333;"'} target="_blank">CONJUNTO DE DATOS</a> | <a href="${response.data.metadatos || '#'}" ${!response.data.metadatos ? 'style="pointer-events: none; color: #ccc;"' : 'style="font-weight: 800; font-family: system-ui; color: #333333;"'} target="_blank">METADATOS</a> | <a href="${response.data.diccionario || '#'}" ${!response.data.diccionario ? 'style="pointer-events: none; color: #ccc;"' : 'style="font-weight: 800; font-family: system-ui; color: #333333;"'} target="_blank">DICCIONARIO</a>`; $('#content_btn-'+literal_id).html(linksHtml); } else { swal("Error", response.message || "Hubo un problema al guardar", "error"); } }, error: function(xhr) { let errorMsg = "Error en la solicitud"; swal("Error", errorMsg, "error"); } }); } }); }, error: function(xhr) { swal("Error", "No se pudieron cargar los datos del literal", "error"); } }); } function SeguroEliminarLiteral(id){ swal({ title: 'Estas seguro?', text: "No podrás recuperar lo eliminado!", type: 'warning', showCancelButton: true, confirmButtonColor: '#0CC27E', cancelButtonColor: '#FF586B', confirmButtonText: 'Si, Eliminar!', cancelButtonText: 'No, Cancelar!', confirmButtonClass: 'btn btn-success mr-5', cancelButtonClass: 'btn btn-danger', buttonsStyling: false }).then(function () { swal({ title: 'Eliminando literal...', allowOutsideClick: false, allowEscapeKey: false }); swal.showLoading(); $.ajax({ type: "DELETE", url: "{{url('administracion/transparenciaccpd/deleteliteral/')}}/"+id, data: { "_token": "{{ csrf_token() }}" }, success: function(response) { if(response.success) { swal({ title: "¡Eliminado!", text: response.mensaje, icon: "success" }).then(() => { // Actualizar los links sin negritas let linksHtml = ` <a href="#" class="disabled-link">CONJUNTO DE DATOS</a> | <a href="#" class="disabled-link">METADATOS</a> | <a href="#" class="disabled-link">DICCIONARIO</a> `; // Actualizar el contenedor específico (ajusta el selector según tu HTML) $('#content_btn-' + response.data.id).html(linksHtml); // Alternativa si usas otra estructura: // $('[data-literal-id="' + response.data.id + '"] .links-container').html(linksHtml); }); } else { swal("Error", response.message || "Error al eliminar", "error"); } } }); }, function (dismiss) { if (dismiss === 'cancel') { swal( 'Cancelado', 'Has cancelado la eliminación', 'error' ) } }); } //Eliminar el mes con todo los literales function SeguroEliminarMes(id){ swal({ title: 'Estas seguro?', text: "No podrás recuperar lo eliminado!", type: 'warning', showCancelButton: true, confirmButtonColor: '#0CC27E', cancelButtonColor: '#FF586B', confirmButtonText: 'Si, Eliminar!', cancelButtonText: 'No, Cancelar!', confirmButtonClass: 'btn btn-success mr-5', cancelButtonClass: 'btn btn-danger', buttonsStyling: false }).then(function () { swal({ title: 'Eliminando mes...', allowOutsideClick: false, allowEscapeKey: false }); swal.showLoading(); $.ajax({ type: "DELETE", url: "{{url('administracion/transparenciaccpd/deleteames/')}}/"+id, data: { "_token": "{{ csrf_token() }}" }, success: function (data) { if (data.success) { swal( 'Eliminado!', data.message, 'success' ); location.reload(); } else { swal( 'Hubo un inconveniente', data.message, 'error' ); } } }); }, function (dismiss) { if (dismiss === 'cancel') { swal( 'Cancelado', 'Has cancelado la eliminación', 'error' ) } }); } </script> <script src="{{asset('public/frontend/transparencia/wp-includes/js/jquery/ui/core.min.js')}}" type="text/javascript"> </script> <script src="{{asset('public/frontend/transparencia/wp-includes/js/jquery/ui/widget.min.js')}}" type="text/javascript"> </script> <script src="{{asset('public/frontend/transparencia/wp-includes/js/jquery/ui/accordion.min.js')}}" type="text/javascript"> </script> <script src="{{asset('public/frontend/transparencia/wp-includes/js/jquery/ui/tabs.min.js')}}" type="text/javascript"> </script> <script src="{{asset('public/frontend/transparencia/wp-includes/js/jquery/ui/effect.min.js')}}" type="text/javascript"> </script> <!-- <script src="{{asset('public/frontend/transparencia/wp-content/themes/jannah/assets/js/scripts.js')}}" type="text/javascript"> --> </script> <script src="{{asset('public/frontend/transparencia/wp-includes/js/imagesloaded.min.js')}}" type="text/javascript"> </script> <script src="{{asset('public/frontend/transparencia/wp-includes/js/wp-embed.min.js')}}" type="text/javascript"> </script> <!-- <script src="{{asset('public/frontend/transparencia/wp-content/themes/jannah/assets/js/sliders.js')}}" type="text/javascript"> --> </script> <script src="{{asset('public/frontend/transparencia/wp-content/plugins/js_composer/assets/js/dist/js_composer_front.min.js')}}" type="text/javascript"> </script> <script src="{{asset('public/frontend/transparencia/wp-content/plugins/js_composer/assets/lib/vc_accordion/vc-accordion.min.js')}}" type="text/javascript"> </script> <script src="{{asset('public/frontend/transparencia/wp-content/plugins/js_composer/assets/lib/vc-tta-autoplay/vc-tta-autoplay.min.js')}}" type="text/javascript"> </script> <script src="{{asset('public/frontend/transparencia/wp-content/plugins/js_composer/assets/lib/vc_tabs/vc-tabs.min.js')}}" type="text/javascript"> </script> @endsection