1
0
mirror of https://gitlab.com/animath/si/plateforme.git synced 2024-12-25 07:02:22 +00:00

Drop django-address dependency and keep only street, zip code and city (/!\ Breaking commit, can't upgrade)

This commit is contained in:
Emmy D'Anello 2023-01-10 20:24:06 +01:00
parent f7eddd289b
commit 63a10c1be5
Signed by: ynerant
GPG Key ID: 3A75C55819C8CF85
21 changed files with 197 additions and 448 deletions

View File

@ -1,4 +1,4 @@
# Generated by Django 3.0.11 on 2021-01-21 21:06 # Generated by Django 3.2.13 on 2023-01-10 19:22
from django.conf import settings from django.conf import settings
from django.db import migrations, models from django.db import migrations, models
@ -26,7 +26,7 @@ class Migration(migrations.Migration):
('data', models.TextField(blank=True, default='', verbose_name='new data')), ('data', models.TextField(blank=True, default='', verbose_name='new data')),
('action', models.CharField(choices=[('create', 'create'), ('edit', 'edit'), ('delete', 'delete')], default='edit', max_length=16, verbose_name='action')), ('action', models.CharField(choices=[('create', 'create'), ('edit', 'edit'), ('delete', 'delete')], default='edit', max_length=16, verbose_name='action')),
('timestamp', models.DateTimeField(default=django.utils.timezone.now, verbose_name='timestamp')), ('timestamp', models.DateTimeField(default=django.utils.timezone.now, verbose_name='timestamp')),
('model', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to='contenttypes.ContentType', verbose_name='model')), ('model', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to='contenttypes.contenttype', verbose_name='model')),
('user', models.ForeignKey(null=True, on_delete=django.db.models.deletion.PROTECT, to=settings.AUTH_USER_MODEL, verbose_name='user')), ('user', models.ForeignKey(null=True, on_delete=django.db.models.deletion.PROTECT, to=settings.AUTH_USER_MODEL, verbose_name='user')),
], ],
options={ options={

View File

@ -1,8 +1,9 @@
# Generated by Django 3.0.11 on 2021-01-22 18:26 # Generated by Django 3.2.13 on 2023-01-10 19:22
import datetime import datetime
import django.core.validators import django.core.validators
from django.db import migrations, models from django.db import migrations, models
import django.db.models.deletion
import django.utils.timezone import django.utils.timezone
import participation.models import participation.models
@ -47,8 +48,8 @@ class Migration(migrations.Migration):
name='Passage', name='Passage',
fields=[ fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('place', models.CharField(default='Non indiqué', help_text='Where the solution is presented?', max_length=255, verbose_name='place')),
('solution_number', models.PositiveSmallIntegerField(choices=[(1, 'Problem #1'), (2, 'Problem #2'), (3, 'Problem #3'), (4, 'Problem #4'), (5, 'Problem #5'), (6, 'Problem #6'), (7, 'Problem #7'), (8, 'Problem #8')], verbose_name='defended solution')), ('solution_number', models.PositiveSmallIntegerField(choices=[(1, 'Problem #1'), (2, 'Problem #2'), (3, 'Problem #3'), (4, 'Problem #4'), (5, 'Problem #5'), (6, 'Problem #6'), (7, 'Problem #7'), (8, 'Problem #8')], verbose_name='defended solution')),
('defender_penalties', models.PositiveSmallIntegerField(default=0, help_text='Number of penalties for the defender. The defender will loose a 0.5 coefficient per penalty.', verbose_name='penalties')),
], ],
options={ options={
'verbose_name': 'passage', 'verbose_name': 'passage',
@ -61,6 +62,7 @@ class Migration(migrations.Migration):
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('round', models.PositiveSmallIntegerField(choices=[(1, 'Round 1'), (2, 'Round 2')], verbose_name='round')), ('round', models.PositiveSmallIntegerField(choices=[(1, 'Round 1'), (2, 'Round 2')], verbose_name='round')),
('bbb_url', models.CharField(blank=True, default='', help_text='The link of the BBB visio for this pool.', max_length=255, verbose_name='BigBlueButton URL')), ('bbb_url', models.CharField(blank=True, default='', help_text='The link of the BBB visio for this pool.', max_length=255, verbose_name='BigBlueButton URL')),
('results_available', models.BooleanField(default=False, help_text='Check this case when results become accessible to teams. They stay accessible to you. Only averages are given.', verbose_name='results available')),
], ],
options={ options={
'verbose_name': 'pool', 'verbose_name': 'pool',
@ -73,11 +75,12 @@ class Migration(migrations.Migration):
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('problem', models.PositiveSmallIntegerField(choices=[(1, 'Problem #1'), (2, 'Problem #2'), (3, 'Problem #3'), (4, 'Problem #4'), (5, 'Problem #5'), (6, 'Problem #6'), (7, 'Problem #7'), (8, 'Problem #8')], verbose_name='problem')), ('problem', models.PositiveSmallIntegerField(choices=[(1, 'Problem #1'), (2, 'Problem #2'), (3, 'Problem #3'), (4, 'Problem #4'), (5, 'Problem #5'), (6, 'Problem #6'), (7, 'Problem #7'), (8, 'Problem #8')], verbose_name='problem')),
('final_solution', models.BooleanField(default=False, verbose_name='solution for the final tournament')), ('final_solution', models.BooleanField(default=False, verbose_name='solution for the final tournament')),
('file', models.FileField(blank=True, default='', unique=True, upload_to=participation.models.get_solution_filename, verbose_name='file')), ('file', models.FileField(unique=True, upload_to=participation.models.get_solution_filename, verbose_name='file')),
], ],
options={ options={
'verbose_name': 'solution', 'verbose_name': 'solution',
'verbose_name_plural': 'solutions', 'verbose_name_plural': 'solutions',
'ordering': ('participation__team__trigram', 'final_solution', 'problem'),
}, },
), ),
migrations.CreateModel( migrations.CreateModel(
@ -85,11 +88,12 @@ class Migration(migrations.Migration):
fields=[ fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('type', models.PositiveSmallIntegerField(choices=[(1, 'opponent'), (2, 'reporter')])), ('type', models.PositiveSmallIntegerField(choices=[(1, 'opponent'), (2, 'reporter')])),
('file', models.FileField(blank=True, default='', unique=True, upload_to=participation.models.get_synthesis_filename, verbose_name='file')), ('file', models.FileField(unique=True, upload_to=participation.models.get_synthesis_filename, verbose_name='file')),
], ],
options={ options={
'verbose_name': 'synthesis', 'verbose_name': 'synthesis',
'verbose_name_plural': 'syntheses', 'verbose_name_plural': 'syntheses',
'ordering': ('passage__pool__round', 'type'),
}, },
), ),
migrations.CreateModel( migrations.CreateModel(
@ -113,8 +117,10 @@ class Migration(migrations.Migration):
('name', models.CharField(max_length=255, unique=True, verbose_name='name')), ('name', models.CharField(max_length=255, unique=True, verbose_name='name')),
('date_start', models.DateField(default=datetime.date.today, verbose_name='start')), ('date_start', models.DateField(default=datetime.date.today, verbose_name='start')),
('date_end', models.DateField(default=datetime.date.today, verbose_name='end')), ('date_end', models.DateField(default=datetime.date.today, verbose_name='end')),
('place', models.CharField(max_length=255, verbose_name='place')),
('max_teams', models.PositiveSmallIntegerField(default=9, verbose_name='max team count')), ('max_teams', models.PositiveSmallIntegerField(default=9, verbose_name='max team count')),
('price', models.PositiveSmallIntegerField(default=21, verbose_name='price')), ('price', models.PositiveSmallIntegerField(default=21, verbose_name='price')),
('remote', models.BooleanField(default=False, verbose_name='remote')),
('inscription_limit', models.DateTimeField(default=django.utils.timezone.now, verbose_name='limit date for registrations')), ('inscription_limit', models.DateTimeField(default=django.utils.timezone.now, verbose_name='limit date for registrations')),
('solution_limit', models.DateTimeField(default=django.utils.timezone.now, verbose_name='limit date to upload solutions')), ('solution_limit', models.DateTimeField(default=django.utils.timezone.now, verbose_name='limit date to upload solutions')),
('solutions_draw', models.DateTimeField(default=django.utils.timezone.now, verbose_name='random draw for solutions')), ('solutions_draw', models.DateTimeField(default=django.utils.timezone.now, verbose_name='random draw for solutions')),
@ -129,4 +135,17 @@ class Migration(migrations.Migration):
'verbose_name_plural': 'tournaments', 'verbose_name_plural': 'tournaments',
}, },
), ),
migrations.CreateModel(
name='Tweak',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('diff', models.IntegerField(help_text='Score to add/remove on the final score', verbose_name='difference')),
('participation', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='tweaks', to='participation.participation', verbose_name='participation')),
('pool', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='participation.pool', verbose_name='passage')),
],
options={
'verbose_name': 'tweak',
'verbose_name_plural': 'tweaks',
},
),
] ]

View File

@ -1,115 +0,0 @@
# Generated by Django 3.0.11 on 2021-01-22 18:26
import address.models
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
initial = True
dependencies = [
('registration', '0001_initial'),
('address', '0003_auto_20200830_1851'),
('participation', '0001_initial'),
]
operations = [
migrations.AddField(
model_name='tournament',
name='organizers',
field=models.ManyToManyField(related_name='organized_tournaments', to='registration.VolunteerRegistration', verbose_name='organizers'),
),
migrations.AddField(
model_name='tournament',
name='place',
field=address.models.AddressField(on_delete=django.db.models.deletion.CASCADE, to='address.Address', verbose_name='place'),
),
migrations.AddIndex(
model_name='team',
index=models.Index(fields=['trigram'], name='participati_trigram_239255_idx'),
),
migrations.AddField(
model_name='synthesis',
name='participation',
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='participation.Participation', verbose_name='participation'),
),
migrations.AddField(
model_name='synthesis',
name='passage',
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='syntheses', to='participation.Passage', verbose_name='passage'),
),
migrations.AddField(
model_name='solution',
name='participation',
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='solutions', to='participation.Participation', verbose_name='participation'),
),
migrations.AddField(
model_name='pool',
name='juries',
field=models.ManyToManyField(related_name='jury_in', to='registration.VolunteerRegistration', verbose_name='juries'),
),
migrations.AddField(
model_name='pool',
name='participations',
field=models.ManyToManyField(related_name='pools', to='participation.Participation', verbose_name='participations'),
),
migrations.AddField(
model_name='pool',
name='tournament',
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='pools', to='participation.Tournament', verbose_name='tournament'),
),
migrations.AddField(
model_name='passage',
name='defender',
field=models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, related_name='+', to='participation.Participation', verbose_name='defender'),
),
migrations.AddField(
model_name='passage',
name='opponent',
field=models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, related_name='+', to='participation.Participation', verbose_name='opponent'),
),
migrations.AddField(
model_name='passage',
name='pool',
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='passages', to='participation.Pool', verbose_name='pool'),
),
migrations.AddField(
model_name='passage',
name='reporter',
field=models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, related_name='+', to='participation.Participation', verbose_name='reporter'),
),
migrations.AddField(
model_name='participation',
name='team',
field=models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, to='participation.Team', verbose_name='team'),
),
migrations.AddField(
model_name='participation',
name='tournament',
field=models.ForeignKey(blank=True, default=None, null=True, on_delete=django.db.models.deletion.SET_NULL, to='participation.Tournament', verbose_name='tournament'),
),
migrations.AddField(
model_name='note',
name='jury',
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='notes', to='registration.VolunteerRegistration', verbose_name='jury'),
),
migrations.AddField(
model_name='note',
name='passage',
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='notes', to='participation.Passage', verbose_name='passage'),
),
migrations.AddIndex(
model_name='tournament',
index=models.Index(fields=['name', 'date_start', 'date_end'], name='participati_name_b43174_idx'),
),
migrations.AlterUniqueTogether(
name='synthesis',
unique_together={('participation', 'passage', 'type')},
),
migrations.AlterUniqueTogether(
name='solution',
unique_together={('participation', 'problem', 'final_solution')},
),
]

View File

@ -1,18 +0,0 @@
# Generated by Django 3.0.11 on 2021-01-23 18:36
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('participation', '0002_auto_20210122_1926'),
]
operations = [
migrations.AddField(
model_name='tournament',
name='remote',
field=models.BooleanField(default=False, verbose_name='remote'),
),
]

View File

@ -1,18 +0,0 @@
# Generated by Django 3.1.7 on 2021-04-03 19:57
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('participation', '0003_tournament_remote'),
]
operations = [
migrations.AddField(
model_name='passage',
name='defender_penalties',
field=models.PositiveSmallIntegerField(default=0, help_text='Number of penalties for the defender. The defender will loose a 0.5 coefficient per penalty.', verbose_name='penalties'),
),
]

View File

@ -1,18 +0,0 @@
# Generated by Django 3.1.7 on 2021-04-10 07:57
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('participation', '0004_passage_defender_penalties'),
]
operations = [
migrations.AddField(
model_name='pool',
name='results_available',
field=models.BooleanField(default=False, help_text='Check this case when results become accessible to teams. They stay accessible to you. Only averages are given.', verbose_name='results available'),
),
]

View File

@ -1,21 +0,0 @@
# Generated by Django 3.2.13 on 2022-04-26 11:46
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
('participation', '0005_pool_results_available'),
]
operations = [
migrations.AlterModelOptions(
name='solution',
options={'ordering': ('participation__team__trigram', 'final_solution', 'problem'), 'verbose_name': 'solution', 'verbose_name_plural': 'solutions'},
),
migrations.AlterModelOptions(
name='synthesis',
options={'ordering': ('passage__pool__round', 'type'), 'verbose_name': 'synthesis', 'verbose_name_plural': 'syntheses'},
),
]

View File

@ -1,17 +0,0 @@
# Generated by Django 3.2.13 on 2022-04-26 19:42
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
('participation', '0006_auto_20220426_1346'),
]
operations = [
migrations.RemoveField(
model_name='passage',
name='place',
),
]

View File

@ -1,24 +0,0 @@
# Generated by Django 3.2.13 on 2022-04-29 16:53
from django.db import migrations, models
import participation.models
class Migration(migrations.Migration):
dependencies = [
('participation', '0007_remove_passage_place'),
]
operations = [
migrations.AlterField(
model_name='solution',
name='file',
field=models.FileField(unique=True, upload_to=participation.models.get_solution_filename, verbose_name='file'),
),
migrations.AlterField(
model_name='synthesis',
name='file',
field=models.FileField(unique=True, upload_to=participation.models.get_synthesis_filename, verbose_name='file'),
),
]

View File

@ -1,27 +0,0 @@
# Generated by Django 3.2.13 on 2022-05-15 14:40
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
('participation', '0008_auto_20220429_1853'),
]
operations = [
migrations.CreateModel(
name='Tweak',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('diff', models.IntegerField(help_text='Score to add/remove on the final score', verbose_name='difference')),
('participation', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='tweaks', to='participation.participation', verbose_name='participation')),
('pool', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='participation.pool', verbose_name='passage')),
],
options={
'verbose_name': 'tweak',
'verbose_name_plural': 'tweaks',
},
),
]

View File

@ -4,7 +4,6 @@
from datetime import date from datetime import date
import os import os
from address.models import AddressField
from django.conf import settings from django.conf import settings
from django.core.exceptions import ValidationError from django.core.exceptions import ValidationError
from django.core.validators import RegexValidator from django.core.validators import RegexValidator
@ -143,7 +142,8 @@ class Tournament(models.Model):
default=date.today, default=date.today,
) )
place = AddressField( place = models.CharField(
max_length=255,
verbose_name=_("place"), verbose_name=_("place"),
) )

View File

@ -1,8 +1,8 @@
# Generated by Django 3.0.11 on 2021-01-22 18:26 # Generated by Django 3.2.13 on 2023-01-10 19:22
import address.models
import datetime import datetime
from django.conf import settings from django.conf import settings
import django.core.validators
from django.db import migrations, models from django.db import migrations, models
import django.db.models.deletion import django.db.models.deletion
import phonenumber_field.modelfields import phonenumber_field.modelfields
@ -14,10 +14,9 @@ class Migration(migrations.Migration):
initial = True initial = True
dependencies = [ dependencies = [
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
('contenttypes', '0002_remove_content_type_name'),
('address', '0003_auto_20200830_1851'),
('participation', '0001_initial'), ('participation', '0001_initial'),
('contenttypes', '0002_remove_content_type_name'),
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
] ]
operations = [ operations = [
@ -27,7 +26,7 @@ class Migration(migrations.Migration):
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('give_contact_to_animath', models.BooleanField(default=False, verbose_name='Grant Animath to contact me in the future about other actions')), ('give_contact_to_animath', models.BooleanField(default=False, verbose_name='Grant Animath to contact me in the future about other actions')),
('email_confirmed', models.BooleanField(default=False, verbose_name='email confirmed')), ('email_confirmed', models.BooleanField(default=False, verbose_name='email confirmed')),
('polymorphic_ctype', models.ForeignKey(editable=False, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='polymorphic_registration.registration_set+', to='contenttypes.ContentType')), ('polymorphic_ctype', models.ForeignKey(editable=False, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='polymorphic_registration.registration_set+', to='contenttypes.contenttype')),
('user', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL, verbose_name='user')), ('user', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL, verbose_name='user')),
], ],
options={ options={
@ -38,13 +37,16 @@ class Migration(migrations.Migration):
migrations.CreateModel( migrations.CreateModel(
name='ParticipantRegistration', name='ParticipantRegistration',
fields=[ fields=[
('registration_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='registration.Registration')), ('registration_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='registration.registration')),
('birth_date', models.DateField(default=datetime.date.today, verbose_name='birth date')), ('birth_date', models.DateField(default=datetime.date.today, verbose_name='birth date')),
('gender', models.CharField(choices=[('female', 'Female'), ('male', 'Male'), ('other', 'Other')], default='other', max_length=6, verbose_name='gender')), ('gender', models.CharField(choices=[('female', 'Female'), ('male', 'Male'), ('other', 'Other')], default='other', max_length=6, verbose_name='gender')),
('address', models.CharField(max_length=255, verbose_name='address')),
('zip_code', models.PositiveSmallIntegerField(validators=[django.core.validators.MinValueValidator(1000), django.core.validators.MaxValueValidator(99999)], verbose_name='zip code')),
('city', models.CharField(max_length=255, verbose_name='city')),
('phone_number', phonenumber_field.modelfields.PhoneNumberField(blank=True, max_length=128, region=None, verbose_name='phone number')), ('phone_number', phonenumber_field.modelfields.PhoneNumberField(blank=True, max_length=128, region=None, verbose_name='phone number')),
('health_issues', models.TextField(blank=True, help_text='You can indicate here your allergies or anything that is important to know for organizers', verbose_name='health issues')),
('photo_authorization', models.FileField(blank=True, default='', upload_to=registration.models.get_random_photo_filename, verbose_name='photo authorization')), ('photo_authorization', models.FileField(blank=True, default='', upload_to=registration.models.get_random_photo_filename, verbose_name='photo authorization')),
('address', address.models.AddressField(default=None, null=True, on_delete=django.db.models.deletion.SET_NULL, to='address.Address', verbose_name='address')), ('team', models.ForeignKey(blank=True, default=None, null=True, on_delete=django.db.models.deletion.PROTECT, related_name='participants', to='participation.team', verbose_name='team')),
('team', models.ForeignKey(blank=True, default=None, null=True, on_delete=django.db.models.deletion.PROTECT, related_name='participants', to='participation.Team', verbose_name='team')),
], ],
options={ options={
'abstract': False, 'abstract': False,
@ -55,7 +57,7 @@ class Migration(migrations.Migration):
migrations.CreateModel( migrations.CreateModel(
name='VolunteerRegistration', name='VolunteerRegistration',
fields=[ fields=[
('registration_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='registration.Registration')), ('registration_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='registration.registration')),
('professional_activity', models.TextField(verbose_name='professional activity')), ('professional_activity', models.TextField(verbose_name='professional activity')),
], ],
options={ options={
@ -67,7 +69,7 @@ class Migration(migrations.Migration):
migrations.CreateModel( migrations.CreateModel(
name='AdminRegistration', name='AdminRegistration',
fields=[ fields=[
('volunteerregistration_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='registration.VolunteerRegistration')), ('volunteerregistration_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='registration.volunteerregistration')),
('role', models.TextField(verbose_name='role of the administrator')), ('role', models.TextField(verbose_name='role of the administrator')),
], ],
options={ options={
@ -79,7 +81,7 @@ class Migration(migrations.Migration):
migrations.CreateModel( migrations.CreateModel(
name='CoachRegistration', name='CoachRegistration',
fields=[ fields=[
('participantregistration_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='registration.ParticipantRegistration')), ('participantregistration_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='registration.participantregistration')),
('professional_activity', models.TextField(verbose_name='professional activity')), ('professional_activity', models.TextField(verbose_name='professional activity')),
], ],
options={ options={
@ -91,7 +93,7 @@ class Migration(migrations.Migration):
migrations.CreateModel( migrations.CreateModel(
name='StudentRegistration', name='StudentRegistration',
fields=[ fields=[
('participantregistration_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='registration.ParticipantRegistration')), ('participantregistration_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='registration.participantregistration')),
('student_class', models.IntegerField(choices=[(12, '12th grade'), (11, '11th grade'), (10, '10th grade or lower')], verbose_name='student class')), ('student_class', models.IntegerField(choices=[(12, '12th grade'), (11, '11th grade'), (10, '10th grade or lower')], verbose_name='student class')),
('school', models.CharField(max_length=255, verbose_name='school')), ('school', models.CharField(max_length=255, verbose_name='school')),
('responsible_name', models.CharField(default='', max_length=255, verbose_name='responsible name')), ('responsible_name', models.CharField(default='', max_length=255, verbose_name='responsible name')),
@ -110,11 +112,11 @@ class Migration(migrations.Migration):
name='Payment', name='Payment',
fields=[ fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('type', models.CharField(blank=True, choices=[('', 'No payment'), ('helloasso', 'Hello Asso'), ('scholarship', 'Scholarship'), ('bank_transfer', 'Bank transfer'), ('free', 'The tournament is free')], default='', max_length=16, verbose_name='type')), ('type', models.CharField(blank=True, choices=[('', 'No payment'), ('helloasso', 'Hello Asso'), ('scholarship', 'Scholarship'), ('bank_transfer', 'Bank transfer'), ('other', 'Other (please indicate)'), ('free', 'The tournament is free')], default='', max_length=16, verbose_name='type')),
('scholarship_file', models.FileField(blank=True, default='', help_text='only if you have a scholarship.', upload_to=registration.models.get_scholarship_filename, verbose_name='scholarship file')), ('scholarship_file', models.FileField(blank=True, default='', help_text='only if you have a scholarship.', upload_to=registration.models.get_scholarship_filename, verbose_name='scholarship file')),
('additional_information', models.TextField(blank=True, default='', help_text='To help us to find your payment.', verbose_name='additional information')), ('additional_information', models.TextField(blank=True, default='', help_text='To help us to find your payment.', verbose_name='additional information')),
('valid', models.BooleanField(default=False, null=True, verbose_name='valid')), ('valid', models.BooleanField(default=False, null=True, verbose_name='valid')),
('registration', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, related_name='payment', to='registration.ParticipantRegistration', verbose_name='registration')), ('registration', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, related_name='payment', to='registration.participantregistration', verbose_name='registration')),
], ],
options={ options={
'verbose_name': 'payment', 'verbose_name': 'payment',

View File

@ -1,18 +0,0 @@
# Generated by Django 3.0.11 on 2021-01-23 20:52
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('registration', '0001_initial'),
]
operations = [
migrations.AddField(
model_name='participantregistration',
name='health_issues',
field=models.TextField(blank=True, help_text='You can indicate here your allergies or anything that is important to know for organizers', verbose_name='health issues'),
),
]

View File

@ -1,18 +0,0 @@
# Generated by Django 3.2.13 on 2022-04-26 11:46
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('registration', '0002_participantregistration_health_issues'),
]
operations = [
migrations.AlterField(
model_name='payment',
name='type',
field=models.CharField(blank=True, choices=[('', 'No payment'), ('helloasso', 'Hello Asso'), ('scholarship', 'Scholarship'), ('bank_transfer', 'Bank transfer'), ('other', 'Other (please indicate)'), ('free', 'The tournament is free')], default='', max_length=16, verbose_name='type'),
),
]

View File

@ -3,8 +3,8 @@
from datetime import date from datetime import date
from address.models import AddressField
from django.contrib.sites.models import Site from django.contrib.sites.models import Site
from django.core.validators import MaxValueValidator, MinValueValidator
from django.db import models from django.db import models
from django.template import loader from django.template import loader
from django.urls import reverse_lazy from django.urls import reverse_lazy
@ -139,10 +139,19 @@ class ParticipantRegistration(Registration):
default="other", default="other",
) )
address = AddressField( address = models.CharField(
max_length=255,
verbose_name=_("address"), verbose_name=_("address"),
null=True, )
default=None,
zip_code = models.PositiveSmallIntegerField(
verbose_name=_("zip code"),
validators=[MinValueValidator(1000), MaxValueValidator(99999)],
)
city = models.CharField(
max_length=255,
verbose_name=_("city"),
) )
phone_number = PhoneNumberField( phone_number = PhoneNumberField(

View File

@ -46,7 +46,7 @@
<dd class="col-sm-6">{{ user_object.registration.get_gender_display }}</dd> <dd class="col-sm-6">{{ user_object.registration.get_gender_display }}</dd>
<dt class="col-sm-6 text-right">{% trans "Address:" %}</dt> <dt class="col-sm-6 text-right">{% trans "Address:" %}</dt>
<dd class="col-sm-6">{{ user_object.registration.address }}</dd> <dd class="col-sm-6">{{ user_object.registration.address }}, {{ user_object.registration.zip_code|stringformat:'05d' }} {{ user_object.registration.city }}</dd>
<dt class="col-sm-6 text-right">{% trans "Phone number:" %}</dt> <dt class="col-sm-6 text-right">{% trans "Phone number:" %}</dt>
<dd class="col-sm-6">{{ user_object.registration.phone_number }}</dd> <dd class="col-sm-6">{{ user_object.registration.phone_number }}</dd>

View File

@ -131,7 +131,9 @@ class TestRegistration(TestCase):
school="God", school="God",
birth_date="2000-01-01", birth_date="2000-01-01",
gender="other", gender="other",
address="1 Rue de Rivoli, 75001 Paris, France", address="1 Rue de Rivoli",
zip_code=75001,
city="Paris",
phone_number="0123456789", phone_number="0123456789",
responsible_name="Toto", responsible_name="Toto",
responsible_phone="0123456789", responsible_phone="0123456789",
@ -155,7 +157,9 @@ class TestRegistration(TestCase):
school="God", school="God",
birth_date="2000-01-01", birth_date="2000-01-01",
gender="other", gender="other",
address="1 Rue de Rivoli, 75001 Paris, France", address="1 Rue de Rivoli",
zip_code=75001,
city="Paris",
phone_number="0123456789", phone_number="0123456789",
responsible_name="Toto", responsible_name="Toto",
responsible_phone="0123456789", responsible_phone="0123456789",
@ -176,7 +180,9 @@ class TestRegistration(TestCase):
role="coach", role="coach",
birth_date="1980-01-01", birth_date="1980-01-01",
gender="other", gender="other",
address="1 Rue de Rivoli, 75001 Paris, France", address="1 Rue de Rivoli",
zip_code=75001,
city="Paris",
phone_number="0123456789", phone_number="0123456789",
professional_activity="God", professional_activity="God",
give_contact_to_animath=True, give_contact_to_animath=True,
@ -255,10 +261,11 @@ class TestRegistration(TestCase):
for user, data in [(self.user, dict(role="Bot")), for user, data in [(self.user, dict(role="Bot")),
(self.student, dict(student_class=11, school="Sky", birth_date="2001-01-01", (self.student, dict(student_class=11, school="Sky", birth_date="2001-01-01",
gender="female", address="1 Rue de Rivoli, 75001 Paris, France", gender="female", address="1 Rue de Rivoli", zip_code=75001,
responsible_name="Toto", responsible_email="toto@example.com")), city="Paris", responsible_name="Toto",
responsible_email="toto@example.com")),
(self.coach, dict(professional_activity="God", birth_date="2001-01-01", (self.coach, dict(professional_activity="God", birth_date="2001-01-01",
gender="male", address="1 Rue de Rivoli, 75001 Paris, France"))]: gender="male", address="1 Rue de Rivoli", zip_code=75001, city="Paris"))]:
response = self.client.get(reverse("registration:update_user", args=(user.pk,))) response = self.client.get(reverse("registration:update_user", args=(user.pk,)))
self.assertEqual(response.status_code, 200) self.assertEqual(response.status_code, 200)

View File

@ -7,7 +7,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: TFJM\n" "Project-Id-Version: TFJM\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-05-15 16:40+0200\n" "POT-Creation-Date: 2023-01-10 20:22+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: Yohann D'ANELLO <yohann.danello@animath.fr>\n" "Last-Translator: Yohann D'ANELLO <yohann.danello@animath.fr>\n"
"Language-Team: LANGUAGE <LL@li.org>\n" "Language-Team: LANGUAGE <LL@li.org>\n"
@ -100,7 +100,7 @@ msgid "Changelog of type \"{action}\" for model {model} at {timestamp}"
msgstr "Changelog de type \"{action}\" pour le modèle {model} le {timestamp}" msgstr "Changelog de type \"{action}\" pour le modèle {model} le {timestamp}"
#: apps/participation/admin.py:19 apps/participation/models.py:314 #: apps/participation/admin.py:19 apps/participation/models.py:314
#: apps/participation/tables.py:44 apps/registration/models.py:359 #: apps/participation/tables.py:44 apps/registration/models.py:368
msgid "valid" msgid "valid"
msgstr "valide" msgstr "valide"
@ -108,7 +108,7 @@ msgstr "valide"
msgid "This name is already used." msgid "This name is already used."
msgstr "Ce nom est déjà utilisé." msgstr "Ce nom est déjà utilisé."
#: apps/participation/forms.py:37 apps/participation/models.py:41 #: apps/participation/forms.py:37 apps/participation/models.py:40
msgid "The trigram must be composed of three uppercase letters." msgid "The trigram must be composed of three uppercase letters."
msgstr "Le trigramme doit être composé de trois lettres majuscules." msgstr "Le trigramme doit être composé de trois lettres majuscules."
@ -173,52 +173,53 @@ msgstr "L'utilisateur⋅rice suivant n'a pas été trouvé :"
#: apps/participation/forms.py:267 #: apps/participation/forms.py:267
msgid "The defender, the opponent and the reporter must be different." msgid "The defender, the opponent and the reporter must be different."
msgstr "Læ défenseur⋅se, l'opposant⋅e et læ rapporteur⋅e doivent être différent⋅es." msgstr ""
"Læ défenseur⋅se, l'opposant⋅e et læ rapporteur⋅e doivent être différent⋅es."
#: apps/participation/forms.py:271 #: apps/participation/forms.py:271
msgid "This defender did not work on this problem." msgid "This defender did not work on this problem."
msgstr "Ce⋅tte défenseur⋅se ne travaille pas sur ce problème." msgstr "Ce⋅tte défenseur⋅se ne travaille pas sur ce problème."
#: apps/participation/models.py:34 apps/participation/models.py:132 #: apps/participation/models.py:33 apps/participation/models.py:131
#: apps/participation/tables.py:17 apps/participation/tables.py:34 #: apps/participation/tables.py:17 apps/participation/tables.py:34
msgid "name" msgid "name"
msgstr "nom" msgstr "nom"
#: apps/participation/models.py:40 apps/participation/tables.py:39 #: apps/participation/models.py:39 apps/participation/tables.py:39
msgid "trigram" msgid "trigram"
msgstr "trigramme" msgstr "trigramme"
#: apps/participation/models.py:48 #: apps/participation/models.py:47
msgid "access code" msgid "access code"
msgstr "code d'accès" msgstr "code d'accès"
#: apps/participation/models.py:49 #: apps/participation/models.py:48
msgid "The access code let other people to join the team." msgid "The access code let other people to join the team."
msgstr "Le code d'accès permet aux autres participants de rejoindre l'équipe." msgstr "Le code d'accès permet aux autres participants de rejoindre l'équipe."
#: apps/participation/models.py:53 #: apps/participation/models.py:52
msgid "motivation letter" msgid "motivation letter"
msgstr "lettre de motivation" msgstr "lettre de motivation"
#: apps/participation/models.py:119 #: apps/participation/models.py:118
#, python-brace-format #, python-brace-format
msgid "Team {name} ({trigram})" msgid "Team {name} ({trigram})"
msgstr "Équipe {name} ({trigram})" msgstr "Équipe {name} ({trigram})"
#: apps/participation/models.py:122 apps/participation/models.py:299 #: apps/participation/models.py:121 apps/participation/models.py:299
#: apps/registration/models.py:123 #: apps/registration/models.py:123
msgid "team" msgid "team"
msgstr "équipe" msgstr "équipe"
#: apps/participation/models.py:123 apps/participation/tables.py:85 #: apps/participation/models.py:122 apps/participation/tables.py:85
msgid "teams" msgid "teams"
msgstr "équipes" msgstr "équipes"
#: apps/participation/models.py:137 #: apps/participation/models.py:136
msgid "start" msgid "start"
msgstr "début" msgstr "début"
#: apps/participation/models.py:142 #: apps/participation/models.py:141
msgid "end" msgid "end"
msgstr "fin" msgstr "fin"
@ -306,7 +307,7 @@ msgid "Participation of the team {name} ({trigram})"
msgstr "Participation de l'équipe {name} ({trigram})" msgstr "Participation de l'équipe {name} ({trigram})"
#: apps/participation/models.py:331 apps/participation/models.py:528 #: apps/participation/models.py:331 apps/participation/models.py:528
#: apps/participation/models.py:555 apps/participation/models.py:593 #: apps/participation/models.py:558 apps/participation/models.py:596
msgid "participation" msgid "participation"
msgstr "participation" msgstr "participation"
@ -365,7 +366,7 @@ msgstr "poules"
msgid "defended solution" msgid "defended solution"
msgstr "solution défendue" msgstr "solution défendue"
#: apps/participation/models.py:411 apps/participation/models.py:562 #: apps/participation/models.py:411 apps/participation/models.py:565
#, python-brace-format #, python-brace-format
msgid "Problem #{problem}" msgid "Problem #{problem}"
msgstr "Problème n°{problem}" msgstr "Problème n°{problem}"
@ -374,11 +375,11 @@ msgstr "Problème n°{problem}"
msgid "defender" msgid "defender"
msgstr "défenseur" msgstr "défenseur"
#: apps/participation/models.py:425 apps/participation/models.py:605 #: apps/participation/models.py:425 apps/participation/models.py:608
msgid "opponent" msgid "opponent"
msgstr "opposant" msgstr "opposant"
#: apps/participation/models.py:432 apps/participation/models.py:606 #: apps/participation/models.py:432 apps/participation/models.py:609
msgid "reporter" msgid "reporter"
msgstr "rapporteur" msgstr "rapporteur"
@ -391,8 +392,8 @@ msgid ""
"Number of penalties for the defender. The defender will loose a 0.5 " "Number of penalties for the defender. The defender will loose a 0.5 "
"coefficient per penalty." "coefficient per penalty."
msgstr "" msgstr ""
"Nombre de pénalités pour læ défenseur⋅se. Læ défenseur⋅se perd un coefficient 0.5 " "Nombre de pénalités pour læ défenseur⋅se. Læ défenseur⋅se perd un "
"sur sa solution écrite par pénalité." "coefficient 0.5 sur sa solution écrite par pénalité."
#: apps/participation/models.py:499 apps/participation/models.py:502 #: apps/participation/models.py:499 apps/participation/models.py:502
#: apps/participation/models.py:505 #: apps/participation/models.py:505
@ -406,7 +407,7 @@ msgid "Passage of {defender} for problem {problem}"
msgstr "Passage de {defender} pour le problème {problem}" msgstr "Passage de {defender} pour le problème {problem}"
#: apps/participation/models.py:514 apps/participation/models.py:522 #: apps/participation/models.py:514 apps/participation/models.py:522
#: apps/participation/models.py:600 apps/participation/models.py:642 #: apps/participation/models.py:603 apps/participation/models.py:645
msgid "passage" msgid "passage"
msgstr "passage" msgstr "passage"
@ -422,96 +423,96 @@ msgstr "différence"
msgid "Score to add/remove on the final score" msgid "Score to add/remove on the final score"
msgstr "Score à ajouter/retrancher au score final" msgstr "Score à ajouter/retrancher au score final"
#: apps/participation/models.py:538 #: apps/participation/models.py:541
msgid "tweak" msgid "tweak"
msgstr "harmonisation" msgstr "harmonisation"
#: apps/participation/models.py:539 #: apps/participation/models.py:542
msgid "tweaks" msgid "tweaks"
msgstr "harmonisations" msgstr "harmonisations"
#: apps/participation/models.py:560 #: apps/participation/models.py:563
msgid "problem" msgid "problem"
msgstr "numéro de problème" msgstr "numéro de problème"
#: apps/participation/models.py:567 #: apps/participation/models.py:570
msgid "solution for the final tournament" msgid "solution for the final tournament"
msgstr "solution pour la finale" msgstr "solution pour la finale"
#: apps/participation/models.py:572 apps/participation/models.py:611 #: apps/participation/models.py:575 apps/participation/models.py:614
msgid "file" msgid "file"
msgstr "fichier" msgstr "fichier"
#: apps/participation/models.py:578 #: apps/participation/models.py:581
#, python-brace-format #, python-brace-format
msgid "Solution of team {team} for problem {problem}" msgid "Solution of team {team} for problem {problem}"
msgstr "Solution de l'équipe {team} pour le problème {problem}" msgstr "Solution de l'équipe {team} pour le problème {problem}"
#: apps/participation/models.py:580 #: apps/participation/models.py:583
msgid "for final" msgid "for final"
msgstr "pour la finale" msgstr "pour la finale"
#: apps/participation/models.py:583 #: apps/participation/models.py:586
msgid "solution" msgid "solution"
msgstr "solution" msgstr "solution"
#: apps/participation/models.py:584 #: apps/participation/models.py:587
msgid "solutions" msgid "solutions"
msgstr "solutions" msgstr "solutions"
#: apps/participation/models.py:617 #: apps/participation/models.py:620
#, python-brace-format #, python-brace-format
msgid "Synthesis of {team} as {type} for problem {problem} of {defender}" msgid "Synthesis of {team} as {type} for problem {problem} of {defender}"
msgstr "" msgstr ""
"Note de synthèse de l'équipe {team} en tant que {type} pour le problème " "Note de synthèse de l'équipe {team} en tant que {type} pour le problème "
"{problem} de {defender}" "{problem} de {defender}"
#: apps/participation/models.py:625 #: apps/participation/models.py:628
msgid "synthesis" msgid "synthesis"
msgstr "note de synthèse" msgstr "note de synthèse"
#: apps/participation/models.py:626 #: apps/participation/models.py:629
msgid "syntheses" msgid "syntheses"
msgstr "notes de synthèse" msgstr "notes de synthèse"
#: apps/participation/models.py:635 #: apps/participation/models.py:638
msgid "jury" msgid "jury"
msgstr "jury" msgstr "jury"
#: apps/participation/models.py:647 #: apps/participation/models.py:650
msgid "defender writing note" msgid "defender writing note"
msgstr "note d'écrit de læ défenseur⋅se" msgstr "note d'écrit de læ défenseur⋅se"
#: apps/participation/models.py:653 #: apps/participation/models.py:656
msgid "defender oral note" msgid "defender oral note"
msgstr "note d'oral de læ défenseur⋅se" msgstr "note d'oral de læ défenseur⋅se"
#: apps/participation/models.py:659 #: apps/participation/models.py:662
msgid "opponent writing note" msgid "opponent writing note"
msgstr "note d'écrit de l'opposant⋅e" msgstr "note d'écrit de l'opposant⋅e"
#: apps/participation/models.py:665 #: apps/participation/models.py:668
msgid "opponent oral note" msgid "opponent oral note"
msgstr "note d'oral de l'opposant⋅e" msgstr "note d'oral de l'opposant⋅e"
#: apps/participation/models.py:671 #: apps/participation/models.py:674
msgid "reporter writing note" msgid "reporter writing note"
msgstr "note d'écrit de læ rapporteur⋅e" msgstr "note d'écrit de læ rapporteur⋅e"
#: apps/participation/models.py:677 #: apps/participation/models.py:680
msgid "reporter oral note" msgid "reporter oral note"
msgstr "note d'oral de læ rapporteur⋅e" msgstr "note d'oral de læ rapporteur⋅e"
#: apps/participation/models.py:695 #: apps/participation/models.py:698
#, python-brace-format #, python-brace-format
msgid "Notes of {jury} for {passage}" msgid "Notes of {jury} for {passage}"
msgstr "Notes de {jury} pour le {passage}" msgstr "Notes de {jury} pour le {passage}"
#: apps/participation/models.py:702 #: apps/participation/models.py:705
msgid "note" msgid "note"
msgstr "note" msgstr "note"
#: apps/participation/models.py:703 #: apps/participation/models.py:706
msgid "notes" msgid "notes"
msgstr "notes" msgstr "notes"
@ -938,7 +939,7 @@ msgid "Invalidate"
msgstr "Invalider" msgstr "Invalider"
#: apps/participation/templates/participation/team_detail.html:171 #: apps/participation/templates/participation/team_detail.html:171
#: apps/participation/views.py:329 #: apps/participation/views.py:328
msgid "Upload motivation letter" msgid "Upload motivation letter"
msgstr "Envoyer la lettre de motivation" msgstr "Envoyer la lettre de motivation"
@ -947,7 +948,7 @@ msgid "Update team"
msgstr "Modifier l'équipe" msgstr "Modifier l'équipe"
#: apps/participation/templates/participation/team_detail.html:181 #: apps/participation/templates/participation/team_detail.html:181
#: apps/participation/views.py:432 #: apps/participation/views.py:431
msgid "Leave team" msgid "Leave team"
msgstr "Quitter l'équipe" msgstr "Quitter l'équipe"
@ -1059,49 +1060,49 @@ msgstr "Retour aux détails de l'utilisateur⋅rice"
msgid "Templates:" msgid "Templates:"
msgstr "Modèles :" msgstr "Modèles :"
#: apps/participation/views.py:45 tfjm/templates/base.html:71 #: apps/participation/views.py:44 tfjm/templates/base.html:71
#: tfjm/templates/base.html:230 #: tfjm/templates/base.html:230
msgid "Create team" msgid "Create team"
msgstr "Créer une équipe" msgstr "Créer une équipe"
#: apps/participation/views.py:54 apps/participation/views.py:99 #: apps/participation/views.py:53 apps/participation/views.py:98
msgid "You don't participate, so you can't create a team." msgid "You don't participate, so you can't create a team."
msgstr "Vous ne participez pas, vous ne pouvez pas créer d'équipe." msgstr "Vous ne participez pas, vous ne pouvez pas créer d'équipe."
#: apps/participation/views.py:56 apps/participation/views.py:101 #: apps/participation/views.py:55 apps/participation/views.py:100
msgid "You are already in a team." msgid "You are already in a team."
msgstr "Vous êtes déjà dans une équipe." msgstr "Vous êtes déjà dans une équipe."
#: apps/participation/views.py:90 tfjm/templates/base.html:76 #: apps/participation/views.py:89 tfjm/templates/base.html:76
#: tfjm/templates/base.html:225 #: tfjm/templates/base.html:225
msgid "Join team" msgid "Join team"
msgstr "Rejoindre une équipe" msgstr "Rejoindre une équipe"
#: apps/participation/views.py:152 apps/participation/views.py:438 #: apps/participation/views.py:151 apps/participation/views.py:437
#: apps/participation/views.py:472 #: apps/participation/views.py:471
msgid "You are not in a team." msgid "You are not in a team."
msgstr "Vous n'êtes pas dans une équipe." msgstr "Vous n'êtes pas dans une équipe."
#: apps/participation/views.py:153 apps/participation/views.py:473 #: apps/participation/views.py:152 apps/participation/views.py:472
msgid "You don't participate, so you don't have any team." msgid "You don't participate, so you don't have any team."
msgstr "Vous ne participez pas, vous n'avez donc pas d'équipe." msgstr "Vous ne participez pas, vous n'avez donc pas d'équipe."
#: apps/participation/views.py:179 #: apps/participation/views.py:178
#, python-brace-format #, python-brace-format
msgid "Detail of team {trigram}" msgid "Detail of team {trigram}"
msgstr "Détails de l'équipe {trigram}" msgstr "Détails de l'équipe {trigram}"
#: apps/participation/views.py:215 #: apps/participation/views.py:214
msgid "You don't participate, so you can't request the validation of the team." msgid "You don't participate, so you can't request the validation of the team."
msgstr "" msgstr ""
"Vous ne participez pas, vous ne pouvez pas demander la validation de " "Vous ne participez pas, vous ne pouvez pas demander la validation de "
"l'équipe." "l'équipe."
#: apps/participation/views.py:218 #: apps/participation/views.py:217
msgid "The validation of the team is already done or pending." msgid "The validation of the team is already done or pending."
msgstr "La validation de l'équipe est déjà faite ou en cours." msgstr "La validation de l'équipe est déjà faite ou en cours."
#: apps/participation/views.py:221 #: apps/participation/views.py:220
msgid "" msgid ""
"The team can't be validated: missing email address confirmations, " "The team can't be validated: missing email address confirmations, "
"authorizations, people, motivation letter or the tournament is not set." "authorizations, people, motivation letter or the tournament is not set."
@ -1110,74 +1111,74 @@ msgstr ""
"d'adresse e-mail, soit une autorisation, soit des personnes, soit la lettre " "d'adresse e-mail, soit une autorisation, soit des personnes, soit la lettre "
"de motivation, soit le tournoi n'a pas été choisi." "de motivation, soit le tournoi n'a pas été choisi."
#: apps/participation/views.py:243 #: apps/participation/views.py:242
msgid "You are not an organizer of the tournament." msgid "You are not an organizer of the tournament."
msgstr "Vous n'êtes pas un⋅e organisateur⋅rice du tournoi." msgstr "Vous n'êtes pas un⋅e organisateur⋅rice du tournoi."
#: apps/participation/views.py:246 #: apps/participation/views.py:245
msgid "This team has no pending validation." msgid "This team has no pending validation."
msgstr "L'équipe n'a pas de validation en attente." msgstr "L'équipe n'a pas de validation en attente."
#: apps/participation/views.py:276 #: apps/participation/views.py:275
msgid "You must specify if you validate the registration or not." msgid "You must specify if you validate the registration or not."
msgstr "Vous devez spécifier si vous validez l'inscription ou non." msgstr "Vous devez spécifier si vous validez l'inscription ou non."
#: apps/participation/views.py:309 #: apps/participation/views.py:308
#, python-brace-format #, python-brace-format
msgid "Update team {trigram}" msgid "Update team {trigram}"
msgstr "Mise à jour de l'équipe {trigram}" msgstr "Mise à jour de l'équipe {trigram}"
#: apps/participation/views.py:368 apps/participation/views.py:418 #: apps/participation/views.py:367 apps/participation/views.py:417
#, python-brace-format #, python-brace-format
msgid "Motivation letter of {team}.{ext}" msgid "Motivation letter of {team}.{ext}"
msgstr "Lettre de motivation de {team}.{ext}" msgstr "Lettre de motivation de {team}.{ext}"
#: apps/participation/views.py:399 #: apps/participation/views.py:398
#, python-brace-format #, python-brace-format
msgid "Photo authorization of {participant}.{ext}" msgid "Photo authorization of {participant}.{ext}"
msgstr "Autorisation de droit à l'image de {participant}.{ext}" msgstr "Autorisation de droit à l'image de {participant}.{ext}"
#: apps/participation/views.py:405 #: apps/participation/views.py:404
#, python-brace-format #, python-brace-format
msgid "Parental authorization of {participant}.{ext}" msgid "Parental authorization of {participant}.{ext}"
msgstr "Autorisation parentale de {participant}.{ext}" msgstr "Autorisation parentale de {participant}.{ext}"
#: apps/participation/views.py:412 #: apps/participation/views.py:411
#, python-brace-format #, python-brace-format
msgid "Health sheet of {participant}.{ext}" msgid "Health sheet of {participant}.{ext}"
msgstr "Fiche sanitaire de {participant}.{ext}" msgstr "Fiche sanitaire de {participant}.{ext}"
#: apps/participation/views.py:422 #: apps/participation/views.py:421
#, python-brace-format #, python-brace-format
msgid "Photo authorizations of team {trigram}.zip" msgid "Photo authorizations of team {trigram}.zip"
msgstr "Autorisations de droit à l'image de l'équipe {trigram}.zip" msgstr "Autorisations de droit à l'image de l'équipe {trigram}.zip"
#: apps/participation/views.py:440 #: apps/participation/views.py:439
msgid "The team is already validated or the validation is pending." msgid "The team is already validated or the validation is pending."
msgstr "La validation de l'équipe est déjà faite ou en cours." msgstr "La validation de l'équipe est déjà faite ou en cours."
#: apps/participation/views.py:487 #: apps/participation/views.py:486
msgid "The team is not validated yet." msgid "The team is not validated yet."
msgstr "L'équipe n'est pas encore validée." msgstr "L'équipe n'est pas encore validée."
#: apps/participation/views.py:501 #: apps/participation/views.py:500
#, python-brace-format #, python-brace-format
msgid "Participation of team {trigram}" msgid "Participation of team {trigram}"
msgstr "Participation de l'équipe {trigram}" msgstr "Participation de l'équipe {trigram}"
#: apps/participation/views.py:627 #: apps/participation/views.py:626
msgid "You can't upload a solution after the deadline." msgid "You can't upload a solution after the deadline."
msgstr "Vous ne pouvez pas envoyer de solution après la date limite." msgstr "Vous ne pouvez pas envoyer de solution après la date limite."
#: apps/participation/views.py:730 #: apps/participation/views.py:729
msgid "The following user is not registered as a jury:" msgid "The following user is not registered as a jury:"
msgstr "L'utilisateur⋅rice suivant n'est pas inscrit⋅e en tant que juré⋅e :" msgstr "L'utilisateur⋅rice suivant n'est pas inscrit⋅e en tant que juré⋅e :"
#: apps/participation/views.py:738 #: apps/participation/views.py:737
msgid "Notes were successfully uploaded." msgid "Notes were successfully uploaded."
msgstr "Les notes ont bien été envoyées." msgstr "Les notes ont bien été envoyées."
#: apps/participation/views.py:850 #: apps/participation/views.py:849
msgid "You can't upload a synthesis after the deadline." msgid "You can't upload a synthesis after the deadline."
msgstr "Vous ne pouvez pas envoyer de note de synthèse après la date limite." msgstr "Vous ne pouvez pas envoyer de note de synthèse après la date limite."
@ -1189,7 +1190,7 @@ msgstr "rôle"
msgid "participant" msgid "participant"
msgstr "participant⋅e" msgstr "participant⋅e"
#: apps/registration/forms.py:25 apps/registration/models.py:259 #: apps/registration/forms.py:25 apps/registration/models.py:268
msgid "coach" msgid "coach"
msgstr "encadrant⋅e" msgstr "encadrant⋅e"
@ -1197,11 +1198,11 @@ msgstr "encadrant⋅e"
msgid "This email address is already used." msgid "This email address is already used."
msgstr "Cette adresse e-mail est déjà utilisée." msgstr "Cette adresse e-mail est déjà utilisée."
#: apps/registration/forms.py:56 apps/registration/models.py:285 #: apps/registration/forms.py:56 apps/registration/models.py:294
msgid "volunteer" msgid "volunteer"
msgstr "bénévole" msgstr "bénévole"
#: apps/registration/forms.py:57 apps/registration/models.py:304 #: apps/registration/forms.py:57 apps/registration/models.py:313
msgid "admin" msgid "admin"
msgstr "admin" msgstr "admin"
@ -1226,7 +1227,7 @@ msgstr "email confirmé"
msgid "Activate your TFJM² account" msgid "Activate your TFJM² account"
msgstr "Activez votre compte du TFJM²" msgstr "Activez votre compte du TFJM²"
#: apps/registration/models.py:99 apps/registration/models.py:325 #: apps/registration/models.py:99 apps/registration/models.py:334
msgid "registration" msgid "registration"
msgstr "inscription" msgstr "inscription"
@ -1254,19 +1255,27 @@ msgstr "Homme"
msgid "Other" msgid "Other"
msgstr "Autre" msgstr "Autre"
#: apps/registration/models.py:143 #: apps/registration/models.py:144
msgid "address" msgid "address"
msgstr "adresse" msgstr "adresse"
#: apps/registration/models.py:149 #: apps/registration/models.py:148
msgid "zip code"
msgstr "code postal"
#: apps/registration/models.py:154
msgid "city"
msgstr "ville"
#: apps/registration/models.py:158
msgid "phone number" msgid "phone number"
msgstr "numéro de téléphone" msgstr "numéro de téléphone"
#: apps/registration/models.py:154 #: apps/registration/models.py:163
msgid "health issues" msgid "health issues"
msgstr "problèmes de santé" msgstr "problèmes de santé"
#: apps/registration/models.py:156 #: apps/registration/models.py:165
msgid "" msgid ""
"You can indicate here your allergies or anything that is important to know " "You can indicate here your allergies or anything that is important to know "
"for organizers" "for organizers"
@ -1274,136 +1283,136 @@ msgstr ""
"Vous pouvez indiquer ici vos allergies ou n'importe quoi qui peut être bon à " "Vous pouvez indiquer ici vos allergies ou n'importe quoi qui peut être bon à "
"savoir pour les organisateur⋅rices" "savoir pour les organisateur⋅rices"
#: apps/registration/models.py:160 #: apps/registration/models.py:169
msgid "photo authorization" msgid "photo authorization"
msgstr "autorisation de droit à l'image" msgstr "autorisation de droit à l'image"
#: apps/registration/models.py:192 #: apps/registration/models.py:201
msgid "12th grade" msgid "12th grade"
msgstr "Terminale" msgstr "Terminale"
#: apps/registration/models.py:193 #: apps/registration/models.py:202
msgid "11th grade" msgid "11th grade"
msgstr "Première" msgstr "Première"
#: apps/registration/models.py:194 #: apps/registration/models.py:203
msgid "10th grade or lower" msgid "10th grade or lower"
msgstr "Seconde ou inférieur" msgstr "Seconde ou inférieur"
#: apps/registration/models.py:196 #: apps/registration/models.py:205
msgid "student class" msgid "student class"
msgstr "classe" msgstr "classe"
#: apps/registration/models.py:201 #: apps/registration/models.py:210
msgid "school" msgid "school"
msgstr "école" msgstr "école"
#: apps/registration/models.py:206 #: apps/registration/models.py:215
msgid "responsible name" msgid "responsible name"
msgstr "nom de læ responsable légal⋅e" msgstr "nom de læ responsable légal⋅e"
#: apps/registration/models.py:211 #: apps/registration/models.py:220
msgid "responsible phone number" msgid "responsible phone number"
msgstr "numéro de téléphone de læ responsable légal⋅e" msgstr "numéro de téléphone de læ responsable légal⋅e"
#: apps/registration/models.py:216 #: apps/registration/models.py:225
msgid "responsible email address" msgid "responsible email address"
msgstr "adresse e-mail de læ responsable légal⋅e" msgstr "adresse e-mail de læ responsable légal⋅e"
#: apps/registration/models.py:221 #: apps/registration/models.py:230
msgid "parental authorization" msgid "parental authorization"
msgstr "autorisation parentale" msgstr "autorisation parentale"
#: apps/registration/models.py:228 #: apps/registration/models.py:237
msgid "health sheet" msgid "health sheet"
msgstr "fiche sanitaire" msgstr "fiche sanitaire"
#: apps/registration/models.py:236 #: apps/registration/models.py:245
msgid "student" msgid "student"
msgstr "étudiant⋅e" msgstr "étudiant⋅e"
#: apps/registration/models.py:244 #: apps/registration/models.py:253
msgid "student registration" msgid "student registration"
msgstr "inscription d'élève" msgstr "inscription d'élève"
#: apps/registration/models.py:245 #: apps/registration/models.py:254
msgid "student registrations" msgid "student registrations"
msgstr "inscriptions d'élève" msgstr "inscriptions d'élève"
#: apps/registration/models.py:254 apps/registration/models.py:276 #: apps/registration/models.py:263 apps/registration/models.py:285
msgid "professional activity" msgid "professional activity"
msgstr "activité professionnelle" msgstr "activité professionnelle"
#: apps/registration/models.py:267 #: apps/registration/models.py:276
msgid "coach registration" msgid "coach registration"
msgstr "inscription d'encadrant⋅e" msgstr "inscription d'encadrant⋅e"
#: apps/registration/models.py:268 #: apps/registration/models.py:277
msgid "coach registrations" msgid "coach registrations"
msgstr "inscriptions d'encadrant⋅es" msgstr "inscriptions d'encadrant⋅es"
#: apps/registration/models.py:299 #: apps/registration/models.py:308
msgid "role of the administrator" msgid "role of the administrator"
msgstr "rôle de l'administrateur⋅rice" msgstr "rôle de l'administrateur⋅rice"
#: apps/registration/models.py:312 #: apps/registration/models.py:321
msgid "admin registration" msgid "admin registration"
msgstr "inscription d'administrateur⋅rice" msgstr "inscription d'administrateur⋅rice"
#: apps/registration/models.py:313 #: apps/registration/models.py:322
msgid "admin registrations" msgid "admin registrations"
msgstr "inscriptions d'administrateur⋅rices" msgstr "inscriptions d'administrateur⋅rices"
#: apps/registration/models.py:329 #: apps/registration/models.py:338
msgid "type" msgid "type"
msgstr "type" msgstr "type"
#: apps/registration/models.py:332 #: apps/registration/models.py:341
msgid "No payment" msgid "No payment"
msgstr "Pas de paiement" msgstr "Pas de paiement"
#: apps/registration/models.py:334 #: apps/registration/models.py:343
msgid "Scholarship" msgid "Scholarship"
msgstr "Notification de bourse" msgstr "Notification de bourse"
#: apps/registration/models.py:335 #: apps/registration/models.py:344
msgid "Bank transfer" msgid "Bank transfer"
msgstr "Virement bancaire" msgstr "Virement bancaire"
#: apps/registration/models.py:336 #: apps/registration/models.py:345
msgid "Other (please indicate)" msgid "Other (please indicate)"
msgstr "Autre (veuillez spécifier)" msgstr "Autre (veuillez spécifier)"
#: apps/registration/models.py:337 #: apps/registration/models.py:346
msgid "The tournament is free" msgid "The tournament is free"
msgstr "Le tournoi est gratuit" msgstr "Le tournoi est gratuit"
#: apps/registration/models.py:344 #: apps/registration/models.py:353
msgid "scholarship file" msgid "scholarship file"
msgstr "Notification de bourse" msgstr "Notification de bourse"
#: apps/registration/models.py:345 #: apps/registration/models.py:354
msgid "only if you have a scholarship." msgid "only if you have a scholarship."
msgstr "Nécessaire seulement si vous déclarez être boursier." msgstr "Nécessaire seulement si vous déclarez être boursier."
#: apps/registration/models.py:352 #: apps/registration/models.py:361
msgid "additional information" msgid "additional information"
msgstr "informations additionnelles" msgstr "informations additionnelles"
#: apps/registration/models.py:353 #: apps/registration/models.py:362
msgid "To help us to find your payment." msgid "To help us to find your payment."
msgstr "Pour nous aider à retrouver votre paiement, si nécessaire." msgstr "Pour nous aider à retrouver votre paiement, si nécessaire."
#: apps/registration/models.py:368 #: apps/registration/models.py:377
#, python-brace-format #, python-brace-format
msgid "Payment of {registration}" msgid "Payment of {registration}"
msgstr "Paiement de {registration}" msgstr "Paiement de {registration}"
#: apps/registration/models.py:371 #: apps/registration/models.py:380
msgid "payment" msgid "payment"
msgstr "paiement" msgstr "paiement"
#: apps/registration/models.py:372 #: apps/registration/models.py:381
msgid "payments" msgid "payments"
msgstr "paiements" msgstr "paiements"
@ -1575,8 +1584,8 @@ msgid ""
"your scholarship attestation." "your scholarship attestation."
msgstr "" msgstr ""
"Le prix du tournoi est de %(price)s €. Les frais de participation sont " "Le prix du tournoi est de %(price)s €. Les frais de participation sont "
"offerts pour les encadrant⋅es et les étudiant⋅es boursièr⋅es. Si c'est le cas, " "offerts pour les encadrant⋅es et les étudiant⋅es boursièr⋅es. Si c'est le "
"merci de nous transmettre votre notification de bourse." "cas, merci de nous transmettre votre notification de bourse."
#: apps/registration/templates/registration/payment_form.html:17 #: apps/registration/templates/registration/payment_form.html:17
msgid "" msgid ""
@ -1834,11 +1843,11 @@ msgstr "Autorisation parentale de {student}.{ext}"
msgid "Scholarship attestation of {user}.{ext}" msgid "Scholarship attestation of {user}.{ext}"
msgstr "Notification de bourse de {user}.{ext}" msgstr "Notification de bourse de {user}.{ext}"
#: tfjm/settings.py:163 #: tfjm/settings.py:162
msgid "English" msgid "English"
msgstr "Anglais" msgstr "Anglais"
#: tfjm/settings.py:164 #: tfjm/settings.py:163
msgid "French" msgid "French"
msgstr "Français" msgstr "Français"

View File

@ -1,5 +1,4 @@
Django>=3.2,<4.0 Django>=3.2,<4.0
django-address~=0.2
django-bootstrap-datepicker-plus~=4.0 django-bootstrap-datepicker-plus~=4.0
django-cas-server~=1.3 django-cas-server~=1.3
django-crispy-forms~=1.9 django-crispy-forms~=1.9

View File

@ -53,7 +53,6 @@ INSTALLED_APPS = [
'django.contrib.staticfiles', 'django.contrib.staticfiles',
'django.forms', 'django.forms',
'address',
'bootstrap_datepicker_plus', 'bootstrap_datepicker_plus',
'crispy_forms', 'crispy_forms',
'django_filters', 'django_filters',

View File

@ -12,7 +12,6 @@ sitepackages = False
deps = deps =
coverage coverage
Django>=3.2,<4.0 Django>=3.2,<4.0
django-address~=0.2
django-bootstrap-datepicker-plus~=4.0 django-bootstrap-datepicker-plus~=4.0
django-crispy-forms~=1.9 django-crispy-forms~=1.9
django-filter~=2.4 django-filter~=2.4