Product Group
This commit is contained in:
@ -89,13 +89,14 @@ class ProductGroup(Base):
|
||||
is_fixture = Column('is_fixture', Boolean, nullable=False)
|
||||
sort_order = Column('sort_order', Numeric, nullable=False)
|
||||
|
||||
def __init__(self, name, discount_limit, is_modifier_compulsory, group_type, is_active, sort_order, id=None):
|
||||
def __init__(self, name, discount_limit, is_modifier_compulsory, group_type, is_active, sort_order, is_fixture=False, id=None):
|
||||
self.name = name
|
||||
self.discount_limit = discount_limit
|
||||
self.is_modifier_compulsory = is_modifier_compulsory
|
||||
self.group_type = group_type
|
||||
self.is_active = is_active
|
||||
self.sort_order = sort_order
|
||||
self.is_fixture = is_fixture
|
||||
self.id = id
|
||||
|
||||
|
||||
|
||||
@ -53,10 +53,7 @@ def includeme(config):
|
||||
config.add_route("v1_product_groups_new", "/v1/product-groups/new")
|
||||
config.add_route("v1_product_groups_id", "/v1/product-groups/{id}")
|
||||
config.add_route("v1_product_groups_list", "/v1/product-groups")
|
||||
|
||||
config.add_route('product', '/Product.json')
|
||||
config.add_route('product_list', '/Products.json')
|
||||
config.add_route('product_id', '/Product/{id}.json')
|
||||
config.add_route("v1_product_group_types_list", "/v1/product-group-types")
|
||||
|
||||
config.add_route('product_group', '/ProductGroup.json')
|
||||
config.add_route('product_group_list', '/ProductGroups.json')
|
||||
|
||||
@ -1,4 +1,5 @@
|
||||
import uuid
|
||||
from decimal import Decimal, InvalidOperation
|
||||
|
||||
import transaction
|
||||
from pyramid.response import Response
|
||||
@ -6,37 +7,63 @@ from pyramid.view import view_config
|
||||
|
||||
from barker.exceptions import ValidationFailure
|
||||
from barker.models import Product, ProductGroup
|
||||
from barker.models.validation_exception import ValidationError
|
||||
|
||||
|
||||
@view_config(request_method='PUT', route_name='product_group', renderer='json', permission='Products', trans=True)
|
||||
@view_config(request_method='POST', route_name='v1_product_groups_new', renderer='json', permission='Products', trans=True)
|
||||
def save(request):
|
||||
json = request.json_body
|
||||
item = ProductGroup(json['Name'], json['DiscountLimit'], json['IsModifierCompulsory'], json['GroupType'],
|
||||
json['IsActive'], json['SortOrder'])
|
||||
name = json.get("name", "").strip()
|
||||
if name == "":
|
||||
raise ValidationError("Name cannot be blank")
|
||||
try:
|
||||
discount_limit = Decimal(json["discountLimit"]) / 100
|
||||
if discount_limit < 0 or discount_limit > 1:
|
||||
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)
|
||||
group_type = json.get("group_type", "").strip()
|
||||
is_active = json.get("isActive", True)
|
||||
item = ProductGroup(name, discount_limit, is_modifier_compulsory, group_type, is_active, 0)
|
||||
request.dbsession.add(item)
|
||||
transaction.commit()
|
||||
item = request.dbsession.query(ProductGroup).filter(ProductGroup.id == item.id).first()
|
||||
return product_group_info(item)
|
||||
return product_group_info(item.id, request.dbsession)
|
||||
|
||||
|
||||
@view_config(request_method='POST', route_name='product_group_id', renderer='json', permission='Products', trans=True)
|
||||
@view_config(request_method='PUT', route_name='v1_product_groups_id', renderer='json', permission='Products', trans=True)
|
||||
def update(request):
|
||||
item = request.dbsession.query(ProductGroup).filter(ProductGroup.id == uuid.UUID(request.matchdict['id'])).first()
|
||||
json = request.json_body
|
||||
item.name = json['Name']
|
||||
item.discount_limit = json['DiscountLimit']
|
||||
item.is_modifier_compulsory = json['IsModifierCompulsory']
|
||||
item.group_type = json['GroupType']
|
||||
item.is_active = json['IsActive']
|
||||
item.sort_order = json['SortOrder']
|
||||
item = (
|
||||
request.dbsession.query(ProductGroup)
|
||||
.filter(ProductGroup.id == uuid.UUID(request.matchdict["id"]))
|
||||
.first()
|
||||
)
|
||||
if item.is_fixture:
|
||||
raise ValidationError(
|
||||
"{0} is a fixture and cannot be edited or deleted.".format(item.full_name)
|
||||
)
|
||||
item.name = json['name'].strip()
|
||||
try:
|
||||
item.discount_limit = Decimal(json["discountLimit"]) / 100
|
||||
if item.discount_limit < 0 or item.discount_limit > 1:
|
||||
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.group_type = json.get("group_type", "").strip()
|
||||
item.is_active = json.get("isActive", True)
|
||||
transaction.commit()
|
||||
item = request.dbsession.query(ProductGroup).filter(ProductGroup.id == item.id).first()
|
||||
return product_group_info(item)
|
||||
return product_group_info(item.id, request.dbsession)
|
||||
|
||||
|
||||
@view_config(request_method='DELETE', route_name='product_group_id', renderer='json', permission='Products', trans=True)
|
||||
@view_config(request_method='DELETE', route_name='v1_product_groups_id', renderer='json', permission='Products', trans=True)
|
||||
def delete(request):
|
||||
item = request.dbsession.query(ProductGroup).filter(ProductGroup.id == uuid.UUID(request.matchdict['id'])).first()
|
||||
item = (
|
||||
request.dbsession.query(ProductGroup)
|
||||
.filter(ProductGroup.id == uuid.UUID(request.matchdict["id"]))
|
||||
.first()
|
||||
)
|
||||
if item is None:
|
||||
response = Response("Product Group not Found")
|
||||
response.status_int = 500
|
||||
@ -50,30 +77,33 @@ def delete(request):
|
||||
return response
|
||||
|
||||
|
||||
@view_config(request_method='GET', route_name='product_group_id', renderer='json', permission='Authenticated')
|
||||
@view_config(request_method='GET', route_name='v1_product_groups_new', renderer='json', permission='Authenticated')
|
||||
def show_blank(request):
|
||||
return product_group_info(None, request.dbsession)
|
||||
|
||||
|
||||
@view_config(request_method='GET', route_name='v1_product_groups_id', renderer='json', permission='Authenticated')
|
||||
def show_id(request):
|
||||
id = uuid.UUID(request.matchdict['id'])
|
||||
item = request.dbsession.query(ProductGroup).filter(ProductGroup.id == id).first()
|
||||
return product_group_info(item)
|
||||
return product_group_info(uuid.UUID(request.matchdict["id"]), request.dbsession)
|
||||
|
||||
|
||||
@view_config(request_method='GET', route_name='product_group_list', renderer='json', permission='Authenticated')
|
||||
@view_config(request_method='GET', route_name='v1_product_groups_list', renderer='json', permission='Authenticated')
|
||||
def show_list(request):
|
||||
list = request.dbsession.query(ProductGroup).order_by(ProductGroup.sort_order).order_by(ProductGroup.name).all()
|
||||
list_ = request.dbsession.query(ProductGroup).order_by(ProductGroup.sort_order).order_by(ProductGroup.name).all()
|
||||
product_groups = []
|
||||
for item in list:
|
||||
product_groups.append(product_group_info(item))
|
||||
for item in list_:
|
||||
product_groups.append(product_group_info(item, request.dbsession))
|
||||
return product_groups
|
||||
|
||||
|
||||
@view_config(request_method='GET', route_name='product_group_list', renderer='json', request_param='s',
|
||||
@view_config(request_method='GET', route_name='v1_product_groups_list', renderer='json', request_param='s',
|
||||
permission='Authenticated')
|
||||
def sale_list(request):
|
||||
list = request.dbsession.query(
|
||||
list_ = request.dbsession.query(
|
||||
ProductGroup
|
||||
).filter(ProductGroup.is_active == True).order_by(ProductGroup.sort_order).order_by(ProductGroup.name).all()
|
||||
product_groups = []
|
||||
for item in list:
|
||||
for item in list_:
|
||||
products = request.dbsession.query(
|
||||
Product
|
||||
).filter(
|
||||
@ -99,40 +129,52 @@ def sale_list(request):
|
||||
return product_groups
|
||||
|
||||
|
||||
@view_config(request_method='POST', route_name='product_group_list', renderer='json', permission='Products', trans=True)
|
||||
@view_config(request_method='POST', route_name='v1_product_groups_list', renderer='json', permission='Products', trans=True)
|
||||
def sort_order(request):
|
||||
json = request.json_body
|
||||
for index, item in enumerate(json):
|
||||
request.dbsession.query(
|
||||
ProductGroup
|
||||
).filter(
|
||||
ProductGroup.id == uuid.UUID(item['ProductGroupID'])
|
||||
ProductGroup.id == uuid.UUID(item['id'])
|
||||
).update(
|
||||
{ProductGroup.sort_order: index}
|
||||
)
|
||||
return True
|
||||
|
||||
|
||||
@view_config(request_method='GET', route_name='product_group_type_list', renderer='json', permission='Authenticated')
|
||||
@view_config(request_method='GET', route_name='v1_product_group_types_list', renderer='json', permission='Authenticated')
|
||||
def product_group_type_list(request):
|
||||
list = request.dbsession.query(
|
||||
list_ = request.dbsession.query(
|
||||
ProductGroup.group_type
|
||||
).group_by(
|
||||
ProductGroup.group_type
|
||||
).order_by(
|
||||
ProductGroup.group_type
|
||||
).all()
|
||||
return [item.group_type for item in list]
|
||||
return [item.group_type for item in list_]
|
||||
|
||||
|
||||
def product_group_info(item):
|
||||
def product_group_info(item, dbsession):
|
||||
if item is None:
|
||||
return {
|
||||
'name': "",
|
||||
'discountLimit': 0,
|
||||
'isModifierCompulsory': False,
|
||||
'groupType': "",
|
||||
'isActive': True,
|
||||
'isFixture': False,
|
||||
'sortOrder': 0
|
||||
}
|
||||
if type(item) is uuid.UUID:
|
||||
item = dbsession.query(ProductGroup).filter(ProductGroup.id == item).first()
|
||||
return {
|
||||
'ProductGroupID': item.id,
|
||||
'Name': item.name,
|
||||
'DiscountLimit': item.discount_limit,
|
||||
'IsModifierCompulsory': item.is_modifier_compulsory,
|
||||
'GroupType': item.group_type,
|
||||
|
||||
'IsActive': item.is_active,
|
||||
'SortOrder': item.sort_order
|
||||
'id': item.id,
|
||||
'name': item.name,
|
||||
'discountLimit': item.discount_limit,
|
||||
'isModifierCompulsory': item.is_modifier_compulsory,
|
||||
'groupType': item.group_type,
|
||||
'isActive': item.is_active,
|
||||
'isFixture': item.is_fixture,
|
||||
'sortOrder': item.sort_order
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user