summer/summer/views/product_group.py

82 lines
3.3 KiB
Python

from decimal import Decimal, InvalidOperation
from summer.models import session_scope
from summer.models.validation_exception import ValidationError
__author__ = 'tanshu'
from summer.models.master import ProductGroup
def save_product_group(json):
name = json['Name'].strip()
try:
max_discount = Decimal(json['MaxDiscount'])
if max_discount < 0 or max_discount > 1:
raise ValidationError("Fraction must be a decimal >= 0 <= 1")
except (ValueError, InvalidOperation):
raise ValidationError("Fraction must be a decimal >= 0 <= 1")
header = json['Header'].strip()
try:
sort_order = Decimal(json['SortOrder'])
if sort_order < 0:
raise ValidationError("Sort Order must be a decimal >= 0")
except (ValueError, InvalidOperation):
raise ValidationError("Sort Order must be a decimal >= 0")
is_active = json['IsActive']
item = ProductGroup(name, max_discount, header, sort_order, is_active)
with session_scope() as DBSession:
DBSession.add(item)
return product_group_info(item.id)
def update_product_group(json):
with session_scope() as DBSession:
item = ProductGroup.by_id(json['ProductGroupID'], session=DBSession)
if item.is_fixture:
raise ValidationError("{0} is a fixture and cannot be edited or deleted.".format(item.name))
item.name = json['Name'].strip()
try:
max_discount = Decimal(json['MaxDiscount'])
if max_discount < 0 or max_discount > 1:
raise ValidationError("Fraction must be a decimal >= 0 <= 1")
except (ValueError, InvalidOperation):
raise ValidationError("Fraction must be a decimal >= 0 <= 1")
item.max_discount = max_discount
item.header = json['Header'].strip()
try:
sort_order = Decimal(json['SortOrder'])
if sort_order < 0:
raise ValidationError("Sort Order must be a decimal >= 0")
except (ValueError, InvalidOperation):
raise ValidationError("Sort Order must be a decimal >= 0")
item.sort_order = sort_order
item.is_active = json['IsActive']
return product_group_info(item.id)
def show_list():
with session_scope() as DBSession:
list = DBSession.query(ProductGroup).order_by(ProductGroup.sort_order).order_by(ProductGroup.name)
product_groups = []
for item in list:
product_groups.append(
{'ProductGroupID': item.id, 'Name': item.name, 'MaxDiscount': item.max_discount, 'Header': item.header,
'IsActive': item.is_active, 'IsFixture': item.is_fixture, 'SortOrder': item.sort_order})
return product_groups
def product_group_info(id):
with session_scope() as DBSession:
if id is None:
item = {'Name': '', 'MaxDiscount': 1, 'Header': '', 'IsActive': True, 'IsFixture': False, 'SortOrder': 0}
else:
product_group = ProductGroup.by_id(id, session=DBSession)
return {'ProductGroupID': product_group.id, 'Name': product_group.name,
'MaxDiscount': product_group.max_discount, 'Header': product_group.header,
'IsActive': product_group.is_active, 'IsFixture': product_group.is_fixture,
'SortOrder': product_group.sort_order}
return item