From 2c7efac25634d0175c23742e3c241bcc1dd3a72b Mon Sep 17 00:00:00 2001
From: Jiri Kalvoda <jirikalvoda@kam.mff.cuni.cz>
Date: Fri, 24 Sep 2021 17:49:37 +0200
Subject: [PATCH] =?UTF-8?q?P=C5=99esunut=C3=AD=20mo.web.org=5Fround.MODate?=
 =?UTF-8?q?TimeField=20na=20mo.web.fields.DateTime?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 mo/web/fields.py    | 15 +++++++++++++++
 mo/web/org_round.py | 24 ++++--------------------
 2 files changed, 19 insertions(+), 20 deletions(-)

diff --git a/mo/web/fields.py b/mo/web/fields.py
index ca8454f2..c3d70a10 100644
--- a/mo/web/fields.py
+++ b/mo/web/fields.py
@@ -186,3 +186,18 @@ class RepeatPassword(wtforms.PasswordField):
     def pre_validate(field, form):
         if field.data != form.new_passwd.data:
             raise wtforms.ValidationError('Hesla se neshodují.')
+
+
+class DateTime(wtforms.DateTimeField):
+    def __init__(self, label, format='%Y-%m-%d %H:%M', description='Ve formátu 2000-01-01 12:34', **kwargs):
+        super().__init__(label, format=format, description=description, **kwargs)
+
+    def process_data(self, valuelist):
+        super().process_data(valuelist)
+        if self.data is not None:
+            self.data = self.data.astimezone()
+
+    def process_formdata(self, valuelist):
+        super().process_formdata(valuelist)
+        if self.data is not None:
+            self.data = self.data.astimezone()
diff --git a/mo/web/org_round.py b/mo/web/org_round.py
index 45cbba7b..a211d6ad 100644
--- a/mo/web/org_round.py
+++ b/mo/web/org_round.py
@@ -419,22 +419,6 @@ def org_round_import(id: int):
     return generic_import(round, master_round, None, None)
 
 
-class MODateTimeField(wtforms.DateTimeField):
-
-    def __init__(self, label, format='%Y-%m-%d %H:%M', description='Ve formátu 2000-01-01 12:34', **kwargs):
-        super().__init__(label, format=format, description=description, **kwargs)
-
-    def process_data(self, valuelist):
-        super().process_data(valuelist)
-        if self.data is not None:
-            self.data = self.data.astimezone()
-
-    def process_formdata(self, valuelist):
-        super().process_formdata(valuelist)
-        if self.data is not None:
-            self.data = self.data.astimezone()
-
-
 class RoundEditForm(FlaskForm):
     _for_round: Optional[db.Round] = None
 
@@ -445,10 +429,10 @@ class RoundEditForm(FlaskForm):
     )
     # Only the desktop Firefox does not support datetime-local field nowadays,
     # other browsers does provide date and time picker UI :(
-    ct_tasks_start = MODateTimeField("Čas zveřejnění úloh pro účastníky", validators=[validators.Optional()])
-    pr_tasks_start = MODateTimeField("Čas zveřejnění úloh pro dozor", validators=[validators.Optional()])
-    ct_submit_end = MODateTimeField("Konec odevzdávání pro účastníky", validators=[validators.Optional()])
-    pr_submit_end = MODateTimeField("Konec odevzdávání pro dozor", validators=[validators.Optional()])
+    ct_tasks_start = mo_fields.DateTime("Čas zveřejnění úloh pro účastníky", validators=[validators.Optional()])
+    pr_tasks_start = mo_fields.DateTime("Čas zveřejnění úloh pro dozor", validators=[validators.Optional()])
+    ct_submit_end = mo_fields.DateTime("Konec odevzdávání pro účastníky", validators=[validators.Optional()])
+    pr_submit_end = mo_fields.DateTime("Konec odevzdávání pro dozor", validators=[validators.Optional()])
     score_mode = wtforms.SelectField("Výsledková listina", choices=db.RoundScoreMode.choices(), coerce=db.RoundScoreMode.coerce)
     score_winner_limit = mo_fields.Points(
         "Hranice bodů pro vítěze", validators=[validators.Optional(), validators.NumberRange(min=0)],
-- 
GitLab