from django.contrib.auth import get_user_model from django.db.models import Q from django.urls import reverse from django.utils.translation import gettext_lazy as _ from shared import autocomplete User = get_user_model() class KfetAccountSearch(autocomplete.ModelSearch): model = User search_fields = [ "username", "first_name", "last_name", "profile__account_kfet__trigramme", ] verbose_name = _("Comptes existants") def get_queryset_filter(self, *args, **kwargs): qset_filter = super().get_queryset_filter(*args, **kwargs) qset_filter &= Q(profile__account_kfet__isnull=False) return qset_filter def result_verbose_name(self, user): return "{} ({})".format(user, user.profile.account_kfet.trigramme) def result_uuid(self, user): return user.username class COFMemberSearch(autocomplete.ModelSearch): model = User search_fields = ["username", "first_name", "last_name"] verbose_name = _("Membres du COF") def get_queryset_filter(self, *args, **kwargs): qset_filter = super().get_queryset_filter(*args, **kwargs) qset_filter &= Q(profile__account_kfet__isnull=True) & Q(profile__is_cof=True) return qset_filter def result_uuid(self, user): return user.username def result_link(self, user): return reverse("kfet.account.create.fromuser", args=(user.username,)) class OthersSearch(autocomplete.ModelSearch): model = User search_fields = ["username", "first_name", "last_name"] verbose_name = _("Non-membres du COF") def get_queryset_filter(self, *args, **kwargs): qset_filter = super().get_queryset_filter(*args, **kwargs) qset_filter &= Q(profile__account_kfet__isnull=True) & Q(profile__is_cof=False) return qset_filter def result_uuid(self, user): return user.username def result_link(self, user): return reverse("kfet.account.create.fromuser", args=(user.username,)) class KfetLDAPSearch(autocomplete.LDAPSearch): def result_link(self, clipper): return reverse( "kfet.account.create.fromclipper", args=(clipper.clipper, clipper.fullname) ) class KfetAutocomplete(autocomplete.Compose): search_units = [ ("kfet", KfetAccountSearch()), ("users_cof", COFMemberSearch()), ("users_notcof", OthersSearch()), ("clippers", KfetLDAPSearch()), ] kfet_autocomplete = KfetAutocomplete() class KfetAccountOnlyAutocomplete(autocomplete.Compose): search_units = [("kfet", KfetAccountSearch())] kfet_account_only_autocomplete = KfetAccountOnlyAutocomplete()