mirror of https://gitlab.crans.org/bde/nk20
Préparation du code pour le système de droits & filtrage par type de note pour l'auto-complétion
This commit is contained in:
parent
142b3359e3
commit
732f8bc3d8
|
@ -125,6 +125,10 @@ class UserAutocomplete(autocomplete.Select2QuerySetView):
|
||||||
Quand une personne cherche un utilisateur par pseudo, une requête est envoyée sur l'API dédiée à l'auto-complétion.
|
Quand une personne cherche un utilisateur par pseudo, une requête est envoyée sur l'API dédiée à l'auto-complétion.
|
||||||
Cette fonction récupère la requête, et renvoie la liste filtrée des utilisateurs par pseudos.
|
Cette fonction récupère la requête, et renvoie la liste filtrée des utilisateurs par pseudos.
|
||||||
"""
|
"""
|
||||||
|
# Un utilisateur non connecté n'a accès à aucune information
|
||||||
|
if not self.request.user.is_authenticated:
|
||||||
|
return User.objects.none()
|
||||||
|
|
||||||
qs = User.objects.all()
|
qs = User.objects.all()
|
||||||
|
|
||||||
if self.q:
|
if self.q:
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
#!/usr/bin/env python
|
#!/usr/bin/env python
|
||||||
|
|
||||||
from dal import autocomplete
|
from dal import autocomplete, forward
|
||||||
from django import forms
|
from django import forms
|
||||||
from .models import Transaction, TransactionTemplate
|
from .models import Transaction, TransactionTemplate
|
||||||
|
|
||||||
|
@ -12,6 +12,8 @@ class TransactionTemplateForm(forms.ModelForm):
|
||||||
# Le champ de destination est remplacé par un champ d'auto-complétion.
|
# Le champ de destination est remplacé par un champ d'auto-complétion.
|
||||||
# Quand des lettres sont tapées, une requête est envoyée sur l'API d'auto-complétion
|
# Quand des lettres sont tapées, une requête est envoyée sur l'API d'auto-complétion
|
||||||
# et récupère les aliases valides
|
# et récupère les aliases valides
|
||||||
|
# Pour force le type d'une note, il faut rajouter le paramètre :
|
||||||
|
# forward=(forward.Const('TYPE', 'note_type') où TYPE est dans {user, club, special}
|
||||||
widgets = {
|
widgets = {
|
||||||
'destination': autocomplete.ModelSelect2(url='note:note_autocomplete',
|
'destination': autocomplete.ModelSelect2(url='note:note_autocomplete',
|
||||||
attrs={
|
attrs={
|
||||||
|
@ -22,9 +24,14 @@ class TransactionTemplateForm(forms.ModelForm):
|
||||||
|
|
||||||
|
|
||||||
class TransactionForm(forms.ModelForm):
|
class TransactionForm(forms.ModelForm):
|
||||||
|
def save(self, commit=True):
|
||||||
|
self.instance.transaction_type = 'transfert'
|
||||||
|
|
||||||
|
super().save(commit)
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
model = Transaction
|
model = Transaction
|
||||||
fields = ('destination', 'reason', 'amount',)
|
fields = ('source', 'destination', 'reason', 'amount',)
|
||||||
|
|
||||||
# Voir ci-dessus
|
# Voir ci-dessus
|
||||||
widgets = {
|
widgets = {
|
||||||
|
@ -32,11 +39,10 @@ class TransactionForm(forms.ModelForm):
|
||||||
attrs={
|
attrs={
|
||||||
'data-placeholder': 'Note ...',
|
'data-placeholder': 'Note ...',
|
||||||
'data-minimum-input-length': 1,
|
'data-minimum-input-length': 1,
|
||||||
}),
|
},),
|
||||||
'destination': autocomplete.ModelSelect2(url='note:note_autocomplete',
|
'destination': autocomplete.ModelSelect2(url='note:note_autocomplete',
|
||||||
attrs={
|
attrs={
|
||||||
'data-placeholder': 'Note ...',
|
'data-placeholder': 'Note ...',
|
||||||
'data-minimum-input-length': 1,
|
'data-minimum-input-length': 1,
|
||||||
}),
|
},),
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -30,6 +30,27 @@ class TransactionCreate(LoginRequiredMixin, CreateView):
|
||||||
return context
|
return context
|
||||||
|
|
||||||
|
|
||||||
|
def get_form(self, form_class=None):
|
||||||
|
"""
|
||||||
|
If the user has no right to transfer funds, then it won't have the choice of the source of the transfer.
|
||||||
|
"""
|
||||||
|
form = super().get_form(form_class)
|
||||||
|
|
||||||
|
if False: # TODO: fix it with "if %user has no right to transfer funds"
|
||||||
|
del form.fields['source']
|
||||||
|
|
||||||
|
return form
|
||||||
|
|
||||||
|
def form_valid(self, form):
|
||||||
|
"""
|
||||||
|
If the user has no right to transfer funds, then it will be the source of the transfer by default.
|
||||||
|
"""
|
||||||
|
if False: # TODO: fix it with "if %user has no right to transfer funds"
|
||||||
|
form.instance.source = self.request.user.note
|
||||||
|
|
||||||
|
return super().form_valid(form)
|
||||||
|
|
||||||
|
|
||||||
class NoteAutocomplete(autocomplete.Select2QuerySetView):
|
class NoteAutocomplete(autocomplete.Select2QuerySetView):
|
||||||
"""
|
"""
|
||||||
Auto complete note by aliases
|
Auto complete note by aliases
|
||||||
|
@ -40,11 +61,29 @@ class NoteAutocomplete(autocomplete.Select2QuerySetView):
|
||||||
Quand une personne cherche un alias, une requête est envoyée sur l'API dédiée à l'auto-complétion.
|
Quand une personne cherche un alias, une requête est envoyée sur l'API dédiée à l'auto-complétion.
|
||||||
Cette fonction récupère la requête, et renvoie la liste filtrée des notes par aliases.
|
Cette fonction récupère la requête, et renvoie la liste filtrée des notes par aliases.
|
||||||
"""
|
"""
|
||||||
|
# Un utilisateur non connecté n'a accès à aucune information
|
||||||
|
if not self.request.user.is_authenticated:
|
||||||
|
return Note.objects.none()
|
||||||
|
|
||||||
qs = Note.objects.all()
|
qs = Note.objects.all()
|
||||||
|
|
||||||
|
# self.q est le paramètre de la recherche
|
||||||
if self.q:
|
if self.q:
|
||||||
qs = qs.filter(Q(alias__name__regex=self.q) | Q(alias__normalized_name__regex=self.q))
|
qs = qs.filter(Q(alias__name__regex=self.q) | Q(alias__normalized_name__regex=self.q))
|
||||||
|
|
||||||
|
# Filtrage par type de note (user, club, special)
|
||||||
|
note_type = self.forwarded.get("note_type", None)
|
||||||
|
if note_type:
|
||||||
|
l = str(note_type).lower()
|
||||||
|
if "user" in l:
|
||||||
|
qs = qs.filter(polymorphic_ctype__model="noteuser")
|
||||||
|
elif "club" in l:
|
||||||
|
qs = qs.filter(polymorphic_ctype__model="noteclub")
|
||||||
|
elif "special" in l:
|
||||||
|
qs = qs.filter(polymorphic_ctype__model="notespecial")
|
||||||
|
else:
|
||||||
|
qs = qs.none()
|
||||||
|
|
||||||
return qs
|
return qs
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue