From 18f3ce4023eed084ae9a21ef030afcc06001ecec Mon Sep 17 00:00:00 2001 From: Emmy D'Anello Date: Sat, 6 Jul 2024 23:30:17 +0200 Subject: [PATCH] Update scaling sheets for ETEAM Signed-off-by: Emmy D'Anello --- locale/fr/LC_MESSAGES/django.po | 64 +++++--- participation/models.py | 24 +-- .../participation/tex/final_sheet.tex | 89 +++++++++++ .../templates/participation/tex/finale.tex | 74 --------- .../participation/tex/scale_eteam.tex | 149 ++++++++++++++++++ .../tex/{bareme.tex => scale_tfjm.tex} | 18 ++- participation/views.py | 24 +-- tfjm/settings.py | 2 + 8 files changed, 317 insertions(+), 127 deletions(-) create mode 100644 participation/templates/participation/tex/final_sheet.tex delete mode 100644 participation/templates/participation/tex/finale.tex create mode 100644 participation/templates/participation/tex/scale_eteam.tex rename participation/templates/participation/tex/{bareme.tex => scale_tfjm.tex} (78%) diff --git a/locale/fr/LC_MESSAGES/django.po b/locale/fr/LC_MESSAGES/django.po index 9782341..df7e273 100644 --- a/locale/fr/LC_MESSAGES/django.po +++ b/locale/fr/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: TFJM\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-07-06 22:07+0200\n" +"POT-Creation-Date: 2024-07-06 22:34+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: Emmy D'Anello \n" "Language-Team: LANGUAGE \n" @@ -1349,6 +1349,10 @@ msgstr "finale" msgid "Google Sheet ID" msgstr "ID de la feuille Google Sheets" +#: participation/models.py:461 +msgid "Notation sheet" +msgstr "Feuille de notation" + #: participation/models.py:473 participation/models.py:474 #: participation/models.py:476 participation/models.py:716 msgid "Final ranking" @@ -1553,6 +1557,12 @@ msgstr "" "href='{solution_url}'>problème {problem}. Vous pouvez envoyer votre note " "de synthèse sur cette page.

" +#: participation/models.py:969 participation/models.py:1032 +#: participation/models.py:1096 +#: participation/templates/participation/upload_written_review.html:9 +msgid "Templates:" +msgstr "Modèles :" + #: participation/models.py:974 registration/models.py:629 msgid "First round" msgstr "Premier tour" @@ -1657,10 +1667,36 @@ msgstr "Læ président⋅e du jury doit faire partie du jury." msgid "Problem" msgstr "Problème" +#: participation/models.py:1254 participation/views.py:1507 +msgid "Reporter" +msgstr "Défenseur⋅se" + +#: participation/models.py:1255 participation/views.py:1513 +msgid "Opponent" +msgstr "Opposant⋅e" + +#: participation/models.py:1256 participation/views.py:1520 +msgid "Reviewer" +msgstr "Rapporteur⋅rice" + +#: participation/models.py:1257 participation/views.py:1527 +msgid "Observer" +msgstr "Observateur⋅rice" + #: participation/models.py:1258 participation/views.py:1501 msgid "Role" msgstr "Rôle" +#: participation/models.py:1259 participation/models.py:1261 +#: participation/models.py:1262 +msgid "Writing" +msgstr "Écrit" + +#: participation/models.py:1260 participation/models.py:1261 +#: participation/models.py:1262 +msgid "Oral" +msgstr "Oral" + #: participation/models.py:1263 participation/views.py:1535 #: participation/views.py:1536 msgid "Juree" @@ -2601,10 +2637,6 @@ msgstr "" msgid "Download empty notation sheet" msgstr "Télécharger la fiche de notation vierge" -#: participation/templates/participation/upload_written_review.html:9 -msgid "Templates:" -msgstr "Modèles :" - #: participation/templates/participation/upload_written_review.html:14 msgid "Warning: non-free format" msgstr "Attention : format non libre" @@ -2815,33 +2847,17 @@ msgstr "L'utilisateur⋅rice suivant n'est pas inscrit⋅e en tant que juré⋅e msgid "Notes were successfully uploaded." msgstr "Les notes ont bien été envoyées." -#: participation/views.py:1507 -msgid "Reporter" -msgstr "Défenseur⋅se" - -#: participation/views.py:1513 -msgid "Opponent" -msgstr "Opposant⋅e" - -#: participation/views.py:1520 -msgid "Reviewer" -msgstr "Rapporteur⋅rice" - -#: participation/views.py:1527 -msgid "Observer" -msgstr "Observateur⋅rice" - -#: participation/views.py:1898 +#: participation/views.py:1902 #, python-brace-format msgid "Notation sheets of pool {pool} of {tournament}.zip" msgstr "Feuilles de notations pour la poule {pool} du tournoi {tournament}.zip" -#: participation/views.py:1903 +#: participation/views.py:1907 #, python-brace-format msgid "Notation sheets of {tournament}.zip" msgstr "Feuilles de notation de {tournament}.zip" -#: participation/views.py:2070 +#: participation/views.py:2074 msgid "You can't upload a written review after the deadline." msgstr "Vous ne pouvez pas envoyer de note de synthèse après la date limite." diff --git a/participation/models.py b/participation/models.py index 48234cb..1f46dcb 100644 --- a/participation/models.py +++ b/participation/models.py @@ -458,7 +458,7 @@ class Tournament(models.Model): return self.notes_sheet_id gc = gspread.service_account_from_dict(settings.GOOGLE_SERVICE_CLIENT) - spreadsheet = gc.create(f"{_('Notation sheet')} - {self.name}", folder_id=settings.NOTES_DRIVE_FOLDER_ID) + spreadsheet = gc.create(_('Notation sheet') + f" - {self.name}", folder_id=settings.NOTES_DRIVE_FOLDER_ID) spreadsheet.update_locale("fr_FR") spreadsheet.share(None, "anyone", "writer", with_link=True) self.notes_sheet_id = spreadsheet.id @@ -966,7 +966,7 @@ class Participation(models.Model): reviews_template_begin = f"{settings.STATIC_URL}eteam/Written_review." reviews_templates = " — ".join(f"{ext.upper()}" for ext in ["pdf", "tex"]) - reviews_templates_content = f"

{_('Templates:')} {reviews_templates}

" + reviews_templates_content = "

" + _('Templates:') + " {reviews_templates}

" content = reporter_content + opponent_content + reviewer_content + observer_content \ + reviews_templates_content @@ -1029,7 +1029,7 @@ class Participation(models.Model): reviews_template_begin = f"{settings.STATIC_URL}eteam/Written_review." reviews_templates = " — ".join(f"{ext.upper()}" for ext in ["pdf", "tex"]) - reviews_templates_content = f"

{_('Templates:')} {reviews_templates}

" + reviews_templates_content = f"

" + _('Templates:') + " {reviews_templates}

" content = reporter_content + opponent_content + reviewer_content + observer_content \ + reviews_templates_content @@ -1093,7 +1093,7 @@ class Participation(models.Model): reviews_template_begin = f"{settings.STATIC_URL}eteam/Written_review." reviews_templates = " — ".join(f"{ext.upper()}" for ext in ["pdf", "tex"]) - reviews_templates_content = f"

{_('Templates:')} {reviews_templates}

" + reviews_templates_content = f"

" + _('Templates:') + " {reviews_templates}

" content = reporter_content + opponent_content + reviewer_content + observer_content \ + reviews_templates_content @@ -1251,15 +1251,15 @@ class Pool(models.Model): header = [ sum(([str(_("Problem #{problem}").format(problem=passage.solution_number))] + (passage_width - 1) * [""] for passage in passages), start=[str(_("Problem")), ""]), - sum(([f"{_('Reporter')} ({passage.reporter.team.trigram})", "", - f"{_('Opponent')} ({passage.opponent.team.trigram})", "", - f"{_('Reviewer')} ({passage.reviewer.team.trigram})", ""] - + ([f"{_('Observer')} ({passage.observer.team.trigram})", ""] if has_observer else []) + sum(([_('Reporter') + f" ({passage.reporter.team.trigram})", "", + _('Opponent') + f" ({passage.opponent.team.trigram})", "", + _('Reviewer') + f" ({passage.reviewer.team.trigram})", ""] + + ([_('Observer') + f" ({passage.observer.team.trigram})", ""] if has_observer else []) for passage in passages), start=[str(_("Role")), ""]), - sum(([f"{_('Writing')} (/{20 if settings.TFJM_APP == 'TFJM' else 10})", - f"{_('Oral')} (/{20 if settings.TFJM_APP == 'TFJM' else 10})", - f"{_('Writing')} (/10)", f"{_('Oral')} (/10)", f"{_('Writing')} (/10)", f"{_('Oral')} (/10)"] - + ([f"{_('Writing')} (/10)", f"{_('Oral')} (/10)"] if has_observer else []) + sum(([_('Writing') + f" (/{20 if settings.TFJM_APP == 'TFJM' else 10})", + _('Oral') + f" (/{20 if settings.TFJM_APP == 'TFJM' else 10})", + _('Writing') + f" (/10)", _('Oral') + f" (/10)", _('Writing') + f" (/10)", _('Oral') + f" (/10)"] + + ([_('Writing') + f" (/10)", _('Oral') + f" (/10)"] if has_observer else []) for _passage in passages), start=[str(_("Juree")), ""]), ] diff --git a/participation/templates/participation/tex/final_sheet.tex b/participation/templates/participation/tex/final_sheet.tex new file mode 100644 index 0000000..7c81d2e --- /dev/null +++ b/participation/templates/participation/tex/final_sheet.tex @@ -0,0 +1,89 @@ +{% load i18n %} + +\documentclass[10pt,a4paper,landscape]{article} + +\usepackage[T1]{fontenc} +\usepackage[utf8x]{inputenc} +\usepackage[french]{babel} + +\usepackage[a4paper]{geometry} +\usepackage{graphicx} +\usepackage{amsmath} +\usepackage{amsfonts} +\usepackage{amssymb} +\usepackage{amsthm} +\usepackage{hyperref} +\usepackage{color} +\usepackage{mathtools} +\usepackage{comment} +\usepackage{array} +\usepackage{multirow} +\usepackage{footnote} +\usepackage{tabularx} +\usepackage{xintexpr} + +\addtolength{\textwidth}{6cm} +\addtolength{\oddsidemargin}{-3cm} +\addtolength{\textheight}{2cm} +\addtolength{\topmargin}{-0.5cm} +\setlength{\parindent}{0mm} + +\DeclareUnicodeCharacter{22C5}{\textperiodcentered{}} + +\newcommand{\tfjm}{$\mathbb{TFJM}^2$} +\renewcommand{\leq}{\leqslant} +\def\tfjmedition{~{{ tfjm_number }}} + +\begin{document} +\pagenumbering{gobble} + +\centering + +{% if TFJM.APP == "TFJM" %} + \Large {\bf \tfjmedition$^{e}$ Tournoi Fran\c cais des Jeunes Math\'ematiciennes et Math\'ematiciens \tfjm}\\ +{% else %} + \Large {\bf \tfjmedition$^{st}$ European Tournament of Enthusiastic Apprentice Mathematicians}\\ +{% endif %} +\vspace{3mm} +{% trans "Round" %} {{ pool.round }} \;-- {% trans "Pool" %} {{ pool.get_letter_display }}{% if pool.participations.count == 5 %} \;-- {{ pool.get_room_display }}{% endif %} \;-- {% if pool.round == 1 %}{{ pool.tournament.date_first_phase }}{% elif pool.round == 2 %}{{ pool.tournament.date_second_phase }}{% else %}{{ pool.tournament.date_third_phase }}{% endif %} + + +\vspace{15mm} + + +\begin{tabular}{|p{40mm}{% for passage in passages.all %}{% if passages.count <= 3 %}|p{3cm}|p{3cm}{% else %}|p{2.8cm}|p{2.5cm}{% endif %}{% endfor %}|}\hline +\multirow{2}{40mm}{\LARGE {% trans "Role" %}} {% for passage in passages.all %}& \multicolumn{2}{c|}{ \Large {% trans "Problem" %} {{ passage.solution_number }}}{% endfor %} \\ \cline{2-{{ passages.count|add:passages.count|add:1 }}} +{% for passage in passages.all %}& \hspace{4mm} {\Large {% trans "Writing"|upper %}} & \hspace{4mm} {\Large {% trans "Oral"|upper %}}{% endfor %} \\ \hline +\multirow{2}{35mm}{\LARGE {% trans "Reporter" %}} {% for passage in passages.all %}& \multicolumn{2}{c|}{\Large {{ passage.reporter.team.trigram }}}{% endfor %} \\ \cline{2-{{ passages.count|add:passages.count|add:1 }}} +{% for passage in passages.all %} +& \phantom{asd asd} \phantom{asd asd} \centering \normalsize$0\leq x\leq {% if TFJM.APP == "TFJM" %}20{% else %}10{% endif %}$ +& \phantom{asd asd} \phantom{asd asd} \centering \normalsize$0\leq x\leq {% if TFJM.APP == "TFJM" %}20{% else %}10{% endif %}$ +{% endfor %} & \hline +\multirow{2}{35mm}{\LARGE {% trans "Opponent" %}} {% for passage in passages.all %}& \multicolumn{2}{c|}{\Large {{ passage.opponent.team.trigram }}}{% endfor %} \\ \cline{2-{{ passages.count|add:passages.count|add:1 }}} +{% for passage in passages.all %} +& \phantom{asd asd} \phantom{asd asd} \centering \normalsize$0\leq x\leq 10$ +& \phantom{asd asd} \phantom{asd asd} \centering \normalsize$0\leq x\leq 10$ +{% endfor %} & \hline +\multirow{2}{35mm}{\LARGE {% trans "Reviewer" %}} {% for passage in passages.all %}& \multicolumn{2}{c|}{\Large {{ passage.reviewer.team.trigram }}}{% endfor %} \\ \cline{2-{{ passages.count|add:passages.count|add:1 }}} +{% for passage in passages.all %} +& \phantom{asd asd} \phantom{asd asd} \centering \normalsize$0\leq x\leq 10$ +& \phantom{asd asd} \phantom{asd asd} \centering \normalsize$0\leq x\leq 10$ +{% endfor %} & \hline +{% if TFJM.APP == "ETEAM" and pool.participations.count >= 4 %} + \multirow{2}{35mm}{\LARGE {% trans "Observer" %}} {% for passage in passages.all %}& \multicolumn{2}{c|}{\Large {{ passage.observer.team.trigram }}}{% endfor %} \\ \cline{2-{{ passages.count|add:passages.count|add:1 }}} + {% for passage in passages.all %} + & \phantom{asd asd} \phantom{asd asd} \centering \normalsize$0\leq x\leq 10$ + & \phantom{asd asd} \phantom{asd asd} \centering \normalsize$0\leq x\leq 10$ + {% endfor %} & \hline +{% endif %} +\end{tabular} + +\vspace{15mm} + +\LARGE {% trans "name"|capfirst %} {% trans "Juree"|lower %} : +{% if jury %}\underline{ {{ jury.user.first_name|safe }} {{ jury.user.last_name|safe }} }{% else %}\underline{\phantom{Phrase suffisamment longue pour le nom}}{% endif %} +$\qquad$ {% trans "Signature" %} : \underline{\phantom{Phrase moins longue}} + +\newpage +%} +\end{document} diff --git a/participation/templates/participation/tex/finale.tex b/participation/templates/participation/tex/finale.tex deleted file mode 100644 index 4e6feff..0000000 --- a/participation/templates/participation/tex/finale.tex +++ /dev/null @@ -1,74 +0,0 @@ -\documentclass[10pt,a4paper,landscape]{article} - -\usepackage[T1]{fontenc} -\usepackage[utf8x]{inputenc} -\usepackage[french]{babel} - -\usepackage[a4paper]{geometry} -\usepackage{graphicx} -\usepackage{amsmath} -\usepackage{amsfonts} -\usepackage{amssymb} -\usepackage{amsthm} -\usepackage{hyperref} -\usepackage{color} -\usepackage{mathtools} -\usepackage{comment} -\usepackage{array} -\usepackage{multirow} -\usepackage{footnote} -\usepackage{tabularx} -\usepackage{xintexpr} - -\addtolength{\textwidth}{6cm} -\addtolength{\oddsidemargin}{-3cm} -\addtolength{\textheight}{2cm} -\addtolength{\topmargin}{-0.5cm} -\setlength{\parindent}{0mm} - -\newcommand{\tfjm}{$\mathbb{TFJM}^2$} -\renewcommand{\leq}{\leqslant} -\def\tfjmedition{~{{ tfjm_number }}} - -\begin{document} -\pagenumbering{gobble} - -\centering - -\Large {\bf \tfjmedition$^{e}$ Tournoi Fran\c cais des Jeunes Math\'ematiciennes et Math\'ematiciens \tfjm}\\ -\vspace{3mm} -Tour {{ pool.round }} \;-- Poule {{ pool.get_letter_display }}{% if pool.participations.count == 5 %} \;-- {{ pool.get_room_display }}{% endif %} \;-- {% if pool.round == 1 %}{{ pool.tournament.date_first_phase }}{% elif pool.round == 2 %}{{ pool.tournament.date_second_phase }}{% else %}{{ pool.tournament.date_third_phase }}{% endif %} - - -\vspace{15mm} - - -\begin{tabular}{|p{40mm}{% for passage in passages.all %}{% if passages.count == 3 %}|p{3cm}|p{3cm}{% else %}|p{2.5cm}|p{2.5cm}{% endif %}{% endfor %}|}\hline -\multirow{2}{40mm}{\LARGE R\^ole} {% for passage in passages.all %}& \multicolumn{2}{c|}{ \Large Probl\`eme {{ passage.solution_number }}}{% endfor %} \\ \cline{2-{{ passages.count|add:passages.count|add:1 }}} -{% for passage in passages.all %}& \hspace{4mm} {\Large \'ECRIT} & \hspace{4mm} {\Large ORAL}{% endfor %} \\ \hline -\multirow{2}{35mm}{\LARGE D\'efenseur\textperiodcentered{}se} {% for passage in passages.all %}& \multicolumn{2}{c|}{\Large {{ passage.reporter.team.trigram }}}{% endfor %} \\ \cline{2-{{ passages.count|add:passages.count|add:1 }}} -{% for passage in passages.all %} -& \phantom{asd asd} \phantom{asd asd} \centering \normalsize$0\leq x\leq 20$ -& \phantom{asd asd} \phantom{asd asd} \centering \normalsize$0\leq x\leq 20$ -{% endfor %} & \hline -\multirow{2}{35mm}{\LARGE Opposant\textperiodcentered{}e} {% for passage in passages.all %}& \multicolumn{2}{c|}{\Large {{ passage.opponent.team.trigram }}}{% endfor %} \\ \cline{2-{{ passages.count|add:passages.count|add:1 }}} -{% for passage in passages.all %} -& \phantom{asd asd} \phantom{asd asd} \centering \normalsize$0\leq x\leq 10$ -& \phantom{asd asd} \phantom{asd asd} \centering \normalsize$0\leq x\leq 10$ -{% endfor %} & \hline -\multirow{2}{35mm}{\LARGE Rapporteur\textperiodcentered{}rice} {% for passage in passages.all %}& \multicolumn{2}{c|}{\Large {{ passage.reviewer.team.trigram }}}{% endfor %} \\ \cline{2-{{ passages.count|add:passages.count|add:1 }}} -{% for passage in passages.all %} -& \phantom{asd asd} \phantom{asd asd} \centering \normalsize$0\leq x\leq 10$ -& \phantom{asd asd} \phantom{asd asd} \centering \normalsize$0\leq x\leq 10$ -{% endfor %} & \hline -\end{tabular} - -\vspace{15mm} - -\LARGE Nom jur\'e\textperiodcentered{}e : -{% if jury %}\underline{ {{ jury.user.first_name|safe }} {{ jury.user.last_name|safe }} }{% else %}\underline{\phantom{Phrase suffisamment longue pour le nom}}{% endif %} -$\qquad$ Signature : \underline{\phantom{Phrase moins longue}} - -\newpage -%} -\end{document} diff --git a/participation/templates/participation/tex/scale_eteam.tex b/participation/templates/participation/tex/scale_eteam.tex new file mode 100644 index 0000000..f05defa --- /dev/null +++ b/participation/templates/participation/tex/scale_eteam.tex @@ -0,0 +1,149 @@ +{% load i18n %} + +\documentclass[11pt,a4paper,landscape]{article} + +\usepackage[T1]{fontenc} +\usepackage[utf8x]{inputenc} +\usepackage[english]{babel} + +\usepackage[a4paper]{geometry} +\usepackage{graphicx} +\usepackage{amsmath} +\usepackage{amsfonts} +\usepackage{amssymb} +\usepackage{amsthm} +\usepackage{hyperref} +\usepackage{color} +\usepackage{mathtools} +\usepackage{comment} +\usepackage{array} +\usepackage{multirow} +\usepackage{footnote} +\usepackage{xintexpr} + +\addtolength{\textwidth}{4cm} +\setlength{\parindent}{0mm} + +\geometry{left=1.6cm,right=1.6cm,top=1.2cm,bottom=1.2cm} + +\newcommand{\tfjm}{$\mathbb{TFJM}^2$} +\pagestyle{empty} +\renewcommand{\leq}{\leqslant} +\def\tfjmedition{~{{ tfjm_number }}} + +\begin{document} +\thispagestyle{empty} + + +\begin{center} +{% if TFJM.APP == "TFJM" %} + \Large {\bf \tfjmedition$^{e}$ Tournoi Fran\c cais des Jeunes Math\'ematiciennes et Math\'ematiciens \tfjm}\\ +{% else %} + \Large {\bf \tfjmedition$^{st}$ European Tournament of Enthusiastic Apprentice Mathematicians}\\ +{% endif %} +\end{center} +\vspace{3mm} + +\begin{center} +\begin{itemize} +{% for passage in passages.all %} +\item {% trans "Reporter" %} {% trans "for passage" %} {{ forloop.counter }} : \underline{\texttt{~{{ passage.reporter.team.trigram }}~}} $\qquad$ {% trans "problem" %} \underline{~{{ passage.solution_number }}~} +{% endfor %} +\end{itemize} +\end{center} + +\vspace{6mm} + +%%%%%%%%%%%%%%%%%%%%%DEFENSEUR +\begin{tabular}{|c|p{25mm}|p{11cm}|c|{% for passage in passages.all %}p{2cm}|{% endfor %}}\hline +\multicolumn{4}{|l|}{The {\bf {% trans "Reporter" %}} \normalsize presents their ideas and major results for the solution of the problem.} {% for passage in passages.all %}& P.{{ forloop.counter }} - {{ passage.reporter.team.trigram }} {% endfor %}\\ \hline \hline + +%ECRIT +\multirow{6}{3mm}{\centering \bf W\\ R\\ I\\ T\\ I \\ N \\ G} & \multirow{3}{20mm}{ {% trans "Scientific part" %}} & {% trans "Depth and difficulty of the elements presented" %} & [0,3] {{ esp|safe }}\\ \cline{3-{{ passages.count|add:4 }}} +&& {% trans "Presence, accuracy and correctness of proofs and algorithms" %} & [0,3] {{ esp|safe }}\\ \cline{3-{{ passages.count|add:4 }}} +&& {% trans "Relevance, efficiency and elegance" %} & [0,1] {{ esp|safe }}\\ \cline{2-{{ passages.count|add:4 }}} +&\multirow{3}{20mm}{ {% trans "Formal aspects" %}}& {% trans "Clarity of reasoning (explanations, examples, illustrations, diagrams, etc.)" %} & [0,2]{{ esp|safe }} \\ \cline{3-{{ passages.count|add:4 }}} +&& {% trans "Presentation (readability, compliance with the format, etc.)" %} & [0,1] {{ esp|safe }}\\ \cline{2-{{ passages.count|add:4 }}} +&\multicolumn{3}{|l|}{\bf {% trans "TOTAL WRITING" %} (/10)} {{ esp|safe }} \\ \hline \hline + +%ORAL +\multirow{8}{3mm}{\centering\bf O\\ R\\ A\\ L} & \multirow{4}{20mm}{Oral presentation} & {% trans "Understanding of the material presented, knowledge and mastery of the mathematical subjects used during the presentation" %}} & [0,2] {{ esp|safe }}\\ \cline{3-{{ passages.count|add:4 }}} +&& {% trans "Relevance of choices (proofs, examples, depth in relation to the written solution)" %} & [0,2] {{ esp|safe }}\\ \cline{3-{{ passages.count|add:4 }}} +&& {% trans "Pedagogy and clarity of speech (explanations, illustrations, etc.)" %} & [0,1] {{ esp|safe }}\\ \cline{3-{{ passages.count|add:4 }}} +&& {% trans "Brevity and cleanliness of the presentation" %} & [0,1] {{ esp|safe }}\\ \cline{2-{{ passages.count|add:4 }}} +&\multirow{2}{20mm}{ {% trans "Debates " %}} & {% trans "Correct answers to the questions asked" %} & [0,2] {{ esp|safe }} \\ \cline{3-{{ passages.count|add:4 }}} +&& {% trans "Ability to move the debate forward (explaining the limits of one's knowledge, conjectures, live research, etc.)" %} & [0,2] {{ esp|safe }} \\ \cline{2-{{ passages.count|add:4 }}} +&\multirow{2}{20mm}{ {% trans "Penalty" %}} & {% trans "Ethical behaviour" %} & [--3,0] {{ esp|safe }} \\ \cline{3-{{ passages.count|add:4 }}} +&& {% trans "Correspondence to the written material" %} & [--3,0] {{ esp|safe }} \\ \cline{2-{{ passages.count|add:4 }}} +&\multicolumn{3}{|l|}{\bf {% trans "TOTAL ORAL" %} (/10)} {{ esp|safe }} \\ \hline + +\end{tabular} + +\newpage + +%%%%%%%%%%%%%%%%%OPPOSANT⋅E +\begin{tabular}{|c|p{25mm}|p{11cm}|c{% for passage in passages.all %}|p{2cm}{% endfor %}|}\hline +\multicolumn{4}{|l|}{The {\bf {% trans "Opponent" %}} \normalsize provides a critical analysis of the solution and presentation.} +{% for passage in passages.all %}& P.{{ forloop.counter }} - {{ passage.opponent.team.trigram }} {% endfor %} \\ \hline \hline + +%ECRIT +\multirow{4}{3mm}{\centering\bf W\\ R\\ I\\ T\\ I \\ N \\ G} &\multirow{3}{20mm}{ {% trans "Scientific part" %}} & {% trans "Critical thinking and perspective on the proposed solution" %} & [0,3] {{ esp|safe }}\\ \cline{3-{{ passages.count|add:4 }}} +&& {% trans "Validity of errors and positive points raised" %} & [0,2] {{ esp|safe }}\\ \cline{3-{{ passages.count|add:4 }}} +&& {% trans "Identifying and prioritizing the most important errors and positive points" %} & [0,3] {{ esp|safe }}\\ \cline{2-{{ passages.count|add:4 }}} +& {% trans "Formal aspects" %} & {% trans "Presentation (readability, compliance with the format, etc.)" %} & [0,2] {{ esp|safe }}\\ \cline{2-{{ passages.count|add:4 }}} +&\multicolumn{3}{|l|}{\bf {% trans "TOTAL WRITING" %} (/10)} {{ esp|safe }} \\ \hline \hline + +%ORAL +\multirow{6}{3mm}{\centering\bf O\\ R\\ A\\ L} & \multirow{3}{20mm}{ {% trans "Discussion" %}} & {% trans "Relevance of questions (importance of the topics covered, points raised)" %} & [0,3] {{ esp|safe }}\\ \cline{3-{{ passages.count|add:4 }}} +&& {% trans "Questioning skills (formulation of questions, reaction to answers, articulation between questions, time management)" %} & [0,2] {{ esp|safe }}\\ \cline{3-{{ passages.count|add:4 }}} +&& {% trans "Ability to assess the quality of the Defender's presentation (presentation and answers to the Opponent) (0-2)" %} & [0,2] {{ esp|safe }}\\ \cline{2-{{ passages.count|add:4 }}} +& {% trans "Understanding" %} & {% trans "Answers to the questions of the Reporter and the jury (substance and ability to move the debate forward)" %} & [0,3] {{ esp|safe }}\\ \cline{2-{{ passages.count|add:4 }}} +& {% trans "Penalty" %} & {% trans "Ethical behavior" %} & [-3,0] {{ esp|safe }}\\ \cline{2-{{ passages.count|add:4 }}} +&\multicolumn{3}{|l|}{\bf {% trans "TOTAL ORAL" %} (/10)} {{ esp|safe }}\\ \hline +\end{tabular} + +\vfill + +%%%%%%%%%%%%%%%%%%%%%%RAPPORTEUR⋅RICE +\begin{tabular}{|c|p{25mm}|p{11cm}|c{% for passage in passages.all %}|p{2cm}{% endfor %}|}\hline +\multicolumn{4}{|l|}{The {\bf {% trans "Reviewer" %}} \normalsize evaluates the debate between the Reporter and the Opponent.} {% for passage in passages.all %}& P.{{ forloop.counter }} - {{ passage.reviewer.team.trigram }} {% endfor %}\\ \hline \hline + +%ECRIT +\multirow{4}{3mm}{\centering\bf W\\ R\\ I\\ T\\ I \\ N \\ G} &\multirow{3}{20mm}{ {% trans "Scientific part" %}} & {% trans "Critical thinking and perspective on the proposed solution" %} & [0,3] {{ esp|safe }}\\ \cline{3-{{ passages.count|add:4 }}} +&& {% trans "Validity of errors and positive points raised" %} & [0,2] {{ esp|safe }}\\ \cline{3-{{ passages.count|add:4 }}} +&& {% trans "Identifying and prioritizing the most important errors and positive points" %} & [0,3] {{ esp|safe }}\\ \cline{2-{{ passages.count|add:4 }}} +& {% trans "Formal aspects" %} & {% trans "Presentation (readability, compliance with the format, etc.)" %} & [0,2] {{ esp|safe }}\\ \cline{2-{{ passages.count|add:4 }}} +&\multicolumn{3}{|l|}{\bf {% trans "TOTAL WRITING" %} (/10)} {{ esp|safe }} \\ \hline \hline + +%ORAL +\multirow{6}{3mm}{\centering\bf O\\ R\\ A\\ L} & \multirow{3}{20mm}{ {% trans "Discussion" %}} & {% trans "Taking the debate to a higher level (through the topics covered, the relevance of the questions asked, the points raised, time management)" %} & [0,3] {{ esp|safe }}\\ \cline{3-{{ passages.count|add:4 }}} +&& {% trans "Creating a constructive dialogue between the participants (formulation of questions, reaction to answers, articulation between questions, speaking time)" %} & [0,3] {{ esp|safe }}\\ \cline{3-{{ passages.count|add:4 }}} +&& {% trans "Ability to assess the quality of the exchanges (Reporter-Opponent, and three-way)" %} & [0,2] {{ esp|safe }}\\ \cline{2-{{ passages.count|add:4 }}} +& {% trans "Understanding" %} & {% trans "Answers to the jury's questions (substance and ability to move the debate forward)" %} & [0,2] {{ esp|safe }}\\ \cline{2-{{ passages.count|add:4 }}} +& {% trans "Penalty" %} & {% trans "Ethical behavior" %} & [-3,0] {{ esp|safe }}\\ \cline{2-{{ passages.count|add:4 }}} +&\multicolumn{3}{|l|}{\bf {% trans "TOTAL ORAL" %} (/10)} {{ esp|safe }}\\ \hline +\end{tabular} + +\vfill + +{% if TFJM.APP == "ETEAM" and pool.participations.count >= 4 %} +%%%%%%%%%%%%%%%%%%%%%%OBSERVATEUR⋅RICE +\begin{tabular}{|c|p{25mm}|p{11cm}|c{% for passage in passages.all %}|p{2cm}{% endfor %}|}\hline +\multicolumn{4}{|l|}{The {\bf {% trans "Observer" %}} \normalsize makes useful remarks on crucial points missed by the other participants.} {% for passage in passages.all %}& P.{{ forloop.counter }} - {{ passage.observer.team.trigram }} {% endfor %}\\ \hline \hline + +%ECRIT +\multirow{4}{3mm}{\centering\bf W\\ R\\ I\\ T\\ I \\ N \\ G} &\multirow{3}{20mm}{ {% trans "Scientific part" %}} & {% trans "Critical thinking and perspective on the proposed solution" %} & [0,3] {{ esp|safe }}\\ \cline{3-{{ passages.count|add:4 }}} +&& {% trans "Validity of errors and positive points raised" %} & [0,2] {{ esp|safe }}\\ \cline{3-{{ passages.count|add:4 }}} +&& {% trans "Identifying and prioritizing the most important errors and positive points" %} & [0,3] {{ esp|safe }}\\ \cline{2-{{ passages.count|add:4 }}} +& {% trans "Formal aspects" %} & {% trans "Presentation (readability, compliance with the format, etc.)" %} & [0,2] {{ esp|safe }}\\ \cline{2-{{ passages.count|add:4 }}} +&\multicolumn{3}{|l|}{\bf {% trans "TOTAL WRITING" %} (/10)} {{ esp|safe }} \\ \hline \hline + +%ORAL +\multirow{6}{3mm}{\centering\bf O\\ R\\ A\\ L} & {% trans "Scientific part" %} & {% trans "Significance of the remarks and questions (positive mark only if the other players omitted crucial matter)" %} & [--5,5] {{ esp|safe }} \\ \cline{2-{{ passages.count|add:4 }}} +& {% trans "Formal aspects" %} & {% trans "Relevance of the remarks and questions (positive mark only if the other players omitted crucial matter)" %} & [--5,5] {{ esp|safe }}\\ \cline{2-{{ passages.count|add:4 }}} +& {% trans "Penalty" %} & {% trans "Ethical behavior" %} & [-3,0] {{ esp|safe }}\\ \cline{2-{{ passages.count|add:4 }}} +&\multicolumn{3}{|l|}{\bf {% trans "TOTAL ORAL" %} (/10)} {{ esp|safe }}\\ \hline +\end{tabular} +{% endif %} + +\end{document} diff --git a/participation/templates/participation/tex/bareme.tex b/participation/templates/participation/tex/scale_tfjm.tex similarity index 78% rename from participation/templates/participation/tex/bareme.tex rename to participation/templates/participation/tex/scale_tfjm.tex index d552e0d..df9b799 100644 --- a/participation/templates/participation/tex/bareme.tex +++ b/participation/templates/participation/tex/scale_tfjm.tex @@ -24,6 +24,8 @@ \geometry{left=1.6cm,right=1.6cm,top=1.2cm,bottom=1.2cm} +\DeclareUnicodeCharacter{22C5}{\textperiodcentered{}} + \newcommand{\tfjm}{$\mathbb{TFJM}^2$} \pagestyle{empty} \renewcommand{\leq}{\leqslant} @@ -41,7 +43,7 @@ \begin{center} \begin{itemize} {% for passage in passages.all %} -\item D\'efenseur\textperiodcentered{}se au passage {{ forloop.counter }} : \underline{\texttt{~{{ passage.reporter.team.trigram }}~}} $\qquad$ probl\`eme \underline{~{{ passage.solution_number }}~} +\item D\'efenseur⋅se au passage {{ forloop.counter }} : \underline{\texttt{~{{ passage.reporter.team.trigram }}~}} $\qquad$ probl\`eme \underline{~{{ passage.solution_number }}~} {% endfor %} \end{itemize} \end{center} @@ -50,7 +52,7 @@ %%%%%%%%%%%%%%%%%%%%%DEFENSEUR \begin{tabular}{|c|p{24mm}|p{11cm}|c|{% for passage in passages.all %}p{2cm}|{% endfor %}}\hline -\multicolumn{4}{|l|}{Læ {\bf D\'efenseur\textperiodcentered{}se} \normalsize pr\'esente les id\'ees et r\'esultats principaux pour la solution du probl\`eme.} {% for passage in passages.all %}& P.{{ forloop.counter }} - {{ passage.reporter.team.trigram }} {% endfor %}\\ \hline \hline +\multicolumn{4}{|l|}{Læ {\bf D\'efenseur⋅se} \normalsize pr\'esente les id\'ees et r\'esultats principaux pour la solution du probl\`eme.} {% for passage in passages.all %}& P.{{ forloop.counter }} - {{ passage.reporter.team.trigram }} {% endfor %}\\ \hline \hline %ECRIT \multirow{6}{3mm}{\centering \bf\'E\\ C\\ R\\ I\\ T} & \multirow{3}{20mm}{Partie scientifique} & Profondeur et difficulté des éléments présentés & [0,6] {{ esp|safe }}\\ \cline{3-{{ passages.count|add:4 }}} @@ -77,7 +79,7 @@ %%%%%%%%%%%%%%%%%OPPOSANT \begin{tabular}{|c|p{24mm}|p{11cm}|c{% for passage in passages.all %}|p{2cm}{% endfor %}|}\hline -\multicolumn{4}{|l|}{L' {\bf Opposant\textperiodcentered{}e} \normalsize fournit une analyse critique de la solution et de la pr\'esentation.} +\multicolumn{4}{|l|}{L' {\bf Opposant⋅e} \normalsize fournit une analyse critique de la solution et de la pr\'esentation.} {% for passage in passages.all %}& P.{{ forloop.counter }} - {{ passage.opponent.team.trigram }} {% endfor %} \\ \hline \hline %ECRIT @@ -88,10 +90,10 @@ &\multicolumn{3}{|l|}{\bf TOTAL \'ECRIT (/10)} {{ esp|safe }} \\ \hline \hline %ORAL -\multirow{6}{3mm}{\centering\bf O\\ R\\ A\\ L} & \multirow{3}{20mm}{Questions et discours de l'opposant\textperiodcentered{}e} & Pertinence des questions (importance des sujets abordés, des points soulevés) & [0,3] {{ esp|safe }}\\ \cline{3-{{ passages.count|add:4 }}} +\multirow{6}{3mm}{\centering\bf O\\ R\\ A\\ L} & \multirow{3}{20mm}{Questions et discours de l'opposant⋅e} & Pertinence des questions (importance des sujets abordés, des points soulevés) & [0,3] {{ esp|safe }}\\ \cline{3-{{ passages.count|add:4 }}} && Gestion de l'échange (formulation des questions, réaction aux réponses, articulation entre les questions, gestion du temps) & [0,2] {{ esp|safe }}\\ \cline{3-{{ passages.count|add:4 }}} && Capacité à évaluer la qualité de la prestation de læ Défenseur⋅se (présentation et réponses à l'Opposant⋅e) & [0,2] {{ esp|safe }}\\ \cline{2-{{ passages.count|add:4 }}} -&& Réponses aux questions de læ Rapporteur\textperiodcentered{}rice et du jury (fond et capacité à faire avancer le débat) & [0,3] {{ esp|safe }}\\ \cline{2-{{ passages.count|add:4 }}} +&& Réponses aux questions de læ Rapporteur⋅rice et du jury (fond et capacité à faire avancer le débat) & [0,3] {{ esp|safe }}\\ \cline{2-{{ passages.count|add:4 }}} & Malus & Attitude irrespectueuse ? & [-3,0] {{ esp|safe }}\\ \cline{2-{{ passages.count|add:4 }}} &\multicolumn{3}{|l|}{\bf TOTAL ORAL (/10)} {{ esp|safe }}\\ \hline \end{tabular} @@ -100,7 +102,7 @@ %%%%%%%%%%%%%%%%%%%%%%RAPPORTEUR.RICE \begin{tabular}{|c|p{24mm}|p{11cm}|c{% for passage in passages.all %}|p{2cm}{% endfor %}|}\hline -\multicolumn{4}{|l|}{Læ {\bf Rapporteur\textperiodcentered{}rice} \normalsize \'evalue le d\'ebat entre læ D\'efenseur\textperiodcentered{}se et l'Opposant\textperiodcentered{}e.} {% for passage in passages.all %}& P.{{ forloop.counter }} - {{ passage.reviewer.team.trigram }} {% endfor %}\\ \hline \hline +\multicolumn{4}{|l|}{Læ {\bf Rapporteur⋅rice} \normalsize \'evalue le d\'ebat entre læ D\'efenseur⋅se et l'Opposant⋅e.} {% for passage in passages.all %}& P.{{ forloop.counter }} - {{ passage.reviewer.team.trigram }} {% endfor %}\\ \hline \hline %ECRIT \multirow{4}{3mm}{\centering\bf\'E\\ C\\ R\\ I\\ T} &\multirow{3}{20mm}{Partie scientifique} & Recul et esprit critique par rapport à la solution proposée & [0,3] {{ esp|safe }}\\ \cline{3-{{ passages.count|add:4 }}} @@ -110,10 +112,10 @@ &\multicolumn{3}{|l|}{\bf TOTAL \'ECRIT (/10)} {{ esp|safe }}\\ \hline \hline %ORAL -\multirow{6}{3mm}{\centering\bf O\\ R\\ A\\ L} & \multirow{3}{20mm}{Questions et discours de læ rapporteur\textperiodcentered{}rice} & \footnotesize Faire prendre de la hauteur au débat (par les sujets abordés, la pertinence des questions posées, les points soulevés, gestion du temps) & [0,3] {{ esp|safe }}\\ \cline{3-{{ passages.count|add:4 }}} +\multirow{6}{3mm}{\centering\bf O\\ R\\ A\\ L} & \multirow{3}{20mm}{Questions et discours de læ rapporteur⋅rice} & \footnotesize Faire prendre de la hauteur au débat (par les sujets abordés, la pertinence des questions posées, les points soulevés, gestion du temps) & [0,3] {{ esp|safe }}\\ \cline{3-{{ passages.count|add:4 }}} && \footnotesize Créer un échange constructif entre les participants (formulation des questions, réaction aux réponses, articulation entre les questions, circulation de la parole) & [0,3] {{ esp|safe }}\\ \cline{3-{{ passages.count|add:4 }}} && Capacité à évaluer la qualité des échanges (Défenseur⋅se-Opposant⋅e et à trois) & [0,2] {{ esp|safe }}\\ \cline{2-{{ passages.count|add:4 }}} -&& Réponses aux questions de læ Rapporteur\textperiodcentered{}rice et du jury (fond et capacité à faire avancer le débat) & [0,2] {{ esp|safe }}\\ \cline{2-{{ passages.count|add:4 }}} +&& Réponses aux questions de læ Rapporteur⋅rice et du jury (fond et capacité à faire avancer le débat) & [0,2] {{ esp|safe }}\\ \cline{2-{{ passages.count|add:4 }}} & Malus & Attitude irrespectueuse ? & [-3,0] {{ esp|safe }}\\ \cline{2-{{ passages.count|add:4 }}} &\multicolumn{3}{|l|}{\bf TOTAL ORAL (/10)} {{ esp|safe }}\\ \hline \end{tabular} diff --git a/participation/views.py b/participation/views.py index 2de27f2..5cb9621 100644 --- a/participation/views.py +++ b/participation/views.py @@ -1838,11 +1838,14 @@ class NotationSheetTemplateView(VolunteerMixin, DetailView): context['esp'] = passages.count() * '&' if self.request.user.registration in self.object.juries.all() and 'blank' not in self.request.GET: context['jury'] = self.request.user.registration - context['tfjm_number'] = timezone.now().year - 2010 + context['tfjm_number'] = timezone.now().year - settings.FIRST_EDITION + 1 return context def render_to_response(self, context, **response_kwargs): - tex = render_to_string(self.template_name, context=context, request=self.request) + translation.activate(settings.PREFERRED_LANGUAGE_CODE) + + template_name = self.get_template_names()[0] + tex = render_to_string(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) @@ -1851,15 +1854,16 @@ class NotationSheetTemplateView(VolunteerMixin, DetailView): process.wait() return FileResponse(streaming_content=open(os.path.join(temp_dir, "texput.pdf"), "rb"), content_type="application/pdf", - filename=self.template_name.split("/")[-1][:-3] + "pdf") + filename=template_name.split("/")[-1][:-3] + "pdf") class ScaleNotationSheetTemplateView(NotationSheetTemplateView): - template_name = 'participation/tex/bareme.tex' + def get_template_names(self): + return [f"participation/tex/scale_{settings.TFJM_APP.lower()}.tex"] class FinalNotationSheetTemplateView(NotationSheetTemplateView): - template_name = 'participation/tex/finale.tex' + template_name = "participation/tex/final_sheet.tex" class NotationSheetsArchiveView(VolunteerMixin, DetailView): @@ -1891,6 +1895,8 @@ class NotationSheetsArchiveView(VolunteerMixin, DetailView): return self.handle_no_permission() def get(self, request, *args, **kwargs): + translation.activate(settings.PREFERRED_LANGUAGE_CODE) + if 'pool_id' in kwargs: pool = self.get_object() tournament = pool.tournament @@ -1906,15 +1912,15 @@ class NotationSheetsArchiveView(VolunteerMixin, DetailView): with ZipFile(output, "w") as zf: for pool in pools: prefix = f"{pool.short_name}/" if len(pools) > 1 else "" - for template_name in ['bareme', 'finale']: + for template_name in [f"scale_{settings.TFJM_APP.lower()}", "final_sheet"]: juries = list(pool.juries.all()) + [None] for jury in juries: - if jury is not None and template_name == "bareme": + if jury is not None and template_name.startswith("scale"): continue context = {'jury': jury, 'pool': pool, - 'tfjm_number': timezone.now().year - 2010} + 'tfjm_number': timezone.now().year - settings.FIRST_EDITION + 1} passages = pool.passages.all() context['passages'] = passages @@ -1931,7 +1937,7 @@ class NotationSheetsArchiveView(VolunteerMixin, DetailView): os.path.join(temp_dir, "texput.tex"), ]) process.wait() - sheet_name = f"Barème pour la poule {pool.short_name}" if template_name == "bareme" \ + sheet_name = f"Barème pour la poule {pool.short_name}" if template_name.startswith("scale") \ else (f"Feuille de notation pour la poule {pool.short_name}" f" - {str(jury) if jury else 'Vierge'}") diff --git a/tfjm/settings.py b/tfjm/settings.py index e20caf2..bd36b51 100644 --- a/tfjm/settings.py +++ b/tfjm/settings.py @@ -358,6 +358,7 @@ if TFJM_APP == "TFJM": VACCINE_SHEET_REQUIRED = True MOTIVATION_LETTER_REQUIRED = True SUGGEST_ANIMATH = True + FIRST_EDITION = 2011 PROBLEMS = [ "Triominos", @@ -382,6 +383,7 @@ elif TFJM_APP == "ETEAM": VACCINE_SHEET_REQUIRED = False MOTIVATION_LETTER_REQUIRED = False SUGGEST_ANIMATH = False + FIRST_EDITION = 2024 PROBLEMS = [ "Exploring Flatland",