feat: Add password reset functionality with request and reset forms

feat: Implement price list import feature with preview and apply options

feat: Create price rules management page with CRUD operations

feat: Develop quotes management page with itemized quotes and status tracking

feat: Introduce organization registration page for new users

feat: Build suppliers management page with detailed supplier information

feat: Create users management page for inviting and managing roles

chore: Add TypeScript configuration for improved type checking

chore: Set up Vite configuration for development server and API proxy

chore: Add Vite environment type definitions for better TypeScript support
This commit is contained in:
Torsten Schulz (local)
2026-06-02 15:28:38 +02:00
commit 0e539710c0
95 changed files with 31882 additions and 0 deletions

181
IMPLEMENTIERUNGSPLAN.md Normal file
View File

@@ -0,0 +1,181 @@
# Implementierungsplan
Dieser Plan beschreibt die konkrete technische Umsetzung. Die fachlichen
Grundentscheidungen stehen in `PLANUNG.md`; Installations- und Betriebsdetails
stehen in `INSTALL.md`.
## Leitlinien
- Backend zuerst dort stabilisieren, wo mehrere Clients dieselben Funktionen
nutzen.
- Gemeinsame Datenverträge und Rechte werden vor UI-Komfortfunktionen umgesetzt.
- Webclient und Desktopclient sollen dieselben Backend-Endpunkte verwenden.
- Alles außer dem Dashboard wird in Fenstern bearbeitet.
- Neue fachliche Funktionen bekommen eigene atomare Rechte.
- Bestehende Firmenschemas müssen bei Backend-Start idempotent nachgezogen
werden.
- Benutzer sichtbare Texte verwenden echte Umlaute.
## Phase 1: Fundament Stabilisieren
Ziel: Login, Firma, Benutzerrechte, Fensterkonzept und Live-Aktualisierung sind
verlässlich testbar.
- [x] PostgreSQL-Grundschema und Firmenschema-Migrationen anlegen
- [x] Dev-Bootstrap für lokale Benutzer/Firma ohne E-Mail-Versand
- [x] Webclient auf Vue umstellen
- [x] Desktopclient-Konfiguration für Backend-URL
- [x] Logo in Webclient und Desktopclient verwenden
- [x] Benutzerrechte-Fenster im Webclient
- [x] Benutzerrechte-Fenster im Desktopclient
- [x] Rollenänderungen über Backend-Endpunkt speichern
- [x] Atomare Rechte initial anlegen
- [x] Bestehende aktive Firmenschemas beim Backend-Start nachziehen
- [x] Echte Session-/Auth-Tokens einführen statt temporärer User-ID im Header
- [x] Aktuelle Firma explizit auswählen und in Requests mitsenden
- [x] Backend-Rechteprüfung für jeden geschützten Endpunkt zentralisieren
- [x] Rollen auf Rechte abbilden und nicht nur Rollen anzeigen
- [x] Live-Events für Benutzer-/Rollenänderungen an alle Clients senden
- [x] Automatisierten API-Test für Rollenänderung ergänzen
- [x] Webclient-Build/Typprüfung für Benutzerrechte-Fenster ergänzen
- [x] Desktopclient-Build/Typprüfung für Benutzerrechte-Fenster ergänzen
## Phase 2: Fenster- und Clientmodell
Ziel: Die Anwendung verhält sich konsequent fensterbasiert und aktualisiert
offene Fenster bei Änderungen.
- [x] Webclient öffnet angemeldete Arbeitsbereiche als Fenster
- [x] Desktopclient öffnet Benutzerrechte als Fenster
- [x] Gemeinsames Fensterkonzept dokumentieren
- [x] Webclient-Fenster verschiebbar machen
- [x] Webclient-Fenstergröße änderbar machen
- [x] Webclient-Fensterstatus pro Benutzer lokal speichern
- [x] Desktopclient-Fenster für Firmendaten ergänzen
- [x] Desktopclient-Fenster für Freischaltung ergänzen
- [x] Einheitliche Fensteraktionen definieren: Öffnen, Schließen, Fokussieren,
Aktualisieren
- [x] Live-Update-Store im Webclient für Stammdaten einführen
- [x] Live-Update-Store im Desktopclient für Stammdaten einführen
- [x] Konfliktverhalten bei paralleler Bearbeitung definieren
## Phase 3: Stammdaten
Ziel: Kunden, Lieferanten, Artikel und Aktivitäten sind als erste fachliche
Objekte vollständig nutzbar.
- [x] Datenmodell Kunden finalisieren
- [x] Migration Kunden erstellen
- [x] Backend-CRUD Kunden implementieren
- [x] Web-Fenster Kundenliste und Kundendetail implementieren
- [x] Desktop-Fenster Kundenliste und Kundendetail implementieren
- [x] Kundenrabatt und Skonto beim Kunden ablegen
- [x] Datenmodell Lieferanten finalisieren
- [x] Migration Lieferanten erstellen
- [x] Backend-CRUD Lieferanten implementieren
- [x] Lieferanten-Skonto ablegen
- [x] Datenmodell Artikel finalisieren
- [x] Migration Artikel erstellen
- [x] Backend-CRUD Artikel implementieren
- [x] Artikelpreise historisieren
- [x] Datenmodell Aktivitäten finalisieren
- [x] Migration Aktivitäten erstellen
- [x] Backend-CRUD Aktivitäten implementieren
- [x] Web-Fenster für Lieferanten, Artikel und Aktivitäten implementieren
- [x] Desktop-Fenster für Lieferanten, Artikel und Aktivitäten implementieren
- [x] Live-Events für Stammdatenänderungen senden
## Phase 4: Angebote und Rechnungen
Ziel: Angebote und Rechnungen bilden den ersten produktiven Arbeitsablauf.
- [x] Nummernkreise für Angebote und Rechnungen produktionsreif machen
- [x] Nummernkreise für Kunden, Lieferanten, Artikel und Aktivitäten anbinden
- [x] Nummernkreis-Verwaltung im Webclient und Desktopclient bereitstellen
- [x] Datenmodell Angebote finalisieren
- [x] Backend-CRUD Angebote implementieren
- [x] Angebotspositionen nur aus vorhandenen Artikeln erlauben
- [x] Positionspreis pro Angebot individuell überschreibbar machen
- [x] Web-Fenster Angebot erstellen
- [x] Desktop-Fenster Angebot erstellen
- [x] Angebot zu Ausgangsrechnung umwandeln
- [x] Datenmodell Ausgangsrechnungen finalisieren
- [x] Rechnungspositionen nur aus vorhandenen Artikeln erlauben
- [x] Positionspreis pro Rechnung individuell überschreibbar machen
- [x] Kundenrabatt und Skonto automatisch vorschlagen
- [x] Rechnung revisionssicher abschließen
- [x] Storno-/Korrekturrechnung vorbereiten
- [x] Datenmodell Eingangsrechnungen finalisieren
- [x] Eingangsrechnungen Lieferanten zuordnen
- [x] Lieferanten-Skonto berücksichtigen
- [x] Web-Fenster Ausgangs- und Eingangsrechnungen erstellen
- [x] Desktop-Fenster Ausgangs- und Eingangsrechnungen erstellen
## Phase 5: Import und Preisaktualisierung
Ziel: Artikellisten und externe APIs aktualisieren Preise nachvollziehbar.
- [x] Importformat CSV definieren
- [x] Importformat Excel prüfen und als spätere Erweiterung zurückstellen
- [x] Importvorschau im Backend vorbereiten
- [x] Preislistenimport mit Mapping speichern
- [x] Preisänderungen historisieren
- [x] Preisregeln je Lieferant/Quelle definieren
- [x] API-Connector-Grundstruktur anlegen
- [x] Externe Preis-API-Konfiguration verschlüsselt speichern
- [x] Manueller Preisabgleich
- [x] Geplanter Preisabgleich vorbereiten: Intervall und letzter Abgleich werden gespeichert
- [x] Live-Update an offene Angebots-/Rechnungsfenster senden
- [x] Native-Client-Fenster für Preislisten, Preis-APIs und Preisregeln anbinden
## Phase 6: Kommunikation und Dokumente
Ziel: Kommunikation, Dokumente und Historie werden je Firma verwaltet.
- [x] Datenmodell Kommunikation finalisieren
- [x] Kommunikation Kunden/Lieferanten/Vorgängen/Rechnungen zuordnen
- [x] Dokumentenspeicher-Layout festlegen
- [x] Dokumenten-Metadaten verschlüsselt speichern
- [x] Upload-Endpunkt implementieren
- [x] Download-Endpunkt implementieren
- [x] Rechteprüfung für Dokumentzugriff
- [x] Audit-Log für Dokumentzugriffe
- [x] Web-Fenster für Kommunikation und Dokumente anbinden
## Phase 7: Sicherheit und Betrieb
Ziel: Öffentlicher Server und lokale Installation sind trennbar und sicher
betreibbar.
- [x] Produktives Authentifizierungskonzept implementieren
- [x] Passwort-Reset implementieren
- [x] Einladung mit sicherem Token statt Passwortanzeige implementieren
- [x] E-Mail-Outbox und produktiven Datei-Transport anbinden
- [x] Dev-Ausgabe für E-Mail-Inhalte klar vom Produktivbetrieb trennen
- [x] Mandantenschema-Erzeugung transaktional absichern
- [x] Verschlüsselungsschlüssel-Konzept für Betrieb dokumentieren
- [x] Schlüsselrotation planen
- [x] Backup/Restore je Firma dokumentieren
- [x] Docker-Setup für Backend erweitern
- [x] Reverse-Proxy/TLS-Beispiel bereitstellen
- [x] Installationsprogramm für lokale Einzelkunden-Version planen
## Phase 8: Qualitätssicherung
Ziel: Kernabläufe sind reproduzierbar testbar.
- [x] API-Onboarding-Test erweitern: Registrierung, Freischaltung, Login,
Rechteänderung
- [x] Kommunikationstest um Live-Events für fachliche Daten erweitern
- [x] Migrationstest für bestehende Firmenschemas
- [x] Rechteprüfung negativ testen
- [x] Webclient-Build und Typprüfung in Standardcheck aufnehmen
- [x] Desktopclient-Headless-Tests erweitern
- [x] Datenbank-Testsetup dokumentieren
- [x] Testdaten-Seed für lokale Entwicklung anlegen
## Aktueller Nächster Schritt
1. Optimierungen und Fehlerbehebungen priorisieren.
2. Benutzereinstellungen für die Navigation sind umgesetzt: scrollbar,
oder einklappbare Gruppen je Benutzer.