From 32f6cef7bddb9796bd9dddf09471489ea82a49fb Mon Sep 17 00:00:00 2001 From: Robin Sonnabend <robin@fsmpi.rwth-aachen.de> Date: Tue, 28 Feb 2017 03:50:14 +0100 Subject: [PATCH] README and correct coercing for todostates --- README.md | 16 ++++++++++++++++ models/database.py | 9 +++++++-- views/forms.py | 19 +++++++++++++++---- 3 files changed, 38 insertions(+), 6 deletions(-) create mode 100644 README.md diff --git a/README.md b/README.md new file mode 100644 index 0000000..2ecbca3 --- /dev/null +++ b/README.md @@ -0,0 +1,16 @@ +# Protokollsystem 3 + +System zur Verwaltung von Protokollen und Sitzungen. + +* Planung der Tagesordnung +* Einladungsmails +* Kompilieren vom Protokollquelltext +* PDF-Protokoll mit LaTeX +* Protokollversand samt Anhang +* automatisches Hochladen ins Wiki +* Etherpadanbindung +* Todoverwaltung mit mehr Zuständen +* Beschlussverwaltung +* Rechteverwaltung (interne Abschnitte) +* Hochladen der Tagesordnung in einen Kalender +* externe Protokolle ohne Protokollsyntax diff --git a/models/database.py b/models/database.py index 07c4e4f..897ae88 100644 --- a/models/database.py +++ b/models/database.py @@ -5,7 +5,7 @@ import math from io import StringIO, BytesIO from enum import Enum -from shared import db, date_filter, escape_tex, DATE_KEY, START_TIME_KEY, END_TIME_KEY, AUTHOR_KEY, PARTICIPANTS_KEY, LOCATION_KEY +from shared import db, date_filter, date_filter_short, escape_tex, DATE_KEY, START_TIME_KEY, END_TIME_KEY, AUTHOR_KEY, PARTICIPANTS_KEY, LOCATION_KEY from utils import random_string, url_manager, get_etherpad_url, split_terms from models.errors import DateNotMatchingException @@ -411,6 +411,11 @@ class Todo(db.Model): self.id, self.number, self.who, self.description, self.state, self.date) def is_done(self): + if self.state.needs_date(): + if self.state == TodoState.after: + return datetime.now().date() >= self.date + elif self.state == TodoState.before: + return datetime.now().date() <= self.date return self.state.is_done() def get_id(self): @@ -433,7 +438,7 @@ class Todo(db.Model): def get_state_plain(self): result = self.state.get_name() if self.state.needs_date(): - result = "{} {}".format(result, date_filter(self.state.date)) + result = "{} {}".format(result, date_filter_short(self.date)) return result def get_state_tex(self): return self.get_state_plain() diff --git a/views/forms.py b/views/forms.py index e917996..91d108f 100644 --- a/views/forms.py +++ b/views/forms.py @@ -16,7 +16,7 @@ def get_protocoltype_choices(protocoltypes, add_all=True): def get_todostate_choices(): return [ - (state.value, state.get_name()) + (state, state.get_name()) for state in TodoState ] @@ -26,6 +26,12 @@ def get_calendar_choices(): for calendar in CalendarClient().get_calendars() ] +def coerce_todostate(key): + if isinstance(key, str): + class_part, key_part = key.split(".") + key = TodoState[key_part] + return key + class LoginForm(FlaskForm): username = StringField("Benutzer", validators=[InputRequired("Bitte gib deinen Benutzernamen ein.")]) password = PasswordField("Passwort", validators=[InputRequired("Bitte gib dein Passwort ein.")]) @@ -44,7 +50,11 @@ class ProtocolTypeForm(FlaskForm): use_wiki = BooleanField("Wiki benutzen") wiki_only_public = BooleanField("Wiki ist öffentlich") printer = SelectField("Drucker", choices=list(zip(config.PRINTING_PRINTERS, config.PRINTING_PRINTERS))) - calendar = SelectField("Kalender", choices=get_calendar_choices()) + calendar = SelectField("Kalender", choices=[]) + + def __init__(self, **kwargs): + super().__init__(self, **kwargs) + self.calendar.choices = get_calendar_choices() class DefaultTopForm(FlaskForm): name = StringField("Name", validators=[InputRequired("Du musst einen Namen angeben.")]) @@ -124,10 +134,11 @@ class NewTodoForm(FlaskForm): class TodoForm(FlaskForm): who = StringField("Person") description = StringField("Aufgabe", validators=[InputRequired("Bitte gib an, was erledigt werden soll.")]) - state = SelectField("Status", choices=[], coerce=int, validators=[CheckTodoDateByState()]) + state = SelectField("Status", choices=[], coerce=coerce_todostate, validators=[CheckTodoDateByState()]) date = DateField("Datum", format="%d.%m.%Y", validators=[Optional()]) - def __init__(self): + def __init__(self, **kwargs): + super().__init__(**kwargs) self.state.choices = get_todostate_choices() class TodoMailForm(FlaskForm): -- GitLab