barker/barker/views/food_table.py

167 lines
4.3 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="POST",
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["id"])
).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,
}