feat(mitarbeiter): Vorgesetzter auch fuer Personen ohne Verzeichnis (#43)
This commit was merged in pull request #43.
This commit is contained in:
@@ -1,10 +1,10 @@
|
||||
# #020 Vorgesetzter auch für von Hand angelegte Personen
|
||||
|
||||
**Status:** offen
|
||||
**Status:** erledigt
|
||||
**Im Tracker:** [#31](https://git.wilde-server.de/florian.wilde/Laufzettel/issues/31) — die Zählung dort schließt Pull Requests ein und läuft deshalb auseinander
|
||||
**Meilenstein:** v0.2.0
|
||||
**Labels:** phase-2, backend
|
||||
**Geschätzt:** 3 h **Tatsächlich:** –
|
||||
**Geschätzt:** 3 h **Tatsächlich:** 1 h 20 min
|
||||
|
||||
## Ziel
|
||||
|
||||
@@ -26,17 +26,34 @@ Feld — `{{vorgesetzter_sam}}` bleibt dort immer leer.
|
||||
|
||||
## Aufgaben
|
||||
|
||||
- [ ] Entscheiden: eigene Selbstbeziehung `vorgesetzterId` (sauber, aber zwei Wege zur selben
|
||||
Auskunft) **oder** `vorgesetzterExterneId` auch im Bereich „ohne Quelle“ auflösen (`quelleId
|
||||
IS NULL`), mit stabilen Kennungen für manuelle Personen
|
||||
- [ ] Beide Lesepfade und `{{vorgesetzter}}` / `{{vorgesetzter_sam}}` entsprechend erweitern
|
||||
- [ ] Oberfläche: Vorgesetzten auf der Mitarbeiterseite setzen und entfernen
|
||||
- [ ] Der Abgleich darf die Zuordnung nicht überschreiben, wenn das Verzeichnis keinen `manager`
|
||||
- [x] **Entschieden: eigene Selbstbeziehung `vorgesetzterId`** — und die befürchteten „zwei Wege zur
|
||||
selben Auskunft“ gibt es nicht, weil der Abgleich sie mitschreibt. `vorgesetzterExterneId`
|
||||
bleibt damit wie `abteilung` nur der rohe Wert des Verzeichnisses; gelesen wird allein
|
||||
`vorgesetzterId`. Die Alternative hätte manuellen Personen eine erfundene `externeId` geben
|
||||
müssen, und `externeId` heißt „objectGUID aus dem Verzeichnis“ — das wäre eine Lüge im
|
||||
Datenmodell gewesen
|
||||
- [x] Beide Lesepfade und `{{vorgesetzter}}` / `{{vorgesetzter_sam}}` entsprechend erweitern
|
||||
- [x] Oberfläche: Vorgesetzten auf der Mitarbeiterseite setzen und entfernen
|
||||
- [x] Der Abgleich darf die Zuordnung nicht überschreiben, wenn das Verzeichnis keinen `manager`
|
||||
liefert — und keine Schleife zulassen (A ist Vorgesetzter von B ist Vorgesetzter von A)
|
||||
- [ ] Seed: Petra Klein als Vorgesetzte von Maria Huber eintragen
|
||||
- [x] Seed: Petra Klein als Vorgesetzte von Maria Huber eintragen
|
||||
|
||||
## Akzeptanzkriterien
|
||||
|
||||
- [ ] Test: eine von Hand angelegte Person bekommt einen Vorgesetzten, `{{vorgesetzter_sam}}` löst auf
|
||||
- [ ] Test: die Zuordnung gilt nur innerhalb desselben Kunden
|
||||
- [ ] Test: ein Abgleich ohne `manager` löscht eine von Hand gesetzte Zuordnung nicht
|
||||
- [x] Test: eine von Hand angelegte Person bekommt einen Vorgesetzten, `{{vorgesetzter_sam}}` löst auf
|
||||
- [x] Test: die Zuordnung gilt nur innerhalb desselben Kunden
|
||||
- [x] Test: ein Abgleich ohne `manager` löscht eine von Hand gesetzte Zuordnung nicht
|
||||
|
||||
## Beim Umsetzen dazugekommen
|
||||
|
||||
- **Die Migration führt bestehende Daten nach.** Ohne das wäre `{{vorgesetzter_sam}}` nach dem
|
||||
Einspielen bei **jeder** Person aus dem Verzeichnis leer gewesen, bis der nächste Abgleich läuft —
|
||||
und zwar still. Dieselbe Falle wie der Seed-Schlüssel in
|
||||
[#021](021-stabiler-schluessel-vorlagen.md): ein Umstieg, der die vorhandenen Daten nicht mitnimmt.
|
||||
An einem nachgebauten Vor-Zustand in der Entwicklungsdatenbank gefahren.
|
||||
- **Der Seed setzt die Zuordnung nur für Personen, die derselbe Lauf angelegt hat.** Eine leere
|
||||
Zuordnung sagt nicht, ob sie noch nie gesetzt oder im Betrieb entfernt wurde; ein zweiter Lauf
|
||||
darf nichts zurückdrehen.
|
||||
- **Zwei Schleifen-Prüfungen, nicht eine.** Die Datenbank fängt die kürzeste ab
|
||||
(`vorgesetzterId <> id`), längere brauchen den Gang nach oben im Dienst — mit Obergrenze, damit
|
||||
eine schon beschädigte Kette die Suche nicht ewig laufen lässt.
|
||||
|
||||
Reference in New Issue
Block a user