From 59428d805fcf5b45e4fe255090106dab7d1a39ce Mon Sep 17 00:00:00 2001
From: Martin Mares <mj@ucw.cz>
Date: Mon, 6 Feb 2023 13:26:11 +0100
Subject: [PATCH] =?UTF-8?q?V=C3=BDpis=20e-mail=C5=AF=20ukazuje=20=C3=BA?=
 =?UTF-8?q?=C4=8Dastn=C3=ADky=20bez=20garant=C5=AF=20klikac=C3=AD=20v?=
 =?UTF-8?q?=C4=8Detn=C4=9B=20=C5=A1koly?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 mo/web/org_contest.py                  | 16 ++++++++--------
 mo/web/templates/org_generic_list.html |  8 ++++++--
 2 files changed, 14 insertions(+), 10 deletions(-)

diff --git a/mo/web/org_contest.py b/mo/web/org_contest.py
index 75c1723e..0a0fabf5 100644
--- a/mo/web/org_contest.py
+++ b/mo/web/org_contest.py
@@ -592,14 +592,14 @@ def org_generic_list(round_id: Optional[int] = None, hier_id: Optional[int] = No
     if format == "":
         table = None
         emails = None
-        missing_org_warnings = None
+        missing_org_pants = None
         mailto_link = None
         if request.endpoint == 'org_generic_list_emails':
             if contest:
                 subj = f'{contest.round.name} {contest.round.category} {contest.place.name_locative()}'
             else:
                 subj = f'{round.name} kategorie {round.category}'
-            (emails, mailto_link, missing_org_warnings) = \
+            (emails, mailto_link, missing_org_pants) = \
                 get_contestant_emails(query, mailto_subject=subj,
                                       pant_email=filter.pant_email.data,
                                       school_email=filter.school_email.data)
@@ -614,7 +614,7 @@ def org_generic_list(round_id: Optional[int] = None, hier_id: Optional[int] = No
             contest=contest, round=round, site=ctx.site,
             table=table, emails=emails, mailto_link=mailto_link,
             filter=filter, count=count, action_form=action_form,
-            missing_org_warnings=missing_org_warnings,
+            missing_org_pants=missing_org_pants,
         )
     else:
         table = make_contestant_table(query, round, add_school_orgs=True)
@@ -747,7 +747,7 @@ def get_contestant_emails(query: Query,
                           mailto_subject: str,
                           pant_email: bool = True,
                           school_email: bool = True,
-                          ) -> Tuple[List[str], str, List[str]]:
+                          ) -> Tuple[List[str], str, List[db.Participant]]:
     ctants = query.all()
 
     user_set: Set[db.User]
@@ -756,7 +756,7 @@ def get_contestant_emails(query: Query,
     else:
         user_set = set()
 
-    org_warning_for: List[db.User] = []
+    org_warning_for: Set[db.Participant] = set()
     if school_email:
         school_orgs = get_school_orgs(ctants)
         for pion, pant, _ in ctants:
@@ -764,11 +764,11 @@ def get_contestant_emails(query: Query,
                 for u in school_orgs[pant.school]:
                     user_set.add(u)
             else:
-                org_warning_for.append(pion.user)
+                org_warning_for.add(pant)
 
     users = sorted(user_set, key=lambda u: u.sort_key())
     emails = [u.full_email() for u in users]
-    org_warnings = [u.full_name() for u in sorted(org_warning_for, key=lambda u: u.sort_key())]
+    missing_org_pants = sorted(org_warning_for, key=lambda p: p.user.sort_key())
 
     mailto_link = (
         'mailto:' + urllib.parse.quote(g.user.full_email(), safe='@')
@@ -776,7 +776,7 @@ def get_contestant_emails(query: Query,
         + '&bcc=' + ','.join([urllib.parse.quote(u.email, safe='@') for u in users])
     )
 
-    return (emails, mailto_link, org_warnings)
+    return (emails, mailto_link, missing_org_pants)
 
 
 class SubmitForm(FlaskForm):
diff --git a/mo/web/templates/org_generic_list.html b/mo/web/templates/org_generic_list.html
index 854df804..0aed62f6 100644
--- a/mo/web/templates/org_generic_list.html
+++ b/mo/web/templates/org_generic_list.html
@@ -153,9 +153,13 @@
 	</p>
 	{% endif %}
 {% else %}
-	{% if missing_org_warnings %}
+	{% if missing_org_pants %}
 	<h3>Školní garant nenalezen pro tyto účastníky:</h3>
-	<pre>{{ missing_org_warnings|join('\n')|escape }}</pre>
+	<ul>
+		{% for p in missing_org_pants %}
+		<li>{{ p.user|user_link }} ({{ p.school_place|place_link }})
+		{% endfor %}
+	</ul>
 	{% endif %}
 
 	<h3>E-mailové adresy</h3>
-- 
GitLab