1
0
mirror of https://gitlab.crans.org/bde/nk20 synced 2025-07-05 15:03:55 +02:00

Compare commits

..

8 Commits

Author SHA1 Message Date
c1a353963a handle hardcoded corrected 2024-09-12 11:36:37 +02:00
178ce2b579 update hardcoded 2024-09-10 22:41:35 +02:00
185a2cabf2 corrected emoji + linting 2024-08-29 22:47:33 +02:00
7552e55c8d removed diet filed 2024-08-29 22:19:11 +02:00
b92e6e4e10 linting 2024-08-29 18:36:20 +02:00
f50849b4f8 delete print 2024-08-29 14:01:55 +02:00
73ff35c232 updated bus descr 2024-08-29 12:42:26 +02:00
96539d262f working html for survey + fixed json error + added specific diet text field 2024-08-29 00:05:44 +02:00
6 changed files with 77 additions and 24 deletions

View File

@ -4,6 +4,7 @@
from functools import lru_cache from functools import lru_cache
from django import forms from django import forms
from django.utils.safestring import mark_safe
from django.db import transaction from django.db import transaction
from django.db.models import Q from django.db.models import Q
@ -13,7 +14,7 @@ from ...models import WEIMembership
buses_descr = [ buses_descr = [
[ [
"Magi[Kar]p", "#ef5568", 0, "Magi[Kar]p 🐙🎮🎲", "#ef5568", 1,
"""Vous l'aurez compris au nom du bus, l'ambiance est aux jeux et à la culture geek ! Ici, vous trouverez une ambiance """Vous l'aurez compris au nom du bus, l'ambiance est aux jeux et à la culture geek ! Ici, vous trouverez une ambiance
calme avec une bonne dose d'autodérision et de second degré. Que vous ayez besoin de beaucoup dormir pour tenir la soirée calme avec une bonne dose d'autodérision et de second degré. Que vous ayez besoin de beaucoup dormir pour tenir la soirée
du lendemain, ou que vous souhaitiez faire nuit blanche pour jouer toute la nuit, vous pouvez nous rejoindre. Votre voix du lendemain, ou que vous souhaitiez faire nuit blanche pour jouer toute la nuit, vous pouvez nous rejoindre. Votre voix
@ -21,16 +22,24 @@ buses_descr = [
siphonner !""", siphonner !""",
], ],
[ [
"Va[car]me", "#fd7a28", 0, "Va[car]me 🎷🍎🔊", "#fd7a28", 3,
"""Ici c'est le bus du bruit. Que ce soit les groupes de musique du Bureau des Arts ou la fanfare, on sera là pour vous """Ici, c'est le bus du bruit. Si vous voulez réveiller les autres bus en musique, apprendre de merveilleuses
ambiancer ! On fera en sorte que vous vous souveniez de votre WEI et de son Vacarme !""", mélodies au kazoo tout le week-end, ou simplement profiter d'une bonne ambiance musicale, le BDA et la
F[ENS]foire sont là pour vous. Vous pourrez également goûter au célèbre cocktail de la fanfare, concocté
pour l'occasion par les tout nouveaux "meilleurs artisans v*********** de France" ! Alors que vous soyez artiste
dans l'âme ou que vous souhaitiez juste faire le plus grand Vacarme, rejoignez-nous !""",
], ],
[ [
"[Kar]aïbes", "#a5cfdd", 0, "[Kar]aïbes 🏝️🏴‍☠️🥥", "#a5cfdd", 3,
"""Bus dans le thème des Caraïbes … 🐬🏴‍☠️🐬""", """Ahoy, explorateurs du WEI ! Le bus Karaibes tinvite à une traversée sous les tropiques, où lambiance est
toujours au beau fixe ! ☀️🍹 Ici, cest soleil, rhum, et bonne humeur assurée : une atmosphère de vacances où
lon se laisse porter par la chaleur humaine et la fête. Que tu sois un pirate en quête de sensations fortes ou
un amateur de chill avec un cocktail à la main, tu seras à ta place dans notre bus. Les soirées seront marquées
par des rythmes tropicaux qui te feront vibrer jusquà laube. Prêt à embarquer pour une aventure inoubliable
avec les meilleurs matelots du WEI ? On tattend sur le pont du Karaibes pour lever lancre ensemble !""",
], ],
[ [
"[Kar]di [Bus]", "#e46398", 0, "[Kar]di [Bus] 🎙️💅", "#e46398", 2.5,
"""Bienvenue à bord du Kardi Bus, la seul, lunique, linimitable pépite de ce weekend dintégration ! Inspiré par les """Bienvenue à bord du Kardi Bus, la seul, lunique, linimitable pépite de ce weekend dintégration ! Inspiré par les
icônes suprêmes de la pop culture telles les Bratz, les Winx et autres Mean Girls, notre bus est un sanctuaire de style, icônes suprêmes de la pop culture telles les Bratz, les Winx et autres Mean Girls, notre bus est un sanctuaire de style,
daudace et de pur plaisir. A nos cotés attends toi à siroter tes meilleurs Cosmo, sex on the Beach et autres cocktails daudace et de pur plaisir. A nos cotés attends toi à siroter tes meilleurs Cosmo, sex on the Beach et autres cocktails
@ -39,19 +48,19 @@ buses_descr = [
Bus !""", Bus !""",
], ],
[ [
"Sparta[bus] 🏉", "#ebdac2", 0, "Sparta[bus] 🐺🐒🏉", "#ebdac2", 5,
"""Dans notre bus, on vous donne un avant goût des plus grandes assos de l'ENS : les Kyottes et l'Aspique (clubs de rugby """Dans notre bus, on vous donne un avant goût des plus grandes assos de l'ENS : les Kyottes et l'Aspique (clubs de rugby
féminin et masculin, mais pas que). Bien entendu, qui dit rugby dit les copaings, le pastaga et la Pena Bayona, mais vous féminin et masculin, mais pas que). Bien entendu, qui dit rugby dit les copaings, le pastaga et la Pena Bayona, mais vous
verrez par vous même qu'on est ouvert⋅e à toutes propositions quand il s'agit de faire la fête. Pour les casse-cous comme verrez par vous même qu'on est ouvert⋅e à toutes propositions quand il s'agit de faire la fête. Pour les casse-cous comme
pour les plus calmes, vous trouverez au bus Aspique-Kyottes les 2A+ qui vous feront kiffer votre WEI.""", pour les plus calmes, vous trouverez au bus Aspique-Kyottes les 2A+ qui vous feront kiffer votre WEI.""",
], ],
[ [
"Zanzo[Bus]", "#FFFF", 0, "Zanzo[Bus] 🤯🚸🐒", "#FFFF", 3,
"""Dans un entre-trois bien senti entre zinzinerie, enfance et vieillerie, le Zanzo[BUS] est un concentré de fun mêlé à """Dans un entre-trois bien senti entre zinzinerie, enfance et vieillerie, le Zanzo[BUS] est un concentré de fun mêlé à
de la dinguerie à gogo. N'hésitez plus et rejoignez-nous pour un WEI toujours plus déjanté !""", de la dinguerie à gogo. N'hésitez plus et rejoignez-nous pour un WEI toujours plus déjanté !""",
], ],
[ [
"Bran[Kar] 🥳", "#6da1ac", 3.5, "Bran[Kar] 🍹🥳", "#6da1ac", 4,
"""Si vous ne connaissez pas le Bran[Kar], cest comme une grande famille qui fait un apéro, qui se bourre un peu la """Si vous ne connaissez pas le Bran[Kar], cest comme une grande famille qui fait un apéro, qui se bourre un peu la
gueule en discutant des heures autour dune table remplie de bouffe et de super bons cocktails (la plupart des gueule en discutant des heures autour dune table remplie de bouffe et de super bons cocktails (la plupart des
barmen/barwomen du bus sont les barmans de Shakens), sauf quon est un bus du Wei (vous comprendrez bien le nom de notre barmen/barwomen du bus sont les barmans de Shakens), sauf quon est un bus du Wei (vous comprendrez bien le nom de notre
@ -59,7 +68,7 @@ buses_descr = [
musique !""", musique !""",
], ],
[ [
"Techno [kar]ade", "#8065a3", 0, "Techno [kar]ade 🔊🚩", "#8065a3", 3,
"""Avis à tous·tes les gauchos, amoureux·ses de la fête et des manifs : le Techno [kar]ade vous ouvre grand ses bras pour """Avis à tous·tes les gauchos, amoureux·ses de la fête et des manifs : le Techno [kar]ade vous ouvre grand ses bras pour
finir en beauté votre première inté. Préparez-vous à vous abreuver de cocktails (savamment élaborés) à la vibration dun finir en beauté votre première inté. Préparez-vous à vous abreuver de cocktails (savamment élaborés) à la vibration dun
système son fabriqué pour loccasion. Des sets technos à « Mon père était tellement de gauche » en passant par « Female système son fabriqué pour loccasion. Des sets technos à « Mon père était tellement de gauche » en passant par « Female
@ -69,7 +78,7 @@ buses_descr = [
(nombreux⋅ses) 3A+ qui auront répondu à lappel. Bref, rejoignez-nous, on est super cools :)""" (nombreux⋅ses) 3A+ qui auront répondu à lappel. Bref, rejoignez-nous, on est super cools :)"""
], ],
[ [
"[Bus]ka-P", "#7c4768", 0, "[Bus]ka-P 🥇🍻🎤", "#7c4768", 4.5,
"""Booska-p, cest le « site N°1 du Rap français ». Le [Bus]ka-p ? Le bus N°1 sur lambiance au WEI. Les nuits vont être """Booska-p, cest le « site N°1 du Rap français ». Le [Bus]ka-p ? Le bus N°1 sur lambiance au WEI. Les nuits vont être
courtes, les cocktails vont couler à flots : tout sera réuni pour vivre un week-end dont tu te souviendras toute ta vie. courtes, les cocktails vont couler à flots : tout sera réuni pour vivre un week-end dont tu te souviendras toute ta vie.
Au programme pas un seul temps mort et un maximum de rencontres pour bien commencer ta première année à lENS. Et bien Au programme pas un seul temps mort et un maximum de rencontres pour bien commencer ta première année à lENS. Et bien
@ -129,7 +138,7 @@ WORDS.update({
class WEISurveyForm2024(forms.Form): class WEISurveyForm2024(forms.Form):
""" """
Survey form for the year 2024. Survey form for the year 2024.
Members answer 10 questions, from which we calculate the best associated bus. Members score the different buses, from which we calculate the best associated bus.
""" """
def set_registration(self, registration): def set_registration(self, registration):
""" """
@ -139,7 +148,7 @@ class WEISurveyForm2024(forms.Form):
question = information.questions[information.step] question = information.questions[information.step]
self.fields[question] = forms.ChoiceField( self.fields[question] = forms.ChoiceField(
label=WORDS[question][0], label=mark_safe(WORDS[question][0]),
widget=forms.RadioSelect(), widget=forms.RadioSelect(),
) )
answers = [(answer, WORDS[question][1][answer]) for answer in WORDS[question][1]] answers = [(answer, WORDS[question][1][answer]) for answer in WORDS[question][1]]
@ -267,13 +276,27 @@ class WEISurveyAlgorithm2024(WEISurveyAlgorithm):
surveys = list(self.get_survey_class()(r) for r in self.get_registrations()) # All surveys surveys = list(self.get_survey_class()(r) for r in self.get_registrations()) # All surveys
surveys = [s for s in surveys if s.is_complete()] # Don't consider invalid surveys surveys = [s for s in surveys if s.is_complete()] # Don't consider invalid surveys
# Don't manage hardcoded people # Don't manage hardcoded people
surveys = [s for s in surveys if not hasattr(s.information, 'hardcoded') or not s.information.hardcoded] # surveys = [s for s in surveys if s.bus_id != None]
# surveys = [s for s in surveys if not hasattr(s.information, 'hardcoded') or not s.information.hardcoded]
# surveys = [s for s in surveys if s.registration.user_id in free_users]
# hardcoded_first_year_mb = WEIMembership.objects.filter(bus != None,registration__first_year=True)
# hardcoded_first_year = hardcoded_first_year_mb.values_list('user__id', 'bus__id')
hardcoded_first_year_mb = WEIMembership.objects.filter(registration__first_year=True)
hardcoded_first_year = {mb.user.id if mb.bus else None: mb.bus.id if mb.bus else None for mb in hardcoded_first_year_mb}
# Reset previous algorithm run # Reset previous algorithm run
for survey in surveys: for survey in surveys:
survey.free() survey.free()
if survey.registration.user_id in hardcoded_first_year.keys():
survey.select_bus(hardcoded_first_year[s.registration.user_id])
survey.save() survey.save()
non_men = [s for s in surveys if s.registration.gender != 'male'] non_men = [s for s in surveys if s.registration.gender != 'male']
men = [s for s in surveys if s.registration.gender == 'male'] men = [s for s in surveys if s.registration.gender == 'male']
@ -282,9 +305,7 @@ class WEISurveyAlgorithm2024(WEISurveyAlgorithm):
non_men_total = registrations.filter(~Q(gender='male')).count() non_men_total = registrations.filter(~Q(gender='male')).count()
for bus in self.get_buses(): for bus in self.get_buses():
free_seats = bus.size - WEIMembership.objects.filter(bus=bus, registration__first_year=False).count() free_seats = bus.size - WEIMembership.objects.filter(bus=bus, registration__first_year=False).count()
# Remove hardcoded people free_seats -= sum(1 for s in non_men if s.information.selected_bus_pk == bus.pk)
free_seats -= WEIMembership.objects.filter(bus=bus, registration__first_year=True,
registration__information_json__icontains="hardcoded").count()
quotas[bus] = 4 + int(non_men_total / registrations.count() * free_seats) quotas[bus] = 4 + int(non_men_total / registrations.count() * free_seats)
tqdm_obj = None tqdm_obj = None
@ -299,9 +320,6 @@ class WEISurveyAlgorithm2024(WEISurveyAlgorithm):
for bus in self.get_buses(): for bus in self.get_buses():
free_seats = bus.size - WEIMembership.objects.filter(bus=bus, registration__first_year=False).count() free_seats = bus.size - WEIMembership.objects.filter(bus=bus, registration__first_year=False).count()
free_seats -= sum(1 for s in non_men if s.information.selected_bus_pk == bus.pk) free_seats -= sum(1 for s in non_men if s.information.selected_bus_pk == bus.pk)
# Remove hardcoded people
free_seats -= WEIMembership.objects.filter(bus=bus, registration__first_year=True,
registration__information_json__icontains="hardcoded").count()
quotas[bus] = free_seats quotas[bus] = free_seats
if display_tqdm: if display_tqdm:

View File

@ -0,0 +1,18 @@
# Generated by Django 4.2.15 on 2024-08-28 20:47
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('wei', '0008_auto_20240111_1545'),
]
operations = [
migrations.AddField(
model_name='weiregistration',
name='specific_diet',
field=models.TextField(blank=True, default='', verbose_name='specific diet'),
),
]

View File

@ -0,0 +1,17 @@
# Generated by Django 4.2.15 on 2024-08-29 20:15
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
('wei', '0009_weiregistration_specific_diet'),
]
operations = [
migrations.RemoveField(
model_name='weiregistration',
name='specific_diet',
),
]

View File

@ -12,7 +12,7 @@
<div class="card-body"> <div class="card-body">
{% render_table bus_repartition_table %} {% render_table bus_repartition_table %}
<hr> <hr>
<a href="{% url 'wei:wei_bus_1A_next' pk=club.pk %}" class="btn btn-block btn-success">{% trans "Start attribution!" %}</a> <a href="{% url 'wei:wei_bus_1A_next' pk=club.pk %}" class="btn btn-block btn-success">{% trans "Start attribution !" %}</a>
<hr> <hr>
{% render_table table %} {% render_table table %}
</div> </div>

View File

@ -25,7 +25,7 @@
<dt class="col-xl-6">{% trans 'department'|capfirst %}</dt> <dt class="col-xl-6">{% trans 'department'|capfirst %}</dt>
<dd class="col-xl-6">{{ object.user.profile.get_department_display }}</dd> <dd class="col-xl-6">{{ object.user.profile.get_department_display }}</dd>
<dt class="col-xl-6">{% trans 'health issues'|capfirst %}</dt> <dt class="col-xl-6">{% trans 'health issues or specific diet'|capfirst %}</dt>
<dd class="col-xl-6">{{ object.health_issues|default:"—" }}</dd> <dd class="col-xl-6">{{ object.health_issues|default:"—" }}</dd>
<dt class="col-xl-6">{% trans 'suggested bus'|capfirst %}</dt> <dt class="col-xl-6">{% trans 'suggested bus'|capfirst %}</dt>

View File

@ -64,7 +64,7 @@ SPDX-License-Identifier: GPL-3.0-or-later
<dt class="col-xl-6">{% trans 'birth date'|capfirst %}</dt> <dt class="col-xl-6">{% trans 'birth date'|capfirst %}</dt>
<dd class="col-xl-6">{{ registration.birth_date }}</dd> <dd class="col-xl-6">{{ registration.birth_date }}</dd>
<dt class="col-xl-6">{% trans 'health issues'|capfirst %}</dt> <dt class="col-xl-6">{% trans 'health issues or specific diet'|capfirst %}</dt>
<dd class="col-xl-6">{{ registration.health_issues }}</dd> <dd class="col-xl-6">{{ registration.health_issues }}</dd>
<dt class="col-xl-6">{% trans 'emergency contact name'|capfirst %}</dt> <dt class="col-xl-6">{% trans 'emergency contact name'|capfirst %}</dt>