aboutsummaryrefslogtreecommitdiffstats
path: root/python/citco_ops
diff options
context:
space:
mode:
Diffstat (limited to 'python/citco_ops')
-rw-r--r--python/citco_ops/bowdst.py46
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",
+ )