diff --git a/kaehmy/models.py b/kaehmy/models.py index 0b0d8e1..0b1bd90 100644 --- a/kaehmy/models.py +++ b/kaehmy/models.py @@ -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')), diff --git a/webapp/admin.py b/webapp/admin.py index 8d62a41..32d910a 100644 --- a/webapp/admin.py +++ b/webapp/admin.py @@ -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) diff --git a/webapp/migrations/0073_auto_20201107_1916.py b/webapp/migrations/0073_auto_20201107_1916.py new file mode 100644 index 0000000..b290885 --- /dev/null +++ b/webapp/migrations/0073_auto_20201107_1916.py @@ -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', + ), + ] diff --git a/webapp/models.py b/webapp/models.py index 078c613..6137b23 100644 --- a/webapp/models.py +++ b/webapp/models.py @@ -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) diff --git a/webapp/serializers.py b/webapp/serializers.py index d60a960..8673035 100644 --- a/webapp/serializers.py +++ b/webapp/serializers.py @@ -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 diff --git a/webapp/tests/test_contact.py b/webapp/tests/test_contact.py deleted file mode 100644 index a153c58..0000000 --- a/webapp/tests/test_contact.py +++ /dev/null @@ -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"], []) diff --git a/webapp/translation.py b/webapp/translation.py index 48dfed0..c7e293b 100644 --- a/webapp/translation.py +++ b/webapp/translation.py @@ -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',) diff --git a/webapp/urls.py b/webapp/urls.py index be92b35..58ba3cd 100644 --- a/webapp/urls.py +++ b/webapp/urls.py @@ -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) diff --git a/webapp/views.py b/webapp/views.py index fd27d40..87f2d0d 100644 --- a/webapp/views.py +++ b/webapp/views.py @@ -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