diff --git a/server.py b/server.py index 17a6b71eac760af586220551e0006b980d58be8a..f8181d2233b8ea1d902068b066a25cd2e4596d66 100755 --- a/server.py +++ b/server.py @@ -712,15 +712,27 @@ def publish_protocol(protocol): db.session.commit() return redirect(request.args.get("next") or url_for("show_protocol", protocol_id=protocol.id)) -@app.route("/prococol/send/<int:protocol_id>") +@app.route("/prococol/send/private/<int:protocol_id>") @login_required @db_lookup(Protocol) @require_modify_right() -def send_protocol(protocol): +def send_protocol_private(protocol): if not config.MAIL_ACTIVE: flash("Die Mailfunktion ist nicht aktiviert.", "alert-error") return redirect(request.args.get("next") or url_for("show_protocol", protocol_id=protocol_id)) - tasks.send_protocol(protocol) + tasks.send_protocol_private(protocol) + flash("Das Protokoll wurde versandt.", "alert-success") + return redirect(request.args.get("next") or url_for("show_protocol", protocol_id=protocol.id)) + +@app.route("/prococol/send/public/<int:protocol_id>") +@login_required +@db_lookup(Protocol) +@require_modify_right() +def send_protocol_public(protocol): + if not config.MAIL_ACTIVE: + flash("Die Mailfunktion ist nicht aktiviert.", "alert-error") + return redirect(request.args.get("next") or url_for("show_protocol", protocol_id=protocol_id)) + tasks.send_protocol_public(protocol) flash("Das Protokoll wurde versandt.", "alert-success") return redirect(request.args.get("next") or url_for("show_protocol", protocol_id=protocol.id)) diff --git a/tasks.py b/tasks.py index 4fd92a621cc397e03e09f9c6ab9b87a6c88f8bbd..ef4d1ba97acfa54b26137ffe8367669d25f2404b 100644 --- a/tasks.py +++ b/tasks.py @@ -184,10 +184,8 @@ def parse_protocol_async_inner(protocol, encoded_kwargs): protocol.delete_orphan_todos() db.session.commit() old_todos = list(protocol.todos) - for todo in old_todos: - protocol.todos.remove(todo) - db.session.commit() todo_tags = [tag for tag in tags if tag.name == "todo"] + raw_todos = [] for todo_tag in todo_tags: if len(todo_tag.values) < 2: error = protocol.create_error("Parsing", "Invalid todo-tag", @@ -239,6 +237,15 @@ def parse_protocol_async_inner(protocol, encoded_kwargs): db.session.add(error) db.session.commit() return + raw_todos.append((who, what, field_id, field_state, field_date, todo_tag)) + for (_, _, field_id, _, _, _) in raw_todos: + if field_id is not None: + old_todos = [todo for todo in old_todos + if todo.id != field_id] + for todo in old_todos: + protocol.todos.remove(todo) + db.session.commit() + for (who, what, field_id, field_state, field_date, todo_tag) in raw_todos: if field_state is None: field_state = TodoState.open if field_state.needs_date() and field_date is None: @@ -255,7 +262,6 @@ def parse_protocol_async_inner(protocol, encoded_kwargs): if field_id is not None: todo = Todo.query.filter_by(number=field_id).first() if todo is None and not config.PARSER_LAZY: - # TODO: add non-strict mode (at least for importing old protocols) error = protocol.create_error("Parsing", "Invalid Todo ID", "The todo in line {} has the ID {}, but there is no " @@ -537,11 +543,13 @@ def send_reminder_async(reminder_id, protocol_id): print("sending private reminder mail to {}".format(protocol.protocoltype.private_mail)) send_mail(protocol, protocol.protocoltype.private_mail, "Tagesordnung der {}".format(protocol.protocoltype.name), reminder_text) -def send_protocol(protocol): +def send_protocol_private(protocol): send_protocol_async.delay(protocol.id, show_private=True) - send_protocol_async.delay(protocol.id, show_private=False) send_todomails_async.delay(protocol.id) +def send_protocol_public(protocol): + send_protocol_async.delay(protocol.id, show_private=False) + @celery.task def send_protocol_async(protocol_id, show_private): with app.app_context(): diff --git a/templates/protocol-show.html b/templates/protocol-show.html index d38b074b5d2cd6fcaa9f7a6f665b0c2adf153c95..769b7f1aebadb0f4685619032973d3ba7a29e62d 100644 --- a/templates/protocol-show.html +++ b/templates/protocol-show.html @@ -36,7 +36,10 @@ {% endif %} {% else %} {% if config.MAIL_ACTIVE %} - <a class="btn btn-default" href="{{url_for("send_protocol", protocol_id=protocol.id)}}">Mail versenden</a> + <a class="btn btn-default" href="{{url_for("send_protocol_private", protocol_id=protocol.id)}}">Intern versenden</a> + {% if protocol.public %} + <a class="btn btn-default" href="{{url_for("send_protocol_public", protocol_id=protocol.id)}}">Öffentlich versenden</a> + {% endif %} {% endif %} {% if not protocol.public %} <a class="btn btn-default" href="{{url_for("publish_protocol", protocol_id=protocol.id)}}">Veröffentlichen</a> @@ -153,7 +156,7 @@ {% endif %} </div> </div> - {% if content_html %} + {% if content_html is not none %} <div> <h3>Protokollinhalt</h3> {{content_html|safe}}