summaryrefslogtreecommitdiff
path: root/app/sightings/views.py
blob: 6f536b632a52ad99e2246f9098f3cb44dae6b447 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
from django.views.generic.detail import DetailView
from django.views.generic import ListView
from django.contrib.auth.models import User
from django.utils import timezone
from utils.views import PaginatedListView,LuxDetailView
from .models import AP, Sighting, FieldNote
from django.db.models import Subquery


class SightingListView(PaginatedListView):
    model = Sighting

    def get_queryset(self):
        qs_ids = Sighting.objects.order_by('ap__id', '-pub_date').distinct('ap').values_list('id', flat=True)
        return Sighting.objects.filter(id__in=qs_ids).order_by('-pub_date').prefetch_related('ap')
    
    def get_context_data(self, **kwargs):
        context = super(SightingListView, self).get_context_data(**kwargs)
        context['breadcrumbs'] = ['dialogues',]
        return context


class LifeListView(ListView):
    template_name = 'sightings/life-list.html'

    def get_queryset(self):
        return Sighting.objects.filter(ap__apclass__kind=1).order_by('ap__id').distinct('ap')

    def get_context_data(self, **kwargs):
        context = super(LifeListView, self).get_context_data(**kwargs)
        context['breadcrumbs'] = ['dialogues',]
        return context


class NotLifeListView(ListView):
    template_name = 'sightings/not_life_list.html'

    def get_queryset(self):
        return AP.objects.filter(apclass__kind=1).filter(have_seen=False)
    
    def get_context_data(self, **kwargs):
        context = super(NotLifeListView, self).get_context_data(**kwargs)
        context['breadcrumbs'] = ['dialogues',]
        return context


class YearListView(ListView):
    template_name = 'sightings/year-list.html'

    def get_queryset(self):
        qs = Sighting.objects.filter(
            pk__in=Subquery(
               Sighting.objects.filter(ap__apclass__kind=1).filter(pub_date__year=self.kwargs['year']).order_by('ap_id').distinct('ap').values('pk')
            )
        ).order_by('-pub_date')
        return qs #Sighting.objects.filter(ap__apclass__kind=1).filter(pub_date__year=self.kwargs['year']).order_by('ap__id','pub_date').distinct('ap')

    def get_context_data(self, **kwargs):
        # Call the base implementation first to get a context
        context = super(YearListView, self).get_context_data(**kwargs)
        context['year'] = timezone.now().year
        return context


class SightingListUserView(PaginatedListView):
    template_name = 'archives/sightings.html'

    def get_queryset(self):
        return Sighting.objects.filter(
            seen_by__username=self.kwargs['user']
        )

    def get_context_data(self, **kwargs):
        # Call the base implementation first to get a context
        context = super(SightingListUserView, self).get_context_data(**kwargs)
        context['user'] = User.objects.get(username=self.kwargs['user'])
        return context


class SightingDetailView(LuxDetailView):
    model = AP

    def get_context_data(self, **kwargs):
        # Call the base implementation first to get a context
        context = super(SightingDetailView, self).get_context_data(**kwargs)
        context['field_notes'] = FieldNote.objects.filter(
                sighting__ap__slug=self.kwargs['slug']
        )
        context['sighting'] = Sighting.objects.filter(
            ap__slug=self.kwargs['slug']
        ).prefetch_related('location')
        return context