barker/barker/views/reports/discount_report.py

37 lines
1.5 KiB
Python
Raw Normal View History

import datetime
from pyramid.httpexceptions import HTTPForbidden
from pyramid.view import view_config
from sqlalchemy import func
from barker.models import Inventory, Kot, Product, MenuCategory, Settlement, SettleOption, Voucher
@view_config(request_method='GET', route_name='discount_report', renderer='json', permission='Discount Report',
request_param=('s', 'f'))
def discount_report(request):
start_date = datetime.datetime.strptime(request.GET['s'], '%d-%b-%Y %H:%M')
finish_date = datetime.datetime.strptime(request.GET['f'], '%d-%b-%Y %H:%M')
if (datetime.date.today() - start_date.date()).days > 5 and 'Accounts Audit' not in request.effective_principals:
raise HTTPForbidden("Accounts Audit")
amount = func.sum(Inventory.quantity * Inventory.effective_price * Inventory.discount).label('Amount')
list = request.dbsession.query(
MenuCategory.group_type, amount
).join(Voucher.kots).join(Kot.inventories).join(Inventory.product).join(Product.menu_category).filter(
Voucher.date >= start_date,
Voucher.date <= finish_date,
Voucher.is_void == False,
Inventory.discount != 0,
Voucher.settlements.any(~Settlement.settled.in_(
[SettleOption.CASH(), SettleOption.CREDIT_CARD(), SettleOption.BILL_TO_COMPANY(),
SettleOption.UNSETTLED()]))
).group_by(
MenuCategory.group_type
).order_by(
MenuCategory.group_type
).all()
return [{'GroupType': pg, 'Amount': amt} for pg, amt in list]