| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143 |
- import requests
- from logging import getLogger
- from config.settings import DEVELOPMENT
- from models.sales import OrderWeb, ItemWeb
- from services.data_service import DataServiceFactory
- from models.items import Order
- from enums.locations import Locations
- logger = getLogger(__name__)
- user_data_service = DataServiceFactory.get_user_service()
- def get_printer_url(location: Locations) -> str:
- if DEVELOPMENT:
- return "http://localhost:5005"
- if location == Locations.BAR:
- return "http://10.10.12.11:5004"
- elif location == Locations.COCTELERY:
- return "http://10.10.12.12:5004"
- elif location == Locations.PIZZAS:
- return "http://10.10.12.13:5004"
- else:
- return "http://10.10.12.14:5004"
- def print_order(order: Order, location:Locations ):
- """Send order to printer"""
- logger.info(f"Attempting to print order for table {order.table}")
-
- printer_url = get_printer_url(location)
- try:
- if not order.items or not order.table:
- error_msg = "Order must have items and a table number"
- logger.error(error_msg)
-
- raise ValueError(error_msg)
-
- # Prepare the order data for printing
- order_data = {
- "table": order.table,
- "items": [{"name": item.name, "price": item.price, "quantity": item.quantity, "comment": item.comment} for item in order.items],
- "customerName": order.customerName,
- "totalAmount": order.totalAmount,
- "orderDate": order.orderDate
- }
-
- logger.info(f"Order data prepared for printing: table={order.table}, items={order.items}, total={order.totalAmount}")
-
- # Send the order data to the printer service
- response = requests.post(
- f"{printer_url}/print",
- json=order_data,
- headers={"Authorization": f"Bearer PRINTER123cerveza@"},
- timeout=10
- )
- if response.status_code != 200:
- error_msg = f"Failed to print order: HTTP {response.status_code} - {response.text}"
- logger.error(error_msg)
-
- raise Exception(error_msg)
- logger.info(f"Order printed successfully for table {order.table}")
-
- return response.json() # Return the response from the printer service
-
- except requests.RequestException as e:
- error_msg = f"Network error while printing order for table {order.table}: {e}"
- logger.error(error_msg)
-
- raise Exception(error_msg)
- except Exception as e:
- error_msg = f"Unexpected error while printing order for table {order.table}: {e}"
- logger.error(error_msg)
-
- raise
- def print_ticket(number_table: int):
- """Send a ticket to the printer"""
- logger.info(f"Attempting to print ticket for table {number_table}")
- printer_url = get_printer_url(Locations.BAR)
- try:
-
- response = requests.get(
- f"{printer_url}/ticket/{number_table}",
- headers={"Authorization": f"Bearer PRINTER123cerveza@"},
- timeout=10
- )
- if response.status_code != 200:
- error_msg = f"Failed to print ticket for table {number_table}: HTTP {response.status_code} - {response.text}"
- logger.error(error_msg)
-
- raise Exception(error_msg)
- logger.info(f"Ticket printed successfully for table {number_table}")
-
-
- return response.json() # Return the response from the printer service
-
- except requests.RequestException as e:
- error_msg = f"Network error while printing ticket for table {number_table}: {e}"
- logger.error(error_msg)
- raise Exception(error_msg)
- except Exception as e:
- error_msg = f"Unexpected error while printing ticket for table {number_table}: {e}"
- logger.error(error_msg)
-
- raise
- def get_status(location: Locations):
- """Get the status of the printer service"""
- logger.info("Checking printer service status")
-
- printer_url = get_printer_url(location)
- try:
- response = requests.get(
- f"{printer_url}/status",
- headers={"Authorization": f"Bearer PRINTER123cerveza@"},
- timeout=5
- )
-
- data = response.json()
- status = data.get("printed_connected", False)
-
- logger.info(f"Printer service status: {'online' if status else 'offline'}")
-
-
- return not not status # Ensure a boolean is returned
-
- except requests.RequestException as e:
- error_msg = f"Error connecting to printer service: {e}"
- logger.error(error_msg)
- return False
- except Exception as e:
- error_msg = f"Unexpected error checking printer status: {e}"
- logger.error(error_msg)
-
- return False
|