diff options
Diffstat (limited to 'python/Dawn')
| -rw-r--r-- | python/Dawn/views.py | 46 |
1 files changed, 44 insertions, 2 deletions
diff --git a/python/Dawn/views.py b/python/Dawn/views.py index 78333d6f..92bee0e5 100644 --- a/python/Dawn/views.py +++ b/python/Dawn/views.py @@ -1,6 +1,6 @@ from flask import (request, render_template, redirect, url_for, send_from_directory, send_file, g) -from .models import ModelForm, BondDeal, Counterparties +from .models import ModelForm, BondDeal, CDSDeal, Counterparties from sqlalchemy.exc import IntegrityError from wtforms.fields import BooleanField import pandas as pd @@ -8,7 +8,7 @@ from pandas.tseries.offsets import BDay import os import datetime import redis -from .utils import load_counterparties, load_trades, add_triggers, bump_rev, simple_serialize +from .utils import load_counterparties, bump_rev, simple_serialize from PyPDF2 import PdfFileMerger from io import BytesIO from Dawn import app @@ -40,6 +40,13 @@ class BondForm(ModelForm): exclude = ['dealid', 'lastupdate', #we generate it with a trigger at the server level 'principal_payment', 'accrued_payment'] +class CDSForm(ModelForm): + upload_globeop = BooleanField(label="Upload to globeop?") + class Meta: + model = CDSDeal + 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): @@ -87,11 +94,46 @@ def trade_manage(tradeid): return str(bond_form.errors) return render_template('trade_entry.html', form=bond_form, trade_id=tradeid) +@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: + cds_form = CDSForm(obj = trade) + else: + today = pd.datetime.today() + tomorrow = today + pd.DateOffset(1) + cds_form = CDSForm(trade_date = today.date(), + effective_date= tomorrow.date(), + upfront_settle_date = today.date() + 3 * BDay()) + 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) + finally: + if cds_form.upload_globeop.data: + q = get_queue() + q.rpush('cds_trades', simple_serialize(trade)) + return redirect(url_for('list_cds_trades')) + return render_template('cds_trade_entry.html', form=cds_form, trade_id=tradeid) + @app.route('/blotter/') def list_trades(): trade_list = BondDeal.query.order_by(BondDeal.trade_date.desc(), BondDeal.id.desc()) return render_template('blotter.html', trades=trade_list.all()) +@app.route('/cdsblotter') +def list_cds_trades(): + trade_list = CDSDeal.query.order_by(CDSDeal.trade_date.desc(), CDSDeal.id.desc()) + return render_template('cds_blotter.html', trades=trade_list.all()) + + @app.route('/tickets/<int:tradeid>') def download_ticket(tradeid): trade = BondDeal.query.get(tradeid) |
