from dataclasses import dataclass import datetime from serenitas.ops.trade_dataclasses import Deal, Ccy from typing import ClassVar @dataclass class Wire(Deal, table_name="custodian_wires", deal_type="custodian_wires"): date: datetime.date fund: ClassVar[str] 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._sql_insert += " ON CONFLICT (unique_ref) DO NOTHING" cls.fund = fund def __post_init__(self): self.amount = self.amount.replace(",", "") if "(" in self.amount: self.amount = -float(self.amount[1:-1]) else: self.amount = float(self.amount) class BowdstWire(Wire, 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"], wire_details=line["Transaction Description 1"] if line["Transaction Type Code"] == "CW" else line["Transaction Description 2"], unique_ref=line["Reference Number"], )