142 lines
3.8 KiB
Python
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,
|
|
},
|
|
}
|