Sith/core/lookups.py

130 lines
3.8 KiB
Python
Raw Normal View History

# -*- coding:utf-8 -*
#
# Copyright 2016,2017
# - Skia <skia@libskia.so>
#
# Ce fichier fait partie du site de l'Association des Étudiants de l'UTBM,
# http://ae.utbm.fr.
#
# This program is free software; you can redistribute it and/or modify it under
# the terms of the GNU General Public License a published by the Free Software
# Foundation; either version 3 of the License, or (at your option) any later
# version.
#
# This program is distributed in the hope that it will be useful, but WITHOUT
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
# details.
#
# You should have received a copy of the GNU General Public License along with
# this program; if not, write to the Free Sofware Foundation, Inc., 59 Temple
# Place - Suite 330, Boston, MA 02111-1307, USA.
#
#
2016-08-24 19:49:46 +00:00
from django.core.exceptions import PermissionDenied
from ajax_select import register, LookupChannel
from core.views.site import search_user
2016-11-25 12:47:09 +00:00
from core.models import User, Group, SithFile
from club.models import Club
from counter.models import Product, Counter
2016-08-24 17:50:22 +00:00
from accounting.models import ClubAccount, Company
2016-09-28 08:53:27 +00:00
def check_token(request):
2016-09-27 20:57:06 +00:00
return ('counter_token' in request.session.keys() and
request.session['counter_token'] and
Counter.objects.filter(token=request.session['counter_token']).exists())
2016-08-24 19:49:46 +00:00
class RightManagedLookupChannel(LookupChannel):
def check_auth(self, request):
2017-02-24 03:36:10 +00:00
if not request.user.was_subscribed and not check_token(request):
2016-08-24 19:49:46 +00:00
raise PermissionDenied
@register('users')
2016-08-24 19:49:46 +00:00
class UsersLookup(RightManagedLookupChannel):
model = User
def get_query(self, q, request):
return search_user(q)
def format_match(self, obj):
return obj.get_mini_item()
def format_item_display(self, item):
return item.get_display_name()
@register('groups')
2016-08-24 19:49:46 +00:00
class GroupsLookup(RightManagedLookupChannel):
model = Group
def get_query(self, q, request):
return self.model.objects.filter(name__icontains=q)[:50]
def format_match(self, obj):
return obj.name
def format_item_display(self, item):
return item.name
@register('clubs')
2016-08-24 19:49:46 +00:00
class ClubLookup(RightManagedLookupChannel):
model = Club
def get_query(self, q, request):
return self.model.objects.filter(name__icontains=q)[:50]
def format_match(self, obj):
return obj.name
def format_item_display(self, item):
return item.name
@register('counters')
2016-08-24 19:49:46 +00:00
class CountersLookup(RightManagedLookupChannel):
model = Counter
def get_query(self, q, request):
return self.model.objects.filter(name__icontains=q)[:50]
def format_item_display(self, item):
return item.name
@register('products')
2016-08-24 19:49:46 +00:00
class ProductsLookup(RightManagedLookupChannel):
model = Product
def get_query(self, q, request):
return (self.model.objects.filter(name__icontains=q) |
self.model.objects.filter(code__icontains=q)).filter(archived=False)[:50]
def format_item_display(self, item):
2016-10-04 14:40:43 +00:00
return "%s (%s)" % (item.name, item.code)
2016-08-24 17:50:22 +00:00
2016-11-25 12:47:09 +00:00
@register('files')
class SithFileLookup(RightManagedLookupChannel):
model = SithFile
def get_query(self, q, request):
return self.model.objects.filter(name__icontains=q)[:50]
2016-08-24 17:50:22 +00:00
@register('club_accounts')
2016-08-24 19:49:46 +00:00
class ClubAccountLookup(RightManagedLookupChannel):
2016-08-24 17:50:22 +00:00
model = ClubAccount
def get_query(self, q, request):
return self.model.objects.filter(name__icontains=q)[:50]
def format_item_display(self, item):
return item.name
@register('companies')
2016-08-24 19:49:46 +00:00
class CompaniesLookup(RightManagedLookupChannel):
2016-08-24 17:50:22 +00:00
model = Company
def get_query(self, q, request):
return self.model.objects.filter(name__icontains=q)[:50]
def format_item_display(self, item):
return item.name