예제 #1
0
 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
예제 #2
0
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}