From 81a32c84c7ab902ed804c69bfd523d7a5e219426 Mon Sep 17 00:00:00 2001 From: Jorran de Wit <jorrandewit@outlook.com> Date: Thu, 14 Sep 2017 19:50:17 +0200 Subject: [PATCH] Set up new production user; --- production/admin.py | 8 +++++- production/migrations/0011_productionuser.py | 25 +++++++++++++++++++ production/models.py | 16 +++++++++++- scipost/admin.py | 2 ++ .../commands/add_groups_and_permissions.py | 16 ++++++++++++ 5 files changed, 65 insertions(+), 2 deletions(-) create mode 100644 production/migrations/0011_productionuser.py diff --git a/production/admin.py b/production/admin.py index 7969db8ec..15b7b61d8 100644 --- a/production/admin.py +++ b/production/admin.py @@ -1,12 +1,18 @@ from django.contrib import admin -from .models import ProductionStream, ProductionEvent +from .models import ProductionStream, ProductionEvent, ProductionUser def event_count(obj): return obj.productionevent_set.count() +class ProductionUserInline(admin.StackedInline): + model = ProductionUser + extra = 0 + min_num = 0 + + class ProductionEventInline(admin.TabularInline): model = ProductionEvent extra = 1 diff --git a/production/migrations/0011_productionuser.py b/production/migrations/0011_productionuser.py new file mode 100644 index 000000000..ed1ec512c --- /dev/null +++ b/production/migrations/0011_productionuser.py @@ -0,0 +1,25 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.4 on 2017-09-14 17:07 +from __future__ import unicode_literals + +from django.conf import settings +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ('production', '0010_auto_20170707_0600'), + ] + + operations = [ + migrations.CreateModel( + name='ProductionUser', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('user', models.OneToOneField(on_delete=django.db.models.deletion.PROTECT, to=settings.AUTH_USER_MODEL)), + ], + ), + ] diff --git a/production/models.py b/production/models.py index 3d94ddaa2..3540573dd 100644 --- a/production/models.py +++ b/production/models.py @@ -1,11 +1,25 @@ from django.db import models -from django.utils import timezone from django.core.urlresolvers import reverse +from django.contrib.auth.models import User +from django.utils import timezone from .constants import PRODUCTION_STREAM_STATUS, PRODUCTION_STREAM_ONGOING, PRODUCTION_EVENTS from .managers import ProductionStreamManager, ProductionEventManager +class ProductionUser(models.Model): + """ + Production Officers will have a ProductionUser object related to their account + to relate all production related actions to. + """ + user = models.OneToOneField(User, on_delete=models.PROTECT, unique=True) + + # objects = ProductionUserQuerySet.as_manager() -- Not implemented yet + + def __str__(self): + return '%s, %s' % (self.user.last_name, self.user.first_name) + + class ProductionStream(models.Model): submission = models.OneToOneField('submissions.Submission', on_delete=models.CASCADE) opened = models.DateTimeField(auto_now_add=True) diff --git a/scipost/admin.py b/scipost/admin.py index c9c588627..8cfaffcf2 100644 --- a/scipost/admin.py +++ b/scipost/admin.py @@ -13,6 +13,7 @@ from scipost.models import Contributor, Remark,\ from journals.models import Publication from partners.admin import ContactToUserInline +from production.admin import ProductionUserInline from submissions.models import Submission @@ -38,6 +39,7 @@ class UserAdmin(UserAdmin): inlines = [ ContributorInline, ContactToUserInline, + ProductionUserInline ] search_fields = ['last_name', 'email'] diff --git a/scipost/management/commands/add_groups_and_permissions.py b/scipost/management/commands/add_groups_and_permissions.py index 6070f1f78..25de01108 100644 --- a/scipost/management/commands/add_groups_and_permissions.py +++ b/scipost/management/commands/add_groups_and_permissions.py @@ -27,6 +27,7 @@ class Command(BaseCommand): Testers, created = Group.objects.get_or_create(name='Testers') Ambassadors, created = Group.objects.get_or_create(name='Ambassadors') JuniorAmbassadors, created = Group.objects.get_or_create(name='Junior Ambassadors') + ProductionSupervisors, created = Group.objects.get_or_create(name='Production Supervisor') ProductionOfficers, created = Group.objects.get_or_create(name='Production Officers') PartnersAdmin, created = Group.objects.get_or_create(name='Partners Administrators') @@ -205,6 +206,14 @@ class Command(BaseCommand): content_type=content_type) # Production + can_promote_user_to_production_officer, created = Permission.objects.get_or_create( + codename='can_promote_user_to_production_officer', + name='Can promote user to production officer', + content_type=content_type) + can_assign_production_officer, created = Permission.objects.get_or_create( + codename='can_assign_production_officer', + name='Can assign production officer', + content_type=content_type) can_view_production, created = Permission.objects.get_or_create( codename='can_view_production', name='Can view production page', @@ -250,6 +259,7 @@ class Command(BaseCommand): can_assign_submissions, can_prepare_recommendations_for_voting, can_fix_College_decision, + can_promote_user_to_production_officer, can_view_production, can_attend_VGMs, can_view_timesheets, @@ -316,6 +326,12 @@ class Command(BaseCommand): can_draft_registration_invitations, ]) + ProductionSupervisors.permissions.set([ + can_assign_production_officer, + can_view_docs_scipost, + can_view_production, + ]) + ProductionOfficers.permissions.set([ can_view_docs_scipost, can_view_production, -- GitLab