@ -4,6 +4,7 @@
from functools import lru_cache
from django import forms
from django . utils . safestring import mark_safe
from django . db import transaction
from django . db . models import Q
@ -13,7 +14,7 @@ from ...models import WEIMembership
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
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
@ -21,16 +22,24 @@ buses_descr = [
siphonner ! """ ,
] ,
[
" Va[car]me " , " #fd7a28 " , 0 ,
""" 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 vou s
ambiancer ! On fera en sorte que vous vous souveniez de votre WEI et d e s on Vacarme ! """ ,
" Va[car]me 🎷🍎🔊 " , " #fd7a28 " , 3 ,
""" Ici, c ' est le bus du bruit. Si vous voulez réveiller les autres bus en musique, apprendre de merveilleuse s
mélodies au kazoo tout le week-end, ou simplement profiter d ' un e b onne 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 ,
""" Bus dans le thème des Caraïbes … 🐬🏴☠️🐬 """ ,
" [Kar]aïbes 🏝️🏴☠️🥥 " , " #a5cfdd " , 3 ,
""" Ahoy, explorateurs du WEI ! Le bus Karaibes t’ invite à une traversée sous les tropiques, où l’ ambiance est
toujours au beau fixe ! ☀️🍹 Ici, c’ est soleil, rhum, et bonne humeur assurée : une atmosphère de vacances où
l’ on 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’ à l’ aube. Prêt à embarquer pour une aventure inoubliable
avec les meilleurs matelots du WEI ? On t’ attend sur le pont du Karaibes pour lever l’ ancre ensemble ! """ ,
] ,
[
" [Kar]di [Bus] " , " #e46398 " , 0 ,
" [Kar]di [Bus] 🎙️💅 " , " #e46398 " , 2.5 ,
""" Bienvenue à bord du Kardi Bus, la seul, l’ unique, l’ inimitable pépite de ce weekend d’ inté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,
d’ audace 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 ! """ ,
] ,
[
" 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
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
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é à
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], c’ est comme une grande famille qui fait un apéro, qui se bourre un peu la
gueule en discutant des heures autour d’ une table remplie de bouffe et de super bons cocktails (la plupart des
barmen/barwomen du bus sont les barmans de Shakens), sauf qu’ on est un bus du Wei (vous comprendrez bien le nom de notre
@ -59,7 +68,7 @@ buses_descr = [
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
finir en beauté votre première inté. Préparez-vous à vous abreuver de cocktails (savamment élaborés) à la vibration d’ un
système son fabriqué pour l’ occasion. 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 à l’ appel. Bref, rejoignez-nous, on est super cools :) """
] ,
[
" [Bus]ka-P " , " #7c4768 " , 0 ,
" [Bus]ka-P 🥇🍻🎤 " , " #7c4768 " , 4.5 ,
""" Booska-p, c’ est le « site N°1 du Rap français ». Le [Bus]ka-p ? Le bus N°1 sur l’ ambiance 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.
Au programme pas un seul temps mort et un maximum de rencontres pour bien commencer ta première année à l’ ENS. Et bien
@ -129,7 +138,7 @@ WORDS.update({
class WEISurveyForm2024 ( forms . Form ) :
"""
Survey form for the year 2024.
Members answer 10 question s, from which we calculate the best associated bus.
Members score the different buse s, from which we calculate the best associated bus.
"""
def set_registration ( self , registration ) :
"""
@ -139,7 +148,7 @@ class WEISurveyForm2024(forms.Form):
question = information . questions [ information . step ]
self . fields [ question ] = forms . ChoiceField (
label = WORDS [ question ] [ 0 ] ,
label = mark_safe ( WORDS[ question ] [ 0 ] ) ,
widget = forms . RadioSelect ( ) ,
)
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 = [ s for s in surveys if s . is_complete ( ) ] # Don't consider invalid surveys
# 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
for survey in surveys :
survey . free ( )
if survey . registration . user_id in hardcoded_first_year . keys ( ) :
survey . select_bus ( hardcoded_first_year [ s . registration . user_id ] )
survey . save ( )
non_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 ( )
for bus in self . get_buses ( ) :
free_seats = bus . size - WEIMembership . objects . filter ( bus = bus , registration__first_year = False ) . count ( )
# Remove hardcoded people
free_seats - = WEIMembership . objects . filter ( bus = bus , registration__first_year = True ,
registration__information_json__icontains = " hardcoded " ) . count ( )
free_seats - = sum ( 1 for s in non_men if s . information . selected_bus_pk == bus . pk )
quotas [ bus ] = 4 + int ( non_men_total / registrations . count ( ) * free_seats )
tqdm_obj = None
@ -299,9 +320,6 @@ class WEISurveyAlgorithm2024(WEISurveyAlgorithm):
for bus in self . get_buses ( ) :
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 )
# Remove hardcoded people
free_seats - = WEIMembership . objects . filter ( bus = bus , registration__first_year = True ,
registration__information_json__icontains = " hardcoded " ) . count ( )
quotas [ bus ] = free_seats
if display_tqdm :