put manager methods in a separate file

This commit is contained in:
2021-03-07 12:59:15 +00:00
parent aab911c638
commit 5f95bdd514
3 changed files with 85 additions and 99 deletions

View File

@@ -0,0 +1,64 @@
from django.db import models
from django.db.models import Q
from django.utils import timezone
from datetime import timedelta
class ActiveJobMemberManager(models.Manager):
"""return a list of active member, and members who are still working."""
def get_all_by_slug(self, slug):
return (
self.get_queryset()
.filter(job__job_group__slug=slug)
.order_by("job__slug", "job_role", "member__firstname")
)
def get_queryset(self):
date_today = timezone.now().date()
qs = super().get_queryset().order_by("member__firstname")
return qs.filter(
Q(member__role="A") & (Q(job_end__gt=date_today) | Q(job_end__isnull=True))
)
class InactiveJobMemberManager(models.Manager):
"""return a list of inactive member."""
def get_all_by_slug(self, slug):
return (
self.get_queryset()
.filter(job__job_group__slug=slug)
.order_by("job__slug", "job_role", "member__firstname")
)
def get_queryset(self):
date_today = timezone.now().date()
qs = super().get_queryset().order_by("member__firstname")
return qs.filter(
Q(member__role="P")
| (Q(job_end__lt=date_today + timedelta(days=1)) & Q(job_end__isnull=False))
)
class JobMemberManager(models.Manager):
def get_members(self, role):
qs = self.get_queryset().order_by("member__firstname")
return qs.filter(Q(member__role=role))
class JobGroupManager(models.Manager):
def get_pinned_jobgroups(self):
return self.get_queryset().filter(is_pinned=True)
def get_unpinned_jobgroups(self):
return self.get_queryset().filter(is_pinned=False)
class MemberManager(models.Manager):
def get_queryset(self):
return super().get_queryset().order_by("firstname")

View File

@@ -1,109 +1,32 @@
import logging
from django.contrib.auth.models import User
from django.core.validators import RegexValidator, ValidationError
from django.db import models
from django.db.models import Q
from django.utils import timezone
from django.utils.text import slugify
from django.utils.translation import gettext_lazy as _
from datetime import timedelta
from easy_thumbnails.fields import ThumbnailerImageField
import logging
from .managers import (
ActiveJobMemberManager,
InactiveJobMemberManager,
JobMemberManager,
JobGroupManager,
MemberManager,
)
logger = logging.getLogger(__name__)
class ActiveJobMemberManager(models.Manager):
"""
return a list of active member, and members who are still working
"""
def get_all_by_slug(self, slug):
return (
self.get_queryset()
.filter(job__job_group__slug=slug)
.order_by("job__slug", "job_role", "member__firstname")
)
def get_queryset(self):
date_today = timezone.now().date()
qs = super().get_queryset().order_by("member__firstname")
return qs.filter(
Q(member__role=Member.MemberRole.ACTIVE)
& (Q(job_end__gt=date_today) | Q(job_end__isnull=True))
)
class InactiveJobMemberManager(models.Manager):
"""
return a list of inactive member
"""
def get_all_by_slug(self, slug):
return (
self.get_queryset()
.filter(job__job_group__slug=slug)
.order_by("job__slug", "job_role", "member__firstname")
)
def get_queryset(self):
date_today = timezone.now().date()
qs = super().get_queryset().order_by("member__firstname")
return qs.filter(
Q(member__role=Member.MemberRole.PENSION)
| (Q(job_end__lt=date_today + timedelta(days=1)) & Q(job_end__isnull=False))
)
class JobMemberManager(models.Manager):
def get_members(self, role):
qs = self.get_queryset().order_by("member__firstname")
return qs.filter(Q(member__role=role))
class JobGroupManager(models.Manager):
def get_active_jobgroup(self):
job_groups = list(self.get_queryset())
# delete job groups which don't have active members
for elem in job_groups:
if not JobMember.active_member.get_all_by_slug(slug=elem.slug):
job_groups.remove(elem)
return job_groups
def get_pinned_active_jobgroups(self):
job_groups = []
for elem in self.get_active_jobgroup():
if elem.is_pinned:
job_groups.append(elem)
return job_groups
def get_unpinned_active_jobgroups(self):
job_groups = []
for elem in self.get_active_jobgroup():
if not elem.is_pinned:
job_groups.append(elem)
return job_groups
class MemberManager(models.Manager):
def get_queryset(self):
return super().get_queryset().order_by("firstname")
class Member(models.Model):
firstname = models.CharField("Vorname", max_length=128)
surname = models.CharField("Nachname", max_length=128)
nickname = models.CharField("Spitzname", max_length=128)
# LDAP Username
username = models.CharField("Benutzername", blank=True, max_length=128)
# fet mail account
mailaccount = models.CharField("Mailadresse", unique=True, max_length=128)
class MemberRole(models.TextChoices):
@@ -220,8 +143,7 @@ class Job(models.Model):
def save(self, *args, **kwargs):
if not self.slug:
self.slug = slugify(self.shortterm)
# if type(self.job_group) = str:
# self.job_group=JobGroup.objects.filter(slug=self.job)
super().save(*args, **kwargs)
def __str__(self):

View File

@@ -1,18 +1,18 @@
import logging
from django.http import Http404
from django.shortcuts import render
from collections import deque
from .models import Member, JobMember, JobGroup, Job
from posts.models import Post
import logging
from .models import Member, JobMember, JobGroup
logger = logging.getLogger(__name__)
def __remove_if_zero_active_mem(job_group):
for elem in job_group:
for elem in list(job_group):
job_members = JobMember.active_member.get_all_by_slug(slug=elem.slug)
if not job_members:
job_group.remove(elem)
@@ -21,8 +21,8 @@ def __remove_if_zero_active_mem(job_group):
def __get_job_groups():
pinned_job_groups = JobGroup.all_jobgroups.get_pinned_active_jobgroups()
unpinned_job_groups = JobGroup.all_jobgroups.get_unpinned_active_jobgroups()
pinned_job_groups = deque(JobGroup.all_jobgroups.get_pinned_jobgroups())
unpinned_job_groups = deque(JobGroup.all_jobgroups.get_unpinned_jobgroups())
# remove job group if there is no longer an active member
pinned_job_groups = __remove_if_zero_active_mem(pinned_job_groups)
@@ -61,7 +61,7 @@ def jobs_view(request, slug=None):
description = (
JobGroup.all_jobgroups.filter(slug=slug).values().first()["description"]
)
except Exception as e:
except Exception:
logger.info("Wrong job '{}'".format(slug))
raise Http404("wrong job")