mirror of https://gitlab.crans.org/bde/nk20
[activity] comments on view and forms
This commit is contained in:
parent
b0ebc7c0a4
commit
00935a8c02
|
@ -41,6 +41,15 @@ class ActivityForm(forms.ModelForm):
|
||||||
|
|
||||||
class GuestForm(forms.ModelForm):
|
class GuestForm(forms.ModelForm):
|
||||||
def clean(self):
|
def clean(self):
|
||||||
|
"""
|
||||||
|
Someone can be invited as a Guest to an Activity if:
|
||||||
|
- the activity has not already started.
|
||||||
|
- the activity is validated.
|
||||||
|
- the Guest has not already been invited more than 5 times.
|
||||||
|
- the Guest is already invited.
|
||||||
|
- the inviter already invited 3 peoples.
|
||||||
|
"""
|
||||||
|
|
||||||
cleaned_data = super().clean()
|
cleaned_data = super().clean()
|
||||||
|
|
||||||
if timezone.now() > timezone.localtime(self.activity.date_start):
|
if timezone.now() > timezone.localtime(self.activity.date_start):
|
||||||
|
|
|
@ -11,6 +11,7 @@ from django.utils import timezone
|
||||||
from django.utils.translation import gettext_lazy as _
|
from django.utils.translation import gettext_lazy as _
|
||||||
from django.views.generic import DetailView, TemplateView, UpdateView
|
from django.views.generic import DetailView, TemplateView, UpdateView
|
||||||
from django_tables2.views import SingleTableView
|
from django_tables2.views import SingleTableView
|
||||||
|
|
||||||
from note.models import Alias, NoteSpecial, NoteUser
|
from note.models import Alias, NoteSpecial, NoteUser
|
||||||
from permission.backends import PermissionBackend
|
from permission.backends import PermissionBackend
|
||||||
from permission.views import ProtectQuerysetMixin, ProtectedCreateView
|
from permission.views import ProtectQuerysetMixin, ProtectedCreateView
|
||||||
|
@ -21,6 +22,9 @@ from .tables import ActivityTable, EntryTable, GuestTable
|
||||||
|
|
||||||
|
|
||||||
class ActivityCreateView(ProtectedCreateView):
|
class ActivityCreateView(ProtectedCreateView):
|
||||||
|
"""
|
||||||
|
View to create a new Activity
|
||||||
|
"""
|
||||||
model = Activity
|
model = Activity
|
||||||
form_class = ActivityForm
|
form_class = ActivityForm
|
||||||
extra_context = {"title": _("Create new activity")}
|
extra_context = {"title": _("Create new activity")}
|
||||||
|
@ -47,6 +51,9 @@ class ActivityCreateView(ProtectedCreateView):
|
||||||
|
|
||||||
|
|
||||||
class ActivityListView(ProtectQuerysetMixin, LoginRequiredMixin, SingleTableView):
|
class ActivityListView(ProtectQuerysetMixin, LoginRequiredMixin, SingleTableView):
|
||||||
|
"""
|
||||||
|
Displays all Activities, and classify if they are on-going or upcoming ones.
|
||||||
|
"""
|
||||||
model = Activity
|
model = Activity
|
||||||
table_class = ActivityTable
|
table_class = ActivityTable
|
||||||
ordering = ('-date_start',)
|
ordering = ('-date_start',)
|
||||||
|
@ -73,6 +80,9 @@ class ActivityListView(ProtectQuerysetMixin, LoginRequiredMixin, SingleTableView
|
||||||
|
|
||||||
|
|
||||||
class ActivityDetailView(ProtectQuerysetMixin, LoginRequiredMixin, DetailView):
|
class ActivityDetailView(ProtectQuerysetMixin, LoginRequiredMixin, DetailView):
|
||||||
|
"""
|
||||||
|
Shows details about one activity. Add guest to context
|
||||||
|
"""
|
||||||
model = Activity
|
model = Activity
|
||||||
context_object_name = "activity"
|
context_object_name = "activity"
|
||||||
extra_context = {"title": _("Activity detail")}
|
extra_context = {"title": _("Activity detail")}
|
||||||
|
@ -90,6 +100,9 @@ class ActivityDetailView(ProtectQuerysetMixin, LoginRequiredMixin, DetailView):
|
||||||
|
|
||||||
|
|
||||||
class ActivityUpdateView(ProtectQuerysetMixin, LoginRequiredMixin, UpdateView):
|
class ActivityUpdateView(ProtectQuerysetMixin, LoginRequiredMixin, UpdateView):
|
||||||
|
"""
|
||||||
|
Updates one Activity
|
||||||
|
"""
|
||||||
model = Activity
|
model = Activity
|
||||||
form_class = ActivityForm
|
form_class = ActivityForm
|
||||||
extra_context = {"title": _("Update activity")}
|
extra_context = {"title": _("Update activity")}
|
||||||
|
@ -99,11 +112,15 @@ class ActivityUpdateView(ProtectQuerysetMixin, LoginRequiredMixin, UpdateView):
|
||||||
|
|
||||||
|
|
||||||
class ActivityInviteView(ProtectQuerysetMixin, ProtectedCreateView):
|
class ActivityInviteView(ProtectQuerysetMixin, ProtectedCreateView):
|
||||||
|
"""
|
||||||
|
Invite a Guest, The rules to invites someone are defined in `forms:activity.GuestForm`
|
||||||
|
"""
|
||||||
model = Guest
|
model = Guest
|
||||||
form_class = GuestForm
|
form_class = GuestForm
|
||||||
template_name = "activity/activity_invite.html"
|
template_name = "activity/activity_invite.html"
|
||||||
|
|
||||||
def get_sample_object(self):
|
def get_sample_object(self):
|
||||||
|
""" Creates a standart Guest binds to the Activity"""
|
||||||
activity = Activity.objects.get(pk=self.kwargs["pk"])
|
activity = Activity.objects.get(pk=self.kwargs["pk"])
|
||||||
return Guest(
|
return Guest(
|
||||||
activity=activity,
|
activity=activity,
|
||||||
|
@ -134,6 +151,9 @@ class ActivityInviteView(ProtectQuerysetMixin, ProtectedCreateView):
|
||||||
|
|
||||||
|
|
||||||
class ActivityEntryView(LoginRequiredMixin, TemplateView):
|
class ActivityEntryView(LoginRequiredMixin, TemplateView):
|
||||||
|
"""
|
||||||
|
Manages entry to an activity
|
||||||
|
"""
|
||||||
template_name = "activity/activity_entry.html"
|
template_name = "activity/activity_entry.html"
|
||||||
|
|
||||||
def dispatch(self, request, *args, **kwargs):
|
def dispatch(self, request, *args, **kwargs):
|
||||||
|
@ -154,14 +174,10 @@ class ActivityEntryView(LoginRequiredMixin, TemplateView):
|
||||||
raise PermissionDenied(_("This activity is closed."))
|
raise PermissionDenied(_("This activity is closed."))
|
||||||
return super().dispatch(request, *args, **kwargs)
|
return super().dispatch(request, *args, **kwargs)
|
||||||
|
|
||||||
def get_context_data(self, **kwargs):
|
def get_invited_guest(self,activity):
|
||||||
context = super().get_context_data(**kwargs)
|
"""
|
||||||
|
Retrieves all Guests to the activity
|
||||||
activity = Activity.objects.filter(PermissionBackend.filter_queryset(self.request.user, Activity, "view"))\
|
"""
|
||||||
.distinct().get(pk=self.kwargs["pk"])
|
|
||||||
context["activity"] = activity
|
|
||||||
|
|
||||||
matched = []
|
|
||||||
|
|
||||||
guest_qs = Guest.objects\
|
guest_qs = Guest.objects\
|
||||||
.annotate(balance=F("inviter__balance"), note_name=F("inviter__user__username"))\
|
.annotate(balance=F("inviter__balance"), note_name=F("inviter__user__username"))\
|
||||||
|
@ -182,11 +198,13 @@ class ActivityEntryView(LoginRequiredMixin, TemplateView):
|
||||||
else:
|
else:
|
||||||
pattern = None
|
pattern = None
|
||||||
guest_qs = guest_qs.none()
|
guest_qs = guest_qs.none()
|
||||||
|
return guest_qs
|
||||||
|
|
||||||
for guest in guest_qs:
|
def get_invited_note(self,activity):
|
||||||
guest.type = "Invité"
|
"""
|
||||||
matched.append(guest)
|
Retrieves all Note that can attend the activity,
|
||||||
|
they need to have an up-to-date membership in the attendees_club.
|
||||||
|
"""
|
||||||
note_qs = Alias.objects.annotate(last_name=F("note__noteuser__user__last_name"),
|
note_qs = Alias.objects.annotate(last_name=F("note__noteuser__user__last_name"),
|
||||||
first_name=F("note__noteuser__user__first_name"),
|
first_name=F("note__noteuser__user__first_name"),
|
||||||
username=F("note__noteuser__user__username"),
|
username=F("note__noteuser__user__username"),
|
||||||
|
@ -223,8 +241,25 @@ class ActivityEntryView(LoginRequiredMixin, TemplateView):
|
||||||
# have distinct aliases rather than distinct notes with a SQLite DB, but it can fill the result page.
|
# have distinct aliases rather than distinct notes with a SQLite DB, but it can fill the result page.
|
||||||
# In production mode, please use PostgreSQL.
|
# In production mode, please use PostgreSQL.
|
||||||
note_qs = note_qs.distinct()[:20]
|
note_qs = note_qs.distinct()[:20]
|
||||||
|
return note_qs
|
||||||
|
|
||||||
for note in note_qs:
|
def get_context_data(self, **kwargs):
|
||||||
|
"""
|
||||||
|
Query the list of Guest and Note to the activity and add information to makes entry with JS.
|
||||||
|
"""
|
||||||
|
context = super().get_context_data(**kwargs)
|
||||||
|
|
||||||
|
activity = Activity.objects.filter(PermissionBackend.filter_queryset(self.request.user, Activity, "view"))\
|
||||||
|
.distinct().get(pk=self.kwargs["pk"])
|
||||||
|
context["activity"] = activity
|
||||||
|
|
||||||
|
matched=[]
|
||||||
|
|
||||||
|
for guest in get_invited_guest(self,activity):
|
||||||
|
guest.type = "Invité"
|
||||||
|
matched.append(guest)
|
||||||
|
|
||||||
|
for note in get_invited_note(self,activity):
|
||||||
note.type = "Adhérent"
|
note.type = "Adhérent"
|
||||||
note.activity = activity
|
note.activity = activity
|
||||||
matched.append(note)
|
matched.append(note)
|
||||||
|
|
Loading…
Reference in New Issue