import math import requests import os api_token = os.getenv('FUDO_API_KEY') api_secret = os.getenv('FUDO_API_SECRET') def get_token(): url = 'https://auth.fu.do/api' data = { "apiKey": api_token, "apiSecret": api_secret } r = requests.post(url, data=data) return r.json()['token'] def get_categorys(): """ { "data": [ { "id": "1", "type": "ProductCategory", "attributes": { "enableOnlineMenu": true, "name": "Drinks", "preparationTime": 0, "position": 50 }, "relationships": { "kitchen": { "data": { "id": "1", "type": "Kitchen" } }, "parentCategory": { "data": { "id": "1", "type": "ProductCategory" } } } } ] }""" token = get_token() url = 'https://api.fu.do/v1alpha1/product-categories' headers = { 'Authorization': 'Bearer ' + token } r = requests.get(url, headers=headers) return r.json() def get_product(id_category:int): """ Response Example: [{ 'type': 'Product', 'id': '206', 'attributes': { 'active': True, 'code': None, 'cost': 364.0, 'description': '', 'enableOnlineMenu': None, 'enableQrMenu': None, 'favourite': False, 'imageUrl': None, 'name': 'Pollo 70 g', 'position': 28800000, 'preparationTime': None, 'price': 1500.0, 'sellAlone': True, 'stock': None, 'stockControl': False }, 'relationships': {'kitchen': {'data': {'type': 'Kitchen', 'id': '4'}}, 'productCategory': {'data': {'type': 'ProductCategory', 'id': '28'}}, 'productModifiersGroups': {'data': []}, 'productProportions': {'data': []}} }] """ url = 'https://api.fu.do/v1alpha1/products/{}'.format(id_category) token = get_token() headers = { 'Authorization': 'Bearer ' + token } r = requests.get(url, headers=headers) return r.json() def get_products(): """ Response Example:{ 'type': 'Product', 'id': '206', 'attributes': { 'active': True, 'code': None, 'cost': 364.0, 'description': '', 'enableOnlineMenu': None, 'enableQrMenu': None, 'favourite': False, 'imageUrl': None, 'name': 'Pollo 70 g', 'position': 28800000, 'preparationTime': None, 'price': 1500.0, 'sellAlone': True, 'stock': None, 'stockControl': False }, 'relationships': {'kitchen': {'data': {'type': 'Kitchen', 'id': '4'}}, 'productCategory': {'data': {'type': 'ProductCategory', 'id': '28'}}, 'productModifiersGroups': {'data': []}, 'productProportions': {'data': []}} } """ url = 'https://api.fu.do/v1alpha1/products' token = get_token() headers = { 'Authorization': 'Bearer ' + token } r = requests.get(url, headers=headers) return list(filter(lambda x: x['relationships']['productCategory']['data']['id'] == '1', r.json()['data'])) def get_table(number:int): n_per_page = 10 page = math.ceil(number / n_per_page) url = 'https://api.fu.do/v1alpha1/tables?page[number]={}&page[size]={}&include=activeSales&sort=number'.format(page, n_per_page) token = get_token() headers = { 'Authorization': 'Bearer ' + token } r = requests.get(url, headers=headers) if r.status_code != 200: print('Error al obtener tablas:' + str(r.json()['errors'])) return None try: return list(filter(lambda x: x['attributes']['number'] == number, r.json()['data']))[0] except: print('Error al obtener tabla') print(r.json()) return None def get_sale(sale_id:int): url = 'https://api.fu.do/v1alpha1/sales/{}'.format(sale_id) token = get_token() headers = { 'Authorization': 'Bearer ' + token } r = requests.get(url, headers=headers) if r.status_code != 200: print('Error al obtener tablas:' + str(r.json()['errors'])) return None return r.json() def create_sale(table_id:int): url = 'https://api.fu.do/v1alpha1/sales' token = get_token() headers = { 'Authorization': 'Bearer ' + token } data = { "data": { "type": "Sale", "attributes": { "people": 1, "saleType": "EAT-IN", "comment": "Pedido desde la app pedidos express" }, "relationships": { "table": { "data": { "id": str(table_id), "type": "Table" } }, "waiter": { "data": { "type": "User", "id": "76" } } } } } r = requests.post(url, headers=headers, json=data) if r.status_code != 201: print('Error al crear la venta:', r.json()) return None return r.json()["data"] def create_item(product_id:int, quantity:int, sale_id:int, comment = None): url = 'https://api.fu.do/v1alpha1/items' token = get_token() headers = { 'Authorization': 'Bearer ' + token } data = { "quantity": quantity, "origin": "MOBILE", "comment": "[DESARROLLO NO SACAR]Pedido desde pedidos express" + (f" - {comment}" if comment else ""), } data = { "data":{ "type": "Item", "attributes": data, "relationships": { "product": { "data": { "type": "Product", "id": str(product_id) } }, "sale": { "data": { "type": "Sale", "id": str(sale_id) } } }, } } r = requests.post(url, headers=headers, json=data) if r.status_code != 201: print(r.json()) return None return r.json()["data"] def get_active_sale(table): data = table['relationships']['activeSales']['data'] if len(data) == 0: return None return data[0] if __name__ == "__main__": table = get_table(107) if table is None: print('No se pudo obtener la mesa') exit() activeSale = get_active_sale(table) if not activeSale: print('No hay una venta activa para la mesa') activeSale = create_sale(table['id']) if activeSale is None: print('No se pudo crear la venta') exit() else: activeSale = activeSale[0] print('Venta activa:', activeSale['id']) """ Intrucciones para hacer un pedido: 1. Obtener el token de autenticación con `get_token()`. 2. obtener la mesa con `get_table(numero_de_mesa)`. 3. ver si tiene una activeSale, en caso contrario crear una con `create_sale(id_mesa)`. 4. agregar los items a la venta con `create_item(id_producto, cantidad, id_venta, comentario)`. """