diff --git a/apps/member/admin.py b/apps/member/admin.py index 0ba73a3..f275084 100644 --- a/apps/member/admin.py +++ b/apps/member/admin.py @@ -1,6 +1,6 @@ from django.contrib.auth.admin import admin, UserAdmin from polymorphic.admin import PolymorphicParentModelAdmin, PolymorphicChildModelAdmin -from member.models import TFJMUser, Document, Solution, Synthesis, MotivationLetter, Authorization +from member.models import TFJMUser, Document, Solution, Synthesis, MotivationLetter, Authorization, Config @admin.register(TFJMUser) @@ -32,3 +32,8 @@ class SolutionAdmin(PolymorphicChildModelAdmin): @admin.register(Synthesis) class SynthesisAdmin(PolymorphicChildModelAdmin): pass + + +@admin.register(Config) +class ConfigAdmin(admin.ModelAdmin): + pass diff --git a/apps/member/models.py b/apps/member/models.py index 72ac9c8..197d9c1 100644 --- a/apps/member/models.py +++ b/apps/member/models.py @@ -135,6 +135,18 @@ class TFJMUser(AbstractUser): verbose_name=_("year"), ) + @property + def participates(self): + return self.role == "participant" or self.role == "encadrant" + + @property + def organizes(self): + return self.role == "organizer" or self.role == "admin" + + @property + def admin(self): + return self.role == "admin" + class Meta: verbose_name = _("user") verbose_name_plural = _("users") @@ -150,7 +162,6 @@ class TFJMUser(AbstractUser): class Document(PolymorphicModel): file = models.FileField( unique=True, - upload_to="files/", verbose_name=_("file"), ) @@ -261,3 +272,20 @@ class Synthesis(Document): def __str__(self): return _("Synthesis of team {trigram} that is {dest} for problem {problem}")\ .format(trigram=self.team.trigram, dest=self.dest, problem=self.problem) + + +class Config(models.Model): + key = models.CharField( + max_length=255, + primary_key=True, + verbose_name=_("key"), + ) + + value = models.TextField( + default="", + verbose_name=_("value"), + ) + + class Meta: + verbose_name = _("configuration") + verbose_name_plural = _("configurations") diff --git a/apps/member/templatetags/__init__.py b/apps/member/templatetags/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/apps/member/templatetags/getconfig.py b/apps/member/templatetags/getconfig.py new file mode 100644 index 0000000..46b3cfa --- /dev/null +++ b/apps/member/templatetags/getconfig.py @@ -0,0 +1,19 @@ +from django import template + +import os + +from member.models import Config + + +def get_config(value): + config = Config.objects.get_or_create(key=value)[0] + return config.value + + +def get_env(value): + return os.getenv(value) + + +register = template.Library() +register.filter('get_config', get_config) +register.filter('get_env', get_env) diff --git a/apps/tournament/models.py b/apps/tournament/models.py index 4e13909..1e7500b 100644 --- a/apps/tournament/models.py +++ b/apps/tournament/models.py @@ -120,6 +120,18 @@ class Team(models.Model): verbose_name=_("year"), ) + @property + def valid(self): + return self.validation_status == "valid" + + @property + def waiting(self): + return self.validation_status == "waiting" + + @property + def invalid(self): + return self.validation_status == "invalid" + @property def encadrants(self): return self.users.filter(role="encadrant") diff --git a/static/Autorisation_droit_image_majeur.tex b/static/Autorisation_droit_image_majeur.tex new file mode 100644 index 0000000..7cb1727 --- /dev/null +++ b/static/Autorisation_droit_image_majeur.tex @@ -0,0 +1,113 @@ +\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} diff --git a/static/Autorisation_droit_image_mineur.tex b/static/Autorisation_droit_image_mineur.tex new file mode 100644 index 0000000..4f14a43 --- /dev/null +++ b/static/Autorisation_droit_image_mineur.tex @@ -0,0 +1,122 @@ +\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 \dotfill (p\`ere, m\`ere, responsable l\'egal) \\ +agissant en qualit\'e de repr\'esentant de {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 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 +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 + \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 + +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 + +Signatures pr\'ec\'ed\'ees de la mention \og lu et approuv\'e \fg{} + +\medskip + + +\begin{minipage}[c]{0.5\textwidth} + +\underline{Le responsable l\'egal :}\\ + +Fait \`a :\\ +le : + +\end{minipage} +\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} diff --git a/static/Autorisation_parentale.tex b/static/Autorisation_parentale.tex new file mode 100644 index 0000000..6c56ac4 --- /dev/null +++ b/static/Autorisation_parentale.tex @@ -0,0 +1,66 @@ +\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]{assets/logo_animath.png}\hfill{\fontsize{55pt}{55pt}{$\mathbb{TFJM}^2$}} + +\vfill + +\begin{center} +\Large \bf Autorisation parentale pour les mineurs ({TOURNAMENT_NAME}) +\end{center} + +Je soussigné(e) \hrulefill,\\ +responsable légal, demeurant \writingsep\hrulefill\\ +\writingsep\hrulefill,\\ +\writingsep autorise {PARTICIPANT_NAME},\\ +né(e) le {BIRTHDAY}, +à 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}. + +{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. + + + +\vspace{8ex} + +Fait à \vrule width 10cm height 0pt depth 0.4pt, le \phantom{232323}/\phantom{XXX}/{YEAR}, + +\vfill +\vfill + +\end{document} diff --git a/static/Fiche_sanitaire.pdf b/static/Fiche_sanitaire.pdf new file mode 100644 index 0000000..b828b9d Binary files /dev/null and b/static/Fiche_sanitaire.pdf differ diff --git a/static/Instructions.tex b/static/Instructions.tex new file mode 100644 index 0000000..da293ef --- /dev/null +++ b/static/Instructions.tex @@ -0,0 +1,88 @@ +\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} +\usepackage{hyperref} + + +% 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{50pt}{50pt}{$\mathbb{TFJM}^2$}} + + + +\begin{center} +\Large \bf Instructions ({TOURNAMENT_NAME}) +\end{center} + +\section{Documents} +\subsection{Autorisation parentale} +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} +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} +Elle est nécessaire si l'élève est mineur au moment du tournoi (y compris si son anniversaire est pendant le tournoi). + + +\section{Paiement} + +\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}}. + +\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 + +\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} + +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} +\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 + +BIC CMCIFR2A + +\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. + + + + +\end{document} diff --git a/static/favicon.ico b/static/favicon.ico new file mode 100644 index 0000000..97757d3 Binary files /dev/null and b/static/favicon.ico differ diff --git a/static/logo.svg b/static/logo.svg new file mode 100644 index 0000000..699316b --- /dev/null +++ b/static/logo.svg @@ -0,0 +1,114 @@ + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + diff --git a/static/logo_animath.png b/static/logo_animath.png new file mode 100644 index 0000000..da4533e Binary files /dev/null and b/static/logo_animath.png differ diff --git a/static/style.css b/static/style.css new file mode 100644 index 0000000..5c8d3ff --- /dev/null +++ b/static/style.css @@ -0,0 +1,47 @@ +html, body { + height: 100%; + margin: 0; +} + +:root { + --navbar-height: 32px; +} + +.container { + min-height: 78%; +} + +.inner { + margin: 20px; +} + +.alert { + text-align: justify; +} + + +footer .alert { + text-align: center; +} + +#navbar-logo { + height: var(--navbar-height); + display: block; +} + +ul .deroule { + display: none; + position: absolute; + background: #f8f9fa !important; + list-style-type: none; + padding: 20px; + z-index: 42; +} + +li:hover ul.deroule { + display:block; +} + +a.nav-link:hover { + background-color: #d8d9da; +} diff --git a/templates/base.html b/templates/base.html new file mode 100644 index 0000000..cb92dd2 --- /dev/null +++ b/templates/base.html @@ -0,0 +1,234 @@ +{% load static i18n static getconfig %} + + + + + + + + {% block title %}{{ title }}{% endblock title %} - Inscription au TFJM² + + + + {# Favicon #} + + + {% if no_cache %} + + {% endif %} + + {# Bootstrap CSS #} + + + + + {# Custom CSS #} + + + {# JQuery, Bootstrap and Turbolinks JavaScript #} + + + + + + {# Si un formulaire requiert des données supplémentaires (notamment JS), les données sont chargées #} + {% if form.media %} + {{ form.media }} + {% endif %} + + + + {% block extracss %}{% endblock %} + + +
+ +
+ {% if user.is_authenticated and not user.profile.email_confirmed %} +
+ {% trans "Your e-mail address is not validated. Please check your mail inbox and click on the validation link." %} +
+ {% endif %} + {% block contenttitle %}

{{ title }}

{% endblock %} +
+ {% block content %} +

Default content...

+ {% endblock content %} +
+
+ + + + + +{% block extrajavascript %} +{% endblock extrajavascript %} + + diff --git a/templates/index.html b/templates/index.html new file mode 100644 index 0000000..9455dc1 --- /dev/null +++ b/templates/index.html @@ -0,0 +1,9 @@ +{% extends "base.html" %} + +{% load getconfig %} + +{% block content %} + {% autoescape off %} + {{ "index_page"|get_config|safe }} + {% endautoescape %} +{% endblock %} diff --git a/tfjm/settings.py b/tfjm/settings.py index 2f7d9a8..6031984 100644 --- a/tfjm/settings.py +++ b/tfjm/settings.py @@ -144,3 +144,11 @@ LOCALE_PATHS = [os.path.join(BASE_DIR, "locale")] # https://docs.djangoproject.com/en/3.0/howto/static-files/ STATIC_URL = '/static/' + +STATICFILES_DIRS = [ + os.path.join(BASE_DIR, "static"), +] + +MEDIA_URL = '/media/' + +MEDIA_ROOT = os.path.join(BASE_DIR, "media") diff --git a/tfjm/urls.py b/tfjm/urls.py index 1a5069e..40e28d8 100644 --- a/tfjm/urls.py +++ b/tfjm/urls.py @@ -13,9 +13,19 @@ Including another URLconf 1. Import the include() function: from django.urls import include, path 2. Add a URL to urlpatterns: path('blog/', include('blog.urls')) """ +from django.conf import settings +from django.conf.urls.static import static from django.contrib import admin -from django.urls import path +from django.urls import path, include +from django.views.generic import TemplateView urlpatterns = [ - path('admin/', admin.site.urls), + path('', TemplateView.as_view(template_name="index.html"), name="index"), + path('i18n/', include('django.conf.urls.i18n')), + path('admin/doc/', include('django.contrib.admindocs.urls')), + path('admin/', admin.site.urls, name="admin"), + path('accounts/', include('django.contrib.auth.urls')), ] + +urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) +urlpatterns += static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)