diff options
Diffstat (limited to 'python')
| -rw-r--r-- | python/citco_submission.py | 38 | ||||
| -rw-r--r-- | python/trade_dataclasses.py | 13 |
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] = [] |
