Remove Officials

This commit is contained in:
Aarni Halinen
2020-11-07 18:39:58 +00:00
parent 2359743b20
commit d06c24bde0
9 changed files with 70 additions and 281 deletions
+9 -3
View File
@@ -5,15 +5,21 @@ from webapp.utils import month_from_now
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _
from auditlog.registry import auditlog from auditlog.registry import auditlog
from phonenumber_field.modelfields import PhoneNumberField from phonenumber_field.modelfields import PhoneNumberField
from webapp.models import BaseRole
import logging import logging
import webapp.models
# TODO: Move BaseRole to Kaehmt App; will fuck up the DB since table is removed, if no data migration is done before-hand.
# Either reconstruct all kaehmy roles from scratch then, or do these migrations:
# 1. Create table here
# 2. Data migrate from webapp BaseRole to new kaehmy BaseRole
# 3. Delete webapp BaseRole table
VERBOSE_NAME = _('Kaehmy') VERBOSE_NAME = _('Kaehmy')
class KaehmyBaseRole(webapp.models.BaseRole): class KaehmyBaseRole(BaseRole):
"""ABC"""
CATEGORIES = ( CATEGORIES = (
('corporate', _('Corporate affairs')), ('corporate', _('Corporate affairs')),
+1 -6
View File
@@ -1,8 +1,7 @@
"""File containing webapp app admin registers.""" """File containing webapp app admin registers."""
from django.contrib import admin from django.contrib import admin
from webapp.models import JobAd, Official, Role, Committee, Occupation from webapp.models import Feed, Tag, Event, Signup, SignupForm, TemplateQuestion, JobAd
from webapp.models import Feed, Tag, Event, Signup, SignupForm, TemplateQuestion
from modeltranslation.admin import TranslationAdmin from modeltranslation.admin import TranslationAdmin
from django.contrib.auth.models import Permission from django.contrib.auth.models import Permission
# this is needed so that the models get registered for translation # this is needed so that the models get registered for translation
@@ -16,8 +15,4 @@ admin.site.register(Event, TranslationAdmin)
admin.site.register(SignupForm, TranslationAdmin) admin.site.register(SignupForm, TranslationAdmin)
admin.site.register(Signup, TranslationAdmin) admin.site.register(Signup, TranslationAdmin)
admin.site.register(TemplateQuestion, TranslationAdmin) admin.site.register(TemplateQuestion, TranslationAdmin)
admin.site.register(Committee, TranslationAdmin)
admin.site.register(Official)
admin.site.register(Occupation)
admin.site.register(Role, TranslationAdmin)
admin.site.register(JobAd, TranslationAdmin) admin.site.register(JobAd, TranslationAdmin)
@@ -0,0 +1,60 @@
# Generated by Django 2.1.5 on 2020-11-07 17:16
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
('webapp', '0072_jobad'),
]
operations = [
migrations.RemoveField(
model_name='occupation',
name='role',
),
migrations.RemoveField(
model_name='official',
name='role_history',
),
migrations.RemoveField(
model_name='official',
name='user',
),
migrations.RemoveField(
model_name='presetrole',
name='baserole_ptr',
),
migrations.RemoveField(
model_name='role',
name='committee',
),
migrations.RemoveField(
model_name='role',
name='presetrole_ptr',
),
migrations.RemoveField(
model_name='baserole',
name='name_en',
),
migrations.RemoveField(
model_name='baserole',
name='name_fi',
),
migrations.DeleteModel(
name='Committee',
),
migrations.DeleteModel(
name='Occupation',
),
migrations.DeleteModel(
name='Official',
),
migrations.DeleteModel(
name='PresetRole',
),
migrations.DeleteModel(
name='Role',
),
]
-104
View File
@@ -171,105 +171,6 @@ class BaseRole(models.Model):
return '{} ({})'.format(n, _('board member')) if self.is_board else n return '{} ({})'.format(n, _('board member')) if self.is_board else n
class PresetRole(BaseRole):
"""Model representing a preset occupation in the guild."""
description = models.TextField(_('Description'))
class Committee(models.Model):
"""
Committee model
Has many Roles found under variable roles
"""
class Meta:
verbose_name = _('Committee')
verbose_name_plural = _('Committees')
def __str__(self):
return _('Committee: {}').format(self.name)
name = models.CharField(_("Name"), max_length=255)
@property
def current_roles(self):
return self.roles.all().filter(end_date__gte=timezone.now()).filter(start_date__lte=timezone.now())
class Role(PresetRole):
"""
Model representing an active or historical occupation
in the guild.
"""
class Meta:
verbose_name = _('Role')
verbose_name_plural = _('Roles')
committee = models.ForeignKey('Committee', related_name='roles', on_delete=models.SET_NULL, null=True)
def __str__(self):
return '{} (Hallitus: {}) ({})'.format(self.name, _("Yes") if self.is_board else _("No"), self.committee)
class Occupation(models.Model):
"""
Model for a occupation in guild.
Model links Official into a role he/she has or has had in the guild.
"""
class Meta:
verbose_name = _('Occupation')
verbose_name_plural = _('Occupations')
start_date = models.DateField(_('Start date'))
end_date = models.DateField(_('End date'))
role = models.ForeignKey('Role', on_delete=models.SET_NULL, null=True)
@staticmethod
def by_year(year):
return Occupation.objects.filter(
end_date__gte=timezone.datetime(year, 1, 1)).filter(
start_date__lte=timezone.datetime(year, 12, 31))
def __str__(self):
return '{}: {} - {}'.format(self.role.name, self.start_date, self.end_date)
class Official(models.Model):
"""Model representing a guild official."""
class Meta:
verbose_name = _('Official')
verbose_name_plural = _('Officials')
user = models.OneToOneField(User, on_delete=models.CASCADE)
first_name = models.CharField(_('First name'), max_length=30)
last_name = models.CharField(_('Last name'), max_length=150)
email = models.EmailField(_('Email address'))
phone_number = PhoneNumberField(_('Phone number'))
role_history = models.ManyToManyField('Occupation', 'officials', blank=True)
image = models.ImageField(blank=True, null=True)
@staticmethod
def by_year(year):
return Official.objects.filter(
role_history__in=Occupation.occupations_by_year(year)).distinct()
def __str__(self):
return '{} {}'.format(self.first_name, self.last_name)
@receiver(post_save, sender=Official)
def save_user_official(sender, instance, **kwargs):
instance.user.first_name = instance.first_name
instance.user.last_name = instance.last_name
instance.user.email = instance.email
instance.user.save()
class JobAd(models.Model): class JobAd(models.Model):
"""Job advertisements shown on Corporate relations page""" """Job advertisements shown on Corporate relations page"""
@@ -291,9 +192,4 @@ auditlog.register(Feed)
auditlog.register(Event) auditlog.register(Event)
auditlog.register(SignupForm) auditlog.register(SignupForm)
auditlog.register(Signup) auditlog.register(Signup)
auditlog.register(PresetRole)
auditlog.register(Role)
auditlog.register(Committee)
auditlog.register(Occupation)
auditlog.register(Official)
auditlog.register(JobAd) auditlog.register(JobAd)
-30
View File
@@ -141,36 +141,6 @@ class FeedSerializer(serializers.ModelSerializer):
return feed return feed
class CommitteeSerializer(serializers.ModelSerializer):
class Meta:
model = Committee
fields = ['name_fi', 'name_en']
class RoleSerializer(serializers.ModelSerializer):
committee = CommitteeSerializer(read_only=True)
class Meta:
model = Role
fields = ('name_fi', 'name_en', 'description_fi', 'description_en', 'committee', 'is_board')
class ContactsSerializer(serializers.ModelSerializer):
class Meta:
model = Official
fields = ('first_name', 'last_name', 'email', 'phone_number', 'image')
depth = 2
class OccupationSerializer(serializers.ModelSerializer):
role = RoleSerializer(read_only=True)
officials = ContactsSerializer(many=True, read_only=True)
class Meta:
model = Occupation
fields = ('role', 'start_date', 'end_date', 'officials')
class JobAdSerializer(serializers.ModelSerializer): class JobAdSerializer(serializers.ModelSerializer):
class Meta: class Meta:
model = JobAd model = JobAd
-98
View File
@@ -1,98 +0,0 @@
from django.test import TestCase
from django.contrib.auth.models import User
from django.utils import timezone
from rest_framework import status
from rest_framework.test import APITestCase
from webapp.models import Official, Role, Occupation, Committee
from webapp.serializers import OccupationSerializer
URL = "/api/contacts/"
COMMITTEE = Committee.objects.create(
name_fi="Viestintä",
name_en="Communications"
)
def createRoleBoard():
return Role.objects.create(
name_fi="Metsuri",
name_en="The lumberjack",
is_board=True,
description_fi="Toimikunta PJ",
description_en="Committee Chair"
)
def createRoleNoBoard():
return Role.objects.create(
name_fi="Toimari",
name_en="Official",
is_board=False,
description_fi="Toimikunta jäbä",
description_en="Committee dude(tte)",
committee=COMMITTEE
)
def createOccupation(year, role=createRoleNoBoard(), dummydata=1):
occupation = Occupation.objects.create(
start_date=timezone.datetime(year, 1, 1),
end_date=timezone.datetime(year, 12, 31),
role=role
)
occupation.officials.add(
createPerson(dummydata)
)
return occupation
def createPerson(name):
return Official.objects.create(
user=User.objects.create_user(f"testi{name}", "test@test.tld", "password123"),
first_name=f"first{name}",
last_name=f"last{name}",
email="test@test.tld",
phone_number="+358501234567",
image=""
)
class ContactsTestCase(APITestCase):
current_year = timezone.now().year
old_year = 1970
def setUp(self):
createOccupation(self.current_year, role=createRoleBoard(), dummydata=1)
createOccupation(self.current_year, dummydata=2)
createOccupation(self.old_year, role=createRoleBoard(), dummydata=3)
createOccupation(self.old_year, dummydata=4)
def test_get(self):
response = self.client.get(f"{URL}", format='json')
self.assertEqual(response.status_code, status.HTTP_200_OK)
serializer = OccupationSerializer(
Occupation.by_year(self.current_year),
many=True
)
self.assertEqual(response.data["results"], serializer.data)
def test_get_by_year(self):
response = self.client.get(f"{URL}?year={self.old_year}", format='json')
self.assertEqual(response.status_code, status.HTTP_200_OK)
serializer = OccupationSerializer(
Occupation.by_year(self.old_year),
many=True
)
self.assertEqual(response.data["results"], serializer.data)
def test_by_year_empty(self):
response = self.client.get(f"{URL}?year=1971")
self.assertEqual(response.status_code, status.HTTP_200_OK)
self.assertEqual(response.data["results"], [])
-20
View File
@@ -39,26 +39,6 @@ class TemplateQuestionTranslationOptions(TranslationOptions):
fields = () fields = ()
@register(BaseRole)
class BaseRoleTranslationOptions(TranslationOptions):
fields = ('name',)
@register(PresetRole)
class PresetRoleTranslationOptions(TranslationOptions):
fields = ('description',)
@register(Role)
class RoleTranslationOptions(TranslationOptions):
fields = ()
@register(Committee)
class CommitteeTranslationOptions(TranslationOptions):
fields = ('name',)
@register(JobAd) @register(JobAd)
class JobAdTranslationOptions(TranslationOptions): class JobAdTranslationOptions(TranslationOptions):
fields = ('title', 'description', 'content',) fields = ('title', 'description', 'content',)
-2
View File
@@ -18,8 +18,6 @@ router.register(r'events', EventViewSet)
router.register(r'signupForm', SignupFormViewSet) router.register(r'signupForm', SignupFormViewSet)
router.register(r'signup', SignupViewSet) router.register(r'signup', SignupViewSet)
router.register(r'feed', FeedViewSet) router.register(r'feed', FeedViewSet)
router.register(r'contacts', ContactsViewSet)
router.register(r'committees', CommitteeViewSet)
router.register(r'questions', SavedQuestionsViewSet) router.register(r'questions', SavedQuestionsViewSet)
router.register(r'tags', TagsViewSet) router.register(r'tags', TagsViewSet)
router.register(r'jobads', JobAdViewSet) router.register(r'jobads', JobAdViewSet)
-18
View File
@@ -189,24 +189,6 @@ class FeedViewSet(ModelViewSet):
return Feed.objects.filter(id__in=result_ids) return Feed.objects.filter(id__in=result_ids)
class ContactsViewSet(ReadOnlyModelViewSet):
queryset = Occupation.objects.all()
serializer_class = OccupationSerializer
permission_classes = [IsAuthenticatedOrReadOnly]
def get_queryset(self):
year = self.request.query_params.get('year')
if not year:
return Occupation.by_year(timezone.now().year)
return Occupation.by_year(int(year))
class CommitteeViewSet(ReadOnlyModelViewSet):
queryset = Committee.objects.all()
serializer_class = CommitteeSerializer
permission_classes = [IsAuthenticatedOrReadOnly]
class TagsViewSet(ReadOnlyModelViewSet): class TagsViewSet(ReadOnlyModelViewSet):
queryset = Tag.objects.all() queryset = Tag.objects.all()
serializer_class = TagSerializer serializer_class = TagSerializer