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