Skip to content
Snippets Groups Projects

Formulář na přidání účastníka do soutěže

2 open threads
1 file
+ 105
24
Compare changes
  • Side-by-side
  • Inline
+ 105
24
@@ -236,35 +236,57 @@ class ParticipantAddForm(FlaskForm):
email = wtforms.StringField("E-mail", validators=[validators.Required()])
first_name = wtforms.StringField("Křestní jméno", validators=[validators.Required()])
last_name = wtforms.StringField("Příjmení", validators=[validators.Required()])
school_code = wtforms.StringField(
"Kód školy",
description="Viz katalog škol na tomto webu",
school_code = wtforms.StringField("Kód školy",
validators=[validators.Required()],
description="Viz katalog škol na tomto webu")
rocnik = wtforms.StringField(
"Ročník",
description="Pro základní školy je to číslo od 1 do 9, pro <var>k</var>-tý ročník <var>r</var>-leté střední školy má formát <var>k</var>/<var>r</var>.",
validators=[validators.Required()])
rok_naroz = wtforms.StringField("Rok narození")
participation_place = wtforms.HiddenField('Soutěžní místo')
save = wtforms.SubmitField("Přidat")
def get_school_code(self) -> str:
return self.school_code.data
def get_participation_place(self) -> str:
return '#'+str(self.participation_place.data)
def set_site(self, site: db.Place):
self.participation_place.data = site.place_id
def validate_email(form, field):
try:
field.data = mo.users.normalize_email(field.data)
except mo.CheckError as e:
raise wtforms.ValidationError(str(e))
class ParticipantAddFormWithSite(FlaskForm):
email = wtforms.StringField("E-mail", validators=[validators.Required()])
first_name = wtforms.StringField("Křestní jméno", validators=[validators.Required()])
last_name = wtforms.StringField("Příjmení", validators=[validators.Required()])
school_code = wtforms.StringField("Kód školy",
validators=[validators.Required()],
description="Viz katalog škol na tomto webu")
rocnik = wtforms.StringField(
"Ročník",
description="Pro základní školy je to číslo od 1 do 9, pro <var>k</var>-tý ročník <var>r</var>-leté střední školy má formát <var>k</var>/<var>r</var>.",
validators=[validators.Required()])
rok_naroz = wtforms.StringField("Rok narození")
participation_place = wtforms.SelectField('Soutěžní místo', coerce=int)
participation_place = wtforms.StringField('Soutěžní místo')
save = wtforms.SubmitField("Přidat")
def set_contest(self, contest_id: int, site_id: int):
sess = db.get_session()
places = (
sess.query(db.Place)
.select_from(db.Participation).join(db.Place)
.filter(db.Participation.contest_id == contest_id).all()
)
if len(places) == 0:
places = (
sess.query(db.Place)
.select_from(db.Contest).join(db.Place)
.filter(db.Contest.contest_id == contest_id).all()
)
def get_school_code(self) -> str:
return self.school_code.data
self.participation_place.choices = [(p.place_id, p.name) for p in places]
if site_id:
self.participation_place.data = site_id
def get_participation_place(self) -> str:
return self.participation_place.data
def set_contest(self, contest: db.Contest):
self.participation_place.description = "Pokud účastník soutěží někde jinde než: "+contest.place.name+". Dozor na soutěžním místě má pak právo odevzdávat za účastníka řešení."
def validate_email(form, field):
try:
@@ -273,6 +295,56 @@ class ParticipantAddForm(FlaskForm):
raise wtforms.ValidationError(str(e))
class ParticipantAddFormWithSchoolSelect(FlaskForm):
email = wtforms.StringField("E-mail", validators=[validators.Required()])
first_name = wtforms.StringField("Křestní jméno", validators=[validators.Required()])
last_name = wtforms.StringField("Příjmení", validators=[validators.Required()])
school_code = wtforms.SelectField("Škola",
validators=[validators.Required()],
coerce=int)
rocnik = wtforms.StringField(
"Ročník",
description="Pro základní školy je to číslo od 1 do 9, pro <var>k</var>-tý ročník <var>r</var>-leté střední školy má formát <var>k</var>/<var>r</var>.",
validators=[validators.Required()])
rok_naroz = wtforms.StringField("Rok narození")
participation_place = wtforms.SelectField('Soutěžní místo', coerce=int)
save = wtforms.SubmitField("Přidat")
def get_school_code(self) -> str:
return '#'+str(self.school_code.data)
def get_participation_place(self) -> str:
return '#'+str(self.participation_place.data)
def set_contest(self, contest: db.Contest, site: db.Place):
sess = db.get_session()
schools = []
if contest.place.level == 2:
school = aliased(db.Place)
schools = (
sess.query(school)
.select_from(db.Place).join(school, school.parent == db.Place.place_id)
.filter(db.Place.parent == contest.place.place_id).order_by('name').all()
)
elif contest.place.level == 3:
schools = (
sess.query(db.Place)
.select_from(db.Place)
.filter(db.Place.parent == contest.place.place_id).order_by('name').all()
)
elif contest.place.level == 4:
schools = [(contest.place.place_id, contest.place.name)]
self.school_code.choices = [(s.place_id, s.name) for s in schools]
places = [contest.place] + schools
self.participation_place.choices = [(p.place_id, p.name) for p in places]
if site:
self.participation_place.data = site.place_id
self.participation_place.render_kw={'disabled': True}
def get_contest(id: int) -> db.Contest:
contest = (db.get_session().query(db.Contest)
.options(joinedload(db.Contest.place),
@@ -458,17 +530,26 @@ def org_contest_add_user(id: int, site_id: Optional[int] = None):
contest, site, rr = get_contest_site_rr(id, site_id, right_needed=Right.manage_contest)
errs = None
form = ParticipantAddForm()
form.set_contest(id, site_id)
form = None
if contest.place.level >= 2:
form = ParticipantAddFormWithSchoolSelect()
form.set_contest(contest, site)
elif site:
form = ParticipantAddForm()
form.set_site(site)
else:
form = ParticipantAddFormWithSite()
form.set_contest(contest)
if form.validate_on_submit():
row = ContestImportRow()
row.email = form.email.data
row.krestni = form.first_name.data
row.prijmeni = form.last_name.data
row.kod_skoly = form.school_code.data
row.kod_skoly = form.get_school_code()
row.rocnik = form.rocnik.data
row.rok_naroz = form.rok_naroz.data
row.kod_mista = '#'+str(form.participation_place.data)
row.kod_mista = form.get_participation_place()
imp = ContestImport()
imp.user = g.user
Loading