Sith/core/lookups.py

155 lines
4.0 KiB
Python
Raw Permalink Normal View History

2023-04-06 11:08:42 +00:00
# -*- coding:utf-8 -*-
#
# Copyright 2023 © AE UTBM
# ae@utbm.fr / ae.info@utbm.fr
2023-04-06 11:08:42 +00:00
# All contributors are listed in the CONTRIBUTORS file.
#
# This file is part of the website of the UTBM Student Association (AE UTBM),
# https://ae.utbm.fr.
#
2023-04-06 11:08:42 +00:00
# You can find the whole source code at https://github.com/ae-utbm/sith3
#
# LICENSED UNDER THE GNU GENERAL PUBLIC LICENSE VERSION 3 (GPLv3)
# SEE : https://raw.githubusercontent.com/ae-utbm/sith3/master/LICENSE
# OR WITHIN THE LOCAL FILE "LICENSE"
#
2023-04-06 11:08:42 +00:00
# PREVIOUSLY LICENSED UNDER THE MIT LICENSE,
# SEE : https://raw.githubusercontent.com/ae-utbm/sith3/master/LICENSE.old
# OR WITHIN THE LOCAL FILE "LICENSE.old"
#
2024-06-24 11:07:36 +00:00
from ajax_select import LookupChannel, register
2016-08-24 19:49:46 +00:00
from django.core.exceptions import PermissionDenied
2016-08-24 17:50:22 +00:00
from accounting.models import ClubAccount, Company
2024-06-24 11:07:36 +00:00
from club.models import Club
from core.models import Group, SithFile, User
from core.views.site import search_user
from counter.models import Counter, Customer, Product
2017-06-12 07:42:03 +00:00
2016-09-28 08:53:27 +00:00
def check_token(request):
2018-10-04 19:29:19 +00:00
return (
"counter_token" in request.session.keys()
and request.session["counter_token"]
and Counter.objects.filter(token=request.session["counter_token"]).exists()
)
2017-06-12 07:42:03 +00:00
2016-09-27 20:57:06 +00:00
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
2017-06-12 07:42:03 +00:00
2018-10-04 19:29:19 +00:00
@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()
2017-06-12 07:42:03 +00:00
2022-12-19 19:55:33 +00:00
@register("customers")
class CustomerLookup(RightManagedLookupChannel):
model = Customer
def get_query(self, q, request):
users = search_user(q)
return [user.customer for user in users]
def format_match(self, obj):
return obj.user.get_mini_item()
def format_item_display(self, obj):
return f"{obj.user.get_display_name()} ({obj.account_id})"
2018-10-04 19:29:19 +00:00
@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
2017-06-12 07:42:03 +00:00
2018-10-04 19:29:19 +00:00
@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
2017-06-12 07:42:03 +00:00
2018-10-04 19:29:19 +00:00
@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
2017-06-12 07:42:03 +00:00
2018-10-04 19:29:19 +00:00
@register("products")
2016-08-24 19:49:46 +00:00
class ProductsLookup(RightManagedLookupChannel):
model = Product
def get_query(self, q, request):
2018-10-04 19:29:19 +00:00
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
2017-06-12 07:42:03 +00:00
2018-10-04 19:29:19 +00:00
@register("files")
2016-11-25 12:47:09 +00:00
class SithFileLookup(RightManagedLookupChannel):
model = SithFile
def get_query(self, q, request):
return self.model.objects.filter(name__icontains=q)[:50]
2017-06-12 07:42:03 +00:00
2018-10-04 19:29:19 +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
2017-06-12 07:42:03 +00:00
2018-10-04 19:29:19 +00:00
@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