From 5321324d141c6a81f4cc7074c506779861a78440 Mon Sep 17 00:00:00 2001 From: patrick Date: Thu, 24 Jun 2021 12:14:18 +0000 Subject: [PATCH] add fileupload, create views, detail view of task --- fet2020/intern/admin.py | 41 ++++- fet2020/intern/forms.py | 11 ++ fet2020/intern/models.py | 48 +++++- fet2020/intern/urls.py | 11 ++ fet2020/intern/views.py | 142 +++++++++++++-- fet2020/tasks/forms.py | 22 ++- fet2020/tasks/models.py | 54 ++++++ fet2020/tasks/urls.py | 4 + fet2020/tasks/views.py | 148 ++++++++++++---- fet2020/templates/intern/docu.html | 46 ++++- fet2020/templates/intern/etherpad_create.html | 22 +++ fet2020/templates/intern/file_create.html | 22 +++ fet2020/templates/intern/index.html | 5 +- fet2020/templates/intern/topic.html | 35 +++- fet2020/templates/tasks/docu_create.html | 22 +++ fet2020/templates/tasks/index.html | 163 ++++++------------ fet2020/templates/tasks/task_create.html | 22 +++ fet2020/templates/tasks/task_detail.html | 46 +++++ 18 files changed, 664 insertions(+), 200 deletions(-) create mode 100644 fet2020/templates/intern/etherpad_create.html create mode 100644 fet2020/templates/intern/file_create.html create mode 100644 fet2020/templates/tasks/docu_create.html create mode 100644 fet2020/templates/tasks/task_create.html create mode 100644 fet2020/templates/tasks/task_detail.html diff --git a/fet2020/intern/admin.py b/fet2020/intern/admin.py index 6b48da34..167a2c4e 100644 --- a/fet2020/intern/admin.py +++ b/fet2020/intern/admin.py @@ -2,7 +2,13 @@ from django.contrib import admin from django.db.models import F from .models import TopicGroup, Topic, Documentation, Document, FileUpload -from .forms import TopicGroupAdminForm, TopicAdminForm, DocumentationAdminForm, DocumentAdminForm, FileUploadAdminForm +from .forms import ( + TopicGroupAdminForm, + TopicAdminForm, + DocumentationAdminForm, + DocumentAdminForm, + FileUploadAdminForm, +) class DocumentationInline(admin.TabularInline): @@ -39,7 +45,7 @@ class TopicInline(admin.TabularInline): class TopicGroupAdmin(admin.ModelAdmin): form = TopicGroupAdminForm model = TopicGroup - search_fields = ("title", ) + search_fields = ("title",) inlines = (TopicInline,) list_display = ["title", "order"] @@ -54,7 +60,7 @@ class TopicAdmin(admin.ModelAdmin): form = TopicAdminForm model = Topic search_fields = ("title",) - inlines = (DocumentationInline, ) + inlines = (DocumentationInline,) list_filter = ["topic_group", "archive"] list_display = ["title", "topic_group", "archive"] @@ -68,9 +74,15 @@ class TopicAdmin(admin.ModelAdmin): class DocumentationAdmin(admin.ModelAdmin): form = DocumentationAdminForm model = Documentation - inlines = (DocumentInline, FileUploadInline, ) + inlines = ( + DocumentInline, + FileUploadInline, + ) - list_display = ["title", "topic",] + list_display = [ + "title", + "topic", + ] def save_model(self, request, obj, form, change): obj.created_by = request.user @@ -81,8 +93,14 @@ class DocumentAdmin(admin.ModelAdmin): form = DocumentAdminForm model = Document - list_filter = ["documentation",] - list_display = ["title", "date", "documentation",] + list_filter = [ + "documentation", + ] + list_display = [ + "title", + "date", + "documentation", + ] ordering = ["-date"] def save_model(self, request, obj, form, change): @@ -94,8 +112,13 @@ class FileUploadAdmin(admin.ModelAdmin): form = FileUploadAdminForm model = FileUpload - list_filter = ["documentation",] - list_display = ["title", "documentation",] + list_filter = [ + "documentation", + ] + list_display = [ + "title", + "documentation", + ] def save_model(self, request, obj, form, change): obj.created_by = request.user diff --git a/fet2020/intern/forms.py b/fet2020/intern/forms.py index 29ec01c2..ceb9b2b4 100644 --- a/fet2020/intern/forms.py +++ b/fet2020/intern/forms.py @@ -27,6 +27,7 @@ class TopicAdminForm(forms.ModelForm): "archive", "description", "topic_group", + "task_list", ] widgets = {"description": CKEditorUploadingWidget(config_name="default")} @@ -82,3 +83,13 @@ class DocumentForm(forms.ModelForm): widgets = { "date": DateInput(format=("%d-%m-%Y")), } + + +class FileUploadForm(forms.ModelForm): + class Meta: + model = FileUpload + fields = [ + "title", + "file_field", + "documentation", + ] diff --git a/fet2020/intern/models.py b/fet2020/intern/models.py index 9e0fc148..c79f5b5a 100644 --- a/fet2020/intern/models.py +++ b/fet2020/intern/models.py @@ -10,6 +10,7 @@ from django.utils.text import slugify from django.utils.translation import gettext_lazy as _ from documents import createPadifNotExists +from tasks.models import TaskList logger = logging.getLogger(__name__) @@ -18,7 +19,9 @@ class TopicGroup(models.Model): title = models.CharField(verbose_name="Titel", max_length=128) slug = models.SlugField(max_length=10, unique=True) - order = models.PositiveSmallIntegerField(verbose_name="Reihenfolge", unique=True, null=True, blank=True) + order = models.PositiveSmallIntegerField( + verbose_name="Reihenfolge", unique=True, null=True, blank=True + ) objects = models.Manager() @@ -47,7 +50,12 @@ class Topic(models.Model): description = models.TextField(null=True, blank=True) - topic_group = models.ForeignKey(TopicGroup, on_delete=models.CASCADE, verbose_name="Themenbereich") + topic_group = models.ForeignKey( + TopicGroup, on_delete=models.CASCADE, verbose_name="Themenbereich" + ) + task_list = models.ForeignKey( + TaskList, on_delete=models.CASCADE, null=True, blank=True + ) objects = models.Manager() @@ -82,7 +90,9 @@ class Documentation(models.Model): return self.topic.title + " / " + self.title def get_absolute_url(self): - return reverse("docu", kwargs={"topic_slug": self.topic.slug, "slug": self.slug}) + return reverse( + "docu", kwargs={"topic_slug": self.topic.slug, "slug": self.slug} + ) def save(self, *args, **kwargs): if not self.slug: @@ -105,21 +115,39 @@ class Document(models.Model): verbose_name_plural = "Dokumente" constraints = [ - UniqueConstraint(fields=['title', 'date', 'documentation'], name='unique_intern_document'), + UniqueConstraint( + fields=["title", "date", "documentation"], name="unique_intern_document" + ), ] def clean(self): - pad_name = slugify(str(self.date) + "-" + self.documentation.topic.slug + "-" + self.documentation.slug + "-" + slugify(self.title)) + pad_name = slugify( + str(self.date) + + "-" + + self.documentation.topic.slug + + "-" + + self.documentation.slug + + "-" + + 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}, + _( + "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(self.date) + "-" + self.documentation.topic.slug + "-" + self.documentation.slug + "-" + slugify(self.title) + slugify(self.date) + + "-" + + self.documentation.topic.slug + + "-" + + self.documentation.slug + + "-" + + slugify(self.title) ) super().save(*args, **kwargs) @@ -130,7 +158,9 @@ class Document(models.Model): class FileUpload(models.Model): title = models.CharField(verbose_name="Titel", max_length=128) - file_field = models.FileField(verbose_name="Dokument", upload_to="uploads/intern/files/") + file_field = models.FileField( + verbose_name="Dokument", upload_to="uploads/intern/files/" + ) date = models.DateField(verbose_name="Datum", default=date.today) documentation = models.ForeignKey(Documentation, on_delete=models.CASCADE) diff --git a/fet2020/intern/urls.py b/fet2020/intern/urls.py index 538bdb6a..1edc2c2f 100644 --- a/fet2020/intern/urls.py +++ b/fet2020/intern/urls.py @@ -1,10 +1,21 @@ from django.urls import path from . import views +from .views import EtherpadCreateView, FileUploadCreateView urlpatterns = [ path("", views.index, name="intern"), path("/", views.show_topic, name="topic"), path("//", views.show_docu, name="docu"), + path( + "//etherpad-create/", + EtherpadCreateView.as_view(), + name="etherpad-create", + ), + path( + "//file-create/", + FileUploadCreateView.as_view(), + name="file-create", + ), ] diff --git a/fet2020/intern/views.py b/fet2020/intern/views.py index a0d93bf1..fafc78cf 100644 --- a/fet2020/intern/views.py +++ b/fet2020/intern/views.py @@ -1,23 +1,31 @@ import logging +from collections import deque from django.contrib import messages +from django.contrib.auth.mixins import LoginRequiredMixin from django.db.models import F, Q -from django.http import HttpResponseRedirect +from django.http import HttpResponseRedirect, Http404 from django.shortcuts import render +from django.views.generic.edit import CreateView +from django.urls import reverse + +from authentications.decorators import authenticated_user from documents.api import get_pad_link from documents.etherpadlib import add_ep_cookie -from collections import deque - -from .forms import DocumentForm +from tasks.models import Task +from .forms import DocumentForm, FileUploadForm from .models import TopicGroup, Topic, Documentation, Document, FileUpload -from authentications.decorators import authenticated_user logger = logging.getLogger(__name__) @authenticated_user def index(request): - topic = deque(Topic.objects.filter(archive=False).order_by(F('topic_group__order').asc(nulls_last=True), 'topic_group', 'title')) + topic = deque( + Topic.objects.filter(archive=False).order_by( + F("topic_group__order").asc(nulls_last=True), "topic_group", "title" + ) + ) archive_topic = deque(Topic.objects.filter(archive=True)) context = { @@ -31,11 +39,26 @@ def index(request): @authenticated_user def show_topic(request, slug=None): active_topic = Topic.objects.filter(slug=slug).first() - docu = deque(Documentation.objects.filter(topic__slug=slug).order_by('title')) + if not active_topic: + raise Http404("wrong topic") + + docu = deque(Documentation.objects.filter(topic__slug=slug).order_by("title")) + + tasks = None + if active_topic.task_list: + tasks = deque( + Task.taskmanager.get_tasks( + user=request.user.id, + completed=False, + task_list=active_topic.task_list, + all_tasks=True, + ) + ) context = { "active_topic": active_topic, "docus": docu, + "tasks": tasks, } return render(request, "intern/topic.html", context) @@ -43,34 +66,47 @@ def show_topic(request, slug=None): @authenticated_user def show_docu(request, topic_slug=None, slug=None): - active_docu = Documentation.objects.filter(Q(topic__slug=topic_slug) & Q(slug=slug)).first() + active_docu = Documentation.objects.filter( + Q(topic__slug=topic_slug) & Q(slug=slug) + ).first() + if not active_docu: + raise Http404("wrong docu") + active_topic = Topic.objects.filter(slug=topic_slug).first() if request.method == "POST": - if "btn_input" in request.POST: + if "btn_etherpad" in request.POST: form = DocumentForm(request.POST) if form.is_valid(): - docu = form.save(commit=False) - docu.created_by = request.user - # docu.documentation = active_docu - docu.save() - + form.save() return HttpResponseRedirect(request.path) else: for elem in list(form.errors.values()): - messages.info(request, '; '.join(elem)) + messages.info(request, "; ".join(elem)) + + if "btn_fileupload" in request.POST: + form = FileUploadForm(request.POST, request.FILES) + + if form.is_valid(): + form.save() + return HttpResponseRedirect(request.path) + + else: + for elem in list(form.errors.values()): + messages.info(request, "; ".join(elem)) initial = { "documentation": active_docu, } - form = DocumentForm(initial=initial) + form_add_etherpad = DocumentForm(initial=initial) + form_add_file = FileUploadForm(initial=initial) files = deque(FileUpload.objects.filter(documentation=active_docu)) - docus = deque(Document.objects.filter(documentation=active_docu).order_by('-date')) + docus = deque(Document.objects.filter(documentation=active_docu).order_by("-date")) documents = deque([]) # list of etherpad url-link of any documents @@ -84,7 +120,8 @@ def show_docu(request, topic_slug=None, slug=None): ) context = { - "formset": form, + "form_add_etherpad": form_add_etherpad, + "form_add_file": form_add_file, "active_topic": active_topic, "active_docu": active_docu, "documents": documents, @@ -99,3 +136,72 @@ def show_docu(request, topic_slug=None, slug=None): logger.info("Etherpad Server doesn't work. Error: %s", e) return response + + +class EtherpadCreateView(LoginRequiredMixin, CreateView): + model = Document + template_name = "intern/etherpad_create.html" + form_class = DocumentForm + + topic_slug = None + slug = None + + def get_context_data(self, **kwargs): + context = super().get_context_data(**kwargs) + context["topic_slug"] = self.topic_slug + context["slug"] = self.slug + return context + + def get_initial(self): + self.topic_slug = self.kwargs.get("topic_slug") + self.slug = self.kwargs.get("slug") + + active_docu = Documentation.objects.filter(slug=self.kwargs.get("slug")).first() + context = { + "documentation": active_docu, + } + + return context + + def get_success_url(self): + context = { + "topic_slug": self.topic_slug, + "slug": self.slug, + } + + return reverse("docu", kwargs=context) + + +class FileUploadCreateView(LoginRequiredMixin, CreateView): + model = FileUpload + template_name = "intern/file_create.html" + form_class = FileUploadForm + + topic_slug = None + slug = None + + def get_context_data(self, **kwargs): + context = super().get_context_data(**kwargs) + context["topic_slug"] = self.topic_slug + context["slug"] = self.slug + + return context + + def get_initial(self): + self.topic_slug = self.kwargs.get("topic_slug") + self.slug = self.kwargs.get("slug") + + active_docu = Documentation.objects.filter(slug=self.kwargs.get("slug")).first() + context = { + "documentation": active_docu, + } + + return context + + def get_success_url(self): + context = { + "topic_slug": self.topic_slug, + "slug": self.slug, + } + + return reverse("docu", kwargs=context) diff --git a/fet2020/tasks/forms.py b/fet2020/tasks/forms.py index df92cca3..266c46a6 100644 --- a/fet2020/tasks/forms.py +++ b/fet2020/tasks/forms.py @@ -3,7 +3,7 @@ from django.contrib.admin.widgets import FilteredSelectMultiple from django.contrib.auth.models import User from django.utils.translation import gettext_lazy as _ -from .models import Task, TaskList +from .models import Task, TaskList, Document class DateInput(forms.DateInput): @@ -77,3 +77,23 @@ class TaskListForm(forms.ModelForm): class Meta: model = TaskList fields = "__all__" + + +class DocumentForm(forms.ModelForm): + class Meta: + model = Document + + fields = [ + "title", + "date", + "task", + ] + + labels = { + "title": _("Titel"), + "date": _("Datum"), + } + + widgets = { + "date": DateInput(format=("%d-%m-%Y")), + } diff --git a/fet2020/tasks/models.py b/fet2020/tasks/models.py index 49c31261..8a163076 100644 --- a/fet2020/tasks/models.py +++ b/fet2020/tasks/models.py @@ -1,8 +1,15 @@ +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 import Q +from django.db.models.constraints import UniqueConstraint from django.utils import timezone +from django.utils.text import slugify +from django.utils.translation import gettext_lazy as _ + +from documents import createPadifNotExists class TaskQuerySet(models.QuerySet): @@ -100,3 +107,50 @@ class Task(models.Model): 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 = [ + UniqueConstraint( + fields=["title", "date", "task"], name="unique_task_document" + ), + ] + + def clean(self): + pad_name = slugify( + str(self.date) + "-" + self.task.title + "-" + slugify(self.title) + ) + + print("clean") + + 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)) + ) + + print("save") + + super().save(*args, **kwargs) + + def __str__(self): + return self.title diff --git a/fet2020/tasks/urls.py b/fet2020/tasks/urls.py index 6ea2af7d..d95b33d0 100644 --- a/fet2020/tasks/urls.py +++ b/fet2020/tasks/urls.py @@ -1,8 +1,12 @@ from django.urls import path from . import views +from .views import TaskCreate, TaskDetail, TaskUpdate, DocumentCreate urlpatterns = [ path("", views.index, name="tasks"), + path("task-create/", TaskCreate.as_view(), name="task-create"), + path("/docu-create/", DocumentCreate.as_view(), name="docu-create"), + path("/detail/", TaskDetail.as_view(), name="task-detail"), ] diff --git a/fet2020/tasks/views.py b/fet2020/tasks/views.py index 466da333..7ebc65cb 100644 --- a/fet2020/tasks/views.py +++ b/fet2020/tasks/views.py @@ -1,45 +1,33 @@ -from django.contrib import messages -from django.contrib.auth.models import User -from django.shortcuts import render -from django.utils import timezone +import logging from collections import deque +from django.contrib.auth.mixins import LoginRequiredMixin +from django.contrib.auth.models import User +from django.shortcuts import render +from django.views.generic.detail import DetailView +from django.views.generic.edit import CreateView, UpdateView +from django.urls import reverse_lazy, reverse +from django.utils import timezone -from .forms import TaskForm -from .models import Task, TaskList from authentications.decorators import authenticated_user +from documents.api import get_pad_link +from documents.etherpadlib import add_ep_cookie + +from .forms import TaskForm, DocumentForm +from .models import Task, TaskList, Document + +logger = logging.getLogger(__name__) @authenticated_user def index(request): - current_user = request.user.id current_action = False + tasklist = None show_tasklist = None show_all_tasks = True if request.method == "POST": - if "btn_input" in request.POST: - form = TaskForm(request.POST) - - if form.is_valid(): - task = form.save(commit=False) - - if task.assigned_to: - if TaskList.objects.filter(users=task.assigned_to): - task.created_by = request.user - task.save() - else: - messages.info( - request, - "User '{}' ist nicht in der Liste von Task-Gruppe '{}'.".format( - task.assigned_to, task.task_list.name - ), - ) - else: - task.created_by = request.user - task.save() - - elif "btn_checkbox" in request.POST: + if "btn_checkbox" in request.POST: for task_id in request.POST.getlist("checkbox"): task = Task.objects.get(id=task_id) @@ -48,16 +36,15 @@ def index(request): task.completed_date = timezone.now().date() task.save() - elif "btn_user" in request.POST: + if "btn_user" in request.POST: if request.POST["action"] == "show_incompleted": current_action = False else: current_action = True if request.POST["tasklist"] != "all": - show_tasklist = TaskList.objects.filter( - id=request.POST["tasklist"] - ).first() + tasklist = TaskList.objects.filter(id=request.POST["tasklist"]).first() + show_tasklist = tasklist.id if request.POST["tasks"] == "all": show_all_tasks = True @@ -67,9 +54,9 @@ def index(request): form = TaskForm() tasks = deque( Task.taskmanager.get_tasks( - user=current_user, + user=request.user.id, completed=current_action, - task_list=show_tasklist, + task_list=tasklist, all_tasks=show_all_tasks, ) ) @@ -79,8 +66,97 @@ def index(request): "formset": form, "tasks": tasks, "tasklists": tasklists, - "current_user": current_user, + "current_user": request.user.id, "current_action": current_action, + "show_tasklist": show_tasklist, + "show_all_tasks": show_all_tasks, } return render(request, "tasks/index.html", context) + + +class TaskCreate(LoginRequiredMixin, CreateView): + model = Task + success_url = reverse_lazy("tasks") + template_name = "tasks/task_create.html" + form_class = TaskForm + + def form_valid(self, form): + form.instance.created_by = self.request.user + return super().form_valid(form) + + +class TaskUpdate(LoginRequiredMixin, UpdateView): + model = Task + success_url = reverse_lazy("tasks") + template_name = "tasks/task_create.html" + form_class = TaskForm + + +class TaskDetail(LoginRequiredMixin, DetailView): + model = Task + success_url = reverse_lazy("tasks") + template_name = "tasks/task_detail.html" + + def get(self, request, *args, **kwargs): + response = super().get(request, *args, **kwargs) + + try: + response = add_ep_cookie(self.request, response) + except Exception as e: + logger.info("Etherpad Server doesn't work. Error: %s", e) + + return response + + def get_context_data(self, **kwargs): + context = super().get_context_data(**kwargs) + + docus = deque( + Document.objects.filter(task__id=self.object.id).order_by("-date") + ) + documents = deque([]) + + # list of etherpad url-link of any documents + for elem in docus: + documents.append( + { + "title": elem.title, + "date": elem.date, + "etherpad_key": get_pad_link(elem.etherpad_key), + } + ) + context["documents"] = documents + + return context + + +class DocumentCreate(LoginRequiredMixin, CreateView): + model = Document + # success_url = reverse_lazy('tasks') + template_name = "tasks/docu_create.html" + form_class = DocumentForm + + task_id = None + + def get_initial(self): + self.task_id = self.kwargs.get("pk") + + task = Task.objects.get(pk=self.task_id) + context = { + "task": task, + } + + return context + + def get_context_data(self, **kwargs): + context = super().get_context_data(**kwargs) + context["task_id"] = self.task_id + + return context + + def get_success_url(self): + context = { + "task_id": self.task_id, + } + + return reverse("task-detail", kwargs=context) diff --git a/fet2020/templates/intern/docu.html b/fet2020/templates/intern/docu.html index 31a7644a..3de34b35 100644 --- a/fet2020/templates/intern/docu.html +++ b/fet2020/templates/intern/docu.html @@ -1,6 +1,6 @@ {% extends "layout.html" %} - {% block content %} +
@@ -22,32 +22,66 @@
{% endif %} + will man diese Buttons haben? + +
+ + oder direkt hier es erstellen?
{% csrf_token %}
- {{ formset.management_form }} + {{ form_add_etherpad.management_form }} - {% for form in formset %} + {% for form in form_add_etherpad %}
{{ form }}
{% endfor %} - {{ formset.non_field_errors }} + {{ form_add_etherpad.non_field_errors }}
- +
- + +
+ {% csrf_token %} + +
+ + {{ form_add_file.management_form }} + + {% for form in form_add_file %} +
+ {{ form }} +
+ {% endfor %} + + {{ form_add_file.non_field_errors }} + +
+ +
+
+
+ {% for message in messages %}

{{message}}

{% endfor %}
+
diff --git a/fet2020/templates/intern/etherpad_create.html b/fet2020/templates/intern/etherpad_create.html new file mode 100644 index 00000000..12932236 --- /dev/null +++ b/fet2020/templates/intern/etherpad_create.html @@ -0,0 +1,22 @@ +{% extends "layout.html" %} +{% block content %} + +
+
+ Zurück +
+
+ +

Neues Etherpad erstellen

+
+
+
+ {% csrf_token %} + {{ form }} + +
+
+
+
+ +{% endblock %} diff --git a/fet2020/templates/intern/file_create.html b/fet2020/templates/intern/file_create.html new file mode 100644 index 00000000..aa45bcf7 --- /dev/null +++ b/fet2020/templates/intern/file_create.html @@ -0,0 +1,22 @@ +{% extends "layout.html" %} +{% block content %} + +
+
+ Zurück +
+
+ +

Neue Datei hochladen

+
+
+
+ {% csrf_token %} + {{ form }} + +
+
+
+
+ +{% endblock %} diff --git a/fet2020/templates/intern/index.html b/fet2020/templates/intern/index.html index 7e77dd1e..5f2b5b28 100644 --- a/fet2020/templates/intern/index.html +++ b/fet2020/templates/intern/index.html @@ -1,10 +1,8 @@ {% extends "layout.html" %} - {% block content %} +
- {% regroup topic by topic_group as topic_list %} - {% for topic in topic_list %}

{{ topic.grouper.title }} #

@@ -46,4 +44,5 @@ {% endif %}
+ {% endblock %} diff --git a/fet2020/templates/intern/topic.html b/fet2020/templates/intern/topic.html index 25d82116..80ac64db 100644 --- a/fet2020/templates/intern/topic.html +++ b/fet2020/templates/intern/topic.html @@ -1,6 +1,6 @@ {% extends "layout.html" %} - {% block content %} +
@@ -12,13 +12,34 @@
- {% if active_topic.description %} -
- Beschreibung bearbeiten -
- {{ active_topic.description|safe }} -
+ + + {% if active_topic.description %} +
+ {{ active_topic.description|safe }} +
+
+ {% endif %} + + {% if tasks %} +
+
offene Tasks:
+ + {% for task in tasks %} + + {% endfor %} +
+
+ {% endif %}
diff --git a/fet2020/templates/tasks/docu_create.html b/fet2020/templates/tasks/docu_create.html new file mode 100644 index 00000000..5aa04b71 --- /dev/null +++ b/fet2020/templates/tasks/docu_create.html @@ -0,0 +1,22 @@ +{% extends 'layout.html' %} +{% block content %} + +
+
+ Zurück +
+
+ +

Neues Etherpad hinzufügen

+
+
+
+ {% csrf_token %} + {{ form }} + +
+
+
+
+ +{% endblock %} diff --git a/fet2020/templates/tasks/index.html b/fet2020/templates/tasks/index.html index 4c731910..a5d0d795 100644 --- a/fet2020/templates/tasks/index.html +++ b/fet2020/templates/tasks/index.html @@ -2,63 +2,80 @@ {% block content %}
+ +
- {% if current_user == user.id %} -

Task-Übersicht für {{ user.username }}

- {% endif %} +
+ {% csrf_token %} +
+
+ + +
- {% for message in messages %} -

{{message}}

- {% endfor %} +
+ + +
+ +
+ + +
+ +
+ +
+
+
+
{% if tasks %}
{% csrf_token %}
- {% regroup tasks by task_list as section_list %} {% for group in section_list %}
    +

    {{ group.grouper }}

    -

    {{ group.grouper }}

    - - {% for task in group.list %} - -
    - -
    - - {{ task.title }} -
    - -
    - {% if task.due_date %} - Fälligkeitsdatum: {{ task.due_date|date:"d.m.Y" }} - {% endif %} -
    - -
    - {% if task.assigned_to %} - nur dir zugewiesen! - {% endif %} -
    -
    - - {% endfor %} + {% for task in group.list %} +
    + +
    + {% if task.due_date %} + Fällig bis: {{ task.due_date|date:"d.m.Y" }} + {% endif %} +
    +
    + {% endfor %}
- {% endfor %}
    - -
@@ -70,82 +87,6 @@
{% endif %} - -

Andere Task-Übersicht anzeigen

- - - {% csrf_token %} - -
-
- -
- -
- -
- -
- -
- -
- -
-
- - - - -

Neuen Task hinzufügen

- -
- {% csrf_token %} - -
- - {{ formset.management_form }} - - {% for form in formset %} -
- {{ form.label }} - {{ form }} -
- {% endfor %} - -
- -
- -
- -
-
{% endblock %} diff --git a/fet2020/templates/tasks/task_create.html b/fet2020/templates/tasks/task_create.html new file mode 100644 index 00000000..f4e71e16 --- /dev/null +++ b/fet2020/templates/tasks/task_create.html @@ -0,0 +1,22 @@ +{% extends 'layout.html' %} +{% block content %} + +
+
+ Zurück +
+
+ +

Neuen Task hinzufügen

+
+
+
+ {% csrf_token %} + {{ form }} + +
+
+
+
+ +{% endblock %} diff --git a/fet2020/templates/tasks/task_detail.html b/fet2020/templates/tasks/task_detail.html new file mode 100644 index 00000000..8b9a02bf --- /dev/null +++ b/fet2020/templates/tasks/task_detail.html @@ -0,0 +1,46 @@ +{% extends 'layout.html' %} +{% block content %} + +
+
+
+ Zurück +
+ + +
+
+ +
+
+

{{ task.title }}

+ +

Fällig am: {{ task.due_date }}

+ + {% if task.completed %} +

Erledigt am: {{ task.completed_date }}

+ {% endif %} + + {% if task.note %} + {{ task.note }} + {% endif %} + + {% for document in documents %} + +
+
+

{{ document.title }}

+
+
+

{{ document.date }}

+
+
+
+ {% endfor %} +
+
+
+ +{% endblock %}