// 1) GERA CÓDIGOS E RESPECTIVOS URLS // 2) ENVIA A LISTA PARA E-MAILS // 3) EMBARALHA OS CÓDIGOS function enviarCedulas(){ //GERA CÒDIGOS E RESPECTIVOS URLS var formId = "CÓDIGO OCULTADO"; var entry = "1666239363"; var ssId = SpreadsheetApp.getActive().getId(); var planilha = SpreadsheetApp.openById(ssId); var nomeAba = "VOTANTES"; var aba = planilha.getSheetByName(nomeAba); var votantes = aba.getDataRange().getValues(); var totalCodigos = votantes.length; gerarTodosOsCodigos(formId, entry, totalCodigos); nomeAba = "CODIGOS"; aba = planilha.getSheetByName(nomeAba); var codigosRange = aba.getDataRange(); var codigos = codigosRange.getValues(); var totalEmails = votantes.length; for (var i = 1; i < totalEmails; i++) { var name = votantes[i][0]; var theirMail = votantes[i][1]; var url = codigos[i][1]; mandaEmails(name, theirMail, url); var aaa; } embaralhaCodigos(); } function embaralhaCodigos() { var ssId = SpreadsheetApp.getActive().getId(); var planilha = SpreadsheetApp.openById(ssId); var nomeAba = "CODIGOS"; var aba = planilha.getSheetByName(nomeAba); var range = aba.getDataRange(); var random = aba.getRange(2, 1, range.getLastRow() - 1, range.getLastColumn() - 1); random.randomize(); } function gerarCodigo() { //http://stackoverflow.com/questions/105034/how-to-create-a-guid-uuid-in-javascript return random = Math.random().toString(36).substring(2, 15) + Math.random().toString(36).substring(2, 15); } function constroiUrl(codigos, formId, entry){ var template = "https://docs.google.com/forms/d/--form-id--/viewform?entry.##entryNumber##=##COD##"; template = template.replace("--form-id--", formId); var urls = ["Url"]; // Skip headers, then build URLs for each row in Sheet1. for (var i = 1; i < codigos.length; i++ ) { var url = template.replace('##COD##',escape(codigos[i])).replace('##entryNumber##', entry); urls.push(url); } return urls; } function adicionaValoresParaTabela(aba, letraColuna, valores) { const intervalo = [letraColuna, "1:", letraColuna, valores.length].join(""); const fn = function(v) { return [ v ]; }; aba.getRange(intervalo).setValues(valores.map(fn)); } function gerarTodosOsCodigos(formId, entry, totalCodigos){ var ssId = SpreadsheetApp.getActive().getId(); var nomeAba = "CODIGOS"; var planilha = SpreadsheetApp.openById(ssId); var aba = planilha.getSheetByName(nomeAba); var codigos = ["Códigos"]; for (var i = 1; i < totalCodigos; i++) { codigos.push(gerarCodigo()); } adicionaValoresParaTabela(aba,"A",codigos); var links = constroiUrl(codigos, formId, entry); adicionaValoresParaTabela(aba,"B",links); } function mandaEmails(name, theirMail, url) { var facebookLogoUrl = "https://sites.google.com/site/condominiomizaelmontenegro/gastos-e-receita/area-do-sindico/Ameciclo_html_m2456de1c.png"; var twitterLogoUrl = "https://sites.google.com/site/condominiomizaelmontenegro/gastos-e-receita/area-do-sindico/Ameciclo_html_m65ecf6cc.png"; var instagramLogoUrl = "https://sites.google.com/site/condominiomizaelmontenegro/gastos-e-receita/area-do-sindico/Ameciclo_html_m475d4370.png"; var facebookUrl = "http://www.facebook.com/AMEciclo"; var twitterUrl = "http://www.twitter.com/Ameciclo"; var instagramUrl = "http://www.instagram.com/Ameciclo"; var amecicloUrl = "http://www.ameciclo.org/"; var amecicloMailUrl = "mailto:contato@ameciclo.org"; var amecicloGroupMailUrl = "http://groups.google.com/group/ameciclo"; var amecicloGroupFacebookUrl = "http://www.facebook.com/groups/138029079711872/"; var amecicloLogoUrl = "https://uniaodeciclistas.org.br/wp-content/uploads/2013/04/Logo-Ameciclo-Qdr-Pq-300x300.jpg"; var conteudo = "
" + "" + "" + "

" + "

" + "

Olá " + name + ",
Essa é a nossa CÉDULA DE VOTAÇÃO VIRTUAL para as Eleições da Ameciclo 2020.

" + "

CLIQUE AQUI PARA ACESSÁ-LA

"+ "

Cada célula tem um código único, gerado aleatoriamente, e garante o anonimato do voto.

" + "

Não passe esse código ou link para ninguém, pois é pessoal e intransferível.

"+ "Devido à pandemia de COVID-19, a Comissão Eleitoral adotou esse método virtual de votação. Saiba mais na própria cédula.

"+ "

Atenciosamente,
AMECICLO
Associação Metropolitana de Ciclistas do Recife

" + "

" enviarEmailPeloSendgrid(theirMail, conteudo); } function enviarEmailPeloSendgrid(endereco, corpoDoEmail) { var SENDGRID_KEY ='CÓDIGO OCULTADO'; var headers = { "Authorization" : "Bearer "+SENDGRID_KEY, "Content-Type": "application/json" } var tituloEmail = "CÉDULA DE VOTAÇÃO VIRTUAL - Eleições da Ameciclo 2020" var body = { "personalizations": [ { "to": [ { "email": endereco } ], "subject": tituloEmail } ], "from": { "email": "eleicao@ameciclo.org" }, "content": [ { "type": "text/html", "value": corpoDoEmail } ] } var options = { 'method':'post', 'headers':headers, 'payload':JSON.stringify(body) } var response = UrlFetchApp.fetch("https://api.sendgrid.com/v3/mail/send",options); Logger.log(response); }