Skip to content

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
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 messages

Google 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
SpalteBesonderheiten
Nummerinteger, fortlaufende Mitgliedsnummer
Vorname-
Nachname-
BeitrittsdatumDD.MM.YYYY
AustrittsdatumDD.MM.YYYY
Art d. Mitgl.(aktiv|passiv|ermäßigt)
GeburtstagDD.MM.YYYY
Alter-
Geschlecht(m|w)
Email-
Hausnummer-
PLZ-
Wohnort-
Telefonnummer'+${Ländervorwahl}${Nummer}
Slack ID-
Sheet Arbeitseinsätze x
SpalteBesonderheiten
DatumDD.MM.YYYY
Mitglied${Vorname} ${Nachname}
ArbeitseinsatzFreitext
geleistete StundenDezimalzahl
Sheet Summe Stunden x
SpalteBesonderheiten
Name${Vorname} ${Nachname}
Zu leisten (h)mit Sheets Formel berechnet
Geleistetmit Sheets Formel berechnet
Differenzmit Sheets Formel berechnet
Abrechnungmit Sheets Formel berechnet
leerleer
leerleer
Jahrleer
Jahrleer
leerleer
Stunden (soll)leer
Stunden (soll)leer
leerleer
Admin Channelleer
Admin Channel-

Struktur Sheet Summe Stunden x

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

  1. Konto erstellen (docuseal.eu)
  2. 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

  1. Einloggen und bei Webhook URL die URL von AWS eintragen, die auf /docuseal/webhook endet
  2. form.completed Checkbox ankreuzen
  3. Geheimnis hinzufügen klicken
    • Geheimnis generieren (bspw. hier)
    • Werte für Key (bpsw. X-Sam-Signature) und Value (Geheimnis) in Docuseal eintragen
    • Werte in .env Umgebungsvariablen pflegen
Beispiel in .env.example
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 messages

Template anlegen

  1. Template bei Docuseal für den Aufnahmeantrag erstellen
  2. Template ID aus Docuseal ermitteln https://docuseal.eu/templates/{TEMPLATE_ID}
  3. In .env Umgebungsvariablen pflegen
Beispiel in .env.example
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 messages

Stä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
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 messages

Stammdaten

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.