{"id":258732,"date":"2026-05-25T16:49:29","date_gmt":"2026-05-25T15:49:29","guid":{"rendered":"https:\/\/md.glucube.com\/en\/?page_id=258732"},"modified":"2026-10-20T18:37:44","modified_gmt":"2026-10-20T17:37:44","slug":"user-manuals","status":"publish","type":"page","link":"https:\/\/www.glucube.com\/en\/user-manuals\/","title":{"rendered":"USER MANUALS"},"content":{"rendered":"\n<div class=\"et_pb_section_0 et_pb_section et_section_regular et_block_section\"><div class=\"et_pb_row_0 et_pb_row et_block_row\"><div class=\"et_pb_column_0 et_pb_column et_pb_column_4_4 et-last-child et_block_column et_pb_css_mix_blend_mode_passthrough\"><div class=\"et_pb_text_0 et_pb_text et_pb_bg_layout_light et_pb_module et_block_module\"><div class=\"et_pb_text_inner\"><p class=\"p1\">USER MANUALS<\/p>\n<\/div><\/div><\/div><\/div><\/div><div class=\"et_pb_section_1 et_pb_section et_section_regular et_block_section\"><div class=\"et_pb_row_1 et_pb_row et_block_row\"><div class=\"et_pb_column_1 et_pb_column et_pb_column_4_4 et-last-child et_block_column et_pb_css_mix_blend_mode_passthrough\"><div class=\"et_pb_code_0 et_pb_code et_pb_module\"><div class=\"et_pb_code_inner\"><div id=\"contenedor-html\">\n<p class=\"loading\">Loading manuals...<\/p>\n<\/div>\n\n<script>\n    function getError() {\n        return '<p class=\"error\">Manuals could not be loaded. Please try again later. If the problem persists, contact Customer Service<\/p>';\n    }\n\n    \/\/ Construye la URL de cada grupo de manuales\n    function urlGrupo(base, grupo) {\n        const params = new URLSearchParams();\n        params.set('items[0][nombre_grupo]', grupo);\n        return base + '?' + params.toString();\n    }\n\n    \/\/ Parche temporal: si un manual llega con varias versiones \"Vigente\",\n    \/\/ deja vigente solo la de n\u00famero m\u00e1s alto y pasa las dem\u00e1s a obsoletas.\n    function normalizarVigentes(contenedor) {\n        function leerVersion(bloque) {\n            const fila = Array.from(bloque.querySelectorAll('.meta-row')).find(function (r) {\n                const label = r.querySelector('.meta-label');\n                return label && \/versi\/i.test(label.textContent);\n            });\n            return fila ? (parseInt(fila.querySelector('.meta-value').textContent, 10) || 0) : 0;\n        }\n\n        contenedor.querySelectorAll('.cat-block').forEach(function (cat) {\n            const vigentes = Array.from(cat.children).filter(function (b) {\n                return b.classList.contains('vigente-block') && b.querySelector('.badge-v');\n            });\n            if (vigentes.length < 2) return;\n\n            vigentes.sort(function (a, b) { return leerVersion(b) - leerVersion(a); });\n\n            let obs = Array.from(cat.children).find(function (e) { return e.classList.contains('obs-section'); });\n            if (!obs) {\n                obs = document.createElement('div');\n                obs.className = 'obs-section';\n                obs.innerHTML =\n                    '<div class=\"obs-toggle\"><span>Versiones obsoletas<\/span><span class=\"obs-arrow\">\u25bc<\/span><\/div>' +\n                    '<div class=\"obs-body\"><\/div>';\n                cat.appendChild(obs);\n            }\n            let body = obs.querySelector('.obs-body');\n            if (!body) {\n                body = document.createElement('div');\n                body.className = 'obs-body';\n                obs.appendChild(body);\n            }\n\n            vigentes.slice(1).forEach(function (b) {\n                const badge = b.querySelector('.badge-v');\n                badge.className = 'badge-obs';\n                badge.textContent = 'Obsoleta';\n                b.className = 'obs-row';\n                body.insertBefore(b, body.firstChild);\n            });\n        });\n    }\n\n    async function embeberManuales() {\n        const contenedor = document.getElementById('contenedor-html');\n\n        const urls = [\n            urlGrupo('https:\/\/panel.glucube.com\/api\/info\/s3-generate-manuals-group-odoo-html', 'instructions-for-use'),\n            urlGrupo('https:\/\/panel.glucube.com\/api\/info\/s3-generate-manuals-group-odoo-html', 'instructions-for-use-user'),\n            urlGrupo('https:\/\/panel.glucube.com\/api\/info\/s3-generate-manuals-group-odoo-html', 'instructions-for-use-professional')\n        ];\n\n        try {\n            const peticiones = urls.map(url => fetch(url, { method: 'GET' }).catch(err => null));\n            const respuestas = await Promise.all(peticiones);\n\n            let htmlAcumulado = '';\n            for (const response of respuestas) {\n                if (response && response.ok) {\n                    const htmlRecibido = await response.text();\n                    if (htmlRecibido && htmlRecibido.trim().length > 0) {\n                        htmlAcumulado += htmlRecibido;\n                    }\n                }\n            }\n\n            if (htmlAcumulado.trim().length > 0) {\n                contenedor.innerHTML = htmlAcumulado;\n\n                \/\/ NUEVO: corrige versiones vigentes duplicadas\n                normalizarVigentes(contenedor);\n\n                \/\/ Se mantiene del c\u00f3digo anterior\n                const labels = [\"Categor\u00eda\", \"Estado\", \"Versi\u00f3n\", \"Fecha Efectiva\", \"Idiomas\"];\n                contenedor.querySelectorAll(\"tbody tr\").forEach(row => {\n                    row.querySelectorAll(\"td\").forEach((td, i) => {\n                        if (labels[i]) td.setAttribute(\"data-label\", labels[i]);\n                    });\n                });\n            } else {\n                contenedor.innerHTML = getError();\n            }\n        } catch (error) {\n            console.error(\"Error global al cargar los manuales:\", error);\n            contenedor.innerHTML = getError();\n        }\n    }\n\n    \/\/ Abre y cierra la secci\u00f3n de obsoletas\n    document.addEventListener('click', function (e) {\n        const toggle = e.target.closest('#contenedor-html .obs-toggle');\n        if (toggle && !toggle.hasAttribute('onclick')) {\n            toggle.closest('.obs-section').classList.toggle('obs-open');\n        }\n    });\n\n    window.onload = embeberManuales;\n<\/script>\n<style>.et-l--post .lang-grid a{color:#4382FF !important;background:#F0F5FF !important;border-color:#D0DFFF !important;}.et-l--post .lang-grid a:hover,.et-l--post .obs-row .lang-grid a:hover{background:#4382FF !important;color:#FFFFFF !important;border-color:#4382FF !important;}<\/style>\n<script>(function(){var D={\"Manual del usuario\":\"User manual\",\"Estado\":\"Status\",\"Vigente\":\"Current\",\"Versi\u00f3n\":\"Version\",\"Fecha\":\"Date\",\"Fecha Efectiva\":\"Effective date\",\"Categor\u00eda\":\"Category\",\"Idiomas\":\"Languages\",\"Versiones obsoletas\":\"Obsolete versions\",\"Obsoleta\":\"Obsolete\"};var R=[[\/Para usuarios\/g,\"For users\"],[\/Para profesionales\/g,\"For professionals\"],[\/Manual del usuario\/g,\"User manual\"]];function tr(){var c=document.getElementById(\"contenedor-html\");if(!c)return;var w=document.createTreeWalker(c,4),n;while(n=w.nextNode()){if(n.parentElement&&n.parentElement.closest(\"style,script\"))continue;var t=n.textContent,k=t.trim();if(D[k]){n.textContent=t.replace(k,D[k]);continue;}var u=t;R.forEach(function(r){u=u.replace(r[0],r[1]);});if(u!==t)n.textContent=u;}}var tm,mo=new MutationObserver(function(){clearTimeout(tm);tm=setTimeout(tr,400);});function go(){var c=document.getElementById(\"contenedor-html\");if(c){mo.observe(c,{childList:true,subtree:true,characterData:true});tr();}}if(document.readyState===\"loading\"){document.addEventListener(\"DOMContentLoaded\",go);}else{go();}})();<\/script><\/div><\/div><\/div><\/div><\/div>\n","protected":false},"excerpt":{"rendered":"","protected":false},"author":4,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-258732","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/www.glucube.com\/en\/wp-json\/wp\/v2\/pages\/258732","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.glucube.com\/en\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/www.glucube.com\/en\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/www.glucube.com\/en\/wp-json\/wp\/v2\/users\/4"}],"replies":[{"embeddable":true,"href":"https:\/\/www.glucube.com\/en\/wp-json\/wp\/v2\/comments?post=258732"}],"version-history":[{"count":3,"href":"https:\/\/www.glucube.com\/en\/wp-json\/wp\/v2\/pages\/258732\/revisions"}],"predecessor-version":[{"id":260209,"href":"https:\/\/www.glucube.com\/en\/wp-json\/wp\/v2\/pages\/258732\/revisions\/260209"}],"wp:attachment":[{"href":"https:\/\/www.glucube.com\/en\/wp-json\/wp\/v2\/media?parent=258732"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}