diff options
Diffstat (limited to 'python/Dawn/views.py')
| -rw-r--r-- | python/Dawn/views.py | 65 |
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) |
