print_service.py 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132
  1. import requests
  2. from logging import getLogger
  3. from config.settings import DEVELOPMENT
  4. from models.sales import OrderWeb, ItemWeb
  5. from services.data_service import DataServiceFactory
  6. from models.items import Order
  7. logger = getLogger(__name__)
  8. user_data_service = DataServiceFactory.get_user_service()
  9. if DEVELOPMENT:
  10. printer_url = "http://localhost:5005/"
  11. else:
  12. printer_url = "http://localhost:5004/"
  13. def print_order(order: Order):
  14. """Send order to printer"""
  15. logger.info(f"Attempting to print order for table {order.table}")
  16. try:
  17. if not order.items or not order.table:
  18. error_msg = "Order must have items and a table number"
  19. logger.error(error_msg)
  20. raise ValueError(error_msg)
  21. # Prepare the order data for printing
  22. order_data = {
  23. "table": order.table,
  24. "items": [{"name": item.name, "price": item.price, "quantity": item.quantity} for item in order.items],
  25. "customerName": order.customerName,
  26. "totalAmount": order.totalAmount,
  27. "orderDate": order.orderDate
  28. }
  29. logger.info(f"Order data prepared for printing: table={order.table}, items={len(order.items)}, total={order.totalAmount}")
  30. # Send the order data to the printer service
  31. response = requests.post(
  32. f"{printer_url}/print",
  33. json=order_data,
  34. headers={"Authorization": f"Bearer PRINTER123cerveza@"},
  35. timeout=10
  36. )
  37. if response.status_code != 200:
  38. error_msg = f"Failed to print order: HTTP {response.status_code} - {response.text}"
  39. logger.error(error_msg)
  40. raise Exception(error_msg)
  41. logger.info(f"Order printed successfully for table {order.table}")
  42. return response.json() # Return the response from the printer service
  43. except requests.RequestException as e:
  44. error_msg = f"Network error while printing order for table {order.table}: {e}"
  45. logger.error(error_msg)
  46. raise Exception(error_msg)
  47. except Exception as e:
  48. error_msg = f"Unexpected error while printing order for table {order.table}: {e}"
  49. logger.error(error_msg)
  50. raise
  51. def print_ticket(number_table: int):
  52. """Send a ticket to the printer"""
  53. logger.info(f"Attempting to print ticket for table {number_table}")
  54. try:
  55. response = requests.get(
  56. f"{printer_url}/ticket/{number_table}",
  57. headers={"Authorization": f"Bearer PRINTER123cerveza@"},
  58. timeout=10
  59. )
  60. if response.status_code != 200:
  61. error_msg = f"Failed to print ticket for table {number_table}: HTTP {response.status_code} - {response.text}"
  62. logger.error(error_msg)
  63. raise Exception(error_msg)
  64. logger.info(f"Ticket printed successfully for table {number_table}")
  65. return response.json() # Return the response from the printer service
  66. except requests.RequestException as e:
  67. error_msg = f"Network error while printing ticket for table {number_table}: {e}"
  68. logger.error(error_msg)
  69. raise Exception(error_msg)
  70. except Exception as e:
  71. error_msg = f"Unexpected error while printing ticket for table {number_table}: {e}"
  72. logger.error(error_msg)
  73. raise
  74. def get_status():
  75. """Get the status of the printer service"""
  76. logger.info("Checking printer service status")
  77. try:
  78. response = requests.get(
  79. f"{printer_url}/status",
  80. headers={"Authorization": f"Bearer PRINTER123cerveza@"},
  81. timeout=5
  82. )
  83. data = response.json()
  84. status = data.get("status", False)
  85. logger.info(f"Printer service status: {'online' if status else 'offline'}")
  86. return status
  87. except requests.RequestException as e:
  88. error_msg = f"Error connecting to printer service: {e}"
  89. logger.error(error_msg)
  90. raise Exception(error_msg)
  91. except Exception as e:
  92. error_msg = f"Unexpected error checking printer status: {e}"
  93. logger.error(error_msg)
  94. raise Exception(error_msg)