From: Guillaume Pellerin Date: Fri, 23 Sep 2016 14:18:12 +0000 (+0200) Subject: Translate keywords, add first prestashop to event command X-Git-Url: https://git.parisson.com/?a=commitdiff_plain;h=ce0238f75f1125aee6e6c6578a0f62b71173fbf5;p=mezzo.git Translate keywords, add first prestashop to event command --- diff --git a/app/migrations/generic/0001_initial.py b/app/migrations/generic/0001_initial.py new file mode 100644 index 00000000..31d40772 --- /dev/null +++ b/app/migrations/generic/0001_initial.py @@ -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 index 00000000..2515ca44 --- /dev/null +++ b/app/migrations/generic/0002_auto_20141227_0224.py @@ -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 index 00000000..71df71d9 --- /dev/null +++ b/app/migrations/generic/0003_auto_20160923_1426.py @@ -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 index 00000000..e69de29b 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 index 00000000..b18af46a --- /dev/null +++ b/app/organization/agenda/management/commands/organization-sync-prestashop-events.py @@ -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() diff --git a/app/organization/core/admin.py b/app/organization/core/admin.py index 46df0e18..4438e24c 100644 --- a/app/organization/core/admin.py +++ b/app/organization/core/admin.py @@ -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) diff --git a/app/organization/core/translation.py b/app/organization/core/translation.py index b18e24da..96f16b2e 100644 --- a/app/organization/core/translation.py +++ b/app/organization/core/translation.py @@ -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',) diff --git a/app/settings.py b/app/settings.py index b740850a..cf8a7d31 100644 --- a/app/settings.py +++ b/app/settings.py @@ -256,6 +256,7 @@ MIGRATION_MODULES = { "pages": "migrations.pages", "conf": "migrations.conf", "shop": "migrations.shop", + "generic": "migrations.generic", } MODELTRANSLATION_TRANSLATION_FILES = (