Automatic reporting system for small clubs analyzing member fees and drink sales.
Monitors money transfers to an account and filters them according to various patterns to report information.
- Track member fee payments and automatic membership status
- Allows drink account fillup via SEPA bank transfers
- Track expenses and income for drink sales
- Manage member information
Note:
If all you want is run the service, please head down to the Deployment section.
-
If you're on Debian, you will need some more packages:
apt install python3-dev build-essential
-
Enable lingering services for your user:
sudo loginctl enable-linger $USER
-
Copy
config.example.py
toconfig.py
and customize contents according to your likings.- insert your account information (
blz
,user
,pin
,iban
) - figure out your FinTS information (
product_id
&fints_url
) - set
bind_host
andport
- set
db_path
- for flipdot members: check teh forumz
- insert your account information (
The following script will:
-
Make a virtualenv and install dependencies from pyproject.toml
-
Setup a systemd-user-service
money.service
./setup.sh
-
Make a database:
mkdir -p data ./manage.py migrate ./manage.py createsuperuser
-
Run Cron jobs to import TXs
- this will:
- import transactions from your bank
- analyze member fees
./manage.py runcrons
- this will:
-
Start server:
./manage.py runserver # or, enable and start the systemd service: systemctl --user enable --now money
-
go to http://localhost:5002/ and enjoy the stats!
Deployment in dev setup:
-
Edit
uwsgi.ini
-
Run:
./manage.py collectstatic ./webserver
Do these steps:
export SOURCE_COMMIT=$(git describe --always --no-abbrev)
docker-compose build
docker-compose up
## in another window:
docker-compose exec money ./manage.py migrate
docker-compose exec money ./manage.py cratesuperuser
Once the server is running, go to http://localhost:8000/admin. Log in, and click on "Members". Add some members. The only fields you will have to fill out:
- First Name
- Last Name (if you know it)
- Nickname (if you know it)
- Email (if you know it)
- Fee (if it isn't one of the standard fees from fee_util.py)
These properties will be used to find the member fee transactions. All the other fields will be filled by the analysis.
After adding some members, do ./manage.py runcrons
again to analyze their fees.
GPLv3. Other licenses available upon request.
Lists drinks-recharge events according to the pattern drinks <uid> <info>
, where
- uid is the LDAP user ID
- info is some additional text, commonly "username random-string"
The random string at the end is used to differentiate recharges happening on the same day, since SEPA does not generate unique transaction IDs. Instead, it considers the 5-tuple (date, IBAN from, IBAN to, amount, transaction text) as unique key.
loads new transactions from the bank.
performs member fee analysis.
displays an oldschool ASCII report of paid member fees in the last 12 months.
clears all analyzed data from database (except for Fee_Entries). Can be used to rescue the database from botched data if you're messing with the members.py script.
Wrapper for the python-fints library.
Old stuff:
old report: loads transactions and drinks-recharges using an ad-hoc pickle cache defined in cache.py.
Legacy; has been integrated into django app on /recharges.py
webserver: small flask webserver to do nothing but serve the output of drinks.py as JSON.
Can be started as systemd service, using money.service.