From c5d55e79b262f66f0de443294c642d2563fb319c Mon Sep 17 00:00:00 2001 From: Andreas Mieke Date: Sun, 21 Apr 2024 21:10:51 -0400 Subject: [PATCH] feat(label): Add print_labels for multiple labels --- inventree_phomemo/phomemo_label.py | 59 ++++++++++++++++++++++++------ 1 file changed, 48 insertions(+), 11 deletions(-) diff --git a/inventree_phomemo/phomemo_label.py b/inventree_phomemo/phomemo_label.py index 9eea833..b3d292e 100644 --- a/inventree_phomemo/phomemo_label.py +++ b/inventree_phomemo/phomemo_label.py @@ -1,7 +1,5 @@ -# translation -from django.utils.translation import gettext_lazy as _ -from django.core.validators import MinValueValidator -from django.core.validators import MaxValueValidator +# django +from django.http import JsonResponse # printer support import socket @@ -14,6 +12,7 @@ from InvenTree.models import InvenTreeBarcodeMixin # InvenTree plugin libs from plugin import InvenTreePlugin from plugin.mixins import LabelPrintingMixin, SettingsMixin, BarcodeMixin +from label.models import LabelTemplate from inventree_phomemo.version import PHOMEMO_PLUGIN_VERSION @@ -38,12 +37,7 @@ class PhomemoLabelPlugin(LabelPrintingMixin, BarcodeMixin, SettingsMixin, InvenT }, } - def print_label(self, **kwargs): - - # Read settings - ip_address = self.get_setting('IP_ADDRESS') - port = int(self.get_setting('PORT')) - + def get_fields(self, **kwargs): object_to_print = kwargs['label_instance'].object_to_print match kwargs['label_instance'].SUBDIR: @@ -72,9 +66,52 @@ class PhomemoLabelPlugin(LabelPrintingMixin, BarcodeMixin, SettingsMixin, InvenT 'category': tpart.category.name if hasattr(tpart, 'category') else None, 'category_path': tpart.category.pathstring if hasattr(tpart, 'category') else None, 'barcode': barcode, - 'type': kwargs['label_instance'].SUBDIR + 'type': kwargs['label_instance'].SUBDIR, + 'width': kwargs['width'], + 'height': kwargs['height'] } + return fields + + def print_labels(self, label: LabelTemplate, items: list, request, **kwargs): + outputs = [] + + # Get label content for every label + for item in items: + label.object_to_print = item + outputs.append(self.get_fields(label, request, **kwargs)) + + # Read settings + ip_address = self.get_setting('IP_ADDRESS') + port = int(self.get_setting('PORT')) + + # Dump to json + data = json.dumps(outputs) + + # Send the label to the printer + try: + print_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) + print_socket.settimeout(5) + print_socket.connect((ip_address, port)) + print_socket.sendall(bytes(data,encoding="utf-8")) + print_socket.close() + except Exception as error: + raise ConnectionError('Error connecting to printer server: ' + str(error)) + + return JsonResponse({ + 'success': True, + 'message': f'{len(items)} labels printed', + }) + + def print_label(self, **kwargs): + # Read settings + ip_address = self.get_setting('IP_ADDRESS') + port = int(self.get_setting('PORT')) + + # Get label content + fields = self.get_fields(self, kwargs) + + # Dump to json data = json.dumps(fields) # Send the label to the printer