From: Guillaume Pellerin Date: Tue, 23 Aug 2016 14:12:02 +0000 (+0200) Subject: WARNING: huge refactoring! add DepatmentPage and TeamPage, rename modules, add variou... X-Git-Url: https://git.parisson.com/?a=commitdiff_plain;h=c9f112b1fdd03d26895266713e67db8aa5561473;p=mezzo.git WARNING: huge refactoring! add DepatmentPage and TeamPage, rename modules, add various data --- diff --git a/app/local_settings.py b/app/local_settings.py index fde9ff70..d4aa4178 100644 --- a/app/local_settings.py +++ b/app/local_settings.py @@ -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 index 00000000..e667ec83 --- /dev/null +++ b/app/organization/core/migrations/0013_auto_20160823_1359.py @@ -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'), + ), + ] diff --git a/app/organization/core/models.py b/app/organization/core/models.py index 1170ddaf..914169a6 100644 --- a/app/organization/core/models.py +++ b/app/organization/core/models.py @@ -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 diff --git a/app/organization/magazine/models.py b/app/organization/magazine/models.py index a5e02f11..9c8c8e72 100644 --- a/app/organization/magazine/models.py +++ b/app/organization/magazine/models.py @@ -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')) diff --git a/app/organization/magazine/views.py b/app/organization/magazine/views.py index be89739c..366d75cb 100644 --- a/app/organization/magazine/views.py +++ b/app/organization/magazine/views.py @@ -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 index 00000000..61799f68 --- /dev/null +++ b/app/organization/network/__init__.py @@ -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 index 00000000..91a71ceb --- /dev/null +++ b/app/organization/network/admin.py @@ -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 index 00000000..a0087883 --- /dev/null +++ b/app/organization/network/apps.py @@ -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 index 00000000..29f36742 --- /dev/null +++ b/app/organization/network/migrations/0001_initial.py @@ -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 index 00000000..4926eb69 --- /dev/null +++ b/app/organization/network/migrations/0002_auto_20160823_1425.py @@ -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 index 00000000..1d9b3394 --- /dev/null +++ b/app/organization/network/migrations/0003_auto_20160823_1438.py @@ -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 index 00000000..e69de29b diff --git a/app/organization/network/models.py b/app/organization/network/models.py new file mode 100644 index 00000000..d0835438 --- /dev/null +++ b/app/organization/network/models.py @@ -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 index 00000000..e69de29b diff --git a/app/organization/network/nationalities/fields.py b/app/organization/network/nationalities/fields.py new file mode 100644 index 00000000..17924066 --- /dev/null +++ b/app/organization/network/nationalities/fields.py @@ -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 index 00000000..06a22887 --- /dev/null +++ b/app/organization/network/nationalities/nationalities.py @@ -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 index 00000000..7ce503c2 --- /dev/null +++ b/app/organization/network/tests.py @@ -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 index 00000000..8a310062 --- /dev/null +++ b/app/organization/network/translation.py @@ -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 index 00000000..bd52ca92 --- /dev/null +++ b/app/organization/network/urls.py @@ -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.*)/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 index 00000000..bc01c20c --- /dev/null +++ b/app/organization/network/views.py @@ -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 index 03586203..00000000 --- a/app/organization/project/__init__.py +++ /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 index 89f9c40a..00000000 --- a/app/organization/project/admin.py +++ /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 index 95f7c465..00000000 --- a/app/organization/project/apps.py +++ /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 index 27b60488..00000000 --- a/app/organization/project/migrations/0001_initial.py +++ /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 index c1f563ed..00000000 --- a/app/organization/project/migrations/0002_auto_20160715_1807.py +++ /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 index 1838ed61..00000000 --- a/app/organization/project/migrations/0003_auto_20160808_0118.py +++ /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 index 3863030d..00000000 --- a/app/organization/project/migrations/0004_auto_20160809_1413.py +++ /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 index b7de17f8..00000000 --- a/app/organization/project/migrations/0005_auto_20160818_1539.py +++ /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 index 5182c62e..00000000 --- a/app/organization/project/migrations/0006_auto_20160818_1656.py +++ /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 index 22cb41c3..00000000 --- a/app/organization/project/migrations/0007_auto_20160819_1920.py +++ /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 index e69de29b..00000000 diff --git a/app/organization/project/models.py b/app/organization/project/models.py deleted file mode 100644 index c0e4d6e0..00000000 --- a/app/organization/project/models.py +++ /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 index 7ce503c2..00000000 --- a/app/organization/project/tests.py +++ /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 index cb835d1a..00000000 --- a/app/organization/project/translation.py +++ /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 index 0ccbd110..00000000 --- a/app/organization/project/urls.py +++ /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.*)/$", 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 index 73898ff4..00000000 --- a/app/organization/project/views.py +++ /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 index 00000000..346037ab --- /dev/null +++ b/app/organization/projects/__init__.py @@ -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 index 00000000..890604bc --- /dev/null +++ b/app/organization/projects/admin.py @@ -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 index 00000000..55e9eacb --- /dev/null +++ b/app/organization/projects/apps.py @@ -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 index 00000000..e0503a10 --- /dev/null +++ b/app/organization/projects/migrations/0001_initial.py @@ -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 index 00000000..e69de29b diff --git a/app/organization/projects/models.py b/app/organization/projects/models.py new file mode 100644 index 00000000..36826646 --- /dev/null +++ b/app/organization/projects/models.py @@ -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 index 00000000..7ce503c2 --- /dev/null +++ b/app/organization/projects/tests.py @@ -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 index 00000000..b5bc433e --- /dev/null +++ b/app/organization/projects/translation.py @@ -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 index 00000000..b1aad884 --- /dev/null +++ b/app/organization/projects/urls.py @@ -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.*)/$", 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 index 00000000..4a43447b --- /dev/null +++ b/app/organization/projects/views.py @@ -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 index 2de9352f..00000000 --- a/app/organization/team/__init__.py +++ /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 index ad764068..00000000 --- a/app/organization/team/admin.py +++ /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 index 38c45219..00000000 --- a/app/organization/team/apps.py +++ /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 index 2a2dac6e..00000000 --- a/app/organization/team/migrations/0001_initial.py +++ /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 index faca81fa..00000000 --- a/app/organization/team/migrations/0002_auto_20160714_1905.py +++ /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 index 0b2c300b..00000000 --- a/app/organization/team/migrations/0003_auto_20160714_1943.py +++ /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 index 1150a2d8..00000000 --- a/app/organization/team/migrations/0004_auto_20160715_1807.py +++ /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 index 78bda7a6..00000000 --- a/app/organization/team/migrations/0005_remove_person_nationality.py +++ /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 index b68db6b9..00000000 --- a/app/organization/team/migrations/0006_auto_20160720_2136.py +++ /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 index c3a6a373..00000000 --- a/app/organization/team/migrations/0007_auto_20160721_1351.py +++ /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 index f9e1dd21..00000000 --- a/app/organization/team/migrations/0008_auto_20160725_0117.py +++ /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 index 409e9859..00000000 --- a/app/organization/team/migrations/0009_auto_20160725_0143.py +++ /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 index cc1284d3..00000000 --- a/app/organization/team/migrations/0010_auto_20160725_0201.py +++ /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 index 6c37a93a..00000000 --- a/app/organization/team/migrations/0011_auto_20160727_1631.py +++ /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 index e18a1024..00000000 --- a/app/organization/team/migrations/0012_auto_20160808_0118.py +++ /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 index d1e0a906..00000000 --- a/app/organization/team/migrations/0013_auto_20160809_1413.py +++ /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 index 28c80956..00000000 --- a/app/organization/team/migrations/0014_department_articles_related.py +++ /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 index 75d12bf2..00000000 --- a/app/organization/team/migrations/0015_auto_20160810_1829.py +++ /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 index 98a083d7..00000000 --- a/app/organization/team/migrations/0016_auto_20160812_1521.py +++ /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 index 37e5cd90..00000000 --- a/app/organization/team/migrations/0017_auto_20160823_0744.py +++ /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 index e69de29b..00000000 diff --git a/app/organization/team/models.py b/app/organization/team/models.py deleted file mode 100644 index 74841f0c..00000000 --- a/app/organization/team/models.py +++ /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 index e69de29b..00000000 diff --git a/app/organization/team/nationalities/fields.py b/app/organization/team/nationalities/fields.py deleted file mode 100644 index 17924066..00000000 --- a/app/organization/team/nationalities/fields.py +++ /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 index 06a22887..00000000 --- a/app/organization/team/nationalities/nationalities.py +++ /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 index 7ce503c2..00000000 --- a/app/organization/team/tests.py +++ /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 index 8d439fb9..00000000 --- a/app/organization/team/translation.py +++ /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 index 59b66b53..00000000 --- a/app/organization/team/urls.py +++ /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.*)/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 index 3d4649fb..00000000 --- a/app/organization/team/views.py +++ /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' diff --git a/app/organization/urls.py b/app/organization/urls.py index 28fe59a3..af320802 100644 --- a/app/organization/urls.py +++ b/app/organization/urls.py @@ -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')), ] diff --git a/app/settings.py b/app/settings.py index ded9b9ad..4b7fe385 100644 --- a/app/settings.py +++ b/app/settings.py @@ -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 index 00000000..e69de29b diff --git a/app/templates/network/department_list.html b/app/templates/network/department_list.html new file mode 100644 index 00000000..e69de29b diff --git a/app/templates/network/person_detail.html b/app/templates/network/person_detail.html new file mode 100644 index 00000000..e69de29b diff --git a/app/templates/network/person_list.html b/app/templates/network/person_list.html new file mode 100644 index 00000000..e69de29b diff --git a/app/templates/network/team_detail.html b/app/templates/network/team_detail.html new file mode 100644 index 00000000..e69de29b diff --git a/app/templates/network/team_list.html b/app/templates/network/team_list.html new file mode 100644 index 00000000..fababb02 --- /dev/null +++ b/app/templates/network/team_list.html @@ -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 %} +
+
+ {{ team.title }} +
+
+ {% endfor %} + +{% endblock %} diff --git a/app/templates/pages/department.html b/app/templates/pages/department.html deleted file mode 100644 index 3a8b6733..00000000 --- a/app/templates/pages/department.html +++ /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 %} -

{{ page.department.title }}

- {% endeditable %} - -{% endblock %} - -{% block page_content %} - {% if page.department.sub_title %} - {% editable page.department.sub_title %} -
- {{ page.department.sub_title }} -
- {% 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 %} -
-
-
-
-
- {% for pageblock in page.department.pageblock_set.all %} - {% if not forloop.first and pageblock.with_separator %} -
- {% endif %} -
-
-

{{ pageblock.title }}

- {{ pageblock.content|richtext_filters|safe }} -
-
- {% endfor %} -
-
-
-
- {% endif %} - -{% endblock %} - -{% block page_related_content %} - - {% if page.department.articles_related.all %} - -
-
-
-
-

{% trans "Also discover" %}

-
-
-
- {% for article in page.department.articles_related.all %} -
- {% include 'magazine/article/includes/article_card.html' %} -
- {% endfor %} -
-
-
- - {% endif %} - -{% endblock %} diff --git a/app/templates/pages/departmentpage.html b/app/templates/pages/departmentpage.html new file mode 100644 index 00000000..b59643d9 --- /dev/null +++ b/app/templates/pages/departmentpage.html @@ -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 %} +

{{ page.departmentpage.title }}

+ {% endeditable %} + +{% endblock %} + +{% block page_content %} + {% if page.departmentpage.sub_title %} + {% editable page.departmentpage.sub_title %} +
+ {{ page.departmentpage.sub_title }} +
+ {% 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 %} +
+
+
+
+
+ {% for pageblock in page.departmentpage.pageblock_set.all %} + {% if not forloop.first and pageblock.with_separator %} +
+ {% endif %} +
+
+

{{ pageblock.title }}

+ {{ pageblock.content|richtext_filters|safe }} +
+
+ {% endfor %} +
+
+
+
+ {% endif %} + +{% endblock %} + +{% block page_related_content %} + + {% if page.departmentpage.articles_related.all %} + +
+
+
+
+

{% trans "Also discover" %}

+
+
+
+ {% for article in page.departmentpage.articles_related.all %} +
+ {% include 'magazine/article/includes/article_card.html' %} +
+ {% endfor %} +
+
+
+ + {% endif %} + +{% endblock %} diff --git a/app/templates/pages/team.html b/app/templates/pages/team.html deleted file mode 100644 index f8cbe12e..00000000 --- a/app/templates/pages/team.html +++ /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 %} -

{{ page.team.title }}

- {% 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 %} -
- {{ page.team.sub_title }} -
- {% 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 %} -
- {% for children in childrens %} - {% with children as object %} - {% include "pages/includes/page_card.html" %} - {% endwith %} - {% endfor %} -
- {% endif %} - {% endif %} - -{% endblock %} - -{% block page_sub_content %} - - {% if page.team.pageblock_set.all %} -
-
-
-
-
- {% for pageblock in page.team.pageblock_set.all %} -
-
- {% if not forloop.first and pageblock.with_separator %} -
- {% endif %} -

{{ pageblock.title }}

- {{ pageblock.content|richtext_filters|safe }} -
-
- {% endfor %} -
-
-
-
- {% endif %} - -{% endblock %} diff --git a/app/templates/pages/teampage.html b/app/templates/pages/teampage.html new file mode 100644 index 00000000..3b0f989d --- /dev/null +++ b/app/templates/pages/teampage.html @@ -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 %} +

{{ page.teampage.title }}

+ {% 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 %} +
+ {{ page.teampage.sub_title }} +
+ {% 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 %} +
+ {% for children in childrens %} + {% with children as object %} + {% include "pages/includes/page_card.html" %} + {% endwith %} + {% endfor %} +
+ {% endif %} + {% endif %} + +{% endblock %} + +{% block page_sub_content %} + + {% if page.teampage.pageblock_set.all %} +
+
+
+
+
+ {% for pageblock in page.teampage.pageblock_set.all %} +
+
+ {% if not forloop.first and pageblock.with_separator %} +
+ {% endif %} +

{{ pageblock.title }}

+ {{ pageblock.content|richtext_filters|safe }} +
+
+ {% endfor %} +
+
+
+
+ {% endif %} + +{% endblock %} diff --git a/app/templates/project/project_detail.html b/app/templates/project/project_detail.html deleted file mode 100644 index e69de29b..00000000 diff --git a/app/templates/project/project_list.html b/app/templates/project/project_list.html deleted file mode 100644 index e69de29b..00000000 diff --git a/app/templates/projects/project_detail.html b/app/templates/projects/project_detail.html new file mode 100644 index 00000000..e69de29b diff --git a/app/templates/projects/project_list.html b/app/templates/projects/project_list.html new file mode 100644 index 00000000..e69de29b diff --git a/app/templates/team/department_detail.html b/app/templates/team/department_detail.html deleted file mode 100644 index e69de29b..00000000 diff --git a/app/templates/team/department_list.html b/app/templates/team/department_list.html deleted file mode 100644 index e69de29b..00000000 diff --git a/app/templates/team/person_detail.html b/app/templates/team/person_detail.html deleted file mode 100644 index e69de29b..00000000 diff --git a/app/templates/team/person_list.html b/app/templates/team/person_list.html deleted file mode 100644 index e69de29b..00000000 diff --git a/app/templates/team/team_detail.html b/app/templates/team/team_detail.html deleted file mode 100644 index e69de29b..00000000 diff --git a/app/templates/team/team_list.html b/app/templates/team/team_list.html deleted file mode 100644 index fababb02..00000000 --- a/app/templates/team/team_list.html +++ /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 %} -
-
- {{ team.title }} -
-
- {% endfor %} - -{% endblock %} diff --git a/docker-compose.yml b/docker-compose.yml index 0ea2016f..cf3df696 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -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: