feat(portal): prepare heat pump licensing and header navigation
Tests / test (push) Failing after 49s

This commit is contained in:
dh
2026-10-06 14:35:17 +00:00
parent faa905ab09
commit 5687596799
14 changed files with 9125 additions and 0 deletions
@@ -0,0 +1,86 @@
# Portal: Waermepumpe und Header
Stand: 6. Oktober 2026. Entwickelt und getestet, noch nicht live veroeffentlicht.
## Aenderung / Pull-Request-Text
Der bestehende Katalogeintrag `heat_pump` wird im Lizenzkauf beruecksichtigt.
Die bestehenden Preise bleiben unveraendert: CHF 20.95 Lizenz und CHF 27.25
Generator / Ersteinrichtung, jeweils netto. Die Bereitstellung aktiviert nur die
Verfuegbarkeit des Produkts; sie kauft keine Lizenz und vergibt keine kostenlose
Berechtigung an eine Anlage.
Der Wizard hat einen eigenen Waermepumpenschritt mit SG Ready oder Sperre/Erhoehung,
zwei Kontakten, Betriebsrueckmeldung und Schutzzeiten. Gespeicherte Konfigurationen,
Lizenzvorschlag und generiertes Symcon-Paket verwenden das Modul
`{A31C9274-54F7-4BD2-9804-7AF23E86C4D1}`. Freie Bestandskontingente von
`consumer_single` werden wie im Manager angerechnet, ohne Doppelbelegung.
Technische Variablenkennungen duerfen zur Planung noch 0 sein. Das Bootstrap-Skript
bricht vor Objektveraenderungen ab, wenn die Waermepumpen-Zuordnung unvollstaendig
ist, das Modul fehlt oder die Rueckmeldung einen unpassenden Typ hat.
Dokumentation und Preise stehen als Textlinks rechts im Portalheader und nicht
mehr in der Seitennavigation. Oeffentliche Links auf der Anmeldeseite bleiben.
## Voraussetzungen und Konfliktschutz
- Ziel: `/home/agent/services/license` auf `enelix-services`.
- `portal.patch` zeigt ausschliesslich Aenderungen gegen den gelesenen Live-Stand.
- `manifest.json` enthaelt SHA-256 vor und nach jeder Quellaenderung.
- Die weiterentwickelte, nicht veroeffentlichte Wizard-Fassung auf `ubuntu` wird
nicht durch diesen Live-Patch ersetzt.
- Keine Aenderung an Symcon-Anlagen, Docker-Compose, Datenbankschema, Geheimnissen,
Prognosediensten oder fremden Git-Aenderungen. Daniel Haefliger hat Commit und
Push auf `develop` sowie den Portalneustart ausdruecklich freigegeben.
## Tests
- 32 Node-Tests: vorhandene Portalregressionen plus acht neue Waermepumpentests.
- Browserpruefung mit isolierten API-Fixtures: Header bei 1440, 768, 390 und
320 Pixeln; Wizard konfigurieren, speichern, Lizenzvorschlag und erneut oeffnen.
- Keine Browserfehler. Kein echter Kauf, keine Live-Lizenzvergabe und keine
Schaltbefehle an eine Waermepumpe.
- JavaScript-Syntax und Anwendbarkeit des Patches geprueft. PHP-Syntaxpruefung
und Symcon-Laufzeittest konnten nicht ausgefuehrt werden: keine native PHP-CLI
und kein Zugriff auf die Docker-Sockets in dieser Agent-Ausfuehrung.
- `tests/` enthaelt neue bzw. angepasste Tests. Im Testcheckout in dessen
vorhandenes `tests/` uebernehmen und `node --test tests/*.test.mjs` ausfuehren.
- Browserpruefung: `node tests/browser-smoke.mjs` mit installiertem Playwright und
Chromium; optional `BROWSER_PACKAGE` und `BROWSER_EXECUTABLE` fuer vorhandene
Testwerkzeuge setzen. API-Antworten stammen ausschliesslich aus Test-Fixtures.
## Bereitstellung
Der Portalneustart ist vom Auftraggeber freigegeben; dem Serverkonto `agent`
fehlt jedoch der technische Zugriff auf den Docker-Socket. Ein berechtigter
Administrator prueft dieses Paket und fuehrt auf dem Diensteserver aus:
```sh
python3 /PFAD/ZUM/PAKET/deploy.py
```
Das Skript verlangt Root, prueft alle Ausgangshashes und Container-Mounts und
bricht bei Abweichungen ohne Quellaenderung ab. Es sichert die betroffenen Dateien
und den Katalog, stoppt nur `enelix_license_portal`, schreibt die Quelldateien
unter Erhalt der Datei-Bind-Mounts und setzt ausschliesslich die Produktfreigabe
`items.heat_pump.available` auf `true`. Anschliessend startet es den Portalcontainer
und prueft Healthcheck, Wizardkatalog und ausgelieferte Oberflaeche. Es nimmt keine
Bestellung vor und laesst alle Produktpreise unveraendert.
Das Stoppen/Starten verursacht eine kurze Portalunterbrechung. Backoffice und
Anlagensteuerungen werden nicht neu gestartet. Vor Ausfuehrung parallele
Katalogbearbeitungen im Backoffice fuer das Wartungsfenster aussetzen.
## Ruecksetzen und Nachkontrolle
Bei Fehlern stellt das Skript die gesicherten Quellinhalte wieder her und startet
den Portalcontainer erneut. Ein nachtraeglich anderweitig veraenderter Katalog
wird dabei nicht blind ueberschrieben. Sicherungen liegen unter
`/home/agent/services/license/change-backups/heat-pump-header-<Zeitpunkt>`.
Nach erfolgreicher Bereitstellung angemeldet Headerlinks, neue Lizenzzeile,
Waermepumpenschritt, Speichern und Wiedereroeffnen kontrollieren. Zahlungen nur
mit einem ausdruecklich freigegebenen Sandbox-Test abschliessen. Das erzeugte
Symcon-Paket zuerst in einer isolierten IP-Symcon-8-Installation pruefen; das
Ausfuehren des Pakets kann Kontakte schalten und ist kein Bestandteil dieser
Portalbereitstellung.