diff --git a/api.py b/api.py index 4cc2331..2f028f8 100644 --- a/api.py +++ b/api.py @@ -1,6 +1,11 @@ from fastapi import FastAPI, Response +from escpos.printer import Dummy, Network +import sys +import json + from pydantic import BaseModel +from time import sleep app = FastAPI( title="Print Server FastAPI", description="Server that receive request for printing", @@ -9,29 +14,61 @@ app = FastAPI( class Info(BaseModel): content : str + address : str -def write_to_file(file_path, content): - with open(file_path, "w") as file: - file.write(content) + +def imprimir_ticket_de_prueba(data, address): + d = data + # Crea una instancia de la impresora ficticia + printer = Network(str(address)) + printer = Dummy() + # Establece el tamaño de la fuente y otros formatos de impresión + printer.set(font='a', align='center', bold=True, height=2, width=2) -@app.post("/print_ticket") -def print_ticket_file(info : Info): - write_to_file('/tmp/ticket_prueba.txt', info.content) - message = "!Impresión Realizada!" + # Imprime el encabezado + printer.text('========================\n') + printer.set(align='center', bold=False, height=6, width=6) + text = 'MESA: ' + str(d['table'] + "\n\n") + printer.text(text) + printer.set(align='left', height=6, width=6) + for line in d["lines"]: + if line['type'] != 'title': + text = line['product'] +" "+str(line['quantity'])+"\n" + printer.text(text) + else: + printer.set(align='left', bold=True, height=8, width=8) + printer.text("\nPIZZA COMBINADA\n") - return Response(content=message, status_code=200) + # Corta el papel (solo para impresoras que soportan esta función) + printer.cut() + + # Obtiene el contenido del ticket de prueba + ticket_contenido = printer.output + + # Imprime el contenido en la consola + sys.stdout.write(ticket_contenido.decode('utf-8')) @app.post("/order_kitchen") def print_ticket_file_kitchen(info : Info): - write_to_file('/tmp/ticket_kitchen.txt', info.content) + print(info) + info = dict(info) + + data = info["content"] + data = json.loads(data.replace("'", "\"")) + imprimir_ticket_de_prueba(data) + message = "!Impresión Realizada!" return Response(content=message, status_code=200) @app.post("/order_bar") def print_ticket_file_bar(info : Info): - write_to_file('/tmp/ticket_bar.txt', info.content) + info = dict(info) + data = info["content"] + data = json.loads(data.replace("'", "\"")) + imprimir_ticket_de_prueba(data) + message = "!Impresión Realizada!" return Response(content=message, status_code=200)