]> git.parisson.com Git - mezzo.git/commitdiff
WARNING: huge refactoring! add DepatmentPage and TeamPage, rename modules, add variou...
authorGuillaume Pellerin <guillaume.pellerin@ircam.fr>
Tue, 23 Aug 2016 14:12:02 +0000 (16:12 +0200)
committerGuillaume Pellerin <guillaume.pellerin@ircam.fr>
Tue, 23 Aug 2016 14:12:02 +0000 (16:12 +0200)
98 files changed:
app/local_settings.py
app/organization/core/migrations/0013_auto_20160823_1359.py [new file with mode: 0644]
app/organization/core/models.py
app/organization/magazine/models.py
app/organization/magazine/views.py
app/organization/network/__init__.py [new file with mode: 0644]
app/organization/network/admin.py [new file with mode: 0644]
app/organization/network/apps.py [new file with mode: 0644]
app/organization/network/migrations/0001_initial.py [new file with mode: 0644]
app/organization/network/migrations/0002_auto_20160823_1425.py [new file with mode: 0644]
app/organization/network/migrations/0003_auto_20160823_1438.py [new file with mode: 0644]
app/organization/network/migrations/__init__.py [new file with mode: 0644]
app/organization/network/models.py [new file with mode: 0644]
app/organization/network/nationalities/__init__.py [new file with mode: 0644]
app/organization/network/nationalities/fields.py [new file with mode: 0644]
app/organization/network/nationalities/nationalities.py [new file with mode: 0644]
app/organization/network/tests.py [new file with mode: 0644]
app/organization/network/translation.py [new file with mode: 0644]
app/organization/network/urls.py [new file with mode: 0644]
app/organization/network/views.py [new file with mode: 0644]
app/organization/project/__init__.py [deleted file]
app/organization/project/admin.py [deleted file]
app/organization/project/apps.py [deleted file]
app/organization/project/migrations/0001_initial.py [deleted file]
app/organization/project/migrations/0002_auto_20160715_1807.py [deleted file]
app/organization/project/migrations/0003_auto_20160808_0118.py [deleted file]
app/organization/project/migrations/0004_auto_20160809_1413.py [deleted file]
app/organization/project/migrations/0005_auto_20160818_1539.py [deleted file]
app/organization/project/migrations/0006_auto_20160818_1656.py [deleted file]
app/organization/project/migrations/0007_auto_20160819_1920.py [deleted file]
app/organization/project/migrations/__init__.py [deleted file]
app/organization/project/models.py [deleted file]
app/organization/project/tests.py [deleted file]
app/organization/project/translation.py [deleted file]
app/organization/project/urls.py [deleted file]
app/organization/project/views.py [deleted file]
app/organization/projects/__init__.py [new file with mode: 0644]
app/organization/projects/admin.py [new file with mode: 0644]
app/organization/projects/apps.py [new file with mode: 0644]
app/organization/projects/migrations/0001_initial.py [new file with mode: 0644]
app/organization/projects/migrations/__init__.py [new file with mode: 0644]
app/organization/projects/models.py [new file with mode: 0644]
app/organization/projects/tests.py [new file with mode: 0644]
app/organization/projects/translation.py [new file with mode: 0644]
app/organization/projects/urls.py [new file with mode: 0644]
app/organization/projects/views.py [new file with mode: 0644]
app/organization/team/__init__.py [deleted file]
app/organization/team/admin.py [deleted file]
app/organization/team/apps.py [deleted file]
app/organization/team/migrations/0001_initial.py [deleted file]
app/organization/team/migrations/0002_auto_20160714_1905.py [deleted file]
app/organization/team/migrations/0003_auto_20160714_1943.py [deleted file]
app/organization/team/migrations/0004_auto_20160715_1807.py [deleted file]
app/organization/team/migrations/0005_remove_person_nationality.py [deleted file]
app/organization/team/migrations/0006_auto_20160720_2136.py [deleted file]
app/organization/team/migrations/0007_auto_20160721_1351.py [deleted file]
app/organization/team/migrations/0008_auto_20160725_0117.py [deleted file]
app/organization/team/migrations/0009_auto_20160725_0143.py [deleted file]
app/organization/team/migrations/0010_auto_20160725_0201.py [deleted file]
app/organization/team/migrations/0011_auto_20160727_1631.py [deleted file]
app/organization/team/migrations/0012_auto_20160808_0118.py [deleted file]
app/organization/team/migrations/0013_auto_20160809_1413.py [deleted file]
app/organization/team/migrations/0014_department_articles_related.py [deleted file]
app/organization/team/migrations/0015_auto_20160810_1829.py [deleted file]
app/organization/team/migrations/0016_auto_20160812_1521.py [deleted file]
app/organization/team/migrations/0017_auto_20160823_0744.py [deleted file]
app/organization/team/migrations/__init__.py [deleted file]
app/organization/team/models.py [deleted file]
app/organization/team/nationalities/__init__.py [deleted file]
app/organization/team/nationalities/fields.py [deleted file]
app/organization/team/nationalities/nationalities.py [deleted file]
app/organization/team/tests.py [deleted file]
app/organization/team/translation.py [deleted file]
app/organization/team/urls.py [deleted file]
app/organization/team/views.py [deleted file]
app/organization/urls.py
app/settings.py
app/templates/network/department_detail.html [new file with mode: 0644]
app/templates/network/department_list.html [new file with mode: 0644]
app/templates/network/person_detail.html [new file with mode: 0644]
app/templates/network/person_list.html [new file with mode: 0644]
app/templates/network/team_detail.html [new file with mode: 0644]
app/templates/network/team_list.html [new file with mode: 0644]
app/templates/pages/department.html [deleted file]
app/templates/pages/departmentpage.html [new file with mode: 0644]
app/templates/pages/team.html [deleted file]
app/templates/pages/teampage.html [new file with mode: 0644]
app/templates/project/project_detail.html [deleted file]
app/templates/project/project_list.html [deleted file]
app/templates/projects/project_detail.html [new file with mode: 0644]
app/templates/projects/project_list.html [new file with mode: 0644]
app/templates/team/department_detail.html [deleted file]
app/templates/team/department_list.html [deleted file]
app/templates/team/person_detail.html [deleted file]
app/templates/team/person_list.html [deleted file]
app/templates/team/team_detail.html [deleted file]
app/templates/team/team_list.html [deleted file]
docker-compose.yml

index fde9ff7080dae34751758ed97240254ebea5ae57..d4aa41787a2fec19ebb2c0d7998efc4a22a786ac 100644 (file)
@@ -73,8 +73,8 @@ ADMIN_MENU_ORDER = (
     (_('Media'), ('organization-media.Video', 'organization-media.VideoCategory', 'organization-media.Audio', 'organization-media.Playlist', (_('Media Library'), 'fb_browse'),)),
     (_('Events'), ('mezzanine_agenda.Event', 'mezzanine_agenda.EventLocation', 'mezzanine_agenda.EventPrice',)),
     (_('Magazine'), ('organization-magazine.Article', 'organization-magazine.Brief',)),
-    (_('Organization'), ('organization-team.Organization', 'organization-team.Department', 'organization-team.Team', 'organization-team.Person', 'organization-team.Activity', 'organization-team.OrganizationType',)),
-    (_('Projects'), ('organization-project.Project',)),
+    (_('Network'), ('organization-network.Organization', 'organization-network.Department', 'organization-network.Team', 'organization-network.Person', 'organization-network.Activity', 'organization-network.OrganizationType',)),
+    (_('Projects'), ('organization-projects.Project',)),
     (_('Festival'), ('organization-festival.Artist',)),
     (_('Users'), ('auth.User', 'auth.Group',)),
     (_('Site'), ('sites.Site', 'redirects.Redirect', 'conf.Setting')),
@@ -140,4 +140,4 @@ DEBUG_TOOLBAR_PANELS = [
 
 GRAPPELLI_INSTALLED = True
 # JQUERY_FILENAME = 'jquery-3.1.0.min.js'
-# JQUERY_UI_FILENAME = 'jquery-ui-1.12.0.min.js'
+JQUERY_UI_FILENAME = 'jquery-ui-1.9.2.min.js'
diff --git a/app/organization/core/migrations/0013_auto_20160823_1359.py b/app/organization/core/migrations/0013_auto_20160823_1359.py
new file mode 100644 (file)
index 0000000..e667ec8
--- /dev/null
@@ -0,0 +1,25 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.9.7 on 2016-08-23 11:59
+from __future__ import unicode_literals
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('organization-core', '0012_auto_20160818_1656'),
+    ]
+
+    operations = [
+        migrations.AddField(
+            model_name='category',
+            name='description',
+            field=models.TextField(blank=True, verbose_name='description'),
+        ),
+        migrations.AddField(
+            model_name='pageblock',
+            name='description',
+            field=models.TextField(blank=True, verbose_name='description'),
+        ),
+    ]
index 1170ddaf60453d8c307227ed52f5cef5e403be51..914169a6535808d5385c80b1aa93e54a5be7448e 100644 (file)
@@ -27,6 +27,7 @@ class Named(models.Model):
     """Abstract model providing a name field"""
 
     name = models.CharField(_('name'), max_length=512)
+    description = models.TextField(_('description'), blank=True)
 
     class Meta:
         abstract = True
@@ -43,6 +44,7 @@ class Titled(models.Model):
     """Abstract model providing a title field"""
 
     title = models.CharField(_('title'), max_length=1024)
+    description = models.TextField(_('description'), blank=True)
 
     class Meta:
         abstract = True
index a5e02f11b5b46ebd947570f7cda6ef9f5089654b..9c8c8e72fb1b1715fd905a0004bd0679b217d57e 100644 (file)
@@ -13,6 +13,7 @@ from mezzanine.blog.models import BlogPost
 #from orderable.models import Orderable
 from organization.core.models import Named, Description, Image, Photo
 
+
 class ArticleImage(Image):
 
     article_fk = models.ForeignKey("Article", verbose_name=_('article'))
index be89739c88479833cf33cfc27e75727b0c6af573..366d75cb9ac305579f0fc590531b94741a953109 100644 (file)
@@ -11,7 +11,7 @@ from dal import autocomplete
 from dal_select2_queryset_sequence.views import Select2QuerySetSequenceView
 from mezzanine_agenda.models import Event
 from organization.magazine.models import Article, Topic, Brief
-from organization.team.models import Department
+from organization.network.models import Department
 from organization.core.models import BasicPage
 from organization.core.views import SlugMixin
 from django.template.defaultfilters import slugify
diff --git a/app/organization/network/__init__.py b/app/organization/network/__init__.py
new file mode 100644 (file)
index 0000000..61799f6
--- /dev/null
@@ -0,0 +1,10 @@
+"""
+Provides abstract models and admin features used throughout the various
+Mezzanine apps.
+"""
+from __future__ import unicode_literals
+
+from mezzanine import __version__  # noqa
+
+
+default_app_config = 'organization.network.apps.NetworkConfig'
diff --git a/app/organization/network/admin.py b/app/organization/network/admin.py
new file mode 100644 (file)
index 0000000..91a71ce
--- /dev/null
@@ -0,0 +1,72 @@
+from django.contrib import admin
+from django import forms
+from copy import deepcopy
+from mezzanine.core.admin import *
+from mezzanine.pages.admin import PageAdmin
+
+from organization.network.models import *
+from organization.core.admin import *
+
+
+class OrganizationAdmin(BaseTranslationModelAdmin):
+
+    model = Organization
+
+
+class PersonActivityInline(StackedDynamicInlineAdmin):
+
+    model = PersonActivity
+    fk_name = 'person'
+
+
+class DepartmentAdmin(BaseTranslationModelAdmin):
+
+    model = Department
+
+
+class DepartmentPageAdmin(PageAdmin):
+
+    inlines = [PageBlockInline, PageImageInline]
+
+
+class TeamAdmin(BaseTranslationModelAdmin):
+
+    model = Team
+
+
+class TeamPageAdmin(PageAdmin):
+
+    inlines = [PageBlockInline, PageImageInline]
+
+
+class PersonAdminBase(BaseTranslationModelAdmin):
+
+    model = Person
+
+
+class PersonLinkInline(StackedDynamicInlineAdmin):
+
+    model = PersonLink
+
+
+class PersonAdmin(BaseTranslationModelAdmin):
+
+    model = Person
+    inlines = [PersonActivityInline, PersonLinkInline, ]
+    first_fields = ['last_name', 'first_name', 'title', 'gender', 'user']
+
+    def get_fieldsets(self, request, obj = None):
+        res = super(PersonAdmin, self).get_fieldsets(request, obj)
+        for field in reversed(self.first_fields):
+            index = res[0][1]['fields'].index(field)
+            res[0][1]['fields'].insert(0, res[0][1]['fields'].pop(index))
+        return res
+
+
+admin.site.register(Organization, OrganizationAdmin)
+admin.site.register(OrganizationType)
+admin.site.register(Department, DepartmentAdmin)
+admin.site.register(Team, TeamAdmin)
+admin.site.register(DepartmentPage, DepartmentPageAdmin)
+admin.site.register(TeamPage, TeamPageAdmin)
+admin.site.register(Person, PersonAdmin)
diff --git a/app/organization/network/apps.py b/app/organization/network/apps.py
new file mode 100644 (file)
index 0000000..a008788
--- /dev/null
@@ -0,0 +1,9 @@
+from __future__ import unicode_literals
+
+from django.apps import AppConfig
+
+
+class NetworkConfig(AppConfig):
+
+    name = 'organization.network'
+    label  = 'organization-network'
diff --git a/app/organization/network/migrations/0001_initial.py b/app/organization/network/migrations/0001_initial.py
new file mode 100644 (file)
index 0000000..29f3674
--- /dev/null
@@ -0,0 +1,354 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.9.7 on 2016-08-23 12:25
+from __future__ import unicode_literals
+
+from django.db import migrations, models
+import django.db.models.deletion
+import django_countries.fields
+import mezzanine.core.fields
+import mezzanine.utils.models
+
+
+class Migration(migrations.Migration):
+
+    initial = True
+
+    dependencies = [
+        ('pages', '0004_auto_20160804_1547'),
+        ('organization-core', '0013_auto_20160823_1359'),
+    ]
+
+    operations = [
+        migrations.CreateModel(
+            name='ActivityFramework',
+            fields=[
+                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+                ('name', models.CharField(max_length=512, verbose_name='name')),
+                ('description', models.TextField(blank=True, verbose_name='description')),
+            ],
+            options={
+                'verbose_name': 'activity framework',
+            },
+        ),
+        migrations.CreateModel(
+            name='ActivityGrade',
+            fields=[
+                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+                ('name', models.CharField(max_length=512, verbose_name='name')),
+                ('description', models.TextField(blank=True, verbose_name='description')),
+            ],
+            options={
+                'verbose_name': 'activity grade',
+            },
+        ),
+        migrations.CreateModel(
+            name='ActivityStatus',
+            fields=[
+                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+                ('name', models.CharField(max_length=512, verbose_name='name')),
+                ('description', models.TextField(blank=True, verbose_name='description')),
+            ],
+            options={
+                'verbose_name': 'activity status',
+            },
+        ),
+        migrations.CreateModel(
+            name='Address',
+            fields=[
+                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+                ('address', models.TextField(blank=True, verbose_name='address')),
+                ('postal_code', models.CharField(blank=True, max_length=16, verbose_name='postal code')),
+                ('country', django_countries.fields.CountryField(max_length=2, verbose_name='country')),
+            ],
+        ),
+        migrations.CreateModel(
+            name='BudgetCode',
+            fields=[
+                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+                ('name', models.CharField(max_length=512, verbose_name='name')),
+                ('description', models.TextField(blank=True, verbose_name='description')),
+            ],
+            options={
+                'verbose_name': 'budget code',
+            },
+        ),
+        migrations.CreateModel(
+            name='Department',
+            fields=[
+                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+                ('name', models.CharField(max_length=512, verbose_name='name')),
+                ('name_fr', models.CharField(max_length=512, null=True, verbose_name='name')),
+                ('name_en', models.CharField(max_length=512, null=True, verbose_name='name')),
+                ('description', models.TextField(blank=True, verbose_name='description')),
+                ('description_fr', models.TextField(blank=True, null=True, verbose_name='description')),
+                ('description_en', models.TextField(blank=True, null=True, verbose_name='description')),
+            ],
+            options={
+                'verbose_name': 'department',
+            },
+        ),
+        migrations.CreateModel(
+            name='DepartmentPage',
+            fields=[
+                ('page_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='pages.Page')),
+                ('content', mezzanine.core.fields.RichTextField(verbose_name='Content')),
+                ('content_fr', mezzanine.core.fields.RichTextField(null=True, verbose_name='Content')),
+                ('content_en', mezzanine.core.fields.RichTextField(null=True, verbose_name='Content')),
+                ('sub_title', models.TextField(blank=True, max_length=1024, verbose_name='sub title')),
+                ('sub_title_fr', models.TextField(blank=True, max_length=1024, null=True, verbose_name='sub title')),
+                ('sub_title_en', models.TextField(blank=True, max_length=1024, null=True, verbose_name='sub title')),
+                ('photo', mezzanine.core.fields.FileField(blank=True, max_length=1024, verbose_name='photo')),
+                ('photo_credits', models.CharField(blank=True, max_length=255, null=True, verbose_name='photo credits')),
+                ('photo_alignment', models.CharField(blank=True, choices=[('left', 'left'), ('center', 'center'), ('right', 'right')], default='left', max_length=32, verbose_name='photo alignment')),
+                ('photo_description', models.TextField(blank=True, verbose_name='photo description')),
+                ('photo_card', mezzanine.core.fields.FileField(blank=True, max_length=1024, verbose_name='card photo')),
+                ('photo_card_credits', models.CharField(blank=True, max_length=255, null=True, verbose_name='photo card credits')),
+                ('photo_slider', mezzanine.core.fields.FileField(blank=True, max_length=1024, verbose_name='slider photo')),
+                ('photo_slider_credits', models.CharField(blank=True, max_length=255, null=True, verbose_name='photo slider credits')),
+                ('weaving_css_class', models.CharField(blank=True, choices=[('pattern-bg--circles', 'circles'), ('pattern-bg--squares', 'squares'), ('pattern-bg--stripes', 'stripes'), ('pattern-bg--triangles', 'triangles')], max_length=64, verbose_name='background pattern')),
+            ],
+            options={
+                'ordering': ('_order',),
+                'verbose_name': 'department page',
+            },
+            bases=('pages.page', models.Model),
+        ),
+        migrations.CreateModel(
+            name='OrganizationType',
+            fields=[
+                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+                ('name', models.CharField(max_length=512, verbose_name='name')),
+                ('description', models.TextField(blank=True, verbose_name='description')),
+            ],
+            options={
+                'verbose_name': 'organization type',
+            },
+        ),
+        migrations.CreateModel(
+            name='Person',
+            fields=[
+                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+                ('keywords_string', models.CharField(blank=True, editable=False, max_length=500)),
+                ('title', models.CharField(max_length=500, verbose_name='Title')),
+                ('slug', models.CharField(blank=True, help_text='Leave blank to have the URL auto-generated from the title.', max_length=2000, null=True, verbose_name='URL')),
+                ('_meta_title', models.CharField(blank=True, help_text='Optional title to be used in the HTML title tag. If left blank, the main title field will be used.', max_length=500, null=True, verbose_name='Title')),
+                ('description', models.TextField(blank=True, verbose_name='Description')),
+                ('gen_description', models.BooleanField(default=True, help_text='If checked, the description will be automatically generated from content. Uncheck if you want to manually set a custom description.', verbose_name='Generate description')),
+                ('created', models.DateTimeField(editable=False, null=True)),
+                ('updated', models.DateTimeField(editable=False, null=True)),
+                ('status', models.IntegerField(choices=[(1, 'Draft'), (2, 'Published')], default=2, help_text='With Draft chosen, will only be shown for admin users on the site.', verbose_name='Status')),
+                ('publish_date', models.DateTimeField(blank=True, db_index=True, help_text="With Published chosen, won't be shown until this time", null=True, verbose_name='Published from')),
+                ('expiry_date', models.DateTimeField(blank=True, help_text="With Published chosen, won't be shown after this time", null=True, verbose_name='Expires on')),
+                ('short_url', models.URLField(blank=True, null=True)),
+                ('in_sitemap', models.BooleanField(default=True, verbose_name='Show in sitemap')),
+                ('photo', mezzanine.core.fields.FileField(blank=True, max_length=1024, verbose_name='photo')),
+                ('photo_credits', models.CharField(blank=True, max_length=255, null=True, verbose_name='photo credits')),
+                ('photo_alignment', models.CharField(blank=True, choices=[('left', 'left'), ('center', 'center'), ('right', 'right')], default='left', max_length=32, verbose_name='photo alignment')),
+                ('photo_description', models.TextField(blank=True, verbose_name='photo description')),
+                ('photo_card', mezzanine.core.fields.FileField(blank=True, max_length=1024, verbose_name='card photo')),
+                ('photo_card_credits', models.CharField(blank=True, max_length=255, null=True, verbose_name='photo card credits')),
+                ('photo_slider', mezzanine.core.fields.FileField(blank=True, max_length=1024, verbose_name='slider photo')),
+                ('photo_slider_credits', models.CharField(blank=True, max_length=255, null=True, verbose_name='photo slider credits')),
+                ('person_title', models.CharField(blank=True, choices=[('Dr', 'Dr'), ('Prof', 'Prof'), ('Prof Dr', 'Prof Dr')], max_length=16, verbose_name='title')),
+                ('gender', models.CharField(blank=True, choices=[('male', 'male'), ('female', 'female')], max_length=16, verbose_name='gender')),
+                ('first_name', models.CharField(blank=True, max_length=255, null=True, verbose_name='first name')),
+                ('last_name', models.CharField(blank=True, max_length=255, null=True, verbose_name='last name')),
+                ('birthday', models.DateField(blank=True, null=True, verbose_name='birthday')),
+                ('bio', mezzanine.core.fields.RichTextField(blank=True, verbose_name='biography')),
+                ('bio_fr', mezzanine.core.fields.RichTextField(blank=True, null=True, verbose_name='biography')),
+                ('bio_en', mezzanine.core.fields.RichTextField(blank=True, null=True, verbose_name='biography')),
+                ('permanent', models.BooleanField(default=False, verbose_name='permanent')),
+            ],
+            options={
+                'ordering': ['last_name'],
+                'verbose_name': 'person',
+            },
+            bases=(mezzanine.utils.models.AdminThumbMixin, models.Model),
+        ),
+        migrations.CreateModel(
+            name='PersonActivity',
+            fields=[
+                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+                ('content', mezzanine.core.fields.RichTextField(verbose_name='Content')),
+                ('content_fr', mezzanine.core.fields.RichTextField(null=True, verbose_name='Content')),
+                ('content_en', mezzanine.core.fields.RichTextField(null=True, verbose_name='Content')),
+                ('description', models.TextField(blank=True, verbose_name='description')),
+                ('description_fr', models.TextField(blank=True, null=True, verbose_name='description')),
+                ('description_en', models.TextField(blank=True, null=True, verbose_name='description')),
+                ('date_begin', models.DateField(blank=True, null=True, verbose_name='begin date')),
+                ('date_end', models.DateField(blank=True, null=True, verbose_name='end date')),
+                ('function', models.CharField(blank=True, max_length=1024, verbose_name='fonction')),
+                ('hdr', models.BooleanField(default=False, verbose_name='HDR')),
+                ('rd_quota', models.IntegerField(blank=True, null=True, verbose_name='R&D quota')),
+                ('rd_program', models.TextField(blank=True, verbose_name='R&D program')),
+                ('phd_defense_date', models.DateField(blank=True, null=True, verbose_name='PhD defense date')),
+                ('phd_title', models.TextField(blank=True, verbose_name='PhD title')),
+                ('phd_postdoctoralsituation', models.CharField(blank=True, max_length=256, verbose_name='post-doctoral situation')),
+                ('training_title', models.TextField(blank=True, verbose_name='Training title')),
+                ('comments', models.TextField(blank=True, verbose_name='comments')),
+                ('date_added', models.DateTimeField(auto_now_add=True, verbose_name='add date')),
+                ('date_modified', models.DateTimeField(auto_now=True, verbose_name='modification date')),
+                ('date_modified_manual', models.DateTimeField(blank=True, null=True, verbose_name='manual modification date')),
+                ('budget_code', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='organization-network.BudgetCode')),
+                ('framework', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='organization-network.ActivityFramework', verbose_name='framework')),
+                ('grade', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='organization-network.ActivityGrade', verbose_name='grade')),
+                ('person', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='organization-network.Person', verbose_name='person')),
+                ('phd_director', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='phd_director_activity', to='organization-network.Person', verbose_name='PhD director')),
+                ('phd_officer_1', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='phd_officer_1_activity', to='organization-network.Person', verbose_name='PhD officer 1')),
+                ('phd_officer_2', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='phd_officer_2_activity', to='organization-network.Person', verbose_name='PhD officer 2')),
+            ],
+            options={
+                'verbose_name_plural': 'activities',
+                'verbose_name': 'activity',
+            },
+        ),
+        migrations.CreateModel(
+            name='PersonLink',
+            fields=[
+                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+                ('url', models.URLField(verbose_name='URL')),
+                ('link_type', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='organization-core.LinkType', verbose_name='link type')),
+                ('person', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='organization-network.Person', verbose_name='person')),
+            ],
+            options={
+                'verbose_name': 'person link',
+            },
+        ),
+        migrations.CreateModel(
+            name='RecordPiece',
+            fields=[
+                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+                ('name', models.CharField(max_length=512, verbose_name='name')),
+                ('description', models.TextField(blank=True, verbose_name='description')),
+            ],
+            options={
+                'verbose_name': 'record piece',
+            },
+        ),
+        migrations.CreateModel(
+            name='Team',
+            fields=[
+                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+                ('name', models.CharField(max_length=512, verbose_name='name')),
+                ('name_fr', models.CharField(max_length=512, null=True, verbose_name='name')),
+                ('name_en', models.CharField(max_length=512, null=True, verbose_name='name')),
+                ('description', models.TextField(blank=True, verbose_name='description')),
+                ('description_fr', models.TextField(blank=True, null=True, verbose_name='description')),
+                ('description_en', models.TextField(blank=True, null=True, verbose_name='description')),
+                ('web_site', models.URLField(blank=True, max_length=512, verbose_name='web site')),
+                ('department', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='teams', to='organization-network.Department', verbose_name='department')),
+            ],
+            options={
+                'verbose_name': 'team',
+            },
+        ),
+        migrations.CreateModel(
+            name='TeamLink',
+            fields=[
+                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+                ('url', models.URLField(verbose_name='URL')),
+                ('link_type', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='organization-core.LinkType', verbose_name='link type')),
+                ('team', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='organization-network.Team', verbose_name='links')),
+            ],
+            options={
+                'verbose_name_plural': 'links',
+                'abstract': False,
+                'verbose_name': 'link',
+            },
+        ),
+        migrations.CreateModel(
+            name='TeamPage',
+            fields=[
+                ('page_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='pages.Page')),
+                ('content', mezzanine.core.fields.RichTextField(verbose_name='Content')),
+                ('content_fr', mezzanine.core.fields.RichTextField(null=True, verbose_name='Content')),
+                ('content_en', mezzanine.core.fields.RichTextField(null=True, verbose_name='Content')),
+                ('sub_title', models.TextField(blank=True, max_length=1024, verbose_name='sub title')),
+                ('sub_title_fr', models.TextField(blank=True, max_length=1024, null=True, verbose_name='sub title')),
+                ('sub_title_en', models.TextField(blank=True, max_length=1024, null=True, verbose_name='sub title')),
+                ('photo', mezzanine.core.fields.FileField(blank=True, max_length=1024, verbose_name='photo')),
+                ('photo_credits', models.CharField(blank=True, max_length=255, null=True, verbose_name='photo credits')),
+                ('photo_alignment', models.CharField(blank=True, choices=[('left', 'left'), ('center', 'center'), ('right', 'right')], default='left', max_length=32, verbose_name='photo alignment')),
+                ('photo_description', models.TextField(blank=True, verbose_name='photo description')),
+                ('photo_card', mezzanine.core.fields.FileField(blank=True, max_length=1024, verbose_name='card photo')),
+                ('photo_card_credits', models.CharField(blank=True, max_length=255, null=True, verbose_name='photo card credits')),
+                ('photo_slider', mezzanine.core.fields.FileField(blank=True, max_length=1024, verbose_name='slider photo')),
+                ('photo_slider_credits', models.CharField(blank=True, max_length=255, null=True, verbose_name='photo slider credits')),
+                ('team', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='organization-network.Team', verbose_name='team')),
+            ],
+            options={
+                'ordering': ('_order',),
+                'verbose_name': 'team page',
+            },
+            bases=('pages.page', models.Model),
+        ),
+        migrations.CreateModel(
+            name='TrainingLevel',
+            fields=[
+                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+                ('name', models.CharField(max_length=512, verbose_name='name')),
+                ('description', models.TextField(blank=True, verbose_name='description')),
+            ],
+            options={
+                'verbose_name': 'training level',
+            },
+        ),
+        migrations.CreateModel(
+            name='TrainingSpectiality',
+            fields=[
+                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+                ('name', models.CharField(max_length=512, verbose_name='name')),
+                ('description', models.TextField(blank=True, verbose_name='description')),
+            ],
+            options={
+                'verbose_name': 'training speciality',
+            },
+        ),
+        migrations.CreateModel(
+            name='TrainingTopic',
+            fields=[
+                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+                ('name', models.CharField(max_length=512, verbose_name='name')),
+                ('description', models.TextField(blank=True, verbose_name='description')),
+            ],
+            options={
+                'verbose_name': 'training topic',
+            },
+        ),
+        migrations.CreateModel(
+            name='TrainingType',
+            fields=[
+                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+                ('name', models.CharField(max_length=512, verbose_name='name')),
+                ('description', models.TextField(blank=True, verbose_name='description')),
+            ],
+            options={
+                'verbose_name': 'training type',
+            },
+        ),
+        migrations.CreateModel(
+            name='Organization',
+            fields=[
+                ('address_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='organization-network.Address')),
+                ('title', models.CharField(max_length=500, verbose_name='Title')),
+                ('slug', models.CharField(blank=True, help_text='Leave blank to have the URL auto-generated from the title.', max_length=2000, null=True, verbose_name='URL')),
+                ('description', models.TextField(blank=True, verbose_name='description')),
+                ('description_fr', models.TextField(blank=True, null=True, verbose_name='description')),
+                ('description_en', models.TextField(blank=True, null=True, verbose_name='description')),
+                ('photo', mezzanine.core.fields.FileField(blank=True, max_length=1024, verbose_name='photo')),
+                ('photo_credits', models.CharField(blank=True, max_length=255, null=True, verbose_name='photo credits')),
+                ('photo_alignment', models.CharField(blank=True, choices=[('left', 'left'), ('center', 'center'), ('right', 'right')], default='left', max_length=32, verbose_name='photo alignment')),
+                ('photo_description', models.TextField(blank=True, verbose_name='photo description')),
+                ('photo_card', mezzanine.core.fields.FileField(blank=True, max_length=1024, verbose_name='card photo')),
+                ('photo_card_credits', models.CharField(blank=True, max_length=255, null=True, verbose_name='photo card credits')),
+                ('photo_slider', mezzanine.core.fields.FileField(blank=True, max_length=1024, verbose_name='slider photo')),
+                ('photo_slider_credits', models.CharField(blank=True, max_length=255, null=True, verbose_name='photo slider credits')),
+                ('website', models.URLField(blank=True, max_length=512, verbose_name='website')),
+                ('is_on_map', models.BooleanField(default=True, verbose_name='is on map')),
+            ],
+            options={
+                'verbose_name': 'organization',
+            },
+            bases=('organization-network.address', models.Model),
+        ),
+    ]
diff --git a/app/organization/network/migrations/0002_auto_20160823_1425.py b/app/organization/network/migrations/0002_auto_20160823_1425.py
new file mode 100644 (file)
index 0000000..4926eb6
--- /dev/null
@@ -0,0 +1,122 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.9.7 on 2016-08-23 12:25
+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):
+
+    initial = True
+
+    dependencies = [
+        ('organization-network', '0001_initial'),
+        ('sites', '0002_alter_domain_unique'),
+        ('organization-projects', '0001_initial'),
+        migrations.swappable_dependency(settings.AUTH_USER_MODEL),
+    ]
+
+    operations = [
+        migrations.AddField(
+            model_name='personactivity',
+            name='project',
+            field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='organization-projects.Project', verbose_name='project'),
+        ),
+        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-network.RecordPiece'),
+        ),
+        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-network.Team', verbose_name='second team'),
+        ),
+        migrations.AddField(
+            model_name='personactivity',
+            name='status',
+            field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='organization-network.ActivityStatus', verbose_name='status'),
+        ),
+        migrations.AddField(
+            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-network.Team', verbose_name='team'),
+        ),
+        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-network.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-network.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-network.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-network.TrainingType', verbose_name='training type'),
+        ),
+        migrations.AddField(
+            model_name='person',
+            name='site',
+            field=models.ForeignKey(editable=False, on_delete=django.db.models.deletion.CASCADE, to='sites.Site'),
+        ),
+        migrations.AddField(
+            model_name='person',
+            name='user',
+            field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to=settings.AUTH_USER_MODEL, verbose_name='user'),
+        ),
+        migrations.AddField(
+            model_name='departmentpage',
+            name='department',
+            field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='organization-network.Department', verbose_name='department'),
+        ),
+        migrations.AddField(
+            model_name='team',
+            name='organization',
+            field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='teams', to='organization-network.Organization', verbose_name='organization'),
+        ),
+        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-network.Organization', verbose_name='attachment organization'),
+        ),
+        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-network.Organization', verbose_name='employer'),
+        ),
+        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-network.Organization', verbose_name='doctoral school'),
+        ),
+        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-network.Organization', verbose_name='second employer'),
+        ),
+        migrations.AddField(
+            model_name='organization',
+            name='site',
+            field=models.ForeignKey(editable=False, on_delete=django.db.models.deletion.CASCADE, to='sites.Site'),
+        ),
+        migrations.AddField(
+            model_name='organization',
+            name='type',
+            field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='organization-network.OrganizationType', verbose_name='organization type'),
+        ),
+        migrations.AddField(
+            model_name='department',
+            name='organization',
+            field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='departments', to='organization-network.Organization', verbose_name='organization'),
+        ),
+    ]
diff --git a/app/organization/network/migrations/0003_auto_20160823_1438.py b/app/organization/network/migrations/0003_auto_20160823_1438.py
new file mode 100644 (file)
index 0000000..1d9b339
--- /dev/null
@@ -0,0 +1,42 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.9.7 on 2016-08-23 12:38
+from __future__ import unicode_literals
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('organization-network', '0002_auto_20160823_1425'),
+    ]
+
+    operations = [
+        migrations.RemoveField(
+            model_name='organization',
+            name='site',
+        ),
+        migrations.RemoveField(
+            model_name='organization',
+            name='slug',
+        ),
+        migrations.RemoveField(
+            model_name='organization',
+            name='title',
+        ),
+        migrations.RemoveField(
+            model_name='organization',
+            name='website',
+        ),
+        migrations.AddField(
+            model_name='organization',
+            name='name',
+            field=models.CharField(default='', max_length=512, verbose_name='name'),
+            preserve_default=False,
+        ),
+        migrations.AddField(
+            model_name='organization',
+            name='web_site',
+            field=models.URLField(blank=True, max_length=512, verbose_name='web site'),
+        ),
+    ]
diff --git a/app/organization/network/migrations/__init__.py b/app/organization/network/migrations/__init__.py
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/app/organization/network/models.py b/app/organization/network/models.py
new file mode 100644 (file)
index 0000000..d083543
--- /dev/null
@@ -0,0 +1,302 @@
+from __future__ import unicode_literals
+
+import os
+import re
+import pwd
+import time
+import urllib
+import string
+import datetime
+import mimetypes
+
+from django.db import models
+from django.utils.translation import ugettext_lazy as _
+from django.core.urlresolvers import reverse, reverse_lazy
+from django.conf import settings
+from django.contrib.auth.models import User
+
+from mezzanine.pages.models import Page
+from mezzanine.core.models import RichText, Displayable, Slugged
+from mezzanine.core.fields import RichTextField, OrderField, FileField
+from mezzanine.utils.models import AdminThumbMixin, upload_to
+from mezzanine.galleries.models import BaseGallery
+
+from organization.core.models import *
+
+from django_countries.fields import CountryField
+# from .nationalities.fields import NationalityField
+
+# Hack to have these strings translated
+mr = _('Mr')
+mrs = _('Ms')
+
+GENDER_CHOICES = [
+    ('male', _('male')),
+    ('female', _('female')),
+]
+
+TITLE_CHOICES = [
+    ('Dr', _('Dr')),
+    ('Prof', _('Prof')),
+    ('Prof Dr', _('Prof Dr')),
+]
+
+PATTERN_CHOICES = [
+    ('pattern-bg--circles', _('circles')),
+    ('pattern-bg--squares', _('squares')),
+    ('pattern-bg--stripes', _('stripes')),
+    ('pattern-bg--triangles', _('triangles')),
+]
+
+ALIGNMENT_CHOICES = (('left', _('left')), ('left', _('left')), ('right', _('right')))
+
+
+class Address(models.Model):
+    """(Address description)"""
+
+    address = models.TextField(_('address'), blank=True)
+    postal_code = models.CharField(_('postal code'), max_length=16, blank=True)
+    country = CountryField(_('country'))
+
+    def __str__(self):
+        return ' '.join((self.address, self.postal_code))
+
+        class Meta:
+            abstract = True
+
+
+class Organization(Named, Address, Photo):
+    """(Organization description)"""
+
+    type = models.ForeignKey('OrganizationType', verbose_name=_('organization type'), blank=True, null=True, on_delete=models.SET_NULL)
+    web_site = models.URLField(_('web site'), max_length=512, blank=True)
+    is_on_map = models.BooleanField(_('is on map'), default=True)
+
+    class Meta:
+        verbose_name = _('organization')
+
+
+class OrganizationType(Named):
+    """(OrganizationType description)"""
+
+    class Meta:
+        verbose_name = _('organization type')
+
+
+class Department(Named):
+    """(Department description)"""
+
+    organization = models.ForeignKey('Organization', verbose_name=_('organization'), related_name="departments")
+
+    class Meta:
+        verbose_name = _('department')
+
+    def __str__(self):
+        if self.organization:
+            return ' - '.join((self.organization.name, self.name))
+        return self.name
+
+
+class DepartmentPage(Page, SubTitle, RichText, Photo):
+    """(Department description)"""
+
+    department = models.ForeignKey('Department', verbose_name=_('department'))
+    weaving_css_class = models.CharField(_('background pattern'), choices=PATTERN_CHOICES, max_length=64, blank=True)
+
+    class Meta:
+        verbose_name = _('department page')
+
+
+class Team(Named):
+    """(Team description)"""
+
+    organization = models.ForeignKey('Organization', verbose_name=_('organization'), related_name="teams", blank=True, null=True, on_delete=models.SET_NULL)
+    department = models.ForeignKey('Department', verbose_name=_('department'), related_name="teams", blank=True, null=True, on_delete=models.SET_NULL)
+    web_site = models.URLField(_('web site'), max_length=512, blank=True)
+
+    class Meta:
+        verbose_name = _('team')
+
+    def __str__(self):
+        if self.organization:
+            return ' - '.join((self.organization.name, self.name))
+        elif self.department:
+            if self.department.organization:
+                return ' - '.join((self.department.organization.name, self.department.name, self.name))
+            else:
+                return ' - '.join((self.department.name, self.name))
+        return self.name
+
+
+class TeamPage(Page, SubTitle, RichText, Photo):
+    """(Team description)"""
+
+    team = models.ForeignKey('Team', verbose_name=_('team'))
+
+    class Meta:
+        verbose_name = _('team page')
+
+
+class Person(Displayable, AdminThumbMixin, Photo):
+    """(Person description)"""
+
+    user = models.ForeignKey(User, verbose_name=_('user'), blank=True, null=True, on_delete=models.SET_NULL)
+    person_title = models.CharField(_('title'), max_length=16, choices=TITLE_CHOICES, blank=True)
+    gender = models.CharField(_('gender'), max_length=16, choices=GENDER_CHOICES, blank=True)
+    first_name = models.CharField(_('first name'), max_length=255, blank=True, null=True)
+    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'), default=False)
+
+    class Meta:
+        verbose_name = _('person')
+        ordering = ['last_name',]
+
+    def __str__(self):
+        return ' '.join((self.first_name, self.last_name))
+
+    # def get_absolute_url(self):
+    #     return reverse("festival-artist-detail", kwargs={'slug': self.slug})
+
+    def set_names(self):
+        names = self.title.split(' ')
+        if len(names) == 1:
+            self.first_name = ''
+            self.last_name = names[0]
+        elif len(names) == 2:
+            self.first_name = names[0]
+            self.last_name = names[1]
+        else:
+            self.first_name = names[0]
+            self.last_name = ' '.join(names[1:])
+
+    def clean(self):
+        super(Person, self).clean()
+        self.set_names()
+
+    def save(self, *args, **kwargs):
+        self.set_names()
+        super(Person, self).save(*args, **kwargs)
+
+
+class TeamLink(Link):
+
+    team = models.ForeignKey(Team, verbose_name=_('links'))
+
+    def __str__(self):
+        return self.url
+
+
+class ActivityStatus(Named):
+
+    class Meta:
+        verbose_name = _('activity status')
+
+
+class ActivityGrade(Named):
+
+    class Meta:
+        verbose_name = _('activity grade')
+
+
+class ActivityFramework(Named):
+
+    class Meta:
+        verbose_name = _('activity framework')
+
+
+class BudgetCode(Named):
+
+    class Meta:
+        verbose_name = _('budget code')
+
+
+class RecordPiece(Named):
+
+    class Meta:
+        verbose_name = _('record piece')
+
+
+class TrainingType(Named):
+
+    class Meta:
+        verbose_name = _('training type')
+
+
+class TrainingLevel(Named):
+
+    class Meta:
+        verbose_name = _('training level')
+
+
+class TrainingTopic(Named):
+
+    class Meta:
+        verbose_name = _('training topic')
+
+
+class TrainingSpectiality(Named):
+
+    class Meta:
+        verbose_name = _('training speciality')
+
+
+class PersonActivity(Description, Period, RichText):
+    """(Activity description)"""
+
+    person = models.ForeignKey('Person', verbose_name=_('person'))
+    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'), default=False)
+
+    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('organization-projects.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'), 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'), blank=True)
+
+    comments = models.TextField(_('comments'), blank=True)
+
+    record_piece = models.ForeignKey(RecordPiece, blank=True, null=True, on_delete=models.SET_NULL)
+    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')
+        verbose_name_plural = _('activities')
+
+    def __unicode__(self):
+        return ' - '.join((self.person, self.role, self.date_begin, self.date_end))
+
+
+class PersonLink(Link):
+    """A person can have many links."""
+
+    person = models.ForeignKey('Person', verbose_name=_('person'))
+
+    class Meta:
+        verbose_name = _('person link')
diff --git a/app/organization/network/nationalities/__init__.py b/app/organization/network/nationalities/__init__.py
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/app/organization/network/nationalities/fields.py b/app/organization/network/nationalities/fields.py
new file mode 100644 (file)
index 0000000..1792406
--- /dev/null
@@ -0,0 +1,117 @@
+from django.db.models.fields import CharField
+
+class Nationality(object):
+    """
+    Class represents a nationality.
+
+    >>> hungarian = Nationality('HU')
+    >>> hungarian.code
+    u'HU'
+    >>> hungarian.name
+    u'Hungarian'
+
+    """
+
+    def __init__(self, code):
+        """
+        Constructor accepts ISO 3166-1 country code.
+        """
+        self.code = code
+
+    def __unicode__(self):
+        return str(self.code or '')
+
+    def __eq__(self, other):
+        return self.code == str(other)
+
+    def __ne__(self, other):
+        return not self.__eq__(other)
+
+    def __cmp__(self, other):
+        return cmp(self.code, str(other))
+
+    def __hash__(self):
+        return hash(self.code)
+
+    @property
+    def name(self):
+        """
+        Return verbose name of nationality.
+        """
+        from .nationalities import NATIONALITIES
+        for code, name in NATIONALITIES:
+            if self.code == code:
+                return name
+        return None
+
+
+class NationalityDescriptor(object):
+    """
+    A descriptor for nationality fields on model instances. Returns a
+    Nationality when accessed.
+
+    >>> instance.nationality.name
+    u'Hungarian'
+
+    """
+
+    def __init__(self, field):
+        self.field = field
+
+    def __get__(self, instance=None, owner=None):
+        if instance is None:
+            raise AttributeError(
+                "The '%s' attribute can only be accessed from %s instances."
+                % (self.field.name, owner.__name__))
+        return Nationality(code=instance.__dict__[self.field.name])
+
+    def __set__(self, instance, value):
+        instance.__dict__[self.field.name] = str(value)
+
+
+class NationalityField(CharField):
+    """
+    A nationality field for Django models that provides all nationalities as
+    choices.
+    """
+
+    descriptor_class = NationalityDescriptor
+
+    def __init__(self, *args, **kwargs):
+        from .nationalities import NATIONALITIES
+        kwargs.setdefault('max_length', 2)
+        kwargs.setdefault('choices', NATIONALITIES)
+        super(CharField, self).__init__(*args, **kwargs)
+
+    def get_internal_type(self):
+        return 'CharField'
+
+    def contribute_to_class(self, cls, name):
+        super(NationalityField, self).contribute_to_class(cls, name)
+        setattr(cls, self.name, self.descriptor_class(self))
+
+    def get_prep_lookup(self, lookup_type, value):
+        if hasattr(value, 'code'):
+            value = value.code
+        return super(NationalityField, self).get_prep_lookup(lookup_type, value)
+
+    def pre_save(self, *args, **kwargs):
+        "Returns field's value just before saving."
+        value = super(CharField, self).pre_save(*args, **kwargs)
+        return self.get_prep_value(value)
+
+    def get_prep_value(self, value):
+        "Returns field's value prepared for saving into a database."
+        # Convert the Nationality to unicode for database insertion.
+        if value is None:
+            return None
+        return str(value)
+
+
+# If south is installed, ensure that NationalityField will be introspected just
+# like a normal CharField.
+try:
+    from south.modelsinspector import add_introspection_rules
+    add_introspection_rules([], ["^nationalities\.fields\.NationalityField"])
+except ImportError:
+    pass
diff --git a/app/organization/network/nationalities/nationalities.py b/app/organization/network/nationalities/nationalities.py
new file mode 100644 (file)
index 0000000..06a2288
--- /dev/null
@@ -0,0 +1,174 @@
+from django.utils.translation import ugettext_lazy as _
+
+
+# source: http://www.englishclub.com/vocabulary/world-countries-nationality.htm
+NATIONALITIES = (
+    ('AF', _(u'Afghan')),
+    ('AL', _(u'Albanian')),
+    ('DZ', _(u'Algerian')),
+    ('AD', _(u'Andorran')),
+    ('AO', _(u'Angolan')),
+    ('AR', _(u'Argentinian')),
+    ('AM', _(u'Armenian')),
+    ('AU', _(u'Australian')),
+    ('AT', _(u'Austrian')),
+    ('AZ', _(u'Azerbaijani')),
+    ('BS', _(u'Bahamian')),
+    ('BH', _(u'Bahraini')),
+    ('BD', _(u'Bangladeshi')),
+    ('BB', _(u'Barbadian')),
+    ('BY', _(u'Belorussian')),
+    ('BE', _(u'Belgian')),
+    ('BZ', _(u'Belizian')),
+    ('BJ', _(u'Beninese')),
+    ('BT', _(u'Bhutanese')),
+    ('BO', _(u'Bolivian')),
+    ('BA', _(u'Bosnian')),
+    ('BW', _(u'Botswanan')),
+    ('BR', _(u'Brazilian')),
+    ('GB', _(u'British')),
+    ('BN', _(u'Bruneian')),
+    ('BG', _(u'Bulgarian')),
+    ('BF', _(u'Burkinese')),
+    ('MM', _(u'Burmese')),
+    ('BF', _(u'Burundian')),
+    ('BI', _(u'Cambodian')),
+    ('CM', _(u'Cameroonian')),
+    ('CA', _(u'Canadian')),
+    ('CV', _(u'Cape Verdean')),
+    ('TD', _(u'Chadian')),
+    ('CL', _(u'Chilean')),
+    ('CN', _(u'Chinese')),
+    ('CO', _(u'Colombian')),
+    ('CG', _(u'Congolese')),
+    ('CR', _(u'Costa Rican')),
+    ('HR', _(u'Croatian')),
+    ('CU', _(u'Cuban')),
+    ('CY', _(u'Cypriot')),
+    ('CZ', _(u'Czech')),
+    ('DK', _(u'Danish')),
+    ('DJ', _(u'Djiboutian')),
+    ('DM', _(u'Dominican')),
+    ('DO', _(u'Dominican')),
+    ('EC', _(u'Ecuadorean')),
+    ('EG', _(u'Egyptian')),
+    ('SV', _(u'Salvadorean')),
+    ('GB', _(u'English')),
+    ('ER', _(u'Eritrean')),
+    ('EE', _(u'Estonian')),
+    ('ET', _(u'Ethiopian')),
+    ('FJ', _(u'Fijian')),
+    ('FI', _(u'Finnish')),
+    ('FR', _(u'French')),
+    ('GA', _(u'Gabonese')),
+    ('GM', _(u'Gambian')),
+    ('GE', _(u'Georgian')),
+    ('DE', _(u'German')),
+    ('GH', _(u'Ghanaian')),
+    ('GR', _(u'Greek')),
+    ('GD', _(u'Grenadian')),
+    ('GT', _(u'Guatemalan')),
+    ('GQ', _(u'Guinean')),
+    ('GY', _(u'Guyanese')),
+    ('HT', _(u'Haitian')),
+    ('NL', _(u'Dutch')),
+    ('HN', _(u'Honduran')),
+    ('HU', _(u'Hungarian')),
+    ('IS', _(u'Icelandic')),
+    ('IO', _(u'Indian')),
+    ('ID', _(u'Indonesian')),
+    ('IR', _(u'Iranian')),
+    ('IQ', _(u'Iraqi')),
+    ('IE', _(u'Irish')),
+    ('IL', _(u'Israeli')),
+    ('IT', _(u'Italian')),
+    ('JM', _(u'Jamaican')),
+    ('JP', _(u'Japanese')),
+    ('JO', _(u'Jordanian')),
+    ('KZ', _(u'Kazakh')),
+    ('KE', _(u'Kenyan')),
+    ('KW', _(u'Kuwaiti')),
+    ('LA', _(u'Laotian')),
+    ('LV', _(u'Latvian')),
+    ('LB', _(u'Lebanese')),
+    ('LR', _(u'Liberian')),
+    ('LY', _(u'Libyan')),
+    ('LT', _(u'Lithuanian')),
+    ('MK', _(u'Macedonian')),
+    ('MG', _(u'Malagasay')),
+    ('MW', _(u'Malawian')),
+    ('MY', _(u'Malaysian')),
+    ('MV', _(u'Maldivian')),
+    ('ML', _(u'Malian')),
+    ('MT', _(u'Maltese')),
+    ('MR', _(u'Mauritanian')),
+    ('MU', _(u'Mauritian')),
+    ('MX', _(u'Mexican')),
+    ('MD', _(u'Moldovan')),
+    ('MC', _(u'Monacan')),
+    ('MN', _(u'Mongolian')),
+    ('ME', _(u'Montenegrin')),
+    ('MA', _(u'Moroccan')),
+    ('MZ', _(u'Mozambican')),
+    ('NA', _(u'Namibian')),
+    ('NP', _(u'Nepalese')),
+    ('NI', _(u'Nicaraguan')),
+    ('NE', _(u'Nigerien')),
+    ('NG', _(u'Nigerian')),
+    ('KP', _(u'North Korean')),
+    ('NO', _(u'Norwegian')),
+    ('OM', _(u'Omani')),
+    ('PK', _(u'Pakistani')),
+    ('PA', _(u'Panamanian')),
+    ('PG', _(u'Guinean')),
+    ('PY', _(u'Paraguayan')),
+    ('PE', _(u'Peruvian')),
+    ('PH', _(u'Philippine')),
+    ('PL', _(u'Polish')),
+    ('PT', _(u'Portuguese')),
+    ('QA', _(u'Qatari')),
+    ('RO', _(u'Romanian')),
+    ('RU', _(u'Russian')),
+    ('RW', _(u'Rwandan')),
+    ('SA', _(u'Saudi')),
+    ('AE', _(u'Scottish')),
+    ('SN', _(u'Senegalese')),
+    ('RS', _(u'Serbian')),
+    ('SC', _(u'Seychellois')),
+    ('SL', _(u'Sierra Leonian')),
+    ('SG', _(u'Singaporean')),
+    ('SK', _(u'Slovak')),
+    ('SI', _(u'Slovenian')),
+    ('SO', _(u'Somali')),
+    ('ZA', _(u'South African')),
+    ('KR', _(u'South Korean')),
+    ('ES', _(u'Spanish')),
+    ('LK', _(u'Sri Lankan')),
+    ('SD', _(u'Sudanese')),
+    ('SR', _(u'Surinamese')),
+    ('SZ', _(u'Swazi')),
+    ('SE', _(u'Swedish')),
+    ('CH', _(u'Swiss')),
+    ('SY', _(u'Syrian')),
+    ('TW', _(u'Taiwanese')),
+    ('TJ', _(u'Tadjik')),
+    ('TZ', _(u'Tanzanian')),
+    ('TH', _(u'Thai')),
+    ('TG', _(u'Togolese')),
+    ('TT', _(u'Trinidadian')),
+    ('TN', _(u'Tunisian')),
+    ('TR', _(u'Turkish')),
+    ('TM', _(u'Turkmen')),
+    ('TV', _(u'Tuvaluan')),
+    ('UG', _(u'Ugandan')),
+    ('UA', _(u'Ukrainian')),
+    ('UY', _(u'Uruguayan')),
+    ('UZ', _(u'Uzbek')),
+    ('VU', _(u'Vanuatuan')),
+    ('VE', _(u'Venezuelan')),
+    ('VN', _(u'Vietnamese')),
+    ('GB', _(u'Welsh')),
+    ('YE', _(u'Yemeni')),
+    ('ZM', _(u'Zambian')),
+    ('ZW', _(u'Zimbabwean')),
+)
diff --git a/app/organization/network/tests.py b/app/organization/network/tests.py
new file mode 100644 (file)
index 0000000..7ce503c
--- /dev/null
@@ -0,0 +1,3 @@
+from django.test import TestCase
+
+# Create your tests here.
diff --git a/app/organization/network/translation.py b/app/organization/network/translation.py
new file mode 100644 (file)
index 0000000..8a31006
--- /dev/null
@@ -0,0 +1,49 @@
+from modeltranslation.translator import translator, register, TranslationOptions
+
+from organization.network.models import *
+
+
+@register(Organization)
+class OrganizationTranslationOptions(TranslationOptions):
+
+    fields = ('description',)
+
+
+@register(Department)
+class DepartmentTranslationOptions(TranslationOptions):
+
+    fields = ('name', 'description')
+
+@register(Team)
+class TeamTranslationOptions(TranslationOptions):
+
+    fields = ('name', 'description')
+
+
+@register(DepartmentPage)
+class DepartmentTranslationOptions(TranslationOptions):
+
+    fields = ('sub_title', 'content',)
+
+@register(TeamPage)
+class TeamTranslationOptions(TranslationOptions):
+
+    fields = ('sub_title', 'content',)
+
+
+@register(Person)
+class PersonTranslationOptions(TranslationOptions):
+
+    fields = ('bio',)
+
+
+@register(PersonActivity)
+class PersonActivityTranslationOptions(TranslationOptions):
+
+    fields = ('description', 'content')
+
+
+@register(PersonLink)
+class PersonTranslationOptions(TranslationOptions):
+
+    pass
diff --git a/app/organization/network/urls.py b/app/organization/network/urls.py
new file mode 100644 (file)
index 0000000..bd52ca9
--- /dev/null
@@ -0,0 +1,15 @@
+from __future__ import unicode_literals
+
+import django.views.i18n
+from django.conf.urls import patterns, include, url
+from django.conf.urls.i18n import i18n_patterns
+
+from mezzanine.core.views import direct_to_template
+from mezzanine.conf import settings
+
+from organization.network.views import *
+
+
+urlpatterns = [
+    url(r'^(?P<department>.*)/teams/$', TeamListView.as_view(), name="organization-network-team-list"),
+]
diff --git a/app/organization/network/views.py b/app/organization/network/views.py
new file mode 100644 (file)
index 0000000..bc01c20
--- /dev/null
@@ -0,0 +1,61 @@
+from django.shortcuts import render
+
+from organization.network.models import *
+from organization.core.views import *
+
+
+class DepartmentListView(ListView):
+
+    model = Department
+    template_name='team/department_list.html'
+
+
+class DepartmentDetailView(SlugMixin, DetailView):
+
+    model = Department
+    template_name='team/department_detail.html'
+    context_object_name = 'department'
+
+
+class TeamListView(ListView):
+
+    model = Team
+    template_name='team/team_list.html'
+
+
+class TeamDetailView(SlugMixin, DetailView):
+
+    model = Team
+    template_name='team/team_detail.html'
+    context_object_name = 'team'
+
+    def get_context_data(self, **kwargs):
+        context = super(TeamListView, self).get_context_data(**kwargs)
+        partners = []
+
+        for partner in self.object.partner_organizations:
+            partners.append(partner)
+        for partner in self.object.partner_teams:
+            partners.append(partner)
+
+        for project in team.project_leader.all():
+            for partner in project.partner_organizations:
+                partners.append(partner)
+            for partner in project.partner_teams:
+                partners.append(partner)
+
+        context['partners'] = partners
+        return context
+
+
+class PersonListView(ListView):
+
+    model = Person
+    template_name='team/person_list.html'
+
+
+class PersonDetailView(SlugMixin, DetailView):
+
+    model = Person
+    template_name='team/person_detail.html'
+    context_object_name = 'person'
diff --git a/app/organization/project/__init__.py b/app/organization/project/__init__.py
deleted file mode 100644 (file)
index 0358620..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-"""
-Provides abstract models and admin features used throughout the various
-Mezzanine apps.
-"""
-from __future__ import unicode_literals
-
-from mezzanine import __version__  # noqa
-
-
-default_app_config = 'organization.project.apps.ProjectConfig'
diff --git a/app/organization/project/admin.py b/app/organization/project/admin.py
deleted file mode 100644 (file)
index 89f9c40..0000000
+++ /dev/null
@@ -1,38 +0,0 @@
-from copy import deepcopy
-
-from django.contrib import admin
-from django.utils.translation import ugettext_lazy as _
-
-from mezzanine.core.admin import *
-
-from organization.project.models import *
-
-
-class ProjectLinkInline(StackedDynamicInlineAdmin):
-
-    model = ProjectLink
-
-
-class ProjectImageInline(TabularDynamicInlineAdmin):
-
-    model = ProjectImage
-
-
-class ProjectBlockInline(StackedDynamicInlineAdmin):
-
-    model = ProjectBlock
-
-
-class ProjectAdmin(admin.ModelAdmin):
-
-    model = Project
-
-
-class ProjectAdminDisplayable(DisplayableAdmin):
-
-    fieldsets = deepcopy(ProjectAdmin.fieldsets)
-    inlines = [ProjectImageInline, ProjectBlockInline, ProjectLinkInline, ]
-    filter_horizontal = ['persons', 'teams', 'organizations']
-    
-
-admin.site.register(Project, ProjectAdminDisplayable)
diff --git a/app/organization/project/apps.py b/app/organization/project/apps.py
deleted file mode 100644 (file)
index 95f7c46..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-from __future__ import unicode_literals
-
-from django.apps import AppConfig
-
-
-class ProjectConfig(AppConfig):
-
-    name = 'organization.project'
-    label = 'organization-project'
diff --git a/app/organization/project/migrations/0001_initial.py b/app/organization/project/migrations/0001_initial.py
deleted file mode 100644 (file)
index 27b6048..0000000
+++ /dev/null
@@ -1,52 +0,0 @@
-# -*- coding: utf-8 -*-
-# Generated by Django 1.9.7 on 2016-07-14 16:54
-from __future__ import unicode_literals
-
-from django.db import migrations, models
-import django.db.models.deletion
-import mezzanine.core.fields
-
-
-class Migration(migrations.Migration):
-
-    initial = True
-
-    dependencies = [
-        ('organization-team', '__first__'),
-        ('sites', '0002_alter_domain_unique'),
-    ]
-
-    operations = [
-        migrations.CreateModel(
-            name='Project',
-            fields=[
-                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
-                ('keywords_string', models.CharField(blank=True, editable=False, max_length=500)),
-                ('title', models.CharField(max_length=500, verbose_name='Title')),
-                ('title_fr', models.CharField(max_length=500, null=True, verbose_name='Title')),
-                ('title_en', models.CharField(max_length=500, null=True, verbose_name='Title')),
-                ('slug', models.CharField(blank=True, help_text='Leave blank to have the URL auto-generated from the title.', max_length=2000, null=True, verbose_name='URL')),
-                ('_meta_title', models.CharField(blank=True, help_text='Optional title to be used in the HTML title tag. If left blank, the main title field will be used.', max_length=500, null=True, verbose_name='Title')),
-                ('description', models.TextField(blank=True, verbose_name='Description')),
-                ('description_fr', models.TextField(blank=True, null=True, verbose_name='Description')),
-                ('description_en', models.TextField(blank=True, null=True, verbose_name='Description')),
-                ('gen_description', models.BooleanField(default=True, help_text='If checked, the description will be automatically generated from content. Uncheck if you want to manually set a custom description.', verbose_name='Generate description')),
-                ('created', models.DateTimeField(editable=False, null=True)),
-                ('updated', models.DateTimeField(editable=False, null=True)),
-                ('status', models.IntegerField(choices=[(1, 'Draft'), (2, 'Published')], default=2, help_text='With Draft chosen, will only be shown for admin users on the site.', verbose_name='Status')),
-                ('publish_date', models.DateTimeField(blank=True, db_index=True, help_text="With Published chosen, won't be shown until this time", null=True, verbose_name='Published from')),
-                ('expiry_date', models.DateTimeField(blank=True, help_text="With Published chosen, won't be shown after this time", null=True, verbose_name='Expires on')),
-                ('short_url', models.URLField(blank=True, null=True)),
-                ('in_sitemap', models.BooleanField(default=True, verbose_name='Show in sitemap')),
-                ('content', mezzanine.core.fields.RichTextField(verbose_name='Content')),
-                ('content_fr', mezzanine.core.fields.RichTextField(null=True, verbose_name='Content')),
-                ('content_en', mezzanine.core.fields.RichTextField(null=True, verbose_name='Content')),
-                ('partners', models.ManyToManyField(to='organization-team.Organization', verbose_name='organizations')),
-                ('persons', models.ManyToManyField(to='organization-team.Person', verbose_name='persons')),
-                ('site', models.ForeignKey(editable=False, on_delete=django.db.models.deletion.CASCADE, to='sites.Site')),
-            ],
-            options={
-                'abstract': False,
-            },
-        ),
-    ]
diff --git a/app/organization/project/migrations/0002_auto_20160715_1807.py b/app/organization/project/migrations/0002_auto_20160715_1807.py
deleted file mode 100644 (file)
index c1f563e..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
-# -*- coding: utf-8 -*-
-# Generated by Django 1.9.7 on 2016-07-15 16:07
-from __future__ import unicode_literals
-
-from django.db import migrations, models
-import django.db.models.deletion
-
-
-class Migration(migrations.Migration):
-
-    dependencies = [
-        ('organization-team', '0004_auto_20160715_1807'),
-        ('organization-project', '0001_initial'),
-    ]
-
-    operations = [
-        migrations.RemoveField(
-            model_name='project',
-            name='partners',
-        ),
-        migrations.RemoveField(
-            model_name='project',
-            name='persons',
-        ),
-        migrations.AddField(
-            model_name='project',
-            name='leader_team',
-            field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='project_leader', to='organization-team.Team', verbose_name='lead team'),
-        ),
-        migrations.AddField(
-            model_name='project',
-            name='partner_organizations',
-            field=models.ManyToManyField(blank=True, to='organization-team.Organization', verbose_name='partner organizations'),
-        ),
-        migrations.AddField(
-            model_name='project',
-            name='partner_persons',
-            field=models.ManyToManyField(blank=True, to='organization-team.Person', verbose_name='partner persons'),
-        ),
-        migrations.AddField(
-            model_name='project',
-            name='partner_teams',
-            field=models.ManyToManyField(blank=True, related_name='project_partners', to='organization-team.Team', verbose_name='partner teams'),
-        ),
-    ]
diff --git a/app/organization/project/migrations/0003_auto_20160808_0118.py b/app/organization/project/migrations/0003_auto_20160808_0118.py
deleted file mode 100644 (file)
index 1838ed6..0000000
+++ /dev/null
@@ -1,80 +0,0 @@
-# -*- coding: utf-8 -*-
-# Generated by Django 1.9.7 on 2016-08-07 23:18
-from __future__ import unicode_literals
-
-from django.db import migrations, models
-import django.db.models.deletion
-import mezzanine.core.fields
-
-
-class Migration(migrations.Migration):
-
-    dependencies = [
-        ('organization-core', '0010_auto_20160808_0118'),
-        ('organization-project', '0002_auto_20160715_1807'),
-    ]
-
-    operations = [
-        migrations.CreateModel(
-            name='ProjectBlock',
-            fields=[
-                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
-                ('content', mezzanine.core.fields.RichTextField(verbose_name='Content')),
-                ('title', models.CharField(max_length=1024, verbose_name='title')),
-                ('with_separator', models.BooleanField(default=False)),
-                ('background_color', models.CharField(blank=True, choices=[('black', 'black'), ('yellow', 'yellow'), ('red', 'red')], max_length=32, verbose_name='background color')),
-            ],
-            options={
-                'verbose_name': 'project block',
-            },
-        ),
-        migrations.CreateModel(
-            name='ProjectImage',
-            fields=[
-                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
-                ('_order', mezzanine.core.fields.OrderField(null=True, verbose_name='Order')),
-                ('file', mezzanine.core.fields.FileField(max_length=1024, verbose_name='Image')),
-                ('description', models.TextField(blank=True, verbose_name='photo description')),
-                ('credits', models.CharField(blank=True, max_length=256, null=True, verbose_name='photo credits')),
-            ],
-            options={
-                'ordering': ('_order',),
-                'verbose_name': 'project image',
-            },
-        ),
-        migrations.CreateModel(
-            name='ProjectLink',
-            fields=[
-                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
-                ('url', models.URLField(verbose_name='URL')),
-                ('link_type', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='organization-core.LinkType', verbose_name='link type')),
-            ],
-            options={
-                'verbose_name': 'project link',
-            },
-        ),
-        migrations.AlterModelOptions(
-            name='project',
-            options={'verbose_name': 'project'},
-        ),
-        migrations.AddField(
-            model_name='project',
-            name='website',
-            field=models.URLField(blank=True, max_length=512, verbose_name='website'),
-        ),
-        migrations.AddField(
-            model_name='projectlink',
-            name='project',
-            field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='organization-project.Project'),
-        ),
-        migrations.AddField(
-            model_name='projectimage',
-            name='project',
-            field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='organization-project.Project'),
-        ),
-        migrations.AddField(
-            model_name='projectblock',
-            name='project',
-            field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='organization-project.Project', verbose_name='project'),
-        ),
-    ]
diff --git a/app/organization/project/migrations/0004_auto_20160809_1413.py b/app/organization/project/migrations/0004_auto_20160809_1413.py
deleted file mode 100644 (file)
index 3863030..0000000
+++ /dev/null
@@ -1,84 +0,0 @@
-# -*- coding: utf-8 -*-
-# Generated by Django 1.9.7 on 2016-08-09 12:13
-from __future__ import unicode_literals
-
-from django.db import migrations, models
-import django.db.models.deletion
-import mezzanine.core.fields
-
-
-class Migration(migrations.Migration):
-
-    dependencies = [
-        ('organization-project', '0003_auto_20160808_0118'),
-    ]
-
-    operations = [
-        migrations.AlterModelOptions(
-            name='projectblock',
-            options={},
-        ),
-        migrations.AlterModelOptions(
-            name='projectimage',
-            options={'ordering': ('_order',)},
-        ),
-        migrations.AlterModelOptions(
-            name='projectlink',
-            options={'verbose_name': 'link', 'verbose_name_plural': 'links'},
-        ),
-        migrations.AddField(
-            model_name='projectblock',
-            name='content_en',
-            field=mezzanine.core.fields.RichTextField(null=True, verbose_name='Content'),
-        ),
-        migrations.AddField(
-            model_name='projectblock',
-            name='content_fr',
-            field=mezzanine.core.fields.RichTextField(null=True, verbose_name='Content'),
-        ),
-        migrations.AddField(
-            model_name='projectblock',
-            name='title_en',
-            field=models.CharField(max_length=1024, null=True, verbose_name='title'),
-        ),
-        migrations.AddField(
-            model_name='projectblock',
-            name='title_fr',
-            field=models.CharField(max_length=1024, null=True, verbose_name='title'),
-        ),
-        migrations.AddField(
-            model_name='projectimage',
-            name='description_en',
-            field=models.TextField(blank=True, null=True, verbose_name='description'),
-        ),
-        migrations.AddField(
-            model_name='projectimage',
-            name='description_fr',
-            field=models.TextField(blank=True, null=True, verbose_name='description'),
-        ),
-        migrations.AlterField(
-            model_name='projectblock',
-            name='project',
-            field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='blocks', to='organization-project.Project', verbose_name='project'),
-        ),
-        migrations.AlterField(
-            model_name='projectimage',
-            name='credits',
-            field=models.CharField(blank=True, max_length=256, null=True, verbose_name='credits'),
-        ),
-        migrations.AlterField(
-            model_name='projectimage',
-            name='description',
-            field=models.TextField(blank=True, verbose_name='description'),
-        ),
-        migrations.AlterField(
-            model_name='projectimage',
-            name='project',
-            field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='images', to='organization-project.Project'),
-        ),
-        migrations.AlterField(
-            model_name='projectlink',
-            name='project',
-            field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='links', to='organization-project.Project'),
-        ),
-    ]
diff --git a/app/organization/project/migrations/0005_auto_20160818_1539.py b/app/organization/project/migrations/0005_auto_20160818_1539.py
deleted file mode 100644 (file)
index b7de17f..0000000
+++ /dev/null
@@ -1,53 +0,0 @@
-# -*- coding: utf-8 -*-
-# Generated by Django 1.9.7 on 2016-08-18 13:39
-from __future__ import unicode_literals
-
-from django.db import migrations, models
-import django.db.models.deletion
-
-
-class Migration(migrations.Migration):
-
-    dependencies = [
-        ('organization-team', '0016_auto_20160812_1521'),
-        ('organization-project', '0004_auto_20160809_1413'),
-    ]
-
-    operations = [
-        migrations.RemoveField(
-            model_name='project',
-            name='leader_team',
-        ),
-        migrations.RemoveField(
-            model_name='project',
-            name='partner_organizations',
-        ),
-        migrations.RemoveField(
-            model_name='project',
-            name='partner_persons',
-        ),
-        migrations.RemoveField(
-            model_name='project',
-            name='partner_teams',
-        ),
-        migrations.AddField(
-            model_name='project',
-            name='lead_team',
-            field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='leader_projects', to='organization-team.Team', verbose_name='lead team'),
-        ),
-        migrations.AddField(
-            model_name='project',
-            name='organizations',
-            field=models.ManyToManyField(blank=True, to='organization-team.Organization', verbose_name='organizations'),
-        ),
-        migrations.AddField(
-            model_name='project',
-            name='persons',
-            field=models.ManyToManyField(blank=True, to='organization-team.Person', verbose_name='persons'),
-        ),
-        migrations.AddField(
-            model_name='project',
-            name='teams',
-            field=models.ManyToManyField(blank=True, related_name='patner_projects', to='organization-team.Team', verbose_name='teams'),
-        ),
-    ]
diff --git a/app/organization/project/migrations/0006_auto_20160818_1656.py b/app/organization/project/migrations/0006_auto_20160818_1656.py
deleted file mode 100644 (file)
index 5182c62..0000000
+++ /dev/null
@@ -1,25 +0,0 @@
-# -*- coding: utf-8 -*-
-# Generated by Django 1.9.7 on 2016-08-18 14:56
-from __future__ import unicode_literals
-
-from django.db import migrations
-import mezzanine.core.fields
-
-
-class Migration(migrations.Migration):
-
-    dependencies = [
-        ('organization-project', '0005_auto_20160818_1539'),
-    ]
-
-    operations = [
-        migrations.AlterModelOptions(
-            name='projectblock',
-            options={'ordering': ('_order',)},
-        ),
-        migrations.AddField(
-            model_name='projectblock',
-            name='_order',
-            field=mezzanine.core.fields.OrderField(null=True, verbose_name='Order'),
-        ),
-    ]
diff --git a/app/organization/project/migrations/0007_auto_20160819_1920.py b/app/organization/project/migrations/0007_auto_20160819_1920.py
deleted file mode 100644 (file)
index 22cb41c..0000000
+++ /dev/null
@@ -1,25 +0,0 @@
-# -*- coding: utf-8 -*-
-# Generated by Django 1.9.7 on 2016-08-19 17:20
-from __future__ import unicode_literals
-
-from django.db import migrations, models
-
-
-class Migration(migrations.Migration):
-
-    dependencies = [
-        ('organization-project', '0006_auto_20160818_1656'),
-    ]
-
-    operations = [
-        migrations.AddField(
-            model_name='project',
-            name='date_begin',
-            field=models.DateField(blank=True, null=True, verbose_name='begin date'),
-        ),
-        migrations.AddField(
-            model_name='project',
-            name='date_end',
-            field=models.DateField(blank=True, null=True, verbose_name='end date'),
-        ),
-    ]
diff --git a/app/organization/project/migrations/__init__.py b/app/organization/project/migrations/__init__.py
deleted file mode 100644 (file)
index e69de29..0000000
diff --git a/app/organization/project/models.py b/app/organization/project/models.py
deleted file mode 100644 (file)
index c0e4d6e..0000000
+++ /dev/null
@@ -1,42 +0,0 @@
-from __future__ import unicode_literals
-
-from django.db import models
-from django.utils.translation import ugettext_lazy as _
-
-from mezzanine.core.models import RichText, Displayable, Slugged, Orderable
-
-from organization.core.models import *
-
-
-class Project(Displayable, Period, RichText):
-    """(Project description)"""
-
-    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:
-        verbose_name = _('project')
-
-    def __str__(self):
-        return self.title
-
-    def get_absolute_url(self):
-        return reverse("organization-project-detail", kwargs={"slug": self.slug})
-
-
-class ProjectBlock(Block):
-
-    project = models.ForeignKey(Project, verbose_name=_('project'), related_name='blocks', blank=True, null=True, on_delete=models.SET_NULL)
-
-
-class ProjectImage(Image):
-
-    project = models.ForeignKey(Project, related_name='images')
-
-
-class ProjectLink(Link):
-
-    project = models.ForeignKey(Project, related_name='links')
diff --git a/app/organization/project/tests.py b/app/organization/project/tests.py
deleted file mode 100644 (file)
index 7ce503c..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-from django.test import TestCase
-
-# Create your tests here.
diff --git a/app/organization/project/translation.py b/app/organization/project/translation.py
deleted file mode 100644 (file)
index cb835d1..0000000
+++ /dev/null
@@ -1,26 +0,0 @@
-from modeltranslation.translator import translator, register, TranslationOptions
-
-from organization.project.models import *
-
-
-@register(Project)
-class ProjectTranslationOptions(TranslationOptions):
-
-    fields = ('title', 'description', 'content')
-
-
-@register(ProjectImage)
-class ProjectImageTranslationOptions(TranslationOptions):
-
-    fields = ('description',)
-
-
-@register(ProjectLink)
-class ProjectLinkTranslationOptions(TranslationOptions):
-    pass
-
-
-@register(ProjectBlock)
-class ProjectBlockTranslationOptions(TranslationOptions):
-
-    fields = ('title', 'content', )
diff --git a/app/organization/project/urls.py b/app/organization/project/urls.py
deleted file mode 100644 (file)
index 0ccbd11..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-from __future__ import unicode_literals
-
-import django.views.i18n
-from django.conf.urls import patterns, include, url
-from django.conf.urls.i18n import i18n_patterns
-
-from mezzanine.core.views import direct_to_template
-from mezzanine.conf import settings
-
-from organization.project.views import *
-
-urlpatterns = [
-    url("^project/detail/(?P<slug>.*)/$", ProjectDetailView.as_view(), name='organization-project-detail'),
-]
diff --git a/app/organization/project/views.py b/app/organization/project/views.py
deleted file mode 100644 (file)
index 73898ff..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-from django.shortcuts import render
-
-from organization.project.models import *
-from organization.core.views import *
-
-
-class ProjectListView(ListView):
-
-    model = Project
-    template_name='project/project_list.html'
-
-
-class ProjectDetailView(SlugMixin, DetailView):
-
-    model = Project
-    template_name='project/project_detail.html'
-    context_object_name = 'project'
diff --git a/app/organization/projects/__init__.py b/app/organization/projects/__init__.py
new file mode 100644 (file)
index 0000000..346037a
--- /dev/null
@@ -0,0 +1,10 @@
+"""
+Provides abstract models and admin features used throughout the various
+Mezzanine apps.
+"""
+from __future__ import unicode_literals
+
+from mezzanine import __version__  # noqa
+
+
+default_app_config = 'organization.projects.apps.ProjectsConfig'
diff --git a/app/organization/projects/admin.py b/app/organization/projects/admin.py
new file mode 100644 (file)
index 0000000..890604b
--- /dev/null
@@ -0,0 +1,38 @@
+from copy import deepcopy
+
+from django.contrib import admin
+from django.utils.translation import ugettext_lazy as _
+
+from mezzanine.core.admin import *
+
+from organization.projects.models import *
+
+
+class ProjectLinkInline(StackedDynamicInlineAdmin):
+
+    model = ProjectLink
+
+
+class ProjectImageInline(TabularDynamicInlineAdmin):
+
+    model = ProjectImage
+
+
+class ProjectBlockInline(StackedDynamicInlineAdmin):
+
+    model = ProjectBlock
+
+
+class ProjectAdmin(admin.ModelAdmin):
+
+    model = Project
+
+
+class ProjectAdminDisplayable(DisplayableAdmin):
+
+    fieldsets = deepcopy(ProjectAdmin.fieldsets)
+    inlines = [ProjectImageInline, ProjectBlockInline, ProjectLinkInline, ]
+    filter_horizontal = ['persons', 'teams', 'organizations']
+
+
+admin.site.register(Project, ProjectAdminDisplayable)
diff --git a/app/organization/projects/apps.py b/app/organization/projects/apps.py
new file mode 100644 (file)
index 0000000..55e9eac
--- /dev/null
@@ -0,0 +1,9 @@
+from __future__ import unicode_literals
+
+from django.apps import AppConfig
+
+
+class ProjectsConfig(AppConfig):
+
+    name = 'organization.projects'
+    label = 'organization-projects'
diff --git a/app/organization/projects/migrations/0001_initial.py b/app/organization/projects/migrations/0001_initial.py
new file mode 100644 (file)
index 0000000..e0503a1
--- /dev/null
@@ -0,0 +1,108 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.9.7 on 2016-08-23 12:25
+from __future__ import unicode_literals
+
+from django.db import migrations, models
+import django.db.models.deletion
+import mezzanine.core.fields
+
+
+class Migration(migrations.Migration):
+
+    initial = True
+
+    dependencies = [
+        ('organization-network', '0001_initial'),
+        ('sites', '0002_alter_domain_unique'),
+        ('organization-core', '0013_auto_20160823_1359'),
+    ]
+
+    operations = [
+        migrations.CreateModel(
+            name='Project',
+            fields=[
+                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+                ('keywords_string', models.CharField(blank=True, editable=False, max_length=500)),
+                ('title', models.CharField(max_length=500, verbose_name='Title')),
+                ('title_fr', models.CharField(max_length=500, null=True, verbose_name='Title')),
+                ('title_en', models.CharField(max_length=500, null=True, verbose_name='Title')),
+                ('slug', models.CharField(blank=True, help_text='Leave blank to have the URL auto-generated from the title.', max_length=2000, null=True, verbose_name='URL')),
+                ('_meta_title', models.CharField(blank=True, help_text='Optional title to be used in the HTML title tag. If left blank, the main title field will be used.', max_length=500, null=True, verbose_name='Title')),
+                ('description', models.TextField(blank=True, verbose_name='Description')),
+                ('description_fr', models.TextField(blank=True, null=True, verbose_name='Description')),
+                ('description_en', models.TextField(blank=True, null=True, verbose_name='Description')),
+                ('gen_description', models.BooleanField(default=True, help_text='If checked, the description will be automatically generated from content. Uncheck if you want to manually set a custom description.', verbose_name='Generate description')),
+                ('created', models.DateTimeField(editable=False, null=True)),
+                ('updated', models.DateTimeField(editable=False, null=True)),
+                ('status', models.IntegerField(choices=[(1, 'Draft'), (2, 'Published')], default=2, help_text='With Draft chosen, will only be shown for admin users on the site.', verbose_name='Status')),
+                ('publish_date', models.DateTimeField(blank=True, db_index=True, help_text="With Published chosen, won't be shown until this time", null=True, verbose_name='Published from')),
+                ('expiry_date', models.DateTimeField(blank=True, help_text="With Published chosen, won't be shown after this time", null=True, verbose_name='Expires on')),
+                ('short_url', models.URLField(blank=True, null=True)),
+                ('in_sitemap', models.BooleanField(default=True, verbose_name='Show in sitemap')),
+                ('content', mezzanine.core.fields.RichTextField(verbose_name='Content')),
+                ('content_fr', mezzanine.core.fields.RichTextField(null=True, verbose_name='Content')),
+                ('content_en', mezzanine.core.fields.RichTextField(null=True, verbose_name='Content')),
+                ('date_begin', models.DateField(blank=True, null=True, verbose_name='begin date')),
+                ('date_end', models.DateField(blank=True, null=True, verbose_name='end date')),
+                ('website', models.URLField(blank=True, max_length=512, verbose_name='website')),
+                ('lead_team', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='leader_projects', to='organization-network.Team', verbose_name='lead team')),
+                ('organizations', models.ManyToManyField(blank=True, to='organization-network.Organization', verbose_name='organizations')),
+                ('persons', models.ManyToManyField(blank=True, to='organization-network.Person', verbose_name='persons')),
+                ('site', models.ForeignKey(editable=False, on_delete=django.db.models.deletion.CASCADE, to='sites.Site')),
+                ('teams', models.ManyToManyField(blank=True, related_name='patner_projects', to='organization-network.Team', verbose_name='teams')),
+            ],
+            options={
+                'verbose_name': 'project',
+            },
+        ),
+        migrations.CreateModel(
+            name='ProjectBlock',
+            fields=[
+                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+                ('content', mezzanine.core.fields.RichTextField(verbose_name='Content')),
+                ('content_fr', mezzanine.core.fields.RichTextField(null=True, verbose_name='Content')),
+                ('content_en', mezzanine.core.fields.RichTextField(null=True, verbose_name='Content')),
+                ('_order', mezzanine.core.fields.OrderField(null=True, verbose_name='Order')),
+                ('title', models.CharField(max_length=1024, verbose_name='title')),
+                ('title_fr', models.CharField(max_length=1024, null=True, verbose_name='title')),
+                ('title_en', models.CharField(max_length=1024, null=True, verbose_name='title')),
+                ('description', models.TextField(blank=True, verbose_name='description')),
+                ('with_separator', models.BooleanField(default=False)),
+                ('background_color', models.CharField(blank=True, choices=[('black', 'black'), ('yellow', 'yellow'), ('red', 'red')], max_length=32, verbose_name='background color')),
+                ('project', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='blocks', to='organization-projects.Project', verbose_name='project')),
+            ],
+            options={
+                'ordering': ('_order',),
+            },
+        ),
+        migrations.CreateModel(
+            name='ProjectImage',
+            fields=[
+                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+                ('_order', mezzanine.core.fields.OrderField(null=True, verbose_name='Order')),
+                ('description', models.TextField(blank=True, verbose_name='description')),
+                ('description_fr', models.TextField(blank=True, null=True, verbose_name='description')),
+                ('description_en', models.TextField(blank=True, null=True, verbose_name='description')),
+                ('file', mezzanine.core.fields.FileField(max_length=1024, verbose_name='Image')),
+                ('credits', models.CharField(blank=True, max_length=256, null=True, verbose_name='credits')),
+                ('project', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='images', to='organization-projects.Project')),
+            ],
+            options={
+                'ordering': ('_order',),
+            },
+        ),
+        migrations.CreateModel(
+            name='ProjectLink',
+            fields=[
+                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+                ('url', models.URLField(verbose_name='URL')),
+                ('link_type', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='organization-core.LinkType', verbose_name='link type')),
+                ('project', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='links', to='organization-projects.Project')),
+            ],
+            options={
+                'verbose_name_plural': 'links',
+                'abstract': False,
+                'verbose_name': 'link',
+            },
+        ),
+    ]
diff --git a/app/organization/projects/migrations/__init__.py b/app/organization/projects/migrations/__init__.py
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/app/organization/projects/models.py b/app/organization/projects/models.py
new file mode 100644 (file)
index 0000000..3682664
--- /dev/null
@@ -0,0 +1,42 @@
+from __future__ import unicode_literals
+
+from django.db import models
+from django.utils.translation import ugettext_lazy as _
+
+from mezzanine.core.models import RichText, Displayable, Slugged, Orderable
+
+from organization.core.models import *
+
+
+class Project(Displayable, Period, RichText):
+    """(Project description)"""
+
+    lead_team = models.ForeignKey('organization-network.Team', verbose_name=_('lead team'), related_name='leader_projects', blank=True, null=True)
+    persons = models.ManyToManyField('organization-network.Person', verbose_name=_('persons'), blank=True)
+    teams = models.ManyToManyField('organization-network.Team', verbose_name=_('teams'), related_name='patner_projects', blank=True)
+    organizations = models.ManyToManyField('organization-network.Organization', verbose_name=_('organizations'), blank=True)
+    website = models.URLField(_('website'), max_length=512, blank=True)
+
+    class Meta:
+        verbose_name = _('project')
+
+    def __str__(self):
+        return self.title
+
+    def get_absolute_url(self):
+        return reverse("organization-project-detail", kwargs={"slug": self.slug})
+
+
+class ProjectBlock(Block):
+
+    project = models.ForeignKey(Project, verbose_name=_('project'), related_name='blocks', blank=True, null=True, on_delete=models.SET_NULL)
+
+
+class ProjectImage(Image):
+
+    project = models.ForeignKey(Project, related_name='images')
+
+
+class ProjectLink(Link):
+
+    project = models.ForeignKey(Project, related_name='links')
diff --git a/app/organization/projects/tests.py b/app/organization/projects/tests.py
new file mode 100644 (file)
index 0000000..7ce503c
--- /dev/null
@@ -0,0 +1,3 @@
+from django.test import TestCase
+
+# Create your tests here.
diff --git a/app/organization/projects/translation.py b/app/organization/projects/translation.py
new file mode 100644 (file)
index 0000000..b5bc433
--- /dev/null
@@ -0,0 +1,26 @@
+from modeltranslation.translator import translator, register, TranslationOptions
+
+from organization.projects.models import *
+
+
+@register(Project)
+class ProjectTranslationOptions(TranslationOptions):
+
+    fields = ('title', 'description', 'content')
+
+
+@register(ProjectImage)
+class ProjectImageTranslationOptions(TranslationOptions):
+
+    fields = ('description',)
+
+
+@register(ProjectLink)
+class ProjectLinkTranslationOptions(TranslationOptions):
+    pass
+
+
+@register(ProjectBlock)
+class ProjectBlockTranslationOptions(TranslationOptions):
+
+    fields = ('title', 'content', )
diff --git a/app/organization/projects/urls.py b/app/organization/projects/urls.py
new file mode 100644 (file)
index 0000000..b1aad88
--- /dev/null
@@ -0,0 +1,14 @@
+from __future__ import unicode_literals
+
+import django.views.i18n
+from django.conf.urls import patterns, include, url
+from django.conf.urls.i18n import i18n_patterns
+
+from mezzanine.core.views import direct_to_template
+from mezzanine.conf import settings
+
+from organization.projects.views import *
+
+urlpatterns = [
+    url("^project/detail/(?P<slug>.*)/$", ProjectDetailView.as_view(), name='organization-projects-project-detail'),
+]
diff --git a/app/organization/projects/views.py b/app/organization/projects/views.py
new file mode 100644 (file)
index 0000000..4a43447
--- /dev/null
@@ -0,0 +1,17 @@
+from django.shortcuts import render
+
+from organization.projects.models import *
+from organization.core.views import *
+
+
+class ProjectListView(ListView):
+
+    model = Project
+    template_name='project/project_list.html'
+
+
+class ProjectDetailView(SlugMixin, DetailView):
+
+    model = Project
+    template_name='project/project_detail.html'
+    context_object_name = 'project'
diff --git a/app/organization/team/__init__.py b/app/organization/team/__init__.py
deleted file mode 100644 (file)
index 2de9352..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-"""
-Provides abstract models and admin features used throughout the various
-Mezzanine apps.
-"""
-from __future__ import unicode_literals
-
-from mezzanine import __version__  # noqa
-
-
-default_app_config = 'organization.team.apps.teamConfig'
diff --git a/app/organization/team/admin.py b/app/organization/team/admin.py
deleted file mode 100644 (file)
index ad76406..0000000
+++ /dev/null
@@ -1,60 +0,0 @@
-from django.contrib import admin
-from django import forms
-from copy import deepcopy
-from mezzanine.core.admin import *
-from mezzanine.pages.admin import PageAdmin
-
-from organization.team.models import *
-from organization.core.admin import *
-
-
-class OrganizationAdmin(BaseTranslationModelAdmin):
-
-    model = Organization
-
-
-class PersonActivityInline(StackedDynamicInlineAdmin):
-
-    model = PersonActivity
-    fk_name = 'person'
-
-
-class TeamAdmin(PageAdmin):
-
-    inlines = [PageBlockInline, PageImageInline]
-
-
-class DepartmentAdmin(PageAdmin):
-
-    inlines = [PageBlockInline, PageImageInline]
-
-
-class PersonAdminBase(admin.ModelAdmin):
-
-    model = Person
-
-
-class PersonLinkInline(StackedDynamicInlineAdmin):
-
-    model = PersonLink
-
-
-class PersonAdmin(BaseTranslationModelAdmin):
-
-    model = Person
-    inlines = [PersonActivityInline, PersonLinkInline, ]
-    first_fields = ['last_name', 'first_name', 'title', 'gender', 'user']
-
-    def get_fieldsets(self, request, obj = None):
-        res = super(PersonAdmin, self).get_fieldsets(request, obj)
-        for field in reversed(self.first_fields):
-            index = res[0][1]['fields'].index(field)
-            res[0][1]['fields'].insert(0, res[0][1]['fields'].pop(index))
-        return res
-
-
-admin.site.register(Organization, OrganizationAdmin)
-admin.site.register(OrganizationType)
-admin.site.register(Department, DepartmentAdmin)
-# admin.site.register(Team, TeamAdmin)
-admin.site.register(Person, PersonAdmin)
diff --git a/app/organization/team/apps.py b/app/organization/team/apps.py
deleted file mode 100644 (file)
index 38c4521..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-from __future__ import unicode_literals
-
-from django.apps import AppConfig
-
-
-class teamConfig(AppConfig):
-
-    name = 'organization.team'
-    label  = 'organization-team'
diff --git a/app/organization/team/migrations/0001_initial.py b/app/organization/team/migrations/0001_initial.py
deleted file mode 100644 (file)
index 2a2dac6..0000000
+++ /dev/null
@@ -1,208 +0,0 @@
-# -*- coding: utf-8 -*-
-# Generated by Django 1.9.7 on 2016-07-14 16:55
-from __future__ import unicode_literals
-
-from django.conf import settings
-from django.db import migrations, models
-import django.db.models.deletion
-import django_countries.fields
-import mezzanine.core.fields
-import mezzanine.utils.models
-
-
-class Migration(migrations.Migration):
-
-    initial = True
-
-    dependencies = [
-        migrations.swappable_dependency(settings.AUTH_USER_MODEL),
-        ('sites', '0002_alter_domain_unique'),
-    ]
-
-    operations = [
-        migrations.CreateModel(
-            name='Activity',
-            fields=[
-                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
-                ('content', mezzanine.core.fields.RichTextField(verbose_name='Content')),
-                ('content_fr', mezzanine.core.fields.RichTextField(null=True, verbose_name='Content')),
-                ('content_en', mezzanine.core.fields.RichTextField(null=True, verbose_name='Content')),
-                ('date_begin', models.DateField(blank=True, null=True, verbose_name='begin date')),
-                ('date_end', models.DateField(blank=True, null=True, verbose_name='end date')),
-                ('role', models.CharField(blank=True, max_length=512, verbose_name='role')),
-                ('description', models.TextField(blank=True, verbose_name='work')),
-                ('description_fr', models.TextField(blank=True, null=True, verbose_name='work')),
-                ('description_en', models.TextField(blank=True, null=True, verbose_name='work')),
-            ],
-            options={
-                'abstract': False,
-            },
-        ),
-        migrations.CreateModel(
-            name='Address',
-            fields=[
-                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
-                ('address', models.TextField(blank=True, verbose_name='address')),
-                ('postal_code', models.CharField(blank=True, max_length=16, verbose_name='postal code')),
-                ('country', django_countries.fields.CountryField(max_length=2, verbose_name='country')),
-            ],
-        ),
-        migrations.CreateModel(
-            name='Department',
-            fields=[
-                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
-                ('name', models.CharField(max_length=512, verbose_name='name')),
-                ('name_fr', models.CharField(max_length=512, null=True, verbose_name='name')),
-                ('name_en', models.CharField(max_length=512, null=True, verbose_name='name')),
-                ('description', models.TextField(blank=True, verbose_name='description')),
-                ('description_fr', models.TextField(blank=True, null=True, verbose_name='description')),
-                ('description_en', models.TextField(blank=True, null=True, verbose_name='description')),
-                ('url', models.URLField(blank=True, max_length=512, verbose_name='URL')),
-                ('weaving_css_class', models.CharField(blank=True, max_length=64, verbose_name='weaving CSS class')),
-            ],
-            options={
-                'verbose_name': 'department',
-            },
-        ),
-        migrations.CreateModel(
-            name='Link',
-            fields=[
-                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
-                ('url', models.URLField(verbose_name='URL')),
-            ],
-        ),
-        migrations.CreateModel(
-            name='LinkType',
-            fields=[
-                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
-                ('name', models.CharField(max_length=256, verbose_name='Name')),
-                ('slug', models.SlugField(blank=True, help_text='Use this field to define a simple identifier that can be used to style the different link types (i.e. assign social media icons to them)', max_length=256, verbose_name='Slug')),
-                ('ordering', models.PositiveIntegerField(blank=True, null=True, verbose_name='Ordering')),
-            ],
-            options={
-                'ordering': ['ordering'],
-            },
-        ),
-        migrations.CreateModel(
-            name='Nationality',
-            fields=[
-                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
-                ('name', models.CharField(max_length=128, verbose_name='name')),
-            ],
-        ),
-        migrations.CreateModel(
-            name='OrganizationType',
-            fields=[
-                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
-                ('name', models.CharField(max_length=512, verbose_name='name')),
-                ('description', models.TextField(blank=True, verbose_name='description')),
-            ],
-            options={
-                'verbose_name': 'organization type',
-            },
-        ),
-        migrations.CreateModel(
-            name='Person',
-            fields=[
-                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
-                ('keywords_string', models.CharField(blank=True, editable=False, max_length=500)),
-                ('title', models.CharField(max_length=500, verbose_name='Title')),
-                ('slug', models.CharField(blank=True, help_text='Leave blank to have the URL auto-generated from the title.', max_length=2000, null=True, verbose_name='URL')),
-                ('_meta_title', models.CharField(blank=True, help_text='Optional title to be used in the HTML title tag. If left blank, the main title field will be used.', max_length=500, null=True, verbose_name='Title')),
-                ('description', models.TextField(blank=True, verbose_name='Description')),
-                ('gen_description', models.BooleanField(default=True, help_text='If checked, the description will be automatically generated from content. Uncheck if you want to manually set a custom description.', verbose_name='Generate description')),
-                ('created', models.DateTimeField(editable=False, null=True)),
-                ('updated', models.DateTimeField(editable=False, null=True)),
-                ('status', models.IntegerField(choices=[(1, 'Draft'), (2, 'Published')], default=2, help_text='With Draft chosen, will only be shown for admin users on the site.', verbose_name='Status')),
-                ('publish_date', models.DateTimeField(blank=True, db_index=True, help_text="With Published chosen, won't be shown until this time", null=True, verbose_name='Published from')),
-                ('expiry_date', models.DateTimeField(blank=True, help_text="With Published chosen, won't be shown after this time", null=True, verbose_name='Expires on')),
-                ('short_url', models.URLField(blank=True, null=True)),
-                ('in_sitemap', models.BooleanField(default=True, verbose_name='Show in sitemap')),
-                ('photo', mezzanine.core.fields.FileField(blank=True, max_length=1024, verbose_name='photo')),
-                ('photo_credits', models.CharField(blank=True, max_length=255, null=True, verbose_name='photo credits')),
-                ('photo_alignment', models.CharField(blank=True, choices=[('left', 'left'), ('center', 'center'), ('right', 'right')], default='left', max_length=32, verbose_name='photo alignment')),
-                ('photo_description', models.TextField(blank=True, verbose_name='photo description')),
-                ('photo_card', mezzanine.core.fields.FileField(blank=True, max_length=1024, verbose_name='card photo')),
-                ('photo_card_credits', models.CharField(blank=True, max_length=255, null=True, verbose_name='photo card credits')),
-                ('photo_slider', mezzanine.core.fields.FileField(blank=True, max_length=1024, verbose_name='slider photo')),
-                ('photo_slider_credits', models.CharField(blank=True, max_length=255, null=True, verbose_name='photo slider credits')),
-                ('person_title', models.CharField(blank=True, choices=[('Dr', 'Dr'), ('Prof', 'Prof'), ('Prof Dr', 'Prof Dr')], max_length=16, verbose_name='title')),
-                ('gender', models.CharField(blank=True, choices=[('male', 'male'), ('female', 'female')], max_length=16, verbose_name='gender')),
-                ('first_name', models.CharField(blank=True, max_length=255, null=True, verbose_name='first name')),
-                ('last_name', models.CharField(blank=True, max_length=255, null=True, verbose_name='last name')),
-                ('birthday', models.DateField(blank=True, verbose_name='birthday')),
-                ('bio', mezzanine.core.fields.RichTextField(blank=True, verbose_name='biography')),
-                ('bio_fr', mezzanine.core.fields.RichTextField(blank=True, null=True, verbose_name='biography')),
-                ('bio_en', mezzanine.core.fields.RichTextField(blank=True, null=True, verbose_name='biography')),
-                ('site', models.ForeignKey(editable=False, on_delete=django.db.models.deletion.CASCADE, to='sites.Site')),
-                ('user', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to=settings.AUTH_USER_MODEL, verbose_name='user')),
-            ],
-            options={
-                'verbose_name': 'person',
-                'ordering': ['last_name'],
-            },
-            bases=(mezzanine.utils.models.AdminThumbMixin, models.Model),
-        ),
-        migrations.CreateModel(
-            name='Team',
-            fields=[
-                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
-                ('name', models.CharField(max_length=512, verbose_name='name')),
-                ('name_fr', models.CharField(max_length=512, null=True, verbose_name='name')),
-                ('name_en', models.CharField(max_length=512, null=True, verbose_name='name')),
-                ('description', models.TextField(blank=True, verbose_name='description')),
-                ('description_fr', models.TextField(blank=True, null=True, verbose_name='description')),
-                ('description_en', models.TextField(blank=True, null=True, verbose_name='description')),
-                ('department', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='organization-team.Department', verbose_name='department')),
-            ],
-            options={
-                'abstract': False,
-            },
-        ),
-        migrations.CreateModel(
-            name='Organization',
-            fields=[
-                ('address_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='organization-team.Address')),
-                ('name', models.CharField(max_length=512, verbose_name='name')),
-                ('description', models.TextField(blank=True, verbose_name='description')),
-                ('description_fr', models.TextField(blank=True, null=True, verbose_name='description')),
-                ('description_en', models.TextField(blank=True, null=True, verbose_name='description')),
-                ('url', models.URLField(blank=True, max_length=512, verbose_name='URL')),
-                ('type', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='organization-team.OrganizationType', verbose_name='organization type')),
-            ],
-            options={
-                'verbose_name': 'organization',
-            },
-            bases=('organization-team.address', models.Model),
-        ),
-        migrations.AddField(
-            model_name='link',
-            name='link_type',
-            field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='organization-team.LinkType', verbose_name='Link type'),
-        ),
-        migrations.AddField(
-            model_name='link',
-            name='person',
-            field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='organization-team.Person', verbose_name='Person'),
-        ),
-        migrations.AddField(
-            model_name='activity',
-            name='person',
-            field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='organization-team.Person', verbose_name='person'),
-        ),
-        migrations.AddField(
-            model_name='activity',
-            name='teams',
-            field=models.ManyToManyField(to='organization-team.Team', verbose_name='teams'),
-        ),
-        migrations.AddField(
-            model_name='person',
-            name='organization',
-            field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='organization-team.Organization', verbose_name='organization'),
-        ),
-        migrations.AddField(
-            model_name='department',
-            name='organization',
-            field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='organization-team.Organization', verbose_name='organization'),
-        ),
-    ]
diff --git a/app/organization/team/migrations/0002_auto_20160714_1905.py b/app/organization/team/migrations/0002_auto_20160714_1905.py
deleted file mode 100644 (file)
index faca81f..0000000
+++ /dev/null
@@ -1,71 +0,0 @@
-# -*- coding: utf-8 -*-
-# Generated by Django 1.9.7 on 2016-07-14 17:05
-from __future__ import unicode_literals
-
-from django.db import migrations
-
-
-class Migration(migrations.Migration):
-
-    dependencies = [
-        ('organization-team', '0001_initial'),
-    ]
-
-    operations = [
-        migrations.RemoveField(
-            model_name='person',
-            name='_meta_title',
-        ),
-        migrations.RemoveField(
-            model_name='person',
-            name='created',
-        ),
-        migrations.RemoveField(
-            model_name='person',
-            name='description',
-        ),
-        migrations.RemoveField(
-            model_name='person',
-            name='expiry_date',
-        ),
-        migrations.RemoveField(
-            model_name='person',
-            name='gen_description',
-        ),
-        migrations.RemoveField(
-            model_name='person',
-            name='in_sitemap',
-        ),
-        migrations.RemoveField(
-            model_name='person',
-            name='keywords_string',
-        ),
-        migrations.RemoveField(
-            model_name='person',
-            name='publish_date',
-        ),
-        migrations.RemoveField(
-            model_name='person',
-            name='short_url',
-        ),
-        migrations.RemoveField(
-            model_name='person',
-            name='site',
-        ),
-        migrations.RemoveField(
-            model_name='person',
-            name='slug',
-        ),
-        migrations.RemoveField(
-            model_name='person',
-            name='status',
-        ),
-        migrations.RemoveField(
-            model_name='person',
-            name='title',
-        ),
-        migrations.RemoveField(
-            model_name='person',
-            name='updated',
-        ),
-    ]
diff --git a/app/organization/team/migrations/0003_auto_20160714_1943.py b/app/organization/team/migrations/0003_auto_20160714_1943.py
deleted file mode 100644 (file)
index 0b2c300..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
-# -*- coding: utf-8 -*-
-# Generated by Django 1.9.7 on 2016-07-14 17:43
-from __future__ import unicode_literals
-
-from django.db import migrations
-
-
-class Migration(migrations.Migration):
-
-    dependencies = [
-        ('organization-team', '0002_auto_20160714_1905'),
-    ]
-
-    operations = [
-        migrations.RenameField(
-            model_name='person',
-            old_name='person_title',
-            new_name='title',
-        ),
-    ]
diff --git a/app/organization/team/migrations/0004_auto_20160715_1807.py b/app/organization/team/migrations/0004_auto_20160715_1807.py
deleted file mode 100644 (file)
index 1150a2d..0000000
+++ /dev/null
@@ -1,128 +0,0 @@
-# -*- coding: utf-8 -*-
-# Generated by Django 1.9.7 on 2016-07-15 16:07
-from __future__ import unicode_literals
-
-from django.db import migrations, models
-import django.db.models.deletion
-import mezzanine.core.fields
-import organization.team.nationalities.fields
-
-
-class Migration(migrations.Migration):
-
-    dependencies = [
-        ('organization-team', '0003_auto_20160714_1943'),
-    ]
-
-    operations = [
-        migrations.DeleteModel(
-            name='Nationality',
-        ),
-        migrations.AlterModelOptions(
-            name='activity',
-            options={'verbose_name': 'activity'},
-        ),
-        migrations.AlterModelOptions(
-            name='link',
-            options={'verbose_name': 'link'},
-        ),
-        migrations.AlterModelOptions(
-            name='team',
-            options={'verbose_name': 'team'},
-        ),
-        migrations.AddField(
-            model_name='organization',
-            name='photo',
-            field=mezzanine.core.fields.FileField(blank=True, max_length=1024, verbose_name='photo'),
-        ),
-        migrations.AddField(
-            model_name='organization',
-            name='photo_alignment',
-            field=models.CharField(blank=True, choices=[('left', 'left'), ('center', 'center'), ('right', 'right')], default='left', max_length=32, verbose_name='photo alignment'),
-        ),
-        migrations.AddField(
-            model_name='organization',
-            name='photo_card',
-            field=mezzanine.core.fields.FileField(blank=True, max_length=1024, verbose_name='card photo'),
-        ),
-        migrations.AddField(
-            model_name='organization',
-            name='photo_card_credits',
-            field=models.CharField(blank=True, max_length=255, null=True, verbose_name='photo card credits'),
-        ),
-        migrations.AddField(
-            model_name='organization',
-            name='photo_credits',
-            field=models.CharField(blank=True, max_length=255, null=True, verbose_name='photo credits'),
-        ),
-        migrations.AddField(
-            model_name='organization',
-            name='photo_description',
-            field=models.TextField(blank=True, verbose_name='photo description'),
-        ),
-        migrations.AddField(
-            model_name='organization',
-            name='photo_slider',
-            field=mezzanine.core.fields.FileField(blank=True, max_length=1024, verbose_name='slider photo'),
-        ),
-        migrations.AddField(
-            model_name='organization',
-            name='photo_slider_credits',
-            field=models.CharField(blank=True, max_length=255, null=True, verbose_name='photo slider credits'),
-        ),
-        migrations.AddField(
-            model_name='person',
-            name='nationality',
-            field=organization.team.nationalities.fields.NationalityField(blank=True, choices=[('AF', 'Afghan'), ('AL', 'Albanian'), ('DZ', 'Algerian'), ('AD', 'Andorran'), ('AO', 'Angolan'), ('AR', 'Argentinian'), ('AM', 'Armenian'), ('AU', 'Australian'), ('AT', 'Austrian'), ('AZ', 'Azerbaijani'), ('BS', 'Bahamian'), ('BH', 'Bahraini'), ('BD', 'Bangladeshi'), ('BB', 'Barbadian'), ('BY', 'Belorussian'), ('BE', 'Belgian'), ('BZ', 'Belizian'), ('BJ', 'Beninese'), ('BT', 'Bhutanese'), ('BO', 'Bolivian'), ('BA', 'Bosnian'), ('BW', 'Botswanan'), ('BR', 'Brazilian'), ('GB', 'British'), ('BN', 'Bruneian'), ('BG', 'Bulgarian'), ('BF', 'Burkinese'), ('MM', 'Burmese'), ('BF', 'Burundian'), ('BI', 'Cambodian'), ('CM', 'Cameroonian'), ('CA', 'Canadian'), ('CV', 'Cape Verdean'), ('TD', 'Chadian'), ('CL', 'Chilean'), ('CN', 'Chinese'), ('CO', 'Colombian'), ('CG', 'Congolese'), ('CR', 'Costa Rican'), ('HR', 'Croatian'), ('CU', 'Cuban'), ('CY', 'Cypriot'), ('CZ', 'Czech'), ('DK', 'Danish'), ('DJ', 'Djiboutian'), ('DM', 'Dominican'), ('DO', 'Dominican'), ('EC', 'Ecuadorean'), ('EG', 'Egyptian'), ('SV', 'Salvadorean'), ('GB', 'English'), ('ER', 'Eritrean'), ('EE', 'Estonian'), ('ET', 'Ethiopian'), ('FJ', 'Fijian'), ('FI', 'Finnish'), ('FR', 'French'), ('GA', 'Gabonese'), ('GM', 'Gambian'), ('GE', 'Georgian'), ('DE', 'German'), ('GH', 'Ghanaian'), ('GR', 'Greek'), ('GD', 'Grenadian'), ('GT', 'Guatemalan'), ('GQ', 'Guinean'), ('GY', 'Guyanese'), ('HT', 'Haitian'), ('NL', 'Dutch'), ('HN', 'Honduran'), ('HU', 'Hungarian'), ('IS', 'Icelandic'), ('IO', 'Indian'), ('ID', 'Indonesian'), ('IR', 'Iranian'), ('IQ', 'Iraqi'), ('IE', 'Irish'), ('IL', 'Israeli'), ('IT', 'Italian'), ('JM', 'Jamaican'), ('JP', 'Japanese'), ('JO', 'Jordanian'), ('KZ', 'Kazakh'), ('KE', 'Kenyan'), ('KW', 'Kuwaiti'), ('LA', 'Laotian'), ('LV', 'Latvian'), ('LB', 'Lebanese'), ('LR', 'Liberian'), ('LY', 'Libyan'), ('LT', 'Lithuanian'), ('MK', 'Macedonian'), ('MG', 'Malagasay'), ('MW', 'Malawian'), ('MY', 'Malaysian'), ('MV', 'Maldivian'), ('ML', 'Malian'), ('MT', 'Maltese'), ('MR', 'Mauritanian'), ('MU', 'Mauritian'), ('MX', 'Mexican'), ('MD', 'Moldovan'), ('MC', 'Monacan'), ('MN', 'Mongolian'), ('ME', 'Montenegrin'), ('MA', 'Moroccan'), ('MZ', 'Mozambican'), ('NA', 'Namibian'), ('NP', 'Nepalese'), ('NI', 'Nicaraguan'), ('NE', 'Nigerien'), ('NG', 'Nigerian'), ('KP', 'North Korean'), ('NO', 'Norwegian'), ('OM', 'Omani'), ('PK', 'Pakistani'), ('PA', 'Panamanian'), ('PG', 'Guinean'), ('PY', 'Paraguayan'), ('PE', 'Peruvian'), ('PH', 'Philippine'), ('PL', 'Polish'), ('PT', 'Portuguese'), ('QA', 'Qatari'), ('RO', 'Romanian'), ('RU', 'Russian'), ('RW', 'Rwandan'), ('SA', 'Saudi'), ('AE', 'Scottish'), ('SN', 'Senegalese'), ('RS', 'Serbian'), ('SC', 'Seychellois'), ('SL', 'Sierra Leonian'), ('SG', 'Singaporean'), ('SK', 'Slovak'), ('SI', 'Slovenian'), ('SO', 'Somali'), ('ZA', 'South African'), ('KR', 'South Korean'), ('ES', 'Spanish'), ('LK', 'Sri Lankan'), ('SD', 'Sudanese'), ('SR', 'Surinamese'), ('SZ', 'Swazi'), ('SE', 'Swedish'), ('CH', 'Swiss'), ('SY', 'Syrian'), ('TW', 'Taiwanese'), ('TJ', 'Tadjik'), ('TZ', 'Tanzanian'), ('TH', 'Thai'), ('TG', 'Togolese'), ('TT', 'Trinidadian'), ('TN', 'Tunisian'), ('TR', 'Turkish'), ('TM', 'Turkmen'), ('TV', 'Tuvaluan'), ('UG', 'Ugandan'), ('UA', 'Ukrainian'), ('UY', 'Uruguayan'), ('UZ', 'Uzbek'), ('VU', 'Vanuatuan'), ('VE', 'Venezuelan'), ('VN', 'Vietnamese'), ('GB', 'Welsh'), ('YE', 'Yemeni'), ('ZM', 'Zambian'), ('ZW', 'Zimbabwean')], max_length=2, verbose_name='nationality'),
-        ),
-        migrations.AddField(
-            model_name='team',
-            name='partner_organizations',
-            field=models.ManyToManyField(blank=True, to='organization-team.Organization', verbose_name='partner organizations'),
-        ),
-        migrations.AddField(
-            model_name='team',
-            name='partner_teams',
-            field=models.ManyToManyField(blank=True, to='organization-team.Team', verbose_name='partner teams'),
-        ),
-        migrations.AlterField(
-            model_name='activity',
-            name='description',
-            field=models.TextField(blank=True, verbose_name='description'),
-        ),
-        migrations.AlterField(
-            model_name='activity',
-            name='description_en',
-            field=models.TextField(blank=True, null=True, verbose_name='description'),
-        ),
-        migrations.AlterField(
-            model_name='activity',
-            name='description_fr',
-            field=models.TextField(blank=True, null=True, verbose_name='description'),
-        ),
-        migrations.AlterField(
-            model_name='link',
-            name='link_type',
-            field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='organization-team.LinkType', verbose_name='link type'),
-        ),
-        migrations.AlterField(
-            model_name='link',
-            name='person',
-            field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='organization-team.Person', verbose_name='person'),
-        ),
-        migrations.AlterField(
-            model_name='linktype',
-            name='name',
-            field=models.CharField(max_length=256, verbose_name='name'),
-        ),
-        migrations.AlterField(
-            model_name='linktype',
-            name='ordering',
-            field=models.PositiveIntegerField(blank=True, null=True, verbose_name='ordering'),
-        ),
-        migrations.AlterField(
-            model_name='linktype',
-            name='slug',
-            field=models.SlugField(blank=True, help_text='Use this field to define a simple identifier that can be used to style the different link types (i.e. assign social media icons to them)', max_length=256, verbose_name='slug'),
-        ),
-    ]
diff --git a/app/organization/team/migrations/0005_remove_person_nationality.py b/app/organization/team/migrations/0005_remove_person_nationality.py
deleted file mode 100644 (file)
index 78bda7a..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-# -*- coding: utf-8 -*-
-# Generated by Django 1.9.7 on 2016-07-15 16:15
-from __future__ import unicode_literals
-
-from django.db import migrations
-
-
-class Migration(migrations.Migration):
-
-    dependencies = [
-        ('organization-team', '0004_auto_20160715_1807'),
-    ]
-
-    operations = [
-        migrations.RemoveField(
-            model_name='person',
-            name='nationality',
-        ),
-    ]
diff --git a/app/organization/team/migrations/0006_auto_20160720_2136.py b/app/organization/team/migrations/0006_auto_20160720_2136.py
deleted file mode 100644 (file)
index b68db6b..0000000
+++ /dev/null
@@ -1,25 +0,0 @@
-# -*- coding: utf-8 -*-
-# Generated by Django 1.9.7 on 2016-07-20 19:36
-from __future__ import unicode_literals
-
-from django.db import migrations, models
-
-
-class Migration(migrations.Migration):
-
-    dependencies = [
-        ('organization-team', '0005_remove_person_nationality'),
-    ]
-
-    operations = [
-        migrations.AddField(
-            model_name='organization',
-            name='is_on_map',
-            field=models.BooleanField(default=True, verbose_name='is on map'),
-        ),
-        migrations.AlterField(
-            model_name='person',
-            name='birthday',
-            field=models.DateField(blank=True, null=True, verbose_name='birthday'),
-        ),
-    ]
diff --git a/app/organization/team/migrations/0007_auto_20160721_1351.py b/app/organization/team/migrations/0007_auto_20160721_1351.py
deleted file mode 100644 (file)
index c3a6a37..0000000
+++ /dev/null
@@ -1,116 +0,0 @@
-# -*- coding: utf-8 -*-
-# Generated by Django 1.9.7 on 2016-07-21 11:51
-from __future__ import unicode_literals
-
-from django.db import migrations, models
-import django.db.models.deletion
-
-
-class Migration(migrations.Migration):
-
-    dependencies = [
-        ('sites', '0002_alter_domain_unique'),
-        ('organization-team', '0006_auto_20160720_2136'),
-    ]
-
-    operations = [
-        migrations.RemoveField(
-            model_name='department',
-            name='name',
-        ),
-        migrations.RemoveField(
-            model_name='department',
-            name='name_en',
-        ),
-        migrations.RemoveField(
-            model_name='department',
-            name='name_fr',
-        ),
-        migrations.RemoveField(
-            model_name='organization',
-            name='name',
-        ),
-        migrations.RemoveField(
-            model_name='team',
-            name='name',
-        ),
-        migrations.RemoveField(
-            model_name='team',
-            name='name_en',
-        ),
-        migrations.RemoveField(
-            model_name='team',
-            name='name_fr',
-        ),
-        migrations.AddField(
-            model_name='department',
-            name='site',
-            field=models.ForeignKey(default=1, editable=False, on_delete=django.db.models.deletion.CASCADE, to='sites.Site'),
-            preserve_default=False,
-        ),
-        migrations.AddField(
-            model_name='department',
-            name='slug',
-            field=models.CharField(blank=True, help_text='Leave blank to have the URL auto-generated from the title.', max_length=2000, null=True, verbose_name='URL'),
-        ),
-        migrations.AddField(
-            model_name='department',
-            name='title',
-            field=models.CharField(default='', max_length=500, verbose_name='Title'),
-            preserve_default=False,
-        ),
-        migrations.AddField(
-            model_name='department',
-            name='title_en',
-            field=models.CharField(max_length=500, null=True, verbose_name='Title'),
-        ),
-        migrations.AddField(
-            model_name='department',
-            name='title_fr',
-            field=models.CharField(max_length=500, null=True, verbose_name='Title'),
-        ),
-        migrations.AddField(
-            model_name='organization',
-            name='site',
-            field=models.ForeignKey(default=1, editable=False, on_delete=django.db.models.deletion.CASCADE, to='sites.Site'),
-            preserve_default=False,
-        ),
-        migrations.AddField(
-            model_name='organization',
-            name='slug',
-            field=models.CharField(blank=True, help_text='Leave blank to have the URL auto-generated from the title.', max_length=2000, null=True, verbose_name='URL'),
-        ),
-        migrations.AddField(
-            model_name='organization',
-            name='title',
-            field=models.CharField(default='', max_length=500, verbose_name='Title'),
-            preserve_default=False,
-        ),
-        migrations.AddField(
-            model_name='team',
-            name='site',
-            field=models.ForeignKey(default=1, editable=False, on_delete=django.db.models.deletion.CASCADE, to='sites.Site'),
-            preserve_default=False,
-        ),
-        migrations.AddField(
-            model_name='team',
-            name='slug',
-            field=models.CharField(blank=True, help_text='Leave blank to have the URL auto-generated from the title.', max_length=2000, null=True, verbose_name='URL'),
-        ),
-        migrations.AddField(
-            model_name='team',
-            name='title',
-            field=models.CharField(default='', max_length=500, verbose_name='Title'),
-            preserve_default=False,
-        ),
-        migrations.AddField(
-            model_name='team',
-            name='title_en',
-            field=models.CharField(max_length=500, null=True, verbose_name='Title'),
-        ),
-        migrations.AddField(
-            model_name='team',
-            name='title_fr',
-            field=models.CharField(max_length=500, null=True, verbose_name='Title'),
-        ),
-    ]
diff --git a/app/organization/team/migrations/0008_auto_20160725_0117.py b/app/organization/team/migrations/0008_auto_20160725_0117.py
deleted file mode 100644 (file)
index f9e1dd2..0000000
+++ /dev/null
@@ -1,217 +0,0 @@
-# -*- coding: utf-8 -*-
-# Generated by Django 1.9.7 on 2016-07-24 23:17
-from __future__ import unicode_literals
-
-from django.db import migrations, models
-import django.db.models.deletion
-import mezzanine.core.fields
-
-
-class Migration(migrations.Migration):
-
-    dependencies = [
-        ('pages', '0001_initial'),
-        ('sites', '0002_alter_domain_unique'),
-        ('organization-team', '0007_auto_20160721_1351'),
-    ]
-
-    operations = [
-        migrations.AlterModelOptions(
-            name='department',
-            options={'ordering': ('_order',), 'verbose_name': 'department'},
-        ),
-        migrations.AlterModelOptions(
-            name='team',
-            options={'ordering': ('_order',), 'verbose_name': 'team'},
-        ),
-        migrations.RemoveField(
-            model_name='department',
-            name='description',
-        ),
-        migrations.RemoveField(
-            model_name='department',
-            name='description_en',
-        ),
-        migrations.RemoveField(
-            model_name='department',
-            name='description_fr',
-        ),
-        migrations.RemoveField(
-            model_name='department',
-            name='id',
-        ),
-        migrations.RemoveField(
-            model_name='department',
-            name='site',
-        ),
-        migrations.RemoveField(
-            model_name='department',
-            name='slug',
-        ),
-        migrations.RemoveField(
-            model_name='department',
-            name='title',
-        ),
-        migrations.RemoveField(
-            model_name='department',
-            name='title_en',
-        ),
-        migrations.RemoveField(
-            model_name='department',
-            name='title_fr',
-        ),
-        migrations.RemoveField(
-            model_name='organizationtype',
-            name='description',
-        ),
-        migrations.RemoveField(
-            model_name='team',
-            name='department',
-        ),
-        migrations.RemoveField(
-            model_name='team',
-            name='description',
-        ),
-        migrations.RemoveField(
-            model_name='team',
-            name='description_en',
-        ),
-        migrations.RemoveField(
-            model_name='team',
-            name='description_fr',
-        ),
-        migrations.RemoveField(
-            model_name='team',
-            name='id',
-        ),
-        migrations.RemoveField(
-            model_name='team',
-            name='site',
-        ),
-        migrations.RemoveField(
-            model_name='team',
-            name='slug',
-        ),
-        migrations.RemoveField(
-            model_name='team',
-            name='title',
-        ),
-        migrations.RemoveField(
-            model_name='team',
-            name='title_en',
-        ),
-        migrations.RemoveField(
-            model_name='team',
-            name='title_fr',
-        ),
-        migrations.AddField(
-            model_name='department',
-            name='content',
-            field=mezzanine.core.fields.RichTextField(default='', verbose_name='Content'),
-            preserve_default=False,
-        ),
-        migrations.AddField(
-            model_name='department',
-            name='page_ptr',
-            field=models.OneToOneField(auto_created=True, default=1, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='pages.Page'),
-            preserve_default=False,
-        ),
-        migrations.AddField(
-            model_name='department',
-            name='sub_title',
-            field=models.TextField(blank=True, max_length=1024, verbose_name='sub title'),
-        ),
-        migrations.AddField(
-            model_name='person',
-            name='_meta_title',
-            field=models.CharField(blank=True, help_text='Optional title to be used in the HTML title tag. If left blank, the main title field will be used.', max_length=500, null=True, verbose_name='Title'),
-        ),
-        migrations.AddField(
-            model_name='person',
-            name='created',
-            field=models.DateTimeField(editable=False, null=True),
-        ),
-        migrations.AddField(
-            model_name='person',
-            name='description',
-            field=models.TextField(blank=True, verbose_name='Description'),
-        ),
-        migrations.AddField(
-            model_name='person',
-            name='expiry_date',
-            field=models.DateTimeField(blank=True, help_text="With Published chosen, won't be shown after this time", null=True, verbose_name='Expires on'),
-        ),
-        migrations.AddField(
-            model_name='person',
-            name='gen_description',
-            field=models.BooleanField(default=True, help_text='If checked, the description will be automatically generated from content. Uncheck if you want to manually set a custom description.', verbose_name='Generate description'),
-        ),
-        migrations.AddField(
-            model_name='person',
-            name='in_sitemap',
-            field=models.BooleanField(default=True, verbose_name='Show in sitemap'),
-        ),
-        migrations.AddField(
-            model_name='person',
-            name='keywords_string',
-            field=models.CharField(blank=True, editable=False, max_length=500),
-        ),
-        migrations.AddField(
-            model_name='person',
-            name='person_title',
-            field=models.CharField(blank=True, choices=[('Dr', 'Dr'), ('Prof', 'Prof'), ('Prof Dr', 'Prof Dr')], max_length=16, verbose_name='title'),
-        ),
-        migrations.AddField(
-            model_name='person',
-            name='publish_date',
-            field=models.DateTimeField(blank=True, db_index=True, help_text="With Published chosen, won't be shown until this time", null=True, verbose_name='Published from'),
-        ),
-        migrations.AddField(
-            model_name='person',
-            name='short_url',
-            field=models.URLField(blank=True, null=True),
-        ),
-        migrations.AddField(
-            model_name='person',
-            name='site',
-            field=models.ForeignKey(default=1, editable=False, on_delete=django.db.models.deletion.CASCADE, to='sites.Site'),
-            preserve_default=False,
-        ),
-        migrations.AddField(
-            model_name='person',
-            name='slug',
-            field=models.CharField(blank=True, help_text='Leave blank to have the URL auto-generated from the title.', max_length=2000, null=True, verbose_name='URL'),
-        ),
-        migrations.AddField(
-            model_name='person',
-            name='status',
-            field=models.IntegerField(choices=[(1, 'Draft'), (2, 'Published')], default=2, help_text='With Draft chosen, will only be shown for admin users on the site.', verbose_name='Status'),
-        ),
-        migrations.AddField(
-            model_name='person',
-            name='updated',
-            field=models.DateTimeField(editable=False, null=True),
-        ),
-        migrations.AddField(
-            model_name='team',
-            name='content',
-            field=mezzanine.core.fields.RichTextField(default='', verbose_name='Content'),
-            preserve_default=False,
-        ),
-        migrations.AddField(
-            model_name='team',
-            name='page_ptr',
-            field=models.OneToOneField(auto_created=True, default=1, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='pages.Page'),
-            preserve_default=False,
-        ),
-        migrations.AddField(
-            model_name='team',
-            name='sub_title',
-            field=models.TextField(blank=True, max_length=1024, verbose_name='sub title'),
-        ),
-        migrations.AlterField(
-            model_name='person',
-            name='title',
-            field=models.CharField(max_length=500, verbose_name='Title'),
-        ),
-    ]
diff --git a/app/organization/team/migrations/0009_auto_20160725_0143.py b/app/organization/team/migrations/0009_auto_20160725_0143.py
deleted file mode 100644 (file)
index 409e985..0000000
+++ /dev/null
@@ -1,36 +0,0 @@
-# -*- coding: utf-8 -*-
-# Generated by Django 1.9.7 on 2016-07-24 23:43
-from __future__ import unicode_literals
-
-from django.db import migrations
-import mezzanine.core.fields
-
-
-class Migration(migrations.Migration):
-
-    dependencies = [
-        ('organization-team', '0008_auto_20160725_0117'),
-    ]
-
-    operations = [
-        migrations.AddField(
-            model_name='department',
-            name='content_en',
-            field=mezzanine.core.fields.RichTextField(null=True, verbose_name='Content'),
-        ),
-        migrations.AddField(
-            model_name='department',
-            name='content_fr',
-            field=mezzanine.core.fields.RichTextField(null=True, verbose_name='Content'),
-        ),
-        migrations.AddField(
-            model_name='team',
-            name='content_en',
-            field=mezzanine.core.fields.RichTextField(null=True, verbose_name='Content'),
-        ),
-        migrations.AddField(
-            model_name='team',
-            name='content_fr',
-            field=mezzanine.core.fields.RichTextField(null=True, verbose_name='Content'),
-        ),
-    ]
diff --git a/app/organization/team/migrations/0010_auto_20160725_0201.py b/app/organization/team/migrations/0010_auto_20160725_0201.py
deleted file mode 100644 (file)
index cc1284d..0000000
+++ /dev/null
@@ -1,35 +0,0 @@
-# -*- coding: utf-8 -*-
-# Generated by Django 1.9.7 on 2016-07-25 00:01
-from __future__ import unicode_literals
-
-from django.db import migrations, models
-
-
-class Migration(migrations.Migration):
-
-    dependencies = [
-        ('organization-team', '0009_auto_20160725_0143'),
-    ]
-
-    operations = [
-        migrations.AddField(
-            model_name='department',
-            name='sub_title_en',
-            field=models.TextField(blank=True, max_length=1024, null=True, verbose_name='sub title'),
-        ),
-        migrations.AddField(
-            model_name='department',
-            name='sub_title_fr',
-            field=models.TextField(blank=True, max_length=1024, null=True, verbose_name='sub title'),
-        ),
-        migrations.AddField(
-            model_name='team',
-            name='sub_title_en',
-            field=models.TextField(blank=True, max_length=1024, null=True, verbose_name='sub title'),
-        ),
-        migrations.AddField(
-            model_name='team',
-            name='sub_title_fr',
-            field=models.TextField(blank=True, max_length=1024, null=True, verbose_name='sub title'),
-        ),
-    ]
diff --git a/app/organization/team/migrations/0011_auto_20160727_1631.py b/app/organization/team/migrations/0011_auto_20160727_1631.py
deleted file mode 100644 (file)
index 6c37a93..0000000
+++ /dev/null
@@ -1,96 +0,0 @@
-# -*- coding: utf-8 -*-
-# Generated by Django 1.9.7 on 2016-07-27 14:31
-from __future__ import unicode_literals
-
-from django.db import migrations, models
-import mezzanine.core.fields
-
-
-class Migration(migrations.Migration):
-
-    dependencies = [
-        ('organization-team', '0010_auto_20160725_0201'),
-    ]
-
-    operations = [
-        migrations.AddField(
-            model_name='department',
-            name='photo',
-            field=mezzanine.core.fields.FileField(blank=True, max_length=1024, verbose_name='photo'),
-        ),
-        migrations.AddField(
-            model_name='department',
-            name='photo_alignment',
-            field=models.CharField(blank=True, choices=[('left', 'left'), ('center', 'center'), ('right', 'right')], default='left', max_length=32, verbose_name='photo alignment'),
-        ),
-        migrations.AddField(
-            model_name='department',
-            name='photo_card',
-            field=mezzanine.core.fields.FileField(blank=True, max_length=1024, verbose_name='card photo'),
-        ),
-        migrations.AddField(
-            model_name='department',
-            name='photo_card_credits',
-            field=models.CharField(blank=True, max_length=255, null=True, verbose_name='photo card credits'),
-        ),
-        migrations.AddField(
-            model_name='department',
-            name='photo_credits',
-            field=models.CharField(blank=True, max_length=255, null=True, verbose_name='photo credits'),
-        ),
-        migrations.AddField(
-            model_name='department',
-            name='photo_description',
-            field=models.TextField(blank=True, verbose_name='photo description'),
-        ),
-        migrations.AddField(
-            model_name='department',
-            name='photo_slider',
-            field=mezzanine.core.fields.FileField(blank=True, max_length=1024, verbose_name='slider photo'),
-        ),
-        migrations.AddField(
-            model_name='department',
-            name='photo_slider_credits',
-            field=models.CharField(blank=True, max_length=255, null=True, verbose_name='photo slider credits'),
-        ),
-        migrations.AddField(
-            model_name='team',
-            name='photo',
-            field=mezzanine.core.fields.FileField(blank=True, max_length=1024, verbose_name='photo'),
-        ),
-        migrations.AddField(
-            model_name='team',
-            name='photo_alignment',
-            field=models.CharField(blank=True, choices=[('left', 'left'), ('center', 'center'), ('right', 'right')], default='left', max_length=32, verbose_name='photo alignment'),
-        ),
-        migrations.AddField(
-            model_name='team',
-            name='photo_card',
-            field=mezzanine.core.fields.FileField(blank=True, max_length=1024, verbose_name='card photo'),
-        ),
-        migrations.AddField(
-            model_name='team',
-            name='photo_card_credits',
-            field=models.CharField(blank=True, max_length=255, null=True, verbose_name='photo card credits'),
-        ),
-        migrations.AddField(
-            model_name='team',
-            name='photo_credits',
-            field=models.CharField(blank=True, max_length=255, null=True, verbose_name='photo credits'),
-        ),
-        migrations.AddField(
-            model_name='team',
-            name='photo_description',
-            field=models.TextField(blank=True, verbose_name='photo description'),
-        ),
-        migrations.AddField(
-            model_name='team',
-            name='photo_slider',
-            field=mezzanine.core.fields.FileField(blank=True, max_length=1024, verbose_name='slider photo'),
-        ),
-        migrations.AddField(
-            model_name='team',
-            name='photo_slider_credits',
-            field=models.CharField(blank=True, max_length=255, null=True, verbose_name='photo slider credits'),
-        ),
-    ]
diff --git a/app/organization/team/migrations/0012_auto_20160808_0118.py b/app/organization/team/migrations/0012_auto_20160808_0118.py
deleted file mode 100644 (file)
index e18a102..0000000
+++ /dev/null
@@ -1,60 +0,0 @@
-# -*- coding: utf-8 -*-
-# Generated by Django 1.9.7 on 2016-08-07 23:18
-from __future__ import unicode_literals
-
-from django.db import migrations, models
-import django.db.models.deletion
-
-
-class Migration(migrations.Migration):
-
-    dependencies = [
-        ('organization-core', '0010_auto_20160808_0118'),
-        ('organization-team', '0011_auto_20160727_1631'),
-    ]
-
-    operations = [
-        migrations.CreateModel(
-            name='PersonLink',
-            fields=[
-                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
-                ('url', models.URLField(verbose_name='URL')),
-            ],
-            options={
-                'verbose_name': 'person link',
-            },
-        ),
-        migrations.RemoveField(
-            model_name='link',
-            name='link_type',
-        ),
-        migrations.RemoveField(
-            model_name='link',
-            name='person',
-        ),
-        migrations.RemoveField(
-            model_name='organization',
-            name='url',
-        ),
-        migrations.AddField(
-            model_name='organization',
-            name='website',
-            field=models.URLField(blank=True, max_length=512, verbose_name='website'),
-        ),
-        migrations.DeleteModel(
-            name='Link',
-        ),
-        migrations.DeleteModel(
-            name='LinkType',
-        ),
-        migrations.AddField(
-            model_name='personlink',
-            name='link_type',
-            field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='organization-core.LinkType', verbose_name='link type'),
-        ),
-        migrations.AddField(
-            model_name='personlink',
-            name='person',
-            field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='organization-team.Person', verbose_name='person'),
-        ),
-    ]
diff --git a/app/organization/team/migrations/0013_auto_20160809_1413.py b/app/organization/team/migrations/0013_auto_20160809_1413.py
deleted file mode 100644 (file)
index d1e0a90..0000000
+++ /dev/null
@@ -1,76 +0,0 @@
-# -*- coding: utf-8 -*-
-# Generated by Django 1.9.7 on 2016-08-09 12:13
-from __future__ import unicode_literals
-
-from django.db import migrations, models
-import django.db.models.deletion
-import mezzanine.core.fields
-
-
-class Migration(migrations.Migration):
-
-    dependencies = [
-        ('organization-core', '0011_auto_20160809_1413'),
-        ('organization-team', '0012_auto_20160808_0118'),
-    ]
-
-    operations = [
-        migrations.CreateModel(
-            name='PersonActivity',
-            fields=[
-                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
-                ('content', mezzanine.core.fields.RichTextField(verbose_name='Content')),
-                ('content_fr', mezzanine.core.fields.RichTextField(null=True, verbose_name='Content')),
-                ('content_en', mezzanine.core.fields.RichTextField(null=True, verbose_name='Content')),
-                ('description', models.TextField(blank=True, verbose_name='description')),
-                ('description_fr', models.TextField(blank=True, null=True, verbose_name='description')),
-                ('description_en', models.TextField(blank=True, null=True, verbose_name='description')),
-                ('date_begin', models.DateField(blank=True, null=True, verbose_name='begin date')),
-                ('date_end', models.DateField(blank=True, null=True, verbose_name='end date')),
-                ('role', models.CharField(blank=True, max_length=512, verbose_name='role')),
-            ],
-            options={
-                'verbose_name_plural': 'activities',
-                'verbose_name': 'activity',
-            },
-        ),
-        migrations.CreateModel(
-            name='TeamLink',
-            fields=[
-                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
-                ('url', models.URLField(verbose_name='URL')),
-                ('link_type', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='organization-core.LinkType', verbose_name='link type')),
-                ('team', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='organization-team.Team', verbose_name='links')),
-            ],
-            options={
-                'verbose_name': 'link',
-                'verbose_name_plural': 'links',
-                'abstract': False,
-            },
-        ),
-        migrations.RemoveField(
-            model_name='activity',
-            name='person',
-        ),
-        migrations.RemoveField(
-            model_name='activity',
-            name='teams',
-        ),
-        migrations.RemoveField(
-            model_name='person',
-            name='organization',
-        ),
-        migrations.DeleteModel(
-            name='Activity',
-        ),
-        migrations.AddField(
-            model_name='personactivity',
-            name='person',
-            field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='organization-team.Person', verbose_name='person'),
-        ),
-        migrations.AddField(
-            model_name='personactivity',
-            name='team',
-            field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='organization-team.Team', verbose_name='team'),
-        ),
-    ]
diff --git a/app/organization/team/migrations/0014_department_articles_related.py b/app/organization/team/migrations/0014_department_articles_related.py
deleted file mode 100644 (file)
index 28c8095..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-# -*- coding: utf-8 -*-
-# Generated by Django 1.9.7 on 2016-08-10 16:26
-from __future__ import unicode_literals
-
-from django.db import migrations, models
-
-
-class Migration(migrations.Migration):
-
-    dependencies = [
-        ('organization-magazine', '0010_auto_20160808_0118'),
-        ('organization-team', '0013_auto_20160809_1413'),
-    ]
-
-    operations = [
-        migrations.AddField(
-            model_name='department',
-            name='articles_related',
-            field=models.ManyToManyField(blank=True, to='organization-magazine.Article', verbose_name='articles_related'),
-        ),
-    ]
diff --git a/app/organization/team/migrations/0015_auto_20160810_1829.py b/app/organization/team/migrations/0015_auto_20160810_1829.py
deleted file mode 100644 (file)
index 75d12bf..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
-# -*- coding: utf-8 -*-
-# Generated by Django 1.9.7 on 2016-08-10 16:29
-from __future__ import unicode_literals
-
-from django.db import migrations, models
-
-
-class Migration(migrations.Migration):
-
-    dependencies = [
-        ('organization-team', '0014_department_articles_related'),
-    ]
-
-    operations = [
-        migrations.AlterField(
-            model_name='department',
-            name='articles_related',
-            field=models.ManyToManyField(blank=True, to='organization-magazine.Article', verbose_name='Related articles'),
-        ),
-    ]
diff --git a/app/organization/team/migrations/0016_auto_20160812_1521.py b/app/organization/team/migrations/0016_auto_20160812_1521.py
deleted file mode 100644 (file)
index 98a083d..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
-# -*- coding: utf-8 -*-
-# Generated by Django 1.9.7 on 2016-08-12 13:21
-from __future__ import unicode_literals
-
-from django.db import migrations, models
-
-
-class Migration(migrations.Migration):
-
-    dependencies = [
-        ('organization-team', '0015_auto_20160810_1829'),
-    ]
-
-    operations = [
-        migrations.AlterField(
-            model_name='department',
-            name='weaving_css_class',
-            field=models.CharField(blank=True, choices=[('pattern-bg--circles', 'circles'), ('pattern-bg--squares', 'squares'), ('pattern-bg--stripes', 'stripes'), ('pattern-bg--triangles', 'triangles')], max_length=64, verbose_name='background pattern'),
-        ),
-    ]
diff --git a/app/organization/team/migrations/0017_auto_20160823_0744.py b/app/organization/team/migrations/0017_auto_20160823_0744.py
deleted file mode 100644 (file)
index 37e5cd9..0000000
+++ /dev/null
@@ -1,283 +0,0 @@
-# -*- 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/migrations/__init__.py b/app/organization/team/migrations/__init__.py
deleted file mode 100644 (file)
index e69de29..0000000
diff --git a/app/organization/team/models.py b/app/organization/team/models.py
deleted file mode 100644 (file)
index 74841f0..0000000
+++ /dev/null
@@ -1,271 +0,0 @@
-from __future__ import unicode_literals
-
-import os
-import re
-import pwd
-import time
-import urllib
-import string
-import datetime
-import mimetypes
-
-from django.db import models
-from django.utils.translation import ugettext_lazy as _
-from django.core.urlresolvers import reverse, reverse_lazy
-from django.conf import settings
-from django.contrib.auth.models import User
-
-from mezzanine.pages.models import Page
-from mezzanine.core.models import RichText, Displayable, Slugged
-from mezzanine.core.fields import RichTextField, OrderField, FileField
-from mezzanine.utils.models import AdminThumbMixin, upload_to
-from mezzanine.galleries.models import BaseGallery
-
-from organization.core.models import *
-
-from django_countries.fields import CountryField
-# from .nationalities.fields import NationalityField
-
-# Hack to have these strings translated
-mr = _('Mr')
-mrs = _('Ms')
-
-GENDER_CHOICES = [
-    ('male', _('male')),
-    ('female', _('female')),
-]
-
-TITLE_CHOICES = [
-    ('Dr', _('Dr')),
-    ('Prof', _('Prof')),
-    ('Prof Dr', _('Prof Dr')),
-]
-
-PATTERN_CHOICES = [
-    ('pattern-bg--circles', _('circles')),
-    ('pattern-bg--squares', _('squares')),
-    ('pattern-bg--stripes', _('stripes')),
-    ('pattern-bg--triangles', _('triangles')),
-]
-
-ALIGNMENT_CHOICES = (('left', _('left')), ('left', _('left')), ('right', _('right')))
-
-
-class Address(models.Model):
-    """(Address description)"""
-
-    address = models.TextField(_('address'), blank=True)
-    postal_code = models.CharField(_('postal code'), max_length=16, blank=True)
-    country = CountryField(_('country'))
-
-    def __str__(self):
-        return ' '.join((self.address, self.postal_code))
-
-        class Meta:
-            abstract = True
-
-
-class Organization(Slugged, Description, Address, Photo):
-    """(Organization description)"""
-
-    type = models.ForeignKey('OrganizationType', verbose_name=_('organization type'), blank=True, null=True, on_delete=models.SET_NULL)
-    website = models.URLField(_('website'), max_length=512, blank=True)
-    is_on_map = models.BooleanField(_('is on map'), default=True)
-
-    class Meta:
-        verbose_name = _('organization')
-
-
-class OrganizationType(Named):
-    """(OrganizationType description)"""
-
-    class Meta:
-        verbose_name = _('organization type')
-
-
-class Department(Page, SubTitle, RichText, Photo):
-    """(Department description)"""
-
-    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('organization-magazine.Article', verbose_name=_('Related articles'), blank=True)
-
-    class Meta:
-        verbose_name = _('department')
-
-
-class Team(Page, SubTitle, RichText, Photo):
-    """(Team description)"""
-
-    # department = models.ForeignKey('Department', verbose_name=_('department'), related_name="teams", blank=True, null=True, on_delete=models.SET_NULL)
-    partner_organizations = models.ManyToManyField(Organization, verbose_name=_('partner organizations'), blank=True)
-    partner_teams = models.ManyToManyField('Team', verbose_name=_('partner teams'), blank=True)
-
-    class Meta:
-        verbose_name = _('team')
-
-
-class Person(Displayable, AdminThumbMixin, Photo):
-    """(Person description)"""
-
-    user = models.ForeignKey(User, verbose_name=_('user'), blank=True, null=True, on_delete=models.SET_NULL)
-    person_title = models.CharField(_('title'), max_length=16, choices=TITLE_CHOICES, blank=True)
-    gender = models.CharField(_('gender'), max_length=16, choices=GENDER_CHOICES, blank=True)
-    first_name = models.CharField(_('first name'), max_length=255, blank=True, null=True)
-    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'), default=False)
-
-    class Meta:
-        verbose_name = _('person')
-        ordering = ['last_name',]
-
-    def __str__(self):
-        return ' '.join((self.first_name, self.last_name))
-
-    # def get_absolute_url(self):
-    #     return reverse("festival-artist-detail", kwargs={'slug': self.slug})
-
-    def set_names(self):
-        names = self.title.split(' ')
-        if len(names) == 1:
-            self.first_name = ''
-            self.last_name = names[0]
-        elif len(names) == 2:
-            self.first_name = names[0]
-            self.last_name = names[1]
-        else:
-            self.first_name = names[0]
-            self.last_name = ' '.join(names[1:])
-
-    def clean(self):
-        super(Person, self).clean()
-        self.set_names()
-
-    def save(self, *args, **kwargs):
-        self.set_names()
-        super(Person, self).save(*args, **kwargs)
-
-
-class TeamLink(Link):
-
-    team = models.ForeignKey(Team, verbose_name=_('links'))
-
-    def __str__(self):
-        return self.url
-
-
-class ActivityStatus(Named, Description):
-
-    class Meta:
-        verbose_name = _('activity status')
-
-
-class ActivityGrade(Named, Description):
-
-    class Meta:
-        verbose_name = _('activity grade')
-
-
-class ActivityFramework(Named, Description):
-
-    class Meta:
-        verbose_name = _('activity framework')
-
-
-class BudgetCode(Named, Description):
-
-    class Meta:
-        verbose_name = _('budget code')
-
-
-class RecordPiece(Named, Description):
-
-    class Meta:
-        verbose_name = _('record piece')
-
-
-class TrainingType(Named, Description):
-
-    class Meta:
-        verbose_name = _('training type')
-
-
-class TrainingLevel(Named, Description):
-
-    class Meta:
-        verbose_name = _('training level')
-
-
-class TrainingTopic(Named, Description):
-
-    class Meta:
-        verbose_name = _('training topic')
-
-
-class TrainingSpectiality(Named, Description):
-
-    class Meta:
-        verbose_name = _('training speciality')
-
-
-class PersonActivity(Description, Period, RichText):
-    """(Activity description)"""
-
-    person = models.ForeignKey('Person', verbose_name=_('person'))
-    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'), default=False)
-
-    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('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'), 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'), blank=True)
-
-    comments = models.TextField(_('comments'), blank=True)
-
-    record_piece = models.ForeignKey(RecordPiece, blank=True, null=True, on_delete=models.SET_NULL)
-    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')
-        verbose_name_plural = _('activities')
-
-    def __unicode__(self):
-        return ' - '.join((self.person, self.role, self.date_begin, self.date_end))
-
-
-class PersonLink(Link):
-    """A person can have many links."""
-
-    person = models.ForeignKey('Person', verbose_name=_('person'))
-
-    class Meta:
-        verbose_name = _('person link')
diff --git a/app/organization/team/nationalities/__init__.py b/app/organization/team/nationalities/__init__.py
deleted file mode 100644 (file)
index e69de29..0000000
diff --git a/app/organization/team/nationalities/fields.py b/app/organization/team/nationalities/fields.py
deleted file mode 100644 (file)
index 1792406..0000000
+++ /dev/null
@@ -1,117 +0,0 @@
-from django.db.models.fields import CharField
-
-class Nationality(object):
-    """
-    Class represents a nationality.
-
-    >>> hungarian = Nationality('HU')
-    >>> hungarian.code
-    u'HU'
-    >>> hungarian.name
-    u'Hungarian'
-
-    """
-
-    def __init__(self, code):
-        """
-        Constructor accepts ISO 3166-1 country code.
-        """
-        self.code = code
-
-    def __unicode__(self):
-        return str(self.code or '')
-
-    def __eq__(self, other):
-        return self.code == str(other)
-
-    def __ne__(self, other):
-        return not self.__eq__(other)
-
-    def __cmp__(self, other):
-        return cmp(self.code, str(other))
-
-    def __hash__(self):
-        return hash(self.code)
-
-    @property
-    def name(self):
-        """
-        Return verbose name of nationality.
-        """
-        from .nationalities import NATIONALITIES
-        for code, name in NATIONALITIES:
-            if self.code == code:
-                return name
-        return None
-
-
-class NationalityDescriptor(object):
-    """
-    A descriptor for nationality fields on model instances. Returns a
-    Nationality when accessed.
-
-    >>> instance.nationality.name
-    u'Hungarian'
-
-    """
-
-    def __init__(self, field):
-        self.field = field
-
-    def __get__(self, instance=None, owner=None):
-        if instance is None:
-            raise AttributeError(
-                "The '%s' attribute can only be accessed from %s instances."
-                % (self.field.name, owner.__name__))
-        return Nationality(code=instance.__dict__[self.field.name])
-
-    def __set__(self, instance, value):
-        instance.__dict__[self.field.name] = str(value)
-
-
-class NationalityField(CharField):
-    """
-    A nationality field for Django models that provides all nationalities as
-    choices.
-    """
-
-    descriptor_class = NationalityDescriptor
-
-    def __init__(self, *args, **kwargs):
-        from .nationalities import NATIONALITIES
-        kwargs.setdefault('max_length', 2)
-        kwargs.setdefault('choices', NATIONALITIES)
-        super(CharField, self).__init__(*args, **kwargs)
-
-    def get_internal_type(self):
-        return 'CharField'
-
-    def contribute_to_class(self, cls, name):
-        super(NationalityField, self).contribute_to_class(cls, name)
-        setattr(cls, self.name, self.descriptor_class(self))
-
-    def get_prep_lookup(self, lookup_type, value):
-        if hasattr(value, 'code'):
-            value = value.code
-        return super(NationalityField, self).get_prep_lookup(lookup_type, value)
-
-    def pre_save(self, *args, **kwargs):
-        "Returns field's value just before saving."
-        value = super(CharField, self).pre_save(*args, **kwargs)
-        return self.get_prep_value(value)
-
-    def get_prep_value(self, value):
-        "Returns field's value prepared for saving into a database."
-        # Convert the Nationality to unicode for database insertion.
-        if value is None:
-            return None
-        return str(value)
-
-
-# If south is installed, ensure that NationalityField will be introspected just
-# like a normal CharField.
-try:
-    from south.modelsinspector import add_introspection_rules
-    add_introspection_rules([], ["^nationalities\.fields\.NationalityField"])
-except ImportError:
-    pass
diff --git a/app/organization/team/nationalities/nationalities.py b/app/organization/team/nationalities/nationalities.py
deleted file mode 100644 (file)
index 06a2288..0000000
+++ /dev/null
@@ -1,174 +0,0 @@
-from django.utils.translation import ugettext_lazy as _
-
-
-# source: http://www.englishclub.com/vocabulary/world-countries-nationality.htm
-NATIONALITIES = (
-    ('AF', _(u'Afghan')),
-    ('AL', _(u'Albanian')),
-    ('DZ', _(u'Algerian')),
-    ('AD', _(u'Andorran')),
-    ('AO', _(u'Angolan')),
-    ('AR', _(u'Argentinian')),
-    ('AM', _(u'Armenian')),
-    ('AU', _(u'Australian')),
-    ('AT', _(u'Austrian')),
-    ('AZ', _(u'Azerbaijani')),
-    ('BS', _(u'Bahamian')),
-    ('BH', _(u'Bahraini')),
-    ('BD', _(u'Bangladeshi')),
-    ('BB', _(u'Barbadian')),
-    ('BY', _(u'Belorussian')),
-    ('BE', _(u'Belgian')),
-    ('BZ', _(u'Belizian')),
-    ('BJ', _(u'Beninese')),
-    ('BT', _(u'Bhutanese')),
-    ('BO', _(u'Bolivian')),
-    ('BA', _(u'Bosnian')),
-    ('BW', _(u'Botswanan')),
-    ('BR', _(u'Brazilian')),
-    ('GB', _(u'British')),
-    ('BN', _(u'Bruneian')),
-    ('BG', _(u'Bulgarian')),
-    ('BF', _(u'Burkinese')),
-    ('MM', _(u'Burmese')),
-    ('BF', _(u'Burundian')),
-    ('BI', _(u'Cambodian')),
-    ('CM', _(u'Cameroonian')),
-    ('CA', _(u'Canadian')),
-    ('CV', _(u'Cape Verdean')),
-    ('TD', _(u'Chadian')),
-    ('CL', _(u'Chilean')),
-    ('CN', _(u'Chinese')),
-    ('CO', _(u'Colombian')),
-    ('CG', _(u'Congolese')),
-    ('CR', _(u'Costa Rican')),
-    ('HR', _(u'Croatian')),
-    ('CU', _(u'Cuban')),
-    ('CY', _(u'Cypriot')),
-    ('CZ', _(u'Czech')),
-    ('DK', _(u'Danish')),
-    ('DJ', _(u'Djiboutian')),
-    ('DM', _(u'Dominican')),
-    ('DO', _(u'Dominican')),
-    ('EC', _(u'Ecuadorean')),
-    ('EG', _(u'Egyptian')),
-    ('SV', _(u'Salvadorean')),
-    ('GB', _(u'English')),
-    ('ER', _(u'Eritrean')),
-    ('EE', _(u'Estonian')),
-    ('ET', _(u'Ethiopian')),
-    ('FJ', _(u'Fijian')),
-    ('FI', _(u'Finnish')),
-    ('FR', _(u'French')),
-    ('GA', _(u'Gabonese')),
-    ('GM', _(u'Gambian')),
-    ('GE', _(u'Georgian')),
-    ('DE', _(u'German')),
-    ('GH', _(u'Ghanaian')),
-    ('GR', _(u'Greek')),
-    ('GD', _(u'Grenadian')),
-    ('GT', _(u'Guatemalan')),
-    ('GQ', _(u'Guinean')),
-    ('GY', _(u'Guyanese')),
-    ('HT', _(u'Haitian')),
-    ('NL', _(u'Dutch')),
-    ('HN', _(u'Honduran')),
-    ('HU', _(u'Hungarian')),
-    ('IS', _(u'Icelandic')),
-    ('IO', _(u'Indian')),
-    ('ID', _(u'Indonesian')),
-    ('IR', _(u'Iranian')),
-    ('IQ', _(u'Iraqi')),
-    ('IE', _(u'Irish')),
-    ('IL', _(u'Israeli')),
-    ('IT', _(u'Italian')),
-    ('JM', _(u'Jamaican')),
-    ('JP', _(u'Japanese')),
-    ('JO', _(u'Jordanian')),
-    ('KZ', _(u'Kazakh')),
-    ('KE', _(u'Kenyan')),
-    ('KW', _(u'Kuwaiti')),
-    ('LA', _(u'Laotian')),
-    ('LV', _(u'Latvian')),
-    ('LB', _(u'Lebanese')),
-    ('LR', _(u'Liberian')),
-    ('LY', _(u'Libyan')),
-    ('LT', _(u'Lithuanian')),
-    ('MK', _(u'Macedonian')),
-    ('MG', _(u'Malagasay')),
-    ('MW', _(u'Malawian')),
-    ('MY', _(u'Malaysian')),
-    ('MV', _(u'Maldivian')),
-    ('ML', _(u'Malian')),
-    ('MT', _(u'Maltese')),
-    ('MR', _(u'Mauritanian')),
-    ('MU', _(u'Mauritian')),
-    ('MX', _(u'Mexican')),
-    ('MD', _(u'Moldovan')),
-    ('MC', _(u'Monacan')),
-    ('MN', _(u'Mongolian')),
-    ('ME', _(u'Montenegrin')),
-    ('MA', _(u'Moroccan')),
-    ('MZ', _(u'Mozambican')),
-    ('NA', _(u'Namibian')),
-    ('NP', _(u'Nepalese')),
-    ('NI', _(u'Nicaraguan')),
-    ('NE', _(u'Nigerien')),
-    ('NG', _(u'Nigerian')),
-    ('KP', _(u'North Korean')),
-    ('NO', _(u'Norwegian')),
-    ('OM', _(u'Omani')),
-    ('PK', _(u'Pakistani')),
-    ('PA', _(u'Panamanian')),
-    ('PG', _(u'Guinean')),
-    ('PY', _(u'Paraguayan')),
-    ('PE', _(u'Peruvian')),
-    ('PH', _(u'Philippine')),
-    ('PL', _(u'Polish')),
-    ('PT', _(u'Portuguese')),
-    ('QA', _(u'Qatari')),
-    ('RO', _(u'Romanian')),
-    ('RU', _(u'Russian')),
-    ('RW', _(u'Rwandan')),
-    ('SA', _(u'Saudi')),
-    ('AE', _(u'Scottish')),
-    ('SN', _(u'Senegalese')),
-    ('RS', _(u'Serbian')),
-    ('SC', _(u'Seychellois')),
-    ('SL', _(u'Sierra Leonian')),
-    ('SG', _(u'Singaporean')),
-    ('SK', _(u'Slovak')),
-    ('SI', _(u'Slovenian')),
-    ('SO', _(u'Somali')),
-    ('ZA', _(u'South African')),
-    ('KR', _(u'South Korean')),
-    ('ES', _(u'Spanish')),
-    ('LK', _(u'Sri Lankan')),
-    ('SD', _(u'Sudanese')),
-    ('SR', _(u'Surinamese')),
-    ('SZ', _(u'Swazi')),
-    ('SE', _(u'Swedish')),
-    ('CH', _(u'Swiss')),
-    ('SY', _(u'Syrian')),
-    ('TW', _(u'Taiwanese')),
-    ('TJ', _(u'Tadjik')),
-    ('TZ', _(u'Tanzanian')),
-    ('TH', _(u'Thai')),
-    ('TG', _(u'Togolese')),
-    ('TT', _(u'Trinidadian')),
-    ('TN', _(u'Tunisian')),
-    ('TR', _(u'Turkish')),
-    ('TM', _(u'Turkmen')),
-    ('TV', _(u'Tuvaluan')),
-    ('UG', _(u'Ugandan')),
-    ('UA', _(u'Ukrainian')),
-    ('UY', _(u'Uruguayan')),
-    ('UZ', _(u'Uzbek')),
-    ('VU', _(u'Vanuatuan')),
-    ('VE', _(u'Venezuelan')),
-    ('VN', _(u'Vietnamese')),
-    ('GB', _(u'Welsh')),
-    ('YE', _(u'Yemeni')),
-    ('ZM', _(u'Zambian')),
-    ('ZW', _(u'Zimbabwean')),
-)
diff --git a/app/organization/team/tests.py b/app/organization/team/tests.py
deleted file mode 100644 (file)
index 7ce503c..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-from django.test import TestCase
-
-# Create your tests here.
diff --git a/app/organization/team/translation.py b/app/organization/team/translation.py
deleted file mode 100644 (file)
index 8d439fb..0000000
+++ /dev/null
@@ -1,38 +0,0 @@
-from modeltranslation.translator import translator, register, TranslationOptions
-
-from organization.team.models import *
-
-
-@register(Organization)
-class OrganizationTranslationOptions(TranslationOptions):
-
-    fields = ('description',)
-
-
-@register(Department)
-class DepartmentTranslationOptions(TranslationOptions):
-
-    fields = ('sub_title', 'content',)
-
-@register(Team)
-class TeamTranslationOptions(TranslationOptions):
-
-    fields = ('sub_title', 'content',)
-
-
-@register(Person)
-class PersonTranslationOptions(TranslationOptions):
-
-    fields = ('bio',)
-
-
-@register(PersonActivity)
-class PersonActivityTranslationOptions(TranslationOptions):
-
-    fields = ('description', 'content')
-
-
-@register(PersonLink)
-class PersonTranslationOptions(TranslationOptions):
-
-    pass
diff --git a/app/organization/team/urls.py b/app/organization/team/urls.py
deleted file mode 100644 (file)
index 59b66b5..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-from __future__ import unicode_literals
-
-import django.views.i18n
-from django.conf.urls import patterns, include, url
-from django.conf.urls.i18n import i18n_patterns
-
-from mezzanine.core.views import direct_to_template
-from mezzanine.conf import settings
-
-from organization.team.views import *
-
-
-urlpatterns = [
-    url(r'^(?P<department>.*)/teams/$', TeamListView.as_view(), name="organization-team-team-list"),
-]
diff --git a/app/organization/team/views.py b/app/organization/team/views.py
deleted file mode 100644 (file)
index 3d4649f..0000000
+++ /dev/null
@@ -1,61 +0,0 @@
-from django.shortcuts import render
-
-from organization.team.models import *
-from organization.core.views import *
-
-
-class DepartmentListView(ListView):
-
-    model = Department
-    template_name='team/department_list.html'
-
-
-class DepartmentDetailView(SlugMixin, DetailView):
-
-    model = Department
-    template_name='team/department_detail.html'
-    context_object_name = 'department'
-
-
-class TeamListView(ListView):
-
-    model = Team
-    template_name='team/team_list.html'
-
-
-class TeamDetailView(SlugMixin, DetailView):
-
-    model = Team
-    template_name='team/team_detail.html'
-    context_object_name = 'team'
-
-    def get_context_data(self, **kwargs):
-        context = super(TeamListView, self).get_context_data(**kwargs)
-        partners = []
-
-        for partner in self.object.partner_organizations:
-            partners.append(partner)
-        for partner in self.object.partner_teams:
-            partners.append(partner)
-
-        for project in team.project_leader.all():
-            for partner in project.partner_organizations:
-                partners.append(partner)
-            for partner in project.partner_teams:
-                partners.append(partner)
-
-        context['partners'] = partners
-        return context
-
-
-class PersonListView(ListView):
-
-    model = Person
-    template_name='team/person_list.html'
-
-
-class PersonDetailView(SlugMixin, DetailView):
-
-    model = Person
-    template_name='team/person_detail.html'
-    context_object_name = 'person'
index 28fe59a380de8997970346855a280f3eb3016e31..af32080298fdd45899c4e816a3a43e58aea4436d 100644 (file)
@@ -17,6 +17,6 @@ urlpatterns = [
     url("^", include('organization.festival.urls')),
     url("^", include('organization.magazine.urls')),
     url("^", include('organization.media.urls')),
-    url("^", include('organization.project.urls')),
-    url("^", include('organization.team.urls')),
+    url("^", include('organization.projects.urls')),
+    url("^", include('organization.network.urls')),
 ]
index ded9b9adcb7a91c296056aa0ec4fd1fb8a6d8887..4b7fe38590f1eaa6e794ac1f9f634f233ad980a3 100644 (file)
@@ -228,11 +228,11 @@ INSTALLED_APPS = [
 #    "orderable",
     "organization.core",
     "organization.pages",
-    "organization.team",
+    "organization.network",
     "organization.festival",
     "organization.magazine",
     "organization.media",
-    "organization.project",
+    "organization.projects",
 ]
 
 
diff --git a/app/templates/network/department_detail.html b/app/templates/network/department_detail.html
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/app/templates/network/department_list.html b/app/templates/network/department_list.html
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/app/templates/network/person_detail.html b/app/templates/network/person_detail.html
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/app/templates/network/person_list.html b/app/templates/network/person_list.html
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/app/templates/network/team_detail.html b/app/templates/network/team_detail.html
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/app/templates/network/team_list.html b/app/templates/network/team_list.html
new file mode 100644 (file)
index 0000000..fababb0
--- /dev/null
@@ -0,0 +1,18 @@
+{% extends "base.html" %}
+{% load i18n mezzanine_tags keyword_tags  pages_tags %}
+
+{% block title %}
+    {% trans "Team list" %}
+{% endblock %}
+
+{% block main %}
+
+    {% for team in object_list %}
+     <div class="row">
+        <div class="col-sm-9 col-sm-push-3 col-lg-8 col-lg-push-2">
+         {{ team.title }}
+        </div>
+    </div>
+    {% endfor %}
+
+{% endblock %}
diff --git a/app/templates/pages/department.html b/app/templates/pages/department.html
deleted file mode 100644 (file)
index 3a8b673..0000000
+++ /dev/null
@@ -1,107 +0,0 @@
-{% extends "pages/basicpage.html" %}
-{% load i18n mezzanine_tags keyword_tags  pages_tags organization_tags %}
-
-{% block meta_title %}{{ page.meta_title }}{% endblock %}
-
-{% block meta_keywords %}{% metablock %}
-{% keywords_for page as keywords %}
-{% for keyword in keywords %}
-    {% if not forloop.first %}, {% endif %}
-    {{ keyword }}
-{% endfor %}
-{% endmetablock %}{% endblock %}
-
-{% block meta_description %}{% metablock %}
-{{ page.description }}
-{% endmetablock %}{% endblock %}
-
-{% block page_class %}
-    department
-{% endblock %}
-
-{% block body_class %}
-    pattern pattern-bg {{ page.department.weaving_css_class }}
-{% endblock %}
-
-{% block page_title %}
-
-    {% editable page.department.title %}
-        <h1 class="dashed">{{ page.department.title }}</h1>
-    {% endeditable %}
-
-{% endblock %}
-
-{% block page_content %}
-    {% if page.department.sub_title %}
-        {% editable page.department.sub_title %}
-            <div class="chapo">
-                {{ page.department.sub_title }}
-            </div>
-        {% endeditable %}
-    {% endif %}
-
-    {% editable page.department.content %}
-        {{ page.department.content|richtext_filters|safe }}
-    {% endeditable %}
-
-{% endblock %}
-
-{% block page_slider %}
-  {% if page.department.pageimage_set.all %}
-    {% with page.department.pageimage_set.all as slider_images %}
-        {% include 'core/inc/slider.html' %}
-    {% endwith %}
-  {% endif %}
-{% endblock %}
-
-{% block page_sub_content %}
-
-    {% if page.department.pageblock_set.all %}
-        <div class="white-bg pb2">
-            <div class="container">
-                <div class="row">
-                    <div class="col-sm-12">
-                        <hr class="mt0" />
-                        {% for pageblock in page.department.pageblock_set.all %}
-                            {% if not forloop.first and pageblock.with_separator %}
-                                <hr />
-                            {% endif %}
-                            <div class="row" data-summary-content>
-                                <div class="col-sm-9 col-sm-push-3 col-lg-8 col-lg-push-2 white-bg">
-                                    <h2 class="dotted">{{ pageblock.title }}</h2>
-                                    {{ pageblock.content|richtext_filters|safe }}
-                                </div>
-                            </div>
-                        {% endfor %}
-                    </div>
-                </div>
-            </div>
-        </div>
-    {% endif %}
-
-{% endblock %}
-
-{% block page_related_content %}
-
-    {% if page.department.articles_related.all %}
-    
-        <div class="white-bg pb2">
-            <div class="container">
-                <div class="row tac">
-                    <div class="col-xs-12">
-                        <h2 class="dashed dashed--center">{% trans "Also discover" %}</h2>
-                    </div>
-                </div>
-                <div class="row tac">
-                    {% for article in page.department.articles_related.all %}
-                        <div class="col-lg-3 col-md-4 col-sm-4 col-xs-6">
-                            {% include 'magazine/article/includes/article_card.html' %}
-                        </div>
-                    {% endfor %}
-                </div>
-            </div>
-        </div>
-
-    {% endif %}
-
-{% endblock %}
diff --git a/app/templates/pages/departmentpage.html b/app/templates/pages/departmentpage.html
new file mode 100644 (file)
index 0000000..b59643d
--- /dev/null
@@ -0,0 +1,107 @@
+{% extends "pages/basicpage.html" %}
+{% load i18n mezzanine_tags keyword_tags  pages_tags organization_tags %}
+
+{% block meta_title %}{{ page.meta_title }}{% endblock %}
+
+{% block meta_keywords %}{% metablock %}
+{% keywords_for page as keywords %}
+{% for keyword in keywords %}
+    {% if not forloop.first %}, {% endif %}
+    {{ keyword }}
+{% endfor %}
+{% endmetablock %}{% endblock %}
+
+{% block meta_description %}{% metablock %}
+{{ page.description }}
+{% endmetablock %}{% endblock %}
+
+{% block page_class %}
+    department
+{% endblock %}
+
+{% block body_class %}
+    pattern pattern-bg {{ page.departmentpage.weaving_css_class }}
+{% endblock %}
+
+{% block page_title %}
+
+    {% editable page.departmentpage.title %}
+        <h1 class="dashed">{{ page.departmentpage.title }}</h1>
+    {% endeditable %}
+
+{% endblock %}
+
+{% block page_content %}
+    {% if page.departmentpage.sub_title %}
+        {% editable page.departmentpage.sub_title %}
+            <div class="chapo">
+                {{ page.departmentpage.sub_title }}
+            </div>
+        {% endeditable %}
+    {% endif %}
+
+    {% editable page.departmentpage.content %}
+        {{ page.departmentpage.content|richtext_filters|safe }}
+    {% endeditable %}
+
+{% endblock %}
+
+{% block page_slider %}
+  {% if page.departmentpage.pageimage_set.all %}
+    {% with page.departmentpage.pageimage_set.all as slider_images %}
+        {% include 'core/inc/slider.html' %}
+    {% endwith %}
+  {% endif %}
+{% endblock %}
+
+{% block page_sub_content %}
+
+    {% if page.departmentpage.pageblock_set.all %}
+        <div class="white-bg pb2">
+            <div class="container">
+                <div class="row">
+                    <div class="col-sm-12">
+                        <hr class="mt0" />
+                        {% for pageblock in page.departmentpage.pageblock_set.all %}
+                            {% if not forloop.first and pageblock.with_separator %}
+                                <hr />
+                            {% endif %}
+                            <div class="row" data-summary-content>
+                                <div class="col-sm-9 col-sm-push-3 col-lg-8 col-lg-push-2 white-bg">
+                                    <h2 class="dotted">{{ pageblock.title }}</h2>
+                                    {{ pageblock.content|richtext_filters|safe }}
+                                </div>
+                            </div>
+                        {% endfor %}
+                    </div>
+                </div>
+            </div>
+        </div>
+    {% endif %}
+
+{% endblock %}
+
+{% block page_related_content %}
+
+    {% if page.departmentpage.articles_related.all %}
+
+        <div class="white-bg pb2">
+            <div class="container">
+                <div class="row tac">
+                    <div class="col-xs-12">
+                        <h2 class="dashed dashed--center">{% trans "Also discover" %}</h2>
+                    </div>
+                </div>
+                <div class="row tac">
+                    {% for article in page.departmentpage.articles_related.all %}
+                        <div class="col-lg-3 col-md-4 col-sm-4 col-xs-6">
+                            {% include 'magazine/article/includes/article_card.html' %}
+                        </div>
+                    {% endfor %}
+                </div>
+            </div>
+        </div>
+
+    {% endif %}
+
+{% endblock %}
diff --git a/app/templates/pages/team.html b/app/templates/pages/team.html
deleted file mode 100644 (file)
index f8cbe12..0000000
+++ /dev/null
@@ -1,92 +0,0 @@
-{% extends "pages/basicpage.html" %}
-{% load i18n mezzanine_tags keyword_tags  pages_tags organization_tags %}
-
-{% block meta_title %}{{ page.meta_title }}{% endblock %}
-
-{% block meta_keywords %}{% metablock %}
-{% keywords_for page as keywords %}
-{% for keyword in keywords %}
-    {% if not forloop.first %}, {% endif %}
-    {{ keyword }}
-{% endfor %}
-{% endmetablock %}{% endblock %}
-
-{% block meta_description %}{% metablock %}
-{{ page.description }}
-{% endmetablock %}{% endblock %}
-
-{% block page_class %}
-    department
-{% endblock %}
-
-{% block page_title %}
-
-    {% editable page.team.title %}
-        <h1 class="dotted">{{ page.team.title }}</h1>
-    {% endeditable %}
-
-{% endblock %}
-
-{% block page_slider %}
-  {% if page.team.pageimage_set.all %}
-    {% with page.team.pageimage_set.all as slider_images %}
-        {% include 'core/inc/slider.html' %}
-    {% endwith %}
-  {% endif %}
-{% endblock %}
-
-{% block page_content %}
-
-    {% if page.team.sub_title %}
-        {% editable page.team.sub_title %}
-            <div class="chapo">
-                {{ page.team.sub_title }}
-            </div>
-        {% endeditable %}
-    {% endif %}
-
-    {% editable page.team.content %}
-        {{ page.team.content|richtext_filters|safe }}
-    {% endeditable %}
-
-    {% if page.get_ascendants|length == 1 %}
-        {% children_pages page.id as childrens %}
-        {% if childrens %}
-            <div class="page__childrens">
-                {% for children in childrens %}
-                    {% with children as object %}
-                        {% include "pages/includes/page_card.html" %}
-                    {% endwith %}
-                {% endfor %}
-            </div>
-        {% endif %}
-    {% endif %}
-
-{% endblock %}
-
-{% block page_sub_content %}
-
-    {% if page.team.pageblock_set.all %}
-        <div class="white-bg pb2">
-            <div class="container">
-                <div class="row">
-                    <div class="col-sm-12">
-                        <hr class="mt0" />
-                        {% for pageblock in page.team.pageblock_set.all %}
-                            <div class="row" data-summary-content>
-                                <div class="col-sm-9 col-sm-push-3 col-lg-8 col-lg-push-2 white-bg">
-                                    {% if not forloop.first and pageblock.with_separator %}
-                                        <hr />
-                                    {% endif %}
-                                    <h2 class="dotted">{{ pageblock.title }}</h2>
-                                    {{ pageblock.content|richtext_filters|safe }}
-                                </div>
-                            </div>
-                        {% endfor %}
-                    </div>
-                </div>
-            </div>
-        </div>
-    {% endif %}
-
-{% endblock %}
diff --git a/app/templates/pages/teampage.html b/app/templates/pages/teampage.html
new file mode 100644 (file)
index 0000000..3b0f989
--- /dev/null
@@ -0,0 +1,92 @@
+{% extends "pages/basicpage.html" %}
+{% load i18n mezzanine_tags keyword_tags  pages_tags organization_tags %}
+
+{% block meta_title %}{{ page.meta_title }}{% endblock %}
+
+{% block meta_keywords %}{% metablock %}
+{% keywords_for page as keywords %}
+{% for keyword in keywords %}
+    {% if not forloop.first %}, {% endif %}
+    {{ keyword }}
+{% endfor %}
+{% endmetablock %}{% endblock %}
+
+{% block meta_description %}{% metablock %}
+{{ page.description }}
+{% endmetablock %}{% endblock %}
+
+{% block page_class %}
+    department
+{% endblock %}
+
+{% block page_title %}
+
+    {% editable page.teampage.title %}
+        <h1 class="dotted">{{ page.teampage.title }}</h1>
+    {% endeditable %}
+
+{% endblock %}
+
+{% block page_slider %}
+  {% if page.teampage.pageimage_set.all %}
+    {% with page.teampage.pageimage_set.all as slider_images %}
+        {% include 'core/inc/slider.html' %}
+    {% endwith %}
+  {% endif %}
+{% endblock %}
+
+{% block page_content %}
+
+    {% if page.teampage.sub_title %}
+        {% editable page.teampage.sub_title %}
+            <div class="chapo">
+                {{ page.teampage.sub_title }}
+            </div>
+        {% endeditable %}
+    {% endif %}
+
+    {% editable page.teampage.content %}
+        {{ page.teampage.content|richtext_filters|safe }}
+    {% endeditable %}
+
+    {% if page.get_ascendants|length == 1 %}
+        {% children_pages page.id as childrens %}
+        {% if childrens %}
+            <div class="page__childrens">
+                {% for children in childrens %}
+                    {% with children as object %}
+                        {% include "pages/includes/page_card.html" %}
+                    {% endwith %}
+                {% endfor %}
+            </div>
+        {% endif %}
+    {% endif %}
+
+{% endblock %}
+
+{% block page_sub_content %}
+
+    {% if page.teampage.pageblock_set.all %}
+        <div class="white-bg pb2">
+            <div class="container">
+                <div class="row">
+                    <div class="col-sm-12">
+                        <hr class="mt0" />
+                        {% for pageblock in page.teampage.pageblock_set.all %}
+                            <div class="row" data-summary-content>
+                                <div class="col-sm-9 col-sm-push-3 col-lg-8 col-lg-push-2 white-bg">
+                                    {% if not forloop.first and pageblock.with_separator %}
+                                        <hr />
+                                    {% endif %}
+                                    <h2 class="dotted">{{ pageblock.title }}</h2>
+                                    {{ pageblock.content|richtext_filters|safe }}
+                                </div>
+                            </div>
+                        {% endfor %}
+                    </div>
+                </div>
+            </div>
+        </div>
+    {% endif %}
+
+{% endblock %}
diff --git a/app/templates/project/project_detail.html b/app/templates/project/project_detail.html
deleted file mode 100644 (file)
index e69de29..0000000
diff --git a/app/templates/project/project_list.html b/app/templates/project/project_list.html
deleted file mode 100644 (file)
index e69de29..0000000
diff --git a/app/templates/projects/project_detail.html b/app/templates/projects/project_detail.html
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/app/templates/projects/project_list.html b/app/templates/projects/project_list.html
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/app/templates/team/department_detail.html b/app/templates/team/department_detail.html
deleted file mode 100644 (file)
index e69de29..0000000
diff --git a/app/templates/team/department_list.html b/app/templates/team/department_list.html
deleted file mode 100644 (file)
index e69de29..0000000
diff --git a/app/templates/team/person_detail.html b/app/templates/team/person_detail.html
deleted file mode 100644 (file)
index e69de29..0000000
diff --git a/app/templates/team/person_list.html b/app/templates/team/person_list.html
deleted file mode 100644 (file)
index e69de29..0000000
diff --git a/app/templates/team/team_detail.html b/app/templates/team/team_detail.html
deleted file mode 100644 (file)
index e69de29..0000000
diff --git a/app/templates/team/team_list.html b/app/templates/team/team_list.html
deleted file mode 100644 (file)
index fababb0..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
-{% extends "base.html" %}
-{% load i18n mezzanine_tags keyword_tags  pages_tags %}
-
-{% block title %}
-    {% trans "Team list" %}
-{% endblock %}
-
-{% block main %}
-
-    {% for team in object_list %}
-     <div class="row">
-        <div class="col-sm-9 col-sm-push-3 col-lg-8 col-lg-push-2">
-         {{ team.title }}
-        </div>
-    </div>
-    {% endfor %}
-
-{% endblock %}
index 0ea2016ff9e1956e7f2439a565f64d9a81a95a60..cf3df696a6cc49bdd449480ddba51d5aa8da83d3 100644 (file)
@@ -44,7 +44,7 @@ app:
   volumes:
     - ./app/:/srv/app
     - ./lib/mezzanine-agenda/:/srv/lib/mezzanine-agenda
-    - ./lib/mezzanine/:/srv/lib/mezzanine
+    - ./lib/mezzanine/:/srv/lib/mezzanine
   volumes_from:
     - data
   expose: