Files
fet2020/fet2020/tasks/models.py

131 lines
3.8 KiB
Python
Raw Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
from datetime import date
from django.conf import settings
from django.core.validators import ValidationError
from django.contrib.auth.models import User
from django.db import models
from django.db.models.constraints import UniqueConstraint
from django.urls import reverse
from django.utils import timezone
from django.utils.text import slugify
from django.utils.translation import gettext_lazy as _
from documents import createPadifNotExists
from .managers import TaskManager
class TaskList(models.Model):
name = models.CharField(max_length=60)
slug = models.SlugField(unique=True, null=True, blank=True)
users = models.ManyToManyField(User, blank=True)
objects = models.Manager()
class Meta:
verbose_name = "Auf­ga­ben­be­reich"
verbose_name_plural = "Auf­ga­ben­be­reiche"
def __str__(self):
return self.name
def get_absolute_url(self):
return reverse("tasks")
class Task(models.Model):
title = models.CharField(verbose_name="Titel", max_length=140)
task_list = models.ForeignKey(
TaskList, verbose_name="Aufgabenbereich", on_delete=models.CASCADE, null=True
)
created_date = models.DateTimeField(auto_now_add=True)
due_date = models.DateField(verbose_name="Fälligkeit", blank=True, null=True)
completed = models.BooleanField(verbose_name="Abgeschlossen", default=False)
completed_date = models.DateField(blank=True, null=True)
created_by = models.ForeignKey(
User,
related_name="created_by",
on_delete=models.CASCADE,
)
assigned_to = models.ForeignKey(
User,
blank=True,
null=True,
related_name="assigned_to",
on_delete=models.CASCADE,
verbose_name="Zugewiesen an",
)
note = models.TextField(verbose_name="Notizen", blank=True, null=True)
priority = models.PositiveIntegerField(
verbose_name="Priorität", blank=True, null=True
)
objects = models.Manager()
taskmanager = TaskManager()
class Meta:
verbose_name = "Aufgabe"
verbose_name_plural = "Aufgaben"
def __str__(self):
return self.title
def get_absolute_url(self):
return reverse("task-detail", kwargs={"pk": self.id})
def save(self, *args, **kwargs):
if self.completed and not self.completed_date:
self.completed_date = timezone.now().date()
if not self.completed and self.completed_date:
self.completed_date = None
super().save(*args, **kwargs)
class Document(models.Model):
title = models.CharField(verbose_name="Titel", max_length=128)
etherpad_key = models.CharField(max_length=50, blank=True)
date = models.DateField(verbose_name="Datum", default=date.today)
task = models.ForeignKey(Task, on_delete=models.CASCADE)
objects = models.Manager()
class Meta:
verbose_name = "Dokument"
verbose_name_plural = "Dokumente"
constraints = [
# TODO: include lower/upper case - when Django 4.0, then go for it.
UniqueConstraint(
fields=["title", "date", "task"], name="unique_task_document"
),
]
def clean(self):
pad_name = slugify(
str(self.date) + "-" + self.task.title + "-" + slugify(self.title)
)
if len(pad_name) > 50:
raise ValidationError(
_(
"Name zum Erstellen des Etherpads ist zu lange - max. 50 Zeichen. (Länge: %(length)s, Name: %(pad_name)s)"
),
params={"length": len(pad_name), "pad_name": pad_name},
)
def save(self, *args, **kwargs):
self.etherpad_key = createPadifNotExists(
slugify(str(self.date) + "-" + self.task.title + "-" + slugify(self.title))
)
super().save(*args, **kwargs)
def __str__(self):
return self.title