From 8a50b1d98aa057265abacc5d41e08d94174ada2a Mon Sep 17 00:00:00 2001 From: Raphael Michel Date: Mon, 29 Sep 2014 14:22:26 +0200 Subject: [PATCH] Manage variations for items with exactly two properties --- .../tixlcontrol/item/variations_2d.html | 41 +++++++++++++++++++ src/tixlcontrol/views/item.py | 32 +++++++++++++-- 2 files changed, 70 insertions(+), 3 deletions(-) create mode 100644 src/tixlcontrol/templates/tixlcontrol/item/variations_2d.html diff --git a/src/tixlcontrol/templates/tixlcontrol/item/variations_2d.html b/src/tixlcontrol/templates/tixlcontrol/item/variations_2d.html new file mode 100644 index 0000000000..ea5f0bf52b --- /dev/null +++ b/src/tixlcontrol/templates/tixlcontrol/item/variations_2d.html @@ -0,0 +1,41 @@ +{% extends "tixlcontrol/item/base.html" %} +{% load i18n %} +{% load bootstrap3 %} +{% block inside %} +

{% trans "Variations" %}

+
+ {% csrf_token %} + + + + + {% for val in properties.1.values.all %} + + {% endfor %} + + + + {% for sub in forms %} + + + {% for form in sub %} + + {% endfor %} + + {% endfor %} + +
{{ val.value }}
{{ sub.0.subval.value }} + {% bootstrap_field form.active layout='inline' %} + {% bootstrap_field form.default_price layout='inline' %} + {{ form.default_price.errors }} +
+
+
+ +
+
+
+ +{% endblock %} diff --git a/src/tixlcontrol/views/item.py b/src/tixlcontrol/views/item.py index 2ef14bc9af..c634e362c8 100644 --- a/src/tixlcontrol/views/item.py +++ b/src/tixlcontrol/views/item.py @@ -119,22 +119,46 @@ class ItemVariations(TemplateView, SingleObjectMixin): data = self.request.POST if self.request.method == 'POST' else None if self.dimension == 1: for var in variations: - val = [i[1] for i in sorted([it for it in var.items() if it[0] != 'variation'])] + val = [var[self.properties[0].pk]] if 'variation' in var: form = ItemVariationForm( data, instance=var['variation'], - prefix=",".join([str(i) for i in val]) + prefix=val[0].pk, ) else: form = ItemVariationForm( data, instance=ItemVariation(item=self.object), - prefix=",".join([str(i) for i in val]) + prefix=val[0].pk, ) form.values = val forms.append(form) forms_flat = forms + elif self.dimension == 2: + prop1 = self.properties[0] + prop2 = self.properties[1] + for val1 in prop1.values.all(): + thisforms = [] + for var in [v for v in variations if v[prop1.pk].pk == val1.pk]: + val = [i[1] for i in sorted([it for it in var.items() if it[0] != 'variation'])] + if 'variation' in var: + form = ItemVariationForm( + data, + instance=var['variation'], + prefix=",".join([str(i.pk) for i in val]) + ) + else: + form = ItemVariationForm( + data, + instance=ItemVariation(item=self.object), + prefix=",".join([str(i.pk) for i in val]) + ) + form.values = val + form.subval = var[prop1.pk] + thisforms.append(form) + forms_flat.append(form) + forms.append(thisforms) return forms, forms_flat def main(self, request, *args, **kwargs): @@ -171,6 +195,8 @@ class ItemVariations(TemplateView, SingleObjectMixin): def get_template_names(self): if self.dimension == 1: return ['tixlcontrol/item/variations_1d.html'] + elif self.dimension == 2: + return ['tixlcontrol/item/variations_2d.html'] def get_context_data(self, **kwargs): context = super().get_context_data(**kwargs)