christian cb4aee7722 feat(vorgang): Bulk-Erfassung mehrerer Positionen pro Vorgang
Backend:
- POST /api/lieferungen/bulk und /api/ruecknahmen/bulk
- Multipart: kunde_id, positionen (JSON-Array), foto (eins fuer alle)
- Transaktion: entweder alle Positionen oder keine
- Validierung: artikel_id + anzahl >= 1, Kunde + alle Artikel im Tenant
- Antwortet mit { count, items, foto_url }

Frontend (VorgangForm):
- Mehrere Positions-Zeilen mit + Hinzufuegen / x Entfernen
- Pro Zeile: Artikel-Dropdown + Anzahl-Input
- Ein einziger Foto-Upload fuer den gesamten Vorgang
- Erfolgs-/Fehler-Meldung als gefaerbtes Banner
- Reset nach erfolgreicher Erfassung

api/client.js: createLieferungBulk / createRuecknahmeBulk (FormData mit JSON-positionen)
2026-06-03 12:57:41 +00:00

Pfandsystem Demo (Whitelabel)

Whitelabel-Demo des Pfandsystems mit Multi-Tenant-Verwaltung für 30-Tage Demo-Accounts. Basis: borbaecker-pfand.dockly.de — neu aufgesetzt mit Tailwind-UI, ohne Branding.

  • Domain: pfandsystem.dockly.de
  • Server: 51.15.249.253 (Scaleway, borbaecker-pfand.dockly.de Instanz)
  • Pfad auf Server: /root/pfandsystem-demo
  • Gitea: ssh://git@49.13.154.75:2244/christian/pfandsystem-demo.git

Architektur

  • Frontend: React 18 + Vite + Tailwind, PWA-fähig
  • Backend: Node.js (Express) + MySQL 8 + JWT
  • Reverse-Proxy: Traefik v3 (geteilt mit borbaecker + pfandsystem-dev)
  • Container: pfandsystem-demo-{mysql,phpmyadmin,backend,frontend}
  • Ports (alle 127.0.0.1): MySQL 3308, phpMyAdmin 8083, Backend 3003

Multi-Tenant-Modell

Eine MySQL-DB, jede Datentabelle hat eine tenant_id. Mitarbeiter sind einem Tenant zugeordnet — Ausnahme: rolle='superadmin' mit tenant_id=NULL, darf neue Demo-Tenants anlegen.

Demo-Tenants haben typ='demo' + demo_expires_at (default +30 Tage). Nach Ablauf wird status='abgelaufen' gesetzt (Cron).

Erweiterungen (Iteration 1)

  1. Kundenbilder & Anlieferungshinweisekunden_bilder-Tabelle + kunden.anlieferungshinweis
  2. Seriennummern-Verwaltunggeraete-Tabelle (Typ, SN, Status, Kunde-Zuordnung)
  3. Tourenplanung Stufe 1 — Navi-Button (Maps-Link), kunden.lieferzeit_bis

BBN-Schnittstelle vorerst nicht enthalten (klärungsbedürftig).

Deployment

ssh -i ~/.ssh/id_rsa root@51.15.249.253
cd /root/pfandsystem-demo
cp .env.example .env  # Werte setzen!
docker-compose up -d --build
# Traefik in das Netzwerk joinen (einmalig):
docker network connect pfandsystem-demo_pfandsystem-demo-net pfandsystem-traefik
Description
Pfandsystem Whitelabel Demo (Multi-Tenant, Tailwind UI)
Readme 440 KiB
Languages
JavaScript 95.7%
Shell 2.2%
CSS 1.2%
Dockerfile 0.5%
HTML 0.4%