{# Container-Ausdruck — Bestandsliste eines Ruestwagens oder Lagerorts. Route: /hardware/container_print. Bis zum 31.08.2026 die Python-Konstante HARDWARE_CONTAINER_PRINT_HTML; der Wortlaut ist beim Umzug unveraendert geblieben. -#} {{ type_label }} {{ container_name }} – BOM {% import 'docs/_leiste.html' as ui %} {# seiten=true: seit §2d kennt auch dieser Ausdruck seine Seitenzahl — das Umbruch-Skript traegt sie in die Leiste nach. #} {% call ui.leiste(etikett=type_label, seiten=true, zurueck_url=url_for('serve_test_equipment_page'), zurueck_text='Zurück zur Hardware-Übersicht') -%} {{ container_name }} · Stand {{ datenstand }} {%- endcall %}
{{ branding.company_name }} Logo
{{ container_name }}
{{ type_label }}  ·  Bill of Materials & Ebenenübersicht
Triebwerkstyp {{ container_data.get('engineType', '–') }} Verantwortlich {{ container_data.get('responsible', '–') }} Positionen {{ items | length }}{% if checked_out_count %} ({{ checked_out_count }} ausgebucht){% endif %} Erstellt {{ date_str }}
{% if container_data.get('images') %}
Gesamtbild
{% for img in container_data['images'] %} {{ img.name or '' }} {% endfor %}
{% endif %} {% if sorted_levels | reject('equalto', '') | list %}
Ebenenübersicht
{% for lvl in sorted_levels %} {% if lvl %} {% set lvl_img = container_data.get('level_images', {}).get(lvl) %}
Ebene {{ lvl }}
{% if lvl_img and lvl_img.get('path') %} Ebene {{ lvl }} {% else %}
Kein Foto
{% endif %}
{% for it in level_map.get(lvl, []) %} {% set cat = it.get('_cat', 'sw') %} {% set co = it.get('_co', '') %} {% endfor %}
ArtP/NS/NBezeichnungAnz.BoxStatus
{% if cat == 'hw' %}HW{% elif cat == 'con' %}CON{% else %}SW{% endif %} {{ it.get('pn', '') }} {{ it.get('sn', '') }} {{ it.get('name', '') }} {{ it.get('qty', 1) }} {{ it.get('box', '') }} {% if co %}{{ co }}{% else %}—{% endif %}
{% endif %} {% endfor %}
{% endif %} {% if items_hw %}
Hardware HW  ·  {{ items_hw | length }} Position(en)
{% for it in items_hw %} {% set co = it.get('_co', '') %} {% endfor %}
EbeneBoxP/NS/NBezeichnungAnz.Status
{{ it.get('level', '') }} {{ it.get('box', '') }} {{ it.get('pn', '') }} {{ it.get('sn', '') }} {{ it.get('name', '') }} {{ it.get('qty', 1) }} {% if co %}{{ co }}{% else %}—{% endif %}
{% endif %} {% if items_sw %}
Schüttware SW  ·  {{ items_sw | length }} Position(en)
{% for it in items_sw %} {% set co = it.get('_co', '') %} {% endfor %}
EbeneBoxP/NBezeichnungAnz.Status
{{ it.get('level', '') }} {{ it.get('box', '') }} {{ it.get('pn', '') }} {{ it.get('name', '') }} {{ it.get('qty', 1) }} {% if co %}{{ co }}{% else %}—{% endif %}
{% endif %} {% if items_con %}
Consumables CON  ·  {{ items_con | length }} Position(en)
{% for it in items_con %} {% set co = it.get('_co', '') %} {% endfor %}
EbeneBoxP/NChargeVerfallBezeichnungAnz.Status
{{ it.get('level', '') }} {{ it.get('box', '') }} {{ it.get('pn', '') }} {{ it.get('batch', '') }} {{ it.get('expiry', '') }} {{ it.get('name', '') }} {{ it.get('qty', 1) }} {% if co %}{{ co }}{% else %}—{% endif %}
{% endif %}