Cómo hacer una factura sencilla con google apps script

Hacer una factura es uno de los elementos básicos de un negocio. Si tenemos un negocio pequeño donde toda nuestra información está en Google Drive es lógico que queramos hacer nuestra propia factura web con Google Apps Scripts.


Cada negocio tiene sus necesidades en cuanto a hacer una factura, así que yo no podré hacer mucho más que dejaros un código de Google Apps Script de base con un ejemplo para poder realiza tu factura web, via PDF.

La información de la factura se introducirá en un spreadsheet, no es algo definitivo, pero espero que os pueda servir de base para implementar vuestro propio sistema web para poder enviar o imprimir tu factura. 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

Si realmente queréis algo más complejo (o con un acabado más profesional) y no os aclaráis con el código, si queréis podéis contactar conmigo a nivel profesional via Fiverr . ( no soy caro :) )

Sin más os dejo con el código básico para hacer tu propia factura web via Google Apps Script:

function onOpen()
{
  var ui = SpreadsheetApp.getUi();
  ui.createMenu('Factura')
                  .addItem('Exportar Factura a PDF', 'Factura')
                  .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 Factura()
{
    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("Factura para 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 de la factura saldría vació dado que la escritura es diferida.

    DriveApp.createFile(file.getAs('application/pdf')); // Aquí es donde se crea el PDF de la factura
}

Espero que os haya servido, nos vemos!

No hay comentarios:

Publicar un comentario

Related Posts Plugin for WordPress, Blogger...