Kunden und Projekte in der Verwaltung anlegen, inklusive Testzugang
Wunsch 22.08.2026: "ich will einen provisorischen zugang fuer mich". Der richtige Weg dahin war ohnehin ueberfaellig -- Kundenzugaenge entstehen ausschliesslich hier, es gibt bewusst keine Selbstregistrierung. Neu: * Kundenzugang anlegen (Name, E-Mail, Firma, Sprache, sofort freischalten ja/nein) mit Einladungslink * "Testzugang fuer mich" -- ein Klick, legt einen als Test erkennbaren Zugang mit Datumsstempel an. Bewusst NICHT die echte Geschaeftsadresse: die E-Mail ist gleichzeitig der Anmeldename und laesst sich aus gutem Grund nicht mehr aendern, ein Test wuerde also spaeter mit einem echten Kundenkonto kollidieren. * Zugaenge auflisten, freischalten, sperren, neuen Einladungslink erzeugen * Projekte anlegen und aendern, Aenderungswuensche beziffern, Nachrichten Entscheidungen: * Der Einladungslink geht EINMAL im Klartext raus, direkt beim Anlegen. In der Datenbank liegt nur sein Hash. Wer ihn verliert, bekommt einen neuen -- das ist sicherer, als ihn dauerhaft abrufbar zu halten. Die Oberflaeche sagt das auch klar dazu, sonst klickt man ihn weg und wundert sich. * Ein neuer Link entwertet alle offenen alten. Sonst sammeln sich mehrere gueltige Generalschluessel fuer dasselbe Konto an. * "Sofort freischalten" ist eine bewusste Handlung. Ohne Haekchen wird der Zugang angelegt, kommt aber noch nicht hinein -- Masterplan S.12 verlangt, dass Projektkauf oder Betreuung VOR der Freischaltung geprueft werden. * Sperren beendet laufende Sitzungen sofort, nicht erst nach Ablauf. * Die 30 % Anzahlung werden aus dem Preis BERECHNET, nicht eingetippt. Ein Tippfehler in der Anzahlung faellt sonst erst beim Geldeingang auf. * Preise kommen als Euro herein und werden sofort in Cent umgerechnet (Math.round, damit 49.99 nicht zu 4998 wird). Ab da nie wieder Komma. * Vier klar unterscheidbare Zustaende in der Liste. Wichtig vor allem "Einladung offen": freigeschaltet, aber noch kein Passwort gesetzt -- der Kunde war also noch nie drin. * Kopieren faellt auf Markieren zurueck, wenn die Zwischenablage blockiert ist. Eine Fehlermeldung waere dort nutzlos. Co-Authored-By: Claude Opus 5 <[email protected]>
This commit is contained in:
@@ -95,6 +95,12 @@ import {
|
||||
portalUebersicht, portalProjekt, portalAenderungEinreichen,
|
||||
portalAenderungEntscheiden, portalNachricht, portalProfilSpeichern,
|
||||
} from "./routes/webdesign-portal.js";
|
||||
/* Kunden und Projekte verwalten (Masterplan S.13). Hier entstehen
|
||||
Kundenzugaenge -- es gibt bewusst keine Selbstregistrierung. */
|
||||
import {
|
||||
kundeAnlegen, kundeEinladungNeu, kundenListe, kundeSchalten,
|
||||
projektAnlegen, projektAendern, aenderungBeziffern, projektNachricht,
|
||||
} from "./routes/webdesign-kunden.js";
|
||||
|
||||
initDb();
|
||||
|
||||
@@ -250,6 +256,16 @@ app.post("/webdesign/portal/aenderung/:id/entscheiden", wrap(portalAenderungEnts
|
||||
app.post("/webdesign/portal/nachricht", wrap(portalNachricht));
|
||||
app.post("/webdesign/portal/profil", wrap(portalProfilSpeichern));
|
||||
|
||||
/* ---------- Kunden und Projekte (Verwaltung) ---------- */
|
||||
app.get("/webdesign/admin/kunden", wrap(kundenListe));
|
||||
app.post("/webdesign/admin/kunden", wrap(kundeAnlegen));
|
||||
app.post("/webdesign/admin/kunden/:id/einladung", wrap(kundeEinladungNeu));
|
||||
app.post("/webdesign/admin/kunden/:id/zugang", wrap(kundeSchalten));
|
||||
app.post("/webdesign/admin/projekte", wrap(projektAnlegen));
|
||||
app.post("/webdesign/admin/projekte/:id", wrap(projektAendern));
|
||||
app.post("/webdesign/admin/aenderungen/:id/beziffern", wrap(aenderungBeziffern));
|
||||
app.post("/webdesign/admin/projekt-nachricht", wrap(projektNachricht));
|
||||
|
||||
app.post("/supporter/register", wrap(registerSupporter));
|
||||
app.post("/supporter/verify-email", wrap(verifySupporterEmail));
|
||||
// Normaler Login seit 21.08.2026: E-Mail + selbst gewählter Zugangscode.
|
||||
|
||||
Reference in New Issue
Block a user