aboutsummaryrefslogtreecommitdiffstats
path: root/python/Dawn
diff options
context:
space:
mode:
Diffstat (limited to 'python/Dawn')
-rw-r--r--python/Dawn/templates/blotter.html2
-rw-r--r--python/Dawn/templates/cds_blotter.html2
-rw-r--r--python/Dawn/templates/cds_trade_entry.html45
-rw-r--r--python/Dawn/templates/trade_entry.html13
-rw-r--r--python/Dawn/views.py120
5 files changed, 71 insertions, 111 deletions
diff --git a/python/Dawn/templates/blotter.html b/python/Dawn/templates/blotter.html
index 96d28f79..1016f0ef 100644
--- a/python/Dawn/templates/blotter.html
+++ b/python/Dawn/templates/blotter.html
@@ -20,7 +20,7 @@
</thead>
{% for trade in trades %}
<tr>
- <td><a href="{{url_for('trade_manage', tradeid=trade.id)}}">{{trade.dealid}}</a></td>
+ <td><a href="{{url_for('trade_manage', tradeid=trade.id, kind='bond')}}">{{trade.dealid}}</a></td>
<td>{{trade.trade_date}}</td>
<td>{{trade.settle_date}}</td>
<td>{% if trade.buysell %}Buy{% else %}Sell{% endif %}</td>
diff --git a/python/Dawn/templates/cds_blotter.html b/python/Dawn/templates/cds_blotter.html
index f0ce8d44..afa22586 100644
--- a/python/Dawn/templates/cds_blotter.html
+++ b/python/Dawn/templates/cds_blotter.html
@@ -17,7 +17,7 @@
</thead>
{% for trade in trades %}
<tr>
- <td><a href="{{url_for('cds_trade_manage', tradeid=trade.id)}}">{{trade.dealid}}</a></td>
+ <td><a href="{{url_for('trade_manage', tradeid=trade.id, kind='cds')}}">{{trade.dealid}}</a></td>
<td>{{trade.trade_date}}</td>
<td>{{trade.protection}}</td>
<td>{{trade.security_desc}}</td>
diff --git a/python/Dawn/templates/cds_trade_entry.html b/python/Dawn/templates/cds_trade_entry.html
deleted file mode 100644
index 84971a29..00000000
--- a/python/Dawn/templates/cds_trade_entry.html
+++ /dev/null
@@ -1,45 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
- <head>
- <meta charset="utf-8">
- <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.4/css/bootstrap.min.css">
- </head>
- <body style="max-width:1024px; margin:0 auto">
- <datalist id="index_list"></datalist>
- <form method="POST" class="form-horizontal"
- action="{{url_for('cds_trade_manage', tradeid=trade_id)}}" enctype="multipart/form-data">
- {% for field in form if field.type != 'BooleanField' %}
- <div class="form-group {% if field.id in errors %}has-error{% endif %}">
- {% if field.type != 'CSRFTokenField' %}
- <label class="control-label col-md-2" for="{{ field.id }}">
- {{ field.label.text }}
- </label>
- {% endif %}
- <div class="col-md-3">
- {{ field(class_="form-control") }}
- </div>
- {% if field.id in errors %}
- <div class="col-md-3">
- {{errors[field.id][0]}}
- </div>{% endif %}
- </div>
- {% endfor %}
- <div class="form-group">
- <div class="col-md-offset-2 col-md-3">
- <div class="checkbox">
- <label>
- <input id="upload_globeop" name="upload_globeop" type="checkbox" value="y">Upload to globeop?
- </label>
- </div>
- </div>
- </div>
- <div class="form-group">
- <div class="col-md-offset-2 col-md-3">
- <button type="submit" class="btn btn-default">Submit</button>
- </div>
- </div>
- </form>
- <script type="text/javascript" src="{{ url_for('static', filename='utils.js') }}"></script>
- <script type="text/javascript" src="{{ url_for('static', filename='dawn.js') }}"></script>
- </body>
-</html>
diff --git a/python/Dawn/templates/trade_entry.html b/python/Dawn/templates/trade_entry.html
index abc59550..303a7423 100644
--- a/python/Dawn/templates/trade_entry.html
+++ b/python/Dawn/templates/trade_entry.html
@@ -5,10 +5,11 @@
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.4/css/bootstrap.min.css">
</head>
<body style="max-width:1024px; margin:0 auto">
+ <datalist id="index_list"></datalist>
<form method="POST" class="form-horizontal"
- action="{{url_for('trade_manage', tradeid=trade_id)}}" enctype="multipart/form-data">
+ action="{{action_url}}" enctype="multipart/form-data">
{% for field in form if field.type != 'BooleanField' %}
- <div class="form-group">
+ <div class="form-group {% if field.id in form.errors %}has-error{% endif %}">
{% if field.type != 'CSRFTokenField' %}
<label class="control-label col-md-2" for="{{ field.id }}">
{{ field.label.text }}
@@ -17,6 +18,10 @@
<div class="col-md-3">
{{ field(class_="form-control") }}
</div>
+ {% if field.id in form.errors %}
+ <div class="col-md-3">
+ {{form.errors[field.id][0]}}
+ </div>{% endif %}
</div>
{% endfor %}
<div class="form-group">
@@ -34,5 +39,9 @@
</div>
</div>
</form>
+ {% if 'cds' in action_url %}
+ <script type="text/javascript" src="{{ url_for('static', filename='utils.js') }}"></script>
+ <script type="text/javascript" src="{{ url_for('static', filename='dawn.js') }}"></script>
+ {% endif %}
</body>
</html>
diff --git a/python/Dawn/views.py b/python/Dawn/views.py
index 5f267f1b..c36007be 100644
--- a/python/Dawn/views.py
+++ b/python/Dawn/views.py
@@ -67,13 +67,15 @@ class CDSForm(ModelForm):
include_foreign_keys = True
exclude = ['dealid', 'lastupdate']
-@app.route('/trades/<int:tradeid>', methods=['GET', 'POST'])
-@app.route('/trades/', defaults={'tradeid': None}, methods=['GET', 'POST'])
-def trade_manage(tradeid):
- trade = BondDeal.query.get(tradeid) if tradeid else BondDeal()
- if tradeid:
+def cds_trade(tradeid):
+ return CDSDeal.query.get(tradeid) if tradeid else CDSDeal()
+
+def bond_trade(tradeid):
+ return BondDeal.query.get(tradeid) if tradeid else BondDeal()
+
+def bond_form(trade):
+ if trade.id:
bond_form = BondForm(obj = trade)
- old_ticket_name = trade.ticket
else:
bond_form = BondForm(trade_date = pd.datetime.today().date(),
settle_date = pd.datetime.today().date() + 3 * bus_day)
@@ -81,44 +83,10 @@ def trade_manage(tradeid):
bond_form.folder.choices = [(None, '')] + bond_form.folder.choices
bond_form.buysell.choices = [(None, '')] + bond_form.buysell.choices
bond_form.asset_class.choices = [(None, '')] + bond_form.asset_class.choices
- bond_form.cp_code.choices = bond_form.cp_code.choices + list(cp_choices())
- if bond_form.is_submitted():
- if bond_form.validate():
- bond_form.populate_obj(trade)
- session = bond_form.get_session()
- ticket_file = trade.ticket
- trade.ticket = None
- if not tradeid:
- session.add(trade)
- if ticket_file.filename == '':
- if tradeid:
- trade.ticket = old_ticket_name
- else:
- if tradeid and old_ticket_name:
- trade.ticket = bump_rev(old_ticket_name)
- else:
- trade.ticket = "{0} {1}.pdf".format(str(trade.trade_date),
- trade.description)
- ticket_file.save(os.path.join(app.config['TICKETS_FOLDER'],
- trade.ticket))
- try:
- session.commit()
- except IntegrityError as e:
- app.logger.error(e)
- else:
- if bond_form.upload_globeop.data:
- q = get_queue()
- q.rpush('bond_trades', simple_serialize(trade))
- return redirect(url_for('list_trades'))
- else:
- return str(bond_form.errors)
- return render_template('trade_entry.html', form=bond_form, trade_id=tradeid)
+ return bond_form
-@app.route('/cdstrades/<int:tradeid>', methods=['GET', 'POST'])
-@app.route('/cdstrades/', defaults={'tradeid': None}, methods=['GET', 'POST'])
-def cds_trade_manage(tradeid):
- trade = CDSDeal.query.get(tradeid) if tradeid else CDSDeal()
- if tradeid:
+def cds_form(trade):
+ if trade.id:
cds_form = CDSForm(obj = trade)
else:
today = pd.datetime.today()
@@ -126,29 +94,57 @@ def cds_trade_manage(tradeid):
cds_form = CDSForm(trade_date = today.date(),
effective_date= tomorrow.date(),
upfront_settle_date = today.date() + 3 * bus_day)
- cds_form.cp_code.choices = cds_form.cp_code.choices + list(cp_choices())
- if cds_form.is_submitted():
- if cds_form.validate():
- cds_form.populate_obj(trade)
- session = cds_form.get_session()
- if not tradeid:
- session.add(trade)
- try:
- session.commit()
- except IntegrityError as e:
- app.logger.error(e)
- else:
- if cds_form.upload_globeop.data:
- q = get_queue()
- q.rpush('cds_trades', simple_serialize(trade))
- return redirect(url_for('list_cds_trades'))
+ return cds_form
+
+def save_ticket(trade, old_ticket_name):
+ if trade.ticket.filename:
+ if old_ticket_name:
+ new_name = bump_rev(old_ticket_name)
+ else:
+ new_name = "{0} {1}.pdf".format(str(trade.trade_date),
+ trade.description)
+ trade.ticket.save(os.path.join(app.config['TICKETS_FOLDER'],
+ new_name))
+ trade.ticket = new_name
+ else:
+ trade.ticket = old_ticket_name
+
+@app.route('/trades/<int:tradeid>', defaults={'kind': 'bond'}, methods=['GET', 'POST'])
+@app.route('/trades/', defaults={'tradeid': None, 'kind': 'bond'}, methods=['GET', 'POST'])
+@app.route('/cdstrades/<int:tradeid>', defaults={'kind': 'cds'}, methods=['GET', 'POST'])
+@app.route('/cdstrades/', defaults={'tradeid': None, 'kind': 'cds'}, methods=['GET', 'POST'])
+def trade_manage(tradeid, kind):
+ trade = globals()['{0}_trade'.format(kind)](tradeid)
+ form = globals()['{0}_form'.format(kind)](trade)
+ if kind=='bond':
+ old_ticket_name = trade.ticket
+ form.cp_code.choices = form.cp_code.choices + list(cp_choices())
+ if form.validate_on_submit():
+ form.populate_obj(trade)
+ session = form.get_session()
+ if not tradeid:
+ session.add(trade)
+ if kind == 'bond':
+ save_ticket(trade, old_ticket_name)
+ try:
+ session.commit()
+ except IntegrityError as e:
+ app.logger.error(e)
+ session.rollback()
+ return render_template('trade_entry.html', form = form,
+ action_url =
+ url_for('trade_manage', tradeid = tradeid, kind = kind))
else:
- return render_template('cds_trade_entry.html', form=cds_form, trade_id = None, errors = cds_form.errors)
- return render_template('cds_trade_entry.html', form=cds_form, trade_id=tradeid)
+ if form.upload_globeop.data:
+ q = get_queue()
+ q.rpush('{0}_trades',format(kind), simple_serialize(trade))
+ return redirect(url_for('list_{0}_trades'.format(kind)))
+ return render_template('trade_entry.html', form=form,
+ action_url = url_for('trade_manage', tradeid = tradeid, kind = kind))
@app.route('/')
@app.route('/blotter/')
-def list_trades():
+def list_bond_trades():
trade_list = BondDeal.query.order_by(BondDeal.trade_date.desc(), BondDeal.id.desc())
return render_template('blotter.html', trades=trade_list.all())