Stand: v0.28.3 (2026-10-09) · Alle vier Etappen live: I1 «Bestand», I2 «Anlagen und Abschreibung», I3 «Ausleihe», I4 «Vermietung». Später: öffentliche Buchung über die Vereins-Website mit Online-Zahlung (Bezahl-Addon).
Ein Menüpunkt Material im Clu-Core mit einer Tabelle wie bei Personen und Mitgliedern: Suche, Filter, Sortierung, Spaltenwahl, Inline-Bearbeitung, eigene Felder, Export.
- Material ist der Typ: «Trikot Gr. M», «Zelt gross», «Beamer». Fixe Felder: Name, Kategorie (Freitext mit Vorschlägen aus den bisherigen Werten), Führung, Anzahl, Lagerort, Zustand, Verantwortlich, Stellvertretung, Ausleihbar, Miete Mitglied, Miete Extern, Kaution, Foto, Notiz, Aktiv.
- Führung «Menge» oder «Exemplare»: Trikots zählt man (25 Stück). Zelte werden einzeln geführt: jedes Exemplar hat eine Nummer, optional Seriennummer, eigenen Zustand, eigenen Lagerort und Notiz. «Nummeriert anlegen» erzeugt n Exemplare ab der nächsten freien Zahl. Bei Exemplar-Führung zeigt die Spalte «Anzahl» die aktiven Exemplare.
- Zustand: gut, abgenutzt, defekt, in Reparatur. Defekt und in Reparatur werden in der Ausleihe (I3) nicht angeboten.
- Lagerorte: unter Aktionen › Lagerorte. Gibt es höchstens einen, bleibt die Spalte ausgeblendet und kein Ablauf fragt danach. Löschen eines Lagerorts lässt das Material ohne Lagerort zurück.
- Verantwortlich und Stellvertretung je Position, über die Personen-Suche. Aktionen › Verantwortliche setzen weist mehreren Positionen auf einmal Verantwortliche, Stellvertretung oder Lagerort zu. Hat die Person kein Portal-Login, kommt eine Warnung: Anfragen zur Ausleihe (I3) kämen sonst nicht an.
- Eigene Felder wie bei Personen: letzte Reparatur, Kommentar, Prüfdatum, Dropdowns. Sie erscheinen als Spalten, im Editor, im Filter und im Export.
- Foto aus dem Datei-Browser; Belege und Anleitungen gehören ebenfalls dorthin.
- Export unter Aktionen › Export wie überall: Excel oder CSV, sichtbare oder alle Spalten, aktiver Filter oder alles. Siehe Listen-Export.
- Dashboard-Hinweis «Noch kein Material erfasst», solange die Tabelle leer ist.
- Haken «Buchhaltung» je Position: bei Menge-Führung am Material (Spalte in der Tabelle oder im Editor), bei Exemplaren je Exemplar im Exemplar-Formular. Dort stehen Anlagekonto (Standard 1550 Sportgeräte und Vereinsmaterial), Anschaffungspreis und -datum, Restwert, Versicherungswert und für Altbestand «Buchwert per Stichtag». Der Buchwert wird immer gerechnet, nie getippt.
- Buchhaltung › Anlagen: je Geschäftsjahr eine Tabelle mit Buchwert Anfang, Abschreibung, Buchwert Ende, Aufwand im Jahr (Reparaturen, siehe unten) und Status. Mehrfachauswahl, dann eine Operation: Abschreibung CHF vom Vorjahr übernehmen, Prozent vom Vorjahr übernehmen, alle mit x Prozent (vom Anschaffungswert oder vom Buchwert), alle mit CHF x, erfasste löschen. Rundung auf fünf Rappen oder ganze Franken; nie unter den Restwert.
- Erfasst → gebucht: «Abschreibungen buchen» erzeugt eine Sammelbuchung per Jahresende, Soll 6800 Abschreibungen, Haben je Anlage auf ihr Anlagekonto. Ändern geht danach nur über «Buchung zurücknehmen» (Storno), dann neu buchen. Der Jahresabschluss warnt, wenn erfasste Abschreibungen noch nicht gebucht sind.
- Ausbuchen (Verkauf, Entsorgung, Verlust): bucht den Restbuchwert auf 6800 und schliesst die Anlage. Ein Verkaufserlös ist eine normale Buchung.
- Aufwand je Material: Beim Buchen (Experten-Zeilen, Split-Zeilen, einfache Buchung) lässt sich eine Zeile einem Material zuordnen, wie einer Kostenstelle. Die Anlagen-Tabelle summiert so Reparaturen und Unterhalt je Material und Jahr.
- Anlagespiegel im Export-Register der Buchhaltung, Excel oder CSV.
- Einstellungen je Material (Editor, Block «Ausleihbar»): Übergabe-Art (Abholung nach Absprache, Selbstbedienung, Zustellung) mit Hinweis wie Öffnungszeiten oder Schlüssel, Dauer frei mit Mindest- und Höchsttagen oder feste Dauer. Verantwortliche Person und Stellvertretung entscheiden; ohne beide die Admins.
- Portal «Material ausleihen» (Modul auf der Startseite, für alle mit Portal-Login): Zeitraum wählen, Angebot mit Verfügbarkeit und belegten Zeiträumen sehen, Anfrage mit Notiz senden. Angefragte, freigegebene und ausgeliehene Vorgänge gelten als belegt; defektes Material oder in Reparatur wird nicht angeboten. «Meine Ausleihen» zeigt Status, Entscheid-Info und Übergabe-Hinweis; bis zur Übergabe kann storniert werden.
- Ablauf: Anfrage → Aufgabe in der Portal-Inbox der verantwortlichen Person (Stellvertretung sieht sie ebenfalls, wird nach drei Tagen ohne Entscheid gemailt) → Freigabe mit Freitext «Info zur Übergabe» oder Ablehnung mit Grund → Meldung und Mail an das Mitglied → Übergabe bestätigen → Rückgabe bestätigen, optional mit neuem Zustand und Notiz. Bei Exemplaren wird bei der Freigabe das Exemplar zugewiesen, automatisch das erste freie oder gewählt.
- Portal «Ausleihen verwalten» für Verantwortliche: Anfragen, Übergaben, Rückgaben, überfällige Vorgänge, Erledigte, und «Ausleihe direkt erfassen» für Personen ohne Login.
- Clu-Core: Spalten Ausgeliehen und Anfragen, Aktionen › Ausleihen mit allen Aktionen für jede Clu-Core-Rolle.
- Erinnerungen (täglicher Lauf): zwei Tage vor der Rückgabe, bei Überfälligkeit an Person und Verantwortliche, Eskalation hängender Anfragen.
- Preise am Material: Miete Mitglied, Miete Extern, gültig pro Tag oder pauschal je Ausleihe, Kaution. Wer mit einer nicht ausgetretenen Mitgliedschaft verknüpft ist, zahlt den Mitgliederpreis, alle anderen den Externenpreis. Ohne Preis bleibt es eine gratis Ausleihe, der Ablauf ist derselbe.
- Im Portal sieht die Person den Preistext und ihren eigenen Preis für den gewählten Zeitraum; Anfrage- und Freigabe-Nachrichten nennen Miete und Kaution.
- Zahlung: Bei der Übergabe kann der Wart «bezahlt bei Abholung» setzen (bar, Twint-Bild). Sonst entsteht bei der Rückgabe ein Rechnungsentwurf in der Faktura über Miete und allfällige Nachbelastung (Schaden, Verspätung mit Grund); der Kassier versendet ihn. Bar bezahlte Miete wird nicht verrechnet, eine Nachbelastung schon. Fehlt Adresse oder Rechnungsabsender, bleibt die Zahlung «offen» und der Wart sieht den Hinweis.
- Externe: «Ausleihe direkt erfassen» mit Neue Person anlegen (Name, E-Mail, Telefon, Adresse). Die Person hat keinen Login und erhält Mails mit einem persönlichen Link, der Status, Zeitraum, Übergabe-Info, Miete und Rechnung zeigt.
- Online-Zahlung folgt mit dem Bezahl-Addon; bis dahin gilt bezahlt bei Abholung oder Rechnung.
- Material und Exemplar getrennt: Teure Einzelstücke brauchen Nummer, Zustand und später Buchwert je Stück; Massenware braucht nur eine Zahl. Ein Modell für beides wäre entweder zu grob oder zu mühsam.
- Lagerort als eigene Liste statt Freitext: damit Filter, Mehrfach-Zuweisung und später Materialwarte je Ort funktionieren. Und bewusst optional, weil viele Vereine genau einen Keller haben.
- Verantwortliche je Position, nicht je Lagerort: Trikots und Zelte betreuen oft verschiedene Leute. Die Mehrfach-Zuweisung nimmt der Pflege den Schmerz.
- Eigene Felder über das bestehende Spalten-System: keine zweite Feldverwaltung. Ein neuer Objekttyp «material» genügt, Filter, Export und Feld-Manager kommen gratis.
- Begriff Material statt Artikel: «Artikel» ist in CluHu der Verkaufs- und Rechnungsartikel der Faktura. In der Vermietung (I4) wird eine Material-Miete auf einen Faktura-Artikel verweisen, das sind zwei Dinge.
- Warnungen statt Sperren bei fehlendem Login oder fehlender Verantwortlicher: Erfassen soll nie blockiert sein, die Ausleihe prüft es später beim Freischalten.
- Anfrage statt Sofortbuchung: Vereinsmaterial hat Vorrang für Vereinszwecke, und die Übergabe braucht ohnehin eine Absprache. Die Freigabe ist der Moment, in dem der Wart Zeit und Ort mitgibt.
- Angefragt blockiert bereits: Sonst würden zwei Anfragen für dasselbe Zelt beide freigegeben. Der Wart sieht die Reihenfolge und lehnt die zweite ab.
- Ein Vorgang je Exemplar: Wer drei Zelte braucht, stellt drei Anfragen. Das hält Zuweisung, Rückgabe und Zustand je Exemplar sauber.
- Entscheid nur eingeloggt: Wie bei den Spesen, kein Magic-Link, weil eine weitergeleitete Mail keine Freigabe sein darf.
- Rechnung bei der Rückgabe, nicht bei der Freigabe: Erst dann sind Dauer und Schäden bekannt; eine Rechnung vorab müsste korrigiert werden.
- Rechnung als Entwurf: Der Kassier behält die Kontrolle über Versand und Zustellweg; die Faktura kennt Mahnwesen und Zahlungsabgleich bereits.
- Externe als Person ohne Mitgliedschaft: Eine Rechnung braucht eine Adresse, und die Person soll beim nächsten Mal wiedergefunden werden. Der persönliche Link ersetzt das Login.
¶ Warum nicht anders
- Keine Mengen-Führung UND Exemplare am selben Material: Umstellen ist jederzeit möglich (Führung ändern, Exemplare anlegen). Beides gleichzeitig wäre doppelt gezählt.
- Keine Abschreibungs-Methode mit Nutzungsdauer: Der Kassier entscheidet jedes Jahr selbst, die vier Operationen machen es schnell. Eine Automatik mit Nutzungsdauer kann später dazukommen, sie würde dieselben Datensätze befüllen.
- Buchwert nicht als Feld: Getippte Buchwerte laufen von der Buchhaltung weg. Gespeichert sind nur Anschaffung, Stichtag-Buchwert und die Abschreibungen je Jahr.
- Kein Barcode-Scan in I1: die Nummer ist da; Etiketten und Scan folgen mit der Ausleihe, wenn sie gebraucht werden.
- App
apps/inventar: Modelle StorageLocation, Material, MaterialUnit; api.py (Liste, CRUD, Exemplare, Lagerorte, Kategorien, bulk-assign), export_api.py, views.py; Seite templates/inventar/material_list.html.
- Routen:
clucore/material/, api/material/…, api/material/export.<fmt>.
- Eigene Felder:
ObjectType material (Migration 0002), target_type="material" im Feld-Manager, Zellwerte in CustomColumnCellValue.
- Sidebar:
ADDON_MENU_ITEMS['inventar'] → Menüpunkt material; Addon-Gate @require_addon('inventar').
- Anlagen:
apps/inventar/accounting.py (Rechenlogik), accounting_api.py (api/material/assets/…), Modelle InventoryAsset, Depreciation; JournalLine.material; Register anlagen in templates/buchhaltung/buchhaltung.html; Export clucore/buchhaltung/export/anlagen.<fmt>.
- Ausleihe:
apps/inventar/loans.py (Verfügbarkeit, Vorgänge, Aufgaben, Meldungen), portal_views.py (portal/material/, portal/material/verwalten/, portal/api/material/…), Modell Loan, Aufgabentyp material_anfrage in apps/portal/services.decide_task, Cron run_material_reminders (05:35).
- Vermietung:
loans.is_member/rent_for/open_amount/create_rent_invoice/_inform, portal_views.create_external_person, öffentliche Seite ausleihe/<token>/ (templates/inventar/loan_public.html).
- Tests: Suiten I1 bis I4 im Session-Scratchpad.