diff --git a/migrations/versions/da846db78ff9_.py b/migrations/versions/da846db78ff9_.py new file mode 100644 index 0000000000000000000000000000000000000000..a569337c48e509669c15edb7f012d44008f4cd4d --- /dev/null +++ b/migrations/versions/da846db78ff9_.py @@ -0,0 +1,28 @@ +"""empty message + +Revision ID: da846db78ff9 +Revises: 7834767242e8 +Create Date: 2022-10-29 19:24:42.934124 + +""" +from alembic import op +import sqlalchemy as sa + + +# revision identifiers, used by Alembic. +revision = 'da846db78ff9' +down_revision = '7834767242e8' +branch_labels = None +depends_on = None + + +def upgrade(): + # ### commands auto generated by Alembic - please adjust! ### + op.add_column('protocoltypes', sa.Column('recurrence', sa.Integer(), nullable=True)) + # ### end Alembic commands ### + + +def downgrade(): + # ### commands auto generated by Alembic - please adjust! ### + op.drop_column('protocoltypes', 'recurrence') + # ### end Alembic commands ### diff --git a/models/database.py b/models/database.py index a7c5ebf7e249c382ad01ed00555d25d896d7e893..6d98e438eb843b9d6e789706878938375b6e32d4 100644 --- a/models/database.py +++ b/models/database.py @@ -78,6 +78,7 @@ class ProtocolType(DatabaseModel): restrict_networks = db.Column(db.Boolean) allowed_networks = db.Column(db.Text) latex_template = db.Column(db.Text) + recurrence = db.Column(db.Integer) protocols = relationship( "Protocol", backref=backref("protocoltype"), diff --git a/tasks.py b/tasks.py index 5976b989bd2dd2dab85dc33e2e8f1d9ead76d407..d894769faa617cef4fe44395e9aaadc48960ec90 100644 --- a/tasks.py +++ b/tasks.py @@ -4,7 +4,7 @@ import os import subprocess import shutil import tempfile -from datetime import datetime +from datetime import datetime, timedelta import time import traceback from copy import copy @@ -500,6 +500,11 @@ def parse_protocol_async_inner(protocol, ignore_old_date=False): if not protocol.protocoltype.get_protocols_on_date(new_protocol_date): Protocol.create_new_protocol( protocol.protocoltype, new_protocol_date, new_protocol_time) + if not protocol_tags and protocol.protocoltype.recurrence: + new_protocol_date = protocol.date + timedelta( + days=protocol.protocoltype.recurrence) + if new_protocol_date > datetime.now().date(): + Protocol.create_new_protocol(protocol.protocoltype, new_protocol_date) # TOPs old_tops = list(protocol.tops) diff --git a/views/forms.py b/views/forms.py index b5b85b25acd5582e3162facb4d421c93fc691636..551763351d47a69676f8140da6f7b72b64bc8fa3 100644 --- a/views/forms.py +++ b/views/forms.py @@ -174,6 +174,7 @@ class ProtocolTypeForm(FlaskForm): wiki_only_public = BooleanField("Wiki ist öffentlich") printer = SelectField("Drucker", choices=[]) calendar = SelectField("Kalender", choices=[]) + recurrence = IntegerField("Turnus (in Tagen)", validators=[Optional()]) restrict_networks = BooleanField("Netzwerke einschränken") allowed_networks = IPNetworkField("Erlaubte Netzwerke") latex_template = SelectField("LaTeX Vorlage", choices=[]) diff --git a/views/tables.py b/views/tables.py index 1009957ad1dd7eed3367af1a123453385378ada3..9db9c096196a4a44bfa230bc4e05d2e4dcbef47d 100644 --- a/views/tables.py +++ b/views/tables.py @@ -237,6 +237,7 @@ class ProtocolTypeTable(SingleValueTable): calendar_headers = ["Kalender"] if not config.CALENDAR_ACTIVE: calendar_headers = [] + recurrence_headers = ["Turnus"] network_headers = ["Netzwerke einschränken", "Erlaubte Netzwerke"] action_headers = ["Aktion"] feed_headers = [] @@ -249,8 +250,8 @@ class ProtocolTypeTable(SingleValueTable): return ( general_headers + etherpad_headers + mail_headers + printing_headers + wiki_headers + calendar_headers - + network_headers + latex_template_headers + feed_headers - + action_headers) + + recurrence_headers + network_headers + latex_template_headers + + feed_headers + action_headers) def row(self): user = current_user() @@ -297,6 +298,7 @@ class ProtocolTypeTable(SingleValueTable): if self.value.calendar is not None else ""] if not config.CALENDAR_ACTIVE: calendar_part = [] + recurrence_part = [f"{self.value.recurrence} Tage" if self.value.recurrence is not None else ""] network_part = [Table.bool(self.value.restrict_networks)] if self.value.allowed_networks is not None: network_part.append( @@ -344,8 +346,8 @@ class ProtocolTypeTable(SingleValueTable): action_part = [""] return ( general_part + etherpad_part + mail_part + printing_part - + wiki_part + calendar_part + network_part + latex_template_part - + feed_part + action_part) + + wiki_part + calendar_part + recurrence_part + network_part + + latex_template_part + feed_part + action_part) class DefaultTOPsTable(Table):