]> git.parisson.com Git - mezzo.git/commitdiff
Update product sync command
authorGuillaume Pellerin <guillaume.pellerin@ircam.fr>
Thu, 20 Oct 2016 18:57:55 +0000 (20:57 +0200)
committerGuillaume Pellerin <guillaume.pellerin@ircam.fr>
Thu, 20 Oct 2016 18:57:55 +0000 (20:57 +0200)
app/local_settings.py
app/organization/shop/admin.py
app/organization/shop/management/__init__.py [new file with mode: 0644]
app/organization/shop/management/commands/__init__.py [new file with mode: 0644]
app/organization/shop/management/commands/organization-sync-prestashop-products.py [new file with mode: 0644]
app/organization/shop/migrations/0007_auto_20161020_2035.py [new file with mode: 0644]
app/organization/shop/models.py
app/organization/shop/translation.py

index 957a5f296218f8dd66b0a26aca1ac3e6f31fe7b7..a27b60a5adffb0f4eeb59e7884afa5097139a658 100644 (file)
@@ -215,7 +215,7 @@ GRAPPELLI_INSTALLED = True
 JQUERY_UI_FILENAME = 'jquery-ui-1.9.2.min.js'
 
 #SHOP_CURRENCY_LOCALE = ''
-SHOP_USE_VARIATIONS = True
+SHOP_USE_VARIATIONS = False
 SHOP_USE_RATINGS = False
 
 
index fb5f2eb0855c1869ec0aa90d3b0bcbb58afcd5fd..e20d78d456a873073dbbb57d254e149d0d11d0ba 100644 (file)
@@ -28,10 +28,15 @@ class ProductLinkInline(TabularDynamicInlineAdmin):
 
     model = ProductLink
 
+class ProductPrestashopProductInline(TabularDynamicInlineAdmin):
+
+    model = ProductPrestashopProduct
+
 
 class CustomProductAdmin(ProductAdmin):
 
-    inlines = [ProductImageAdmin, ProductVariationAdmin, ProductLinkInline]
+    inlines = [ProductImageAdmin, ProductVariationAdmin, ProductLinkInline,
+                ProductPrestashopProductInline]
 
 
 admin.site.register(ProductList, ProductListAdmin)
diff --git a/app/organization/shop/management/__init__.py b/app/organization/shop/management/__init__.py
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/app/organization/shop/management/commands/__init__.py b/app/organization/shop/management/commands/__init__.py
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/app/organization/shop/management/commands/organization-sync-prestashop-products.py b/app/organization/shop/management/commands/organization-sync-prestashop-products.py
new file mode 100644 (file)
index 0000000..6e059b1
--- /dev/null
@@ -0,0 +1,85 @@
+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 organization.shop.models as os_models
+import prestashop.models as pa_models
+import cartridge.shop.models as ca_models
+
+
+class Command(BaseCommand):
+    """Synchronize products from PrestaShop to cartridge.shop
+    
+    ex: python manage.py organization-sync-prestashop-products -c "Forumnet"
+    """
+
+    option_list = BaseCommand.option_list + (
+          make_option('-c', '--category',
+            dest='category_lang_name',
+            help='define prestashop PsCategoryLang'),
+          )
+
+    default_user = User.objects.get(username='admin')
+    languages = { 1 : {'code': 'en', 'names': ['english', 'anglais']},
+                  2 : {'code': 'fr', 'names': ['french', 'français']},}
+
+
+    def cleanup(self):
+        for product in ca_models.ProductVariation.objects.all():
+             product.delete()
+        for product in ca_models.Product.objects.all():
+             product.delete()
+
+    def handle(self, *args, **kwargs):
+        # !! NOT FOR PROD !!
+        # self.cleanup()
+
+        products = []
+        category_lang_name = kwargs.get('category_lang_name')
+
+        if not category_lang_name:
+            for category in pa_models.PsCategoryLang.objects.all():
+                print(category.name)
+            return
+
+        category_lang_name = kwargs.get('category_lang_name')
+        category_lang = pa_models.PsCategoryLang.objects.filter(name=category_lang_name)[0]
+        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:
+            try:
+                products.append(pa_models.PsProduct.objects.get(id_product=category_product.id_product))
+            except:
+                continue
+
+        for product in products:
+            print('---------------------------')
+            print(product.id_product)
+
+            ca_product, c = ca_models.Product.objects.get_or_create(sku=product.reference)
+            variation, c = ca_models.ProductVariation.objects.get_or_create(product=ca_product, default=True)
+
+            product_langs = pa_models.PsProductLang.objects.filter(id_product=product.id_product)
+            for product_lang in product_langs:
+                if product_lang.id_lang in self.languages.keys():
+                    lang_code = self.languages[product_lang.id_lang]['code']
+                    print(product_lang.name, lang_code)
+                    setattr(ca_product, 'title' + '_' + lang_code, product_lang.name)
+                    setattr(ca_product, 'content' + '_' + lang_code, product_lang.description)
+                    if lang_code == 'en':
+                        slug = product_lang.link_rewrite
+
+            ca_product.sku = product.reference
+            ca_product.sale_price = product.price
+            ca_product.save()
+
+            prestashop_product, c = os_models.ProductPrestashopProduct.objects.get_or_create(product=ca_product, external_id=product.id_product)
+            prestashop_product.slug = slug
+            prestashop_product.save()
diff --git a/app/organization/shop/migrations/0007_auto_20161020_2035.py b/app/organization/shop/migrations/0007_auto_20161020_2035.py
new file mode 100644 (file)
index 0000000..daccc5c
--- /dev/null
@@ -0,0 +1,44 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.9.10 on 2016-10-20 18:35
+from __future__ import unicode_literals
+
+from django.db import migrations, models
+import django.db.models.deletion
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('organization-shop', '0006_productprestashopproduct'),
+    ]
+
+    operations = [
+        migrations.RenameField(
+            model_name='productprestashopproduct',
+            old_name='prestashop_slug',
+            new_name='slug',
+        ),
+        migrations.RemoveField(
+            model_name='productprestashopproduct',
+            name='prestashop_id',
+        ),
+        migrations.RemoveField(
+            model_name='productprestashopproduct',
+            name='prestashop_url',
+        ),
+        migrations.AddField(
+            model_name='productprestashopproduct',
+            name='external_id',
+            field=models.IntegerField(blank=True, null=True, verbose_name='external id'),
+        ),
+        migrations.AddField(
+            model_name='productprestashopproduct',
+            name='url',
+            field=models.CharField(blank=True, max_length=512, null=True, verbose_name='url'),
+        ),
+        migrations.AlterField(
+            model_name='productprestashopproduct',
+            name='product',
+            field=models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, related_name='prestashop_products', to='shop.Product', verbose_name='product'),
+        ),
+    ]
index 44e224736da10b2566950fef22751a91aab3a25a..32e86feddae066e1ccc2aff84105dee09bb107ae 100644 (file)
@@ -54,14 +54,14 @@ class ProductLink(Link):
 
 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)
+    product = models.OneToOneField(Product, verbose_name=_('product'), related_name='prestashop_products')
+    external_id = models.IntegerField(verbose_name=_('external id'), null=True, blank=True)
+    slug = models.CharField(max_length=255, verbose_name=_('slug'), null=True, blank=True)
+    url = models.CharField(max_length=512, verbose_name=_('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))
+        return ' - '.join((self.product.title, str(self.external_id)))
index 9f3c1acca03fbfd6a5d39aef2bfa886b05836961..fb51daefbaeb455f19f157a8b41e384bd8edb039 100644 (file)
@@ -26,3 +26,9 @@ class PageProductListTranslationOptions(TranslationOptions):
 class ProductLinkTranslationOptions(TranslationOptions):
 
     pass
+
+
+@register(ProductPrestashopProduct)
+class ProductPrestashopProductTranslationOptions(TranslationOptions):
+
+    pass