From 5fb78447cd768030846e8ef9eaa13829cb5090b6 Mon Sep 17 00:00:00 2001
From: Dorian Lesbre <dorian.lesbre@gmail.com>
Date: Mon, 29 Mar 2021 15:50:23 +0200
Subject: [PATCH] New boolean field for activity inscription

---
 home/admin.py  |  9 +++++----
 home/forms.py  |  2 +-
 home/models.py |  9 +++++++--
 home/views.py  | 10 ++++------
 4 files changed, 17 insertions(+), 13 deletions(-)

diff --git a/home/admin.py b/home/admin.py
index 30e6931..f6292eb 100644
--- a/home/admin.py
+++ b/home/admin.py
@@ -13,16 +13,16 @@ admin.site.site_title = "Admin Interludes"
 class InterludesActivityAdmin(ExportCsvMixin, admin.ModelAdmin):
 	"""option d'affichage des activités dans la vue django admin"""
 	filename = "export_activites.csv"
-	list_display = ("title", "host_name", "display", "must_subscribe","on_planning")
-	list_filter = ("display", "must_subscribe", "on_planning", "status")
+	list_display = ("title", "host_name", "display", "must_subscribe", "subscribing_open","on_planning")
+	list_filter = ("display", "must_subscribe", "subscribing_open", "on_planning", "status")
 	ordering = ("title", "host_name",)
-	list_editable = ("display",)
+	list_editable = ("display", "subscribing_open",)
 	fields = (
 		"title",
 		("host_name", "host_email"),
 		"status", "act_type", "duration",
 		("min_participants", "max_participants"),
-		"must_subscribe",
+		("must_subscribe", "subscribing_open"),
 		"communicate_participants",
 		"description", "desc_as_html",
 		"display",
@@ -31,6 +31,7 @@ class InterludesActivityAdmin(ExportCsvMixin, admin.ModelAdmin):
 		"notes"
 	)
 	list_per_page = 100
+	save_as = True # Allow to duplicate models
 
 @admin.register(InterludesParticipant)
 class InterludesParticipantAdmin(ExportCsvMixin, admin.ModelAdmin):
diff --git a/home/forms.py b/home/forms.py
index 9b3f5d9..a246a72 100644
--- a/home/forms.py
+++ b/home/forms.py
@@ -37,7 +37,7 @@ class ActivityForm(FormRenderMixin, forms.ModelForm):
 
 	def __init__(self, *args, **kwargs):
 		super(ActivityForm, self).__init__(*args, **kwargs)
-		activities = InterludesActivity.objects.filter(display=True, must_subscribe=True)
+		activities = InterludesActivity.objects.filter(subscribing_open=True)
 		self.fields['activity'].queryset = activities
 
 class BaseActivityFormSet(forms.BaseFormSet):
diff --git a/home/models.py b/home/models.py
index 5714442..2e6e16c 100644
--- a/home/models.py
+++ b/home/models.py
@@ -43,9 +43,14 @@ class InterludesActivity(models.Model):
 	)
 
 	communicate_participants = models.BooleanField("communiquer la liste des participants à l'orga avant l'événement")
-	display = models.BooleanField("afficher dans la liste d'activités", default=False)
+	display = models.BooleanField("afficher dans la liste", default=False,
+		help_text="Si vrai, s'affiche sur la page activités"
+	)
 	must_subscribe = models.BooleanField("sur inscription", default=False,
-		help_text="Une activité doit être affichée dans la liste également pour que l'on puisse si inscrire"
+		help_text="Informatif, il faut utiliser 'ouverte aux inscriptions' pour ajouter dans la liste d'inscription"
+	)
+	subscribing_open = models.BooleanField("ouverte aux inscriptions", default=False,
+		help_text="Si vrai, apparaît dans la liste du formulaire d'inscription"
 	)
 	host_name = models.CharField("nom de l'organisateur", max_length=50)
 	host_email = models.EmailField("email de l'organisateur")
diff --git a/home/views.py b/home/views.py
index 6381088..77de3a7 100644
--- a/home/views.py
+++ b/home/views.py
@@ -186,7 +186,7 @@ class AdminView(SuperuserRequiredMixin, TemplateView):
 	def validate_activity_participant_nb(self):
 		""" Vérifie que le nombre de participant inscrit
 		à chaque activité est compris entre le min et le max"""
-		activities = InterludesActivity.objects.filter(must_subscribe=True, display=True)
+		activities = InterludesActivity.objects.filter(subscribing_open=True)
 		min_fails = ""
 		max_fails = ""
 		for act in activities:
@@ -216,7 +216,7 @@ class AdminView(SuperuserRequiredMixin, TemplateView):
 
 	def validate_activity_conflicts(self):
 		"""Vérifie que personne n'est inscrit à des activités simultanées"""
-		activities = InterludesActivity.objects.filter(must_subscribe=True, display=True)
+		activities = InterludesActivity.objects.filter(subscribing_open=True)
 		conflicts = []
 		for i, act1 in enumerate(activities):
 			for act2 in activities[i+1:]:
@@ -262,7 +262,7 @@ class AdminView(SuperuserRequiredMixin, TemplateView):
 
 		user_email_nb = InterludesParticipant.objects.filter(is_registered=True).count()
 		orga_email_nb = InterludesActivity.objects.filter(
-			display=True, must_subscribe=True, communicate_participants=True
+			subscribing_open=True, communicate_participants=True
 		).count()
 
 		return {
@@ -348,7 +348,6 @@ class SendUserEmail(SendEmailBase):
 
 	def get_emails(self):
 		"""genere les mails a envoyer"""
-		# on envoie qu'au participant qui se sont inscrit à des activites
 		participants = InterludesParticipant.objects.filter(is_registered=True)
 		emails = []
 		settings = SiteSettings.load()
@@ -394,9 +393,8 @@ class SendOrgaEmail(SendEmailBase):
 
 	def get_emails(self):
 		"""genere les mails a envoyer"""
-		# on envoie qu'au participant qui se sont inscrit à des activites
 		activities = InterludesActivity.objects.filter(
-			must_subscribe=True, display=True, communicate_participants=True
+			subscribing_open=True, communicate_participants=True
 		)
 		emails = []
 		settings = SiteSettings.load()
-- 
GitLab