Added Printer Spoofer for testing purposes
This commit is contained in:
@@ -20,6 +20,7 @@ from database import SessionLocal
|
||||
from models.order import Order, OrderItem, PrintLog
|
||||
from models.printer import Printer
|
||||
from models.product import Product
|
||||
from models.settings import PosSettings
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
@@ -73,7 +74,19 @@ def check_printer(ip: str, port: int) -> bool:
|
||||
return False
|
||||
|
||||
|
||||
def is_spoof_mode() -> bool:
|
||||
"""Stateless check — opens its own DB session. For use outside route_and_print."""
|
||||
db = SessionLocal()
|
||||
try:
|
||||
return _is_spoof_mode(db)
|
||||
finally:
|
||||
db.close()
|
||||
|
||||
|
||||
def send_test_print(ip: str, port: int, name: str) -> Tuple[bool, str]:
|
||||
if is_spoof_mode():
|
||||
logger.info("Spoof printing ON — dropping test print for %s", name)
|
||||
return True, ""
|
||||
try:
|
||||
p = _get_printer(ip, port)
|
||||
p._raw(b'\x1b\x61\x01')
|
||||
@@ -164,6 +177,9 @@ def _print_kitchen_ticket(p: Network, order: Order, items: List[OrderItem], db:
|
||||
|
||||
def print_waiter_report(ip: str, port: int, report: dict, mode: str):
|
||||
"""Print a waiter shift/period report. mode='simple'|'extensive'."""
|
||||
if is_spoof_mode():
|
||||
logger.info("Spoof printing ON — dropping waiter report print")
|
||||
return
|
||||
try:
|
||||
p = _get_printer(ip, port)
|
||||
|
||||
@@ -222,6 +238,9 @@ def print_waiter_report(ip: str, port: int, report: dict, mode: str):
|
||||
|
||||
def print_printer_report(ip: str, port: int, report: dict, mode: str):
|
||||
"""Print a per-printer totals report. mode='simple'|'extensive'."""
|
||||
if is_spoof_mode():
|
||||
logger.info("Spoof printing ON — dropping printer report print")
|
||||
return
|
||||
try:
|
||||
p = _get_printer(ip, port)
|
||||
|
||||
@@ -282,6 +301,9 @@ def print_printer_report(ip: str, port: int, report: dict, mode: str):
|
||||
|
||||
def print_order_receipt(ip: str, port: int, receipt: dict):
|
||||
"""Print a manager-triggered order receipt."""
|
||||
if is_spoof_mode():
|
||||
logger.info("Spoof printing ON — dropping order receipt print")
|
||||
return
|
||||
try:
|
||||
p = _get_printer(ip, port)
|
||||
|
||||
@@ -329,6 +351,9 @@ def print_order_receipt(ip: str, port: int, receipt: dict):
|
||||
|
||||
def print_order_synopsis(ip: str, port: int, synopsis: dict):
|
||||
"""Print a waiter-triggered order synopsis (not a kitchen ticket)."""
|
||||
if is_spoof_mode():
|
||||
logger.info("Spoof printing ON — dropping order synopsis print")
|
||||
return
|
||||
try:
|
||||
p = _get_printer(ip, port)
|
||||
|
||||
@@ -408,7 +433,21 @@ def route_and_print_sync(order_id: int, item_ids: List[int], db: Session) -> Lis
|
||||
return _do_route_and_print(order_id, item_ids, db)
|
||||
|
||||
|
||||
def _is_spoof_mode(db: Session) -> bool:
|
||||
row = db.query(PosSettings).filter(PosSettings.key == "dev.spoof_printing").first()
|
||||
return row is not None and row.value == "true"
|
||||
|
||||
|
||||
def _do_route_and_print(order_id: int, item_ids: List[int], db: Session) -> List[dict]:
|
||||
if _is_spoof_mode(db):
|
||||
logger.info("Spoof printing ON — dropping print job for order %s", order_id)
|
||||
for item_id in item_ids:
|
||||
item = db.query(OrderItem).filter(OrderItem.id == item_id).first()
|
||||
if item:
|
||||
item.printed = True
|
||||
db.commit()
|
||||
return [{"printer_name": "spoof", "success": True, "error": None}]
|
||||
|
||||
results = []
|
||||
|
||||
order = db.query(Order).filter(Order.id == order_id).first()
|
||||
|
||||
Reference in New Issue
Block a user