Merge branch 'master' into Kerl/ldap
This commit is contained in:
commit
d4b696db70
26
README.md
26
README.md
|
@ -84,29 +84,30 @@ visualiser la dernière version du code.
|
|||
Si vous optez pour une installation manuelle plutôt que d'utiliser Vagrant, il
|
||||
est fortement conseillé d'utiliser un environnement virtuel pour Python.
|
||||
|
||||
Il vous faudra installer mercurial, pip, les librairies de développement de
|
||||
python, un client et un serveur MySQL ainsi qu'un serveur redis ; sous Debian et
|
||||
dérivées (Ubuntu, ...) :
|
||||
Il vous faudra installer pip, les librairies de développement de python, un
|
||||
client et un serveur MySQL ainsi qu'un serveur redis ; sous Debian et dérivées
|
||||
(Ubuntu, ...) :
|
||||
|
||||
sudo apt-get install mercurial python-pip python-dev libmysqlclient-dev
|
||||
redis-server
|
||||
sudo apt-get install python-pip python-dev libmysqlclient-dev redis-server
|
||||
|
||||
Si vous décidez d'utiliser un environnement virtuel Python (virtualenv;
|
||||
fortement conseillé), déplacez-vous dans le dossier où est installé GestioCOF
|
||||
(le dossier où se trouve ce README), et créez-le maintenant :
|
||||
|
||||
virtualenv env
|
||||
virtualenv env -p $(which python3)
|
||||
|
||||
Pour l'activer, il faut faire
|
||||
L'option `-p` sert à préciser l'exécutable python à utiliser. Vous devez choisir
|
||||
python3, si c'est la version de python par défaut sur votre système, ceci n'est
|
||||
pas nécessaire. Pour l'activer, il faut faire
|
||||
|
||||
. env/bin/activate
|
||||
|
||||
dans le même dossier.
|
||||
|
||||
Vous pouvez maintenant installer les dépendances Python depuis les fichiers
|
||||
`requirements.txt` et `requirements-devel.txt` :
|
||||
Vous pouvez maintenant installer les dépendances Python depuis le fichier
|
||||
`requirements-devel.txt` :
|
||||
|
||||
pip install -r requirements.txt -r requirements-devel.txt
|
||||
pip install -r requirements-devel.txt
|
||||
|
||||
Copiez le fichier `cof/settings_dev.py` dans `cof/settings.py`.
|
||||
|
||||
|
@ -171,9 +172,10 @@ Il ne vous reste plus qu'à initialiser les modèles de Django avec la commande
|
|||
python manage.py migrate
|
||||
|
||||
|
||||
Une base de donnée pré-remplie est disponible en lançant la commande :
|
||||
Une base de donnée pré-remplie est disponible en lançant les commandes :
|
||||
|
||||
python manage.py loaddata users root bda gestion sites accounts groups articles
|
||||
python manage.py loaddata gestion sites accounts groups articles
|
||||
python manage.py loaddevdata
|
||||
|
||||
Vous êtes prêts à développer ! Lancer GestioCOF en faisant
|
||||
|
||||
|
|
File diff suppressed because it is too large
Load diff
107
bda/management/commands/loadbdadevdata.py
Normal file
107
bda/management/commands/loadbdadevdata.py
Normal file
|
@ -0,0 +1,107 @@
|
|||
"""
|
||||
Crée deux tirages de test et y inscrit les utilisateurs
|
||||
"""
|
||||
|
||||
import os
|
||||
import random
|
||||
|
||||
from django.utils import timezone
|
||||
from django.contrib.auth.models import User
|
||||
|
||||
from gestioncof.management.base import MyBaseCommand
|
||||
from bda.models import Tirage, Spectacle, Salle, Participant, ChoixSpectacle
|
||||
from bda.views import do_tirage
|
||||
|
||||
|
||||
# Où sont stockés les fichiers json
|
||||
DATA_DIR = os.path.join(os.path.dirname(os.path.dirname(__file__)),
|
||||
'data')
|
||||
|
||||
|
||||
class Command(MyBaseCommand):
|
||||
help = "Crée deux tirages de test et y inscrit les utilisateurs."
|
||||
|
||||
def handle(self, *args, **options):
|
||||
# ---
|
||||
# Tirages
|
||||
# ---
|
||||
|
||||
Tirage.objects.all().delete()
|
||||
Tirage.objects.bulk_create([
|
||||
Tirage(
|
||||
title="Tirage de test 1",
|
||||
ouverture=timezone.now()-timezone.timedelta(days=7),
|
||||
fermeture=timezone.now(),
|
||||
active=True
|
||||
),
|
||||
Tirage(
|
||||
title="Tirage de test 2",
|
||||
ouverture=timezone.now(),
|
||||
fermeture=timezone.now()+timezone.timedelta(days=60),
|
||||
active=True
|
||||
)
|
||||
])
|
||||
tirages = Tirage.objects.all()
|
||||
|
||||
# ---
|
||||
# Salles
|
||||
# ---
|
||||
|
||||
locations = self.from_json('locations.json', DATA_DIR, Salle)
|
||||
|
||||
# ---
|
||||
# Spectacles
|
||||
# ---
|
||||
|
||||
def show_callback(show):
|
||||
"""
|
||||
Assigne un tirage, une date et un lieu à un spectacle et décide si
|
||||
les places sont sur listing.
|
||||
"""
|
||||
show.tirage = random.choice(tirages)
|
||||
show.listing = bool(random.randint(0, 1))
|
||||
show.date = (
|
||||
show.tirage.fermeture
|
||||
+ timezone.timedelta(days=random.randint(60, 90))
|
||||
)
|
||||
show.location = random.choice(locations)
|
||||
return show
|
||||
shows = self.from_json(
|
||||
'shows.json', DATA_DIR, Spectacle, show_callback
|
||||
)
|
||||
|
||||
# ---
|
||||
# Inscriptions
|
||||
# ---
|
||||
|
||||
self.stdout.write("Inscription des utilisateurs aux tirages")
|
||||
ChoixSpectacle.objects.all().delete()
|
||||
choices = []
|
||||
for user in User.objects.filter(profile__is_cof=True):
|
||||
for tirage in tirages:
|
||||
part, _ = Participant.objects.get_or_create(
|
||||
user=user,
|
||||
tirage=tirage
|
||||
)
|
||||
shows = random.sample(
|
||||
list(tirage.spectacle_set.all()),
|
||||
tirage.spectacle_set.count() // 2
|
||||
)
|
||||
for (rank, show) in enumerate(shows):
|
||||
choices.append(ChoixSpectacle(
|
||||
participant=part,
|
||||
spectacle=show,
|
||||
priority=rank + 1,
|
||||
double_choice=random.choice(
|
||||
['1', 'double', 'autoquit']
|
||||
)
|
||||
))
|
||||
ChoixSpectacle.objects.bulk_create(choices)
|
||||
self.stdout.write("- {:d} inscriptions générées".format(len(choices)))
|
||||
|
||||
# ---
|
||||
# On lance le premier tirage
|
||||
# ---
|
||||
|
||||
self.stdout.write("Lancement du premier tirage")
|
||||
do_tirage(tirages[0], "dummy_token")
|
26
bda/management/data/locations.json
Normal file
26
bda/management/data/locations.json
Normal file
|
@ -0,0 +1,26 @@
|
|||
[
|
||||
{
|
||||
"name": "Cour\u00f4",
|
||||
"address": "45 rue d'Ulm, cour\u00f4"
|
||||
},
|
||||
{
|
||||
"name": "K-F\u00eat",
|
||||
"address": "45 rue d'Ulm, escalier C, niveau -1"
|
||||
},
|
||||
{
|
||||
"name": "Th\u00e9\u00e2tre",
|
||||
"address": "45 rue d'Ulm, escalier C, niveau -1"
|
||||
},
|
||||
{
|
||||
"name": "Cours Pasteur",
|
||||
"address": "45 rue d'Ulm, cours pasteur"
|
||||
},
|
||||
{
|
||||
"name": "Salle des actes",
|
||||
"address": "45 rue d'Ulm, escalier A, niveau 1"
|
||||
},
|
||||
{
|
||||
"name": "Amphi Rataud",
|
||||
"address": "45 rue d'Ulm, NIR, niveau PB"
|
||||
}
|
||||
]
|
100
bda/management/data/shows.json
Normal file
100
bda/management/data/shows.json
Normal file
|
@ -0,0 +1,100 @@
|
|||
[
|
||||
{
|
||||
"description": "Jazz / Funk",
|
||||
"title": "Un super concert",
|
||||
"price": 10.0,
|
||||
"slots_description": "Debout",
|
||||
"slots": 5
|
||||
},
|
||||
{
|
||||
"description": "Homemade",
|
||||
"title": "Une super pi\u00e8ce",
|
||||
"price": 10.0,
|
||||
"slots_description": "Assises",
|
||||
"slots": 60
|
||||
},
|
||||
{
|
||||
"description": "Plein air, soleil, bonne musique",
|
||||
"title": "Concert pour la f\u00eate de la musique",
|
||||
"price": 5.0,
|
||||
"slots_description": "Debout, attention \u00e0 la fontaine",
|
||||
"slots": 30
|
||||
},
|
||||
{
|
||||
"description": "Sous le regard s\u00e9v\u00e8re de Louis Pasteur",
|
||||
"title": "Op\u00e9ra sans d\u00e9cors",
|
||||
"price": 5.0,
|
||||
"slots_description": "Assis sur l'herbe",
|
||||
"slots": 20
|
||||
},
|
||||
{
|
||||
"description": "Buffet \u00e0 la fin",
|
||||
"title": "Concert Trouv\u00e8re",
|
||||
"price": 20.0,
|
||||
"slots_description": "Assises",
|
||||
"slots": 15
|
||||
},
|
||||
{
|
||||
"description": "Vive les maths",
|
||||
"title": "Dessin \u00e0 la craie sur tableau noir",
|
||||
"price": 10.0,
|
||||
"slots_description": "Assises, tablette pour prendre des notes",
|
||||
"slots": 30
|
||||
},
|
||||
{
|
||||
"description": "Une pi\u00e8ce \u00e0 un personnage",
|
||||
"title": "D\u00e9cors, d\u00e9montage en musique",
|
||||
"price": 0.0,
|
||||
"slots_description": "Assises",
|
||||
"slots": 20
|
||||
},
|
||||
{
|
||||
"description": "Annulera, annulera pas\u00a0?",
|
||||
"title": "La Nuit",
|
||||
"price": 27.0,
|
||||
"slots_description": "",
|
||||
"slots": 1000
|
||||
},
|
||||
{
|
||||
"description": "Le boum fait sa carte blanche",
|
||||
"title": "Turbomix",
|
||||
"price": 10.0,
|
||||
"slots_description": "Debout les mains en l'air",
|
||||
"slots": 20
|
||||
},
|
||||
{
|
||||
"description": "Unique repr\u00e9sentation",
|
||||
"title": "Carinettes et trombone",
|
||||
"price": 15.0,
|
||||
"slots_description": "Chaises ikea",
|
||||
"slots": 10
|
||||
},
|
||||
{
|
||||
"description": "Suivi d'une jam session",
|
||||
"title": "Percussion sur rondins",
|
||||
"price": 5.0,
|
||||
"slots_description": "B\u00fbches",
|
||||
"slots": 14
|
||||
},
|
||||
{
|
||||
"description": "\u00c9preuve sportive et artistique",
|
||||
"title": "Bassin aux ernests, nage libre",
|
||||
"price": 5.0,
|
||||
"slots_description": "Humides",
|
||||
"slots": 10
|
||||
},
|
||||
{
|
||||
"description": "Sonore",
|
||||
"title": "Chant du barde",
|
||||
"price": 13.0,
|
||||
"slots_description": "Ne venez pas",
|
||||
"slots": 20
|
||||
},
|
||||
{
|
||||
"description": "Cocorico",
|
||||
"title": "Chant du coq",
|
||||
"price": 4.0,
|
||||
"slots_description": "bancs",
|
||||
"slots": 15
|
||||
}
|
||||
]
|
|
@ -11,10 +11,8 @@ from django.template import loader
|
|||
from django.core import mail
|
||||
from django.conf import settings
|
||||
from django.utils import timezone, formats
|
||||
from django.utils.encoding import python_2_unicode_compatible
|
||||
|
||||
|
||||
@python_2_unicode_compatible
|
||||
class Tirage(models.Model):
|
||||
title = models.CharField("Titre", max_length=300)
|
||||
ouverture = models.DateTimeField("Date et heure d'ouverture du tirage")
|
||||
|
@ -29,7 +27,6 @@ class Tirage(models.Model):
|
|||
timezone.template_localtime(self.fermeture)))
|
||||
|
||||
|
||||
@python_2_unicode_compatible
|
||||
class Salle(models.Model):
|
||||
name = models.CharField("Nom", max_length=300)
|
||||
address = models.TextField("Adresse")
|
||||
|
@ -38,7 +35,6 @@ class Salle(models.Model):
|
|||
return self.name
|
||||
|
||||
|
||||
@python_2_unicode_compatible
|
||||
class CategorieSpectacle(models.Model):
|
||||
name = models.CharField('Nom', max_length=100, unique=True)
|
||||
|
||||
|
@ -122,6 +118,9 @@ class Spectacle(models.Model):
|
|||
# On renvoie la liste des destinataires
|
||||
return members.values()
|
||||
|
||||
@property
|
||||
def is_past(self):
|
||||
return self.date < timezone.now()
|
||||
|
||||
class Quote(models.Model):
|
||||
spectacle = models.ForeignKey(Spectacle)
|
||||
|
@ -137,7 +136,6 @@ PAYMENT_TYPES = (
|
|||
)
|
||||
|
||||
|
||||
@python_2_unicode_compatible
|
||||
class Participant(models.Model):
|
||||
user = models.ForeignKey(User)
|
||||
choices = models.ManyToManyField(Spectacle,
|
||||
|
@ -165,7 +163,6 @@ DOUBLE_CHOICES = (
|
|||
)
|
||||
|
||||
|
||||
@python_2_unicode_compatible
|
||||
class ChoixSpectacle(models.Model):
|
||||
participant = models.ForeignKey(Participant)
|
||||
spectacle = models.ForeignKey(Spectacle, related_name="participants")
|
||||
|
@ -184,7 +181,7 @@ class ChoixSpectacle(models.Model):
|
|||
|
||||
def __str__(self):
|
||||
return "Vœux de %s pour %s" % (
|
||||
self.participant.user.get_full_name,
|
||||
self.participant.user.get_full_name(),
|
||||
self.spectacle.title)
|
||||
|
||||
class Meta:
|
||||
|
@ -194,7 +191,6 @@ class ChoixSpectacle(models.Model):
|
|||
verbose_name_plural = "voeux"
|
||||
|
||||
|
||||
@python_2_unicode_compatible
|
||||
class Attribution(models.Model):
|
||||
participant = models.ForeignKey(Participant)
|
||||
spectacle = models.ForeignKey(Spectacle, related_name="attribues")
|
||||
|
@ -205,7 +201,6 @@ class Attribution(models.Model):
|
|||
self.spectacle.date)
|
||||
|
||||
|
||||
@python_2_unicode_compatible
|
||||
class SpectacleRevente(models.Model):
|
||||
attribution = models.OneToOneField(Attribution,
|
||||
related_name="revente")
|
||||
|
|
|
@ -43,3 +43,6 @@ td {
|
|||
margin: 10px 0px;
|
||||
}
|
||||
|
||||
.spectacle-passe {
|
||||
opacity:0.5;
|
||||
}
|
||||
|
|
|
@ -2,11 +2,10 @@
|
|||
{% load staticfiles %}
|
||||
|
||||
{% block extra_head %}
|
||||
<link href="{{ STATIC_URL }}grappelli/jquery/ui/css/custom-theme/jquery-ui-1.8.custom.css" rel="stylesheet" type="text/css" media="screen" title="no title" charset="utf-8" />
|
||||
<script src="{{ STATIC_URL }}grappelli/jquery/jquery-1.6.2.min.js" type="text/javascript"></script>
|
||||
<script src="{{ STATIC_URL }}grappelli/jquery/ui/js/jquery-ui-1.8.15.custom.min.js" type="text/javascript"></script>
|
||||
<link href="{{ STATIC_URL }}grappelli/css/tools.css" rel="stylesheet" type="text/css" />
|
||||
<link href="{{ STATIC_URL }}grappelli/css/jquery-ui-grappelli-extensions.css" rel="stylesheet" type="text/css" />
|
||||
<script src="{% static 'js/jquery.min.js'%}" type="text/javascript"></script>
|
||||
<script src="{% static 'js/jquery-ui.min.js' %}" type="text/javascript"></script>
|
||||
<script src="{% static "js/jquery.ui.touch-punch.min.js" %}" type="text/javascript"></script>
|
||||
<link type="text/css" rel="stylesheet" href="{% static "css/jquery-ui.min.css" %}" />
|
||||
<link type="text/css" rel="stylesheet" href="{% static "css/bda.css" %}" />
|
||||
{% endblock %}
|
||||
|
||||
|
@ -102,7 +101,7 @@ var django = {
|
|||
{% endif %}
|
||||
<form class="form-horizontal" id="bda_form" method="post" action="{% url 'bda-tirage-inscription' tirage.id %}">
|
||||
{% csrf_token %}
|
||||
{% include "inscription-formset.html" %}
|
||||
{% include "bda/inscription-formset.html" %}
|
||||
<div class="inscription-bottom">
|
||||
<span class="bda-prix">Prix total actuel : {{ total_price }}€</span>
|
||||
<div class="pull-right">
|
|
@ -5,7 +5,7 @@ a été postée sur BdA-Revente.
|
|||
|
||||
{% with revente.date_tirage as time %}
|
||||
Si ce spectacle t'intéresse toujours, merci de nous le signaler en cliquant
|
||||
sur ce lien : http://{{ domain }}{% url "bda-revente-interested" revente.id %}.
|
||||
sur ce lien : http://{{ domain }}/gestion{% url "bda-revente-interested" revente.id %}.
|
||||
Dans le cas où plusieurs personnes seraient intéressées, nous procèderons à
|
||||
un tirage au sort le {{ time|date:"DATE_FORMAT" }} à {{ time|time:"TIME_FORMAT" }} (dans {{time|timeuntil}}).
|
||||
{% endwith %}
|
||||
|
|
|
@ -5,7 +5,7 @@ a été postée sur BdA-Revente.
|
|||
|
||||
Puisque ce spectacle a lieu dans moins de 24h, il n'y a pas de tirage au sort pour
|
||||
cette place : elle est disponible immédiatement à l'adresse
|
||||
http://{{ domain }}{% url "bda-buy-revente" spectacle.id %}, à la disposition de tous.
|
||||
http://{{ domain }}/gestion{% url "bda-buy-revente" spectacle.id %}, à la disposition de tous.
|
||||
|
||||
Chaleureusement,
|
||||
Le BdA
|
||||
|
|
|
@ -1,6 +1,10 @@
|
|||
{% extends "base_title.html" %}
|
||||
{% load staticfiles %}
|
||||
|
||||
{% block extra_head %}
|
||||
<link type="text/css" rel="stylesheet" href="{% static "css/bda.css" %}" />
|
||||
{% endblock %}
|
||||
|
||||
{% block realcontent %}
|
||||
<h2><strong>{{tirage_name}}</strong></h2>
|
||||
<h3>Liste des spectacles</h3>
|
||||
|
@ -17,9 +21,9 @@
|
|||
</thead>
|
||||
<tbody>
|
||||
{% for spectacle in object_list %}
|
||||
<tr class="clickable-row" data-href="{% url 'bda-spectacle' tirage_id spectacle.id %}">
|
||||
<tr class="clickable-row {% if spectacle.is_past %}spectacle-passe{% endif %}" data-href="{% url 'bda-spectacle' tirage_id spectacle.id %}">
|
||||
<td><a href="{% url 'bda-spectacle' tirage_id spectacle.id %}">{{ spectacle.title }} <span style="font-size:small;" class="glyphicon glyphicon-link" aria-hidden="true"></span></a></td>
|
||||
<td data-sort-value="{{ spectacle.timestamp }}">{{ spectacle.date }}</td>
|
||||
<td data-sort-value="{{ spectacle.timestamp }}"">{{ spectacle.date }}</td>
|
||||
<td data-sort-value="{{ spectacle.location }}">{{ spectacle.location }}</td>
|
||||
<td data-sort-value="{{ spectacle.price |stringformat:".3f" }}">
|
||||
{{ spectacle.price |floatformat }}€
|
||||
|
|
158
bda/views.py
158
bda/views.py
|
@ -124,14 +124,14 @@ def inscription(request, tirage_id):
|
|||
tirage = get_object_or_404(Tirage, id=tirage_id)
|
||||
if timezone.now() < tirage.ouverture:
|
||||
error_desc = tirage.ouverture.strftime('Ouverture le %d %b %Y à %H:%M')
|
||||
return render(request, 'resume_inscription.html',
|
||||
return render(request, 'bda/resume-inscription-tirage.html',
|
||||
{"error_title": "Le tirage n'est pas encore ouvert !",
|
||||
"error_description": error_desc})
|
||||
if timezone.now() > tirage.fermeture:
|
||||
participant, created = Participant.objects.get_or_create(
|
||||
user=request.user, tirage=tirage)
|
||||
choices = participant.choixspectacle_set.order_by("priority").all()
|
||||
return render(request, "resume_inscription.html",
|
||||
return render(request, "bda/resume-inscription-tirage.html",
|
||||
{"error_title": "C'est fini !",
|
||||
"error_description":
|
||||
"Tirage au sort dans la journée !",
|
||||
|
@ -170,7 +170,7 @@ def inscription(request, tirage_id):
|
|||
total_price += choice.spectacle.price
|
||||
if choice.double:
|
||||
total_price += choice.spectacle.price
|
||||
return render(request, "inscription-bda.html",
|
||||
return render(request, "bda/inscription-tirage.html",
|
||||
{"formset": formset,
|
||||
"success": success,
|
||||
"total_price": total_price,
|
||||
|
@ -179,79 +179,96 @@ def inscription(request, tirage_id):
|
|||
"stateerror": stateerror})
|
||||
|
||||
|
||||
def do_tirage(request, tirage_id):
|
||||
tirage_elt = get_object_or_404(Tirage, id=tirage_id)
|
||||
form = TokenForm(request.POST)
|
||||
if not form.is_valid():
|
||||
return tirage(request, tirage_id)
|
||||
def do_tirage(tirage_elt, token):
|
||||
"""
|
||||
Fonction auxiliaire à la vue ``tirage`` qui lance effectivement le tirage
|
||||
après qu'on a vérifié que c'est légitime et que le token donné en argument
|
||||
est correct.
|
||||
Rend les résultats
|
||||
"""
|
||||
# Initialisation du dictionnaire data qui va contenir les résultats
|
||||
start = time.time()
|
||||
data = {}
|
||||
shows = tirage_elt.spectacle_set.select_related().all()
|
||||
members = tirage_elt.participant_set.all()
|
||||
choices = ChoixSpectacle.objects.filter(spectacle__tirage=tirage_elt) \
|
||||
.order_by('participant', 'priority').select_related().all()
|
||||
algo = Algorithm(shows, members, choices)
|
||||
results = algo(form.cleaned_data["token"])
|
||||
total_slots = 0
|
||||
total_losers = 0
|
||||
data = {
|
||||
'shows': tirage_elt.spectacle_set.select_related().all(),
|
||||
'token': token,
|
||||
'members': tirage_elt.participant_set.all(),
|
||||
'total_slots': 0,
|
||||
'total_losers': 0,
|
||||
'total_sold': 0,
|
||||
'total_deficit': 0,
|
||||
'opera_deficit': 0,
|
||||
}
|
||||
|
||||
# On lance le tirage
|
||||
choices = (
|
||||
ChoixSpectacle.objects
|
||||
.filter(spectacle__tirage=tirage_elt)
|
||||
.order_by('participant', 'priority')
|
||||
.select_related().all()
|
||||
)
|
||||
results = Algorithm(data['shows'], data['members'], choices)(token)
|
||||
|
||||
# On compte les places attribuées et les déçus
|
||||
for (_, members, losers) in results:
|
||||
total_slots += len(members)
|
||||
total_losers += len(losers)
|
||||
data["total_slots"] = total_slots
|
||||
data["total_losers"] = total_losers
|
||||
data["shows"] = shows
|
||||
data["token"] = form.cleaned_data["token"]
|
||||
data["members"] = members
|
||||
data["results"] = results
|
||||
total_sold = 0
|
||||
total_deficit = 0
|
||||
opera_deficit = 0
|
||||
data['total_slots'] += len(members)
|
||||
data['total_losers'] += len(losers)
|
||||
|
||||
# On calcule le déficit et les bénéfices pour le BdA
|
||||
# FIXME: le traitement de l'opéra est sale
|
||||
for (show, members, _) in results:
|
||||
deficit = (show.slots - len(members)) * show.price
|
||||
total_sold += show.slots * show.price
|
||||
data['total_sold'] += show.slots * show.price
|
||||
if deficit >= 0:
|
||||
if "Opéra" in show.location.name:
|
||||
opera_deficit += deficit
|
||||
total_deficit += deficit
|
||||
data["total_sold"] = total_sold - total_deficit
|
||||
data["total_deficit"] = total_deficit
|
||||
data["opera_deficit"] = opera_deficit
|
||||
data['opera_deficit'] += deficit
|
||||
data['total_deficit'] += deficit
|
||||
data["total_sold"] -= data['total_deficit']
|
||||
|
||||
# Participant objects are not shared accross spectacle results,
|
||||
# so assign a single object for each Participant id
|
||||
members_uniq = {}
|
||||
members2 = {}
|
||||
for (show, members, _) in results:
|
||||
for (member, _, _, _) in members:
|
||||
if member.id not in members_uniq:
|
||||
members_uniq[member.id] = member
|
||||
members2[member] = []
|
||||
member.total = 0
|
||||
member = members_uniq[member.id]
|
||||
members2[member].append(show)
|
||||
member.total += show.price
|
||||
members2 = members2.items()
|
||||
data["members2"] = sorted(members2, key=lambda m: m[0].user.last_name)
|
||||
|
||||
# ---
|
||||
# À partir d'ici, le tirage devient effectif
|
||||
# ---
|
||||
|
||||
# On suppression les vieilles attributions, on sauvegarde le token et on
|
||||
# désactive le tirage
|
||||
Attribution.objects.filter(spectacle__tirage=tirage_elt).delete()
|
||||
tirage_elt.tokens += '{:s}\n"""{:s}"""\n'.format(
|
||||
timezone.now().strftime("%y-%m-%d %H:%M:%S"),
|
||||
token)
|
||||
tirage_elt.enable_do_tirage = False
|
||||
tirage_elt.save()
|
||||
|
||||
# On enregistre les nouvelles attributions
|
||||
Attribution.objects.bulk_create([
|
||||
Attribution(spectacle=show, participant=member)
|
||||
for show, members, _ in results
|
||||
for member, _, _, _ in members
|
||||
])
|
||||
|
||||
# On inscrit à BdA-Revente ceux qui n'ont pas eu les places voulues
|
||||
for (show, _, losers) in results:
|
||||
for (loser, _, _, _) in losers:
|
||||
loser.choicesrevente.add(show)
|
||||
loser.save()
|
||||
|
||||
data["duration"] = time.time() - start
|
||||
if request.user.is_authenticated():
|
||||
members2 = {}
|
||||
# Participant objects are not shared accross spectacle results,
|
||||
# so assign a single object for each Participant id
|
||||
members_uniq = {}
|
||||
for (show, members, _) in results:
|
||||
for (member, _, _, _) in members:
|
||||
if member.id not in members_uniq:
|
||||
members_uniq[member.id] = member
|
||||
members2[member] = []
|
||||
member.total = 0
|
||||
member = members_uniq[member.id]
|
||||
members2[member].append(show)
|
||||
member.total += show.price
|
||||
members2 = members2.items()
|
||||
data["members2"] = sorted(members2, key=lambda m: m[0].user.last_name)
|
||||
# À partir d'ici, le tirage devient effectif
|
||||
Attribution.objects.filter(spectacle__tirage=tirage_elt).delete()
|
||||
tirage_elt.tokens += "%s\n\"\"\"%s\"\"\"\n" % (
|
||||
timezone.now().strftime("%y-%m-%d %H:%M:%S"),
|
||||
form.cleaned_data['token'])
|
||||
tirage_elt.enable_do_tirage = False
|
||||
tirage_elt.save()
|
||||
Attribution.objects.bulk_create([
|
||||
Attribution(spectacle=show, participant=member)
|
||||
for show, members, _ in results
|
||||
for member, _, _, _ in members])
|
||||
# On inscrit à BdA-Revente ceux qui n'ont pas eu les places voulues
|
||||
for (show, _, losers) in results:
|
||||
for (loser, _, _, _) in losers:
|
||||
loser.choicesrevente.add(show)
|
||||
loser.save()
|
||||
return render(request, "bda-attrib-extra.html", data)
|
||||
else:
|
||||
return render(request, "bda-attrib.html", data)
|
||||
data["results"] = results
|
||||
return data
|
||||
|
||||
|
||||
@buro_required
|
||||
|
@ -263,7 +280,8 @@ def tirage(request, tirage_id):
|
|||
if request.POST:
|
||||
form = TokenForm(request.POST)
|
||||
if form.is_valid():
|
||||
return do_tirage(request, tirage_id)
|
||||
results = do_tirage(tirage_elt, form.cleaned_data['token'])
|
||||
return render(request, "bda-attrib-extra.html", results)
|
||||
else:
|
||||
form = TokenForm()
|
||||
return render(request, "bda-token.html", {"form": form})
|
||||
|
|
|
@ -152,156 +152,6 @@
|
|||
"model": "gestioncof.petitcourssubject",
|
||||
"pk": 4
|
||||
},
|
||||
{
|
||||
"fields": {
|
||||
"matiere": 1,
|
||||
"niveau": "college",
|
||||
"user": 11,
|
||||
"agrege": false
|
||||
},
|
||||
"model": "gestioncof.petitcoursability",
|
||||
"pk": 1
|
||||
},
|
||||
{
|
||||
"fields": {
|
||||
"matiere": 1,
|
||||
"niveau": "lycee",
|
||||
"user": 11,
|
||||
"agrege": false
|
||||
},
|
||||
"model": "gestioncof.petitcoursability",
|
||||
"pk": 2
|
||||
},
|
||||
{
|
||||
"fields": {
|
||||
"matiere": 1,
|
||||
"niveau": "prepa1styear",
|
||||
"user": 11,
|
||||
"agrege": false
|
||||
},
|
||||
"model": "gestioncof.petitcoursability",
|
||||
"pk": 3
|
||||
},
|
||||
{
|
||||
"fields": {
|
||||
"matiere": 1,
|
||||
"niveau": "prepa2ndyear",
|
||||
"user": 11,
|
||||
"agrege": false
|
||||
},
|
||||
"model": "gestioncof.petitcoursability",
|
||||
"pk": 4
|
||||
},
|
||||
{
|
||||
"fields": {
|
||||
"matiere": 1,
|
||||
"niveau": "licence3",
|
||||
"user": 11,
|
||||
"agrege": false
|
||||
},
|
||||
"model": "gestioncof.petitcoursability",
|
||||
"pk": 5
|
||||
},
|
||||
{
|
||||
"fields": {
|
||||
"matiere": 1,
|
||||
"niveau": "prepa1styear",
|
||||
"user": 43,
|
||||
"agrege": true
|
||||
},
|
||||
"model": "gestioncof.petitcoursability",
|
||||
"pk": 6
|
||||
},
|
||||
{
|
||||
"fields": {
|
||||
"matiere": 1,
|
||||
"niveau": "prepa2ndyear",
|
||||
"user": 43,
|
||||
"agrege": true
|
||||
},
|
||||
"model": "gestioncof.petitcoursability",
|
||||
"pk": 7
|
||||
},
|
||||
{
|
||||
"fields": {
|
||||
"matiere": 1,
|
||||
"niveau": "licence3",
|
||||
"user": 43,
|
||||
"agrege": true
|
||||
},
|
||||
"model": "gestioncof.petitcoursability",
|
||||
"pk": 8
|
||||
},
|
||||
{
|
||||
"fields": {
|
||||
"matiere": 2,
|
||||
"niveau": "college",
|
||||
"user": 43,
|
||||
"agrege": false
|
||||
},
|
||||
"model": "gestioncof.petitcoursability",
|
||||
"pk": 9
|
||||
},
|
||||
{
|
||||
"fields": {
|
||||
"matiere": 2,
|
||||
"niveau": "lycee",
|
||||
"user": 43,
|
||||
"agrege": false
|
||||
},
|
||||
"model": "gestioncof.petitcoursability",
|
||||
"pk": 10
|
||||
},
|
||||
{
|
||||
"fields": {
|
||||
"matiere": 3,
|
||||
"niveau": "lycee",
|
||||
"user": 48,
|
||||
"agrege": true
|
||||
},
|
||||
"model": "gestioncof.petitcoursability",
|
||||
"pk": 11
|
||||
},
|
||||
{
|
||||
"fields": {
|
||||
"matiere": 3,
|
||||
"niveau": "prepa1styear",
|
||||
"user": 48,
|
||||
"agrege": true
|
||||
},
|
||||
"model": "gestioncof.petitcoursability",
|
||||
"pk": 12
|
||||
},
|
||||
{
|
||||
"fields": {
|
||||
"matiere": 3,
|
||||
"niveau": "prepa2ndyear",
|
||||
"user": 48,
|
||||
"agrege": true
|
||||
},
|
||||
"model": "gestioncof.petitcoursability",
|
||||
"pk": 13
|
||||
},
|
||||
{
|
||||
"fields": {
|
||||
"matiere": 3,
|
||||
"niveau": "licence3",
|
||||
"user": 48,
|
||||
"agrege": true
|
||||
},
|
||||
"model": "gestioncof.petitcoursability",
|
||||
"pk": 14
|
||||
},
|
||||
{
|
||||
"fields": {
|
||||
"matiere": 4,
|
||||
"niveau": "college",
|
||||
"user": 10,
|
||||
"agrege": false
|
||||
},
|
||||
"model": "gestioncof.petitcoursability",
|
||||
"pk": 15
|
||||
},
|
||||
{
|
||||
"fields": {
|
||||
"traitee": false,
|
||||
|
|
|
@ -1,41 +0,0 @@
|
|||
[
|
||||
{
|
||||
"fields": {
|
||||
"username": "root",
|
||||
"first_name": "super",
|
||||
"last_name": "user",
|
||||
"is_active": true,
|
||||
"is_superuser": true,
|
||||
"is_staff": true,
|
||||
"last_login": null,
|
||||
"groups": [],
|
||||
"user_permissions": [],
|
||||
"password": "pbkdf2_sha256$12000$yRpkPuayQ8De$h6bDe+Q4kMikzwEbLNw2I9/V/1/v3F3yLIjEZIFSHrY=",
|
||||
"email": "root@localhost",
|
||||
"date_joined": "2016-06-15T17:50:57Z"
|
||||
},
|
||||
"model": "auth.user",
|
||||
"pk": 62
|
||||
},
|
||||
{
|
||||
"fields": {
|
||||
"departement": "",
|
||||
"type_cotiz": "normalien",
|
||||
"petits_cours_remarques": "",
|
||||
"is_buro": true,
|
||||
"is_cof": true,
|
||||
"mailing_cof": true,
|
||||
"comments": "Super utilisateur",
|
||||
"login_clipper": "",
|
||||
"phone": "",
|
||||
"num": 62,
|
||||
"mailing_bda_revente": true,
|
||||
"user": 62,
|
||||
"petits_cours_accept": false,
|
||||
"mailing_bda": true,
|
||||
"occupation": "1A"
|
||||
},
|
||||
"model": "gestioncof.cofprofile",
|
||||
"pk": 62
|
||||
}
|
||||
]
|
File diff suppressed because it is too large
Load diff
|
@ -378,12 +378,12 @@ EventFormset = formset_factory(AdminEventForm, BaseEventRegistrationFormset)
|
|||
class CalendarForm(forms.ModelForm):
|
||||
subscribe_to_events = forms.BooleanField(
|
||||
initial=True,
|
||||
label="Événements du COF.")
|
||||
label="Événements du COF")
|
||||
subscribe_to_my_shows = forms.BooleanField(
|
||||
initial=True,
|
||||
label="Les spectacles pour lesquels j'ai obtenu une place.")
|
||||
label="Les spectacles pour lesquels j'ai obtenu une place")
|
||||
other_shows = forms.ModelMultipleChoiceField(
|
||||
label="Spectacles supplémentaires.",
|
||||
label="Spectacles supplémentaires",
|
||||
queryset=Spectacle.objects.filter(tirage__active=True),
|
||||
widget=forms.CheckboxSelectMultiple,
|
||||
required=False)
|
||||
|
|
41
gestioncof/management/base.py
Normal file
41
gestioncof/management/base.py
Normal file
|
@ -0,0 +1,41 @@
|
|||
"""
|
||||
Un mixin à utiliser avec BaseCommand pour charger des objets depuis un json
|
||||
"""
|
||||
|
||||
import os
|
||||
import json
|
||||
|
||||
from django.core.management.base import BaseCommand
|
||||
|
||||
|
||||
class MyBaseCommand(BaseCommand):
|
||||
"""
|
||||
Ajoute une méthode ``from_json`` qui charge des objets à partir d'un json.
|
||||
"""
|
||||
|
||||
def from_json(self, filename, data_dir, klass,
|
||||
callback=lambda obj: obj):
|
||||
"""
|
||||
Charge les objets contenus dans le fichier json référencé par
|
||||
``filename`` dans la base de donnée. La fonction callback est appelées
|
||||
sur chaque objet avant enregistrement.
|
||||
"""
|
||||
self.stdout.write("Chargement de {:s}".format(filename))
|
||||
with open(os.path.join(data_dir, filename), 'r') as file:
|
||||
descriptions = json.load(file)
|
||||
objects = []
|
||||
nb_new = 0
|
||||
for description in descriptions:
|
||||
qset = klass.objects.filter(**description)
|
||||
try:
|
||||
objects.append(qset.get())
|
||||
except klass.DoesNotExist:
|
||||
obj = klass(**description)
|
||||
obj = callback(obj)
|
||||
obj.save()
|
||||
objects.append(obj)
|
||||
nb_new += 1
|
||||
self.stdout.write("- {:d} objets créés".format(nb_new))
|
||||
self.stdout.write("- {:d} objets gardés en l'état"
|
||||
.format(len(objects)-nb_new))
|
||||
return objects
|
109
gestioncof/management/commands/loaddevdata.py
Normal file
109
gestioncof/management/commands/loaddevdata.py
Normal file
|
@ -0,0 +1,109 @@
|
|||
"""
|
||||
Charge des données de test dans la BDD
|
||||
- Utilisateurs
|
||||
- Sondage
|
||||
- Événement
|
||||
- Petits cours
|
||||
"""
|
||||
|
||||
|
||||
import os
|
||||
import random
|
||||
|
||||
from django.contrib.auth.models import User
|
||||
from django.core.management import call_command
|
||||
|
||||
from gestioncof.management.base import MyBaseCommand
|
||||
from gestioncof.petits_cours_models import (
|
||||
PetitCoursAbility, PetitCoursSubject, LEVELS_CHOICES,
|
||||
PetitCoursAttributionCounter
|
||||
)
|
||||
|
||||
# Où sont stockés les fichiers json
|
||||
DATA_DIR = os.path.join(os.path.dirname(os.path.dirname(__file__)),
|
||||
'data')
|
||||
|
||||
|
||||
class Command(MyBaseCommand):
|
||||
help = "Charge des données de test dans la BDD"
|
||||
|
||||
def add_arguments(self, parser):
|
||||
"""
|
||||
Permet de ne pas créer l'utilisateur "root".
|
||||
"""
|
||||
parser.add_argument(
|
||||
'--no-root',
|
||||
action='store_true',
|
||||
dest='no-root',
|
||||
default=False,
|
||||
help='Ne crée pas l\'utilisateur "root"'
|
||||
)
|
||||
|
||||
def handle(self, *args, **options):
|
||||
# ---
|
||||
# Utilisateurs
|
||||
# ---
|
||||
|
||||
# Gaulois
|
||||
gaulois = self.from_json('gaulois.json', DATA_DIR, User)
|
||||
for user in gaulois:
|
||||
user.profile.is_cof = True
|
||||
user.profile.save()
|
||||
|
||||
# Romains
|
||||
self.from_json('romains.json', DATA_DIR, User)
|
||||
|
||||
# Root
|
||||
no_root = options.get('no-root', False)
|
||||
if not no_root:
|
||||
self.stdout.write("Création de l'utilisateur root")
|
||||
root, _ = User.objects.get_or_create(
|
||||
username='root',
|
||||
first_name='super',
|
||||
last_name='user',
|
||||
email='root@localhost')
|
||||
root.set_password('root')
|
||||
root.is_staff = True
|
||||
root.is_superuser = True
|
||||
root.profile.is_cof = True
|
||||
root.profile.is_buro = True
|
||||
root.profile.save()
|
||||
root.save()
|
||||
|
||||
# ---
|
||||
# Petits cours
|
||||
# ---
|
||||
|
||||
self.stdout.write("Inscriptions au système des petits cours")
|
||||
levels = [id for (id, verbose) in LEVELS_CHOICES]
|
||||
subjects = list(PetitCoursSubject.objects.all())
|
||||
nb_of_teachers = 0
|
||||
for user in gaulois:
|
||||
if random.randint(0, 1):
|
||||
nb_of_teachers += 1
|
||||
# L'utilisateur reçoit les demandes de petits cours
|
||||
user.profile.petits_cours_accept = True
|
||||
user.save()
|
||||
# L'utilisateur est compétent dans une matière
|
||||
subject = random.choice(subjects)
|
||||
if not PetitCoursAbility.objects.filter(
|
||||
user=user,
|
||||
matiere=subject).exists():
|
||||
PetitCoursAbility.objects.create(
|
||||
user=user,
|
||||
matiere=subject,
|
||||
niveau=random.choice(levels),
|
||||
agrege=bool(random.randint(0, 1))
|
||||
)
|
||||
# On initialise son compteur d'attributions
|
||||
PetitCoursAttributionCounter.objects.get_or_create(
|
||||
user=user,
|
||||
matiere=subject
|
||||
)
|
||||
self.stdout.write("- {:d} inscriptions".format(nb_of_teachers))
|
||||
|
||||
# ---
|
||||
# Le BdA
|
||||
# ---
|
||||
|
||||
call_command('loadbdadevdata')
|
368
gestioncof/management/data/gaulois.json
Normal file
368
gestioncof/management/data/gaulois.json
Normal file
|
@ -0,0 +1,368 @@
|
|||
[
|
||||
{
|
||||
"username": "Abraracourcix",
|
||||
"email": "Abraracourcix.gaulois@ens.fr",
|
||||
"last_name": "Gaulois",
|
||||
"first_name": "Abraracourcix"
|
||||
},
|
||||
{
|
||||
"username": "Acidenitrix",
|
||||
"email": "Acidenitrix.gaulois@ens.fr",
|
||||
"last_name": "Gaulois",
|
||||
"first_name": "Acidenitrix"
|
||||
},
|
||||
{
|
||||
"username": "Agecanonix",
|
||||
"email": "Agecanonix.gaulois@ens.fr",
|
||||
"last_name": "Gaulois",
|
||||
"first_name": "Agecanonix"
|
||||
},
|
||||
{
|
||||
"username": "Alambix",
|
||||
"email": "Alambix.gaulois@ens.fr",
|
||||
"last_name": "Gaulois",
|
||||
"first_name": "Alambix"
|
||||
},
|
||||
{
|
||||
"username": "Amerix",
|
||||
"email": "Amerix.gaulois@ens.fr",
|
||||
"last_name": "Gaulois",
|
||||
"first_name": "Amerix"
|
||||
},
|
||||
{
|
||||
"username": "Amnesix",
|
||||
"email": "Amnesix.gaulois@ens.fr",
|
||||
"last_name": "Gaulois",
|
||||
"first_name": "Amnesix"
|
||||
},
|
||||
{
|
||||
"username": "Aniline",
|
||||
"email": "Aniline.gaulois@ens.fr",
|
||||
"last_name": "Gaulois",
|
||||
"first_name": "Aniline"
|
||||
},
|
||||
{
|
||||
"username": "Aplusbegalix",
|
||||
"email": "Aplusbegalix.gaulois@ens.fr",
|
||||
"last_name": "Gaulois",
|
||||
"first_name": "Aplusbegalix"
|
||||
},
|
||||
{
|
||||
"username": "Archeopterix",
|
||||
"email": "Archeopterix.gaulois@ens.fr",
|
||||
"last_name": "Gaulois",
|
||||
"first_name": "Archeopterix"
|
||||
},
|
||||
{
|
||||
"username": "Assurancetourix",
|
||||
"email": "Assurancetourix.gaulois@ens.fr",
|
||||
"last_name": "Gaulois",
|
||||
"first_name": "Assurancetourix"
|
||||
},
|
||||
{
|
||||
"username": "Asterix",
|
||||
"email": "Asterix.gaulois@ens.fr",
|
||||
"last_name": "Gaulois",
|
||||
"first_name": "Asterix"
|
||||
},
|
||||
{
|
||||
"username": "Astronomix",
|
||||
"email": "Astronomix.gaulois@ens.fr",
|
||||
"last_name": "Gaulois",
|
||||
"first_name": "Astronomix"
|
||||
},
|
||||
{
|
||||
"username": "Avoranfix",
|
||||
"email": "Avoranfix.gaulois@ens.fr",
|
||||
"last_name": "Gaulois",
|
||||
"first_name": "Avoranfix"
|
||||
},
|
||||
{
|
||||
"username": "Barometrix",
|
||||
"email": "Barometrix.gaulois@ens.fr",
|
||||
"last_name": "Gaulois",
|
||||
"first_name": "Barometrix"
|
||||
},
|
||||
{
|
||||
"username": "Beaufix",
|
||||
"email": "Beaufix.gaulois@ens.fr",
|
||||
"last_name": "Gaulois",
|
||||
"first_name": "Beaufix"
|
||||
},
|
||||
{
|
||||
"username": "Berlix",
|
||||
"email": "Berlix.gaulois@ens.fr",
|
||||
"last_name": "Gaulois",
|
||||
"first_name": "Berlix"
|
||||
},
|
||||
{
|
||||
"username": "Bonemine",
|
||||
"email": "Bonemine.gaulois@ens.fr",
|
||||
"last_name": "Gaulois",
|
||||
"first_name": "Bonemine"
|
||||
},
|
||||
{
|
||||
"username": "Boufiltre",
|
||||
"email": "Boufiltre.gaulois@ens.fr",
|
||||
"last_name": "Gaulois",
|
||||
"first_name": "Boufiltre"
|
||||
},
|
||||
{
|
||||
"username": "Catedralgotix",
|
||||
"email": "Catedralgotix.gaulois@ens.fr",
|
||||
"last_name": "Gaulois",
|
||||
"first_name": "Catedralgotix"
|
||||
},
|
||||
{
|
||||
"username": "CesarLabeldecadix",
|
||||
"email": "CesarLabeldecadix.gaulois@ens.fr",
|
||||
"last_name": "Gaulois",
|
||||
"first_name": "CesarLabeldecadix"
|
||||
},
|
||||
{
|
||||
"username": "Cetautomatix",
|
||||
"email": "Cetautomatix.gaulois@ens.fr",
|
||||
"last_name": "Gaulois",
|
||||
"first_name": "Cetautomatix"
|
||||
},
|
||||
{
|
||||
"username": "Cetyounix",
|
||||
"email": "Cetyounix.gaulois@ens.fr",
|
||||
"last_name": "Gaulois",
|
||||
"first_name": "Cetyounix"
|
||||
},
|
||||
{
|
||||
"username": "Changeledix",
|
||||
"email": "Changeledix.gaulois@ens.fr",
|
||||
"last_name": "Gaulois",
|
||||
"first_name": "Changeledix"
|
||||
},
|
||||
{
|
||||
"username": "Chanteclairix",
|
||||
"email": "Chanteclairix.gaulois@ens.fr",
|
||||
"last_name": "Gaulois",
|
||||
"first_name": "Chanteclairix"
|
||||
},
|
||||
{
|
||||
"username": "Cicatrix",
|
||||
"email": "Cicatrix.gaulois@ens.fr",
|
||||
"last_name": "Gaulois",
|
||||
"first_name": "Cicatrix"
|
||||
},
|
||||
{
|
||||
"username": "Comix",
|
||||
"email": "Comix.gaulois@ens.fr",
|
||||
"last_name": "Gaulois",
|
||||
"first_name": "Comix"
|
||||
},
|
||||
{
|
||||
"username": "Diagnostix",
|
||||
"email": "Diagnostix.gaulois@ens.fr",
|
||||
"last_name": "Gaulois",
|
||||
"first_name": "Diagnostix"
|
||||
},
|
||||
{
|
||||
"username": "Doublepolemix",
|
||||
"email": "Doublepolemix.gaulois@ens.fr",
|
||||
"last_name": "Gaulois",
|
||||
"first_name": "Doublepolemix"
|
||||
},
|
||||
{
|
||||
"username": "Eponine",
|
||||
"email": "Eponine.gaulois@ens.fr",
|
||||
"last_name": "Gaulois",
|
||||
"first_name": "Eponine"
|
||||
},
|
||||
{
|
||||
"username": "Falbala",
|
||||
"email": "Falbala.gaulois@ens.fr",
|
||||
"last_name": "Gaulois",
|
||||
"first_name": "Falbala"
|
||||
},
|
||||
{
|
||||
"username": "Fanzine",
|
||||
"email": "Fanzine.gaulois@ens.fr",
|
||||
"last_name": "Gaulois",
|
||||
"first_name": "Fanzine"
|
||||
},
|
||||
{
|
||||
"username": "Gelatine",
|
||||
"email": "Gelatine.gaulois@ens.fr",
|
||||
"last_name": "Gaulois",
|
||||
"first_name": "Gelatine"
|
||||
},
|
||||
{
|
||||
"username": "Goudurix",
|
||||
"email": "Goudurix.gaulois@ens.fr",
|
||||
"last_name": "Gaulois",
|
||||
"first_name": "Goudurix"
|
||||
},
|
||||
{
|
||||
"username": "Homeopatix",
|
||||
"email": "Homeopatix.gaulois@ens.fr",
|
||||
"last_name": "Gaulois",
|
||||
"first_name": "Homeopatix"
|
||||
},
|
||||
{
|
||||
"username": "Idefix",
|
||||
"email": "Idefix.gaulois@ens.fr",
|
||||
"last_name": "Gaulois",
|
||||
"first_name": "Idefix"
|
||||
},
|
||||
{
|
||||
"username": "Ielosubmarine",
|
||||
"email": "Ielosubmarine.gaulois@ens.fr",
|
||||
"last_name": "Gaulois",
|
||||
"first_name": "Ielosubmarine"
|
||||
},
|
||||
{
|
||||
"username": "Keskonrix",
|
||||
"email": "Keskonrix.gaulois@ens.fr",
|
||||
"last_name": "Gaulois",
|
||||
"first_name": "Keskonrix"
|
||||
},
|
||||
{
|
||||
"username": "Lentix",
|
||||
"email": "Lentix.gaulois@ens.fr",
|
||||
"last_name": "Gaulois",
|
||||
"first_name": "Lentix"
|
||||
},
|
||||
{
|
||||
"username": "Maestria",
|
||||
"email": "Maestria.gaulois@ens.fr",
|
||||
"last_name": "Gaulois",
|
||||
"first_name": "Maestria"
|
||||
},
|
||||
{
|
||||
"username": "MaitrePanix",
|
||||
"email": "MaitrePanix.gaulois@ens.fr",
|
||||
"last_name": "Gaulois",
|
||||
"first_name": "MaitrePanix"
|
||||
},
|
||||
{
|
||||
"username": "MmeAgecanonix",
|
||||
"email": "MmeAgecanonix.gaulois@ens.fr",
|
||||
"last_name": "Gaulois",
|
||||
"first_name": "MmeAgecanonix"
|
||||
},
|
||||
{
|
||||
"username": "Moralelastix",
|
||||
"email": "Moralelastix.gaulois@ens.fr",
|
||||
"last_name": "Gaulois",
|
||||
"first_name": "Moralelastix"
|
||||
},
|
||||
{
|
||||
"username": "Obelix",
|
||||
"email": "Obelix.gaulois@ens.fr",
|
||||
"last_name": "Gaulois",
|
||||
"first_name": "Obelix"
|
||||
},
|
||||
{
|
||||
"username": "Obelodalix",
|
||||
"email": "Obelodalix.gaulois@ens.fr",
|
||||
"last_name": "Gaulois",
|
||||
"first_name": "Obelodalix"
|
||||
},
|
||||
{
|
||||
"username": "Odalix",
|
||||
"email": "Odalix.gaulois@ens.fr",
|
||||
"last_name": "Gaulois",
|
||||
"first_name": "Odalix"
|
||||
},
|
||||
{
|
||||
"username": "Ordralfabetix",
|
||||
"email": "Ordralfabetix.gaulois@ens.fr",
|
||||
"last_name": "Gaulois",
|
||||
"first_name": "Ordralfabetix"
|
||||
},
|
||||
{
|
||||
"username": "Orthopedix",
|
||||
"email": "Orthopedix.gaulois@ens.fr",
|
||||
"last_name": "Gaulois",
|
||||
"first_name": "Orthopedix"
|
||||
},
|
||||
{
|
||||
"username": "Panoramix",
|
||||
"email": "Panoramix.gaulois@ens.fr",
|
||||
"last_name": "Gaulois",
|
||||
"first_name": "Panoramix"
|
||||
},
|
||||
{
|
||||
"username": "Plaintcontrix",
|
||||
"email": "Plaintcontrix.gaulois@ens.fr",
|
||||
"last_name": "Gaulois",
|
||||
"first_name": "Plaintcontrix"
|
||||
},
|
||||
{
|
||||
"username": "Praline",
|
||||
"email": "Praline.gaulois@ens.fr",
|
||||
"last_name": "Gaulois",
|
||||
"first_name": "Praline"
|
||||
},
|
||||
{
|
||||
"username": "Prefix",
|
||||
"email": "Prefix.gaulois@ens.fr",
|
||||
"last_name": "Gaulois",
|
||||
"first_name": "Prefix"
|
||||
},
|
||||
{
|
||||
"username": "Prolix",
|
||||
"email": "Prolix.gaulois@ens.fr",
|
||||
"last_name": "Gaulois",
|
||||
"first_name": "Prolix"
|
||||
},
|
||||
{
|
||||
"username": "Pronostix",
|
||||
"email": "Pronostix.gaulois@ens.fr",
|
||||
"last_name": "Gaulois",
|
||||
"first_name": "Pronostix"
|
||||
},
|
||||
{
|
||||
"username": "Quatredeusix",
|
||||
"email": "Quatredeusix.gaulois@ens.fr",
|
||||
"last_name": "Gaulois",
|
||||
"first_name": "Quatredeusix"
|
||||
},
|
||||
{
|
||||
"username": "Saingesix",
|
||||
"email": "Saingesix.gaulois@ens.fr",
|
||||
"last_name": "Gaulois",
|
||||
"first_name": "Saingesix"
|
||||
},
|
||||
{
|
||||
"username": "Segregationnix",
|
||||
"email": "Segregationnix.gaulois@ens.fr",
|
||||
"last_name": "Gaulois",
|
||||
"first_name": "Segregationnix"
|
||||
},
|
||||
{
|
||||
"username": "Septantesix",
|
||||
"email": "Septantesix.gaulois@ens.fr",
|
||||
"last_name": "Gaulois",
|
||||
"first_name": "Septantesix"
|
||||
},
|
||||
{
|
||||
"username": "Tournedix",
|
||||
"email": "Tournedix.gaulois@ens.fr",
|
||||
"last_name": "Gaulois",
|
||||
"first_name": "Tournedix"
|
||||
},
|
||||
{
|
||||
"username": "Tragicomix",
|
||||
"email": "Tragicomix.gaulois@ens.fr",
|
||||
"last_name": "Gaulois",
|
||||
"first_name": "Tragicomix"
|
||||
},
|
||||
{
|
||||
"username": "Coriza",
|
||||
"email": "Coriza.gaulois@ens.fr",
|
||||
"last_name": "Gaulois",
|
||||
"first_name": "Coriza"
|
||||
},
|
||||
{
|
||||
"username": "Zerozerosix",
|
||||
"email": "Zerozerosix.gaulois@ens.fr",
|
||||
"last_name": "Gaulois",
|
||||
"first_name": "Zerozerosix"
|
||||
}
|
||||
]
|
614
gestioncof/management/data/romains.json
Normal file
614
gestioncof/management/data/romains.json
Normal file
|
@ -0,0 +1,614 @@
|
|||
[
|
||||
{
|
||||
"username": "Abel",
|
||||
"email": "Abel.Romain@ens.fr",
|
||||
"last_name": "Romain",
|
||||
"first_name": "Abel"
|
||||
},
|
||||
{
|
||||
"username": "Abelardus",
|
||||
"email": "Abelardus.Romain@ens.fr",
|
||||
"last_name": "Romain",
|
||||
"first_name": "Abelardus"
|
||||
},
|
||||
{
|
||||
"username": "Abrahamus",
|
||||
"email": "Abrahamus.Romain@ens.fr",
|
||||
"last_name": "Romain",
|
||||
"first_name": "Abrahamus"
|
||||
},
|
||||
{
|
||||
"username": "Acacius",
|
||||
"email": "Acacius.Romain@ens.fr",
|
||||
"last_name": "Romain",
|
||||
"first_name": "Acacius"
|
||||
},
|
||||
{
|
||||
"username": "Accius",
|
||||
"email": "Accius.Romain@ens.fr",
|
||||
"last_name": "Romain",
|
||||
"first_name": "Accius"
|
||||
},
|
||||
{
|
||||
"username": "Achaicus",
|
||||
"email": "Achaicus.Romain@ens.fr",
|
||||
"last_name": "Romain",
|
||||
"first_name": "Achaicus"
|
||||
},
|
||||
{
|
||||
"username": "Achill",
|
||||
"email": "Achill.Romain@ens.fr",
|
||||
"last_name": "Romain",
|
||||
"first_name": "Achill"
|
||||
},
|
||||
{
|
||||
"username": "Achilles",
|
||||
"email": "Achilles.Romain@ens.fr",
|
||||
"last_name": "Romain",
|
||||
"first_name": "Achilles"
|
||||
},
|
||||
{
|
||||
"username": "Achilleus",
|
||||
"email": "Achilleus.Romain@ens.fr",
|
||||
"last_name": "Romain",
|
||||
"first_name": "Achilleus"
|
||||
},
|
||||
{
|
||||
"username": "Acrisius",
|
||||
"email": "Acrisius.Romain@ens.fr",
|
||||
"last_name": "Romain",
|
||||
"first_name": "Acrisius"
|
||||
},
|
||||
{
|
||||
"username": "Actaeon",
|
||||
"email": "Actaeon.Romain@ens.fr",
|
||||
"last_name": "Romain",
|
||||
"first_name": "Actaeon"
|
||||
},
|
||||
{
|
||||
"username": "Acteon",
|
||||
"email": "Acteon.Romain@ens.fr",
|
||||
"last_name": "Romain",
|
||||
"first_name": "Acteon"
|
||||
},
|
||||
{
|
||||
"username": "Adalricus",
|
||||
"email": "Adalricus.Romain@ens.fr",
|
||||
"last_name": "Romain",
|
||||
"first_name": "Adalricus"
|
||||
},
|
||||
{
|
||||
"username": "Adelfonsus",
|
||||
"email": "Adelfonsus.Romain@ens.fr",
|
||||
"last_name": "Romain",
|
||||
"first_name": "Adelfonsus"
|
||||
},
|
||||
{
|
||||
"username": "Adelphus",
|
||||
"email": "Adelphus.Romain@ens.fr",
|
||||
"last_name": "Romain",
|
||||
"first_name": "Adelphus"
|
||||
},
|
||||
{
|
||||
"username": "Adeodatus",
|
||||
"email": "Adeodatus.Romain@ens.fr",
|
||||
"last_name": "Romain",
|
||||
"first_name": "Adeodatus"
|
||||
},
|
||||
{
|
||||
"username": "Adolfus",
|
||||
"email": "Adolfus.Romain@ens.fr",
|
||||
"last_name": "Romain",
|
||||
"first_name": "Adolfus"
|
||||
},
|
||||
{
|
||||
"username": "Adolphus",
|
||||
"email": "Adolphus.Romain@ens.fr",
|
||||
"last_name": "Romain",
|
||||
"first_name": "Adolphus"
|
||||
},
|
||||
{
|
||||
"username": "Adrastus",
|
||||
"email": "Adrastus.Romain@ens.fr",
|
||||
"last_name": "Romain",
|
||||
"first_name": "Adrastus"
|
||||
},
|
||||
{
|
||||
"username": "Adrianus",
|
||||
"email": "Adrianus.Romain@ens.fr",
|
||||
"last_name": "Romain",
|
||||
"first_name": "Adrianus"
|
||||
},
|
||||
{
|
||||
"username": "\u00c6gidius",
|
||||
"email": "\u00c6gidius.Romain@ens.fr",
|
||||
"last_name": "Romain",
|
||||
"first_name": "\u00c6gidius"
|
||||
},
|
||||
{
|
||||
"username": "\u00c6lia",
|
||||
"email": "\u00c6lia.Romain@ens.fr",
|
||||
"last_name": "Romain",
|
||||
"first_name": "\u00c6lia"
|
||||
},
|
||||
{
|
||||
"username": "\u00c6lianus",
|
||||
"email": "\u00c6lianus.Romain@ens.fr",
|
||||
"last_name": "Romain",
|
||||
"first_name": "\u00c6lianus"
|
||||
},
|
||||
{
|
||||
"username": "\u00c6milianus",
|
||||
"email": "\u00c6milianus.Romain@ens.fr",
|
||||
"last_name": "Romain",
|
||||
"first_name": "\u00c6milianus"
|
||||
},
|
||||
{
|
||||
"username": "\u00c6milius",
|
||||
"email": "\u00c6milius.Romain@ens.fr",
|
||||
"last_name": "Romain",
|
||||
"first_name": "\u00c6milius"
|
||||
},
|
||||
{
|
||||
"username": "Aeneas",
|
||||
"email": "Aeneas.Romain@ens.fr",
|
||||
"last_name": "Romain",
|
||||
"first_name": "Aeneas"
|
||||
},
|
||||
{
|
||||
"username": "\u00c6olus",
|
||||
"email": "\u00c6olus.Romain@ens.fr",
|
||||
"last_name": "Romain",
|
||||
"first_name": "\u00c6olus"
|
||||
},
|
||||
{
|
||||
"username": "\u00c6schylus",
|
||||
"email": "\u00c6schylus.Romain@ens.fr",
|
||||
"last_name": "Romain",
|
||||
"first_name": "\u00c6schylus"
|
||||
},
|
||||
{
|
||||
"username": "\u00c6son",
|
||||
"email": "\u00c6son.Romain@ens.fr",
|
||||
"last_name": "Romain",
|
||||
"first_name": "\u00c6son"
|
||||
},
|
||||
{
|
||||
"username": "\u00c6sop",
|
||||
"email": "\u00c6sop.Romain@ens.fr",
|
||||
"last_name": "Romain",
|
||||
"first_name": "\u00c6sop"
|
||||
},
|
||||
{
|
||||
"username": "\u00c6ther",
|
||||
"email": "\u00c6ther.Romain@ens.fr",
|
||||
"last_name": "Romain",
|
||||
"first_name": "\u00c6ther"
|
||||
},
|
||||
{
|
||||
"username": "\u00c6tius",
|
||||
"email": "\u00c6tius.Romain@ens.fr",
|
||||
"last_name": "Romain",
|
||||
"first_name": "\u00c6tius"
|
||||
},
|
||||
{
|
||||
"username": "Agapetus",
|
||||
"email": "Agapetus.Romain@ens.fr",
|
||||
"last_name": "Romain",
|
||||
"first_name": "Agapetus"
|
||||
},
|
||||
{
|
||||
"username": "Agapitus",
|
||||
"email": "Agapitus.Romain@ens.fr",
|
||||
"last_name": "Romain",
|
||||
"first_name": "Agapitus"
|
||||
},
|
||||
{
|
||||
"username": "Agapius",
|
||||
"email": "Agapius.Romain@ens.fr",
|
||||
"last_name": "Romain",
|
||||
"first_name": "Agapius"
|
||||
},
|
||||
{
|
||||
"username": "Agathangelus",
|
||||
"email": "Agathangelus.Romain@ens.fr",
|
||||
"last_name": "Romain",
|
||||
"first_name": "Agathangelus"
|
||||
},
|
||||
{
|
||||
"username": "Aigidius",
|
||||
"email": "Aigidius.Romain@ens.fr",
|
||||
"last_name": "Romain",
|
||||
"first_name": "Aigidius"
|
||||
},
|
||||
{
|
||||
"username": "Aiolus",
|
||||
"email": "Aiolus.Romain@ens.fr",
|
||||
"last_name": "Romain",
|
||||
"first_name": "Aiolus"
|
||||
},
|
||||
{
|
||||
"username": "Ajax",
|
||||
"email": "Ajax.Romain@ens.fr",
|
||||
"last_name": "Romain",
|
||||
"first_name": "Ajax"
|
||||
},
|
||||
{
|
||||
"username": "Alair",
|
||||
"email": "Alair.Romain@ens.fr",
|
||||
"last_name": "Romain",
|
||||
"first_name": "Alair"
|
||||
},
|
||||
{
|
||||
"username": "Alaricus",
|
||||
"email": "Alaricus.Romain@ens.fr",
|
||||
"last_name": "Romain",
|
||||
"first_name": "Alaricus"
|
||||
},
|
||||
{
|
||||
"username": "Albanus",
|
||||
"email": "Albanus.Romain@ens.fr",
|
||||
"last_name": "Romain",
|
||||
"first_name": "Albanus"
|
||||
},
|
||||
{
|
||||
"username": "Alberic",
|
||||
"email": "Alberic.Romain@ens.fr",
|
||||
"last_name": "Romain",
|
||||
"first_name": "Alberic"
|
||||
},
|
||||
{
|
||||
"username": "Albericus",
|
||||
"email": "Albericus.Romain@ens.fr",
|
||||
"last_name": "Romain",
|
||||
"first_name": "Albericus"
|
||||
},
|
||||
{
|
||||
"username": "Albertus",
|
||||
"email": "Albertus.Romain@ens.fr",
|
||||
"last_name": "Romain",
|
||||
"first_name": "Albertus"
|
||||
},
|
||||
{
|
||||
"username": "Albinus",
|
||||
"email": "Albinus.Romain@ens.fr",
|
||||
"last_name": "Romain",
|
||||
"first_name": "Albinus"
|
||||
},
|
||||
{
|
||||
"username": "Albus",
|
||||
"email": "Albus.Romain@ens.fr",
|
||||
"last_name": "Romain",
|
||||
"first_name": "Albus"
|
||||
},
|
||||
{
|
||||
"username": "Alcaeus",
|
||||
"email": "Alcaeus.Romain@ens.fr",
|
||||
"last_name": "Romain",
|
||||
"first_name": "Alcaeus"
|
||||
},
|
||||
{
|
||||
"username": "Alcander",
|
||||
"email": "Alcander.Romain@ens.fr",
|
||||
"last_name": "Romain",
|
||||
"first_name": "Alcander"
|
||||
},
|
||||
{
|
||||
"username": "Alcimus",
|
||||
"email": "Alcimus.Romain@ens.fr",
|
||||
"last_name": "Romain",
|
||||
"first_name": "Alcimus"
|
||||
},
|
||||
{
|
||||
"username": "Alcinder",
|
||||
"email": "Alcinder.Romain@ens.fr",
|
||||
"last_name": "Romain",
|
||||
"first_name": "Alcinder"
|
||||
},
|
||||
{
|
||||
"username": "Alerio",
|
||||
"email": "Alerio.Romain@ens.fr",
|
||||
"last_name": "Romain",
|
||||
"first_name": "Alerio"
|
||||
},
|
||||
{
|
||||
"username": "Alexandrus",
|
||||
"email": "Alexandrus.Romain@ens.fr",
|
||||
"last_name": "Romain",
|
||||
"first_name": "Alexandrus"
|
||||
},
|
||||
{
|
||||
"username": "Alexis",
|
||||
"email": "Alexis.Romain@ens.fr",
|
||||
"last_name": "Romain",
|
||||
"first_name": "Alexis"
|
||||
},
|
||||
{
|
||||
"username": "Alexius",
|
||||
"email": "Alexius.Romain@ens.fr",
|
||||
"last_name": "Romain",
|
||||
"first_name": "Alexius"
|
||||
},
|
||||
{
|
||||
"username": "Alexus",
|
||||
"email": "Alexus.Romain@ens.fr",
|
||||
"last_name": "Romain",
|
||||
"first_name": "Alexus"
|
||||
},
|
||||
{
|
||||
"username": "Alfonsus",
|
||||
"email": "Alfonsus.Romain@ens.fr",
|
||||
"last_name": "Romain",
|
||||
"first_name": "Alfonsus"
|
||||
},
|
||||
{
|
||||
"username": "Alfredus",
|
||||
"email": "Alfredus.Romain@ens.fr",
|
||||
"last_name": "Romain",
|
||||
"first_name": "Alfredus"
|
||||
},
|
||||
{
|
||||
"username": "Almericus",
|
||||
"email": "Almericus.Romain@ens.fr",
|
||||
"last_name": "Romain",
|
||||
"first_name": "Almericus"
|
||||
},
|
||||
{
|
||||
"username": "Aloisius",
|
||||
"email": "Aloisius.Romain@ens.fr",
|
||||
"last_name": "Romain",
|
||||
"first_name": "Aloisius"
|
||||
},
|
||||
{
|
||||
"username": "Aloysius",
|
||||
"email": "Aloysius.Romain@ens.fr",
|
||||
"last_name": "Romain",
|
||||
"first_name": "Aloysius"
|
||||
},
|
||||
{
|
||||
"username": "Alphaeus",
|
||||
"email": "Alphaeus.Romain@ens.fr",
|
||||
"last_name": "Romain",
|
||||
"first_name": "Alphaeus"
|
||||
},
|
||||
{
|
||||
"username": "Alpheaus",
|
||||
"email": "Alpheaus.Romain@ens.fr",
|
||||
"last_name": "Romain",
|
||||
"first_name": "Alpheaus"
|
||||
},
|
||||
{
|
||||
"username": "Alpheus",
|
||||
"email": "Alpheus.Romain@ens.fr",
|
||||
"last_name": "Romain",
|
||||
"first_name": "Alpheus"
|
||||
},
|
||||
{
|
||||
"username": "Alphoeus",
|
||||
"email": "Alphoeus.Romain@ens.fr",
|
||||
"last_name": "Romain",
|
||||
"first_name": "Alphoeus"
|
||||
},
|
||||
{
|
||||
"username": "Alphonsus",
|
||||
"email": "Alphonsus.Romain@ens.fr",
|
||||
"last_name": "Romain",
|
||||
"first_name": "Alphonsus"
|
||||
},
|
||||
{
|
||||
"username": "Alphonzus",
|
||||
"email": "Alphonzus.Romain@ens.fr",
|
||||
"last_name": "Romain",
|
||||
"first_name": "Alphonzus"
|
||||
},
|
||||
{
|
||||
"username": "Alvinius",
|
||||
"email": "Alvinius.Romain@ens.fr",
|
||||
"last_name": "Romain",
|
||||
"first_name": "Alvinius"
|
||||
},
|
||||
{
|
||||
"username": "Alvredus",
|
||||
"email": "Alvredus.Romain@ens.fr",
|
||||
"last_name": "Romain",
|
||||
"first_name": "Alvredus"
|
||||
},
|
||||
{
|
||||
"username": "Amadeus",
|
||||
"email": "Amadeus.Romain@ens.fr",
|
||||
"last_name": "Romain",
|
||||
"first_name": "Amadeus"
|
||||
},
|
||||
{
|
||||
"username": "Amaliricus",
|
||||
"email": "Amaliricus.Romain@ens.fr",
|
||||
"last_name": "Romain",
|
||||
"first_name": "Amaliricus"
|
||||
},
|
||||
{
|
||||
"username": "Amandus",
|
||||
"email": "Amandus.Romain@ens.fr",
|
||||
"last_name": "Romain",
|
||||
"first_name": "Amandus"
|
||||
},
|
||||
{
|
||||
"username": "Amantius",
|
||||
"email": "Amantius.Romain@ens.fr",
|
||||
"last_name": "Romain",
|
||||
"first_name": "Amantius"
|
||||
},
|
||||
{
|
||||
"username": "Amarandus",
|
||||
"email": "Amarandus.Romain@ens.fr",
|
||||
"last_name": "Romain",
|
||||
"first_name": "Amarandus"
|
||||
},
|
||||
{
|
||||
"username": "Amaranthus",
|
||||
"email": "Amaranthus.Romain@ens.fr",
|
||||
"last_name": "Romain",
|
||||
"first_name": "Amaranthus"
|
||||
},
|
||||
{
|
||||
"username": "Amatus",
|
||||
"email": "Amatus.Romain@ens.fr",
|
||||
"last_name": "Romain",
|
||||
"first_name": "Amatus"
|
||||
},
|
||||
{
|
||||
"username": "Ambrosianus",
|
||||
"email": "Ambrosianus.Romain@ens.fr",
|
||||
"last_name": "Romain",
|
||||
"first_name": "Ambrosianus"
|
||||
},
|
||||
{
|
||||
"username": "Ambrosius",
|
||||
"email": "Ambrosius.Romain@ens.fr",
|
||||
"last_name": "Romain",
|
||||
"first_name": "Ambrosius"
|
||||
},
|
||||
{
|
||||
"username": "Amedeus",
|
||||
"email": "Amedeus.Romain@ens.fr",
|
||||
"last_name": "Romain",
|
||||
"first_name": "Amedeus"
|
||||
},
|
||||
{
|
||||
"username": "Americus",
|
||||
"email": "Americus.Romain@ens.fr",
|
||||
"last_name": "Romain",
|
||||
"first_name": "Americus"
|
||||
},
|
||||
{
|
||||
"username": "Amlethus",
|
||||
"email": "Amlethus.Romain@ens.fr",
|
||||
"last_name": "Romain",
|
||||
"first_name": "Amlethus"
|
||||
},
|
||||
{
|
||||
"username": "Amletus",
|
||||
"email": "Amletus.Romain@ens.fr",
|
||||
"last_name": "Romain",
|
||||
"first_name": "Amletus"
|
||||
},
|
||||
{
|
||||
"username": "Amor",
|
||||
"email": "Amor.Romain@ens.fr",
|
||||
"last_name": "Romain",
|
||||
"first_name": "Amor"
|
||||
},
|
||||
{
|
||||
"username": "Ampelius",
|
||||
"email": "Ampelius.Romain@ens.fr",
|
||||
"last_name": "Romain",
|
||||
"first_name": "Ampelius"
|
||||
},
|
||||
{
|
||||
"username": "Amphion",
|
||||
"email": "Amphion.Romain@ens.fr",
|
||||
"last_name": "Romain",
|
||||
"first_name": "Amphion"
|
||||
},
|
||||
{
|
||||
"username": "Anacletus",
|
||||
"email": "Anacletus.Romain@ens.fr",
|
||||
"last_name": "Romain",
|
||||
"first_name": "Anacletus"
|
||||
},
|
||||
{
|
||||
"username": "Anastasius",
|
||||
"email": "Anastasius.Romain@ens.fr",
|
||||
"last_name": "Romain",
|
||||
"first_name": "Anastasius"
|
||||
},
|
||||
{
|
||||
"username": "Anastatius",
|
||||
"email": "Anastatius.Romain@ens.fr",
|
||||
"last_name": "Romain",
|
||||
"first_name": "Anastatius"
|
||||
},
|
||||
{
|
||||
"username": "Anastius",
|
||||
"email": "Anastius.Romain@ens.fr",
|
||||
"last_name": "Romain",
|
||||
"first_name": "Anastius"
|
||||
},
|
||||
{
|
||||
"username": "Anatolius",
|
||||
"email": "Anatolius.Romain@ens.fr",
|
||||
"last_name": "Romain",
|
||||
"first_name": "Anatolius"
|
||||
},
|
||||
{
|
||||
"username": "Androcles",
|
||||
"email": "Androcles.Romain@ens.fr",
|
||||
"last_name": "Romain",
|
||||
"first_name": "Androcles"
|
||||
},
|
||||
{
|
||||
"username": "Andronicus",
|
||||
"email": "Andronicus.Romain@ens.fr",
|
||||
"last_name": "Romain",
|
||||
"first_name": "Andronicus"
|
||||
},
|
||||
{
|
||||
"username": "Anencletus",
|
||||
"email": "Anencletus.Romain@ens.fr",
|
||||
"last_name": "Romain",
|
||||
"first_name": "Anencletus"
|
||||
},
|
||||
{
|
||||
"username": "Angelicus",
|
||||
"email": "Angelicus.Romain@ens.fr",
|
||||
"last_name": "Romain",
|
||||
"first_name": "Angelicus"
|
||||
},
|
||||
{
|
||||
"username": "Angelus",
|
||||
"email": "Angelus.Romain@ens.fr",
|
||||
"last_name": "Romain",
|
||||
"first_name": "Angelus"
|
||||
},
|
||||
{
|
||||
"username": "Anicetus",
|
||||
"email": "Anicetus.Romain@ens.fr",
|
||||
"last_name": "Romain",
|
||||
"first_name": "Anicetus"
|
||||
},
|
||||
{
|
||||
"username": "Antigonus",
|
||||
"email": "Antigonus.Romain@ens.fr",
|
||||
"last_name": "Romain",
|
||||
"first_name": "Antigonus"
|
||||
},
|
||||
{
|
||||
"username": "Antipater",
|
||||
"email": "Antipater.Romain@ens.fr",
|
||||
"last_name": "Romain",
|
||||
"first_name": "Antipater"
|
||||
},
|
||||
{
|
||||
"username": "Antoninus",
|
||||
"email": "Antoninus.Romain@ens.fr",
|
||||
"last_name": "Romain",
|
||||
"first_name": "Antoninus"
|
||||
},
|
||||
{
|
||||
"username": "Antonius",
|
||||
"email": "Antonius.Romain@ens.fr",
|
||||
"last_name": "Romain",
|
||||
"first_name": "Antonius"
|
||||
},
|
||||
{
|
||||
"username": "Aphrodisius",
|
||||
"email": "Aphrodisius.Romain@ens.fr",
|
||||
"last_name": "Romain",
|
||||
"first_name": "Aphrodisius"
|
||||
},
|
||||
{
|
||||
"username": "Apollinaris",
|
||||
"email": "Apollinaris.Romain@ens.fr",
|
||||
"last_name": "Romain",
|
||||
"first_name": "Apollinaris"
|
||||
}
|
||||
]
|
|
@ -1088,3 +1088,8 @@ tr.awesome{
|
|||
color: white;
|
||||
padding: 20px;
|
||||
}
|
||||
|
||||
.petitcours-raw {
|
||||
padding:20px;
|
||||
background:#fff;
|
||||
}
|
||||
|
|
7
gestioncof/static/css/jquery-ui.min.css
vendored
Normal file
7
gestioncof/static/css/jquery-ui.min.css
vendored
Normal file
File diff suppressed because one or more lines are too long
13
gestioncof/static/js/jquery-ui.min.js
vendored
Normal file
13
gestioncof/static/js/jquery-ui.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
11
gestioncof/static/js/jquery.ui.touch-punch.min.js
vendored
Normal file
11
gestioncof/static/js/jquery.ui.touch-punch.min.js
vendored
Normal file
|
@ -0,0 +1,11 @@
|
|||
/*!
|
||||
* jQuery UI Touch Punch 0.2.3
|
||||
*
|
||||
* Copyright 2011–2014, Dave Furfero
|
||||
* Dual licensed under the MIT or GPL Version 2 licenses.
|
||||
*
|
||||
* Depends:
|
||||
* jquery.ui.widget.js
|
||||
* jquery.ui.mouse.js
|
||||
*/
|
||||
!function(a){function f(a,b){if(!(a.originalEvent.touches.length>1)){a.preventDefault();var c=a.originalEvent.changedTouches[0],d=document.createEvent("MouseEvents");d.initMouseEvent(b,!0,!0,window,1,c.screenX,c.screenY,c.clientX,c.clientY,!1,!1,!1,!1,0,null),a.target.dispatchEvent(d)}}if(a.support.touch="ontouchend"in document,a.support.touch){var e,b=a.ui.mouse.prototype,c=b._mouseInit,d=b._mouseDestroy;b._touchStart=function(a){var b=this;!e&&b._mouseCapture(a.originalEvent.changedTouches[0])&&(e=!0,b._touchMoved=!1,f(a,"mouseover"),f(a,"mousemove"),f(a,"mousedown"))},b._touchMove=function(a){e&&(this._touchMoved=!0,f(a,"mousemove"))},b._touchEnd=function(a){e&&(f(a,"mouseup"),f(a,"mouseout"),this._touchMoved||f(a,"click"),e=!1)},b._mouseInit=function(){var b=this;b.element.bind({touchstart:a.proxy(b,"_touchStart"),touchmove:a.proxy(b,"_touchMove"),touchend:a.proxy(b,"_touchEnd")}),c.call(b)},b._mouseDestroy=function(){var b=this;b.element.unbind({touchstart:a.proxy(b,"_touchStart"),touchmove:a.proxy(b,"_touchMove"),touchend:a.proxy(b,"_touchEnd")}),d.call(b)}}}(jQuery);
|
|
@ -1,11 +1,19 @@
|
|||
{% extends "base.html" %}
|
||||
|
||||
{% load bootstrap %}
|
||||
|
||||
{% block content %}
|
||||
<div class="petitcours-raw">
|
||||
{% if success %}
|
||||
<p class="success">Votre demande a été enregistrée avec succès !</p>
|
||||
{% else %}
|
||||
<form id="demandecours" method="post" action="{% url "gestioncof.petits_cours_views.demande_raw" %}">
|
||||
{% csrf_token %}
|
||||
<table>
|
||||
{{ form.as_table }}
|
||||
{{ form | bootstrap }}
|
||||
</table>
|
||||
<input type="submit" class="btn-submit" value="Enregistrer" />
|
||||
</form>
|
||||
{% endif %}
|
||||
</div>
|
||||
{% endblock %}
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
{% extends "base_title.html" %}
|
||||
{% load bootstrap %}
|
||||
|
||||
{% block realcontent %}
|
||||
|
||||
|
@ -36,8 +37,21 @@ souscrire aux événements du COF et/ou aux spectacles BdA.
|
|||
|
||||
<form action="" method="post">
|
||||
{% csrf_token %}
|
||||
{{ form.as_p }}
|
||||
<input type="submit" value="Enregistrer" class="btn btn-primary" />
|
||||
{{ form | bootstrap }}
|
||||
<p>
|
||||
<button type="button" class="btn btn-default" onClick="select(true)">Tout sélectionner</button>
|
||||
<button type="button" class="btn btn-default" onClick="select(false)">Tout désélectionner</button>
|
||||
</p>
|
||||
|
||||
<input type="submit" value="Enregistrer" class="btn btn-primary center-block" />
|
||||
</form>
|
||||
|
||||
<script language="JavaScript">
|
||||
function select(check) {
|
||||
checkboxes = document.getElementsByName("other_shows");
|
||||
for(var i=0, n=checkboxes.length;i<n;i++) {
|
||||
checkboxes[i].checked = check;
|
||||
}
|
||||
}
|
||||
</script>
|
||||
{% endblock %}
|
|
@ -17,4 +17,8 @@
|
|||
<li><a href="{% url 'gestioncof.views.export_mega_orgas' %}">Export des orgas uniquement</a></li>
|
||||
<li><a href="{% url 'gestioncof.views.export_mega' %}">Export de tout le monde</a></li>
|
||||
</ul>
|
||||
|
||||
<p>Note : pour ouvrir les fichiers .csv avec Excel, il faut
|
||||
passer par <tt>Fichier > Importer</tt> et sélectionner la
|
||||
virgule comme séparateur.</p>
|
||||
{% endblock %}
|
|
@ -2,11 +2,11 @@
|
|||
{% load staticfiles %}
|
||||
|
||||
{% block extra_head %}
|
||||
<link href="{% static "grappelli/jquery/ui/css/custom-theme/jquery-ui-1.8.custom.css" %}" rel="stylesheet" type="text/css" media="screen" title="no title" charset="utf-8" />
|
||||
<script src="{% static "grappelli/jquery/jquery-1.6.2.min.js" %}" type="text/javascript"></script>
|
||||
<script src="{% static "grappelli/jquery/ui/js/jquery-ui-1.8.15.custom.min.js" %}" type="text/javascript"></script>
|
||||
<link href="{% static "grappelli/css/tools.css" %}" rel="stylesheet" type="text/css" />
|
||||
<link href="{% static "grappelli/css/jquery-ui-grappelli-extensions.css" %}" rel="stylesheet" type="text/css" />
|
||||
<script src="{% static "js/jquery.min.js" %}" type="text/javascript"></script>
|
||||
<script src="{% static "js/jquery-ui.min.js" %}" type="text/javascript"></script>
|
||||
<script src="{% static "js/jquery.ui.touch-punch.min.js" %}" type="text/javascript"></script>
|
||||
<link type="text/css" rel="stylesheet" href="{% static "css/jquery-ui.min.css" %}" />
|
||||
|
||||
{% endblock %}
|
||||
|
||||
{% block realcontent %}
|
||||
|
|
|
@ -632,7 +632,7 @@ def export_mega(request):
|
|||
|
||||
@buro_required
|
||||
def utile_cof(request):
|
||||
return render(request, "utile_cof.html", {})
|
||||
return render(request, "gestioncof/utile_cof.html", {})
|
||||
|
||||
|
||||
@buro_required
|
||||
|
@ -681,15 +681,15 @@ def calendar(request):
|
|||
subscription.token = uuid.uuid4()
|
||||
subscription.save()
|
||||
form.save_m2m()
|
||||
return render(request, "calendar_subscription.html",
|
||||
return render(request, "gestioncof/calendar_subscription.html",
|
||||
{'form': form,
|
||||
'success': True,
|
||||
'token': str(subscription.token)})
|
||||
else:
|
||||
return render(request, "calendar_subscription.html",
|
||||
return render(request, "gestioncof/calendar_subscription.html",
|
||||
{'form': form, 'error': "Formulaire incorrect"})
|
||||
else:
|
||||
return render(request, "calendar_subscription.html",
|
||||
return render(request, "gestioncof/calendar_subscription.html",
|
||||
{'form': CalendarForm(instance=instance),
|
||||
'token': instance.token if instance else None})
|
||||
|
||||
|
|
|
@ -3,5 +3,6 @@
|
|||
|
||||
source ~/venv/bin/activate
|
||||
python manage.py migrate
|
||||
python manage.py loaddata users root bda gestion sites
|
||||
python manage.py loaddata gestion sites
|
||||
python manage.py loaddevdata
|
||||
python manage.py collectstatic --noinput
|
||||
|
|
Loading…
Reference in a new issue