Files
tryton/doc/reports.rst
T

254 lines
7.9 KiB
ReStructuredText

Reports
#######
Tryton can generate dynamic reports in many formats from report and style
templates. The reports are generated in one step as follows: a report template
in a special file format, explained later, is interpolated with dynamic data
and placed into document of the same file format. Tryton's ability to generate
documents in this way allows documents to be generated for any editor that
supports the Open Document Format which can be converted to third party
formats, such as PDF. Extra libraries are required for this, see INSTALL
for more information.
Report Templates
****************
Report templates are files with a format supported by relatorio, that contain
snippets of the Genshi templating language.
Here is an example of the text that would be placed in an open document text
document, *.odt, that displays the full name and the address lines of the
first address of each party. The genshi code is placed in the template using
Functions->Placeholder->Text Fields. These are specific to ODT files.
.. highlight:: genshi
::
<for each="party in objects">
<party.full_name>
<if test="party.addresses">
<for each="line in party.addresses[0].full_address.split('\n')">
<line>
</for>
</if>
</for>
Report styles
*************
Reports styles let you standardize the header, footer and styles of your
templates.
Report API
**********
.. _report:
Python API
==========
.. _trytond.report.Report
.. autoclass:: trytond.report.Report
:members:
:undoc-members:
.. _trytond.ir.action.ActionReport
.. autoclass:: trytond.ir.action.ActionReport
:members:
:undoc-members:
XML Description
===============
When defining an `ir.action.report` the following attributes are available:
* ``name``: The name of the report.
* ``report_name``: The name of the report model, for example
my_module.my_report. This is the name you would use with `pool.get`
* ``module_name``: If this report is of an existing model this is its name.
For example my_module.my_model. Custom reports that aren't of a specific
model will need to leave this blank.
* ``report``: The path to the template file starting with the module, for
example my_module/my_report.odt.
* ``style``: The path to the style file starting with the module, for
example, my_module/my_style.odt. If no style is to be used this field
will be blank.
Report Usage
************
Using genshi and open office reports
====================================
Setting up an ODT file
----------------------
If you are creating a report from scratch you should perform the following
steps:
- Remove user data
* "File > Properties..."
* Uncheck "Apply user data"
* Click on "Reset"
- Select Style and Formatting
* Press F11 or "Format > Style and Formatting"
* Click on the drop down at the right top
* Select "Load Styles"
* Click on "From File..."
* Select a existing report ('company/header_A4.odt')
- Set some parameters
* Set the zoom to 100% (View>Zoom)
* Set the document in read-only mode
(Tools>Options>OpenOffice.org>Security) (Decreases the time it takes to
open the document.)
- Usage
* Use Liberation fonts (Only necessary if being officially included in Tryton)
* Try to use styles in report templates so that they can be extended in
report styles.
Using Genshi in an ODT file
---------------------------
The genshi code is placed in the template using
Functions->Placeholder->Text Fields. These are specific to *.odt files
and can be found in the open office menu at Insert -> Fields -> Other and then
Functions -> Placeholder -> Text. Type genshi code into the Placeholder field.
There are alternatives for embedding genshi that are supported by relatorio but
their use is not encouraged within Tryton.
Also note that relatorio only supports a subset of genshi. The directives
that are supported by relatorio can be found here: `Quick Example`_ .
See genshi's documentation for more information: `Genshi XML Templates`_
Examples
--------
The modules company, account_invoice and stock all contain helpful examples.
Also see relatorio's site for some examples:
- `Quick Example`_
- `In Depth Introduction`_
- `Example Documents`_
Accessing models from within the report
=======================================
By default instances of model that the report is for are passed in to the
report via a list of objects called `objects`. These objects behave just
as they would within trytond itself. You can access any of the models
relations as well. For example within the invoice report each object is an
invoice and you can access the name of the party of the invoice via
`invoice.party.name`. Additional objects can be passed to a report. This
is discussed below in `Passing custom data to a report`.
Within tryton the model the report is for can be found by following the Menu to
Administration > UI > Actions > Report. Furthermore in tryton the fields
for that model can be found by following the menu to
Administration > Model > Model. Model relation fields can be accessed to any
depth, for example, one could access `invoice.party.addresses` to get a list of
addresses for the party of an invoice.
Creating a simple report template for a model from client
=========================================================
TODO: Explain the steps necessary to do this.
Creating a simple report template for a model in XML
====================================================
Less work has to be done if you just want a simple report representation of a
model. There are just 2 steps. First, create a report template file in a
format supported by relatorio. Second, describe your report in XML making
sure to define the correct report_name and module_name.
Replacing existing Tryton reports
=================================
To replace an existing report you must deactivate the old report and activate
the new report.
For example to deactivate the invoice report:
.. highlight:: xml
::
<record model="ir.action.report" id="account_invoice.report_invoice">
<field name="active" eval="False"/>
</record>
Then you must activate the new invoice report that exists in your new module:
.. highlight:: xml
::
<record model="ir.action.report" id="report_invoice_new">
<field name="name">Invoice</field>
<field name="report_name">account.invoice</field>
<field name="model">account.invoice</field>
<field name="report">my_module/invoice.odt</field>
<field name="style">module_name/header_A4.odt</field>
</record>
Passing custom data to a report
===============================
TODO: Examples of overriding Report.execute.
In this example `Report.parse` is overridden and an employee object is
set into context. Now the invoice report will be able to access the employee
object.
.. highlight:: python
::
class InvoiceReport(Report):
_name = 'account.invoice'
def parse(self, cursor, user_id, report, objects, datas, context):
employee_obj = self.pool.get('company.employee')
employee = False
if context.get('employee', False):
employee = employee_obj.browse(cursor, user_id,
context['employee'],
context=context)
context['employee'] = employee
return super(InvoiceReport, self).parse(cursor, user_id, report,
objects, datas, context)
InvoiceReport()
Replacing existing Tryton styles
================================
TODO: Explaination of how to override `ir.report.get_style_content` to change
the default style.
.. External Links
.. _Genshi XML Templates: http://genshi.edgewall.org/wiki/Documentation/0.5.x/xml-templates.html
.. _Quick Example: http://relatorio.openhex.org/wiki/QuickExample
.. _In Depth Introduction: http://relatorio.openhex.org/wiki/IndepthIntroduction
.. _Example Documents: http://relatorio.openhex.org/browser/examples