Budget helps you control the bills and donations of your Mastodon server and to share your current finantial status with your users, by posting it via the Publisher bot.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
budget/addfee.py

123 lines
3.2 KiB

from datetime import datetime, timezone, timedelta
import time
import threading
import os
import sys
import os.path
import psycopg2
import pytz
import dateutil
from dateutil.parser import parse
from decimal import *
getcontext().prec = 2
###############################################################################
# get fees rows
###############################################################################
def print_fees():
try:
conn = psycopg2.connect(database = budget_db, user = budget_db_user, password = "", host = "/var/run/postgresql", port = "5432")
cur = conn.cursor()
cur.execute("SELECT fee_description, payment_type, fee FROM fees")
rows = cur.fetchall()
for row in rows:
print('fee description: ' + str(row[0]), ', payment type: ' + str(row[1]), 'fee: ' + str(row[2]))
cur.close()
except (Exception, psycopg2.DatabaseError) as error:
print(error)
finally:
if conn is not None:
conn.close()
###################################################################################
# add fees to database
###################################################################################
def insert_fees(fee_description, payment_type, fee):
sql = "INSERT INTO fees(fee_description, payment_type, fee) VALUES(%s,%s,%s)"
try:
conn = psycopg2.connect(database = budget_db, user = budget_db_user, password = "", host = "/var/run/postgresql", port = "5432")
cur = conn.cursor()
cur.execute(sql, (fee_description, payment_type, fee))
print("\n")
print("Updating fees...")
conn.commit()
cur.close()
except (Exception, psycopg2.DatabaseError) as error:
print(error)
finally:
if conn is not None:
conn.close()
###############################################################################
# INITIALISATION
###############################################################################
# Returns the parameter from the specified file
def get_parameter( parameter, file_path ):
# Check if db_config.txt file exists
if not os.path.isfile(file_path):
if file_path == "config/db_config.txt":
print("File %s not found, exiting. Run db-setup.py."%file_path)
sys.exit(0)
# Find parameter in file
with open( file_path ) as f:
for line in f:
if line.startswith( parameter ):
return line.replace(parameter + ":", "").strip()
# Cannot find parameter, exit
print(file_path + " Missing parameter %s "%parameter)
print("Run setup.py")
sys.exit(0)
# Load configuration from config file
config_filepath = "config/db_config.txt"
budget_db = get_parameter("budget_db", config_filepath) # E.g., budget
budget_db_user = get_parameter("budget_db_user", config_filepath) # E.g., mastodon
###############################################################################
while True:
fee_description = input("Fee description? (q to quit) ")
if fee_description == 'q':
sys.exit("Bye")
fee_type = input("Fee type? (in ex. annual) ")
fee = input("Fee? ")
if fee == '':
fee = '0.00'
fee = round(float(fee),2)
insert_fees(fee_description, fee_type, fee)
print_fees()