'mezzanine_agenda.EventLocation',
'mezzanine_agenda.EventPrice',
'mezzanine_agenda.EventCategory',
+ 'organization-agenda.EventPublicType',
+ 'organization-agenda.EventTrainingLevel',
'generic.Keyword',
)),
(_('Magazine'), ('organization-magazine.Article',
'organization-network.OrganizationType',
'organization-network.PersonListBlock',
)),
- (_('Activity'), ('organization-network.ActivityStatus',
+ (_('Activity'), ('organization-network.PersonActivity',
+ 'organization-network.ActivityStatus',
'organization-network.ActivityGrade',
'organization-network.ActivityFramework',
'organization-network.ActivityFunction',
model = EventVideo
-class EventDepartmentInline(StackedDynamicInlineAdmin):
+class EventDepartmentInline(TabularDynamicInlineAdmin):
model = EventDepartment
-class EventPersonInline(StackedDynamicInlineAdmin):
+class EventPersonInline(TabularDynamicInlineAdmin):
model = EventPerson
-class EventLinkInline(StackedDynamicInlineAdmin):
+class EventLinkInline(TabularDynamicInlineAdmin):
model = EventLink
+class EventTrainingInline(StackedDynamicInlineAdmin):
+
+ model = EventTraining
+
+
+class EventPeriodInline(TabularDynamicInlineAdmin):
+
+ model = EventPeriod
+
+
class CustomEventAdmin(EventAdmin):
"""
Admin class for events.
if settings.EVENT_USE_FEATURED_IMAGE:
list_display.insert(0, "admin_thumb")
list_filter = deepcopy(DisplayableAdmin.list_filter) + ("location", "category")
- inlines = [EventBlockInline, EventImageInline, EventDepartmentInline, EventPersonInline,
- EventLinkInline, EventAudioInline, EventVideoInline]
+ inlines = [EventPeriodInline, EventBlockInline, EventImageInline, EventDepartmentInline, EventPersonInline,
+ EventLinkInline, EventAudioInline, EventVideoInline, EventTrainingInline]
def save_form(self, request, form, change):
"""
return DisplayableAdmin.save_form(self, request, form, change)
+class EventPublicTypeAdmin(BaseTranslationModelAdmin):
+
+ model = EventPublicType
+
+
+class EventTrainingLevelAdmin(BaseTranslationModelAdmin):
+
+ model = EventTrainingLevel
+
+
+
admin.site.unregister(Event)
+admin.site.register(EventPublicType, EventPublicTypeAdmin)
+admin.site.register(EventTrainingLevel, EventTrainingLevelAdmin)
admin.site.register(Event, CustomEventAdmin)
--- /dev/null
+# -*- coding: utf-8 -*-
+# Generated by Django 1.9.10 on 2016-10-05 12:55
+from __future__ import unicode_literals
+
+from django.db import migrations, models
+import django.db.models.deletion
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ('mezzanine_agenda', '0010_remove_event_language'),
+ ('organization-agenda', '0007_auto_20160929_1300'),
+ ]
+
+ operations = [
+ migrations.CreateModel(
+ name='EventPeriod',
+ fields=[
+ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+ ('date_from', models.DateTimeField(blank=True, null=True, verbose_name='begin date')),
+ ('date_to', models.DateTimeField(blank=True, null=True, verbose_name='end date')),
+ ('event', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='periods', to='mezzanine_agenda.Event', verbose_name='event')),
+ ],
+ options={
+ 'verbose_name_plural': 'periods',
+ 'verbose_name': 'period',
+ },
+ ),
+ migrations.CreateModel(
+ name='EventPublicType',
+ 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')),
+ ],
+ options={
+ 'verbose_name_plural': 'public types',
+ 'verbose_name': 'public type',
+ },
+ ),
+ migrations.CreateModel(
+ name='EventTraining',
+ fields=[
+ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+ ('language', models.CharField(blank=True, choices=[('fr', 'French'), ('en', 'English')], max_length=64, null=True, verbose_name='Language')),
+ ('event', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='trainings', to='mezzanine_agenda.Event', verbose_name='event')),
+ ],
+ options={
+ 'verbose_name_plural': 'trainings',
+ 'verbose_name': 'training',
+ },
+ ),
+ migrations.CreateModel(
+ name='EventTrainingLevel',
+ 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')),
+ ],
+ options={
+ 'verbose_name_plural': 'training levels',
+ 'verbose_name': 'training level',
+ },
+ ),
+ migrations.AddField(
+ model_name='eventtraining',
+ name='level',
+ field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='trainings', to='organization-agenda.EventTrainingLevel', verbose_name='level'),
+ ),
+ migrations.AddField(
+ model_name='eventtraining',
+ name='public_type',
+ field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='trainings', to='organization-agenda.EventPublicType', verbose_name='public type'),
+ ),
+ ]
from django.utils.translation import ugettext_lazy as _
+from mezzanine.conf import settings
from mezzanine_agenda.models import *
from organization.core.models import *
from organization.network.models import *
verbose_name = _("video")
verbose_name_plural = _("videos")
order_with_respect_to = "event"
+
+
+class EventPeriod(PeriodDateTime):
+
+ event = models.ForeignKey(Event, verbose_name=_('event'), related_name='periods', blank=True, null=True, on_delete=models.SET_NULL)
+
+ class Meta:
+ verbose_name = _("period")
+ verbose_name_plural = _("periods")
+
+
+class EventPublicType(Named):
+
+ class Meta:
+ verbose_name = _("public type")
+ verbose_name_plural = _("public types")
+
+
+class EventTrainingLevel(Named):
+
+ class Meta:
+ verbose_name = _("training level")
+ verbose_name_plural = _("training levels")
+
+
+class EventTraining(models.Model):
+
+ event = models.ForeignKey(Event, verbose_name=_('event'), related_name='trainings', blank=True, null=True, on_delete=models.SET_NULL)
+ language = models.CharField(_('Language'), max_length=64, blank=True, null=True, choices=settings.LANGUAGES)
+ public_type = models.ForeignKey(EventPublicType, verbose_name=_('public type'), related_name='trainings', blank=True, null=True, on_delete=models.SET_NULL)
+ level = models.ForeignKey(EventTrainingLevel, verbose_name=_('level'), related_name='trainings', blank=True, null=True, on_delete=models.SET_NULL)
+
+ class Meta:
+ verbose_name = _("training")
+ verbose_name_plural = _("trainings")
@register(EventLink)
-class EventPersonTranslationOptions(TranslationOptions):
+class EventLinkTranslationOptions(TranslationOptions):
+
+ fields = ()
+
+
+@register(EventPeriod)
+class EventPeriodTranslationOptions(TranslationOptions):
fields = ()
+
+
+@register(EventTraining)
+class EventTrainingTranslationOptions(TranslationOptions):
+
+ fields = ()
+
+
+@register(EventTrainingLevel)
+class EventTrainingLevelTranslationOptions(TranslationOptions):
+
+ fields = ('name',)
+
+
+@register(EventPublicType)
+class EventPublicTypeTranslationOptions(TranslationOptions):
+
+ fields = ('name',)
abstract = True
+class PeriodDateTime(models.Model):
+
+ date_from = models.DateTimeField(_('begin date'), null=True, blank=True)
+ date_to = models.DateTimeField(_('end date'), null=True, blank=True)
+
+ class Meta:
+ abstract = True
+
+
class AdminThumbRelatedMixin(object):
"""
Provides a thumbnail method on models for admin classes to
--- /dev/null
+# -*- coding: utf-8 -*-
+# Generated by Django 1.9.10 on 2016-10-05 12:24
+from __future__ import unicode_literals
+
+from django.db import migrations
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ('organization-projects', '0017_auto_20160928_1858'),
+ ]
+
+ operations = [
+ migrations.AlterModelOptions(
+ name='project',
+ options={'ordering': ['-date_from', '-date_to'], 'verbose_name': 'project'},
+ ),
+ ]
{% endblock %}
{% endcomment %}
- {% block event_related %}
- {% if event.artists.all or event.videos.all or event.blog_posts.all %}
- <h2 class="section__title">{% trans "Also discover" %}</h2>
- <div class="msry__container">
- <div class="msry__sizer"></div>
- {% if event.artists.all %}
- {% for artist in event.artists.all %}
- {% include "festival/inc/artist_card.html" %}
- {% endfor %}
- {% endif %}
- {% if event.videos.all %}
- {% for video in event.videos.all %}
- {% include 'festival/inc/video_card.html' %}
- {% endfor %}
- {% endif %}
- {% if event.blog_posts.all %}
- {% for post in event.blog_posts.all %}
- {% include 'blog/includes/post_card.html' %}
- {% endfor %}
- {% endif %}
- </div>
- {% endif %}
- {% endblock %}
-
{% endblock %}
{% block page_link %}
{% endblock %}
{% block page_person_list %}
- {% for page_custom_person_list_block_inline in event.persons.all %}
- <!-- TODO: Add persons -->
- {% endfor %}
+ {% if event.persons.all %}
+ {% if event.trainings.all %}
+ {% trans "Trainers" %}<br>
+ {% else %}
+ {% trans "Persons" %}<br>
+ {% endif %}
+ {% for person in event.persons.all %}
+ {{ person.person.title }}<br>
+ {{ person.person.bio|safe }}<br>
+ {% endfor %}
+ {% endif %}
{% endblock %}
{% block page_sub_content %}
{% endeditable %}
{% endblock %}
- {% if event.language %}
- <div class="page__meta-separator"></div>
- <p>
- {% trans "Language" %}: {{event.language}}
- </p>
- {% endif %}
-
{% set_short_url_for event %}
{% with event as object %}
{% with True as is_event %}
{% endif %}
{% if unit_booking %}
-
{% if event.prices.all.0|floatformat != '0' and event.prices.all|length > 0 %}
{% for price in event.prices.all %}
{% if forloop.first %}
- <div class="page__meta-title">Tarifs</div>
+ <div class="page__meta-title">{% trans "Tarifs" %}</div>
<p>
{% endif %}
{{ price.value|floatformat:"-2" }} €{% if not forloop.last %} <br /> {% endif %}
{% trans "Reserve" %}
</a>
</p>
-
{% else %}
<p>
{% trans "Free entry. Limited seats available" %}
</p>
{% endif %}
-
{% endif %}
+
+{% with event.trainings.all.0 as training %}
+ {% if training %}
+ <div class="page__meta-title">{% trans "Language" %}
+ <p>{{ training.language }}</p>
+ </div>
+ <div class="page__meta-title">{% trans "Public type" %}
+ <p>{{ training.public_type }}</p>
+ </div>
+ <div class="page__meta-title">{% trans "Level" %}
+ <p>{{ training.level }}</p>
+ </div>
+ {% endif %}
+{% endwith %}