Ledger Reports
Ledger currently offers only one preset report, the Trial Balance Report.
Applications can add and configure their own reports through the ledger configuration file's
reports
and reportApiOptions
settings (thanks to GitHub user
@ivanmazep for introducing this capability).
If there is no reports
setting, then all native reports are available to the JSON API.
If there is a reports setting, it must list all reports available to the JSON API. Any reports
omitted from this list (e.g. trialBalance) will be inaccessible to the JSON API.
The reports setting is an array indexed by report name that references the reporting class
(which should extend Abivia\Ledger\Reports\AbstractReport
):
// in config/ledger.php
'reports' => [
'customReport' => YourAppNamespace\CustomReport::class
'trialBalance' => Abivia\Ledger\Reports\TrialBalanceReport::class,
],
It is often desirable to limit report attributes when accessed via the external API.
To pass options to a report when being called via the JSON API, use the reportApiOptions
setting:
// in config/ledger.php
'reportApiOptions' => [
'customReport' => [
'someOption' => 'someValue',
],
'trialBalance' => [
'maxDepth' => 3,
],
],
Extending the Abstract Report class
The AbstractReport
class requires two methods. The collect
method is responsible for gathering
the raw information required to produce a report and the prepare
method converts the raw data
into a format suitable for display. The collect method takes a Report message and returns a
ReportData
object; the prepare method then processes the ReportData, typically returning
a Collection.
Cached reports through the Report Controller
Since financial reports are frequently a snapshot of the state of the ledger at a particular point in time, it is often possible to save this snapshot, speeding subsequent report generation.
The report controller maintains a cache of these snapshots. As long as no transactions have been
posted to the journal inside the date range covered by the report since it was cached, the report
controller will utilize the cache to reduce processing time. The cache contains the complete
ReportData set used to create the report. This full data set is then passed to the report's
prepare
method, which is responsible for any consolidation or filtering. Using this approach,
a single snapshot can be used to prepare several reports from the same data.