{{ object.name }}
+ + {% for part in layouted %} ++ {% for item in part.0 %} + | {{ forloop.counter }} | + {% endfor %} +
---|---|
{{ forloop.counter }} | + {% for column in line %} +
+
+ {% if column.name %}
+ {% if column.metadata.package %}
+
+ {{ column.metadata.package }}
+ {% endif %}
+ {% if column.documentation.all %}
+
+ {{ column.name | linebreaksbr }}
+
+ {% else %}
+
+ {{ column.name | linebreaksbr }}
+
+ {% endif %}
+ {{ column.price | floatformat:2 }} €
+ {% endif %}
+ {% if column.distributor %}
+ |
+ {% endfor %}
+
+{% endfor %} + +{% endblock %} diff --git a/inventory/views/box.py b/inventory/views/box.py index 45d52d8..5f955fb 100644 --- a/inventory/views/box.py +++ b/inventory/views/box.py @@ -8,10 +8,38 @@ from inventory.models import Box @method_decorator(login_required, name='dispatch') class BoxView(DetailView): context_object_name = 'box' - queryset = Box.objects.all().select_related('container', 'layout').prefetch_related('box_related') + template_name_field = 'template_name' + queryset = Box.objects.all().select_related('container', 'layout').prefetch_related('box_related').order_by('index', 'id') + + def layout(self, obj, layout, idx=0): + result = [] + for sublayout in layout: + if isinstance(sublayout, list): + resulting_sublayout, new_idx = self.layout(obj, sublayout, idx=idx) + result.append(resulting_sublayout) + idx = new_idx + else: + instances = obj.filter(index=idx) + if instances.count() == 1: + result.append(instances.first()) + elif instances.count() > 1: + sub = list(instances) + result.append(sub) + else: + result.append({ + "index": idx, + "container_id": self.object.item_related.first().container_id + }) + idx += 1 + return result, idx + + def get(self, request, *args, **kwargs): + self.object = self.get_object() + context = self.get_context_data(object=self.object) + context['layouted'], _ = self.layout(self.object.item_related.all(), self.object.layout.data) + return self.render_to_response(context) @method_decorator(login_required, name='dispatch') class BoxListView(ListView): model = Box -