2017-03-14 12:56:57 +00:00
|
|
|
import datetime
|
|
|
|
|
|
|
|
from pyramid.httpexceptions import HTTPForbidden
|
|
|
|
from pyramid.view import view_config
|
|
|
|
from sqlalchemy import func
|
|
|
|
|
2019-06-20 07:45:23 +00:00
|
|
|
from barker.models import Inventory, Kot, Product, MenuCategory, Settlement, SettleOption, Voucher
|
2017-03-14 12:56:57 +00:00
|
|
|
|
|
|
|
|
|
|
|
@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(
|
2019-06-20 07:45:23 +00:00
|
|
|
MenuCategory.group_type, amount
|
|
|
|
).join(Voucher.kots).join(Kot.inventories).join(Inventory.product).join(Product.menu_category).filter(
|
2017-03-14 12:56:57 +00:00
|
|
|
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(
|
2019-06-20 07:45:23 +00:00
|
|
|
MenuCategory.group_type
|
2017-03-14 12:56:57 +00:00
|
|
|
).order_by(
|
2019-06-20 07:45:23 +00:00
|
|
|
MenuCategory.group_type
|
2017-03-14 12:56:57 +00:00
|
|
|
).all()
|
|
|
|
|
|
|
|
return [{'GroupType': pg, 'Amount': amt} for pg, amt in list]
|