From: Guillaume Pellerin Date: Sun, 10 Apr 2016 21:55:18 +0000 (+0200) Subject: add price sync and fine display X-Git-Url: https://git.parisson.com/?a=commitdiff_plain;h=ba1550743b20d6b7dfdc00a9c6bb14bb88d789e2;p=mezzo.git add price sync and fine display --- diff --git a/app/festival/management/commands/festival-sync-eve-events.py b/app/festival/management/commands/festival-sync-eve-events.py new file mode 100644 index 00000000..01948c05 --- /dev/null +++ b/app/festival/management/commands/festival-sync-eve-events.py @@ -0,0 +1,84 @@ +from datetime import datetime, timedelta +from optparse import make_option + +from django.conf import settings +from django.core.management.base import BaseCommand, CommandError +from django.contrib.auth.models import User +from django.core.mail import EmailMessage + +import mezzanine_agenda.models as ma_models +import eve.models as eve_models + + +class Command(BaseCommand): + """Synchronize events from E-vement to mezzanine_agenda""" + + + option_list = BaseCommand.option_list + ( + make_option('-m', '--meta_event', + dest='meta_event', + help='define eve meta_event'), + ) + + default_user = User.objects.get(username='admin') + + def cleanup(self): + # for event in ma_models.Event.objects.all(): + # event.delete() + # for location in ma_models.EventLocation.objects.all(): + # location.delete() + for event_price in ma_models.EventPrice.objects.all(): + event_price.delete() + + def handle(self, *args, **kwargs): + # self.cleanup() + meta_event_name = kwargs.get('meta_event') + meta_trans_all = eve_models.MetaEventTranslation.objects.all() + for meta_trans in meta_trans_all: + if meta_trans.name == meta_event_name: + break + eve_events = eve_models.Event.objects.filter(meta_event=meta_trans.id) + for eve_event in eve_events: + event_trans = eve_models.EventTranslation.objects.filter(id=eve_event, lang='fr')[0] + manifestations = eve_event.manifestations.all().order_by('happens_at') + first = True + for manifestation in manifestations: + events = ma_models.Event.objects.filter(external_id=manifestation.id) + if not events: + event = ma_models.Event(external_id=manifestation.id) + else: + event = events[0] + event.start = manifestation.happens_at + event.end = manifestation.happens_at + timedelta(seconds=manifestation.duration) + event.title = event_trans.name + event.user = self.default_user + + locations = ma_models.EventLocation.objects.filter(title=manifestation.location.name) + if locations: + location = locations[0] + else: + location = ma_models.EventLocation(title=manifestation.location.name) + address = '\n'.join([manifestation.location.address, manifestation.location.postalcode + ' ' + manifestation.location.city]) + location.address = address + location.external_id = manifestation.id + location.clean() + location.save() + event.location = location + + category, c = ma_models.EventCategory.objects.get_or_create(name=eve_event.event_category.name) + event.category = category + event.save() + + eve_prices = eve_models.PriceManifestation.objects.filter(manifestation=manifestation) + for price in eve_prices: + event_price, c = ma_models.EventPrice.objects.get_or_create(value=float(price.value)) + if event: + event.prices.add(event_price) + + if not first: + event.parent = parent + else: + parent = event + first = False + + event.save() diff --git a/app/festival/management/commands/sync-eve-events.py b/app/festival/management/commands/sync-eve-events.py deleted file mode 100644 index e6edc437..00000000 --- a/app/festival/management/commands/sync-eve-events.py +++ /dev/null @@ -1,74 +0,0 @@ -from datetime import datetime, timedelta -from optparse import make_option - -from django.conf import settings -from django.core.management.base import BaseCommand, CommandError -from django.contrib.auth.models import User -from django.core.mail import EmailMessage - -import mezzanine_agenda.models as ma_models -import eve.models as eve_models - - -class Command(BaseCommand): - """Synchronize events from E-vement to mezzanine_agenda""" - - - option_list = BaseCommand.option_list + ( - make_option('-m', '--meta_event', - dest='meta_event', - help='define eve meta_event'), - ) - - default_user = User.objects.get(username='admin') - - def cleanup(self): - # for event in ma_models.Event.objects.all(): - # event.delete() - for location in ma_models.EventLocation.objects.all(): - location.delete() - - def handle(self, *args, **kwargs): - self.cleanup() - meta_event_name = kwargs.get('meta_event') - meta_trans_all = eve_models.MetaEventTranslation.objects.all() - for meta_trans in meta_trans_all: - if meta_trans.name == meta_event_name: - break - eve_events = eve_models.Event.objects.filter(meta_event=meta_trans.id) - for eve_event in eve_events: - event_trans = eve_models.EventTranslation.objects.filter(id=eve_event, lang='fr')[0] - manifestations = eve_event.manifestations.all().order_by('happens_at') - first = True - for manifestation in manifestations: - events = ma_models.Event.objects.filter(external_id=manifestation.id) - if not events: - event = ma_models.Event(external_id=manifestation.id) - else: - event = events[0] - event.start = manifestation.happens_at - event.end = manifestation.happens_at + timedelta(seconds=manifestation.duration) - event.title = event_trans.name - event.user = self.default_user - - locations = ma_models.EventLocation.objects.filter(title=manifestation.location.name) - if locations: - location = locations[0] - else: - location = ma_models.EventLocation(title=manifestation.location.name) - address = '\n'.join([manifestation.location.address, manifestation.location.postalcode + ' ' + manifestation.location.city]) - location.address = address - location.clean() - location.save() - event.location = location - - category, c = ma_models.EventCategory.objects.get_or_create(name=eve_event.event_category.name) - event.category = category - - if not first: - event.parent = parent - else: - parent = event - first = False - - event.save() diff --git a/app/migrations/mezzanine_agenda/0011_auto_20160410_2330.py b/app/migrations/mezzanine_agenda/0011_auto_20160410_2330.py new file mode 100644 index 00000000..53985ab1 --- /dev/null +++ b/app/migrations/mezzanine_agenda/0011_auto_20160410_2330.py @@ -0,0 +1,30 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.9.2 on 2016-04-10 21:30 +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('mezzanine_agenda', '0010_eventlocation_external_id'), + ] + + operations = [ + migrations.RemoveField( + model_name='eventprice', + name='price', + ), + migrations.AddField( + model_name='eventprice', + name='value', + field=models.FloatField(default=0, verbose_name='value'), + preserve_default=False, + ), + migrations.AlterField( + model_name='eventlocation', + name='featured_name', + field=models.CharField(blank=True, max_length=512, null=True, verbose_name='featured name'), + ), + ] diff --git a/app/migrations/mezzanine_agenda/0012_auto_20160410_2336.py b/app/migrations/mezzanine_agenda/0012_auto_20160410_2336.py new file mode 100644 index 00000000..e7f9fac0 --- /dev/null +++ b/app/migrations/mezzanine_agenda/0012_auto_20160410_2336.py @@ -0,0 +1,20 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.9.2 on 2016-04-10 21:36 +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('mezzanine_agenda', '0011_auto_20160410_2330'), + ] + + operations = [ + migrations.AlterField( + model_name='eventprice', + name='unit', + field=models.CharField(blank=True, max_length=16, null=True, verbose_name='Unit'), + ), + ] diff --git a/app/templates/agenda/includes/event_metainfo.html b/app/templates/agenda/includes/event_metainfo.html index 15bbd16e..1fcc9e7d 100644 --- a/app/templates/agenda/includes/event_metainfo.html +++ b/app/templates/agenda/includes/event_metainfo.html @@ -5,10 +5,13 @@ {% if event.end %} {% if event.end|date == event.start|date and event.end.hour|subtract:event.start.hour > 3 %}{{ event.end|time:"TIME_FORMAT" }}{% endif %} {% if unit_booking %} - | {% for price in event.prices.all %}{{ price|floatformat }} €{% if not forloop.last %} - {% endif %}{% endfor %} +    |    + {% for price in event.prices.all %}{{ price.value|floatformat:"-2" }} €{% if not forloop.last %} / {% endif %}{% endfor %} + {% if event.prices.all.0|floatformat != '0' %} {% trans "Booking" %} + {% endif %} {% endif %} {% endif %} {% if event.location %}