Externe Personen bei Aufgaben, Aufwand-Feld, Teams persönlich
- Aufgaben auch Kollegen außerhalb des Projekts zuweisen (Abschnitt „Externe Personen“ im Aufgaben-Panel) - Aufwand-Feld neu gestaltet: −/+, Schnellwahl, Umrechnung in Arbeitstage - Teams: persönliche Nachricht an die Zuständigen (Flow-Bot) statt Kanal Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
4c2e04e78b
commit
e7243f6f26
6 files changed
+304
-101
No files matched your search
@@ -1521,6 +1521,25 @@ step into a project explicit. Everything lives in `public/js/auftrag.js`:
|
||||
system entirely — `loadAmpelColor()` returns `var(--red)` etc., so this
|
||||
view now also follows the app-wide dark-mode palette like everywhere
|
||||
else.
|
||||
- **Aufwand im Aufgaben-Panel** (Eriks Wunsch „schöner darstellen“):
|
||||
Kapsel mit −/+ (±1 h) und Einheit „Std.“, Schnellwahl 2 h / ½ Tag /
|
||||
1 Tag / 2 Tage / 1 Woche (Tage über `APP_SETTINGS.arbeitsstundenProTag`;
|
||||
erneuter Klick leert), darunter die Umrechnung in Arbeitstage
|
||||
(`todoAufwandAendern()`/`todoAufwandSetzen()`/`todoAufwandInfo()`,
|
||||
`plan-modals.js`). Feld-id `todoEditAufwand` und Speichern unverändert.
|
||||
Das Eingabefeld ist per `!important` durchsichtig, weil die Glas-Regeln
|
||||
für Eingabefelder ihm sonst eine eigene Fläche geben.
|
||||
- **„Externe Personen“ im Aufgaben-Panel** (Eriks Wunsch): unter „Wer“
|
||||
stehen oben die Projektbeteiligten als Chips, darunter der Abschnitt
|
||||
„Externe Personen“ — Kollegen mit Konto, die dem Projekt NICHT
|
||||
zugeordnet sind, über eine Auswahl nach Gewerk (`todoExterneSetzen()`,
|
||||
`todoExternHinzufuegen()`/`todoExternEntfernen()` in `plan-modals.js`;
|
||||
Quelle: Teilnehmerkreis der Sitzung ohne die Projektbeteiligten). Sie
|
||||
landen ganz normal in `t.assignees` — damit zählen sie zu ihrer
|
||||
Auslastung, erscheinen unter „Meine Aufgaben“, bekommen Glocke und
|
||||
Teams-Nachricht. Wer einer Aufgabe zugewiesen ist, aber (nicht mehr) im
|
||||
Projekt, erscheint beim Öffnen automatisch dort. Keine Datenänderung
|
||||
am Projekt: die Person wird NICHT unter „Beteiligte“ eingetragen.
|
||||
- **Aufgabe und Meilenstein als Seitenpanel** (Eriks Wahl „B“):
|
||||
`#todoModal` und `#milestoneModal` sind `.modal-bg.als-panel` — rechts am
|
||||
Rand, volle Höhe, Hintergrund nur leicht abgedunkelt, damit der
|
||||
@@ -4210,36 +4229,38 @@ kopieren, „In Outlook öffnen“ (`webcal:`-Link), Anleitung, „Neue Adresse
|
||||
Microsoft-Server aus dem Internet ab — dafür muss der Server von außen
|
||||
erreichbar sein. Das klassische Outlook am PC holt es im Firmennetz direkt.
|
||||
|
||||
## Teams: Nachricht bei neuen Aufgaben
|
||||
## Teams: persönliche Nachricht bei neuen Aufgaben
|
||||
|
||||
Eriks Wunsch: Wird jemandem eine Aufgabe zugewiesen, erscheint in einem
|
||||
Teams-Kanal eine Karte mit Link direkt auf die Aufgabe.
|
||||
- **Einrichten:** In Teams im Kanal *Workflows* → „Beim Empfang einer
|
||||
Webhook-Anfrage in einem Kanal posten“; die erzeugte https-Adresse unter
|
||||
**Admin → Teams** eintragen (`loadAdminTeams()`, `js/admin/admin.js`,
|
||||
Recht **`a.teams`**, neu im Katalog „Admin-Bereich“), „Testnachricht
|
||||
senden“. Anleitung steht aufklappbar in der Karte.
|
||||
- **Speicher:** Tabelle `integrationen` (schluessel/wert; `teams_webhook`,
|
||||
Eriks Wunsch („nur persönlich“): Wird jemandem eine Aufgabe zugewiesen,
|
||||
bekommt GENAU DIESE Person in Teams eine Nachricht im Chat mit dem Flow-Bot,
|
||||
mit Link direkt auf die Aufgabe. Kein Kanal.
|
||||
- **Einrichten in Teams** (Anleitung aufklappbar unter **Admin → Teams**):
|
||||
leerer Workflow, Auslöser „Bei Empfang einer Teams-Webhookanforderung“
|
||||
(Jeder), Aktion „Karte in einem Chat oder Kanal veröffentlichen“ als
|
||||
Flow-Bot im Chat mit Flow-Bot, Empfänger `triggerBody()?['empfaenger']`,
|
||||
Karte `string(triggerBody()?['karte'])`. Die Auslöser-Adresse trägt ein
|
||||
Admin in der App ein (`loadAdminTeams()`, Recht **`a.teams`**). Der
|
||||
Workflow läuft unter dem Konto, das ihn anlegt (besser Sammelkonto/IT).
|
||||
- **Was die App schickt:** je neu zuständiger Person `{empfaenger, karte}` —
|
||||
`empfaenger` = `users.email` (muss dem Teams-Anmeldenamen entsprechen),
|
||||
`karte` = Adaptive Card (`teamsKarte()`: „Neue Aufgabe für Sie: …“,
|
||||
Projekt, Fällig/Zeitraum, Aufwand, Zugewiesen von, bei mehreren auch
|
||||
Zuständig, Knopf „Aufgabe öffnen“). Ohne Konto/E-Mail keine Nachricht
|
||||
(nur ein Log-Eintrag). Testnachricht geht an die E-Mail des Admins.
|
||||
- **Speicher:** Tabelle `integrationen` (`teams_webhook`,
|
||||
`teams_neue_aufgaben`), bewusst NICHT `app_settings` (das darf jedes
|
||||
Konto lesen) und nicht in `IMPORT_TABLES`. Die Adresse geht nie an den
|
||||
Browser zurück — `GET /admin/teams` liefert nur `konfiguriert`/`host`.
|
||||
`PUT /admin/teams {webhook?, neueAufgaben?}` (nur https), `POST
|
||||
/admin/teams/test` (Fehler als `{ok:false}` mit HTTP 200).
|
||||
Konto lesen) und nicht in `IMPORT_TABLES`; die Adresse geht nie an den
|
||||
Browser zurück. Routen `GET`/`PUT /admin/teams`, `POST /admin/teams/test`.
|
||||
- **Auslöser:** `neueZuweisungenMelden()` (aus `/save-week` und
|
||||
`/save-projects`, jetzt mit `req`) sammelt je Aufgabe die NEU Zuständigen
|
||||
— auch Personen ohne Konto, nicht wer sich selbst zuweist, keine
|
||||
Phasenbalken, nie die Sandbox — und `teamsNeueAufgaben()` schickt je
|
||||
Aufgabe EINE Adaptive Card (`teamsKarte()`: Titel, Projekt, Zuständig,
|
||||
Fällig/Zeitraum, Aufwand, Zugewiesen von, Knopf „Aufgabe öffnen“). Im
|
||||
Hintergrund; Fehler nur im Log, das Speichern scheitert nie daran.
|
||||
`/save-projects`, mit `req`) sammelt je Aufgabe die NEU Zuständigen —
|
||||
nicht wer sich selbst zuweist, keine Phasenbalken, nie die Sandbox —,
|
||||
`teamsNeueAufgaben()` sendet im Hintergrund; Fehler nur im Log.
|
||||
- **Link** (`aufgabenLink()`): `/Projektplan/<Name>?weekLabel=…&projNr=…
|
||||
&aufgabe=<todoId>#aufgaben`, Host aus der speichernden Anfrage (= Adresse
|
||||
der App im Büro; funktioniert nur im Büronetz/VPN). Im Browser liest
|
||||
`plan-state.js` `aufgabe` beim Laden (`startAufgabe`): öffnet die
|
||||
JÜNGSTE Sitzung, falls der Link eine ältere nennt (Aufgaben-ids bleiben
|
||||
beim Sitzungswechsel gleich), springt nach „Aufgaben“ und öffnet das
|
||||
Aufgaben-Panel; Adresszeile wird nachgezogen.
|
||||
- Braucht Internetzugang nach außen (Microsoft-Server).
|
||||
&aufgabe=<todoId>#aufgaben`, Host aus der speichernden Anfrage (nur im
|
||||
Büronetz/VPN erreichbar). `plan-state.js` (`startAufgabe`) öffnet die
|
||||
jüngste Sitzung, falls der Link eine ältere nennt, und dort das
|
||||
Aufgaben-Panel; die Adresszeile wird nachgezogen.
|
||||
- Braucht Internetzugang nach außen.
|
||||
|
||||
## Sitzungen nach Bedarf laden (`js/store.js`)
|
||||
|
||||
|
||||
Reference in new issue
Block a user