Cómo hacer una factura sencilla con google apps script

Hay veces en que un ejemplo es la mejor solución a un problema.


Os dejo un código que genera facturas en pdf con la información que le pones en un spreadsheet.

No es algo definitivo, pero espero que os pueda servir de base para implementar vuestro propio sistema de facturas. Si queréis una referencia aquí tenéis el link para que le echéis un ojo: https://docs.google.com/spreadsheets/d/1Nzzac6lZBBiaTQvZ_AgpVo-9pCW41lgE4Fe3GhsWgiU/edit?usp=sharing

Sin más os dejo con el código:

function onOpen()
{
  var ui = SpreadsheetApp.getUi();
  ui.createMenu('Facturacion')
                  .addItem('Exportar Factura a PDF', 'Export')
                  .addToUi();
}

function Ahora()
{
   var now     = new Date();
   var year    = now.getFullYear();
   var month   = now.getMonth() + 1;
   var day     = now.getUTCDate();
   var hora    = now.getHours();
   var minutos = now.getMinutes();

   var string = day + "/" + month + "/" + year + "-" + hora + ":" +  minutos + "\n";

   return string;
}

function Export()
{
    var sheet   = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
    var name    = sheet.getName();
    var data    = sheet.getDataRange().getValues();
    var precios = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Precios").getDataRange().getValues();
    var file    = SpreadsheetApp.create(name);
    var id      = file.getId();
    var out     = file.getActiveSheet();
    out.setName("Factura");
    out.getRange(1, 1).setValue("Empresa ficticia S.L");
    out.getRange(2, 1).setValue(Ahora());
 
     out.getRange(6, 1).setValue("Elemento");
     out.getRange(6, 2).setValue("Cantidad");  
     out.getRange(6, 3).setValue("Precio");    
     out.getRange(6, 4).setValue("Impuestos(%)");
     out.getRange(6, 5).setValue("Precio base");
     out.getRange(6, 6).setValue("Precio Final");
   
    var total_sin = 0;
     var total_con = 0;
 
    for(var i = 1 ; i < data.length; ++i )
    {
   
     
      var row = data[i];
      var precio = 0;
      var impuestos = 0;
     
      for(var j = 1; j < precios.length ; ++j)
      {
         if(precios[j][0] == row[0])
         {
           precio    = precios[j][1];
           impuestos = precios[j][2];
           break;
         }
      }
     
      var coste_antes = row[1] * precio;
      var coste_despues = coste_antes + (coste_antes*impuestos/100);
      total_sin += coste_antes;
      total_con += coste_despues;
      out.getRange(i+1+5, 1).setValue(row[0]);     //Ponemos el elemento
      out.getRange(i+1+5, 2).setValue(row[1]);     //Ponemos la cantidad
      out.getRange(i+1+5, 3).setValue(precio);     //Ponemos el precio
      out.getRange(i+1+5, 4).setValue(impuestos);  //Ponemos el coste de los impuestos
      out.getRange(i+1+5, 5).setValue(coste_antes);  //Ponemos el precio antes de impuestos
      out.getRange(i+1+5, 6).setValue(coste_despues);  //Ponemos el precio despues de impuestos
     
    }
 
    out.getRange(i+1+5, 5).setValue(total_sin);  //Ponemos el precio total antes de impuestos
    out.getRange(i+1+5, 6).setValue(total_con);  //Ponemos el precio total despues de impuestos
     
 
    SpreadsheetApp.flush();  //Esto se usa para forzar que todos los cambios se aplican ya. Sino, el pdf saldría vació dado que la escritura es diferida.
 
    DriveApp.createFile(file.getAs('application/pdf'));
}

Espero q os haya servido, nos vemos!
Related Posts Plugin for WordPress, Blogger...