# translation from django.utils.translation import gettext_lazy as _ from django.core.validators import MinValueValidator from django.core.validators import MaxValueValidator # printer supportt import socket import io import json # InvenTree plugin libs from plugin import InvenTreePlugin from plugin.mixins import LabelPrintingMixin, SettingsMixin from inventree_phomemo.version import PHOMEMO_PLUGIN_VERSION class PhomemoLabelPlugin(LabelPrintingMixin, SettingsMixin, InvenTreePlugin): AUTHOR = "Sergal.engineering" DESCRIPTION = "Label printing plugin for Phomemo printers" VERSION = PHOMEMO_PLUGIN_VERSION NAME = "Phomemo" SLUG = "phomemo" TITLE = "Phomemo Label Printer" SETTINGS = { 'IP_ADDRESS': { 'name': _('IP Address'), 'description': _('IP address of phomemo print server'), 'default': '', }, 'PORT': { 'name': _('Port'), 'description': _('Port of phomemo print server'), 'default': '9100', }, } def print_label(self, **kwargs): # Read settings ip_address = self.get_setting('IP_ADDRESS') port = int(self.get_setting('PORT')) object_to_print = kwargs['label_instance'].object_to_print match kwargs['label_instance'].SUBDIR: case 'part': tpart = object_to_print barcode = '1' + str(object_to_print.pk) case 'stockitem': tpart = object_to_print.part barcode = '2' + str(object_to_print.pk) case 'location': tpart = object_to_print barcode = '3' + str(object_to_print.pk) case 'build': tpart = object_to_print barcode = '4' + str(object_to_print.pk) case _: tpart = object_to_print barcode = '0' + str(object_to_print.pk) print(f"!! Unsupported item type: {object_to_print.SUBDIR}") fields = { 'name': tpart.name, 'description': tpart.description, 'pk': tpart.pk, 'params': tpart.parameters_map(), 'category': tpart.category.name, 'category_path': tpart.category.pathstring, 'barcode': barcode } data = json.dumps(fields) # 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))