forked from DGNum/gestioCOF
Ajout de la fonctionnalité de recherche
This commit is contained in:
parent
1ad025e046
commit
d60c50490a
4 changed files with 86 additions and 2 deletions
43
petitscours/autocomplete.py
Normal file
43
petitscours/autocomplete.py
Normal file
|
@ -0,0 +1,43 @@
|
|||
from django.db.models import Q
|
||||
from django.urls import reverse
|
||||
from django.utils.translation import gettext_lazy as _
|
||||
|
||||
from petitscours.models import PetitCoursDemande
|
||||
from shared import autocomplete
|
||||
|
||||
class DemandeSearch(autocomplete.ModelSearch):
|
||||
"""
|
||||
Classe fille de Modelsearch qui recherche les requêtes selon qu'elles soient traitées ou non
|
||||
"""
|
||||
model = PetitCoursDemande
|
||||
search_fields = [ "name", "email", "phone"]
|
||||
|
||||
def __init__(self, processed, *args, **kwargs):
|
||||
super().__init__(*args, **kwargs)
|
||||
self.processed = processed
|
||||
if processed:
|
||||
self.verbose_name = _("Demandes traitées")
|
||||
else:
|
||||
self.verbose_name = _("Demandes non traitées")
|
||||
|
||||
def get_queryset_filter(self, *args, **kwargs):
|
||||
qset_filter = super().get_queryset_filter(*args, **kwargs)
|
||||
qset_filter &= Q(traitee=self.processed)
|
||||
return qset_filter
|
||||
|
||||
def result_verbose_name(self, result):
|
||||
return f"{result.name}, {result.created.strftime('%d/%m/%Y')}"
|
||||
|
||||
def result_link(self, demande):
|
||||
return reverse("petits-cours-demande-details", args=(demande.pk,))
|
||||
|
||||
|
||||
|
||||
class DemandeAutocomplete(autocomplete.Compose):
|
||||
search_units = [
|
||||
("not processed", DemandeSearch(False)),
|
||||
("processed", DemandeSearch(True)),
|
||||
]
|
||||
|
||||
|
||||
demande_autocomplete = DemandeAutocomplete()
|
|
@ -1,8 +1,13 @@
|
|||
{% extends "petitscours/base_title.html" %}
|
||||
{% load staticfiles %}
|
||||
|
||||
{% block extra_head %}
|
||||
<script src="{% static 'vendor/jquery/jquery.autocomplete-light.min.js' %}" type="text/javascript"></script>
|
||||
{% endblock %}
|
||||
|
||||
{% block realcontent %}
|
||||
<h2>Demandes de petits cours</h2>
|
||||
<h2>Demandes de petits cours </h2>
|
||||
<input type="text" name="q" id="search_autocomplete" spellcheck="false" placeholder="Chercher un demandeur de petits cours" autocomplete="off">
|
||||
{% if object_list %}
|
||||
<table class="table table-stripped">
|
||||
<thead>
|
||||
|
@ -44,4 +49,27 @@
|
|||
{% else %}
|
||||
<p>Aucune demande :(</p>
|
||||
{% endif %}
|
||||
<!-- Code pour l'autocomplétion de la recherche -->
|
||||
<div class="yourlabs-autocomplete"></div>
|
||||
<script type="text/javascript">
|
||||
$(document).ready(function() {
|
||||
$('input#search_autocomplete').yourlabsAutocomplete({
|
||||
url: '{% url 'petits-cours-demandes-search' %}',
|
||||
minimumCharacters: 3,
|
||||
id: 'search_autocomplete',
|
||||
choiceSelector: 'li:has(a)',
|
||||
box: $(".yourlabs-autocomplete"),
|
||||
});
|
||||
});
|
||||
$('input#search_autocomplete').bind(
|
||||
'selectChoice',
|
||||
function(e, choice, autocomplete) {
|
||||
autocomplete.hide();
|
||||
link = choice.find('a:first');
|
||||
if (link.length && link.attr('href') != undefined) {
|
||||
document.location.href = link.attr('href');
|
||||
}
|
||||
}
|
||||
);
|
||||
</script>
|
||||
{% endblock %}
|
||||
|
|
|
@ -2,7 +2,7 @@ from django.urls import path
|
|||
|
||||
from gestioncof.decorators import buro_required
|
||||
from petitscours import views
|
||||
from petitscours.views import DemandeDetailView, DemandeListView
|
||||
from petitscours.views import DemandeDetailView, DemandeListView, DemandeAutocompleteView
|
||||
|
||||
urlpatterns = [
|
||||
path("inscription", views.inscription, name="petits-cours-inscription"),
|
||||
|
@ -18,6 +18,11 @@ urlpatterns = [
|
|||
buro_required(DemandeListView.as_view()),
|
||||
name="petits-cours-demandes-list",
|
||||
),
|
||||
path(
|
||||
"demandes/search",
|
||||
DemandeAutocompleteView.as_view(),
|
||||
name="petits-cours-demandes-search",
|
||||
),
|
||||
path(
|
||||
"demandes/<int:pk>",
|
||||
buro_required(DemandeDetailView.as_view()),
|
||||
|
|
|
@ -22,6 +22,10 @@ from petitscours.models import (
|
|||
PetitCoursDemande,
|
||||
)
|
||||
|
||||
from petitscours.autocomplete import demande_autocomplete
|
||||
from gestioncof.decorators import BuroRequiredMixin
|
||||
|
||||
from shared.views import AutocompleteView
|
||||
|
||||
class DemandeListView(ListView):
|
||||
queryset = PetitCoursDemande.objects.prefetch_related("matieres").order_by(
|
||||
|
@ -45,6 +49,10 @@ class DemandeDetailView(DetailView):
|
|||
context["attributions"] = obj.petitcoursattribution_set.all()
|
||||
return context
|
||||
|
||||
class DemandeAutocompleteView(BuroRequiredMixin, AutocompleteView):
|
||||
template_name = "shared/search_results.html"
|
||||
search_composer = demande_autocomplete
|
||||
|
||||
|
||||
@buro_required
|
||||
def traitement(request, demande_id, redo=False):
|
||||
|
|
Loading…
Reference in a new issue