diff --git a/mo/imports.py b/mo/imports.py index fe075389c2f3a99cb1c2ca34dc559254740c9f58..e222be9105380801a8185ae0b978d2abc8eb920e 100644 --- a/mo/imports.py +++ b/mo/imports.py @@ -537,6 +537,10 @@ class ContestImport(Import): if oblast and not self.check_rights(self.round, oblast): return self.error(f'Nemáte práva na správu soutěže {oblast.name_locative()}') + contest = self.obtain_contest(self.round, oblast) + if contest is None: + return + if len(self.errors) > num_prev_errs: return @@ -549,31 +553,28 @@ class ContestImport(Import): return self.error(f'Účastník není rozlišitelný od toho z řádku {self.email_last_seen[email]}. Případné jmenovce vyřešte ručním přidáním účastníka.') self.email_last_seen[email] = self.line_number - user = self.find_or_create_user(email, krestni, prijmeni, is_org=False) - if user is None: - return - - part = self.find_or_create_participant(user, self.round.year, school_place.place_id if school_place else None, rok_naroz, rocnik) - if part is None: - return - - contest = self.obtain_contest(self.round, oblast) - if contest is None: - return - - self.find_or_create_participation(user, contest, misto) - # Kontrola na jmenovce sess = db.get_session() similar_users = (sess.query(db.User) .join(db.Participation) .filter(db.User.first_name == krestni) .filter(db.User.last_name == prijmeni) + .filter(db.User.email != email) .filter(db.Participation.contest == contest) - .filter(db.User != user) .all()) if similar_users: - self.warning('Účastník stejného jména a příjmení už na tomto místě soutěží, ověřte prosím, zda to není duplicita') + self.warning('Účastník stejného jména a příjmení už na tomto místě soutěží, nepřidáváme ho znovu. Případné jmenovce vyřešte ručním přidáním účastníka.') + return + + user = self.find_or_create_user(email, krestni, prijmeni, is_org=False) + if user is None: + return + + part = self.find_or_create_participant(user, self.round.year, school_place.place_id if school_place else None, rok_naroz, rocnik) + if part is None: + return + + self.find_or_create_participation(user, contest, misto) def get_after_import_message(self) -> str: return f'Importováno ({self.cnt_rows} řádků, založeno {self.cnt_new_users} uživatelů, {self.cnt_new_participations} účastí, {self.cnt_new_contests} soutěží)'