aboutsummaryrefslogtreecommitdiffstats
path: root/python
diff options
context:
space:
mode:
Diffstat (limited to 'python')
-rw-r--r--python/citco_submission.py38
-rw-r--r--python/trade_dataclasses.py13
2 files changed, 41 insertions, 10 deletions
diff --git a/python/citco_submission.py b/python/citco_submission.py
index 2be5e629..511c1c51 100644
--- a/python/citco_submission.py
+++ b/python/citco_submission.py
@@ -62,23 +62,33 @@ def trade_table(trade_id):
return "bonds"
-def update_instrument(conn, instrument_id):
+def update_instrument(conn, instrument_id, identifier):
table = instrument_table(instrument_id)
- sql = f"UPDATE {table} SET committed=True where dealid=%s"
+ instrument_table_sql = f"UPDATE {table} SET committed=True where dealid=%s"
+ submission_sql = f"UPDATE citco_submission_status SET committed=True, identifier=%s where serenitas_id=%s and identifier is NULL and identifier_type='instrument'"
with conn.cursor() as c:
- c.execute(sql, (instrument_id,))
+ c.execute(instrument_table_sql, (instrument_id,))
+ c.execute(
+ submission_sql,
+ (
+ identifier,
+ instrument_id,
+ ),
+ )
+ conn.commit()
def update_trade(conn, trade_id, identifier):
- sql = f"UPDATE citco_trade_submission SET committed=True and identifier=%s where dealid=%s and identifier is NULL"
+ submission_sql = f"UPDATE citco_submission_status SET committed=True, identifier=%s where serenitas_id=%s and identifier is NULL and identifier_type='trade'"
with conn.cursor() as c:
c.execute(
- sql,
+ submission_sql,
(
- trade_id,
identifier,
+ trade_id,
),
)
+ conn.commit()
def parse_errors(fh):
@@ -91,20 +101,25 @@ def parse_errors(fh):
return errors
-def sql_data_process(conn, line):
+def get_data(line):
if line["Internal_Order_Id"]: # This is a trade
identifier_type = "trade"
serenitas_id = line["External_Order_Id"]
identifier = line["Internal_Order_Id"]
- update_trade(conn, serenitas_id, identifier)
else:
identifier_type = "instrument"
serenitas_id = line["External_Security_Id"]
identifier = line["Internal_Security_Id"]
- update_instrument(conn, serenitas_id)
return identifier_type, serenitas_id, identifier
+def update_submission_table(conn, identifier_type, serenitas_id, identifier):
+ if identifier_type == "trade":
+ update_trade(conn, serenitas_id, identifier)
+ else:
+ update_instrument(conn, serenitas_id, identifier)
+
+
def run():
from lru import LRU
@@ -128,7 +143,7 @@ def run():
identifier_type,
serenitas_id,
identifier,
- ) = sql_data_process(conn, line)
+ ) = get_data(line)
_insert_queue.append(
[
fname_short,
@@ -138,6 +153,9 @@ def run():
]
)
if resp := insert_todb(conn, _insert_queue):
+ update_submission_table(
+ conn, identifier_type, serenitas_id, identifier
+ )
em.send_email(
subject=f"(CITCO) Successfully Processed {f.filename}",
body="",
diff --git a/python/trade_dataclasses.py b/python/trade_dataclasses.py
index aadec798..588a5e80 100644
--- a/python/trade_dataclasses.py
+++ b/python/trade_dataclasses.py
@@ -432,6 +432,7 @@ class MTMDeal:
class Citco:
_citco_headers = []
_citco_sftp = SftpClient.from_creds("citco")
+ _submission_queue = []
@classmethod
def citco_upload(cls):
@@ -446,6 +447,10 @@ class Citco:
h["ExecTransType"] = 2 if h["OrdStatus"] == "N" else 0
h["Fund"] = "ISOSEL"
h["SettleCurrency"] = "USD"
+ identifier = (
+ "instrument" if cls.file_tag == "i.innocap_serenitas." else "trade"
+ )
+ cls._submission_queue.append([h["ClientOrderID"], "NEW", identifier])
######
csvwriter.writerows(
@@ -454,6 +459,7 @@ class Citco:
buf = buf.getvalue().encode()
cls._citco_sftp.client.chdir("/incoming")
cls._citco_sftp.put(buf, cls.fname())
+ cls.submission_commit()
dest = DAILY_DIR / str(datetime.date.today()) / cls.fname()
dest.write_bytes(buf)
cls._citco_queue.clear()
@@ -465,6 +471,13 @@ class Citco:
def fname(cls):
return f"{cls.file_tag}{datetime.datetime.now():%Y%m%d%H%M%S}.csv"
+ @classmethod
+ def submission_commit(cls):
+ sql_str = "INSERT INTO citco_submission_status (serenitas_id, action, identifier_type) VALUES (%s, %s, %s) "
+ with cls._conn.cursor() as c:
+ c.executemany(sql_str, cls._submission_queue)
+ cls._conn.commit()
+
class CitcoProduct(Citco):
_citco_queue: ClassVar[list] = []