From cc55ea5c735471e066e37c09b1ada3badc20a6e0 Mon Sep 17 00:00:00 2001 From: Guillaume Pellerin Date: Wed, 19 Oct 2016 18:49:33 +0200 Subject: [PATCH] Fix import prestashop products to events, adapt event view --- .gitmodules | 3 - .../organization-sync-prestashop-events.py | 94 ++++++------------- app/organization/agenda/models.py | 3 +- app/organization/shop/models.py | 16 +++- .../agenda/includes/event_metainfo.html | 2 +- lib/django-prestashop | 1 - lib/mezzanine-agenda | 2 +- 7 files changed, 50 insertions(+), 71 deletions(-) delete mode 160000 lib/django-prestashop diff --git a/.gitmodules b/.gitmodules index 8bc911da..6fd51c5a 100644 --- a/.gitmodules +++ b/.gitmodules @@ -7,6 +7,3 @@ [submodule "data"] path = data url = git+ssh://git@git.forge.ircam.fr/ircam-www-data.git -[submodule "lib/django-prestashop"] - path = lib/django-prestashop - url = git+ssh://git@git.forge.ircam.fr/django-prestashop.git diff --git a/app/organization/agenda/management/commands/organization-sync-prestashop-events.py b/app/organization/agenda/management/commands/organization-sync-prestashop-events.py index 14b795a1..bc781bca 100644 --- a/app/organization/agenda/management/commands/organization-sync-prestashop-events.py +++ b/app/organization/agenda/management/commands/organization-sync-prestashop-events.py @@ -9,7 +9,9 @@ from django.core.mail import EmailMessage from mezzanine.generic.models import AssignedKeyword, Keyword import mezzanine_agenda.models as ma_models +import organization.agenda.models as oa_models import prestashop.models as pa_models +import cartridge.shop.models as ca_models class Command(BaseCommand): @@ -28,15 +30,11 @@ class Command(BaseCommand): 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() + for event in ma_models.Event.objects.all(): + event.delete() def handle(self, *args, **kwargs): - # self.cleanup() + self.cleanup() products = [] category_lang_name = kwargs.get('category_lang_name') @@ -45,76 +43,46 @@ class Command(BaseCommand): for category in pa_models.PsCategoryLang.objects.all(): print(category.name) - print('---------------------------') - 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) - category_products = pa_models.PsCategoryProduct.objects.filter(id_category=category.id_category) + for category_product in category_products: products.append(pa_models.PsProduct.objects.get(id_product=category_product.id_product)) for product in products: + print('---------------------------') print(product.id_product) + + events = ma_models.Event.objects.filter(external_id=product.id_product) + if events: + event = events[0] + else: + event = ma_models.Event(external_id=product.id_product) + product_langs = pa_models.PsProductLang.objects.filter(id_product=product.id_product) for product_lang in product_langs: lang_code = self.languages[product_lang.id_lang]['code'] for lang in self.languages: if product_lang.teaching_lang.lower() in self.languages[product_lang.id_lang]['names']: - teaching_lang = self.languages[product_lang.id_lang]['code'] - print(teaching_lang) + language = self.languages[product_lang.id_lang]['code'] + event_training = oa_models.EventTraining(language=language) break - print(product_lang.name, lang_code, product_lang.dates, product_lang.times, product_lang.description) - - # 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() + print(product_lang.name, lang_code, product_lang.dates) + + setattr(event, 'title' + '_' + lang_code, product_lang.name) + setattr(event, 'content' + '_' + lang_code, product_lang.description) + event.date_text = product_lang.dates + + event.start = datetime.now() + event.user = self.default_user + event_price, c = ma_models.EventPrice.objects.get_or_create(value=product.price) + event.save() + event.prices.add(event_price) + event.status = 1 + event.save() + event_training.event = event + event_training.save() diff --git a/app/organization/agenda/models.py b/app/organization/agenda/models.py index 8de24c7c..9a5c02ad 100644 --- a/app/organization/agenda/models.py +++ b/app/organization/agenda/models.py @@ -9,6 +9,7 @@ from organization.core.models import * from organization.network.models import * + class EventBlock(Block): event = models.ForeignKey(Event, verbose_name=_('event'), related_name='blocks', blank=True, null=True, on_delete=models.SET_NULL) @@ -93,7 +94,7 @@ class EventTrainingLevel(Named): 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) + 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) diff --git a/app/organization/shop/models.py b/app/organization/shop/models.py index 30db82e5..44e22473 100644 --- a/app/organization/shop/models.py +++ b/app/organization/shop/models.py @@ -37,7 +37,6 @@ class ProductListProduct(Orderable): verbose_name_plural = _("products") - class PageProductList(models.Model): page = models.ForeignKey('pages.Page', verbose_name=_('page'), related_name='product_lists', blank=True, null=True, on_delete=models.SET_NULL) @@ -51,3 +50,18 @@ class PageProductList(models.Model): class ProductLink(Link): product = models.ForeignKey(Product, verbose_name=_('product'), related_name='links', blank=True, null=True, on_delete=models.SET_NULL) + + +class ProductPrestashopProduct(models.Model): + + product = models.OneToOneField(Product, verbose_name=_('prestashop product'), related_name='prestashop_products') + prestashop_id = models.IntegerField(verbose_name=_('prestashop id')) + prestashop_slug = models.CharField(max_length=255, verbose_name=_('slug'), null=True, blank=True) + prestashop_url = models.CharField(max_length=512, verbose_name=_('relative url'), null=True, blank=True) + + class Meta: + verbose_name = _("prestashop product") + verbose_name_plural = _("prestashop products") + + def __str__(self): + return ' - '.join((self.product.title, self.prestashop_id)) diff --git a/app/templates/agenda/includes/event_metainfo.html b/app/templates/agenda/includes/event_metainfo.html index 03629701..256a526a 100644 --- a/app/templates/agenda/includes/event_metainfo.html +++ b/app/templates/agenda/includes/event_metainfo.html @@ -23,7 +23,7 @@ {% with event.trainings.all.0 as training %} {% if training %}
{% trans "Language" %}
-

{{ training.language }}

+

{{ training.get_language_display }}

{% trans "Public type" %}

{{ training.public_type }}

{% trans "Level" %}
diff --git a/lib/django-prestashop b/lib/django-prestashop deleted file mode 160000 index 37a97f9a..00000000 --- a/lib/django-prestashop +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 37a97f9affa7979e52b6b0ff7c3bc39ce2c05302 diff --git a/lib/mezzanine-agenda b/lib/mezzanine-agenda index 2329e6a7..2c6e15e6 160000 --- a/lib/mezzanine-agenda +++ b/lib/mezzanine-agenda @@ -1 +1 @@ -Subproject commit 2329e6a7bf55e852f0ad7686d17ff773a07aa6c6 +Subproject commit 2c6e15e6a66c507e05ab803016acd4d250f4d2dd -- 2.39.5