aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--python/Dawn/models.py8
-rw-r--r--python/Dawn/views.py14
-rw-r--r--python/process_queue.py6
-rw-r--r--sql/dawn.sql1
4 files changed, 23 insertions, 6 deletions
diff --git a/python/Dawn/models.py b/python/Dawn/models.py
index a80feae2..f650732e 100644
--- a/python/Dawn/models.py
+++ b/python/Dawn/models.py
@@ -139,8 +139,11 @@ class CDSDeal(db.Model):
lastupdate = db.Column(db.DateTime, server_default=db.func.now(), onupdate=db.func.now())
action = db.Column(ACTION)
folder = db.Column(CDS_STRAT, nullable=False)
- custodian = db.Column(db.String(12), default='SGFCM', nullable=False)
- cashaccount = db.Column(db.String(10), default='SGNSCLMASW', nullable=False)
+ account_code = db.Column(db.String(5), db.ForeignKey('accounts.code'),
+ info={'choices': [(None,'')],
+ 'label': 'fcm_account'}, nullable=False)
+ custodian = db.Column(db.String(12), default='NONE', nullable=False)
+ cashaccount = db.Column(db.String(10), default='V0NSCLMFCM', nullable=False)
cp_code = db.Column(db.String(12), db.ForeignKey('counterparties.code'),
info={'choices': [(None, '')],
'label': 'counterparty'}, nullable=False)
@@ -175,6 +178,7 @@ class CDSDeal(db.Model):
'label': 'termination_counterparty'})
counterparty = db.relationship(Counterparties, foreign_keys=[cp_code])
termination_counterparty = db.relationship(Counterparties, foreign_keys=[termination_cp])
+ fcm_account = db.relationship(Accounts, foreign_keys=[account_code])
__table_args__ = (db.CheckConstraint("swap_type!='CD_INDEX_TRANCHE' or " \
"(attach is not NULL and detach is not NULL AND " \
"clearing_facility is NULL)"),)
diff --git a/python/Dawn/views.py b/python/Dawn/views.py
index 90c807ef..dcc0e195 100644
--- a/python/Dawn/views.py
+++ b/python/Dawn/views.py
@@ -46,6 +46,11 @@ def cp_choices(kind='bond'):
def account_codes():
return Accounts.query.order_by('code').with_entities(Accounts.code, Accounts.name)
+def fcm_accounts():
+ return (Accounts.query.
+ order_by('code').
+ filter(Accounts.name.ilike('%FCM%')).
+ with_entities(Accounts.code, Accounts.name))
def get_queue():
q = getattr(g, 'queue', None)
@@ -97,7 +102,7 @@ class CDSForm(ModelForm):
model = CDSDeal
include_foreign_keys = True
exclude = ['dealid', 'lastupdate', 'termination_amount',
- 'termination_cp', 'termination_date']
+ 'termination_cp', 'termination_date', 'custodian', 'cashaccount']
class SwaptionForm(ModelForm):
@@ -172,6 +177,8 @@ def get_form(trade, kind):
form = Form(trade_date=today.date(),
effective_date=tomorrow.date(),
upfront_settle_date=today.date() + 3 * bus_day)
+ if kind == 'cds':
+ form.account_code.choices = fcm_accounts()
else:
form = Form(trade_date=today.date(),
settle_date=today.date() + 2 * bus_day)
@@ -309,12 +316,14 @@ def trade_manage(tradeid, kind):
form = _get_form(kind)()
form.cp_code.choices = form.cp_code.choices + list(cp_choices(kind))
+ form.account_code.choices = list(fcm_accounts())
if kind == 'bond':
old_ticket_name = trade.ticket
if kind == 'capfloor':
old_confirm = trade.trade_confirm
if form.validate_on_submit():
form.populate_obj(trade)
+ trade.cashaccount = trade.fcm_account.cash_account
session = form.get_session()
if not tradeid:
session.add(trade)
@@ -336,8 +345,11 @@ def trade_manage(tradeid, kind):
q.rpush(f'{kind}_trades', simple_serialize(trade))
return redirect(url_for('list_trades', kind=kind))
else:
+ if form.errors:
+ app.logger.error(form.errors)
form = get_form(trade, kind)
form.cp_code.choices = form.cp_code.choices + list(cp_choices(kind))
+ form.account_code.choices = list(fcm_accounts())
return render_template('trade_entry.html', form=form,
action_url=url_for('trade_manage', tradeid=tradeid, kind=kind))
diff --git a/python/process_queue.py b/python/process_queue.py
index 5b85892a..2e8910d6 100644
--- a/python/process_queue.py
+++ b/python/process_queue.py
@@ -261,11 +261,11 @@ def build_line(obj, queue_name='bond_trades'):
if obj['InitialMarginPercentage']:
obj['InitialMarginCurrency'] = obj['Currency']
if obj.get('AttachmentPoint') is None:
- obj['Counterparty'], obj['ExecutingBroker'] = 'SGFCM', obj['Counterparty']
+ obj['ExecutingBroker'] = obj['Counterparty']
+ obj['Counterparty'] = 'BOMLCM' if obj['account_code'] == 'BAML' else 'SGFCM'
if obj['Clearing Facility'] is None:
obj['Clearing Facility'] = 'NOT CLEARED'
- if obj['AttachmentPoint'] is not None:
- obj['Custodian'] = 'NONE'
+ obj['Custodian'] = 'NONE'
elif queue_name == 'future_trades':
obj['Deal Type'] = 'FutureDeal'
diff --git a/sql/dawn.sql b/sql/dawn.sql
index cdd66334..ab3476d2 100644
--- a/sql/dawn.sql
+++ b/sql/dawn.sql
@@ -140,6 +140,7 @@ CREATE TABLE cds(id serial primary key,
index_ref float DEFAULT NULL,
corr_attach float DEFAULT NULL,
corr_detach float DEFAULT NULL,
+ account_code varchar(5) NOT NULL,
CONSTRAINT tranche_check CHECK (swap_type != 'CD_INDEX_TRANCHE' OR
(attach IS NOT NULL AND detach IS NOT NULL AND
clearing_facility IS NULL))