'organization-projects.ProjectTopic',
'organization-projects.ProjectProgramType',
)),
+ (_('Shop'), ('shop.Product',
+ 'organization-shop.ProductList',
+ 'shop.Order',
+ 'shop.DiscountCode',
+ 'shop.Sale',
+ )),
(_('Jobs'), ('organization-job.JobOffer',)),
(_('Festival'), ('organization-festival.Artist',)),
(_('Users'), ('auth.User', 'auth.Group',)),
model = Keyword
+class BaseTranslationOrderedModelAdmin(BaseTranslationModelAdmin):
+
+ def get_fieldsets(self, request, obj = None):
+ res = super(BaseTranslationOrderedModelAdmin, self).get_fieldsets(request, obj)
+ for field in reversed(self.first_fields):
+ for trans_field in res[0][1]['fields']:
+ if field in trans_field:
+ index = res[0][1]['fields'].index(trans_field)
+ res[0][1]['fields'].insert(0, res[0][1]['fields'].pop(index))
+ return res
+
+
admin.site.register(LinkType)
admin.site.unregister(BlogPost)
admin.site.unregister(ThreadedComment)
model = PersonBlock
-class PersonAdmin(BaseTranslationModelAdmin):
+class PersonAdmin(BaseTranslationOrderedModelAdmin):
model = Person
inlines = [PersonActivityInline, PersonAudioInline, PersonImageInline, PersonVideoInline, PersonBlockInline, PersonLinkInline ]
first_fields = ['last_name', 'first_name', 'title', 'gender', 'user']
search_fields = ['last_name', 'first_name']
- def get_fieldsets(self, request, obj = None):
- res = super(PersonAdmin, self).get_fieldsets(request, obj)
- for field in reversed(self.first_fields):
- index = res[0][1]['fields'].index(field)
- res[0][1]['fields'].insert(0, res[0][1]['fields'].pop(index))
- return res
-
class PersonListBlockInlineAdmin(TabularDynamicInlineAdmin):
form = PageCustomPersonListForm
-class PageProductBlockInline(TabularDynamicInlineAdmin):
+class PageProductListInline(TabularDynamicInlineAdmin):
- model = PageProductBlock
+ model = PageProductList
class CustomPageAdmin(PageAdmin):
PageVideoInline,
PageLinkInline,
PersonListBlockAutocompleteInlineAdmin,
- PageProductBlockInline
+ PageProductListInline
]
from mezzanine.core.admin import *
+from organization.core.admin import *
from organization.projects.models import *
from organization.pages.models import *
from organization.media.models import Video, Audio
from cartridge.shop.admin import *
-class ProductBlockProductInline(TabularDynamicInlineAdmin):
+class ProductListProductInline(TabularDynamicInlineAdmin):
- model = ProductBlockProduct
+ model = ProductListProduct
-class ProductBlockAdmin(BaseTranslationModelAdmin):
+class ProductListAdmin(BaseTranslationOrderedModelAdmin):
- inlines = [ProductBlockProductInline, ]
+ inlines = [ProductListProductInline, ]
+ first_fields = ['title', 'description',]
class ProductLinkInline(TabularDynamicInlineAdmin):
inlines = [ProductImageAdmin, ProductVariationAdmin, ProductLinkInline]
-admin.site.register(ProductBlock, ProductBlockAdmin)
+admin.site.register(ProductList, ProductListAdmin)
admin.site.unregister(Product)
admin.site.register(Product, CustomProductAdmin)
--- /dev/null
+# -*- coding: utf-8 -*-
+# Generated by Django 1.9.7 on 2016-09-26 09:44
+from __future__ import unicode_literals
+
+from django.db import migrations, models
+import mezzanine.core.fields
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ('organization-shop', '0003_productlink'),
+ ]
+
+ operations = [
+ migrations.AddField(
+ model_name='productblock',
+ name='content',
+ field=mezzanine.core.fields.RichTextField(default='', verbose_name='Content'),
+ preserve_default=False,
+ ),
+ migrations.AddField(
+ model_name='productblock',
+ name='content_en',
+ field=mezzanine.core.fields.RichTextField(null=True, verbose_name='Content'),
+ ),
+ migrations.AddField(
+ model_name='productblock',
+ name='content_fr',
+ field=mezzanine.core.fields.RichTextField(null=True, verbose_name='Content'),
+ ),
+ migrations.AddField(
+ model_name='productblock',
+ name='description_en',
+ field=models.TextField(blank=True, null=True, verbose_name='description'),
+ ),
+ migrations.AddField(
+ model_name='productblock',
+ name='description_fr',
+ field=models.TextField(blank=True, null=True, verbose_name='description'),
+ ),
+ ]
--- /dev/null
+# -*- coding: utf-8 -*-
+# Generated by Django 1.9.7 on 2016-09-26 10:30
+from __future__ import unicode_literals
+
+from django.db import migrations, models
+import django.db.models.deletion
+import mezzanine.core.fields
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ('shop', '0008_auto_20160907_1726'),
+ ('pages', '0005_auto_20160923_1219'),
+ ('organization-shop', '0004_auto_20160926_1144'),
+ ]
+
+ operations = [
+ migrations.CreateModel(
+ name='PageProductList',
+ fields=[
+ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+ ],
+ options={
+ 'verbose_name': 'product list',
+ 'verbose_name_plural': 'product lists',
+ },
+ ),
+ migrations.CreateModel(
+ name='ProductListProduct',
+ fields=[
+ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+ ('_order', mezzanine.core.fields.OrderField(null=True, verbose_name='Order')),
+ ],
+ options={
+ 'verbose_name': 'product',
+ 'verbose_name_plural': 'products',
+ 'ordering': ('_order',),
+ },
+ ),
+ migrations.RenameModel(
+ old_name='ProductBlock',
+ new_name='ProductList',
+ ),
+ migrations.RemoveField(
+ model_name='pageproductblock',
+ name='page',
+ ),
+ migrations.RemoveField(
+ model_name='pageproductblock',
+ name='product_block',
+ ),
+ migrations.RemoveField(
+ model_name='productblockproduct',
+ name='product',
+ ),
+ migrations.RemoveField(
+ model_name='productblockproduct',
+ name='product_block',
+ ),
+ migrations.AlterModelOptions(
+ name='productlist',
+ options={'verbose_name': 'product list', 'verbose_name_plural': 'product lists'},
+ ),
+ migrations.DeleteModel(
+ name='PageProductBlock',
+ ),
+ migrations.DeleteModel(
+ name='ProductBlockProduct',
+ ),
+ migrations.AddField(
+ model_name='productlistproduct',
+ name='list',
+ field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='products', to='organization-shop.ProductList', verbose_name='product list'),
+ ),
+ migrations.AddField(
+ model_name='productlistproduct',
+ name='product',
+ field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='lists', to='shop.Product', verbose_name='product'),
+ ),
+ migrations.AddField(
+ model_name='pageproductlist',
+ name='list',
+ field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='pages', to='organization-shop.ProductList', verbose_name='product list'),
+ ),
+ migrations.AddField(
+ model_name='pageproductlist',
+ name='page',
+ field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='product_lists', to='pages.Page', verbose_name='page'),
+ ),
+ ]
]
-class ProductBlock(Titled):
+class ProductList(Titled, RichText):
style = models.CharField(_('style'), max_length=16, choices=PRODUCT_LIST_STYLE_CHOICES)
class Meta:
- verbose_name = _("product block")
- verbose_name_plural = _("product blocks")
+ verbose_name = _("product list")
+ verbose_name_plural = _("product lists")
def __str__(self):
return self.title
-class ProductBlockProduct(Orderable):
+class ProductListProduct(Orderable):
- product_block = models.ForeignKey(ProductBlock, verbose_name=_('product block'), related_name='products', blank=True, null=True, on_delete=models.SET_NULL)
- product = models.ForeignKey(Product, verbose_name=_('product'), related_name='blocks', blank=True, null=True, on_delete=models.SET_NULL)
+ list = models.ForeignKey(ProductList, verbose_name=_('product list'), related_name='products', blank=True, null=True, on_delete=models.SET_NULL)
+ product = models.ForeignKey(Product, verbose_name=_('product'), related_name='lists', blank=True, null=True, on_delete=models.SET_NULL)
class Meta:
verbose_name = _("product")
-class PageProductBlock(models.Model):
+class PageProductList(models.Model):
- page = models.ForeignKey('pages.Page', verbose_name=_('page'), related_name='product_blocks', blank=True, null=True, on_delete=models.SET_NULL)
- product_block = models.ForeignKey('organization-shop.ProductBlock', verbose_name=_('product block'), related_name='pages', blank=True, null=True, on_delete=models.SET_NULL)
+ page = models.ForeignKey('pages.Page', verbose_name=_('page'), related_name='product_lists', blank=True, null=True, on_delete=models.SET_NULL)
+ list = models.ForeignKey('organization-shop.ProductList', verbose_name=_('product list'), related_name='pages', blank=True, null=True, on_delete=models.SET_NULL)
class Meta:
- verbose_name = _("product block")
- verbose_name_plural = _("product blocks")
+ verbose_name = _("product list")
+ verbose_name_plural = _("product lists")
class ProductLink(Link):
-@register(ProductBlock)
-class ProductBlockTranslationOptions(TranslationOptions):
+@register(ProductList)
+class ProductListTranslationOptions(TranslationOptions):
- fields = ['title',]
+ fields = ['title', 'description', 'content']
-@register(ProductBlockProduct)
-class ProductBlockProductTranslationOptions(TranslationOptions):
+@register(ProductListProduct)
+class ProductListProductTranslationOptions(TranslationOptions):
pass
-@register(PageProductBlock)
-class PageProductBlockTranslationOptions(TranslationOptions):
+@register(PageProductList)
+class PageProductListTranslationOptions(TranslationOptions):
pass
{% endblock %}
{% block page_person_list %}
- {% for page_custom_person_list_block_inline in page.custompage.page_custom_person_list_block_inlines.all %}
- {% with page_custom_person_list_block_inline.person_list_block as person_list_block %}
- {% with "network/inc/person/list_"|add:person_list_block.style|add:"_style.html" as template %}
- {% include template %}
- {% endwith %}
- {% endwith %}
- {% endfor %}
+ {% for inline in page.custompage.page_custom_person_list_block_inlines.all %}
+ {% with "network/inc/person/list_"|add:inline.person_list_block.style|add:"_style.html" as template %}
+ {% include template %}
+ {% endwith %}
+ {% endfor %}
{% endblock %}
{% block page_sub_content %}
{% endwith %}
{% endblock %}
+{% block products %}
+ {% for page_product_list in page.custompage.product_lists.all %}
+ {% with page_product_list.list as list %}
+ {% with "shop/includes/product_list_"|add:list.style|add:"_style.html" as template %}
+ {% include template %}
+ {% endwith %}
+ {% endwith %}
+ {% endfor %}
+{% endblock %}
+
{% block logo %}
{% with page.custompage.images.all|get_type:'logo' as images %}
{% if images %}
{% endblock %}
{% block page_person_list %}
{% endblock %}
+ {% block products %}
+ {% endblock %}
{% block page_sub_content %}
{% endblock %}
{% block page_related_content %}
--- /dev/null
+{% load organization_tags mezzanine_tags %}
+{% if list %}
+ <div class="white-bg pb2">
+ <hr class="mt0" />
+ <div class="container">
+ <div class="row">
+ <div class="col-sm-9 col-sm-push-3 col-lg-8 col-lg-push-2" data-summary-content>
+ <h2 class="dotted">{{ list.title }}</h2>
+ {% if list.description %}
+ <p>{{ list.description }}</p>
+ {% endif %}
+ </div>
+ </div>
+ </div>
+
+ <div class="container-fluid">
+ <div class="row tac">
+ {% for product_inline in list.products.all %}
+ {% with product_inline.product as product %}
+ <div class="col-lg-2 col-md-3 col-sm-4 col-xs-6">
+ <div class="article-box article-box--person" >
+ {% if product.images.all %}
+ <div class="article-box__header">
+ <a href="{{ product.get_absolute_url }}" title="{{ product.title }}">
+ <figure class="article-box__image">
+ <img class="lazyload" src="{{ MEDIA_URL }}{% thumbnail product.images.all.0 427 500 top=0.5 %}" alt="product"/>
+ </figure>
+ </a>
+ </div>
+ {% endif %}
+ <div class="article-box__content tal">
+ <a href="{{ product.get_absolute_url }}" title="{{ product.title }}"><h3 class="article-box__title">{{ product.title }}</h3></a>
+ {% if product.description %}
+ <div class="article-box__desc">{{ product.description|richtext_filters|safe|truncatechars_html:255 }}</div>
+ {% elif product.content %}
+ <div class="article-box__desc">{{ product.content|richtext_filters|safe|truncatechars_html:255 }}</div>
+ {% endif %}
+ </div>
+ </div>
+ </div>
+ {% endwith %}
+ {% endfor %}
+ </div>
+ </div>
+ </div>
+{% endif %}