]> git.parisson.com Git - mezzo.git/commitdiff
Translate keywords, add first prestashop to event command
authorGuillaume Pellerin <guillaume.pellerin@ircam.fr>
Fri, 23 Sep 2016 14:18:12 +0000 (16:18 +0200)
committerGuillaume Pellerin <guillaume.pellerin@ircam.fr>
Fri, 23 Sep 2016 14:18:12 +0000 (16:18 +0200)
app/migrations/generic/0001_initial.py [new file with mode: 0644]
app/migrations/generic/0002_auto_20141227_0224.py [new file with mode: 0644]
app/migrations/generic/0003_auto_20160923_1426.py [new file with mode: 0644]
app/migrations/generic/__init__.py [new file with mode: 0644]
app/organization/agenda/management/commands/organization-sync-prestashop-events.py [new file with mode: 0644]
app/organization/core/admin.py
app/organization/core/translation.py
app/settings.py

diff --git a/app/migrations/generic/0001_initial.py b/app/migrations/generic/0001_initial.py
new file mode 100644 (file)
index 0000000..31d4077
--- /dev/null
@@ -0,0 +1,83 @@
+# -*- coding: utf-8 -*-
+from __future__ import unicode_literals
+
+from django.db import models, migrations
+from django.conf import settings
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('sites', '0001_initial'),
+        migrations.swappable_dependency(settings.AUTH_USER_MODEL),
+        ('django_comments', '__first__'),
+        ('contenttypes', '0001_initial'),
+    ]
+
+    operations = [
+        migrations.CreateModel(
+            name='AssignedKeyword',
+            fields=[
+                ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
+                ('_order', models.IntegerField(null=True, verbose_name='Order')),
+                ('object_pk', models.IntegerField()),
+                ('content_type', models.ForeignKey(to='contenttypes.ContentType')),
+            ],
+            options={
+                'ordering': ('_order',),
+            },
+            bases=(models.Model,),
+        ),
+        migrations.CreateModel(
+            name='Keyword',
+            fields=[
+                ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
+                ('title', models.CharField(max_length=500, verbose_name='Title')),
+                ('slug', models.CharField(help_text='Leave blank to have the URL auto-generated from the title.', max_length=2000, null=True, verbose_name='URL', blank=True)),
+                ('site', models.ForeignKey(editable=False, to='sites.Site')),
+            ],
+            options={
+                'verbose_name': 'Keyword',
+                'verbose_name_plural': 'Keywords',
+            },
+            bases=(models.Model,),
+        ),
+        migrations.CreateModel(
+            name='Rating',
+            fields=[
+                ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
+                ('value', models.IntegerField(verbose_name='Value')),
+                ('rating_date', models.DateTimeField(auto_now_add=True, verbose_name='Rating date', null=True)),
+                ('object_pk', models.IntegerField()),
+                ('content_type', models.ForeignKey(to='contenttypes.ContentType')),
+                ('user', models.ForeignKey(related_name='ratings', verbose_name='Rater', to=settings.AUTH_USER_MODEL, null=True)),
+            ],
+            options={
+                'verbose_name': 'Rating',
+                'verbose_name_plural': 'Ratings',
+            },
+            bases=(models.Model,),
+        ),
+        migrations.CreateModel(
+            name='ThreadedComment',
+            fields=[
+                ('comment_ptr', models.OneToOneField(parent_link=True, auto_created=True, primary_key=True, serialize=False, to='django_comments.Comment')),
+                ('rating_count', models.IntegerField(default=0, editable=False)),
+                ('rating_sum', models.IntegerField(default=0, editable=False)),
+                ('rating_average', models.FloatField(default=0, editable=False)),
+                ('by_author', models.BooleanField(default=False, verbose_name='By the blog author')),
+                ('replied_to', models.ForeignKey(related_name='comments', editable=False, to='generic.ThreadedComment', null=True)),
+            ],
+            options={
+                'verbose_name': 'Comment',
+                'verbose_name_plural': 'Comments',
+            },
+            bases=('django_comments.comment',),
+        ),
+        migrations.AddField(
+            model_name='assignedkeyword',
+            name='keyword',
+            field=models.ForeignKey(related_name='assignments', verbose_name='Keyword', to='generic.Keyword'),
+            preserve_default=True,
+        ),
+    ]
diff --git a/app/migrations/generic/0002_auto_20141227_0224.py b/app/migrations/generic/0002_auto_20141227_0224.py
new file mode 100644 (file)
index 0000000..2515ca4
--- /dev/null
@@ -0,0 +1,21 @@
+# -*- coding: utf-8 -*-
+from __future__ import unicode_literals
+
+from django.db import models, migrations
+import mezzanine.core.fields
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('generic', '0001_initial'),
+    ]
+
+    operations = [
+        migrations.AlterField(
+            model_name='assignedkeyword',
+            name='_order',
+            field=mezzanine.core.fields.OrderField(null=True, verbose_name='Order'),
+            preserve_default=True,
+        ),
+    ]
diff --git a/app/migrations/generic/0003_auto_20160923_1426.py b/app/migrations/generic/0003_auto_20160923_1426.py
new file mode 100644 (file)
index 0000000..71df71d
--- /dev/null
@@ -0,0 +1,25 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.9.7 on 2016-09-23 12:26
+from __future__ import unicode_literals
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('generic', '0002_auto_20141227_0224'),
+    ]
+
+    operations = [
+        migrations.AddField(
+            model_name='keyword',
+            name='title_en',
+            field=models.CharField(max_length=500, null=True, verbose_name='Title'),
+        ),
+        migrations.AddField(
+            model_name='keyword',
+            name='title_fr',
+            field=models.CharField(max_length=500, null=True, verbose_name='Title'),
+        ),
+    ]
diff --git a/app/migrations/generic/__init__.py b/app/migrations/generic/__init__.py
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/app/organization/agenda/management/commands/organization-sync-prestashop-events.py b/app/organization/agenda/management/commands/organization-sync-prestashop-events.py
new file mode 100644 (file)
index 0000000..b18af46
--- /dev/null
@@ -0,0 +1,95 @@
+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
+
+from mezzanine.generic.models import AssignedKeyword, Keyword
+
+import mezzanine_agenda.models as ma_models
+import prestashop.models as pa_models
+
+
+class Command(BaseCommand):
+    """Synchronize events from PrestaShop to mezzanine_agenda"""
+
+
+    option_list = BaseCommand.option_list + (
+          make_option('-c', '--category',
+            dest='category_lang_name',
+            help='define prestashop PsCategoryLang'),
+          )
+
+    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()
+        category_lang_name = kwargs.get('category_lang_name')
+        category_lang = pa_models.PsCategoryLang.objects.get(name=category_lang_name)
+        category = pa_models.PsCategory.objects.get(id_category=category_lang.id_category)
+        products = pa_models.PsProduct.objects.filter(id_category_default=category.id_category)
+
+        for product in products:
+            product_langs = pa_models.PsProductLang.objects.filter(id_product=product.id_product)
+            for product_lang in product_langs:
+                print(product_lang.name, product_lang.dates, product_lang.times)
+
+        # 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
+        #         event.save()
+        #         keyword, _ = Keyword.objects.get_or_create(title=eve_event.event_category.name)
+        #         event.keywords.add(AssignedKeyword(keyword=keyword), bulk=False)
+        #
+        #         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:
+        #                 if not event_price in event.prices.all():
+        #                     event.prices.add(event_price)
+        #
+        #         if not first:
+        #             event.parent = parent
+        #         else:
+        #             parent = event
+        #             first = False
+        #
+        #         event.save()
index 46df0e18f171e0029110246ea1c16ea48eeb6ab9..4438e24c9d1eab1840f16140240d4d547c17351b 100644 (file)
@@ -4,9 +4,15 @@ from mezzanine.core.admin import *
 from mezzanine.pages.admin import PageAdmin
 from organization.core.models import *
 from mezzanine.blog.models import BlogPost
-from mezzanine.generic.models import ThreadedComment
+from mezzanine.generic.models import ThreadedComment, Keyword
 
-admin.site.register(LinkType)
 
+class KeywordAdmin(BaseTranslationModelAdmin):
+
+    model = Keyword
+
+
+admin.site.register(LinkType)
 admin.site.unregister(BlogPost)
 admin.site.unregister(ThreadedComment)
+admin.site.register(Keyword, KeywordAdmin)
index b18e24da71b469fcf8439e66d3ee4daeb17f118b..96f16b2e1d054abc67714842796abca5575bfdd0 100644 (file)
@@ -1,6 +1,12 @@
 from modeltranslation.translator import translator, register, TranslationOptions
 from mezzanine.pages.models import Page, RichText
 from mezzanine.pages.translation import TranslatedRichText
+from mezzanine.generic.models import Keyword
 from organization.core.models import *
 
-pass
+
+
+@register(Keyword)
+class KeywordTranslationOptions(TranslationOptions):
+
+    fields = ('title',)
index b740850a61ea9790a8331ff1b8ba9755174a7ba0..cf8a7d316929ff3482a1e2ee4b5d628fd433608c 100644 (file)
@@ -256,6 +256,7 @@ MIGRATION_MODULES = {
     "pages": "migrations.pages",
     "conf": "migrations.conf",
     "shop": "migrations.shop",
+    "generic": "migrations.generic",
 }
 
 MODELTRANSLATION_TRANSLATION_FILES = (