Began versioning.
[insider.git] / insider / views.py
1 from datetime import datetime, timedelta
2
3 from django.core.urlresolvers import reverse
4 from django.shortcuts import render_to_response
5 from django.template import RequestContext
6 from django.utils.safestring import mark_safe
7 from django.views.generic import ListView
8
9 from django_tables2 import Table, LinkColumn
10 from django_tables2.utils import A
11 from django_tables2.views import SingleTableMixin
12
13 from .models import Company, Person, Ticker, Transaction
14
15
16 class AttrAccessor (object):
17     def __init__(self, attribute, attributes):
18         self._attribute = attribute
19         self._attributes = attributes
20     def resolve(self, context):
21         return {'year': 1000}
22         obj = getattr(context, self._attribute)
23         print(obj)
24         print(self._attributes)
25         return dict((a, getattr(obj, a)) for a in self._attributes)
26
27
28 class TransactionTable(Table):
29     id = LinkColumn('transaction', args=[A('pk')])
30     person = LinkColumn('person', args=[A('person.pk')])
31     date = LinkColumn(
32         'date', kwargs=dict((x, A('date.{}'.format(x)))
33                             for x in ['year', 'month', 'day']))
34     ticker = LinkColumn('ticker', args=[A('ticker.pk')])
35
36     class Meta:
37         model = Transaction
38         order_by = '-date'
39
40
41 class TransactionTableView(SingleTableMixin, ListView):
42     model = Transaction
43     table_class = TransactionTable
44
45
46 def _detail(request, title, transactions):
47     table = TransactionTable(transactions, order_by=request.GET.get('sort'))
48     table.paginate(page=request.GET.get('page', 1))
49     return render_to_response(
50         'table.html', {'title': title, 'table': table},
51         context_instance=RequestContext(request))
52
53 def company(request, pk):
54     tickers = Ticker.objects.filter(company__id=pk)
55     #tks = [ticker.pk for ticker in tickers]
56     return _detail(request, Company.objects.get(pk=pk),
57                    Transaction.objects.filter(ticker__in=tickers))
58
59 def person(request, pk):
60     return _detail(request, Person.objects.get(pk=pk),
61                    Transaction.objects.filter(person__id=pk))
62
63 def ticker(request, pk):
64     ticker = Ticker.objects.get(pk=pk)
65     company = ticker.company
66     url = reverse('company', args=[company.id])
67     title = mark_safe(u'{} (<a href="{}">{}</a>)'.format(
68             ticker, url, company))
69     return _detail(request, title, Transaction.objects.filter(ticker__id=pk))
70
71 def date(request, **kwargs):
72     for k,v in kwargs.items():
73         kwargs[k] = int(v)
74     date = datetime(**kwargs)
75     next_date = date.date() + timedelta(days=1)
76     return _detail(request, date.date().isoformat(),
77                    Transaction.objects.filter(date__range=(date,next_date)))