diff --git a/docs/extend/how_to_plugin.md b/docs/extend/how_to_plugin.md index c7c2703..ca5edda 100644 --- a/docs/extend/how_to_plugin.md +++ b/docs/extend/how_to_plugin.md @@ -21,6 +21,7 @@ Consider the usecase for your plugin and define the exact function of the plugin - Is it just a simple REST-endpoint that runs a function ([ActionMixin](./plugins/action.md)) or a parser for a custom barcode format ([BarcodeMixin](./plugins/barcode.md))? - How does the user interact with the plugin? Is it a UI separate from the main InvenTree UI ([UrlsMixin](./plugins/urls.md)), does it need multiple pages with navigation-links ([NavigationMixin](./plugins/navigation.md)). +- Do you need to extend reporting functionality? Check out the [ReportMixin](./plugins/report.md). - Will it make calls to external APIs ([APICallMixin](./plugins/api.md) helps there)? - Do you need to run in the background ([ScheduleMixin](./plugins/schedule.md)) or when things in InvenTree change ([EventMixin](./plugins/event.md))? - Does the plugin need configuration that should be user changeable ([SettingsMixin](./plugins/settings.md)) or static (just use a yaml in the config dir)? diff --git a/docs/extend/plugins.md b/docs/extend/plugins.md index 4950eac..9863844 100644 --- a/docs/extend/plugins.md +++ b/docs/extend/plugins.md @@ -98,6 +98,7 @@ Supported mixin classes are: - [LocateMixin](./plugins/locate.md) - [NavigationMixin](./plugins/navigation.md) - [PanelMixin](./plugins/panel.md) +- [ReportMixin](./plugins/report.md) - [ScheduleMixin](./plugins/schedule.md) - [SettingsMixin](./plugins/settings.md) - [UrlsMixin](./plugins/urls.md) diff --git a/docs/extend/plugins/panel.md b/docs/extend/plugins/panel.md index de60555..3e809f3 100644 --- a/docs/extend/plugins/panel.md +++ b/docs/extend/plugins/panel.md @@ -157,6 +157,5 @@ Here are some examples of available colors: Please have a look at the css files for more options. The last line renders the value that was defined in the plugin. -Just give it a try: Each time you press the button, the value will be increased. - -Have fun +!!! tip "Give it a try" + Each time you press the button, the value will be increased. diff --git a/docs/extend/plugins/report.md b/docs/extend/plugins/report.md new file mode 100644 index 0000000..b9791a2 --- /dev/null +++ b/docs/extend/plugins/report.md @@ -0,0 +1,52 @@ +--- +title: Report Mixin +--- + +## ReportMixin + +The ReportMixin class provides a plugin with the ability to extend the functionality of custom [report templates](../../report/report.md). A plugin which implements the ReportMixin mixin class can add custom context data to a report template for rendering. + +### Example + +A sample plugin which provides additional context data to the report templates can be found [in the InvenTree source code](https://github.com/inventree/InvenTree/blob/master/InvenTree/plugin/samples/integration/report_plugin_sample.py): + +```python +"""Sample plugin for extending reporting functionality""" + +import random + +from plugin import InvenTreePlugin +from plugin.mixins import ReportMixin +from report.models import PurchaseOrderReport + + +class SampleReportPlugin(ReportMixin, InvenTreePlugin): + """Sample plugin which provides extra context data to a report""" + + NAME = "Report Plugin" + SLUG = "reportexample" + 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, 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'] = isinstance(instance, PurchaseOrderReport) + + # We can also use the 'request' object to add extra context data + context['request_method'] = request.method +``` diff --git a/docs/report/report.md b/docs/report/report.md index 38bade0..d055d7b 100644 --- a/docs/report/report.md +++ b/docs/report/report.md @@ -133,6 +133,9 @@ So, if you are writing a template which has custom formatting, (or any other sec !!! tip "Close it out" Don't forget to end with a `{% raw %}{% endlocalize %}{% endraw %}` tag! +### Extending with Plugins + +The [ReportMixin plugin class](../extend/plugins/report.md) allows reporting functionality to be extended with custom features. ## Report Types diff --git a/mkdocs.yml b/mkdocs.yml index 3a3ab56..2d6585e 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -179,6 +179,7 @@ nav: - Locate Mixin: extend/plugins/locate.md - Navigation Mixin: extend/plugins/navigation.md - Panel Mixin: extend/plugins/panel.md + - Report Mixin: extend/plugins/report.md - Schedule Mixin: extend/plugins/schedule.md - Settings Mixin: extend/plugins/settings.md - URL Mixin: extend/plugins/urls.md