diff --git a/cof/fixtures/gestion.json b/cof/fixtures/gestion.json index 6d1bd76f..c8020cb6 100644 --- a/cof/fixtures/gestion.json +++ b/cof/fixtures/gestion.json @@ -67,63 +67,6 @@ "model": "cof.surveyquestionanswer", "pk": 5 }, -{ - "fields": { - "old": false, - "description": "On va casser du romain.", - "end_date": "2016-09-12T00:00:00Z", - "title": "Bataille de Gergovie", - "image": "", - "location": "Gergovie", - "registration_open": true, - "start_date": "2016-09-09T00:00:00Z" - }, - "model": "cof.event", - "pk": 1 -}, -{ - "fields": { - "default": "", - "event": 1, - "fieldtype": "text", - "name": "Commentaires" - }, - "model": "cof.eventcommentfield", - "pk": 1 -}, -{ - "fields": { - "multi_choices": true, - "event": 1, - "name": "Potion magique" - }, - "model": "cof.eventoption", - "pk": 1 -}, -{ - "fields": { - "event_option": 1, - "value": "Je suis alergique" - }, - "model": "cof.eventoptionchoice", - "pk": 1 -}, -{ - "fields": { - "event_option": 1, - "value": "J'en veux" - }, - "model": "cof.eventoptionchoice", - "pk": 2 -}, -{ - "fields": { - "event_option": 1, - "value": "Je suis tomb\u00e9 dans la marmite quand j'\u00e9tais petit" - }, - "model": "cof.eventoptionchoice", - "pk": 3 -}, { "fields": { "name": "Bagarre" diff --git a/cof/forms.py b/cof/forms.py index 7f3a0614..072d3e70 100644 --- a/cof/forms.py +++ b/cof/forms.py @@ -12,58 +12,15 @@ from django.forms.formsets import BaseFormSet, formset_factory from django.db.models import Max from django.core.validators import MinLengthValidator -from .models import CofProfile, EventCommentValue, CalendarSubscription +from .models import CofProfile, CalendarSubscription from .widgets import TriStateCheckbox -from gestion.models import Profile +from gestion.models import Profile, EventCommentValue from gestion.shared import lock_table, unlock_table from bda.models import Spectacle -class EventForm(forms.Form): - def __init__(self, *args, **kwargs): - event = kwargs.pop("event") - self.event = event - current_choices = kwargs.pop("current_choices", None) - super(EventForm, self).__init__(*args, **kwargs) - choices = {} - if current_choices: - for choice in current_choices.all(): - if choice.event_option.id not in choices: - choices[choice.event_option.id] = [choice.id] - else: - choices[choice.event_option.id].append(choice.id) - all_choices = choices - for option in event.options.all(): - choices = [(choice.id, choice.value) - for choice in option.choices.all()] - if option.multi_choices: - initial = [] if option.id not in all_choices \ - else all_choices[option.id] - field = forms.MultipleChoiceField( - label=option.name, - choices=choices, - widget=CheckboxSelectMultiple, - required=False, - initial=initial) - else: - initial = None if option.id not in all_choices \ - else all_choices[option.id][0] - field = forms.ChoiceField(label=option.name, - choices=choices, - widget=RadioSelect, - required=False, - initial=initial) - field.option_id = option.id - self.fields["option_%d" % option.id] = field - - def choices(self): - for name, value in self.cleaned_data.items(): - if name.startswith('option_'): - yield (self.fields[name].option_id, value) - - class SurveyForm(forms.Form): def __init__(self, *args, **kwargs): survey = kwargs.pop("survey") diff --git a/cof/templates/home.html b/cof/templates/home.html index 7574e06e..bbb9632b 100644 --- a/cof/templates/home.html +++ b/cof/templates/home.html @@ -8,16 +8,6 @@
- {% if open_surveys %}

Sondages en cours

diff --git a/cof/urls.py b/cof/urls.py index 91a73665..9a1dba91 100644 --- a/cof/urls.py +++ b/cof/urls.py @@ -53,15 +53,6 @@ surveys_patterns = [ name="survey"), ] -events_patterns = [ - url(r'^(?P\d+)$', - views.event, - name="event"), - url(r'^(?P\d+)/status$', - views.event_status, - name="event.status"), -] - calendar_patterns = [ url(r'^subscription$', views.calendar, diff --git a/cof/views.py b/cof/views.py index cbb09af4..9f59ece9 100644 --- a/cof/views.py +++ b/cof/views.py @@ -15,18 +15,19 @@ from django.utils import timezone from django.contrib import messages import django.utils.six as six +from gestion.models import ( + Event, EventRegistration, EventOption, EventOptionChoice, + EventCommentField, EventCommentValue +) + from .models import Survey, SurveyAnswer, SurveyQuestion, \ - SurveyQuestionAnswer -from .models import Event, EventRegistration, EventOption, \ - EventOptionChoice -from .models import EventCommentField, EventCommentValue, \ - CalendarSubscription + SurveyQuestionAnswer, CalendarSubscription from .models import CofProfile from .decorators import buro_required, cof_required from .forms import ( - EventStatusFilterForm, SurveyForm, SurveyStatusFilterForm, + SurveyForm, SurveyStatusFilterForm, RegistrationUserForm, RegistrationProfileForm, RegistrationCofProfileForm, - EventForm, CalendarForm, EventFormset, RegistrationPassUserForm + CalendarForm, EventFormset, RegistrationPassUserForm ) from bda.models import Tirage, Spectacle @@ -37,7 +38,6 @@ from gestion.models import Profile @login_required def home(request): data = {"surveys": Survey.objects.filter(old=False).all(), - "events": Event.objects.filter(old=False).all(), "open_surveys": Survey.objects.filter(survey_open=True, old=False).all(), "open_events": @@ -125,72 +125,6 @@ def survey(request, survey_id): }) -def get_event_form_choices(event, form): - all_choices = [] - for option_id, choices_ids in form.choices(): - option = get_object_or_404(EventOption, id=option_id, - event=event) - if type(choices_ids) != list: - choices_ids = [choices_ids] - if not option.multi_choices and len(choices_ids) > 1: - raise Http404 - for choice_id in choices_ids: - if not choice_id: - continue - choice_id = int(choice_id) - choice = EventOptionChoice.objects.get( - id=choice_id, - event_option=option) - all_choices.append(choice) - return all_choices - - -def update_event_form_comments(event, form, registration): - for commentfield_id, value in form.comments(): - field = get_object_or_404(EventCommentField, id=commentfield_id, - event=event) - if value == field.default: - continue - (storage, _) = EventCommentValue.objects.get_or_create( - commentfield=field, - registration=registration) - storage.content = value - storage.save() - - -@login_required -def event(request, event_id): - event = get_object_or_404(Event, id=event_id) - if (not event.registration_open) or event.old: - raise Http404 - success = False - if request.method == "POST": - form = EventForm(request.POST, event=event) - if form.is_valid(): - all_choices = get_event_form_choices(event, form) - (current_registration, _) = \ - EventRegistration.objects.get_or_create(user=request.user, - event=event) - current_registration.options = all_choices - current_registration.save() - success = True - else: - try: - current_registration = \ - EventRegistration.objects.get(user=request.user, event=event) - form = EventForm(event=event, - current_choices=current_registration.options) - except EventRegistration.DoesNotExist: - form = EventForm(event=event) - # Messages - if success: - messages.success(request, "Votre inscription a bien été enregistrée ! " - "Vous pouvez cependant la modifier jusqu'à " - "la fin des inscriptions.") - return render(request, "cof/event.html", - {"event": event, "form": form}) - - def clean_post_for_status(initial): d = initial.copy() for k, v in d.items(): @@ -200,46 +134,6 @@ def clean_post_for_status(initial): return d -@buro_required -def event_status(request, event_id): - event = get_object_or_404(Event, id=event_id) - registrations_query = EventRegistration.objects.filter(event=event) - post_data = clean_post_for_status(request.POST) - form = EventStatusFilterForm(post_data or None, event=event) - if form.is_valid(): - for option_id, choice_id, value in form.filters(): - if option_id == "has_paid": - if value == "yes": - registrations_query = registrations_query.filter(paid=True) - elif value == "no": - registrations_query = registrations_query.filter( - paid=False) - continue - choice = get_object_or_404(EventOptionChoice, id=choice_id, - event_option__id=option_id) - if value == "none": - continue - if value == "yes": - registrations_query = registrations_query.filter( - options__id__exact=choice.id) - elif value == "no": - registrations_query = registrations_query.exclude( - options__id__exact=choice.id) - user_choices = registrations_query.prefetch_related("user").all() - options = EventOption.objects.filter(event=event).all() - choices_count = {} - for option in options: - for choice in option.choices.all(): - choices_count[choice.id] = 0 - for user_choice in user_choices: - for choice in user_choice.options.all(): - choices_count[choice.id] += 1 - return render(request, "event_status.html", - {"event": event, "user_choices": user_choices, - "options": options, "choices_count": choices_count, - "form": form}) - - @buro_required def survey_status(request, survey_id): survey = get_object_or_404(Survey, id=survey_id) @@ -342,6 +236,39 @@ def registration_form2(request, login_clipper=None, username=None, "event_formset": event_formset}) +def get_event_form_choices(event, form): + all_choices = [] + for option_id, choices_ids in form.choices(): + option = get_object_or_404(EventOption, id=option_id, + event=event) + if type(choices_ids) != list: + choices_ids = [choices_ids] + if not option.multi_choices and len(choices_ids) > 1: + raise Http404 + for choice_id in choices_ids: + if not choice_id: + continue + choice_id = int(choice_id) + choice = EventOptionChoice.objects.get( + id=choice_id, + event_option=option) + all_choices.append(choice) + return all_choices + + +def update_event_form_comments(event, form, registration): + for commentfield_id, value in form.comments(): + field = get_object_or_404(EventCommentField, id=commentfield_id, + event=event) + if value == field.default: + continue + (storage, _) = EventCommentValue.objects.get_or_create( + commentfield=field, + registration=registration) + storage.content = value + storage.save() + + @buro_required def registration(request): if request.POST: diff --git a/gestioCOF/urls.py b/gestioCOF/urls.py index e3e6fe04..4918c1ea 100644 --- a/gestioCOF/urls.py +++ b/gestioCOF/urls.py @@ -16,7 +16,7 @@ from django.contrib.auth import views as django_views from cof import views as cof_views from cof.urls import export_patterns, petitcours_patterns, \ - surveys_patterns, events_patterns, calendar_patterns + surveys_patterns, calendar_patterns from cof.autocomplete import autocomplete from gestion import views as gestion_views @@ -40,8 +40,6 @@ urlpatterns = [ url(r'^petitcours/', include(petitcours_patterns)), # Les sondages url(r'^survey/', include(surveys_patterns)), - # Evenements - url(r'^event/', include(events_patterns)), # Calendrier url(r'^calendar/', include(calendar_patterns)), # Infos persos @@ -88,7 +86,7 @@ urlpatterns = [ if 'debug_toolbar' in settings.INSTALLED_APPS: import debug_toolbar urlpatterns += [ - url(r'^__debug__/', debug_toolbar.urls), + url(r'^__debug__/', include(debug_toolbar.urls)), ] # Si on est en production, MEDIA_ROOT est servi par Apache.