diff --git a/AGENTS.md b/AGENTS.md index ca06732..881fb49 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -11664,3 +11664,61 @@ zweiten Neustart keine Meldung und kein Schreibvorgang. Weitere ausgemusterte Felder gehoeren in `AUSGEMUSTERTE_PROFILFELDER`, nicht in neuen Sondercode. + +## CU. Die Erstzulassung war in der App gar nicht speicherbar (2026.9.5.12) + +Gemeldet: *"Erstzulassung wird in den Einstellungen nicht richtig gespeichert +und in das Service Menü übernommen... Trägt man ein datum mit Punkt oder Strich +ein, wechselt zur Kontrolle ins Service Menü, so ist HU-Feld dort leer. Zurück +in den Einstellungen ist Erstzulassung leer"*. + +### Die Ursache: ein zweiter Entwurf, den die Speicherleiste nicht kannte + +`Einstellungen.tsx` fuehrt zwei Entwuerfe nebeneinander. `entwurf` haelt die +Einstellungen, `erstzulassung` einen eigenen fuer das Fahrzeugfeld - richtig +so, es gehoert nicht zu den Einstellungen. Nur haben zwei Stellen den zweiten +Entwurf vergessen: + + if (!entwurf && !zusatz) return // speichern() stieg sofort aus + {entwurf && (
... )} // Leiste fehlte + +Wer **nur** die Erstzulassung aenderte, bekam damit gar keinen +Speichern-Knopf zu sehen, und selbst ein Aufruf von `speichern()` haette in der +ersten Zeile abgebrochen. Der eingetippte Wert war schlicht nicht speicherbar +und beim Verlassen der Seite weg. Am laufenden System nachgewiesen: Feld nimmt +"15.06.2024" an, `speicherleisteSichtbar: false`, kein Speichern-Knopf im DOM. + +**Das Panel war nie betroffen** - dort schreibt der `data-einrichten`-Handler +bei jeder Aenderung sofort ins Profil. Wieder eine Abweichung, die kein +Quelltextvergleich zeigt, sondern nur das Bedienen beider Oberflaechen. + +Behoben: beide Bedingungen kennen jetzt den zweiten Entwurf, und "Verwerfen" +setzt ihn mit zurueck - sonst bliebe die Leiste danach stehen. + +### Der Platzhalter log + +Beide Felder schlugen `MM/JJJJ` vor, obwohl ein voller Tag gemeint ist und die +Ableitung der Hauptuntersuchung mit einem Tag genauer rechnet. Jetzt +`TT.MM.JJJJ`, in Panel und App. Die alte Monatsform bleibt lesbar - bereits +gespeicherte Werte wie "08/2026" duerfen nicht ungueltig werden, und +`genau: "monat"` traegt die Ungenauigkeit bis in die Anzeige (Abschnitt CR). + +### Bindestrich statt Punkt + +Der Eigentuemer hat "mit Punkt oder Strich" getippt. `01-03-2025` traf kein +Muster und ergab still nichts. Das Tagesmuster nimmt jetzt beide Trenner: + + /^(\d{1,2})[.\-](\d{1,2})[.\-](\d{4})$/ + +In beiden Codebasen wortgleich. Die Ablehnung unmoeglicher Daten bleibt +(`31-02-2025` ergibt weiterhin nichts, `new Date(2025,1,31)` waere der 3. Maerz), +und die ISO-Form wird nicht verwechselt: `2025-03-01` bleibt Jahr-Monat-Tag. +Vier neue Tests in `format.test.ts`. + +### Durchgehend geprueft + +Am laufenden System, ganze Kette: App-Einstellungen, Platzhalter `TT.MM.JJJJ`, +`15-06-2024` eingetragen, Speicherleiste erscheint, "Gespeichert.", in +`fahrzeugprofil.json` steht `15-06-2024` - und danach zeigen App-Service, +Panel-Service und Panel-Mein-Audi uebereinstimmend **15.06.2027** (plus 36 +Monate). Danach der urspruengliche Wert des Eigentuemers wiederhergestellt. diff --git a/companion-app/src/format.test.ts b/companion-app/src/format.test.ts index 23aa23b..7c05f47 100644 --- a/companion-app/src/format.test.ts +++ b/companion-app/src/format.test.ts @@ -178,3 +178,29 @@ describe("Datumsangaben aus dem Bestand", () => { expect(monatJahr("08/2026")).toBe("August 2026") }) }) + +/* Der Eigentümer hat die Erstzulassung am 05.09.2026 „mit Punkt oder Strich" + eingetragen und danach ein leeres HU-Feld vorgefunden. Die eigentliche + Ursache lag im Speicherweg (Einstellungen.tsx), aber eine still verworfene + Eingabe soll auch dann nicht entstehen, wenn jemand Bindestriche tippt. */ +describe("Datum mit Bindestrich statt Punkt", () => { + it("liest 15-06-2024 wie 15.06.2024", () => { + expect(datum("15-06-2024")).toBe(datum("15.06.2024")) + expect(datum("15-06-2024")).toBe("15.06.2024") + }) + + it("nimmt auch die einstellige Schreibweise", () => { + expect(datum("1-3-2025")).toBe("01.03.2025") + }) + + it("weist ein unmögliches Datum weiterhin ab, egal mit welchem Trenner", () => { + // new Date(2025, 1, 31) wäre der 3. März - das darf kein Datum ergeben. + expect(datum("31-02-2025")).toBe("–") + expect(datum("31.02.2025")).toBe("–") + }) + + it("verwechselt die ISO-Schreibweise nicht damit", () => { + // 2025-03-01 ist Jahr-Monat-Tag, nicht Tag-Monat-Jahr. + expect(datum("2025-03-01")).toBe("01.03.2025") + }) +}) diff --git a/companion-app/src/format.ts b/companion-app/src/format.ts index 5fa7ee4..2506f84 100644 --- a/companion-app/src/format.ts +++ b/companion-app/src/format.ts @@ -132,7 +132,10 @@ interface Zeitpunkt { zwar nach Norm statt nach Gutduenken. */ const ISO = /^\d{4}-\d{2}-\d{2}([T ]|$)/ /* "1.3.2025" wie "01.03.2025". */ -const DE_TAG = /^(\d{1,2})\.(\d{1,2})\.(\d{4})$/ +// Bindestrich ist mitgemeint: der Eigentuemer hat am 05.09.2026 "mit Punkt +// oder Strich" eingetragen. Eine still verworfene Eingabe ist der schlechtere +// Ausgang - der Platzhalter nennt trotzdem TT.MM.JJJJ als die gemeinte Form. +const DE_TAG = /^(\d{1,2})[.\-](\d{1,2})[.\-](\d{4})$/ /* "08/2026" und "08.2026" - Monat und Jahr, ohne Tag. */ const DE_MONAT = /^(\d{1,2})[./](\d{4})$/ /* "2026-08" - dieselbe Genauigkeit, in ISO-Schreibweise. */ diff --git a/companion-app/src/screens/Einstellungen.tsx b/companion-app/src/screens/Einstellungen.tsx index c50ab38..9f72fd2 100644 --- a/companion-app/src/screens/Einstellungen.tsx +++ b/companion-app/src/screens/Einstellungen.tsx @@ -236,8 +236,16 @@ export function Einstellungen({ eigenen Entwurf und uebergibt ihn erst beim Druck auf Speichern. Ohne den Umweg wuerde `entwurf` im selben Rendern noch den alten Wert tragen - setState wirkt erst beim naechsten Durchlauf. */ + /* `erstzulassung` fuehrt einen EIGENEN Entwurf, unabhaengig von + `entwurf` - es gehoert zum Fahrzeug, nicht zu den Einstellungen. Diese + Bedingung hat es dabei vergessen: wer nur die Erstzulassung aenderte, + kam hier nie vorbei, und weiter unten erschien auch die Speicherleiste + nicht (die haengt ebenfalls allein an `entwurf`). Der eingetippte Wert + war damit gar nicht speicherbar und beim Verlassen der Seite weg - + gemeldet vom Eigentuemer am 05.09.2026. Das Panel speichert an dieser + Stelle sofort bei jeder Aenderung und war deshalb nie betroffen. */ const speichern = async (zusatz?: Partial) => { - if (!entwurf && !zusatz) return + if (!entwurf && !zusatz && erstzulassung === null) return setzeLaeuft(true) setzeGespeichert(false) try { @@ -398,7 +406,7 @@ export function Einstellungen({ setzeErstzulassung(e.target.value)} /> @@ -1009,9 +1017,17 @@ export function Einstellungen({ )} {gespeichert &&

Gespeichert.

} - {entwurf && ( + {(entwurf || erstzulassung !== null) && (
- setzeEntwurf(null)} disabled={laeuft}> + { + setzeEntwurf(null) + // Sonst bliebe die Leiste nach "Verwerfen" stehen, weil der + // Erstzulassungs-Entwurf sie weiter offen haelt. + setzeErstzulassung(null) + }} + disabled={laeuft} + > Verwerfen void speichern()} disabled={laeuft}> diff --git a/custom_components/audi_dashboard/frontend/app/bundle.json b/custom_components/audi_dashboard/frontend/app/bundle.json index 6cb24d4..c75d3a2 100644 --- a/custom_components/audi_dashboard/frontend/app/bundle.json +++ b/custom_components/audi_dashboard/frontend/app/bundle.json @@ -1 +1 @@ -{"version":"2026.9.5.11","sha256":"66b5170e70ed6879bea70b44bebef30a04b6f0a7ea3d072bd32b7cc0c1c9e412","bytes":324454,"gebaut":"2026-09-05T00:34:25Z"} \ No newline at end of file +{"version":"2026.9.5.12","sha256":"3c0199aa402d413145056a5d51be3ecadc038557ff3feb9af0da24df86702753","bytes":324476,"gebaut":"2026-09-05T08:29:16Z"} \ No newline at end of file diff --git a/custom_components/audi_dashboard/frontend/app/bundle.zip b/custom_components/audi_dashboard/frontend/app/bundle.zip index 25bf657..1a6b9e6 100644 Binary files a/custom_components/audi_dashboard/frontend/app/bundle.zip and b/custom_components/audi_dashboard/frontend/app/bundle.zip differ diff --git a/custom_components/audi_dashboard/frontend/audi-dashboard-app.js b/custom_components/audi_dashboard/frontend/audi-dashboard-app.js index 99b1484..ebab367 100644 --- a/custom_components/audi_dashboard/frontend/audi-dashboard-app.js +++ b/custom_components/audi_dashboard/frontend/audi-dashboard-app.js @@ -710,7 +710,8 @@ function dat(s) { den Ersten des Monats zu ZEIGEN waere eine Erfindung - deshalb die Genauigkeit mitfuehren und in datumText() beruecksichtigen. */ const DATUM_ISO = /^(\d{4})-(\d{1,2})-(\d{1,2})$/; -const DATUM_TAG = /^(\d{1,2})\.(\d{1,2})\.(\d{4})$/; +// Bindestrich ist mitgemeint - siehe DE_TAG in companion-app/src/format.ts. +const DATUM_TAG = /^(\d{1,2})[.\-](\d{1,2})[.\-](\d{4})$/; const DATUM_MONAT = /^(\d{1,2})[./](\d{4})$/; const DATUM_ISO_MONAT = /^(\d{4})-(\d{1,2})$/; @@ -3579,7 +3580,7 @@ function vEinst() {
-
+
Ölwechsel-Intervall diff --git a/custom_components/audi_dashboard/manifest.json b/custom_components/audi_dashboard/manifest.json index 61f9f31..cddc4cd 100644 --- a/custom_components/audi_dashboard/manifest.json +++ b/custom_components/audi_dashboard/manifest.json @@ -1,7 +1,7 @@ { "domain": "audi_dashboard", "name": "Audi Dashboard", - "version": "2026.9.5.11", + "version": "2026.9.5.12", "documentation": "https://gitea.nothaft.cloud/paul/audi-app/src/branch/main/README.md", "issue_tracker": "https://gitea.nothaft.cloud/paul/audi-app/issues", "codeowners": [