{"id":6267,"date":"2025-09-03T17:13:20","date_gmt":"2025-09-03T15:13:20","guid":{"rendered":"https:\/\/congresonacionaldebibliotecaspublicas.com\/?page_id=6267"},"modified":"2025-11-05T08:34:51","modified_gmt":"2025-11-05T07:34:51","slug":"validar-qr","status":"publish","type":"page","link":"https:\/\/congresonacionaldebibliotecaspublicas.com\/en\/validar-qr\/","title":{"rendered":"Validar QR"},"content":{"rendered":"<div class=\"wrap\" style=\"text-align: center; margin: 20px;\">\n        <h1>Validaci\u00f3n Autom\u00e1tica de C\u00f3digos QR por C\u00e1mara<\/h1>\n        <div id=\"reader\" style=\"width: 300px; margin: auto;\"><\/div>\n\n        <div id=\"result-container\" style=\"margin-top: 20px; padding: 20px; border: 2px solid #007BFF; border-radius: 10px; background-color: #F0F8FF; display: none;\">\n            <h3 style=\"color: #007BFF;\">Resultado:<\/h3>\n            <p id=\"result-display\" style=\"font-size: 20px; font-weight: bold; color: #333;\"><\/p>\n        <\/div>\n    <\/div>\n\n    <script src=\"https:\/\/unpkg.com\/html5-qrcode\" type=\"text\/javascript\"><\/script>\n    <script>\n    document.addEventListener(\"DOMContentLoaded\", function () {\n        const resultContainer = document.getElementById('result-container');\n        const resultDisplay = document.getElementById('result-display');\n        const html5QrCode = new Html5Qrcode(\"reader\");\n\n        function handleScanSuccess(qrCodeMessage) {\n            html5QrCode.stop().then(() => {\n                resultDisplay.innerText = \"Validando...\";\n                resultContainer.style.display = \"block\";\n                resultContainer.style.borderColor = \"#007BFF\";\n                resultContainer.style.backgroundColor = \"#F0F8FF\";\n\n                jQuery.ajax({\n                    url: 'https:\/\/congresonacionaldebibliotecaspublicas.com\/wp-admin\/admin-ajax.php',\n                    method: 'POST',\n                    dataType: 'json',\n                    data: {\n                        action: 'validar_codigo_qr2',\n                        qr: qrCodeMessage\n                    },\n                    success: function (response) {\n                        const empleado = response.empleado || {};\n                        const nombreCompleto = ((empleado.nombre || '') + ' ' + (empleado.apellidos || '')).trim();\n                        let infoExtra = '';\n\n                        \/\/ \ud83d\udd39 Info adicional: cena, sesiones\n                        if (empleado.cena && empleado.estado_cena === 'Admitido') {\n                            infoExtra += `<li><strong>Cena:<\/strong> ${empleado.cena}<\/li>`;\n                        }\n                        if (empleado.sesion && empleado.estado === 'Admitido') {\n                            infoExtra += `<li><strong>Sesi\u00f3n:<\/strong> ${empleado.sesion}<\/li>`;\n                        }\n                        if (empleado.sesion2 && empleado.estado2 === 'Admitido') {\n                            infoExtra += `<li><strong>Sesi\u00f3n 2:<\/strong> ${empleado.sesion2}<\/li>`;\n                        }\n\n                        \/\/ \ud83d\udd39 Visitas admitidas\n                        if (empleado.visitas && empleado.visitas.length > 0) {\n                            infoExtra += `<li><strong>Visitas Admitidas:<\/strong><ul>`;\n                            empleado.visitas.forEach(v => {\n                                const dia1 = v.dia_visita_1 ? ` (D\u00eda ${v.dia_visita_1})` : '';\n                                const dia2 = v.dia_visita_2 ? ` (D\u00eda ${v.dia_visita_2})` : '';\n                                infoExtra += `<li>${v.nombre_visita}${dia1 || dia2}<\/li>`;\n                            });\n                            infoExtra += `<\/ul><\/li>`;\n                        }\n\n                        \/\/ \u2705 Validado\n                        if (response.status === 'validated') {\n                            resultDisplay.innerHTML = `\n                                <p style=\"color: green;\">${response.message}<\/p>\n                                <ul>\n                                    <li><strong>DNI:<\/strong> ${empleado.dni || ''}<\/li>\n                                    <li><strong>Nombre:<\/strong> ${nombreCompleto || ''}<\/li>\n                                    <li><strong>Empresa:<\/strong> ${empleado.empresa || ''}<\/li>\n                                    <li><strong>Cargo:<\/strong> ${empleado.cargo || ''}<\/li>\n                                    ${infoExtra}\n                                <\/ul>\n                            `;\n                            resultContainer.style.borderColor = \"#28a745\";\n                            resultContainer.style.backgroundColor = \"#eaffea\";\n\n                        \/\/ \u26a0\ufe0f Ya validado\n                        } else if (response.status === 'already_validated') {\n                            resultDisplay.innerHTML = `\n                                <p style=\"color: orange;\">${response.message}<\/p>\n                                <ul>\n                                    <li><strong>DNI:<\/strong> ${empleado.dni || ''}<\/li>\n                                    <li><strong>Nombre:<\/strong> ${nombreCompleto || ''}<\/li>\n                                    <li><strong>Empresa:<\/strong> ${empleado.empresa || ''}<\/li>\n                                    <li><strong>Cargo:<\/strong> ${empleado.cargo || ''}<\/li>\n                                    ${infoExtra}\n                                <\/ul>\n                            `;\n                            resultContainer.style.borderColor = \"#ffc107\";\n                            resultContainer.style.backgroundColor = \"#fff3cd\";\n\n                        \/\/ \u274c Error\n                        } else {\n                            resultDisplay.innerHTML = `<p style=\"color: red;\">${response.message}<\/p>`;\n                            resultContainer.style.borderColor = \"#dc3545\";\n                            resultContainer.style.backgroundColor = \"#f8d7da\";\n                        }\n\n                        \/\/ \ud83d\udd01 Reanudar escaneo\n                        setTimeout(() => {\n                            html5QrCode.start(\n                                { facingMode: \"environment\" },\n                                { fps: 10, qrbox: 250 },\n                                handleScanSuccess\n                            );\n                        }, 1500);\n                    },\n                    error: function () {\n                        resultDisplay.innerText = \"Error al procesar el c\u00f3digo QR.\";\n                        resultContainer.style.borderColor = \"#dc3545\";\n                        resultContainer.style.backgroundColor = \"#f8d7da\";\n                        html5QrCode.start(\n                            { facingMode: \"environment\" },\n                            { fps: 10, qrbox: 250 },\n                            handleScanSuccess\n                        );\n                    }\n                });\n            });\n        }\n\n        Html5Qrcode.getCameras().then(cameras => {\n            if (cameras && cameras.length) {\n                html5QrCode.start(\n                    { facingMode: \"environment\" },\n                    { fps: 10, qrbox: 250 },\n                    handleScanSuccess\n                );\n            } else {\n                resultDisplay.innerText = \"No se detectaron c\u00e1maras.\";\n                resultContainer.style.display = \"block\";\n            }\n        }).catch(err => {\n            resultDisplay.innerText = \"Error al acceder a la c\u00e1mara.\";\n            resultContainer.style.display = \"block\";\n        });\n    });\n    <\/script>","protected":false},"excerpt":{"rendered":"","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-6267","page","type-page","status-publish","hentry"],"ams_acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v26.4 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Validar QR - Congreso Nacional de Bibliotecas Publicas<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/congresonacionaldebibliotecaspublicas.com\/en\/validar-qr\/\" \/>\n<meta property=\"og:locale\" content=\"en_GB\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Validar QR - Congreso Nacional de Bibliotecas Publicas\" \/>\n<meta property=\"og:url\" content=\"https:\/\/congresonacionaldebibliotecaspublicas.com\/en\/validar-qr\/\" \/>\n<meta property=\"og:site_name\" content=\"Congreso Nacional de Bibliotecas Publicas\" \/>\n<meta property=\"article:modified_time\" content=\"2025-11-05T07:34:51+00:00\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Estimated reading time\" \/>\n\t<meta name=\"twitter:data1\" content=\"1 minute\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/congresonacionaldebibliotecaspublicas.com\/validar-qr\/\",\"url\":\"https:\/\/congresonacionaldebibliotecaspublicas.com\/validar-qr\/\",\"name\":\"Validar QR - Congreso Nacional de Bibliotecas Publicas\",\"isPartOf\":{\"@id\":\"https:\/\/congresonacionaldebibliotecaspublicas.com\/#website\"},\"datePublished\":\"2025-09-03T15:13:20+00:00\",\"dateModified\":\"2025-11-05T07:34:51+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/congresonacionaldebibliotecaspublicas.com\/validar-qr\/#breadcrumb\"},\"inLanguage\":\"en-GB\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/congresonacionaldebibliotecaspublicas.com\/validar-qr\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/congresonacionaldebibliotecaspublicas.com\/validar-qr\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Portada\",\"item\":\"https:\/\/congresonacionaldebibliotecaspublicas.com\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Validar QR\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/congresonacionaldebibliotecaspublicas.com\/#website\",\"url\":\"https:\/\/congresonacionaldebibliotecaspublicas.com\/\",\"name\":\"Congreso Nacional de Bibliotecas Publicas\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\/\/congresonacionaldebibliotecaspublicas.com\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/congresonacionaldebibliotecaspublicas.com\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-GB\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/congresonacionaldebibliotecaspublicas.com\/#organization\",\"name\":\"Congreso Nacional de Bibliotecas Publicas\",\"url\":\"https:\/\/congresonacionaldebibliotecaspublicas.com\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-GB\",\"@id\":\"https:\/\/congresonacionaldebibliotecaspublicas.com\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/congresonacionaldebibliotecaspublicas.com\/wp-content\/uploads\/2025\/09\/cropped-images.png\",\"contentUrl\":\"https:\/\/congresonacionaldebibliotecaspublicas.com\/wp-content\/uploads\/2025\/09\/cropped-images.png\",\"width\":395,\"height\":112,\"caption\":\"Congreso Nacional de Bibliotecas Publicas\"},\"image\":{\"@id\":\"https:\/\/congresonacionaldebibliotecaspublicas.com\/#\/schema\/logo\/image\/\"}}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Validar QR - Congreso Nacional de Bibliotecas Publicas","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/congresonacionaldebibliotecaspublicas.com\/en\/validar-qr\/","og_locale":"en_GB","og_type":"article","og_title":"Validar QR - Congreso Nacional de Bibliotecas Publicas","og_url":"https:\/\/congresonacionaldebibliotecaspublicas.com\/en\/validar-qr\/","og_site_name":"Congreso Nacional de Bibliotecas Publicas","article_modified_time":"2025-11-05T07:34:51+00:00","twitter_card":"summary_large_image","twitter_misc":{"Estimated reading time":"1 minute"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/congresonacionaldebibliotecaspublicas.com\/validar-qr\/","url":"https:\/\/congresonacionaldebibliotecaspublicas.com\/validar-qr\/","name":"Validar QR - Congreso Nacional de Bibliotecas Publicas","isPartOf":{"@id":"https:\/\/congresonacionaldebibliotecaspublicas.com\/#website"},"datePublished":"2025-09-03T15:13:20+00:00","dateModified":"2025-11-05T07:34:51+00:00","breadcrumb":{"@id":"https:\/\/congresonacionaldebibliotecaspublicas.com\/validar-qr\/#breadcrumb"},"inLanguage":"en-GB","potentialAction":[{"@type":"ReadAction","target":["https:\/\/congresonacionaldebibliotecaspublicas.com\/validar-qr\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/congresonacionaldebibliotecaspublicas.com\/validar-qr\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Portada","item":"https:\/\/congresonacionaldebibliotecaspublicas.com\/"},{"@type":"ListItem","position":2,"name":"Validar QR"}]},{"@type":"WebSite","@id":"https:\/\/congresonacionaldebibliotecaspublicas.com\/#website","url":"https:\/\/congresonacionaldebibliotecaspublicas.com\/","name":"Congreso Nacional de Bibliotecas Publicas","description":"","publisher":{"@id":"https:\/\/congresonacionaldebibliotecaspublicas.com\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/congresonacionaldebibliotecaspublicas.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-GB"},{"@type":"Organization","@id":"https:\/\/congresonacionaldebibliotecaspublicas.com\/#organization","name":"Congreso Nacional de Bibliotecas Publicas","url":"https:\/\/congresonacionaldebibliotecaspublicas.com\/","logo":{"@type":"ImageObject","inLanguage":"en-GB","@id":"https:\/\/congresonacionaldebibliotecaspublicas.com\/#\/schema\/logo\/image\/","url":"https:\/\/congresonacionaldebibliotecaspublicas.com\/wp-content\/uploads\/2025\/09\/cropped-images.png","contentUrl":"https:\/\/congresonacionaldebibliotecaspublicas.com\/wp-content\/uploads\/2025\/09\/cropped-images.png","width":395,"height":112,"caption":"Congreso Nacional de Bibliotecas Publicas"},"image":{"@id":"https:\/\/congresonacionaldebibliotecaspublicas.com\/#\/schema\/logo\/image\/"}}]}},"_links":{"self":[{"href":"https:\/\/congresonacionaldebibliotecaspublicas.com\/en\/wp-json\/wp\/v2\/pages\/6267","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/congresonacionaldebibliotecaspublicas.com\/en\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/congresonacionaldebibliotecaspublicas.com\/en\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/congresonacionaldebibliotecaspublicas.com\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/congresonacionaldebibliotecaspublicas.com\/en\/wp-json\/wp\/v2\/comments?post=6267"}],"version-history":[{"count":1,"href":"https:\/\/congresonacionaldebibliotecaspublicas.com\/en\/wp-json\/wp\/v2\/pages\/6267\/revisions"}],"predecessor-version":[{"id":6268,"href":"https:\/\/congresonacionaldebibliotecaspublicas.com\/en\/wp-json\/wp\/v2\/pages\/6267\/revisions\/6268"}],"wp:attachment":[{"href":"https:\/\/congresonacionaldebibliotecaspublicas.com\/en\/wp-json\/wp\/v2\/media?parent=6267"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}