recibo.gs 2.0
Importante o nome do arquivo é Recibos.gs!
Esté e o arquivo onde estarão as funções responsaveis por tratar os dados do formulário para gerar o recibo e enviar suas copias para o destinatário e para uma pasta do Google Driver.
Esta é a segunda vesão do script e trata-se um conjunto de funções especificas juntas fazem o procedimento completo. A vantagem dela em relação a versão 1.0 é a manutenção e a modificação. em questão de funcionalidade ambas executam os mesmos processos.
Abra para ver o código da função completo
function recibo() { var past_recibos = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Recibos") var dados_recibos = past_recibos.getDataRange().getValues(); var ultimaLinha = past_recibos.getLastRow() - 1; var datarecibo = dados_recibos[ultimaLinha][2]; var evento = dados_recibos[ultimaLinha][4]; var unidade = dados_recibos[ultimaLinha][5]; var nome_completo = dados_recibos[ultimaLinha][6]; var CPF = dados_recibos[ultimaLinha][7]; var valor = dados_recibos[ultimaLinha][10]; var ano = dados_recibos[ultimaLinha][11]; var mes = dados_recibos[ultimaLinha][12]; var destinatariorecibo = dados_recibos[ultimaLinha][13] if (CPF.lenght != 11) { CPF = '0'.concat(CPF); } CPF = CPF.replace(/^(\d{3})(\d{3})(\d{3})(\d{2})/, "$1.$2.$3-$4"); ano = ano.toString().right(2); var valorextenso = Extenso(valor); valor = valor.formatMoney(2, ',', ''); destinatariorecibo = destinatariorecibo.toLowerCase(); var dep_unidades = def_unidades(unidade); var idunidade = dep_unidades[0]; var numrecibo = dep_unidades[1] ; var pasta_recibo = dep_unidades[2]; var idrecibo = idunidade + mes + numrecibo + ano + "ER"; past_recibos.getRange(ultimaLinha + 1, 1).setValue(idrecibo); var recibo_pdf = criarrecibo(idrecibo, nome_completo, CPF, valor, valorextenso, evento, datarecibo); var pdf= pasta_recibo.createFile(recibo_pdf); var urlpdf = pdf.setSharing(DriveApp.Access.ANYONE, DriveApp.Permission.VIEW).getUrl(); email(nome_completo, CPF, valor, valorextenso, evento, datarecibo, idrecibo, destinatariorecibo, recibo_pdf); } function criarrecibo(idrecibo, nome_completo, CPF, valor, valorextenso, evento, datarecibo) { var recibotemplateId = "14Zlj5zwYyWHhAUnBG9dMFYTzeClIa_xvayxJsB8k_Os" var idCopia = DriveApp.getFileById(recibotemplateId).makeCopy(idrecibo).getId(); var docCopia = DocumentApp.openById(idCopia); var textoCopia = docCopia.getActiveSection(); textoCopia.replaceText("NOME", nome_completo); textoCopia.replaceText("NUMEROCPF", CPF); textoCopia.replaceText("VALOR", valor); textoCopia.replaceText("VALEXTENSO", valorextenso); textoCopia.replaceText("CURSO", evento); textoCopia.replaceText("DATARECIBO", datarecibo); textoCopia.replaceText("RECIBO", idrecibo); docCopia.saveAndClose(); var recibo_pdf = DriveApp.getFileById(idCopia).getAs("application/pdf"); DriveApp.getFileById(idCopia).setTrashed(true); return recibo_pdf } function email(nome_completo, CPF, valor, valorextenso, evento, datarecibo, idrecibo, destinatariorecibo, recibo_pdf) { var html = HtmlService.createTemplateFromFile('rec_email_template'); html.nome_completo = nome_completo; html.datarecibo = datarecibo; html.valor = valor; html.valorextenso = valorextenso html.evento = evento; html.idrecibo = idrecibo; html.urlpdf = urlpdf; var htmlBody = html.evaluate().getContent(); var remetente = "IEEE UFABC<contato@ieeeufabc.org>"; var assunto = "Recibo IEEE UFABC"; MailApp.sendEmail(destinatariorecibo, assunto, html, { name: remetente, htmlBody: htmlBody, attachments: recibo_pdf }); } function def_unidades(unidade) { var past_adm = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Pasta adm") var pasta_ramo = DriveApp.getFolderById("0B8CcpExpMKFlZElETVFjOGd0elk"); var pasta_AESS = DriveApp.getFolderById("0B8CcpExpMKFlZElETVFjOGd0elk"); var pasta_CS = DriveApp.getFolderById("0B8CcpExpMKFlZElETVFjOGd0elk"); var pasta_CPMT = DriveApp.getFolderById("0B8CcpExpMKFlZElETVFjOGd0elk"); var pasta_EMBS = DriveApp.getFolderById("0B8CcpExpMKFlZElETVFjOGd0elk"); var pasta_PES = DriveApp.getFolderById("0B8CcpExpMKFlZElETVFjOGd0elk"); var pasta_RAS = DriveApp.getFolderById("0B8CcpExpMKFlZElETVFjOGd0elk"); var pasta_TEMS = DriveApp.getFolderById("0B8CcpExpMKFlZElETVFjOGd0elk"); var idunidade, numrecibo, pasta_recibo; if (unidade == "Ramo") { idunidade = "00"; numrecibo = pad(past_adm.getRange(2, 3).getValue(), 4); pasta_recibo = pasta_ramo; } else if (unidade == "AESS") { idunidade = "01"; numrecibo = pad(past_adm.getRange(3, 3).getValue(), 4); pasta_recibo = pasta_AESS; } else if (unidade == "CS") { idunidade = "02"; numrecibo = pad(past_adm.getRange(4, 3).getValue(), 4); pasta_recibo = pasta_CS; } else if (unidade == "CPMT") { idunidade = "03"; numrecibo = pad(past_adm.getRange(5, 3).getValue(), 4); pasta_recibo = pasta_CPMT; } else if (unidade == "EMBS") { idunidade = "04"; numrecibo = pad(past_adm.getRange(6, 3).getValue(), 4); pasta_recibo = pasta_EMBS; } else if (unidade == "PES") { idunidade = "05"; numrecibo = pad(past_adm.getRange(7, 3).getValue(), 4); pasta_recibo = pasta_PES; } else if (unidade == "RAS") { idunidade = "06"; numrecibo = pad(past_adm.getRange(8, 3).getValue(), 4); pasta_recibo = pasta_RAS; } else if (unidade == "TEMS") { idunidade = "07"; numrecibo = pad(past_adm.getRange(9, 3).getValue(), 4); pasta_recibo = pasta_TEMS; } return [idunidade, numrecibo, pasta_recibo]; }
Função def_unidades(unidade)¶
A função é:
Abra para ver o código da função def_unidades
function def_unidades(unidade) { var past_adm = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Pasta adm") var pasta_ramo = DriveApp.getFolderById("0B8CcpExpMKFlZElETVFjOGd0elk"); var pasta_AESS = DriveApp.getFolderById("0B8CcpExpMKFlZElETVFjOGd0elk"); var pasta_CS = DriveApp.getFolderById("0B8CcpExpMKFlZElETVFjOGd0elk"); var pasta_CPMT = DriveApp.getFolderById("0B8CcpExpMKFlZElETVFjOGd0elk"); var pasta_EMBS = DriveApp.getFolderById("0B8CcpExpMKFlZElETVFjOGd0elk"); var pasta_PES = DriveApp.getFolderById("0B8CcpExpMKFlZElETVFjOGd0elk"); var pasta_RAS = DriveApp.getFolderById("0B8CcpExpMKFlZElETVFjOGd0elk"); var pasta_TEMS = DriveApp.getFolderById("0B8CcpExpMKFlZElETVFjOGd0elk"); var idunidade, numrecibo, pasta_recibo; if (unidade == "Ramo") { idunidade = "00"; numrecibo = pad(past_adm.getRange(2, 3).getValue(), 4); pasta_recibo = pasta_ramo; } else if (unidade == "AESS") { idunidade = "01"; numrecibo = pad(past_adm.getRange(3, 3).getValue(), 4); pasta_recibo = pasta_AESS; } else if (unidade == "CS") { idunidade = "02"; numrecibo = pad(past_adm.getRange(4, 3).getValue(), 4); pasta_recibo = pasta_CS; } else if (unidade == "CPMT") { idunidade = "03"; numrecibo = pad(past_adm.getRange(5, 3).getValue(), 4); pasta_recibo = pasta_CPMT; } else if (unidade == "EMBS") { idunidade = "04"; numrecibo = pad(past_adm.getRange(6, 3).getValue(), 4); pasta_recibo = pasta_EMBS; } else if (unidade == "PES") { idunidade = "05"; numrecibo = pad(past_adm.getRange(7, 3).getValue(), 4); pasta_recibo = pasta_PES; } else if (unidade == "RAS") { idunidade = "06"; numrecibo = pad(past_adm.getRange(8, 3).getValue(), 4); pasta_recibo = pasta_RAS; } else if (unidade == "TEMS") { idunidade = "07"; numrecibo = pad(past_adm.getRange(9, 3).getValue(), 4); pasta_recibo = pasta_TEMS; } return [idunidade, numrecibo, pasta_recibo]; }
O que é o que faz essa função?
A partir de uma entrada de dados unidade
ele define qual vai ser o idunidade
, o numrecibo
e a pasta_recibo
.
Para fazer isso no inicio da função eu declaro as pasta de trabalho e os diretorios que posso utilizar. Feito isso as variaveis idunidade
, numrecibo
e pasta_recibo
são declaradas e a função entra em um if
que define o valor de cada uma destas variaveis dependendo do valor de unidade
que entrou.
Depois de escolhe ela retorna para a função principal um vetor com as 3 variaveis.
Função criarrecibo¶
Abra para ver o código da função criarrecibo
function criarrecibo(idrecibo, nome_completo, CPF, valor, valorextenso, evento, datarecibo) { var recibotemplateId = "14Zlj5zwYyWHhAUnBG9dMFYTzeClIa_xvayxJsB8k_Os" var idCopia = DriveApp.getFileById(recibotemplateId).makeCopy(idrecibo).getId(); var docCopia = DocumentApp.openById(idCopia); var textoCopia = docCopia.getActiveSection(); textoCopia.replaceText("NOME", nome_completo); textoCopia.replaceText("NUMEROCPF", CPF); textoCopia.replaceText("VALOR", valor); textoCopia.replaceText("VALEXTENSO", valorextenso); textoCopia.replaceText("CURSO", evento); textoCopia.replaceText("DATARECIBO", datarecibo); textoCopia.replaceText("RECIBO", idrecibo); docCopia.saveAndClose(); var recibo_pdf = DriveApp.getFileById(idCopia).getAs("application/pdf"); DriveApp.getFileById(idCopia).setTrashed(true); return recibo_pdf }
Essa função cria um documento PDF partir de uma entrada dos dados idrecibo
, nome_completo
, CPF
, valor
, valorextenso
, evento
e datarecibo
. Para fazer isso ela utiliza os mesmos protocolos da seção Construindo o recibo. no final disso ela retorna o a variavel recibo_pdf.
Função email¶
A função email mostrada abaixo, executa os mesmos protocolos mostrados na seção Construindo e enviando o E-mail recibo, para executar estes protocolos é necessário a entrada dos seguientes dados: nome_completo
, CPF
, valor
, valorextenso
, evento
, datarecibo
, idrecibo
, destinatariorecibo
e recibo_pdf
Abra para ver o código da função email
function email(nome_completo, CPF, valor, valorextenso, evento, datarecibo, idrecibo, destinatariorecibo, recibo_pdf) { var html = HtmlService.createTemplateFromFile('rec_email_template'); html.nome_completo = nome_completo; html.datarecibo = datarecibo; html.valor = valor; html.valorextenso = valorextenso html.evento = evento; html.idrecibo = idrecibo; html.urlpdf = urlpdf; var htmlBody = html.evaluate().getContent(); var remetente = "IEEE UFABC<contato@ieeeufabc.org>"; var assunto = "Recibo IEEE UFABC"; MailApp.sendEmail(destinatariorecibo, assunto, html, { name: remetente, htmlBody: htmlBody, attachments: recibo_pdf }); }
Função recibo¶
A função recibo é responsável por tratar os dados e chamar as funçõea que monta o pdf e a que envia o email. Então os passos iniciais dela estão descritos no seguntes topicos:
* [](recibos_m_planilha_rec1/#acessando-os-documentos-e-locais-necessarios) * [](recibos_m_planilha_rec1/#extraindo-dados-da-pasta-recibos) * [](recibos_m_planilha_rec1/#tratando-os-dados-extraidos)
Quando o script chega na linha var dep_unidades = def_unidades(unidade);
ele chama a função def_unidades(unidade). A função retorna um vetor que é armazenado na variavel dep_unidades.
Para separar essas unidades as seguintes linhas são utilizadas
var idunidade = dep_unidades[0]; var numrecibo = dep_unidades[1] ; var pasta_recibo = dep_unidades[2];
Posteriormente ele cria e escreve na planilha a variavel idrecibo
utilizando os mesmos procedimentos da seção Definindo e Registrando o ID do recibo
Ao encontrar a linha:
var recibo_pdf = criarrecibo(idrecibo, nome_completo, CPF, valor, valorextenso, evento, datarecibo);
Ele a função criarrecibo
é chamada o sua saida é armazenada na variavel recibo_pdf
. Con essa variável utilizando os procedimentos abaixo ele cria um arquivo e pega a URL dele.
var pdf= pasta_recibo.createFile(recibo_pdf); var urlpdf = pdf.setSharing(DriveApp.Access.ANYONE, DriveApp.Permission.VIEW).getUrl();
Qundo o script encontra essa linha ele chama a função email
utilizando as variaveis nome_completo
, CPF
, valor
, valorextenso
, evento
, datarecibo
, idrecibo
, urlpdf
, destinatariorecibo
, recibo_pdf
.
email(nome_completo, CPF, valor, valorextenso, evento, datarecibo, idrecibo, urlpdf, destinatariorecibo, recibo_pdf);