{% extends 'base.html' %} {% block title %}Spulen | Filament Manager{% endblock %} {% block body_class %}page-spools{% endblock %} {% block page_title %}Spulenverwaltung{% endblock %} {% block page_subtitle %}Rollen, Restfüllmengen, Reservierungen, Kosten und schnelle Detail-/Label-Ansichten pro Spule.{% endblock %} {% block page_toolbar %}
Anlegen
Neue Rollen und Profile
Neue Einzelrollen, Bulk-Erfassung und herstellerbezogene Leerspulen aus einem Menü.
Bestand
Bulk Aktionen
Mehrere Rollen gemeinsam umlagern, archivieren oder Massenwerte anpassen.
Report Rollenvorrat Report Bestellzettel
Lager & Tools
Wechsel und Werkzeuge
In Lager, Labels oder die zentrale Filamentpflege springen und neue Lager direkt anlegen.
Lager Label Tool Globale Filamente
{% endblock %} {% block content %} {% set has_extended_filter = filters.warehouse_id or filters.color_mode or filters.color_family or filters.finish_type or filters.effect_tag or filters.stock_state or filters.active != '1' or filters.only_reserved or filters.low_stock_only %}

Suche & Filter

Kompakt einklappbar: geschlossen nur Freitextsuche, geöffnet mit Basis- und erweiterten Filtern.
{% if filters.warehouse_id %}{% endif %} {% if filters.brand %}{% endif %} {% if filters.material %}{% endif %} {% if filters.color_mode %}{% endif %} {% if filters.color_family %}{% endif %} {% if filters.finish_type %}{% endif %} {% if filters.effect_tag %}{% endif %} {% if filters.stock_state %}{% endif %} {% if filters.active != '1' %}{% endif %} {% if filters.only_reserved %}{% endif %} {% if filters.low_stock_only %}{% endif %}
Optik & Material Farbmodus, Familie, Finish und Effekte gezielt eingrenzen.
Lager & Status Füllstand, Reservierungen und aktive Rollen gezielt filtern.

Spulenübersicht

Spalten per Drag & Drop sortieren, per Schalter ein- oder ausblenden und jederzeit auf Standard zurücksetzen.
Spalten
Tabellenspalten
Zeilen ziehen, um die Reihenfolge zu ändern. Über den Schalter rechts blendest du Spalten direkt ein oder aus.
{% set spool_column_options = [ ('material', 'Materialtyp'), ('color', 'Farbe'), ('finish', 'Finish'), ('diameter', 'Durchmesser'), ('location', 'Lagerort'), ('available', 'Verfügbar'), ('reserved', 'Reserviert'), ('stock', 'Restfüllmenge'), ('status', 'Status'), ('supplier', 'Lieferant'), ('lot', 'Lot') ] %} {% for column_key, column_label in spool_column_options %}
{{ column_label }} {{ column_key }}
{% endfor %}
{% for spool in spools %} {% set color_hex = spool.color_hex or '#8aa0b8' %} {% set mode_label = (spool.color_mode or spool.filament_color_mode or 'single')|replace('_', ' ')|title %} {% set family_label = (spool.color_family or spool.filament_color_family or '')|replace('_', ' ')|title %} {% set finish_label = (spool.finish_type or spool.filament_finish_type or '')|replace('_', ' ')|title %} {% set net_weight = spool.net_weight_g or 0 %} {% set remaining_weight = spool.remaining_g or 0 %} {% set stock_percent = ((remaining_weight / net_weight) * 100) if net_weight > 0 else 0 %} {% set empty_weight = spool.empty_spool_weight_g or 0 %} {% set current_weight = remaining_weight + empty_weight %} {% set reference_weight = (net_weight + empty_weight) if (net_weight + empty_weight) > 0 else 0 %} {% set combined_fill_percent = (((remaining_weight + empty_weight) / reference_weight) * 100) if reference_weight > 0 else 0 %} {% set material_fill_percent = ((remaining_weight / reference_weight) * 100) if reference_weight > 0 else 0 %} {% set detail_id = 'spool-detail-' ~ spool.id %} {% set spool_name = (spool.brand or '') ~ ' ' ~ (spool.material or '') ~ ' ' ~ (spool.color_name or '') %} {% set profile_label = spool.filament_color_name or spool.color_name or ('Profil #' ~ (spool.filament_id or spool.id)) %} {% set brand_label = spool.brand or 'Hersteller' %} {% set material_label = spool.material or 'Material offen' %} {% set color_label = spool.color_name or profile_label or 'Ohne Farbname' %} {% set nozzle_label = spool.print_temp_c or spool.filament_print_temp_c %} {% set bed_label = spool.bed_temp_c or spool.filament_bed_temp_c %} {% set slot_label = ('Slot ' ~ spool.slot_number) if spool.slot_number else '' %} {% set storage_label = spool.storage_location or '' %} {% set role_status_key = spool.role_status_key or 'free' %} {% if role_status_key not in ['free', 'reserved', 'in-use', 'empty'] %} {% set role_status_key = 'free' %} {% endif %} {% set role_status_label = 'Verfügbar' %} {% set role_status_rank = 2 %} {% set stock_tone_key = 'ok' %} {% if role_status_key == 'empty' %} {% set role_status_label = 'Leer' %} {% set role_status_rank = 1 %} {% elif role_status_key == 'reserved' %} {% set role_status_label = 'Reserviert' %} {% set role_status_rank = 3 %} {% elif role_status_key == 'in-use' %} {% set role_status_label = 'In Verwendung' %} {% set role_status_rank = 4 %} {% endif %} {% if stock_percent <= 15 %} {% set stock_tone_key = 'critical' %} {% elif stock_percent <= 35 %} {% set stock_tone_key = 'low' %} {% elif stock_percent <= 60 %} {% set stock_tone_key = 'warn' %} {% endif %} {% set material_key = (spool.material or '')|lower %} {% set material_badge_class = 'is-generic' %} {% if 'pla' in material_key %} {% set material_badge_class = 'is-pla' %} {% elif 'petg' in material_key %} {% set material_badge_class = 'is-petg' %} {% elif 'abs' in material_key or 'asa' in material_key %} {% set material_badge_class = 'is-abs' %} {% elif 'tpu' in material_key or 'flex' in material_key %} {% set material_badge_class = 'is-tpu' %} {% elif 'pa' in material_key or 'nylon' in material_key or 'pc' in material_key %} {% set material_badge_class = 'is-engineering' %} {% endif %} {% else %} {% endfor %}
Details
{{ brand_label }} - {{ material_label }} - {{ color_label }}
{% if spool.lot_number %}Lot {{ spool.lot_number }}{% endif %} {% if spool.supplier %}{{ spool.supplier }}{% endif %}
{{ material_label }}
{{ color_label }} {{ mode_label }}{% if family_label %} | {{ family_label }}{% endif %}
{{ finish_label or '-' }} Finish
{% if spool.diameter_mm %}{{ spool.diameter_mm }} mm{% else %}-{% endif %} Durchmesser
{{ spool.warehouse_name }} {% if slot_label %}{{ slot_label }}{% endif %}
{{ spool.available_g }} g frei
{{ spool.reserved_g }} g reserviert
{{ remaining_weight }} g {{ stock_percent|round(0, 'common')|int }}%
{% if net_weight %}von {{ net_weight }} g netto{% else %}Nettogewicht offen{% endif %}{% if spool.empty_spool_weight_g is not none %} · Leer {{ '%.0f'|format(spool.empty_spool_weight_g) }} g{% endif %}
{{ spool.supplier or '-' }} Lieferant
{{ spool.lot_number or '-' }} Lot
Keine Rollen gefunden.
{% endblock %} {% block data_blocks %} {% endblock %}