- Python 34.5%
- JavaScript 34.2%
- HTML 16.2%
- CSS 14.9%
|
All checks were successful
Build & Push Docker Image / build (push) Successful in 14s
|
||
|---|---|---|
| .forgejo/workflows | ||
| lagerapp | ||
| .dockerignore | ||
| .gitignore | ||
| bricklink_order_sync.py | ||
| bricklink_sync.py | ||
| Dockerfile | ||
| fix_durchschnittspreis_trigger.sql | ||
| README.md | ||
| run_full_sync.sh | ||
| start_lagerapp.bat | ||
Lagerbestand-Suche (lokales Netzwerk)
papa Kleine Web-App für die Kistensuche im Lager. Läuft auf deinem PC, das iPad greift übers WLAN im Browser drauf zu — keine Installation am iPad nötig, kein Internet nötig.
1. Einmalig installieren
Im Ordner lagerapp (dieses Verzeichnis):
pip install -r requirements.txt
2. Starten
python app.py
Falls deine DB-Zugangsdaten von den Defaults abweichen (wie schon bei
bricklink_sync.py), vorher als Umgebungsvariablen setzen:
set DB_HOST=localhost
set DB_PORT=5432
set DB_NAME=postgres
set DB_USER=postgres
set DB_PASSWORD=dein-passwort
python app.py
Die Konsole zeigt dann:
Lagerbestand-Suche läuft auf Port 5000
Lass das Fenster offen, solange du die App nutzen willst.
3. Lokale IP deines PCs rausfinden
In der Windows-Kommandozeile (cmd):
ipconfig
→ Zeile "IPv4-Adresse" unter deinem WLAN/LAN-Adapter, z. B. 192.168.1.42.
4. Auf dem iPad öffnen
iPad muss im gleichen WLAN sein wie der PC. Dann im Safari-Browser:
http://192.168.1.42:5000
(mit deiner eigenen IP aus Schritt 3). Am besten als Homescreen-Icon speichern (Teilen-Button → "Zum Home-Bildschirm"), dann öffnet's sich wie eine App.
5. Falls die Verbindung nicht klappt
Meistens blockiert die Windows-Firewall eingehende Verbindungen auf Port 5000. Einmalig freigeben:
netsh advfirewall firewall add rule name="Lagerapp" dir=in action=allow protocol=TCP localport=5000
(als Administrator ausführen)
Was die Suche macht
- Eingabe wird gegen
idUNDnameper Teiltreffer (ILIKE) verglichen → "2 x 4" findet z. B. alle Steine, in deren Namen "2 x 4" vorkommt. - Exakte ID-Treffer werden immer zuerst gelistet.
- Jede Zeile aus der DB (also jede Farbe/jeder Zustand einzeln) wird als eigene Karte angezeigt, inkl. Lagerplatz, Menge, Farbe, Zustand.
- Ergebnisse ohne
lagerplatz-Eintrag zeigen "kein Platz" statt eines Kisten-Labels. - Live-Suche mit kurzer Verzögerung (kein Enter/Button nötig).
- Begrenzt auf 200 Treffer pro Suche (sollte für jede sinnvolle Suche reichen; bei sehr allgemeinen Suchbegriffen ggf. genauer eingeben).
Kiste öffnen & direkt buchen (neu)
Auf der Startseite gibt's jetzt zwei große Buttons:
- Kiste suchen — die bisherige Suche nach ID/Name.
- Kiste öffnen — Lagerplatz eingeben (z. B.
A2C), zeigt alle Artikel, die laut Datenbank dort liegen sollten (exakter Treffer, Groß-/Kleinschreibung egal).
Tippt man auf einen Artikel (egal ob aus der Suche oder der Kisten- Ansicht), öffnet sich unten ein Formular mit zwei großen Buttons:
- − Ausbuchen — nur die Anzahl nötig. Der bestehende DB-Trigger
hält den Stückpreis (
durchschnittspreis) dabei automatisch korrekt konstant,preis(Gesamtwert) wird proportional mit runtergesetzt. - + Einbuchen — Anzahl und Einkaufspreis pro Stück nötig. Ohne
den Preis würde sich der Stückpreis beim nächsten Trigger-Lauf
rechnerisch falsch verwässern (gleicher Gesamtwert durch mehr Stück
geteilt). Die App berechnet daraus den neuen Gesamtwert, der Trigger
übernimmt danach automatisch den korrekt gewichteten Stückpreis.
verkaufspreiswird für den gebuchten Artikel im selben Zug automatisch neu berechnet (Minifigure ×3, Part ×2,5), damit er nicht veraltet stehen bleibt.
Wichtig für den BrickLink-Sync: Diese manuellen Buchungen fassen
bewusst bl_last_synced_qty nicht an — der nächste Durchlauf von
bricklink_sync.py (automatisch per Task Scheduler oder manuell über
run_full_sync.bat) erkennt die Änderung dadurch ganz normal als
"neu" und lädt sie zu BrickLink hoch.
Nächste Schritte (später)
Noch offen: nach Lagerplatz filtern/sortieren (teilweise schon durch "Kiste öffnen" abgedeckt), Barcode-/QR-Scan zur Suche, Zugriffsschutz falls die App mal übers Heimnetz hinauswächst.