From bc367752707ed10ad47f79ccb03e5a7f21f5783b Mon Sep 17 00:00:00 2001 From: Oliver Walters Date: Thu, 4 Feb 2021 20:25:01 +1100 Subject: [PATCH] Copy default test report across --- InvenTree/report/apps.py | 87 +++++++++++++++++++ InvenTree/report/models.py | 11 +-- .../report/inventree_test_report.html | 12 ++- 3 files changed, 99 insertions(+), 11 deletions(-) diff --git a/InvenTree/report/apps.py b/InvenTree/report/apps.py index 138ba20404..bb1c5f0cb7 100644 --- a/InvenTree/report/apps.py +++ b/InvenTree/report/apps.py @@ -1,5 +1,92 @@ +import os +import shutil +import logging + from django.apps import AppConfig +from django.conf import settings + + +logger = logging.getLogger(__name__) class ReportConfig(AppConfig): name = 'report' + + def ready(self): + """ + This function is called whenever the report app is loaded + """ + + self.create_default_test_reports() + + def create_default_test_reports(self): + """ + Create database entries for the default TestReport templates, + if they do not already exist + """ + + try: + from .models import TestReport + except: + # Database is not ready yet + return + + src_dir = os.path.join( + os.path.dirname(os.path.realpath(__file__)), + 'templates', + 'report', + ) + + dst_dir = os.path.join( + settings.MEDIA_ROOT, + 'report', + 'inventree', # Stored in secret directory! + 'test', + ) + + if not os.path.exists(dst_dir): + logger.info(f"Creating missing directory: '{dst_dir}'") + os.makedirs(dst_dir, exist_ok=True) + + # List of test reports to copy across + reports = [ + { + 'file': 'inventree_test_report.html', + 'name': 'InvenTree Test Report', + 'description': 'Stock item test report', + }, + ] + + for report in reports: + + # Create destination file name + filename = os.path.join( + 'report', + 'inventree', + 'test', + report['file'] + ) + + src_file = os.path.join(src_dir, report['file']) + dst_file = os.path.join(settings.MEDIA_ROOT, filename) + + if not os.path.exists(dst_file): + logger.info(f"Copying test report template '{dst_file}'") + shutil.copyfile(src_file, dst_file) + + try: + # Check if a report matching the template already exists + if TestReport.objects.filter(template=filename).exists(): + continue + + logger.info(f"Creating new TestReport for '{report['name']}'") + + TestReport.objects.create( + name=report['name'], + description=report['description'], + template=filename, + filters='', + enabled=True + ) + except: + pass diff --git a/InvenTree/report/models.py b/InvenTree/report/models.py index f401d547e9..838e669f69 100644 --- a/InvenTree/report/models.py +++ b/InvenTree/report/models.py @@ -31,13 +31,6 @@ except OSError as err: from django.http import HttpResponse -class TexResponse(HttpResponse): - def __init__(self, content, filename=None): - super().__init__(content_type="application/txt") - self["Content-Disposition"] = 'filename="{}"'.format(filename) - self.write(content) - - def rename_template(instance, filename): return instance.rename_file(filename) @@ -95,10 +88,12 @@ class ReportBase(models.Model): Required for passing the file to an external process """ - template = os.path.join('report_template', self.getSubdir(), os.path.basename(self.template.name)) + template = self.template.name template = template.replace('/', os.path.sep) template = template.replace('\\', os.path.sep) + template = os.path.join(settings.MEDIA_ROOT, template) + return template name = models.CharField( diff --git a/InvenTree/report/templates/report/inventree_test_report.html b/InvenTree/report/templates/report/inventree_test_report.html index 7c99eec6ab..7ac1930632 100644 --- a/InvenTree/report/templates/report/inventree_test_report.html +++ b/InvenTree/report/templates/report/inventree_test_report.html @@ -57,15 +57,21 @@ content: "{% trans 'Stock Item Test Report' %}";

- {{ stock_item.part.full_name }} + {{ part.full_name }}

+

{{ part.description }}

+

{{ stock_item.location }}


-

+

+ {% if stock_item.is_serialized %} {% trans "Serial Number" %}: {{ stock_item.serial }} -

+ {% else %} + {% trans "Quantity" %}: {% decimal stock_item.quantity %} + {% endif %} +