/* === Calculadora del margen · Shortcode [calculadora_margen] === */
add_action(‘wp_enqueue_scripts’, function () {
// Registra “handles” vacíos para inyectar CSS/JS inline de forma segura
if (!wp_script_is(‘ci-calc’, ‘registered’)) {
wp_register_script(‘ci-calc’, ”, [], null, true);
}
if (!wp_style_is(‘ci-calc-style’, ‘registered’)) {
wp_register_style(‘ci-calc-style’, false);
}
});
add_shortcode(‘calculadora_margen’, function () {
// CSS (inline, scopeado)
$css = <<
var elB=document.getElementById(‘ci-benef’), elM=document.getElementById(‘ci-margen’);
if(elB) elB.textContent=fmtEur(beneficio);
if(elM) elM.textContent=fmtPct(margen);
diagnose(margen);
}
// delegación por si el editor mueve nodos
document.addEventListener(‘input’, function(e){ if(e.target && e.target.closest && e.target.closest(‘#ciCalc’)) calc(); });
document.addEventListener(‘change’, function(e){ if(e.target && e.target.closest && e.target.closest(‘#ciCalc’)) calc(); });
// botón redundante
document.addEventListener(‘click’, function(e){
if(e.target && (e.target.id===’ci-btn-calc’ || e.target.closest && e.target.closest(‘#ci-btn-calc’))) calc();
});
// primer render
document.addEventListener(‘DOMContentLoaded’, calc);
window.addEventListener(‘load’, calc);
})();
JS;
// Encola y mete inline
wp_enqueue_style(‘ci-calc-style’);
wp_add_inline_style(‘ci-calc-style’, $css);
wp_enqueue_script(‘ci-calc’);
wp_add_inline_script(‘ci-calc’, $js);
// HTML de la calculadora
ob_start(); ?>
Calculadora del margen real
—
= cobrado − (horas×precio + materiales + gastos)
—
—
—
| Sector | Margen medio | Saludable |
|---|---|---|
| Climatización | 18 % | 25–30 % |
| Fontanería | 20 % | 25–35 % |
| Electricidad | 15 % | 25–30 % |
| PCI (Incendios) | 22 % | 30–40 % |
