82 lines
3.3 KiB
Python
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
|
|
|