Komponenten
Arbeitsstunden
Umgebungsvariablen
Für diese Komponente müssen die Umgebungsvariablen SPREADSHEET_ID_MASTERDATA, GOOGLE_SERVICE_ACC_EMAIL und GOOGLE_SERVICE_ACC_PRIVATE_KEY ausgefüllt werden.
GOOGLE_SERVICE_ACC_EMAIL und GOOGLE_SERVICE_ACC_PRIVATE_KEY sollten bereits im Kapitel Setup - AWS Lambda aufsetzen ausgefüllt worden sein.
Die SPREADSHEET_ID_MASTERDATA findet man in der URL der Tabelle mit den Mitgliederstammdaten. Sie steht zwischen docs.google.com/spreadsheets/d/ und dem nächsten /.
Beispiel in .env.example
## Slack config
SLACK_SIGNING_SECRET=
SLACK_BOT_TOKEN=
## Spreadsheet config
GOOGLE_SERVICE_ACC_EMAIL= #email of google service account
GOOGLE_SERVICE_ACC_PRIVATE_KEY='-----BEGIN PRIVATE KEY-----
key
key
key
-----END PRIVATE KEY-----
' #private key of google service account in this exact format (no special characters like line breaks)
## App config
APP_ADMIN= #admin of the app who should receive logs
PORT=8080
APP_ADMIN_CHANNEL= #channel for logs as files can't be sent in direct messages anymore
## Staette config
STAETTE_CHANNEL= #channel for staette polls
CRONJOB_LOG_TO_ADMIN=X #X for log
## Signature config
SIGNATURE_SIGNING_SECRET= #signing secret in docuseal for webhooks
SIGNATURE_HEADER_NAME=X-Sam-Signature #header name for signature verification
APPLICATION_FORM_TEMPLATE_ID= #template ID for application form in docuseal
SIGNATURE_WORKFLOW_SLACK_WEBHOOK='https://hooks.slack.com/triggers/xxxx' # slack webhook URL to start application process
## Arbeitsstunden config
SPREADSHEET_ID_MASTERDATA= #spreadsheet with masterdata
## Meldungen config
SPREADSHEET_ID_MELDUNGEN= #spreadsheet with meldungen
MELDUNGEN_ADMIN_CHANNEL= #channel for meldungen admin messagesGoogle Sheet Struktur
Das Google Sheet erwartet eine spezielle Struktur. Bei den Sheets wird nach Namen selektiert, bei den Spalten die Reihenfolge, nicht die Titel.
Ein x im Sheet Namen steht für das jeweilige Jahr.
Das erste valide Jahr ist 2022. Sollte ein User eine Abfrage für ein Jahr starten, für das es noch kein Sheet gibt, so kopiert die App die beiden Sheets des letzten Jahres und leert alle Arbeitseinsätze. Die Soll-Stunden, sowie der Admin Channel können im "Summe Stunden x" Sheet angepasst werden.
WARNUNG
Sollte die Struktur verändert werden müssen, muss auch der Code angepasst werden.
Sheet Allg Daten
| Spalte | Besonderheiten |
|---|---|
| Nummer | integer, fortlaufende Mitgliedsnummer |
| Vorname | - |
| Nachname | - |
| Beitrittsdatum | DD.MM.YYYY |
| Austrittsdatum | DD.MM.YYYY |
| Art d. Mitgl. | (aktiv|passiv|ermäßigt) |
| Geburtstag | DD.MM.YYYY |
| Alter | - |
| Geschlecht | (m|w) |
| - | |
| Hausnummer | - |
| PLZ | - |
| Wohnort | - |
| Telefonnummer | '+${Ländervorwahl}${Nummer} |
| Slack ID | - |
Sheet Arbeitseinsätze x
| Spalte | Besonderheiten |
|---|---|
| Datum | DD.MM.YYYY |
| Mitglied | ${Vorname} ${Nachname} |
| Arbeitseinsatz | Freitext |
| geleistete Stunden | Dezimalzahl |
Sheet Summe Stunden x
| Spalte | Besonderheiten |
|---|---|
| Name | ${Vorname} ${Nachname} |
| Zu leisten (h) | mit Sheets Formel berechnet |
| Geleistet | mit Sheets Formel berechnet |
| Differenz | mit Sheets Formel berechnet |
| Abrechnung | mit Sheets Formel berechnet |
leer | leer |
leer | leer |
| Jahr | leer |
Jahr | leer |
leer | leer |
| Stunden (soll) | leer |
Stunden (soll) | leer |
leer | leer |
| Admin Channel | leer |
Admin Channel | - |

Meldungen
Under construction 👷🚧🏗️
Pollz
Kein Setup notwendig
Signaturen
Die integrierte Signaturlösung ist im Moment Docuseal.
Die Implementierung umfasst einen Webhook, welcher von Docuseal ausgelöst wird, wenn Dokumente unterschrieben wurden. Dieser löst dann wiederum per Webhook einen Workflow in Slack aus.
Docuseal Konto erstellen
- Konto erstellen (docuseal.eu)
- Pro Lizenz kaufen: 20$ pro User pro Monat (50% Discount für Non-Profits) + 0,20$ pro API Call
- (optional) Non-Profit Discount sichern: Email an support@docuseal.com, ich habe nur unsere Website mitgeschickt
Webhook einrichten
- Einloggen und bei Webhook URL die URL von AWS eintragen, die auf
/docuseal/webhookendet form.completedCheckbox ankreuzenGeheimnis hinzufügenklicken- Geheimnis generieren (bspw. hier)
- Werte für Key (bpsw.
X-Sam-Signature) und Value (Geheimnis) in Docuseal eintragen - Werte in
.envUmgebungsvariablen pflegen
Beispiel in .env.example
## Slack config
SLACK_SIGNING_SECRET=
SLACK_BOT_TOKEN=
## Spreadsheet config
GOOGLE_SERVICE_ACC_EMAIL= #email of google service account
GOOGLE_SERVICE_ACC_PRIVATE_KEY='-----BEGIN PRIVATE KEY-----
key
key
key
-----END PRIVATE KEY-----
' #private key of google service account in this exact format (no special characters like line breaks)
## App config
APP_ADMIN= #admin of the app who should receive logs
PORT=8080
APP_ADMIN_CHANNEL= #channel for logs as files can't be sent in direct messages anymore
## Staette config
STAETTE_CHANNEL= #channel for staette polls
CRONJOB_LOG_TO_ADMIN=X #X for log
## Signature config
SIGNATURE_SIGNING_SECRET= #signing secret in docuseal for webhooks
SIGNATURE_HEADER_NAME=X-Sam-Signature #header name for signature verification
APPLICATION_FORM_TEMPLATE_ID= #template ID for application form in docuseal
SIGNATURE_WORKFLOW_SLACK_WEBHOOK='https://hooks.slack.com/triggers/xxxx' # slack webhook URL to start application process
## Arbeitsstunden config
SPREADSHEET_ID_MASTERDATA= #spreadsheet with masterdata
## Meldungen config
SPREADSHEET_ID_MELDUNGEN= #spreadsheet with meldungen
MELDUNGEN_ADMIN_CHANNEL= #channel for meldungen admin messagesTemplate anlegen
- Template bei Docuseal für den Aufnahmeantrag erstellen
- Template ID aus Docuseal ermitteln
https://docuseal.eu/templates/{TEMPLATE_ID} - In
.envUmgebungsvariablen pflegen
Beispiel in .env.example
## Slack config
SLACK_SIGNING_SECRET=
SLACK_BOT_TOKEN=
## Spreadsheet config
GOOGLE_SERVICE_ACC_EMAIL= #email of google service account
GOOGLE_SERVICE_ACC_PRIVATE_KEY='-----BEGIN PRIVATE KEY-----
key
key
key
-----END PRIVATE KEY-----
' #private key of google service account in this exact format (no special characters like line breaks)
## App config
APP_ADMIN= #admin of the app who should receive logs
PORT=8080
APP_ADMIN_CHANNEL= #channel for logs as files can't be sent in direct messages anymore
## Staette config
STAETTE_CHANNEL= #channel for staette polls
CRONJOB_LOG_TO_ADMIN=X #X for log
## Signature config
SIGNATURE_SIGNING_SECRET= #signing secret in docuseal for webhooks
SIGNATURE_HEADER_NAME=X-Sam-Signature #header name for signature verification
APPLICATION_FORM_TEMPLATE_ID= #template ID for application form in docuseal
SIGNATURE_WORKFLOW_SLACK_WEBHOOK='https://hooks.slack.com/triggers/xxxx' # slack webhook URL to start application process
## Arbeitsstunden config
SPREADSHEET_ID_MASTERDATA= #spreadsheet with masterdata
## Meldungen config
SPREADSHEET_ID_MELDUNGEN= #spreadsheet with meldungen
MELDUNGEN_ADMIN_CHANNEL= #channel for meldungen admin messagesStätte
In den .env Umgebungsvariablen muss der Channel gepflegt werden, in dem die Abfragen landen. Außerdem kann der App Admin optional benachrichtigt werden, wenn alte Nachrichten nachts gelöscht werden.
Beispiel in .env.example
## Slack config
SLACK_SIGNING_SECRET=
SLACK_BOT_TOKEN=
## Spreadsheet config
GOOGLE_SERVICE_ACC_EMAIL= #email of google service account
GOOGLE_SERVICE_ACC_PRIVATE_KEY='-----BEGIN PRIVATE KEY-----
key
key
key
-----END PRIVATE KEY-----
' #private key of google service account in this exact format (no special characters like line breaks)
## App config
APP_ADMIN= #admin of the app who should receive logs
PORT=8080
APP_ADMIN_CHANNEL= #channel for logs as files can't be sent in direct messages anymore
## Staette config
STAETTE_CHANNEL= #channel for staette polls
CRONJOB_LOG_TO_ADMIN=X #X for log
## Signature config
SIGNATURE_SIGNING_SECRET= #signing secret in docuseal for webhooks
SIGNATURE_HEADER_NAME=X-Sam-Signature #header name for signature verification
APPLICATION_FORM_TEMPLATE_ID= #template ID for application form in docuseal
SIGNATURE_WORKFLOW_SLACK_WEBHOOK='https://hooks.slack.com/triggers/xxxx' # slack webhook URL to start application process
## Arbeitsstunden config
SPREADSHEET_ID_MASTERDATA= #spreadsheet with masterdata
## Meldungen config
SPREADSHEET_ID_MELDUNGEN= #spreadsheet with meldungen
MELDUNGEN_ADMIN_CHANNEL= #channel for meldungen admin messagesStammdaten
Die Stammdaten Funktion baut auf der Komponente Arbeitsstunden auf. Das Setup ist daher auch diesem Kapitel zu entnehmen.
Es werden mindestens die Sheets Allg Daten und Summe Stunden x benötigt.