Removed IsModifierCompulsory from MenuCategory as it is now not needed and minimum in ModifierCategory set to non-zero to achieve the same.

Fix: DiscountLimit was not scaled to 100 in MenuCategory detail. So it is now chaled in the json and scaled back in the frontend for the list as that was not supposed to be scaled.
Feature: Modifier is now done
Fix: In product save, it was checking menu_category second time again instead of sale_category
This commit is contained in:
Amritanshu
2019-06-22 08:49:33 +05:30
parent e13ed38640
commit 20801afc8a
40 changed files with 821 additions and 144 deletions

View File

@ -89,7 +89,6 @@ class MenuCategory(Base):
id = Column("id", GUID(), primary_key=True, default=uuid.uuid4)
name = Column("name", Unicode(255), nullable=False, unique=True)
discount_limit = Column("discount_limit", Numeric, nullable=False)
is_modifier_compulsory = Column("is_modifier_compulsory", Boolean, nullable=False)
is_active = Column("is_active", Boolean, nullable=False)
is_fixture = Column("is_fixture", Boolean, nullable=False)
@ -99,7 +98,6 @@ class MenuCategory(Base):
self,
name,
discount_limit,
is_modifier_compulsory,
is_active,
sort_order,
is_fixture=False,
@ -107,7 +105,6 @@ class MenuCategory(Base):
):
self.name = name
self.discount_limit = discount_limit
self.is_modifier_compulsory = is_modifier_compulsory
self.is_active = is_active
self.sort_order = sort_order
self.is_fixture = is_fixture
@ -152,6 +149,7 @@ class Product(Base):
menu_category = relationship("MenuCategory", backref="products")
sale_category = relationship("SaleCategory", backref="products")
modifier_categories = relationship("ModifierCategory", secondary="modifier_categories_products", order_by="ModifierCategory.sort_order", backref="products")
def __init__(
self,
@ -218,8 +216,6 @@ class ModifierCategory(Base):
maximum = Column("maximum", Integer, nullable=True)
sort_order = Column("sort_order", Numeric, nullable=False)
products = relationship("Product", secondary=modifier_categories_products, backref="modifier_categories")
def __init__(self, name=None, minimum=None, maximum=None, sort_order=0, id=None):
self.id = id
self.name = name

View File

@ -27,10 +27,6 @@ def includeme(config):
config.add_route('merge_kot', '/MergeKot.json')
config.add_route('merge_table', '/MergeTable.json')
config.add_route('modifier', '/Modifier.json')
config.add_route('modifier_list', '/Modifiers.json')
config.add_route('modifier_id', '/Modifier/{id}.json')
config.add_route('move_kot', '/MoveKot.json')
config.add_route('move_table', '/MoveTable.json')
@ -69,7 +65,13 @@ def includeme(config):
config.add_route("v1_modifier_categories_new", "/v1/modifier-categories/new")
config.add_route("v1_modifier_categories_id", "/v1/modifier-categories/{id}")
config.add_route("v1_modifier_categories_list", "/v1/modifier-categories")
config.add_route("v1_modifier_category_types_list", "/v1/modifier-category-types")
config.add_route("modifiers_new", "/modifiers/new")
config.add_route("modifiers_id", "/modifiers/{id}")
config.add_route("modifiers_list", "/modifiers")
config.add_route("v1_modifiers_new", "/v1/modifiers/new")
config.add_route("v1_modifiers_id", "/v1/modifiers/{id}")
config.add_route("v1_modifiers_list", "/v1/modifiers")
config.add_route("v1_bills_new", "/v1/bills/new")
config.add_route("v1_bills_id", "/v1/bills/{id}")

View File

@ -28,9 +28,8 @@ def save(request):
raise ValidationError("Tax Rate must be a decimal >= 0 and <= 100")
except (ValueError, InvalidOperation):
raise ValidationError("Tax Rate must be a decimal >= 0 and <= 100")
is_modifier_compulsory = json.get("isModifierCompulsory", True)
is_active = json.get("isActive", True)
item = MenuCategory(name, discount_limit, is_modifier_compulsory, is_active, 0)
item = MenuCategory(name, discount_limit, is_active, 0)
request.dbsession.add(item)
transaction.commit()
return menu_category_info(item.id, request.dbsession)
@ -61,7 +60,6 @@ def update(request):
raise ValidationError("Tax Rate must be a decimal >= 0 and <= 100")
except (ValueError, InvalidOperation):
raise ValidationError("Tax Rate must be a decimal >= 0 and <= 100")
item.is_modifier_compulsory = json.get("isModifierCompulsory", True)
item.is_active = json.get("isActive", True)
transaction.commit()
return menu_category_info(item.id, request.dbsession)
@ -202,7 +200,6 @@ def menu_category_info(item, dbsession):
return {
"name": "",
"discountLimit": 0,
"isModifierCompulsory": False,
"isActive": True,
"isFixture": False,
"sortOrder": 0,
@ -212,8 +209,7 @@ def menu_category_info(item, dbsession):
return {
"id": item.id,
"name": item.name,
"discountLimit": item.discount_limit,
"isModifierCompulsory": item.is_modifier_compulsory,
"discountLimit": item.discount_limit * 100,
"isActive": item.is_active,
"isFixture": item.is_fixture,
"sortOrder": item.sort_order,

View File

@ -1,117 +1,137 @@
import uuid
from decimal import Decimal, InvalidOperation
import transaction
from pyramid.view import view_config
from sqlalchemy import or_
from barker.models import Modifier, ModifierCategory
from barker.models import Modifier
from barker.models.validation_exception import ValidationError
@view_config(request_method='POST', route_name='modifier', renderer='json', permission='Modifiers', trans=True)
@view_config(
request_method="POST",
route_name="v1_modifiers_new",
renderer="json",
permission="Modifiers",
trans=True,
)
def save(request):
json = request.json_body
item = Modifier(json['Name'], json['ShowInBill'], json['Price'])
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"])
item = Modifier(name, show_in_bill, price, modifier_category_id)
request.dbsession.add(item)
add_groups(item, json['MenuCategoryModifiers'], request.dbsession)
transaction.commit()
item = request.dbsession.query(Modifier).filter(Modifier.id == item.id).first()
return modifier_info(item)
return modifier_info(item.id, request.dbsession)
@view_config(request_method='PUT', route_name='modifier_id', renderer='json', permission='Modifiers', trans=True)
@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 = request.dbsession.query(Modifier).filter(Modifier.id == uuid.UUID(request.matchdict['id'])).first()
item.name = json['Name']
item.show_in_bill = json['ShowInBill']
item.price = json['Price']
add_groups(item, json['MenuCategoryModifiers'], request.dbsession)
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"])
transaction.commit()
item = request.dbsession.query(Modifier).filter(Modifier.id == item.id).first()
return modifier_info(item)
return modifier_info(item.id, request.dbsession)
@view_config(request_method='DELETE', route_name='modifier_id', renderer='json', permission='Modifiers', trans=True)
@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()
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='modifier_id', renderer='json', permission='Authenticated')
@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'])
modifier = request.dbsession.query(Modifier).filter(Modifier.id == id).first()
return modifier_info(modifier)
id_ = uuid.UUID(request.matchdict["id"])
return modifier_info(id_, request.dbsession)
@view_config(request_method='GET', route_name='modifier_list', renderer='json', permission='Authenticated')
@view_config(
request_method="GET",
route_name="v1_modifiers_list",
renderer="json",
permission="Authenticated",
)
def show_list(request):
list = request.dbsession.query(Modifier).order_by(Modifier.name).all()
modifiers = []
for item in list:
modifiers.append({
'ModifierID': item.id,
'Name': item.name,
'ShowInBill': item.show_in_bill,
'Price': item.price
})
return modifiers
return [
modifier_info(item, request.dbsession)
for item in request.dbsession.query(Modifier).order_by(Modifier.name).all()
]
@view_config(request_method='GET', route_name='modifier_list', renderer='json', request_param='pg',
permission='Authenticated')
def show_for_pg(request):
menu_category_id = uuid.UUID(request.GET['pg'])
pgm_list = request.dbsession.query(
MenuCategoryModifier
).filter(
or_(MenuCategoryModifier.menu_category == None, MenuCategoryModifier.menu_category_id == menu_category_id)
).all()
pg_modifiers = []
for item in pgm_list:
pg_modifiers.append({
'ModifierID': item.modifier_id,
'Name': item.modifier.name,
'ShowInBill': item.modifier.show_in_bill,
'Price': item.modifier.price
})
return pg_modifiers
def modifier_info(modifier):
def modifier_info(item, dbsession):
if item is None:
return {"name": "", "showInBill": False, "price": 0, "modifierCategory": {}}
if type(item) is uuid.UUID:
item = dbsession.query(Modifier).filter(Modifier.id == item).first()
return {
'id': modifier.id,
'name': modifier.name,
'showInBill': modifier.show_in_bill,
'price': modifier.price,
'menuCategoryModifiers': [
{
'id': i.id,
'menuCategory': {'id': i.menu_category_id} if i.menu_category_id is not None else None,
'showAutomatically': i.show_automatically
} for i in modifier.menu_categories]
"id": item.id,
"name": item.name,
"showInBill": item.show_in_bill,
"price": item.price,
"modifierCategory": {
"id": item.modifier_category.id,
"name": item.modifier_category.name,
},
}
def add_groups(modifier, groups, dbsession):
all = [p for p in groups if p['MenuCategory'] is None]
if len(all) > 0:
old = [p for p in modifier.menu_categories if p.menu_category_id is None]
if len(old) != 1:
for item in modifier.menu_categories:
dbsession.delete(item)
modifier.menu_categories.clear()
modifier.menu_categories.append(MenuCategoryModifier(None, None, False))
else:
new = {uuid.UUID(p['menuCategory']['id']) for p in groups}
old = {p.menu_category_id for p in modifier.menu_categories}
for pg_id in new - old:
modifier.menu_categories.append(MenuCategoryModifier(pg_id, None, False))
gp = [p for p in modifier.menu_categories if p.menu_category_id in (old - new)]
for item in gp:
dbsession.delete(item)

View File

@ -4,7 +4,6 @@ import transaction
from pyramid.view import view_config
from sqlalchemy import or_
from sqlalchemy.orm import joinedload
from barker.models import ModifierCategory, Product
from barker.models.validation_exception import ValidationError
@ -157,33 +156,17 @@ def show_list(request):
request_method="GET",
route_name="v1_modifier_categories_list",
renderer="json",
request_param="pg",
request_param="p",
permission="Authenticated",
)
def show_for_pg(request):
menu_category_id = uuid.UUID(request.GET["pg"])
pgm_list = (
request.dbsession.query(MenuCategoryModifier)
.filter(
or_(
MenuCategoryModifier.menu_category == None,
MenuCategoryModifier.menu_category_id == menu_category_id,
)
)
.all()
)
product_id = uuid.UUID(request.GET["p"])
product = request.dbsession.query(Product).filter(Product.id == product_id).first()
pg_modifiers = []
for item in pgm_list:
pg_modifiers.append(
{
"ModifierID": item.modifier_id,
"Name": item.modifier.name,
"ShowInBill": item.modifier.show_in_bill,
"Price": item.modifier.price,
}
)
return pg_modifiers
return [
modifier_category_info(item, request.dbsession)
for item in product.modifier_categories
]
def modifier_category_info(item, dbsession):

View File

@ -31,7 +31,7 @@ def save(request):
menu_category_id = uuid.UUID(menu_category["id"])
sale_category = json.get("saleCategory", None)
if menu_category is None:
if sale_category is None:
raise ValidationError("please choose a sale category")
sale_category_id = uuid.UUID(sale_category["id"])