2017-04-24 15:51:12 +00:00
|
|
|
#
|
2023-04-04 16:39:45 +00:00
|
|
|
# Copyright 2023 © AE UTBM
|
|
|
|
# ae@utbm.fr / ae.info@utbm.fr
|
2017-04-24 15:51:12 +00:00
|
|
|
#
|
2023-04-04 16:39:45 +00:00
|
|
|
# This file is part of the website of the UTBM Student Association (AE UTBM),
|
|
|
|
# https://ae.utbm.fr.
|
2017-04-24 15:51:12 +00:00
|
|
|
#
|
2024-09-22 23:37:25 +00:00
|
|
|
# You can find the source code of the website at https://github.com/ae-utbm/sith
|
2017-04-24 15:51:12 +00:00
|
|
|
#
|
2023-04-04 16:39:45 +00:00
|
|
|
# LICENSED UNDER THE GNU GENERAL PUBLIC LICENSE VERSION 3 (GPLv3)
|
2024-09-23 08:25:27 +00:00
|
|
|
# SEE : https://raw.githubusercontent.com/ae-utbm/sith/master/LICENSE
|
2023-04-04 16:39:45 +00:00
|
|
|
# OR WITHIN THE LOCAL FILE "LICENSE"
|
2017-04-24 15:51:12 +00:00
|
|
|
#
|
|
|
|
#
|
|
|
|
|
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-19 21:24:23 +00:00
|
|
|
|
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
|
2024-08-05 08:46:15 +00:00
|
|
|
from counter.utils import is_logged_in_counter
|
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):
|
2024-08-05 08:46:15 +00:00
|
|
|
if not request.user.was_subscribed and not is_logged_in_counter(request):
|
2016-08-24 19:49:46 +00:00
|
|
|
raise PermissionDenied
|
|
|
|
|
2017-06-12 07:42:03 +00:00
|
|
|
|
2024-10-19 22:18:53 +00:00
|
|
|
@register("users") # Migrated
|
2016-08-24 19:49:46 +00:00
|
|
|
class UsersLookup(RightManagedLookupChannel):
|
2016-08-19 21:24:23 +00:00
|
|
|
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
|
|
|
|
2024-10-19 22:18:53 +00:00
|
|
|
@register("customers") # Never used
|
2022-12-19 19:55:33 +00:00
|
|
|
class CustomerLookup(RightManagedLookupChannel):
|
|
|
|
model = Customer
|
|
|
|
|
|
|
|
def get_query(self, q, request):
|
2024-08-01 17:02:29 +00:00
|
|
|
return list(Customer.objects.filter(user__in=search_user(q)))
|
2022-12-19 19:55:33 +00:00
|
|
|
|
|
|
|
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})"
|
|
|
|
|
|
|
|
|
2024-10-19 22:18:53 +00:00
|
|
|
@register("groups") # Migrated
|
2016-08-24 19:49:46 +00:00
|
|
|
class GroupsLookup(RightManagedLookupChannel):
|
2016-08-20 20:12:46 +00:00
|
|
|
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
|
|
|
|
2024-10-19 22:18:53 +00:00
|
|
|
@register("clubs") # Migrated
|
2016-08-24 19:49:46 +00:00
|
|
|
class ClubLookup(RightManagedLookupChannel):
|
2016-08-20 20:12:46 +00:00
|
|
|
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
|
|
|
|
2024-10-19 22:18:53 +00:00
|
|
|
@register("counters") # Migrated
|
2016-08-24 19:49:46 +00:00
|
|
|
class CountersLookup(RightManagedLookupChannel):
|
2016-08-19 21:24:23 +00:00
|
|
|
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
|
|
|
|
2024-10-19 22:18:53 +00:00
|
|
|
@register("products") # Migrated
|
2016-08-24 19:49:46 +00:00
|
|
|
class ProductsLookup(RightManagedLookupChannel):
|
2016-08-19 21:24:23 +00:00
|
|
|
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]
|
2016-08-19 21:24:23 +00:00
|
|
|
|
|
|
|
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
|
|
|
|
2024-10-19 22:18:53 +00:00
|
|
|
@register("files") # Migrated
|
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
|
|
|
|
2024-10-19 22:18:53 +00:00
|
|
|
@register("club_accounts") # Migrated
|
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
|
|
|
|
2024-10-19 22:18:53 +00:00
|
|
|
@register("companies") # Migrated
|
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
|