Skip to content

Report Mixin

ReportMixin

The ReportMixin class provides a plugin with the ability to extend the functionality of custom report templates. A plugin which implements the ReportMixin mixin class can add custom context data to a report template for rendering, and can also receive a callback when a report is generated.

Add Report Context

A plugin which implements the ReportMixin mixin can define the add_report_context method, allowing custom context data to be added to a report template at time of printing.

This method is called each time a report is generated, and is passed the following arguments:

Argument Description
report_instance The report template instance which is being rendered
model_instance The model instance against which the report is being generated
user The user who initiated the report generation
context The context dictionary, which can be modified in-place

Any data added to the provided context dictionary is made available to the report template, and can be rendered using standard django template syntax:

def add_report_context(self, report_instance, model_instance, user, context):
    """Add extra context data to the report template."""
    context['my_custom_data'] = self.calculate_custom_data(model_instance)

Add Label Context

Similarly, the add_label_context method allows custom context data to be added to a label template at time of printing:

Argument Description
label_instance The label template instance which is being rendered
model_instance The model instance against which the label is being generated
user The user who initiated the label generation
context The context dictionary, which can be modified in-place

Report Callback

The report_callback method is called after a report has been generated, and allows the plugin to perform custom actions with the generated report - for example, forwarding the report to an external system, or performing custom post-processing.

Argument Description
template The report template instance which was used to generate the report
instance The model instance against which the report was generated
report The generated report (PDF file data)
user The user who initiated the report generation
def report_callback(self, template, instance, report, user, **kwargs):
    """Custom callback function - called after a report is generated."""
    # For example, forward the generated report to an external service
    self.upload_to_external_service(report)

Sample Plugin

A sample plugin which provides additional context data to the report templates is available:

Sample plugin which provides extra context data to a report.

Source code in src/backend/InvenTree/plugin/samples/integration/report_plugin_sample.py
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
class SampleReportPlugin(ReportMixin, InvenTreePlugin):
    """Sample plugin which provides extra context data to a report."""

    NAME = 'Sample Report Plugin'
    SLUG = 'samplereport'
    TITLE = 'Sample Report Plugin'
    DESCRIPTION = 'A sample plugin which provides extra context data to a report'
    VERSION = '1.0'

    def some_custom_function(self):
        """Some custom function which is not required for the plugin to function."""
        return random.randint(0, 100)

    def add_report_context(self, report_instance, model_instance, request, context):
        """Add example content to the report instance."""
        # We can add any extra context data we want to the report
        # Generate a random string of data
        context['random_text'] = ''.join(
            random.choices('abcdefghijklmnopqrstuvwxyz', k=20)
        )

        # Call a custom method
        context['random_int'] = self.some_custom_function()

        # We can also add extra data to the context which is specific to the report type
        context['is_purchase_order'] = report_instance.model_type == 'purchaseorder'

        # We can also use the 'request' object to add extra context data
        context['request_method'] = request.method