From ffb8c1cef44d9e4585b7e03db96bca6acdd64a7e Mon Sep 17 00:00:00 2001 From: Johannes Schriewer Date: Sat, 8 Aug 2020 02:20:43 +0200 Subject: [PATCH] Add template and static files for SMD-Boxall --- inventory/static/inventory/css/box-all.css | 43 ++++++++++ inventory/static/inventory/css/main.css | 78 ++++++++++++++++++ inventory/static/inventory/img/add.png | Bin 0 -> 258 bytes inventory/static/inventory/img/edit.png | Bin 0 -> 310 bytes inventory/templates/base.html | 4 +- .../{box_detail.html => box-generic.html} | 0 .../templates/inventory/box-smd-boxall.html | 65 +++++++++++++++ inventory/views/box.py | 32 ++++++- 8 files changed, 218 insertions(+), 4 deletions(-) create mode 100644 inventory/static/inventory/css/box-all.css create mode 100644 inventory/static/inventory/css/main.css create mode 100644 inventory/static/inventory/img/add.png create mode 100644 inventory/static/inventory/img/edit.png rename inventory/templates/inventory/{box_detail.html => box-generic.html} (100%) create mode 100644 inventory/templates/inventory/box-smd-boxall.html 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 0000000000000000000000000000000000000000..148be5700448054b1c57dd75a7c892dce8f5e8b6 GIT binary patch literal 258 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`EX7WqAsj$Z!;#Vf2?- zR1judbxnLdkRe&(8c`CQpH@mmtT}V`<;yxP*J_7i(`mI z@7c-LTnz>SF890UroL0TQN>>EpQc^W7Nh<(N~LvvjzI8>0|!KQALg66VAT^2iv#Lb z#p@Cb7-v~T7W0}}InNI;s%Ux78zoqH;Dqh-f-6czcXwse3N_%xJ@>r&<5IflguYboFyt=akR{0Cu`uga7~l literal 0 HcmV?d00001 diff --git a/inventory/static/inventory/img/edit.png b/inventory/static/inventory/img/edit.png new file mode 100644 index 0000000000000000000000000000000000000000..57c94134239b6fd44c1aa69227fee6ad19310406 GIT binary patch literal 310 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`EX7WqAsj$Z!;#Vf2?- zDIm;Pxu5qvkRe&(8c`CQpH@mmtT}V`<;yxP|;>j7sn8b z-no~o^Oy`pST7iJTx4)QY7`-nB)mrHw}-2<);>|z?uE4?g%=EZn%TYmr|Hapy}lzL zYDQwW@-xAO{BnJwnz7Ed~2#z zv-I(qUk}PoSX6g%%3BpAv|mil^WSs)NoF1Q^}72O?aTGKw|&rT=8yd$_(9Vz?CsBX y)7L-b|8bvqDEz8P|DWYK);ZpV;STyTg73OkuX(3_MEecU`3#<}elF{r5}E+`cy*5e literal 0 HcmV?d00001 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 -