Files
barker/barker/views/tax.py
Amritanshu 459ab244ff Tax done
2019-06-15 23:09:43 +05:30

110 lines
3.4 KiB
Python

import uuid
from decimal import Decimal, InvalidOperation
import transaction
from pyramid.view import view_config
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)
def save(request):
json = request.json_body
name = json.get("name", "").strip()
if name == "":
raise ValidationError("Name cannot be blank")
try:
rate = Decimal(json["rate"]) / 100
if rate < 0:
raise ValidationError("Tax Rate must be a decimal >= 0")
except (ValueError, InvalidOperation):
raise ValidationError("Tax Rate must be a decimal >= 0")
item = Tax(name, rate)
request.dbsession.add(item)
transaction.commit()
return tax_info(item.id, request.dbsession)
@view_config(request_method='PUT', route_name='v1_taxes_id', renderer='json', permission='Taxes', trans=True)
def update(request):
json = request.json_body
item = (
request.dbsession.query(Tax)
.filter(Tax.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.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)
def delete(request):
item = (
request.dbsession.query(Tax)
.filter(Tax.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 tax_info(None, request.dbsession)
@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')
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')
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
})
return taxes
def tax_info(id_, dbsession):
if id_ is None:
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
}
return tax