Remove Officials
This commit is contained in:
+9
-3
@@ -5,15 +5,21 @@ from webapp.utils import month_from_now
|
||||
from django.utils.translation import ugettext_lazy as _
|
||||
from auditlog.registry import auditlog
|
||||
from phonenumber_field.modelfields import PhoneNumberField
|
||||
|
||||
from webapp.models import BaseRole
|
||||
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')
|
||||
|
||||
|
||||
class KaehmyBaseRole(webapp.models.BaseRole):
|
||||
class KaehmyBaseRole(BaseRole):
|
||||
"""ABC"""
|
||||
|
||||
CATEGORIES = (
|
||||
('corporate', _('Corporate affairs')),
|
||||
|
||||
+1
-6
@@ -1,8 +1,7 @@
|
||||
"""File containing webapp app admin registers."""
|
||||
|
||||
from django.contrib import admin
|
||||
from webapp.models import JobAd, Official, Role, Committee, Occupation
|
||||
from webapp.models import Feed, Tag, Event, Signup, SignupForm, TemplateQuestion
|
||||
from webapp.models import Feed, Tag, Event, Signup, SignupForm, TemplateQuestion, JobAd
|
||||
from modeltranslation.admin import TranslationAdmin
|
||||
from django.contrib.auth.models import Permission
|
||||
# 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(Signup, 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)
|
||||
|
||||
@@ -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',
|
||||
),
|
||||
]
|
||||
@@ -171,105 +171,6 @@ class BaseRole(models.Model):
|
||||
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):
|
||||
"""Job advertisements shown on Corporate relations page"""
|
||||
|
||||
@@ -291,9 +192,4 @@ auditlog.register(Feed)
|
||||
auditlog.register(Event)
|
||||
auditlog.register(SignupForm)
|
||||
auditlog.register(Signup)
|
||||
auditlog.register(PresetRole)
|
||||
auditlog.register(Role)
|
||||
auditlog.register(Committee)
|
||||
auditlog.register(Occupation)
|
||||
auditlog.register(Official)
|
||||
auditlog.register(JobAd)
|
||||
|
||||
@@ -141,36 +141,6 @@ class FeedSerializer(serializers.ModelSerializer):
|
||||
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 Meta:
|
||||
model = JobAd
|
||||
|
||||
@@ -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"], [])
|
||||
@@ -39,26 +39,6 @@ class TemplateQuestionTranslationOptions(TranslationOptions):
|
||||
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)
|
||||
class JobAdTranslationOptions(TranslationOptions):
|
||||
fields = ('title', 'description', 'content',)
|
||||
|
||||
@@ -18,8 +18,6 @@ router.register(r'events', EventViewSet)
|
||||
router.register(r'signupForm', SignupFormViewSet)
|
||||
router.register(r'signup', SignupViewSet)
|
||||
router.register(r'feed', FeedViewSet)
|
||||
router.register(r'contacts', ContactsViewSet)
|
||||
router.register(r'committees', CommitteeViewSet)
|
||||
router.register(r'questions', SavedQuestionsViewSet)
|
||||
router.register(r'tags', TagsViewSet)
|
||||
router.register(r'jobads', JobAdViewSet)
|
||||
|
||||
@@ -189,24 +189,6 @@ class FeedViewSet(ModelViewSet):
|
||||
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):
|
||||
queryset = Tag.objects.all()
|
||||
serializer_class = TagSerializer
|
||||
|
||||
Reference in New Issue
Block a user