| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103 |
- import logging
- from venv import logger
- from escpos.printer.win32raw import Win32Raw
- from escpos.printer.usb import Usb
- from escpos.printer.network import Network
- from escpos.printer import Dummy
- from escpos.escpos import Escpos
- from impresora.order import Order
- import usb.core
- logger = logging.getLogger(__name__)
- class BasePrinter:
- def __init__(self):
- self.bolded = False
- self.font = "a"
- self.doubled_size = False
- self.work = Dummy()
- self.printer:Escpos
-
- def is_connected(self):
- return self.printer.is_online()
- def change_font(self):
- self.font = "b" if self.font == "a" else "a"
- self.work.set(font=self.font)
- def text(self, text):
- # Print the text
- self.work.text(text+"\n")
- def bold(self):
- # Set bold for the next print
- self.bolded = not self.bolded
- self.work.set(bold=self.bolded)
- def double_size(self):
- # Set double size for the next print
- self.doubled_size = not self.doubled_size
- self.work.set(double_height=self.doubled_size, double_width=self.doubled_size)
-
- def default(self):
- # Set default size for the next print
- self.work.set_with_default()
-
- def print_order(self, order:Order, mesa:int = 0):
- # Print the order details
- self.default()
- self.double_size()
- self.bold()
- self.text(f"Orden Biergarten Klein\n")
- self.default()
- self.text(f"Fecha: {order.date.strftime('%d/%m/%Y: %H:%M:%S')}")
- self.bold()
- self.text(f"Mesa: {mesa}")
- self.text(f"Cliente: {order.user}\n")
- self.default()
- self.text(order.tabulate())
- self.bold()
- self.text(f"Total: {order.total}")
-
- self.work.cut()
- # Print the order details
- self.printer._raw(self.work.output)
- self.work.clear()
- # Intentar cerrar la impresora si el método existe
- if hasattr(self.printer, 'close'):
- self.printer.close()
- class PrinterWindows(BasePrinter):
- def __init__(self, printer_name="Impresora Termica"):
- super().__init__()
- self.printer = Win32Raw(printer_name)
- class PrinterUSB(BasePrinter):
- def __init__(self, vendor_id, product_id):
- super().__init__()
- self.printer = Usb(vendor_id, product_id,in_ep=0x81,out_ep=0x03)
- self.vendor_id = vendor_id
- self.product_id = product_id
- @staticmethod
- def check_usb_port(vendor_id, product_id):
- """Check if the USB printer is connected."""
- try:
- element = usb.core.find(idVendor=vendor_id, idProduct=product_id)
- if element is None:
- logger.error(f"Printer is not connected on USB port {vendor_id}:{product_id}.")
- return False
- return True
- except Exception as e:
- logger.error(f"Error checking USB printer: {e}")
- return False
-
- def is_connected(self):
- """Check if the USB printer is connected."""
- return self.check_usb_port(self.vendor_id, self.product_id)
- class PrinterNetwork(BasePrinter):
- def __init__(self, host, port):
- super().__init__()
- self.printer = Network(host, port)
|