Refactor some fields in `DueDate`
This commit is contained in:
parent
e821159864
commit
279b6c1dd5
|
|
@ -23,9 +23,9 @@
|
||||||
"confirmSubmitPerson": "Hiermit bestätige ich, dass die folgende Person meine Ergebnisse bewerten soll.",
|
"confirmSubmitPerson": "Hiermit bestätige ich, dass die folgende Person meine Ergebnisse bewerten soll.",
|
||||||
"confirmSubmitResults": "Hiermit bestätige ich, dass ich die Zusammenfassung meiner Ergebnisse überprüft habe und so abgeben will.",
|
"confirmSubmitResults": "Hiermit bestätige ich, dass ich die Zusammenfassung meiner Ergebnisse überprüft habe und so abgeben will.",
|
||||||
"dueDateIntroduction": "Reiche deine Ergebnisse pünktlich ein bis am: ",
|
"dueDateIntroduction": "Reiche deine Ergebnisse pünktlich ein bis am: ",
|
||||||
|
"dueDateEvaluation": "Freigabetermin Bewertung",
|
||||||
"dueDateNotSet": "Keine Abgabedaten wurden erfasst für diese Durchführung",
|
"dueDateNotSet": "Keine Abgabedaten wurden erfasst für diese Durchführung",
|
||||||
"dueDateSubmission": "Abgabetermin",
|
"dueDateSubmission": "Abgabetermin",
|
||||||
"dueDateTitle": "Abgabetermin",
|
|
||||||
"edit": "Bearbeiten",
|
"edit": "Bearbeiten",
|
||||||
"effortTitle": "Zeitaufwand",
|
"effortTitle": "Zeitaufwand",
|
||||||
"initialSituationTitle": "Ausgangslage",
|
"initialSituationTitle": "Ausgangslage",
|
||||||
|
|
@ -107,7 +107,7 @@
|
||||||
"showAllDueDates": "Alle Termine anzeigen"
|
"showAllDueDates": "Alle Termine anzeigen"
|
||||||
},
|
},
|
||||||
"edoniqTest": {
|
"edoniqTest": {
|
||||||
"qualifiesForExtendedTime": "edoniqTest.qualifiesForExtendedTime"
|
"qualifiesForExtendedTime": "Ich habe Anrecht auf einen Nachteilsausgleich."
|
||||||
},
|
},
|
||||||
"feedback": {
|
"feedback": {
|
||||||
"answers": "Antworten",
|
"answers": "Antworten",
|
||||||
|
|
@ -250,7 +250,6 @@
|
||||||
"titel": "Lernmedien"
|
"titel": "Lernmedien"
|
||||||
},
|
},
|
||||||
"overview": "Übersicht",
|
"overview": "Übersicht",
|
||||||
"show": "Mediathek anzeigen",
|
|
||||||
"title": "Mediathek"
|
"title": "Mediathek"
|
||||||
},
|
},
|
||||||
"messages": {
|
"messages": {
|
||||||
|
|
@ -273,7 +272,7 @@
|
||||||
"selfEvaluationNo": "@:selfEvaluation: Muss ich nochmals anschauen.",
|
"selfEvaluationNo": "@:selfEvaluation: Muss ich nochmals anschauen.",
|
||||||
"selfEvaluationYes": "@:selfEvaluation: Ich kann das.",
|
"selfEvaluationYes": "@:selfEvaluation: Ich kann das.",
|
||||||
"steps": "Schritt {{current}} von {{max}}",
|
"steps": "Schritt {{current}} von {{max}}",
|
||||||
"title": "@:selfEvaluation.selfEvaluation {{title}}",
|
"title": "Selbsteinschätzung {{title}}",
|
||||||
"yes": "Ja, ich kann das"
|
"yes": "Ja, ich kann das"
|
||||||
},
|
},
|
||||||
"settings": {
|
"settings": {
|
||||||
|
|
|
||||||
|
|
@ -41,7 +41,7 @@ const step = useRouteQuery("step");
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
<h3 class="mb-4 mt-8">{{ $t("assignment.dueDateTitle") }}asdf</h3>
|
<h3 class="mb-4 mt-8">{{ $t("assignment.dueDateSubmission") }}</h3>
|
||||||
<p v-if="props.dueDate?.toString() === 'Invalid Date'" class="text-large">
|
<p v-if="props.dueDate?.toString() === 'Invalid Date'" class="text-large">
|
||||||
{{ $t("assignment.dueDateIntroduction") }}
|
{{ $t("assignment.dueDateIntroduction") }}
|
||||||
<DateEmbedding :single-date="dueDate"></DateEmbedding>
|
<DateEmbedding :single-date="dueDate"></DateEmbedding>
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,25 @@
|
||||||
|
# Generated by Django 3.2.20 on 2023-08-23 09:27
|
||||||
|
|
||||||
|
from django.db import migrations
|
||||||
|
import wagtail.blocks
|
||||||
|
import wagtail.fields
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('assignment', '0005_alter_assignment_assignment_type'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='assignment',
|
||||||
|
name='evaluation_tasks',
|
||||||
|
field=wagtail.fields.StreamField([('task', wagtail.blocks.StructBlock([('title', wagtail.blocks.TextBlock()), ('description', wagtail.blocks.RichTextBlock(blank=True, features=['ul', 'bold', 'italic', 'link'], required=False)), ('max_points', wagtail.blocks.IntegerBlock()), ('sub_tasks', wagtail.blocks.ListBlock(wagtail.blocks.StructBlock([('title', wagtail.blocks.TextBlock()), ('description', wagtail.blocks.RichTextBlock(blank=True, features=['ul', 'bold', 'italic', 'link'], required=False)), ('points', wagtail.blocks.IntegerBlock())]), blank=True, use_json_field=True))]))], blank=True, help_text='Beurteilungsschritte', use_json_field=True),
|
||||||
|
),
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='assignment',
|
||||||
|
name='tasks',
|
||||||
|
field=wagtail.fields.StreamField([('task', wagtail.blocks.StructBlock([('title', wagtail.blocks.TextBlock()), ('file_submission_required', wagtail.blocks.BooleanBlock(required=False)), ('content', wagtail.blocks.StreamBlock([('explanation', wagtail.blocks.StructBlock([('text', wagtail.blocks.RichTextBlock(features=['ul', 'bold', 'italic', 'link']))])), ('user_text_input', wagtail.blocks.StructBlock([('text', wagtail.blocks.RichTextBlock(blank=True, features=['ul', 'bold', 'italic', 'link'], required=False))])), ('user_confirmation', wagtail.blocks.StructBlock([('text', wagtail.blocks.RichTextBlock(features=['ul', 'bold', 'italic', 'link']))]))], blank=True))]))], blank=True, help_text='Teilaufgaben', use_json_field=True),
|
||||||
|
),
|
||||||
|
]
|
||||||
|
|
@ -1,5 +1,4 @@
|
||||||
from django.db import models
|
from django.db import models
|
||||||
from django.utils.translation import gettext_lazy as _
|
|
||||||
from django_jsonform.models.fields import JSONField as JSONSchemaField
|
from django_jsonform.models.fields import JSONField as JSONSchemaField
|
||||||
|
|
||||||
from vbv_lernwelt.assignment.models import AssignmentType
|
from vbv_lernwelt.assignment.models import AssignmentType
|
||||||
|
|
@ -53,23 +52,22 @@ class CourseSessionAttendanceCourse(models.Model):
|
||||||
)
|
)
|
||||||
|
|
||||||
def save(self, *args, **kwargs):
|
def save(self, *args, **kwargs):
|
||||||
if not self.pk:
|
if self.learning_content_id:
|
||||||
title = ""
|
if not self.due_date_id:
|
||||||
url = ""
|
self.due_date = DueDate.objects.create(
|
||||||
page = None
|
course_session=self.course_session,
|
||||||
if self.learning_content_id:
|
)
|
||||||
title = self.learning_content.title
|
|
||||||
page = self.learning_content.page_ptr
|
if not self.due_date.manual_override_fields:
|
||||||
url = self.learning_content.get_frontend_url()
|
self.due_date.url = self.learning_content.get_frontend_url()
|
||||||
|
self.due_date.title = self.learning_content.title
|
||||||
|
self.due_date.page = self.learning_content.page_ptr
|
||||||
|
self.due_date.assignment_type_translation_key = (
|
||||||
|
"learningContentTypes.attendanceCourse"
|
||||||
|
)
|
||||||
|
|
||||||
|
self.due_date.save()
|
||||||
|
|
||||||
self.due_date = DueDate.objects.create(
|
|
||||||
url=url,
|
|
||||||
title=f"{title}",
|
|
||||||
learning_content_description=f"{_('Präsenzkurs')}",
|
|
||||||
description="",
|
|
||||||
course_session=self.course_session,
|
|
||||||
page=page,
|
|
||||||
)
|
|
||||||
super().save(*args, **kwargs)
|
super().save(*args, **kwargs)
|
||||||
|
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
|
|
@ -106,47 +104,57 @@ class CourseSessionAssignment(models.Model):
|
||||||
)
|
)
|
||||||
|
|
||||||
def save(self, *args, **kwargs):
|
def save(self, *args, **kwargs):
|
||||||
if not self.pk:
|
if self.learning_content_id:
|
||||||
title = ""
|
title = self.learning_content.title
|
||||||
url = ""
|
page = self.learning_content.page_ptr
|
||||||
page = None
|
url = self.learning_content.get_frontend_url()
|
||||||
assignment_type_description = ""
|
assignment_type = self.learning_content.assignment_type
|
||||||
if self.learning_content_id:
|
assignment_type_translation_keys = {
|
||||||
title = self.learning_content.title
|
AssignmentType.CASEWORK.value: "learningContentTypes.casework",
|
||||||
page = self.learning_content.page_ptr
|
AssignmentType.PREP_ASSIGNMENT.value: "learningContentTypes.prepAssignment",
|
||||||
url = self.learning_content.get_frontend_url()
|
AssignmentType.REFLECTION.value: "learningContentTypes.reflection",
|
||||||
assignment_type = self.learning_content.assignment_type
|
}
|
||||||
assignment_type_descriptions = {
|
|
||||||
AssignmentType.CASEWORK.name: _("Geleitete Fallarbeit"),
|
|
||||||
AssignmentType.PREP_ASSIGNMENT.name: _("Vorbereitungsauftrag"),
|
|
||||||
AssignmentType.REFLECTION.name: _("Reflexion"),
|
|
||||||
}
|
|
||||||
assignment_type_description = assignment_type_descriptions.get(
|
|
||||||
assignment_type, ""
|
|
||||||
)
|
|
||||||
|
|
||||||
if assignment_type in {
|
if assignment_type in (
|
||||||
AssignmentType.CASEWORK.value,
|
AssignmentType.CASEWORK.value,
|
||||||
AssignmentType.PREP_ASSIGNMENT.value,
|
AssignmentType.PREP_ASSIGNMENT.value,
|
||||||
}: # Reflexion
|
):
|
||||||
self.submission_deadline = DueDate.objects.create(
|
if not self.submission_deadline_id:
|
||||||
url=url,
|
self.submission_deadline = DueDate.objects.create(
|
||||||
title=f"{title}",
|
course_session=self.course_session,
|
||||||
learning_content_description=assignment_type_description,
|
)
|
||||||
description=f"{_('Abgabe Termin')}",
|
|
||||||
course_session=self.course_session,
|
if not self.submission_deadline.manual_override_fields:
|
||||||
page=page,
|
self.submission_deadline.url = url
|
||||||
)
|
self.submission_deadline.title = title
|
||||||
|
self.submission_deadline.assignment_type_translation_key = (
|
||||||
|
assignment_type_translation_keys[assignment_type]
|
||||||
|
)
|
||||||
|
self.submission_deadline.date_type_translation_key = (
|
||||||
|
"assignment.dueDateSubmission"
|
||||||
|
)
|
||||||
|
self.submission_deadline.page = page
|
||||||
|
|
||||||
|
self.submission_deadline.save()
|
||||||
|
|
||||||
if assignment_type == AssignmentType.CASEWORK.value:
|
if assignment_type == AssignmentType.CASEWORK.value:
|
||||||
self.evaluation_deadline = DueDate.objects.create(
|
if not self.evaluation_deadline_id:
|
||||||
url=url,
|
self.evaluation_deadline = DueDate.objects.create(
|
||||||
title=f"{title}",
|
course_session=self.course_session,
|
||||||
learning_content_description=assignment_type_description,
|
)
|
||||||
description=f"{_('Freigabe Termin Bewertungen')}",
|
|
||||||
course_session=self.course_session,
|
if not self.evaluation_deadline.manual_override_fields:
|
||||||
page=page,
|
self.evaluation_deadline.url = url
|
||||||
)
|
self.evaluation_deadline.title = title
|
||||||
|
self.evaluation_deadline.assignment_type_translation_key = (
|
||||||
|
assignment_type_translation_keys[assignment_type]
|
||||||
|
)
|
||||||
|
self.evaluation_deadline.date_type_translation_key = (
|
||||||
|
"assignment.dueDateEvaluation"
|
||||||
|
)
|
||||||
|
self.evaluation_deadline.page = page
|
||||||
|
|
||||||
|
self.evaluation_deadline.save()
|
||||||
|
|
||||||
super().save(*args, **kwargs)
|
super().save(*args, **kwargs)
|
||||||
|
|
||||||
|
|
@ -174,23 +182,21 @@ class CourseSessionEdoniqTest(models.Model):
|
||||||
return f"{self.course_session} - {self.learning_content}"
|
return f"{self.course_session} - {self.learning_content}"
|
||||||
|
|
||||||
def save(self, *args, **kwargs):
|
def save(self, *args, **kwargs):
|
||||||
if not self.pk:
|
if self.learning_content_id:
|
||||||
title = ""
|
if not self.deadline_id:
|
||||||
url = ""
|
self.deadline = DueDate.objects.create(
|
||||||
page = None
|
course_session=self.course_session,
|
||||||
edoniq_test_type_description = _("Wissens und Verständnisfragen")
|
)
|
||||||
if self.learning_content_id:
|
|
||||||
title = self.learning_content.title
|
|
||||||
page = self.learning_content.page_ptr
|
|
||||||
url = self.learning_content.get_frontend_url()
|
|
||||||
|
|
||||||
self.deadline = DueDate.objects.create(
|
if not self.deadline.manual_override_fields:
|
||||||
url=url,
|
self.deadline.url = self.learning_content.get_frontend_url()
|
||||||
title=f"{title}",
|
self.deadline.title = self.learning_content.title
|
||||||
learning_content_description=edoniq_test_type_description,
|
self.deadline.page = self.learning_content.page_ptr
|
||||||
description=f"{_('Abgabe Termin')}",
|
self.deadline.assignment_type_translation_key = (
|
||||||
course_session=self.course_session,
|
"learningContentTypes.edoniqTest"
|
||||||
page=page,
|
)
|
||||||
)
|
self.deadline.date_type_translation_key = "assignment.dueDateSubmission"
|
||||||
|
|
||||||
|
self.deadline.save()
|
||||||
|
|
||||||
super().save(*args, **kwargs)
|
super().save(*args, **kwargs)
|
||||||
|
|
|
||||||
|
|
@ -11,18 +11,34 @@ from vbv_lernwelt.learnpath.models import (
|
||||||
# Register your models here.
|
# Register your models here.
|
||||||
@admin.register(DueDate)
|
@admin.register(DueDate)
|
||||||
class DueDateAdmin(admin.ModelAdmin):
|
class DueDateAdmin(admin.ModelAdmin):
|
||||||
date_hierarchy = "end"
|
date_hierarchy = "start"
|
||||||
list_display = [
|
list_display = [
|
||||||
"title",
|
|
||||||
"course_session",
|
"course_session",
|
||||||
"learning_content_description",
|
"title",
|
||||||
|
"display_subtitle",
|
||||||
"start",
|
"start",
|
||||||
"end",
|
"end",
|
||||||
"is_undefined",
|
|
||||||
]
|
]
|
||||||
list_filter = ["course_session"]
|
list_filter = ["course_session"]
|
||||||
readonly_fields = ["course_session", "page"]
|
readonly_fields = ["course_session", "page"]
|
||||||
|
|
||||||
|
def get_readonly_fields(self, request, obj=None):
|
||||||
|
default_readonly = super(DueDateAdmin, self).get_readonly_fields(request, obj)
|
||||||
|
|
||||||
|
if obj is None:
|
||||||
|
return default_readonly
|
||||||
|
|
||||||
|
if not obj.manual_override_fields:
|
||||||
|
return default_readonly + [
|
||||||
|
"title",
|
||||||
|
"subtitle",
|
||||||
|
"assignment_type_translation_key",
|
||||||
|
"date_type_translation_key",
|
||||||
|
"url",
|
||||||
|
]
|
||||||
|
|
||||||
|
return default_readonly
|
||||||
|
|
||||||
def formfield_for_foreignkey(self, db_field, request, **kwargs):
|
def formfield_for_foreignkey(self, db_field, request, **kwargs):
|
||||||
if db_field.name == "page":
|
if db_field.name == "page":
|
||||||
if request.resolver_match.kwargs.get("object_id"):
|
if request.resolver_match.kwargs.get("object_id"):
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,65 @@
|
||||||
|
# Generated by Django 3.2.20 on 2023-08-23 09:26
|
||||||
|
|
||||||
|
from django.db import migrations, models
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('duedate', '0002_alter_duedate_start'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.AlterModelOptions(
|
||||||
|
name='duedate',
|
||||||
|
options={'ordering': ['start', 'end']},
|
||||||
|
),
|
||||||
|
migrations.RemoveField(
|
||||||
|
model_name='duedate',
|
||||||
|
name='description',
|
||||||
|
),
|
||||||
|
migrations.RemoveField(
|
||||||
|
model_name='duedate',
|
||||||
|
name='learning_content_description',
|
||||||
|
),
|
||||||
|
migrations.AddField(
|
||||||
|
model_name='duedate',
|
||||||
|
name='assignment_type_translation_key',
|
||||||
|
field=models.CharField(blank=True, default='', help_text='Translation Key aus dem Frontend', max_length=1024),
|
||||||
|
),
|
||||||
|
migrations.AddField(
|
||||||
|
model_name='duedate',
|
||||||
|
name='date_type_translation_key',
|
||||||
|
field=models.CharField(blank=True, default='', help_text='Translation Key aus dem Frontend', max_length=1024),
|
||||||
|
),
|
||||||
|
migrations.AddField(
|
||||||
|
model_name='duedate',
|
||||||
|
name='manual_override_fields',
|
||||||
|
field=models.BooleanField(default=False, help_text='Nur aktivieren, wenn man die Felder manuell überschreiben will'),
|
||||||
|
),
|
||||||
|
migrations.AddField(
|
||||||
|
model_name='duedate',
|
||||||
|
name='subtitle',
|
||||||
|
field=models.TextField(blank=True, default='', help_text='Überschreibt den Untertitel bei `assignment_type_translation_key` und `date_type_translation_key`'),
|
||||||
|
),
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='duedate',
|
||||||
|
name='end',
|
||||||
|
field=models.DateTimeField(blank=True, db_index=True, help_text='Enddatum ist optional', null=True),
|
||||||
|
),
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='duedate',
|
||||||
|
name='start',
|
||||||
|
field=models.DateTimeField(blank=True, db_index=True, help_text='Startdatum ist Pflicht', null=True),
|
||||||
|
),
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='duedate',
|
||||||
|
name='title',
|
||||||
|
field=models.CharField(default='', help_text='Title wird standarmässig vom LearningContent übernommen', max_length=1024),
|
||||||
|
),
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='duedate',
|
||||||
|
name='url',
|
||||||
|
field=models.CharField(blank=True, default='', help_text='URL wird vom LearningContent übernommen', max_length=1024),
|
||||||
|
),
|
||||||
|
]
|
||||||
|
|
@ -10,14 +10,44 @@ from vbv_lernwelt.course.models import CourseSession
|
||||||
|
|
||||||
|
|
||||||
class DueDate(models.Model):
|
class DueDate(models.Model):
|
||||||
start = models.DateTimeField(null=True, db_index=True, blank=True)
|
start = models.DateTimeField(
|
||||||
end = models.DateTimeField(null=True, blank=True, db_index=True)
|
null=True, blank=True, db_index=True, help_text="Startdatum ist Pflicht"
|
||||||
title = models.CharField(default="", max_length=1024)
|
)
|
||||||
learning_content_description = models.CharField(
|
end = models.DateTimeField(
|
||||||
default="", blank=True, max_length=1024
|
null=True, blank=True, db_index=True, help_text="Enddatum ist optional"
|
||||||
|
)
|
||||||
|
manual_override_fields = models.BooleanField(
|
||||||
|
default=False,
|
||||||
|
help_text="Nur aktivieren, wenn man die Felder manuell überschreiben will",
|
||||||
|
)
|
||||||
|
title = models.CharField(
|
||||||
|
default="",
|
||||||
|
max_length=1024,
|
||||||
|
help_text="Title wird standarmässig vom LearningContent übernommen",
|
||||||
|
)
|
||||||
|
assignment_type_translation_key = models.CharField(
|
||||||
|
default="",
|
||||||
|
blank=True,
|
||||||
|
max_length=1024,
|
||||||
|
help_text="Translation Key aus dem Frontend",
|
||||||
|
)
|
||||||
|
date_type_translation_key = models.CharField(
|
||||||
|
default="",
|
||||||
|
blank=True,
|
||||||
|
max_length=1024,
|
||||||
|
help_text="Translation Key aus dem Frontend",
|
||||||
|
)
|
||||||
|
subtitle = models.TextField(
|
||||||
|
default="",
|
||||||
|
blank=True,
|
||||||
|
help_text="Überschreibt den Untertitel bei `assignment_type_translation_key` und `date_type_translation_key`",
|
||||||
|
)
|
||||||
|
url = models.CharField(
|
||||||
|
default="",
|
||||||
|
blank=True,
|
||||||
|
max_length=1024,
|
||||||
|
help_text="URL wird vom LearningContent übernommen",
|
||||||
)
|
)
|
||||||
description = models.CharField(default="", blank=True, max_length=1024)
|
|
||||||
url = models.CharField(default="", blank=True, max_length=1024)
|
|
||||||
course_session = models.ForeignKey(
|
course_session = models.ForeignKey(
|
||||||
"course.CourseSession",
|
"course.CourseSession",
|
||||||
on_delete=models.CASCADE,
|
on_delete=models.CASCADE,
|
||||||
|
|
@ -26,10 +56,8 @@ class DueDate(models.Model):
|
||||||
|
|
||||||
page = models.ForeignKey(Page, on_delete=models.SET_NULL, null=True, blank=True)
|
page = models.ForeignKey(Page, on_delete=models.SET_NULL, null=True, blank=True)
|
||||||
|
|
||||||
def Meta(self):
|
class Meta:
|
||||||
ordering = ["start", "end"]
|
ordering = ["start", "end"]
|
||||||
verbose_name = _("Termin")
|
|
||||||
help = "The start date is mandatory. You can set the end date if you want to have a deadline with a duration."
|
|
||||||
|
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
if self.is_undefined:
|
if self.is_undefined:
|
||||||
|
|
@ -43,6 +71,19 @@ class DueDate(models.Model):
|
||||||
|
|
||||||
return result
|
return result
|
||||||
|
|
||||||
|
@property
|
||||||
|
def display_subtitle(self):
|
||||||
|
result = ""
|
||||||
|
if self.subtitle and self.manual_override_fields:
|
||||||
|
result = self.subtitle
|
||||||
|
|
||||||
|
result = self.assignment_type_translation_key
|
||||||
|
|
||||||
|
if self.date_type_translation_key:
|
||||||
|
result += ": " + self.date_type_translation_key
|
||||||
|
|
||||||
|
return result
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def is_undefined(self):
|
def is_undefined(self):
|
||||||
return self.start is None
|
return self.start is None
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue