0% acharam este documento útil (0 voto)
3 visualizações4 páginas

Codegs

O documento contém um código de um script em Google Apps que gerencia a validação de presença em um evento através de QR codes. Ele processa parâmetros recebidos para exibir uma dashboard ou uma página de validação, registrando entradas e gerando respostas HTML com base no status do registro. Além disso, inclui funções para registrar a entrada de participantes e obter dados sobre a presença total e lista de participantes presentes.
Direitos autorais
© All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato ODT, PDF, TXT ou leia on-line no Scribd
0% acharam este documento útil (0 voto)
3 visualizações4 páginas

Codegs

O documento contém um código de um script em Google Apps que gerencia a validação de presença em um evento através de QR codes. Ele processa parâmetros recebidos para exibir uma dashboard ou uma página de validação, registrando entradas e gerando respostas HTML com base no status do registro. Além disso, inclui funções para registrar a entrada de participantes e obter dados sobre a presença total e lista de participantes presentes.
Direitos autorais
© All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato ODT, PDF, TXT ou leia on-line no Scribd

function doGet(e) {

// LOG para debug (vai aparecer nos logs do Apps Script)


[Link]("Parâmetros recebidos:", [Link](e));

// Se não tem parâmetros, mostra DASHBOARD


if (!e || ![Link]) {
return HtmlService
.createTemplateFromFile("dashboard")
.evaluate()
.setTitle("Dashboard Evento")
.setXFrameOptionsMode([Link]);
}

const page = [Link];


const id = [Link];

// Se tem ID, mostra validação


if (id) {
return validarPresencaPage(id);
}

// Se page=scanner, mostra scanner


if (page === "scanner") {
return HtmlService
.createTemplateFromFile("scanner")
.evaluate()
.setTitle("Scanner QR")
.setXFrameOptionsMode([Link]);
}

// Qualquer outro caso: Dashboard


return HtmlService
.createTemplateFromFile("dashboard")
.evaluate()
.setTitle("Dashboard Evento")
.setXFrameOptionsMode([Link]);
}

// Página de validação individual (QR code)


function validarPresencaPage(id) {
const resultado = registrarEntrada(id);

let html = `
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Validação de Entrada</title>
<style>
body {
font-family: Arial, sans-serif;
display: flex;
justify-content: center;
align-items: center;
height: 100vh;
margin: 0;
background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
}
.card {
background: white;
border-radius: 20px;
padding: 40px;
text-align: center;
box-shadow: 0 10px 40px rgba(0,0,0,0.2);
max-width: 400px;
width: 90%;
}
.sucesso { color: #10b981; font-size: 64px; }
.erro { color: #ef4444; font-size: 64px; }
.duplicado { color: #f59e0b; font-size: 64px; }
h2 { margin: 20px 0 10px; }
p { color: #666; margin: 10px 0; }
.botao {
display: inline-block;
margin-top: 20px;
padding: 10px 20px;
background: #667eea;
color: white;
text-decoration: none;
border-radius: 10px;
cursor: pointer;
}
</style>
</head>
<body>
<div class="card">
`;

if([Link] == "ok") {
html += `
<div class="sucesso">✅</div>
<h2>LIBERADO!</h2>
<p><strong>${[Link]}</strong></p>
<p>Tipo: ${[Link]}</p>
<p>Entrada registrada com sucesso!</p>
`;
} else if([Link] == "duplicado") {
html += `
<div class="duplicado">⚠️</div>
<h2>JÁ ENTROU</h2>
<p><strong>${[Link]}</strong></p>
<p>Este participante já registrou entrada anteriormente.</p>
`;
} else {
html += `
<div class="erro">❌</div>
<h2>QR INVÁLIDO</h2>
<p>ID: ${id}</p>
<p>Este código não está cadastrado no sistema.</p>
`;
}

html += `
<button class="botao" onclick="[Link]()">Fechar</button>
</div>
</body>
</html>
`;

return [Link](html);
}

function registrarEntrada(id){
const aba = [Link]().getSheetByName("Participantes");
const dados = [Link]().getValues();

for(let i = 1; i < [Link]; i++){


const linha = i + 1;
if(String(dados[i][0]).trim() == String(id).trim()){
if(dados[i][3] == "PRESENTE"){
return { status:"duplicado", nome: dados[i][1] ? dados[i][1] : "ID: " + dados[i][0] };
}
[Link](linha,4).setValue("PRESENTE");
[Link](linha,5).setValue(new Date());
return { status:"ok", nome: dados[i][1] ? dados[i][1] : "ID: " + dados[i][0], tipo: dados[i][2] ?
dados[i][2] : "Geral" };
}
}
return { status:"erro" };
}

function getPainel(){
const aba = [Link]().getSheetByName("Participantes");
const dados = [Link]().getValues();

let total = 0;
let presentes = 0;
let lista = [];

for(let i = 1; i < [Link]; i++){


if(!dados[i][0] || String(dados[i][0]).trim() === "") continue;
total++;
if(dados[i][3] == "PRESENTE"){
presentes++;
let horaFormatada = "Horário indisponível";
if(dados[i][4]) {
try {
horaFormatada = [Link](new Date(dados[i][4]), [Link](),
"HH:mm:ss");
} catch(err) {
horaFormatada = String(dados[i][4]);
}
}
let nomeExibicao = dados[i][1] ? String(dados[i][1]).trim() : "ID: " + dados[i][0];
let tipoExibicao = dados[i][2] ? String(dados[i][2]).trim() : "Não informado";
[Link]({ nome: nomeExibicao, tipo: tipoExibicao, hora: horaFormatada });
}
}
return { total: total, presentes: presentes, faltam: (total - presentes) < 0 ? 0 : (total - presentes),
lista: [Link]() };
}

Você também pode gostar