diff options
Diffstat (limited to 'python/citco_ops')
| -rw-r--r-- | python/citco_ops/bowdst.py | 46 |
1 files changed, 46 insertions, 0 deletions
diff --git a/python/citco_ops/bowdst.py b/python/citco_ops/bowdst.py new file mode 100644 index 00000000..7d93060b --- /dev/null +++ b/python/citco_ops/bowdst.py @@ -0,0 +1,46 @@ +from dataclasses import dataclass, field +import datetime +from serenitas.ops.trade_dataclasses import Fund, Deal, Ccy +from psycopg.errors import UniqueViolation + + +@dataclass +class WireBase(Deal, table_name="custodian_wires", deal_type="custodian_wires"): + date: datetime.date + fund: Fund + entry_date: datetime.date + value_date: datetime.date + pay_date: datetime.date + currency: Ccy + amount: float + wire_details: str + unique_ref: str + + def __init_subclass__(cls, fund, **kwargs): + cls.fund = fund + + @classmethod + def commit(cls): + cls._sql_insert += " ON CONFLICT (unique_ref) DO NOTHING" + with cls._conn.cursor() as c: + c.executemany(cls._sql_insert, cls._insert_queue) + cls._conn.commit() + cls._insert_queue.clear() + + +class BowdstWire(WireBase, fund="BOWDST"): + @classmethod + def from_nexen_line(cls, line: dict): + return cls( + date=line["Report Run Date"], + entry_date=line["Cash Entry Date"], + value_date=line["Cash Value Date"], + pay_date=line["Settle / Pay Date"], + currency=line["Reporting Currency Code"], + amount=line["Local Amount"].replace(",", ""), + wire_details=line["Transaction Description 1"] + if line["Transaction Type Code"] == "CW" + else line["Transaction Description 2"], + unique_ref=line["Reference Number"], + fund="BOWDST", + ) |
