TODO: Refactor the product and productgroup tables as per the comments added.
rename the product group table to either product category or menu category move the group_type field from productgroup to products and name it sales category eg. Food, beverage, etc. also, set the tax for sales category and not individual product Added the printers permission to end of permissions and only for owner, set them right
This commit is contained in:
@ -85,7 +85,7 @@ class Tax(Base):
|
||||
|
||||
class ProductGroup(Base):
|
||||
__tablename__ = "product_groups"
|
||||
|
||||
# Peoduct/menu category
|
||||
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)
|
||||
@ -120,7 +120,7 @@ class ProductGroup(Base):
|
||||
class Product(Base):
|
||||
__tablename__ = "products"
|
||||
__table_args__ = (UniqueConstraint("name", "units"),)
|
||||
|
||||
# add sales category instead of group_type in productgroups
|
||||
id = Column("id", GUID(), primary_key=True, default=uuid.uuid4)
|
||||
name = Column("name", Unicode(255), nullable=False)
|
||||
units = Column("units", Unicode(255), nullable=False)
|
||||
@ -271,11 +271,13 @@ class Printer(Base):
|
||||
|
||||
id = Column("id", GUID(), primary_key=True, default=uuid.uuid4)
|
||||
name = Column("name", Unicode(255), unique=True, nullable=False)
|
||||
address = Column("address", Unicode(255), unique=True, nullable=False)
|
||||
cut_code = Column("cut_code", Unicode(255), nullable=False)
|
||||
|
||||
def __init__(self, id=None, name=None, cut_code=None):
|
||||
def __init__(self, name=None, address=None, cut_code=None, id=None):
|
||||
self.id = id
|
||||
self.name = name
|
||||
self.address = address
|
||||
self.cut_code = cut_code
|
||||
|
||||
|
||||
|
||||
@ -86,6 +86,13 @@ def includeme(config):
|
||||
config.add_route('users_id', '/users/{id}')
|
||||
config.add_route('users_list', '/users')
|
||||
|
||||
config.add_route('v1_printers_new', '/v1/printers/new')
|
||||
config.add_route('v1_printers_id', '/v1/printers/{id}')
|
||||
config.add_route('v1_printers_list', '/v1/printers')
|
||||
config.add_route('printers_new', '/printers/new')
|
||||
config.add_route('printers_id', '/printers/{id}')
|
||||
config.add_route('printers_list', '/printers')
|
||||
|
||||
config.add_route('v1_roles_new', '/v1/roles/new')
|
||||
config.add_route('v1_roles_id', '/v1/roles/{id}')
|
||||
config.add_route('v1_roles_list', '/v1/roles')
|
||||
|
||||
@ -77,7 +77,8 @@ def main(argv=sys.argv):
|
||||
Permission('Taxes', uuid.UUID('5c8fcdde-460d-4047-810f-e34fb899fadc')),
|
||||
Permission('Users', uuid.UUID('243447b8-b403-47e6-8b3d-8e76f4df44a9')),
|
||||
Permission('Void Bill', uuid.UUID('e3c76262-adc0-4936-8b4d-217c6292298b')),
|
||||
Permission('Void or Reprinted Bill Report', uuid.UUID('30c8e743-c710-42d7-843a-0b75543b3516'))]
|
||||
Permission('Void or Reprinted Bill Report', uuid.UUID('30c8e743-c710-42d7-843a-0b75543b3516')),
|
||||
Permission('Printers', uuid.UUID('5b66c6f6-003a-4ef8-ba28-49b8ff1ac33c'))]
|
||||
|
||||
for permission in permissions:
|
||||
dbsession.add(permission)
|
||||
|
||||
131
barker/views/printer.py
Normal file
131
barker/views/printer.py
Normal file
@ -0,0 +1,131 @@
|
||||
import uuid
|
||||
import transaction
|
||||
from pyramid.view import view_config
|
||||
|
||||
from barker.models import Printer
|
||||
from barker.models.validation_exception import ValidationError
|
||||
|
||||
|
||||
@view_config(
|
||||
request_method="POST",
|
||||
route_name="v1_printers_new",
|
||||
renderer="json",
|
||||
permission="Printers",
|
||||
trans=True,
|
||||
)
|
||||
def save(request):
|
||||
json = request.json_body
|
||||
name = json.get("name", "").strip()
|
||||
if name == "":
|
||||
raise ValidationError("Name cannot be blank")
|
||||
address = json.get("address", "").strip()
|
||||
if address == "":
|
||||
raise ValidationError("Address cannot be blank")
|
||||
cut_code = json.get("cutCode", "")
|
||||
item = Printer(name, address, cut_code)
|
||||
request.dbsession.add(item)
|
||||
transaction.commit()
|
||||
return printer_info(item.id, request.dbsession)
|
||||
|
||||
|
||||
@view_config(
|
||||
request_method="PUT",
|
||||
route_name="v1_printers_id",
|
||||
renderer="json",
|
||||
permission="Printers",
|
||||
trans=True,
|
||||
)
|
||||
def update(request):
|
||||
json = request.json_body
|
||||
item = (
|
||||
request.dbsession.query(Printer)
|
||||
.filter(Printer.id == uuid.UUID(request.matchdict["id"]))
|
||||
.first()
|
||||
)
|
||||
item.name = json.get("name", "").strip()
|
||||
if item.name == "":
|
||||
raise ValidationError("Name cannot be blank")
|
||||
item.address = json.get("address", "").strip()
|
||||
if item.address == "":
|
||||
raise ValidationError("Address cannot be blank")
|
||||
item.cut_code = json.get("cutCode", "")
|
||||
transaction.commit()
|
||||
item = request.dbsession.query(Printer).filter(Printer.id == item.id).first()
|
||||
return printer_info(item.id, request.dbsession)
|
||||
|
||||
|
||||
@view_config(
|
||||
request_method="DELETE",
|
||||
route_name="v1_printers_id",
|
||||
renderer="json",
|
||||
permission="Printers",
|
||||
trans=True,
|
||||
)
|
||||
def delete(request):
|
||||
item = (
|
||||
request.dbsession.query(Printer)
|
||||
.filter(Printer.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)
|
||||
)
|
||||
request.dbsession.delete(item)
|
||||
transaction.commit()
|
||||
return printer_info(None, request.dbsession)
|
||||
|
||||
|
||||
@view_config(
|
||||
request_method="GET",
|
||||
route_name="v1_printers_new",
|
||||
renderer="json",
|
||||
permission="Authenticated",
|
||||
)
|
||||
def show_blank(request):
|
||||
return printer_info(None, request.dbsession)
|
||||
|
||||
|
||||
@view_config(
|
||||
request_method="GET",
|
||||
route_name="v1_printers_id",
|
||||
renderer="json",
|
||||
permission="Authenticated",
|
||||
)
|
||||
def show_id(request):
|
||||
return printer_info(uuid.UUID(request.matchdict["id"]), request.dbsession)
|
||||
|
||||
|
||||
@view_config(
|
||||
request_method="GET",
|
||||
route_name="v1_printers_list",
|
||||
renderer="json",
|
||||
permission="Authenticated",
|
||||
)
|
||||
def show_list(request):
|
||||
list_ = request.dbsession.query(Printer).order_by(Printer.name).all()
|
||||
printers = []
|
||||
for item in list_:
|
||||
printers.append(
|
||||
{
|
||||
"id": item.id,
|
||||
"name": item.name,
|
||||
"address": item.address,
|
||||
"cutCode": item.cut_code,
|
||||
}
|
||||
)
|
||||
return printers
|
||||
|
||||
|
||||
def printer_info(id_, dbsession):
|
||||
if id_ is None:
|
||||
printer = {"name": "", "address": "", "cutCode": ""}
|
||||
else:
|
||||
item = dbsession.query(Printer).filter(Printer.id == id_).first()
|
||||
printer = {
|
||||
"id": item.id,
|
||||
"name": item.name,
|
||||
"address": item.address,
|
||||
"cutCode": item.cut_code,
|
||||
}
|
||||
return printer
|
||||
@ -8,7 +8,13 @@ from barker.models import Tax
|
||||
from barker.models.validation_exception import ValidationError
|
||||
|
||||
|
||||
@view_config(request_method='POST', route_name='v1_taxes_new', renderer='json', permission='Taxes', trans=True)
|
||||
@view_config(
|
||||
request_method="POST",
|
||||
route_name="v1_taxes_new",
|
||||
renderer="json",
|
||||
permission="Taxes",
|
||||
trans=True,
|
||||
)
|
||||
def save(request):
|
||||
json = request.json_body
|
||||
name = json.get("name", "").strip()
|
||||
@ -26,7 +32,13 @@ def save(request):
|
||||
return tax_info(item.id, request.dbsession)
|
||||
|
||||
|
||||
@view_config(request_method='PUT', route_name='v1_taxes_id', renderer='json', permission='Taxes', trans=True)
|
||||
@view_config(
|
||||
request_method="PUT",
|
||||
route_name="v1_taxes_id",
|
||||
renderer="json",
|
||||
permission="Taxes",
|
||||
trans=True,
|
||||
)
|
||||
def update(request):
|
||||
json = request.json_body
|
||||
item = (
|
||||
@ -38,20 +50,27 @@ def update(request):
|
||||
raise ValidationError(
|
||||
"{0} is a fixture and cannot be edited or deleted.".format(item.full_name)
|
||||
)
|
||||
item.name = json['name'].strip()
|
||||
item.name = json("name", "").strip()
|
||||
if item.name == "":
|
||||
raise ValidationError("Name cannot be blank")
|
||||
try:
|
||||
item.rate = Decimal(json["rate"]) / 100
|
||||
if item.rate <= 0:
|
||||
raise ValidationError("Tax Rate must be a decimal >= 0")
|
||||
except (ValueError, InvalidOperation):
|
||||
raise ValidationError("Tax Rate must be a decimal >= 0")
|
||||
item.rate = json['rate']
|
||||
transaction.commit()
|
||||
item = request.dbsession.query(Tax).filter(Tax.id == item.id).first()
|
||||
return tax_info(item.id, request.dbsession)
|
||||
|
||||
|
||||
@view_config(request_method='DELETE', route_name='v1_taxes_id', renderer='json', permission='Taxes', trans=True)
|
||||
@view_config(
|
||||
request_method="DELETE",
|
||||
route_name="v1_taxes_id",
|
||||
renderer="json",
|
||||
permission="Taxes",
|
||||
trans=True,
|
||||
)
|
||||
def delete(request):
|
||||
item = (
|
||||
request.dbsession.query(Tax)
|
||||
@ -67,43 +86,56 @@ def delete(request):
|
||||
return tax_info(None, request.dbsession)
|
||||
|
||||
|
||||
@view_config(request_method='GET', route_name='v1_taxes_new', renderer='json', permission='Authenticated')
|
||||
@view_config(
|
||||
request_method="GET",
|
||||
route_name="v1_taxes_new",
|
||||
renderer="json",
|
||||
permission="Authenticated",
|
||||
)
|
||||
def show_blank(request):
|
||||
return tax_info(None, request.dbsession)
|
||||
|
||||
|
||||
@view_config(request_method='GET', route_name='v1_taxes_id', renderer='json', permission='Authenticated')
|
||||
@view_config(
|
||||
request_method="GET",
|
||||
route_name="v1_taxes_id",
|
||||
renderer="json",
|
||||
permission="Authenticated",
|
||||
)
|
||||
def show_id(request):
|
||||
return tax_info(uuid.UUID(request.matchdict["id"]), request.dbsession)
|
||||
|
||||
|
||||
@view_config(request_method='GET', route_name='v1_taxes_list', renderer='json', permission='Authenticated')
|
||||
@view_config(
|
||||
request_method="GET",
|
||||
route_name="v1_taxes_list",
|
||||
renderer="json",
|
||||
permission="Authenticated",
|
||||
)
|
||||
def show_list(request):
|
||||
list_ = request.dbsession.query(Tax).order_by(Tax.name).all()
|
||||
taxes = []
|
||||
for item in list_:
|
||||
taxes.append({
|
||||
'id': item.id,
|
||||
'name': item.name,
|
||||
'rate': item.rate,
|
||||
'isFixture': item.is_fixture
|
||||
})
|
||||
taxes.append(
|
||||
{
|
||||
"id": item.id,
|
||||
"name": item.name,
|
||||
"rate": item.rate,
|
||||
"isFixture": item.is_fixture,
|
||||
}
|
||||
)
|
||||
return taxes
|
||||
|
||||
|
||||
def tax_info(id_, dbsession):
|
||||
if id_ is None:
|
||||
tax = {
|
||||
"name": "",
|
||||
"rate": 0,
|
||||
"isFixture": False
|
||||
}
|
||||
tax = {"name": "", "rate": 0, "isFixture": False}
|
||||
else:
|
||||
item = dbsession.query(Tax).filter(Tax.id == id_).first()
|
||||
tax = {
|
||||
'id': item.id,
|
||||
'name': item.name,
|
||||
'rate': item.rate * 100,
|
||||
'isFixture': item.is_fixture
|
||||
"id": item.id,
|
||||
"name": item.name,
|
||||
"rate": item.rate * 100,
|
||||
"isFixture": item.is_fixture,
|
||||
}
|
||||
return tax
|
||||
|
||||
Reference in New Issue
Block a user