{"id":6958,"date":"2025-12-18T11:47:14","date_gmt":"2025-12-18T14:47:14","guid":{"rendered":"https:\/\/saudecajati.com.br\/?page_id=6958"},"modified":"2026-04-14T10:39:50","modified_gmt":"2026-04-14T13:39:50","slug":"cadastro-de-digitais-id-control","status":"publish","type":"page","link":"https:\/\/saudecajati.com.br\/index.php\/cadastro-de-digitais-id-control\/","title":{"rendered":"Cadastro de Digitais ID Control"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"6958\" class=\"elementor elementor-6958\">\n\t\t\t\t<div class=\"elementor-element elementor-element-c5a85fc e-flex e-con-boxed e-con e-parent\" data-id=\"c5a85fc\" 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-fe9b81a elementor-align-center elementor-icon-list--layout-traditional elementor-list-item-link-full_width elementor-invisible elementor-widget elementor-widget-icon-list\" data-id=\"fe9b81a\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;_animation&quot;:&quot;slideInDown&quot;}\" data-widget_type=\"icon-list.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<ul class=\"elementor-icon-list-items\">\n\t\t\t\t\t\t\t<li class=\"elementor-icon-list-item\">\n\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-icon-list-text\">Cadastro de Digitais dos Funcion\u00e1rios<\/span>\n\t\t\t\t\t\t\t\t\t<\/li>\n\t\t\t\t\t\t<\/ul>\n\t\t\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<div class=\"elementor-element elementor-element-1132459 e-flex e-con-boxed e-con e-parent\" data-id=\"1132459\" 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-4e55fd3 elementor-widget elementor-widget-html\" data-id=\"4e55fd3\" data-element_type=\"widget\" data-e-type=\"widget\" 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\">\r\n<head>\r\n    <meta charset=\"UTF-8\">\r\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\r\n    <title>Exporta\u00e7\u00e3o de Utilizadores - Control iD<\/title>\r\n    <style>\r\n        \/* BLINDAGEM E IDENTIDADE VISUAL ATUALIZADA (#00A09A) *\/\r\n        #cid-export-app {\r\n            font-family: 'Segoe UI', Roboto, Helvetica, Arial, sans-serif !important;\r\n            max-width: 100% !important;\r\n            margin: 10px 0 !important;\r\n            padding: 20px !important;\r\n            background: #ffffff !important;\r\n            border: 1px solid #e0e0e0 !important;\r\n            border-radius: 12px !important;\r\n            box-sizing: border-box !important;\r\n            color: #4a4a4a !important; \/* Cinza Escuro *\/\r\n        }\r\n\r\n        #cid-export-app .cid-label {\r\n            display: block !important;\r\n            margin-top: 20px !important;\r\n            margin-bottom: 8px !important;\r\n            font-size: 15px !important;\r\n            font-weight: 600 !important;\r\n            color: #5a5a5a !important;\r\n        }\r\n\r\n        #cid-export-app .cid-input {\r\n            width: 100% !important;\r\n            padding: 12px !important;\r\n            border: 2px solid #eeeeee !important;\r\n            border-radius: 8px !important;\r\n            box-sizing: border-box !important;\r\n            font-size: 14px !important;\r\n            background-color: #fafafa !important;\r\n            color: #4a4a4a !important;\r\n            transition: border-color 0.3s !important;\r\n        }\r\n\r\n        #cid-export-app .cid-input:focus {\r\n            border-color: #00A09A !important; \/* Turquesa solicitado *\/\r\n            outline: none !important;\r\n        }\r\n\r\n        #cid-export-app .cid-input:disabled {\r\n            background-color: #f0f0f0 !important;\r\n            cursor: not-allowed !important;\r\n        }\r\n\r\n        #cid-export-app .cid-status {\r\n            margin-top: 12px !important;\r\n            font-size: 13px !important;\r\n            color: #00A09A !important; \/* Turquesa solicitado *\/\r\n            font-weight: bold !important;\r\n        }\r\n        \r\n        \/* TABELA *\/\r\n        #cid-export-app .cid-table-wrapper {\r\n            overflow-x: auto !important;\r\n            margin-top: 25px !important;\r\n        }\r\n\r\n        #cid-export-app .cid-table {\r\n            width: 100% !important;\r\n            border-collapse: separate !important;\r\n            border-spacing: 0 !important;\r\n            display: none; \r\n            background: #fff !important;\r\n            border: 1px solid #eeeeee !important;\r\n            border-radius: 8px !important;\r\n            overflow: hidden !important;\r\n        }\r\n\r\n        #cid-export-app .cid-table th {\r\n            background-color: #00A09A !important; \/* Fundo Turquesa solicitado *\/\r\n            color: #ffffff !important;           \/* Texto Branco *\/\r\n            padding: 14px !important;\r\n            text-align: left !important;\r\n            font-weight: 700 !important;\r\n            text-transform: uppercase !important;\r\n            letter-spacing: 0.5px !important;\r\n            font-size: 12px !important;\r\n            border: none !important;\r\n        }\r\n\r\n        #cid-export-app .cid-table td {\r\n            padding: 14px !important;\r\n            text-align: left !important;\r\n            font-size: 14px !important;\r\n            color: #4a4a4a !important; \r\n            border-bottom: 1px solid #eeeeee !important;\r\n        }\r\n\r\n        #cid-export-app .cid-table tr:last-child td {\r\n            border-bottom: none !important;\r\n        }\r\n        \r\n        \/* BOT\u00c3O CUSTOMIZADO *\/\r\n        #cid-export-app .export-btn {\r\n            background-color: #00A09A !important; \/* Turquesa solicitado *\/\r\n            color: #ffffff !important; \r\n            border: none !important;\r\n            padding: 10px 18px !important;\r\n            border-radius: 6px !important;\r\n            cursor: pointer !important;\r\n            font-size: 13px !important;\r\n            font-weight: 700 !important;\r\n            transition: all 0.3s ease !important;\r\n            display: inline-block !important;\r\n            box-shadow: 0 2px 4px rgba(0, 160, 154, 0.2) !important;\r\n        }\r\n\r\n        #cid-export-app .export-btn:hover {\r\n            background-color: #008580 !important; \/* Varia\u00e7\u00e3o de hover *\/\r\n            transform: translateY(-1px) !important;\r\n            box-shadow: 0 4px 8px rgba(0, 160, 154, 0.3) !important;\r\n        }\r\n    <\/style>\r\n<\/head>\r\n<body>\r\n\r\n<div id=\"cid-export-app\" class=\"control-id-container\">\r\n    \r\n    <label class=\"cid-label\" for=\"fileInput\">1. Selecione o ficheiro usuarios.txt:<\/label>\r\n    <input type=\"file\" id=\"fileInput\" class=\"cid-input\" accept=\".txt\">\r\n\r\n    <label class=\"cid-label\" for=\"searchInput\">2. Pesquise pelo nome (separe por v\u00edrgula para v\u00e1rios):<\/label>\r\n    <input type=\"text\" id=\"searchInput\" class=\"cid-input\" placeholder=\"Ex: Maria, Joao, Carlos...\" disabled>\r\n\r\n    <div id=\"statusMessage\" class=\"cid-status\"><\/div>\r\n    \r\n    <div class=\"cid-table-wrapper\">\r\n        <table id=\"resultTable\" class=\"cid-table\">\r\n            <thead>\r\n                <tr>\r\n                    <th>Nome<\/th>\r\n                    <th>PIS<\/th>\r\n                    <th>Matr\u00edcula<\/th>\r\n                    <th>A\u00e7\u00e3o<\/th>\r\n                <\/tr>\r\n            <\/thead>\r\n            <tbody id=\"resultBody\">\r\n                <\/tbody>\r\n        <\/table>\r\n    <\/div>\r\n<\/div>\r\n\r\n<script>\r\n    document.addEventListener(\"DOMContentLoaded\", function() {\r\n        let fileHeader = \"\";\r\n        let employeesData = [];\r\n\r\n        const fileInput = document.getElementById('fileInput');\r\n        const searchInput = document.getElementById('searchInput');\r\n        const resultTable = document.getElementById('resultTable');\r\n        const resultBody = document.getElementById('resultBody');\r\n        const statusMessage = document.getElementById('statusMessage');\r\n\r\n        fileInput.addEventListener('change', function(e) {\r\n            const file = e.target.files[0];\r\n            if (!file) return;\r\n\r\n            const reader = new FileReader();\r\n            \r\n            reader.onload = function(event) {\r\n                const text = event.target.result;\r\n                const lines = text.split(\/\\r?\\n\/).filter(line => line.trim() !== \"\");\r\n                \r\n                if (lines.length > 0) {\r\n                    fileHeader = lines[0]; \r\n                    employeesData = lines.slice(1); \r\n                    searchInput.disabled = false;\r\n                    statusMessage.textContent = employeesData.length + \" funcion\u00e1rios carregados.\";\r\n                } else {\r\n                    statusMessage.textContent = \"Ficheiro inv\u00e1lido.\";\r\n                    searchInput.disabled = true;\r\n                }\r\n            };\r\n            reader.readAsText(file, 'UTF-8');\r\n        });\r\n\r\n        searchInput.addEventListener('input', function(e) {\r\n            const rawInput = e.target.value.toLowerCase();\r\n            resultBody.innerHTML = ''; \r\n            \r\n            const searchTerms = rawInput.split(',')\r\n                                        .map(term => term.trim())\r\n                                        .filter(term => term.length >= 2);\r\n            \r\n            if (searchTerms.length === 0) {\r\n                resultTable.style.display = 'none';\r\n                return; \r\n            }\r\n\r\n            const filteredEmployees = employeesData.filter(line => {\r\n                const cols = line.split(';');\r\n                if (cols.length > 1) {\r\n                    const nome = cols[1].toLowerCase();\r\n                    return searchTerms.some(term => nome.includes(term));\r\n                }\r\n                return false;\r\n            });\r\n\r\n            if (filteredEmployees.length > 0) {\r\n                resultTable.style.display = 'table';\r\n                filteredEmployees.forEach(empLine => {\r\n                    const cols = empLine.split(';');\r\n                    const pis = cols[0] ? cols[0].trim() : '-';\r\n                    const matricula = cols[3] ? cols[3].trim() : '-';\r\n                    \r\n                    \/\/ \u00cdndice original em vez de injetar toda a string no HTML\r\n                    const originalIndex = employeesData.indexOf(empLine);\r\n\r\n                    const tr = document.createElement('tr');\r\n                    tr.innerHTML = `\r\n                        <td><strong>${cols[1]}<\/strong><\/td>\r\n                        <td>${pis}<\/td>\r\n                        <td>${matricula}<\/td>\r\n                        <td><button type=\"button\" class=\"export-btn\" data-index=\"${originalIndex}\">Exportar<\/button><\/td>\r\n                    `;\r\n                    resultBody.appendChild(tr);\r\n                });\r\n            } else {\r\n                resultTable.style.display = 'none';\r\n            }\r\n        });\r\n\r\n        resultBody.addEventListener('click', function(e) {\r\n            if (e.target && e.target.classList.contains('export-btn')) {\r\n                e.preventDefault(); \r\n                \r\n                \/\/ Recupera a string completa usando o \u00edndice\r\n                const originalIndex = e.target.getAttribute('data-index');\r\n                const employeeLine = employeesData[originalIndex];\r\n                \r\n                const cols = employeeLine.split(';');\r\n                const employeeName = cols[1].trim().replace(\/ \/g, '_'); \r\n\r\n                \/\/ For\u00e7a o padr\u00e3o CRLF (\\r\\n) que o sistema de ponto exige\r\n                const finalContent = fileHeader + \"\\r\\n\" + employeeLine + \"\\r\\n\";\r\n                \r\n                const blob = new Blob([finalContent], { type: 'text\/plain;charset=utf-8' });\r\n                const url = URL.createObjectURL(blob);\r\n                \r\n                const a = document.createElement('a');\r\n                a.style.display = 'none';\r\n                a.href = url;\r\n                a.download = \"importar_\" + employeeName + \".txt\";\r\n                document.body.appendChild(a);\r\n                a.click();\r\n                \r\n                setTimeout(function() {\r\n                    document.body.removeChild(a);\r\n                    URL.revokeObjectURL(url);\r\n                }, 100);\r\n            }\r\n        });\r\n    });\r\n<\/script>\r\n<\/body>\r\n<\/html>\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>Cadastro de Digitais dos Funcion\u00e1rios Exporta\u00e7\u00e3o de Utilizadores &#8211; Control iD 1. Selecione o ficheiro usuarios.txt: 2. Pesquise pelo nome (separe por v\u00edrgula para v\u00e1rios): Nome PIS Matr\u00edcula A\u00e7\u00e3o<\/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":{"inline_featured_image":false,"footnotes":""},"class_list":["post-6958","page","type-page","status-publish","hentry"],"_hostinger_reach_plugin_has_subscription_block":false,"_hostinger_reach_plugin_is_elementor":false,"_links":{"self":[{"href":"https:\/\/saudecajati.com.br\/index.php\/wp-json\/wp\/v2\/pages\/6958","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/saudecajati.com.br\/index.php\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/saudecajati.com.br\/index.php\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/saudecajati.com.br\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/saudecajati.com.br\/index.php\/wp-json\/wp\/v2\/comments?post=6958"}],"version-history":[{"count":31,"href":"https:\/\/saudecajati.com.br\/index.php\/wp-json\/wp\/v2\/pages\/6958\/revisions"}],"predecessor-version":[{"id":7595,"href":"https:\/\/saudecajati.com.br\/index.php\/wp-json\/wp\/v2\/pages\/6958\/revisions\/7595"}],"wp:attachment":[{"href":"https:\/\/saudecajati.com.br\/index.php\/wp-json\/wp\/v2\/media?parent=6958"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}