diff --git a/api.py b/api.py index 7cd2fb2..7285ec6 100644 --- a/api.py +++ b/api.py @@ -1,6 +1,6 @@ from fastapi import FastAPI, Response -from escpos.printer import Dummy, Network -import sys +from escpos.printer import Dummy, Network, Usb +# import sys import json from pydantic import BaseModel @@ -15,27 +15,38 @@ app = FastAPI( class Info(BaseModel): content: str - printer_type: str ip_printer: str + user_name: str + printer_type: str idVendor: str idProduct: str - user_name: str -def print_bill(data, address=None, idVendor=None idProduct=None, waiter): - d = data - # Crea una instancia de la impresora ficticia - if address: - printer = Network(str(address)) - elif idVendor and idProduct: - printer = Usb(int(idVendor), int(idProduct), 0) +def open_conexion(info): + if info.get('ip_printer'): + # Crea una instancia de la impresora de Red + printer = Network(str(info.get('ip_printer'))) + printer.open() + elif info.get('idVendor') and info.get('idProduct'): + # Crea una instancia de la impresora USB + printer = Usb( + int(info.get('idVendor')), + int(info.get('idProduct')), 0) else: + # Crea una instancia de la impresora ficticia printer = Dummy() - - # Imprime el encabezado + + return printer + + +def print_bill(data, info, waiter=None): + d = data + + # Abre Conexión Con la Impresora + printer = open_conexion(info) printer.set(align='center', bold=False, height=1, width=1) - printer.text(d["shop_name"]+'\n') - printer.text(d["shop_address"]+'\n') + printer.text(d["shop_name"] + '\n') + printer.text(d["shop_address"] + '\n') printer.set(align='left', bold=False, height=1, width=1) printer.textln('===============================================') text = d['state'] @@ -45,14 +56,14 @@ def print_bill(data, address=None, idVendor=None idProduct=None, waiter): str(d['invoice']['resolution']['resolution_number']) \ + "\nValida desde " + \ d['invoice']['resolution']['valid_date_time_from'] + \ - " hasta "+str(d['invoice']['resolution']['valid_date_time_to']) + " hasta " + str(d['invoice']['resolution']['valid_date_time_to']) printer.textln(text) printer.ln() text = "Factura #: " + d['invoice']['invoice_number'] printer.textln(text) - printer.text("Cliente: " + d["party"]+'\n') - printer.text("CC/NIT: " + d["tax_identifier_code"]+'\n') - printer.text("Direccion: " + d["address"]+'\n') + printer.text("Cliente: " + d["party"] + '\n') + printer.text("CC/NIT: " + d["tax_identifier_code"] + '\n') + printer.text("Direccion: " + d["address"] + '\n') text = 'MESA: ' + str(d['table'] + "\n") printer.text(text) printer.textln('===============================================') @@ -68,13 +79,13 @@ def print_bill(data, address=None, idVendor=None idProduct=None, waiter): printer.set(align='right', bold=False, height=1, width=1) printer.textln('================================================') - text = "Descuento Realizado: "+str(d["total_discount"])+"\n" + text = "Descuento Realizado: " + str(d["total_discount"]) + "\n" printer.text(text) - text = "Total (sin impuestos): "+str(d["untaxed_amount"])+"\n" + text = "Total (sin impuestos): " + str(d["untaxed_amount"]) + "\n" printer.text(text) - text = "Impuestos (INC): "+str(d["tax_amount"])+"\n" + text = "Impuestos (INC): " + str(d["tax_amount"]) + "\n" printer.text(text) - text = "Total: "+str(d["total"])+"\n" + text = "Total: " + str(d["total"]) + "\n" printer.text(text) printer.ln() if 'payments' in d.keys(): @@ -82,20 +93,20 @@ def print_bill(data, address=None, idVendor=None idProduct=None, waiter): printer.textln('================================================') for payment in d['payments']: - text = str(payment["statement"])+" $"+str(payment["amount"]) + text = str(payment["statement"]) + " $" + str(payment["amount"]) printer.textln(text) printer.set(align='center', bold=False, height=1, width=1) printer.textln('==============================================\n') printer.text("Sigue nuestras redes sociales\n") - printer.text("@bicipizza\n") + printer.text("@Rustik\n") printer.text("Recuerde que la propina es voluntaria.\n") printer.text("Gracias por visitarnos, vuelva pronto.\n") printer.text("SOFTWARE POTENCIADO POR ONECLUSTER.ORG.\n") format_date_time = datetime.now().strftime('%Y-%m-%d %H:%M:%S') - printer.text(str(format_date_time)+'\n') + printer.text(str(format_date_time) + '\n') if waiter: printer.text("Atendido Por: \n") - printer.text(str(waiter)+'\n') + printer.text(str(waiter) + '\n') # Corta el papel (solo para impresoras que soportan esta función) printer.cut() @@ -106,20 +117,18 @@ def print_bill(data, address=None, idVendor=None idProduct=None, waiter): # sys.stdout.write(ticket_contenido.decode('utf-8')) -def print_customer_order(data, address, waiter): +def print_customer_order(data, info, waiter): d = data - # Crea una instancia de la impresora ficticia - # printer = Network(str(address)) - # printer.open() - printer = Dummy() + # Abre Conexión Con la Impresora + printer = open_conexion(info) # Imprime el encabezado printer.set(align='center', bold=False, height=1, width=1) format_date_time = datetime.now().strftime('%Y-%m-%d %H:%M:%S') - printer.text(str(format_date_time)+'\n') + printer.text(str(format_date_time) + '\n') if waiter: printer.text("Pedido Por: \n") - printer.text(str(waiter)+'\n') + printer.text(str(waiter) + '\n') printer.set( align='center', bold=False, height=2, width=2, custom_size=True ) @@ -133,17 +142,18 @@ def print_customer_order(data, address, waiter): for line in d["lines"]: if line['type'] != 'title': if combination_pizza and pizza < 2: - printer.set(align='center', bold=False, height=2, width=2, custom_size=True) + printer.set(align='center', bold=False, height=2, width=2, + custom_size=True) pizza += 1 elif pizza >= 2: combination_pizza = False printer.set( - align='left', bold=False, height=2, width=2, custom_size=True - ) + align='left', bold=False, height=2, width=2, + custom_size=True) else: printer.set( - align='left', bold=False, height=2, width=2, custom_size=True - ) + align='left', bold=False, height=2, width=2, + custom_size=True) text = line['product'] + " " + str(line['quantity']) + "\n" printer.text(text) @@ -166,21 +176,19 @@ def print_customer_order(data, address, waiter): printer.cut() printer.close() # Obtiene el contenido del ticket de prueba - ticket_contenido = printer.output + # ticket_contenido = printer.output # Imprime el contenido en la consola - sys.stdout.write(ticket_contenido.decode('utf-8')) + # sys.stdout.write(ticket_contenido.decode('utf-8')) @app.post("/print_bill") def print_ticket_bill(info: Info): info = dict(info) data = info["content"] - address = info["ip_printer"] - waiter = info["user_name"] data = json.loads(data.replace("'", "\"")) - print_bill(data, address, waiter) + print_bill(data, info, waiter) message = "!Impresión Realizada!" @@ -190,11 +198,11 @@ def print_ticket_bill(info: Info): @app.post("/order_kitchen") def print_ticket_file_kitchen(info: Info): info = dict(info) + print(info) data = info["content"] - address = info["ip_printer"] waiter = info["user_name"] data = json.loads(data.replace("'", "\"")) - print_customer_order(data, address, waiter) + print_customer_order(data, info, waiter) message = "!Impresión Realizada!" @@ -203,12 +211,12 @@ def print_ticket_file_kitchen(info: Info): @app.post("/order_bar") def print_ticket_file_bar(info: Info): + print(info) info = dict(info) data = info["content"] - address = info["ip_printer"] waiter = info["user_name"] data = json.loads(data.replace("'", "\"")) - print_customer_order(data, address, waiter) + print_customer_order(data, info, waiter) message = "!Impresión Realizada!"