From 5c59c5f9f71a8335dfb74871bc94cdbdf68848d7 Mon Sep 17 00:00:00 2001
From: Dorian Lesbre <dorian.lesbre@gmail.com>
Date: Tue, 9 Mar 2021 17:36:59 +0100
Subject: [PATCH] Beautify profile page + added unregister view

---
 accounts/templates/profile.html | 42 ++++++++++++++++++++++++++++-----
 accounts/views.py               |  8 +++++++
 home/models.py                  |  7 ++++++
 home/static/css/style.css       |  4 ++++
 home/urls.py                    |  1 +
 home/views.py                   | 13 +++++++++-
 6 files changed, 68 insertions(+), 7 deletions(-)

diff --git a/accounts/templates/profile.html b/accounts/templates/profile.html
index f2d1cd4..285cea4 100644
--- a/accounts/templates/profile.html
+++ b/accounts/templates/profile.html
@@ -9,17 +9,47 @@
 <p>Connecté en tant que {{ user.first_name }} {{ user.last_name }} ({{ user.email }})</p>
 
 {% if user.is_superuser %}
-<p>Vous avez les droits d'administrateurs. Aller à la <a href="{% url 'admin:index' %}">page d'administration du site</a></p>
-{% endif %}
+<ul class="messagelist">
+<li class="info">Vous avez les droits d'administrateurs. Aller à la <a href="{% url 'admin:index' %}">page d'administration du site</a></li>
+</ul>{% endif %}
 
 {% if user.profile.is_registered %}
-<p>Vous êtes inscrit à l'événement. <a href="{% url 'inscription' %}">Modifier mon inscription</a>.</p>
+	<strong>Mon inscription&nbsp;:</strong>
+	<ul>
+		<li>{% if user.profile.sleeps %}Inscrit pour dormir sur place{% else %}Ne dors pas sur place{% endif %}</li>
+		<li>{% if user.profile.mug %}Commande une tasse{% else %}Ne commande pas de tasse{% endif %}</li>
+		<li>Inscrit à {{ user.profile.nb_meals }} repas.</li>
+		{% if settings.activities_allocated %}
+
+		{% else %}
+			{% if my_activities %}
+			<li>{{ my_activities|length }} activités souhaitées&nbsp;:
+				<ol>
+					{% for activity in my_activities %}
+					<li>{{ activity.activity }}</li>
+					{% endfor %}
+				</ol>
+			</li>
+			{% else %}
+			<li>Aucune activité souhaitée</li>
+			{% endif %}
+
+		{% endif %}
+	</ul>
+<div class="flex">
+
+	<a class="button" href="{% url 'desinscription' %}">Me désinscrire</a>
+	<a class="button" href="{% url 'inscription' %}">Modifier mon inscription</a>
+
 {% else %}
-<p>Vous n'êtes pas incrit à l'événement : <a href="{% url 'inscription' %}">s'inscrire</a>.</p>
+	<strong>Vous n'êtes pas incrit à l'événement.</strong><br><br>
+<div class="flex">
+	<a class="button" href="{% url 'inscription' %}">S'inscrire</a>
 {% endif %}
 
-<p><a href="{% url 'accounts:update' %}">Modifier mes informations</a></p>
 
-<p><a class="button" href="{% url 'accounts:logout' %}">Déconnexion</a></p>
+	<a class="button" href="{% url 'accounts:update' %}">Modifier mes informations</a>
+	<a class="button" href="{% url 'accounts:logout' %}">Déconnexion</a>
+</div>
 
 {% endblock %}
\ No newline at end of file
diff --git a/accounts/views.py b/accounts/views.py
index a1aaafa..1c65c15 100644
--- a/accounts/views.py
+++ b/accounts/views.py
@@ -14,6 +14,7 @@ from django.shortcuts import render, redirect
 from accounts.forms import CreateAccountForm, UpdateAccountForm, UpdatePasswordForm
 from accounts.models import EmailUser
 from accounts.tokens import email_token_generator
+from home.models import ActivityList
 from site_settings.models import SiteSettings
 
 def send_validation_email(request, user, subject, template):
@@ -52,6 +53,13 @@ class ProfileView(LoginRequiredMixin, TemplateView):
 	template_name = "profile.html"
 	redirect_field_name = "next"
 
+	def get_context_data(self, **kwargs):
+		context = super().get_context_data(**kwargs)
+		my_activities = ActivityList.objects.filter(participant=self.request.user.profile)
+		context["my_activities"] = my_activities
+		return context
+
+
 
 class CreateAccountView(View):
 	"""Vue pour la creation de compte"""
diff --git a/home/models.py b/home/models.py
index 54f0593..b6a409c 100644
--- a/home/models.py
+++ b/home/models.py
@@ -67,6 +67,13 @@ class InterludesParticipant(models.Model):
 	def __str__(self) -> str:
 		return "{} {} ({})".format(self.user.first_name, self.user.last_name, self.school)
 
+	@property
+	def nb_meals(self) -> int:
+		return (
+			self.meal_friday_evening + self.meal_saturday_evening + self.meal_saturday_midday +
+			self.meal_saturday_morning + self.meal_sunday_midday + self.meal_sunday_morning
+		)
+
 	class Meta:
 		verbose_name = "participant"
 
diff --git a/home/static/css/style.css b/home/static/css/style.css
index 4cabb78..2e0764f 100644
--- a/home/static/css/style.css
+++ b/home/static/css/style.css
@@ -138,6 +138,10 @@ main p {
 	font-size: 1rem;
 }
 
+strong {
+	font-weight: bold;
+}
+
 main a:link {
 	text-decoration: underline;
 	color: rgb(62, 62, 255);
diff --git a/home/urls.py b/home/urls.py
index 2783080..70f8389 100644
--- a/home/urls.py
+++ b/home/urls.py
@@ -9,6 +9,7 @@ sitemaps = {"static_pages": views.StaticViewSitemap}
 urlpatterns = [
 	path('', views.HomeView.as_view(), {"template": "home.html"}, name = 'home'),
 	path('inscription/', views.RegisterView.as_view(), name = 'inscription'),
+	path('desinscription/', views.UnregisterView.as_view(), name="desinscription"),
 	path('activites/', views.ActivityView.as_view(), {"template":"activites.html"}, name = 'activites'),
 	path('faq/', views.FAQView.as_view(), {"template":"faq.html"}, name = 'FAQ'),
 	path('favicon.ico', RedirectView.as_view(url='/static/imgs/favicon.ico')),
diff --git a/home/views.py b/home/views.py
index e127793..aece136 100644
--- a/home/views.py
+++ b/home/views.py
@@ -4,7 +4,7 @@ from django.contrib.sitemaps import Sitemap
 from django.forms import formset_factory
 from django.shortcuts import redirect, render
 from django.urls import reverse
-from django.views.generic import UpdateView, TemplateView, View
+from django.views.generic import RedirectView, UpdateView, TemplateView, View
 
 from home.models import ActivityList, InterludesActivity
 from home.forms import ActivityForm, BaseActivityFormSet, InscriptionForm
@@ -98,6 +98,17 @@ class RegisterView(View):
 		return RegisterUpdateView.as_view()(request)
 
 
+class UnregisterView(LoginRequiredMixin, RedirectView):
+	pattern_name = "accounts:profile"
+
+	def get_redirect_url(self, *args, **kwargs):
+		participant = self.request.user.profile
+		participant.is_registered = False
+		participant.save()
+		messages.success(self.request, "Vous avez été désinscrit")
+		return reverse(self.pattern_name)
+
+
 class StaticViewSitemap(Sitemap):
 	"""Vue générant la sitemap.xml du site"""
 	changefreq = 'monthly'
-- 
GitLab