diff --git a/webapp/admin.py b/webapp/admin.py index 3443c61..b39ac96 100644 --- a/webapp/admin.py +++ b/webapp/admin.py @@ -1,7 +1,7 @@ """File containing webapp app admin registers.""" from django.contrib import admin -from webapp.models import Official, Role +from webapp.models import Official, Role, Committee from webapp.models import Feed, Tag, BaseFeed, Event, Registration from modeltranslation.admin import TranslationAdmin from django.contrib.auth.models import Permission @@ -16,3 +16,4 @@ admin.site.register(Event, TranslationAdmin) admin.site.register(Registration, TranslationAdmin) admin.site.register(Official) admin.site.register(Role) +admin.site.register(Committee) diff --git a/webapp/migrations/0036_auto_20180301_2011.py b/webapp/migrations/0036_auto_20180301_2011.py new file mode 100644 index 0000000..073a964 --- /dev/null +++ b/webapp/migrations/0036_auto_20180301_2011.py @@ -0,0 +1,28 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11 on 2018-03-01 18:11 +from __future__ import unicode_literals + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('webapp', '0035_auto_20171019_1413'), + ] + + operations = [ + migrations.CreateModel( + name='Committee', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('name', models.CharField(max_length=255)), + ], + ), + migrations.AddField( + model_name='role', + name='committee', + field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='roles', to='webapp.Committee'), + ), + ] diff --git a/webapp/migrations/0037_auto_20180301_2111.py b/webapp/migrations/0037_auto_20180301_2111.py new file mode 100644 index 0000000..b5cab47 --- /dev/null +++ b/webapp/migrations/0037_auto_20180301_2111.py @@ -0,0 +1,19 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11 on 2018-03-01 19:11 +from __future__ import unicode_literals + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('webapp', '0036_auto_20180301_2011'), + ] + + operations = [ + migrations.AlterModelOptions( + name='committee', + options={'verbose_name': 'Committee', 'verbose_name_plural': 'Committees'}, + ), + ] diff --git a/webapp/migrations/0038_auto_20180516_2108.py b/webapp/migrations/0038_auto_20180516_2108.py new file mode 100644 index 0000000..b58445c --- /dev/null +++ b/webapp/migrations/0038_auto_20180516_2108.py @@ -0,0 +1,34 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11 on 2018-05-16 18:08 +from __future__ import unicode_literals + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('webapp', '0037_auto_20180301_2111'), + ] + + operations = [ + migrations.RemoveField( + model_name='baserole', + name='category', + ), + migrations.RemoveField( + model_name='role', + name='committee', + ), + migrations.AddField( + model_name='official', + name='committee', + field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='roles', to='webapp.Committee'), + ), + migrations.AlterField( + model_name='role', + name='official', + field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, related_name='roles', to='webapp.Official'), + ), + ] diff --git a/webapp/migrations/0039_auto_20180516_2113.py b/webapp/migrations/0039_auto_20180516_2113.py new file mode 100644 index 0000000..3fd2671 --- /dev/null +++ b/webapp/migrations/0039_auto_20180516_2113.py @@ -0,0 +1,39 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11 on 2018-05-16 18:13 +from __future__ import unicode_literals + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('webapp', '0038_auto_20180516_2108'), + ] + + operations = [ + migrations.RemoveField( + model_name='official', + name='committee', + ), + migrations.RemoveField( + model_name='role', + name='official', + ), + migrations.AddField( + model_name='official', + name='role', + field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='roles', to='webapp.Role'), + ), + migrations.AddField( + model_name='role', + name='committee', + field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='roles', to='webapp.Committee'), + ), + migrations.AlterField( + model_name='committee', + name='name', + field=models.CharField(max_length=255, verbose_name='Name'), + ), + ] diff --git a/webapp/migrations/0040_auto_20180516_2124.py b/webapp/migrations/0040_auto_20180516_2124.py new file mode 100644 index 0000000..7370f7b --- /dev/null +++ b/webapp/migrations/0040_auto_20180516_2124.py @@ -0,0 +1,24 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11 on 2018-05-16 18:24 +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('webapp', '0039_auto_20180516_2113'), + ] + + operations = [ + migrations.RemoveField( + model_name='official', + name='role', + ), + migrations.AddField( + model_name='official', + name='role', + field=models.ManyToManyField(null=True, related_name='roles', to='webapp.Role'), + ), + ] diff --git a/webapp/migrations/0041_auto_20180516_2204.py b/webapp/migrations/0041_auto_20180516_2204.py new file mode 100644 index 0000000..8c5ac91 --- /dev/null +++ b/webapp/migrations/0041_auto_20180516_2204.py @@ -0,0 +1,20 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11 on 2018-05-16 19:04 +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('webapp', '0040_auto_20180516_2124'), + ] + + operations = [ + migrations.AlterField( + model_name='official', + name='role', + field=models.ManyToManyField(related_name='official', to='webapp.Role'), + ), + ] diff --git a/webapp/migrations/0042_merge_20180516_2249.py b/webapp/migrations/0042_merge_20180516_2249.py new file mode 100644 index 0000000..289c272 --- /dev/null +++ b/webapp/migrations/0042_merge_20180516_2249.py @@ -0,0 +1,16 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11 on 2018-05-16 19:49 +from __future__ import unicode_literals + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('webapp', '0041_auto_20180516_2204'), + ('webapp', '0041_delete_ohlhafvchallenge'), + ] + + operations = [ + ] diff --git a/webapp/models.py b/webapp/models.py index 169e5a6..55e4aa0 100644 --- a/webapp/models.py +++ b/webapp/models.py @@ -90,26 +90,26 @@ class Registration(models.Model): class BaseRole(models.Model): """Base model for occupations/roles.""" - CATEGORIES = ( - ('corporate', _('Corporate affairs')), - ('freshman', _('Freshmen')), - ('international', _('International')), - ('external', _('External affairs')), - ('media', _('Media')), - ('tech', _('Technology')), - ('wellbeing', _('Wellbeing')), - ('elepaja', _('Elepaja')), - ('ceremonies', _('Ceremonies')), - ('culture', _('Culture')), - ('studies', _('Studies')), - ('sosso', _('Sössö magazine')), - ('alumni', _('Alumni relations')), - ('others', _('Others')), - ) + # CATEGORIES = ( + # ('corporate', _('Corporate affairs')), + # ('freshman', _('Freshmen')), + # ('international', _('International')), + # ('external', _('External affairs')), + # ('media', _('Media')), + # ('tech', _('Technology')), + # ('wellbeing', _('Wellbeing')), + # ('elepaja', _('Elepaja')), + # ('ceremonies', _('Ceremonies')), + # ('culture', _('Culture')), + # ('studies', _('Studies')), + # ('sosso', _('Sössö magazine')), + # ('alumni', _('Alumni relations')), + # ('others', _('Others')), + # ) name = models.CharField(_('Name'), max_length=255) is_board = models.BooleanField(_('Board member')) - category = models.CharField(_('Category'), choices=CATEGORIES, default='others', max_length=255) + # category = models.CharField(_('Category'), choices=CATEGORIES, default='others', max_length=255) def __str__(self): n = self.name.capitalize() @@ -122,6 +122,28 @@ class PresetRole(BaseRole): description = models.TextField(_('Description')) +class Committee(models.Model): + """ + Committee model + Has many Roles found under variable roles + """ + + class Meta: + """Meta class for Committee class.""" + + 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 for Role. @@ -138,7 +160,7 @@ class Role(PresetRole): start_date = models.DateField(_('Start date')) end_date = models.DateField(_('End date')) - official = models.ForeignKey('Official', related_name='roles') + committee = models.ForeignKey('Committee', related_name='roles', on_delete=models.SET_NULL, null=True) class Official(User): @@ -151,6 +173,10 @@ class Official(User): verbose_name_plural = _('Officials') phone_number = PhoneNumberField(_('Phone number')) + role = models.ManyToManyField('Role', related_name='official') + + def __str__(self): + return '{} {}'.format(self.first_name, self.last_name) auditlog.register(Tag) diff --git a/webapp/static/css/contact.css b/webapp/static/css/contact.css new file mode 100644 index 0000000..d935e46 --- /dev/null +++ b/webapp/static/css/contact.css @@ -0,0 +1,6 @@ + +.role-container { + background-color: aqua; + width: 200px; + text-align: center; +} \ No newline at end of file diff --git a/webapp/templates/contact.html b/webapp/templates/contact.html index d52661a..f0d6707 100644 --- a/webapp/templates/contact.html +++ b/webapp/templates/contact.html @@ -4,34 +4,37 @@ {% load i18n %}
-
-
-
-

{% trans "Contact" %}

-
- {% if kaikki %} - - {% for teekkari in kaikki %} - {% load static %} - - - - - {% endfor %} -
+ {% load static %} + +

{% trans "Contact" %}

+ + {% if committees %} + {% for committee in committees %} + +

{{ committee.name }}

+ {% for role in committee.current_roles %} + {% for official in role.official.all %} +
+
+
-
-

{{ teekkari.first_name }} {{ teekkari.last_name }}

- -

{{ teekkari.phone_number }}

-
- {% else %} -

Ei henkilöitä

- {% endif %} -
-
-
-
+
+ +
+
+
{{role.name}}
+

{{official.first_name}} + {{official.last_name}} + {{official.email}}

+
+
+ + {% endfor %} + {% endfor %} + {% endfor %} + {% else%} +

Ei Toimikuntia

+ {% endif %} {% endblock %} diff --git a/webapp/views.py b/webapp/views.py index fa6d43d..bbb0715 100644 --- a/webapp/views.py +++ b/webapp/views.py @@ -8,12 +8,13 @@ from django.views.decorators.csrf import ensure_csrf_cookie from django.http import HttpResponse, HttpResponseRedirect from django.contrib.auth.decorators import permission_required, login_required from django.conf import settings +from django.utils import timezone import logging import requests from dealer.git import git -from webapp.models import Official +from webapp.models import Official, Committee from members.views.utils import * @@ -114,8 +115,10 @@ def sosso_view(request, *args, **kwargs): @require_http_methods(["GET"]) def contact_view(request, *args, **kwargs): """Render "Contact" page.""" + committees = Committee.objects.order_by('name') - kaikki = Official.objects.all() - context = {"kaikki": kaikki} + context = { + "committees": committees + } return render(request, "contact.html", context)