Ad Code

Responsive Advertisement

Modelo de Orçamento Personalizado no Google Sheets

 Uma solução inovadora para a gestão financeira

O cliente Azevedo enfrentava dificuldades com um modelo de orçamento antiquado e pouco funcional. Reconhecendo a necessidade de modernização, desenvolvemos um modelo no Google Sheets que não só atende às expectativas estéticas com uma interface limpa, mas também incorpora funcionalidades avançadas para otimizar o processo de orçamento.

Interface Intuitiva e Campos Personalizáveis: O novo modelo destaca-se pela sua simplicidade visual e facilidade de uso. Os campos para inserção do nome do cliente, contato, número da proposta e data são claros e acessíveis, garantindo que as informações mais importantes estejam sempre à frente e no centro.

Detalhamento de Serviços e Custos Adicionais: Abaixo dos campos principais, o modelo oferece espaço para descrever os serviços oferecidos e quaisquer serviços adicionais que possam ser necessários. Isso permite uma transparência completa e uma comunicação eficaz com o cliente sobre o que está sendo oferecido.

Automatizações que Impulsionam a Eficiência: O modelo não é apenas visualmente agradável, mas também altamente funcional graças às seguintes automações:

1. Salvamento Automático de Dados: Ao clicar no botão “Salvar Orçamento”, todos os dados são automaticamente salvos na guia “Banco de Dados”, garantindo que nenhuma informação seja perdida.

function salvarorcamento() {
 
  /*de onde vem*/
   
  var planilha = SpreadsheetApp.getActiveSpreadsheet();
  var guiamenu = planilha.getSheetByName("Principal");

  var guiadados = planilha.getSheetByName("Banco");
 
  /*Dados planilha principal*/

  var cliente = guiamenu.getRange("C4");
  var clienteendereco = guiamenu.getRange("C5");
  var clientecontato = guiamenu.getRange("C6");

  var orcanota = guiamenu.getRange("H4");
  var orcadata = guiamenu.getRange("H5");
 

  var pedidos = guiamenu.getRange("B9:H23");

  /*processamento*/
  var pedidosValores = pedidos.getValues();
  var pedidosString = pedidosValores.map(function(valor) {
    return valor + "\n";
  }).join("");
  /**/

  var pedidosextras = guiamenu.getRange("B25:H31");

  /*processamento*/
  var pedidosextrasValores = pedidosextras.getValues();
  var pedidosextrasString = pedidosextrasValores.map(function(valor) {
    return valor + "\n";
  }).join("");
  /**/

  var subtotal = guiamenu.getRange("H33");
  var taxaaplicada = guiamenu.getRange("H34");
  var total = guiamenu.getRange("H37");


  if (
    cliente.getValue() == "" ||
    orcadata.getValue() == "" ||
    clienteendereco.getValue() == "" ||
    clientecontato.getValue() == "" ||
    orcanota.getValue() == "" ||
    subtotal.getValue() == "" ||
    total.getValue() == ""
  ) {
    Browser.msgBox("Atenção, existem campos vazios");

  } else {
 
    /*Salvar os dados*/

    var linha = guiadados.getLastRow()+1;

    var colarorcanota = "B" + linha;
    var colarorcadata = "C" + linha;
    var colarcliente = "D" + linha;
    var colarclienteendereco = "E" + linha;
    var colarclientecontato = "F" + linha;

    var colarpedidos = "G" + linha;
    var colarpedidosextras = "H" + linha;

    var colarsubtotal = "I" + linha;
    var colartaxaaplicada = "J" + linha;
    var colartotal = "K" + linha;


    /* Incluir ID*/
    var maiorid = Math.max.apply(null,guiadados.getRange("A2:A").getValues());
    var id = maiorid + 1;
    var linha = guiadados.getLastRow();
    var linha = linha + 1;    
    guiadados.getRange(linha, 1).setValue(id);
    /*fim*/


    orcanota.copyTo(guiadados.getRange(colarorcanota),SpreadsheetApp.CopyPasteType.PASTE_VALUES,false);
    orcadata.copyTo(guiadados.getRange(colarorcadata),SpreadsheetApp.CopyPasteType.PASTE_VALUES,false);  

    cliente.copyTo(guiadados.getRange(colarcliente),SpreadsheetApp.CopyPasteType.PASTE_VALUES,false);
    clienteendereco.copyTo(guiadados.getRange(colarclienteendereco),SpreadsheetApp.CopyPasteType.PASTE_VALUES,false);
    clientecontato.copyTo(guiadados.getRange(colarclientecontato),SpreadsheetApp.CopyPasteType.PASTE_VALUES,false);
   


    var celulaDestino = guiadados.getRange(colarpedidos);
    celulaDestino.setValue(pedidosString);
   
    var celulaDestino = guiadados.getRange(colarpedidosextras);
    celulaDestino.setValue(pedidosextrasString);
   

    subtotal.copyTo(guiadados.getRange(colarsubtotal),SpreadsheetApp.CopyPasteType.PASTE_VALUES,false);
    taxaaplicada.copyTo(guiadados.getRange(colartaxaaplicada),SpreadsheetApp.CopyPasteType.PASTE_VALUES,false);
    total.copyTo(guiadados.getRange(colartotal),SpreadsheetApp.CopyPasteType.PASTE_VALUES,false);

   
    /*Levar o curso para a.*/
    guiamenu.getRange("C4").activate();
    Browser.msgBox("Orçamento salvo com sucesso");
  }
}

2. Geração de ID de Proposta: O campo de proposta verifica automaticamente o último ID na tabela “Banco de Dados” e gera um novo código seguindo o formato (data/último ID + 1).

function Id() {

  var planilha = SpreadsheetApp.getActiveSpreadsheet();
  var guiadados = planilha.getSheetByName("Banco");

  var maiorid = Math.max.apply(null,guiadados.getRange("A2:A").getValues());

  var id = maiorid + 1;

  var linha = guiadados.getLastRow();

  var linha = linha + 1;
 
  guiadados.getRange(linha, 1).setValue(id);

}

function numnota() {

  var planilha = SpreadsheetApp.getActiveSpreadsheet();
  var guiadados = planilha.getSheetByName("Banco");
  var guiamenu = planilha.getSheetByName("Principal");

  var ultimoNumero = Math.max.apply(null,guiadados.getRange("A2:A").getValues());
  var ultimoNumero = ultimoNumero +1;  

  var datalimpa =  Utilities.formatDate(new Date(), "GMT", "yyyyMMdd");

  var numeroNota = datalimpa + "/" + ultimoNumero;

  guiamenu.getRange("H4").setValue(numeroNota);

}

function onEdit() {

  var guiaativa = SpreadsheetApp.getActive().getSheetName();

  if (guiaativa == "Principal"){

    var guiadados = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Principal");
    var linha = guiadados.getActiveCell().getRow();
    var coluna = guiadados.getActiveCell().getColumn();

    if(coluna == 3 && linha == 4){
      numnota(); // Executa a função numnota()
    }
  }
}


3. Preenchimento Automático da Data: Com um simples clique no ícone do calendário, a data atual é preenchida automaticamente, assegurando que a informação esteja sempre atualizada.

function datahoje() {

  var planilha = SpreadsheetApp.getActiveSpreadsheet();
  var guiamenu = planilha.getSheetByName("Principal");

  var datalimpa =  Utilities.formatDate(new Date(), "GMT", "dd/MM/yyyy");
  guiamenu.getRange("H5").setValue(datalimpa);

}


4. Exportação para PDF: Um botão “Gerar PDF” permite a exportação rápida e fácil do orçamento em formato PDF, facilitando o compartilhamento e a impressão.


var PRINT_OPTIONS = {
  'size': 7,               // Tamanho do papel. 0 = carta, 1 = tablóide, 2 = Ofício, 3 = declaração, 4 = executivo, 5 = fólio, 6 = A3, 7 = A4, 8 = A5, 9 = B4, 10 = B
  'fzr': false,            // repetir cabeçalhos de linha
  'portrait': true,       // false = paisagem, true = retrato
  'fitw': true,            // ajustar a janela ou tamanho real
  'gridlines': false,      // mostrar linhas de grade
  'printtitle': false,     // false = sem título, true = título vai ser o nome da planilha
  'sheetnames': false,     //true coloca nome da guia da planilha no pdf
  'pagenum': 'UNDEFINED',  // CENTRO = mostrar números de página / UNDEFINED = não mostrar
  'attachment': true       //true para baixar arquivo pdf
}

var PDF_OPTS = objectToQueryString(PRINT_OPTIONS);

function Pdf() {
 

  var nomeGuia = "Principal";
  /*var nomePdf = "Orçamento_" + "C4";*/
  var area = "A1:I43";



  var planilha = SpreadsheetApp.getActiveSpreadsheet();
  var guia = planilha.getSheetByName(nomeGuia);
  var range = guia.getRange(area).activate();
 
  var nomePlan = planilha.getName();

  var cliente = guia.getRange("C4").getValue();
  var nomePdf = "Orçamento_" + cliente;

  planilha.rename(nomePdf);
  planilha.getSheetByName(nomeGuia).setName(" ");

  var gid = SpreadsheetApp.getActiveSpreadsheet().getSheetId();

  var printRange = objectToQueryString({
    'c1': range.getColumn() - 1,
    'r1': range.getRow() - 1,
    'c2': range.getColumn() + range.getWidth() - 1,
    'r2': range.getRow() + range.getHeight() - 1
  });

var url = planilha.getUrl().replace(/edit$/, '') + 'export?exportFormat=pdf&format=pdf' + PDF_OPTS + printRange + "&gid=" + gid;

var html = "<script>window.open('" + url + "');google.script.host.close();</script>";
  var userInterface = HtmlService.createHtmlOutput(html)
  .setHeight(10)
  .setWidth(100);
  SpreadsheetApp.getUi().showModalDialog(userInterface, 'Baixando PDF ... ');

Utilities.sleep(8000);

guia.getRange("A1").activate();
planilha.rename(nomePlan);
planilha.getSheetByName(" ").setName(nomeGuia);

}

function objectToQueryString(obj) {
  return Object.keys(obj).map(function(key) {
    return Utilities.formatString('&%s=%s', key, obj[key]);
  }).join('');
 
 
}


5. Limpeza de Campos: O botão de limpar, quando acionado, apaga todos os campos preenchidos, preparando o modelo para um novo orçamento sem esforço.



function limparOrcamento(){

  var planilha = SpreadsheetApp.getActiveSpreadsheet();
  var guiamenu = planilha.getSheetByName("Principal");

  /*Cliente*/
  guiamenu.getRange("C4").clear({contentsOnly:true, skipFilteredRows:true});
  guiamenu.getRange("C5").clear({contentsOnly:true, skipFilteredRows:true});
  guiamenu.getRange("C6").clear({contentsOnly:true, skipFilteredRows:true});
  guiamenu.getRange("H4").clear({contentsOnly:true, skipFilteredRows:true});
  guiamenu.getRange("H5").clear({contentsOnly:true, skipFilteredRows:true});

  guiamenu.getRange("B9:H23").clear({contentsOnly:true, skipFilteredRows:true});
  guiamenu.getRange("B25:H31").clear({contentsOnly:true, skipFilteredRows:true});

  guiamenu.getRange("H34").setValue("0");
 
}


Com essas melhorias, o cliente Azevedo agora possui uma ferramenta robusta que não só melhora a apresentação dos orçamentos, mas também agiliza todo o processo de criação e gestão de propostas financeiras.

Receba nossas atualizações

* obrigatório
Seu melhor e-mail

Postar um comentário

0 Comentários

Ad Code

Responsive Advertisement

Uma parceria de projetos incríveis

Vamos começar um Projeto Juntos?

Solicite orçamento

Seu projeto merece ficar em boas mãos, conte comigo para isso. Tem todas informações e está preparado? Então vamos começar!

🔒 Ao enviar o formulário, eu declaro que estou de acordo com a Política de Privacidade.