barker/barker/views/food_table.py

118 lines
4.0 KiB
Python

import re
import uuid
import transaction
from pyramid.view import view_config
from barker.models import FoodTable, Overview
@view_config(request_method='POST', route_name='v1_tables_new', renderer='json', permission='Tables', trans=True)
def save(request):
json = request.json_body
item = FoodTable(json['name'], json['location'], json['isActive'], json['sortOrder'])
request.dbsession.add(item)
transaction.commit()
item = request.dbsession.query(FoodTable).filter(FoodTable.id == item.id).first()
return food_table_info(item)
@view_config(request_method='PUT', route_name='v1_tables_id', renderer='json', permission='Tables', trans=True)
def update(request):
json = request.json_body
item = request.dbsession.query(FoodTable).filter(FoodTable.id == uuid.UUID(request.matchdict['id'])).first()
item.name = json['name']
item.location = json['location']
item.is_active = json['isActive']
item.sort_order = json['sortOrder']
transaction.commit()
item = request.dbsession.query(FoodTable).filter(FoodTable.id == item.id).first()
return food_table_info(item)
@view_config(request_method='DELETE', route_name='v1_tables_id', renderer='json', permission='Tables', trans=True)
def delete(request):
item = request.dbsession.query(FoodTable).filter(FoodTable.id == uuid.UUID(request.matchdict['id'])).first()
request.dbsession.delete(item)
transaction.commit()
return {}
@view_config(request_method='GET', route_name='v1_tables_id', renderer='json', permission='Authenticated')
def show_id(request):
id_ = request.matchdict['id']
p = re.compile('^[A-Za-z0-9]{8}-[A-Za-z0-9]{4}-[A-Za-z0-9]{4}-[A-Za-z0-9]{4}-[A-Za-z0-9]{12}$')
if p.match(id_):
id_ = uuid.UUID(id_)
item = request.dbsession.query(FoodTable).filter(FoodTable.id == id_).first()
else:
item = request.dbsession.query(FoodTable).filter(FoodTable.name == id_).first()
return food_table_info(item)
@view_config(request_method='GET', route_name='v1_tables_new', renderer='json', request_param='v')
def show_voucher(request):
voucher_id = request.GET['v']
voucher = request.dbsession.query(Overview).filter(Overview.voucher_id == voucher_id).first()
if voucher is not None:
return food_table_info(voucher.food_table)
return {}
@view_config(request_method='GET', route_name='v1_tables_new', renderer='json', permission='Tables')
def show_blank(request):
return {
'name': "",
'isActive': True,
'location': "",
'sortOrder': 0
}
@view_config(request_method='GET', route_name='v1_tables_list', renderer='json', permission='Authenticated')
def show_list(request):
active = request.GET.get('a', None)
list_ = request.dbsession.query(FoodTable)
if active is not None:
list_ = list_.filter(FoodTable.is_active == active)
list_ = list_.order_by(FoodTable.sort_order).all()
food_tables = []
for item in list_:
food_tables.append({
'id': item.id,
'name': item.name,
'location': item.location,
'isActive': item.is_active,
'sortOrder': item.sort_order,
'status': '' if item.status is None else item.status.status,
'voucherId': None if item.status is None else item.status.voucher_id
})
return food_tables
@view_config(request_method='PUT', route_name='v1_tables_list', renderer='json', permission='Tables')
def sort_order(request):
json = request.json_body
for index, item in enumerate(json):
request.dbsession.query(
FoodTable
).filter(
FoodTable.id == uuid.UUID(item['FoodTableID'])
).update(
{FoodTable.sort_order: index}
)
return True
def food_table_info(item):
return {
'id': item.id,
'name': item.name,
'location': item.location,
'isActive': item.is_active,
'status': '' if item.status is None else item.status.status,
'sortOrder': item.sort_order,
'voucherId': None if item.status is None else item.status.voucher_id
}