Skip to content
Snippets Groups Projects
Commit fc8cecbe authored by Dorian Lesbre's avatar Dorian Lesbre
Browse files

Working activity form

parent b527bef0
No related branches found
No related tags found
No related merge requests found
......@@ -18,15 +18,28 @@ class ActivityModelAdmin(ExportCsvMixin, admin.ModelAdmin):
ordering = ("title", "host_name",)
list_editable = ("display",)
fields = (
"title",
"title", "display",
("host_name", "host_email"),
"status", "act_type", "duration",
"host_info",
"act_type", "game_type",
"description", "desc_as_html",
("min_participants", "max_participants"),
"must_subscribe",
"communicate_participants",
"description", "desc_as_html",
"display",
"notes",
("duration", "desired_slot_nb"),
(
"available_friday_evening",
"available_friday_night",
"available_saturday_morning",
"available_saturday_afternoon",
"available_saturday_evening",
"available_saturday_night",
"available_sunday_morning",
"available_sunday_afternoon"
),
"constraints",
"status", "needs",
"comments",
)
list_per_page = 100
......
......@@ -87,10 +87,24 @@ class ActivitySubmissionForm(FormRenderMixin, forms.ModelForm):
"comments",
)
def save(self, *args, commit=True, **kwargs):
participant = super().save(*args, commit=False, **kwargs)
participant.is_registered = True
def clean(self):
cleaned_data = super().clean()
maxi = cleaned_data.get("max_participants")
mini = cleaned_data.get("min_participants")
if maxi != 0 and mini > maxi:
raise forms.ValidationError(
"Le nombre minimal de participants est supérieur au nombre maximal",
code="invalid_order"
)
return cleaned_data
def save(self, user, *args, commit=True, **kwargs):
"""Enregistre l'activité dans la base de données"""
activity = models.ActivityModel(
**self.cleaned_data,
host=user, host_email=user.email,
host_name=(user.first_name + user.last_name)
)
if commit:
participant.save()
return participant
activity.save()
return activity
import datetime
from django.db import models
from django.forms import ValidationError
from django.utils.translation import gettext_lazy as _
from django.utils import timezone
......
......@@ -6,6 +6,8 @@
{% block "content" %}
<h2>Proposer une activité</h2>
{{ form.non_field_errors }}
<form method="post" action="{% url 'activity_submission' %}">
{% csrf_token %}
......@@ -35,16 +37,19 @@
<table>
<tr><td><strong>Nécessite une inscription&nbsp;:</strong></td><td> {{ form.must_subscribe }}</td></tr>
<tr><td><strong>Me communiquer la liste des participants à l'avance&nbsp;:</strong></td><td> {{ form.communicate_participants }}</td></tr>
<tr><td><strong>Nombre max de participants&nbsp;:</strong></td><td> {{ form.max_participants }} (mettez 0 pour illimité)</td></tr>
{% if form.max_participants.errors %}<tr><td></td><td>{{ form.max_participants.errors }}</td></tr>{% endif %}
<tr><td><strong>Nombre min de participants&nbsp;:</strong></td><td> {{ form.min_participants }}</td></tr>
{% if form.min_participants.errors %}<tr><td></td><td>{{ form.min_participants.errors }}</td></tr>{% endif %}
</table>
<h3>Durée et crénaux</h3>
<table>
<tr><td><strong>Durée approximative&nbsp;:</strong></td><td> {{ form.duration }} (format hh:mm:ss)</td></tr>
{% if form.duration.errors %}<tr><td></td><td>{{ form.duration.errors }}</td></tr>{% endif %}
<tr><td><strong>Nombre de crénaux souhaités&nbsp;:</strong></td><td> {{ form.desired_slot_nb }}</td></tr>
{% if form.desired_slot_nb.errors %}<tr><td></td><td>{{ form.desired_slot_nb.errors }}</td></tr>{% endif %}
<tr><td><strong>Disponibilités&nbsp;:</strong></td></tr>
<tr><td>&nbsp;-&nbsp;Vendredi soir&nbsp;:</td><td>{{ form.available_friday_evening }}</td></tr>
<tr><td>&nbsp;-&nbsp;Vendredi nuit&nbsp;:</td><td>{{ form.available_friday_night }}</td></tr>
......@@ -80,8 +85,12 @@
{{ form.comments }}
<h3>Soumettre</h3>
<p>L'activité n'est plus modifiable une fois soumise. Les administrateurs la reliront avant de l'afficher sur le site.</p>
<div class="flex">
<input type="submit" value="Valider">
<input type="submit" value="Soumettre mon activité">
<a class="button" href="{% url 'profile' %}">Annuler</a>
</div>
......
......@@ -95,6 +95,7 @@ class RegisterUpdateView(LoginRequiredMixin, TemplateView):
template_name = "inscription/form-distanciel.html"
form_class = InscriptionForm
formset_class = formset_factory(form=ActivityForm, extra=3, formset=BaseActivityFormSet)
success_url = reverse_lazy("profile")
@staticmethod
def get_slots(participant):
......@@ -135,7 +136,7 @@ class RegisterUpdateView(LoginRequiredMixin, TemplateView):
self.set_activities(request.user.profile, formset)
messages.success(request, "Votre inscription a bien été enregistrée")
return redirect("profile", permanent=False)
return redirect(self.success_url, permanent=False)
class RegisterView(View):
"""Vue pour l'inscription
......@@ -171,6 +172,18 @@ class ActivitySubmissionView(LoginRequiredMixin, FormView):
form_class = ActivitySubmissionForm
success_url = reverse_lazy("profile")
def post(self, request, *args, **kwargs):
form = self.form_class(request.POST)
if not form.is_valid():
context = self.get_context_data
context["form"] = form
return render(request, self.template_name, context)
form.save(user=request.user)
messages.success(request, "Votre activité a bien été enregistrée. Elle sera affichée sur le site après relecture par les admins.")
return redirect(self.success_url, permanent=False)
# ==============================
# Sitemap
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment