From c97d2d482515bca3c0453b0465a1da2887477f76 Mon Sep 17 00:00:00 2001
From: Jiri Kalvoda <jirikalvoda@kam.mff.cuni.cz>
Date: Fri, 24 Sep 2021 15:56:55 +0200
Subject: [PATCH] =?UTF-8?q?UsersFilterForm=20nepou=C5=BEiv=C3=A1=20f=5F?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 mo/web/org_users.py | 75 +++++++++++----------------------------------
 1 file changed, 18 insertions(+), 57 deletions(-)

diff --git a/mo/web/org_users.py b/mo/web/org_users.py
index 78e023ed..77a62234 100644
--- a/mo/web/org_users.py
+++ b/mo/web/org_users.py
@@ -41,50 +41,11 @@ class UsersFilterForm(PagerForm):
 
     submit = wtforms.SubmitField("Filtrovat")
 
-    # Výstupní hodnoty filtru, None při nepoužitém filtru, prázdná db hodnota při
-    # nepovedené filtraci (neexistující místo a podobně)
-    f_search_name: Optional[str] = None
-    f_search_email: Optional[str] = None
-    f_year: Optional[int] = None
-    f_school: Optional[db.Place] = None
-    f_round_year: Optional[int] = None
-    f_round_category: Optional[str] = None
-    f_round_seq: Optional[int] = None
-    f_contest_site: Optional[db.Place] = None
-    f_participation_state: Optional[db.PartState] = None
-
     def __init__(self, **kwargs):
         super().__init__(**kwargs)
         self.round_category.choices = ['*'] + sorted(db.get_categories())
         self.round_seq.choices = ['*'] + sorted(db.get_seqs())
 
-    def validate_search_name(self, field):
-        self.f_search_name = f"%{field.data}%"
-
-    def validate_search_email(self, field):
-        self.f_search_email = f"%{field.data}%"
-
-    def validate_year(self, field):
-        self.f_year = field.data
-
-    def validate_round_year(self, field):
-        self.f_round_year = field.data
-
-    def validate_school(self, field):
-        self.f_school = field.place
-
-    def validate_contest_site(self, field):
-        self.f_contest_site = field.place
-
-    def validate_round_category(self, field):
-        self.f_round_category = None if field.data == '*' else field.data
-
-    def validate_round_seq(self, field):
-        self.f_round_seq = None if field.data == '*' else field.data
-
-    def validate_participation_state(self, field):
-        self.f_participation_state = None if field.data == '*' else field.data
-
 
 @app.route('/org/user/', methods=('GET', 'POST'))
 def org_users():
@@ -98,29 +59,29 @@ def org_users():
     if request.args:
         filter.validate()
 
-    if filter.f_search_name:
+    if filter.search_name.data:
         q = q.filter(or_(
-            db.User.first_name.ilike(filter.f_search_name),
-            db.User.last_name.ilike(filter.f_search_name)
+            db.User.first_name.ilike(f"%{filter.search_name.data}%"),
+            db.User.last_name .ilike(f"%{filter.search_name.data}%")
         ))
-    if filter.f_search_email:
-        q = q.filter(db.User.email.ilike(filter.f_search_email))
+    if filter.search_email.data:
+        q = q.filter(db.User.email.ilike(f"%{filter.search_email.data}%"))
 
-    if filter.f_year or filter.f_school:
+    if filter.year.data or filter.school.place:
         participant_filter = sess.query(db.Participant.user_id)
-        if filter.f_year:
-            participant_filter = participant_filter.filter_by(year=filter.f_year)
-        if filter.f_school:
-            participant_filter = participant_filter.filter_by(school=filter.f_school.place_id)
+        if filter.year.data:
+            participant_filter = participant_filter.filter_by(year=filter.year.data)
+        if filter.school.place:
+            participant_filter = participant_filter.filter_by(school=filter.school.place.place_id)
         q = q.filter(db.User.user_id.in_(participant_filter))
 
     round_filter = sess.query(db.Round.round_id)
     round_filter_apply = False
-    if filter.f_round_year:
-        round_filter = round_filter.filter_by(year=filter.f_round_year)
+    if filter.round_year.data:
+        round_filter = round_filter.filter_by(year=filter.round_year.data)
         round_filter_apply = True
-    if filter.f_round_category:
-        round_filter = round_filter.filter_by(category=filter.f_round_category)
+    if filter.round_category.data and filter.round_category.data != "*":
+        round_filter = round_filter.filter_by(category=filter.round_category.data)
         round_filter_apply = True
     if filter.round_seq.data and filter.round_seq.data != "*":
         round_filter = round_filter.filter_by(seq=filter.round_seq.data)
@@ -131,8 +92,8 @@ def org_users():
     if round_filter_apply:
         contest_filter = contest_filter.filter(db.Contest.round_id.in_(round_filter))
         contest_filter_apply = True
-    if filter.f_contest_site:
-        contest_filter = contest_filter.filter_by(place_id=filter.f_contest_site.place_id)
+    if filter.contest_site.place:
+        contest_filter = contest_filter.filter_by(place_id=filter.contest_site.place.place_id)
         contest_filter_apply = True
 
     participation_filter = sess.query(db.Participation.user_id)
@@ -140,8 +101,8 @@ def org_users():
     if contest_filter_apply:
         participation_filter = participation_filter.filter(db.Participation.contest_id.in_(contest_filter))
         participation_filter_apply = True
-    if filter.f_participation_state:
-        participation_filter = participation_filter.filter_by(state=filter.f_participation_state)
+    if filter.participation_state.data and filter.participation_state.data != '*':
+        participation_filter = participation_filter.filter_by(state=filter.participation_state.data)
         participation_filter_apply = True
 
     if participation_filter_apply:
-- 
GitLab