Skip to content
Snippets Groups Projects
openslides-generate-members.py 2.77 KiB
Newer Older
Nico's avatar
Nico committed
#!/usr/bin/python3
import argparse
import csv
import random
import string
import sys

ap = argparse.ArgumentParser()
ap.add_argument("--institution", action="store_true")
ap.add_argument("members_csv", type=argparse.FileType("r"))
args = ap.parse_args()

def generate_password():
    return ''.join(random.choice(string.ascii_letters + string.digits) for i in range(0, 12))

openslides_csv = csv.writer(sys.stdout, quoting=csv.QUOTE_ALL, delimiter=';')
openslides_csv.writerow(["Titel", "Vorname", "Nachname", "Gliederungsebene", "Teilnehmernummer", "Gruppen", "Kommentar", "Ist aktiv", "Ist anwesend", "Ist ein Gremium", "Initiales Passwort", "E-Mail", "Benutzername", "Geschlecht", "Stimmgewicht"])

Nico's avatar
Nico committed
if not args.institution:
    # "ID";"Anrede";"Institution";"Straße";"Nr";"PLZ";"Ort";"Anrede_Ansprechpartner";"Name";"Vorname";"Mailadresse";"PGP";"Mobil";"Telefon";"Fax";"Eintrittsdatum";"Art";"Beitrag";"Sepa";"IBAN";"BIC"
Nico's avatar
Nico committed
    FIRST_NAME_COL = 3
    LAST_NAME_COL = 2
    LEAVE_DATE_COL = 14
    MEMBER_TYPE_COL = 15
    EMAIL_COL = 8
else:
    # "ID";"Anrede";"Name";"Vorname";"Straße";"Nr";"PLZ";"Ort";"Mailadresse";"PGP";"Mobil";"Telefon";"Geb.Datum";"Eintrittsdatum";"Austrittsdatum";"Art";"Beitrag";"Sepa";"IBAN";"BIC"
Nico's avatar
Nico committed
    FIRST_NAME_COL = 9
    LAST_NAME_COL = 8
    MEMBER_TYPE_COL = 16
    EMAIL_COL = 10
    INSTITUTION_COL = 2
member_reader = csv.reader(args.members_csv, delimiter=';')
for member in member_reader:
    # Titel,Vorname,Nachname,Gliederungsebene,Teilnehmernummer,Gruppen,Kommentar,Ist aktiv,Ist anwesend,Ist ein Gremium,Initiales Passwort,E-Mail,Benutzername,Geschlecht,Stimmgewicht
    firstname = member[FIRST_NAME_COL]
    lastname = member[LAST_NAME_COL]
    membership_type = member[MEMBER_TYPE_COL]
    username = email = member[EMAIL_COL]
    institution = ""

    if not args.institution:
        leave_date = member[LEAVE_DATE_COL]
        if leave_date.strip() != "":
            print(f"{firstname} {lastname}: Already left, ignoring!", file=sys.stderr)
            continue

        if membership_type == "OV" or membership_type == "OE":
Nico's avatar
Nico committed
            groups = "Ordentliche Mitglieder"
Nico's avatar
Nico committed
        elif membership_type == "FM":
            groups = ""
        else:
            print(f"{firstname} {lastname}: Unknown membership type '{membership_type}'", file=sys.stderr)
            continue
    else:
        institution = member[INSTITUTION_COL]
        if membership_type == "OM":
Nico's avatar
Nico committed
            groups = "Ordentliche Mitglieder"
Nico's avatar
Nico committed
        elif membership_type == "FM":
            groups = ""
        else:
            print(f"{firstname} {lastname}: Unknown membership type '{membership_type}'", file=sys.stderr)
            continue

    password = generate_password()

    openslides_csv.writerow(["", firstname, lastname, institution, "", groups, "", 1, 0, 0, password, email, username, "" ""])