Files
brewman/brewman/views/reports/purchase_entries.py
T
2018-05-15 14:38:30 +05:30

55 lines
2.3 KiB
Python

import datetime
import pkg_resources
from pyramid.response import FileResponse
from pyramid.view import view_config
from brewman.models.voucher import Voucher, VoucherType
from brewman.views.services.session import session_period_start, session_period_finish
from brewman.views.services.voucher import get_edit_url
@view_config(request_method='GET', route_name='purchase_entries', permission='Purchase Entries')
def html(request):
package, resource = 'brewman:static/index.html'.split(':', 1)
file = pkg_resources.resource_filename(package, resource)
return FileResponse(file, request=request)
@view_config(request_method='GET', route_name='api_purchase_entries', renderer='json', permission='Purchase Entries')
def report_blank(request):
return {'StartDate': session_period_start(request),
'FinishDate': session_period_finish(request), 'Body': [], 'Footer': {}}
@view_config(request_method='GET', route_name='api_purchase_entries', request_param='StartDate', renderer='json',
permission='Purchase Entries')
def report_data(request):
start_date = request.GET.get('StartDate', None)
finish_date = request.GET.get('FinishDate', None)
return build_report(request, start_date, finish_date)
def build_report(request, start_date, finish_date):
report = {'StartDate': start_date, 'FinishDate': finish_date, 'Body': []}
start_date = datetime.datetime.strptime(start_date, '%d-%b-%Y')
finish_date = datetime.datetime.strptime(finish_date, '%d-%b-%Y')
query = request.dbsession.query(Voucher) \
.filter(Voucher.date >= start_date) \
.filter(Voucher.date <= finish_date) \
.filter(Voucher.type == VoucherType.by_name('Purchase').id) \
.order_by(Voucher.date).all()
for voucher in query:
journal = [j for j in voucher.journals if j.debit == -1]
journal = journal[0]
row = {'Date': voucher.date.strftime('%d-%b-%Y'), 'Supplier': journal.ledger.name,
'Url': get_edit_url(request, voucher), 'Products': []}
for item in voucher.inventories:
row['Products'].append(
{'Product': item.product.full_name, 'Quantity': item.quantity, 'Rate': item.rate, 'Tax': item.tax,
'Amount': item.amount})
report['Body'].append(row)
return report