pagination_types.py 1.48 KB
#-*- coding:utf-8 -*-

from datetime import datetime
from dictionary.models import History, Lexeme, visible_vocabularies
import dictionary.forms as dictionary_forms

types = {}

def lexeme_history_list(params, user):
  objects = History.objects.exclude(lexeme=None).distinct().values(
    'lexeme', 'user', 'transaction_began')
  lexemes = Lexeme.objects.filter(
    owner_vocabulary__in=visible_vocabularies(user)).exclude(entry='')
  for field, lookup, value in params['filters']:
    if field == 'user':
      if lookup == 'eq':
        objects = objects.filter(user__pk=value)
      elif lookup == 'ne':
        objects = objects.exclude(user__username=value)
    if field == 'time':
      try:
        date = datetime.strptime(value, '%d.%m.%Y')
        if lookup == 'from':
          objects = objects.filter(transaction_began__gte=date)
        elif lookup == 'to':
          objects = objects.filter(transaction_began__lte=date)
      except ValueError:
        pass

  objects = objects.filter(lexeme__in=lexemes)
  objects = objects.order_by(params['order_by'])
  return objects

LEXEME_HISTORY_FILTERS = {
  'user': (
    u'Użytkownik',
    [('eq', u'równy')],
    dictionary_forms.UserFilterForm(),
    ),
  'time': (
    u'Data',
    [('from', u'od'), ('to', u'do')],
    dictionary_forms.TimeFilterForm(),
    ),
  }

def dummy_perm(user, object, action):
  return True

types['lexeme_history'] = (
  lexeme_history_list,
  'lexeme_history_item.html',
  dummy_perm,
  {},
  LEXEME_HISTORY_FILTERS,
  )