{"id":5975,"date":"2026-02-26T23:17:42","date_gmt":"2026-02-27T02:17:42","guid":{"rendered":"https:\/\/matematicasaomiguel.com.br\/?page_id=5975"},"modified":"2026-02-28T19:00:02","modified_gmt":"2026-02-28T22:00:02","slug":"horario-escolar-2","status":"publish","type":"page","link":"https:\/\/matematicasaomiguel.com.br\/?page_id=5975","title":{"rendered":"HOR\u00c1RIO ESCOLAR 2"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"5975\" class=\"elementor elementor-5975\">\n\t\t\t\t<div class=\"elementor-element elementor-element-d18cbd5 e-flex e-con-boxed e-con e-parent\" data-id=\"d18cbd5\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-75c3031 e-transform elementor-widget elementor-widget-html\" data-id=\"75c3031\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;_transform_scale_effect&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;_transform_scale_effect_widescreen&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;_transform_scale_effect_laptop&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;_transform_scale_effect_tablet&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;_transform_scale_effect_mobile_extra&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;_transform_scale_effect_mobile&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]}}\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<!DOCTYPE html>\r\n<html lang=\"pt-br\">\r\n<head>\r\n<meta charset=\"UTF-8\">\r\n<title>Hor\u00e1rio Escolar - Com Salvamento<\/title>\r\n\r\n<script src=\"https:\/\/cdnjs.cloudflare.com\/ajax\/libs\/xlsx\/0.18.5\/xlsx.full.min.js\"><\/script>\r\n\r\n<style>\r\n    body { font-family: Arial, sans-serif; margin:20px; background-color: #f4f4f9; }\r\n    h2 { color: #333; }\r\n    .container { background: white; padding: 20px; border-radius: 8px; box-shadow: 0 2px 5px rgba(0,0,0,0.1); }\r\n    table { border-collapse: collapse; width:100%; margin-top:20px; background: white; }\r\n    th, td { border:1px solid #ccc; padding:8px; text-align:center; }\r\n    th { background:#e9e9e9; }\r\n    select { width:100%; padding: 4px; border-radius: 4px; }\r\n    .conflito { background:#ffb3b3 !important; }\r\n    button { margin:5px; padding: 10px 15px; cursor: pointer; border: none; border-radius: 4px; font-weight: bold; }\r\n    .btn-primary { background-color: #007bff; color: white; }\r\n    .btn-success { background-color: #28a745; color: white; }\r\n    .btn-danger { background-color: #dc3545; color: white; }\r\n    hr { margin: 20px 0; border: 0; border-top: 1px solid #eee; }\r\n<\/style>\r\n<\/head>\r\n<body>\r\n\r\n<div class=\"container\">\r\n    <h2>1. Configura\u00e7\u00e3o<\/h2>\r\n    Quantidade de Turmas (6 a 10):\r\n    <select id=\"qtdTurmas\" style=\"width: auto;\" onchange=\"gerarTabela(true)\">\r\n        <option value=\"6\">6<\/option>\r\n        <option value=\"7\">7<\/option>\r\n        <option value=\"8\">8<\/option>\r\n        <option value=\"9\">9<\/option>\r\n        <option value=\"10\">10<\/option>\r\n    <\/select>\r\n    <p><small>* Alterar a quantidade de turmas reinicia a grade hor\u00e1ria.<\/small><\/p>\r\n\r\n    <hr>\r\n\r\n    <h2>2. Cadastro de Professores<\/h2>\r\n    Disciplina: <input type=\"text\" id=\"disciplina\" placeholder=\"Ex: Matem\u00e1tica\">\r\n    Professor: <input type=\"text\" id=\"professor\" placeholder=\"Ex: Jo\u00e3o Silva\"><br><br>\r\n\r\n    Dias dispon\u00edveis:\r\n    <input type=\"checkbox\" name=\"dia\" value=\"Segunda\">Seg\r\n    <input type=\"checkbox\" name=\"dia\" value=\"Ter\u00e7a\">Ter\r\n    <input type=\"checkbox\" name=\"dia\" value=\"Quarta\">Qua\r\n    <input type=\"checkbox\" name=\"dia\" value=\"Quinta\">Qui\r\n    <input type=\"checkbox\" name=\"dia\" value=\"Sexta\">Sex\r\n\r\n    <br><br>\r\n    <button class=\"btn-primary\" onclick=\"cadastrar()\">Cadastrar Professor<\/button>\r\n    <button class=\"btn-danger\" onclick=\"limparTudo()\">Limpar Todos os Dados<\/button>\r\n\r\n    <hr>\r\n\r\n    <div id=\"planilha\"><\/div>\r\n\r\n    <br>\r\n    <button class=\"btn-success\" onclick=\"exportarExcel()\">Exportar para Excel<\/button>\r\n<\/div>\r\n\r\n<script>\r\nconst dias = [\"Segunda\",\"Ter\u00e7a\",\"Quarta\",\"Quinta\",\"Sexta\"];\r\nconst horarios = [\r\n    \"13:00-14:00 (1\u00aa)\",\r\n    \"14:00-15:00 (2\u00aa)\",\r\n    \"15:10-16:10 (3\u00aa)\",\r\n    \"16:10-17:10 (4\u00aa)\",\r\n    \"17:10-18:10 (5\u00aa)\"\r\n];\r\n\r\nlet professores = JSON.parse(localStorage.getItem('professores')) || [];\r\nlet gradeSalva = JSON.parse(localStorage.getItem('gradeHoraria')) || {};\r\n\r\n\/\/ Ao carregar a p\u00e1gina\r\nwindow.onload = function() {\r\n    const qtdSalva = localStorage.getItem('qtdTurmas');\r\n    if(qtdSalva) document.getElementById(\"qtdTurmas\").value = qtdSalva;\r\n    gerarTabela(false); \r\n};\r\n\r\nfunction gerarTabela(isReset){\r\n    const qtd = parseInt(document.getElementById(\"qtdTurmas\").value);\r\n    localStorage.setItem('qtdTurmas', qtd);\r\n    \r\n    if(isReset) {\r\n        gradeSalva = {};\r\n        localStorage.removeItem('gradeHoraria');\r\n    }\r\n\r\n    let turmas = [];\r\n    for(let i=0; i<qtd; i++){\r\n        turmas.push(\"1\u00ba \" + String.fromCharCode(65+i));\r\n    }\r\n\r\n    const div = document.getElementById(\"planilha\");\r\n    let html = \"<table id='tabelaHorario'><thead><tr><th>Dia<\/th><th>Hor\u00e1rio<\/th>\";\r\n    turmas.forEach(t => html += \"<th>\"+t+\"<\/th>\");\r\n    html += \"<\/tr><\/thead><tbody>\";\r\n\r\n    dias.forEach(dia => {\r\n        horarios.forEach((hora) => {\r\n            const idLinha = `${dia}-${hora}`;\r\n            html += `<tr data-id=\"${idLinha}\"><td>${dia}<\/td><td>${hora}<\/td>`;\r\n\r\n            turmas.forEach((turma, index) => {\r\n                const idCelula = `${idLinha}-${index}`;\r\n                const valorSalvo = gradeSalva[idCelula] || \"\";\r\n                html += `<td><select data-celula=\"${idCelula}\" onchange=\"salvarSelecao(this)\">\r\n                            <option value=\"\">--<\/option>\r\n                         <\/select><\/td>`;\r\n            });\r\n            html += \"<\/tr>\";\r\n        });\r\n    });\r\n\r\n    html += \"<\/tbody><\/table>\";\r\n    div.innerHTML = html;\r\n    atualizarSelects();\r\n}\r\n\r\nfunction cadastrar(){\r\n    const disciplina = document.getElementById(\"disciplina\").value;\r\n    const professor = document.getElementById(\"professor\").value;\r\n    const checks = document.querySelectorAll(\"input[name=dia]:checked\");\r\n\r\n    if(!disciplina || !professor){\r\n        alert(\"Preencha todos os campos!\");\r\n        return;\r\n    }\r\n\r\n    const diasDisp = Array.from(checks).map(c=>c.value);\r\n    professores.push({disciplina, professor, diasDisp});\r\n    \r\n    localStorage.setItem('professores', JSON.stringify(professores));\r\n    \r\n    atualizarSelects();\r\n    alert(\"Cadastro realizado!\");\r\n\r\n    document.getElementById(\"disciplina\").value=\"\";\r\n    document.getElementById(\"professor\").value=\"\";\r\n    checks.forEach(c=>c.checked=false);\r\n}\r\n\r\nfunction atualizarSelects(){\r\n    document.querySelectorAll(\"#tabelaHorario select\").forEach(select=>{\r\n        const row = select.closest(\"tr\");\r\n        const dia = row.cells[0].innerText;\r\n        const idCelula = select.getAttribute('data-celula');\r\n        const valorSalvo = gradeSalva[idCelula] || \"\";\r\n\r\n        select.innerHTML = \"<option value=''>--<\/option>\";\r\n\r\n        professores.forEach(p=>{\r\n            if(p.diasDisp.includes(dia)){\r\n                const op = document.createElement(\"option\");\r\n                op.value = p.disciplina + \" - \" + p.professor; \r\n                op.text = p.disciplina + \" - \" + p.professor;\r\n                if(op.value === valorSalvo) op.selected = true;\r\n                select.appendChild(op);\r\n            }\r\n        });\r\n        verificarConflito(select);\r\n    });\r\n    \/\/ No final da fun\u00e7\u00e3o atualizarSelects, adicione isso:\r\nconst todasAsLinhas = document.querySelectorAll(\"#tabelaHorario tbody tr\");\r\ntodasAsLinhas.forEach(linha => {\r\n    const primeiroSelect = linha.querySelector(\"select\");\r\n    if(primeiroSelect) verificarConflito(primeiroSelect);\r\n});\r\n}\r\n\r\nfunction salvarSelecao(select) {\r\n    const idCelula = select.getAttribute('data-celula');\r\n    gradeSalva[idCelula] = select.value;\r\n    localStorage.setItem('gradeHoraria', JSON.stringify(gradeSalva));\r\n    verificarConflito(select);\r\n}\r\n\r\nfunction verificarConflito(select){\r\n    const row = select.closest(\"tr\");\r\n    const selects = row.querySelectorAll(\"select\");\r\n    let nomesDosProfessoresNaLinha = [];\r\n    let conflito = false;\r\n\r\n    \/\/ 1. Coletar todos os nomes de professores selecionados nesta linha\r\n    selects.forEach(s => {\r\n        if(s.value){\r\n            \/\/ Usamos o split(\" - \") e pegamos a segunda parte [1] para isolar o nome\r\n            const partes = s.value.split(\" - \");\r\n            const nomeProfessor = partes[1] ? partes[1].trim() : s.value;\r\n            \r\n            \/\/ 2. Verificar se esse nome j\u00e1 apareceu na lista desta linha\r\n            if(nomesDosProfessoresNaLinha.includes(nomeProfessor)){\r\n                conflito = true;\r\n            }\r\n            nomesDosProfessoresNaLinha.push(nomeProfessor);\r\n        }\r\n    });\r\n\r\n    \/\/ 3. Aplicar ou remover a cor de alerta na linha toda\r\n    if(conflito) {\r\n        row.style.backgroundColor = \"#ffb3b3\"; \/\/ Cor de erro\r\n    } else {\r\n        row.style.backgroundColor = \"\"; \/\/ Volta ao normal\r\n    }\r\n}\r\n\r\nfunction limparTudo() {\r\n    if(confirm(\"Tem certeza que deseja apagar todos os professores e hor\u00e1rios salvos?\")) {\r\n        localStorage.clear();\r\n        location.reload();\r\n    }\r\n}\r\n\r\nfunction exportarExcel(){\r\n    const tabela = document.getElementById(\"tabelaHorario\");\r\n    const dados = [];\r\n    \r\n    const cabecalho = [];\r\n    tabela.querySelectorAll(\"thead th\").forEach(th => cabecalho.push(th.innerText));\r\n    dados.push(cabecalho);\r\n\r\n    tabela.querySelectorAll(\"tbody tr\").forEach(tr => {\r\n        const linhaDados = [];\r\n        tr.querySelectorAll(\"td\").forEach(td => {\r\n            const select = td.querySelector(\"select\");\r\n            if(select) {\r\n                linhaDados.push(select.value || \"\");\r\n            } else {\r\n                linhaDados.push(td.innerText);\r\n            }\r\n        });\r\n        dados.push(linhaDados);\r\n    });\r\n\r\n    const wb = XLSX.utils.book_new();\r\n    const ws = XLSX.utils.aoa_to_sheet(dados);\r\n    XLSX.utils.book_append_sheet(wb, ws, \"Hor\u00e1rio\");\r\n    XLSX.writeFile(wb, \"Horario_Escolar.xlsx\");\r\n}\r\n<\/script>\r\n\r\n<\/body>\r\n<\/html>\r\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>Hor\u00e1rio Escolar &#8211; Com Salvamento 1. Configura\u00e7\u00e3o Quantidade de Turmas (6 a 10): 678910 * Alterar a quantidade de turmas [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"elementor_header_footer","meta":{"site-sidebar-layout":"no-sidebar","site-content-layout":"","ast-site-content-layout":"full-width-container","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"disabled","ast-breadcrumbs-content":"","ast-featured-img":"disabled","footer-sml-layout":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"default","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"footnotes":""},"class_list":["post-5975","page","type-page","status-publish","hentry"],"jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/matematicasaomiguel.com.br\/index.php?rest_route=\/wp\/v2\/pages\/5975","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/matematicasaomiguel.com.br\/index.php?rest_route=\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/matematicasaomiguel.com.br\/index.php?rest_route=\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/matematicasaomiguel.com.br\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/matematicasaomiguel.com.br\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=5975"}],"version-history":[{"count":22,"href":"https:\/\/matematicasaomiguel.com.br\/index.php?rest_route=\/wp\/v2\/pages\/5975\/revisions"}],"predecessor-version":[{"id":6004,"href":"https:\/\/matematicasaomiguel.com.br\/index.php?rest_route=\/wp\/v2\/pages\/5975\/revisions\/6004"}],"wp:attachment":[{"href":"https:\/\/matematicasaomiguel.com.br\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=5975"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}