diff --git a/models/database.py b/models/database.py index def659f48d0ad81be438311e847287233ca02419..59e71ce22bbf7546963d2455b611f3f427bc2bcf 100644 --- a/models/database.py +++ b/models/database.py @@ -236,7 +236,7 @@ class Protocol(DatabaseModel): description=default_top.description or "")) return local_tops - def fill_from_remarks(self, remarks): + def fill_from_remarks(self, remarks, ignore_old_date=False): def _date_or_lazy(key, get_date=False, get_time=False): formats = [] if get_date: @@ -258,7 +258,7 @@ class Protocol(DatabaseModel): raise exc if DATE_KEY in remarks: new_date = _date_or_lazy(DATE_KEY, get_date=True) - if self.date is not None: + if self.date is not None and not ignore_old_date: if new_date != self.date: raise DateNotMatchingException( original_date=self.date, protocol_date=new_date) diff --git a/server.py b/server.py index 660b78086237bb78a33eb79c6a8bfca431ea09f9..6fdaa78f3d52f31348d3060dc336041b8681b5fd 100755 --- a/server.py +++ b/server.py @@ -862,13 +862,13 @@ def upload_new_protocol(): flash("Invalider Protokolltyp oder keine Rechte.", "alert-error") return redirect(request.args.get("fail") or url_for("new_protocol")) - protocol = Protocol(protocoltype_id=protocoltype.id, source=source) + protocol = Protocol(protocoltype_id=protocoltype.id, source=source, date=datetime.now().date()) db.session.add(protocol) db.session.commit() for local_top in protocol.create_localtops(): db.session.add(local_top) db.session.commit() - tasks.parse_protocol(protocol) + tasks.parse_protocol(protocol, ignore_old_date=True) return back.redirect("show_protocol", protocol_id=protocol.id) return redirect(request.args.get("fail") or url_for("new_protocol")) @@ -911,7 +911,7 @@ def upload_new_protocol_by_file(): db.session.add(document) db.session.commit() internal_filename = get_internal_filename( - protocol, document.id, filename) + protocol, document, filename) document.filename = internal_filename file.save(os.path.join(config.DOCUMENTS_PATH, internal_filename)) db.session.commit() diff --git a/tasks.py b/tasks.py index d10295f5c47b9dd2196391f3b8a3919bf9b49c08..6ccbdde2c9480d964567e191106c6d956d7ada4f 100644 --- a/tasks.py +++ b/tasks.py @@ -155,19 +155,24 @@ def _make_error(protocol, *args): ID_FIELD_BEGINNING = "id " -def parse_protocol(protocol): - parse_protocol_async.delay(protocol.id) +def parse_protocol(protocol, ignore_old_date=False): + parse_protocol_async.delay(protocol.id, ignore_old_date) @celery.task -def parse_protocol_async(protocol_id): +def parse_protocol_async(protocol_id, ignore_old_date=False): with app.app_context(): with app.test_request_context("/"): try: protocol = Protocol.first_by_id(protocol_id) if protocol is None: raise Exception("No protocol given. Aborting parsing.") - parse_protocol_async_inner(protocol) + parse_protocol_async_inner(protocol, ignore_old_date) + if protocol.date is None : + initialdate = datetime.now().date() + protocol.date = initialdate + db.session.commit() + _make_error(protocol, "Parsing", "No date for the protocol found, use current date instead.", initialdate) except Exception as exc: stacktrace = traceback.format_exc() return _make_error( @@ -175,7 +180,7 @@ def parse_protocol_async(protocol_id): "{}\n\n{}".format(str(exc), stacktrace)) -def parse_protocol_async_inner(protocol): +def parse_protocol_async_inner(protocol, ignore_old_date=False): old_errors = list(protocol.errors) for error in old_errors: protocol.errors.remove(error) @@ -220,7 +225,7 @@ def parse_protocol_async_inner(protocol): protocol, "Parsing", "Du hast vergessen, Metadaten anzugeben.", ", ".join(missing_fields)) try: - protocol.fill_from_remarks(remarks) + protocol.fill_from_remarks(remarks, ignore_old_date) except ValueError: return _make_error( protocol, "Parsing", "Invalid fields",