Product Group

This commit is contained in:
Amritanshu
2019-06-16 01:39:37 +05:30
parent 459ab244ff
commit 52e978b3b0
20 changed files with 321 additions and 174 deletions

View File

@ -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

View File

@ -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')

View File

@ -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
}