diff --git a/inventory/static/inventory/css/box-all.css b/inventory/static/inventory/css/box-all.css new file mode 100644 index 0000000..4c7e152 --- /dev/null +++ b/inventory/static/inventory/css/box-all.css @@ -0,0 +1,43 @@ +tr { + height: 75px; +} + +.cell .title { + display: inline; +} + +.cell .package { + position: absolute; + display: inline; + top: 5px; + right: 5px; + font-size: xx-small; + color: #808080; +} + +.cell .price { + position: absolute; + display: inline; + bottom: 5px; + left: 5px; + font-size: xx-small; + color: #808080; +} + +.cell .shop { + position: absolute; + bottom: 5px; + right: 5px; + width: 12px; + height: 12px; + opacity: 0.5; +} + +.cell a { + color: #000000; + text-decoration: none; +} + +.missing-link { + color: #c00000; +} diff --git a/inventory/static/inventory/css/main.css b/inventory/static/inventory/css/main.css new file mode 100644 index 0000000..7598906 --- /dev/null +++ b/inventory/static/inventory/css/main.css @@ -0,0 +1,78 @@ +body { + font-family: sans-serif; +} + +table { + width: 100%; + border-collapse: collapse; + table-layout: fixed; +} + + +td { + text-align: center; + + border-color: #d0d0d0; + border-width: 1px; + border-style: solid; + position: relative; +} + +th { + text-align: center; + font-weight: 800; + padding: 20px; + + border-color: #808080; + border-width: 1px; + border-style: solid; +} + +h1 { + margin-top: 20px; +} + +main { + margin: auto; +} + +@media (min-width: 1025px) { + h1 { + width: 80%; + } + + main { + width: 80%; + } +} + +@media (max-width: 1024px) { + h1 { + width: 95%; + } + + main { + width: 95%; + } + + body { + font-size: 12px; + } +} + + +.missing { + visibility: hidden; +} + +td:hover .missing { + visibility: visible; +} + +.edit { + display: none; +} + +td:hover .edit { + display: inline; +} \ No newline at end of file diff --git a/inventory/static/inventory/img/add.png b/inventory/static/inventory/img/add.png new file mode 100644 index 0000000..148be57 Binary files /dev/null and b/inventory/static/inventory/img/add.png differ diff --git a/inventory/static/inventory/img/edit.png b/inventory/static/inventory/img/edit.png new file mode 100644 index 0000000..57c9413 Binary files /dev/null and b/inventory/static/inventory/img/edit.png differ diff --git a/inventory/templates/base.html b/inventory/templates/base.html index 24ecc34..1ce1fc9 100644 --- a/inventory/templates/base.html +++ b/inventory/templates/base.html @@ -4,8 +4,8 @@ {% block title %}{% endblock %} - - {% block header %}{% endblock %} + + {% block head %}{% endblock %}
diff --git a/inventory/templates/inventory/box_detail.html b/inventory/templates/inventory/box-generic.html similarity index 100% rename from inventory/templates/inventory/box_detail.html rename to inventory/templates/inventory/box-generic.html diff --git a/inventory/templates/inventory/box-smd-boxall.html b/inventory/templates/inventory/box-smd-boxall.html new file mode 100644 index 0000000..83e54fb --- /dev/null +++ b/inventory/templates/inventory/box-smd-boxall.html @@ -0,0 +1,65 @@ +{% extends "base.html" %} +{% load static %} +{% load admin_urls %} + +{% block head %} + +{% endblock %} + +{% block title %}{{ context.title }}{% endblock %} + +{% block content %} +

{{ object.name }}

+ + {% for part in layouted %} + + + + + {% for item in part.0 %} + + {% endfor %} + + + + {% for line in part %} + + + {% for column in line %} + + {% endfor %} + + {% endfor %} + +
{{ forloop.counter }}
{{ forloop.counter }} +
+ {% if column.name %} + {% if column.metadata.package %} +
{{ column.metadata.package }}
+ {% endif %} + {% if column.documentation.all %} + + {{ column.name | linebreaksbr }} + + {% else %} + + {% endif %} + + + {% if column.price %} +
{{ column.price | floatformat:2 }} €
+ {% endif %} + {% if column.distributor %} + + {% endif %} + {% else %} + + {% endif %} +
+
+

+{% 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 -