From 90bef69a5954cc0b3671a6aa17f2cb90be3e8dea Mon Sep 17 00:00:00 2001 From: Oliver Walters Date: Wed, 3 Feb 2021 16:58:06 +1100 Subject: [PATCH] Adds "report snippet" class allowing re-usable report snippets to be uploaded --- InvenTree/report/admin.py | 8 ++- .../report/migrations/0006_reportsnippet.py | 27 ++++++++ InvenTree/report/models.py | 69 +++++++++++++------ 3 files changed, 81 insertions(+), 23 deletions(-) create mode 100644 InvenTree/report/migrations/0006_reportsnippet.py diff --git a/InvenTree/report/admin.py b/InvenTree/report/admin.py index 7d6403f5d9..32340921c3 100644 --- a/InvenTree/report/admin.py +++ b/InvenTree/report/admin.py @@ -3,7 +3,12 @@ from __future__ import unicode_literals from django.contrib import admin -from .models import TestReport, ReportAsset +from .models import ReportSnippet, TestReport, ReportAsset + + +class ReportSnippetAdmin(admin.ModelAdmin): + + list_display = ('name', 'description', 'template') class ReportTemplateAdmin(admin.ModelAdmin): @@ -16,5 +21,6 @@ class ReportAssetAdmin(admin.ModelAdmin): list_display = ('asset', 'description') +admin.site.register(ReportSnippet, ReportSnippetAdmin) admin.site.register(TestReport, ReportTemplateAdmin) admin.site.register(ReportAsset, ReportAssetAdmin) diff --git a/InvenTree/report/migrations/0006_reportsnippet.py b/InvenTree/report/migrations/0006_reportsnippet.py new file mode 100644 index 0000000000..c503678345 --- /dev/null +++ b/InvenTree/report/migrations/0006_reportsnippet.py @@ -0,0 +1,27 @@ +# Generated by Django 3.0.7 on 2021-02-03 05:57 + +import django.core.validators +from django.db import migrations, models +import report.models + + +class Migration(migrations.Migration): + + dependencies = [ + ('report', '0005_auto_20210119_0815'), + ] + + operations = [ + migrations.CreateModel( + name='ReportSnippet', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('name', models.CharField(help_text='Template name', max_length=100, unique=True, verbose_name='Name')), + ('template', models.FileField(help_text='Report template file', upload_to=report.models.rename_template, validators=[django.core.validators.FileExtensionValidator(allowed_extensions=['html', 'htm', 'tex'])], verbose_name='Template')), + ('description', models.CharField(help_text='Report template description', max_length=250, verbose_name='Description')), + ], + options={ + 'abstract': False, + }, + ), + ] diff --git a/InvenTree/report/models.py b/InvenTree/report/models.py index 224f2800d8..6b064999d5 100644 --- a/InvenTree/report/models.py +++ b/InvenTree/report/models.py @@ -77,14 +77,18 @@ class WeasyprintReportMixin(WeasyTemplateResponseMixin): self.pdf_filename = kwargs.get('filename', 'report.pdf') -class ReportTemplateBase(models.Model): +class ReportBase(models.Model): """ - Reporting template model. + Base class for uploading html templates """ + class Meta: + abstract = True + def __str__(self): return "{n} - {d}".format(n=self.name, d=self.description) + def getSubdir(self): return '' @@ -105,6 +109,47 @@ class ReportTemplateBase(models.Model): return template + name = models.CharField( + blank=False, max_length=100, + verbose_name=_('Name'), + help_text=_('Template name'), + unique=True, + ) + + template = models.FileField( + upload_to=rename_template, + verbose_name=_('Template'), + help_text=_("Report template file"), + validators=[FileExtensionValidator(allowed_extensions=['html', 'htm', 'tex'])], + ) + + description = models.CharField( + max_length=250, + verbose_name=_('Description'), + help_text=_("Report template description") + ) + + +class ReportSnippet(ReportBase): + """ + Report template 'snippet' which can be used to make templates + that can then be included in other reports. + + Useful for 'common' template actions, sub-templates, etc + """ + + def getSubdir(self): + return "" + + +class ReportTemplateBase(ReportBase): + """ + Reporting template model. + + Able to be passed context data + + """ + def get_context_data(self, request): """ Supply context data to the template for rendering @@ -147,26 +192,6 @@ class ReportTemplateBase(models.Model): wp = WeasyprintReportMixin(request, self.template_name, **kwargs) return wp.render_to_response(context, **kwargs) - name = models.CharField( - blank=False, max_length=100, - verbose_name=_('Name'), - help_text=_('Template name'), - unique=True, - ) - - template = models.FileField( - upload_to=rename_template, - verbose_name=_('Template'), - help_text=_("Report template file"), - validators=[FileExtensionValidator(allowed_extensions=['html', 'htm', 'tex'])], - ) - - description = models.CharField( - max_length=250, - verbose_name=_('Description'), - help_text=_("Report template description") - ) - enabled = models.BooleanField( default=True, verbose_name=_('Enabled'),