{"id":93152,"date":"2026-10-20T09:41:26","date_gmt":"2026-10-20T08:41:26","guid":{"rendered":"https:\/\/staging.academiaclinicadragao.com\/?page_id=93152"},"modified":"2026-10-28T15:02:53","modified_gmt":"2026-10-28T15:02:53","slug":"detalhes-curso","status":"publish","type":"page","link":"https:\/\/staging.academiaclinicadragao.com\/en\/portal-dos-gestores-operacionais\/os-meus-cursos\/detalhes-curso\/","title":{"rendered":"Course Details"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"93152\" class=\"elementor elementor-93152\" data-elementor-post-type=\"page\">\n\t\t\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-77c0099 elementor-section-boxed elementor-section-height-default elementor-section-height-default wd-section-disabled\" data-id=\"77c0099\" data-element_type=\"section\" data-e-type=\"section\" data-settings=\"{&quot;jet_parallax_layout_list&quot;:[]}\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-144869b\" data-id=\"144869b\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-6952a7c elementor-widget elementor-widget-shortcode\" data-id=\"6952a7c\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"shortcode.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\">\n<script>\n\/* DataPress uses a fixed server-side redirect after creating an incident.\n   Restore the original English URL only when an English incident submission\n   actually returns to this Portuguese course-details page. *\/\n(function () {\n  try {\n    var key = 'gc_ocorrencia_redirect_v1';\n    var saved = sessionStorage.getItem(key);\n    if (!saved || \/^\\\/en(?:\\\/|$)\/i.test(window.location.pathname)) return;\n    var info = JSON.parse(saved);\n    if (!info || !info.url || !\/^\\\/en\\\/portal-dos-gestores-operacionais\\\/os-meus-cursos\\\/detalhes-curso\\\/\/i.test(info.url)) return;\n    if (!Number.isFinite(info.at) || Date.now() - info.at < 0 || Date.now() - info.at > 60000) return;\n    var current = window.location.pathname + window.location.search;\n    if (current !== info.url.replace(\/^\\\/en\/i, '')) return;\n    window.location.replace(info.url);\n  } catch (e) {}\n})();\n<\/script>\n<script>\n(function(){document.documentElement.classList.toggle('gc-gestor-details-en', \/^\\\/en(?:\\\/|$)\/i.test(window.location.pathname));})();\n<\/script>\n\n<script>window.location.replace((\/^\\\/en(?:\\\/|$)\/i.test(location.pathname) ? '\/en' : '') + '\/portal-dos-gestores-operacionais\/os-meus-cursos\/');<\/script>\n\n<style>\n\/* Checkboxes: retain the original table header\/cell design. *\/\n.gestor-course-page th.gc-presente-head {\n  background:#eaf2ff!important;color:#0645c6!important;\n  text-align:center!important;font-weight:700!important;\n  padding:12px!important;border-bottom:1px solid #c8dafe!important;\n  vertical-align:middle!important;\n}\n.gestor-course-page th.gc-presente-head .gc-present-heading {\n  display:inline-flex!important;align-items:center!important;justify-content:center!important;\n  gap:8px!important;margin:0!important;padding:0!important;\n  font-size:inherit!important;line-height:inherit!important;font-weight:inherit!important;\n  color:#0645c6!important;white-space:nowrap!important;cursor:pointer!important;\n}\n.gestor-course-page td.gc-present-cell {text-align:center!important;vertical-align:middle!important;}\n.gestor-course-page input.gc-present-checkbox,\n.gestor-course-page input.gc-present-all {\n  display:inline-block!important;appearance:auto!important;-webkit-appearance:checkbox!important;\n  width:18px!important;height:18px!important;min-width:18px!important;\n  margin:0!important;padding:0!important;border-radius:3px!important;\n  accent-color:#2563eb!important;opacity:1!important;visibility:visible!important;\n  cursor:pointer!important;vertical-align:middle!important;position:static!important;\n}\n<\/style>\n<script>\n(function () {\n  var gcEnglish = \/^\\\/en(?:\\\/|$)\/i.test(location.pathname);\n  function gcText(pt,en){return gcEnglish?en:pt;}\n  function initPresentes() {\n    var page = document.getElementById('gestor-course-page');\n    if (!page) return;\n    page.querySelectorAll('.gc-session-block').forEach(function (block) {\n      var table = block.querySelector('table');\n      if (!table || table.querySelectorAll('thead th').length !== 5) return;\n      var head = table.querySelector('thead th:last-child');\n      if (!head || !head.textContent.includes('Estado') && !head.textContent.includes('Status')) return;\n      head.classList.add('gc-presente-head');\n      var label = document.createElement('label');\n      label.className = 'gc-present-heading';\n      var all = document.createElement('input');\n      all.type = 'checkbox'; all.className = 'gc-present-all';\n      all.setAttribute('aria-label', gcText('Selecionar todos os alunos desta sess\u00e3o','Select all students in this session'));\n      label.appendChild(all);\n      label.appendChild(document.createTextNode(gcText('Presente','Present')));\n      head.textContent = '';\n      head.appendChild(label);\n      var inputs = [];\n      table.querySelectorAll('tbody tr').forEach(function (row) {\n        var cells = row.querySelectorAll('td');\n        if (cells.length !== 5) return; \/\/ skip empty state row\n        var cell = cells[4];\n        var estado = cell.textContent.replace(\/\\s+\/g,' ').trim();\n        var lower = estado.toLocaleLowerCase('pt-PT');\n        \/\/ All student rows now get a checkbox, even for unmapped formatted values.\n        \/\/ Unrecognized values default to unchecked, without changing Dataverse.\n        var checked = ['true','1','sim','yes','presente','present'].indexOf(lower) !== -1;\n        var input = document.createElement('input');\n        input.type = 'checkbox'; input.className = 'gc-present-checkbox';\n        input.checked = checked;\n        input.dataset.originalEstado = estado;\n        input.setAttribute('aria-label',gcText('Presente: ','Present: ')+(cells[1].textContent||gcText('Aluno','Student')).trim());\n        cell.textContent = '';\n        cell.classList.add('gc-present-cell');\n        cell.appendChild(input);\n        inputs.push(input);\n      });\n      function sync() {\n        all.checked = inputs.length > 0 && inputs.every(function(i){return i.checked;});\n        all.indeterminate = inputs.some(function(i){return i.checked;}) && !all.checked;\n        all.disabled = inputs.length === 0;\n      }\n      all.addEventListener('change',function(){\n        inputs.forEach(function(i){ i.checked=all.checked; }); sync();\n      });\n      inputs.forEach(function(i){ i.addEventListener('change',sync); });\n      sync();\n    });\n  }\n  if (document.readyState === 'loading') document.addEventListener('DOMContentLoaded',initPresentes);\n  else initPresentes();\n})();\n<\/script>\n\n\n<style>\n\/* Same type size and weight as the adjacent table headings. *\/\n.gestor-course-page th.gc-presente-head .gc-present-heading {\n  font-size:inherit!important;font-weight:inherit!important;line-height:inherit!important;\n  font-family:inherit!important;letter-spacing:inherit!important;\n}\n.gc-queue-form{display:none!important}\n.gestor-course-page .gc-presencas-actions{margin-top:14px;display:flex;gap:12px;align-items:center;flex-wrap:wrap}\n.gestor-course-page button.gc-save-presencas,\n.gestor-course-page button.gc-save-presencas:hover,\n.gestor-course-page button.gc-save-presencas:focus {\n  background:#2563eb!important;color:#fff!important;border:0!important;\n  border-radius:7px!important;padding:11px 16px!important;\n  font-size:13px!important;font-weight:650!important;cursor:pointer!important;\n}\n.gestor-course-page button.gc-save-presencas:disabled{opacity:.6!important;cursor:wait!important}\n#gc-presencas-toast{position:fixed;bottom:24px;right:24px;z-index:999999;display:none;\n  border-radius:8px;background:#2563eb;color:#fff;padding:14px 18px;box-shadow:0 4px 16px #0003}\n#gc-presencas-toast.show{display:block}#gc-presencas-toast.ok{background:#14532d}\n#gc-presencas-toast.error{background:#991b1b}\n\n\/* ONLY PRESENTATION: remove WordPress\/theme bottom spacing from every table. *\/\n.gestor-course-page table,\n.gestor-course-page .gc-scroll table,\n.gestor-course-page .gc-assiduidade-scroll table {\n  margin-bottom:0 !important;\n  margin-block-end:0 !important;\n}\n\n\/* Match the existing Descarregar button for all three actions. *\/\n.gestor-course-page a.gc-btn[download],\n.gestor-course-page a.gc-btn[download]:hover,\n.gestor-course-page a.gc-btn[download]:focus,\n.gestor-course-page button.gc-save-presencas,\n.gestor-course-page button.gc-save-presencas:hover,\n.gestor-course-page button.gc-save-presencas:focus,\n.gestor-course-page #gc-ocorrencia-form button.gc-btn,\n.gestor-course-page #gc-ocorrencia-form button.gc-btn:hover,\n.gestor-course-page #gc-ocorrencia-form button.gc-btn:focus {\n  display:inline-flex !important;\n  align-items:center !important;\n  justify-content:center !important;\n  gap:9px !important;\n  background:#2563eb !important;\n  background-color:#2563eb !important;\n  color:#fff !important;\n  border:1px solid #2563eb !important;\n  border-radius:7px !important;\n  padding:11px 16px !important;\n  font-size:13px !important;\n  font-weight:650 !important;\n  line-height:1.4 !important;\n  text-decoration:none !important;\n  box-shadow:none !important;\n  filter:none !important;\n  text-shadow:none !important;\n  transform:none !important;\n  cursor:pointer !important;\n}\n.gestor-course-page button.gc-save-presencas:disabled,\n.gestor-course-page #gc-ocorrencia-form button.gc-btn:disabled {opacity:.6 !important;cursor:wait !important;}\n\/* Pseudo-element icons survive JS changes to button.textContent while processing. *\/\n.gestor-course-page button.gc-save-presencas::before,\n.gestor-course-page #gc-ocorrencia-form button.gc-btn::before,\n.gestor-course-page a.gc-btn[download]::before {\n  content:\"\" !important;\n  display:inline-block !important;\n  flex:0 0 16px !important;\n  width:16px !important;\n  height:16px !important;\n  background-repeat:no-repeat !important;\n  background-position:center !important;\n  background-size:contain !important;\n}\n\/* Lucide save icon, white stroke. *\/\n.gestor-course-page button.gc-save-presencas::before,\n.gestor-course-page #gc-ocorrencia-form button.gc-btn::before {\n  background-image:url(\"data:image\/svg+xml,%3Csvg xmlns='http:\/\/www.w3.org\/2000\/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='white' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M15.2 3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2V8.8z'\/%3E%3Cpath d='M17 21v-8H7v8M7 3v5h8'\/%3E%3C\/svg%3E\") !important;\n}\n\/* Lucide download icon, white stroke. *\/\n.gestor-course-page a.gc-btn[download]::before {\n  background-image:url(\"data:image\/svg+xml,%3Csvg xmlns='http:\/\/www.w3.org\/2000\/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='white' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4'\/%3E%3Cpath d='m7 10 5 5 5-5M12 15V3'\/%3E%3C\/svg%3E\") !important;\n}\n\n\n\/* Expandable occurrence form: preserve DataPress form and hide only its wrapper. *\/\n.gestor-course-page #gc-ocorrencia-area[hidden],\n.gestor-course-page #gc-add-ocorrencia[hidden],\n.gestor-course-page #gc-cancel-ocorrencia[hidden] { display:none !important; }\n.gestor-course-page #gc-ocorrencia-area { margin-top:16px; }\n.gestor-course-page button.gc-toggle-ocorrencia,\n.gestor-course-page button.gc-toggle-ocorrencia:hover,\n.gestor-course-page button.gc-toggle-ocorrencia:focus {\n  display:inline-flex !important; align-items:center !important; justify-content:center !important;\n  padding:11px 16px !important; background:#2563eb !important; color:#fff !important;\n  border:1px solid #2563eb !important; border-radius:7px !important;\n  box-shadow:none !important; font-size:13px !important; font-weight:650 !important;\n  text-decoration:none !important; cursor:pointer !important;\n}\n.gestor-course-page .gc-add-plus-icon {\n  display:inline-flex !important;\n  justify-content:center !important;\n  align-items:center !important;\n  font-size:20px !important;\n  font-weight:600 !important;\n  line-height:1 !important;\n  color:#fff !important;\n  margin-right:8px !important;\n}\n.gestor-course-page button.gc-cancel-ocorrencia,\n.gestor-course-page button.gc-cancel-ocorrencia:hover,\n.gestor-course-page button.gc-cancel-ocorrencia:focus {\n  margin-top:0 !important; padding:11px 16px !important; background:#fff !important;\n  color:#2563eb !important; border:1px solid #2563eb !important;\n  border-radius:7px !important; box-shadow:none !important;\n  font-size:13px !important; font-weight:650 !important; cursor:pointer !important;\n}\n<\/style>\n<script>\n(function(){\n var gcEnglish = \/^\\\/en(?:\\\/|$)\/i.test(location.pathname);\n function gcText(pt,en){return gcEnglish?en:pt;}\n function initQueue(){\n   var page=document.getElementById('gestor-course-page');\n   var form=document.getElementById('gc-presencas-queue-form');\n   var toast=document.getElementById('gc-presencas-toast');\n   if(!page||!form)return;\n   var select=page.querySelector('#gc-session-select');\n   var frame=document.getElementById('gc-presencas-frame');\n   var saving=false, activeButton=null, resultTimer=null, frameSubmitted=false;\n   var sessionKey='gc_presencas_selected_v2_'+location.pathname+location.search;\n   function notify(message,type){\n     if(!toast)return;\n     toast.textContent=message;toast.className='show'+(type?' '+type:'');\n     if(type)setTimeout(function(){toast.className='';},6500);\n   }\n   function finish(success){\n     if(!saving)return;\n     saving=false;\n     clearTimeout(resultTimer);\n     if(activeButton){activeButton.disabled=false;activeButton.textContent=gcText('Guardar presen\u00e7as','Save attendance');activeButton=null;}\n     notify(success?gcText('Presen\u00e7as atualizadas com sucesso!','Attendance updated successfully!'):gcText('N\u00e3o foi poss\u00edvel guardar o pedido de presen\u00e7as.','Unable to save the attendance request.'),''+(success?'ok':'error'));\n     \/\/ This confirms queue-row creation, not Power Automate completion.\n   }\n   function detectResponse(doc){\n     if(!doc)return null;\n     var marker=doc.getElementById('gc-presencas-datapress-result');\n     if(marker)return marker.dataset.result==='success';\n     var content=(doc.body && (doc.body.innerText || doc.body.textContent) || '');\n     if(content.indexOf('GC_PRESENCAS_PEDIDO_SUCESSO')!==-1)return true;\n     if(content.indexOf('GC_PRESENCAS_PEDIDO_ERRO')!==-1)return false;\n     return null;\n   }\n   if(frame){frame.addEventListener('load',function(){\n     if(!saving || !frameSubmitted)return;\n     try{\n       var doc=frame.contentDocument;\n       var outcome=detectResponse(doc);\n       if(outcome!==null){finish(outcome);return;}\n       \/\/ A completed non-empty response to the submitted form is evidence\n       \/\/ that the request returned; do not treat an empty about:blank as success.\n       if(doc && doc.location && doc.location.href!=='about:blank' &&\n          doc.body && (doc.body.innerText || doc.body.textContent || '').trim()){\n         var bodyText=(doc.body.innerText || doc.body.textContent || '').toLowerCase();\n         if(\/(?:fatal error|critical error|erro ao guardar|n\u00e3o foi poss\u00edvel guardar)\/i.test(bodyText)){\n           finish(false);\n         }else{\n           finish(true);\n         }\n       }\n     }catch(e){}\n   });}\n   \/\/ DataPress may handle the form with AJAX and put its message in the\n   \/\/ main page instead of the iframe. Check only while a save is pending.\n   var observer=new MutationObserver(function(){\n     if(!saving)return;\n     var outcome=detectResponse(document);\n     if(outcome!==null)finish(outcome);\n   });\n   observer.observe(document.body,{subtree:true,childList:true,characterData:true});\n   try{\n     var id=sessionStorage.getItem(sessionKey);\n     if(id&&Array.from(select.options).some(function(opt){return opt.value===id;})){\n       select.value=id;select.dispatchEvent(new Event('change',{bubbles:true}));\n     }\n   }catch(e){}\n   select.addEventListener('change',function(){\n     try{sessionStorage.setItem(sessionKey,select.value);}catch(e){}\n   });\n   page.querySelectorAll('.gc-grid > .gc-panel:first-child .gc-session-block').forEach(function(block){\n     var table=block.querySelector('table');\n     if(!table)return;\n     var rows=Array.from(table.querySelectorAll('tbody tr'))\n        .filter(function(row){return row.querySelectorAll('td').length===5;});\n     if(!rows.length)return;\n     var actions=document.createElement('div');actions.className='gc-presencas-actions';\n     var button=document.createElement('button');button.type='button';\n     button.className='gc-save-presencas';button.textContent=gcText('Guardar presen\u00e7as','Save attendance');\n     actions.appendChild(button);block.querySelector('.gc-scroll').insertAdjacentElement('afterend',actions);\n     button.addEventListener('click',function(){\n       if(select.value!==block.dataset.session)return;\n       var payload=[];\n       for(var i=0;i<rows.length;i++){\n         var row=rows[i], checkbox=row.querySelector('.gc-present-checkbox');\n         var id=(row.dataset.presencaId||'').trim();\n         if(!checkbox||!\/^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$\/i.test(id)){\n           notify(gcText('N\u00e3o foi poss\u00edvel identificar uma inscri\u00e7\u00e3o. Nenhum pedido foi enviado.','Unable to identify a registration. No request was submitted.'),'error');return;\n         }\n         payload.push({presenca_id:id,presente:checkbox.checked});\n       }\n       form.querySelector('#gc-queue-sessao').value=block.dataset.session;\n       form.querySelector('#gc-queue-json').value=JSON.stringify(payload);\n       if(!form.checkValidity()){\n         notify(gcText('O pedido n\u00e3o passou a valida\u00e7\u00e3o.','The request failed validation.'),'error');return;\n       }\n       notify(gcText('A atualizar presen\u00e7as...','Updating attendance...'));\n       saving=true;frameSubmitted=false;activeButton=button;\n       button.disabled=true;button.textContent=gcText('A guardar...','Saving...');\n       try{sessionStorage.setItem(sessionKey,select.value);}catch(e){}\n       clearTimeout(resultTimer);\n       resultTimer=setTimeout(function(){\n         if(!saving)return;\n         saving=false;\n         button.disabled=false;button.textContent=gcText('Guardar presen\u00e7as','Save attendance');activeButton=null;\n         notify(gcText('Pedido enviado. A confirma\u00e7\u00e3o autom\u00e1tica n\u00e3o est\u00e1 dispon\u00edvel; consulte o Dataverse antes de voltar a enviar.','Request submitted, but automatic confirmation is unavailable. Check Dataverse before submitting again.'));\n       },25000);\n       \/\/ Submit through the existing DataPress form. The iframe prevents\n       \/\/ a native POST from reloading the main Elementor page.\n       frameSubmitted=true;\n       form.querySelector('#gc-queue-submit').click();\n     });\n   });\n }\n if(document.readyState==='loading')document.addEventListener('DOMContentLoaded',initQueue);\n else initQueue();\n})();\n<\/script>\n\n\n<!-- Hide the internal DataPress response markers if rendered in the page. -->\n<script>\n(function () {\n  var markers = ['GC_PRESENCAS_PEDIDO_SUCESSO', 'GC_PRESENCAS_PEDIDO_ERRO'];\n  function hideMarkers() {\n    if (!document.body) return;\n    var walker = document.createTreeWalker(document.body, NodeFilter.SHOW_TEXT);\n    var node;\n    var changes = [];\n    while ((node = walker.nextNode())) {\n      var parent = node.parentElement;\n      if (!parent || parent.closest('script, style, textarea, template')) continue;\n      var value = node.nodeValue || '';\n      if (!markers.some(function (marker) { return value.indexOf(marker) !== -1; })) continue;\n      markers.forEach(function (marker) { value = value.split(marker).join(''); });\n      changes.push([node, value]);\n    }\n    changes.forEach(function (entry) { entry[0].nodeValue = entry[1]; });\n  }\n  function init() {\n    hideMarkers();\n    var scheduled = false;\n    new MutationObserver(function () {\n      if (scheduled) return;\n      scheduled = true;\n      requestAnimationFrame(function () {\n        scheduled = false;\n        hideMarkers();\n      });\n    }).observe(document.body, {childList:true, subtree:true, characterData:true});\n  }\n  if (document.readyState === 'loading') document.addEventListener('DOMContentLoaded', init, {once:true});\n  else init();\n})();\n<\/script>\n\n<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"","protected":false},"author":65,"featured_media":0,"parent":93147,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"courseId":0,"footnotes":""},"class_list":["post-93152","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/staging.academiaclinicadragao.com\/en\/wp-json\/wp\/v2\/pages\/93152","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/staging.academiaclinicadragao.com\/en\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/staging.academiaclinicadragao.com\/en\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/staging.academiaclinicadragao.com\/en\/wp-json\/wp\/v2\/users\/65"}],"replies":[{"embeddable":true,"href":"https:\/\/staging.academiaclinicadragao.com\/en\/wp-json\/wp\/v2\/comments?post=93152"}],"version-history":[{"count":5,"href":"https:\/\/staging.academiaclinicadragao.com\/en\/wp-json\/wp\/v2\/pages\/93152\/revisions"}],"predecessor-version":[{"id":93823,"href":"https:\/\/staging.academiaclinicadragao.com\/en\/wp-json\/wp\/v2\/pages\/93152\/revisions\/93823"}],"up":[{"embeddable":true,"href":"https:\/\/staging.academiaclinicadragao.com\/en\/wp-json\/wp\/v2\/pages\/93147"}],"wp:attachment":[{"href":"https:\/\/staging.academiaclinicadragao.com\/en\/wp-json\/wp\/v2\/media?parent=93152"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}