diff --git a/generic/forms.py b/generic/forms.py
index bbc2e972..0c9b6204 100755
--- a/generic/forms.py
+++ b/generic/forms.py
@@ -61,6 +61,46 @@ from longs.models import Long
from sbas.models import UserAnswer as SbasUserAnswer
from sbas.models import Exam as SbasExam
from sbas.models import Question as SbasQuestion
+from django.core.exceptions import ValidationError
+import datetime
+from django.forms.utils import from_current_timezone, to_current_timezone
+
+class SplitDateTimeFieldDefaultTime(SplitDateTimeField):
+ def compress(self, data_list):
+ if data_list:
+ # Raise a validation error if time or date is empty
+ # (possible if SplitDateTimeField has required=False).
+ if data_list[0] in self.empty_values:
+ raise ValidationError(
+ self.error_messages["invalid_date"], code="invalid_date"
+ )
+ if data_list[1] in self.empty_values:
+ data_list[1] = datetime.time(0, 0)
+ #raise ValidationError(
+ # self.error_messages["invalid_time"], code="invalid_time"
+ #)
+ result = datetime.datetime.combine(*data_list)
+ return from_current_timezone(result)
+ return None
+
+
+class SplitDateTimeFieldDefaultTimeEnd(SplitDateTimeField):
+ def compress(self, data_list):
+ if data_list:
+ # Raise a validation error if time or date is empty
+ # (possible if SplitDateTimeField has required=False).
+ if data_list[0] in self.empty_values:
+ raise ValidationError(
+ self.error_messages["invalid_date"], code="invalid_date"
+ )
+ if data_list[1] in self.empty_values:
+ data_list[1] = datetime.time(23, 59)
+ #raise ValidationError(
+ # self.error_messages["invalid_time"], code="invalid_time"
+ #)
+ result = datetime.datetime.combine(*data_list)
+ return from_current_timezone(result)
+ return None
class ExamFormMixin:
@@ -82,7 +122,7 @@ class ExamFormMixin:
required=False,
queryset=user_user_group_queryset,
)
- self.fields["start_date"] = SplitDateTimeField(
+ self.fields["start_date"] = SplitDateTimeFieldDefaultTime(
widget=SplitDateTimeWidget(
date_attrs={"type": "date", "class": "datepicker"},
time_attrs={"type": "time", "class": "timepicker"},
@@ -91,7 +131,7 @@ class ExamFormMixin:
),
required=False,
)
- self.fields["end_date"] = SplitDateTimeField(
+ self.fields["end_date"] = SplitDateTimeFieldDefaultTimeEnd(
widget=SplitDateTimeWidget(
date_attrs={"type": "date", "class": "datepicker"},
time_attrs={"type": "time", "class": "timepicker"},
diff --git a/generic/models.py b/generic/models.py
index 25504a80..b6e9f66e 100644
--- a/generic/models.py
+++ b/generic/models.py
@@ -598,9 +598,7 @@ class ExamOrCollectionGenericBase(models.Model, AuthorMixin):
raise ValidationError("If restrict to dates is set, a start date must be set")
if self.end_date is not None and self.end_date <= self.start_date:
- print(f"{self.start_date=}")
- print(f"{self.end_date=}")
- raise ValidationError("End date must be after start date")
+ raise ValidationError({"end_date" : "End date must be after start date"})
return super().clean(*args, **kwargs)
diff --git a/generic/templates/generic/exam_overview_headers.html b/generic/templates/generic/exam_overview_headers.html
index c611ede0..2ef494ec 100644
--- a/generic/templates/generic/exam_overview_headers.html
+++ b/generic/templates/generic/exam_overview_headers.html
@@ -38,6 +38,14 @@ Exam mode: {{ exam.exam_mode }}
{% endif %}
Open access: {{ exam.open_access }}
+{% if exam.start_date %}
+ Start date: {{ exam.start_date }}
+{% endif %}
+{% if exam.end_date %}
+ / End date: {{ exam.end_date }}
+{% endif %}
+
+