Customer Report Extensions

Report extensions are java-script programs that are used to customize printouts like invoice documents.

The program:

  1. Will call the main function printDocument() with the json object (for example the invoice) and the other parameters.
  2. It create a print document and shows the result in a print preview window.

Copies of some report apps that you can use as starting point are available at the following address: github.com/BananaAccounting

Important notes

  • Banana Accounting uses Qt script engine to execute report extension.
  • Mandatory and optional functions:
    • printDocument(jsonContent, repDocObj, repStyleObj [, prefSelected])
      the main function that is called by the program
    • settingsDialog() (optional)
      called from user to set up parameters like colour or additional text.
    • getPrintPreferences() (optional)
      returns a JSON object with the available print options.
  • Available jsonContent formats:
  • The extension of custom report apps should be ".js" and the script must contains the main attributes, see Apps Attributes.
  • The attribute @id of the script should correspond to the file name.
  • System report apps are downloaded to the folder /User/.../AppData/Local/Banana.ch/.../Apps
    (Mac Users: /Users/.../Library/Application Support/Banana.ch/.../Apps)
  • Do not overwrite system report apps because updates will overwrite your changes.
  • You can save your report app anywhere, Banana Accounting saves the path to your app in the configuration file /AppData/Local/Banana.ch/.../Apps/apps.cfg

 

Customer Statement Layout Extension

Create personalized statement report extension

We have published our templates on github.com/BananaAccounting. In this section you will find different basic examples.

You can save a copy of one template in your computer and make the changes you wish. In order to use your custom template in Banana you have to:

  • select the command Reports - Customers - Print statements...
  • In the Print statements dialog select Manage apps...
  • In the Manage apps dialog select Add from file... and choose your statement report file you just created

Extension attributes

// @id = scriptfilename.js
// @api = 1.0
// @pubdate = yyyy-mm-dd
// @publisher = yourName
// @description = script description
// @task = report.customer.statement

Report code

The main function is printDocument(jsonStatement, repDocObj, repStyleObj [, format]). The  parameter jsonStatement object contains the data, repDocObj is the document object and repStyleObj is the stylesheet object where you can add styles.

function printDocument(jsonStatement, repDocObj, repStyleObj) {
  var param = initParam();
  var savedParam = Banana.document.getScriptSettings();
  if (savedParam.length > 0) {
    param = JSON.parse(savedParam);
    param = verifyParam(param);
  }
  printInvoice(jsonInvoice, repDocObj, repStyleObj, param);
}

The function settingsDialog() is called from Banana when you select the button Params... from dialog Manage apps. You can write any code you need for your script.

/*Update script's parameters*/
function settingsDialog() {
   var param = initParam();
   var savedParam = Banana.document.getScriptSettings();
   if (savedParam.length > 0) {
      param = JSON.parse(savedParam);
   }   
   param = verifyParam(param);
   ...
   var paramToString = JSON.stringify(param);
   var value = Banana.document.scriptSaveSettings(paramToString);
}

 

 

Customer Statement Json Object

Statement Json Object

Data structure you can access through the report:

{
    "customer_info": {
        "address1": "Viale Stazione 11",
        "business_name": "Rossi SA",
        "city": "Bellinzona",
        "first_name": "Andrea",
        "last_name": "Rossi",
        "number": "1100",
        "origin_row": "26",
        "origin_table": "Accounts",
        "postal_code": "6500"
    },
    "document_info": {
        "date": "20160927",
        "decimals_amounts": 2,
        "description": "",
        "locale": "it",
        "number": "",
        "type": "statement"
    },
    "items": [
        {
            "balance": "540.00",
            "credit": "",
            "currency": "CHF",
            "date": "20160101",
            "debit": "540.00",
            "due_date": "20160131",
            "due_days": "240",
            "item_type": "invoice",
            "last_reminder": "",
            "last_reminder_date": "",
            "number": "10",
            "payment_date": "",
            "status": "",
            "total_amount_vat_exclusive": "",
            "total_amount_vat_inclusive": "",
            "total_vat_amount": "",
            "unit_price": {
            }
        },
        {
            "balance": "540.00",
            "credit": "",
            "currency": "",
            "date": "",
            "debit": "540.00",
            "item_type": "total",
            "number": "",
            "status": "",
            "total_amount_vat_exclusive": "",
            "total_amount_vat_inclusive": "",
            "total_vat_amount": "",
            "unit_price": {
            }
        }
    ],
    "supplier_info": {
        "address1": "Indirizzo 1",
        "address2": "Indirizzo 2",
        "business_name": "Società",
        "city": "Loc",
        "email": "info@myweb",
        "first_name": "Nome",
        "fiscal_number": "numerofiscale",
        "last_name": "Cognome",
        "postal_code": "CAP",
        "web": "http://www.myweb"
    }
}

Reminder Extensions Layout

Create personalized reminder report extensions

We have published our templates on github.com/BananaAccounting. In this section you will find different basic examples.

You can save a copy of one template in your computer and make the changes you wish. In order to use your custom template in Banana you have to:

  • select the command Reports - Customers - Print reminders...
  • In the Print payment reminders dialog select Manage apps...
  • In the Manage apps dialog select Add from file... and choose your reminder report file you just created

Extensions attributes

// @id = scriptfilename.js
// @api = 1.0
// @pubdate = yyyy-mm-dd
// @publisher = yourName
// @description = script description
// @task = report.customer.reminder

Report code

The main function is printDocument(jsonReminder, repDocObj, repStyleObj).

  • The  parameter jsonReminder object contains the data,
  • repDocObj is the document object.
  • repStyleObj is the stylesheet object where you can add styles.
function printDocument(jsonReminder, repDocObj, repStyleObj) {
  var param = initParam();
  var savedParam = Banana.document.getScriptSettings();
  if (savedParam.length > 0) {
    param = JSON.parse(savedParam);
    param = verifyParam(param);
  }
  printReminder(jsonReminder, repDocObj, repStyleObj, param);
}

The function settingsDialog() is called from Banana when you select the button Params... from dialog Manage apps. You can write any code you need for your script.

/*Update script's parameters*/
function settingsDialog() {
   var param = initParam();
   var savedParam = Banana.document.getScriptSettings();
   if (savedParam.length > 0) {
      param = JSON.parse(savedParam);
   }   
   param = verifyParam(param);
   ...
   var paramString = JSON.stringify(param);
   var value = Banana.document.setScriptSettings(paramString);
}

 

Reminder Json Object

Reminder Json Object

Data structure you can access through the report:

{
    "customer_info": {
        "address1": "Viale Stazione 11",
        "business_name": "Rossi SA",
        "city": "Bellinzona",
        "first_name": "Andrea",
        "last_name": "Rossi",
        "number": "1100",
        "origin_row": "26",
        "origin_table": "Accounts",
        "postal_code": "6500"
    },
    "document_info": {
        "date": "20160927",
        "decimals_amounts": 2,
        "description": "",
        "locale": "it",
        "number": "",
        "type": "reminder"
    },
    "items": [
        {
            "balance": "540.00",
            "balance_base_currency": "540.00",
            "base_currency": "CHF",
            "credit": "",
            "credit_base_currency": "",
            "currency": "CHF",
            "date": "20160101",
            "debit": "540.00",
            "debit_base_currency": "540.00",
            "item_type": "invoice",
            "number": "10",
            "status": "1. reminder",
            "total_amount_vat_exclusive": "",
            "total_amount_vat_inclusive": "",
            "total_vat_amount": "",
            "unit_price": {
            }
        },
        {
            "balance": "540.00",
            "balance_base_currency": "540.00",
            "base_currency": "",
            "credit": "",
            "credit_base_currency": "",
            "currency": "",
            "date": "",
            "debit": "540.00",
            "debit_base_currency": "540.00",
            "item_type": "total",
            "number": "",
            "status": "",
            "total_amount_vat_exclusive": "",
            "total_amount_vat_inclusive": "",
            "total_vat_amount": "",
            "unit_price": {
            }
        }
    ],
    "supplier_info": {
        "address1": "Indirizzo 1",
        "address2": "Indirizzo 2",
        "business_name": "Società",
        "city": "Loc",
        "email": "info@myweb",
        "first_name": "Nome",
        "fiscal_number": "numerofiscale",
        "last_name": "Cognome",
        "postal_code": "CAP",
        "web": "http://www.myweb"
    }
}