Improve teams settings invites and due tasks
This commit is contained in:
@@ -3,6 +3,7 @@ import secrets
|
||||
from django.conf import settings
|
||||
from django.db import models
|
||||
from django.urls import reverse
|
||||
from django.utils import timezone
|
||||
from django.utils.translation import gettext_lazy as _
|
||||
|
||||
TAG_RE = re.compile(r'(?<!\w)#([\wäöüÄÖÜß-]+)')
|
||||
@@ -19,6 +20,25 @@ class Tag(models.Model):
|
||||
return f'#{self.name}'
|
||||
|
||||
|
||||
class UserInvite(models.Model):
|
||||
email = models.EmailField()
|
||||
token = models.CharField(max_length=80, unique=True, editable=False)
|
||||
invited_by = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE, related_name='sent_user_invites')
|
||||
created_at = models.DateTimeField(auto_now_add=True)
|
||||
accepted_at = models.DateTimeField(blank=True, null=True)
|
||||
|
||||
class Meta:
|
||||
ordering = ['-created_at']
|
||||
|
||||
def save(self, *args, **kwargs):
|
||||
if not self.token:
|
||||
self.token = secrets.token_urlsafe(32)
|
||||
super().save(*args, **kwargs)
|
||||
|
||||
def __str__(self):
|
||||
return f'Benutzereinladung {self.email}'
|
||||
|
||||
|
||||
class Team(models.Model):
|
||||
name = models.CharField(max_length=120)
|
||||
slug = models.SlugField(max_length=80, unique=True, allow_unicode=True, help_text='Team-Tag ohne #, z.B. my2dos')
|
||||
@@ -112,6 +132,14 @@ class Item(models.Model):
|
||||
def get_absolute_url(self):
|
||||
return reverse('item_detail', args=[self.pk])
|
||||
|
||||
@property
|
||||
def is_overdue(self):
|
||||
return self.kind == self.Kind.TODO and not self.is_done and self.due_at and self.due_at < timezone.now()
|
||||
|
||||
@property
|
||||
def is_due_today(self):
|
||||
return self.kind == self.Kind.TODO and not self.is_done and self.due_at and timezone.localdate(self.due_at) == timezone.localdate()
|
||||
|
||||
def sync_metadata(self):
|
||||
tag_names = {m.group(1).lower() for m in TAG_RE.finditer(self.content)}
|
||||
tags = [Tag.objects.get_or_create(name=name)[0] for name in tag_names]
|
||||
@@ -136,11 +164,13 @@ class Kanban(models.Model):
|
||||
|
||||
class UserPreference(models.Model):
|
||||
user = models.OneToOneField(settings.AUTH_USER_MODEL, on_delete=models.CASCADE, related_name='preferences')
|
||||
language = models.CharField(max_length=10, blank=True, default='', choices=[('', _('Browser default')), ('de', 'Deutsch'), ('en', 'English')])
|
||||
show_notes = models.BooleanField(default=True)
|
||||
show_open_todos = models.BooleanField(default=True)
|
||||
show_done_todos = models.BooleanField(default=False)
|
||||
show_links = models.BooleanField(default=True)
|
||||
show_journal = models.BooleanField(default=False)
|
||||
due_first = models.BooleanField(default=True)
|
||||
overview_lines = models.PositiveSmallIntegerField(default=4)
|
||||
|
||||
def __str__(self):
|
||||
|
||||
Reference in New Issue
Block a user