diff --git a/mo/users.py b/mo/users.py index aae885accabad94e1cfbff7efffbb105acbe0c36..851ddf09c345e6b3e4ca7a7b16befb54a5cdb829 100644 --- a/mo/users.py +++ b/mo/users.py @@ -103,7 +103,7 @@ def find_or_create_user(email: str, krestni: Optional[str], prijmeni: Optional[s else: raise CheckErrorOrgIsUser('Nelze předefinovat účastníka na organizátora.') else: - raise CheckError('Nelze předefinovat organizátora na účastníka.') + raise mo.CheckError('Nelze předefinovat organizátora na účastníka.') return user, is_new, is_change_user_to_org diff --git a/mo/web/org_users.py b/mo/web/org_users.py index 0f8b055ab82e8fef7d32c823f06ff306fb1af05e..9633b3b4f5693ea0438f710ae9e7f5eeed3c2624 100644 --- a/mo/web/org_users.py +++ b/mo/web/org_users.py @@ -398,6 +398,7 @@ class UserEditForm(FlaskForm): note = wtforms.TextAreaField("Poznámka") is_test = wtforms.BooleanField("Testovací účet") allow_duplicate_name = wtforms.BooleanField("Přidat účet s duplicitním jménem") + allow_change_user_to_org = wtforms.BooleanField("Povolit převedení účastníka na organizátora") submit = wtforms.SubmitField("Uložit") @@ -422,6 +423,7 @@ def org_user_edit(id: int): form = UserEditForm(obj=user) del form.allow_duplicate_name + del form.allow_change_user_to_org if (user.is_org or user.is_admin) and not g.user.is_admin: # emaily u organizátorů může editovat jen správce del form.email @@ -471,12 +473,35 @@ def org_user_new(): form = UserEditForm() form.submit.label.text = 'Vytvořit' is_duplicate_name = False + allow_change_user_to_org_show_field = False if form.validate_on_submit(): check = True - if mo.users.user_by_email(form.email.data) is not None: - flash('Účet s daným e-mailem již existuje', 'danger') - check = False + old_user = mo.users.user_by_email(form.email.data) + if old_user is not None: + if is_org and not old_user.is_org: + allow_change_user_to_org_show_field = True + if form.allow_change_user_to_org.data: + try: + mo.users.find_or_create_user( + email=form.email.data, + krestni=form.first_name.data, + prijmeni=form.last_name.data, + is_org=True, + reason="web", + allow_change_user_to_org=True) + except mo.CheckError as e: + flash(str(e), 'danger') + check = False + if check: + mo.db.get_session().commit() + return redirect(url_for('org_org', id=old_user.user_id)) + if check: + flash('Účet s daným e-mailem již existuje. Převedení účastníka na organizátora můžete povolit ve formuláři.', 'danger') + check = False + if check: + flash('Účet s daným e-mailem již existuje.', 'danger') + check = False if is_org: if (mo.db.get_session().query(db.User) @@ -514,8 +539,11 @@ def org_user_new(): return redirect(url_for('org_org', id=new_user.user_id)) return redirect(url_for('org_user', id=new_user.user_id)) - if not is_duplicate_name: + if not is_duplicate_name and not form.allow_duplicate_name.data: del form.allow_duplicate_name + + if not (is_org and allow_change_user_to_org_show_field): + del form.allow_change_user_to_org return render_template('org_user_new.html', form=form, is_org=is_org)