def get_many(self, request): """Load barcodes.""" qs = Ticket.select( Ticket, Partner.title, Event.title, TicketSet.title, Order.buyer, Order.phone)\ .join(Partner).switch(Ticket)\ .join(Event).switch(Ticket)\ .join(TicketSet).switch(Ticket)\ .join(Order, JOIN_LEFT_OUTER) return qs
def amount(request): """Provide data for render a month chart.""" user = yield from v1.app.ps.session.load_user(request) if user is None: raise HTTPForbidden(reason='Access denied.') if not 'to' in request.GET: dtto = dt.datetime.now() else: dtto = request.GET.get('to') dtto = parser.parse(dtto) if not 'from' in request.GET: dtfrom = dtto - dt.timedelta(days=30) else: dtfrom = request.GET.get('from') dtfrom = parser.parse(dtfrom) statuses = ('sold', 'revoked', 'passed') qs = Ticket.select(Ticket.modified, Ticket.status, Ticket.price).where( Ticket.modified.between(dtfrom, dtto), Ticket.status << statuses).tuples() statuses = defaultdict(lambda: defaultdict(lambda: 0)) prices = defaultdict(lambda: 0) for modified, status, price in qs: statuses[status][modified.date()] += 1 if status == 'sold': prices[modified.date()] += int(price) labels = [] data = defaultdict(list) values = list() while dtfrom < dtto: dtfrom += dt.timedelta(days=1) labels.append(str(dtfrom.date())) values.append(prices[dtfrom.date()]) for status in ('sold', 'revoked', 'passed'): data[status].append(statuses[status][dtfrom.date()]) return {'labels': labels, 'data': data, 'values': values}