ruff formatting
This commit is contained in:
@@ -4,8 +4,6 @@ from ldap3 import HASHED_SALTED_SHA, MODIFY_REPLACE, Connection, Server
|
|||||||
from ldap3.core.exceptions import LDAPBindError
|
from ldap3.core.exceptions import LDAPBindError
|
||||||
from ldap3.utils.hashed import hashed
|
from ldap3.utils.hashed import hashed
|
||||||
|
|
||||||
from members.models import Member
|
|
||||||
|
|
||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
host = "ldap://juri.fet.htu.tuwien.ac.at"
|
host = "ldap://juri.fet.htu.tuwien.ac.at"
|
||||||
port = 389
|
port = 389
|
||||||
|
|||||||
@@ -1,8 +1,7 @@
|
|||||||
import logging
|
import logging
|
||||||
|
|
||||||
from django.contrib.auth.models import Group, User
|
|
||||||
from django.contrib.auth.backends import ModelBackend
|
from django.contrib.auth.backends import ModelBackend
|
||||||
|
from django.contrib.auth.models import Group, User
|
||||||
from ldap3 import Connection, Server
|
from ldap3 import Connection, Server
|
||||||
from ldap3.core.exceptions import LDAPBindError
|
from ldap3.core.exceptions import LDAPBindError
|
||||||
|
|
||||||
@@ -125,7 +124,7 @@ class LdapBackend(ModelBackend):
|
|||||||
user = User.objects.get(username)
|
user = User.objects.get(username)
|
||||||
except User.DoesNotExist:
|
except User.DoesNotExist:
|
||||||
user = User.objects.create_user(username)
|
user = User.objects.create_user(username)
|
||||||
finally:
|
|
||||||
if not self.user_can_authenticate(user):
|
if not self.user_can_authenticate(user):
|
||||||
logger.info("User '%s' is inactive.", user.get_username())
|
logger.info("User '%s' is inactive.", user.get_username())
|
||||||
return
|
return
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
import logging
|
import logging
|
||||||
|
|
||||||
from django.contrib.auth.forms import PasswordChangeForm
|
from django.contrib.auth.forms import PasswordChangeForm
|
||||||
from django.core.exceptions import ValidationError
|
|
||||||
|
|
||||||
from .authentications import change_password
|
from .authentications import change_password
|
||||||
|
|
||||||
|
|||||||
@@ -21,7 +21,7 @@ class CustomFlatPageAdmin(FlatPageAdmin):
|
|||||||
"url",
|
"url",
|
||||||
"title",
|
"title",
|
||||||
"content",
|
"content",
|
||||||
)
|
),
|
||||||
},
|
},
|
||||||
),
|
),
|
||||||
(
|
(
|
||||||
|
|||||||
@@ -6,7 +6,8 @@ class FETHeaderMiddleware(RemoteUserMiddleware):
|
|||||||
|
|
||||||
def process_request(self, request):
|
def process_request(self, request):
|
||||||
request.META[self.header] = request.META.get(
|
request.META[self.header] = request.META.get(
|
||||||
self.header, request.headers.get(self.header, None)
|
self.header,
|
||||||
|
request.headers.get(self.header, None),
|
||||||
)
|
)
|
||||||
|
|
||||||
super().process_request(request)
|
super().process_request(request)
|
||||||
|
|||||||
@@ -24,8 +24,8 @@ BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
|
|||||||
|
|
||||||
|
|
||||||
# DEBUGGING
|
# DEBUGGING
|
||||||
DEBUG = (env("DEBUG").lower() == "true")
|
DEBUG = env("DEBUG").lower() == "true"
|
||||||
LDAP = (env("LDAP").lower() == "true")
|
LDAP = env("LDAP").lower() == "true"
|
||||||
|
|
||||||
|
|
||||||
# MODELS
|
# MODELS
|
||||||
@@ -84,7 +84,7 @@ if DEBUG:
|
|||||||
"default": {
|
"default": {
|
||||||
"ENGINE": "django.db.backends.sqlite3",
|
"ENGINE": "django.db.backends.sqlite3",
|
||||||
"NAME": os.path.join(BASE_DIR, "db.sqlite3"),
|
"NAME": os.path.join(BASE_DIR, "db.sqlite3"),
|
||||||
}
|
},
|
||||||
}
|
}
|
||||||
else:
|
else:
|
||||||
DATABASES = {
|
DATABASES = {
|
||||||
@@ -95,7 +95,7 @@ else:
|
|||||||
"PASSWORD": env("MYSQL_PASSWORD"),
|
"PASSWORD": env("MYSQL_PASSWORD"),
|
||||||
"HOST": env("MYSQL_HOST"),
|
"HOST": env("MYSQL_HOST"),
|
||||||
"PORT": env("MYSQL_PORT"),
|
"PORT": env("MYSQL_PORT"),
|
||||||
}
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -107,20 +107,14 @@ EMAIL_USE_TLS = True
|
|||||||
|
|
||||||
|
|
||||||
# STATIC FILES
|
# STATIC FILES
|
||||||
if DEBUG:
|
STATIC_URL = "static/" if DEBUG else "assets/"
|
||||||
STATIC_URL = "static/"
|
|
||||||
else:
|
|
||||||
STATIC_URL = "assets/"
|
|
||||||
|
|
||||||
# Use for collectstatic/production folder.
|
# Use for collectstatic/production folder.
|
||||||
# --- Saving directory for production folder.
|
# --- Saving directory for production folder.
|
||||||
STATIC_ROOT = "assets/"
|
STATIC_ROOT = "assets/"
|
||||||
|
|
||||||
# --- Get files from following directory for production folder.
|
# --- Get files from following directory for production folder.
|
||||||
STATICFILES_DIRS = [
|
STATICFILES_DIRS = [os.path.join(BASE_DIR, "static")]
|
||||||
os.path.join(BASE_DIR, "gallery/static"),
|
|
||||||
os.path.join(BASE_DIR, "static"),
|
|
||||||
]
|
|
||||||
|
|
||||||
|
|
||||||
# FILE UPLOADS
|
# FILE UPLOADS
|
||||||
@@ -198,10 +192,7 @@ CSRF_TRUSTED_ORIGINS = [
|
|||||||
"https://" + env("HOST_NAME"),
|
"https://" + env("HOST_NAME"),
|
||||||
]
|
]
|
||||||
|
|
||||||
if DEBUG:
|
SECRET_KEY = "r37-i7l)vrduzz2-gira+z#u!p!di9#f+%s*5-bb($hg)55@ns" if DEBUG else env("SECRET_KEY")
|
||||||
SECRET_KEY = "r37-i7l)vrduzz2-gira+z#u!p!di9#f+%s*5-bb($hg)55@ns"
|
|
||||||
else:
|
|
||||||
SECRET_KEY = env("SECRET_KEY")
|
|
||||||
|
|
||||||
|
|
||||||
# TEMPLATES
|
# TEMPLATES
|
||||||
|
|||||||
@@ -11,11 +11,7 @@ def add_log_action(request, form, app_label, model, add=True):
|
|||||||
obj = form.save()
|
obj = form.save()
|
||||||
content_type = ContentType.objects.get(app_label=app_label, model=model)
|
content_type = ContentType.objects.get(app_label=app_label, model=model)
|
||||||
change_message = construct_change_message(form, None, add)
|
change_message = construct_change_message(form, None, add)
|
||||||
|
action_flag = ADDITION if add else CHANGE
|
||||||
if add:
|
|
||||||
action_flag = ADDITION
|
|
||||||
else:
|
|
||||||
action_flag = CHANGE
|
|
||||||
|
|
||||||
LogEntry.objects.log_action(
|
LogEntry.objects.log_action(
|
||||||
user_id=request.user.pk,
|
user_id=request.user.pk,
|
||||||
|
|||||||
@@ -216,7 +216,7 @@ class BillAdmin(admin.ModelAdmin):
|
|||||||
"fields": (
|
"fields": (
|
||||||
"bill_creator",
|
"bill_creator",
|
||||||
"resolution",
|
"resolution",
|
||||||
)
|
),
|
||||||
},
|
},
|
||||||
),
|
),
|
||||||
(
|
(
|
||||||
@@ -227,7 +227,7 @@ class BillAdmin(admin.ModelAdmin):
|
|||||||
"bankdata",
|
"bankdata",
|
||||||
("get_bankdata_name", "get_bankdata_iban", "get_bankdata_bic"),
|
("get_bankdata_name", "get_bankdata_iban", "get_bankdata_bic"),
|
||||||
"get_qrcode",
|
"get_qrcode",
|
||||||
)
|
),
|
||||||
},
|
},
|
||||||
),
|
),
|
||||||
(
|
(
|
||||||
@@ -241,7 +241,7 @@ class BillAdmin(admin.ModelAdmin):
|
|||||||
"amount",
|
"amount",
|
||||||
"only_digital",
|
"only_digital",
|
||||||
"file_field",
|
"file_field",
|
||||||
)
|
),
|
||||||
},
|
},
|
||||||
),
|
),
|
||||||
(
|
(
|
||||||
@@ -251,7 +251,7 @@ class BillAdmin(admin.ModelAdmin):
|
|||||||
"comment",
|
"comment",
|
||||||
"wiref",
|
"wiref",
|
||||||
"status",
|
"status",
|
||||||
)
|
),
|
||||||
},
|
},
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
@@ -403,7 +403,7 @@ class ResolutionAdmin(admin.ModelAdmin):
|
|||||||
"date",
|
"date",
|
||||||
"option",
|
"option",
|
||||||
"is_visible",
|
"is_visible",
|
||||||
)
|
),
|
||||||
},
|
},
|
||||||
),
|
),
|
||||||
(
|
(
|
||||||
@@ -413,7 +413,7 @@ class ResolutionAdmin(admin.ModelAdmin):
|
|||||||
"budget",
|
"budget",
|
||||||
"total",
|
"total",
|
||||||
"budget_remaining",
|
"budget_remaining",
|
||||||
)
|
),
|
||||||
},
|
},
|
||||||
),
|
),
|
||||||
(
|
(
|
||||||
|
|||||||
@@ -29,7 +29,7 @@ def get_cleaned_data(cleaned_data):
|
|||||||
if resolution != "":
|
if resolution != "":
|
||||||
try:
|
try:
|
||||||
cleaned_data["resolution"] = Resolution.objects.get(
|
cleaned_data["resolution"] = Resolution.objects.get(
|
||||||
Q(id=resolution) | Q(name=resolution)
|
Q(id=resolution) | Q(name=resolution),
|
||||||
)
|
)
|
||||||
except Exception:
|
except Exception:
|
||||||
raise ValidationError({"resolution_text": "Es gibt keinen Beschluss mit dieser ID."})
|
raise ValidationError({"resolution_text": "Es gibt keinen Beschluss mit dieser ID."})
|
||||||
@@ -68,7 +68,10 @@ class BillCreateForm(forms.ModelForm):
|
|||||||
|
|
||||||
# Resolution
|
# Resolution
|
||||||
resolution_text = forms.CharField(
|
resolution_text = forms.CharField(
|
||||||
required=False, label="Beschlussnummer", initial="", max_length=128
|
required=False,
|
||||||
|
label="Beschlussnummer",
|
||||||
|
initial="",
|
||||||
|
max_length=128,
|
||||||
)
|
)
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
@@ -122,7 +125,7 @@ class BillCreateForm(forms.ModelForm):
|
|||||||
self.fields["payer"].autofocus = True
|
self.fields["payer"].autofocus = True
|
||||||
|
|
||||||
bank_data = BankData.objects.filter(
|
bank_data = BankData.objects.filter(
|
||||||
Q(bankdata_creator=member) & Q(is_disabled=False)
|
Q(bankdata_creator=member) & Q(is_disabled=False),
|
||||||
).first()
|
).first()
|
||||||
if bank_data is not None:
|
if bank_data is not None:
|
||||||
self.fields["name_text"].initial = bank_data.name
|
self.fields["name_text"].initial = bank_data.name
|
||||||
@@ -147,12 +150,17 @@ class BillUpdateForm(forms.ModelForm):
|
|||||||
|
|
||||||
# only digital bill
|
# only digital bill
|
||||||
only_digital_new = forms.BooleanField(
|
only_digital_new = forms.BooleanField(
|
||||||
required=False, label="Ich habe eine neue digitale Rechnung.", initial=False
|
required=False,
|
||||||
|
label="Ich habe eine neue digitale Rechnung.",
|
||||||
|
initial=False,
|
||||||
)
|
)
|
||||||
|
|
||||||
# Resolution
|
# Resolution
|
||||||
resolution_text = forms.CharField(
|
resolution_text = forms.CharField(
|
||||||
required=False, label="Beschlussnummer", initial="", max_length=128
|
required=False,
|
||||||
|
label="Beschlussnummer",
|
||||||
|
initial="",
|
||||||
|
max_length=128,
|
||||||
)
|
)
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
@@ -399,7 +407,9 @@ class BillAdminForm(forms.ModelForm):
|
|||||||
self.fields["bill_creator"].widget.can_delete_related = False
|
self.fields["bill_creator"].widget.can_delete_related = False
|
||||||
|
|
||||||
# Delete wiref id from list if there are already 10 bills in wiref form.
|
# Delete wiref id from list if there are already 10 bills in wiref form.
|
||||||
qs = self.fields["wiref"].queryset.annotate(num_bills=Count("bill")).filter(num_bills__lt=10)
|
qs = (
|
||||||
|
self.fields["wiref"].queryset.annotate(num_bills=Count("bill")).filter(num_bills__lt=10)
|
||||||
|
)
|
||||||
|
|
||||||
# delete wiref id from if status is not opened.
|
# delete wiref id from if status is not opened.
|
||||||
qs = qs.filter(status=Wiref.Status.OPENED)
|
qs = qs.filter(status=Wiref.Status.OPENED)
|
||||||
|
|||||||
@@ -53,7 +53,10 @@ class Resolution(models.Model):
|
|||||||
voting_text = models.TextField(verbose_name="Abstimmungstext")
|
voting_text = models.TextField(verbose_name="Abstimmungstext")
|
||||||
|
|
||||||
budget = models.DecimalField(
|
budget = models.DecimalField(
|
||||||
max_digits=7, decimal_places=2, default=0.00, verbose_name="Budget (EUR)"
|
max_digits=7,
|
||||||
|
decimal_places=2,
|
||||||
|
default=0.00,
|
||||||
|
verbose_name="Budget (EUR)",
|
||||||
)
|
)
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
@@ -155,7 +158,9 @@ class Bill(models.Model):
|
|||||||
REPRESENTATION = "R", "Bundesvertretung"
|
REPRESENTATION = "R", "Bundesvertretung"
|
||||||
|
|
||||||
affiliation = models.CharField(
|
affiliation = models.CharField(
|
||||||
max_length=1, choices=Affiliation.choices, verbose_name="Abrechnungsbudget"
|
max_length=1,
|
||||||
|
choices=Affiliation.choices,
|
||||||
|
verbose_name="Abrechnungsbudget",
|
||||||
)
|
)
|
||||||
|
|
||||||
class Payer(models.TextChoices):
|
class Payer(models.TextChoices):
|
||||||
|
|||||||
@@ -25,12 +25,12 @@ def generate_pdf(wiref):
|
|||||||
f"VerwendungszweckRow{count + 1}": elem.purpose,
|
f"VerwendungszweckRow{count + 1}": elem.purpose,
|
||||||
# Replace decimal separator from '.' to ','
|
# Replace decimal separator from '.' to ','
|
||||||
f"BetragRow{count + 1}": str(elem.amount).replace(".", ","),
|
f"BetragRow{count + 1}": str(elem.amount).replace(".", ","),
|
||||||
}
|
},
|
||||||
)
|
)
|
||||||
data_invoice.update(
|
data_invoice.update(
|
||||||
{
|
{
|
||||||
f"RechnungsaustellerinRow{count + 1}": elem.invoice,
|
f"RechnungsaustellerinRow{count + 1}": elem.invoice,
|
||||||
}
|
},
|
||||||
)
|
)
|
||||||
|
|
||||||
# Get budget year
|
# Get budget year
|
||||||
@@ -51,7 +51,7 @@ def generate_pdf(wiref):
|
|||||||
"Budgetjahr": budget_year,
|
"Budgetjahr": budget_year,
|
||||||
# Replace decimal separator from '.' to ','
|
# Replace decimal separator from '.' to ','
|
||||||
"Summe": str(total).replace(".", ","),
|
"Summe": str(total).replace(".", ","),
|
||||||
}
|
},
|
||||||
)
|
)
|
||||||
|
|
||||||
# Write data in pdf
|
# Write data in pdf
|
||||||
|
|||||||
@@ -34,7 +34,7 @@ def set_bankdata(creator, name, iban, bic, saving):
|
|||||||
if saving is True:
|
if saving is True:
|
||||||
# Disable old bank data.
|
# Disable old bank data.
|
||||||
qs = BankData.objects.filter(
|
qs = BankData.objects.filter(
|
||||||
~Q(id=obj.id) & Q(bankdata_creator=obj.bankdata_creator) & Q(is_disabled=False)
|
~Q(id=obj.id) & Q(bankdata_creator=obj.bankdata_creator) & Q(is_disabled=False),
|
||||||
)
|
)
|
||||||
qs.update(is_disabled=True)
|
qs.update(is_disabled=True)
|
||||||
|
|
||||||
@@ -114,11 +114,7 @@ class BillUpdateView(LoginRequiredMixin, UserPassesTestMixin, UpdateView):
|
|||||||
|
|
||||||
# Call bill if it's only yours.
|
# Call bill if it's only yours.
|
||||||
def test_func(self):
|
def test_func(self):
|
||||||
if self.get_object().bill_creator.username == self.request.user.username:
|
return self.get_object().bill_creator.username == self.request.user.username
|
||||||
return True
|
|
||||||
|
|
||||||
# Call handle_no_permissions method.
|
|
||||||
return False
|
|
||||||
|
|
||||||
def handle_no_permission(self):
|
def handle_no_permission(self):
|
||||||
return redirect("finance:bill_list")
|
return redirect("finance:bill_list")
|
||||||
|
|||||||
@@ -14,12 +14,18 @@ class Album(models.Model):
|
|||||||
thumbnail = models.CharField(verbose_name="Thumbnail", max_length=200, null=True, blank=True)
|
thumbnail = models.CharField(verbose_name="Thumbnail", max_length=200, null=True, blank=True)
|
||||||
|
|
||||||
event_date = models.DateField(
|
event_date = models.DateField(
|
||||||
verbose_name="Event Datum", null=True, blank=True, default=timezone.now
|
verbose_name="Event Datum",
|
||||||
|
null=True,
|
||||||
|
blank=True,
|
||||||
|
default=timezone.now,
|
||||||
)
|
)
|
||||||
event_place = models.CharField(max_length=200, blank=True)
|
event_place = models.CharField(max_length=200, blank=True)
|
||||||
|
|
||||||
photographer = models.CharField(
|
photographer = models.CharField(
|
||||||
verbose_name="Fotograph(en)", max_length=200, null=True, blank=True
|
verbose_name="Fotograph(en)",
|
||||||
|
max_length=200,
|
||||||
|
null=True,
|
||||||
|
blank=True,
|
||||||
)
|
)
|
||||||
|
|
||||||
DRAFT = "10"
|
DRAFT = "10"
|
||||||
|
|||||||
@@ -34,7 +34,8 @@ def get_image_list(folder_name):
|
|||||||
img_dict = {
|
img_dict = {
|
||||||
"title": img,
|
"title": img,
|
||||||
"image_url": os.path.join(
|
"image_url": os.path.join(
|
||||||
settings.MEDIA_URL + gallery_path, folder_name + "/" + img
|
settings.MEDIA_URL + gallery_path,
|
||||||
|
folder_name + "/" + img,
|
||||||
),
|
),
|
||||||
"thumb_url": thumb_url,
|
"thumb_url": thumb_url,
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -27,7 +27,7 @@ def index(request):
|
|||||||
slug=slugify(folder),
|
slug=slugify(folder),
|
||||||
folder_name=folder,
|
folder_name=folder,
|
||||||
event_date=None,
|
event_date=None,
|
||||||
)
|
),
|
||||||
)
|
)
|
||||||
else:
|
else:
|
||||||
# show only PUBLIC albums.
|
# show only PUBLIC albums.
|
||||||
|
|||||||
@@ -68,7 +68,7 @@ class TopicGroupAdmin(admin.ModelAdmin):
|
|||||||
"slug",
|
"slug",
|
||||||
"order",
|
"order",
|
||||||
"short_description",
|
"short_description",
|
||||||
)
|
),
|
||||||
},
|
},
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
@@ -118,7 +118,7 @@ class TopicAdmin(admin.ModelAdmin):
|
|||||||
"topic_group",
|
"topic_group",
|
||||||
"archive",
|
"archive",
|
||||||
"description",
|
"description",
|
||||||
)
|
),
|
||||||
},
|
},
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
@@ -163,7 +163,7 @@ class AttachmentAdmin(admin.ModelAdmin):
|
|||||||
"title",
|
"title",
|
||||||
"topic",
|
"topic",
|
||||||
"description",
|
"description",
|
||||||
)
|
),
|
||||||
},
|
},
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -23,7 +23,10 @@ class TopicGroup(models.Model):
|
|||||||
short_description = models.TextField(null=True, blank=True)
|
short_description = models.TextField(null=True, blank=True)
|
||||||
|
|
||||||
order = models.PositiveSmallIntegerField(
|
order = models.PositiveSmallIntegerField(
|
||||||
verbose_name="Reihenfolge", unique=True, null=True, blank=True
|
verbose_name="Reihenfolge",
|
||||||
|
unique=True,
|
||||||
|
null=True,
|
||||||
|
blank=True,
|
||||||
)
|
)
|
||||||
|
|
||||||
objects = models.Manager()
|
objects = models.Manager()
|
||||||
@@ -53,7 +56,9 @@ class Topic(models.Model):
|
|||||||
description = models.TextField(blank=True, null=True)
|
description = models.TextField(blank=True, null=True)
|
||||||
|
|
||||||
topic_group = models.ForeignKey(
|
topic_group = models.ForeignKey(
|
||||||
TopicGroup, on_delete=models.CASCADE, verbose_name="Themenbereich"
|
TopicGroup,
|
||||||
|
on_delete=models.CASCADE,
|
||||||
|
verbose_name="Themenbereich",
|
||||||
)
|
)
|
||||||
|
|
||||||
objects = models.Manager()
|
objects = models.Manager()
|
||||||
@@ -65,7 +70,8 @@ class Topic(models.Model):
|
|||||||
constraints = [
|
constraints = [
|
||||||
UniqueConstraint(fields=["slug", "topic_group"], name="unique_intern_slug_topic_group"),
|
UniqueConstraint(fields=["slug", "topic_group"], name="unique_intern_slug_topic_group"),
|
||||||
UniqueConstraint(
|
UniqueConstraint(
|
||||||
fields=["title", "topic_group"], name="unique_intern_title_topic_group"
|
fields=["title", "topic_group"],
|
||||||
|
name="unique_intern_title_topic_group",
|
||||||
),
|
),
|
||||||
]
|
]
|
||||||
|
|
||||||
@@ -126,7 +132,9 @@ class Etherpad(models.Model):
|
|||||||
date = models.DateField(default=date.today, verbose_name="Datum")
|
date = models.DateField(default=date.today, verbose_name="Datum")
|
||||||
|
|
||||||
attachment = models.ForeignKey(
|
attachment = models.ForeignKey(
|
||||||
Attachment, on_delete=models.CASCADE, verbose_name="Anhang Ordner"
|
Attachment,
|
||||||
|
on_delete=models.CASCADE,
|
||||||
|
verbose_name="Anhang Ordner",
|
||||||
)
|
)
|
||||||
|
|
||||||
objects = models.Manager()
|
objects = models.Manager()
|
||||||
@@ -178,7 +186,9 @@ class FileUpload(models.Model):
|
|||||||
date = models.DateField(default=date.today, verbose_name="Datum")
|
date = models.DateField(default=date.today, verbose_name="Datum")
|
||||||
|
|
||||||
attachment = models.ForeignKey(
|
attachment = models.ForeignKey(
|
||||||
Attachment, on_delete=models.CASCADE, verbose_name="Anhang Ordner"
|
Attachment,
|
||||||
|
on_delete=models.CASCADE,
|
||||||
|
verbose_name="Anhang Ordner",
|
||||||
)
|
)
|
||||||
|
|
||||||
objects = models.Manager()
|
objects = models.Manager()
|
||||||
|
|||||||
@@ -27,7 +27,9 @@ logger = logging.getLogger(__name__)
|
|||||||
@authenticated_user
|
@authenticated_user
|
||||||
def index(request):
|
def index(request):
|
||||||
topic = Topic.objects.filter(archive=False).order_by(
|
topic = Topic.objects.filter(archive=False).order_by(
|
||||||
F("topic_group__order").asc(nulls_last=True), "topic_group", "title"
|
F("topic_group__order").asc(nulls_last=True),
|
||||||
|
"topic_group",
|
||||||
|
"title",
|
||||||
)
|
)
|
||||||
empty_topic_groups = TopicGroup.objects.filter(topic=None)
|
empty_topic_groups = TopicGroup.objects.filter(topic=None)
|
||||||
archive_topic = Topic.objects.filter(archive=True)
|
archive_topic = Topic.objects.filter(archive=True)
|
||||||
@@ -107,7 +109,7 @@ class AttachmentCreateView(LoginRequiredMixin, CreateView):
|
|||||||
topic_group_slug = self.kwargs.get("topic_group_slug")
|
topic_group_slug = self.kwargs.get("topic_group_slug")
|
||||||
topic_slug = self.kwargs.get("slug")
|
topic_slug = self.kwargs.get("slug")
|
||||||
context["topic"] = Topic.objects.get(
|
context["topic"] = Topic.objects.get(
|
||||||
Q(topic_group__slug=topic_group_slug) & Q(slug=topic_slug)
|
Q(topic_group__slug=topic_group_slug) & Q(slug=topic_slug),
|
||||||
)
|
)
|
||||||
return context
|
return context
|
||||||
|
|
||||||
@@ -143,7 +145,7 @@ class AttachmentDetailView(LoginRequiredMixin, DetailView):
|
|||||||
topic_group_slug = self.kwargs.get("topic_group_slug")
|
topic_group_slug = self.kwargs.get("topic_group_slug")
|
||||||
topic_slug = self.kwargs.get("topic_slug")
|
topic_slug = self.kwargs.get("topic_slug")
|
||||||
return Attachment.objects.filter(
|
return Attachment.objects.filter(
|
||||||
Q(topic__topic_group__slug=topic_group_slug) & Q(topic__slug=topic_slug)
|
Q(topic__topic_group__slug=topic_group_slug) & Q(topic__slug=topic_slug),
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
@@ -166,7 +168,7 @@ class AttachmentUpdateView(LoginRequiredMixin, UpdateView):
|
|||||||
topic_group_slug = self.kwargs.get("topic_group_slug")
|
topic_group_slug = self.kwargs.get("topic_group_slug")
|
||||||
topic_slug = self.kwargs.get("topic_slug")
|
topic_slug = self.kwargs.get("topic_slug")
|
||||||
return Attachment.objects.filter(
|
return Attachment.objects.filter(
|
||||||
Q(topic__topic_group__slug=topic_group_slug) & Q(topic__slug=topic_slug)
|
Q(topic__topic_group__slug=topic_group_slug) & Q(topic__slug=topic_slug),
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
@@ -186,7 +188,7 @@ class EtherpadCreateView(LoginRequiredMixin, CreateView):
|
|||||||
topic_slug = self.kwargs.get("topic_slug")
|
topic_slug = self.kwargs.get("topic_slug")
|
||||||
slug = self.kwargs.get("slug")
|
slug = self.kwargs.get("slug")
|
||||||
attachment = Attachment.objects.get(
|
attachment = Attachment.objects.get(
|
||||||
Q(topic__topic_group__slug=topic_group_slug) & Q(topic__slug=topic_slug) & Q(slug=slug)
|
Q(topic__topic_group__slug=topic_group_slug) & Q(topic__slug=topic_slug) & Q(slug=slug),
|
||||||
)
|
)
|
||||||
context["attachment"] = attachment
|
context["attachment"] = attachment
|
||||||
return context
|
return context
|
||||||
@@ -211,7 +213,7 @@ class FileUploadCreateView(LoginRequiredMixin, CreateView):
|
|||||||
topic_slug = self.kwargs.get("topic_slug")
|
topic_slug = self.kwargs.get("topic_slug")
|
||||||
slug = self.kwargs.get("slug")
|
slug = self.kwargs.get("slug")
|
||||||
attachment = Attachment.objects.get(
|
attachment = Attachment.objects.get(
|
||||||
Q(topic__topic_group__slug=topic_group_slug) & Q(topic__slug=topic_slug) & Q(slug=slug)
|
Q(topic__topic_group__slug=topic_group_slug) & Q(topic__slug=topic_slug) & Q(slug=slug),
|
||||||
)
|
)
|
||||||
context["attachment"] = attachment
|
context["attachment"] = attachment
|
||||||
return context
|
return context
|
||||||
|
|||||||
@@ -86,7 +86,7 @@ class MemberAdmin(admin.ModelAdmin):
|
|||||||
"birthday",
|
"birthday",
|
||||||
"phone",
|
"phone",
|
||||||
"address",
|
"address",
|
||||||
)
|
),
|
||||||
},
|
},
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
@@ -137,7 +137,7 @@ class JobAdmin(admin.ModelAdmin):
|
|||||||
"fields": (
|
"fields": (
|
||||||
"name",
|
"name",
|
||||||
"job_group",
|
"job_group",
|
||||||
)
|
),
|
||||||
},
|
},
|
||||||
),
|
),
|
||||||
(
|
(
|
||||||
@@ -146,7 +146,7 @@ class JobAdmin(admin.ModelAdmin):
|
|||||||
"fields": (
|
"fields": (
|
||||||
"shortterm",
|
"shortterm",
|
||||||
"slug",
|
"slug",
|
||||||
)
|
),
|
||||||
},
|
},
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
@@ -193,7 +193,7 @@ class JobGroupAdmin(admin.ModelAdmin):
|
|||||||
"fields": (
|
"fields": (
|
||||||
"name",
|
"name",
|
||||||
"description",
|
"description",
|
||||||
)
|
),
|
||||||
},
|
},
|
||||||
),
|
),
|
||||||
(
|
(
|
||||||
@@ -202,7 +202,7 @@ class JobGroupAdmin(admin.ModelAdmin):
|
|||||||
"fields": (
|
"fields": (
|
||||||
"shortterm",
|
"shortterm",
|
||||||
"slug",
|
"slug",
|
||||||
)
|
),
|
||||||
},
|
},
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -46,8 +46,7 @@ class MemberForm(forms.ModelForm):
|
|||||||
|
|
||||||
help_texts = {
|
help_texts = {
|
||||||
"image": (
|
"image": (
|
||||||
"Mindestdimension: 150*150 px, maximale Größe: 10MB, erlaubtes Format: "
|
"Mindestdimension: 150*150 px, maximale Größe: 10MB, erlaubtes Format: Bildformate."
|
||||||
"Bildformate."
|
|
||||||
),
|
),
|
||||||
"mailaccount": "Die Mailadresse mit '@fet.at' angeben.",
|
"mailaccount": "Die Mailadresse mit '@fet.at' angeben.",
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -24,7 +24,7 @@ class ActiveJobMemberManager(models.Manager):
|
|||||||
)
|
)
|
||||||
|
|
||||||
return qs.filter(
|
return qs.filter(
|
||||||
Q(member__role="A") & (Q(job_end__gt=date_today) | Q(job_end__isnull=True))
|
Q(member__role="A") & (Q(job_end__gt=date_today) | Q(job_end__isnull=True)),
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
@@ -44,7 +44,7 @@ class InactiveJobMemberManager(models.Manager):
|
|||||||
|
|
||||||
return qs.filter(
|
return qs.filter(
|
||||||
Q(member__role="P")
|
Q(member__role="P")
|
||||||
| (Q(job_end__lt=date_today + timedelta(days=1)) & Q(job_end__isnull=False))
|
| (Q(job_end__lt=date_today + timedelta(days=1)) & Q(job_end__isnull=False)),
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
@@ -56,7 +56,9 @@ class JobMemberManager(models.Manager):
|
|||||||
|
|
||||||
def get_all_jobs_sorted(self):
|
def get_all_jobs_sorted(self):
|
||||||
qs = self.get_queryset().order_by(
|
qs = self.get_queryset().order_by(
|
||||||
F("job_end").desc(nulls_first=True), "-job_start", "job__name"
|
F("job_end").desc(nulls_first=True),
|
||||||
|
"-job_start",
|
||||||
|
"job__name",
|
||||||
)
|
)
|
||||||
return qs
|
return qs
|
||||||
|
|
||||||
|
|||||||
@@ -19,7 +19,8 @@ def get_jobs_sidebar(slug):
|
|||||||
job_groups.remove(elem)
|
job_groups.remove(elem)
|
||||||
|
|
||||||
job_members = JobMember.active_member.get_all(slug=slug).order_by(
|
job_members = JobMember.active_member.get_all(slug=slug).order_by(
|
||||||
F("job__order").asc(nulls_last=True), "job__name"
|
F("job__order").asc(nulls_last=True),
|
||||||
|
"job__name",
|
||||||
)
|
)
|
||||||
active_job_group = JobGroup.objects.filter(slug=slug).first()
|
active_job_group = JobGroup.objects.filter(slug=slug).first()
|
||||||
|
|
||||||
|
|||||||
@@ -27,7 +27,8 @@ def jobs(request, slug=None):
|
|||||||
raise Http404("wrong job")
|
raise Http404("wrong job")
|
||||||
|
|
||||||
job_members = JobMember.active_member.get_all(slug=slug).order_by(
|
job_members = JobMember.active_member.get_all(slug=slug).order_by(
|
||||||
F("job__order").asc(nulls_last=True), "job__name"
|
F("job__order").asc(nulls_last=True),
|
||||||
|
"job__name",
|
||||||
)
|
)
|
||||||
active_job_group = JobGroup.objects.filter(slug=slug).first()
|
active_job_group = JobGroup.objects.filter(slug=slug).first()
|
||||||
|
|
||||||
|
|||||||
@@ -88,7 +88,7 @@ class PostAdmin(admin.ModelAdmin):
|
|||||||
"all": [
|
"all": [
|
||||||
"jquery-ui/jquery-ui.min.css",
|
"jquery-ui/jquery-ui.min.css",
|
||||||
"jquery-ui/ui-lightness/theme.css",
|
"jquery-ui/ui-lightness/theme.css",
|
||||||
]
|
],
|
||||||
}
|
}
|
||||||
js = [
|
js = [
|
||||||
"jquery-ui/jquery-ui.min.js",
|
"jquery-ui/jquery-ui.min.js",
|
||||||
@@ -108,7 +108,7 @@ class NewsAdmin(PostAdmin):
|
|||||||
"title",
|
"title",
|
||||||
"subtitle",
|
"subtitle",
|
||||||
"tags",
|
"tags",
|
||||||
)
|
),
|
||||||
},
|
},
|
||||||
),
|
),
|
||||||
(
|
(
|
||||||
@@ -117,7 +117,7 @@ class NewsAdmin(PostAdmin):
|
|||||||
"fields": (
|
"fields": (
|
||||||
"status",
|
"status",
|
||||||
"is_pinned",
|
"is_pinned",
|
||||||
)
|
),
|
||||||
},
|
},
|
||||||
),
|
),
|
||||||
(
|
(
|
||||||
@@ -126,7 +126,7 @@ class NewsAdmin(PostAdmin):
|
|||||||
"fields": (
|
"fields": (
|
||||||
"image",
|
"image",
|
||||||
"body",
|
"body",
|
||||||
)
|
),
|
||||||
},
|
},
|
||||||
),
|
),
|
||||||
(
|
(
|
||||||
@@ -136,7 +136,7 @@ class NewsAdmin(PostAdmin):
|
|||||||
"slug",
|
"slug",
|
||||||
"author",
|
"author",
|
||||||
"public_date",
|
"public_date",
|
||||||
)
|
),
|
||||||
},
|
},
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
@@ -161,7 +161,7 @@ class EventAdmin(PostAdmin):
|
|||||||
"title",
|
"title",
|
||||||
"subtitle",
|
"subtitle",
|
||||||
"tags",
|
"tags",
|
||||||
)
|
),
|
||||||
},
|
},
|
||||||
),
|
),
|
||||||
(
|
(
|
||||||
@@ -170,7 +170,7 @@ class EventAdmin(PostAdmin):
|
|||||||
"fields": (
|
"fields": (
|
||||||
"status",
|
"status",
|
||||||
"is_pinned",
|
"is_pinned",
|
||||||
)
|
),
|
||||||
},
|
},
|
||||||
),
|
),
|
||||||
(
|
(
|
||||||
@@ -180,7 +180,7 @@ class EventAdmin(PostAdmin):
|
|||||||
"event_start",
|
"event_start",
|
||||||
"event_end",
|
"event_end",
|
||||||
"event_place",
|
"event_place",
|
||||||
)
|
),
|
||||||
},
|
},
|
||||||
),
|
),
|
||||||
(
|
(
|
||||||
@@ -189,7 +189,7 @@ class EventAdmin(PostAdmin):
|
|||||||
"fields": (
|
"fields": (
|
||||||
"image",
|
"image",
|
||||||
"body",
|
"body",
|
||||||
)
|
),
|
||||||
},
|
},
|
||||||
),
|
),
|
||||||
(
|
(
|
||||||
@@ -199,7 +199,7 @@ class EventAdmin(PostAdmin):
|
|||||||
"slug",
|
"slug",
|
||||||
"author",
|
"author",
|
||||||
"public_date",
|
"public_date",
|
||||||
)
|
),
|
||||||
},
|
},
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
@@ -223,7 +223,7 @@ class FetMeetingAdmin(EventAdmin):
|
|||||||
"event_end",
|
"event_end",
|
||||||
"event_place",
|
"event_place",
|
||||||
"tags",
|
"tags",
|
||||||
)
|
),
|
||||||
},
|
},
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -149,10 +149,14 @@ class PostSearchForm(forms.Form):
|
|||||||
month = forms.ChoiceField(label="Monat", choices=month_choices, required=False)
|
month = forms.ChoiceField(label="Monat", choices=month_choices, required=False)
|
||||||
|
|
||||||
compact_view = forms.BooleanField(
|
compact_view = forms.BooleanField(
|
||||||
label="Kompakte Ansicht", required=False, widget=CheckboxInput
|
label="Kompakte Ansicht",
|
||||||
|
required=False,
|
||||||
|
widget=CheckboxInput,
|
||||||
)
|
)
|
||||||
fet_meeting_only = forms.BooleanField(
|
fet_meeting_only = forms.BooleanField(
|
||||||
label="nur FET Sitzungen", required=False, widget=CheckboxInput
|
label="nur FET Sitzungen",
|
||||||
|
required=False,
|
||||||
|
widget=CheckboxInput,
|
||||||
)
|
)
|
||||||
|
|
||||||
def __init__(self, *args, **kwargs):
|
def __init__(self, *args, **kwargs):
|
||||||
|
|||||||
@@ -10,20 +10,14 @@ class PublishedManager(models.Manager):
|
|||||||
"""
|
"""
|
||||||
publish all posts with status 'PUBLIC'
|
publish all posts with status 'PUBLIC'
|
||||||
"""
|
"""
|
||||||
if public:
|
qs = self.get_queryset().filter(status="20") if public else self.get_queryset()
|
||||||
qs = self.get_queryset().filter(status="20")
|
|
||||||
else:
|
|
||||||
qs = self.get_queryset()
|
|
||||||
return qs
|
return qs
|
||||||
|
|
||||||
def published_all(self, public=True):
|
def published_all(self, public=True):
|
||||||
"""
|
"""
|
||||||
publish all posts with status 'PUBLIC' and 'ONLY_INTERN'
|
publish all posts with status 'PUBLIC' and 'ONLY_INTERN'
|
||||||
"""
|
"""
|
||||||
if public:
|
qs = self.get_queryset().filter(~Q(status="10")) if public else self.get_queryset()
|
||||||
qs = self.get_queryset().filter(~Q(status="10"))
|
|
||||||
else:
|
|
||||||
qs = self.get_queryset()
|
|
||||||
return qs
|
return qs
|
||||||
|
|
||||||
|
|
||||||
@@ -35,7 +29,7 @@ class PostManager(PublishedManager, models.Manager):
|
|||||||
When(post_type="N", then="public_date"),
|
When(post_type="N", then="public_date"),
|
||||||
When(post_type="E", then="event_start__date"),
|
When(post_type="E", then="event_start__date"),
|
||||||
When(post_type="F", then="event_start__date"),
|
When(post_type="F", then="event_start__date"),
|
||||||
)
|
),
|
||||||
)
|
)
|
||||||
return qs.order_by("-date", "-id")
|
return qs.order_by("-date", "-id")
|
||||||
|
|
||||||
@@ -74,7 +68,7 @@ class ArticleManager(PublishedManager, models.Manager):
|
|||||||
date=Case(
|
date=Case(
|
||||||
When(post_type="N", then="public_date"),
|
When(post_type="N", then="public_date"),
|
||||||
When(post_type="E", then="event_start__date"),
|
When(post_type="E", then="event_start__date"),
|
||||||
)
|
),
|
||||||
)
|
)
|
||||||
return qs.order_by("-date", "-id")
|
return qs.order_by("-date", "-id")
|
||||||
|
|
||||||
@@ -104,7 +98,7 @@ class ArticleManager(PublishedManager, models.Manager):
|
|||||||
.filter(is_pinned=True)
|
.filter(is_pinned=True)
|
||||||
.filter(
|
.filter(
|
||||||
(Q(post_type="N") & Q(public_date__gt=post_date))
|
(Q(post_type="N") & Q(public_date__gt=post_date))
|
||||||
| (Q(post_type="E") & Q(event_end__date__gt=event_date))
|
| (Q(post_type="E") & Q(event_end__date__gt=event_date)),
|
||||||
)
|
)
|
||||||
.first()
|
.first()
|
||||||
)
|
)
|
||||||
@@ -120,7 +114,7 @@ class NewsManager(PublishedManager, models.Manager):
|
|||||||
qs = qs.annotate(
|
qs = qs.annotate(
|
||||||
date=Case(
|
date=Case(
|
||||||
When(post_type="N", then="public_date"),
|
When(post_type="N", then="public_date"),
|
||||||
)
|
),
|
||||||
)
|
)
|
||||||
return qs.order_by("-date")
|
return qs.order_by("-date")
|
||||||
|
|
||||||
@@ -136,7 +130,7 @@ class AllEventManager(PublishedManager, models.Manager):
|
|||||||
date=Case(
|
date=Case(
|
||||||
When(post_type="E", then="event_start__date"),
|
When(post_type="E", then="event_start__date"),
|
||||||
When(post_type="F", then="event_start__date"),
|
When(post_type="F", then="event_start__date"),
|
||||||
)
|
),
|
||||||
)
|
)
|
||||||
return qs.order_by("-date")
|
return qs.order_by("-date")
|
||||||
|
|
||||||
@@ -157,7 +151,7 @@ class EventManager(PublishedManager, models.Manager):
|
|||||||
qs = qs.annotate(
|
qs = qs.annotate(
|
||||||
date=Case(
|
date=Case(
|
||||||
When(post_type="E", then="event_start__date"),
|
When(post_type="E", then="event_start__date"),
|
||||||
)
|
),
|
||||||
)
|
)
|
||||||
return qs.order_by("-date")
|
return qs.order_by("-date")
|
||||||
|
|
||||||
@@ -182,7 +176,7 @@ class FetMeetingManager(PublishedManager, models.Manager):
|
|||||||
qs = qs.annotate(
|
qs = qs.annotate(
|
||||||
date=Case(
|
date=Case(
|
||||||
When(post_type="F", then="event_start__date"),
|
When(post_type="F", then="event_start__date"),
|
||||||
)
|
),
|
||||||
)
|
)
|
||||||
return qs.order_by("-date")
|
return qs.order_by("-date")
|
||||||
|
|
||||||
|
|||||||
@@ -86,7 +86,10 @@ class Post(models.Model):
|
|||||||
|
|
||||||
author = models.ForeignKey(User, on_delete=models.SET_NULL, null=True, blank=True)
|
author = models.ForeignKey(User, on_delete=models.SET_NULL, null=True, blank=True)
|
||||||
public_date = models.DateField(
|
public_date = models.DateField(
|
||||||
verbose_name="Veröffentlichung", null=True, blank=True, default=timezone.now
|
verbose_name="Veröffentlichung",
|
||||||
|
null=True,
|
||||||
|
blank=True,
|
||||||
|
default=timezone.now,
|
||||||
)
|
)
|
||||||
|
|
||||||
__choices = [("N", _("News")), ("E", _("Event")), ("F", _("FetMeeting"))]
|
__choices = [("N", _("News")), ("E", _("Event")), ("F", _("FetMeeting"))]
|
||||||
@@ -137,9 +140,6 @@ class Post(models.Model):
|
|||||||
self.title,
|
self.title,
|
||||||
)
|
)
|
||||||
|
|
||||||
def get_absolute_url(self):
|
|
||||||
return reverse("posts:post", kwargs={"slug": self.slug})
|
|
||||||
|
|
||||||
def save(self, *args, **kwargs):
|
def save(self, *args, **kwargs):
|
||||||
# save the post with some defaults
|
# save the post with some defaults
|
||||||
if not self.public_date:
|
if not self.public_date:
|
||||||
@@ -150,6 +150,9 @@ class Post(models.Model):
|
|||||||
|
|
||||||
super().save(*args, **kwargs)
|
super().save(*args, **kwargs)
|
||||||
|
|
||||||
|
def get_absolute_url(self):
|
||||||
|
return reverse("posts:post", kwargs={"slug": self.slug})
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def agenda_html(self) -> str | None:
|
def agenda_html(self) -> str | None:
|
||||||
"Agenda HTML from Etherpad Pad"
|
"Agenda HTML from Etherpad Pad"
|
||||||
@@ -188,7 +191,9 @@ class Post(models.Model):
|
|||||||
|
|
||||||
ep_set_html(self.protocol_key, value)
|
ep_set_html(self.protocol_key, value)
|
||||||
request_logger.info(
|
request_logger.info(
|
||||||
"Set protocol etherpad. Post: %s. Key: %s", self.slug, self.protocol_key
|
"Set protocol etherpad. Post: %s. Key: %s",
|
||||||
|
self.slug,
|
||||||
|
self.protocol_key,
|
||||||
)
|
)
|
||||||
return value
|
return value
|
||||||
|
|
||||||
@@ -302,10 +307,7 @@ class Post(models.Model):
|
|||||||
|
|
||||||
@property
|
@property
|
||||||
def published(self):
|
def published(self):
|
||||||
if self.status == self.Status.PUBLIC:
|
return self.status == self.Status.PUBLIC
|
||||||
return True
|
|
||||||
|
|
||||||
return False
|
|
||||||
|
|
||||||
|
|
||||||
class News(Post):
|
class News(Post):
|
||||||
@@ -328,16 +330,16 @@ class Event(Post):
|
|||||||
only_events = EventManager()
|
only_events = EventManager()
|
||||||
all_events = AllEventManager()
|
all_events = AllEventManager()
|
||||||
|
|
||||||
def __init__(self, *args, **kwargs):
|
|
||||||
super().__init__(*args, **kwargs)
|
|
||||||
self.post_type = "E"
|
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
proxy = True
|
proxy = True
|
||||||
|
|
||||||
verbose_name = "Event"
|
verbose_name = "Event"
|
||||||
verbose_name_plural = "Events"
|
verbose_name_plural = "Events"
|
||||||
|
|
||||||
|
def __init__(self, *args, **kwargs):
|
||||||
|
super().__init__(*args, **kwargs)
|
||||||
|
self.post_type = "E"
|
||||||
|
|
||||||
def save(self, *args, **kwargs):
|
def save(self, *args, **kwargs):
|
||||||
if not self.post_type:
|
if not self.post_type:
|
||||||
self.post_type = "E"
|
self.post_type = "E"
|
||||||
@@ -355,16 +357,16 @@ class Event(Post):
|
|||||||
class FetMeeting(Event):
|
class FetMeeting(Event):
|
||||||
objects = FetMeetingManager()
|
objects = FetMeetingManager()
|
||||||
|
|
||||||
def __init__(self, *args, **kwargs):
|
|
||||||
super().__init__(*args, **kwargs)
|
|
||||||
self.post_type = "F"
|
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
proxy = True
|
proxy = True
|
||||||
|
|
||||||
verbose_name = "Fet Sitzung"
|
verbose_name = "Fet Sitzung"
|
||||||
verbose_name_plural = "Fet Sitzungen"
|
verbose_name_plural = "Fet Sitzungen"
|
||||||
|
|
||||||
|
def __init__(self, *args, **kwargs):
|
||||||
|
super().__init__(*args, **kwargs)
|
||||||
|
self.post_type = "F"
|
||||||
|
|
||||||
def save(self, *args, **kwargs):
|
def save(self, *args, **kwargs):
|
||||||
self.title = "Fachschaftssitzung"
|
self.title = "Fachschaftssitzung"
|
||||||
if not self.slug:
|
if not self.slug:
|
||||||
@@ -398,8 +400,7 @@ class FetMeeting(Event):
|
|||||||
def __get_slug(self) -> str:
|
def __get_slug(self) -> str:
|
||||||
slug = slugify(self.event_start.date()) + "-" + slugify("Fachschaftssitzung")
|
slug = slugify(self.event_start.date()) + "-" + slugify("Fachschaftssitzung")
|
||||||
|
|
||||||
if Post.objects.filter(slug=slug).exists():
|
if Post.objects.filter(slug=slug).exists() and Post.objects.get(slug=slug).id != self.id:
|
||||||
if Post.objects.get(slug=slug).id != self.id:
|
|
||||||
raise ValidationError("Es existiert bereits eine Sitzung mit demselben Datum.")
|
raise ValidationError("Es existiert bereits eine Sitzung mit demselben Datum.")
|
||||||
|
|
||||||
return slug
|
return slug
|
||||||
|
|||||||
@@ -22,9 +22,7 @@ class PostIndex(indexes.SearchIndex, indexes.Indexable):
|
|||||||
def prepare_date(self, obj):
|
def prepare_date(self, obj):
|
||||||
if obj.post_type == "N":
|
if obj.post_type == "N":
|
||||||
return obj.public_date
|
return obj.public_date
|
||||||
elif obj.post_type == "E":
|
elif obj.post_type == "E" or obj.post_type == "F":
|
||||||
return obj.event_start.date()
|
|
||||||
elif obj.post_type == "F":
|
|
||||||
return obj.event_start.date()
|
return obj.event_start.date()
|
||||||
|
|
||||||
def prepare_agenda(self, obj):
|
def prepare_agenda(self, obj):
|
||||||
|
|||||||
@@ -146,13 +146,13 @@ class PostDetailView(DetailView):
|
|||||||
Helper function for getting previous post
|
Helper function for getting previous post
|
||||||
"""
|
"""
|
||||||
posts = Post.objects.date_sorted_list(self.public_only).filter(
|
posts = Post.objects.date_sorted_list(self.public_only).filter(
|
||||||
post_type=self.object.post_type
|
post_type=self.object.post_type,
|
||||||
)
|
)
|
||||||
qs = posts.filter(
|
qs = posts.filter(
|
||||||
# Get posts which are in the future.
|
# Get posts which are in the future.
|
||||||
Q(date__lt=self.object.date)
|
Q(date__lt=self.object.date)
|
||||||
# Get posts which have the same date but id is lower.
|
# Get posts which have the same date but id is lower.
|
||||||
| (Q(date__lte=self.object.date) & Q(id__lt=self.object.id))
|
| (Q(date__lte=self.object.date) & Q(id__lt=self.object.id)),
|
||||||
)
|
)
|
||||||
if not qs:
|
if not qs:
|
||||||
# If there are any prev posts, then take the latest one.
|
# If there are any prev posts, then take the latest one.
|
||||||
@@ -173,7 +173,7 @@ class PostDetailView(DetailView):
|
|||||||
# Get posts which are in the past.
|
# Get posts which are in the past.
|
||||||
Q(date__gt=self.object.date)
|
Q(date__gt=self.object.date)
|
||||||
# Get posts which have the same date but id is greater.
|
# Get posts which have the same date but id is greater.
|
||||||
| (Q(date__gte=self.object.date) & Q(id__gt=self.object.id))
|
| (Q(date__gte=self.object.date) & Q(id__gt=self.object.id)),
|
||||||
)
|
)
|
||||||
if not qs:
|
if not qs:
|
||||||
# If there are any next posts, then take the first one.
|
# If there are any next posts, then take the first one.
|
||||||
@@ -314,7 +314,7 @@ def show_pdf(request, html, filename):
|
|||||||
|
|
||||||
response = HttpResponse(pdf, content_type="application/pdf")
|
response = HttpResponse(pdf, content_type="application/pdf")
|
||||||
|
|
||||||
content = "inline; filename=%s" % filename
|
content = f"inline; filename={filename}"
|
||||||
response["Content-Disposition"] = content
|
response["Content-Disposition"] = content
|
||||||
|
|
||||||
return response
|
return response
|
||||||
|
|||||||
@@ -22,7 +22,7 @@ class FetUserSearchForm(SearchForm):
|
|||||||
sqs_gallery = self.searchqueryset.models(Album)
|
sqs_gallery = self.searchqueryset.models(Album)
|
||||||
sqs_gallery = sqs_gallery.filter(
|
sqs_gallery = sqs_gallery.filter(
|
||||||
SQ(title__icontains=self.cleaned_data["q"])
|
SQ(title__icontains=self.cleaned_data["q"])
|
||||||
| SQ(description__icontains=self.cleaned_data["q"])
|
| SQ(description__icontains=self.cleaned_data["q"]),
|
||||||
)
|
)
|
||||||
|
|
||||||
sqs_intern = self.searchqueryset.models(Etherpad)
|
sqs_intern = self.searchqueryset.models(Etherpad)
|
||||||
@@ -31,7 +31,7 @@ class FetUserSearchForm(SearchForm):
|
|||||||
sqs_member = self.searchqueryset.models(Member)
|
sqs_member = self.searchqueryset.models(Member)
|
||||||
sqs_member = sqs_member.filter(
|
sqs_member = sqs_member.filter(
|
||||||
SQ(firstname__icontains=self.cleaned_data["q"])
|
SQ(firstname__icontains=self.cleaned_data["q"])
|
||||||
| SQ(surname__icontains=self.cleaned_data["q"])
|
| SQ(surname__icontains=self.cleaned_data["q"]),
|
||||||
)
|
)
|
||||||
|
|
||||||
sqs_post = self.searchqueryset.models(Post)
|
sqs_post = self.searchqueryset.models(Post)
|
||||||
@@ -39,7 +39,7 @@ class FetUserSearchForm(SearchForm):
|
|||||||
SQ(title__icontains=self.cleaned_data["q"])
|
SQ(title__icontains=self.cleaned_data["q"])
|
||||||
| SQ(body__icontains=self.cleaned_data["q"])
|
| SQ(body__icontains=self.cleaned_data["q"])
|
||||||
| SQ(agenda__icontains=self.cleaned_data["q"])
|
| SQ(agenda__icontains=self.cleaned_data["q"])
|
||||||
| SQ(protocol__icontains=self.cleaned_data["q"])
|
| SQ(protocol__icontains=self.cleaned_data["q"]),
|
||||||
)
|
)
|
||||||
|
|
||||||
tmp_results = deque([])
|
tmp_results = deque([])
|
||||||
@@ -82,20 +82,20 @@ class NonUserSearchForm(SearchForm):
|
|||||||
sqs_gallery = self.searchqueryset.models(Album).filter(status="20")
|
sqs_gallery = self.searchqueryset.models(Album).filter(status="20")
|
||||||
sqs_gallery = sqs_gallery.filter(
|
sqs_gallery = sqs_gallery.filter(
|
||||||
SQ(title__icontains=self.cleaned_data["q"])
|
SQ(title__icontains=self.cleaned_data["q"])
|
||||||
| SQ(description__icontains=self.cleaned_data["q"])
|
| SQ(description__icontains=self.cleaned_data["q"]),
|
||||||
)
|
)
|
||||||
|
|
||||||
sqs_member = self.searchqueryset.models(Member)
|
sqs_member = self.searchqueryset.models(Member)
|
||||||
sqs_member = sqs_member.filter(
|
sqs_member = sqs_member.filter(
|
||||||
SQ(firstname__icontains=self.cleaned_data["q"])
|
SQ(firstname__icontains=self.cleaned_data["q"])
|
||||||
| SQ(surname__icontains=self.cleaned_data["q"])
|
| SQ(surname__icontains=self.cleaned_data["q"]),
|
||||||
)
|
)
|
||||||
|
|
||||||
sqs_post = self.searchqueryset.models(Post).filter(status="20")
|
sqs_post = self.searchqueryset.models(Post).filter(status="20")
|
||||||
sqs_post = sqs_post.filter(
|
sqs_post = sqs_post.filter(
|
||||||
SQ(title__icontains=self.cleaned_data["q"])
|
SQ(title__icontains=self.cleaned_data["q"])
|
||||||
| SQ(body__icontains=self.cleaned_data["q"])
|
| SQ(body__icontains=self.cleaned_data["q"])
|
||||||
| SQ(agenda__icontains=self.cleaned_data["q"])
|
| SQ(agenda__icontains=self.cleaned_data["q"]),
|
||||||
)
|
)
|
||||||
|
|
||||||
tmp_results = deque([])
|
tmp_results = deque([])
|
||||||
|
|||||||
Reference in New Issue
Block a user