Skip to content
Snippets Groups Projects
Commit 23bb896e authored by Jiří Kalvoda's avatar Jiří Kalvoda
Browse files

OrgFilterForm nepouživá f_

parent 4d655dee
No related branches found
No related tags found
No related merge requests found
This commit is part of merge request !92. Comments created here will be created in the context of that merge request.
...@@ -128,9 +128,9 @@ class OrgsFilterForm(PagerForm): ...@@ -128,9 +128,9 @@ class OrgsFilterForm(PagerForm):
search_right_for_place = mo_fields.Place('Právo pro oblast', validators=[validators.Optional()]) search_right_for_place = mo_fields.Place('Právo pro oblast', validators=[validators.Optional()])
search_in_place = mo_fields.Place('V oblasti', validators=[validators.Optional()]) search_in_place = mo_fields.Place('V oblasti', validators=[validators.Optional()])
search_place_level = wtforms.SelectMultipleField("Úroveň oblasti", choices=[(i.level, i.name) for i in db.place_levels], validators=[validators.Optional()], coerce=int) search_place_level = wtforms.SelectMultipleField("Úroveň oblasti", choices=[(i.level, i.name) for i in db.place_levels], validators=[validators.Optional()], coerce=int)
search_year = wtforms.StringField('Ročník', validators=[validators.Optional()]) search_year = mo_fields.IntList('Ročník', validators=[validators.Optional()])
search_category = wtforms.StringField("Kategorie", validators=[validators.Optional()]) search_category = wtforms.StringField("Kategorie", validators=[validators.Optional()])
search_seq = wtforms.StringField("Kolo", validators=[validators.Optional()]) search_seq = mo_fields.IntList("Kolo", validators=[validators.Optional()])
submit = wtforms.SubmitField("Filtrovat") submit = wtforms.SubmitField("Filtrovat")
show_role_filter = wtforms.SubmitField("Zobrazit filtrování dle rolí") show_role_filter = wtforms.SubmitField("Zobrazit filtrování dle rolí")
...@@ -138,50 +138,6 @@ class OrgsFilterForm(PagerForm): ...@@ -138,50 +138,6 @@ class OrgsFilterForm(PagerForm):
is_role_filter = wtforms.HiddenField(default="") # "" -> skrýt. "yes" -> zobrazit is_role_filter = wtforms.HiddenField(default="") # "" -> skrýt. "yes" -> zobrazit
# Výstupní hodnoty filtru, None při nepoužitém filtru nebo špatné hodnotě (takové filtry ignorujeme)
f_search_name: Optional[str] = None
f_search_email: Optional[str] = None
f_search_role: Optional[List[db.RoleType]] = None
f_search_right_for_place: Optional[db.Place] = None
f_search_in_place: Optional[db.Place] = None
f_search_year: Optional[List[int]] = None
f_search_category: Optional[List[str]] = None
f_search_place_level: Optional[List[int]] = None
f_search_seq: Optional[List[int]] = None
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_search_role(self, field):
self.f_search_role = field.data
def validate_search_right_for_place(self, field):
self.f_search_right_for_place = field.place
def validate_search_in_place(self, field):
self.f_search_in_place = field.place
def validate_search_year(self, field):
try:
self.f_search_year = mo.util.parse_int_list(field.data)
except mo.CheckError as e:
raise wtforms.ValidationError(str(e))
def validate_search_category(self, field):
self.f_search_category = field.data.split(",")
def validate_search_place_level(self, field):
self.f_search_place_level = field.data
def validate_search_seq(self, field):
try:
self.f_search_seq = mo.util.parse_int_list(field.data)
except mo.CheckError as e:
raise wtforms.ValidationError(str(e))
def prepare_role_filter(self): def prepare_role_filter(self):
if self.show_role_filter.data: if self.show_role_filter.data:
self.is_role_filter.data = "yes" self.is_role_filter.data = "yes"
...@@ -212,30 +168,34 @@ def org_orgs(): ...@@ -212,30 +168,34 @@ def org_orgs():
filter.validate() filter.validate()
filter.prepare_role_filter() filter.prepare_role_filter()
if filter.f_search_name: if filter.search_name.data:
q = q.filter(or_( q = q.filter(or_(
db.User.first_name.ilike(filter.f_search_name), db.User.first_name.ilike(f"%{filter.search_name.data}%"),
db.User.last_name.ilike(filter.f_search_name) db.User.last_name .ilike(f"%{filter.search_name.data}%")
)) ))
if filter.search_email.data:
q = q.filter(db.User.email.ilike(f"%{filter.search_email.data}%"))
def query_filter_role(qr: flask_sqlalchemy.BaseQuery) -> flask_sqlalchemy.BaseQuery: def query_filter_role(qr: flask_sqlalchemy.BaseQuery) -> flask_sqlalchemy.BaseQuery:
if filter.f_search_role is not None: if filter.search_role.data:
qr = qr.filter(db.UserRole.role.in_(filter.f_search_role)) qr = qr.filter(db.UserRole.role.in_(filter.search_role.data))
if filter.f_search_category is not None: if filter.search_category.data:
qr = qr.filter(or_(db.UserRole.category.in_(filter.f_search_category), db.UserRole.category == None)) qr = qr.filter(or_(db.UserRole.category.in_(filter.search_category.data.split(",")), db.UserRole.category == None))
if filter.f_search_seq is not None: if filter.search_seq.list:
qr = qr.filter(or_(db.UserRole.seq.in_(filter.f_search_seq), db.UserRole.seq == None)) qr = qr.filter(or_(db.UserRole.seq.in_(filter.search_seq.list), db.UserRole.seq == None))
if filter.f_search_year is not None: if filter.search_year.list:
qr = qr.filter(or_(db.UserRole.year.in_(filter.f_search_year), db.UserRole.year == None)) qr = qr.filter(or_(db.UserRole.year.in_(filter.search_year.list), db.UserRole.year == None))
if filter.f_search_in_place is not None: pass
qr = qr.filter(db.UserRole.place_id.in_(db.place_descendant_cte(filter.f_search_in_place))) if filter.search_in_place.place is not None:
if filter.f_search_right_for_place is not None: qr = qr.filter(db.UserRole.place_id.in_(db.place_descendant_cte(filter.search_in_place.place)))
qr = qr.filter(db.UserRole.place_id.in_([x.place_id for x in db.get_place_parents(filter.f_search_right_for_place)])) if filter.search_right_for_place.place is not None:
qr = qr.filter(db.UserRole.place_id.in_([x.place_id for x in db.get_place_parents(filter.search_right_for_place.place)]))
# Po n>3 hodinách v mo.db jsem dospěl k závěru, že to hezčeji neumím (neumím vyrobit place_parents_cte) # Po n>3 hodinách v mo.db jsem dospěl k závěru, že to hezčeji neumím (neumím vyrobit place_parents_cte)
if filter.f_search_place_level is not None: if filter.search_place_level.data:
qr = qr.filter(db.UserRole.place_id.in_( qr = qr.filter(db.UserRole.place_id.in_(
sess.query(db.Place.place_id).filter(db.Place.level.in_(filter.f_search_place_level)) sess.query(db.Place.place_id).filter(db.Place.level.in_(filter.search_place_level.data))
)) ))
print(qr)
return qr return qr
if filter.is_role_filter.data: if filter.is_role_filter.data:
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment