Files
barker/barker/views/modifier.py

142 lines
3.8 KiB
Python

import uuid
from decimal import Decimal, InvalidOperation
import transaction
from pyramid.view import view_config
from barker.models import Modifier
from barker.models.validation_exception import ValidationError
@view_config(
request_method="POST",
route_name="v1_modifiers_new",
renderer="json",
permission="Modifiers",
trans=True,
)
def save(request):
json = request.json_body
name = json.get("name", "").strip()
if name == "":
raise ValidationError("Name cannot be blank")
show_in_bill = json.get("showInBill", False)
try:
price = Decimal(json.get("price", 0))
if price < 0:
raise ValidationError("Price must be a decimal >= 0")
except (ValueError, InvalidOperation):
raise ValidationError("Price must be a decimal >= 0")
modifier_category = json.get("modifierCategory", None)
if modifier_category is None:
raise ValidationError("please choose a modifier category")
modifier_category_id = uuid.UUID(modifier_category["id"])
is_active = json.get("isActive", True)
item = Modifier(name, show_in_bill, price, modifier_category_id, is_active)
request.dbsession.add(item)
transaction.commit()
return modifier_info(item.id, request.dbsession)
@view_config(
request_method="PUT",
route_name="v1_modifiers_id",
renderer="json",
permission="Modifiers",
trans=True,
)
def update(request):
item = (
request.dbsession.query(Modifier)
.filter(Modifier.id == uuid.UUID(request.matchdict["id"]))
.first()
)
json = request.json_body
item.name = json["name"].strip()
if item.name == "":
raise ValidationError("Name cannot be blank")
item.show_in_bill = json["showInBill"]
try:
item.price = Decimal(json["price"])
if item.price < 0:
raise ValidationError("Price must be a decimal >= 0")
except (ValueError, InvalidOperation):
raise ValidationError("Price must be a decimal >= 0")
item.modifier_category_id = uuid.UUID(json["modifierCategory"]["id"])
item.is_active = json["isActive"]
transaction.commit()
return modifier_info(item.id, request.dbsession)
@view_config(
request_method="DELETE",
route_name="v1_modifiers_id",
renderer="json",
permission="Modifiers",
trans=True,
)
def delete(request):
item = (
request.dbsession.query(Modifier)
.filter(Modifier.id == uuid.UUID(request.matchdict["id"]))
.first()
)
request.dbsession.delete(item)
transaction.commit()
return {}
@view_config(
request_method="GET",
route_name="v1_modifiers_new",
renderer="json",
permission="Authenticated",
)
def show_blank(request):
return modifier_info(None, request.dbsession)
@view_config(
request_method="GET",
route_name="v1_modifiers_id",
renderer="json",
permission="Authenticated",
)
def show_id(request):
id_ = uuid.UUID(request.matchdict["id"])
return modifier_info(id_, request.dbsession)
@view_config(
request_method="GET",
route_name="v1_modifiers_list",
renderer="json",
permission="Authenticated",
)
def show_list(request):
return [
modifier_info(item, request.dbsession)
for item in request.dbsession.query(Modifier).order_by(Modifier.name).all()
]
def modifier_info(item, dbsession):
if item is None:
return {"name": "", "showInBill": False, "price": 0, "isActive": True, "modifierCategory": {}}
if type(item) is uuid.UUID:
item = dbsession.query(Modifier).filter(Modifier.id == item).first()
return {
"id": item.id,
"name": item.name,
"showInBill": item.show_in_bill,
"price": item.price,
"isActive": item.is_active,
"modifierCategory": {
"id": item.modifier_category.id,
"name": item.modifier_category.name,
},
}