import datetime from serenitas.utils.db import dbconn from report_ops.utils import PaymentSettlement, next_business_days from serenitas.analytics.dates import prev_business_day def get_cash_balance(account_number, date, conn): with conn.cursor() as c: sql_str = "SELECT balance, currency_code from cash_balances WHERE account_number=%s AND date=%s" c.execute(sql_str, (account_number, date)) return {row.currency_code: row.balance for row in c} if __name__ == "__main__": import argparse parser = argparse.ArgumentParser() parser.add_argument( "date", nargs="?", type=datetime.date.fromisoformat, default=datetime.date.today(), help="working date", ) args = parser.parse_args() conn = dbconn("dawndb") sql_str = "SELECT currency, sum(payment_amount) as payment_amount FROM payment_settlements ps2 WHERE fund=%s AND asset_class in ('BOND', 'SPOT') AND settle_date BETWEEN %s AND %s AND currency=%s group by currency;" cash_balances = get_cash_balance("ISOS01", prev_business_day(args.date), conn) with conn.cursor() as c: for fund in ("ISOSEL",): for date in ( args.date, next_business_days(args.date, 1), next_business_days(args.date, 2), ): for currency in ("USD", "EUR"): params = (fund, args.date, date, currency) c.execute(sql_str, params) PaymentSettlement.stage_payment(c, date) PaymentSettlement.email_innocap(args.date, cash_balances)