Guest User

Untitled

a guest
Apr 10th, 2024
119
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. //GLOBAIS >
  2.  
  3. //{ https://developers.google.com/apps-script/reference/spreadsheet/spreadsheet-app?hl=en }
  4. //{ https://developers.google.com/apps-script/reference/cache/cache-service?hl=en#getuserCache() }
  5.  
  6. //const planilha = SpreadsheetApp.openById("1knCNlIvObPxAvgvbIIDtRLaxAsZEMJGZ174KL3Xy64I"); //A planilha vinculada a esse script, cuida da interface e acesso
  7. const userCache = CacheService.getUserCache(); //Um atalho para o cache, que guarda os dados temporários
  8. const planilhaEstrutura = SpreadsheetApp.openById("111wAmTVRaTlDI5u79ZMzM7a8eXJfpcNcyf0ORBw9RQU");
  9. const planilhaRh = SpreadsheetApp.openById("1ctC265kPHuxNIdxjEmcmXBVp93nfNPt6ezwOjPPmIE8");
  10. const planilhaPlanejamento = SpreadsheetApp.openById("17cDvwbJlKiayjLdkiHNDtYLKMQSLmI2d0e1nu2TigD4");
  11. const idColaborador = "EE65034D";
  12.  
  13. const pastaImagemColaboradores = "1I4onblYLUzdzunAyErPvnubnoaShhQ6Z";
  14. const pastaFilesColaboradores = "1UGjXXSX2YtTpIbySO-t_2D-TNcD30Awu";
  15. const enderecoImagemColaboradores = "COLABORADORES_Images/";
  16. const enderecoFilesColaboradores = "COLABORADORES_Files_/";
  17.  
  18.  
  19. //GLOBAIS <
  20.  
  21. /**
  22.  *
  23.  * doGet é uma função fundamental para iniciar web apps, a não ser que seja dita o oposto, o autor das funções nessa aplicação é o determinado a seguir
  24.  * As versões antes de estarem na versão final são nomeadas baseada na ultima capacidade implementada, sendo sequencialmente Orig,CadTer,AcTer,MovCob,ConCha,ConLeGua,ConMal,ConCor,ConLac,CadOb,Login,ConOb,CheckList,RegOc,RegErr,RegNot,logOut,Final.
  25.  * a version daqui é a versão da aplicação como todo
  26.  *
  27.  * @author David Paiva <[email protected]>
  28.  * @version cadOb1 / cadTer3
  29.  * @see {@link https://jsdoc.app/}
  30.  * @see {@link https://developers.google.com/apps-script/guides/web?hl=en}
  31.  *
  32.  * @param e {params} parametro padrão para capturar requisições, não é utilizado nessa aplicação
  33.  * @returns {HtmlOutput}
  34.  *
  35.  * @summary doGet que inicializa tudo
  36.  */
  37. function doGet(e) { // { https://developers.google.com/apps-script/guides/web }
  38.  
  39.   let outputHTML;
  40.  
  41.   outputHTML = HtmlService.createTemplateFromFile("MAIN/mainHTML");
  42.  
  43.   return outputHTML.evaluate().setTitle("Cadastro de prestador de serviço Tehuá").setFaviconUrl("https://drive.google.com/uc?export=view&id=1jvhZhTzlISO41hftPhVtB15biDhJwgKL&format=png");
  44.  
  45.  
  46. }
  47.  
  48. //INCLUDES >
  49.  
  50. //Funções de Include funcionam retornando um HTML utilizando Scriptlets { https://developers.google.com/apps-script/guides/html/templates#index.html }
  51.  
  52. /**
  53.  *
  54.  * inclui um template pra mudar dinamicamente a página
  55.  *
  56.  *
  57.  * @see {@link https://developers.google.com/apps-script/reference/html/html-template?hl=en}
  58.  *
  59.  * @param {template} template O template a ser incluído
  60.  * @returns {HtmlOutput}
  61.  */
  62. function includeTemplate(template) {
  63.  
  64.   //Logger.log("lá vêm o template: " + template)
  65.  
  66.   return HtmlService.createTemplateFromFile(template).evaluate().getContent(); //retorna o conteúdo do template como html
  67.  
  68. }
  69.  
  70. /**
  71.  *
  72.  * inclui html em outro html, como forma de separar css e js
  73.  *
  74.  * @author desconhecido
  75.  *
  76.  * @see {@link https://developers.google.com/apps-script/reference/html/html-template?hl=en}
  77.  *
  78.  * @param {html} filename Arquivo html a ser incluído
  79.  * @returns {HtmlOutput}
  80.  */
  81. function include(filename) {
  82.  
  83.   //Logger.log("lá vêm o arquivo: " + filename)
  84.  
  85.   return HtmlService.createHtmlOutputFromFile(filename).getContent(); //retorna o conteúdo em HTML
  86.  
  87. }
  88.  
  89. //INCLUDES <
  90.  
  91. //CACHE >
  92.  
  93. //Funções para gerenciar o cache dentro do javascript, devem ser utilizadas com o google.script.run { https://developers.google.com/apps-script/guides/html/reference/run }
  94.  
  95.  
  96. /**
  97.  *
  98.  * inclui um valor no cache, para ser usado em JS
  99.  *
  100.  * @see {@link https://developers.google.com/apps-script/reference/cache}
  101.  *
  102.  * @param {string} key a chave do cache
  103.  * @param {string} value o valor a ser incluído
  104.  * @param {int} [time=10800] o tempo em milisegundos, por padrão é 6 horas, o tempo máximo
  105.  * @returns {null}
  106.  */
  107. function putDataInUserCache(key,value,time=10800) { //Coloca alguma informação no cache de script, o tempo padrão sendo o máximo, 6 horas
  108.  
  109.   Logger.log("vamos colocar a chave " + key + " com o valor " + value)
  110.  
  111.   userCache.put(key,value,time);
  112.  
  113.   Logger.log("o valor ficou " + userCache.get(key))
  114.  
  115. }
  116.  
  117.  
  118. /**
  119.  *
  120.  * extrai um valor do cache, para ser usado em JS
  121.  *
  122.  * @see {@link https://developers.google.com/apps-script/reference/cache}
  123.  *
  124.  * @param {string} key a chave do cache
  125.  * @returns {string}
  126.  */
  127. function getDataInUserCache(key) { //retorna o dado do cache script
  128.  
  129.   Logger.log("estou vendo a chave: " + key);
  130.   Logger.log("estou retornando " + userCache.get(key))
  131.  
  132.   return userCache.get(key);
  133.  
  134. }
  135.  
  136. //CACHE <
  137.  
  138. //QUERY >
  139.  
  140. //funções do tipo query pesquisam em uma planilha, geralmente numa que serve de banco de dados e geralmente pra serem utilizadas pelo script run
  141.  
  142. /**
  143.  *
  144.  * busca um intervalo nomeado namedRange dentro de uma planilha sourceSheet e retorna um select em HTML utlizando esses valores
  145.  *
  146.  * @see {@link https://developers.google.com/apps-script/reference/spreadsheet/spreadsheet-app?hl=en }
  147.  * @see {@link https://support.google.com/docs/answer/63175?hl=pt-BR&co=GENIE.Platform%3DDesktop }
  148.  *
  149.  * @param {string} sourceSheet a planilha onde se encontra o intervalo
  150.  * @param {string} namedRange o nome do intervalo nomeado
  151.  * @returns {string}
  152.  */
  153. function queryOptionsNamedRange(sourceSheet, namedRange) {
  154.  
  155.   Logger.log("pesquisando no intervalo: " + namedRange);
  156.   let array = sourceSheet.getRangeByName(namedRange).getValues().filter(String); //captura os valores do intervalo nomeado e em seguida filtra todas células vazias
  157.   Logger.log("após filtrar: " + array);
  158.   array = array.sort() //ordena os valores em ordem alfabética
  159.   Logger.log("ordenado: " + array)
  160.   let htmlOutput = HtmlService.createHtmlOutput(); //cria uma variável para ser utilizada para saída em HTML
  161.  
  162.   for (let i = 0; i < array.length; i++) { //inicia um looping pelos valores do intervalo nomeado
  163.  
  164.     htmlOutput.append('<option value="' + array[i] + '">' + array[i] + "</option>\n"); //e então cria uma lista de opções utilizando os valores do intervalo
  165.  
  166.   }
  167.  
  168.   Logger.log("e assim criamos essa lista: " + htmlOutput.getContent())
  169.   return htmlOutput.getContent(); //retorna o select solicitado
  170.  
  171. }
  172.  
  173. /**
  174.  *
  175.  * busca um intervalo nomeado namedRange não ordenado  dentro de uma planilha sourceSheet e retorna um select em HTML utlizando esses valores
  176.  *
  177.  * @see {@link https://developers.google.com/apps-script/reference/spreadsheet/spreadsheet-app?hl=en }
  178.  * @see {@link https://support.google.com/docs/answer/63175?hl=pt-BR&co=GENIE.Platform%3DDesktop }
  179.  *
  180.  * @param {string} sourceSheet a planilha onde se encontra o intervalo
  181.  * @param {string} namedRange o nome do intervalo nomeado
  182.  * @returns {string}
  183.  */
  184. function queryOptionsNamedRangeUnsort(sourceSheet, namedRange) {
  185.  
  186.   let array = sourceSheet.getRangeByName(namedRange).getValues().filter(String); //captura os valores do intervalo nomeado e em seguida filtra todas células vazias
  187.   let htmlOutput = HtmlService.createHtmlOutput(); //cria uma variável para ser utilizada para saída em HTML
  188.  
  189.   for (let i = 0; i < array.length; i++) { //inicia um looping pelos valores do intervalo nomeado
  190.  
  191.     htmlOutput.append('<option value="' + array[i] + '">' + array[i] + "</option>\n"); //e então cria uma lista de opções utilizando os valores do intervalo
  192.  
  193.   }
  194.  
  195.   //Logger.log("e assim criamos essa lista: " + htmlOutput.getContent())
  196.   return htmlOutput.getContent(); //retorna o select solicitado
  197.  
  198. }
  199.  
  200.  
  201. /**
  202.  *
  203.  * busca um intervalo dinamico referente a coluna colunaRefrencia e uma pagina paginaReferencia dentro de uma planilha sourceSheet e retorna um select em HTML utlizando esses valores
  204.  *
  205.  * @see {@link https://developers.google.com/apps-script/reference/spreadsheet/spreadsheet-app?hl=en }
  206.  * @see {@link https://support.google.com/docs/answer/63175?hl=pt-BR&co=GENIE.Platform%3DDesktop }
  207.  *
  208.  * @param {Spreadsheet} sourceSheet a planilha onde se encontra o intervalo
  209.  * @param {string} paginaReferencia a página dentro da tabela sourceSheet
  210.  * @param {string} colunaReferencia a coluna dentro da paginaReferencia
  211.  * @returns {string}
  212.  */
  213. function queryOptionsDynamicRange(sourceSheet, paginaReferencia, colunaReferencia, padrao) {
  214.  
  215.   let planilha = sourceSheet; //caputra a planilha
  216.   Logger.log("capturando a planilha: " + planilha.getName());
  217.   let pagina = planilha.getSheetByName(paginaReferencia); //captura a pagina
  218.   Logger.log("capturando a página: " + pagina.getName());
  219.   Logger.log("contando total de linhas...");
  220.   let totalLinhas = pagina.getMaxRows();
  221.   Logger.log("total: " + totalLinhas);
  222.   range = pagina.getRange(colunaReferencia + "2" + ":" + colunaReferencia + totalLinhas);
  223.   Logger.log("pesquisando no intervalo: " + range.getA1Notation());
  224.   let array = range.getValues().filter(String); //captura os valores do intervalo nomeado e em seguida filtra todas células vazias
  225.   Logger.log("após filtrar: " + array);
  226.   array = array.sort() //ordena os valores em ordem alfabética
  227.   Logger.log("ordenado: " + array)
  228.   let htmlOutput = HtmlService.createHtmlOutput(); //cria uma variável para ser utilizada para saída em HTML
  229.  
  230.   for (let i = 0; i < array.length; i++) { //inicia um looping pelos valores do intervalo nomeado
  231.  
  232.     if(array[i] == padrao) {
  233.  
  234.       htmlOutput.append('<option value="' + array[i] + '" selected>' + array[i] + "</option>\n"); //e então cria uma lista de opções utilizando os valores do intervalo
  235.  
  236.     }
  237.  
  238.     else{
  239.  
  240.       htmlOutput.append('<option value="' + array[i] + '">' + array[i] + "</option>\n"); //e então cria uma lista de opções utilizando os valores do intervalo
  241.  
  242.     }
  243.    
  244.   }
  245.  
  246.   Logger.log("e assim criamos essa lista: " + htmlOutput.getContent())
  247.   return htmlOutput.getContent(); //retorna o select solicitado
  248.  
  249. }
  250.  
  251. /**
  252.  *
  253.  * busca um intervalo dinamico referente a coluna colunaRefrencia e uma pagina paginaReferencia dentro de uma planilha sourceSheet e retorna um select em HTML utlizando esses valores
  254.  *
  255.  * @see {@link https://developers.google.com/apps-script/reference/spreadsheet/spreadsheet-app?hl=en }
  256.  * @see {@link https://support.google.com/docs/answer/63175?hl=pt-BR&co=GENIE.Platform%3DDesktop }
  257.  *
  258.  * @param {Spreadsheet} sourceSheet a planilha onde se encontra o intervalo
  259.  * @param {string} paginaReferencia a página dentro da tabela sourceSheet
  260.  * @param {string} colunaReferencia a coluna dentro da paginaReferencia
  261.  * @returns {string}
  262.  */
  263. function queryOptionsBanco() {
  264.  
  265.   let planilha = planilhaRh; //caputra a planilha
  266.   Logger.log("capturando a planilha: " + planilha.getName());
  267.   let pagina = planilha.getSheetByName("BANCOS"); //captura a pagina
  268.   Logger.log("capturando a página: " + pagina.getName());
  269.   Logger.log("contando total de linhas...");
  270.   let totalLinhas = pagina.getMaxRows();
  271.   Logger.log("total: " + totalLinhas);
  272.   range = pagina.getRange("B" + "2" + ":" + "C" + totalLinhas);
  273.   range = range.sort(2) //ordena os valores em ordem do código
  274.   Logger.log("pesquisando no intervalo: " + range.getA1Notation());
  275.   let array = range.getValues().filter(String); //captura os valores do intervalo nomeado e em seguida filtra todas células vazias
  276.   Logger.log("após filtrar: " + array);
  277.   Logger.log("ordenado: " + array)
  278.   let htmlOutput = HtmlService.createHtmlOutput(); //cria uma variável para ser utilizada para saída em HTML
  279.  
  280.   for (let i = 0; i < array.length; i++) { //inicia um looping pelos valores do intervalo nomeado
  281.  
  282.     htmlOutput.append('<option value="' + array[i][0] + '">' + array[i][0] + " (" + array[i][1] + ") " + "</option>\n"); //e então cria uma lista de opções utilizando os valores do intervalo
  283.    
  284.   }
  285.  
  286.   Logger.log("e assim criamos essa lista: " + htmlOutput.getContent())
  287.   return htmlOutput.getContent(); //retorna o select solicitado
  288.  
  289. }
  290.  
  291. /**
  292.  *
  293.  * busca um intervalo dinamico referente a coluna colunaRefrencia e uma pagina paginaReferencia dentro de uma planilha sourceSheet e retorna um select em HTML utlizando esses valores
  294.  *
  295.  * @see {@link https://developers.google.com/apps-script/reference/spreadsheet/spreadsheet-app?hl=en }
  296.  * @see {@link https://support.google.com/docs/answer/63175?hl=pt-BR&co=GENIE.Platform%3DDesktop }
  297.  *
  298.  * @param {Spreadsheet} sourceSheet a planilha onde se encontra o intervalo
  299.  * @param {string} paginaReferencia a página dentro da tabela sourceSheet
  300.  * @param {string} colunaReferencia a coluna dentro da paginaReferencia
  301.  * @returns {string}
  302.  */
  303. function queryOptionFuncoes() {
  304.  
  305.   let planilha = planilhaRh; //caputra a planilha
  306.   Logger.log("capturando a planilha: " + planilha.getName());
  307.   let funcoes = planilha.getSheetByName("FUNCOES"); //captura a pagina de FUNCOES
  308.   let categoria = planilha.getSheetByName("CATEGORIAS_FUNCAO"); //captura a pagina de FUNCOES
  309.   Logger.log("capturando a página: " + funcoes.getName());
  310.   Logger.log("capturando a página: " + categoria.getName());
  311.   Logger.log("contando total de linhas em funcoes...");
  312.   let totalLinhasFuncao = funcoes.getMaxRows();
  313.   Logger.log("total: " + totalLinhasFuncao)
  314.   Logger.log("contando total de linhas em categoria...");
  315.   let totalLinhasCategoria = categoria.getMaxRows();
  316.   Logger.log("total: " + totalLinhasCategoria);
  317.   rangeFuncao = funcoes.getRange("B" + "2" + ":" + "C" + totalLinhasFuncao);
  318.   rangeFuncao = rangeFuncao.sort(3) //ordena os valores em ordem alfabética
  319.   Logger.log(rangeFuncao.sort(3));
  320.   rangeCategoria = categoria.getRange("A" + "2" + ":" + "C" + totalLinhasCategoria);
  321.   rangeCategoria = rangeCategoria.sort(3) //ordena os valores pelo index
  322.  
  323.   Logger.log("pesquisando no intervalo de função: " + rangeFuncao.getA1Notation());
  324.   let arrayFuncao = rangeFuncao.getValues().filter(String); //captura os valores do intervalo nomeado e em seguida filtra todas células vazias
  325.   Logger.log("após filtrar: " + arrayFuncao);
  326.  
  327.   Logger.log("pesquisando no intervalo de categoria: " + rangeCategoria.getA1Notation());
  328.   let arrayCategoria = rangeCategoria.getValues().filter(String); //captura os valores do intervalo nomeado e em seguida filtra todas células vazias
  329.   Logger.log("após filtrar: " + arrayCategoria);
  330.  
  331.   let htmlOutput = HtmlService.createHtmlOutput(); //cria uma variável para ser utilizada para saída em HTML
  332.  
  333.   Logger.log("gerando lista de funções");
  334.  
  335.   for (let i = 0; i < arrayCategoria.length; i++) { //inicia um looping pelas categorias
  336.  
  337.    Logger.log("categoria " + i + " = " + arrayCategoria[i][1]);
  338.     Logger.log('<optgroup label="' + arrayCategoria[i][1] + '">');
  339.  
  340.     htmlOutput.append('<optgroup label="' + arrayCategoria[i][1] + '">'); //e então cria uma lista de opções utilizando os valores do intervalo
  341.  
  342.     Logger.log("atualizando output");
  343.     Logger.log(htmlOutput.getContent());
  344.  
  345.     for (let j = 0; j < arrayFuncao.length; j++) { //inicia um looping pelos valores do intervalo nomeado
  346.  
  347.       Logger.log("função " + j + " = " + arrayFuncao[j][1]);
  348.  
  349.       Logger.log("verificando se " + arrayFuncao[j][0] + " = " + arrayCategoria[i][0]);
  350.  
  351.       if(arrayFuncao[j][0] == arrayCategoria[i][0]) {
  352.  
  353.         //Logger.log("é igual, adicionando...");
  354.  
  355.         htmlOutput.append('<option value="' + arrayFuncao[j][1] + '">' + arrayFuncao[j][1] + "</option>\n"); //e então cria uma lista de opções utilizando os valores do intervalo
  356.  
  357.       }
  358.  
  359.       Logger.log("atualizando output");
  360.       Logger.log(htmlOutput.getContent());
  361.  
  362.  
  363.     }
  364.  
  365.     htmlOutput.append('</optgroup>'); //finaliza optgroup
  366.  
  367.   }
  368.  
  369.   Logger.log("e assim criamos essa lista: " + htmlOutput.getContent())
  370.   return htmlOutput.getContent(); //retorna o select solicitado
  371.  
  372. }
  373.  
  374. /**
  375.  *
  376.  * função utilizada para capturar um valor específico em um intervalo nomeado na planilha
  377.  *
  378.  * @see {@link https://developers.google.com/apps-script/guides/html/reference/run }
  379.  *
  380.  * @param {string} value o valor a ser procurado
  381.  * @param {string} namedRange o nome do intervalo nomeado
  382.  * @returns {int}
  383.  */
  384.  
  385. function queryValueInNamedRange(value,namedRange) {
  386.  
  387.   Logger.log("pesquisando " + value + " em " + namedRange)
  388.  
  389.   let data = planilha.getRangeByName(namedRange).getValues().filter(String); //captura os valores do intervalo nomeado
  390.  
  391.   Logger.log("considerando " + data)
  392.  
  393.   for(let i = 0; i<data.length;i++) { //busca o valor value dentro do intervalo
  394.  
  395.     Logger.log(i);
  396.  
  397.     if(data[i] == value){  //se o valor for encontrado
  398.       Logger.log(("encontramos em " + i))
  399.       return i+2; //retorna a linha, +2 pois inicia-se em 0 e na segunda linha
  400.     }
  401.  
  402.   }
  403.  
  404.  
  405. }
  406.  
  407. /**
  408.  *
  409.  * função utilizada para capturar um valor específico em um intervalo dinamico
  410.  *
  411.  * @see {@link https://developers.google.com/apps-script/guides/html/reference/run }
  412.  *
  413.  * @param {Spreadsheet} sourceSheet a planilha onde se encontra o intervalo
  414.  * @param {string} value o valor a ser procurado
  415.  * @param {string} pagina a pagina onde procurar
  416.  * @param {string} a coluna onde procurar
  417.  * @returns {int}
  418.  */
  419. function queryValueInDynamicRange(sourceSheet,valor,paginaReferencia, colunaReferencia) {
  420.  
  421.   //determina a sourceSheet
  422.  
  423.   Logger.log("pesquisando " + valor + " em " + paginaReferencia + " coluna " + colunaReferencia);
  424.   let planilha = sourceSheet; //caputra a planilha
  425.   Logger.log("capturando a planilha: " + planilha.getName());
  426.   let pagina = planilha.getSheetByName(paginaReferencia); //captura a pagina
  427.   Logger.log("capturando a página: " + pagina.getName());
  428.   Logger.log("contando total de linhas...");
  429.   let totalLinhas = pagina.getMaxRows();
  430.   Logger.log("total: " + totalLinhas);
  431.   range = pagina.getRange(colunaReferencia + "2" + ":" + colunaReferencia + totalLinhas).getValues();
  432.   Logger.log("pesquisando no intervalo: " + range);
  433.  
  434.   Logger.log("considerando " + range);
  435.  
  436.   for(let i = 0; i<range.length;i++) { //busca o valor dentro do intervalo
  437.  
  438.     //Logger.log(i);
  439.  
  440.     if(range[i] == valor){  //se o valor for encontrado
  441.  
  442.       let retorno = parseInt(i) + 2;
  443.       Logger.log(("encontramos em " + retorno))
  444.       return i+2; //retorna a linha, +2 pois inicia-se em 0 e na segunda linha
  445.  
  446.     }
  447.  
  448.   }
  449.  
  450.  
  451. }
  452.  
  453. function indexCelula(sourceSheet, paginaReferencia, colunaReferencia, linhaReferencia) { //retorna o valor de uma celula exata
  454.  
  455.   Logger.log("sourceSheet= " + sourceSheet);
  456.   Logger.log("paginaReferencia= " + paginaReferencia);
  457.   Logger.log("colunaReferencia= " + colunaReferencia);
  458.   Logger.log("linhaReferencia= " + linhaReferencia);
  459.  
  460.   if(linhaReferencia == undefined) {
  461.  
  462.     return "não encontrado";
  463.  
  464.   }
  465.  
  466.   //determina a sourceSheet
  467.  
  468.   if(sourceSheet == planilhaRh) {
  469.  
  470.     sourceSheet = planilhaRh;
  471.  
  472.   }
  473.  
  474.   else if(sourceSheet == planilhaEstrutura) {
  475.  
  476.     sourceSheet = planilhaEstrutura;
  477.  
  478.   }
  479.  
  480.   else if(sourceSheet == "planilha"){
  481.  
  482.     sourceSheet = planilha;
  483.  
  484.   }
  485.  
  486.   else{
  487.  
  488.     sourceSheet = sourceSheet;
  489.  
  490.   }
  491.  
  492.   Logger.log("retornando valor em " + sourceSheet.getName() + " página: " + paginaReferencia + " célula " + colunaReferencia + linhaReferencia);
  493.  
  494.   let planilha = sourceSheet; //caputra a planilha
  495.   Logger.log("capturando a planilha: " + sourceSheet.getName());
  496.   let pagina = planilha.getSheetByName(paginaReferencia); //captura a pagina
  497.   Logger.log("capturando a página: " + pagina.getName());
  498.   Logger.log("capturando célula " + colunaReferencia + linhaReferencia);
  499.   let resultado = pagina.getRange(colunaReferencia + linhaReferencia).getValues();
  500.   Logger.log("capturando valor...");
  501.   Logger.log("resultado: " + resultado);
  502.  
  503.   return resultado;
  504.  
  505. }
  506.  
  507. function reverseQueryValueInNamedRangeDB(value,namedRange) {
  508.  
  509.   Logger.log("pesquisando " + value + " em " + namedRange)
  510.  
  511.   let data = planilha.getRangeByName(namedRange).getValues().filter(String); //captura os valores do intervalo nomeado
  512.  
  513.   Logger.log("considerando " + data)
  514.  
  515.   for(let i = data.length-1; i>=0; i--) { //busca reversa do valor value dentro do intervalo
  516.  
  517.     Logger.log(i);
  518.  
  519.     if(data[i] == value){  //se o valor for encontrado
  520.  
  521.       let retorno = parseInt(i) + 2;
  522.       Logger.log(("encontramos em " + retorno))
  523.       return retorno; //retorna a linha, +2 pois inicia-se em 0 e na segunda linha
  524.     }
  525.  
  526.   }
  527.  
  528.  
  529. }
  530.  
  531. //QUERY <
  532.  
  533. //REGISTRO >
  534. //funções de registro gravam dados dentro das planilhas
  535.  
  536.  
  537. /**
  538.  *
  539.  * registra os valores na página(aba) de destino
  540.  *
  541.  * @see {@link https://developers.google.com/apps-script/reference/spreadsheet/spreadsheet-app?hl=en }
  542.  *
  543.  * @param {string} destino a folha(aba) de destino
  544.  * @param {string} a lista de valores a serem inseridos
  545.  *
  546.  * @returns {null}
  547.  *
  548.  */
  549. function gravarNaPlanilha(destino, valores) {
  550.  
  551.  
  552.   valores = valores.split(','); //recebe a lista dos valores, uma string, e transforma em um array
  553.   let id = Utilities.getUuid(); //gera uma id
  554.   let data = Utilities.formatDate(new Date(), planilha.getSpreadsheetTimeZone(), "dd/MM/yyyy kk:mm") //determina data atual
  555.   let aprovado = false;
  556.   valores.unshift(id); //adiciona id ao começo do array
  557.   valores.push(data); //adiciona a data no final do array
  558.  
  559.   Logger.log("colocarei " + valores + " na planilha " + destino)
  560.  
  561.   planilha.getSheetByName(destino).appendRow(valores); //adiciona uma linha na folha de destino com os valores recebido
  562.  
  563.   return id; // retorna a nova id gerada;
  564.  
  565. }
  566.  
  567. /**
  568.  *
  569.  * registra os valores na página(aba) de destino
  570.  *
  571.  * @see {@link https://developers.google.com/apps-script/reference/spreadsheet/spreadsheet-app?hl=en }
  572.  *
  573.  * @param {Spreadsheet} sourceSheet a planilha onde se encontra o intervalo
  574.  * @param {string} destino a folha(aba) de destino
  575.  * @param {string} a lista de valores a serem inseridos
  576.  *
  577.  * @returns {null}
  578.  *
  579.  */
  580. function gravarNaPlanilhaSistema(sourceSheet,destino, valores) {
  581.  
  582.   Logger.log(valores);
  583.  
  584.   let id = Utilities.getUuid(); //gera uma id
  585.   let data = Utilities.formatDate(new Date(), sourceSheet.getSpreadsheetTimeZone(), "dd/MM/yyyy kk:mm") //determina data atual
  586.   valores.unshift(id); //adiciona id ao começo do array
  587.   valores.push(idColaborador); //adiciona responsavelRegistro no final do array
  588.   valores.push(data); //adiciona a data no final do array
  589.  
  590.   Logger.log("colocarei " + valores + " na planilha " + destino)
  591.  
  592.   //determina a sourceSheet
  593.  
  594.   if(sourceSheet == planilhaRh) {
  595.  
  596.     sourceSheet = planilhaRh;
  597.  
  598.   }
  599.  
  600.   else if(sourceSheet == planilhaEstrutura) {
  601.  
  602.     sourceSheet = planilhaEstrutura;
  603.  
  604.   }
  605.  
  606.   else if(sourceSheet == "planilha"){
  607.  
  608.     sourceSheet = planilha;
  609.  
  610.   }
  611.  
  612.   else{
  613.  
  614.     sourceSheet = sourceSheet;
  615.  
  616.   }
  617.  
  618.   sourceSheet.getSheetByName(destino).appendRow(valores); //adiciona uma linha na folha de destino com os valores recebido
  619.  
  620.   return id;
  621.  
  622. }
  623.  
  624. /**
  625.  *
  626.  *  receber todos arrays e registra nas tabelas
  627.  *
  628.  */
  629. function finalizarFormulario(arrayInfoGer,arrayDadosProfissionais , arrayFuncoes, arrayPFis, arrayFormaPagamento, arrayNotaFiscal, arrayRPA, arrayDadosBancGerais, arrayBancNF, arrayBancRPA) {
  630.  
  631.   Logger.log("listando arrays:");
  632.   Logger.log("arrayInfoGer");
  633.   Logger.log(arrayInfoGer);
  634.   Logger.log("arrayDadosProfissionais");
  635.   Logger.log(arrayDadosProfissionais);
  636.   Logger.log("arrayFuncoes");
  637.   Logger.log(arrayFuncoes);
  638.   Logger.log("arrayPFis");
  639.   Logger.log(arrayPFis);
  640.   Logger.log("arrayFormaPagamento");
  641.   Logger.log(arrayFormaPagamento);
  642.   Logger.log("arrayNotaFiscal");
  643.   Logger.log(arrayNotaFiscal);
  644.   Logger.log("arrayRPA");
  645.   Logger.log(arrayRPA);
  646.   Logger.log("arrayDadosBancGerais");
  647.   Logger.log(arrayDadosBancGerais);
  648.   Logger.log("arrayBancNF");
  649.   Logger.log(arrayBancNF);
  650.   Logger.log("arrayBancRPA");
  651.   Logger.log(arrayBancRPA);
  652.  
  653.   //nomeia os valores dos vetores
  654.  
  655.   Logger.log("nomeando valores...");
  656.  
  657.   //captura informações gerais
  658.  
  659.   //arrayInfoGer = [nomeCompleto,nomeArtistico,ddd,telefone,email,foto];
  660.   let nome = arrayInfoGer[0];
  661.   nome = capitalizeWords(nome); //deixa nome com letras maiusculas
  662.   let nomeArtistico = arrayInfoGer[1];
  663.   nomeArtistico = capitalizeWords(nomeArtistico); //deixa nome com letras maiusculas
  664.   let ddd = arrayInfoGer[2];
  665.   let telefone = arrayInfoGer[3];
  666.   let email = arrayInfoGer[4];
  667.   let foto = arrayInfoGer[5];
  668.  
  669.   // captura os valores dos dados profissionais
  670.  
  671.   //arrayDadosProfissionais = [profissao,curriculo];
  672.   let profissao = arrayDadosProfissionais[0];
  673.   profissao = profissao.toLowerCase(); //corrige
  674.   let curriculo = arrayDadosProfissionais[1];
  675.  
  676.   // as funções ficam no array 2d descrito a seguir
  677.   // funcoesArrayGeral
  678.   funcoesArrayGeral = arrayFuncoes;
  679.  
  680.   // captura os valores dos dados pessoa física
  681.  
  682.   //arrayPFis = [pfRG,pfCPF,dataNascimento,identidadeGenero,estadoCivil,nacionalidade,outraNacionalidade,pfCEP,pfEstado,pfCidade,pfBairro,pfEndereco,pfNumero,pfComplemento,restricaoAlimentar,outraRestricao];
  683.  
  684.   let pfRG = arrayPFis[0];
  685.   let pfCPF = arrayPFis[1];
  686.   let dataNascimento = arrayPFis[2];
  687.   let identidadeGenero = arrayPFis[3];
  688.   let estadoCivil = arrayPFis[4];
  689.   let nacionalidade = arrayPFis[5];
  690.   let outraNacionalidade = arrayPFis[6];
  691.   outraNacionalidade = outraNacionalidade.toLowerCase(); //corrige
  692.   let pfCEP = arrayPFis[7];
  693.   let pfEstado = arrayPFis[8];
  694.   pfEstado = pfEstado.toUpperCase(); //corrige para buscas
  695.   let pfCidade = arrayPFis[9];
  696.   pfCidade = capitalizeWords(pfCidade); //corrige para buscas
  697.   let pfBairro = arrayPFis[10];
  698.   pfBairro = pfBairro.toLowerCase(); //corrige
  699.   let pfEndereco = arrayPFis[11];
  700.   pfEndereco = pfEndereco.toLowerCase(); //corrige
  701.   let pfNumero = arrayPFis[12];
  702.   let pfComplemento = arrayPFis[13];
  703.   pfComplemento = pfComplemento.toLowerCase(); //corrige
  704.   let restricaoAlimentar = arrayPFis[14];
  705.   let outraRestricao = arrayPFis[15];
  706.   outraRestricao = outraRestricao.toLowerCase(); //corrige
  707.  
  708.   //  captura dados da forma de pagamento
  709.  
  710.   //arrayFormaPagamento = [formaPagamento];
  711.   let formaPagamento = arrayFormaPagamento[0];
  712.  
  713.   // captura dados da nota fiscal
  714.  
  715.   //arrayNotaFiscal = [razaoSocial,nomeFantasia,nfCNPJ,nfCEp,nfEstado,nfCidade,nfBairro,nfEndereco,nfNumero,nfComplemento];
  716.   let razaoSocial = arrayNotaFiscal[0];
  717.   razaoSocial = capitalizeWords(razaoSocial); //deixa nome com letras maiusculas
  718.   let nomeFantasia = arrayNotaFiscal[1];
  719.   nomeFantasia = capitalizeWords(nomeFantasia); //deixa nome com letras maiusculas
  720.   let nfCNPJ = arrayNotaFiscal[2];
  721.   let nfCEP = arrayNotaFiscal[3];
  722.   let nfEstado = arrayNotaFiscal[4];
  723.   nfEstado = nfEstado.toUpperCase(); //corrige para buscas
  724.   let nfCidade = arrayNotaFiscal[5];
  725.   nfCidade = capitalizeWords(nfCidade); //corrige para buscas
  726.   let nfBairro = arrayNotaFiscal[6];
  727.   nfBairro = nfBairro.toLowerCase(); //corrige para buscas
  728.   let nfEndereco = arrayNotaFiscal[7];
  729.   nfEndereco = nfEndereco.toLowerCase(); //corrige para buscas
  730.   let nfNumero = arrayNotaFiscal[8];
  731.   let nfComplemento = arrayNotaFiscal[9];
  732.   nfComplemento = nfComplemento.toLowerCase(); //corrige para buscas
  733.  
  734.   // captura dados de RPA
  735.  
  736.   //arrayRPA = [cor,naturalidade,grauInstrucao,inscricaoINSS];
  737.   let cor = arrayRPA[0];
  738.   let naturalidade = arrayRPA[1];
  739.   naturalidade = naturalidade.toLowerCase(); //corrige para buscas
  740.   let grauInstrucao = arrayRPA[2];
  741.   let inscricaoINSS = arrayRPA[3];
  742.  
  743.   // captura dados bancarios gerais
  744.  
  745.   //arrayDadosBancGerais = [banco,agencia,conta];
  746.   let banco = arrayDadosBancGerais[0];
  747.   let agencia = arrayDadosBancGerais[1];
  748.   let conta = arrayDadosBancGerais[2];
  749.  
  750.   //captura dados bancarios de Nota Fiscal
  751.   //arrayBancNF = [cpf_cnpj,titular,bancCNPJ,bancCPFNF];
  752.  
  753.   let cpf_cnpj = arrayBancNF[0];
  754.   let titular = arrayBancNF[1];
  755.   Logger.log("titular: " + titular);
  756.   titular = capitalizeWords(titular); //deixa nome com letras maiusculas
  757.  
  758.     // caso CNPJ
  759.  
  760.     let bancCNPJ = arrayBancNF[2];
  761.  
  762.     // caso CPF
  763.  
  764.     let bancCPFNF = arrayBancNF[3];
  765.  
  766.   //captura dados bcancarios de RPA
  767.   //arrayBancRPA = [bancCPFRPA];
  768.  
  769.   let bancCPFRPA = arrayBancRPA[0];
  770.  
  771.  
  772.   // REGISTRA OS DADOS >>
  773.  
  774.   Logger.log("registando dados...");
  775.  
  776.   Logger.log("COLABORADORES");
  777.   // COLABORADOR >>
  778.  
  779.   // CRIAÇÃO DO ARRAY >>
  780.  
  781.   Logger.log("gerando array de colaboradores");
  782.   let arrayColaboradores = []; // gera o array de base para COLABORADORES
  783.  
  784.   let vinculo = "fornecedor"; //nomeia para facilidade de leitura
  785.   arrayColaboradores.push(vinculo);
  786.   Logger.log("array no momento:");
  787.   Logger.log(arrayColaboradores);
  788.  
  789.   Logger.log("gravando a foto " + foto);
  790.   if(foto != "falha de arquivo"){
  791.  
  792.     foto = saveFile(foto, pastaImagemColaboradores,enderecoImagemColaboradores);
  793.  
  794.   }
  795.  
  796.   Logger.log(foto);
  797.   arrayColaboradores.push(foto);
  798.   Logger.log("array no momento:");
  799.   Logger.log(arrayColaboradores);
  800.  
  801.   Logger.log("adicionando de nome até estadoCivil");
  802.   arrayColaboradores.push(nome);
  803.   arrayColaboradores.push(nomeArtistico);
  804.   arrayColaboradores.push(ddd);
  805.   arrayColaboradores.push(telefone);
  806.   arrayColaboradores.push(email);
  807.   arrayColaboradores.push(pfRG);
  808.   arrayColaboradores.push(pfCPF);
  809.   arrayColaboradores.push(dataNascimento);
  810.   arrayColaboradores.push(identidadeGenero);
  811.   arrayColaboradores.push(estadoCivil);
  812.   Logger.log("array no momento:");
  813.   Logger.log(arrayColaboradores);
  814.  
  815.   Logger.log("tratando os dados...");
  816.  
  817.   // trata nacionalidade
  818.  
  819.   Logger.log("verificando nacionalidade...");
  820.  
  821.   if(nacionalidade == "outra") {
  822.  
  823.     Logger.log("é uma nova nacionalidade: " + outraNacionalidade);
  824.  
  825.     vetorNovaNacionalidade = [outraNacionalidade]; //gera o vetor
  826.  
  827.     nacionalidade = gravarNaPlanilhaSistema(planilhaRh,"NACIONALIDADES", vetorNovaNacionalidade) //adiciona novo registro e pega a id
  828.  
  829.   }
  830.  
  831.   else if(nacionalidade != "outra"){
  832.  
  833.     Logger.log("nacionalidade existente: " + nacionalidade);
  834.  
  835.     Logger.log("procurando id da nacionalidade...");
  836.  
  837.     nacionalidadeLinha = queryValueInDynamicRange(planilhaRh,nacionalidade,"NACIONALIDADES", "B");
  838.  
  839.     Logger.log("encontrada na linha: " + nacionalidadeLinha);
  840.  
  841.     Logger.log("retornando id da nacionalidade");
  842.  
  843.     nacionalidade = String(indexCelula(planilhaRh, "NACIONALIDADES", "A", nacionalidadeLinha));
  844.  
  845.   }
  846.  
  847.   Logger.log("a id retornada é: " + nacionalidade);
  848.   arrayColaboradores.push(nacionalidade);
  849.   Logger.log("array no momento:");
  850.   Logger.log(arrayColaboradores);
  851.  
  852.   // trata estado
  853.  
  854.   estado = pfEstado; //facilita leitura
  855.  
  856.   Logger.log("procurando id do estado...");
  857.  
  858.   estadoLinha = queryValueInDynamicRange(planilhaEstrutura,estado,"ESTADOS", "C")
  859.  
  860.   Logger.log("encontrada na linha: " + estadoLinha);
  861.  
  862.   Logger.log("retornando id do estado");
  863.  
  864.   estado = String(indexCelula(planilhaEstrutura, "ESTADOS", "A", estadoLinha));
  865.  
  866.   Logger.log("a id retornada é: " + estado);
  867.   arrayColaboradores.push(estado);
  868.   Logger.log("array no momento:");
  869.   Logger.log(arrayColaboradores);
  870.  
  871.   // trata cidade
  872.  
  873.   cidade = pfCidade; // facilita leitura
  874.  
  875.   Logger.log("procurando id da cidade...");
  876.  
  877.   cidadeLinha = queryValueInDynamicRange(planilhaEstrutura,cidade,"CIDADES", "C")
  878.  
  879.   Logger.log("encontrada na linha: " + cidadeLinha);
  880.  
  881.   Logger.log("retornando id da cidade");
  882.  
  883.   cidade = String(indexCelula(planilhaEstrutura, "CIDADES", "A", cidadeLinha));
  884.  
  885.   Logger.log("a id retornada é: " + cidade);
  886.   arrayColaboradores.push(cidade);
  887.   Logger.log("array no momento:");
  888.   Logger.log(arrayColaboradores);
  889.  
  890.   Logger.log("adicionando de bairro até cep");
  891.   arrayColaboradores.push(pfBairro);
  892.   arrayColaboradores.push(pfEndereco);
  893.   arrayColaboradores.push(pfNumero);
  894.   arrayColaboradores.push(pfComplemento);
  895.   arrayColaboradores.push(pfCEP);
  896.   Logger.log("array no momento:");
  897.   Logger.log(arrayColaboradores);
  898.  
  899.   let empresa = ""; //incializa empresa como vazio
  900.  
  901.   Logger.log("dados casos seja nota fiscal:");
  902.  
  903.   if(formaPagamento == "nota fiscal") {
  904.  
  905.     //CRIA UMA NOVA EMPRESA
  906.  
  907.     Logger.log("forma de pagamento é nota fiscal");
  908.  
  909.     let arrayEmpresa = []; //cria o array base para nova empresa
  910.  
  911.     Logger.log("adicionando razaoSocial até cnpj");
  912.  
  913.     arrayEmpresa.push(""); //logo
  914.     arrayEmpresa.push(razaoSocial);
  915.     arrayEmpresa.push(nomeFantasia);
  916.     arrayEmpresa.push(false); //cliente
  917.     arrayEmpresa.push(""); //categoriaCliente
  918.     arrayEmpresa.push(""); //subcategoriaCliente
  919.     arrayEmpresa.push(true); //fornecedor
  920.     arrayEmpresa.push(nfCNPJ);
  921.     Logger.log("array no momento:");
  922.     Logger.log(arrayEmpresa);
  923.  
  924.     // trata estado
  925.  
  926.     estado = nfEstado; // facilita leitura
  927.  
  928.     Logger.log("procurando id do estado...");
  929.  
  930.     estadoLinha = queryValueInDynamicRange(planilhaEstrutura,estado,"ESTADOS", "C")
  931.  
  932.     Logger.log("encontrada na linha: " + estadoLinha);
  933.  
  934.     Logger.log("retornando id do estado");
  935.  
  936.     estado = String(indexCelula(planilhaEstrutura, "ESTADOS", "A", estadoLinha));
  937.  
  938.     Logger.log("a id retornada é: " + estado);
  939.     arrayEmpresa.push(estado);
  940.     Logger.log("array no momento:");
  941.     Logger.log(arrayEmpresa);
  942.  
  943.     // trata cidade
  944.  
  945.     cidade = nfCidade; // facilita leitura
  946.  
  947.     Logger.log("procurando id da cidade...");
  948.  
  949.     cidadeLinha = queryValueInDynamicRange(planilhaEstrutura,cidade,"CIDADES", "C")
  950.  
  951.     Logger.log("encontrada na linha: " + cidadeLinha);
  952.  
  953.     Logger.log("retornando id da cidade");
  954.  
  955.     cidade = String(indexCelula(planilhaEstrutura, "CIDADES", "A", cidadeLinha));
  956.  
  957.     Logger.log("a id retornada é: " + cidade);
  958.     arrayEmpresa.push(cidade);
  959.     Logger.log("array no momento:");
  960.     Logger.log(arrayEmpresa);
  961.  
  962.     Logger.log("adicionando bairro até cep");
  963.  
  964.     arrayEmpresa.push(nfBairro);
  965.     arrayEmpresa.push(nfEndereco);
  966.     arrayEmpresa.push(nfNumero);
  967.     arrayEmpresa.push(nfComplemento);
  968.     arrayEmpresa.push(nfCEP);
  969.     Logger.log("array no momento:");
  970.     Logger.log(arrayEmpresa);
  971.  
  972.     Logger.log("array gerado: " + arrayEmpresa);
  973.  
  974.     idEmpresa = gravarNaPlanilhaSistema(planilhaPlanejamento,"EMPRESAS", arrayEmpresa); //adiciona novo registro e pega a id
  975.  
  976.     Logger.log("nova empresa id: " + idEmpresa);
  977.  
  978.     //anula valores de RPA
  979.  
  980.     cor = "";
  981.     naturalidade = "";
  982.     grauInstrucao = "";
  983.     inscricaoINSS = "";
  984.  
  985.     empresa = idEmpresa; //atribui id da empresa gerada
  986.  
  987.   }
  988.  
  989.   arrayColaboradores.push(empresa); //adiciona valor da empresa, seja "" ou idEmpresa
  990.  
  991.   //insere dados bancários gerais
  992.  
  993.   // trata banco
  994.  
  995.   Logger.log("procurando id do banco...");
  996.  
  997.   bancoLinha = queryValueInDynamicRange(planilhaRh,banco,"BANCOS", "B")
  998.  
  999.   Logger.log("encontrada na linha: " + bancoLinha);
  1000.  
  1001.   Logger.log("retornando id da banco");
  1002.  
  1003.   banco = String(indexCelula(planilhaRh, "BANCOS", "A", bancoLinha));
  1004.  
  1005.   Logger.log("a id retornada é: " + banco);
  1006.   arrayColaboradores.push(banco);
  1007.   Logger.log("array no momento:");
  1008.   Logger.log(arrayColaboradores);
  1009.  
  1010.   arrayColaboradores.push(agencia);
  1011.   arrayColaboradores.push(conta);
  1012.   Logger.log("array no momento:");
  1013.   Logger.log(arrayColaboradores);
  1014.  
  1015.   //insere outros dados da conta
  1016.  
  1017.   if(formaPagamento == "nota fiscal") {
  1018.  
  1019.     arrayColaboradores.push(titular);
  1020.     Logger.log("array no momento:");
  1021.     Logger.log(arrayColaboradores);
  1022.  
  1023.     //insere CPF OU CNPJ
  1024.  
  1025.     if(cpf_cnpj == "cnpj") {
  1026.  
  1027.       arrayColaboradores.push(cpf_cnpj);
  1028.       arrayColaboradores.push(""); //contaCPF
  1029.       arrayColaboradores.push(bancCNPJ);
  1030.  
  1031.     }
  1032.  
  1033.     else {
  1034.  
  1035.       arrayColaboradores.push(cpf_cnpj);
  1036.       arrayColaboradores.push(bancCPFNF);
  1037.       arrayColaboradores.push(""); //contaCNPJ
  1038.  
  1039.     }
  1040.  
  1041.     Logger.log("array no momento:");
  1042.     Logger.log(arrayColaboradores);
  1043.  
  1044.   }
  1045.  
  1046.   else if(formaPagamento == "rpa") {
  1047.  
  1048.     arrayColaboradores.push("cpf");
  1049.     arrayColaboradores.push(bancCPFRPA);
  1050.     arrayColaboradores.push(""); //contaCNPJ
  1051.     Logger.log("array no momento:");
  1052.     Logger.log(arrayColaboradores);
  1053.  
  1054.   }
  1055.  
  1056.   // trata restrição alimentar
  1057.  
  1058.   Logger.log("verificando restrição alimentar...");
  1059.  
  1060.   if(restricaoAlimentar == "outra") {
  1061.  
  1062.     Logger.log("é uma nova restrição: " + outraRestricao);
  1063.  
  1064.     vetorNovaRestricao = [outraRestricao]; //gera o vetor
  1065.  
  1066.     restricaoAlimentar = gravarNaPlanilhaSistema(planilhaRh,"RESTRICOES_ALIMENTARES", vetorNovaRestricao) //adiciona novo registro e pega a id
  1067.  
  1068.   }
  1069.  
  1070.   else if(restricaoAlimentar != "outra"){
  1071.  
  1072.     Logger.log("restrição existente: " + restricaoAlimentar);
  1073.  
  1074.     Logger.log("procurando id da restrição...");
  1075.  
  1076.     restricaoLinha = queryValueInDynamicRange(planilhaRh,restricaoAlimentar,"RESTRICOES_ALIMENTARES", "B")
  1077.  
  1078.     Logger.log("encontrada na linha: " + restricaoLinha);
  1079.  
  1080.     Logger.log("retornando id da nacionalidade");
  1081.  
  1082.     restricaoAlimentar = String(indexCelula(planilhaRh, "RESTRICOES_ALIMENTARES", "A", restricaoLinha));
  1083.  
  1084.   }
  1085.  
  1086.   Logger.log("a id retornada é: " + restricaoAlimentar);
  1087.   arrayColaboradores.push(restricaoAlimentar);
  1088.   Logger.log("array no momento:");
  1089.   Logger.log(arrayColaboradores);
  1090.  
  1091.   // id vinculo foto    nome    nomeArtistico   ddd telefone    email   rg  cpf dataNascimento  identidadeGenero    estadoCivil nacionalidade   estado  cidade  bairro  logradouro  numero  complemento cep empresa contaBanco  contaAgencia    contaConta  contaNome contaCPF_CNPJ contaCPF    contaCNPJ   restricoesAlimentares   profissao   curriculo   *formaPagamento cor naturalidade    grauInstrucao   nInss   resposavelRegistro  dataRegistro
  1092.  
  1093.   arrayColaboradores.push(profissao);
  1094.   Logger.log("array no momento:");
  1095.   Logger.log(arrayColaboradores);
  1096.  
  1097.   Logger.log("gravando o currículo " + curriculo);
  1098.  
  1099.   if(curriculo != "falha de arquivo"){
  1100.  
  1101.     curriculo = saveFile(curriculo, pastaFilesColaboradores,enderecoFilesColaboradores);
  1102.  
  1103.   }
  1104.  
  1105.   Logger.log(curriculo);
  1106.   arrayColaboradores.push(curriculo);
  1107.   Logger.log("array no momento:");
  1108.   Logger.log(arrayColaboradores);
  1109.  
  1110.   arrayColaboradores.push(formaPagamento);
  1111.   arrayColaboradores.push(cor);
  1112.   arrayColaboradores.push(naturalidade);
  1113.   arrayColaboradores.push(grauInstrucao);
  1114.   arrayColaboradores.push(inscricaoINSS);
  1115.   Logger.log("array no momento:");
  1116.   Logger.log(arrayColaboradores);
  1117.  
  1118.   Logger.log("array gerado: " + arrayColaboradores);
  1119.  
  1120.   idPrestadorServico = gravarNaPlanilhaSistema(planilhaRh,"COLABORADORES", arrayColaboradores) //adiciona novo registro e pega a id
  1121.  
  1122.   Logger.log("novo colaborador id: " + idPrestadorServico);
  1123.  
  1124.   // COLABORADOR <<
  1125.  
  1126.   // FUNCOES_COLABORADORES >>                                                      
  1127.  
  1128.   //LOOPING DE CRIAR FUNCOES >>
  1129.  
  1130.   Logger.log("percorrendo o array de funções: " + funcoesArrayGeral);
  1131.  
  1132.   for (let i = 0; i < funcoesArrayGeral.length; i++) {
  1133.  
  1134.     Logger.log("iteração: " + i);
  1135.     Logger.log("detalhes da função: " + funcoesArrayGeral[i]);
  1136.  
  1137.     //vetorFuncao = geraVetorFuncao(funcoesFuncao,funcoesEquipamentoPropio, funcoesSoftwares, funcoesExpectativaValor,funcoesUnidadeMedida, funcoesPortifolio1,funcoesPortifolio2,funcoesPortifolio3);
  1138.  
  1139.     // TRATAMENTO DE DADOS >>
  1140.  
  1141.       // trata função
  1142.  
  1143.       funcao = funcoesArrayGeral[i][0]; //torna mais legivel
  1144.  
  1145.       Logger.log("procurando id da função " + funcao);
  1146.  
  1147.       funcaoLinha = queryValueInDynamicRange(planilhaRh,funcao,"FUNCOES", "C");
  1148.  
  1149.       Logger.log("encontrada na linha: " + funcaoLinha);
  1150.  
  1151.       Logger.log("retornando id da função");
  1152.  
  1153.       funcao = String(indexCelula(planilhaRh, "FUNCOES", "A", funcaoLinha));
  1154.  
  1155.       Logger.log("a id retornada é: " + funcao);
  1156.  
  1157.       // determina categoria
  1158.  
  1159.       let categoria = String(indexCelula(planilhaRh, "FUNCOES", "B", funcaoLinha));
  1160.  
  1161.       // atribui nomes mais legiveis
  1162.  
  1163.       portifolio = funcoesArrayGeral[i][5];
  1164.       portifolio2 = funcoesArrayGeral[i][6];
  1165.       portifolio3 = funcoesArrayGeral[i][7];
  1166.       equipamentoProprio = funcoesArrayGeral[i][1];
  1167.       software = funcoesArrayGeral[i][2];
  1168.       expectativaValor = funcoesArrayGeral[i][3];
  1169.  
  1170.       // trata unidade de medida
  1171.  
  1172.       unidadeMedida = funcoesArrayGeral[i][4]; //torna mais legivel
  1173.  
  1174.       if(unidadeMedida == "outra") {
  1175.  
  1176.         Logger.log("é uma nova unidade de medida: " + outraUMSingular );
  1177.  
  1178.         vetorNovaUnidade = [outraUMSingular , outraUMPlural]; //gera o vetor
  1179.  
  1180.         unidadeMedida = gravarNaPlanilhaSistema(planilhaEstrutura,"UNIDADES_MEDIDA", vetorNovaUnidade) //adiciona novo registro e pega a id
  1181.  
  1182.       }
  1183.  
  1184.       else if(unidadeMedida != "outra"){
  1185.  
  1186.         Logger.log("unidade existente: " + unidadeMedida);
  1187.  
  1188.         Logger.log("procurando id da unidade...");
  1189.  
  1190.         unidadeLinha = queryValueInDynamicRange(planilhaEstrutura,unidadeMedida,"UNIDADES_MEDIDA", "B")
  1191.  
  1192.         Logger.log("encontrada na linha: " + unidadeLinha);
  1193.  
  1194.         Logger.log("retornando id da unidade");
  1195.  
  1196.         unidadeMedida = String(indexCelula(planilhaEstrutura, "UNIDADES_MEDIDA", "A", unidadeLinha));
  1197.  
  1198.       }
  1199.  
  1200.       // TRATAMENTO DE DADOS <<
  1201.  
  1202.       let arrayFuncao = []; // gera o array de base para PRESTADOR_FUNCAO
  1203.  
  1204.       Logger.log("gerando array de função " + i);
  1205.  
  1206.       arrayFuncao.push(idPrestadorServico, categoria, funcao, portifolio, portifolio2, portifolio3, equipamentoProprio, software, expectativaValor, unidadeMedida);
  1207.  
  1208.       Logger.log("array gerado: " + arrayFuncao);
  1209.  
  1210.       idPrestadorFuncao = gravarNaPlanilhaSistema(planilhaRh,"FUNCOES_COLABORADORES", arrayFuncao) //adiciona novo registro e pega a id
  1211.  
  1212.       Logger.log("novo função id: " + idPrestadorFuncao + " adicionada ao prestador: " + idPrestadorServico);
  1213.  
  1214.   }
  1215.  
  1216.   //LOOPING DE CRIAR FUNCOES <<
  1217.  
  1218.   // FUNCOES_COLABORADORES <<
  1219.  
  1220.   // CAPTURAS DE DADOS <<
  1221.  
  1222.   Logger.log("gravação finalizada");
  1223.  
  1224. }
  1225.  
  1226. // EXTERNAS
  1227.  
  1228. /**
  1229.  *
  1230.  * salva arquivo no drive
  1231.  *
  1232.  *
  1233.  */
  1234.  
  1235. function saveFile(e, destino, endereco) {
  1236.  
  1237.   if(e == null) {
  1238.  
  1239.     return "falha de arquivo";
  1240.  
  1241.   }
  1242.  
  1243.   Logger.log("pre-file: " + e);
  1244.   let blob = Utilities.newBlob(e.bytes, e.mimeType, e.filename);
  1245.   Logger.log("blob: " + blob);
  1246.   let file = DriveApp.createFile(blob);
  1247.   Logger.log("file: " + file);
  1248.   let nome = file.getName();
  1249.   Logger.log("nome: " + nome);
  1250.   Logger.log("endereço: " + endereco)
  1251.  
  1252.  
  1253.   file.moveTo(DriveApp.getFolderById(destino));
  1254.  
  1255.   //let fileURL = file.getUrl();
  1256.   let fileURL = endereco + nome;
  1257.  
  1258.   Logger.log(fileURL);
  1259.  
  1260.   return fileURL;
  1261.  
  1262. }
  1263.  
  1264. function capitalizeWords(str) {
  1265.   return str.toLowerCase().split(' ').map((word) => word.charAt(0).toUpperCase() + word.slice(1)).join(' ');
  1266. }
  1267.  
  1268. function test() {
  1269.  
  1270.   Logger.log(DriveApp.getFolderById(pastaImagemColaboradores));
  1271.  
  1272. }
Add Comment
Please, Sign In to add comment