From 20052ae137ee0bf9b3f790b40d016d1421e7b14b Mon Sep 17 00:00:00 2001 From: Patrick Date: Sat, 24 Oct 2020 16:24:40 +0000 Subject: [PATCH] update wordings in admin area --- fet2020/blackboard/admin.py | 15 ++----- fet2020/blackboard/models.py | 10 ++--- fet2020/fet2020/settings.py | 23 ++++------ fet2020/members/forms.py | 59 ++++++++++++++++---------- fet2020/members/models.py | 21 ++++++---- fet2020/posts/admin.py | 28 ++++++------- fet2020/posts/forms.py | 81 +++++++++++++++++++++++------------- fet2020/posts/models.py | 8 ++-- fet2020/tasks/admin.py | 16 +++---- fet2020/tasks/forms.py | 32 +++++++++++++- fet2020/tasks/models.py | 21 +++++++--- 11 files changed, 185 insertions(+), 129 deletions(-) diff --git a/fet2020/blackboard/admin.py b/fet2020/blackboard/admin.py index 3258c7a2..a16ed892 100644 --- a/fet2020/blackboard/admin.py +++ b/fet2020/blackboard/admin.py @@ -1,21 +1,14 @@ from django.contrib import admin +from .forms import JobPostingForm from .models import JobPosting class JobPostingAdmin(admin.ModelAdmin): + form = JobPostingForm model = JobPosting - fieldsets = ( - (None, { - 'fields': ( - 'companyName', - 'jobName', - 'salary', - 'pdfLocation', - 'publishDate', - ) - }), - ) + + list_display = ['companyName', 'jobName', 'salary', 'publishDate'] admin.site.register(JobPosting, JobPostingAdmin) diff --git a/fet2020/blackboard/models.py b/fet2020/blackboard/models.py index 7f72777b..d1b2a4f3 100644 --- a/fet2020/blackboard/models.py +++ b/fet2020/blackboard/models.py @@ -15,12 +15,12 @@ logger = logging.getLogger('blackboard') class JobPosting(models.Model): - companyName = models.CharField(max_length=128) - jobName = models.CharField(max_length=128) - salary = models.PositiveSmallIntegerField() - pdfLocation = models.FileField(upload_to='uploads/blackboard/pdf/') + companyName = models.CharField(verbose_name="Firmenname", max_length=128) + jobName = models.CharField(verbose_name="Berufsbezeichnung", max_length=128) + salary = models.PositiveSmallIntegerField(verbose_name="Gehalt", ) + pdfLocation = models.FileField(verbose_name="Stellenausschreibung", upload_to='uploads/blackboard/pdf/') pdf_thumb_location = models.CharField(max_length=128) - publishDate = models.DateField('date published', default=timezone.now) + publishDate = models.DateField(verbose_name="Veröffentlichung", default=timezone.now) # Managers all_jobPosting = models.Manager() diff --git a/fet2020/fet2020/settings.py b/fet2020/fet2020/settings.py index c74bf811..5105d37b 100644 --- a/fet2020/fet2020/settings.py +++ b/fet2020/fet2020/settings.py @@ -227,7 +227,7 @@ THUMBNAIL_ALIASES = { }, } - +# ETHERPAD CLIENT if DEBUG: ETHERPAD_CLIENT = { 'url': "http://etherpad:"+env('ETHERPAD_PORT'), @@ -241,20 +241,7 @@ else: 'apikey': "/app/etherpad/APIKEY.txt" } -REST_FRAMEWORK = { - 'DEFAULT_PERMISSION_CLASSES': [ - 'rest_framework.permissions.AllowAny', - ] -} - - - -# DJANGO MAIL -EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend' -EMAIL_HOST = 'buran.htu.tuwien.ac.at' -EMAIL_PORT = 587 -EMAIL_USE_TLS = True - +# REST FRAMEWORK REST_FRAMEWORK={ 'DEFAULT_PERMISSION_CLASSES_CLASSES':[ 'rest_framework.permissions.AllowAny', @@ -262,6 +249,12 @@ REST_FRAMEWORK={ 'DEFAULT_AUTHENTICATION_CLASSES':() } +# DJANGO MAIL +EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend' +EMAIL_HOST = 'buran.htu.tuwien.ac.at' +EMAIL_PORT = 587 +EMAIL_USE_TLS = True + # CRON JOBS CRONJOBS = [ ('0 16 * * *', 'posts.cronjobs.check_to_send_agenda_mail'), diff --git a/fet2020/members/forms.py b/fet2020/members/forms.py index d43edb8d..77dc240e 100644 --- a/fet2020/members/forms.py +++ b/fet2020/members/forms.py @@ -1,4 +1,6 @@ from django import forms +from django.utils.translation import gettext_lazy as _ + from ckeditor_uploader.widgets import CKEditorUploadingWidget from .models import Member, Job, JobGroup @@ -8,45 +10,56 @@ class MemberForm(forms.ModelForm): class Meta: model = Member fields = [ - 'firstname', - 'surname', - 'nickname', - 'mailaccount', - 'role', - 'description', - 'image', - 'birthday', - 'phone', - 'address' + 'firstname', 'surname', 'nickname', 'mailaccount', 'role', 'description', 'image', + 'birthday', 'phone', 'address', ] widgets = { 'description': CKEditorUploadingWidget(config_name='default') } + labels = { + 'description': _("Beschreibung zu der Person"), + 'image': _("Porträt ()"), + 'birthday': _("Geburtstag"), + 'phone': _("Telefonnummer"), + 'address': _("Wohnadresse"), + } + + help_texts = { + 'image': _( + "Mindestgröße: 150*150 px, Verwendbare Formate: ..." + ), + 'mailaccount': _( + "Die Mailadresse mit '@fet.at' angeben." + ), + } + class JobForm(forms.ModelForm): class Meta: model = Job - fields = [ - 'name', - 'shortterm', - 'slug', - 'job_group', - ] + fields = ['name', 'shortterm', 'slug', 'job_group',] + + labels = { + 'shortterm': _("Kürzel der Tätigkeit"), + 'job_group': _("Tätigkeitsbereich"), + } class JobGroupForm(forms.ModelForm): class Meta: model = JobGroup - fields = [ - 'name', - 'shortterm', - 'slug', - 'description', - 'is_pinned', - ] + fields = ['name', 'shortterm', 'slug', 'description', 'is_pinned',] widgets = { 'description': CKEditorUploadingWidget(config_name='default') } + + labels = { + 'shortterm': _("Kürzel des Tätigkeitsbereichs"), + 'description': _("Beschreibung des Tätigkeitsbereichs"), + 'is_pinned': _( + "Dieser Tätigkeitsbereich soll im Fachschaftsbereich angeheftet werden, damit es sofort ersichtlich ist." + ), + } diff --git a/fet2020/members/models.py b/fet2020/members/models.py index 792fafad..6f64d3d6 100644 --- a/fet2020/members/models.py +++ b/fet2020/members/models.py @@ -77,16 +77,21 @@ class JobGroupManager(models.Manager): class Member(models.Model): - firstname = models.CharField(max_length=128) - surname = models.CharField(max_length=128) - nickname = models.CharField(max_length=128) - mailaccount = models.CharField(max_length=128) + firstname = models.CharField("Vorname", max_length=128) + surname = models.CharField("Nachname", max_length=128) + nickname = models.CharField("Spitzname", max_length=128) + mailaccount = models.CharField("Mailadresse", max_length=128) class MemberRole(models.TextChoices): ACTIVE = 'A', _('Active') PENSION = 'P', _('Pension') - role = models.CharField(max_length=1, choices=MemberRole.choices, default=MemberRole.ACTIVE) + role = models.CharField( + "Rolle", + max_length=1, + choices=MemberRole.choices, + default=MemberRole.ACTIVE, + ) description = models.TextField(null=True, blank=True) image = ThumbnailerImageField(upload_to='uploads/members/image/') @@ -132,14 +137,14 @@ class JobGroup(models.Model): description = models.TextField(null=True, blank=True) - is_pinned = models.BooleanField(default=False) + is_pinned = models.BooleanField(verbose_name="ANGEHEFTET", default=False) # Managers all_jobgroups = JobGroupManager() class Meta: - verbose_name = "Tätigkeit-Gruppierung" - verbose_name_plural = "Tätigkeit-Gruppierungen" + verbose_name = "Tätigkeitsbereich" + verbose_name_plural = "Tätigkeitsbereiche" def __str__(self): return self.name diff --git a/fet2020/posts/admin.py b/fet2020/posts/admin.py index 33417518..60560e76 100644 --- a/fet2020/posts/admin.py +++ b/fet2020/posts/admin.py @@ -2,7 +2,7 @@ from django.contrib import admin, auth, messages from django.utils.translation import gettext_lazy as _ from .models import Post, Event, News, FetMeeting -from .forms import MyPostForm, MyEventForm, MyNewsForm, MyFetMeetingForm +from .forms import PostForm, EventForm, NewsForm, FetMeetingForm from documents.api import createPadifNotExists import taggit.admin @@ -57,8 +57,8 @@ def make_fetmeeting(self, request, queryset): make_fetmeeting.short_description = "In eine Fachschaftssitzung konvertieren" -class MyPostAdmin(admin.ModelAdmin): - form = MyPostForm +class PostAdmin(admin.ModelAdmin): + form = PostForm model = Post list_filter = ['is_pinned', 'is_hidden'] list_display = ['title', 'slug', 'public_date', 'is_pinned', 'is_hidden'] @@ -95,8 +95,8 @@ class MyPostAdmin(admin.ModelAdmin): ] -class MyEventAdmin(MyPostAdmin): - form = MyEventForm +class EventAdmin(PostAdmin): + form = EventForm model = Event list_filter = ['is_pinned'] list_display = ['title', 'slug', 'event_start', 'public_date', 'is_pinned'] @@ -104,23 +104,19 @@ class MyEventAdmin(MyPostAdmin): actions = [make_fetmeeting] -admin.site.register(Event, MyEventAdmin) - - -class MyNewsAdmin(MyPostAdmin): - form = MyNewsForm +class NewsAdmin(PostAdmin): + form = NewsForm model = News -admin.site.register(News, MyNewsAdmin) - - -class MyFetMeetingAdmin(MyEventAdmin): - form = MyFetMeetingForm +class FetMeetingAdmin(EventAdmin): + form = FetMeetingForm model = FetMeeting list_filter = [] list_display = ['title', 'slug', 'event_start', 'public_date'] actions = [] -admin.site.register(FetMeeting, MyFetMeetingAdmin) +admin.site.register(Event, EventAdmin) +admin.site.register(News, NewsAdmin) +admin.site.register(FetMeeting, FetMeetingAdmin) diff --git a/fet2020/posts/forms.py b/fet2020/posts/forms.py index 7e0f0765..8922e0cc 100644 --- a/fet2020/posts/forms.py +++ b/fet2020/posts/forms.py @@ -7,7 +7,7 @@ from taggit.models import Tag from .models import Post, Event, News, FetMeeting -class MyPostForm(forms.ModelForm): +class PostForm(forms.ModelForm): class Meta: model = Post fields = ['title', 'subtitle', 'tags', 'image', 'body', 'slug', 'author', 'public_date'] @@ -21,28 +21,37 @@ class MyPostForm(forms.ModelForm): ) -class MyNewsForm(MyPostForm): +class NewsForm(PostForm): class Meta: model = News fields = [ 'title', 'subtitle', 'tags', 'image', 'body', 'slug', 'author', 'public_date', 'is_pinned', 'is_hidden', ] + labels = { - 'title': _('Titel des Posts'), - 'image': _('Hintergrundbild des Posts'), - 'body': _('Beschreibung des Posts'), - 'author': _('Autor'), - 'public_date': _('Veröffentlichung'), - 'is_pinned': _('Post anheften'), - 'is_hidden': _('Post verstecken'), + 'title': _("Titel"), + 'subtitle': _("Untertitel"), + 'image': _("Hintergrundbild"), + 'body': _("Text"), + 'author': _("Autor"), + 'public_date': _("Veröffentlichung"), + 'is_pinned': _("Post anheften"), + 'is_hidden': _("Post verstecken"), } + help_texts = { + 'tags': _( + "Die Hashtags ohne '#' eintragen, und mit Komma kann man mehrere Tags anfügen." + ), + 'image': _( + "Verwendbare Formate: ..." + ), 'is_pinned': _( - 'Dieser Post soll an die Startseite als erster Post angeheftet werden.' + "Dieser Post soll an die Startseite als erster Post angeheftet werden." ), 'is_hidden': _( - 'Dieser Post soll im News Feed nicht auftauchen, z.B. Impressum.' + "Dieser Post soll im News Feed nicht auftauchen, z.B. Impressum." ), } @@ -52,27 +61,36 @@ class MyNewsForm(MyPostForm): super().__init__(*args, **kwargs) # to get the self.fields set -class MyEventForm(MyPostForm): +class EventForm(PostForm): class Meta: model = Event fields = [ 'title', 'subtitle', 'tags', 'image', 'body', 'event_start', 'event_end', 'event_place', 'slug', 'author', 'public_date', 'is_pinned', ] + labels = { - 'title': _('Titel des Events'), - 'image': _('Hintergrundbild des Posts'), - 'body': _('Beschreibung des Events'), - 'event_start': _('Start des Events'), - 'event_end': _('Ende des Events'), - 'event_place': _('Ort des Events'), - 'author': _('Autor'), - 'public_date': _('Veröffentlichung'), - 'is_pinned': _('Event anheften'), + 'title': _("Titel"), + 'subtitle': _("Untertitel"), + 'image': _("Hintergrundbild"), + 'body': _("Text"), + 'event_start': _("Start des Events"), + 'event_end': _("Ende des Events"), + 'event_place': _("Ort des Events"), + 'author': _("Autor"), + 'public_date': _("Veröffentlichung"), + 'is_pinned': _("Event anheften"), } + help_texts = { + 'tags': _( + "Die Hashtags ohne '#' eintragen, und mit Komma kann man mehrere Tags anfügen." + ), + 'image': _( + "Verwendbare Formate: " + ), 'is_pinned': _( - 'Dieses Event soll an die Startseite als erster Post angeheftet werden.' + "Dieses Event soll an die Startseite als erster Post angeheftet werden." ), } @@ -88,20 +106,25 @@ class MyEventForm(MyPostForm): self.fields['event_place'].required = True -class MyFetMeetingForm(MyEventForm): +class FetMeetingForm(EventForm): # agenda_html = forms.CharField(widget = forms.TextInput()) class Meta: model = FetMeeting fields = ['event_start', 'event_end', 'tags', 'has_agenda', 'has_protocol'] + labels = { - 'event_start': _('Start der Sitzung'), - 'event_end': _('Ende der Sitzung'), - 'has_agenda': _('Agenda'), - 'has_protocol': _('Protokoll'), + 'event_start': _("Start der Sitzung"), + 'event_end': _("Ende der Sitzung"), + 'has_agenda': _("Agenda"), + 'has_protocol': _("Protokoll"), } + help_texts = { - 'has_agenda': _('Agenda zur Sitzung hinzufügen.'), - 'has_protocol': _('Protokoll zur Sitzung hinzufügen.'), + 'tags': _( + "Die Hashtags ohne '#' eintragen, und mit Komma kann man mehrere Tags anfügen." + ), + 'has_agenda': _("Agenda zur Sitzung hinzufügen."), + 'has_protocol': _("Protokoll zur Sitzung hinzufügen."), } def __init__(self, *args, **kwargs): diff --git a/fet2020/posts/models.py b/fet2020/posts/models.py index 2185e9c0..3cd4e7cd 100644 --- a/fet2020/posts/models.py +++ b/fet2020/posts/models.py @@ -43,7 +43,7 @@ class Post(models.Model): legacy_id = models.IntegerField(null=True) legacy_rubrik_id = models.IntegerField(null=True) # Titel des Posts - title = models.CharField(max_length=200) + title = models.CharField(verbose_name="Titel", max_length=200) subtitle = models.CharField(max_length=500, null=True, blank=True) # Slug = Text Basierter url bestandteil zb Fetsitzung 22.1.2020 --> fetsitzung_22_1_2020 für Url @@ -57,7 +57,7 @@ class Post(models.Model): tags = TaggableManager(blank=True) # Datum ab dem etwas öffentlich sein soll - public_date = models.DateField('date published', null=True, blank=True, default=timezone.now) + public_date = models.DateField(verbose_name="Veröffentlichung", null=True, blank=True, default=timezone.now) imported_from = models.CharField(max_length=200, null=True, blank=True) @@ -75,8 +75,8 @@ class Post(models.Model): is_hidden = models.BooleanField(verbose_name="UNSICHTBAR", default=False) # Zusatz Info wenn ein Event gepostet wird - event_start = models.DateTimeField('Event Start', null=True, blank=True) - event_end = models.DateTimeField('Event Ende', null=True, blank=True) + event_start = models.DateTimeField(verbose_name="Event Start", null=True, blank=True) + event_end = models.DateTimeField(verbose_name="Event Ende", null=True, blank=True) event_place = models.CharField(max_length=200, null=True, blank=True) # Dokumente v.a. fuer Sitzungen diff --git a/fet2020/tasks/admin.py b/fet2020/tasks/admin.py index 2cd39c50..83c3a1d0 100644 --- a/fet2020/tasks/admin.py +++ b/fet2020/tasks/admin.py @@ -1,35 +1,29 @@ from django.contrib import admin -from .forms import TaskListForm +from .forms import TaskAdminForm, TaskListForm from .models import Task, TaskList class TaskAdmin(admin.ModelAdmin): + form = TaskAdminForm model = Task fieldsets = ( (None, { 'fields': ( 'title', 'task_list', + 'assigned_to', 'due_date', 'completed', 'completed_date', - 'assigned_to', 'note', 'priority', ) }), ) - list_display = ( - 'title', - 'task_list', - 'completed', - 'priority', - 'due_date', - 'assigned_to', - ) + + list_display = ['title', 'task_list', 'assigned_to', 'due_date', 'completed', 'priority'] list_filter = ('task_list', ) - ordering = ('priority', ) search_fields = ('title', ) def save_model(self, request, obj, form, change): diff --git a/fet2020/tasks/forms.py b/fet2020/tasks/forms.py index 22333055..4c261fb7 100644 --- a/fet2020/tasks/forms.py +++ b/fet2020/tasks/forms.py @@ -10,6 +10,27 @@ class DateInput(forms.DateInput): input_type = 'date' +class TaskAdminForm(forms.ModelForm): + class Meta: + model = Task + fields = '__all__' + + labels = { + 'title': _('Titel'), + 'task_list': _('Aufgabenbereich'), + 'due_date': _('Fälligkeit'), + 'completed': _('Abgeschlossen'), + 'completed_date': _('Datum der Fertigstellung'), + 'assigned_to': _('Zuweisen an'), + 'note': _('Notizen'), + 'priority': _('Priorität'), + } + + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) # to get the self.fields set + self.fields['assigned_to'].empty_label = "Alle" + + class TaskForm(forms.ModelForm): class Meta: model = Task @@ -40,4 +61,13 @@ class TaskForm(forms.ModelForm): class TaskListForm(forms.ModelForm): - users = forms.ModelMultipleChoiceField(queryset=User.objects.all(), widget=FilteredSelectMultiple("User", is_stacked=False)) + users = forms.ModelMultipleChoiceField( + label="Benutzer", + help_text="Es können nur die Benutzer ausgewählt werden, die sich auf der Homepage angemeldet haben.", + queryset=User.objects.all(), + widget=FilteredSelectMultiple("User", is_stacked=False) + ) + + class Meta: + model = TaskList + fields = '__all__' diff --git a/fet2020/tasks/models.py b/fet2020/tasks/models.py index 8dddc863..ab4e5615 100644 --- a/fet2020/tasks/models.py +++ b/fet2020/tasks/models.py @@ -38,18 +38,22 @@ class TaskList(models.Model): 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 class Task(models.Model): - title = models.CharField(max_length=140) - task_list = models.ForeignKey(TaskList, on_delete=models.CASCADE, null=True) + 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(blank=True, null=True) + due_date = models.DateField(verbose_name="Fälligkeit", blank=True, null=True) - completed = models.BooleanField(default=False) + completed = models.BooleanField(verbose_name="Abgeschlossen", default=False) completed_date = models.DateField(blank=True, null=True) created_by = models.ForeignKey( @@ -63,14 +67,19 @@ class Task(models.Model): null=True, related_name="todo_assigned_to", on_delete=models.CASCADE, + verbose_name="Zugewiesen an", ) - note = models.TextField(blank=True, null=True) - priority = models.PositiveIntegerField(blank=True, null=True) + 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