From 15d4acd8168bf0d05acccd7d4207eca918071751 Mon Sep 17 00:00:00 2001
From: Jiri Kalvoda <jirikalvoda@kam.mff.cuni.cz>
Date: Sat, 24 Jul 2021 00:24:26 +0200
Subject: [PATCH] =?UTF-8?q?Zv=C3=BDrazn=C4=9Bn=C3=AD=20rol=C3=AD=20nalezen?=
 =?UTF-8?q?=C3=BDch=20pomoc=C3=AD=20hled=C3=A1n=C3=AD=20org=C5=AF=20dle=20?=
 =?UTF-8?q?rol=C3=AD?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Closes #225
---
 mo/web/org_users.py            | 17 +++++++++++++++--
 mo/web/templates/org_orgs.html |  6 +++++-
 2 files changed, 20 insertions(+), 3 deletions(-)

diff --git a/mo/web/org_users.py b/mo/web/org_users.py
index 7442b123..c8040876 100644
--- a/mo/web/org_users.py
+++ b/mo/web/org_users.py
@@ -4,6 +4,7 @@ from flask_wtf import FlaskForm
 import werkzeug.exceptions
 import wtforms
 from sqlalchemy import or_
+import flask_sqlalchemy
 from sqlalchemy.orm import joinedload, subqueryload
 
 from wtforms import validators
@@ -249,8 +250,7 @@ def org_orgs():
             db.User.last_name.ilike(filter.f_search_name)
         ))
 
-    if filter.is_role_filter.data:
-        qr = sess.query(db.UserRole.user_id)
+    def query_filter_role(qr: flask_sqlalchemy.BaseQuery) -> flask_sqlalchemy.BaseQuery:
         if filter.f_search_role is not None:
             qr = qr.filter(db.UserRole.role.in_(filter.f_search_role))
         if filter.f_search_category is not None:
@@ -268,6 +268,11 @@ def org_orgs():
             qr = qr.filter(db.UserRole.place_id.in_(
                 sess.query(db.Place.place_id).filter(db.Place.level.in_(filter.f_search_place_level))
                 ))
+        return qr
+
+    if filter.is_role_filter.data:
+        qr = sess.query(db.UserRole.user_id)
+        qr = query_filter_role(qr)
         q = q.filter(db.User.user_id.in_(qr))
 
     q = q.order_by(db.User.user_id)
@@ -275,9 +280,17 @@ def org_orgs():
     (count, q) = filter.apply_limits(q, pagesize=50)
     users = q.all()
 
+    marked_roles_id: Set[int] = set()
+
+    if filter.is_role_filter.data:
+        qmr = sess.query(db.UserRole.user_role_id).filter(db.UserRole.user_id.in_([i.user_id for i in users]))
+        qmr = query_filter_role(qmr)
+        marked_roles_id = set([i[0] for i in qmr.all()])
+
     return render_template(
         'org_orgs.html', users=users, count=count,
         filter=filter,
+        marked_roles_id=marked_roles_id,
         can_edit=rr.have_right(Right.edit_orgs),
         can_add=rr.have_right(Right.add_orgs),
     )
diff --git a/mo/web/templates/org_orgs.html b/mo/web/templates/org_orgs.html
index 0b180093..adb8cd1d 100644
--- a/mo/web/templates/org_orgs.html
+++ b/mo/web/templates/org_orgs.html
@@ -85,7 +85,11 @@
 			{% if user.roles|count > 0 %}
 			<ul>
 			{% for role in user.roles %}
-				<li>{{ role }}</li>
+				{% if role.user_role_id in marked_roles_id %}
+					<li><b>{{ role }}</b></li>
+				{% else %}
+					<li>{{ role }}</li>
+				{% endif %}
 			{%- endfor %}
 			</ul>
 		{% endif %}</td>
-- 
GitLab