aboutsummaryrefslogtreecommitdiffstats
path: root/python/Dawn/views.py
diff options
context:
space:
mode:
Diffstat (limited to 'python/Dawn/views.py')
-rw-r--r--python/Dawn/views.py65
1 files changed, 62 insertions, 3 deletions
diff --git a/python/Dawn/views.py b/python/Dawn/views.py
index 2d1d55d8..761fdd5b 100644
--- a/python/Dawn/views.py
+++ b/python/Dawn/views.py
@@ -1,6 +1,9 @@
from flask import (request, render_template, redirect,
url_for, send_from_directory, send_file, g, jsonify)
-from .models import ModelForm, BondDeal, CDSDeal, SwaptionDeal, FutureDeal, Counterparties
+from .models import (ModelForm,
+ BondDeal, CDSDeal, SwaptionDeal, FutureDeal, CashFlowDeal,
+ Counterparties, Accounts)
+
from sqlalchemy.exc import IntegrityError
from wtforms.fields import BooleanField
import pandas as pd
@@ -32,6 +35,9 @@ def cp_choices(kind='bond'):
filter(Counterparties.name.ilike('%CDS%')).
with_entities(Counterparties.code, Counterparties.name))
+def account_codes():
+ return Accounts.query.order_by('code').with_entities(Accounts.code, Accounts.code)
+
def get_queue():
q = getattr(g, 'queue', None)
if q is None:
@@ -90,6 +96,13 @@ class FutureForm(ModelForm):
include_foreign_keys = True
exclude = ['dealid', 'lastupdate']
+class WireForm(ModelForm):
+ upload_globeop = BooleanField(label="Upload to globeop?")
+ class Meta:
+ model = CashFlowDeal
+ include_foreign_keys = True
+ exclude = ['dealid', 'lastupdate']
+
def get_deal(kind):
if kind == 'cds':
return CDSDeal
@@ -139,10 +152,21 @@ def get_form(trade, kind):
continue
return form
+def get_wire_form(wire):
+ if wire.id:
+ return WireForm(obj=trade)
+ else:
+ today = pd.datetime.today()
+ form = WireForm(trade_date=today.date())
+ return form
+
def get_trade(tradeid, kind):
Deal = get_deal(kind)
return Deal.query.get(tradeid) if tradeid else Deal()
+def get_wire(wiredid):
+ CashFlowDeal.query.get(wireid)
+
def save_ticket(trade, old_ticket_name):
if trade.ticket:
if old_ticket_name:
@@ -156,6 +180,39 @@ def save_ticket(trade, old_ticket_name):
else:
trade.ticket = old_ticket_name
+@app.route('/wires/<int:wire_id>', methods = ['GET', 'POST'])
+@app.route('/wires/', defaults = {'wire_id': None}, methods = ['GET', 'POST'])
+def wire_manage(wire_id):
+ if wire_id is None:
+ wire = CashFlowDeal()
+ else:
+ wire = CashFlowDeal().query.get(wire_id)
+ form = WireForm()
+ form.code.choices = form.code.choices + list(account_codes())
+ if form.validate_on_submit():
+ form.populate_obj(wire)
+ session = form.get_session()
+ if not wire_id:
+ session.add(wire)
+ try:
+ session.commit()
+ except IntegrityError as e:
+ app.logger.error(e)
+ session.rollback()
+ return render_template('wire_entry.html', form=form,
+ action_url=
+ url_for('wire_manage', wire_id=wire_id))
+ else:
+ if form.upload_globeop.data:
+ q = get_queue()
+ q.rpush('wires', simple_serialize(wire))
+ return redirect(url_for('list_trades'))
+ else:
+ form = get_wire_form(wire)
+ form.code.choices = form.code.choices + list(account_codes())
+ return render_template('wire_entry.html', form=form,
+ action_url = url_for('wire_manage', wire_id=wire_id))
+
@app.route('/trades/<kind>/<int:tradeid>', methods = ['GET', 'POST'])
@app.route('/trades/<kind>/', defaults = {'tradeid': None}, methods = ['GET', 'POST'])
@app.route('/trades/', defaults = {'tradeid': None, 'kind': 'bond'}, methods = ['GET', 'POST'])
@@ -196,11 +253,13 @@ def trade_manage(tradeid, kind):
@app.route('/blotter/<kind>')
@app.route('/blotter/', defaults={'kind': 'bond'})
def list_trades(kind):
- Deal = get_deal(kind)
+ if kind == 'wire':
+ Deal = CashFlowDeal()
+ else:
+ Deal = get_deal(kind)
trade_list = Deal.query.order_by(Deal.trade_date.desc(), Deal.id.desc())
return render_template('{}_blotter.html'.format(kind), trades=trade_list.all())
-
@app.route('/tickets/<int:tradeid>')
def download_ticket(tradeid):
trade = BondDeal.query.get(tradeid)