diff --git a/python/report.py b/python/report.py new file mode 100644 index 0000000..87c13cd --- /dev/null +++ b/python/report.py @@ -0,0 +1,60 @@ +#!/usr/bin/python3 + +import pandas as pd +import argparse + +# setup CLI parsing +parser = argparse.ArgumentParser( + prog='xmpp-expenses-report', + description='Generate a report from a CSV file generated by the XMPP expense bot.', + epilog='') + +parser.add_argument('-f', '--filename') +parser.add_argument('-n', '--nexp') +parser.add_argument('-l', '--lang') +args = parser.parse_args() + +# localize + +sentences = { 'it': + [f'Ciao, ecco le ultime {args.nexp} spese:', + f'Totale speso dal', + f'Totale per ogni utente dal'], + 'en': + [f'Hi, here\'s the latest {args.nexp} expenses:', + f'Total sum of expenses since', + f'Sum of expenses for every user since']} + + +# load CSV +df = pd.read_csv(args.filename) +df['dt'] = pd.to_datetime(df['Time']) +df['FloatValue'] = df[['Value']].astype(float) + +recent = df.sort_values(by='dt', ascending=False) + +# latest N expenses +print(sentences[args.lang][0] + '\n') + +print( + recent[['ID', 'Time', 'Value', 'User', 'Notes']] + .head(int(args.nexp)) # only print latest args.nexp expenses + .to_string(index=False)) + +# totals of whole +startdate = recent.dt.iloc[-1].date() +ntot = recent.FloatValue.sum() + +print('\n{0} {1}: {2:.2f} euro'.format( + sentences[args.lang][1], + startdate, + abs(ntot))) + +usertot = pd.DataFrame(recent[['User','FloatValue']].groupby('User', group_keys=True).sum()) + +print('\n{0} {1}:'.format( + sentences[args.lang][2], + startdate)) + +for user,value in usertot.iterrows(): + print('{0}: {1:.2f} euro'.format(user,abs(value.values[0]))) diff --git a/python/requirements.txt b/python/requirements.txt new file mode 100644 index 0000000..85722d7 --- /dev/null +++ b/python/requirements.txt @@ -0,0 +1,2 @@ +pandas +argparse