mirror of
https://gitlab.com/animath/si/plateforme.git
synced 2025-02-20 19:41:20 +00:00
Compare commits
7 Commits
35042f077f
...
fd4280426b
Author | SHA1 | Date | |
---|---|---|---|
|
fd4280426b | ||
|
1a63c1f399 | ||
|
b40c06fe9e | ||
|
416135ca3a | ||
|
497b3ad8aa | ||
|
72fe279f15 | ||
|
ae520f791c |
@ -1,4 +1,4 @@
|
|||||||
# Generated by Django 3.1.3 on 2020-11-04 12:05
|
# Generated by Django 3.0.11 on 2021-01-21 21:06
|
||||||
|
|
||||||
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={
|
||||||
|
@ -4,7 +4,7 @@
|
|||||||
from django.contrib import admin
|
from django.contrib import admin
|
||||||
from django.utils.translation import gettext_lazy as _
|
from django.utils.translation import gettext_lazy as _
|
||||||
|
|
||||||
from .models import Participation, Pool, Solution, Synthesis, Team, Tournament
|
from .models import Participation, Passage, Pool, Solution, Synthesis, Team, Tournament
|
||||||
|
|
||||||
|
|
||||||
@admin.register(Team)
|
@admin.register(Team)
|
||||||
@ -31,6 +31,11 @@ class PoolAdmin(admin.ModelAdmin):
|
|||||||
search_fields = ('participations__team__name', 'participations__team__trigram',)
|
search_fields = ('participations__team__name', 'participations__team__trigram',)
|
||||||
|
|
||||||
|
|
||||||
|
@admin.register(Passage)
|
||||||
|
class PassageAdmin(admin.ModelAdmin):
|
||||||
|
search_fields = ('pool__participations__team__name', 'pool__participations__team__trigram',)
|
||||||
|
|
||||||
|
|
||||||
@admin.register(Solution)
|
@admin.register(Solution)
|
||||||
class SolutionAdmin(admin.ModelAdmin):
|
class SolutionAdmin(admin.ModelAdmin):
|
||||||
list_display = ('participation',)
|
list_display = ('participation',)
|
||||||
|
@ -3,12 +3,12 @@
|
|||||||
|
|
||||||
import re
|
import re
|
||||||
|
|
||||||
from PyPDF3 import PdfFileReader
|
|
||||||
from bootstrap_datepicker_plus import DatePickerInput, DateTimePickerInput
|
from bootstrap_datepicker_plus import DatePickerInput, DateTimePickerInput
|
||||||
from django import forms
|
from django import forms
|
||||||
from django.core.exceptions import ValidationError
|
from django.core.exceptions import ValidationError
|
||||||
from django.utils import formats
|
from django.utils import formats
|
||||||
from django.utils.translation import gettext_lazy as _
|
from django.utils.translation import gettext_lazy as _
|
||||||
|
from PyPDF3 import PdfFileReader
|
||||||
|
|
||||||
from .models import Note, Participation, Passage, Pool, Solution, Synthesis, Team, Tournament
|
from .models import Note, Participation, Passage, Pool, Solution, Synthesis, Team, Tournament
|
||||||
|
|
||||||
|
@ -1,10 +1,10 @@
|
|||||||
# Generated by Django 3.0.11 on 2020-12-30 12:02
|
# Generated by Django 3.0.11 on 2021-01-21 21:06
|
||||||
|
|
||||||
from datetime import date
|
|
||||||
|
|
||||||
|
import datetime
|
||||||
import django.core.validators
|
import django.core.validators
|
||||||
from django.db import migrations, models
|
from django.db import migrations, models
|
||||||
import django.utils.timezone
|
import django.utils.timezone
|
||||||
|
import participation.models
|
||||||
|
|
||||||
|
|
||||||
class Migration(migrations.Migration):
|
class Migration(migrations.Migration):
|
||||||
@ -15,22 +15,52 @@ class Migration(migrations.Migration):
|
|||||||
]
|
]
|
||||||
|
|
||||||
operations = [
|
operations = [
|
||||||
|
migrations.CreateModel(
|
||||||
|
name='Note',
|
||||||
|
fields=[
|
||||||
|
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||||
|
('defender_writing', models.PositiveSmallIntegerField(choices=[(0, 0), (1, 1), (2, 2), (3, 3), (4, 4), (5, 5), (6, 6), (7, 7), (8, 8), (9, 9), (10, 10), (11, 11), (12, 12), (13, 13), (14, 14), (15, 15), (16, 16), (17, 17), (18, 18), (19, 19), (20, 20)], default=0, verbose_name='defender writing note')),
|
||||||
|
('defender_oral', models.PositiveSmallIntegerField(choices=[(0, 0), (1, 1), (2, 2), (3, 3), (4, 4), (5, 5), (6, 6), (7, 7), (8, 8), (9, 9), (10, 10), (11, 11), (12, 12), (13, 13), (14, 14), (15, 15), (16, 16)], default=0, verbose_name='defender oral note')),
|
||||||
|
('opponent_writing', models.PositiveSmallIntegerField(choices=[(0, 0), (1, 1), (2, 2), (3, 3), (4, 4), (5, 5), (6, 6), (7, 7), (8, 8), (9, 9)], default=0, verbose_name='opponent writing note')),
|
||||||
|
('opponent_oral', models.PositiveSmallIntegerField(choices=[(0, 0), (1, 1), (2, 2), (3, 3), (4, 4), (5, 5), (6, 6), (7, 7), (8, 8), (9, 9), (10, 10)], default=0, verbose_name='opponent oral note')),
|
||||||
|
('reporter_writing', models.PositiveSmallIntegerField(choices=[(0, 0), (1, 1), (2, 2), (3, 3), (4, 4), (5, 5), (6, 6), (7, 7), (8, 8), (9, 9)], default=0, verbose_name='reporter writing note')),
|
||||||
|
('reporter_oral', models.PositiveSmallIntegerField(choices=[(0, 0), (1, 1), (2, 2), (3, 3), (4, 4), (5, 5), (6, 6), (7, 7), (8, 8), (9, 9), (10, 10)], default=0, verbose_name='reporter oral note')),
|
||||||
|
],
|
||||||
|
options={
|
||||||
|
'verbose_name': 'note',
|
||||||
|
'verbose_name_plural': 'notes',
|
||||||
|
},
|
||||||
|
),
|
||||||
migrations.CreateModel(
|
migrations.CreateModel(
|
||||||
name='Participation',
|
name='Participation',
|
||||||
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')),
|
||||||
('valid', models.BooleanField(default=None, help_text='The participation got the validation of the organizers.', null=True, verbose_name='valid')),
|
('valid', models.BooleanField(default=None, help_text='The participation got the validation of the organizers.', null=True, verbose_name='valid')),
|
||||||
|
('final', models.BooleanField(default=False, help_text='The team is selected for the final tournament.', verbose_name='selected for final')),
|
||||||
],
|
],
|
||||||
options={
|
options={
|
||||||
'verbose_name': 'participation',
|
'verbose_name': 'participation',
|
||||||
'verbose_name_plural': 'participations',
|
'verbose_name_plural': 'participations',
|
||||||
},
|
},
|
||||||
),
|
),
|
||||||
|
migrations.CreateModel(
|
||||||
|
name='Passage',
|
||||||
|
fields=[
|
||||||
|
('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')),
|
||||||
|
],
|
||||||
|
options={
|
||||||
|
'verbose_name': 'passage',
|
||||||
|
'verbose_name_plural': 'passages',
|
||||||
|
},
|
||||||
|
),
|
||||||
migrations.CreateModel(
|
migrations.CreateModel(
|
||||||
name='Pool',
|
name='Pool',
|
||||||
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')),
|
||||||
('round', models.PositiveSmallIntegerField(verbose_name='round')),
|
('round', models.PositiveSmallIntegerField(choices=[(1, 'Round 1'), (2, 'Round 2')], verbose_name='round')),
|
||||||
|
('bbb_code', models.CharField(blank=True, default='', help_text='The code of the form xxx-xxx-xxx at the end of the BBB link.', max_length=11, validators=[django.core.validators.RegexValidator('[a-z]{3}-[a-z]{3}-[a-z]{3}')], verbose_name='BigBlueButton code')),
|
||||||
],
|
],
|
||||||
options={
|
options={
|
||||||
'verbose_name': 'pool',
|
'verbose_name': 'pool',
|
||||||
@ -41,9 +71,9 @@ class Migration(migrations.Migration):
|
|||||||
name='Solution',
|
name='Solution',
|
||||||
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')),
|
||||||
('problem', models.PositiveSmallIntegerField(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='solutions/', verbose_name='file')),
|
('file', models.FileField(blank=True, default='', unique=True, upload_to=participation.models.get_solution_filename, verbose_name='file')),
|
||||||
],
|
],
|
||||||
options={
|
options={
|
||||||
'verbose_name': 'solution',
|
'verbose_name': 'solution',
|
||||||
@ -55,7 +85,7 @@ 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='syntheses/', verbose_name='file')),
|
('file', models.FileField(blank=True, default='', unique=True, upload_to=participation.models.get_synthesis_filename, verbose_name='file')),
|
||||||
],
|
],
|
||||||
options={
|
options={
|
||||||
'verbose_name': 'synthesis',
|
'verbose_name': 'synthesis',
|
||||||
@ -80,11 +110,15 @@ 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')),
|
||||||
('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=date.today, verbose_name='start')),
|
('date_start', models.DateField(default=datetime.date.today, verbose_name='start')),
|
||||||
('date_end', models.DateField(default=date.today, verbose_name='end')),
|
('date_end', models.DateField(default=datetime.date.today, verbose_name='end')),
|
||||||
|
('max_teams', models.PositiveSmallIntegerField(default=9, verbose_name='max team count')),
|
||||||
|
('price', models.PositiveSmallIntegerField(default=21, verbose_name='price')),
|
||||||
('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')),
|
||||||
('syntheses_first_phase_limit', models.DateTimeField(default=django.utils.timezone.now, verbose_name='limit date to upload the syntheses for the first phase')),
|
('syntheses_first_phase_limit', models.DateTimeField(default=django.utils.timezone.now, verbose_name='limit date to upload the syntheses for the first phase')),
|
||||||
|
('solutions_available_second_phase', models.DateTimeField(default=django.utils.timezone.now, verbose_name='date when the solutions for the second round become available')),
|
||||||
('syntheses_second_phase_limit', models.DateTimeField(default=django.utils.timezone.now, verbose_name='limit date to upload the syntheses for the second phase')),
|
('syntheses_second_phase_limit', models.DateTimeField(default=django.utils.timezone.now, verbose_name='limit date to upload the syntheses for the second phase')),
|
||||||
('description', models.TextField(blank=True, verbose_name='description')),
|
('description', models.TextField(blank=True, verbose_name='description')),
|
||||||
('final', models.BooleanField(default=False, verbose_name='final')),
|
('final', models.BooleanField(default=False, verbose_name='final')),
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
# Generated by Django 3.0.11 on 2020-12-30 12:02
|
# Generated by Django 3.0.11 on 2021-01-21 21:06
|
||||||
|
|
||||||
import address.models
|
import address.models
|
||||||
from django.db import migrations, models
|
from django.db import migrations, models
|
||||||
@ -10,8 +10,8 @@ class Migration(migrations.Migration):
|
|||||||
initial = True
|
initial = True
|
||||||
|
|
||||||
dependencies = [
|
dependencies = [
|
||||||
('registration', '0001_initial'),
|
|
||||||
('address', '0003_auto_20200830_1851'),
|
('address', '0003_auto_20200830_1851'),
|
||||||
|
('registration', '0001_initial'),
|
||||||
('participation', '0001_initial'),
|
('participation', '0001_initial'),
|
||||||
]
|
]
|
||||||
|
|
||||||
@ -37,8 +37,8 @@ class Migration(migrations.Migration):
|
|||||||
),
|
),
|
||||||
migrations.AddField(
|
migrations.AddField(
|
||||||
model_name='synthesis',
|
model_name='synthesis',
|
||||||
name='pool',
|
name='passage',
|
||||||
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='syntheses', to='participation.Pool', verbose_name='pool'),
|
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='syntheses', to='participation.Passage', verbose_name='passage'),
|
||||||
),
|
),
|
||||||
migrations.AddField(
|
migrations.AddField(
|
||||||
model_name='solution',
|
model_name='solution',
|
||||||
@ -60,6 +60,26 @@ class Migration(migrations.Migration):
|
|||||||
name='tournament',
|
name='tournament',
|
||||||
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='pools', to='participation.Tournament', verbose_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(
|
migrations.AddField(
|
||||||
model_name='participation',
|
model_name='participation',
|
||||||
name='team',
|
name='team',
|
||||||
@ -70,13 +90,23 @@ class Migration(migrations.Migration):
|
|||||||
name='tournament',
|
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'),
|
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(
|
migrations.AddIndex(
|
||||||
model_name='tournament',
|
model_name='tournament',
|
||||||
index=models.Index(fields=['name', 'date_start', 'date_end'], name='participati_name_b43174_idx'),
|
index=models.Index(fields=['name', 'date_start', 'date_end'], name='participati_name_b43174_idx'),
|
||||||
),
|
),
|
||||||
migrations.AlterUniqueTogether(
|
migrations.AlterUniqueTogether(
|
||||||
name='synthesis',
|
name='synthesis',
|
||||||
unique_together={('participation', 'pool', 'type')},
|
unique_together={('participation', 'passage', 'type')},
|
||||||
),
|
),
|
||||||
migrations.AlterUniqueTogether(
|
migrations.AlterUniqueTogether(
|
||||||
name='solution',
|
name='solution',
|
@ -1,18 +0,0 @@
|
|||||||
# Generated by Django 3.0.11 on 2020-12-31 11:25
|
|
||||||
|
|
||||||
from django.db import migrations, models
|
|
||||||
|
|
||||||
|
|
||||||
class Migration(migrations.Migration):
|
|
||||||
|
|
||||||
dependencies = [
|
|
||||||
('participation', '0002_auto_20201230_1302'),
|
|
||||||
]
|
|
||||||
|
|
||||||
operations = [
|
|
||||||
migrations.AddField(
|
|
||||||
model_name='tournament',
|
|
||||||
name='max_teams',
|
|
||||||
field=models.PositiveSmallIntegerField(default=9, verbose_name='max team count'),
|
|
||||||
),
|
|
||||||
]
|
|
@ -1,18 +0,0 @@
|
|||||||
# Generated by Django 3.0.11 on 2021-01-01 10:39
|
|
||||||
|
|
||||||
from django.db import migrations, models
|
|
||||||
|
|
||||||
|
|
||||||
class Migration(migrations.Migration):
|
|
||||||
|
|
||||||
dependencies = [
|
|
||||||
('participation', '0003_tournament_max_teams'),
|
|
||||||
]
|
|
||||||
|
|
||||||
operations = [
|
|
||||||
migrations.AddField(
|
|
||||||
model_name='tournament',
|
|
||||||
name='price',
|
|
||||||
field=models.PositiveSmallIntegerField(default=21, verbose_name='price'),
|
|
||||||
),
|
|
||||||
]
|
|
@ -1,24 +0,0 @@
|
|||||||
# Generated by Django 3.0.11 on 2021-01-01 10:49
|
|
||||||
|
|
||||||
from django.db import migrations, models
|
|
||||||
import django.utils.timezone
|
|
||||||
|
|
||||||
|
|
||||||
class Migration(migrations.Migration):
|
|
||||||
|
|
||||||
dependencies = [
|
|
||||||
('participation', '0004_tournament_price'),
|
|
||||||
]
|
|
||||||
|
|
||||||
operations = [
|
|
||||||
migrations.AddField(
|
|
||||||
model_name='tournament',
|
|
||||||
name='solutions_available_second_phase',
|
|
||||||
field=models.DateTimeField(default=django.utils.timezone.now, verbose_name='date when the solutions for the second round become available'),
|
|
||||||
),
|
|
||||||
migrations.AddField(
|
|
||||||
model_name='tournament',
|
|
||||||
name='solutions_draw',
|
|
||||||
field=models.DateTimeField(default=django.utils.timezone.now, verbose_name='random draw for solutions'),
|
|
||||||
),
|
|
||||||
]
|
|
@ -1,18 +0,0 @@
|
|||||||
# Generated by Django 3.0.11 on 2021-01-12 16:07
|
|
||||||
|
|
||||||
from django.db import migrations, models
|
|
||||||
|
|
||||||
|
|
||||||
class Migration(migrations.Migration):
|
|
||||||
|
|
||||||
dependencies = [
|
|
||||||
('participation', '0005_auto_20210101_1149'),
|
|
||||||
]
|
|
||||||
|
|
||||||
operations = [
|
|
||||||
migrations.AddField(
|
|
||||||
model_name='participation',
|
|
||||||
name='final',
|
|
||||||
field=models.BooleanField(default=False, help_text='The team is selected for the final tournament.', verbose_name='selected for final'),
|
|
||||||
),
|
|
||||||
]
|
|
@ -1,29 +0,0 @@
|
|||||||
# Generated by Django 3.0.11 on 2021-01-12 17:01
|
|
||||||
|
|
||||||
from django.db import migrations, models
|
|
||||||
import participation.models
|
|
||||||
|
|
||||||
|
|
||||||
class Migration(migrations.Migration):
|
|
||||||
|
|
||||||
dependencies = [
|
|
||||||
('participation', '0006_participation_final'),
|
|
||||||
]
|
|
||||||
|
|
||||||
operations = [
|
|
||||||
migrations.AlterField(
|
|
||||||
model_name='solution',
|
|
||||||
name='file',
|
|
||||||
field=models.FileField(blank=True, default='', unique=True, upload_to=participation.models.get_solution_filename, verbose_name='file'),
|
|
||||||
),
|
|
||||||
migrations.AlterField(
|
|
||||||
model_name='solution',
|
|
||||||
name='problem',
|
|
||||||
field=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'),
|
|
||||||
),
|
|
||||||
migrations.AlterField(
|
|
||||||
model_name='synthesis',
|
|
||||||
name='file',
|
|
||||||
field=models.FileField(blank=True, default='', unique=True, upload_to=participation.models.get_synthesis_filename, verbose_name='file'),
|
|
||||||
),
|
|
||||||
]
|
|
@ -1,18 +0,0 @@
|
|||||||
# Generated by Django 3.0.11 on 2021-01-13 16:00
|
|
||||||
|
|
||||||
from django.db import migrations, models
|
|
||||||
|
|
||||||
|
|
||||||
class Migration(migrations.Migration):
|
|
||||||
|
|
||||||
dependencies = [
|
|
||||||
('participation', '0007_auto_20210112_1801'),
|
|
||||||
]
|
|
||||||
|
|
||||||
operations = [
|
|
||||||
migrations.AlterField(
|
|
||||||
model_name='pool',
|
|
||||||
name='round',
|
|
||||||
field=models.PositiveSmallIntegerField(choices=[(1, 'Round 1'), (2, 'Round 2')], verbose_name='round'),
|
|
||||||
),
|
|
||||||
]
|
|
@ -1,43 +0,0 @@
|
|||||||
# Generated by Django 3.0.11 on 2021-01-14 12:13
|
|
||||||
|
|
||||||
from django.db import migrations, models
|
|
||||||
import django.db.models.deletion
|
|
||||||
|
|
||||||
|
|
||||||
class Migration(migrations.Migration):
|
|
||||||
|
|
||||||
dependencies = [
|
|
||||||
('participation', '0008_auto_20210113_1700'),
|
|
||||||
]
|
|
||||||
|
|
||||||
operations = [
|
|
||||||
migrations.CreateModel(
|
|
||||||
name='Passage',
|
|
||||||
fields=[
|
|
||||||
('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')),
|
|
||||||
('defender', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, related_name='+', to='participation.Participation', verbose_name='defender')),
|
|
||||||
('opponent', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, related_name='+', to='participation.Participation', verbose_name='opponent')),
|
|
||||||
('pool', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='passages', to='participation.Pool', verbose_name='pool')),
|
|
||||||
('reporter', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, related_name='+', to='participation.Participation', verbose_name='reporter')),
|
|
||||||
],
|
|
||||||
options={
|
|
||||||
'verbose_name': 'passage',
|
|
||||||
'verbose_name_plural': 'passages',
|
|
||||||
},
|
|
||||||
),
|
|
||||||
migrations.AddField(
|
|
||||||
model_name='synthesis',
|
|
||||||
name='passage',
|
|
||||||
field=models.ForeignKey(default=None, on_delete=django.db.models.deletion.CASCADE, related_name='syntheses', to='participation.Passage', verbose_name='passage'),
|
|
||||||
preserve_default=False,
|
|
||||||
),
|
|
||||||
migrations.AlterUniqueTogether(
|
|
||||||
name='synthesis',
|
|
||||||
unique_together={('participation', 'passage', 'type')},
|
|
||||||
),
|
|
||||||
migrations.RemoveField(
|
|
||||||
model_name='synthesis',
|
|
||||||
name='pool',
|
|
||||||
),
|
|
||||||
]
|
|
@ -1,19 +0,0 @@
|
|||||||
# Generated by Django 3.0.11 on 2021-01-14 13:53
|
|
||||||
|
|
||||||
from django.db import migrations, models
|
|
||||||
|
|
||||||
|
|
||||||
class Migration(migrations.Migration):
|
|
||||||
|
|
||||||
dependencies = [
|
|
||||||
('participation', '0009_auto_20210114_1313'),
|
|
||||||
]
|
|
||||||
|
|
||||||
operations = [
|
|
||||||
migrations.AddField(
|
|
||||||
model_name='passage',
|
|
||||||
name='solution_number',
|
|
||||||
field=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')], default=None, verbose_name='defended solution'),
|
|
||||||
preserve_default=False,
|
|
||||||
),
|
|
||||||
]
|
|
@ -1,33 +0,0 @@
|
|||||||
# Generated by Django 3.0.11 on 2021-01-14 16:59
|
|
||||||
|
|
||||||
from django.db import migrations, models
|
|
||||||
import django.db.models.deletion
|
|
||||||
|
|
||||||
|
|
||||||
class Migration(migrations.Migration):
|
|
||||||
|
|
||||||
dependencies = [
|
|
||||||
('registration', '0001_initial'),
|
|
||||||
('participation', '0010_passage_solution_number'),
|
|
||||||
]
|
|
||||||
|
|
||||||
operations = [
|
|
||||||
migrations.CreateModel(
|
|
||||||
name='Note',
|
|
||||||
fields=[
|
|
||||||
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
|
||||||
('defender_writing', models.PositiveSmallIntegerField(choices=[(0, 0), (1, 1), (2, 2), (3, 3), (4, 4), (5, 5), (6, 6), (7, 7), (8, 8), (9, 9), (10, 10), (11, 11), (12, 12), (13, 13), (14, 14), (15, 15), (16, 16), (17, 17), (18, 18), (19, 19), (20, 20)], default=0, verbose_name='defender writing note')),
|
|
||||||
('defender_oral', models.PositiveSmallIntegerField(choices=[(0, 0), (1, 1), (2, 2), (3, 3), (4, 4), (5, 5), (6, 6), (7, 7), (8, 8), (9, 9), (10, 10), (11, 11), (12, 12), (13, 13), (14, 14), (15, 15), (16, 16)], default=0, verbose_name='defender oral note')),
|
|
||||||
('opponent_writing', models.PositiveSmallIntegerField(choices=[(0, 0), (1, 1), (2, 2), (3, 3), (4, 4), (5, 5), (6, 6), (7, 7), (8, 8), (9, 9)], default=0, verbose_name='opponent writing note')),
|
|
||||||
('opponent_oral', models.PositiveSmallIntegerField(choices=[(0, 0), (1, 1), (2, 2), (3, 3), (4, 4), (5, 5), (6, 6), (7, 7), (8, 8), (9, 9), (10, 10)], default=0, verbose_name='opponent oral note')),
|
|
||||||
('reporter_writing', models.PositiveSmallIntegerField(choices=[(0, 0), (1, 1), (2, 2), (3, 3), (4, 4), (5, 5), (6, 6), (7, 7), (8, 8), (9, 9)], default=0, verbose_name='reporter writing note')),
|
|
||||||
('reporter_oral', models.PositiveSmallIntegerField(choices=[(0, 0), (1, 1), (2, 2), (3, 3), (4, 4), (5, 5), (6, 6), (7, 7), (8, 8), (9, 9), (10, 10)], default=0, verbose_name='reporter oral note')),
|
|
||||||
('jury', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='notes', to='registration.VolunteerRegistration', verbose_name='jury')),
|
|
||||||
('passage', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='notes', to='participation.Passage', verbose_name='passage')),
|
|
||||||
],
|
|
||||||
options={
|
|
||||||
'verbose_name': 'note',
|
|
||||||
'verbose_name_plural': 'notes',
|
|
||||||
},
|
|
||||||
),
|
|
||||||
]
|
|
@ -1,19 +0,0 @@
|
|||||||
# Generated by Django 3.0.11 on 2021-01-21 16:47
|
|
||||||
|
|
||||||
import django.core.validators
|
|
||||||
from django.db import migrations, models
|
|
||||||
|
|
||||||
|
|
||||||
class Migration(migrations.Migration):
|
|
||||||
|
|
||||||
dependencies = [
|
|
||||||
('participation', '0011_note'),
|
|
||||||
]
|
|
||||||
|
|
||||||
operations = [
|
|
||||||
migrations.AddField(
|
|
||||||
model_name='pool',
|
|
||||||
name='bbb_code',
|
|
||||||
field=models.CharField(blank=True, default='', help_text='The code of the form xxx-xxx-xxx at the end of the BBB link.', max_length=11, validators=[django.core.validators.RegexValidator('[a-z]{3}-[a-z]{3}-[a-z]{3}')], verbose_name='BigBlueButton code'),
|
|
||||||
),
|
|
||||||
]
|
|
@ -62,11 +62,13 @@
|
|||||||
|
|
||||||
<dt class="col-sm-6 text-right">{% trans "Health sheets:" %}</dt>
|
<dt class="col-sm-6 text-right">{% trans "Health sheets:" %}</dt>
|
||||||
<dd class="col-sm-6">
|
<dd class="col-sm-6">
|
||||||
{% for participant in team.participants.all %}
|
{% for student in team.students.all %}
|
||||||
{% if participant.health_sheet %}
|
{% if student.under_18 %}
|
||||||
<a href="{{ participant.health_sheet.url }}" data-turbolinks="false">{{ participant }}</a>{% if not forloop.last %},{% endif %}
|
{% if student.health_sheet %}
|
||||||
{% else %}
|
<a href="{{ student.health_sheet.url }}" data-turbolinks="false">{{ student }}</a>{% if not forloop.last %},{% endif %}
|
||||||
{{ participant }} ({% trans "Not uploaded yet" %}){% if not forloop.last %},{% endif %}
|
{% else %}
|
||||||
|
{{ student }} ({% trans "Not uploaded yet" %}){% if not forloop.last %},{% endif %}
|
||||||
|
{% endif %}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</dd>
|
</dd>
|
||||||
|
@ -177,7 +177,7 @@ class TeamDetailView(LoginRequiredMixin, FormMixin, ProcessFormView, DetailView)
|
|||||||
context["can_validate"] = team.students.count() >= 4 and team.coaches.exists() and \
|
context["can_validate"] = team.students.count() >= 4 and team.coaches.exists() and \
|
||||||
all(r.email_confirmed for r in team.students.all()) and \
|
all(r.email_confirmed for r in team.students.all()) and \
|
||||||
all(r.photo_authorization for r in team.participants.all()) and \
|
all(r.photo_authorization for r in team.participants.all()) and \
|
||||||
all(r.health_sheet for r in team.participants.all()) and \
|
all(r.health_sheet for r in team.students.all() if r.under_18) and \
|
||||||
all(r.parental_authorization for r in team.students.all() if r.under_18)
|
all(r.parental_authorization for r in team.students.all() if r.under_18)
|
||||||
|
|
||||||
return context
|
return context
|
||||||
|
@ -2,9 +2,10 @@
|
|||||||
# SPDX-License-Identifier: GPL-3.0-or-later
|
# SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
|
||||||
from django.contrib import admin
|
from django.contrib import admin
|
||||||
|
from django.contrib.admin import ModelAdmin
|
||||||
from polymorphic.admin import PolymorphicChildModelAdmin, PolymorphicParentModelAdmin
|
from polymorphic.admin import PolymorphicChildModelAdmin, PolymorphicParentModelAdmin
|
||||||
|
|
||||||
from .models import AdminRegistration, CoachRegistration, Registration, StudentRegistration
|
from .models import AdminRegistration, CoachRegistration, Payment, Registration, StudentRegistration
|
||||||
|
|
||||||
|
|
||||||
@admin.register(Registration)
|
@admin.register(Registration)
|
||||||
@ -27,3 +28,10 @@ class CoachRegistrationAdmin(PolymorphicChildModelAdmin):
|
|||||||
@admin.register(AdminRegistration)
|
@admin.register(AdminRegistration)
|
||||||
class AdminRegistrationAdmin(PolymorphicChildModelAdmin):
|
class AdminRegistrationAdmin(PolymorphicChildModelAdmin):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
@admin.register(Payment)
|
||||||
|
class PaymentAdmin(ModelAdmin):
|
||||||
|
list_display = ('registration', 'type', 'valid', )
|
||||||
|
search_fields = ('registration__user__last_name', 'registration__user__first_name', 'registration__user__email',)
|
||||||
|
list_filter = ('type', 'valid',)
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
# Generated by Django 3.0.11 on 2020-12-30 12:02
|
# Generated by Django 3.0.11 on 2021-01-21 21:06
|
||||||
|
|
||||||
import address.models
|
import address.models
|
||||||
import datetime
|
import datetime
|
||||||
@ -14,10 +14,10 @@ class Migration(migrations.Migration):
|
|||||||
initial = True
|
initial = True
|
||||||
|
|
||||||
dependencies = [
|
dependencies = [
|
||||||
('contenttypes', '0002_remove_content_type_name'),
|
|
||||||
('address', '0003_auto_20200830_1851'),
|
('address', '0003_auto_20200830_1851'),
|
||||||
('participation', '0001_initial'),
|
|
||||||
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
|
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
|
||||||
|
('contenttypes', '0002_remove_content_type_name'),
|
||||||
|
('participation', '0001_initial'),
|
||||||
]
|
]
|
||||||
|
|
||||||
operations = [
|
operations = [
|
||||||
@ -42,7 +42,6 @@ class Migration(migrations.Migration):
|
|||||||
('birth_date', models.DateField(default=datetime.date.today, verbose_name='birth date')),
|
('birth_date', models.DateField(default=datetime.date.today, verbose_name='birth date')),
|
||||||
('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')),
|
||||||
('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')),
|
||||||
('health_sheet', models.FileField(blank=True, default='', upload_to=registration.models.get_random_health_filename, verbose_name='health sheet')),
|
|
||||||
('address', address.models.AddressField(default=None, null=True, on_delete=django.db.models.deletion.SET_NULL, to='address.Address', verbose_name='address')),
|
('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')),
|
||||||
],
|
],
|
||||||
@ -98,6 +97,7 @@ class Migration(migrations.Migration):
|
|||||||
('responsible_phone', phonenumber_field.modelfields.PhoneNumberField(blank=True, max_length=128, region=None, verbose_name='responsible phone number')),
|
('responsible_phone', phonenumber_field.modelfields.PhoneNumberField(blank=True, max_length=128, region=None, verbose_name='responsible phone number')),
|
||||||
('responsible_email', models.EmailField(default='', max_length=254, verbose_name='responsible email address')),
|
('responsible_email', models.EmailField(default='', max_length=254, verbose_name='responsible email address')),
|
||||||
('parental_authorization', models.FileField(blank=True, default='', upload_to=registration.models.get_random_parental_filename, verbose_name='parental authorization')),
|
('parental_authorization', models.FileField(blank=True, default='', upload_to=registration.models.get_random_parental_filename, verbose_name='parental authorization')),
|
||||||
|
('health_sheet', models.FileField(blank=True, default='', upload_to=registration.models.get_random_health_filename, verbose_name='health sheet')),
|
||||||
],
|
],
|
||||||
options={
|
options={
|
||||||
'verbose_name': 'student registration',
|
'verbose_name': 'student registration',
|
||||||
@ -105,4 +105,19 @@ class Migration(migrations.Migration):
|
|||||||
},
|
},
|
||||||
bases=('registration.participantregistration',),
|
bases=('registration.participantregistration',),
|
||||||
),
|
),
|
||||||
|
migrations.CreateModel(
|
||||||
|
name='Payment',
|
||||||
|
fields=[
|
||||||
|
('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')),
|
||||||
|
('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')),
|
||||||
|
('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')),
|
||||||
|
],
|
||||||
|
options={
|
||||||
|
'verbose_name': 'payment',
|
||||||
|
'verbose_name_plural': 'payments',
|
||||||
|
},
|
||||||
|
),
|
||||||
]
|
]
|
||||||
|
@ -1,26 +0,0 @@
|
|||||||
# Generated by Django 3.0.11 on 2021-01-18 15:35
|
|
||||||
|
|
||||||
from django.db import migrations, models
|
|
||||||
import django.db.models.deletion
|
|
||||||
import registration.models
|
|
||||||
|
|
||||||
|
|
||||||
class Migration(migrations.Migration):
|
|
||||||
|
|
||||||
dependencies = [
|
|
||||||
('registration', '0001_initial'),
|
|
||||||
]
|
|
||||||
|
|
||||||
operations = [
|
|
||||||
migrations.CreateModel(
|
|
||||||
name='Payment',
|
|
||||||
fields=[
|
|
||||||
('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')),
|
|
||||||
('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')),
|
|
||||||
('valid', models.BooleanField(default=False, null=True, verbose_name='valid')),
|
|
||||||
('registration', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, related_name='registration', to='registration.ParticipantRegistration', verbose_name='registration')),
|
|
||||||
],
|
|
||||||
),
|
|
||||||
]
|
|
@ -1,23 +0,0 @@
|
|||||||
# Generated by Django 3.0.11 on 2021-01-18 16:38
|
|
||||||
|
|
||||||
from django.db import migrations, models
|
|
||||||
import django.db.models.deletion
|
|
||||||
|
|
||||||
|
|
||||||
class Migration(migrations.Migration):
|
|
||||||
|
|
||||||
dependencies = [
|
|
||||||
('registration', '0002_payment'),
|
|
||||||
]
|
|
||||||
|
|
||||||
operations = [
|
|
||||||
migrations.AlterModelOptions(
|
|
||||||
name='payment',
|
|
||||||
options={'verbose_name': 'payment', 'verbose_name_plural': 'payments'},
|
|
||||||
),
|
|
||||||
migrations.AlterField(
|
|
||||||
model_name='payment',
|
|
||||||
name='registration',
|
|
||||||
field=models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, related_name='payment', to='registration.ParticipantRegistration', verbose_name='registration'),
|
|
||||||
),
|
|
||||||
]
|
|
@ -146,13 +146,6 @@ class ParticipantRegistration(Registration):
|
|||||||
default="",
|
default="",
|
||||||
)
|
)
|
||||||
|
|
||||||
health_sheet = models.FileField(
|
|
||||||
verbose_name=_("health sheet"),
|
|
||||||
upload_to=get_random_health_filename,
|
|
||||||
blank=True,
|
|
||||||
default="",
|
|
||||||
)
|
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def under_18(self):
|
def under_18(self):
|
||||||
return (timezone.now().date() - self.birth_date).days < 18 * 365.24
|
return (timezone.now().date() - self.birth_date).days < 18 * 365.24
|
||||||
@ -208,6 +201,13 @@ class StudentRegistration(ParticipantRegistration):
|
|||||||
default="",
|
default="",
|
||||||
)
|
)
|
||||||
|
|
||||||
|
health_sheet = models.FileField(
|
||||||
|
verbose_name=_("health sheet"),
|
||||||
|
upload_to=get_random_health_filename,
|
||||||
|
blank=True,
|
||||||
|
default="",
|
||||||
|
)
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def type(self):
|
def type(self):
|
||||||
return _("student")
|
return _("student")
|
||||||
|
@ -0,0 +1,127 @@
|
|||||||
|
\documentclass[a4paper,french,11pt]{article}
|
||||||
|
|
||||||
|
\usepackage[T1]{fontenc}
|
||||||
|
\usepackage[utf8]{inputenc}
|
||||||
|
\usepackage{lmodern}
|
||||||
|
\usepackage[french]{babel}
|
||||||
|
|
||||||
|
\usepackage{fancyhdr}
|
||||||
|
\usepackage{graphicx}
|
||||||
|
\usepackage{amsmath}
|
||||||
|
\usepackage{amssymb}
|
||||||
|
%\usepackage{anyfontsize}
|
||||||
|
\usepackage{fancybox}
|
||||||
|
\usepackage{eso-pic,graphicx}
|
||||||
|
\usepackage{xcolor}
|
||||||
|
|
||||||
|
|
||||||
|
% Specials
|
||||||
|
\newcommand{\writingsep}{\vrule height 4ex width 0pt}
|
||||||
|
|
||||||
|
% Page formating
|
||||||
|
\hoffset -1in
|
||||||
|
\voffset -1in
|
||||||
|
\textwidth 180 mm
|
||||||
|
\textheight 250 mm
|
||||||
|
\oddsidemargin 15mm
|
||||||
|
\evensidemargin 15mm
|
||||||
|
\pagestyle{fancy}
|
||||||
|
|
||||||
|
% Headers and footers
|
||||||
|
\fancyfoot{}
|
||||||
|
\lhead{}
|
||||||
|
\rhead{}
|
||||||
|
\renewcommand{\headrulewidth}{0pt}
|
||||||
|
\lfoot{\footnotesize 11 rue Pierre et Marie Curie, 75231 Paris Cedex 05\\ Numéro siret 431 598 366 00018}
|
||||||
|
\rfoot{\footnotesize Association agréée par\\le Ministère de l'éducation nationale.}
|
||||||
|
|
||||||
|
\begin{document}
|
||||||
|
|
||||||
|
\includegraphics[height=2cm]{/code/static/logo_animath.png}\hfill{\fontsize{55pt}{55pt}{$\mathbb{TFJM}^2$}}
|
||||||
|
|
||||||
|
\vfill
|
||||||
|
|
||||||
|
\begin{center}
|
||||||
|
|
||||||
|
|
||||||
|
\LARGE
|
||||||
|
Autorisation d'enregistrement et de diffusion de l'image ({{ tournament.name }})
|
||||||
|
\end{center}
|
||||||
|
\normalsize
|
||||||
|
|
||||||
|
|
||||||
|
\thispagestyle{empty}
|
||||||
|
|
||||||
|
\bigskip
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Je soussign\'e {{ registration|safe|default:"\dotfill" }}\\
|
||||||
|
demeurant au {{ registration.address|safe|default:"\dotfill" }}
|
||||||
|
|
||||||
|
\medskip
|
||||||
|
Cochez la/les cases correspondantes.\\
|
||||||
|
\medskip
|
||||||
|
|
||||||
|
\fbox{\textcolor{white}{A}} Autorise l'association Animath, \`a l'occasion du $\mathbb{TFJM}^2$ de {{ tournament.name }}
|
||||||
|
du {{ tournament.date_start }} au {{ tournament.date_end }} à : {{ tournament.place }}, \`a me photographier ou \`a me
|
||||||
|
filmer et \`a diffuser les photos et/ou les vid\'eos r\'ealis\'ees \`a cette occasion sur son site et sur les sites
|
||||||
|
partenaires. D\'eclare c\'eder \`a titre gracieux \`a Animath le droit d’utiliser mon image sur tous ses supports
|
||||||
|
d'information : brochures, sites web, r\'eseaux sociaux. Animath devient, par la pr\'esente, cessionnaire des droits
|
||||||
|
pendant toute la dur\'ee pour laquelle ont \'et\'e acquis les droits d'auteur de ces photographies.\\
|
||||||
|
|
||||||
|
\medskip
|
||||||
|
Animath s'engage, conform\'ement aux dispositions l\'egales en vigueur relatives au droit \`a l'image, \`a ce que la
|
||||||
|
publication et la diffusion de l'image ainsi que des commentaires l'accompagnant ne portent pas atteinte \`a la vie
|
||||||
|
priv\'ee, \`a la dignit\'e et \`a la r\'eputation de la personne photographiée.\\
|
||||||
|
|
||||||
|
\medskip
|
||||||
|
\fbox{\textcolor{white}{A}} Autorise la diffusion dans les medias (Presse, T\'el\'evision, Internet) de photographies
|
||||||
|
prises \`a l'occasion d’une \'eventuelle m\'ediatisation de cet événement.\\
|
||||||
|
|
||||||
|
\medskip
|
||||||
|
|
||||||
|
Conform\'ement \`a la loi informatique et libert\'es du 6 janvier 1978, vous disposez d'un droit de libre acc\`es,
|
||||||
|
de rectification, de modification et de suppression des donn\'ees qui vous concernent.
|
||||||
|
Cette autorisation est donc r\'evocable \`a tout moment sur volont\'e express\'ement manifest\'ee par lettre
|
||||||
|
recommand\'ee avec accus\'e de r\'eception adress\'ee \`a
|
||||||
|
Animath, IHP, 11 rue Pierre et Marie Curie, 75231 Paris cedex 05.\\
|
||||||
|
|
||||||
|
\medskip
|
||||||
|
\fbox{\textcolor{white}{A}} Autorise Animath à conserver mes données personnelles, dans le cadre défini par
|
||||||
|
la loi n 78-17 du 6 janvier 1978 relative à l'informatique, aux fichiers et aux libertés et les textes la modifiant,
|
||||||
|
pendant une durée de quatre ans à compter de ma dernière participation à un événement organisé par Animath.\\
|
||||||
|
|
||||||
|
\medskip
|
||||||
|
\fbox{\textcolor{white}{A}} J'accepte d'être tenu informé d'autres activités organisées par l'association et ses
|
||||||
|
partenaires.
|
||||||
|
|
||||||
|
\bigskip
|
||||||
|
|
||||||
|
Signature pr\'ec\'ed\'ee de la mention \og lu et approuv\'e \fg{}
|
||||||
|
|
||||||
|
\medskip
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
\begin{minipage}[c]{0.5\textwidth}
|
||||||
|
|
||||||
|
\underline{Le participant :}\\
|
||||||
|
|
||||||
|
Fait \`a :\\
|
||||||
|
le
|
||||||
|
\end{minipage}
|
||||||
|
|
||||||
|
|
||||||
|
\vfill
|
||||||
|
\vfill
|
||||||
|
\begin{minipage}[c]{0.5\textwidth}
|
||||||
|
\footnotesize 11 rue Pierre et Marie Curie, 75231 Paris Cedex 05\\ Numéro siret 431 598 366 00018
|
||||||
|
\end{minipage}
|
||||||
|
\begin{minipage}[c]{0.5\textwidth}
|
||||||
|
\footnotesize
|
||||||
|
\begin{flushright}
|
||||||
|
Association agréée par\\le Ministère de l'éducation nationale.
|
||||||
|
\end{flushright}
|
||||||
|
\end{minipage}
|
||||||
|
\end{document}
|
@ -3,7 +3,7 @@
|
|||||||
\usepackage[T1]{fontenc}
|
\usepackage[T1]{fontenc}
|
||||||
\usepackage[utf8]{inputenc}
|
\usepackage[utf8]{inputenc}
|
||||||
\usepackage{lmodern}
|
\usepackage{lmodern}
|
||||||
\usepackage[frenchb]{babel}
|
\usepackage[french]{babel}
|
||||||
|
|
||||||
\usepackage{fancyhdr}
|
\usepackage{fancyhdr}
|
||||||
\usepackage{graphicx}
|
\usepackage{graphicx}
|
||||||
@ -37,7 +37,7 @@
|
|||||||
|
|
||||||
\begin{document}
|
\begin{document}
|
||||||
|
|
||||||
\includegraphics[height=2cm]{assets/logo_animath.png}\hfill{\fontsize{55pt}{55pt}{$\mathbb{TFJM}^2$}}
|
\includegraphics[height=2cm]{/code/static/logo_animath.png}\hfill{\fontsize{55pt}{55pt}{$\mathbb{TFJM}^2$}}
|
||||||
|
|
||||||
\vfill
|
\vfill
|
||||||
|
|
||||||
@ -46,7 +46,7 @@
|
|||||||
|
|
||||||
\LARGE
|
\LARGE
|
||||||
Autorisation d'enregistrement et de diffusion de l'image
|
Autorisation d'enregistrement et de diffusion de l'image
|
||||||
({TOURNAMENT_NAME})
|
({{ tournament.name }})
|
||||||
\end{center}
|
\end{center}
|
||||||
\normalsize
|
\normalsize
|
||||||
|
|
||||||
@ -58,31 +58,45 @@ Autorisation d'enregistrement et de diffusion de l'image
|
|||||||
|
|
||||||
|
|
||||||
Je soussign\'e \dotfill (p\`ere, m\`ere, responsable l\'egal) \\
|
Je soussign\'e \dotfill (p\`ere, m\`ere, responsable l\'egal) \\
|
||||||
agissant en qualit\'e de repr\'esentant de {PARTICIPANT_NAME}\\
|
agissant en qualit\'e de repr\'esentant de {{ registration|safe|default:"\dotfill" }}\\
|
||||||
demeurant au {ADDRESS}
|
demeurant au {{ registration.address|safe|default:"\dotfill" }}
|
||||||
|
|
||||||
\medskip
|
\medskip
|
||||||
Cochez la/les cases correspondantes.\\
|
Cochez la/les cases correspondantes.\\
|
||||||
\medskip
|
\medskip
|
||||||
|
|
||||||
\fbox{\textcolor{white}{A}} Autorise l'association Animath, \`a l'occasion du $\mathbb{TFJM}^2$ du {START_DATE} au {END_DATE} {YEAR} à : {PLACE}, \`a photographier ou \`a filmer l'enfant et \`a diffuser les photos et/ou les vid\'eos r\'ealis\'ees \`a cette occasion sur son site et sur les sites partenaires. D\'eclare c\'eder \`a titre gracieux \`a Animath le droit d’utiliser l'image de l'enfant sur tous ses supports d'information : brochures, sites web, r\'eseaux sociaux. Animath devient, par la pr\'esente, cessionnaire des droits pendant toute la dur\'ee pour laquelle ont \'et\'e acquis les droits d'auteur de ces photographies.\\
|
\fbox{\textcolor{white}{A}} Autorise l'association Animath, \`a l'occasion du $\mathbb{TFJM}^2$ de {{ tournament.name }}
|
||||||
|
du {{ tournament.date_start }} au {{ tournament.date_end }} à : {{ tournament.place }}, \`a photographier ou \`a filmer
|
||||||
|
l'enfant et \`a diffuser les photos et/ou les vid\'eos r\'ealis\'ees \`a cette occasion sur son site et sur les sites
|
||||||
|
partenaires. D\'eclare c\'eder \`a titre gracieux \`a Animath le droit d’utiliser l'image de l'enfant sur tous ses
|
||||||
|
supports d'information : brochures, sites web, r\'eseaux sociaux. Animath devient, par la pr\'esente, cessionnaire des
|
||||||
|
droits pendant toute la dur\'ee pour laquelle ont \'et\'e acquis les droits d'auteur de ces photographies.\\
|
||||||
|
|
||||||
\medskip
|
\medskip
|
||||||
Animath s'engage, conform\'ement aux dispositions l\'egales en vigueur relatives au droit \`a l'image, \`a ce que la publication et la diffusion de l'image de l'enfant ainsi que des commentaires l'accompagnant ne portent pas atteinte \`a la vie priv\'ee, \`a la dignit\'e et \`a la r\'eputation de l’enfant.\\
|
Animath s'engage, conform\'ement aux dispositions l\'egales en vigueur relatives au droit \`a l'image, \`a ce que la
|
||||||
|
publication et la diffusion de l'image de l'enfant ainsi que des commentaires l'accompagnant ne portent pas atteinte
|
||||||
|
\`a la vie priv\'ee, \`a la dignit\'e et \`a la r\'eputation de l’enfant.\\
|
||||||
|
|
||||||
\medskip
|
\medskip
|
||||||
\fbox{\textcolor{white}{A}} Autorise la diffusion dans les medias (Presse, T\'el\'evision, Internet) de photographies de mon enfant prises \`a l'occasion d’une \'eventuelle m\'ediatisation de cet événement.\\
|
\fbox{\textcolor{white}{A}} Autorise la diffusion dans les medias (Presse, T\'el\'evision, Internet) de
|
||||||
|
photographies de mon enfant prises \`a l'occasion d’une \'eventuelle m\'ediatisation de cet événement.\\
|
||||||
|
|
||||||
\medskip
|
\medskip
|
||||||
|
|
||||||
Conform\'ement \`a la loi informatique et libert\'es du 6 janvier 1978, vous disposez d'un droit de libre acc\`es, de rectification, de modification et de suppression des donn\'ees qui vous concernent.
|
Conform\'ement \`a la loi informatique et libert\'es du 6 janvier 1978, vous disposez d'un droit de libre acc\`es, de
|
||||||
Cette autorisation est donc r\'evocable \`a tout moment sur volont\'e express\'ement manifest\'ee par lettre recommand\'ee avec accus\'e de r\'eception adress\'ee \`a Animath, IHP, 11 rue Pierre et Marie Curie, 75231 Paris cedex 05.\\
|
rectification, de modification et de suppression des donn\'ees qui vous concernent.
|
||||||
|
Cette autorisation est donc r\'evocable \`a tout moment sur volont\'e express\'ement manifest\'ee par lettre
|
||||||
|
recommand\'ee avec accus\'e de r\'eception adress\'ee \`a
|
||||||
|
Animath, IHP, 11 rue Pierre et Marie Curie, 75231 Paris cedex 05.\\
|
||||||
|
|
||||||
\medskip
|
\medskip
|
||||||
\fbox{\textcolor{white}{A}} Autorise Animath à conserver mes données personnelles, dans le cadre défini par la loi n 78-17 du 6 janvier 1978 relative à l'informatique, aux fichiers et aux libertés et les textes la modifiant, pendant une durée de quatre ans à compter de ma dernière participation à un événement organisé par Animath.\\
|
\fbox{\textcolor{white}{A}} Autorise Animath à conserver mes données personnelles, dans le cadre défini par
|
||||||
|
la loi n 78-17 du 6 janvier 1978 relative à l'informatique, aux fichiers et aux libertés et les textes la modifiant,
|
||||||
|
pendant une durée de quatre ans à compter de ma dernière participation à un événement organisé par Animath.\\
|
||||||
|
|
||||||
\medskip
|
\medskip
|
||||||
\fbox{\textcolor{white}{A}} J'accepte d'être tenu informé d'autres activités organisées par l'association et ses partenaires.
|
\fbox{\textcolor{white}{A}} J'accepte d'être tenu informé d'autres activités organisées par l'association et ses
|
||||||
|
partenaires.
|
||||||
|
|
||||||
\bigskip
|
\bigskip
|
||||||
|
|
@ -37,28 +37,30 @@
|
|||||||
|
|
||||||
\begin{document}
|
\begin{document}
|
||||||
|
|
||||||
\includegraphics[height=2cm]{assets/logo_animath.png}\hfill{\fontsize{55pt}{55pt}{$\mathbb{TFJM}^2$}}
|
\includegraphics[height=2cm]{/code/static/logo_animath.png}\hfill{\fontsize{55pt}{55pt}{$\mathbb{TFJM}^2$}}
|
||||||
|
|
||||||
\vfill
|
\vfill
|
||||||
|
|
||||||
\begin{center}
|
\begin{center}
|
||||||
\Large \bf Autorisation parentale pour les mineurs ({TOURNAMENT_NAME})
|
\Large \bf Autorisation parentale pour les mineurs ({{ tournament.name }})
|
||||||
\end{center}
|
\end{center}
|
||||||
|
|
||||||
Je soussigné(e) \hrulefill,\\
|
Je soussigné(e) \hrulefill,\\
|
||||||
responsable légal, demeurant \writingsep\hrulefill\\
|
responsable légal, demeurant \writingsep\hrulefill\\
|
||||||
\writingsep\hrulefill,\\
|
\writingsep\hrulefill,\\
|
||||||
\writingsep autorise {PARTICIPANT_NAME},\\
|
\writingsep autorise {{ registration|default:"\hrulefill" }},\\
|
||||||
né(e) le {BIRTHDAY},
|
né(e) le {{ registration.birth_date }},
|
||||||
à participer au Tournoi Français des Jeunes Mathématiciennes et Mathématiciens ($\mathbb{TFJM}^2$) organisé \`a : {PLACE}, du {START_DATE} au {END_DATE} {YEAR}.
|
à participer au Tournoi Français des Jeunes Mathématiciennes et Mathématiciens ($\mathbb{TFJM}^2$) organisé \`a :
|
||||||
|
{{ tournament.place }}, du {{ tournament.date_start }} au {{ tournament.date_end }}.
|
||||||
|
|
||||||
{PRONOUN} se rendra au lieu indiqu\'e ci-dessus le vendredi matin et quittera les lieux l'après-midi du dimanche par ses propres moyens et sous la responsabilité du représentant légal.
|
Iel se rendra au lieu indiqu\'e ci-dessus le vendredi matin et quittera les lieux l'après-midi du dimanche par
|
||||||
|
ses propres moyens et sous la responsabilité du représentant légal.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
\vspace{8ex}
|
\vspace{8ex}
|
||||||
|
|
||||||
Fait à \vrule width 10cm height 0pt depth 0.4pt, le \phantom{232323}/\phantom{XXX}/{YEAR},
|
Fait à \vrule width 10cm height 0pt depth 0.4pt, le \phantom{232323}/\phantom{XXX}/{% now "Y" %},
|
||||||
|
|
||||||
\vfill
|
\vfill
|
||||||
\vfill
|
\vfill
|
@ -38,12 +38,12 @@
|
|||||||
|
|
||||||
\begin{document}
|
\begin{document}
|
||||||
|
|
||||||
\includegraphics[height=2cm]{assets/logo_animath.png}\hfill{\fontsize{50pt}{50pt}{$\mathbb{TFJM}^2$}}
|
\includegraphics[height=2cm]{/code/static/logo_animath.png}\hfill{\fontsize{50pt}{50pt}{$\mathbb{TFJM}^2$}}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
\begin{center}
|
\begin{center}
|
||||||
\Large \bf Instructions ({TOURNAMENT_NAME})
|
\Large \bf Instructions ({{ tournament.name }})
|
||||||
\end{center}
|
\end{center}
|
||||||
|
|
||||||
\section{Documents}
|
\section{Documents}
|
||||||
@ -51,7 +51,8 @@
|
|||||||
Elle est nécessaire si l'élève est mineur au moment du tournoi (y compris si son anniversaire est pendant le tournoi).
|
Elle est nécessaire si l'élève est mineur au moment du tournoi (y compris si son anniversaire est pendant le tournoi).
|
||||||
|
|
||||||
\subsection{Autorisation de prise de vue}
|
\subsection{Autorisation de prise de vue}
|
||||||
Si l'élève est mineur \textbf{au moment de la signature}, il convient de remplir l'autorisation pour les mineurs. En revanche, s'il est majeur \textbf{au moment de la signature}, il convient de remplir la fiche pour majeur.
|
Si l'élève est mineur \textbf{au moment de la signature}, il convient de remplir l'autorisation pour les mineurs.
|
||||||
|
En revanche, s'il est majeur \textbf{au moment de la signature}, il convient de remplir la fiche pour majeur.
|
||||||
|
|
||||||
\subsection{Fiche sanitaire}
|
\subsection{Fiche sanitaire}
|
||||||
Elle est nécessaire si l'élève est mineur au moment du tournoi (y compris si son anniversaire est pendant le tournoi).
|
Elle est nécessaire si l'élève est mineur au moment du tournoi (y compris si son anniversaire est pendant le tournoi).
|
||||||
@ -59,20 +60,27 @@ Elle est nécessaire si l'élève est mineur au moment du tournoi (y compris si
|
|||||||
|
|
||||||
\section{Paiement}
|
\section{Paiement}
|
||||||
|
|
||||||
|
{% if tournament.price %}
|
||||||
\subsection{Montant}
|
\subsection{Montant}
|
||||||
Les frais d'inscription sont fixés à {PRICE} euros. Vous devez vous en acquitter \textbf{avant le {END_PAYMENT_DATE} {YEAR}}. Si l'élève est boursier, il en est dispensé, vous devez alors fournir une copie de sa notification de bourse directement sur la plateforme \textbf{avant le {END_PAYMENT_DATE} {YEAR}}.
|
Les frais d'inscription sont fixés à {{ tournament.price }} euros. Vous devez vous en acquitter
|
||||||
|
\textbf{avant le {{ tournament.inscription_limit.date }}}. Si l'élève est boursier, il en est dispensé, vous devez alors
|
||||||
|
fournir une copie de sa notification de bourse directement sur la plateforme
|
||||||
|
\textbf{avant le {{ tournament.inscription_limit.date }}}.
|
||||||
|
|
||||||
\subsection{Procédure}
|
\subsection{Procédure}
|
||||||
|
|
||||||
Si le paiement de plusieurs élèves est fait en une seule opération, merci de contacter \href{mailto: contact@tfjm.org}{contact@tfjm.org} \textbf{avant le paiement} pour garantir l'identification de ce dernier
|
Si le paiement de plusieurs élèves est fait en une seule opération, merci de contacter
|
||||||
|
\href{mailto: contact@tfjm.org}{contact@tfjm.org} \textbf{avant le paiement} pour garantir l'identification de ce dernier.
|
||||||
|
|
||||||
\subsubsection*{Carte bancaire (uniquement les cartes françaises)}
|
\subsubsection*{Carte bancaire (uniquement les cartes françaises)}
|
||||||
Le paiement s'effectue en ligne via la plateforme à l'adresse : \url{https://www.helloasso.com/associations/animath/evenements/tfjm-2020}
|
Le paiement s'effectue en ligne via la plateforme à l'adresse : \url{https://www.helloasso.com/associations/animath/evenements/tfjmm-2021}
|
||||||
|
|
||||||
Vous devez impérativement indiquer dans le champ "Référence" la mention "TFJMpu" suivie des noms et prénoms \textbf{de l'élève}.
|
Vous devez impérativement indiquer dans le champ "Référence" la mention "TFJMpu" suivie des noms et prénoms \textbf{de l'élève}.
|
||||||
|
|
||||||
\subsubsection*{Virement}
|
\subsubsection*{Virement}
|
||||||
\textbf{Si vous ne pouvez pas utiliser le paiement par carte}, vous pouvez faire un virement sur le compte ci-dessous en indiquant bien dans le champ "motif" (ou autre champ propre à votre banque dont le contenu est communiqué au destinataire) la mention "TFJMpu" suivie des noms et prénoms \textbf{de l'élève}.
|
\textbf{Si vous ne pouvez pas utiliser le paiement par carte}, vous pouvez faire un virement sur le compte ci-dessous en
|
||||||
|
indiquant bien dans le champ "motif" (ou autre champ propre à votre banque dont le contenu est communiqué au destinataire)
|
||||||
|
la mention "TFJMpu" suivie des noms et prénoms \textbf{de l'élève}.
|
||||||
|
|
||||||
IBAN FR76 1027 8065 0000 0206 4290 127
|
IBAN FR76 1027 8065 0000 0206 4290 127
|
||||||
|
|
||||||
@ -80,7 +88,12 @@ BIC CMCIFR2A
|
|||||||
|
|
||||||
\subsubsection*{Autre}
|
\subsubsection*{Autre}
|
||||||
|
|
||||||
Si aucune de ces procédures n'est possible pour vous, envoyez un mail à \href{mailto: contact@tfjm.org}{contact@tfjm.org} pour que nous trouvions une solution à vos difficultés.
|
Si aucune de ces procédures n'est possible pour vous, envoyez un mail à \href{mailto: contact@tfjm.org}{contact@tfjm.org}
|
||||||
|
pour que nous trouvions une solution à vos difficultés.
|
||||||
|
|
||||||
|
{% else %}
|
||||||
|
Le tournoi est gratuit, vous n'avez aucun frais à avoir.
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -9,7 +9,7 @@
|
|||||||
<div id="form-content">
|
<div id="form-content">
|
||||||
<div class="alert alert-info">
|
<div class="alert alert-info">
|
||||||
{% trans "Authorization template:" %}
|
{% trans "Authorization template:" %}
|
||||||
<a class="alert-link" href="{% static "Autorisation_parentale.tex" %}">{% trans "Download" %}</a>
|
<a class="alert-link" href="{% url "registration:parental_authorization_template" %}?registration_id={{ object.pk }}&tournament_id={{ object.team.participation.tournament.pk }}" data-turbolinks="false">{% trans "Download" %}</a>
|
||||||
</div>
|
</div>
|
||||||
{% csrf_token %}
|
{% csrf_token %}
|
||||||
{{ form|crispy }}
|
{{ form|crispy }}
|
||||||
|
@ -9,8 +9,8 @@
|
|||||||
<div id="form-content">
|
<div id="form-content">
|
||||||
<div class="alert alert-info">
|
<div class="alert alert-info">
|
||||||
{% trans "Authorization templates:" %}
|
{% trans "Authorization templates:" %}
|
||||||
<a class="alert-link" href="{% static "Autorisation_droit_image_majeur.tex" %}">{% trans "Adult" %}</a> —
|
<a class="alert-link" href="{% url "registration:photo_authorization_adult_template" %}?registration_id={{ object.pk }}&tournament_id={{ object.team.participation.tournament.pk }}" data-turbolinks="false">{% trans "Adult" %}</a> —
|
||||||
<a class="alert-link" href="{% static "Autorisation_droit_image_mineur.tex" %}">{% trans "Child" %}</a>
|
<a class="alert-link" href="{% url "registration:photo_authorization_child_template" %}?registration_id={{ object.pk }}&tournament_id={{ object.team.participation.tournament.pk }}" data-turbolinks="false">{% trans "Child" %}</a>
|
||||||
</div>
|
</div>
|
||||||
{% csrf_token %}
|
{% csrf_token %}
|
||||||
{{ form|crispy }}
|
{{ form|crispy }}
|
||||||
|
@ -57,20 +57,20 @@
|
|||||||
<button class="btn btn-primary" data-toggle="modal" data-target="#uploadPhotoAuthorizationModal">{% trans "Replace" %}</button>
|
<button class="btn btn-primary" data-toggle="modal" data-target="#uploadPhotoAuthorizationModal">{% trans "Replace" %}</button>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</dd>
|
</dd>
|
||||||
|
|
||||||
<dt class="col-sm-6 text-right">{% trans "Health sheet:" %}</dt>
|
|
||||||
<dd class="col-sm-6">
|
|
||||||
{% if user_object.registration.health_sheet %}
|
|
||||||
<a href="{{ user_object.registration.health_sheet.url }}" data-turbolinks="false">{% trans "Download" %}</a>
|
|
||||||
{% endif %}
|
|
||||||
{% if user_object.registration.team and not user_object.registration.team.participation.valid %}
|
|
||||||
<button class="btn btn-primary" data-toggle="modal" data-target="#uploadHealthSheetModal">{% trans "Replace" %}</button>
|
|
||||||
{% endif %}
|
|
||||||
</dd>
|
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
{% if user_object.registration.studentregistration %}
|
{% if user_object.registration.studentregistration %}
|
||||||
{% if user_object.registration.under_18 %}
|
{% if user_object.registration.under_18 %}
|
||||||
|
<dt class="col-sm-6 text-right">{% trans "Health sheet:" %}</dt>
|
||||||
|
<dd class="col-sm-6">
|
||||||
|
{% if user_object.registration.health_sheet %}
|
||||||
|
<a href="{{ user_object.registration.health_sheet.url }}" data-turbolinks="false">{% trans "Download" %}</a>
|
||||||
|
{% endif %}
|
||||||
|
{% if user_object.registration.team and not user_object.registration.team.participation.valid %}
|
||||||
|
<button class="btn btn-primary" data-toggle="modal" data-target="#uploadHealthSheetModal">{% trans "Replace" %}</button>
|
||||||
|
{% endif %}
|
||||||
|
</dd>
|
||||||
|
|
||||||
<dt class="col-sm-6 text-right">{% trans "Parental authorization:" %}</dt>
|
<dt class="col-sm-6 text-right">{% trans "Parental authorization:" %}</dt>
|
||||||
<dd class="col-sm-6">
|
<dd class="col-sm-6">
|
||||||
{% if user_object.registration.parental_authorization %}
|
{% if user_object.registration.parental_authorization %}
|
||||||
|
@ -3,9 +3,10 @@
|
|||||||
|
|
||||||
from django.urls import path
|
from django.urls import path
|
||||||
|
|
||||||
from .views import AddOrganizerView, MyAccountDetailView, PaymentUpdateView, ResetAdminView, SignupView, \
|
from .views import AddOrganizerView, AdultPhotoAuthorizationTemplateView, ChildPhotoAuthorizationTemplateView, \
|
||||||
UserDetailView, UserImpersonateView, UserListView, UserResendValidationEmailView, UserUpdateView, \
|
InstructionsTemplateView, MyAccountDetailView, ParentalAuthorizationTemplateView, PaymentUpdateView, \
|
||||||
UserUploadHealthSheetView, UserUploadParentalAuthorizationView, UserUploadPhotoAuthorizationView, \
|
ResetAdminView, SignupView, UserDetailView, UserImpersonateView, UserListView, UserResendValidationEmailView, \
|
||||||
|
UserUpdateView, UserUploadHealthSheetView, UserUploadParentalAuthorizationView, UserUploadPhotoAuthorizationView, \
|
||||||
UserValidateView, UserValidationEmailSentView
|
UserValidateView, UserValidationEmailSentView
|
||||||
|
|
||||||
app_name = "registration"
|
app_name = "registration"
|
||||||
@ -22,7 +23,14 @@ urlpatterns = [
|
|||||||
path("user/<int:pk>/update/", UserUpdateView.as_view(), name="update_user"),
|
path("user/<int:pk>/update/", UserUpdateView.as_view(), name="update_user"),
|
||||||
path("user/<int:pk>/upload-photo-authorization/", UserUploadPhotoAuthorizationView.as_view(),
|
path("user/<int:pk>/upload-photo-authorization/", UserUploadPhotoAuthorizationView.as_view(),
|
||||||
name="upload_user_photo_authorization"),
|
name="upload_user_photo_authorization"),
|
||||||
path("user/<int:pk>/upload-health_sheet/", UserUploadHealthSheetView.as_view(),
|
path("parental-authorization-template/", ParentalAuthorizationTemplateView.as_view(),
|
||||||
|
name="parental_authorization_template"),
|
||||||
|
path("photo-authorization-template/adult/", AdultPhotoAuthorizationTemplateView.as_view(),
|
||||||
|
name="photo_authorization_adult_template"),
|
||||||
|
path("photo-authorization-template/child/", ChildPhotoAuthorizationTemplateView.as_view(),
|
||||||
|
name="photo_authorization_child_template"),
|
||||||
|
path("instructions-template/", InstructionsTemplateView.as_view(), name="instructions_template"),
|
||||||
|
path("user/<int:pk>/upload-health-sheet/", UserUploadHealthSheetView.as_view(),
|
||||||
name="upload_user_health_sheet"),
|
name="upload_user_health_sheet"),
|
||||||
path("user/<int:pk>/upload-parental-authorization/", UserUploadParentalAuthorizationView.as_view(),
|
path("user/<int:pk>/upload-parental-authorization/", UserUploadParentalAuthorizationView.as_view(),
|
||||||
name="upload_user_parental_authorization"),
|
name="upload_user_parental_authorization"),
|
||||||
|
@ -2,6 +2,8 @@
|
|||||||
# SPDX-License-Identifier: GPL-3.0-or-later
|
# SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
|
||||||
import os
|
import os
|
||||||
|
import subprocess
|
||||||
|
from tempfile import mkdtemp
|
||||||
|
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
from django.contrib.auth.mixins import LoginRequiredMixin
|
from django.contrib.auth.mixins import LoginRequiredMixin
|
||||||
@ -21,7 +23,7 @@ from django.utils.translation import gettext_lazy as _
|
|||||||
from django.views.generic import CreateView, DetailView, RedirectView, TemplateView, UpdateView, View
|
from django.views.generic import CreateView, DetailView, RedirectView, TemplateView, UpdateView, View
|
||||||
from django_tables2 import SingleTableView
|
from django_tables2 import SingleTableView
|
||||||
from magic import Magic
|
from magic import Magic
|
||||||
from participation.models import Passage, Solution, Synthesis
|
from participation.models import Passage, Solution, Synthesis, Tournament
|
||||||
from tfjm.tokens import email_validation_token
|
from tfjm.tokens import email_validation_token
|
||||||
from tfjm.views import AdminMixin, UserMixin, VolunteerMixin
|
from tfjm.views import AdminMixin, UserMixin, VolunteerMixin
|
||||||
|
|
||||||
@ -381,6 +383,52 @@ class UserUploadParentalAuthorizationView(UserMixin, UpdateView):
|
|||||||
return reverse_lazy("registration:user_detail", args=(self.object.user.pk,))
|
return reverse_lazy("registration:user_detail", args=(self.object.user.pk,))
|
||||||
|
|
||||||
|
|
||||||
|
class AuthorizationTemplateView(TemplateView):
|
||||||
|
def get_context_data(self, **kwargs):
|
||||||
|
context = super().get_context_data(**kwargs)
|
||||||
|
|
||||||
|
if "registration_id" in self.request.GET:
|
||||||
|
registration = Registration.objects.get(pk=self.request.GET.get("registration_id"))
|
||||||
|
# Don't get unwanted information
|
||||||
|
if registration.user == self.request.user \
|
||||||
|
or self.request.user.is_authenticated and self.request.user.registration.is_admin:
|
||||||
|
context["registration"] = registration
|
||||||
|
if "tournament_id" in self.request.GET:
|
||||||
|
context["tournament"] = Tournament.objects.get(pk=self.request.GET.get("tournament_id"))
|
||||||
|
else:
|
||||||
|
raise ValueError("Merci d'indiquer un tournoi.")
|
||||||
|
|
||||||
|
return context
|
||||||
|
|
||||||
|
def render_to_response(self, context, **response_kwargs):
|
||||||
|
tex = render_to_string(self.template_name, context=context, request=self.request)
|
||||||
|
temp_dir = mkdtemp()
|
||||||
|
with open(os.path.join(temp_dir, "texput.tex"), "w") as f:
|
||||||
|
f.write(tex)
|
||||||
|
process = subprocess.Popen(["pdflatex", "-interaction=nonstopmode", f"-output-directory={temp_dir}",
|
||||||
|
os.path.join(temp_dir, "texput.tex"), ])
|
||||||
|
process.wait()
|
||||||
|
return FileResponse(open(os.path.join(temp_dir, "texput.pdf"), "rb"),
|
||||||
|
content_type="application/pdf",
|
||||||
|
filename=self.template_name.split("/")[-1][:-3] + "pdf")
|
||||||
|
|
||||||
|
|
||||||
|
class AdultPhotoAuthorizationTemplateView(AuthorizationTemplateView):
|
||||||
|
template_name = "registration/tex/Autorisation_droit_image_majeur.tex"
|
||||||
|
|
||||||
|
|
||||||
|
class ChildPhotoAuthorizationTemplateView(AuthorizationTemplateView):
|
||||||
|
template_name = "registration/tex/Autorisation_droit_image_mineur.tex"
|
||||||
|
|
||||||
|
|
||||||
|
class ParentalAuthorizationTemplateView(AuthorizationTemplateView):
|
||||||
|
template_name = "registration/tex/Autorisation_parentale.tex"
|
||||||
|
|
||||||
|
|
||||||
|
class InstructionsTemplateView(AuthorizationTemplateView):
|
||||||
|
template_name = "registration/tex/Instructions.tex"
|
||||||
|
|
||||||
|
|
||||||
class PaymentUpdateView(LoginRequiredMixin, UpdateView):
|
class PaymentUpdateView(LoginRequiredMixin, UpdateView):
|
||||||
model = Payment
|
model = Payment
|
||||||
form_class = PaymentForm
|
form_class = PaymentForm
|
||||||
@ -438,7 +486,7 @@ class HealthSheetView(LoginRequiredMixin, View):
|
|||||||
path = f"media/authorization/health/{filename}"
|
path = f"media/authorization/health/{filename}"
|
||||||
if not os.path.exists(path):
|
if not os.path.exists(path):
|
||||||
raise Http404
|
raise Http404
|
||||||
student = ParticipantRegistration.objects.get(health_sheet__endswith=filename)
|
student = StudentRegistration.objects.get(health_sheet__endswith=filename)
|
||||||
user = request.user
|
user = request.user
|
||||||
if not (student.user == user or user.registration.is_admin or user.registration.is_volunteer and student.team
|
if not (student.user == user or user.registration.is_admin or user.registration.is_volunteer and student.team
|
||||||
and student.team.participation.tournament in user.registration.organized_tournaments.all()):
|
and student.team.participation.tournament in user.registration.organized_tournaments.all()):
|
||||||
|
@ -15,3 +15,6 @@
|
|||||||
|
|
||||||
# Check payments from Hello Asso
|
# Check payments from Hello Asso
|
||||||
*/6 * * * * cd /code && python manage.py check_hello_asso &> /dev/null
|
*/6 * * * * cd /code && python manage.py check_hello_asso &> /dev/null
|
||||||
|
|
||||||
|
# Clean temporary files
|
||||||
|
30 * * * * rm -rf /tmp/*
|
||||||
|
@ -1,113 +0,0 @@
|
|||||||
\documentclass[a4paper,french,11pt]{article}
|
|
||||||
|
|
||||||
\usepackage[T1]{fontenc}
|
|
||||||
\usepackage[utf8]{inputenc}
|
|
||||||
\usepackage{lmodern}
|
|
||||||
\usepackage[frenchb]{babel}
|
|
||||||
|
|
||||||
\usepackage{fancyhdr}
|
|
||||||
\usepackage{graphicx}
|
|
||||||
\usepackage{amsmath}
|
|
||||||
\usepackage{amssymb}
|
|
||||||
%\usepackage{anyfontsize}
|
|
||||||
\usepackage{fancybox}
|
|
||||||
\usepackage{eso-pic,graphicx}
|
|
||||||
\usepackage{xcolor}
|
|
||||||
|
|
||||||
|
|
||||||
% Specials
|
|
||||||
\newcommand{\writingsep}{\vrule height 4ex width 0pt}
|
|
||||||
|
|
||||||
% Page formating
|
|
||||||
\hoffset -1in
|
|
||||||
\voffset -1in
|
|
||||||
\textwidth 180 mm
|
|
||||||
\textheight 250 mm
|
|
||||||
\oddsidemargin 15mm
|
|
||||||
\evensidemargin 15mm
|
|
||||||
\pagestyle{fancy}
|
|
||||||
|
|
||||||
% Headers and footers
|
|
||||||
\fancyfoot{}
|
|
||||||
\lhead{}
|
|
||||||
\rhead{}
|
|
||||||
\renewcommand{\headrulewidth}{0pt}
|
|
||||||
\lfoot{\footnotesize 11 rue Pierre et Marie Curie, 75231 Paris Cedex 05\\ Numéro siret 431 598 366 00018}
|
|
||||||
\rfoot{\footnotesize Association agréée par\\le Ministère de l'éducation nationale.}
|
|
||||||
|
|
||||||
\begin{document}
|
|
||||||
|
|
||||||
\includegraphics[height=2cm]{assets/logo_animath.png}\hfill{\fontsize{55pt}{55pt}{$\mathbb{TFJM}^2$}}
|
|
||||||
|
|
||||||
\vfill
|
|
||||||
|
|
||||||
\begin{center}
|
|
||||||
|
|
||||||
|
|
||||||
\LARGE
|
|
||||||
Autorisation d'enregistrement et de diffusion de l'image ({TOURNAMENT_NAME})
|
|
||||||
\end{center}
|
|
||||||
\normalsize
|
|
||||||
|
|
||||||
|
|
||||||
\thispagestyle{empty}
|
|
||||||
|
|
||||||
\bigskip
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
Je soussign\'e {PARTICIPANT_NAME}\\
|
|
||||||
demeurant au {ADDRESS}
|
|
||||||
|
|
||||||
\medskip
|
|
||||||
Cochez la/les cases correspondantes.\\
|
|
||||||
\medskip
|
|
||||||
|
|
||||||
\fbox{\textcolor{white}{A}} Autorise l'association Animath, \`a l'occasion du $\mathbb{TFJM}^2$ du {START_DATE} au {END_DATE} {YEAR} à : {PLACE}, \`a me photographier ou \`a me filmer et \`a diffuser les photos et/ou les vid\'eos r\'ealis\'ees \`a cette occasion sur son site et sur les sites partenaires. D\'eclare c\'eder \`a titre gracieux \`a Animath le droit d’utiliser mon image sur tous ses supports d'information : brochures, sites web, r\'eseaux sociaux. Animath devient, par la pr\'esente, cessionnaire des droits pendant toute la dur\'ee pour laquelle ont \'et\'e acquis les droits d'auteur de ces photographies.\\
|
|
||||||
|
|
||||||
\medskip
|
|
||||||
Animath s'engage, conform\'ement aux dispositions l\'egales en vigueur relatives au droit \`a l'image, \`a ce que la publication et la diffusion de l'image ainsi que des commentaires l'accompagnant ne portent pas atteinte \`a la vie priv\'ee, \`a la dignit\'e et \`a la r\'eputation de la personne photographiée.\\
|
|
||||||
|
|
||||||
\medskip
|
|
||||||
\fbox{\textcolor{white}{A}} Autorise la diffusion dans les medias (Presse, T\'el\'evision, Internet) de photographies prises \`a l'occasion d’une \'eventuelle m\'ediatisation de cet événement.\\
|
|
||||||
|
|
||||||
\medskip
|
|
||||||
|
|
||||||
Conform\'ement \`a la loi informatique et libert\'es du 6 janvier 1978, vous disposez d'un droit de libre acc\`es, de rectification, de modification et de suppression des donn\'ees qui vous concernent.
|
|
||||||
Cette autorisation est donc r\'evocable \`a tout moment sur volont\'e express\'ement manifest\'ee par lettre recommand\'ee avec accus\'e de r\'eception adress\'ee \`a Animath, IHP, 11 rue Pierre et Marie Curie, 75231 Paris cedex 05.\\
|
|
||||||
|
|
||||||
\medskip
|
|
||||||
\fbox{\textcolor{white}{A}} Autorise Animath à conserver mes données personnelles, dans le cadre défini par la loi n 78-17 du 6 janvier 1978 relative à l'informatique, aux fichiers et aux libertés et les textes la modifiant, pendant une durée de quatre ans à compter de ma dernière participation à un événement organisé par Animath.\\
|
|
||||||
|
|
||||||
\medskip
|
|
||||||
\fbox{\textcolor{white}{A}} J'accepte d'être tenu informé d'autres activités organisées par l'association et ses partenaires.
|
|
||||||
|
|
||||||
\bigskip
|
|
||||||
|
|
||||||
Signature pr\'ec\'ed\'ee de la mention \og lu et approuv\'e \fg{}
|
|
||||||
|
|
||||||
\medskip
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
\begin{minipage}[c]{0.5\textwidth}
|
|
||||||
|
|
||||||
\underline{L'\'el\`eve :}\\
|
|
||||||
|
|
||||||
Fait \`a :\\
|
|
||||||
le
|
|
||||||
\end{minipage}
|
|
||||||
|
|
||||||
|
|
||||||
\vfill
|
|
||||||
\vfill
|
|
||||||
\begin{minipage}[c]{0.5\textwidth}
|
|
||||||
\footnotesize 11 rue Pierre et Marie Curie, 75231 Paris Cedex 05\\ Numéro siret 431 598 366 00018
|
|
||||||
\end{minipage}
|
|
||||||
\begin{minipage}[c]{0.5\textwidth}
|
|
||||||
\footnotesize
|
|
||||||
\begin{flushright}
|
|
||||||
Association agréée par\\le Ministère de l'éducation nationale.
|
|
||||||
\end{flushright}
|
|
||||||
\end{minipage}
|
|
||||||
\end{document}
|
|
Binary file not shown.
Loading…
x
Reference in New Issue
Block a user