Separate the autocompletion logic form the views

This commit is contained in:
Martin Pépin 2020-07-04 13:50:19 +02:00
parent fbbc9937f6
commit 9a90f19502
No known key found for this signature in database
GPG key ID: E7520278B1774448
12 changed files with 78 additions and 82 deletions

View file

@ -1,10 +1,7 @@
from django.contrib.auth import get_user_model
from django.contrib.auth.mixins import PermissionRequiredMixin
from django.db.models import Q
from django.http import Http404
from django.views.generic import TemplateView
from shared.views import autocomplete
from shared import autocomplete
User = get_user_model()
@ -60,39 +57,3 @@ class KfetAutocomplete(autocomplete.Compose):
("users_notcof", OthersSearch()),
("clippers", autocomplete.LDAPSearch()),
]
kfet_autocomplete = KfetAutocomplete()
class AccountCreateAutocompleteView(PermissionRequiredMixin, TemplateView):
template_name = "kfet/account_create_autocomplete.html"
permission_required = "kfet.is_team"
def get_context_data(self, **kwargs):
ctx = super().get_context_data(**kwargs)
if "q" not in self.request.GET:
raise Http404
q = self.request.GET["q"]
ctx["q"] = q
results = kfet_autocomplete.search(q.split())
ctx["options"] = sum((len(res) for res in results.values()))
ctx.update(results)
return ctx
class AccountSearchAutocompleteView(PermissionRequiredMixin, TemplateView):
template_name = "kfet/account_search_autocomplete.html"
permission_required = "kfet.is_team"
def get_context_data(self, **kwargs):
ctx = super().get_context_data(**kwargs)
if "q" not in self.request.GET:
raise Http404
q = self.request.GET["q"]
ctx["q"] = q
ctx["accounts"] = [
(user.profile.account_kfet.trigramme, user.get_full_name())
for user in KfetAccountSearch().search(q.split())
]
return ctx

View file

@ -1,7 +1,7 @@
from django.contrib.auth.decorators import permission_required
from django.urls import include, path, register_converter
from kfet import autocomplete, converters, views
from kfet import converters, views
from kfet.decorators import teamkfet_required
register_converter(converters.TrigrammeConverter, "trigramme")
@ -38,13 +38,13 @@ urlpatterns = [
),
path(
"autocomplete/account_new",
autocomplete.AccountCreateAutocompleteView.as_view(),
views.AccountCreateAutocompleteView.as_view(),
name="kfet.account.create.autocomplete",
),
# Account - Search
path(
"autocomplete/account_search",
autocomplete.AccountSearchAutocompleteView.as_view(),
views.AccountSearchAutocompleteView.as_view(),
name="kfet.account.search.autocomplete",
),
# Account - Read

View file

@ -27,6 +27,7 @@ from django.views.generic.edit import CreateView, DeleteView, UpdateView
from gestioncof.models import CofProfile
from kfet import KFET_DELETED_TRIGRAMME, consumers
from kfet.auth.decorators import kfet_password_auth
from kfet.autocomplete import KfetAccountSearch, KfetAutocomplete
from kfet.config import kfet_config
from kfet.decorators import teamkfet_required
from kfet.forms import (
@ -2586,3 +2587,41 @@ class ArticleStatSales(ScaleMixin, JSONDetailView):
},
]
return context
# ---
# Autocompletion views
# ---
class AccountCreateAutocompleteView(PermissionRequiredMixin, TemplateView):
template_name = "kfet/account_create_autocomplete.html"
permission_required = "kfet.is_team"
def get_context_data(self, **kwargs):
ctx = super().get_context_data(**kwargs)
if "q" not in self.request.GET:
raise Http404
q = self.request.GET["q"]
ctx["q"] = q
results = KfetAutocomplete().search(q.split())
ctx["options"] = sum((len(res) for res in results.values()))
ctx.update(results)
return ctx
class AccountSearchAutocompleteView(PermissionRequiredMixin, TemplateView):
template_name = "kfet/account_search_autocomplete.html"
permission_required = "kfet.is_team"
def get_context_data(self, **kwargs):
ctx = super().get_context_data(**kwargs)
if "q" not in self.request.GET:
raise Http404
q = self.request.GET["q"]
ctx["q"] = q
ctx["accounts"] = [
(user.profile.account_kfet.trigramme, user.get_full_name())
for user in KfetAccountSearch().search(q.split())
]
return ctx