58 lines
2.2 KiB
Python
58 lines
2.2 KiB
Python
import logging
|
|
|
|
import requests
|
|
|
|
from src.ezgg_lan_manager.services.SeatingService import SeatingService
|
|
from src.ezgg_lan_manager.types.CateringOrder import CateringOrder
|
|
from src.ezgg_lan_manager.types.ConfigurationTypes import ReceiptPrintingConfiguration
|
|
from src.ezgg_lan_manager.types.User import User
|
|
|
|
logger = logging.getLogger(__name__.split(".")[-1])
|
|
logging.getLogger("urllib3").setLevel(logging.FATAL) # Disable logging for urllib3
|
|
|
|
class ReceiptPrintingService:
|
|
def __init__(self, seating_service: SeatingService, config: ReceiptPrintingConfiguration, dev_mode_enabled: bool) -> None:
|
|
self._seating_service = seating_service
|
|
self._config = config
|
|
self._dev_mode_enabled = dev_mode_enabled
|
|
self._url = f"http://{self._config.host}:{self._config.port}/{self._config.order_print_endpoint}"
|
|
|
|
async def print_order(self, user: User, order: CateringOrder) -> None:
|
|
seat = await self._seating_service.get_user_seat(user.user_id)
|
|
if seat is None:
|
|
seat_id = " - "
|
|
else:
|
|
seat_id = str(seat.seat_id)
|
|
|
|
|
|
menu_items_payload = []
|
|
for item, amount in order.items.items():
|
|
menu_items_payload.append({
|
|
"menu_item_name": item.name,
|
|
"amount": amount
|
|
})
|
|
|
|
payload = {
|
|
"order_id": str(order.order_id),
|
|
"order_date": order.order_date.strftime('%Y-%m-%dT%H:%M:%S.%f')[:-3] + 'Z',
|
|
"customer_name": user.user_name,
|
|
"seat_id": seat_id,
|
|
"items": menu_items_payload
|
|
}
|
|
|
|
logger.info(f"Sending print order to {self._url}: {payload}")
|
|
try:
|
|
response = requests.post(
|
|
self._url,
|
|
json=payload,
|
|
headers={"x-password": self._config.password},
|
|
timeout=2.0
|
|
)
|
|
if response.status_code != 200:
|
|
logger.error(f"Received an error with code {response.status_code}: {response.text}")
|
|
except Exception as e:
|
|
if self._dev_mode_enabled:
|
|
logger.info("An error occurred trying to print a receipt: %s", e)
|
|
return
|
|
logger.error("An error occurred trying to print a receipt: %s", e)
|