1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
|
import datetime
from serenitas.utils.db import dbconn
from citco_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)
|