| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256 |
- 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)`.
- """
|