Mitgliedsbeiträge in Admidio

Innerhalb von Admidio existiert seit kurzem eine Möglichkeit Mitgliedsbeiträge automatisch im dtaus Format einzuziehen. Die Lösung ist als Plugin implementiert basiert auf dem Programm dtaus, welches hier bezogen werden kann.

Zunächst wird eine Möglichkeit benötigt für jeden Benutzer Kontodaten zu hinterlegen. Dazu müssen die entsprechenden Felder in der Datenbank angelegt werden. Dies kann beispielsweise per phpmyadmin vollzogen werden. Dazu muss folgendes Skript ausgeführt werden:

INSERT INTO adm_categories
   (cat_org_id, cat_type, cat_name, cat_hidden, cat_system, cat_sequence) 
   VALUES (NULL, "USF", "Kontodaten", 0, 0, 4);

Daraufhin sollte in der Tabelle adm_categories ein neuer Eintrag erscheinen. Wichtig ist für den nächsten Schritt der Wert diesen neuen Eintrags in der Spalte cat_id, der im Folgenden mit <id> bezeichnet wird. Als nächstes werden die Felder für die Bankverbindung aller Benutzer angelegt. Hierfür muss folgendes Skript ausgeführt werden. Wichtig ist hierbei, dass <id> durch den Wert der im voherigen Schritt eingefügten Zeile ersetzt wird:

INSERT INTO adm_user_fields 
   (usf_cat_id, usf_type, usf_name, usf_description, usf_system, usf_disabled, usf_hidden, usf_mandatory, usf_sequence) 
   VALUES (<id>, "NUMERIC", "Kontonummer", "Ihre Kontonummer für den automatischen Bankeinzug", 0, 0, 0, 0, 1),
   (<id>, "NUMERIC", "Bankleitzahl", "Die Bankleitzahl Ihres Kreditinstituts für den automatischen Bankeinzug", 0, 0, 0, 0, 2),
   (<id>, "TEXT", "Kontonummer", "Inhaber der angegebenen Bankverbindung", 0, 0, 0, 0, 3);

Sollten die Felder erfolgreich in die Datenbank eingefügt worden sein, kann mit der Konfiguration des Plugins begonnen werden.

Das Plugin ist für eine Vereinssatzung ausgelegt, deren Mitgliedsbeiträge sich nach dem Alter des Mitglieds richten. Zudem existieren Familienbeiträge und beitragsfreie Ehrenmitglieder.

Hierbei können Mitglieder jeweils nur zum Jahresende aus dem Verein austreten, weshalb der Mitgliedsbeitrag auch bei jeder Durchführung des Beitragseinzugs bis zum Jahresende berechnet wird.

Beitreten können Mitglieder jeweils zum 1. eines Monats. Sollte ein Mitglied innerhalb eines Jahres eingetreten sein, so wird dessen Beitrag anteilig nach Monaten der Mitgliedschaft berechnet.

Sollten Beiträge bereits am Anfang des Jahres eingezogen worden sein, so können diese auch zu einem späteren Zeitpunkt nochmals eingezogen werden. Einzige Voraussetzung hierbei ist die Angabe des Monats der letzten Abrechnung. Es wird dabei nur der Beitrag von Mitgliedern eingezogen, die nach dem bereits durchgeführten Abrechnungsmonat beigetreten sind.

Um Familienbeiträge abwickeln zu können, wurde innerhalb der Rollenzuordnung eine neue Kategorie Familien eingeführt. Innerhalb dieser Kategorie befinden sich dann als Rollen die einzelnen Familien, denen die jeweiligen Familienmitglieder zugeordnet sind.

Um beitragsfreie Ehrenmitglieder verwalten zu können, wurde ebenfalls eine Rolle Ehrenmitglied eingeführt, der sämtliche Ehrenmitglieder zugeordnet sind.

Die Beitragssätze selbst befinden sich nicht in der Datenbank, sondern werden über die Konfiguration des Plugins festgelegt. Als zusätzliche Information muss für den automatischen Beitragseinzug für ein Mitglied die Bankverbindung angegeben werden, deshalb auch die zusätzlichen Felder in der Datenbank, welche oben beschrieben wurden. Pro Mitglied wird dabei innerhalb der Datenbank nicht verwaltet, ob das Mitglied bereits bezahlt hat oder nicht.

Nachdem der Beitragseinzug mit Hilfe des Plugins ermittelt wurde, werden drei Dateien zur Verfügung gestellt, welche folgenden Inhalt haben:

  • Eine csv Datei für den Kassenwart, in der die komplette durchgeführte Abrechnung vorhanden ist, also sowohl Mitglieder, die per Rechnung bezahlen wollen, als auch Miglieder für die ein automatischer Bankeinzug vollzogen werden soll.
  • Eine csv Datei, die nur die Daten der Mitglieder enthält, welche per Rechnung Ihren Mitgliedsbeitrag bezahlen wollen. Diese kann dann mit einem Textverarbeitungsprogramm für einen Serienbrief herangezogen werden.
  • Eine Kontrolldatei für das dtaus Programm, mit dem in einem weiteren Schritt eine dtaus0.txt Datei für den automatischen Bankeinzug erstellt werden kann.
  1. Für alle Mitglieder werden die persönlichen Daten abgefragt und temporär in einem array gespeichert.
  2. Es werden alle Familien abgefragt. Das sind Rollen, die innerhalb der Kategorie Familien abgelegt sind, wie es oben bereits beschrieben wurde.
  3. Die Mitglieder der einzelnen Familien werden hierbei aus dem array aus Punkt 1 gelöscht und befinden sich jetzt nur noch innerhalb der Familienzuordnung.
  4. Die Ehrenmitglieder, erkennbar an ihrer Zuordnung zur Rolle Ehrenmitglied werden ebenfalls aus dem array aus Punkt 1 gelöscht, da sie beitragsfrei sind.
  5. Beginn der Beitragsberechnung:
    1. Für jede Familie wird der Familienbeitrag bestimmt. Dabei wird zufällig ein Mitglied aus der Familie ausgewählt, über das der Einzug abgewickelt wird
    2. Die Mitgliedsbeiträge werden anhand der Altersstaffelung aus dem erstellten array bestimmt
  6. Die Entscheidung ob Rechnung oder Bankeinzug erfolgt danach ob für ein Mitglied Kontodaten hinterlegt sind oder nicht.
  7. Die erstellten Beitragsdateien können heruntergeladen werden

Wer näheres über die genaue Funktionsweise des Plugins erfahren möchte kann sich den Quellcode dazu innerhalb der Datei mitgliedsbeitrag.php ansehen. Die einzelnen Schritte sind in Kommentaren zum Quelltext aufgeführt.

Wie allgemein für Plugins üblich muss die Datei lediglich in das adm_plugins Verzeichnis der Admidio Installation entpackt werden. Wie das Plugin selbst in die Homepage eingebunden werden kann, zeigt der Wikieintrag zur Einbindung von Plugins. Hier ein Beispiel:

if($g_current_user->isWebmaster())
{
    include(SERVER_PATH."/adm_plugins/mitgliedsbeitrag/mitgliedsbeitrag.php");
}

Auf keinen Fall sollte das Plugin so eingebunden werden, dass es bei jedem Benutzer angezeigt wird.

Innerhalb des Verzeichnis adm_plugins/mitgliededsbeitrag existiert die Konfigurationdatei config.php dort kann das Plugin konfiguriert werden. Zur Beitragsstaffelung nach Alter ist hierbei die Variable beitrag_beitraege_einzel wichtig. Hier das Beispiel:

  • Mitglieder von 0 - 14 Jahren: 10 €
  • Mitglieder von 15 - 18 Jahren: 15 €
  • Mitglieder ab 19 Jahren: 30 €
$beitrag_beitraege_einzel[0]['alter'] = 0;
$beitrag_beitraege_einzel[0]['betrag'] = 100000;
$beitrag_beitraege_einzel[1]['alter'] = 14;
$beitrag_beitraege_einzel[1]['betrag'] = 150000;
$beitrag_beitraege_einzel[2]['alter'] = 18;
$beitrag_beitraege_einzel[2]['betrag'] = 300000;

Der Familienbeitrag wird über die Variable beitrag_familie konfiguriert, im Beispiel 65 €:

$beitrag_familie = 650000;

Weitere wichtige Felder für den Beitragseinzug sind das Konto auf das eingezogen werden soll, der Verwendungszweck, sowie die Dateien, die von dem Plugin erzeugt werden:

$beitrag_filename_list = SERVER_PATH."/adm_my_files/einzug.csv";
$beitrag_filename_csvrechnung = SERVER_PATH."/adm_my_files/rechnung.csv";
$beitrag_filename_dtaus_ctl = SERVER_PATH."/adm_my_files/dtaus0.ctl";
$beitrag_einzugstext = "Mitgliedsbeitrag";
$beitrag_ktonr_target = "123456";
$beitrag_blz_target = "12345678";
$beitrag_inhaber_target = "Vereinskonto";

Um aus der vom Plugin zur Verfügung gestellten Kontrolldatei eine dtaus0.txt Datei zu erzeugen, wird das Programm dtaus benötigt. Hier ein Beispiel des Programmaufrufs:

dtaus -d dtaus0.txt -c dtaus0.ctl -b begleit.txt -o dtaus0.sik -dtaus 

Hierbei werden aus der Datei dtaus0.ctl, die vom Plugin zur Verfügung gestellt wird, folgende Dateien erzeugt:

  • dtaus0.txt: Die dtaus Datei, die der Bank für den automatischen Einzug übergeben werden muss
  • begleit.txt: Der Begleitzettel für die dtaus0.txt, der unterschrieben zusammen mit der Datei dtaus0.txt bei der Bank abgegeben werden muss.
  • dtaus0.sik: Eine Übersicht, was mit der dtaus0.txt Datei für Abbuchungen getätigt werden. Diese Datei ist ganz nützlich für die Unterlagen zum Beitragseinzug.
  • de/2.0/mitgliedsbeitraege_in_admidio.txt
  • Last modified: 2011/01/07 23:11
  • by geraldlutter