]> git.parisson.com Git - mezzo.git/commitdiff
Make more abtract classes and linked resources (images, blocks, etc)
authorGuillaume Pellerin <guillaume.pellerin@ircam.fr>
Tue, 9 Aug 2016 13:01:46 +0000 (15:01 +0200)
committerGuillaume Pellerin <guillaume.pellerin@ircam.fr>
Tue, 9 Aug 2016 13:01:46 +0000 (15:01 +0200)
16 files changed:
app/organization/core/admin.py
app/organization/core/migrations/0010_auto_20160808_0118.py [new file with mode: 0644]
app/organization/core/migrations/0011_auto_20160809_1413.py [new file with mode: 0644]
app/organization/core/models.py
app/organization/core/translation.py
app/organization/magazine/migrations/0010_auto_20160808_0118.py [new file with mode: 0644]
app/organization/project/admin.py
app/organization/project/migrations/0003_auto_20160808_0118.py [new file with mode: 0644]
app/organization/project/migrations/0004_auto_20160809_1413.py [new file with mode: 0644]
app/organization/project/models.py
app/organization/project/translation.py
app/organization/team/admin.py
app/organization/team/migrations/0012_auto_20160808_0118.py [new file with mode: 0644]
app/organization/team/migrations/0013_auto_20160809_1413.py [new file with mode: 0644]
app/organization/team/models.py
app/organization/team/translation.py

index 3f9b033fe335d547da544ed37354307b684a8288..47e8e3bce9be0cb7be97a0bf95dc874c165243ca 100644 (file)
@@ -14,8 +14,12 @@ class PageImageInline(TabularDynamicInlineAdmin):
 
     model = PageImage
 
+
 class BasicPageAdmin(PageAdmin):
 
     inlines = [PageBlockInline, PageImageInline]
 
+
+
 admin.site.register(BasicPage, BasicPageAdmin)
+admin.site.register(LinkType)
diff --git a/app/organization/core/migrations/0010_auto_20160808_0118.py b/app/organization/core/migrations/0010_auto_20160808_0118.py
new file mode 100644 (file)
index 0000000..6799e47
--- /dev/null
@@ -0,0 +1,31 @@
+# -*- 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
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('organization-core', '0009_pageblock_with_separator'),
+    ]
+
+    operations = [
+        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.AlterModelOptions(
+            name='pageimage',
+            options={'ordering': ('_order',), 'verbose_name': 'image', 'verbose_name_plural': 'images'},
+        ),
+    ]
diff --git a/app/organization/core/migrations/0011_auto_20160809_1413.py b/app/organization/core/migrations/0011_auto_20160809_1413.py
new file mode 100644 (file)
index 0000000..3b0f766
--- /dev/null
@@ -0,0 +1,41 @@
+# -*- 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
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('organization-core', '0010_auto_20160808_0118'),
+    ]
+
+    operations = [
+        migrations.AlterField(
+            model_name='pageimage',
+            name='credits',
+            field=models.CharField(blank=True, max_length=256, null=True, verbose_name='credits'),
+        ),
+        migrations.AlterField(
+            model_name='pageimage',
+            name='description',
+            field=models.TextField(blank=True, verbose_name='description'),
+        ),
+        migrations.AlterField(
+            model_name='pageimage',
+            name='description_en',
+            field=models.TextField(blank=True, null=True, verbose_name='description'),
+        ),
+        migrations.AlterField(
+            model_name='pageimage',
+            name='description_fr',
+            field=models.TextField(blank=True, null=True, verbose_name='description'),
+        ),
+        migrations.AlterField(
+            model_name='pageimage',
+            name='page',
+            field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='pages.Page', verbose_name='page'),
+        ),
+    ]
index b9a5f5d48dd4a1d1b5d80b3e9ab9c8e5562e6267..c1b7c746e48ce4d9ba108dbdde5d28026ade7a25 100644 (file)
@@ -55,6 +55,7 @@ class SubTitle(models.Model):
     class Meta:
         abstract = True
 
+
 class Category(Named):
     """Category description)"""
 
@@ -71,31 +72,22 @@ class BasicPage(Page, SubTitle, Photo, RichText):
         verbose_name = 'basic page'
 
 
-class PageBlock(Titled, RichText):
+class Block(RichText, Titled):
 
-    page = models.ForeignKey(Page, verbose_name=_('page'), blank=True, null=True, on_delete=models.SET_NULL)
     with_separator = models.BooleanField(default=False)
     background_color = models.CharField(_('background color'), max_length=32, choices=COLOR_CHOICES, blank=True)
 
     class Meta:
-        verbose_name = 'page block'
-
+        abstract = True
 
-class PageImage(Orderable):
-    """
-    An image for a page
-    """
 
-    file = FileField(_("Image"), max_length=1024, format="Image", upload_to="images/pages")
-    description = models.TextField(_('photo description'), blank=True)
-    credits = models.CharField(_('photo credits'), max_length=256, blank=True, null=True)
-    page = models.ForeignKey(Page)
+class Image(Description, Orderable):
 
+    file = FileField(_("Image"), max_length=1024, format="Image", upload_to="images")
+    credits = models.CharField(_('credits'), max_length=256, blank=True, null=True)
 
     class Meta:
-        verbose_name = _("Image")
-        verbose_name_plural = _("Images")
-        order_with_respect_to = "page"
+        abstract = True
 
     def __str__(self):
         value = self.description
@@ -104,3 +96,70 @@ class PageImage(Orderable):
         if not value:
             value = ""
         return value
+
+
+class PageBlock(Block):
+
+    page = models.ForeignKey(Page, verbose_name=_('page'), blank=True, null=True, on_delete=models.SET_NULL)
+
+    class Meta:
+        verbose_name = 'page block'
+
+
+class PageImage(Image):
+
+    page = models.ForeignKey(Page, verbose_name=_('page'))
+
+    class Meta:
+        verbose_name = _("image")
+        verbose_name_plural = _("images")
+        order_with_respect_to = "page"
+
+
+class LinkType(models.Model):
+    """
+    A link type could be ``Facebook`` or ``Twitter`` or ``Website``.
+    This is masterdata that should be created by the admins when the site is
+    deployed for the first time.
+    :ordering: Enter numbers here if you want links to be displayed in a
+      special order.
+    """
+
+    name = models.CharField(max_length=256, verbose_name=_('name'))
+    slug = models.SlugField(max_length=256, verbose_name=_('slug'), 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)'),
+        blank=True,
+    )
+    ordering = models.PositiveIntegerField(verbose_name=_('ordering'), null=True, blank=True)
+
+    class Meta:
+        ordering = ['ordering', ]
+
+    def __str__(self):
+        return self.name
+
+
+class Link(models.Model):
+    """A person can have many links."""
+
+    link_type = models.ForeignKey(LinkType, verbose_name=_('link type'))
+    url = models.URLField(verbose_name=_('URL'))
+
+    class Meta:
+        abstract = True
+        verbose_name = _('link')
+        verbose_name_plural = _('links')
+
+    def __str__(self):
+        return self.url
+
+
+class Period(models.Model):
+
+    date_begin = models.DateField(_('begin date'), null=True, blank=True)
+    date_end = models.DateField(_('end date'), null=True, blank=True)
+
+    class Meta:
+        abstract = True
index 31d20b130fcaa588837a6deae9fd4ccb3509959a..be8346b819826dd310decb678a18452369682e13 100644 (file)
@@ -1,7 +1,7 @@
 from modeltranslation.translator import translator, register, TranslationOptions
 from mezzanine.pages.models import Page, RichText
 from mezzanine.pages.translation import TranslatedRichText
-from organization.core.models import BasicPage, PageBlock, PageImage
+from organization.core.models import *
 
 # @register(SubTitle)
 # class SubTitleTranslationOptions(TranslationOptions):
diff --git a/app/organization/magazine/migrations/0010_auto_20160808_0118.py b/app/organization/magazine/migrations/0010_auto_20160808_0118.py
new file mode 100644 (file)
index 0000000..8a70bca
--- /dev/null
@@ -0,0 +1,19 @@
+# -*- 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
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('organization-magazine', '0009_brief_sort_order'),
+    ]
+
+    operations = [
+        migrations.AlterModelOptions(
+            name='brief',
+            options={'ordering': ['sort_order'], 'verbose_name': 'brief'},
+        ),
+    ]
index 19a227a35721efadcd1978aa161150b76feb6857..0f3a33472714b41bf4665696e5c97999354ad12e 100644 (file)
@@ -1,11 +1,26 @@
 from copy import deepcopy
-from django.contrib import admin
-from organization.project.models import Project
-#from custom.admin import SubTitleAdmin
 
 from django.contrib import admin
 from django.utils.translation import ugettext_lazy as _
-from mezzanine.core.admin import DisplayableAdmin, OwnableAdmin
+
+from mezzanine.core.admin import *
+
+from organization.project.models import *
+
+
+class ProjectLinkInline(StackedDynamicInlineAdmin):
+
+    model = ProjectLink
+
+
+class ProjectImageInline(StackedDynamicInlineAdmin):
+
+    model = ProjectImage
+
+
+class ProjectBlockInline(StackedDynamicInlineAdmin):
+
+    model = ProjectBlock
 
 
 class ProjectAdmin(admin.ModelAdmin):
@@ -16,6 +31,7 @@ class ProjectAdmin(admin.ModelAdmin):
 class ProjectAdminDisplayable(DisplayableAdmin):
 
     fieldsets = deepcopy(ProjectAdmin.fieldsets)
+    inlines = [ProjectImageInline, ProjectBlockInline, ProjectLinkInline, ]
 
 
 admin.site.register(Project, ProjectAdminDisplayable)
diff --git a/app/organization/project/migrations/0003_auto_20160808_0118.py b/app/organization/project/migrations/0003_auto_20160808_0118.py
new file mode 100644 (file)
index 0000000..1838ed6
--- /dev/null
@@ -0,0 +1,80 @@
+# -*- 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
new file mode 100644 (file)
index 0000000..3863030
--- /dev/null
@@ -0,0 +1,84 @@
+# -*- 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'),
+        ),
+    ]
index ef8dcbc124e6149a0ea4502533be9356b24fc826..1ab7cfa1fa924d37d26e0edb8b612e580703d062 100644 (file)
@@ -3,8 +3,9 @@ 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
+from mezzanine.core.models import RichText, Displayable, Slugged, Orderable
 
+from organization.core.models import *
 from organization.team.models import Person, Team, Organization
 
 
@@ -15,9 +16,25 @@ class Project(Displayable, RichText):
     partner_persons = models.ManyToManyField(Person, verbose_name=_('partner persons'), blank=True)
     partner_teams = models.ManyToManyField(Team, verbose_name=_('partner teams'), related_name='project_partners', blank=True)
     partner_organizations = models.ManyToManyField(Organization, verbose_name=_('partner organizations'), blank=True)
+    website = models.URLField(_('website'), max_length=512, blank=True)
 
     class Meta:
         verbose_name = _('project')
 
     def __unicode__(self):
         return self.title
+
+
+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')
index 7f9d3d1f62c360983e5d5f54f8b226e0e5bf1839..cb835d1a246bd084b5590123670d687158e27b73 100644 (file)
@@ -7,3 +7,20 @@ from organization.project.models import *
 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', )
index 9467b9755a20a711a425663190a030f8a44833dc..7830655f0fa6ca2b8ab1a8275251f24877972e77 100644 (file)
@@ -3,8 +3,9 @@ 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 PageBlockInline, PageImageInline
+from organization.core.admin import *
 
 
 class OrganizationAdmin(BaseTranslationModelAdmin):
@@ -12,15 +13,9 @@ class OrganizationAdmin(BaseTranslationModelAdmin):
     model = Organization
 
 
-class ActivityAdmin(BaseTranslationModelAdmin):
-
-    model = Activity
-
-
-class ActivityInline(StackedDynamicInlineAdmin):
+class PersonActivityInline(StackedDynamicInlineAdmin):
 
-    model = Activity
-    filter_horizontal = ['teams', ]
+    model = PersonActivity
 
 
 class TeamAdmin(PageAdmin):
@@ -38,10 +33,15 @@ class PersonAdminBase(admin.ModelAdmin):
     model = Person
 
 
+class PersonLinkInline(StackedDynamicInlineAdmin):
+
+    model = PersonLink
+
+
 class PersonAdmin(BaseTranslationModelAdmin):
 
     model = Person
-    inlines = [ActivityInline,]
+    inlines = [PersonActivityInline, PersonLinkInline, ]
     first_fields = ['first_name', 'last_name', 'title', 'gender', 'user']
 
     def get_fieldsets(self, request, obj = None):
@@ -56,6 +56,4 @@ admin.site.register(Organization, OrganizationAdmin)
 admin.site.register(OrganizationType)
 admin.site.register(Department, DepartmentAdmin)
 admin.site.register(Team, TeamAdmin)
-# admin.site.register(Team)
 admin.site.register(Person, PersonAdmin)
-# admin.site.register(Activity, ActivityAdmin)
diff --git a/app/organization/team/migrations/0012_auto_20160808_0118.py b/app/organization/team/migrations/0012_auto_20160808_0118.py
new file mode 100644 (file)
index 0000000..e18a102
--- /dev/null
@@ -0,0 +1,60 @@
+# -*- 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
new file mode 100644 (file)
index 0000000..d1e0a90
--- /dev/null
@@ -0,0 +1,76 @@
+# -*- 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'),
+        ),
+    ]
index 580d043fe70df46a14c67f80c51c533b972df69b..385b7e38f006048bb24d8f723438cf5fa9a57820 100644 (file)
@@ -22,7 +22,7 @@ from mezzanine.utils.models import AdminThumbMixin, upload_to
 from mezzanine.galleries.models import BaseGallery
 
 from organization.media.models import Photo
-from organization.core.models import Named, Titled, Description, SubTitle
+from organization.core.models import *
 
 from django_countries.fields import CountryField
 # from .nationalities.fields import NationalityField
@@ -64,7 +64,7 @@ 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)
-    url = models.URLField(_('URL'), max_length=512, blank=True)
+    website = models.URLField(_('website'), max_length=512, blank=True)
     is_on_map = models.BooleanField(_('is on map'), default=True)
 
     class Meta:
@@ -110,7 +110,6 @@ class Person(Displayable, AdminThumbMixin, Photo):
     last_name = models.CharField(_('last name'), max_length=255, blank=True, null=True)
     birthday = models.DateField(_('birthday'), blank=True, null=True)
     bio = RichTextField(_('biography'), blank=True)
-    organization = models.ForeignKey('Organization', verbose_name=_('organization'), blank=True, null=True, on_delete=models.SET_NULL)
 
     class Meta:
         verbose_name = _('person')
@@ -143,57 +142,36 @@ class Person(Displayable, AdminThumbMixin, Photo):
         super(Person, self).save(*args, **kwargs)
 
 
-class Link(models.Model):
-    """A person can have many links."""
-
-    person = models.ForeignKey('Person', verbose_name=_('person'))
-    link_type = models.ForeignKey('LinkType', verbose_name=_('link type'))
-    url = models.URLField(verbose_name=_('URL'))
+class TeamLink(Link):
 
-    class Meta:
-        verbose_name = _('link')
+    team = models.ForeignKey(Team, verbose_name=_('links'))
 
     def __str__(self):
         return self.url
 
 
-class LinkType(models.Model):
-    """
-    A link type could be ``Facebook`` or ``Twitter`` or ``Website``.
-    This is masterdata that should be created by the admins when the site is
-    deployed for the first time.
-    :ordering: Enter numbers here if you want links to be displayed in a
-      special order.
-    """
-
-    name = models.CharField(max_length=256, verbose_name=_('name'))
-    slug = models.SlugField(max_length=256, verbose_name=_('slug'), 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)'),
-        blank=True,
-    )
-    ordering = models.PositiveIntegerField(verbose_name=_('ordering'), null=True, blank=True)
-
-    class Meta:
-        ordering = ['ordering', ]
-
-    def __str__(self):
-        return self.name
-
-
-class Activity(RichText):
+class PersonActivity(Description, Period, RichText):
     """(Activity description)"""
 
     person = models.ForeignKey('Person', verbose_name=_('person'))
-    teams = models.ManyToManyField('Team', verbose_name=_('teams'))
-    date_begin = models.DateField(_('begin date'), null=True, blank=True)
-    date_end = models.DateField(_('end date'), null=True, blank=True)
+    team = models.ForeignKey('Team', verbose_name=_('team'))
     role = models.CharField(_('role'), blank=True, max_length=512)
-    description = models.TextField(_('description'), blank=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')
+
+    def __str__(self):
+        return self.url
index f93844cfcc1ee013dc33a328b8b640e664449188..8d439fb90ce9e8ca38bed9976b7f4421e78be951 100644 (file)
@@ -26,7 +26,13 @@ class PersonTranslationOptions(TranslationOptions):
     fields = ('bio',)
 
 
-@register(Activity)
-class ActivityTranslationOptions(TranslationOptions):
+@register(PersonActivity)
+class PersonActivityTranslationOptions(TranslationOptions):
 
     fields = ('description', 'content')
+
+
+@register(PersonLink)
+class PersonTranslationOptions(TranslationOptions):
+
+    pass