From 67b4d5ef7bd20a0cb8d40b9c78267e6c2bcbad66 Mon Sep 17 00:00:00 2001 From: Guillaume Pellerin Date: Tue, 23 Aug 2016 07:52:13 +0200 Subject: [PATCH] Add various person activity data --- app/organization/project/models.py | 9 +- app/organization/team/admin.py | 5 +- .../migrations/0017_auto_20160823_0744.py | 283 ++++++++++++++++++ app/organization/team/models.py | 46 +-- 4 files changed, 313 insertions(+), 30 deletions(-) create mode 100644 app/organization/team/migrations/0017_auto_20160823_0744.py diff --git a/app/organization/project/models.py b/app/organization/project/models.py index 2922423b..c0e4d6e0 100644 --- a/app/organization/project/models.py +++ b/app/organization/project/models.py @@ -6,16 +6,15 @@ from django.utils.translation import ugettext_lazy as _ from mezzanine.core.models import RichText, Displayable, Slugged, Orderable from organization.core.models import * -from organization.team.models import Person, Team, Organization class Project(Displayable, Period, RichText): """(Project description)""" - lead_team = models.ForeignKey(Team, verbose_name=_('lead team'), related_name='leader_projects', blank=True, null=True) - persons = models.ManyToManyField(Person, verbose_name=_('persons'), blank=True) - teams = models.ManyToManyField(Team, verbose_name=_('teams'), related_name='patner_projects', blank=True) - organizations = models.ManyToManyField(Organization, verbose_name=_('organizations'), blank=True) + lead_team = models.ForeignKey('organization-team.Team', verbose_name=_('lead team'), related_name='leader_projects', blank=True, null=True) + persons = models.ManyToManyField('organization-team.Person', verbose_name=_('persons'), blank=True) + teams = models.ManyToManyField('organization-team.Team', verbose_name=_('teams'), related_name='patner_projects', blank=True) + organizations = models.ManyToManyField('organization-team.Organization', verbose_name=_('organizations'), blank=True) website = models.URLField(_('website'), max_length=512, blank=True) class Meta: diff --git a/app/organization/team/admin.py b/app/organization/team/admin.py index 7830655f..ad764068 100644 --- a/app/organization/team/admin.py +++ b/app/organization/team/admin.py @@ -16,6 +16,7 @@ class OrganizationAdmin(BaseTranslationModelAdmin): class PersonActivityInline(StackedDynamicInlineAdmin): model = PersonActivity + fk_name = 'person' class TeamAdmin(PageAdmin): @@ -42,7 +43,7 @@ class PersonAdmin(BaseTranslationModelAdmin): model = Person inlines = [PersonActivityInline, PersonLinkInline, ] - first_fields = ['first_name', 'last_name', 'title', 'gender', 'user'] + first_fields = ['last_name', 'first_name', 'title', 'gender', 'user'] def get_fieldsets(self, request, obj = None): res = super(PersonAdmin, self).get_fieldsets(request, obj) @@ -55,5 +56,5 @@ class PersonAdmin(BaseTranslationModelAdmin): admin.site.register(Organization, OrganizationAdmin) admin.site.register(OrganizationType) admin.site.register(Department, DepartmentAdmin) -admin.site.register(Team, TeamAdmin) +# admin.site.register(Team, TeamAdmin) admin.site.register(Person, PersonAdmin) diff --git a/app/organization/team/migrations/0017_auto_20160823_0744.py b/app/organization/team/migrations/0017_auto_20160823_0744.py new file mode 100644 index 00000000..37e5cd90 --- /dev/null +++ b/app/organization/team/migrations/0017_auto_20160823_0744.py @@ -0,0 +1,283 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.9.7 on 2016-08-23 05:44 +from __future__ import unicode_literals + +import datetime +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('organization-project', '0007_auto_20160819_1920'), + ('organization-team', '0016_auto_20160812_1521'), + ] + + operations = [ + migrations.CreateModel( + name='ActivityFramework', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('description', models.TextField(blank=True, verbose_name='description')), + ('name', models.CharField(max_length=512, verbose_name='name')), + ], + options={ + 'verbose_name': 'activity framework', + }, + ), + migrations.CreateModel( + name='ActivityGrade', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('description', models.TextField(blank=True, verbose_name='description')), + ('name', models.CharField(max_length=512, verbose_name='name')), + ], + options={ + 'verbose_name': 'activity grade', + }, + ), + migrations.CreateModel( + name='ActivityStatus', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('description', models.TextField(blank=True, verbose_name='description')), + ('name', models.CharField(max_length=512, verbose_name='name')), + ], + options={ + 'verbose_name': 'activity status', + }, + ), + migrations.CreateModel( + name='BudgetCode', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('description', models.TextField(blank=True, verbose_name='description')), + ('name', models.CharField(max_length=512, verbose_name='name')), + ], + options={ + 'verbose_name': 'budget code', + }, + ), + migrations.CreateModel( + name='RecordPiece', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('description', models.TextField(blank=True, verbose_name='description')), + ('name', models.CharField(max_length=512, verbose_name='name')), + ], + options={ + 'verbose_name': 'record piece', + }, + ), + migrations.CreateModel( + name='TrainingLevel', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('description', models.TextField(blank=True, verbose_name='description')), + ('name', models.CharField(max_length=512, verbose_name='name')), + ], + options={ + 'verbose_name': 'training level', + }, + ), + migrations.CreateModel( + name='TrainingSpectiality', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('description', models.TextField(blank=True, verbose_name='description')), + ('name', models.CharField(max_length=512, verbose_name='name')), + ], + options={ + 'verbose_name': 'training speciality', + }, + ), + migrations.CreateModel( + name='TrainingTopic', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('description', models.TextField(blank=True, verbose_name='description')), + ('name', models.CharField(max_length=512, verbose_name='name')), + ], + options={ + 'verbose_name': 'training topic', + }, + ), + migrations.CreateModel( + name='TrainingType', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('description', models.TextField(blank=True, verbose_name='description')), + ('name', models.CharField(max_length=512, verbose_name='name')), + ], + options={ + 'verbose_name': 'training type', + }, + ), + migrations.RemoveField( + model_name='personactivity', + name='role', + ), + migrations.AddField( + model_name='person', + name='permanent', + field=models.BooleanField(default=False, verbose_name='permanent'), + ), + migrations.AddField( + model_name='personactivity', + name='attachment_organization', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='attachment_activity', to='organization-team.Organization', verbose_name='attachment organization'), + ), + migrations.AddField( + model_name='personactivity', + name='comments', + field=models.TextField(blank=True, verbose_name='comments'), + ), + migrations.AddField( + model_name='personactivity', + name='date_added', + field=models.DateTimeField(auto_now_add=True, default=datetime.datetime(2016, 8, 23, 7, 44, 31, 896290), verbose_name='add date'), + preserve_default=False, + ), + migrations.AddField( + model_name='personactivity', + name='date_modified', + field=models.DateTimeField(auto_now=True, default=datetime.datetime(2016, 8, 23, 7, 44, 41, 729673), verbose_name='modification date'), + preserve_default=False, + ), + migrations.AddField( + model_name='personactivity', + name='date_modified_manual', + field=models.DateTimeField(blank=True, null=True, verbose_name='manual modification date'), + ), + migrations.AddField( + model_name='personactivity', + name='employer', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='employer_activity', to='organization-team.Organization', verbose_name='employer'), + ), + migrations.AddField( + model_name='personactivity', + name='function', + field=models.CharField(blank=True, max_length=1024, verbose_name='fonction'), + ), + migrations.AddField( + model_name='personactivity', + name='hdr', + field=models.BooleanField(default=False, verbose_name='HDR'), + ), + migrations.AddField( + model_name='personactivity', + name='phd_defense_date', + field=models.DateField(blank=True, null=True, verbose_name='PhD defense date'), + ), + migrations.AddField( + model_name='personactivity', + name='phd_director', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='phd_director_activity', to='organization-team.Person', verbose_name='PhD director'), + ), + migrations.AddField( + model_name='personactivity', + name='phd_doctoral_school', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='organization-team.Organization', verbose_name='doctoral school'), + ), + migrations.AddField( + model_name='personactivity', + name='phd_officer_1', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='phd_officer_1_activity', to='organization-team.Person', verbose_name='PhD officer 1'), + ), + migrations.AddField( + model_name='personactivity', + name='phd_officer_2', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='phd_officer_2_activity', to='organization-team.Person', verbose_name='PhD officer 2'), + ), + migrations.AddField( + model_name='personactivity', + name='phd_postdoctoralsituation', + field=models.CharField(blank=True, max_length=256, verbose_name='post-doctoral situation'), + ), + migrations.AddField( + model_name='personactivity', + name='phd_title', + field=models.TextField(blank=True, verbose_name='PhD title'), + ), + migrations.AddField( + model_name='personactivity', + name='project', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='organization-project.Project', verbose_name='project'), + ), + migrations.AddField( + model_name='personactivity', + name='rd_program', + field=models.TextField(blank=True, verbose_name='R&D program'), + ), + migrations.AddField( + model_name='personactivity', + name='rd_quota', + field=models.IntegerField(blank=True, null=True, verbose_name='R&D quota'), + ), + migrations.AddField( + model_name='personactivity', + name='second_employer', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='second_employer_activity', to='organization-team.Organization', verbose_name='second employer'), + ), + migrations.AddField( + model_name='personactivity', + name='second_team', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='second_team_activity', to='organization-team.Team', verbose_name='second team'), + ), + migrations.AddField( + model_name='personactivity', + name='training_title', + field=models.TextField(blank=True, verbose_name='Training title'), + ), + migrations.AlterField( + model_name='personactivity', + name='team', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='team_activity', to='organization-team.Team', verbose_name='team'), + ), + migrations.AddField( + model_name='personactivity', + name='budget_code', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='organization-team.BudgetCode'), + ), + migrations.AddField( + model_name='personactivity', + name='framework', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='organization-team.ActivityFramework', verbose_name='framework'), + ), + migrations.AddField( + model_name='personactivity', + name='grade', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='organization-team.ActivityGrade', verbose_name='grade'), + ), + migrations.AddField( + model_name='personactivity', + name='record_piece', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='organization-team.RecordPiece'), + ), + migrations.AddField( + model_name='personactivity', + name='status', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='organization-team.ActivityStatus', verbose_name='status'), + ), + migrations.AddField( + model_name='personactivity', + name='training_level', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='organization-team.TrainingLevel', verbose_name='training level'), + ), + migrations.AddField( + model_name='personactivity', + name='training_speciality', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='organization-team.TrainingSpectiality', verbose_name='training speciality'), + ), + migrations.AddField( + model_name='personactivity', + name='training_topic', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='organization-team.TrainingTopic', verbose_name='training topic'), + ), + migrations.AddField( + model_name='personactivity', + name='training_type', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='organization-team.TrainingType', verbose_name='training type'), + ), + ] diff --git a/app/organization/team/models.py b/app/organization/team/models.py index b61b2958..74841f0c 100644 --- a/app/organization/team/models.py +++ b/app/organization/team/models.py @@ -22,13 +22,10 @@ from mezzanine.utils.models import AdminThumbMixin, upload_to from mezzanine.galleries.models import BaseGallery from organization.core.models import * -from organization.magazine.models import Article -from organization.project.models import Project from django_countries.fields import CountryField # from .nationalities.fields import NationalityField - # Hack to have these strings translated mr = _('Mr') mrs = _('Ms') @@ -92,7 +89,7 @@ class Department(Page, SubTitle, RichText, Photo): organization = models.ForeignKey('Organization', verbose_name=_('organization')) url = models.URLField(_('URL'), max_length=512, blank=True) weaving_css_class = models.CharField(_('background pattern'), choices=PATTERN_CHOICES, max_length=64, blank=True) - articles_related = models.ManyToManyField(Article, verbose_name=_('Related articles'), blank=True) + articles_related = models.ManyToManyField('organization-magazine.Article', verbose_name=_('Related articles'), blank=True) class Meta: verbose_name = _('department') @@ -119,7 +116,7 @@ class Person(Displayable, AdminThumbMixin, Photo): last_name = models.CharField(_('last name'), max_length=255, blank=True, null=True) birthday = models.DateField(_('birthday'), blank=True, null=True) bio = RichTextField(_('biography'), blank=True) - permanent = models.BooleanField(_('permanent')) + permanent = models.BooleanField(_('permanent'), default=False) class Meta: verbose_name = _('person') @@ -218,41 +215,44 @@ class PersonActivity(Description, Period, RichText): """(Activity description)""" person = models.ForeignKey('Person', verbose_name=_('person')) - team = models.ForeignKey('Team', verbose_name=_('team')) - second_team = models.ForeignKey('Team', verbose_name=_('second team')) + team = models.ForeignKey('Team', verbose_name=_('team'), related_name='team_activity', blank=True, null=True, on_delete=models.SET_NULL) + second_team = models.ForeignKey('Team', verbose_name=_('second team'), related_name='second_team_activity', blank=True, null=True, on_delete=models.SET_NULL) function = models.CharField(_('fonction'), blank=True, max_length=1024) status = models.ForeignKey(ActivityStatus, verbose_name=_('status'), blank=True, null=True, on_delete=models.SET_NULL) grade = models.ForeignKey(ActivityGrade, verbose_name=_('grade'), blank=True, null=True, on_delete=models.SET_NULL) framework = models.ForeignKey(ActivityFramework, verbose_name=_('framework'), blank=True, null=True, on_delete=models.SET_NULL) - hdr = models.BooleanField(_('HDR')) + hdr = models.BooleanField(_('HDR'), default=False) - employer = models.ForeignKey(Organization, verbose_name=_('employer'), blank=True, null=True, on_delete=models.SET_NULL) - second_employer = models.ForeignKey(Organization, verbose_name=_('second employer'), blank=True, null=True, on_delete=models.SET_NULL) - attachment_organization = models.ForeignKey(Organization, verbose_name=_('attachment organization'), blank=True, null=True, on_delete=models.SET_NULL) + employer = models.ForeignKey(Organization, verbose_name=_('employer'), related_name='employer_activity', blank=True, null=True, on_delete=models.SET_NULL) + second_employer = models.ForeignKey(Organization, verbose_name=_('second employer'), related_name='second_employer_activity', blank=True, null=True, on_delete=models.SET_NULL) + attachment_organization = models.ForeignKey(Organization, verbose_name=_('attachment organization'), related_name='attachment_activity', blank=True, null=True, on_delete=models.SET_NULL) - project = models.ForeignKey(Project, verbose_name=_('project'), blank=True, null=True, on_delete=models.SET_NULL) - rd_quota = models.IntegerField(_('R&D quota'), blank=True) - rd_program = models.TextField(_('R&D program')) + project = models.ForeignKey('organization-project.Project', verbose_name=_('project'), blank=True, null=True, on_delete=models.SET_NULL) + rd_quota = models.IntegerField(_('R&D quota'), blank=True, null=True) + rd_program = models.TextField(_('R&D program'), blank=True) + budget_code = models.ForeignKey(BudgetCode, blank=True, null=True, on_delete=models.SET_NULL) phd_doctoral_school = models.ForeignKey(Organization, verbose_name=_('doctoral school'), blank=True, null=True, on_delete=models.SET_NULL) - phd_director = models.ForeignKey('Person', verbose_name=_('PhD director'), blank=True, null=True, on_delete=models.SET_NULL) - phd_officer_1 = models.ForeignKey('Person', verbose_name=_('PhD officer 1'), blank=True, null=True, on_delete=models.SET_NULL) - phd_officer_2 = models.ForeignKey('Person', verbose_name=_('PhD officer 2'), blank=True, null=True, on_delete=models.SET_NULL) - phd_defense_date = models.DateField(_('PhD defense date'), blank=True) - phd_title = models.TextField(_('PhD title')) + phd_director = models.ForeignKey('Person', verbose_name=_('PhD director'), related_name='phd_director_activity', blank=True, null=True, on_delete=models.SET_NULL) + phd_officer_1 = models.ForeignKey('Person', verbose_name=_('PhD officer 1'), related_name='phd_officer_1_activity', blank=True, null=True, on_delete=models.SET_NULL) + phd_officer_2 = models.ForeignKey('Person', verbose_name=_('PhD officer 2'), related_name='phd_officer_2_activity', blank=True, null=True, on_delete=models.SET_NULL) + phd_defense_date = models.DateField(_('PhD defense date'), blank=True, null=True) + phd_title = models.TextField(_('PhD title'), blank=True) phd_postdoctoralsituation = models.CharField(_('post-doctoral situation'), blank=True, max_length=256) training_type = models.ForeignKey(TrainingType, verbose_name=_('training type'), blank=True, null=True, on_delete=models.SET_NULL) training_level = models.ForeignKey(TrainingLevel, verbose_name=_('training level'), blank=True, null=True, on_delete=models.SET_NULL) training_topic = models.ForeignKey(TrainingTopic, verbose_name=_('training topic'), blank=True, null=True, on_delete=models.SET_NULL) training_speciality = models.ForeignKey(TrainingSpectiality, verbose_name=_('training speciality'), blank=True, null=True, on_delete=models.SET_NULL) - training_title = models.TextField(_('Training title')) + training_title = models.TextField(_('Training title'), blank=True) + + comments = models.TextField(_('comments'), blank=True) - comments = models.TextField(_('comments')) - budget_code = models.ForeignKey(BudgetCode, blank=True, null=True, on_delete=models.SET_NULL) record_piece = models.ForeignKey(RecordPiece, blank=True, null=True, on_delete=models.SET_NULL) - record_date = models.DateField(_('last record date'), auto_now=True) + date_added = models.DateTimeField(_('add date'), auto_now_add=True) + date_modified = models.DateTimeField(_('modification date'), auto_now=True) + date_modified_manual = models.DateTimeField(_('manual modification date'), blank=True, null=True) class Meta: verbose_name = _('activity') -- 2.39.5