1 # -*- coding: utf-8 -*-
 
   2 # This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later.
 
   3 # Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information.
 
   5 from dictionary.models import Note, Qualifier
 
   6 from django.views.generic.list import ListView
 
   7 from django.db.models import Count, Q
 
  10 class NotesView(ListView):
 
  11     def get_queryset(self):
 
  12         objects = Note.objects.select_related('book').all()
 
  16             self.qualifier = Qualifier.objects.get(qualifier=self.request.GET.get('qual'))
 
  17         except Qualifier.DoesNotExist:
 
  20             filters['qualifier'] = Q(qualifiers=self.qualifier)
 
  22         self.language = self.request.GET.get('lang')
 
  24             filters['language'] = Q(language=self.language)
 
  26         self.fn_type = self.request.GET.get('type')
 
  28             filters['fn_type'] = Q(fn_type=self.fn_type)
 
  30         self.letter = self.request.GET.get('ltr')
 
  31         if self.letter == "0-9":
 
  32             objects = objects.filter(sort_key__regex=r"^[0-9]")
 
  33             #filters['letter'] = Q(sort_key__regex=r"^[0-9]")
 
  35             objects = objects.filter(sort_key__startswith=self.letter)
 
  36             #filters['letter'] = Q(sort_key__startswith=self.letter)
 
  38         self.letters = ["0-9"] + [chr(a) for a in range(ord('a'), ord('z')+1)]
 
  41         for key, fltr in filters.items():
 
  42             if key != 'qualifier':
 
  43                 nobj = nobj.filter(fltr)
 
  44         self.qualifiers = Qualifier.objects.filter(note__in=nobj).distinct()
 
  47         for key, fltr in filters.items():
 
  49                 nobj = nobj.filter(fltr)
 
  50         self.languages = nobj.order_by('language').values_list(
 
  51             'language', flat=True).distinct()
 
  54         for key, fltr in filters.items():
 
  56                 nobj = nobj.filter(fltr)
 
  57         self.fn_types = nobj.order_by('fn_type').values_list(
 
  58             'fn_type', flat=True).distinct()
 
  60         for f in filters.values():
 
  61             objects = objects.filter(f)
 
  65     def get_context_data(self, **kwargs):
 
  66         context = super(NotesView, self).get_context_data(**kwargs)
 
  67         context['letters'] = self.letters
 
  68         context['letter'] = self.letter
 
  69         context['qualifiers'] = self.qualifiers
 
  70         context['qualifier'] = self.qualifier
 
  71         context['languages'] = self.languages
 
  72         context['language'] = self.language
 
  73         context['fn_types'] = self.fn_types
 
  74         context['fn_type'] = self.fn_type