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

Import: Přetypování účastníka na orga

parent cbe2ef05
No related branches found
No related tags found
1 merge request!97Import orgů
...@@ -47,6 +47,7 @@ class Import: ...@@ -47,6 +47,7 @@ class Import:
cnt_set_points: int = 0 cnt_set_points: int = 0
cnt_add_sols: int = 0 cnt_add_sols: int = 0
cnt_del_sols: int = 0 cnt_del_sols: int = 0
cnt_change_user_to_org: int = 0 # pro Import orgů: Počet provedených/požadovaných změn účastnka na orga
# Veřejné vlastnosti importu # Veřejné vlastnosti importu
template_basename: str = "sablona" template_basename: str = "sablona"
...@@ -58,6 +59,7 @@ class Import: ...@@ -58,6 +59,7 @@ class Import:
only_region: Optional[db.Place] only_region: Optional[db.Place]
task: Optional[db.Task] # pro Import bodů task: Optional[db.Task] # pro Import bodů
allow_add_del: bool # pro Import bodů: je povoleno zakládat/mazat řešení allow_add_del: bool # pro Import bodů: je povoleno zakládat/mazat řešení
allow_change_user_to_org: bool = False # pro Import orgů: je povoleno vyrobit orga z účastníka
fmt: FileFormat fmt: FileFormat
row_class: Type[mo.csv.Row] row_class: Type[mo.csv.Row]
row_example: mo.csv.Row row_example: mo.csv.Row
...@@ -195,7 +197,12 @@ class Import: ...@@ -195,7 +197,12 @@ class Import:
def find_or_create_user(self, email: str, krestni: Optional[str], prijmeni: Optional[str], is_org: bool) -> Optional[db.User]: def find_or_create_user(self, email: str, krestni: Optional[str], prijmeni: Optional[str], is_org: bool) -> Optional[db.User]:
try: try:
user, is_new, is_change_user_to_org = mo.users.find_or_create_user(email, krestni, prijmeni, is_org, reason='import') try:
user, is_new, is_user_to_org = mo.users.find_or_create_user(email, krestni, prijmeni, is_org, allow_change_user_to_org=self.allow_change_user_to_org, reason='import')
self.cnt_change_user_to_org += is_user_to_org
except mo.users.CheckErrorOrgIsUser as e:
self.cnt_change_user_to_org += 1
raise mo.CheckError(str(e) + " Změnu můžete povolit ve formuláři.")
except mo.CheckError as e: except mo.CheckError as e:
return self.error(str(e)) return self.error(str(e))
if is_new: if is_new:
...@@ -276,6 +283,10 @@ class Import: ...@@ -276,6 +283,10 @@ class Import:
ur = db.UserRole(user=user, place=place, role=role, ur = db.UserRole(user=user, place=place, role=role,
category=round.category, year=round.year, seq=round.seq, category=round.category, year=round.year, seq=round.seq,
assigned_by_user=self.user) assigned_by_user=self.user)
if not self.gatekeeper.can_set_role(ur):
return self.error('Roli "{new_role}" nelze přidělit, není podmnožinou žádné vaší role')
sess.add(ur) sess.add(ur)
sess.flush() sess.flush()
logger.info(f'Import: {role.name.title()} user=#{user.user_id} place=#{place.place_id} user_role=#{ur.user_role_id}') logger.info(f'Import: {role.name.title()} user=#{user.user_id} place=#{place.place_id} user_role=#{ur.user_role_id}')
...@@ -517,10 +528,6 @@ class OrgsImport(Import): ...@@ -517,10 +528,6 @@ class OrgsImport(Import):
oblast = self.parse_opt_place(r.kod_oblasti, 'oblast') oblast = self.parse_opt_place(r.kod_oblasti, 'oblast')
role = self.parse_role(r.role) role = self.parse_role(r.role)
if role == db.RoleType.opravovatel:
if oblast is None:
return self.error('Kód místa je povinné uvést')
if role != db.RoleType.opravovatel: if role != db.RoleType.opravovatel:
contest = self.obtain_contest(oblast, allow_none=True) contest = self.obtain_contest(oblast, allow_none=True)
place = contest.place if contest else self.root_place place = contest.place if contest else self.root_place
...@@ -697,12 +704,14 @@ def create_import(user: db.User, ...@@ -697,12 +704,14 @@ def create_import(user: db.User,
contest: Optional[db.Contest] = None, contest: Optional[db.Contest] = None,
only_region: Optional[db.Place] = None, only_region: Optional[db.Place] = None,
task: Optional[db.Task] = None, task: Optional[db.Task] = None,
allow_add_del: bool = False): allow_add_del: bool = False,
allow_change_user_to_org: bool = False):
imp: Import imp: Import
if type == ImportType.participants: if type == ImportType.participants:
imp = ContestImport() imp = ContestImport()
elif type == ImportType.orgs: elif type == ImportType.orgs:
imp = OrgsImport() imp = OrgsImport()
imp.allow_change_user_to_org = allow_change_user_to_org
elif type == ImportType.points: elif type == ImportType.points:
imp = PointsImport() imp = PointsImport()
else: else:
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment