forked from DGNum/gestioCOF
Remove every occurrence of Event from views, forms, etc
The views have to be re-implemented later
This commit is contained in:
parent
745e7a1c0c
commit
ec3a9a9658
6 changed files with 45 additions and 239 deletions
|
@ -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"
|
||||
|
|
47
cof/forms.py
47
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")
|
||||
|
|
|
@ -8,16 +8,6 @@
|
|||
<div class="container">
|
||||
<div class="home-menu row">
|
||||
<div class="{% if user.profile.cof.is_buro %}col-sm-6 {% else %}col-sm-8 col-sm-offset-2 col-xs-12 {%endif%}normal-user-hm">
|
||||
<!-- {% if open_events %}
|
||||
<h3 class="block-title">Événements<span class="pull-right glyphicon glyphicon-calendar"></span></h3>
|
||||
<div class="hm-block">
|
||||
<ul>
|
||||
{% for event in open_events %}
|
||||
<li><a href="{% url "event" event.id %}">{{ event.title }}</a></li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
</div>
|
||||
{% endif %} -->
|
||||
{% if open_surveys %}
|
||||
<h3 class="block-title">Sondages en cours<span class="pull-right glyphicon glyphicon-stats"></span></h3>
|
||||
<div class="hm-block">
|
||||
|
|
|
@ -53,15 +53,6 @@ surveys_patterns = [
|
|||
name="survey"),
|
||||
]
|
||||
|
||||
events_patterns = [
|
||||
url(r'^(?P<event_id>\d+)$',
|
||||
views.event,
|
||||
name="event"),
|
||||
url(r'^(?P<event_id>\d+)/status$',
|
||||
views.event_status,
|
||||
name="event.status"),
|
||||
]
|
||||
|
||||
calendar_patterns = [
|
||||
url(r'^subscription$',
|
||||
views.calendar,
|
||||
|
|
155
cof/views.py
155
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:
|
||||
|
|
|
@ -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.
|
||||
|
|
Loading…
Reference in a new issue