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
model = ProductLink
+class ProductPrestashopProductInline(TabularDynamicInlineAdmin):
+
+ model = ProductPrestashopProduct
+
class CustomProductAdmin(ProductAdmin):
- inlines = [ProductImageAdmin, ProductVariationAdmin, ProductLinkInline]
+ inlines = [ProductImageAdmin, ProductVariationAdmin, ProductLinkInline,
+ ProductPrestashopProductInline]
admin.site.register(ProductList, ProductListAdmin)
--- /dev/null
+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()
--- /dev/null
+# -*- 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'),
+ ),
+ ]
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)))
class ProductLinkTranslationOptions(TranslationOptions):
pass
+
+
+@register(ProductPrestashopProduct)
+class ProductPrestashopProductTranslationOptions(TranslationOptions):
+
+ pass