From 663a0a6165d86af41446e243393d80c7e004f7b1 Mon Sep 17 00:00:00 2001 From: Oliver Walters Date: Mon, 11 Jan 2021 23:45:25 +1100 Subject: [PATCH] Create simple label templates for stocklocation labels --- InvenTree/label/apps.py | 101 ++++++++++++++++++ .../label/templates/stocklocation/qr.html | 16 +++ .../templates/stocklocation/qr_and_text.html | 37 +++++++ 3 files changed, 154 insertions(+) create mode 100644 InvenTree/label/templates/stocklocation/qr.html create mode 100644 InvenTree/label/templates/stocklocation/qr_and_text.html diff --git a/InvenTree/label/apps.py b/InvenTree/label/apps.py index ea4fa152ff..6f7e25bd9f 100644 --- a/InvenTree/label/apps.py +++ b/InvenTree/label/apps.py @@ -1,5 +1,106 @@ +import os +import shutil +import logging + +from django.db.utils import IntegrityError from django.apps import AppConfig +from django.conf import settings + + +logger = logging.getLogger(__name__) class LabelConfig(AppConfig): name = 'label' + + def ready(self): + """ + This function is called whenever the label app is loaded + """ + + self.create_stock_item_labels() + self.create_stock_location_labels() + + def create_stock_item_labels(self): + """ + Create database entries for the default StockItemLabel templates, + if they do not already exist + """ + + pass + + def create_stock_location_labels(self): + """ + Create database entries for the default StockItemLocation templates, + if they do not already exist + """ + + try: + from .models import StockLocationLabel + except: + # Database might not yet be ready + return + + src_dir = os.path.join( + os.path.dirname(os.path.realpath(__file__)), + 'templates', + 'stocklocation', + ) + + dst_dir = os.path.join( + settings.MEDIA_ROOT, + 'label', + 'inventree', + 'stocklocation', + ) + + if not os.path.exists(dst_dir): + logger.info(f"Creating missing directory: '{dst_dir}'") + os.makedirs(dst_dir, exist_ok=True) + + labels = [ + { + 'file': 'qr.html', + 'name': 'QR Code', + 'description': 'Simple QR code label', + }, + { + 'file': 'qr_and_text.html', + 'name': 'QR and text', + 'description': 'Label with QR code and name of location', + } + ] + + for label in labels: + + filename = os.path.join( + 'label', + 'inventree', + 'stocklocation', + label['file'], + ) + + # Check if the file exists in the media directory + src_file = os.path.join(src_dir, label['file']) + dst_file = os.path.join(settings.MEDIA_ROOT, filename) + + if not os.path.exists(dst_file): + logger.info(f"Copying label template '{dst_file}'") + shutil.copyfile(src_file, dst_file) + + # Check if a label matching the template already exists + if StockLocationLabel.objects.filter(label=filename).exists(): + continue + + logger.info(f"Creating entry for StockLocationLabel '{label['name']}'") + + try: + StockLocationLabel.objects.create( + name=label['name'], + description=label['description'], + label=filename, + filters='', + enabled=True + ) + except IntegrityError: + pass diff --git a/InvenTree/label/templates/stocklocation/qr.html b/InvenTree/label/templates/stocklocation/qr.html new file mode 100644 index 0000000000..8fb22fbb40 --- /dev/null +++ b/InvenTree/label/templates/stocklocation/qr.html @@ -0,0 +1,16 @@ + + + diff --git a/InvenTree/label/templates/stocklocation/qr_and_text.html b/InvenTree/label/templates/stocklocation/qr_and_text.html new file mode 100644 index 0000000000..33e684b13d --- /dev/null +++ b/InvenTree/label/templates/stocklocation/qr_and_text.html @@ -0,0 +1,37 @@ + + + + +
+ {{ location.name }} +
+
+
+ Location ID: {{ location.pk }} +
+ + \ No newline at end of file